From df16a13c672ac360112b5b9e80fb46b72d266bf7 Mon Sep 17 00:00:00 2001 From: Yvan Tortorella Date: Fri, 23 Jun 2023 21:55:32 +0200 Subject: [PATCH 01/71] Working matmul with cluster_it != 0 --- parallel_bare_tests/parMatrixMul/parMatrixMul.c | 13 +++++-------- parallel_bare_tests/parMatrixMul/test.ini~ | 6 ------ 2 files changed, 5 insertions(+), 14 deletions(-) delete mode 100644 parallel_bare_tests/parMatrixMul/test.ini~ diff --git a/parallel_bare_tests/parMatrixMul/parMatrixMul.c b/parallel_bare_tests/parMatrixMul/parMatrixMul.c index 78a3239..8dce6bb 100644 --- a/parallel_bare_tests/parMatrixMul/parMatrixMul.c +++ b/parallel_bare_tests/parMatrixMul/parMatrixMul.c @@ -29,9 +29,9 @@ #define CHKSM 88408 #endif -__attribute__ ((section(".heapsram"))) int A[SIZE][SIZE]; -__attribute__ ((section(".heapsram"))) int B[SIZE][SIZE]; -__attribute__ ((section(".heapsram"))) int C[SIZE][SIZE]; +__attribute__ ((section("__heap_sram"))) int A[SIZE][SIZE]; +__attribute__ ((section("__heap_sram"))) int B[SIZE][SIZE]; +__attribute__ ((section("__heap_sram"))) int C[SIZE][SIZE]; void initialize_mat(); @@ -57,9 +57,6 @@ testcase_t testcases[] = { int main() { - if (rt_cluster_id() != 0) - return bench_cluster_forward(0); - int nbErrors = run_suite(testcases); synch_barrier(); @@ -85,9 +82,9 @@ void matrix_multiplication(testresult_t *result, void (*start)(), void (*stop)() lb = coreid * chunk; //upper bound ub = lb + chunk; - + synch_barrier(); - + /********************* Benchmark Execution *********************/ if (coreid Date: Mon, 26 Jun 2023 16:20:03 +0200 Subject: [PATCH 02/71] Fixed header file generator and source code. --- .../parMatrixMul32/gen_stimuli.py | 10 +- .../parMatrixMul32/matrixMul.c | 2 +- .../parMatrixMul32/parMatrixMul32_stimuli.h | 4745 ++++++----------- 3 files changed, 1697 insertions(+), 3060 deletions(-) diff --git a/parallel_bare_tests/parMatrixMul32/gen_stimuli.py b/parallel_bare_tests/parMatrixMul32/gen_stimuli.py index d9d9697..3ce5002 100755 --- a/parallel_bare_tests/parMatrixMul32/gen_stimuli.py +++ b/parallel_bare_tests/parMatrixMul32/gen_stimuli.py @@ -15,7 +15,7 @@ def write_arr(f, name, arr): f = open('parMatrixMul32_stimuli.h', 'w') -SIZE = 32 +SIZE = 24 RANGE = 2**15/SIZE m_a = [] @@ -47,8 +47,8 @@ def write_arr(f, name, arr): f.write('#define SIZE %d\n' % SIZE) -f.write('__attribute__ ((section(".heapsram"))) int g_mA[SIZE][SIZE];\n') -f.write('__attribute__ ((section(".heapsram"))) int g_mB[SIZE][SIZE];\n') -f.write('__attribute__ ((section(".heapsram"))) int g_mC[SIZE][SIZE];\n') -f.write('__attribute__ ((section(".heapsram"))) int g_mB_tmp[SIZE][SIZE];\n') +f.write('__attribute__ ((section("__heap_sram"))) int g_mA[SIZE][SIZE];\n') +f.write('__attribute__ ((section("__heap_sram"))) int g_mB[SIZE][SIZE];\n') +f.write('__attribute__ ((section("__heap_sram"))) int g_mC[SIZE][SIZE];\n') +f.write('__attribute__ ((section("__heap_sram"))) int g_mB_tmp[SIZE][SIZE];\n') diff --git a/parallel_bare_tests/parMatrixMul32/matrixMul.c b/parallel_bare_tests/parMatrixMul32/matrixMul.c index 990d411..3fd64b9 100644 --- a/parallel_bare_tests/parMatrixMul32/matrixMul.c +++ b/parallel_bare_tests/parMatrixMul32/matrixMul.c @@ -35,7 +35,7 @@ unsigned int num_cores; int main() { - if (rt_cluster_id() != 0) + if (rt_cluster_id() != 1) return bench_cluster_forward(0); num_cores = get_core_num(); diff --git a/parallel_bare_tests/parMatrixMul32/parMatrixMul32_stimuli.h b/parallel_bare_tests/parMatrixMul32/parMatrixMul32_stimuli.h index dc0adbd..9ebc42a 100644 --- a/parallel_bare_tests/parMatrixMul32/parMatrixMul32_stimuli.h +++ b/parallel_bare_tests/parMatrixMul32/parMatrixMul32_stimuli.h @@ -1,3105 +1,1742 @@ -/* - * Copyright (C) 2018 ETH Zurich and University of Bologna - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -/* - * Mantainer: Luca Valente, luca.valente2@unibo.it - */ const int m_a[] = { -830, --456, --926, --662, -135, --922, --509, -995, -818, -595, -135, --639, --371, --234, -842, --1020, --130, -949, --174, -137, --916, -179, -576, --253, -133, -7, --121, -920, -775, --22, -7, -138, -445, --308, -283, -657, -33, --482, -948, --352, -471, --40, -498, -728, --399, --636, -50, -796, --35, -1011, --970, --619, -411, --959, --152, -40, -624, -1016, -10, --631, --833, -621, --795, --66, -222, -872, --149, --952, --71, -404, --373, -811, -267, -763, --662, --953, -663, --381, -724, -35, -141, -969, -741, -204, --653, --920, --661, --770, --237, -309, -877, --969, --372, --663, --460, -711, -663, --517, --241, +-1344, +-778, +-350, +1240, +950, +940, +1262, +285, +738, +-37, +257, 704, --557, --791, -852, --248, -640, --454, --995, --362, -99, -465, --974, -546, --192, -411, -399, --653, -367, --964, --890, --617, --322, --916, --181, --781, --892, -496, --376, -996, --446, -490, -397, +87, +-1135, +1175, +960, +984, +611, +-1170, +1243, +-729, +-1235, +-1229, +8, +52, +1156, +-804, +-129, +-112, +-307, +1045, +-954, +-944, +477, +1104, +-600, -31, --233, --293, -568, --819, --668, --352, -917, -920, -581, --533, -437, --243, -465, -230, -729, --509, -259, --885, -206, --854, -520, -240, -707, --652, --342, --574, -467, -524, -698, +1364, +-950, +-153, +967, +-446, +235, +-197, +763, -660, -947, --1, --908, -220, -988, --803, +-1289, +116, +-458, +994, +1086, +156, +-549, +102, -532, -474, -168, --124, --210, -454, -886, --893, --285, --1007, --866, -263, -369, -885, --24, --1015, -496, --283, -222, -199, --698, -279, -68, --229, -941, -677, --806, --913, -558, -652, -629, --338, --959, -468, --336, --351, --789, --665, -716, --582, --508, --489, --119, -717, -269, --322, -68, -400, -880, -4, --33, -384, --537, -720, --653, -269, --492, -281, --873, --224, --289, -466, --202, --105, --223, -137, --283, --796, -105, --528, --107, --640, -507, -481, -572, --411, -720, -163, --537, --698, --154, -88, -765, -701, -925, --634, -751, -304, --837, -2, --691, -307, -626, --717, --858, --441, -79, +943, +299, +340, +516, +1117, 515, -783, -250, -946, -934, -151, --385, --788, --102, --818, --422, --728, -739, -822, -254, --330, -836, --200, -733, --537, --724, --824, --472, -322, --995, --763, --214, -774, -713, --266, -301, -699, -458, --1004, -301, -425, -386, -787, -436, -60, -614, --162, --900, -657, --970, -495, -830, --620, --411, --982, -842, -502, -44, --78, -740, -699, --307, -894, -915, -524, -731, -687, -769, --718, -825, -508, -952, --68, -733, -305, --505, -667, -675, -855, -221, --510, --164, -731, --497, -247, -37, --269, -858, --664, --523, --449, -772, -205, --350, --286, --871, -448, --91, -350, --182, -233, --870, -884, -885, -826, -532, -429, -591, --238, --435, -71, -661, -192, -982, --937, -282, -939, -107, --648, --237, -212, -748, -912, --76, --20, --304, --175, --390, --878, --360, --476, -439, -558, -552, --510, --120, --106, --959, --575, -505, --829, -16, -734, --882, -848, -864, --653, -905, -751, --304, -64, --262, -715, -281, -585, -65, -100, --579, -678, -425, -883, --198, -482, --508, -477, -1010, -783, --36, -737, --702, --171, -59, -773, --348, --573, --275, --415, --967, -468, --544, --655, --200, +1335, +708, +-306, +-589, +517, +655, +-279, +-595, -255, --598, +-1104, +-16, +507, +199, +-297, +-905, +-1084, +982, +20, +-1364, +407, +333, +-798, +-711, +1301, +175, +490, +-165, +-1097, +1251, +1203, +-884, +419, +-1262, -950, -229, -790, -892, --795, --71, --693, --615, -562, --326, --545, -226, -255, -840, --202, --160, -891, +-1200, +759, +-205, +-1365, +-870, +109, +-1135, +36, +796, +-1233, +-1117, +-826, +241, +588, +-513, +-353, 791, --669, --195, --733, -372, -937, -208, -970, -814, -45, -57, -943, -439, -763, --132, -83, --324, -857, --846, -810, --832, -251, --866, --129, --118, -574, -102, --141, -342, --478, -733, -611, --843, -975, -270, --638, --692, --618, -388, --434, -488, --1009, --237, -566, -925, --596, -640, -378, --30, --267, -299, --260, --134, -615, --628, +1071, +-1073, +220, +-1094, +1096, +-723, +280, +-505, +151, +399, +319, +-1120, +-213, -966, --436, --111, -34, --4, -687, -133, --666, -167, --1012, -422, -361, +679, +497, +-290, +-300, +-290, +-599, +243, +-752, 604, -836, -190, --939, -564, -137, --563, -397, -692, +1196, +-715, +-177, +-329, +1337, +596, +1027, +509, +-301, +-1211, +-936, +-281, +446, +-356, +841, +-1123, +-1343, +-140, +-1300, +-828, +-237, +1206, +1274, +-1092, +-922, +913, +1201, +-422, +782, +-230, +633, +-1055, +-1160, +329, +1255, +1038, +770, +123, 934, -907, --182, --539, -974, -176, -988, -24, -12, --739, --236, --851, --509, -814, --523, -654, --350, --320, --395, --863, -130, --725, -117, --788, --822, --909, -812, -534, +670, +-492, +-24, +-779, +-1129, +47, +555, +1214, -232, -1009, --583, --455, --257, -791, -971, -53, -837, -423, -527, -889, --378, --39, --572, -713, --588, -862, --608, -364, -46, -476, -928, -392, --819, --805, --377, --684, -234, -263, --245, --461, -23, -226, -504, --167, -74, -794, -1022, -464, -538, +-716, +-322, +-126, +178, +827, +710, +-1057, +-313, +996, +1149, +-532, +570, +1171, +899, +-313, +-790, +1071, +154, +-303, +492, +-918, +-1139, +292, +129, +1347, +-309, +751, +1262, +142, +-1062, +-1305, +250, +657, +238, +-141, +1308, +-37, +-514, +-591, +-611, +852, +-653, +-640, +91, +254, +-1145, +-1263, +-838, +-10, +266, +-444, +1129, +762, -713, -748, -332, -246, --969, --293, -77, -43, --940, --977, --170, --203, -274, --20, --467, --820, -315, -461, -291, -953, +-326, +-88, +1063, +-442, +-177, +365, +-740, +-1219, +1085, +783, +-725, +-1112, +426, +660, +6, +-440, +513, +687, +1078, +212, +-434, +-953, +1337, +160, +622, +-950, +-943, +288, +-136, +-1103, +-223, +1271, +211, 251, +-271, +-26, +704, +1177, +544, +699, -885, -1001, -413, -591, -684, -698, --701, -553, --808, --799, --42, --148, --512, --71, -742, -193, --778, -38, -14, --360, --172, -461, -94, -873, -777, --516, --236, -487, -923, --148, --611, --555, -457, -600, -867, --135, --487, -221, -563, --847, --636, --237, --735, --994, -281, -862, -506, --996, --613, --551, --606, -733, --338, --643, -536, -513, -285, -497, -99, --439, --258, --609, --712, -740, --200, -910, --845, -833, --242, --637, --780, --137, --155, -263, --895, +-864, +-1280, 877, --95, -453, -777, --196, -576, -93, --556, --71, --241, -987, -1012, -117, --149, --940, --790, -330, --559, --170, -136, --26, --227, -153, --937, -161, --954, --996, --725, -242, --369, -672, -474, --181, -856, -863, --419, --279, --1009, -8, --695, --834, -437, --611, --34, +-461, +995, +-623, +-121, +-146, +-484, +-225, +-978, +163, +-278, +-502, +-505, +-567, +-771, +1279, +699, +-1337, +544, +1145, +1271, +640, +277, +-164, +458, +-1280, +-602, +-2, +1136, +1203, +-699, +-195, +659, +-472, +1230, +1151, -97, -637, -17, --208, -288, --826, --29, --828, -777, --490, -240, -244, --436, --636, --413, --730, --426, --547, --135, -453, -930, -357, --926, --448, -96, --672, --1003, -644, -172, -938, -189, --892, --628, +-77, +-772, +-381, +-295, +636, +-1341, +-445, -806, -673, --430, -684, -291, -625, -161, --935, --275, -840, -944, -886, --28, -348, --947, -431, --96, --638, -500, --163, -1022, --775, --641, --42, --90, --192, -568, --845, -748, --95, --625, --426, -656, --48, -895, -791, -1009, --830, --442, -406, -771, -941, -337, -603, --601, -712, -844, --611, --649, --163, --911, -833, -284, --591, --574, --653, --454, --731, --784, --511, --1005, -831, -900, --878, -544, --592, -717, -722, -460, --76, --572, -726, -306, -990, -931, -320, --513, --920, --578, +531, +-1186, +-1313, +-274, +835, +-446, +558, +-1307, +-235, +43, +-254, +-109, +911, +-1189, +559, +-854, +-218, 149, -115, --961, -584, -796, -577, --850, -973, --661, --935, --249, -134, --942, --19, -269, -972, --810, --678, -976, -991, -488, --300, --295, -573, -403, -590, --518, -341, -135, -710, --381, -807, -668, --300, -828, --205, --710, -498, --786, --657, -152, -413, -97, -261, -784, -289, --936, --858, -119, --72, -702, --2, --437, -147, --968, --932, --463, --880, -938, --574, --177, +580, +1158, +-14, +181, +-1120, +-947, +-542, +1142, +631, +-893, +-614, +-257, +-365, +-951, +1, +-762, +268, +382, +-131, +808, +-234, +839, +346, +-733, +1251, +496, +-566, +-751, +581, +-1292, +1068, -932, -521, -333, -713, -855, --549, -585, --672, -29, -739, -115, --875, --140, --812, --30, --898, --528, --1012, --534, -585, --419, -273, --551, --452, -642, -836, -881, -235, --450, --1009, --480, --508, -844, -755, --851, --28, --363, --727, -590, --111, --764, --364, --167, --409, -291, --253, --718, --943, --47, -755, -316, --1012, --456, -212, -19, -358, --732, -665, -659, -445, -706, --723, --471, -266, -740, --207, --164, -446, -418, -482, -986, --382, -126, --920, -260, --488, -929, -515, -969, --725, --57, --106, --146, --454, -58, -706, --297, --233, -262, --749, --498, +1336, +-280, +523, +1294, +-1251, +1284, +-1276, +87, +1264, +-274, +-922, +-289, +-458, +-117, +196, +-79, +-707, +1233, +-385, +-620, +-617, +703, +-995, +-374, 660, --657, --279, -136, -401, --330, -569, --159, -774, -816, -484, --333, -642, --460, -}; - -const int m_b[] = { -739, --691, --674, --272, -816, --147, -760, --56, -581, --550, -763, -539, -251, --2, --701, -579, --53, --241, -699, -831, -752, -505, -715, --131, -24, --268, -778, -921, -368, --430, --711, --781, -678, --746, --755, -222, -477, --568, -140, -201, --696, --992, +145, +821, +1289, +582, -201, -964, --784, --532, --863, -1014, --642, -6, -589, -924, -662, -238, -485, -859, -808, -841, --192, -91, -42, -45, -355, -293, --182, -34, --883, -915, --414, -736, -613, -418, --202, -437, --229, --564, --250, --125, --233, --397, -331, 447, --41, -975, -853, -573, --475, --79, --932, -37, --367, --244, -300, -5, --188, -595, -934, -122, --76, --446, -703, --68, -214, -963, --160, -529, -98, -616, -161, -476, --808, -262, -49, -646, --647, --835, --706, -697, --26, --858, -496, -452, -875, -479, -73, --387, -512, -85, -58, -420, --167, -708, --847, -408, --254, -62, -700, --576, --850, -18, -186, --940, -519, -906, -559, -480, --1022, --393, --726, --219, -204, --231, -899, --998, -350, --795, -180, --36, -261, -315, --565, --707, -864, --279, -859, --993, -37, --841, -287, --613, -693, -626, -887, --781, --779, -415, -610, +116, 759, --655, --999, -521, -569, -726, -761, -330, --513, -797, -975, --883, --718, --748, --237, --892, -942, -715, -63, --272, --368, -738, -177, -267, --703, -991, -1002, --916, -143, -879, --233, --478, -66, -39, --516, -803, --341, -997, -770, --810, --577, +-615, +834, +268, +-1114, +-1016, +-227, +-589, +-910, -244, -1005, -190, -593, -530, --243, --41, --801, -16, -45, --834, --722, --265, --64, -1011, --397, --88, --228, -179, -22, --295, --296, -549, -373, --502, -1022, -29, -824, --523, -969, --973, --402, --955, --119, --294, -489, --905, +-660, +764, +219, +1165, +506, +-673, +799, +-1355, +-872, +491, +689, +176, +-285, +1151, +1080, +-319, +286, +833, +217, +-621, +478, +539, +-109, +-1273, +-564, +-240, +504, +518, +256, +-124, +74, +949, +-912, +-1341, +965, +-774, +634, +1009, +1304, +200, +-1041, +-1262, +-865, +-1065, +-635, +-357, +-928, 806, --864, --41, --735, --15, --338, -990, --294, -403, -485, -248, +1148, +-411, +56, +686, +-644, +1241, +-430, +297, +127, +457, +-1313, +741, +861, +220, +-540, +772, +265, +1066, +679, +177, +-734, +29, +-149, +181, +-1042, +-1139, +271, +-326, +-29, +1298, +643, +-890, +-136, +-1015, +-565, +-964, +894, +-312, +698, +159, +-222, +-1322, +578, +945, +1124, +1278, +54, +-389, +1101, +362, +-543, +380, +959, +-399, +-1105, +1308, +338, +-198, +-1111, +-278, +-752, +668, +1156, +-1226, +579, +184, +-1084, +-917, +-498, +-466, +316, +-788, +-718, 468, -389, --735, -999, --848, --263, -715, -550, --750, --207, --407, --77, --833, --939, -117, -624, --891, -13, -785, -547, --898, -622, -141, -95, --133, --341, -880, -829, -172, -28, -702, -527, --186, --61, --721, --121, --862, --990, --94, --657, --131, -429, -760, --779, -504, -1012, --17, -800, -892, --163, -309, --700, -20, -808, +367, +-1333, +-1146, +828, +1329, +311, +-1346, +54, +-976, +854, +-658, -198, -0, -331, -735, -259, -479, -820, --450, -3, --736, -391, -1002, -81, +-979, +156, +385, +-659, +1326, +1351, +-1173, +-648, +720, +-40, +313, +729, +-416, +351, +452, +-413, +-4, +-1113, +-612, +-28, +-721, +400, +1072, +-1010, +}; + +const int m_b[] = { +-1316, +319, +963, +-608, +519, +-783, +-676, +181, +172, +203, +-1351, +-935, +-12, +758, +-746, +1226, +127, +-1346, +1251, -377, --387, --160, --909, -1014, -881, --955, --206, --369, --672, -2, -842, --835, -427, --392, --917, -31, -712, --570, -586, --59, -538, --432, --470, -499, --528, --969, -1011, --101, --331, --961, -515, --301, -119, -116, --570, -919, -961, -707, --705, -998, -969, -205, -113, -303, -52, --952, +889, +-23, +-417, +-122, +680, +1363, +729, +-907, +-1263, +-431, +363, +1355, +-566, +-517, +-1186, +1318, +-1104, +-1245, +950, +687, +252, +-270, +1081, +-1290, +656, +8, +60, +1171, +915, +-500, +678, +-953, +307, +-35, +-1334, +-888, +598, +1160, +722, +850, -268, --743, -282, -359, --826, -140, --936, --900, --682, -400, -379, -624, --72, -264, --887, -29, --1005, --97, --168, --769, -719, -450, -178, --37, -783, --857, --237, --409, -845, -914, --877, -175, +988, +635, +-340, +252, +1208, +420, +82, +1283, +-319, +-666, +172, +583, +174, +471, +-1063, +452, +-191, +-1188, +116, +-927, +1086, +119, +-245, -717, +-657, +417, +319, +1133, +1338, +141, +-546, +567, +-1089, +-191, +-1138, +-201, +-1286, +-820, +-1356, +1177, +-317, 191, --713, --365, --672, -775, -516, --656, --506, -989, -573, --59, -523, --392, --374, -891, -408, --115, -488, --3, --401, --2, --102, -809, --284, -833, -237, -60, --77, -294, -431, -940, --462, --309, --988, -331, --197, -614, --829, -1012, -545, --708, -598, -216, -297, -643, --605, -975, --878, -259, -384, -550, --98, -672, --452, -982, --586, --301, -919, --984, --646, --973, -124, -790, -648, --683, -330, --724, -77, -647, -442, -11, --790, -585, -517, -434, --795, +67, +164, +-306, +-1015, +1147, +-482, +1229, +-259, +-207, +1309, +847, +-399, +-1005, +-995, +140, +-567, +-1220, +-427, +180, +-571, +997, +-783, -316, -50, -235, --182, --355, -505, --292, --298, --659, -391, -571, --848, --870, --869, --987, -105, --786, --791, --550, -448, -565, --610, --910, -694, -144, --50, -891, -795, -691, -626, --461, --354, --484, --844, -582, -626, --82, -646, -762, -36, --671, -120, --874, -685, -1017, -722, -11, --477, --19, -283, --980, -976, --341, -59, --495, --679, -887, --890, --167, -633, -412, --225, -114, -238, -754, -685, --522, -565, -983, -159, --678, -202, --811, +-1360, +736, +75, +-1251, +-307, -902, -950, -560, --849, --588, -0, +1181, +1057, +-141, +-1098, +776, +1096, +-923, +914, +1049, +-28, +-742, +-804, +-467, +567, +329, +-309, +-161, +-157, +-430, +-639, +1138, +-165, +292, +-20, +777, +-715, +60, +-1359, +35, +307, +-1092, +271, +548, +822, +-50, +-475, +-103, +784, +537, +152, +-517, +-1097, +117, +-619, +538, +941, +172, +-223, +1161, +-1004, +-1145, +-455, +255, +363, +859, +403, +-861, +-657, +-537, +-1084, +-1042, +541, +1283, +-356, +1298, +-1254, +-303, +203, +104, +1123, +-72, +-171, +-1122, +-533, +440, +275, +613, +-846, +-189, +884, +704, +-570, +-440, +-1157, +-200, +-80, +616, +799, +757, +-264, +-1256, +-690, +152, +184, +-810, +-221, +-821, +-243, +508, +-709, +574, +-693, +315, +-952, +952, +697, +875, +-480, +-691, +422, +-413, +-1199, +441, +-751, +821, +1303, +-410, +416, +566, +-131, +-551, +46, +978, +-228, +1117, +-251, +-537, +874, +-882, +260, +-213, +248, +-1296, +1343, +-626, +-812, +629, +-601, +-378, +-1314, +-889, +774, +-307, +692, +-1125, +-692, +923, +947, +1158, -939, -199, --214, --575, --703, --689, -1019, -799, --478, -435, -499, -686, --1002, -343, --786, -858, -65, -273, -562, --645, -218, --302, -68, --700, --760, --512, --899, --6, -661, --507, -1016, --679, -325, -314, -601, --280, --22, --761, -238, -779, --260, -118, --836, -801, -62, --382, --187, -233, +1284, +35, +1299, +369, +-8, +43, +768, +524, +137, +659, 285, -890, -978, -888, --551, -901, --31, -170, -44, -850, --288, -107, -882, --786, --718, -936, -761, --796, -374, --142, -868, --410, -579, --122, --14, --1018, --858, -419, --393, --508, --396, -454, --857, --576, --147, --222, --90, --263, --358, --810, -178, -737, --966, -40, --246, -683, -916, --843, --633, -849, --101, -744, --375, -181, --314, -372, -58, -404, --428, --894, --743, -694, --293, --128, --604, --734, --228, -325, --1018, --150, +-1315, +-457, +871, +-768, +1107, +-695, +488, +-527, +-161, +414, +-526, +-1164, +1059, +-1108, +560, +-622, +898, +-50, +-286, +-170, +513, +952, +433, +237, +584, +-665, +-960, +585, +-434, +1223, +-130, +1035, +430, 202, --808, --610, -741, --978, -191, --57, -458, --29, -169, -193, --43, -1019, -963, --302, -318, --229, --900, --543, --16, +1312, +1152, +1059, +-1082, +-1295, +805, +-18, +613, +-94, +557, +548, +1354, +116, +289, +-1358, +-1234, +1237, +451, +820, +-102, +974, +832, +-1019, +914, -512, -497, --455, --970, -435, --186, -819, --860, -790, -44, -642, -398, --730, --109, --42, -651, --278, --744, -411, --69, --276, --955, --36, -660, --396, --471, -892, --46, -147, --312, -167, --46, --456, -827, --468, -314, --244, -690, -47, -569, -979, --1005, -689, --748, -629, --896, -13, -674, --814, --520, -479, --691, -704, --153, --553, -146, --757, -547, --133, -597, -730, -394, -368, --544, --222, -884, -860, --459, -502, --648, +-267, +1329, +-910, +-1341, +862, +-381, +-23, +-658, +40, +-71, +-782, +1240, +-956, +1241, +-291, +-884, +1250, +699, +834, +190, +960, +-1260, +177, +464, +155, +-1105, +768, +424, +621, 740, --522, -912, -637, -672, -711, -171, -912, -657, -98, --96, --53, --495, --265, --962, -484, --138, --618, -316, --119, -489, -951, -45, --372, -987, --90, -741, -29, --756, --147, -640, --539, -376, --875, -680, --261, -988, --371, -724, +-1357, +1186, +-594, +1329, +829, +126, +1101, +1146, +-95, +605, +-673, +1334, +440, +-10, +12, +-745, +20, +19, +-793, 999, --101, --617, -397, --1020, -983, -204, -74, --615, -626, -113, --776, -35, -321, -488, --614, --847, --306, --237, -15, -393, --148, -603, -692, --713, -483, --332, --51, --226, -444, --564, --161, -411, -598, --431, +1083, +487, +-657, +-356, +654, +-326, +-250, +-718, +-947, +-235, +558, +974, +-981, +637, +-861, +-768, +1045, -583, -938, --607, -448, -614, --337, --11, --962, -127, -425, --818, --587, -710, --698, -570, --355, --900, -165, --358, -229, -52, -802, --1022, -52, --604, -86, -328, -353, --940, --256, --578, --912, -463, --1006, -777, -255, -515, --899, --34, -975, --30, --97, --815, -316, --923, --324, -728, -722, --99, --86, -687, --636, --535, -761, --759, --723, --850, -23, --16, --608, -242, -736, -368, -916, -892, -215, --785, -597, -587, +-910, +128, +734, +896, +-1156, +223, +284, +272, +634, +-473, +363, +359, +-1185, +14, -33, -382, --147, --352, --537, --738, +-1122, +140, +900, +439, +-944, +-770, +663, +865, +1056, +-238, +86, +-1294, +-44, +-603, +602, +20, +397, +-423, +-703, +-209, +-906, +-1236, +945, +-737, +578, +904, +645, +1225, +-877, +-425, +-493, +-1326, +424, +965, +1300, +-1210, +823, +1345, +626, +-427, +592, +-869, +-1055, +-938, +-427, +1066, 472, --844, -367, -408, --742, -282, -451, -427, --696, -227, -374, -753, --971, -735, --768, -941, -888, --854, -166, --590, --809, --187, -633, --607, -241, -215, --516, --345, --135, --51, -215, --690, --807, --595, -607, --574, --323, --765, --3, --970, --316, -557, -985, -983, --368, --763, --316, -943, -284, +-1055, +48, +-1200, +-349, +313, +-1227, +-228, +783, +839, +187, +1021, +-1355, +1284, +68, +-1321, +-997, +1286, +-887, +772, +-156, +-105, +1329, +1141, +-377, +-881, -341, --24, -892, -335, -498, --241, -982, --619, -560, -541, -267, --458, --264, --661, -476, -695, -142, --306, -157, -451, -180, -408, -576, -179, --56, -546, -409, -965, --73, --140, -903, -984, -146, -890, -461, --173, -21, --286, -561, -949, --653, -1019, --813, -666, --5, -412, --55, -438, --113, -426, +1316, +-391, +-1249, +-205, +53, +-266, +-540, +-289, +-1011, +602, +-1032, +-1097, +-202, +-467, +-1047, +-867, +-340, +-109, +-496, +967, +1147, +108, +384, +-12, +1216, +137, +1318, +151, +219, +-543, +391, +668, +-1348, +-1244, +-810, +-676, +321, +-1258, +1343, +1214, +791, +35, +1219, +1278, +1037, +-1282, +661, +585, +921, +-880, +-989, +-1192, +-207, +273, +-382, +690, +165, +271, +-212, +739, +-343, +-42, +226, +40, +859, +-153, +622, +-1059, }; const int m_exp[] = { -162957, -806616, --3843440, -425896, -2155437, --822680, --787915, -621747, -2923873, -1244247, --97532, -610424, --202711, -3997637, --1726865, -619432, -907569, --1548516, --94406, -1429714, -728504, --1334534, --1711394, --60696, --1270495, -42411, --393126, --1426839, -766595, -196776, --1218293, -805161, -1753338, -19573, -1743399, -1305905, -2305550, -691613, -2936488, --2499956, -2011437, --576528, -4857673, --522113, -1643246, -2107051, -1243612, -1226992, --579490, --2007336, -735201, -215903, --2371734, --604993, --2228234, --2776681, --2711032, --1272536, --2272696, --421571, -1355942, -88773, -2385693, --574961, --2571513, -636093, --458404, -546496, -2480672, -155697, -101546, --1189865, -1932128, -3516193, --155025, -758029, --2133330, -292469, -259193, -1783456, -3153657, --4306725, --1756271, -5321880, -3387043, --2499824, --1354163, -3589105, --822661, --787877, --1296774, --53917, -1000889, --2479239, -522736, -1610045, --1888070, -1262549, -2391084, --2993663, -880432, -2253879, --738882, -2578797, --91861, -3546872, -1784236, --1334715, --370233, -4225505, -523924, --1638264, -496623, --4977506, --932716, -2456108, --1528737, -619156, --1996122, --559761, --3729495, -2583519, --688975, -2327479, -538691, --216394, --624983, -3287485, --948798, -938455, -1079709, -2579776, -560856, -71743, -2473123, --1855915, -982427, --322892, --1051648, -279832, -928945, --563243, -1512085, -2329787, --291655, -219971, -2918255, --418247, -1076304, --260668, -1590893, -96628, -459386, --535583, -20579, --2682940, -250239, --1121829, -4796976, --1449568, --884030, --1012825, --557312, --660713, -2703126, --1000609, -4119713, --2261740, -568061, --807901, -571882, -4117378, --3168209, -1856661, --1360182, --275958, --1371570, -1334388, -1163735, -902800, -1090827, -2127115, -1805917, -1394998, --1897442, --1552564, -4831224, -5873204, -862717, --1328233, --481290, --3881988, -1967283, --3210455, -194601, -3623555, -4233139, --5588664, -460768, --2153116, -1640966, --1574766, -4489450, -2035547, -591125, --112588, --677732, -3516302, --1487398, --1392413, --549940, --122305, -1734974, --1296448, -3345459, -3278967, --403583, --2476952, -3103106, -3668860, -876310, --1372508, -1606576, --1242432, --17363, --536767, --957924, --840288, -1387793, --1263453, --1580935, -1255033, --3199921, --582299, --3536182, -8014, -694206, --868893, --733959, -691991, -1905970, --2105517, --611054, --2008274, -1869390, -781905, -3204537, -846463, -582367, -1557785, -970604, --232359, --2832418, -362033, --287796, --295851, -115014, -2136015, --355990, --3623476, --2897332, -3725302, -243172, --1681724, --385794, -472207, --2443791, -873057, --2272285, --1444140, -127766, --1695914, --2155654, -1292115, -376558, --2959312, --1679103, --1846952, --2678017, --3209721, -4578141, -3381475, --115092, --277905, --1622304, -444339, -31506, --1835191, --1095261, -1184692, --1320035, --768825, --24927, --441171, --2206653, -3016395, -1322957, -2359340, --2045739, --2535559, -2589403, -488750, --352073, --1583926, -2559165, --236263, --2305301, --1143355, --811472, -157863, -2734081, --3540908, --3266165, -3356957, --2546548, -120541, --614357, --321236, --4262586, -3134062, -69010, -1673410, -578416, -1494750, -1401048, -1434942, -2202613, --1168868, -4234494, -1083346, -1136258, -2189311, -2610004, -981866, --1297232, -590461, --1470399, -182048, --987329, --815848, -4511995, -3218281, -1891474, -2139246, --1953818, -760442, -4370650, --155141, -141023, --3911135, -704029, -1270803, --1160789, -639262, --140142, -492202, --3552999, -726790, -730943, -294228, -1626723, --2909194, --54567, -1406030, --511915, -14996, -2901103, -202415, --765411, -3954449, -1634496, -765702, --1670288, --1746308, --236974, -402163, -2225940, --4092672, --487529, -458477, --850359, -2502080, --1833536, --2648383, -469522, --2065549, --1110710, --1161586, --1598119, -312213, --3414626, -2809732, --1270950, -231301, -948652, --5241164, --142131, --101551, --924256, --4661011, -1373376, --384970, --1771026, -2352833, --1508015, --1567875, --77896, --298333, --2109926, -1841301, --1841526, -463269, --1579323, -3378298, --1686942, -2286923, --1725730, -888978, --132747, -1196962, -765073, -2561682, -3394037, -686372, -3609261, -1739268, --1632029, -223041, -7802, -1613144, --1505669, -236211, -2125044, --287008, -1433003, --3433392, -2365446, --1739067, --1742567, -572370, -387905, -137241, --205103, --3092809, -3403304, --626777, -1682114, -208043, --3166100, --494447, --1814690, --1598424, --5459778, -2167916, --1761705, -425344, -1806134, --1823602, --846377, --1890539, --462188, --1485705, -101051, --3918737, -1878057, -527232, --3992037, -1295344, -76046, --3594473, -165856, --209224, -2988651, -1205027, --128456, --688247, --1858378, -1319809, --654178, -1197795, -2203611, -429127, --153254, --1002844, --73001, --777076, -624879, --749349, -517398, -1047706, --483949, -21723, --2834312, -575021, -2162429, -1157482, -251420, -165568, -3589958, -1166415, -971492, --791336, -221991, -1202426, --486702, --2021786, --998812, -1488325, -875139, -2095034, --3432500, --3200858, -708188, --1230553, --1027252, -3204443, -1541304, -1441524, -2393495, -240432, -154630, -711539, -1546622, --3606712, -2329971, -2037395, -488837, --1149213, -1004476, --5353576, --1445258, -1830702, -2334502, --1027586, --786918, --830800, --5014319, -603373, --2356785, -391822, --559514, -832315, -854580, --274568, --852866, --1829693, --224252, --442985, --511368, --2738731, -785781, -1213180, --452741, --1912617, -2501858, -1190107, -374756, -4063611, --3167900, -590894, --843960, --1329399, -1982532, --1501664, --480615, -978312, --776372, --758612, --342051, -1297314, --1330216, -2192151, -514261, -1924564, --1450262, --1368891, -709611, -910433, -10007, -379287, --927492, -2341527, --614574, -213605, -1313660, --511351, -2179833, --3229739, -970187, -24229, --563469, --290337, --1413501, --1110798, -1687978, --1070551, -667748, --378655, -1343272, --1179176, -465076, -1061328, --725446, --632171, --3115122, -126962, -679313, -468649, --54748, --1693703, --1504854, -1706614, -1984152, --147089, --677246, --2363197, --958222, --1058809, -2137431, --1457226, -1613151, --1096760, --62862, --1303936, --470334, --677938, --3350678, -686828, --3218401, --2491773, -823333, --3515802, --521386, --745281, -1801059, --364988, -262475, --1628907, -4610600, --1790296, -1637070, --111930, -695554, -631793, --58009, -879861, --396942, --3491554, --2099070, --1427409, -274894, -3138017, --3984461, --1428478, -1281318, -1326242, --2425032, -3375811, -1883570, -986169, --2026937, -851459, --2948484, -887635, -1664977, --787389, -192262, --199263, -2417949, -1357190, --675828, --2140148, --1992713, --812035, --189832, --1687171, --1455287, --1968142, --95663, -1491237, --97044, --1478691, --818723, -540642, --1935376, --2011417, --1496601, --2432622, --1711594, -1082040, -4280682, --245468, -2632647, --2126102, -4408049, -1347238, -1881351, -2741419, -275662, -39237, --90511, -293945, -1132383, --38055, -1318991, --285413, --1197211, -758713, -5302556, --910446, --1192408, -1951665, -599939, -1684692, --905949, -467600, --1781331, -2472257, --4560636, -2121801, -7702, --953875, -810154, -2235783, --1721404, -1466909, -823131, -257449, --467541, -2196156, -1231438, --1055257, -1235031, --2824591, -1407798, -4017064, -496444, --2144864, -172928, --780962, --1351533, --770027, --2035068, --10361, -2252778, --21797, --3779047, --3409395, -494668, --331048, --331324, --355901, --429937, --109578, -2141215, -3507397, --475137, -1741184, -2711387, -1735523, --546046, --104827, -1803323, --1088839, -10836, --1512582, --1126855, -1130557, --3863013, --1429454, --2311546, -988010, --34163, --2855425, -668343, --504504, --875488, -29458, --86216, -288365, --434627, -3493242, --130938, --1988278, -3075370, -953334, --4261726, -691990, --344124, -1873383, --2948777, --37293, --6201594, -194461, --3063704, -3296851, --361236, -2148972, --1689659, --1587584, --1973610, -136604, -864708, --208814, --5210513, --2382198, --938078, --623312, -2134892, -20690, --328389, -425817, -1494259, -341657, -2041202, -215726, -1999270, -4556161, --1534970, -846236, --1779277, -487163, --2503709, --881316, -641969, --1533604, --1307702, --28391, -2386501, -1889399, --2798701, --1452890, --2458612, -1135665, --822540, --1224665, --3168295, -3202581, --1833843, -2028127, -316317, -2771444, --1969294, --1862180, --1846963, -3288593, --1058949, --4301372, --2270312, --1814302, --2507256, -2304887, --1357358, --398110, -2224556, --3014825, --1386326, -3381979, -1996942, -1199292, -2726576, --2409907, --651850, -619670, --1475982, -2412631, --1348814, --1226204, -39236, -1327167, --1771649, -547246, --147406, -2114780, --861050, --369180, --1802507, --1044212, -1027808, --268747, -898922, --1231614, --2479622, -3128666, -2129144, --2150987, -743, -1381784, -1709971, -3159903, --1724033, -1467305, --1549225, --1149491, --1241667, -1923850, --1031013, --1854871, -5195468, --1312499, --1683183, --2852635, -1375570, --2626830, -252623, --2799957, -416997, --768714, -521710, --1525373, -1399518, -781524, -1078645, -481978, --169425, --595560, --4627513, -1999980, --1414190, --912128, --464019, --1908668, --1299171, -2822564, --3299799, -1134772, --717124, --1175570, -1450585, --1338075, -886999, -352573, -4223081, -247130, -1087502, --1634036, --1292452, -595147, -2611183, --1018214, -3045670, -25600, -527454, --410755, --1575051, --4673725, -2022228, -342427, --411410, --3969320, --1582114, --196149, -417835, --2069373, -1140594, --1982957, --1168881, --1680247, -3341440, --2163154, -644414, -899481, --3068320, -1730507, -2120763, -800244, --1950761, -2797422, -999558, -4224011, -267319, --2575349, -1303602, -3822345, --1179231, --83832, -1094373, --2890364, --2847299, -1097183, -270678, --1041859, --243475, --2372503, --983943, -2643567, --1140781, --1564791, -921293, --2492580, -412995, -3308919, --69183, --1264313, -292080, --1901711, --2160028, --1433855, --1297772, -1209393, --760271, --1505265, --2822187, --750104, -1326341, --2406512, --2811558, -634457, -2153554, -1165807, --1251857, --2639503, --2455102, --397631, -988547, --2515259, -4482079, -763623, -559995, --1070705, --2788379, -545963, --1318607, --896632, +-4942391, +2289133, +-1363225, +1978230, +1580032, +-625813, +-3230128, +2236653, +19494, +3242695, +-1080745, +-34154, +4086860, +-1370876, +3997221, +-1812380, +4705498, +7690207, +-4068140, +3595067, +-1103308, +-939857, +-4249710, +-8650816, +-2013119, +2933624, +235162, +-453807, +-4447391, +3527041, +2046492, +411956, +-994117, +-1411344, +1333704, +-519761, +3026373, +-564969, +3749147, +2447173, +-557628, +1138674, +-1426096, +-4033488, +-1829685, +2815607, +2382958, +1714081, +-1470484, +3379876, +3660759, +-2439960, +-1180478, +-3300785, +-5104533, +-309753, +-1667400, +3258850, +1805449, +2481948, +-944985, +-363123, +4227063, +3022289, +2763211, +5114077, +-1534394, +-2957168, +3401637, +-1195822, +-747480, +-2915318, +-2505013, +-174927, +276733, +2899369, +-6702856, +923396, +-2741169, +4270685, +-1020657, +-2562887, +2074098, +-2382784, +1366504, +691209, +4127820, +400356, +-7415505, +823772, +-3848400, +-158560, +3759990, +2298445, +323394, +873625, +474364, +2617120, +-1382444, +1735284, +-5799715, +1915577, +7016057, +-1212904, +919286, +2949768, +1228832, +572192, +4145710, +-6809520, +-2199597, +677764, +-7169579, +-4904277, +6902014, +231123, +-4797299, +3093608, +989455, +4324476, +3121268, +810907, +-2457323, +2299211, +-1625774, +-141013, +3343022, +-2044657, +4089375, +-291323, +-1950307, +2480885, +2846731, +-2139146, +-2718414, +-1997531, +-2399245, +-4060224, +423228, +-205276, +-1602384, +910872, +-3535114, +6008729, +-559984, +-301205, +-5407307, +2981269, +1079061, +6602535, +-857708, +2756391, +-5304566, +-3769267, +2620777, +-4409088, +502077, +7568647, +-37918, +2315061, +-2540065, +8296540, +-7465282, +1553910, +-4736227, +-2139045, +95614, +342546, +1309722, +1777391, +2981296, +-736899, +-2572111, +-972463, +-2793724, +-2893912, +-1230264, +-871649, +-1439985, +3074445, +3339004, +2423842, +1751086, +4064832, +1550243, +6225792, +-503750, +-2567772, +5671219, +-2054796, +-551487, +-2787790, +-3835027, +-4272806, +2725813, +-2982521, +1803437, +3024675, +-201092, +-1626608, +1548043, +2303810, +3032912, +398283, +1704371, +1860306, +-4101665, +5187913, +4233418, +2054883, +3603470, +1935132, +-17548, +-4362444, +-2806918, +-5651039, +-1853372, +-1707208, +-153048, +-2791834, +402265, +2815962, +3391662, +-4833520, +-1190520, +2302448, +80738, +2089586, +174096, +2837490, +-5514606, +2138871, +336249, +-378675, +5833977, +4367000, +-2445147, +-3652299, +-1794451, +-1471577, +-1263012, +3719274, +-3404819, +5765304, +-4256415, +3558206, +-1884441, +-475244, +3659623, +-2914867, +689238, +-2576754, +7739914, +1823902, +2077002, +-2365242, +2023481, +1663749, +-4973435, +-694558, +1118078, +2260786, +-3256285, +4596746, +-5421599, +594942, +-1730692, +-4626077, +3077882, +-2232009, +2672161, +3135747, +-4602601, +859784, +-3530668, +21600, +-4690786, +2023164, +-496745, +-2728919, +281474, +-108745, +-809613, +1445687, +-5781458, +2097169, +1594266, +-4504019, +2460482, +6259537, +-700848, +413263, +-1212884, +-5695130, +2094147, +-750529, +-1379008, +6029072, +722889, +1719449, +1682336, +-4219755, +1971162, +66575, +-1195119, +141466, +-1083536, +-718558, +-4039954, +-168429, +-2026861, +2025800, +-761083, +-4194692, +2013337, +-1156936, +3823019, +4081732, +-3145845, +-1733615, +-1371947, +-3811245, +-1584663, +-3547009, +-3267886, +8255291, +-3232160, +3404636, +3248369, +3233853, +671601, +-1009897, +1821121, +-3517645, +2005444, +-2768741, +115998, +533867, +4717709, +1315923, +-3510545, +-3539595, +-538461, +4529529, +2792584, +-107486, +-1840413, +-1474849, +1579605, +-4197602, +-34825, +-462678, +1294881, +-1730927, +-2549709, +-1531672, +-271859, +-1181904, +-1680154, +-2321723, +-6641222, +1127764, +893535, +-2804646, +5653509, +2657606, +-1751466, +-4669812, +-827592, +-126901, +-2599752, +-845148, +1390838, +8975481, +-7663778, +3572438, +5920790, +5233883, +-613590, +-881500, +-3974422, +-5523348, +-3243204, +-6405765, +-4376438, +1352634, +-105650, +2650174, +1442151, +5088231, +2974595, +-4501663, +-841006, +-3101819, +-1265401, +-2756903, +2579743, +2045040, +-5328835, +2801176, +-386694, +-3068782, +3147225, +-248211, +-662659, +-1112717, +2733193, +336344, +3107302, +2244003, +4285762, +1998904, +1888720, +-1174981, +-2567532, +-5588952, +-101948, +4004848, +-610048, +793760, +3345423, +716318, +1033698, +4011882, +-965219, +1258434, +1579522, +-4249500, +3233648, +-424838, +2640541, +1020028, +4933599, +-1964947, +3237309, +-1251962, +-437406, +-2749192, +-2943112, +-117113, +778507, +2757711, +3478291, +-661571, +1077087, +-3821174, +2731860, +3035264, +-4424379, +295413, +3873542, +-1272809, +4145370, +-363272, +2240544, +88954, +-2016552, +-862779, +-844808, +3142493, +2019692, +3648148, +3857820, +593190, +1285134, +-4257140, +-1476035, +-1951773, +-2334649, +1355368, +-4390456, +3666652, +562848, +-8226958, +1134896, +1136697, +-2132899, +3300228, +1855661, +6476864, +5097743, +-1373818, +3287769, +1709294, +-2926119, +2463141, +400199, +3051372, +1815531, +1746372, +398117, +2333959, +-708565, +-4241370, +51697, +-1626217, +26865, +2248300, +3357859, +-325912, +194201, +612298, +388227, +256018, +-5630155, +-1085451, +653494, +-1966315, +-273079, +-4296295, +-2813232, +2079672, +2378463, +-3869089, +-438799, +-725265, +3152791, +3461913, +-777750, +47521, +2588203, +1888001, +-4445421, +654349, +811737, +418334, +-1854075, +-5194402, +-1571674, +-622026, +-1091628, +1787463, +3439585, +2923276, +-1997884, +-193963, +-731696, +3686658, +-1311796, +-5219031, +-2906251, +2140229, +-1846978, +2541247, +-3677377, +-3935140, +3605308, +4807232, +-1633864, +344286, +-2051894, +2498349, +-3085, +379207, +-701595, +-1080351, +3161365, +-1606976, +1640595, +3757649, +798095, +-3167055, +-2288739, +2301831, +-3324819, +3219538, +516049, +-3153835, +7342606, +1098913, +-2522436, +376783, +47367, +530901, +-395499, +304200, }; -#define SIZE 32 -__attribute__ ((section(".heapsram"))) int g_mA[SIZE][SIZE]; -__attribute__ ((section(".heapsram"))) int g_mB[SIZE][SIZE]; -__attribute__ ((section(".heapsram"))) int g_mC[SIZE][SIZE]; -__attribute__ ((section(".heapsram"))) int g_mB_tmp[SIZE][SIZE]; +#define SIZE 24 +__attribute__ ((section("__heap_sram"))) int g_mA[SIZE][SIZE]; +__attribute__ ((section("__heap_sram"))) int g_mB[SIZE][SIZE]; +__attribute__ ((section("__heap_sram"))) int g_mC[SIZE][SIZE]; +__attribute__ ((section("__heap_sram"))) int g_mB_tmp[SIZE][SIZE]; From aca6689b980ac46f742fe6ac2cb406b0d45b5b99 Mon Sep 17 00:00:00 2001 From: Yvan Tortorella Date: Mon, 24 Jul 2023 16:28:24 +0200 Subject: [PATCH 03/71] Added cluster index input in timer functions. --- parallel_bare_tests/Dijkstra/Dijkstra.c | 8 ++++---- parallel_bare_tests/LU/LU.c | 8 ++++---- parallel_bare_tests/conv16/conv16.c | 16 ++++++++-------- 3 files changed, 16 insertions(+), 16 deletions(-) diff --git a/parallel_bare_tests/Dijkstra/Dijkstra.c b/parallel_bare_tests/Dijkstra/Dijkstra.c index a6f6cab..8fe903d 100644 --- a/parallel_bare_tests/Dijkstra/Dijkstra.c +++ b/parallel_bare_tests/Dijkstra/Dijkstra.c @@ -96,8 +96,8 @@ int main() #endif if ( hc == 2 && id == 0 ) { - reset_timer(); - start_timer(); + reset_timer(rt_cluster_id()); + start_timer(rt_cluster_id()); } synch_barrier(); @@ -105,8 +105,8 @@ int main() dijkstra_distance(mind, ohd); if ( hc == 2 && id == 0 ) { - stop_timer(); - time = get_time(); + stop_timer(rt_cluster_id()); + time = get_time(rt_cluster_id()); } #ifdef PROFILE // stop performance counters diff --git a/parallel_bare_tests/LU/LU.c b/parallel_bare_tests/LU/LU.c index 3700837..d6ddc81 100644 --- a/parallel_bare_tests/LU/LU.c +++ b/parallel_bare_tests/LU/LU.c @@ -174,8 +174,8 @@ int main(int argc, char **argv) for(hc = 0; hc < 3; ++hc) { if ( hc == 2 && id == 0 ) { - reset_timer(); - start_timer(); + reset_timer(rt_cluster_id()); + start_timer(rt_cluster_id()); } perf_reset(); perf_start(); @@ -185,8 +185,8 @@ int main(int argc, char **argv) factor(G, N, N, pivots); if ( hc == 2 && id == 0 ) { - stop_timer(); - time = get_time(); + stop_timer(rt_cluster_id()); + time = get_time(rt_cluster_id()); } perf_stop(); diff --git a/parallel_bare_tests/conv16/conv16.c b/parallel_bare_tests/conv16/conv16.c index c4d95a2..38c3a92 100644 --- a/parallel_bare_tests/conv16/conv16.c +++ b/parallel_bare_tests/conv16/conv16.c @@ -89,10 +89,10 @@ int test_singlethread(void (*test)(int16_t *, int16_t *, int16_t *, int, int, in if(rt_core_id() == 0) { load(); - reset_timer(); - start_timer(); + reset_timer(rt_cluster_id()); + start_timer(rt_cluster_id()); test(g_W, g_x, g_y, IH, IW, FH, FW, OH, OW, 1, 0, 0); - stop_timer(); + stop_timer(rt_cluster_id()); #ifdef CHECK_CHECKSUM errors = 0; @@ -110,7 +110,7 @@ int test_singlethread(void (*test)(int16_t *, int16_t *, int16_t *, int, int, in #endif #ifndef PULP_SPI - printf("%s, errors=%d, time=%d\n", str, errors, get_time()); + printf("%s, errors=%d, time=%d\n", str, errors, get_time(rt_cluster_id())); #endif } @@ -129,12 +129,12 @@ int test_multithread(void (*test)(int16_t *, int16_t *, int16_t *, int, int, int synch_barrier(); if(rt_core_id() == 0) { - reset_timer(); - start_timer(); + reset_timer(rt_cluster_id()); + start_timer(rt_cluster_id()); } test(g_W, g_x, g_y, IH, IW, FH, FW, OH, OW, 1, 0, 0); if(rt_core_id() == 0) { - stop_timer(); + stop_timer(rt_cluster_id()); #ifdef CHECK_CHECKSUM errors = 0; @@ -152,7 +152,7 @@ int test_multithread(void (*test)(int16_t *, int16_t *, int16_t *, int, int, int #endif #ifndef PULP_SPI - printf("%s, errors=%d, time=%d\n", str, errors, get_time()); + printf("%s, errors=%d, time=%d\n", str, errors, get_time(rt_cluster_id())); #endif } From 4ef7bbc47cb355dfbdf6ec0db8452eb33acf1323 Mon Sep 17 00:00:00 2001 From: Yvan Tortorella Date: Fri, 11 Aug 2023 18:59:05 +0200 Subject: [PATCH 04/71] Fixed references to code sections. --- parallel_bare_tests/parMatrixMul/parMatrixMul.c | 6 +++--- parallel_bare_tests/parMatrixMul32/gen_stimuli.py | 8 ++++---- parallel_bare_tests/parMatrixMul32/matrixMul.c | 2 +- .../parMatrixMul32/parMatrixMul32_stimuli.h | 8 ++++---- 4 files changed, 12 insertions(+), 12 deletions(-) diff --git a/parallel_bare_tests/parMatrixMul/parMatrixMul.c b/parallel_bare_tests/parMatrixMul/parMatrixMul.c index 8dce6bb..4ddd6aa 100644 --- a/parallel_bare_tests/parMatrixMul/parMatrixMul.c +++ b/parallel_bare_tests/parMatrixMul/parMatrixMul.c @@ -29,9 +29,9 @@ #define CHKSM 88408 #endif -__attribute__ ((section("__heap_sram"))) int A[SIZE][SIZE]; -__attribute__ ((section("__heap_sram"))) int B[SIZE][SIZE]; -__attribute__ ((section("__heap_sram"))) int C[SIZE][SIZE]; +__attribute__ ((section(".heapsram"))) int A[SIZE][SIZE]; +__attribute__ ((section(".heapsram"))) int B[SIZE][SIZE]; +__attribute__ ((section(".heapsram"))) int C[SIZE][SIZE]; void initialize_mat(); diff --git a/parallel_bare_tests/parMatrixMul32/gen_stimuli.py b/parallel_bare_tests/parMatrixMul32/gen_stimuli.py index 3ce5002..75eef86 100755 --- a/parallel_bare_tests/parMatrixMul32/gen_stimuli.py +++ b/parallel_bare_tests/parMatrixMul32/gen_stimuli.py @@ -47,8 +47,8 @@ def write_arr(f, name, arr): f.write('#define SIZE %d\n' % SIZE) -f.write('__attribute__ ((section("__heap_sram"))) int g_mA[SIZE][SIZE];\n') -f.write('__attribute__ ((section("__heap_sram"))) int g_mB[SIZE][SIZE];\n') -f.write('__attribute__ ((section("__heap_sram"))) int g_mC[SIZE][SIZE];\n') -f.write('__attribute__ ((section("__heap_sram"))) int g_mB_tmp[SIZE][SIZE];\n') +f.write('__attribute__ ((section(".heapsram"))) int g_mA[SIZE][SIZE];\n') +f.write('__attribute__ ((section(".heapsram"))) int g_mB[SIZE][SIZE];\n') +f.write('__attribute__ ((section(".heapsram"))) int g_mC[SIZE][SIZE];\n') +f.write('__attribute__ ((section(".heapsram"))) int g_mB_tmp[SIZE][SIZE];\n') diff --git a/parallel_bare_tests/parMatrixMul32/matrixMul.c b/parallel_bare_tests/parMatrixMul32/matrixMul.c index 3fd64b9..990d411 100644 --- a/parallel_bare_tests/parMatrixMul32/matrixMul.c +++ b/parallel_bare_tests/parMatrixMul32/matrixMul.c @@ -35,7 +35,7 @@ unsigned int num_cores; int main() { - if (rt_cluster_id() != 1) + if (rt_cluster_id() != 0) return bench_cluster_forward(0); num_cores = get_core_num(); diff --git a/parallel_bare_tests/parMatrixMul32/parMatrixMul32_stimuli.h b/parallel_bare_tests/parMatrixMul32/parMatrixMul32_stimuli.h index 9ebc42a..d5c1af0 100644 --- a/parallel_bare_tests/parMatrixMul32/parMatrixMul32_stimuli.h +++ b/parallel_bare_tests/parMatrixMul32/parMatrixMul32_stimuli.h @@ -1736,7 +1736,7 @@ const int m_exp[] = { }; #define SIZE 24 -__attribute__ ((section("__heap_sram"))) int g_mA[SIZE][SIZE]; -__attribute__ ((section("__heap_sram"))) int g_mB[SIZE][SIZE]; -__attribute__ ((section("__heap_sram"))) int g_mC[SIZE][SIZE]; -__attribute__ ((section("__heap_sram"))) int g_mB_tmp[SIZE][SIZE]; +__attribute__ ((section(".heapsram"))) int g_mA[SIZE][SIZE]; +__attribute__ ((section(".heapsram"))) int g_mB[SIZE][SIZE]; +__attribute__ ((section(".heapsram"))) int g_mC[SIZE][SIZE]; +__attribute__ ((section(".heapsram"))) int g_mB_tmp[SIZE][SIZE]; From f844cc4553d3e2c0ee28fc277d1c904b87d28682 Mon Sep 17 00:00:00 2001 From: Yvan Tortorella Date: Sat, 12 Aug 2023 19:04:32 +0200 Subject: [PATCH 05/71] Adapted mchan tests header files to new memory map. --- mchan_tests/testMCHAN_2D_ext_tcdm/mchan_tests.h | 8 ++++---- mchan_tests/testMCHAN_4k_crossing/mchan_tests.h | 8 ++++---- mchan_tests/testMCHAN_TCDM2TCDM_tx_rx/mchan_tests.h | 8 ++++---- mchan_tests/testMCHAN_basic/mchan_tests.h | 8 ++++---- mchan_tests/testMCHAN_basic_8cores/mchan_tests.h | 8 ++++---- mchan_tests/testMCHAN_basic_FC_TCDM/mchan_tests.h | 8 ++++---- mchan_tests/testMCHAN_not_incremental/mchan_tests.h | 8 ++++---- mchan_tests/testMCHAN_pe_basic/mchan_tests.h | 8 ++++---- mchan_tests/testMCHAN_pe_fc_basic/mchan_tests.h | 8 ++++---- mchan_tests/testMCHAN_unaligned/mchan_tests.h | 8 ++++---- 10 files changed, 40 insertions(+), 40 deletions(-) diff --git a/mchan_tests/testMCHAN_2D_ext_tcdm/mchan_tests.h b/mchan_tests/testMCHAN_2D_ext_tcdm/mchan_tests.h index 254df64..3cd8117 100644 --- a/mchan_tests/testMCHAN_2D_ext_tcdm/mchan_tests.h +++ b/mchan_tests/testMCHAN_2D_ext_tcdm/mchan_tests.h @@ -10,14 +10,14 @@ #define LIN 0 #define TWD 1 -#define MCHAN_COMMAND_QUEUE 0x10204400 //0x10201800 -#define MCHAN_STATUS_REGISTER 0x10204404 //0x10201804 +#define MCHAN_COMMAND_QUEUE 0x50204400 //0x10201800 +#define MCHAN_STATUS_REGISTER 0x50204404 //0x10201804 // TEMPORARY FIX DAVIDE #define PLP_DMA_2D_TCDM_BIT 22 -#define PE_MCHAN_COMMAND_QUEUE 0x10201C00 -#define PE_MCHAN_STATUS_REGISTER 0x10201C04 +#define PE_MCHAN_COMMAND_QUEUE 0x50201C00 +#define PE_MCHAN_STATUS_REGISTER 0x50201C04 #define PLP_DMA_TYPE_BIT 0x00000011 #define PLP_DMA_INCR_BIT 0x00000012 diff --git a/mchan_tests/testMCHAN_4k_crossing/mchan_tests.h b/mchan_tests/testMCHAN_4k_crossing/mchan_tests.h index 254df64..3cd8117 100644 --- a/mchan_tests/testMCHAN_4k_crossing/mchan_tests.h +++ b/mchan_tests/testMCHAN_4k_crossing/mchan_tests.h @@ -10,14 +10,14 @@ #define LIN 0 #define TWD 1 -#define MCHAN_COMMAND_QUEUE 0x10204400 //0x10201800 -#define MCHAN_STATUS_REGISTER 0x10204404 //0x10201804 +#define MCHAN_COMMAND_QUEUE 0x50204400 //0x10201800 +#define MCHAN_STATUS_REGISTER 0x50204404 //0x10201804 // TEMPORARY FIX DAVIDE #define PLP_DMA_2D_TCDM_BIT 22 -#define PE_MCHAN_COMMAND_QUEUE 0x10201C00 -#define PE_MCHAN_STATUS_REGISTER 0x10201C04 +#define PE_MCHAN_COMMAND_QUEUE 0x50201C00 +#define PE_MCHAN_STATUS_REGISTER 0x50201C04 #define PLP_DMA_TYPE_BIT 0x00000011 #define PLP_DMA_INCR_BIT 0x00000012 diff --git a/mchan_tests/testMCHAN_TCDM2TCDM_tx_rx/mchan_tests.h b/mchan_tests/testMCHAN_TCDM2TCDM_tx_rx/mchan_tests.h index 254df64..3cd8117 100644 --- a/mchan_tests/testMCHAN_TCDM2TCDM_tx_rx/mchan_tests.h +++ b/mchan_tests/testMCHAN_TCDM2TCDM_tx_rx/mchan_tests.h @@ -10,14 +10,14 @@ #define LIN 0 #define TWD 1 -#define MCHAN_COMMAND_QUEUE 0x10204400 //0x10201800 -#define MCHAN_STATUS_REGISTER 0x10204404 //0x10201804 +#define MCHAN_COMMAND_QUEUE 0x50204400 //0x10201800 +#define MCHAN_STATUS_REGISTER 0x50204404 //0x10201804 // TEMPORARY FIX DAVIDE #define PLP_DMA_2D_TCDM_BIT 22 -#define PE_MCHAN_COMMAND_QUEUE 0x10201C00 -#define PE_MCHAN_STATUS_REGISTER 0x10201C04 +#define PE_MCHAN_COMMAND_QUEUE 0x50201C00 +#define PE_MCHAN_STATUS_REGISTER 0x50201C04 #define PLP_DMA_TYPE_BIT 0x00000011 #define PLP_DMA_INCR_BIT 0x00000012 diff --git a/mchan_tests/testMCHAN_basic/mchan_tests.h b/mchan_tests/testMCHAN_basic/mchan_tests.h index 254df64..3cd8117 100644 --- a/mchan_tests/testMCHAN_basic/mchan_tests.h +++ b/mchan_tests/testMCHAN_basic/mchan_tests.h @@ -10,14 +10,14 @@ #define LIN 0 #define TWD 1 -#define MCHAN_COMMAND_QUEUE 0x10204400 //0x10201800 -#define MCHAN_STATUS_REGISTER 0x10204404 //0x10201804 +#define MCHAN_COMMAND_QUEUE 0x50204400 //0x10201800 +#define MCHAN_STATUS_REGISTER 0x50204404 //0x10201804 // TEMPORARY FIX DAVIDE #define PLP_DMA_2D_TCDM_BIT 22 -#define PE_MCHAN_COMMAND_QUEUE 0x10201C00 -#define PE_MCHAN_STATUS_REGISTER 0x10201C04 +#define PE_MCHAN_COMMAND_QUEUE 0x50201C00 +#define PE_MCHAN_STATUS_REGISTER 0x50201C04 #define PLP_DMA_TYPE_BIT 0x00000011 #define PLP_DMA_INCR_BIT 0x00000012 diff --git a/mchan_tests/testMCHAN_basic_8cores/mchan_tests.h b/mchan_tests/testMCHAN_basic_8cores/mchan_tests.h index 8865d98..28d412a 100755 --- a/mchan_tests/testMCHAN_basic_8cores/mchan_tests.h +++ b/mchan_tests/testMCHAN_basic_8cores/mchan_tests.h @@ -10,14 +10,14 @@ #define LIN 0 #define TWD 1 -#define MCHAN_COMMAND_QUEUE 0x10204400 //0x10201800 -#define MCHAN_STATUS_REGISTER 0x10204404 //0x10201804 +#define MCHAN_COMMAND_QUEUE 0x50204400 //0x10201800 +#define MCHAN_STATUS_REGISTER 0x50204404 //0x10201804 // TEMPORARY FIX DAVIDE #define PLP_DMA_2D_TCDM_BIT 22 -#define PE_MCHAN_COMMAND_QUEUE 0x10201800 //0x10201C00 -#define PE_MCHAN_STATUS_REGISTER 0x10201804 //0x10201C04 +#define PE_MCHAN_COMMAND_QUEUE 0x50201800 //0x10201C00 +#define PE_MCHAN_STATUS_REGISTER 0x50201804 //0x10201C04 #define PLP_DMA_TYPE_BIT 0x00000011 #define PLP_DMA_INCR_BIT 0x00000012 diff --git a/mchan_tests/testMCHAN_basic_FC_TCDM/mchan_tests.h b/mchan_tests/testMCHAN_basic_FC_TCDM/mchan_tests.h index 254df64..3cd8117 100644 --- a/mchan_tests/testMCHAN_basic_FC_TCDM/mchan_tests.h +++ b/mchan_tests/testMCHAN_basic_FC_TCDM/mchan_tests.h @@ -10,14 +10,14 @@ #define LIN 0 #define TWD 1 -#define MCHAN_COMMAND_QUEUE 0x10204400 //0x10201800 -#define MCHAN_STATUS_REGISTER 0x10204404 //0x10201804 +#define MCHAN_COMMAND_QUEUE 0x50204400 //0x10201800 +#define MCHAN_STATUS_REGISTER 0x50204404 //0x10201804 // TEMPORARY FIX DAVIDE #define PLP_DMA_2D_TCDM_BIT 22 -#define PE_MCHAN_COMMAND_QUEUE 0x10201C00 -#define PE_MCHAN_STATUS_REGISTER 0x10201C04 +#define PE_MCHAN_COMMAND_QUEUE 0x50201C00 +#define PE_MCHAN_STATUS_REGISTER 0x50201C04 #define PLP_DMA_TYPE_BIT 0x00000011 #define PLP_DMA_INCR_BIT 0x00000012 diff --git a/mchan_tests/testMCHAN_not_incremental/mchan_tests.h b/mchan_tests/testMCHAN_not_incremental/mchan_tests.h index 254df64..3cd8117 100644 --- a/mchan_tests/testMCHAN_not_incremental/mchan_tests.h +++ b/mchan_tests/testMCHAN_not_incremental/mchan_tests.h @@ -10,14 +10,14 @@ #define LIN 0 #define TWD 1 -#define MCHAN_COMMAND_QUEUE 0x10204400 //0x10201800 -#define MCHAN_STATUS_REGISTER 0x10204404 //0x10201804 +#define MCHAN_COMMAND_QUEUE 0x50204400 //0x10201800 +#define MCHAN_STATUS_REGISTER 0x50204404 //0x10201804 // TEMPORARY FIX DAVIDE #define PLP_DMA_2D_TCDM_BIT 22 -#define PE_MCHAN_COMMAND_QUEUE 0x10201C00 -#define PE_MCHAN_STATUS_REGISTER 0x10201C04 +#define PE_MCHAN_COMMAND_QUEUE 0x50201C00 +#define PE_MCHAN_STATUS_REGISTER 0x50201C04 #define PLP_DMA_TYPE_BIT 0x00000011 #define PLP_DMA_INCR_BIT 0x00000012 diff --git a/mchan_tests/testMCHAN_pe_basic/mchan_tests.h b/mchan_tests/testMCHAN_pe_basic/mchan_tests.h index 254df64..3cd8117 100644 --- a/mchan_tests/testMCHAN_pe_basic/mchan_tests.h +++ b/mchan_tests/testMCHAN_pe_basic/mchan_tests.h @@ -10,14 +10,14 @@ #define LIN 0 #define TWD 1 -#define MCHAN_COMMAND_QUEUE 0x10204400 //0x10201800 -#define MCHAN_STATUS_REGISTER 0x10204404 //0x10201804 +#define MCHAN_COMMAND_QUEUE 0x50204400 //0x10201800 +#define MCHAN_STATUS_REGISTER 0x50204404 //0x10201804 // TEMPORARY FIX DAVIDE #define PLP_DMA_2D_TCDM_BIT 22 -#define PE_MCHAN_COMMAND_QUEUE 0x10201C00 -#define PE_MCHAN_STATUS_REGISTER 0x10201C04 +#define PE_MCHAN_COMMAND_QUEUE 0x50201C00 +#define PE_MCHAN_STATUS_REGISTER 0x50201C04 #define PLP_DMA_TYPE_BIT 0x00000011 #define PLP_DMA_INCR_BIT 0x00000012 diff --git a/mchan_tests/testMCHAN_pe_fc_basic/mchan_tests.h b/mchan_tests/testMCHAN_pe_fc_basic/mchan_tests.h index 254df64..3cd8117 100644 --- a/mchan_tests/testMCHAN_pe_fc_basic/mchan_tests.h +++ b/mchan_tests/testMCHAN_pe_fc_basic/mchan_tests.h @@ -10,14 +10,14 @@ #define LIN 0 #define TWD 1 -#define MCHAN_COMMAND_QUEUE 0x10204400 //0x10201800 -#define MCHAN_STATUS_REGISTER 0x10204404 //0x10201804 +#define MCHAN_COMMAND_QUEUE 0x50204400 //0x10201800 +#define MCHAN_STATUS_REGISTER 0x50204404 //0x10201804 // TEMPORARY FIX DAVIDE #define PLP_DMA_2D_TCDM_BIT 22 -#define PE_MCHAN_COMMAND_QUEUE 0x10201C00 -#define PE_MCHAN_STATUS_REGISTER 0x10201C04 +#define PE_MCHAN_COMMAND_QUEUE 0x50201C00 +#define PE_MCHAN_STATUS_REGISTER 0x50201C04 #define PLP_DMA_TYPE_BIT 0x00000011 #define PLP_DMA_INCR_BIT 0x00000012 diff --git a/mchan_tests/testMCHAN_unaligned/mchan_tests.h b/mchan_tests/testMCHAN_unaligned/mchan_tests.h index 254df64..3cd8117 100644 --- a/mchan_tests/testMCHAN_unaligned/mchan_tests.h +++ b/mchan_tests/testMCHAN_unaligned/mchan_tests.h @@ -10,14 +10,14 @@ #define LIN 0 #define TWD 1 -#define MCHAN_COMMAND_QUEUE 0x10204400 //0x10201800 -#define MCHAN_STATUS_REGISTER 0x10204404 //0x10201804 +#define MCHAN_COMMAND_QUEUE 0x50204400 //0x10201800 +#define MCHAN_STATUS_REGISTER 0x50204404 //0x10201804 // TEMPORARY FIX DAVIDE #define PLP_DMA_2D_TCDM_BIT 22 -#define PE_MCHAN_COMMAND_QUEUE 0x10201C00 -#define PE_MCHAN_STATUS_REGISTER 0x10201C04 +#define PE_MCHAN_COMMAND_QUEUE 0x50201C00 +#define PE_MCHAN_STATUS_REGISTER 0x50201C04 #define PLP_DMA_TYPE_BIT 0x00000011 #define PLP_DMA_INCR_BIT 0x00000012 From ffbb2639592b3a5bcc77d28f199c535275d123ce Mon Sep 17 00:00:00 2001 From: Yvan Tortorella Date: Sun, 13 Aug 2023 09:01:48 +0200 Subject: [PATCH 06/71] Removed some mchan tests from pulp_cluster-mchan-tests.yaml because CI takes too long. --- pulp_cluster-mchan-tests.yaml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/pulp_cluster-mchan-tests.yaml b/pulp_cluster-mchan-tests.yaml index c5a68ab..88d5610 100644 --- a/pulp_cluster-mchan-tests.yaml +++ b/pulp_cluster-mchan-tests.yaml @@ -1,13 +1,13 @@ mchan_tests: testMCHAN_2D_ext_tcdm: path: ./mchan_tests/testMCHAN_2D_ext_tcdm - command: make clean all run + command: testMCHAN_basic: path: ./mchan_tests/testMCHAN_basic command: make clean all run testMCHAN_multi_trans: path: ./mchan_tests/testMCHAN_multi_trans - command: make clean all run + command: testMCHAN_pe_basic: path: ./mchan_tests/testMCHAN_pe_basic command: make clean all run @@ -16,10 +16,10 @@ mchan_tests: command: make clean all run testMCHAN_4k_crossing: path: ./mchan_tests/testMCHAN_4k_crossing - command: make clean all run + command: testMCHAN_basic_FC_TCDM: path: ./mchan_tests/testMCHAN_basic_FC_TCDM - command: make clean all run + command: testMCHAN_not_incremental: path: ./mchan_tests/testMCHAN_not_incremental command: make clean all run From 1fc2c426af1ed50c218f065ee1513233d2e391e0 Mon Sep 17 00:00:00 2001 From: Yvan Tortorella Date: Sat, 9 Sep 2023 20:06:21 +0200 Subject: [PATCH 07/71] Added RedMulE test. --- redmule/Makefile | 5 + redmule/archi_redmule.h | 145 ++ redmule/hal_redmule.h | 284 ++ redmule/inc/golden.h | 4611 +++++++++++++++++++++++++++++++++ redmule/inc/tensor_dim.h | 13 + redmule/inc/w_2D.h | 99 + redmule/inc/w_input.h | 99 + redmule/inc/x_2D.h | 99 + redmule/inc/x_input.h | 99 + redmule/inc/y_2D.h | 99 + redmule/inc/y_input.h | 99 + redmule/inc/z_2D.h | 99 + redmule/inc/z_output.h | 99 + redmule/redmule.c | 91 + redmule/utils/redmule_utils.h | 246 ++ 15 files changed, 6187 insertions(+) create mode 100644 redmule/Makefile create mode 100644 redmule/archi_redmule.h create mode 100644 redmule/hal_redmule.h create mode 100644 redmule/inc/golden.h create mode 100644 redmule/inc/tensor_dim.h create mode 100644 redmule/inc/w_2D.h create mode 100644 redmule/inc/w_input.h create mode 100644 redmule/inc/x_2D.h create mode 100644 redmule/inc/x_input.h create mode 100644 redmule/inc/y_2D.h create mode 100644 redmule/inc/y_input.h create mode 100644 redmule/inc/z_2D.h create mode 100644 redmule/inc/z_output.h create mode 100644 redmule/redmule.c create mode 100644 redmule/utils/redmule_utils.h diff --git a/redmule/Makefile b/redmule/Makefile new file mode 100644 index 0000000..ce481f9 --- /dev/null +++ b/redmule/Makefile @@ -0,0 +1,5 @@ +PULP_APP = test +PULP_APP_SRCS = redmule.c +PULP_CFLAGS = -O3 + +include $(PULP_SDK_HOME)/install/rules/pulp_rt.mk diff --git a/redmule/archi_redmule.h b/redmule/archi_redmule.h new file mode 100644 index 0000000..956c190 --- /dev/null +++ b/redmule/archi_redmule.h @@ -0,0 +1,145 @@ +/* + * Copyright (C) 2022-2023 ETH Zurich and University of Bologna + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * SPDX-License-Identifier: Apache-2.0 + * + * Author: Yvan Tortorella + * + * High-level architecture of RedMulE + * + */ + +#ifndef __ARCHI_REDMULE_H__ +#define __ARCHI_REDMULE_H__ + +/* + * |========================================================================| + * || || + * ||Control and generic configuration register layout || + * |========================================================================| + * || # reg | offset | bits | bitmask || content || + * ||-------+----------+---------+--------------++-------------------------|| + * || 0 | 0x0000 | 31: 0 | 0xFFFFFFFF || TRIGGER || + * || 1 | 0x0004 | 31: 0 | 0xFFFFFFFF || ACQUIRE || + * || 2 | 0x0008 | 31: 0 | 0xFFFFFFFF || EVT_ENABLE || + * || 3 | 0x000c | 31: 0 | 0xFFFFFFFF || STATUS || + * || 4 | 0x0010 | 31: 0 | 0xFFFFFFFF || RUNNING_JOB || + * || 5 | 0x0014 | 31: 0 | 0xFFFFFFFF || SOFT_CLEAR || + * |========================================================================| + * || || + * ||Job-dependent registers layout || + * |========================================================================| + * || # reg | offset | bits | bitmask || content || + * ||-------+----------+---------+--------------++-------------------------|| + * || 0 | 0x0040 | 31: 0 | 0xFFFFFFFF || X_ADDR || + * ||-------+----------+---------+--------------++-------------------------|| + * || 1 | 0x0044 | 31: 0 | 0xFFFFFFFF || W_ADDR || + * ||-------+----------+---------+--------------++-------------------------|| + * || 2 | 0x0048 | 31: 0 | 0xFFFFFFFF || Z_ADDR || + * ||-------+----------+---------+--------------++-------------------------|| + * || 3 | 0x004C | | || Matrix Config 0 Reg || + * || | | 31:16 | 0xFFFF0000 || K Size (W Columns) || + * || | | 15: 0 | 0x0000FFFF || M Size (X Rows) || + * ||-------+----------+---------+--------------++-------------------------|| + * || 4 | 0x0050 | | || Matrix Config 1 Reg || + * || | | 31:16 | 0xFFFFFFFF || N Size (X Cols/W Rows) || + * ||-------+----------+---------+--------------++-------------------------|| + * || 5 | 0x0054 | | || Matrix Arithmetic Reg || + * || | | 12:10 | 0x00001C00 || Operation selection || + * || | | 9: 7 | 0x00000380 || Input/Output format || + * |========================================================================| + * + */ + +#define ARCHI_CL_EVT_ACC0 12 +#define ARCHI_CL_EVT_ACC1 13 +#define __builtin_bitinsert(a,b,c,d) (a | (((b << (32-c)) >> (32-c)) << d)) + +// RedMulE architecture +#define ADDR_WIDTH 32 +#define DATA_WIDTH 256 +#define REDMULE_FMT 16 +#define ARRAY_HEIGHT 4 +#define PIPE_REGS 3 +#define ARRAY_WIDTH 12 /* Superior limit is ARRAY_HEIGHT*PIPE_REGS */ + +// Base address +#define REDMULE_BASE_ADD 0x50201000 + +// Commands +#define REDMULE_TRIGGER 0x00 +#define REDMULE_ACQUIRE 0x04 +#define REDMULE_FINISHED 0x08 +#define REDMULE_STATUS 0x0C +#define REDMULE_RUNNING_JOB 0x10 +#define REDMULE_SOFT_CLEAR 0x14 + +// Registers +#define REDMULE_REG_OFFS 0x40 +// #define REDMULE_REG_X_PTR 0x00 +// #define REDMULE_REG_W_PTR 0x04 +// #define REDMULE_REG_Z_PTR 0x08 +// #define REDMULE_MCFG0_PTR 0x0C +// #define REDMULE_MCFG1_PTR 0x10 +// #define REDMULE_ARITH_PTR 0x14 +#define REDMULE_REG_X_PTR 0x00 +#define REDMULE_REG_W_PTR 0x04 +#define REDMULE_REG_Y_PTR 0x08 +#define REDMULE_REG_Z_PTR 0x0C +#define REDMULE_REG_X_ITER_PTR 0x10 +#define REDMULE_REG_W_ITER_PTR 0x14 +#define REDMULE_REG_LEFTOVERS_PTR 0x18 +#define REDMULE_REG_LEFT_PARAMS_PTR 0x1C +#define REDMULE_REG_X_D1_STRIDE_PTR 0x20 +#define REDMULE_REG_W_TOT_LEN_PTR 0x24 +#define REDMULE_REG_TOT_X_READ_PTR 0x28 +#define REDMULE_REG_W_D0_STRIDE_PTR 0x2C +#define REDMULE_REG_YZ_TOT_LEN_PTR 0x30 +#define REDMULE_REG_YZ_D0_STRIDE_PTR 0x34 +#define REDMULE_REG_YZ_D2_STRIDE_PTR 0x38 +#define REDMULE_REG_X_ROWS_OFFS_PTR 0x3C +#define REDMULE_REG_X_BUFFER_SLOTS_PTR 0x40 +#define REDMULE_REG_X_TOT_LEN_PTR 0x44 +#define REDMULE_REG_OP_SELECTION 0x48 + +// OPs definition +#define MATMUL 0x0 +#define GEMM 0x1 +#define ADDMAX 0x2 +#define ADDMIN 0x3 +#define MULMAX 0x4 +#define MULMIN 0x5 +#define MAXMIN 0x6 +#define MINMAX 0x7 + +// GEMM formats +#define Float8 0x0 +#define Float16 0x1 +#define Float8Alt 0x2 +#define Float16Alt 0x3 + +#define RNE 0x0 +#define RTZ 0x1 +#define OP_FMADD 0x3 +#define OP_ADD 0x5 +#define OP_MUL 0x6 +#define OP_MINMAX 0xA + +// FP Formats encoding +#define FP16 0x2 +#define FP8 0x3 +#define FP16ALT 0x4 +#define FP8ALT 0x5 + +#endif diff --git a/redmule/hal_redmule.h b/redmule/hal_redmule.h new file mode 100644 index 0000000..b4595e0 --- /dev/null +++ b/redmule/hal_redmule.h @@ -0,0 +1,284 @@ +/* + * Copyright (C) 2022-2023 ETH Zurich and University of Bologna + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * SPDX-License-Identifier: Apache-2.0 + * + * Author: Yvan Tortorella + * + * RedMulE Hardware Abstraction Layer (HAL) + */ + +#ifndef __HAL_REDMULE_H__ +#define __HAL_REDMULE_H__ + +#include +#include "inc/tensor_dim.h" + +/* + * + * For control, generic configuration register layout, + * and job-dependent register map, look at redmule_archi.h + * + */ + +/* LOW-LEVEL HAL */ +#define CLUST_CTRL_BASE 0x50200000 +#define REDMULE_ADDR_BASE 0x50201000 +#define REDMULE_ADDR_SPACE 0x00000100 + +#define CLUST_CTRL_HWPE_EN 0x18 +#define CLUS_CTRL_REDMULE_CG_EN_MASK 0x800 + +// For all the following functions we use __builtin_pulp_OffsetedWrite and __builtin_pulp_OffsetedRead +// instead of classic load/store because otherwise the compiler is not able to correctly factorize +// the HWPE base in case several accesses are done, ending up with twice more code + +#define HWPE_WRITE(value, offset) *(int *)(REDMULE_ADDR_BASE + offset) = value +#define HWPE_READ(offset) *(int *)(REDMULE_ADDR_BASE + offset) + +static inline void redmule_x_add_set (unsigned int value) { + HWPE_WRITE(value, REDMULE_REG_OFFS + REDMULE_REG_X_PTR); +} + +static inline void redmule_w_add_set (unsigned int value) { + HWPE_WRITE(value, REDMULE_REG_OFFS + REDMULE_REG_W_PTR); +} + +static inline void redmule_y_add_set (unsigned int value) { + HWPE_WRITE(value, REDMULE_REG_OFFS + REDMULE_REG_Y_PTR); +} + +static inline void redmule_z_add_set (unsigned int value) { + HWPE_WRITE(value, REDMULE_REG_OFFS + REDMULE_REG_Z_PTR); +} + +// static inline void redmule_mcfg_set (uint32_t mcfg0, uint32_t mcfg1) { +// HWPE_WRITE(mcfg0, REDMULE_REG_OFFS + REDMULE_MCFG0_PTR); +// HWPE_WRITE(mcfg1, REDMULE_REG_OFFS + REDMULE_MCFG1_PTR); +// } +// +// static inline void redmule_arith_set (uint32_t arith) { +// HWPE_WRITE(arith, REDMULE_REG_OFFS + REDMULE_ARITH_PTR); +// } + +static inline void hwpe_trigger_job() { + HWPE_WRITE(0, REDMULE_TRIGGER); +} + +static inline int hwpe_acquire_job() { + return HWPE_READ(REDMULE_ACQUIRE); +} + +static inline unsigned int hwpe_get_status() { + return HWPE_READ(REDMULE_STATUS); +} + +static inline void hwpe_soft_clear() { + HWPE_WRITE(1, REDMULE_SOFT_CLEAR); +} + +static inline void hwpe_cg_enable() { + *(volatile int*) (CLUST_CTRL_BASE + CLUST_CTRL_HWPE_EN) |= CLUS_CTRL_REDMULE_CG_EN_MASK; +} + +static inline void hwpe_cg_disable() { + *(volatile int*) (CLUST_CTRL_BASE + CLUST_CTRL_HWPE_EN) &= ~CLUS_CTRL_REDMULE_CG_EN_MASK; +} + +static inline void redmule_evt_wait() { + do { + eu_evt_maskWaitAndClr (1 << ARCHI_CL_EVT_ACC0); + } while((*(int volatile *)(REDMULE_ADDR_BASE + REDMULE_STATUS)) != 0); +} + +// void redmule_cfg (unsigned int x, unsigned int w, unsigned int z, +// uint16_t m_size, uint16_t n_size, uint16_t k_size, +// uint8_t gemm_op, uint8_t gemm_fmt){ +// +// uint32_t mcfg_reg0 = 0; +// uint32_t mcfg_reg1 = 0; +// uint32_t arith_reg = 0; +// +// mcfg_reg0 = (k_size << 16) | +// (m_size << 0); +// mcfg_reg1 = n_size << 0; +// +// arith_reg = (gemm_op << 10) | +// (gemm_fmt << 7); +// +// redmule_x_add_set ((unsigned int) x); +// redmule_w_add_set ((unsigned int) w); +// redmule_z_add_set ((unsigned int) z); +// redmule_mcfg_set ((unsigned int) mcfg_reg0, +// (unsigned int) mcfg_reg1); +// redmule_arith_set ((unsigned int) arith_reg); +// +// } + +void redmule_cfg (uint16_t m_size, uint16_t n_size, uint16_t k_size, uint8_t gemm_ops){ + uint32_t x_iters = 0; + uint32_t w_iters = 0; + uint32_t leftovers = 0; + uint32_t left_params = 0; + uint32_t x_d1_stride = 0; + uint32_t x_rows_offs = 0; + uint32_t w_tot_len = 0; + uint32_t w_d1_len = 0; + uint32_t w_d0_stride = 0; + uint32_t yz_tot_len = 0; + uint32_t yz_d0_stride = 0; + uint32_t yz_d2_stride = 0; + uint32_t tot_x_read = 0; + uint32_t x_buffer_slots = 0; + uint32_t op_selection = 0; + uint16_t tot_stores = 0; + uint16_t w_rows = n_size; + uint16_t depth = DATA_WIDTH/(ARRAY_HEIGHT*FPFORMAT); + uint8_t tile = ARRAY_HEIGHT*(PIPE_REGS + 1); + _Bool x_rows_sub = 0; + _Bool x_cols_sub = 0; + _Bool w_cols_sub = 0; + uint16_t x_rows_iter, + x_rows_iter_tmp, + w_rows_iter, + w_rows_iter_tmp; + uint16_t x_cols_iter, + x_cols_iter_tmp, + w_cols_iter, + w_cols_iter_tmp; + uint8_t x_rows_lftovr, + x_cols_lftovr, + w_rows_lftovr, + w_cols_lftovr, + slots; + + // Calculating the number of iterations alng the two dimensions of the X matrix + x_rows_iter_tmp = m_size/ARRAY_WIDTH; + x_cols_iter_tmp = n_size/tile; + + // Calculating the number of iterations alng the two dimensions of the W matrix + w_rows_iter_tmp = w_rows; + w_cols_iter_tmp = k_size/tile; + + // Calculating the residuals along the input dimensions + x_rows_lftovr = m_size - (x_rows_iter_tmp*ARRAY_WIDTH); + x_cols_lftovr = n_size - (x_cols_iter_tmp*tile); + + // Calculating the residuals along the weight dimensions + w_rows_lftovr = n_size - (ARRAY_HEIGHT*(w_rows/ARRAY_HEIGHT)); + w_cols_lftovr = k_size - (w_cols_iter_tmp*tile); + + if (w_cols_lftovr != 0) + w_cols_iter = w_cols_iter_tmp + 1; + else + w_cols_iter = w_cols_iter_tmp; + + if (w_rows_lftovr != 0) + w_rows_iter = w_rows_iter_tmp + ARRAY_HEIGHT - w_rows_lftovr; + else + w_rows_iter = w_rows_iter_tmp; + + if (x_cols_lftovr != 0) + x_cols_iter = x_cols_iter_tmp + 1; + else + x_cols_iter = x_cols_iter_tmp; + + if (x_rows_lftovr != 0) + x_rows_iter = x_rows_iter_tmp + 1; + else + x_rows_iter = x_rows_iter_tmp; + + if (x_cols_lftovr%depth != 0) + x_buffer_slots = x_cols_lftovr/depth + 1; + else + x_buffer_slots = x_cols_lftovr/depth; + + // Calculating the number of total stores + tot_stores = x_rows_iter*w_cols_iter; + + // Determining if input matrixes are sub-matrixes + if (m_size < ARRAY_WIDTH) + x_rows_sub = 1; + if (n_size < ARRAY_HEIGHT) + x_cols_sub = 1; + if (k_size < tile) + w_cols_sub = 1; + + // Operation selection + switch (gemm_ops) { + case MATMUL: + op_selection |= (RNE << 29 | RNE << 26 | OP_FMADD << 22 | OP_MINMAX << 18 | SRC_FMT << 15 | DST_FMT << 12) | 0; + break; + + case GEMM: + op_selection |= (RNE << 29 | RNE << 26 | OP_FMADD << 22 | OP_MINMAX << 18 | SRC_FMT << 15 | DST_FMT << 12) | 1; + break; + + case ADDMAX: + op_selection |= (RNE << 29 | RTZ << 26 | OP_ADD << 22 | OP_MINMAX << 18 | SRC_FMT << 15 | DST_FMT << 12) | 1; + break; + + case ADDMIN: + op_selection |= (RNE << 29 | RNE << 26 | OP_ADD << 22 | OP_MINMAX << 18 | SRC_FMT << 15 | DST_FMT << 12) | 1; + break; + + case MULMAX: + op_selection |= (RNE << 29 | RTZ << 26 | OP_MUL << 22 | OP_MINMAX << 18 | SRC_FMT << 15 | DST_FMT << 12) | 1; + break; + + case MULMIN: + op_selection |= (RNE << 29 | RNE << 26 | OP_MUL << 22 | OP_MINMAX << 18 | SRC_FMT << 15 | DST_FMT << 12) | 1; + break; + + case MAXMIN: + op_selection |= (RTZ << 29 | RNE << 26 | OP_MINMAX << 22 | OP_MINMAX << 18 | SRC_FMT << 15 | DST_FMT << 12) | 1; + break; + + case MINMAX: + op_selection |= (RNE << 29 | RTZ << 26 | OP_MINMAX << 22 | OP_MINMAX << 18 | SRC_FMT << 15 | DST_FMT << 12) | 1; + break; + } + + // Storing iterations and residuals in registers + x_iters |= x_rows_iter << 16 | x_cols_iter << 0; + w_iters |= w_rows_iter << 16 | w_cols_iter << 0; + leftovers |= x_rows_lftovr << 24 | x_cols_lftovr << 16 | w_rows_lftovr << 8 | w_cols_lftovr << 0; + left_params |= tot_stores << 16 | x_rows_sub << 15 | x_cols_sub << 14 | w_cols_sub << 13; + x_d1_stride = ((4*FPFORMAT)/ADDR_WIDTH)*(((DATA_WIDTH/FPFORMAT)*x_cols_iter_tmp) + x_cols_lftovr); + x_rows_offs = ARRAY_WIDTH*x_d1_stride; + w_tot_len = w_rows_iter*w_cols_iter*x_rows_iter; + w_d0_stride = ((4*FPFORMAT)/ADDR_WIDTH)*(((DATA_WIDTH/FPFORMAT)*w_cols_iter_tmp) + w_cols_lftovr); + yz_tot_len = ARRAY_WIDTH*x_rows_iter*w_cols_iter; + yz_d0_stride = w_d0_stride; + yz_d2_stride = ARRAY_WIDTH*w_d0_stride; + tot_x_read = x_rows_iter*x_cols_iter*w_cols_iter; + + // Writing the computations in configuration register + HWPE_WRITE(x_iters , REDMULE_REG_OFFS + REDMULE_REG_X_ITER_PTR ); + HWPE_WRITE(w_iters , REDMULE_REG_OFFS + REDMULE_REG_W_ITER_PTR ); + HWPE_WRITE(leftovers , REDMULE_REG_OFFS + REDMULE_REG_LEFTOVERS_PTR ); + HWPE_WRITE(left_params , REDMULE_REG_OFFS + REDMULE_REG_LEFT_PARAMS_PTR ); + HWPE_WRITE(x_d1_stride , REDMULE_REG_OFFS + REDMULE_REG_X_D1_STRIDE_PTR ); + HWPE_WRITE(x_rows_offs , REDMULE_REG_OFFS + REDMULE_REG_X_ROWS_OFFS_PTR ); + HWPE_WRITE(tot_x_read , REDMULE_REG_OFFS + REDMULE_REG_TOT_X_READ_PTR ); + HWPE_WRITE(x_buffer_slots, REDMULE_REG_OFFS + REDMULE_REG_X_BUFFER_SLOTS_PTR ); + HWPE_WRITE(w_tot_len , REDMULE_REG_OFFS + REDMULE_REG_W_TOT_LEN_PTR ); + HWPE_WRITE(w_d0_stride , REDMULE_REG_OFFS + REDMULE_REG_W_D0_STRIDE_PTR ); + HWPE_WRITE(yz_tot_len , REDMULE_REG_OFFS + REDMULE_REG_YZ_TOT_LEN_PTR ); + HWPE_WRITE(yz_d0_stride , REDMULE_REG_OFFS + REDMULE_REG_YZ_D0_STRIDE_PTR ); + HWPE_WRITE(yz_d2_stride , REDMULE_REG_OFFS + REDMULE_REG_YZ_D2_STRIDE_PTR ); + HWPE_WRITE(op_selection , REDMULE_REG_OFFS + REDMULE_REG_OP_SELECTION ); +} + +#endif diff --git a/redmule/inc/golden.h b/redmule/inc/golden.h new file mode 100644 index 0000000..3e6ba0d --- /dev/null +++ b/redmule/inc/golden.h @@ -0,0 +1,4611 @@ + /* Header file generated by RedMulE Golden Model */ +uint32_t golden [4608] = { +0x4e0e4e2d, +0x4de54dda, +0x4dbc4e0e, +0x4ed64e3f, +0x4eef4dce, +0x4e554dfc, +0x4d964e2f, +0x4d8a4ddd, +0x4dc24e4c, +0x4daa4d63, +0x4d894e0a, +0x4d7d4dff, +0x4e074d9e, +0x4d684ded, +0x4ea94e69, +0x4e134e7b, +0x4e134e22, +0x4dd64e34, +0x4db64db5, +0x4dfd4d9c, +0x4e0f4e51, +0x4e464d92, +0x4e974db8, +0x4dcb4d14, +0x4d8e4e6a, +0x4dee4eb5, +0x4e1c4d95, +0x4e1e4dcb, +0x4d5d4dff, +0x4dde4d53, +0x4ea44dda, +0x4e1d4d1c, +0x4dad4d30, +0x4e044e27, +0x4ebb4e55, +0x4daa4e47, +0x4dd84ddf, +0x4db04e3a, +0x4e1c4dc0, +0x4e334dc1, +0x4dcd4e2b, +0x4ebe4da2, +0x4da94d64, +0x4d804e7f, +0x4e9b4e14, +0x4e854d7e, +0x4e6e4e6d, +0x4def4e1e, +0x4d5f4def, +0x4daa4e1d, +0x4dc04e29, +0x4f014e5f, +0x4f334dcf, +0x4e864dcf, +0x4dfd4ecf, +0x4d924deb, +0x4e294eda, +0x4e354dae, +0x4da94e49, +0x4d7d4e33, +0x4e284e23, +0x4e124dc0, +0x4eda4e62, +0x4e434e71, +0x4df34e2d, +0x4e0d4e69, +0x4dbd4df7, +0x4da34dbc, +0x4e3c4d9d, +0x4ebb4e01, +0x4e354dd5, +0x4de44d3f, +0x4dc44efa, +0x4dac4ee3, +0x4da34d93, +0x4dee4da1, +0x4db04e9a, +0x4e994db0, +0x4eaf4dfe, +0x4e354d59, +0x4de74dee, +0x4e5d4e60, +0x4eb14ec7, +0x4de04e59, +0x4df54e35, +0x4df14df4, +0x4e274df4, +0x4e4b4dd5, +0x4da14e87, +0x4eb64dbc, +0x4e4f4d77, +0x4d774e04, +0x4ede4e43, +0x4e384df7, +0x4e434e81, +0x4e014e43, +0x4dbc4d9d, +0x4e2f4e1d, +0x4ddf4e69, +0x4f1f4e62, +0x4f0c4dbd, +0x4da74d88, +0x4dfa4f23, +0x4de94e2e, +0x4de44e67, +0x4ded4da6, +0x4d1b4e28, +0x4dbb4e1d, +0x4e1c4dea, +0x4ddc4e67, +0x4e7d4de6, +0x4e1c4e2c, +0x4def4e41, +0x4ddc4e14, +0x4cfa4dc3, +0x4db04dac, +0x4df64e84, +0x4e5a4d77, +0x4ea74dd5, +0x4da64d34, +0x4dca4eb7, +0x4dcb4e9c, +0x4dd74d04, +0x4e294dcd, +0x4d804df3, +0x4e3d4dc5, +0x4e424dd1, +0x4e544d76, +0x4db34d5a, +0x4de84e0a, +0x4e8e4ea2, +0x4e434dd8, +0x4d9b4e16, +0x4e394e8b, +0x4dfa4e02, +0x4e074de8, +0x4dd44ddd, +0x4e054d3f, +0x4e334dac, +0x4d4c4e61, +0x4e634e0b, +0x4e374ddd, +0x4e474e7d, +0x4db94dbd, +0x4e324db6, +0x4e334e87, +0x4e2b4e43, +0x4f284e79, +0x4edc4de8, +0x4e944e5e, +0x4e184f32, +0x4e774dbc, +0x4e8c4ea9, +0x4ea94daa, +0x4e204e43, +0x4da84e3c, +0x4e1b4eb0, +0x4e324e7a, +0x4eb24eb8, +0x4e8b4ea5, +0x4de94e7f, +0x4df54ee2, +0x4e5c4e01, +0x4dee4dbb, +0x4e654e41, +0x4ef54e2d, +0x4e784e84, +0x4e324de8, +0x4dea4ee1, +0x4def4ef6, +0x4e4f4da8, +0x4e764dd0, +0x4def4e84, +0x4e534d88, +0x4f794e34, +0x4ea14db4, +0x4dee4dc1, +0x4ec44e44, +0x4e824ed6, +0x4df44e5e, +0x4e454ec3, +0x4e164ea1, +0x4e6f4e00, +0x4e804e50, +0x4df74e9c, +0x4edf4e1c, +0x4e274dcb, +0x4d784e39, +0x4ec74e1c, +0x4e814e37, +0x4e4b4e8f, +0x4dfa4e45, +0x4e3d4e2a, +0x4df54e3d, +0x4def4e3a, +0x4ed64e2f, +0x4ef34db3, +0x4e8e4e5a, +0x4db64f50, +0x4e344e46, +0x4e1b4ec9, +0x4e804dd6, +0x4d994e1f, +0x4e524e76, +0x4e8d4e8a, +0x4dc14e5b, +0x4efc4eaf, +0x4e524ebb, +0x4df44e78, +0x4df14e78, +0x4dd44dfa, +0x4e484d47, +0x4e204e04, +0x4ebb4ddd, +0x4eca4e44, +0x4dec4d9b, +0x4e124e9c, +0x4dfd4ec7, +0x4e464d6c, +0x4e374dc0, +0x4dbc4e59, +0x4e404d8b, +0x4ef84e31, +0x4de84de1, +0x4dd24d97, +0x4e1c4ea0, +0x4eb44e3a, +0x4e414dd5, +0x4dbc4e5d, +0x4e554e1d, +0x4dfc4e77, +0x4e224e4b, +0x4d6d4ebe, +0x4e2a4dad, +0x4e564dd3, +0x4d2e4e3a, +0x4e954e42, +0x4e3b4dce, +0x4e464eef, +0x4df84ded, +0x4d7b4d39, +0x4cfa4da0, +0x4d164d82, +0x4e324d98, +0x4e4a4ce2, +0x4d644d6a, +0x4d474e27, +0x4d164d4c, +0x4d494d7c, +0x4d3e4d0d, +0x4d124d83, +0x4cbe4d19, +0x4d834d0f, +0x4cdb4d65, +0x4ded4d3d, +0x4d5b4dff, +0x4d704d74, +0x4ccd4df1, +0x4d164d49, +0x4d2f4cc3, +0x4d854d25, +0x4dc34d31, +0x4dcb4d5b, +0x4d514cb3, +0x4d294d98, +0x4cc14dc9, +0x4d904cd1, +0x4d594cd3, +0x4cf74d5e, +0x4dae4cda, +0x4e134d8f, +0x4d6a4cee, +0x4d334d0f, +0x4d564d00, +0x4dae4d88, +0x4d404d78, +0x4d7c4d9c, +0x4d2c4d58, +0x4d284d47, +0x4dfc4db4, +0x4cec4d97, +0x4dc04cf7, +0x4d814d0c, +0x4d284d58, +0x4dad4d63, +0x4d754d12, +0x4d514d77, +0x4d0b4ceb, +0x4d5e4d6b, +0x4da94e5d, +0x4d974e1f, +0x4ec44df3, +0x4ee04d90, +0x4e244da1, +0x4d684e3b, +0x4ddf4da9, +0x4d994dfd, +0x4dba4d6c, +0x4daa4e07, +0x4dd84df3, +0x4dc74d51, +0x4d6e4ddb, +0x4df24dd9, +0x4e154e39, +0x4e024e04, +0x4dbf4e05, +0x4d434de1, +0x4d9e4d73, +0x4daf4dd5, +0x4e514daf, +0x4e5c4dcc, +0x4d5d4d8f, +0x4d7c4e2f, +0x4dd74e80, +0x4dc24dbd, +0x4e114d5f, +0x4d6b4de6, +0x4db44d1a, +0x4eba4dcb, +0x4ded4d24, +0x4d514dc5, +0x4dfd4dfe, +0x4e334e44, +0x4d994e59, +0x4d994ddf, +0x4d664dd4, +0x4de94df2, +0x4e304d80, +0x4daf4e0a, +0x4e3d4dc3, +0x4d724d79, +0x4d424de1, +0x4ea14e4e, +0x4e134d84, +0x4dc94e0c, +0x4df44ddf, +0x4e024db8, +0x4d8a4e6b, +0x4e494e8f, +0x4eb64e5b, +0x4ef94e1d, +0x4e654e2f, +0x4db44ef9, +0x4e5c4e86, +0x4e234eae, +0x4e5a4d8f, +0x4de04e1e, +0x4dbd4e5c, +0x4e374e38, +0x4ded4ec8, +0x4ec54ecd, +0x4e9b4f06, +0x4ea24e8a, +0x4dea4e41, +0x4d704e04, +0x4e344d5a, +0x4e514e01, +0x4ef04e0f, +0x4edd4dfe, +0x4dd04d8b, +0x4e694e6d, +0x4de44f18, +0x4e214d8f, +0x4e074de2, +0x4ded4e56, +0x4e394d8d, +0x4f374e50, +0x4e274dd6, +0x4df04e04, +0x4e5b4e92, +0x4eeb4e99, +0x4e604e66, +0x4df64ebc, +0x4e404e57, +0x4e5c4eaf, +0x4e444e3f, +0x4de84e23, +0x4e7e4e56, +0x4e524e01, +0x4dc54e5b, +0x4ee04e94, +0x4e484e48, +0x4e794e63, +0x4e3c4e21, +0x4e584e6a, +0x4e574f33, +0x4ee84ef5, +0x4fd14f08, +0x4fc64e62, +0x4eab4f04, +0x4e9b4fda, +0x4f274eec, +0x4eaf4f04, +0x4f174e19, +0x4e594f28, +0x4e0d4ea0, +0x4e734eec, +0x4e6a4f0c, +0x4f954ead, +0x4e8f4edf, +0x4ecd4eca, +0x4ea54edd, +0x4dff4edf, +0x4e644e28, +0x4ed24f27, +0x4f294e25, +0x4f954e6c, +0x4e5b4e35, +0x4ea84f4d, +0x4eb44f3b, +0x4ec04e2b, +0x4e914e61, +0x4e8c4ee7, +0x4f054e76, +0x4f5e4ed3, +0x4f164e81, +0x4e554dfd, +0x4ed14e9d, +0x4fa54ec6, +0x4ee34ef2, +0x4e514f1d, +0x4ed84ebf, +0x4ef14ee9, +0x4f024ee2, +0x4e7b4fae, +0x4f3c4ee4, +0x4ec74e59, +0x4e364e97, +0x4f024efb, +0x4f034ecb, +0x4eb24f13, +0x4e774e94, +0x4e384e1b, +0x4dc64edf, +0x4e354ee0, +0x4f974efd, +0x4f9b4e50, +0x4e394ddc, +0x4e554f6b, +0x4e634eb4, +0x4e3b4ea0, +0x4e2a4e17, +0x4e234ed9, +0x4e564ee7, +0x4e9b4e34, +0x4e0b4eda, +0x4ef24e82, +0x4ec34e95, +0x4e554f05, +0x4e8f4efc, +0x4e014e7c, +0x4e454e0a, +0x4e654e28, +0x4e784e20, +0x4ea14ebd, +0x4e2b4e22, +0x4dcf4f6f, +0x4e0f4f35, +0x4e764dcb, +0x4e7f4e08, +0x4e5b4f05, +0x4e834dd7, +0x4f4c4ebd, +0x4eef4d7b, +0x4e784e01, +0x4ea64ee6, +0x4f004f28, +0x4e314e4e, +0x4e4e4ed7, +0x4e7a4e6f, +0x4ee64e9f, +0x4e914e74, +0x4e1f4eba, +0x4f5d4e1f, +0x4e844e22, +0x4da34e2c, +0x4ec54e82, +0x4f134ec8, +0x4e9a4ef4, +0x4e5a4eb6, +0x4db64d6b, +0x4d3b4e0b, +0x4d884df7, +0x4e814e15, +0x4ef04d5f, +0x4da24e2f, +0x4da14e6a, +0x4e6c4d9c, +0x4db14e0b, +0x4dfc4d3c, +0x4d634d97, +0x4d4d4e39, +0x4d994da9, +0x4da04e40, +0x4e284de3, +0x4ddc4e04, +0x4de64dcb, +0x4d914e6b, +0x4d844dd5, +0x4d364d44, +0x4de64d75, +0x4ed74dba, +0x4e5a4d6f, +0x4d6d4d88, +0x4d644e03, +0x4d8a4e96, +0x4dca4d5c, +0x4e1b4d7c, +0x4d864dfc, +0x4dd94d66, +0x4e534df3, +0x4e2a4d4b, +0x4d434d9b, +0x4e5a4ddb, +0x4e564de7, +0x4d8c4dee, +0x4dc74dcc, +0x4d804daa, +0x4e564d97, +0x4e774d5f, +0x4d514d98, +0x4e894d8d, +0x4d6b4d38, +0x4d8e4dc8, +0x4e134df9, +0x4e074d2f, +0x4da04e0f, +0x4d6a4d95, +0x4deb4e54, +0x4d9d4ea3, +0x4e3c4e6c, +0x4f564e8d, +0x4fa94de7, +0x4eb44e3a, +0x4e5d4f3d, +0x4ead4ea7, +0x4ea74f1d, +0x4ea74deb, +0x4e364e17, +0x4e274e45, +0x4e3a4e42, +0x4e114f1a, +0x4ee04eb4, +0x4ed24e33, +0x4e074e16, +0x4df24ea9, +0x4dda4e4c, +0x4e0e4e31, +0x4e564e32, +0x4efb4e0c, +0x4ebb4e64, +0x4e3b4dbf, +0x4e634f0c, +0x4e4f4f04, +0x4e3a4d9c, +0x4e7c4e16, +0x4de24e46, +0x4e914df4, +0x4f274eb6, +0x4ecc4d8a, +0x4db34e0d, +0x4e8a4e8e, +0x4f1f4ef0, +0x4ea34eab, +0x4df34e4a, +0x4e6a4ec1, +0x4eff4e6c, +0x4ed34e45, +0x4e6f4ec6, +0x4ebf4e4a, +0x4e404de4, +0x4d9e4e27, +0x4ecb4e79, +0x4ed64e61, +0x4e4b4e9a, +0x4e734e55, +0x4e1e4e5e, +0x4df74ea1, +0x4e714e66, +0x4fbf4f2d, +0x4fe24ea4, +0x4eb44eab, +0x4e8b4f9c, +0x4e794e41, +0x4e964f69, +0x4e864e07, +0x4e144ec0, +0x4df44e95, +0x4e784e9e, +0x4df94eea, +0x4f404f28, +0x4e934f87, +0x4ec54e29, +0x4eb64ec1, +0x4e9f4e8f, +0x4e754def, +0x4e9b4e75, +0x4f684e29, +0x4ed84eac, +0x4e524da6, +0x4ea64f2e, +0x4ea94f46, +0x4e524e5b, +0x4e994e4d, +0x4e9e4ea2, +0x4ed34ded, +0x4fe34f10, +0x4ee24df6, +0x4f054e13, +0x4ef34ed1, +0x4ef24ef8, +0x4e1f4eb6, +0x4e254ecc, +0x4ea34ea1, +0x4e984ef8, +0x4ee04e43, +0x4e384f0e, +0x4f7b4e74, +0x4ee64df6, +0x4de84eba, +0x4f1a4e70, +0x4ed24e91, +0x4e844f2a, +0x4ea04ed3, +0x4e044e1c, +0x4e124dfd, +0x4e0b4de2, +0x4ecf4e45, +0x4edb4d91, +0x4de14e15, +0x4e074ee1, +0x4dc14da5, +0x4e0f4e24, +0x4e264d89, +0x4d974da5, +0x4ddb4e39, +0x4e3b4e48, +0x4d9f4e20, +0x4e824e65, +0x4d9e4e0b, +0x4dbd4de7, +0x4da54e42, +0x4da44dc9, +0x4da94dc0, +0x4e5c4e74, +0x4ee14de2, +0x4eb14e10, +0x4da64d66, +0x4e1f4eba, +0x4e614e9c, +0x4dcb4d43, +0x4e084d98, +0x4dea4e22, +0x4e764ddd, +0x4e864e4e, +0x4dfe4d7b, +0x4e374d4c, +0x4e314d97, +0x4ebe4e4f, +0x4da14e34, +0x4d9e4e64, +0x4e044df2, +0x4e3a4dd1, +0x4ea44dd7, +0x4db94e09, +0x4e9a4d96, +0x4dd54d95, +0x4d544e1d, +0x4e4a4de8, +0x4e6e4dd0, +0x4e494e53, +0x4d684d86, +0x4dee4da0, +0x4df44e81, +0x4dcd4de0, +0x4eae4ddd, +0x4f094dce, +0x4df04e0f, +0x4df54ecc, +0x4dca4ddf, +0x4d7f4dd6, +0x4e0d4dc1, +0x4d9f4dff, +0x4d554dd5, +0x4d844daa, +0x4da94e57, +0x4eb34e39, +0x4dea4e60, +0x4e184dd4, +0x4dbf4e4a, +0x4d9f4d8b, +0x4d9f4d54, +0x4de54e12, +0x4e244d9b, +0x4e484db4, +0x4d884dba, +0x4d394e72, +0x4d654e4e, +0x4e054cef, +0x4dbe4da6, +0x4d714e07, +0x4deb4d4a, +0x4e5e4e37, +0x4e204dc0, +0x4d5a4d3a, +0x4e314dbd, +0x4e774e64, +0x4da24e40, +0x4da54e46, +0x4db44db6, +0x4e174db0, +0x4e144dc7, +0x4dc04e24, +0x4e254d5b, +0x4e084d91, +0x4db04e39, +0x4e554ddc, +0x4e174d39, +0x4dd54e75, +0x4e2c4de9, +0x4d5a4d74, +0x4d5b4dde, +0x4d094dc3, +0x4e084d93, +0x4e794da7, +0x4dea4d85, +0x4d6f4e38, +0x4d924d63, +0x4d6a4df3, +0x4d9c4cd6, +0x4d564d83, +0x4d8e4dd5, +0x4da64d84, +0x4d2a4e24, +0x4e224dbb, +0x4de84da3, +0x4dcc4d30, +0x4d874db8, +0x4d3b4d63, +0x4d784d3a, +0x4d6c4d6c, +0x4df44d72, +0x4e254d6a, +0x4d204d3a, +0x4d004e25, +0x4d644dfc, +0x4d954cf9, +0x4d3b4d05, +0x4d0e4db6, +0x4dd14d12, +0x4e0b4d95, +0x4de44d6a, +0x4d874d38, +0x4df44e22, +0x4e094dc1, +0x4dca4d9d, +0x4d6a4dd9, +0x4d3e4d8f, +0x4dbb4dba, +0x4d7b4d84, +0x4d4d4e1e, +0x4e004d67, +0x4d544d27, +0x4cda4db9, +0x4e294db1, +0x4e224d71, +0x4d614df2, +0x4d524df0, +0x4d904d31, +0x4db34e17, +0x4dac4e1b, +0x4ec64e08, +0x4eea4da8, +0x4e2c4dcb, +0x4df04ee0, +0x4dcc4dda, +0x4d9a4ea1, +0x4d914dac, +0x4daf4e2b, +0x4dc64d8d, +0x4e0e4e1f, +0x4d574e23, +0x4e3d4e3b, +0x4e664e32, +0x4da74e1f, +0x4d474e4d, +0x4d694da1, +0x4df54d6f, +0x4e094e0b, +0x4e414d7c, +0x4e4f4e09, +0x4df94db3, +0x4de94e6a, +0x4e2d4f3e, +0x4e444da0, +0x4df64e1a, +0x4d914dfc, +0x4dcf4d48, +0x4eb44e23, +0x4e404ce1, +0x4da54d7d, +0x4e344e55, +0x4ea24e67, +0x4db54e48, +0x4e0b4e25, +0x4dc44e1a, +0x4df34e27, +0x4e314de6, +0x4de84e6f, +0x4e704d85, +0x4dd94d69, +0x4d184de8, +0x4e044da7, +0x4e2c4dd3, +0x4e234e3d, +0x4dd24dd6, +0x4de24e0b, +0x4dc34e76, +0x4da54e4c, +0x4ec54e8f, +0x4f7d4e4d, +0x4e194df4, +0x4dc44efc, +0x4dd84de0, +0x4dc94ec5, +0x4e2b4dd7, +0x4d8d4e79, +0x4daa4e5a, +0x4e3f4e09, +0x4d994e7d, +0x4ed94e50, +0x4e5b4ec7, +0x4e6d4e31, +0x4e524ea8, +0x4dfa4e4a, +0x4e284d61, +0x4e304dfa, +0x4ebd4dbd, +0x4f174e1c, +0x4e344dad, +0x4dd84e90, +0x4e404f2e, +0x4e2a4d4b, +0x4deb4d89, +0x4de84e42, +0x4e294d63, +0x4f354e46, +0x4e254dd4, +0x4e3a4d5f, +0x4e5b4ee4, +0x4ea54e97, +0x4e344e51, +0x4e534e6b, +0x4e144e7a, +0x4e0e4e12, +0x4e0d4df0, +0x4de54ebc, +0x4ead4dbb, +0x4e624df9, +0x4d914e34, +0x4ec34e53, +0x4e184e2a, +0x4eac4e5c, +0x4e1a4e3c, +0x4ded4db4, +0x4dd84e56, +0x4e204dd5, +0x4f274f02, +0x4f174e56, +0x4e354e18, +0x4e284f47, +0x4e264e4c, +0x4db74e8c, +0x4e2b4dab, +0x4de74e62, +0x4d764e47, +0x4e324dd3, +0x4d9b4e41, +0x4ee14e36, +0x4e4e4eda, +0x4e284e46, +0x4e654e76, +0x4dd64df2, +0x4e0c4dc5, +0x4da94e02, +0x4eb14da7, +0x4e9c4e0c, +0x4e4b4db8, +0x4dca4ea5, +0x4e034ea0, +0x4e304d89, +0x4e2f4da8, +0x4e244e4f, +0x4e2a4dce, +0x4f064e77, +0x4e7e4d80, +0x4df14d88, +0x4e124e6b, +0x4eed4e4f, +0x4e444e20, +0x4e384df4, +0x4e444e62, +0x4e7d4e3a, +0x4eac4e02, +0x4e074e74, +0x4e844df2, +0x4e3a4dfe, +0x4d864e0c, +0x4e724e4d, +0x4e394dfb, +0x4e464e61, +0x4e424dfd, +0x4dbb4de9, +0x4d6f4e30, +0x4d824dfa, +0x4ec54e70, +0x4f064da1, +0x4e474e5b, +0x4dad4e79, +0x4e614dd5, +0x4dae4e44, +0x4e4f4dee, +0x4d9e4e40, +0x4ddf4e3e, +0x4e844dab, +0x4da74e5e, +0x4f0e4e58, +0x4e424e10, +0x4e244e18, +0x4e084e7c, +0x4db74e14, +0x4e224db8, +0x4e074df6, +0x4ebc4d8b, +0x4eb34db7, +0x4d9e4d91, +0x4db84e45, +0x4dc64ed5, +0x4da14db4, +0x4e4c4d70, +0x4d8a4e72, +0x4d7f4dc9, +0x4f304e1d, +0x4e934d7c, +0x4de44dd2, +0x4e724e93, +0x4f3d4e34, +0x4de74e42, +0x4df44e76, +0x4df64eae, +0x4e504e2b, +0x4e664e4b, +0x4de24e63, +0x4e804de1, +0x4dd74d96, +0x4ce74dee, +0x4e604d9a, +0x4e684dc3, +0x4e2d4e4f, +0x4e314e06, +0x4e5b4e00, +0x4dda4e77, +0x4dee4e1a, +0x4f154e83, +0x4f9a4e59, +0x4e604e31, +0x4e944f31, +0x4e364df9, +0x4e484eaf, +0x4e494dd9, +0x4e354e2c, +0x4e484ec4, +0x4e244e46, +0x4dbc4e95, +0x4f2e4edf, +0x4e2f4eeb, +0x4e314e0d, +0x4e754ef6, +0x4dd94dd4, +0x4e1f4d8f, +0x4dc84e09, +0x4ef24dfd, +0x4ed04e8f, +0x4e124de5, +0x4df44ebd, +0x4dda4ece, +0x4e4e4d36, +0x4e284e0d, +0x4e244ead, +0x4e794df9, +0x4f044eae, +0x4e714deb, +0x4e7b4d7e, +0x4ee24e6d, +0x4f2b4e66, +0x4df64e6f, +0x4e284ec0, +0x4e284e7a, +0x4e4e4e28, +0x4ef74e66, +0x4deb4ed3, +0x4eb34e05, +0x4e884dd9, +0x4dfd4e61, +0x4e894e3b, +0x4e504e3a, +0x4e514ec6, +0x4de04e3f, +0x4e184dcf, +0x4db74e1c, +0x4e1f4e2e, +0x4f104e65, +0x4fb44dc9, +0x4e634e91, +0x4e564f7c, +0x4e0d4e23, +0x4dea4e8d, +0x4e184db7, +0x4da84e14, +0x4d714e1e, +0x4e354df0, +0x4dec4e39, +0x4f104e2a, +0x4e504e78, +0x4e774e31, +0x4dca4f16, +0x4e1c4d9c, +0x4e114da1, +0x4e034e25, +0x4ecf4d87, +0x4ec74e2a, +0x4e444d9b, +0x4dc24e78, +0x4e084f13, +0x4ddc4d85, +0x4db34dd4, +0x4e264e2e, +0x4e2e4df4, +0x4f224e60, +0x4ebb4d9d, +0x4e654d96, +0x4e4b4e39, +0x4ee24e0f, +0x4dd04e96, +0x4e264e47, +0x4e324e9e, +0x4e814dfa, +0x4e734e39, +0x4d8e4ec3, +0x4e9d4dfe, +0x4e434ded, +0x4d854ddb, +0x4e594e00, +0x4e654def, +0x4e314e9c, +0x4dd14df9, +0x4d874d16, +0x4d674e0a, +0x4d494dfb, +0x4e264daa, +0x4e604d51, +0x4d774d6f, +0x4da74eb9, +0x4d9f4d87, +0x4d9e4ddd, +0x4dc14d4e, +0x4d444dc3, +0x4d534d6b, +0x4d3f4d48, +0x4d6f4ddb, +0x4de94db5, +0x4ddb4dfc, +0x4d7e4de2, +0x4d6f4e02, +0x4d134d80, +0x4d084d1b, +0x4d524dc7, +0x4d8b4d7f, +0x4dfe4db3, +0x4d124d24, +0x4d8c4dd6, +0x4d614e24, +0x4dcd4d12, +0x4d834d2d, +0x4dc84db3, +0x4dd54d3f, +0x4e444d9e, +0x4dbc4d09, +0x4d294d01, +0x4d7d4d96, +0x4e104dd3, +0x4dd24d50, +0x4da84d5d, +0x4d984dac, +0x4d5f4d92, +0x4de54d9a, +0x4da54dcd, +0x4dd64d6a, +0x4d654d0c, +0x4d424d4c, +0x4dbd4dd3, +0x4d894db7, +0x4de34dcd, +0x4d644d99, +0x4d4a4cf5, +0x4d034dd3, +0x4d6c4d77, +0x4e284db3, +0x4e344d32, +0x4d9a4d68, +0x4db74dad, +0x4d6d4dad, +0x4d304e1e, +0x4d9d4d3d, +0x4d294df3, +0x4ce24d33, +0x4d674d74, +0x4d114d9d, +0x4e344dca, +0x4dca4d92, +0x4d334d8c, +0x4db54da0, +0x4d324d3b, +0x4d4f4d0f, +0x4da44cf7, +0x4e284d97, +0x4d7d4d40, +0x4d564d00, +0x4cc84e0a, +0x4d084e0d, +0x4d524d21, +0x4d5a4cce, +0x4ced4de3, +0x4db94ced, +0x4e164dbd, +0x4da14cf5, +0x4d4f4d57, +0x4daf4ddc, +0x4db24dfa, +0x4d1c4e26, +0x4d314d8a, +0x4cd34d88, +0x4dac4da8, +0x4d914d50, +0x4d564d76, +0x4dab4d5b, +0x4d934d56, +0x4cef4d6f, +0x4ddb4d8e, +0x4dd84d6a, +0x4dff4db3, +0x4d734d77, +0x4df94e14, +0x4dc54e48, +0x4dcc4dbd, +0x4ec34e10, +0x4f5c4df1, +0x4e5d4e1c, +0x4df14edc, +0x4e2d4dc0, +0x4de34e62, +0x4e394d61, +0x4d794e3b, +0x4d764e3f, +0x4dc84daf, +0x4d8d4e42, +0x4f054e79, +0x4e3d4e44, +0x4e924dce, +0x4df74eb7, +0x4db04dc4, +0x4df34da3, +0x4dd64db6, +0x4ea34dc5, +0x4ec84d9e, +0x4e224d7c, +0x4d924ee2, +0x4db24f08, +0x4df64dc3, +0x4e504d31, +0x4dd74e8f, +0x4e1a4d6e, +0x4f144e86, +0x4e854d99, +0x4e464d54, +0x4e604e26, +0x4f024e4b, +0x4e044e22, +0x4e0e4e08, +0x4e4a4e68, +0x4e5a4de0, +0x4e3d4e36, +0x4de24e54, +0x4e144df7, +0x4e2f4dc6, +0x4d704e56, +0x4e2a4dd2, +0x4e7f4e35, +0x4e204e7c, +0x4d7e4db4, +0x4dc24dc6, +0x4d9c4e0e, +0x4df84df6, +0x4eb04dfa, +0x4ee44dbc, +0x4da74df7, +0x4d804e6e, +0x4dcf4dd3, +0x4d964e02, +0x4e574df7, +0x4db14e54, +0x4d544e11, +0x4de14e15, +0x4d6c4e29, +0x4e7b4dfd, +0x4dfb4e56, +0x4db14e05, +0x4dde4e80, +0x4d954db5, +0x4de34d5e, +0x4dea4e10, +0x4e654d4f, +0x4e8c4dbc, +0x4ddc4d8d, +0x4daf4e2d, +0x4d7d4eb2, +0x4dfc4d12, +0x4dcf4d73, +0x4ddf4e1f, +0x4e584da2, +0x4e984e2c, +0x4dec4d5b, +0x4d9f4d85, +0x4e434de6, +0x4e3e4dca, +0x4db74e6e, +0x4dc14e2e, +0x4da44dc9, +0x4e024dc9, +0x4e2f4df8, +0x4dfe4e59, +0x4e644d43, +0x4ddd4d80, +0x4d574e15, +0x4df34e48, +0x4e2f4dad, +0x4e284e47, +0x4db74d94, +0x4d444d5f, +0x4d6d4de2, +0x4d024d9b, +0x4e084dbe, +0x4e164d52, +0x4d664d7f, +0x4d554e4e, +0x4d7f4d0f, +0x4d6e4d95, +0x4dad4ce8, +0x4d424d69, +0x4d334dd8, +0x4d614d9f, +0x4d434dcb, +0x4e124dbe, +0x4da14dd1, +0x4da94d81, +0x4d574dff, +0x4cef4d5b, +0x4ccd4d36, +0x4d204d6a, +0x4e304d73, +0x4e024d5c, +0x4d134d09, +0x4d084dee, +0x4ce24e28, +0x4d534ca5, +0x4d254ce4, +0x4d444dec, +0x4dc94d3a, +0x4e0f4da0, +0x4d804d36, +0x4d4c4c83, +0x4da24d64, +0x4e174e08, +0x4d3b4d3f, +0x4d824db3, +0x4d874d60, +0x4d7a4d58, +0x4da74d47, +0x4d1c4d24, +0x4e064d2b, +0x4dc64d16, +0x4cdf4d87, +0x4db94d70, +0x4dc94d27, +0x4d8f4dbb, +0x4d164d3f, +0x4e6c4e12, +0x4e814e94, +0x4e604ec0, +0x4f8e4e3b, +0x4f5a4df8, +0x4e884e88, +0x4e404f1c, +0x4ddf4dea, +0x4e4e4ecb, +0x4e324e15, +0x4dc54ec9, +0x4dd24e88, +0x4e384e51, +0x4e034e88, +0x4ef64e75, +0x4e884eda, +0x4e774ea8, +0x4df34ec2, +0x4e234e12, +0x4e0a4df5, +0x4e654e86, +0x4ede4df8, +0x4ea94e52, +0x4e3d4da0, +0x4e374f16, +0x4df54ee0, +0x4e7a4def, +0x4e6b4dc7, +0x4e024ea5, +0x4e354e52, +0x4f2c4e6f, +0x4e5d4dd0, +0x4e364e27, +0x4e774e9b, +0x4f734eaa, +0x4dfc4e60, +0x4e604f07, +0x4dfd4e77, +0x4e7a4e39, +0x4e654e32, +0x4e284e35, +0x4eb34dfe, +0x4e8f4e20, +0x4e054e7a, +0x4eca4e5b, +0x4ec34dcf, +0x4ea44eee, +0x4ded4e05, +0x4e814e2a, +0x4de34e68, +0x4dc54e93, +0x4f2a4e6a, +0x4fa34df5, +0x4e504e54, +0x4e464edf, +0x4e354e9a, +0x4e704ef8, +0x4e3d4da1, +0x4dfb4e71, +0x4d8e4e64, +0x4e3d4e2f, +0x4dd64e51, +0x4ea04ecd, +0x4eba4ecf, +0x4e654e64, +0x4dfd4ed8, +0x4e1a4e11, +0x4e5c4dc1, +0x4e314e66, +0x4efa4e6d, +0x4f064dfe, +0x4e0a4dd9, +0x4df14eed, +0x4e124ef5, +0x4e564dc6, +0x4dec4e31, +0x4db64e66, +0x4e404d8c, +0x4f374e38, +0x4ebe4dc4, +0x4de64e42, +0x4eab4e8b, +0x4eee4e84, +0x4e134ec7, +0x4e7c4e45, +0x4e724ea5, +0x4e914e7f, +0x4e744e53, +0x4e414e5f, +0x4ea34e9c, +0x4e064da1, +0x4dce4e0b, +0x4ed84e5a, +0x4e5c4deb, +0x4eaf4ecd, +0x4dc04e17, +0x4df54de1, +0x4de44e47, +0x4de74e55, +0x4f364e23, +0x4f544e02, +0x4e774e1d, +0x4e3a4ef4, +0x4e2f4e11, +0x4dd74ef2, +0x4e6f4d78, +0x4da14e4b, +0x4df24dc0, +0x4e314de6, +0x4e124ed7, +0x4eba4e15, +0x4e6e4e06, +0x4e114e1e, +0x4dc74e69, +0x4d9a4df4, +0x4e164dbb, +0x4e224dd8, +0x4e5c4dad, +0x4ea64df8, +0x4e124d9d, +0x4dd94ec1, +0x4ded4f1a, +0x4de34d6c, +0x4e414dc5, +0x4d964e66, +0x4e154def, +0x4ec84e17, +0x4e8e4da2, +0x4de24de3, +0x4e9c4ead, +0x4f0e4e8d, +0x4e424e35, +0x4e0f4ebd, +0x4e1b4e8e, +0x4e374e29, +0x4e334e5f, +0x4e104e74, +0x4e6f4dc6, +0x4e074dd4, +0x4d7c4e8f, +0x4ea64da2, +0x4ea04ddd, +0x4e444edc, +0x4dcf4e3f, +0x4dbc4d64, +0x4d7b4e2a, +0x4d704e0c, +0x4e7f4d5c, +0x4e824d22, +0x4e344dc7, +0x4d434eb8, +0x4db44d93, +0x4d6c4e62, +0x4df94d5d, +0x4d4c4daf, +0x4d5e4d4d, +0x4d684dc0, +0x4d394e15, +0x4e8d4e00, +0x4e3d4df5, +0x4d3d4dbd, +0x4d684ddc, +0x4d324d55, +0x4d584cec, +0x4dcc4d8d, +0x4ded4d55, +0x4e144dfd, +0x4d694d4e, +0x4d604e63, +0x4db84e56, +0x4daf4d40, +0x4db74d4b, +0x4d574d88, +0x4df04d78, +0x4ea74ddf, +0x4ddf4d74, +0x4d454d1f, +0x4dc04dda, +0x4e5e4e11, +0x4dfb4de0, +0x4dbe4db1, +0x4df04df9, +0x4de64db3, +0x4e034d9c, +0x4d734e08, +0x4df14d70, +0x4dc54dca, +0x4d154d97, +0x4e614db0, +0x4dc54d67, +0x4d854e20, +0x4d624d6b, +0x4df64d80, +0x4d6a4e6f, +0x4dc44e44, +0x4e7a4e6c, +0x4f7d4dd6, +0x4dc44dda, +0x4db64f2e, +0x4ddb4e17, +0x4dae4e6f, +0x4dd74d64, +0x4dba4e04, +0x4de44dc3, +0x4e3a4e27, +0x4d7c4e65, +0x4ead4e06, +0x4e4d4dfa, +0x4e0d4df1, +0x4dd64eb9, +0x4d754e4e, +0x4df04dca, +0x4e134dde, +0x4ef24de3, +0x4e7e4dfe, +0x4dd24d4a, +0x4dac4e5c, +0x4dce4e79, +0x4e154d0a, +0x4df14dfc, +0x4db24e77, +0x4e5c4d70, +0x4ee64e18, +0x4e6b4db1, +0x4e154d81, +0x4e154e18, +0x4e9d4dff, +0x4e0b4e3a, +0x4dee4e75, +0x4e0e4e31, +0x4e454de0, +0x4e784e2c, +0x4da54e7c, +0x4edc4dad, +0x4e0d4df9, +0x4d714e39, +0x4e504d8a, +0x4e384dd8, +0x4ddd4e5e, +0x4d7e4e18, +0x4df24dd4, +0x4dd64e8f, +0x4dc14e08, +0x4f764e1b, +0x4f194dea, +0x4eb44e8a, +0x4de24f5a, +0x4e7d4df5, +0x4e404e87, +0x4ea94db8, +0x4da24e79, +0x4d4a4e33, +0x4e184e4b, +0x4e004e44, +0x4e9f4e51, +0x4e734e5d, +0x4e514e09, +0x4e524e4f, +0x4dc74ddf, +0x4e214dd6, +0x4e624e2f, +0x4ea44ddb, +0x4eb94e07, +0x4dcc4ded, +0x4dcd4ed5, +0x4dce4ebf, +0x4dd44d8e, +0x4e364d90, +0x4de24e69, +0x4e4c4d98, +0x4ecc4e10, +0x4ebc4d5d, +0x4e004dd7, +0x4e8f4e78, +0x4ee14ea8, +0x4e2e4e82, +0x4e1d4e0b, +0x4e364e94, +0x4e1d4dff, +0x4dd34e2d, +0x4e024e2e, +0x4e834def, +0x4e304dc1, +0x4dc84e18, +0x4e7b4dcc, +0x4e914deb, +0x4ead4e53, +0x4de74e39, +0x4dde4db6, +0x4d9c4e7e, +0x4d7f4e4d, +0x4e1d4dd3, +0x4efe4dee, +0x4e294e96, +0x4e124e9f, +0x4e034dfb, +0x4e4d4e55, +0x4df44d8e, +0x4dd34e23, +0x4dd24dbf, +0x4dab4e6f, +0x4e0d4e07, +0x4e894e82, +0x4e3f4e4c, +0x4e644e3b, +0x4e2d4e44, +0x4dc54db1, +0x4dcf4db7, +0x4e544e33, +0x4e124e27, +0x4e284e13, +0x4df74d7e, +0x4df04eb3, +0x4df14eda, +0x4df44d04, +0x4dfb4d89, +0x4dd44e5b, +0x4e564d9e, +0x4ec24e47, +0x4e0c4d55, +0x4e2c4d56, +0x4e3c4d9b, +0x4ed34e5b, +0x4de14e76, +0x4e314e24, +0x4dec4e21, +0x4e354dfe, +0x4e7f4e3a, +0x4dc94e71, +0x4ea74e07, +0x4e4d4dbf, +0x4d4e4e21, +0x4e444dff, +0x4e344dbc, +0x4e9d4e63, +0x4e094ddd, +0x4d524d5f, +0x4d4d4e04, +0x4d7b4dc9, +0x4e974e22, +0x4ec44dc6, +0x4e144e0e, +0x4d644ea4, +0x4df14dbc, +0x4d9f4e04, +0x4dcb4db5, +0x4d694dbc, +0x4da84dc0, +0x4e164e3e, +0x4d5d4e73, +0x4eb74e6c, +0x4de64e6f, +0x4e024dc8, +0x4d834e9e, +0x4d6f4d8c, +0x4dfd4d25, +0x4d9a4e12, +0x4e954d58, +0x4e744de8, +0x4df84d50, +0x4e0e4ddf, +0x4de14eb7, +0x4d954d5f, +0x4dcf4d8a, +0x4dc74e35, +0x4db64d95, +0x4f004db7, +0x4dc94d61, +0x4daf4daa, +0x4e124e2e, +0x4ed44e12, +0x4db54e2f, +0x4dfc4e30, +0x4e394e4e, +0x4e304e06, +0x4e114ddd, +0x4dc24e6b, +0x4e6a4d96, +0x4e304d42, +0x4d214e1f, +0x4e8c4de8, +0x4dcc4dbc, +0x4e614e03, +0x4e234df3, +0x4d6b4d73, +0x4d834e65, +0x4de44e07, +0x4ecc4e20, +0x4eca4d8e, +0x4dc74ddf, +0x4d934ead, +0x4df74d81, +0x4dac4e5a, +0x4dd74d5e, +0x4d534e0c, +0x4cc34db1, +0x4dac4e09, +0x4d974e44, +0x4e6c4df3, +0x4da14e2d, +0x4df14df0, +0x4d864e35, +0x4da94d8f, +0x4d924ce6, +0x4e024e33, +0x4e1e4d57, +0x4e9b4d6f, +0x4db44cf6, +0x4e0a4df2, +0x4db64e79, +0x4d874d5e, +0x4d984d94, +0x4d9f4dd8, +0x4e074d9b, +0x4e904db5, +0x4e044d8f, +0x4df34d37, +0x4e0b4dbb, +0x4e724e46, +0x4d884e38, +0x4dd04de0, +0x4e1c4e34, +0x4de94ddc, +0x4dc54df7, +0x4dcb4e26, +0x4e104dc6, +0x4dda4db4, +0x4d424e2c, +0x4e344dda, +0x4df64df9, +0x4e604e4c, +0x4da14dce, +0x4ddc4dfb, +0x4df64dfc, +0x4e794e60, +0x4f0d4ee5, +0x4f644e50, +0x4e144e51, +0x4e424f68, +0x4dea4e0e, +0x4e284e93, +0x4e3a4dd7, +0x4d3a4e8b, +0x4dd74e6a, +0x4e774e04, +0x4de54e54, +0x4ead4e6e, +0x4ed84e4d, +0x4e134e36, +0x4e574ef5, +0x4df74e79, +0x4dd74dca, +0x4e464dc8, +0x4ea04df8, +0x4eab4e57, +0x4de84dbd, +0x4ddd4ebc, +0x4e754f0b, +0x4e2c4d8e, +0x4e384d68, +0x4de24e5d, +0x4e444e27, +0x4f244e80, +0x4e594db1, +0x4df54dcb, +0x4e7c4e8c, +0x4eca4ec9, +0x4e6b4e37, +0x4e1e4e74, +0x4e4e4ebb, +0x4e604e39, +0x4e6a4e2e, +0x4ddd4ebd, +0x4e884dd9, +0x4e214db2, +0x4daf4de8, +0x4e7e4e9e, +0x4e784e1d, +0x4e694e9e, +0x4df04e48, +0x4e154e18, +0x4d9d4e0d, +0x4db64de2, +0x4e904e03, +0x4f644db2, +0x4e444e3c, +0x4e614f07, +0x4e2a4e19, +0x4dea4e27, +0x4e0d4dda, +0x4d6f4e2a, +0x4dae4df2, +0x4e124e27, +0x4d564e69, +0x4ec94e61, +0x4dfb4e75, +0x4e4b4df1, +0x4e004e66, +0x4dd54df6, +0x4dd94d9c, +0x4e0f4dc1, +0x4e664dff, +0x4e5e4e12, +0x4e064dc5, +0x4d9a4ea9, +0x4d9c4edd, +0x4dfa4d79, +0x4de74dec, +0x4dde4e23, +0x4e254d74, +0x4ed24e5e, +0x4eb24dbe, +0x4df84d68, +0x4e5f4e4e, +0x4eae4e72, +0x4d794e68, +0x4df44e1b, +0x4e0b4e5c, +0x4e144e38, +0x4e1e4e30, +0x4da54e6e, +0x4e834e15, +0x4e054d85, +0x4d584dc2, +0x4e6a4dfe, +0x4df24dbd, +0x4e344e78, +0x4de84e58, +0x4e614ed2, +0x4ebf4e8f, +0x4e4a4ef5, +0x4f754ed0, +0x500b4dcc, +0x4ed74e3a, +0x4e6b4f6a, +0x4e694e3d, +0x4ef64ee1, +0x4e8a4de0, +0x4dd94ea9, +0x4e634e98, +0x4eb54e1a, +0x4dfb4f27, +0x4f054eec, +0x4ec34ee4, +0x4ed64ede, +0x4e114eee, +0x4dc84e56, +0x4e6d4e3e, +0x4e824ebb, +0x4f274e5e, +0x4f294ec1, +0x4e074dc5, +0x4e3a4f4b, +0x4e9b4f06, +0x4e684e12, +0x4e6c4e1b, +0x4e534ec0, +0x4e714dd4, +0x4f594ea6, +0x4ed94d84, +0x4e564dd2, +0x4e414ecf, +0x4f784e5b, +0x4ee44eaa, +0x4e0f4ec2, +0x4e994ea8, +0x4ed04e0f, +0x4e7e4e36, +0x4e094ea4, +0x4ed14ea2, +0x4e2d4e45, +0x4dfe4e7f, +0x4f084ea7, +0x4f1e4e5b, +0x4e8d4f1b, +0x4e1f4e63, +0x4d584d50, +0x4d634dc6, +0x4cf44d51, +0x4e934dea, +0x4e414d63, +0x4dd54d61, +0x4d604e3a, +0x4d9f4dd1, +0x4d1d4e21, +0x4d9e4d52, +0x4d534df7, +0x4d574d8c, +0x4d524dad, +0x4ccb4ddb, +0x4e334e0b, +0x4e174e0d, +0x4d644d8e, +0x4d7d4e15, +0x4d3c4db1, +0x4d814d35, +0x4ddf4d5b, +0x4e154d29, +0x4dbe4d2c, +0x4d964ca5, +0x4d8b4dd8, +0x4d1f4deb, +0x4d794d1e, +0x4d9c4ce2, +0x4d134de9, +0x4d994d46, +0x4e324ddf, +0x4dae4d14, +0x4d7d4d49, +0x4dc04dd3, +0x4e174e07, +0x4d3c4de2, +0x4dd04dcc, +0x4d244dff, +0x4dc44d49, +0x4d944d5e, +0x4d764e1d, +0x4dce4d29, +0x4d844d50, +0x4d394d8a, +0x4dd34dcc, +0x4de94d6b, +0x4d814e08, +0x4d8a4d94, +0x4e044d9f, +0x4d914e12, +0x4d8b4df5, +0x4ea84dbb, +0x4edd4da5, +0x4da14da2, +0x4dae4e67, +0x4df34db6, +0x4d054e3c, +0x4dcd4d7d, +0x4d864dbd, +0x4d854da9, +0x4daa4dc9, +0x4d344e3d, +0x4e654dfa, +0x4ddf4e16, +0x4d7e4dae, +0x4d424e6f, +0x4d5c4d8c, +0x4e044d39, +0x4da64d90, +0x4e424d72, +0x4e154e03, +0x4dc64d9b, +0x4d684e18, +0x4da74e3e, +0x4db94cfb, +0x4d474db4, +0x4d0d4dac, +0x4de74d91, +0x4ece4dcc, +0x4ddb4d39, +0x4d174d3f, +0x4e874e3d, +0x4e9d4da9, +0x4dba4df6, +0x4d734de3, +0x4d6c4ddf, +0x4dc44df5, +0x4dac4d89, +0x4d8d4e55, +0x4e7c4d29, +0x4dc34d3e, +0x4d164dc6, +0x4db64db1, +0x4e104d2e, +0x4e534e8f, +0x4d934def, +0x4dc34d7c, +0x4e1d4e09, +0x4dfd4e57, +0x4f294ea6, +0x4f374e11, +0x4e3f4e26, +0x4e264f1f, +0x4e0b4e37, +0x4e584ea0, +0x4df14d9f, +0x4d804e40, +0x4da54e42, +0x4e594e6b, +0x4dc24e1a, +0x4eae4e18, +0x4e4e4eb2, +0x4e704e46, +0x4de54e78, +0x4d664dfb, +0x4dcf4ddb, +0x4e804de8, +0x4efd4e25, +0x4e744e0a, +0x4e3a4d9c, +0x4e2a4ec3, +0x4db94ea9, +0x4e324d98, +0x4e294dfd, +0x4da44e8b, +0x4e594dda, +0x4f144e6d, +0x4e734da8, +0x4e0e4e03, +0x4e4f4e3f, +0x4ece4e67, +0x4db34e6d, +0x4e034e71, +0x4e1d4e4d, +0x4deb4e9e, +0x4de64dd6, +0x4da24ebf, +0x4eb34e25, +0x4e424dbd, +0x4dfa4e33, +0x4e344e18, +0x4e624db7, +0x4e554e91, +0x4e0e4e39, +0x4e0e4e1c, +0x4dfe4ea5, +0x4e244e42, +0x4f644ee6, +0x4f494e07, +0x4e794e23, +0x4e394f00, +0x4e644e49, +0x4e6b4efa, +0x4ebb4dcb, +0x4e024dec, +0x4dad4e6b, +0x4e8d4e53, +0x4dbe4e1b, +0x4f4a4e5f, +0x4e1b4ea3, +0x4e294e26, +0x4e224e9b, +0x4e0a4e06, +0x4dd44e12, +0x4e6b4e83, +0x4ebb4e03, +0x4eef4e0e, +0x4de84db8, +0x4dfa4ef8, +0x4dfe4e70, +0x4e484db4, +0x4dd64db3, +0x4e0f4e90, +0x4eb74e43, +0x4f394eb4, +0x4eea4db4, +0x4e4f4dc9, +0x4e824e79, +0x4ebe4e4d, +0x4e1d4ea0, +0x4e2a4e88, +0x4dff4ea2, +0x4e1e4e4a, +0x4e424e56, +0x4e134eee, +0x4e8d4e05, +0x4e5f4d84, +0x4da94e72, +0x4e824e65, +0x4eec4dd0, +0x4e6d4ebf, +0x4e344e05, +0x4df84df7, +0x4dc24e19, +0x4d964e08, +0x4e8b4e15, +0x4ee64dd6, +0x4e814e2a, +0x4dbc4eb0, +0x4dc14db3, +0x4e074e4a, +0x4e384de6, +0x4d734e01, +0x4d6b4de0, +0x4e384e18, +0x4d814e4c, +0x4efa4e65, +0x4e204e48, +0x4dc14e19, +0x4dd94e7b, +0x4dd34e18, +0x4ddd4d4c, +0x4e144dc0, +0x4e9f4d8a, +0x4e454dbf, +0x4e034d36, +0x4d8b4e7c, +0x4dc34e7a, +0x4dff4d4d, +0x4ddd4d84, +0x4d7d4e76, +0x4e024d74, +0x4e5f4e10, +0x4e264d8c, +0x4dd54d8b, +0x4e0a4e33, +0x4ee14df0, +0x4d9d4e21, +0x4e224e45, +0x4de64e2a, +0x4e4c4e22, +0x4e0e4de5, +0x4d294e9d, +0x4e5e4d9c, +0x4e154d53, +0x4d644e02, +0x4e464dd4, +0x4e194d64, +0x4e3a4e5f, +0x4db64d78, +0x4ddb4dec, +0x4d9e4e68, +0x4e3e4e3c, +0x4f6c4e41, +0x4f2a4e24, +0x4e7c4e2e, +0x4dde4f37, +0x4e754dd5, +0x4dc94eb7, +0x4e364dcb, +0x4df64e72, +0x4db54e52, +0x4e344dfa, +0x4dcd4ebf, +0x4edf4e14, +0x4e8b4e6b, +0x4e5f4e41, +0x4dd64e82, +0x4db84e0a, +0x4e344dc6, +0x4eb44e16, +0x4ed24e02, +0x4ef54e2d, +0x4e364dc5, +0x4df04eb4, +0x4de84f4d, +0x4e0a4dac, +0x4e454d9c, +0x4dd14e79, +0x4ec14db0, +0x4ee04dfb, +0x4e884d70, +0x4df64df2, +0x4e334e3f, +0x4f0b4ef4, +0x4e454e75, +0x4d914e05, +0x4e1b4e72, +0x4e324e66, +0x4e144dd1, +0x4e104e63, +0x4ebf4df1, +0x4e6a4d89, +0x4d914e7b, +0x4e614e3f, +0x4e7f4e31, +0x4e164ddd, +0x4de84e2b, +0x4d3f4d4a, +0x4d6a4d6a, +0x4d744e2b, +0x4eb14de3, +0x4e754dd9, +0x4dde4da3, +0x4ded4e51, +0x4d834e0a, +0x4dd74e72, +0x4d744d43, +0x4da84e0c, +0x4d544df0, +0x4e0a4df0, +0x4d744e25, +0x4e134e0f, +0x4e0e4e18, +0x4dfa4e0c, +0x4d824e2f, +0x4d6a4dbe, +0x4d8b4d42, +0x4dc94ce1, +0x4e1f4d63, +0x4e114db1, +0x4df34d22, +0x4d7d4e58, +0x4d844ec2, +0x4d6e4d46, +0x4d684d20, +0x4d394dfe, +0x4d874d23, +0x4ec74d7e, +0x4dbf4d2a, +0x4d8f4d44, +0x4dff4e0a, +0x4e2e4e30, +0x4d894d94, +0x4d724e04, +0x4d414dee, +0x4d584dd4, +0x4d8f4dba, +0x4dac4e19, +0x4dea4db5, +0x4e1a4ce2, +0x4d544d87, +0x4e3e4d86, +0x4e414e04, +0x4df54dd4, +0x4d924e28, +0x4dba4d5e, +0x4d944df8, +0x4d7d4df0, +0x4e834dfc, +0x4e984df1, +0x4dc64dd4, +0x4daa4e84, +0x4d984d97, +0x4d9e4dfd, +0x4dd74d4a, +0x4da54d7e, +0x4dd14dbf, +0x4db74de8, +0x4d454dfd, +0x4e6c4dba, +0x4dfc4df2, +0x4dad4dc2, +0x4d4d4e19, +0x4dab4df1, +0x4da84d76, +0x4e554d60, +0x4e584dab, +0x4e074d6a, +0x4d824d48, +0x4d734e78, +0x4dbe4e49, +0x4d804d0c, +0x4d674dbb, +0x4d344e27, +0x4de14d72, +0x4e814e1d, +0x4e184cf1, +0x4d8d4d84, +0x4e4d4e1b, +0x4e694dd0, +0x4da04dc1, +0x4d7b4e4a, +0x4d4f4dc0, +0x4e1b4de4, +0x4e144da1, +0x4d534e2c, +0x4ecd4d67, +0x4dc24d98, +0x4d374dff, +0x4dcb4deb, +0x4de84cff, +0x4d804e0a, +0x4d6a4dba, +0x4d5c4d78, +0x4d184dbd, +0x4d984d9d, +0x4e534d95, +0x4e9f4d96, +0x4dea4db1, +0x4d7f4ea8, +0x4d7a4d8b, +0x4d5d4de6, +0x4da54d91, +0x4d384da8, +0x4d874ddd, +0x4dfd4d57, +0x4d7b4e38, +0x4e344d9a, +0x4da24e26, +0x4d634dc3, +0x4d544de6, +0x4cfb4dec, +0x4d014d33, +0x4da94d50, +0x4e134da2, +0x4dff4dbf, +0x4de24d20, +0x4d734e2b, +0x4d964e87, +0x4d664ce3, +0x4d8a4d63, +0x4d324e2e, +0x4da94d64, +0x4e994da7, +0x4e264cff, +0x4d794d53, +0x4daf4df7, +0x4e484e47, +0x4dc04d6a, +0x4d4d4ddd, +0x4d9b4dfb, +0x4d674db0, +0x4dfc4ddb, +0x4d4f4d88, +0x4e654cfd, +0x4dca4d56, +0x4cdd4dcb, +0x4db64d73, +0x4dae4d42, +0x4d764e26, +0x4d824d67, +0x4df64dbf, +0x4dbc4e63, +0x4e0f4edf, +0x4ecc4dfc, +0x4f244e07, +0x4e3b4e00, +0x4e764f2d, +0x4d9b4e0c, +0x4e604ecf, +0x4e4e4df9, +0x4dd04e0e, +0x4dfb4e7d, +0x4eab4e65, +0x4e0c4e78, +0x4e4c4e44, +0x4e9f4e70, +0x4e014e78, +0x4e024e8d, +0x4dcd4e1e, +0x4dac4dce, +0x4e114e25, +0x4ee44df9, +0x4eb64e60, +0x4e324dc2, +0x4dad4f0f, +0x4dac4f16, +0x4e754d37, +0x4df54daf, +0x4db64e91, +0x4e514dc3, +0x4f044e1a, +0x4e224dd3, +0x4dd44dcd, +0x4e384e5a, +0x4e7a4e9f, +0x4e594ea4, +0x4e094e63, +0x4dff4e3f, +0x4e1b4e0b, +0x4e7a4e1b, +0x4d964e5f, +0x4e7d4dc5, +0x4e224d96, +0x4d5a4e39, +0x4eb54e54, +0x4e664e10, +0x4e2c4e83, +0x4d5a4e34, +0x4dd14d71, +0x4d844e56, +0x4d864dcc, +0x4e5a4e2f, +0x4ea74dc0, +0x4e254e1e, +0x4d594ea5, +0x4e004d96, +0x4d7f4e1c, +0x4e334d79, +0x4d994d81, +0x4d4f4d92, +0x4dec4d9b, +0x4d444e45, +0x4e434dcf, +0x4dfe4e26, +0x4e014dd8, +0x4dd24e6b, +0x4db84ddd, +0x4dec4d2e, +0x4e0f4de0, +0x4ed94da8, +0x4e7f4da5, +0x4d7b4cfb, +0x4da24e07, +0x4d954e9f, +0x4db74d3b, +0x4dc74da1, +0x4d734dfb, +0x4dfb4d74, +0x4ed74df9, +0x4de74d61, +0x4db04d74, +0x4e054da0, +0x4e674e52, +0x4d864e3b, +0x4ded4dca, +0x4d874d7e, +0x4dec4dee, +0x4df74dd8, +0x4d394e19, +0x4e7b4da2, +0x4de34d5f, +0x4d6e4de7, +0x4e394dad, +0x4e134d1b, +0x4de64dfe, +0x4dd74dad, +0x4de74e08, +0x4e574e3b, +0x4e894ec6, +0x4f6b4eae, +0x4fbb4e5a, +0x4e304e68, +0x4e464f54, +0x4e014e31, +0x4e6e4f2d, +0x4e3e4e0a, +0x4dd64ead, +0x4e124e96, +0x4e8d4e62, +0x4e034ec0, +0x4eec4e58, +0x4eac4ea5, +0x4e684e98, +0x4e204efa, +0x4e0a4e2d, +0x4e364e29, +0x4e6e4e62, +0x4ee74dc5, +0x4ef04e9f, +0x4e0e4e06, +0x4df44f08, +0x4dc94f16, +0x4e984d49, +0x4e734dcd, +0x4e7e4ecb, +0x4e874e22, +0x4f224e90, +0x4ed84dd9, +0x4e274e21, +0x4e734e54, +0x4f3b4e8d, +0x4dfe4e98, +0x4e224ec4, +0x4e794e8b, +0x4e684e10, +0x4e7a4e06, +0x4e1c4ef9, +0x4e9c4e11, +0x4e2a4dc7, +0x4e0c4dec, +0x4e894e55, +0x4f064e5f, +0x4e444eaf, +0x4e104ea0, +0x4dc04dbc, +0x4da84e13, +0x4e0f4e6c, +0x4ee84e94, +0x4f1d4df0, +0x4e334e41, +0x4dbd4f18, +0x4e194df9, +0x4d984e6e, +0x4ddf4d78, +0x4dad4e5e, +0x4d884dbf, +0x4e264e07, +0x4dd34e1c, +0x4ef34e6d, +0x4e3d4e99, +0x4e6b4e3c, +0x4e0e4e6f, +0x4dab4df7, +0x4e204dd2, +0x4dfe4e18, +0x4e684da4, +0x4e3d4e1e, +0x4df24d7f, +0x4dda4eb9, +0x4ddb4ec6, +0x4e1c4d6c, +0x4e234d9e, +0x4d744e36, +0x4e314dd5, +0x4f134e36, +0x4e074d62, +0x4df54d70, +0x4e464e70, +0x4eb44e5d, +0x4de14e6d, +0x4e174e64, +0x4e2f4e36, +0x4e324e29, +0x4dc94dde, +0x4de54e74, +0x4e524de6, +0x4e0e4da3, +0x4daf4e4b, +0x4ebe4dec, +0x4e104dc5, +0x4e8d4e83, +0x4e0d4e13, +0x4e034de6, +0x4d8b4e4f, +0x4e0f4e9b, +0x4ed64ea4, +0x4f1d4dca, +0x4e484e28, +0x4e004eff, +0x4e114e96, +0x4dae4eb8, +0x4e6d4df2, +0x4e1a4e65, +0x4e044e33, +0x4e744e00, +0x4df94eca, +0x4e8c4e32, +0x4e814eac, +0x4e2a4e27, +0x4de14e53, +0x4d9c4df1, +0x4e374dd9, +0x4e2f4e26, +0x4edb4d63, +0x4ebd4e62, +0x4e054dd5, +0x4dd14eb9, +0x4dee4f1c, +0x4e2c4d5f, +0x4e074e1e, +0x4ddf4e03, +0x4dd14dc5, +0x4edb4e05, +0x4e5a4dca, +0x4dd54d80, +0x4e6a4e75, +0x4eb34e69, +0x4e884e49, +0x4e284ea2, +0x4e214ea6, +0x4e2f4e0a, +0x4e434e39, +0x4e074e3b, +0x4e974d9a, +0x4e814d98, +0x4d1d4dd9, +0x4e7c4e15, +0x4e484e15, +0x4e994ec0, +0x4e504e31, +0x4dcf4d4e, +0x4e0f4e16, +0x4d5b4e3d, +0x4ed84dd0, +0x4f4d4dfa, +0x4e5d4dbd, +0x4d9b4e9b, +0x4dcd4e37, +0x4e454e8e, +0x4dfa4d87, +0x4dd64e43, +0x4d8a4e1c, +0x4ddb4e32, +0x4d754e30, +0x4eca4db6, +0x4e084dcd, +0x4e614e13, +0x4dd94e35, +0x4d9e4dbc, +0x4dfe4d85, +0x4e314e2a, +0x4e504d76, +0x4e8e4dcc, +0x4de94d2d, +0x4d8a4eaf, +0x4db04ebd, +0x4def4d28, +0x4db84da2, +0x4dc04e71, +0x4dd94d07, +0x4eec4e0d, +0x4dff4dd4, +0x4ded4d97, +0x4e554e33, +0x4e884e1f, +0x4da14e25, +0x4de94e0d, +0x4dc74e00, +0x4dc94de5, +0x4dd44e36, +0x4df14eae, +0x4ecc4e29, +0x4e1d4d81, +0x4d934e1a, +0x4e674dd0, +0x4e494ddf, +0x4dfc4e29, +0x4e154e4e, +0x4d544d53, +0x4d204dcb, +0x4d7b4d9f, +0x4e614db1, +0x4e2b4d86, +0x4dca4d85, +0x4d8f4e88, +0x4dbd4d7c, +0x4d534dd1, +0x4e334cf8, +0x4d524daa, +0x4d284d77, +0x4db74db3, +0x4d5f4da2, +0x4e404d8b, +0x4d4e4e0a, +0x4d894d44, +0x4ced4dd4, +0x4d234d7e, +0x4d334d3b, +0x4dbe4d97, +0x4e184d4e, +0x4e374d25, +0x4d584cec, +0x4d794dd8, +0x4d8d4e3c, +0x4d564d0e, +0x4d474ce2, +0x4d344dec, +0x4df84d24, +0x4dc04d54, +0x4db24ce1, +0x4d594d4d, +0x4db24d7b, +0x4e114db9, +0x4daa4d44, +0x4d614dc6, +0x4d7d4db8, +0x4dc44d94, +0x4da84d64, +0x4d5b4db3, +0x4e4c4d48, +0x4cf74d38, +0x4ce74dda, +0x4de04de8, +0x4dc44d34, +0x4db94e01, +0x4d314d72, +0x4d8a4d50, +0x4d704e4e, +0x4db34e36, +0x4ec34e2c, +0x4f034de3, +0x4e594e28, +0x4dee4ec1, +0x4dfa4db6, +0x4de54e6c, +0x4dc94d40, +0x4d894e59, +0x4da54dc7, +0x4e484d83, +0x4df24e69, +0x4ebb4e0e, +0x4e394e4c, +0x4e1c4e07, +0x4db94e5c, +0x4d7f4e05, +0x4de64d54, +0x4df74dca, +0x4e504d7c, +0x4e694e43, +0x4e1d4da0, +0x4db84e57, +0x4e234eb1, +0x4e1c4d6d, +0x4e164d74, +0x4dcc4e3b, +0x4e5b4d94, +0x4ec54e25, +0x4e1c4d65, +0x4ded4d5b, +0x4e064e12, +0x4eb64e1a, +0x4dbf4de4, +0x4e3b4e1a, +0x4dff4e57, +0x4e6a4dd6, +0x4e4f4dc5, +0x4d7e4e81, +0x4e844dc1, +0x4dff4dd8, +0x4dc24e2f, +0x4e704db1, +0x4de94de1, +0x4e114e31, +0x4dbf4e46, +0x4da34daa, +0x4dce4dcd, +0x4d784d97, +0x4eeb4e0a, +0x4f2f4ddb, +0x4e554dbe, +0x4e374eca, +0x4d904deb, +0x4dbd4e6f, +0x4e244d88, +0x4d4a4d99, +0x4ceb4dd8, +0x4e534d9c, +0x4d8f4e45, +0x4e404dc8, +0x4dff4e47, +0x4dba4e47, +0x4d964e4b, +0x4db64dc2, +0x4dbc4d80, +0x4dec4d66, +0x4e8e4d6b, +0x4e1c4e05, +0x4da34d0c, +0x4d3a4e61, +0x4d5f4e7c, +0x4db24d0d, +0x4dec4db0, +0x4d724dbd, +0x4db34d40, +0x4e524e06, +0x4e654d18, +0x4d434d80, +0x4dc64e0b, +0x4e714e60, +0x4d924e0e, +0x4d7c4e0a, +0x4d6b4dbb, +0x4d644df5, +0x4d9a4d99, +0x4d524de1, +0x4de84d93, +0x4e124d70, +0x4d204db2, +0x4df94de8, +0x4e624dcb, +0x4dd34e5e, +0x4d5a4d3f, +0x4db84d97, +0x4d814e07, +0x4db24e2e, +0x4f254e2a, +0x4f354ddf, +0x4e844d9b, +0x4df44ecf, +0x4e104e15, +0x4e114e45, +0x4dda4d9c, +0x4d3e4e85, +0x4d9c4e4e, +0x4e494de0, +0x4d844e53, +0x4eb84e03, +0x4e824e40, +0x4e2e4e10, +0x4dd64e7c, +0x4d6f4de8, +0x4de34db7, +0x4db74e01, +0x4e614da6, +0x4e534e0a, +0x4df94dc8, +0x4d8b4ed6, +0x4da44ef9, +0x4dc94dd6, +0x4dee4db2, +0x4d864e8c, +0x4e364d9c, +0x4ebd4e13, +0x4e284d11, +0x4e224d81, +0x4e4f4e2f, +0x4e824ed6, +0x4e174e2f, +0x4d874e48, +0x4e4e4e49, +0x4e454e39, +0x4df74ddc, +0x4df24e29, +0x4eef4dc2, +0x4df44d9b, +0x4d734e4a, +0x4e7e4e0f, +0x4e4c4de6, +0x4e124e43, +0x4de64e38, +0x4e054dca, +0x4da44e41, +0x4dc14e08, +0x4ed44dfa, +0x4ee94d4c, +0x4dd24dfb, +0x4ddc4e70, +0x4dc34d8e, +0x4dec4e7b, +0x4e284d8f, +0x4d794e1d, +0x4db14dde, +0x4dd54df1, +0x4d3a4e31, +0x4e3b4ddd, +0x4df84e47, +0x4d7f4dec, +0x4d7f4e3c, +0x4d624d7f, +0x4dc94d46, +0x4de74df7, +0x4e5c4ddf, +0x4e444dc1, +0x4db34d43, +0x4dae4e4d, +0x4dbf4e60, +0x4de04d71, +0x4dc14dba, +0x4d6d4e2a, +0x4df84dab, +0x4e564de5, +0x4dcc4d64, +0x4dce4e01, +0x4e884e3a, +0x4e6b4dff, +0x4e054e35, +0x4dc44de3, +0x4dc44e69, +0x4df84de5, +0x4e0e4da5, +0x4dc74d96, +0x4ec24d53, +0x4ddf4d82, +0x4d334dac, +0x4e304d9b, +0x4e3b4d97, +0x4e5c4e89, +0x4d9d4db9, +0x4e5c4e27, +0x4e514f2b, +0x4e604ee2, +0x4f9b4f10, +0x4f9e4e52, +0x4e874e9d, +0x4e8b4f8a, +0x4e964e8b, +0x4f344f19, +0x4ece4e0a, +0x4e274eec, +0x4e3e4ea4, +0x4e344eb1, +0x4ea74ed1, +0x4f9a4f40, +0x4e8e4f51, +0x4ec44f25, +0x4ea64f12, +0x4e174e7c, +0x4e734de8, +0x4e454ebf, +0x4f004e3c, +0x4f3d4e94, +0x4ea74e02, +0x4eab4f5b, +0x4e4d4f40, +0x4e794e05, +0x4e814e13, +0x4e9d4f20, +0x4eda4e6d, +0x4f9e4ec8, +0x4ebb4e39, +0x4e674de4, +0x4f434ed6, +0x4f8e4eef, +0x4e5d4edd, +0x4f3b4ebe, +0x4e7a4f37, +0x4ecc4ec0, +0x4ef64f01, +0x4e9d4f29, +0x4ed04e7a, +0x4ef14e93, +0x4e434eb9, +0x4f544eca, +0x4e984e4a, +0x4f334f5d, +0x4e9f4e9e, +0x4ebb4dd7, +0x4e2d4e87, +0x4ed84ed6, +0x4f2b4e71, +0x4f424e32, +0x4e644eb7, +0x4e1a4f8f, +0x4ec84e53, +0x4e5b4e44, +0x4e804e7e, +0x4e184ec2, +0x4e2e4e55, +0x4ec84e9e, +0x4dfb4e5f, +0x4f3b4e68, +0x4e364e83, +0x4e3e4ec6, +0x4e264ee6, +0x4e574e82, +0x4e3d4e3b, +0x4e844e2f, +0x4f3a4e1f, +0x4ebc4e2c, +0x4e4b4e1e, +0x4e2a4f06, +0x4e4a4f35, +0x4e5e4dc1, +0x4e334e0d, +0x4daa4e6b, +0x4e744ddc, +0x4f4e4e61, +0x4e9d4e23, +0x4df84dc1, +0x4ed24e6c, +0x4f254ea7, +0x4e3e4e7b, +0x4e174e69, +0x4e044ed4, +0x4e744e81, +0x4edf4e3a, +0x4e5a4e87, +0x4ea24e63, +0x4eaf4ddd, +0x4db04eac, +0x4efd4ea1, +0x4e884e60, +0x4f254df4, +0x4e344e13, +0x4dd94e0d, +0x4dbd4e1e, +0x4e054e05, +0x4ef74e9b, +0x4ee94e05, +0x4e504e79, +0x4e4d4f3d, +0x4ec14e45, +0x4e114eaa, +0x4e414da2, +0x4df94e50, +0x4dff4e0e, +0x4e444e54, +0x4e1e4e2b, +0x4ef04e8f, +0x4e5a4e44, +0x4e534e65, +0x4e314e7c, +0x4d7c4e00, +0x4e2d4e09, +0x4e184e8c, +0x4e734def, +0x4eb64e1e, +0x4e234d9e, +0x4e624eaa, +0x4e4f4ee7, +0x4e3c4d89, +0x4e804e0f, +0x4e164e2e, +0x4e794df6, +0x4ef94e9e, +0x4e394d5f, +0x4e044d87, +0x4e994eda, +0x4f324e75, +0x4e474e55, +0x4e5a4e23, +0x4e394eb0, +0x4e3b4e6d, +0x4e894e5c, +0x4e164ec6, +0x4f0b4e36, +0x4e1a4d76, +0x4dc44e5b, +0x4e5b4dfb, +0x4e8c4e5f, +0x4e7d4e8b, +0x4df34e14, +0x4da24db1, +0x4dc64e28, +0x4e084e3d, +0x4e7e4df4, +0x4ee44db8, +0x4df94e5c, +0x4db34eee, +0x4e264daf, +0x4dee4e20, +0x4e2e4df8, +0x4d7e4e2a, +0x4d944e32, +0x4e494e1b, +0x4dc44e84, +0x4ead4dff, +0x4e4a4e55, +0x4e074e04, +0x4dac4ebb, +0x4ded4daf, +0x4d9a4d53, +0x4de64dd7, +0x4e3d4d5b, +0x4ea84dff, +0x4da44d9d, +0x4d924e1e, +0x4d3e4e7a, +0x4db54d57, +0x4d964d77, +0x4d7a4e1a, +0x4de04d74, +0x4eb64dba, +0x4e274d49, +0x4dca4d55, +0x4e834e02, +0x4eaf4e6b, +0x4de94e2b, +0x4db54e53, +0x4dd74e0b, +0x4df54dbe, +0x4dc94dd0, +0x4d694e66, +0x4e3b4e0e, +0x4dff4d50, +0x4d654de3, +0x4e0e4dd4, +0x4e524df0, +0x4e3e4ee9, +0x4dbd4e53, +0x4d904d94, +0x4d3c4e41, +0x4d6d4de7, +0x4e974dfa, +0x4e5c4de8, +0x4dfe4dde, +0x4d8a4e81, +0x4dce4d99, +0x4de24e82, +0x4dab4dba, +0x4d4e4dc5, +0x4db54d64, +0x4dcb4d8c, +0x4d744dc9, +0x4e2f4dfa, +0x4db34e29, +0x4d7e4deb, +0x4d9a4ddd, +0x4da24d6e, +0x4d824cdf, +0x4dd14da5, +0x4e454da7, +0x4df14dba, +0x4d324d49, +0x4d3f4e97, +0x4d724e88, +0x4dd34cfe, +0x4d534d33, +0x4d6b4db0, +0x4e024d5f, +0x4e934dcb, +0x4dc54d95, +0x4d864da2, +0x4df44ddf, +0x4e0d4dac, +0x4d3f4dd1, +0x4d424df6, +0x4dac4e24, +0x4da24e2e, +0x4df04db6, +0x4d6f4dd6, +0x4e2f4d6b, +0x4e394d51, +0x4d124dfd, +0x4ded4d9a, +0x4dec4d3a, +0x4e0d4e1b, +0x4dad4dbc, +0x4dd54d87, +0x4dd04e10, +0x4ddf4e3f, +0x4ec64ea2, +0x4f154ddd, +0x4e474df0, +0x4dcc4ed0, +0x4de64dfa, +0x4dd74e44, +0x4e0c4da0, +0x4d9c4db8, +0x4dcf4dde, +0x4e854dfe, +0x4da64e7b, +0x4e734e87, +0x4e394e85, +0x4e464de2, +0x4dc64e55, +0x4d684d80, +0x4e354d9e, +0x4e414e1c, +0x4eab4d37, +0x4ea04e25, +0x4dd54dab, +0x4dc44e40, +0x4e0b4ea6, +0x4ddd4d35, +0x4dec4d6f, +0x4d864e3e, +0x4e1b4dc7, +0x4e7d4dd1, +0x4e564d5b, +0x4dc64d3e, +0x4e414e47, +0x4ea34deb, +0x4e1e4e0b, +0x4d7d4e4f, +0x4e054e69, +0x4de14e07, +0x4df44dd4, +0x4daa4e23, +0x4e504d5c, +0x4e564d8c, +0x4d1b4df2, +0x4e564db1, +0x4e3b4d5c, +0x4e3d4ea7, +0x4dce4dc1, +0x4e1b4dd5, +0x4d934f0a, +0x4e1d4e7e, +0x4f7b4e8c, +0x4f3f4df4, +0x4e5e4e9f, +0x4e214f33, +0x4e7b4e55, +0x4e754ec6, +0x4e954e2f, +0x4df14ead, +0x4e1b4e00, +0x4e694e6a, +0x4dce4f05, +0x4ecc4e65, +0x4e864e72, +0x4e4c4ea7, +0x4e364ef1, +0x4dd84e28, +0x4e834dca, +0x4e654e23, +0x4f314e7f, +0x4e834ebf, +0x4e3d4d66, +0x4e644e9e, +0x4e124eba, +0x4e344d90, +0x4e314e11, +0x4de14e89, +0x4e9f4dca, +0x4f584e43, +0x4e964dc9, +0x4dfa4e38, +0x4eb14e94, +0x4f1b4ed4, +0x4e924ee2, +0x4e864e30, +0x4e4e4eb1, +0x4e744ea0, +0x4ebc4e52, +0x4dd84edd, +0x4ee24e1d, +0x4eb04df0, +0x4dd44e12, +0x4e9e4e3d, +0x4e444e31, +0x4ebb4ecb, +0x4e6d4e2c, +0x4e124dc2, +0x4de34e1c, +0x4df24dfc, +0x4ed44e09, +0x4f494e52, +0x4dc94e69, +0x4e734f08, +0x4e514e21, +0x4e2d4e85, +0x4e0c4da5, +0x4d7b4e09, +0x4dec4de6, +0x4e064e9e, +0x4da24ea8, +0x4eac4e74, +0x4e454e13, +0x4dea4e43, +0x4dbb4e85, +0x4dc44df5, +0x4e184d87, +0x4e204de4, +0x4ebd4dd5, +0x4e404e32, +0x4e074de9, +0x4de14e5a, +0x4e224f32, +0x4e234d57, +0x4dd44ded, +0x4dd44e11, +0x4e5d4dfd, +0x4ed04e9f, +0x4ea84d86, +0x4de34d69, +0x4ec84e2b, +0x4eca4e3c, +0x4de74e2f, +0x4e014e3e, +0x4df24e59, +0x4e3a4e82, +0x4e914e45, +0x4dc04e9a, +0x4e8d4e61, +0x4e314d51, +0x4d964dc1, +0x4e374dad, +0x4e8d4e2b, +0x4dfe4e69, +0x4ddd4e37, +0x4e6d4e19, +0x4e2a4ec5, +0x4e044e9c, +0x4f614ec6, +0x4f724e1f, +0x4e514e4d, +0x4e6a4f2c, +0x4e994e48, +0x4dd04edc, +0x4eb14e2e, +0x4de84e52, +0x4e0a4e5b, +0x4e354e2c, +0x4dd04ef2, +0x4f6d4eff, +0x4eca4ef2, +0x4e6e4e90, +0x4e894ece, +0x4e164dfc, +0x4eb74dcd, +0x4ee74e79, +0x4ec04e2e, +0x4ec04e93, +0x4e5a4dc4, +0x4e174f28, +0x4e444efc, +0x4e774dbc, +0x4eda4df3, +0x4e344ec2, +0x4e784e15, +0x4f874eb2, +0x4f1e4da1, +0x4e724dcb, +0x4e8c4eea, +0x4f224edb, +0x4e544ecd, +0x4e874eb8, +0x4ea34ef0, +0x4e794e57, +0x4e824e85, +0x4e3c4ebb, +0x4ec44e29, +0x4ea84e06, +0x4dc54eb7, +0x4e8a4e31, +0x4eac4e72, +0x4f1d4ed9, +0x4e684e7e, +0x4dd44e35, +0x4dda4e38, +0x4db14e05, +0x4f1a4e5a, +0x4f394e2b, +0x4e964e30, +0x4df64ecf, +0x4ddc4dd0, +0x4ddc4e5e, +0x4e504d6c, +0x4dc04dd5, +0x4d654e05, +0x4e464e16, +0x4dc04e57, +0x4ed24e5c, +0x4e114e79, +0x4e144e1a, +0x4e2f4e85, +0x4dd84dc9, +0x4ddb4d4c, +0x4e354e37, +0x4eb94dba, +0x4ed14dee, +0x4dfc4d7c, +0x4d784e86, +0x4e1e4e88, +0x4dc04d54, +0x4e0f4da2, +0x4db64e83, +0x4e784dc1, +0x4e344e0a, +0x4e834d73, +0x4dce4d8c, +0x4e114e55, +0x4e434e83, +0x4e054e7c, +0x4ddf4e93, +0x4dc44e3f, +0x4e6c4e19, +0x4e544db9, +0x4da34e9e, +0x4e6a4dbe, +0x4e1a4db0, +0x4d7b4e57, +0x4eac4e6e, +0x4e9a4da4, +0x4e7f4e6c, +0x4e0c4de6, +0x4e5d4e70, +0x4e2c4ea9, +0x4e134ee1, +0x4f974e9d, +0x4ff64e21, +0x4e574e48, +0x4e754f7e, +0x4e794e56, +0x4e3f4f65, +0x4e904da0, +0x4e8e4edc, +0x4e514e4d, +0x4e2a4e9c, +0x4e304e9e, +0x4edf4e4c, +0x4e914ef8, +0x4e714eb6, +0x4e484ead, +0x4de34e87, +0x4e294df8, +0x4ebb4e76, +0x4ef64e35, +0x4fa94e9e, +0x4e214dd5, +0x4e4a4ec4, +0x4e0d4f80, +0x4e074e07, +0x4e404e45, +0x4e384ef9, +0x4e674dd3, +0x4ecf4e85, +0x4eaf4dde, +0x4e834e1a, +0x4f2c4e6d, +0x4eab4ee4, +0x4e424e78, +0x4e304e9f, +0x4e274e70, +0x4e554eee, +0x4e9f4e96, +0x4e3e4e9c, +0x4f724e46, +0x4e804e1a, +0x4e044eb9, +0x4ee74e5e, +0x4ec04e43, +0x4e594f4b, +0x4e274e76, +0x4dbf4dd1, +0x4df34ec4, +0x4e044e12, +0x4f884e47, +0x4f9c4e3e, +0x4eb74e70, +0x4e204f21, +0x4ec14e02, +0x4e074f47, +0x4e954e00, +0x4dd64e30, +0x4d9d4dee, +0x4e054e09, +0x4ddb4ec7, +0x4f164e57, +0x4e604e8d, +0x4e2e4e58, +0x4df34ed0, +0x4df64e32, +0x4def4d99, +0x4e3d4e67, +0x4f1d4e21, +0x4ef24e24, +0x4e024da9, +0x4e2d4eea, +0x4e614f3d, +0x4e514de9, +0x4e1e4db4, +0x4e234e8c, +0x4e4f4dc5, +0x4f114e56, +0x4eda4d7f, +0x4e064de8, +0x4e144e52, +0x4f224e97, +0x4e434e29, +0x4e374e97, +0x4e4c4e58, +0x4e694e7f, +0x4e484e35, +0x4de64efe, +0x4e4f4e23, +0x4e554df0, +0x4daf4e59, +0x4e564e32, +0x4ea44dea, +0x4e7f4e72, +0x4e134e22, +0x4d554d97, +0x4d114d67, +0x4d954d7c, +0x4ea24e13, +0x4ef34e15, +0x4db64db7, +0x4d994eb7, +0x4d634e38, +0x4da14df6, +0x4d9c4d6d, +0x4d834dda, +0x4d744db0, +0x4e714db4, +0x4d504e1a, +0x4e264dec, +0x4dd04df3, +0x4d854ddf, +0x4da24dfb, +0x4d824ddc, +0x4d6e4d45, +0x4d8f4d55, +0x4de24d1e, +0x4e5d4d78, +0x4da04d4b, +0x4d4a4e24, +0x4dc84e82, +0x4d734d13, +0x4d5c4d4e, +0x4d894de9, +0x4db54d71, +0x4e4b4e0d, +0x4e2f4d15, +0x4da44d88, +0x4ded4de9, +0x4e274e35, +0x4d4c4dcb, +0x4d594dc5, +0x4da64de3, +0x4dfa4e7e, +0x4dfc4ddc, +0x4d714e23, +0x4e2a4d5d, +0x4daa4d4c, +0x4cff4d9c, +0x4df54ddd, +0x4dd14d8f, +0x4d5f4de1, +0x4d884e4c, +0x4dde4d87, +0x4dd24e24, +0x4e174e20, +0x4f2c4e1d, +0x4f094d91, +0x4e274e23, +0x4e1a4ec8, +0x4e004dcd, +0x4d914e75, +0x4db24d53, +0x4dac4e16, +0x4dfb4e22, +0x4dee4e20, +0x4d7a4e47, +0x4e9e4e7b, +0x4e264dff, +0x4dc34e2e, +0x4da24ec2, +0x4d874dca, +0x4e184da3, +0x4e504dd7, +0x4e924d98, +0x4e144e26, +0x4e334d10, +0x4db04e59, +0x4da14e95, +0x4df64d9b, +0x4deb4d2d, +0x4d764e1b, +0x4df74da5, +0x4ea54dd6, +0x4e654d40, +0x4e044d83, +0x4e6e4df1, +0x4ee24e48, +0x4da74e35, +0x4dd44da9, +0x4db54e79, +0x4dc84e37, +0x4e174d68, +0x4d824e90, +0x4dfe4dec, +0x4d854d30, +0x4d6d4e2a, +0x4e644de9, +0x4e1c4da7, +0x4e024e59, +0x4d964e09, +0x4e014df9, +0x4e854e8b, +0x4e7a4ed5, +0x4eed4e85, +0x4f1c4e77, +0x4eb94e7f, +0x4e454f54, +0x4e354eaa, +0x4e414ec6, +0x4ec84d94, +0x4e374e7b, +0x4df24e55, +0x4e534e9f, +0x4e484ef9, +0x4ee74ebc, +0x4e744eb1, +0x4ddc4ea0, +0x4e524e90, +0x4de64e1c, +0x4e244dbe, +0x4e124e5c, +0x4ebd4dc0, +0x4f144e07, +0x4e154e16, +0x4e164f3c, +0x4e404f0c, +0x4e9d4d4d, +0x4dbc4dff, +0x4e0d4e61, +0x4e524e13, +0x4f064e85, +0x4e794e05, +0x4dcf4d69, +0x4e6b4ed8, +0x4f034e76, +0x4e664e57, +0x4e8f4edb, +0x4e3c4e75, +0x4e9f4e88, +0x4e354e6d, +0x4e304ef2, +0x4e684e50, +0x4e6b4df4, +0x4da24e3d, +0x4ed74e5d, +0x4ec04e33, +0x4eb74f16, +0x4e3a4e7a, +0x4dff4db5, +0x4e034e06, +0x4e3e4e6e, +0x4edb4e52, +0x4f154e09, +0x4e9c4e4b, +0x4d9e4f54, +0x4e424dbe, +0x4e1e4e0c, +0x4e414dd6, +0x4d7b4e17, +0x4deb4de5, +0x4e404df3, +0x4e024e41, +0x4f234e89, +0x4e534e46, +0x4e274e20, +0x4df94ee9, +0x4e384e15, +0x4e144df4, +0x4e014e1a, +0x4ebc4db3, +0x4e774d8c, +0x4dbd4d53, +0x4dde4ed1, +0x4dd44eb1, +0x4e084db1, +0x4da64d6e, +0x4d664e43, +0x4e1d4dbe, +0x4f3f4e10, +0x4e1f4d2a, +0x4dca4da6, +0x4e594e6b, +0x4f214e81, +0x4e234dfd, +0x4e484e33, +0x4e084eb9, +0x4e5c4dd9, +0x4e6e4df8, +0x4dca4e16, +0x4e5c4e50, +0x4e324d71, +0x4d644e43, +0x4ee34dfe, +0x4e664d83, +0x4eeb4e3d, +0x4ddf4e28, +0x4e494e3e, +0x4e3f4ee3, +0x4eac4ef6, +0x4f544ea8, +0x4fdf4ea4, +0x4eb44e91, +0x4e754f8a, +0x4e8e4e81, +0x4e2f4f45, +0x4edd4e26, +0x4e5b4ed4, +0x4de74e64, +0x4e8b4e6b, +0x4e3b4f22, +0x4f344e8e, +0x4edd4ed1, +0x4e274eaf, +0x4e734ef4, +0x4e3b4ea4, +0x4e2d4da0, +0x4e814e7c, +0x4f314e2e, +0x4f484e48, +0x4e7c4e39, +0x4df34f0f, +0x4e194f12, +0x4e4f4dcb, +0x4dea4e16, +0x4e0b4eb6, +0x4ea14e3c, +0x4f804e48, +0x4ed84dd3, +0x4e474e21, +0x4f094f42, +0x4ef04eec, +0x4ec34e6e, +0x4e994ed3, +0x4e244ee3, +0x4eb24ebc, +0x4e8a4e78, +0x4e894f01, +0x4ed74e67, +0x4e374e1d, +0x4e034e9f, +0x4f024e95, +0x4efe4df4, +0x4ee14f55, +0x4e4f4eb7, +0x4dde4d92, +0x4d5d4e21, +0x4e154e90, +0x4ea34e89, +0x4f4c4deb, +0x4e704ec4, +0x4e2f4eda, +0x4e194e38, +0x4e554ecf, +0x4e204dbc, +0x4de44e52, +0x4e1e4de0, +0x4e724db4, +0x4dd54e1b, +0x4ea34e30, +0x4ea34e57, +0x4e314e27, +0x4dd04ede, +0x4e004df6, +0x4e1c4dca, +0x4e2b4e49, +0x4eb64ddc, +0x4ed84e62, +0x4e494d69, +0x4de94eb5, +0x4df24eeb, +0x4e794d4c, +0x4e244dba, +0x4dd04e5b, +0x4e3e4e06, +0x4f2c4e41, +0x4e7a4dbb, +0x4d9f4dff, +0x4e514e54, +0x4f004e3a, +0x4e3d4e88, +0x4e474eaa, +0x4e574eb3, +0x4e264e32, +0x4efc4e80, +0x4e0b4f49, +0x4e9b4dfb, +0x4e314d69, +0x4d4e4deb, +0x4e9a4de8, +0x4e744e12, +0x4e944e6a, +0x4de34e34, +0x4e394de1, +0x4de24e47, +0x4e024e53, +0x4ec54e7e, +0x4f334e01, +0x4dfc4e30, +0x4e5c4f1f, +0x4e304e28, +0x4e234ea0, +0x4e194dd5, +0x4dc94e43, +0x4dd04e8f, +0x4e3e4e3e, +0x4dd44e9a, +0x4f064e31, +0x4e214e76, +0x4e1f4e7f, +0x4e0c4eb7, +0x4dc84dde, +0x4dfe4de7, +0x4e2b4e10, +0x4edf4ded, +0x4e724e37, +0x4e3a4dec, +0x4ddf4ebb, +0x4dbe4ec0, +0x4e874d1e, +0x4e0b4dc6, +0x4de74e5a, +0x4e964dcd, +0x4eda4e66, +0x4e4a4d77, +0x4df54da4, +0x4e4c4e8d, +0x4ede4e68, +0x4dd14e5d, +0x4e2d4e06, +0x4e464e0c, +0x4e154e5e, +0x4e6c4de8, +0x4daa4e54, +0x4ed04df4, +0x4e1a4d80, +0x4dcb4df9, +0x4e1c4dee, +0x4e5c4e17, +0x4e334e8c, +0x4e274dd3, +0x4dbb4d34, +0x4d474e7d, +0x4d0b4dfd, +0x4e684ddc, +0x4ecd4dc6, +0x4d7d4d9c, +0x4d694ee0, +0x4dca4ded, +0x4dcd4e3c, +0x4dbf4d5e, +0x4db04e4c, +0x4d974db2, +0x4d9f4da9, +0x4d2a4e43, +0x4e3d4dab, +0x4dd44e06, +0x4d794daa, +0x4de14de6, +0x4d624e01, +0x4dc74d05, +0x4db44ea2, +0x4e6e4d8b, +0x4e744ddd, +0x4d9a4d00, +0x4ddc4e77, +0x4dd14e8b, +0x4e3f4ccc, +0x4e154d93, +0x4de64e91, +0x4e2d4d2c, +0x4ea14e02, +0x4e3f4daf, +0x4db94d8b, +0x4e0e4dde, +0x4e504de3, +0x4d894e05, +0x4e134e03, +0x4d9c4e4e, +0x4e2d4df4, +0x4e004df6, +0x4ddd4df1, +0x4e684d7e, +0x4e074d6c, +0x4d0b4dca, +0x4dde4dba, +0x4db64e18, +0x4e2b4dc8, +0x4d964dfa, +0x4dc74d85, +0x4dc74e03, +0x4dce4ddd, +0x4f1b4e82, +0x4f6b4e5b, +0x4e3e4ec1, +0x4e4a4f42, +0x4e3c4e5e, +0x4e434e55, +0x4e0d4dbe, +0x4d9f4e30, +0x4df54e29, +0x4e494e4f, +0x4dc14e01, +0x4e7f4e7c, +0x4e1b4e9d, +0x4e554e00, +0x4e254e85, +0x4da94e0b, +0x4e0e4da2, +0x4e9b4e49, +0x4e7f4ded, +0x4ea54df3, +0x4dd64d68, +0x4db54ec1, +0x4e114ed0, +0x4e0c4d68, +0x4e5f4e37, +0x4d984e8a, +0x4e344e15, +0x4ef14e33, +0x4e904dc1, +0x4dfb4dd5, +0x4eb34e50, +0x4f414ebf, +0x4e124e9b, +0x4df54e83, +0x4e2f4e9e, +0x4dfd4e5c, +0x4ea94e64, +0x4e314ec7, +0x4eb64e1b, +0x4e684ddc, +0x4d964e72, +0x4e934e27, +0x4e704dd6, +0x4e374e8a, +0x4e0e4e0b, +0x4db04e2a, +0x4d724e2a, +0x4e194dbf, +0x4ea84e05, +0x4eed4dfa, +0x4e064e02, +0x4de14e93, +0x4da84e4e, +0x4d5d4e27, +0x4e0c4dc5, +0x4e0a4e4f, +0x4da04dc2, +0x4ddf4db7, +0x4dc64e72, +0x4e414e8d, +0x4e354e66, +0x4e214dc7, +0x4df34e2d, +0x4d7e4df3, +0x4e2e4da9, +0x4ded4e07, +0x4e6c4d9d, +0x4ec24e27, +0x4e014d98, +0x4d6e4e73, +0x4d9e4ed1, +0x4de84d36, +0x4e1c4da2, +0x4de24dcb, +0x4e314d8c, +0x4eee4e44, +0x4dd44d69, +0x4de54d7e, +0x4e4f4e35, +0x4e9c4e55, +0x4da44e58, +0x4dd24e09, +0x4dec4e27, +0x4e284e42, +0x4e664e50, +0x4e514e37, +0x4ebe4dd0, +0x4e194d62, +0x4d5a4e4e, +0x4e5d4e12, +0x4e4c4ddc, +0x4e444e8f, +0x4dbe4e84, +0x4dfd4d61, +0x4ddc4ded, +0x4d9c4e50, +0x4e904e71, +0x4f8b4e16, +0x4e684e5d, +0x4e084f60, +0x4e274e2a, +0x4e214f17, +0x4e1d4d68, +0x4de64dea, +0x4d884dd9, +0x4e434e27, +0x4da54e60, +0x4f234e57, +0x4e5f4e7d, +0x4dfe4e69, +0x4d9b4ebf, +0x4de44e4f, +0x4dfa4d8e, +0x4e224e03, +0x4e904df2, +0x4e724e18, +0x4dfe4cf7, +0x4dfa4e7e, +0x4dd44e98, +0x4e424d98, +0x4e024de0, +0x4dcb4ec0, +0x4e5a4d4f, +0x4f154df3, +0x4e514d77, +0x4e024da6, +0x4e2d4de0, +0x4e884ea4, +0x4df14dec, +0x4e5a4e0a, +0x4e024e9c, +0x4e2c4df8, +0x4e9a4e4a, +0x4d924e7b, +0x4e884e1c, +0x4e524ddb, +0x4d6c4e18, +0x4eb14dde, +0x4e2d4dc8, +0x4df04e24, +0x4e1e4dea, +0x4da34daf, +0x4dec4e3a, +0x4d934e70, +0x4e834e3a, +0x4efd4df9, +0x4e514e07, +0x4dde4f5d, +0x4dfc4e0b, +0x4ddc4e45, +0x4dc94d75, +0x4d8d4df3, +0x4da44de0, +0x4e7a4e37, +0x4dc84e46, +0x4ebd4e2e, +0x4e674e27, +0x4e2f4e3e, +0x4d984e5f, +0x4d6e4e5f, +0x4dc74da8, +0x4e314dd5, +0x4e894ddb, +0x4e734de0, +0x4dd94d87, +0x4dae4ea2, +0x4dc94e92, +0x4df14d4f, +0x4df14e02, +0x4de04e69, +0x4e394d7f, +0x4e994dc3, +0x4e694d2f, +0x4d5a4d99, +0x4e3b4e3d, +0x4eac4e74, +0x4e434e2d, +0x4e364e44, +0x4dc24e2d, +0x4e3a4e43, +0x4de64e22, +0x4d644e76, +0x4e7c4e25, +0x4e514dc2, +0x4d574daa, +0x4e554e4f, +0x4df24db5, +0x4e424e66, +0x4e304e18, +0x4e524df6, +0x4da74e8b, +0x4e274e2b, +0x4f5e4e8a, +0x4fd04e20, +0x4ed14e78, +0x4e3b4ef4, +0x4e7c4e31, +0x4de84ec6, +0x4e9b4e00, +0x4df64e95, +0x4e584e8f, +0x4e7a4e3b, +0x4e094ea5, +0x4f194ea0, +0x4e854e5c, +0x4e714e5f, +0x4e664e94, +0x4dfd4e34, +0x4e1d4ddc, +0x4e644e27, +0x4eb24e43, +0x4f304e7d, +0x4e054e1a, +0x4dde4f21, +0x4e6f4f53, +0x4e5e4e0a, +0x4e504dd2, +0x4e054ee9, +0x4e4b4dab, +0x4f2d4eb3, +0x4ec84e0a, +0x4e3f4dbf, +0x4ec04eca, +0x4f2c4ed5, +0x4e3d4e9c, +0x4e314ebc, +0x4e334e9c, +0x4e9c4e4e, +0x4edc4e15, +0x4e684ee4, +0x4ef64dd4, +0x4e524de9, +0x4d9b4ebb, +0x4f284e7b, +0x4e9c4e7d, +0x4e804e77, +0x4e174e9f, +0x4e534e60, +0x4e284e8b, +0x4e474e69, +0x4f884e69, +0x4f2c4dfc, +0x4e754e91, +0x4ecc4f10, +0x4dfa4deb, +0x4e374e6d, +0x4e5c4e21, +0x4dc54ebd, +0x4e474e7f, +0x4e614e82, +0x4df04ea7, +0x4f354eb8, +0x4ea14eac, +0x4e154f06, +0x4df54ea4, +0x4de84e63, +0x4e0d4dd8, +0x4e7f4e25, +0x4e904e50, +0x4ecd4e3d, +0x4e6c4dad, +0x4dd84f1a, +0x4e404f33, +0x4e3e4dfb, +0x4e5f4db5, +0x4e344eeb, +0x4e804dda, +0x4ed44ecc, +0x4e124db3, +0x4e524d87, +0x4ed64e2f, +0x4f174e9c, +0x4e124e5e, +0x4e314e48, +0x4e644e88, +0x4e234e44, +0x4ea34e16, +0x4e0a4e98, +0x4ebc4de2, +0x4e224dfc, +0x4dd54e5b, +0x4ea44e85, +0x4e4f4e42, +0x4e2d4ea1, +0x4d7d4e44, +0x4dad4db5, +0x4d314e2a, +0x4dbc4e06, +0x4e784e4e, +0x4ea34d7e, +0x4db84dc2, +0x4daa4ec4, +0x4de24e42, +0x4dac4e01, +0x4e004dbc, +0x4d714da6, +0x4dd24e01, +0x4db64d92, +0x4d544ec5, +0x4e3f4e7b, +0x4dfc4e0b, +0x4d6c4e05, +0x4d904e96, +0x4d2d4dae, +0x4dc94d7c, +0x4dcc4d91, +0x4e484dab, +0x4e264df2, +0x4dd14da6, +0x4dc34e7d, +0x4e044eab, +0x4dcb4d1f, +0x4da94db2, +0x4d8c4dd1, +0x4df24d8d, +0x4ef94e1c, +0x4e0a4d3c, +0x4d8f4d23, +0x4e274e02, +0x4ea24e29, +0x4dc64e10, +0x4db24de3, +0x4df74e61, +0x4e254df5, +0x4e464de6, +0x4dc84e0f, +0x4e3c4d8f, +0x4ddd4d4e, +0x4cfa4df1, +0x4e724e06, +0x4dda4de3, +0x4e244df9, +0x4d7f4da8, +0x4d954d8f, +0x4dbc4e5a, +0x4daf4ded, +0x4eea4e1c, +0x4ee94db3, +0x4dd24e7d, +0x4df64e60, +0x4e2d4dfd, +0x4df04e5d, +0x4dde4db2, +0x4d4e4de1, +0x4db64dd9, +0x4dcd4de8, +0x4d634dff, +0x4e754dee, +0x4dfd4e5d, +0x4d884e30, +0x4dc44e6f, +0x4d904d8b, +0x4dc24d4e, +0x4e3e4e07, +0x4e794d82, +0x4de04da7, +0x4d8a4d1a, +0x4da74e91, +0x4dcc4e5c, +0x4df74d9d, +0x4dee4d69, +0x4da34e05, +0x4e2d4d41, +0x4ec44e13, +0x4e414cf6, +0x4dad4dc4, +0x4e744d96, +0x4e4b4e66, +0x4da14df8, +0x4ddd4dbe, +0x4d814e12, +0x4dba4da9, +0x4dfb4df4, +0x4dbb4e53, +0x4e134d79, +0x4dfc4d93, +0x4d6e4da8, +0x4dee4ddb, +0x4e714db2, +0x4e154e06, +0x4e104dad, +0x4d9a4dbe, +0x4d824e47, +0x4e0e4e18, +0x4ebd4e70, +0x4eee4e2f, +0x4e164e47, +0x4dee4ed6, +0x4e644e5a, +0x4dfa4e99, +0x4e824dd7, +0x4dd04e32, +0x4e314e4a, +0x4dab4db7, +0x4df74e6f, +0x4ea54e5e, +0x4e3d4e2f, +0x4dee4e1b, +0x4df64e6e, +0x4d944e07, +0x4d9d4d52, +0x4dc14d9a, +0x4e8a4d68, +0x4ed04de5, +0x4e0e4dbc, +0x4df14e82, +0x4deb4eda, +0x4e034d7d, +0x4d9c4d79, +0x4df04e18, +0x4e044dc0, +0x4f3c4e3c, +0x4e534dcf, +0x4dad4d88, +0x4e304e2e, +0x4ea54e7a, +0x4df94dca, +0x4e054e4a, +0x4dca4e9c, +0x4e1c4e18, +0x4e3a4e4d, +0x4dd74ed8, +0x4e564dd2, +0x4e5c4da1, +0x4d664dec, +0x4e624e07, +0x4e5e4e15, +0x4e1d4e30, +0x4e0e4e47, +0x4e014dec, +0x4dfa4e70, +0x4db44e67, +0x4f894e83, +0x4f764e1b, +0x4e2b4e4b, +0x4e794f33, +0x4e1d4e5f, +0x4df14e90, +0x4e534df9, +0x4d954deb, +0x4d814e23, +0x4e1e4e0a, +0x4df04efc, +0x4ee74e8d, +0x4ecb4e99, +0x4e414e37, +0x4e284ece, +0x4dba4deb, +0x4e1d4dd7, +0x4e1e4e40, +0x4eab4e08, +0x4e9e4e61, +0x4e324db5, +0x4df44ed9, +0x4e584f2d, +0x4dd94d91, +0x4e324dd4, +0x4db84e5e, +0x4e4d4dfb, +0x4f3e4e87, +0x4ea34dcc, +0x4e3b4d85, +0x4e954e3a, +0x4efa4ea9, +0x4e564f03, +0x4e594e70, +0x4e7b4e85, +0x4e5e4e0a, +0x4e614e33, +0x4e244edb, +0x4e4e4e24, +0x4e354ddc, +0x4dc24e52, +0x4ecb4e58, +0x4e934dea, +0x4e7a4e7a, +0x4e244e24, +0x4e764e1a, +0x4dcb4e5f, +0x4e374e4c, +0x4ec94ed6, +0x4f1e4de4, +0x4e224e8e, +0x4e5e4eef, +0x4e5b4e26, +0x4e7a4ed3, +0x4e764dbf, +0x4de04e06, +0x4de54e59, +0x4e1f4e66, +0x4dd84e76, +0x4ef84e8d, +0x4e454ed3, +0x4e3d4e84, +0x4df14ef2, +0x4e094df6, +0x4e224d77, +0x4e8a4dc6, +0x4e8f4dcd, +0x4eef4e57, +0x4e404dbc, +0x4deb4f00, +0x4e334e93, +0x4e1a4d66, +0x4dee4dc6, +0x4dd84e42, +0x4e834e23, +0x4ee34e0b, +0x4e634da3, +0x4e1a4dbf, +0x4e8f4e7a, +0x4eed4ede, +0x4e5a4e27, +0x4e2f4e42, +0x4e1d4ea2, +0x4e7e4e16, +0x4e644eab, +0x4dc24ec7, +0x4eca4d9a, +0x4e224e4a, +0x4dd14e54, +0x4e814e67, +0x4e324de7, +0x4e704f41, +0x4ddc4e0d, +0x4deb4da1, +0x4d794e14, +0x4db94e1c, +0x4e734e1a, +0x4ee54dd2, +0x4dbd4dd8, +0x4dd34e94, +0x4e2d4da2, +0x4dda4e62, +0x4e2d4d75, +0x4d3e4e01, +0x4ddb4ddf, +0x4d914e1e, +0x4da94e09, +0x4e7a4e74, +0x4dd44dba, +0x4da44e30, +0x4d814e3e, +0x4d954d95, +0x4e304d81, +0x4e354e23, +0x4e344dbd, +0x4e894e0a, +0x4df74d2f, +0x4dbe4e72, +0x4e284ef1, +0x4dd94d7e, +0x4dd54dc9, +0x4de84e30, +0x4e004da4, +0x4e664e0a, +0x4e044d32, +0x4db94d5e, +0x4e3e4e11, +0x4e6c4de4, +0x4e104e38, +0x4df44db9, +0x4dec4e63, +0x4dd54deb, +0x4e284e2c, +0x4d864e22, +0x4e3e4dd8, +0x4e7e4d27, +0x4cf54dc5, +0x4e4e4e04, +0x4df24e1c, +0x4de04e10, +0x4d534d6b, +0x4e374de7, +0x4e274e87, +0x4e074e9b, +0x4f9e4e87, +0x4faf4e14, +0x4f044edd, +0x4e284f20, +0x4e6d4d9f, +0x4df24f14, +0x4e744e1b, +0x4d6f4e77, +0x4dff4e33, +0x4e754e7c, +0x4e2c4e6e, +0x4f3a4e68, +0x4e8f4ec2, +0x4e354eda, +0x4e424f59, +0x4dfe4e34, +0x4e5b4e42, +0x4e914e3a, +0x4e714e20, +0x4eba4eec, +0x4e1f4e03, +0x4dd84eac, +0x4ead4f57, +0x4de54de8, +0x4e964e17, +0x4db74e7c, +0x4e474ddb, +0x4f174e6a, +0x4e984d7d, +0x4e324e04, +0x4ecf4e82, +0x4f054ed7, +0x4ec64e77, +0x4e3f4ee5, +0x4e834e8f, +0x4e0e4dcd, +0x4e584e9d, +0x4df34eea, +0x4ecb4de0, +0x4e8a4e06, +0x4d674e68, +0x4eef4e5a, +0x4e8b4e05, +0x4e464eff, +0x4dd74e60, +0x4dee4dcc, +0x4db44e78, +0x4db14e61, +0x4edd4e3e, +0x4ede4db1, +0x4e5a4d68, +0x4dd24efb, +0x4e284dfe, +0x4e164ec4, +0x4e554d85, +0x4dc44dff, +0x4dc94e27, +0x4dd24dc7, +0x4d944e79, +0x4e8b4e4e, +0x4e524e6a, +0x4e084dfc, +0x4dff4e1e, +0x4d7b4daf, +0x4da54d51, +0x4e254deb, +0x4e7a4e00, +0x4ea64de4, +0x4ddc4d64, +0x4ddb4ea0, +0x4dfa4e73, +0x4e174d1b, +0x4de84d78, +0x4dc44eb9, +0x4e2e4dc0, +0x4eb64e61, +0x4e6a4dac, +0x4dd04d86, +0x4e204e92, +0x4e5f4e2b, +0x4e2d4df0, +0x4dd74e1b, +0x4e1f4e1d, +0x4e6e4e45, +0x4de84dc8, +0x4dea4e5f, +0x4e5e4dd3, +0x4dee4dda, +0x4d7d4dac, +0x4e3c4e39, +0x4e6e4e22, +0x4e454e77, +0x4dd34e0b, +0x4e334e35, +0x4de74e9c, +0x4e544e4c, +0x4f2a4eeb, +0x4f674e39, +0x4e614e9e, +0x4e504f2b, +0x4eab4e45, +0x4e4f4f08, +0x4e7a4e01, +0x4df94e73, +0x4dd94e88, +0x4e6d4ea5, +0x4dcf4ef7, +0x4f584f2f, +0x4eca4ef7, +0x4e824e71, +0x4e734f22, +0x4e094e35, +0x4e4a4de6, +0x4e584e4c, +0x4f1c4e07, +0x4f1d4ea0, +0x4e884de4, +0x4e274ec8, +0x4df94f13, +0x4e554dc0, +0x4e3b4da9, +0x4df24eb5, +0x4ea04e28, +0x4f564e45, +0x4ebe4dfe, +0x4e2b4db8, +0x4ebc4ea1, +0x4f164ec6, +0x4e5a4e85, +0x4e674e8c, +0x4e114efc, +0x4e7c4e3e, +0x4e664e7b, +0x4df34ecf, +0x4e974e39, +0x4eb34dd1, +0x4e054e47, +0x4eb74e7d, +0x4eca4e7b, +0x4ea04f2b, +0x4e514e2b, +0x4dbf4db9, +0x4db64e60, +0x4da94ec2, +0x4eb24e40, +0x4ee84dd0, +0x4e3d4df1, +0x4e3a4eef, +0x4dfe4e4c, +0x4e524e5e, +0x4e284df0, +0x4de54e65, +0x4d6d4e47, +0x4dd14e02, +0x4dde4e7c, +0x4e874e2f, +0x4e584e9e, +0x4e914e0a, +0x4e054e0c, +0x4d894e1d, +0x4da94d53, +0x4e714e6b, +0x4e8a4df8, +0x4ed84dcd, +0x4e1d4d7f, +0x4d974e77, +0x4d6f4ea3, +0x4e0f4d9d, +0x4e2b4dcb, +0x4dbd4e8e, +0x4e284d96, +0x4f0c4e09, +0x4e534d95, +0x4e324d66, +0x4dfb4e1c, +0x4e914e2a, +0x4dd04ed8, +0x4e1e4e94, +0x4e4a4dd3, +0x4e564dcd, +0x4e7e4e2f, +0x4dd24e22, +0x4e9a4e42, +0x4e3c4ddc, +0x4d974e8a, +0x4e7e4e00, +0x4e5c4d80, +0x4e5e4eba, +0x4e024e47, +0x4c814c99, +0x4cb24d53, +0x4ca44d3f, +0x4dab4d31, +0x4dae4d46, +0x4d3d4ce7, +0x4d004da8, +0x4d0d4d6a, +0x4d0c4d75, +0x4cf54cc1, +0x4cc44d2e, +0x4cac4ccf, +0x4cfa4cfc, +0x4ccd4d7f, +0x4d624d41, +0x4d2f4d43, +0x4cfc4cf8, +0x4d004db4, +0x4cad4cfa, +0x4cf74cf2, +0x4cf24d04, +0x4d564caf, +0x4d5b4cda, +0x4d374cef, +0x4cca4d81, +0x4ca34ddd, +0x4d2d4c50, +0x4cf74c81, +0x4ce24d46, +0x4d384ce5, +0x4de84cf5, +0x4d4f4c6a, +0x4cc34c86, +0x4d5b4d31, +0x4d824d55, +0x4cc04d74, +0x4d274d08, +0x4cd94d0a, +0x4d384cf2, +0x4d294c9b, +0x4d1a4d67, +0x4d1d4d25, +0x4cd04cdd, +0x4c6d4ced, +0x4d724d0d, +0x4d944d3f, +0x4d2d4d5a, +0x4cb84d00, +}; \ No newline at end of file diff --git a/redmule/inc/tensor_dim.h b/redmule/inc/tensor_dim.h new file mode 100644 index 0000000..284125f --- /dev/null +++ b/redmule/inc/tensor_dim.h @@ -0,0 +1,13 @@ + /* Header file generated by RedMulE Golden Model */ +#ifndef __TENSOR_DIM__ +#define __TENSOR_DIM__ + +#define M_SIZE 96 +#define N_SIZE 96 +#define K_SIZE 96 +#define SRC_FMT FP16 +#define DST_FMT FP16 +#define FPFORMAT 16 +uint8_t gemm_ops = GEMM; + +#endif diff --git a/redmule/inc/w_2D.h b/redmule/inc/w_2D.h new file mode 100644 index 0000000..74b1a11 --- /dev/null +++ b/redmule/inc/w_2D.h @@ -0,0 +1,99 @@ + /* Header file generated by RedMulE Golden Model */ +uint16_t w_inp_2D [96][96] = { +0x2d1a, 0x2f9c, 0x3596, 0x38eb, 0x3a5c, 0x3827, 0x3b07, 0x397a, 0x347f, 0x3703, 0x2e26, 0x305c, 0x3ba2, 0x39cd, 0x36fa, 0x3899, 0x38dc, 0x3a60, 0x345b, 0x2d80, 0x36ad, 0x2eb8, 0x34ca, 0x384a, 0x33ef, 0x353e, 0x370e, 0x38f6, 0x3947, 0x387c, 0x3893, 0x38fd, 0x39a9, 0x29fb, 0x39ec, 0x3232, 0x35f8, 0x320c, 0x3b5c, 0x34b6, 0x39e6, 0x2b02, 0x340d, 0x30cc, 0x3b7d, 0x3298, 0x381a, 0x3aa8, 0x3b2b, 0x3605, 0x389e, 0x3a3a, 0x2f2c, 0x3ae4, 0x2cc3, 0x2e6b, 0x3850, 0x3a94, 0x396f, 0x3683, 0x3983, 0x39ea, 0x349f, 0x3b95, 0x28a5, 0x3853, 0x349a, 0x30cc, 0x389b, 0x3595, 0x31f9, 0x3a85, 0x367d, 0x3bbe, 0x3bde, 0x3ae7, 0x3977, 0x3a5d, 0x2497, 0x32ed, 0x39c5, 0x3553, 0x3b87, 0x357c, 0x3868, 0x2fc2, 0x1ad7, 0x3079, 0x3b2f, 0x3570, 0x3a70, 0x3761, 0x29cd, 0x3640, 0x3885, 0x2c6e, +0x3a6c, 0x322b, 0x34e2, 0x1a14, 0x385b, 0x3bdd, 0x3b0f, 0x3548, 0x35d5, 0x3105, 0x39f6, 0x2ce7, 0x365f, 0x286d, 0x3673, 0x3517, 0x3847, 0x3905, 0x34f8, 0x3a5b, 0x2809, 0x38e8, 0x3910, 0x3bce, 0x3aa7, 0x3a98, 0x3a82, 0x318b, 0x39a1, 0x39c7, 0x3960, 0x3206, 0x3320, 0x3893, 0x2e29, 0x391a, 0x28ae, 0x3535, 0x3a37, 0x3821, 0x32de, 0x326d, 0x3196, 0x3b5f, 0x38f2, 0x3b44, 0x3680, 0x3309, 0x3bf2, 0x3bb2, 0x3874, 0x3531, 0x2c98, 0x3648, 0x2d18, 0x2af5, 0x25d7, 0x3a75, 0x38bc, 0x3a77, 0x39bb, 0x3a92, 0x397d, 0x3486, 0x35e3, 0x3917, 0x3805, 0x3001, 0x3619, 0x3952, 0x34c7, 0x3a87, 0x35de, 0x385e, 0x2590, 0x3bb1, 0x2b49, 0x3526, 0x35c5, 0x3963, 0x374e, 0x346a, 0x35d0, 0x3622, 0x2dd8, 0x3aa0, 0x3292, 0x30d8, 0x3883, 0x3ad4, 0x3a22, 0x360f, 0x3424, 0x348f, 0x3886, 0x38f3, +0x3945, 0x3792, 0x3629, 0x3b2b, 0x3bf5, 0x3a69, 0x3199, 0x3b84, 0x35c4, 0x3b13, 0x27a5, 0x3b8a, 0x393d, 0x3a14, 0x3a40, 0x35e7, 0x3a6a, 0x38ad, 0x3bb9, 0x24d8, 0x3b90, 0x3797, 0x3716, 0x384e, 0x3832, 0x3855, 0x39c3, 0x39de, 0x2684, 0x3627, 0x35f0, 0x3a86, 0x3995, 0x2abc, 0x347a, 0x2409, 0x2758, 0x3664, 0x3ae9, 0x1eb1, 0x386a, 0x33dd, 0x3413, 0x243b, 0x3b5b, 0x36fb, 0x38ab, 0x39cb, 0x38e8, 0x308c, 0x3be2, 0x30c8, 0x382c, 0x3bcc, 0x3b0f, 0x30e7, 0x31b4, 0x2adb, 0x2354, 0x2c7e, 0x3774, 0x3299, 0x3574, 0x3b35, 0x38a3, 0x3836, 0x3400, 0x3721, 0x3acb, 0x37da, 0x3688, 0x35d5, 0x3977, 0x3247, 0x2a12, 0x3b36, 0x371a, 0x3750, 0x2ad9, 0x242b, 0x306f, 0x3502, 0x3b35, 0x394d, 0x3646, 0x315d, 0x387d, 0x349f, 0x305a, 0x3a84, 0x3a3e, 0x3be3, 0x3bf9, 0x3580, 0x3b14, 0x3a13, +0x371c, 0x2da9, 0x3995, 0x38be, 0x323e, 0x328d, 0x383d, 0x3991, 0x3a57, 0x38ca, 0x3867, 0x3982, 0x34fd, 0x347c, 0x380f, 0x3074, 0x38d4, 0x34fa, 0x326a, 0x377c, 0x3a52, 0x3abd, 0x3536, 0x226f, 0x319c, 0x3321, 0x393e, 0x3467, 0x3b37, 0x3bc1, 0x3a17, 0x394d, 0x33a2, 0x395d, 0x33e4, 0x3b09, 0x3855, 0x354d, 0x2f53, 0x34e7, 0x375b, 0x35f1, 0x367f, 0x3674, 0x2e07, 0x3ba0, 0x314b, 0x3bce, 0x2c5f, 0x384d, 0x3443, 0x36b1, 0x3973, 0x38d8, 0x340d, 0x3a77, 0x2ec7, 0x3538, 0x2e0e, 0x2d39, 0x3a81, 0x3b54, 0x3bdc, 0x3461, 0x2d5f, 0x3a52, 0x390c, 0x2186, 0x3896, 0x39d5, 0x3868, 0x2171, 0x303e, 0x3b19, 0x3915, 0x3be0, 0x39cb, 0x34ce, 0x357f, 0x394b, 0x39d3, 0x3af8, 0x3855, 0x3430, 0x36d6, 0x38bd, 0x3ad5, 0x38f4, 0x252e, 0x3b49, 0x36b0, 0x32b2, 0x3610, 0x3baa, 0x398b, 0x3ac1, +0x3655, 0x2ad4, 0x38e1, 0x3a9a, 0x37b9, 0x3027, 0x3889, 0x3017, 0x3baf, 0x32b8, 0x3922, 0x3984, 0x3ac3, 0x3775, 0x37f5, 0x38f0, 0x3a37, 0x3a8a, 0x283a, 0x1b5c, 0x3998, 0x2c23, 0x380e, 0x3254, 0x3ad7, 0x39f2, 0x328e, 0x36da, 0x370d, 0x2f71, 0x3944, 0x2e44, 0x36d7, 0x362a, 0x370d, 0x38a7, 0x3b99, 0x3850, 0x3111, 0x329d, 0x3bbf, 0x353e, 0x3932, 0x3542, 0x2ab8, 0x3bf2, 0x312c, 0x3070, 0x3983, 0x3882, 0x3aa6, 0x39fd, 0x384b, 0x3a76, 0x3b1f, 0x312a, 0x183e, 0x362e, 0x347e, 0x38cf, 0x3186, 0x38eb, 0x1c0b, 0x2def, 0x33ec, 0x3b0f, 0x387e, 0x344f, 0x3b28, 0x367f, 0x3661, 0x382a, 0x28c2, 0x3980, 0x3709, 0x3875, 0x3922, 0x37fb, 0x36a9, 0x2f28, 0x36c2, 0x30c6, 0x3bcf, 0x3aba, 0x3965, 0x3397, 0x39ab, 0x3812, 0x344e, 0x39ff, 0x3866, 0x3895, 0x3ba0, 0x3a13, 0x3a1b, 0x35ef, +0x382a, 0x34ad, 0x39c7, 0x2ef8, 0x377e, 0x3915, 0x3beb, 0x3a4f, 0x35e7, 0x3465, 0x3668, 0x3404, 0x3233, 0x3361, 0x3b7e, 0x3702, 0x3b3b, 0x3834, 0x36e7, 0x3a65, 0x2ed7, 0x3965, 0x3914, 0x34c7, 0x3722, 0x3612, 0x397f, 0x2e03, 0x36b6, 0x2da9, 0x33d1, 0x350e, 0x38af, 0x1b8f, 0x360b, 0x3803, 0x38e4, 0x328a, 0x330b, 0x383c, 0x3501, 0x334b, 0x35bf, 0x395f, 0x394f, 0x359b, 0x3b66, 0x2eee, 0x350f, 0x3759, 0x3a91, 0x3b46, 0x3808, 0x3b0e, 0x38c7, 0x3846, 0x2e4b, 0x2edb, 0x382a, 0x348d, 0x1a8b, 0x3510, 0x39c3, 0x30f8, 0x3758, 0x2fc8, 0x3386, 0x3316, 0x393f, 0x3351, 0x3b46, 0x389f, 0x3312, 0x28a9, 0x34ff, 0x3a51, 0x3b00, 0x36a4, 0x3811, 0x281c, 0x3646, 0x3b42, 0x3453, 0x32ea, 0x2f6b, 0x3a64, 0x2cd4, 0x28d1, 0x3a0b, 0x3276, 0x3b1d, 0x368e, 0x340a, 0x3ac3, 0x3067, 0x3987, +0x25a7, 0x39f4, 0x3b54, 0x38d8, 0x3708, 0x3999, 0x313e, 0x316b, 0x39af, 0x2e81, 0x3667, 0x39e3, 0x3904, 0x391d, 0x383d, 0x3956, 0x36c0, 0x30d0, 0x346d, 0x39cf, 0x3236, 0x354f, 0x377f, 0x326a, 0x3800, 0x3022, 0x3b2f, 0x3b98, 0x3a97, 0x3bca, 0x3a1e, 0x3a5b, 0x337d, 0x385c, 0x2fff, 0x399e, 0x33e3, 0x355a, 0x3835, 0x3a1e, 0x38d5, 0x3791, 0x2f0d, 0x2ef4, 0x3581, 0x397a, 0x3a26, 0x391b, 0x3727, 0x3874, 0x3a25, 0x30ba, 0x2b99, 0x3a8b, 0x345b, 0x3bab, 0x3900, 0x3743, 0x3b73, 0x391a, 0x3bd2, 0x39ea, 0x3599, 0x383b, 0x34c0, 0x34b3, 0x3bf0, 0x396d, 0x3b6f, 0x36f9, 0x350e, 0x3b43, 0x39da, 0x3b16, 0x38af, 0x369c, 0x3530, 0x3a87, 0x3a68, 0x2220, 0x2d27, 0x3a49, 0x2df1, 0x353a, 0x3a08, 0x3bdb, 0x378e, 0x2942, 0x35f0, 0x3618, 0x3897, 0x3946, 0x3b7d, 0x3a44, 0x356f, 0x389f, +0x3bd0, 0x2946, 0x3aa2, 0x3711, 0x3462, 0x369c, 0x3a56, 0x3b59, 0x32ac, 0x3813, 0x2f28, 0x3c00, 0x3404, 0x34dc, 0x29ec, 0x3bf1, 0x393e, 0x3b63, 0x3513, 0x3822, 0x382b, 0x35f2, 0x3b2c, 0x3498, 0x2515, 0x31aa, 0x3a7f, 0x391d, 0x3a54, 0x34ef, 0x353a, 0x3a41, 0x334a, 0x3b6a, 0x376f, 0x3bb0, 0x3821, 0x38c2, 0x3b57, 0x333d, 0x2ba8, 0x368e, 0x3a2c, 0x345b, 0x3b9a, 0x3976, 0x3870, 0x34b5, 0x386c, 0x3916, 0x38cc, 0x32a3, 0x3bd8, 0x30bc, 0x30a7, 0x38bc, 0x3727, 0x38e7, 0x337a, 0x3b34, 0x39b7, 0x391f, 0x27fa, 0x3b3f, 0x3940, 0x3698, 0x3256, 0x3a9b, 0x39c3, 0x2e76, 0x3899, 0x3915, 0x36a4, 0x3606, 0x3bd9, 0x314f, 0x2822, 0x3bba, 0x381b, 0x3252, 0x38dd, 0x2cb9, 0x38f3, 0x385c, 0x348d, 0x3220, 0x31a8, 0x3128, 0x3aed, 0x3903, 0x3be2, 0x3971, 0x29f4, 0x3130, 0x3b11, 0x35d7, +0x3a04, 0x393c, 0x3573, 0x3870, 0x3568, 0x38f5, 0x38a4, 0x353f, 0x3b0f, 0x363a, 0x35de, 0x3241, 0x3b97, 0x2e15, 0x3a8a, 0x3823, 0x38e0, 0x3556, 0x3a96, 0x364f, 0x337a, 0x34e3, 0x342b, 0x3994, 0x3b5c, 0x3b57, 0x3a63, 0x2f0d, 0x3b7a, 0x3a08, 0x3102, 0x34ce, 0x3036, 0x3864, 0x3887, 0x280c, 0x3bb5, 0x38a1, 0x3b71, 0x3b0c, 0x3487, 0x3b6e, 0x3aec, 0x3af6, 0x1cd8, 0x3381, 0x2923, 0x3b78, 0x3597, 0x3528, 0x3afe, 0x39c2, 0x3258, 0x3898, 0x3b8c, 0x2c32, 0x38e1, 0x2f4a, 0x3948, 0x39bb, 0x39cb, 0x386b, 0x3778, 0x3847, 0x2fa6, 0x3b01, 0x3a0c, 0x3a67, 0x3b8e, 0x3959, 0x346b, 0x38ba, 0x34f8, 0x3606, 0x3940, 0x3562, 0x3be6, 0x390c, 0x2d8b, 0x3987, 0x2f30, 0x2d65, 0x36d1, 0x3b44, 0x3421, 0x37cb, 0x3a4a, 0x338e, 0x3693, 0x3699, 0x3521, 0x3aae, 0x3930, 0x391c, 0x3654, 0x3898, +0x36f8, 0x34cd, 0x2149, 0x326e, 0x36fa, 0x3179, 0x2e80, 0x3a76, 0x3027, 0x3847, 0x3b9b, 0x38eb, 0x35c2, 0x34d4, 0x384a, 0x3595, 0x35ab, 0x3937, 0x3668, 0x3953, 0x3697, 0x2d28, 0x3baa, 0x3a75, 0x3889, 0x3996, 0x34d8, 0x39b2, 0x3b7d, 0x37c5, 0x3b60, 0x316d, 0x324c, 0x3a17, 0x35bd, 0x3914, 0x334e, 0x3375, 0x29e3, 0x34a3, 0x3346, 0x39e3, 0x32d6, 0x2b0b, 0x3ac7, 0x3aca, 0x3813, 0x3752, 0x3022, 0x39f7, 0x3971, 0x389f, 0x39c2, 0x3205, 0x3739, 0x38b3, 0x3942, 0x39dc, 0x39db, 0x382a, 0x3abb, 0x3978, 0x3ad0, 0x3568, 0x2c42, 0x3773, 0x31c8, 0x3b9f, 0x3594, 0x3a9a, 0x37c3, 0x31c2, 0x325a, 0x3931, 0x2265, 0x39ab, 0x24b6, 0x3291, 0x3a79, 0x3b31, 0x39ef, 0x3a6b, 0x381f, 0x304d, 0x33fb, 0x39d6, 0x3849, 0x3891, 0x367a, 0x3b66, 0x380e, 0x3481, 0x3b30, 0x2a58, 0x3bf3, 0x35d3, +0x3b73, 0x3bcf, 0x3a9c, 0x3a9f, 0x2d30, 0x3abe, 0x3510, 0x3980, 0x2809, 0x3bed, 0x2477, 0x31d1, 0x37d6, 0x3553, 0x3190, 0x38fd, 0x366f, 0x3917, 0x3bf2, 0x3b54, 0x34f0, 0x2f3f, 0x3b0a, 0x379a, 0x342d, 0x2db5, 0x3105, 0x35a8, 0x39a2, 0x3b84, 0x350e, 0x2c79, 0x3a84, 0x3419, 0x3af7, 0x3508, 0x39e6, 0x3a46, 0x2f9c, 0x3759, 0x2504, 0x37b5, 0x3b2b, 0x39cc, 0x3ae4, 0x38ec, 0x3751, 0x3841, 0x3b66, 0x2811, 0x34ac, 0x380a, 0x3666, 0x38f0, 0x3447, 0x33b7, 0x3bab, 0x388e, 0x2ce5, 0x307c, 0x3588, 0x3bf6, 0x38f9, 0x3b01, 0x340a, 0x3ae9, 0x3890, 0x3995, 0x3b9a, 0x3a50, 0x3751, 0x2cf7, 0x3a1b, 0x3b4b, 0x2474, 0x2eb0, 0x21b8, 0x38cd, 0x38d8, 0x35d6, 0x36f5, 0x240e, 0x29e9, 0x3686, 0x39d1, 0x3575, 0x3b7c, 0x3886, 0x2e72, 0x38d9, 0x34ac, 0x3816, 0x3b69, 0x3b7c, 0x2f10, 0x3428, +0x2aba, 0x3a08, 0x3acf, 0x364d, 0x344d, 0x3adf, 0x3526, 0x3a64, 0x3ad3, 0x34eb, 0x3943, 0x3894, 0x383a, 0x3bab, 0x3183, 0x3928, 0x3999, 0x300a, 0x35c5, 0x37a3, 0x384d, 0x3a84, 0x3959, 0x39ef, 0x360b, 0x350e, 0x36bf, 0x2f32, 0x3410, 0x383c, 0x3952, 0x33ee, 0x3899, 0x30a8, 0x3b1e, 0x30fa, 0x3b5c, 0x359d, 0x3802, 0x390f, 0x3815, 0x140e, 0x35f6, 0x3bfa, 0x38c4, 0x364f, 0x3b7f, 0x3b9f, 0x35a6, 0x3bf3, 0x3a2d, 0x3727, 0x39ab, 0x3944, 0x3ac5, 0x36df, 0x3b27, 0x3a1f, 0x3a69, 0x3994, 0x3673, 0x3b0c, 0x2f2f, 0x3303, 0x319f, 0x3567, 0x3753, 0x3b8f, 0x30f0, 0x3b7b, 0x36dc, 0x2941, 0x2b6c, 0x3ad2, 0x39cb, 0x3884, 0x3a58, 0x3a0c, 0x337a, 0x3a6e, 0x3b94, 0x37d1, 0x38f2, 0x3bf1, 0x3843, 0x2ae6, 0x384b, 0x3bf9, 0x36cb, 0x362e, 0x309a, 0x35ef, 0x36e6, 0x3484, 0x38a4, 0x3457, +0x370e, 0x341f, 0x39c0, 0x3527, 0x393f, 0x3438, 0x2685, 0x375f, 0x3803, 0x38eb, 0x39fe, 0x39b3, 0x380f, 0x3370, 0x2766, 0x3b26, 0x35b6, 0x38ab, 0x3890, 0x26a8, 0x3879, 0x3819, 0x3ae8, 0x3aae, 0x3385, 0x2944, 0x3966, 0x35cc, 0x3641, 0x3a73, 0x3b91, 0x35d5, 0x31f8, 0x34a1, 0x2bbe, 0x3419, 0x369f, 0x3289, 0x98e, 0x2fef, 0x3ad5, 0x3029, 0x3ae0, 0x3b11, 0x3a03, 0x2e69, 0x38ae, 0x2eed, 0x3871, 0x3848, 0x2f40, 0x3946, 0x38bb, 0x3851, 0x39f5, 0x2e9a, 0x38fc, 0x33e4, 0x349f, 0x3b2e, 0x3873, 0x388c, 0x395a, 0x3519, 0x3636, 0x2df3, 0x3bd5, 0x3a94, 0x2e66, 0x38af, 0x2e50, 0x3aff, 0x3b0e, 0x36c8, 0x187b, 0x3733, 0x3a82, 0x3baf, 0x35c4, 0x2f20, 0x3a36, 0x3266, 0x38c6, 0x37e7, 0x31c5, 0x3a24, 0x3805, 0x299b, 0x3b3b, 0x3163, 0x2f34, 0x30d5, 0x38a2, 0x392a, 0x32af, 0x3be7, +0x3377, 0x2cce, 0x36d4, 0x3852, 0x39ad, 0x30e1, 0x397f, 0x380e, 0x3bd1, 0x3ae1, 0x3413, 0x3aa8, 0x3bcf, 0x3b5f, 0x393f, 0x37cf, 0x391e, 0x38a4, 0x3a1c, 0x3778, 0x35ca, 0x3b75, 0x2fe7, 0x2f20, 0x2d50, 0x3b72, 0x37b3, 0x3ba6, 0x37f5, 0x3866, 0x3b8c, 0x382c, 0x2c3e, 0x39ba, 0x3be2, 0x3602, 0x3ba5, 0x38d5, 0x37ed, 0x36d6, 0x3b11, 0x34de, 0x3831, 0x39e8, 0x377f, 0x38e4, 0x363d, 0x2b40, 0x2c1e, 0x304c, 0x3bcc, 0x347f, 0x34d7, 0x313b, 0x3a3b, 0x1f13, 0x379e, 0x331f, 0x2d1c, 0x3778, 0x3550, 0x3a5f, 0x2fea, 0x3ab4, 0x32bb, 0x386c, 0x3690, 0x3787, 0x3a95, 0x367b, 0x385a, 0x3b3b, 0x3b49, 0x387c, 0x38f5, 0x2f80, 0x37d4, 0x3b87, 0x3881, 0x3996, 0x3547, 0x38d2, 0x3ab2, 0x3a1c, 0x3483, 0x3ae7, 0x394d, 0x333c, 0x34df, 0x39e5, 0x3aaf, 0x39e6, 0x30a3, 0x3a4d, 0x3890, 0x34cc, +0x3482, 0x3420, 0x2dcc, 0x310d, 0x38c5, 0x3b6a, 0x38ca, 0x3ba1, 0x3a7c, 0x318a, 0x2d61, 0x3635, 0x39e2, 0x3837, 0x39fe, 0x3842, 0x3574, 0x3992, 0x246c, 0x3565, 0x380e, 0x3712, 0x35e8, 0x3712, 0x38ed, 0x3307, 0x398f, 0x31f3, 0x3a5c, 0x3a73, 0x33ba, 0x3841, 0x35d0, 0x36df, 0x2ce4, 0x366e, 0x38a3, 0x251a, 0x399f, 0x372c, 0x359d, 0x3913, 0x397c, 0x2e64, 0x3861, 0x2d47, 0x3a98, 0x381d, 0x3b60, 0x3b4a, 0x381d, 0x3a0d, 0x3adb, 0x3869, 0x3353, 0x3939, 0x39ad, 0x3114, 0x3b12, 0x3860, 0x39fe, 0x3ba6, 0x247b, 0x3a0e, 0x3206, 0x3b0b, 0x3b25, 0x399f, 0x39b4, 0x3b42, 0x3a81, 0x36bb, 0x3522, 0x349e, 0x3494, 0x3081, 0x3978, 0x3768, 0x2edd, 0x37b4, 0x34d1, 0x3bf8, 0x3ad6, 0x3773, 0x3034, 0x381a, 0x3a52, 0x3771, 0x2b52, 0x3b3d, 0x3b20, 0x3bf8, 0x342f, 0x34f8, 0x3b72, 0x35b4, +0x3029, 0x36c3, 0x39c0, 0x393c, 0x30da, 0x3152, 0x3917, 0x3864, 0x390b, 0x3aea, 0x2c08, 0x36c6, 0x3bcd, 0x3375, 0x35bc, 0x3a2b, 0x3684, 0x368f, 0x3974, 0x37fd, 0x3901, 0x37a4, 0x3729, 0x35a0, 0x3ab0, 0x3251, 0x2857, 0x38ef, 0x2e96, 0x38d6, 0x2cda, 0x331c, 0x39a8, 0x3a44, 0x3a7c, 0x3aa8, 0x3851, 0x3974, 0x3b93, 0x3587, 0x3baf, 0x2eac, 0x37f4, 0x38a7, 0x292d, 0x2fc0, 0x330d, 0x3404, 0x3459, 0x3999, 0x385a, 0x396c, 0x3834, 0x2534, 0x3b44, 0x2ecf, 0x34f6, 0x3632, 0x2898, 0x3511, 0x3514, 0x3bd8, 0x3284, 0x3913, 0x34c4, 0x3967, 0x3845, 0x3ab4, 0x37eb, 0x30b8, 0x3629, 0x39c1, 0x2b02, 0x37f7, 0x31d5, 0x3812, 0x2c1b, 0x2a24, 0x3499, 0x36a7, 0x39c2, 0x3952, 0x351b, 0x3ba0, 0x3706, 0x3896, 0x3600, 0x22c8, 0x3077, 0x3839, 0x36ed, 0x38d4, 0x2fd0, 0x3a29, 0x370c, 0x3bfe, +0x335b, 0x311a, 0x39b1, 0x32aa, 0x3a7e, 0x387f, 0x3846, 0x3a3b, 0x379b, 0x34c4, 0x38dc, 0x2c37, 0x394c, 0x381d, 0x3113, 0x300e, 0x3922, 0x2ddd, 0x30ee, 0x3347, 0x3881, 0x2cb5, 0x311e, 0x3023, 0x384c, 0x3a29, 0x39b9, 0x391d, 0x36ff, 0x38d7, 0x3adf, 0x3892, 0x39d7, 0x3b41, 0x3a26, 0x35cf, 0x2fa9, 0x32ff, 0x3218, 0x34af, 0x3282, 0x2ff1, 0x3823, 0x3249, 0x35c7, 0x3baf, 0x3817, 0x39c2, 0x3799, 0x38e2, 0x39f5, 0x30d1, 0x3934, 0x3696, 0x351b, 0x3586, 0x3adf, 0x3747, 0x3aa0, 0x33d7, 0x3600, 0x3a9a, 0x3b09, 0x3a96, 0x364b, 0x38d2, 0x3b1e, 0x2793, 0x3555, 0x3b85, 0x3460, 0x3747, 0x3a29, 0x21c7, 0x3b24, 0x3b7a, 0x3902, 0x2cd6, 0x379b, 0x2970, 0x3910, 0x38c2, 0x3930, 0x3674, 0x39e6, 0x3ac8, 0x38e2, 0x3841, 0x37a2, 0x3a56, 0x3424, 0x3406, 0x385c, 0x3924, 0x3923, 0x36aa, +0x33bd, 0x37ed, 0x2b2e, 0x3bdc, 0x3ae1, 0x3055, 0x3b41, 0x31d7, 0x3880, 0x3125, 0x3015, 0x282f, 0x3bc1, 0x3bd1, 0x3684, 0x2ca5, 0x344e, 0x3bb1, 0x2094, 0x349a, 0x3211, 0x31bc, 0x3bd1, 0x2d9d, 0x3b07, 0x3b33, 0x350f, 0x3459, 0x3851, 0x36b4, 0x3a84, 0x3965, 0x3a34, 0x3b3c, 0x353d, 0x2ffd, 0x33e6, 0x376b, 0x3272, 0x2e28, 0x3aea, 0x3485, 0x39f4, 0x3955, 0x277e, 0x3bfc, 0x3526, 0x384e, 0x2485, 0x38b2, 0x3101, 0x2fbd, 0x359e, 0x36ba, 0x3aa5, 0x308a, 0x38d1, 0x3434, 0x3ae9, 0x3954, 0x33e0, 0x2ff9, 0x3aa9, 0x3721, 0x2cb5, 0x28e9, 0x3524, 0x3658, 0x3a2f, 0x315c, 0x38d9, 0x396e, 0x383b, 0x3a0a, 0x32fe, 0x3479, 0x2a64, 0x3162, 0x35dd, 0x350b, 0x2c86, 0x3878, 0x346b, 0x2719, 0x204d, 0x38a4, 0x3778, 0x3863, 0x3ae3, 0x3784, 0x3174, 0x3562, 0x3a26, 0x39c4, 0x31b9, 0x3600, +0x2cf9, 0x3a34, 0x3834, 0x346f, 0x3712, 0x29e1, 0x2cfe, 0x3873, 0x3b1f, 0x3bc2, 0x3936, 0x3551, 0x3b8e, 0x3742, 0x39b1, 0x36ab, 0x390f, 0x2a6d, 0x3805, 0x32b1, 0x2e34, 0x3898, 0x3375, 0x3997, 0x3845, 0x3b9a, 0x3bac, 0x3876, 0x392c, 0x3811, 0x3aad, 0x3700, 0x2ab0, 0x340c, 0x3ba5, 0x2d7c, 0x36c7, 0x38dc, 0x3745, 0x2c5c, 0x2d0d, 0x34ee, 0x339e, 0x3565, 0x3983, 0x302c, 0x2cd8, 0x3886, 0x3994, 0x3ba6, 0x38d1, 0x315d, 0x3083, 0x3860, 0x3769, 0x3bf0, 0x33cd, 0x2b0f, 0x360c, 0x380a, 0x3442, 0x3b5b, 0x36eb, 0x3938, 0x3b69, 0x3283, 0x301b, 0x2fb0, 0x3b51, 0x3aa6, 0x2b81, 0x2cfd, 0x3aaa, 0x38fc, 0x3a73, 0x3232, 0x3614, 0x3963, 0x3b01, 0x3b9c, 0x3889, 0x372a, 0x20de, 0x3629, 0x36c0, 0x31ca, 0x3b87, 0x3543, 0x38bf, 0x3aae, 0x37d6, 0x365e, 0x35a4, 0x35da, 0x3962, 0x3741, +0x2910, 0x3478, 0x38b6, 0x355e, 0x3a0a, 0x3969, 0x36b2, 0x3bcd, 0x2633, 0x36d6, 0x395c, 0x39d9, 0x3505, 0x34cf, 0x337f, 0x3560, 0x2f11, 0x3a3d, 0x3386, 0x39ac, 0x38d3, 0x2dbe, 0x3908, 0x3599, 0x2d42, 0x38eb, 0x2d1e, 0x3bb5, 0x3550, 0x377e, 0x387f, 0x2f07, 0x3b2f, 0x37a5, 0x390a, 0x3902, 0x38e8, 0x345a, 0x38a5, 0x378b, 0x2e8d, 0x3ab3, 0x3a78, 0x34d9, 0x341a, 0x3387, 0x289a, 0x2db0, 0x384f, 0x3be6, 0x24e4, 0x3b02, 0x3af5, 0x34b2, 0x2af4, 0x3ae6, 0x337d, 0x3875, 0x34f6, 0x262d, 0x3488, 0x3a14, 0x2cb8, 0x357c, 0x3b96, 0x3208, 0x3969, 0x2bae, 0x3b77, 0x3515, 0x345d, 0x39c9, 0x354d, 0x38cf, 0x3b12, 0x3af9, 0x3a3c, 0x2f0f, 0x3a0b, 0x3075, 0x3859, 0x2045, 0x382e, 0x3901, 0x159e, 0x30fd, 0x2b73, 0x31e0, 0x3bf4, 0x3a46, 0x3afd, 0x2bbe, 0x274d, 0x39dd, 0x2bc7, 0x3450, +0x2ace, 0x3a96, 0x3bae, 0x386d, 0x3a6a, 0x2a87, 0x3913, 0x3618, 0x2cce, 0x391e, 0x3346, 0x3a02, 0x3981, 0x3afe, 0x34da, 0x3aa3, 0x3846, 0x303e, 0x377a, 0x3bc0, 0x2d77, 0x2f1a, 0x3916, 0x3b20, 0x2896, 0x3b93, 0x3a74, 0x24dd, 0x3396, 0x3b7c, 0x3a9b, 0x3b17, 0x366a, 0x1e78, 0x3b60, 0x3153, 0x3844, 0x2aa8, 0x37ab, 0x352c, 0x3455, 0x3a4d, 0x3a7a, 0x3a2f, 0x35bb, 0x358f, 0x3781, 0x2288, 0x2e69, 0x39c4, 0x3534, 0x3ba4, 0x3b8a, 0x398b, 0x3998, 0x392a, 0x3bd5, 0x3a5b, 0x31e5, 0x39af, 0x3a90, 0x3ac1, 0x374e, 0x3791, 0x3aa4, 0x3519, 0x3b0a, 0x398e, 0x3bae, 0x339e, 0x35fe, 0x3ab9, 0x2a73, 0x38b3, 0x388c, 0x3530, 0x2fe3, 0x37b5, 0x3188, 0x3b00, 0x31b2, 0x34de, 0x2f74, 0x397b, 0x3a17, 0x2df1, 0x357a, 0x3882, 0x3958, 0x39f1, 0x3ba4, 0x3864, 0x36f8, 0x33d2, 0x390f, 0x395b, +0x3a33, 0x39ea, 0x3846, 0x3502, 0x29a0, 0x38da, 0x3a62, 0x39c8, 0x3a32, 0x3987, 0x2807, 0x3895, 0x3621, 0x3981, 0x368f, 0x25b3, 0x312e, 0x3bfe, 0x38c8, 0x396d, 0x3b4b, 0x380a, 0x3b65, 0x36ca, 0x3954, 0x3ae0, 0x32f0, 0x33b6, 0x3920, 0x35fd, 0x39b3, 0x2f18, 0x3876, 0x396c, 0x39eb, 0x3b39, 0x3ab4, 0x3b9b, 0x2504, 0x3621, 0x3534, 0x2ea1, 0x33e7, 0x3af5, 0x3965, 0x33ed, 0x38d8, 0x37cc, 0x3682, 0x311b, 0x36e0, 0x2805, 0x3502, 0x38ac, 0x2dfa, 0x39d6, 0x3a41, 0x38e1, 0x3992, 0x38da, 0x3a54, 0x356b, 0x3701, 0x389d, 0x35de, 0x3b8e, 0x3b4c, 0x302b, 0x36b5, 0x2dd3, 0x397b, 0x2e07, 0x3645, 0x3267, 0x38ca, 0x1b3c, 0x3a0b, 0x3821, 0x3881, 0x3a2b, 0x3980, 0x3711, 0x2b68, 0x3a27, 0x38ca, 0x3057, 0x3a56, 0x386a, 0x3bb8, 0x38ca, 0x3152, 0x3683, 0x39c4, 0x2cf6, 0x3351, 0x3903, +0x342c, 0x30b8, 0x3704, 0x38b1, 0x3811, 0x3860, 0x3916, 0x381f, 0x3892, 0x3349, 0x1e6c, 0x30e3, 0x38c8, 0x3b7b, 0x39d3, 0x30df, 0x3bf3, 0x2f61, 0x37fa, 0x396a, 0x3bbe, 0x3872, 0x38c1, 0x3ad8, 0x3624, 0x3536, 0x35bb, 0x3b72, 0x222a, 0x31e0, 0x34d3, 0x2ee5, 0x386d, 0x3a1e, 0x28b7, 0x21e6, 0x37ef, 0x3263, 0x3ae0, 0x211e, 0x38c4, 0x3ba4, 0x380b, 0x3757, 0x34f5, 0x3a18, 0x36fa, 0x3844, 0x39fd, 0x3aa1, 0x3be2, 0x33b5, 0x3523, 0x386c, 0x20a5, 0x314f, 0x3a95, 0x3a54, 0x3bdd, 0x35de, 0x3a9f, 0x398e, 0x3a70, 0x2a6d, 0x3538, 0x31d5, 0x38b4, 0x2199, 0x2bf6, 0x3a4a, 0x3057, 0x31e5, 0x3b51, 0x31d8, 0x398b, 0x2c16, 0x3571, 0x2a31, 0x39cf, 0x3507, 0x3874, 0x3b15, 0x2e8a, 0x36f5, 0x2f3b, 0x3be1, 0x3a1b, 0x38cb, 0x3759, 0x1e24, 0x3b85, 0x3998, 0x30f7, 0x2d7d, 0x3a8a, 0x3378, +0x37a0, 0x3b60, 0x32f2, 0x34cc, 0x3ba4, 0x3b40, 0x35b1, 0x1a3c, 0x239a, 0x3ab0, 0x38cf, 0x3b26, 0x3990, 0x39d7, 0x3b7e, 0x3980, 0x2b0a, 0x3985, 0x3862, 0x3a53, 0x3409, 0x27e2, 0x38f7, 0x3a2f, 0x2dd9, 0x34f1, 0x2dda, 0x395e, 0x375b, 0x3086, 0x3053, 0x3baf, 0x365b, 0x38b6, 0x3a51, 0x34e4, 0x356d, 0x35f9, 0x3b6e, 0x38aa, 0x2d39, 0x34ac, 0x27d5, 0x38c8, 0x280c, 0x1999, 0x36da, 0x31ca, 0x3bf6, 0x31be, 0x37a2, 0x3296, 0x3902, 0x2f66, 0x2f5e, 0x3867, 0x26c6, 0x32c4, 0x3412, 0x2dd7, 0x34a6, 0x3b89, 0x354b, 0x345e, 0x33cd, 0x35ad, 0x3804, 0x3583, 0x37ea, 0x3bcb, 0x30d0, 0x38e3, 0x3100, 0x2c8f, 0x3be4, 0x35e4, 0x35cb, 0x3a5e, 0x3a50, 0x3837, 0x3540, 0x3a4f, 0x3b11, 0x32fb, 0x3949, 0x3870, 0x36e9, 0x3382, 0x3aca, 0x3b72, 0x3b03, 0x3a4d, 0x369f, 0x389c, 0x3a02, 0x27e4, +0x3954, 0x36ba, 0x25e2, 0x3847, 0x357e, 0x38da, 0x361d, 0x3b50, 0x2a0f, 0x3af9, 0x37f1, 0x3831, 0x3bc1, 0x3aaf, 0x32de, 0x3980, 0x3877, 0x3a73, 0x2944, 0x3b22, 0x30e3, 0x357e, 0x3987, 0x26ed, 0x3a5c, 0x3a5e, 0x381a, 0x3ae1, 0x3bc4, 0x3b3e, 0x3579, 0x3835, 0x3ba0, 0x37d2, 0x38b9, 0x2c78, 0x3875, 0x3808, 0x346b, 0x38c6, 0x3970, 0x342d, 0x3104, 0x2b1a, 0x3aa6, 0x3b64, 0x3a9f, 0x36f1, 0x2cac, 0x3b98, 0x3ab5, 0x3ab7, 0x3685, 0x33a5, 0x30ae, 0x3689, 0x3bd4, 0x39c1, 0x3bb8, 0x3566, 0x37bb, 0x2ee2, 0x3036, 0x3a93, 0x35d2, 0x3a4a, 0x3be5, 0x324b, 0x357c, 0x3b9a, 0x3759, 0x39f8, 0x397c, 0x3a80, 0x39d9, 0x39f4, 0x2fbd, 0x390e, 0x3865, 0x39f1, 0x3b87, 0x37c1, 0x3a3f, 0x348c, 0x368b, 0x2714, 0x2a26, 0x32a9, 0x30dc, 0x3a35, 0x371a, 0x3b96, 0x3569, 0x388b, 0x3775, 0x3604, +0x386a, 0x391b, 0x3826, 0x38fd, 0x3156, 0x3bae, 0x3755, 0x38df, 0x391c, 0x3b3b, 0x3aa5, 0x3870, 0x3b20, 0x3a0b, 0x3a85, 0x395f, 0x3a77, 0x3264, 0x2c48, 0x3a8f, 0x3815, 0x3acc, 0x3b2d, 0x3be0, 0x39ac, 0x3a41, 0x3bc0, 0x39f6, 0x3524, 0x3024, 0x2ae0, 0x3b6f, 0x366f, 0x38e7, 0x3a0c, 0x38de, 0x3a12, 0x380b, 0x38ec, 0x3222, 0x308c, 0x3871, 0x381f, 0x3be5, 0x3a0f, 0x3ac7, 0x36fe, 0x3406, 0x331f, 0x354c, 0x379d, 0x373b, 0x380f, 0x37c2, 0x3822, 0x3b8f, 0x3871, 0x3444, 0x3357, 0x3052, 0x35a3, 0x353b, 0x3a18, 0x3b60, 0x3b2e, 0x39f1, 0x1bf8, 0x3b34, 0x3a45, 0x373b, 0x311e, 0x3b4f, 0x3bb9, 0x2f13, 0x390b, 0x38eb, 0x3a53, 0x3712, 0x3ad6, 0x3b2e, 0x3a91, 0x3171, 0x361b, 0x3ad7, 0x3577, 0x37d3, 0x31f3, 0x26d3, 0x2995, 0x3060, 0x3960, 0x38d3, 0x3a9b, 0x1aa9, 0x381e, 0x349b, +0x3485, 0x3be7, 0x3a58, 0x39bb, 0x36de, 0x3456, 0x2a1e, 0x2ed2, 0x2e40, 0x3041, 0x38f1, 0x3beb, 0x3aea, 0x3049, 0x3117, 0x3bf2, 0x3707, 0x3bf3, 0x38e3, 0x3b27, 0x3a88, 0x3b5a, 0x34a6, 0x3b51, 0x39bc, 0x3841, 0x3a1d, 0x3867, 0x35e7, 0x3b46, 0x2916, 0x3a6b, 0x3956, 0x3825, 0x352f, 0x3b66, 0x3975, 0x3637, 0x3b44, 0x356e, 0x387b, 0x34eb, 0x3a4b, 0x384f, 0x3b29, 0x3ad3, 0x3a09, 0x3542, 0x3a39, 0x3551, 0x3889, 0x3429, 0x3637, 0x3bc8, 0x1aee, 0x3b20, 0x3b0a, 0x3994, 0x2fea, 0x3b4b, 0x381d, 0x3758, 0x397e, 0x3861, 0x25cc, 0x391a, 0x28d2, 0x2524, 0x3424, 0x3a6a, 0x34f3, 0x3aca, 0x3a40, 0x34e1, 0x3647, 0x3623, 0x34e9, 0x3786, 0x38a6, 0x3be1, 0x34d6, 0x350c, 0x3bf3, 0x368b, 0x39bb, 0x34e0, 0x39b0, 0x342e, 0x360d, 0x34e3, 0x3867, 0x389a, 0x38d7, 0x31f9, 0x3565, 0x2e93, +0x39a8, 0x3b31, 0x384a, 0x3370, 0x316f, 0x3815, 0x35b5, 0x3594, 0x3bbd, 0x3afe, 0x39be, 0x2276, 0x3805, 0x3b69, 0x3964, 0x33c0, 0x3a3b, 0x3231, 0x3358, 0x2b23, 0x3645, 0x3b99, 0x3735, 0x2255, 0x3595, 0x2f45, 0x381a, 0x257c, 0x3ac7, 0x38e9, 0x381b, 0x36d0, 0x3132, 0x3814, 0x3a17, 0x3ad4, 0x2abf, 0x3887, 0x3424, 0x2e96, 0x3361, 0x341a, 0x38cf, 0x3448, 0x287f, 0x3b1c, 0x3b09, 0x3983, 0x3a6e, 0x375d, 0x3458, 0x383c, 0x3196, 0x3b2f, 0x1cbe, 0x31e6, 0x29c4, 0x3745, 0x395c, 0x3aac, 0x3b2f, 0x38f1, 0x320c, 0x3a9d, 0x375f, 0x3b01, 0x32ef, 0x3531, 0x36d3, 0x3726, 0x3642, 0x2c76, 0x3916, 0x342a, 0x3548, 0x39d7, 0x39de, 0x3c00, 0x3b1e, 0x391a, 0x35e8, 0x3b2b, 0x3645, 0x3a81, 0x3876, 0x37e2, 0x36c8, 0x3b62, 0x3302, 0x1bad, 0x3961, 0x3beb, 0x39a7, 0x3611, 0x381b, 0x3266, +0x3b25, 0x384e, 0x3940, 0x2891, 0x3a32, 0x3828, 0x34f3, 0x3652, 0x3178, 0x2839, 0x3aa2, 0x2a96, 0x2df4, 0x347b, 0x28ad, 0x3699, 0x36ba, 0x32ad, 0x39e5, 0x1c06, 0x340e, 0x3968, 0x387c, 0x3bc6, 0x3839, 0x39d4, 0x2645, 0x38ae, 0x3ae3, 0x367e, 0x3090, 0x34fe, 0x3b6b, 0x2e64, 0x36bb, 0x33ef, 0x2c5a, 0x38ae, 0x36db, 0x3a6e, 0x38ac, 0x39eb, 0x387f, 0x1b0d, 0x3b7c, 0x3461, 0x34cc, 0x3b4f, 0x3045, 0x38e9, 0x35fa, 0x3625, 0x33e7, 0x35f4, 0x3939, 0x35dd, 0x2b8e, 0x3574, 0x3b6a, 0x3921, 0x38de, 0x393e, 0x29f5, 0x2e2c, 0x3a10, 0x39a3, 0x32c2, 0x38e5, 0x38c7, 0x30c3, 0x3b6e, 0x34b3, 0x36f9, 0x38bb, 0x3b24, 0x359f, 0x3308, 0x2d54, 0x3a03, 0x39ee, 0x3a7b, 0x3076, 0x2ab0, 0x3b94, 0x32a7, 0x39b8, 0x3b78, 0x28ce, 0x375d, 0x3209, 0x3385, 0x38f1, 0x38ca, 0x3b51, 0x374e, 0x3593, +0x33ca, 0x33b7, 0x3663, 0x36c1, 0x3831, 0x347e, 0x39f8, 0x34bf, 0x39dc, 0x39e6, 0x2fa9, 0x32d9, 0x3a58, 0x39e5, 0x3116, 0x3026, 0x3b59, 0x3b82, 0x3a92, 0x316a, 0x38c3, 0x2770, 0x38e7, 0x380b, 0x3b2b, 0x380d, 0x32d6, 0x3602, 0x39df, 0x382c, 0x383c, 0x3b76, 0x3647, 0x38f3, 0x36b4, 0x3693, 0x251e, 0x3b19, 0x357e, 0x37d4, 0x37ab, 0x3aee, 0x349f, 0x32ec, 0x3401, 0x3bcc, 0x3145, 0x3845, 0x3b76, 0x38a9, 0x37f4, 0x343b, 0x3933, 0x38fe, 0x3af8, 0x3178, 0x392b, 0x3aed, 0x2f64, 0x3992, 0x39f8, 0x34fe, 0x3737, 0x3a24, 0x3bf9, 0x3a31, 0x3a60, 0x37b6, 0x39ad, 0x3ba5, 0x381d, 0x384d, 0x3702, 0x39d8, 0x379e, 0x38ba, 0x3a79, 0x391a, 0x34ce, 0x2d57, 0x3a7e, 0x35f0, 0x382f, 0x3937, 0x3698, 0x3acc, 0x34ca, 0x382d, 0x35f7, 0x34f7, 0x3b90, 0x374d, 0x380f, 0x2e14, 0x3ac3, 0x3583, +0x36fe, 0x38aa, 0x3abd, 0x3750, 0x2f2d, 0x3906, 0x3aed, 0x32e7, 0x3b42, 0x3823, 0x265f, 0x17f9, 0x248a, 0x38ee, 0x3a11, 0x3b21, 0x35a9, 0x2dd7, 0x35dc, 0x38ed, 0x3860, 0x3989, 0x3229, 0x333d, 0x2c78, 0x30fa, 0x2d3c, 0x3a04, 0x39c2, 0x3895, 0x3a67, 0x2f53, 0x3583, 0x39bd, 0x3a03, 0x3afd, 0x3892, 0x3889, 0x39e5, 0x3825, 0x39dd, 0x3a23, 0x3644, 0x31d1, 0x3875, 0x3a46, 0x38c1, 0x390c, 0x394d, 0x262a, 0x2823, 0x2c94, 0x3645, 0x39f9, 0x3366, 0x3710, 0x2f70, 0x348c, 0x2fa3, 0x3b0e, 0x3241, 0x3491, 0x386f, 0x38b6, 0x34e1, 0x30fc, 0x32cc, 0x37be, 0x3519, 0x334b, 0x389c, 0x34c1, 0x388b, 0x38cf, 0x3980, 0x2463, 0x3a34, 0x32ff, 0x3a3c, 0x3932, 0x3b47, 0x39ab, 0x3a9c, 0x27b6, 0x2d90, 0x35d2, 0x39d2, 0x3a5d, 0x3bf2, 0x3a5f, 0x38e1, 0x3b81, 0x3865, 0x3a31, 0x3b03, 0x3906, +0x35bf, 0x3818, 0x373b, 0x3491, 0x34a9, 0x3b40, 0x2cda, 0x381b, 0x2a00, 0x396e, 0x347a, 0x2d46, 0x2fa1, 0x3bef, 0x3acd, 0x362f, 0x2a7f, 0x3a38, 0x3346, 0x3889, 0x3061, 0x3b20, 0x3836, 0x35a4, 0x3a7d, 0x3487, 0x381a, 0x381f, 0x3977, 0x3862, 0x312a, 0x315e, 0x3841, 0x3453, 0x21f5, 0x363d, 0x2ddb, 0x35bb, 0x3bb4, 0x3b36, 0x382a, 0x36d8, 0x3764, 0x3b9e, 0x26b4, 0x29ce, 0x3451, 0x33ba, 0x37fb, 0x3a4f, 0x2181, 0x35cc, 0x3288, 0x2de2, 0x3a13, 0x2dd5, 0x326d, 0x3731, 0x3931, 0x3b0d, 0x34c6, 0x36bd, 0x38fe, 0x3a0a, 0x283b, 0x38c0, 0x3806, 0x39fa, 0x39a6, 0x39f8, 0x3b09, 0x36dc, 0x385c, 0x329a, 0x3a89, 0x2dbb, 0x39ee, 0x3b65, 0x3436, 0x37e3, 0x3a27, 0x3910, 0x3b43, 0x398c, 0x2efa, 0x3467, 0x39ce, 0x38ae, 0x3567, 0x3484, 0x38e0, 0x327e, 0x2c32, 0x39c1, 0x3b63, 0x35ac, +0x35c1, 0x2d9e, 0x38af, 0x32e3, 0x347f, 0x3855, 0x3527, 0x3850, 0x3b55, 0x3baa, 0x392a, 0x37d9, 0x39d3, 0x3960, 0x3ab0, 0x2ccb, 0x2da9, 0x3990, 0x3b87, 0x2c1c, 0x397d, 0x28f6, 0x397d, 0x3944, 0x30be, 0x3ba4, 0x2f6d, 0x34d4, 0x3416, 0x39e7, 0x398f, 0x3958, 0x3b7b, 0x3a1d, 0x31e6, 0x27fe, 0x3ba0, 0x33b2, 0x3080, 0x35a9, 0x3800, 0x37f6, 0x3965, 0x3594, 0x322e, 0x3b27, 0x3bdb, 0x3b7a, 0x38a6, 0x1848, 0x3b61, 0x3842, 0x3ad2, 0x390f, 0x3b17, 0x3715, 0x3798, 0x33cb, 0x33db, 0x383f, 0x394b, 0x30cb, 0x3bbb, 0x366d, 0x3b5b, 0x38ca, 0x36cb, 0x3558, 0x39f6, 0x3776, 0x388a, 0x35d1, 0x3475, 0x3509, 0x3742, 0x3b15, 0x3ad4, 0x3182, 0x39e7, 0x3b5a, 0x35dd, 0x3751, 0x32b8, 0x349f, 0x3996, 0x3a4c, 0x35e9, 0x266e, 0x37f2, 0x3be3, 0x2525, 0x26af, 0x3282, 0x3810, 0x2cf1, 0x383a, +0x3aa3, 0x399c, 0x3630, 0x38c8, 0x3203, 0x19a2, 0x35e2, 0x38fe, 0x38a2, 0x3b63, 0x3318, 0x231d, 0x3999, 0x3ae9, 0x3132, 0x21b2, 0x2a77, 0x394e, 0x2cf4, 0x3890, 0x38a6, 0x30ff, 0x3be2, 0x3231, 0x3b72, 0x3487, 0x3496, 0x351c, 0x38d6, 0x3944, 0x3949, 0x3b7b, 0x362f, 0x37cd, 0x38f6, 0x3a10, 0x3a93, 0x31be, 0x3b8e, 0x360a, 0x3567, 0x3803, 0x3b16, 0x3b59, 0x3a4e, 0x3770, 0x2d73, 0x3312, 0x382f, 0x30fa, 0x3921, 0x339d, 0x2222, 0x3049, 0x3b4e, 0x3b67, 0x3b07, 0x3b31, 0x34e8, 0x3684, 0x3a09, 0x389b, 0x3999, 0x39d1, 0x3765, 0x37bc, 0x3732, 0x3b35, 0x3819, 0x36ef, 0x38fc, 0x3665, 0x3b96, 0x3015, 0x3847, 0x35e6, 0x3167, 0x34ba, 0x3794, 0x3a6a, 0x35d8, 0x30f4, 0x34c7, 0x3bce, 0x3903, 0x3bf3, 0x3a72, 0x3828, 0x381a, 0x3981, 0x3925, 0x39a1, 0x35f4, 0x35dd, 0x3954, 0x2bc5, +0x3884, 0x2d8e, 0x2a49, 0x383f, 0x15af, 0x3a4c, 0x3af6, 0x3ad8, 0x3847, 0x3b07, 0x3a15, 0x3bdd, 0x3a8c, 0x2caf, 0x364a, 0x3825, 0x2b2c, 0x3a97, 0x33b8, 0x3ac4, 0x347e, 0x36f7, 0x36ed, 0x3131, 0x2bea, 0x3841, 0x3880, 0x39e4, 0x30c3, 0x3b62, 0x32ba, 0x34f0, 0x34c7, 0x396a, 0x3722, 0x384d, 0x3165, 0x3a71, 0x34bf, 0x3018, 0x372c, 0x3876, 0x347f, 0x3be2, 0x117d, 0x3a2c, 0x3917, 0x3895, 0x3a3b, 0x2f92, 0x3b65, 0x3af3, 0x39b3, 0x290c, 0x301b, 0x3a9e, 0x39ef, 0x38d0, 0x34e8, 0x336a, 0x37e8, 0x3685, 0x376e, 0x3b8b, 0x3b4c, 0x35a7, 0x3919, 0x3504, 0x3b59, 0x3a85, 0x2edc, 0x3b32, 0x36bc, 0x21fa, 0x357b, 0x38a6, 0x380d, 0x3969, 0x348c, 0x39cd, 0x2d9a, 0x3818, 0x380e, 0x39f4, 0x35ce, 0x3823, 0x3a29, 0x2c1a, 0x3846, 0x3811, 0x2f33, 0x38a1, 0x382b, 0x355a, 0x3961, 0x3a97, +0x352f, 0x3bec, 0x3a27, 0x3888, 0x39d2, 0x38d8, 0x314c, 0x38c8, 0x3779, 0x2f99, 0x3a5b, 0x3971, 0x3b93, 0x368c, 0x3904, 0x35f5, 0x277f, 0x34f9, 0x3368, 0x3824, 0x3a74, 0x3843, 0x3284, 0x35aa, 0x35b4, 0x372a, 0x35ca, 0x3b2b, 0x3877, 0x37cb, 0x3110, 0x33ad, 0x3ba3, 0x3bba, 0x34e4, 0x36ab, 0x3984, 0x2aac, 0x39ec, 0x38ae, 0x3931, 0x3410, 0x333e, 0x2c45, 0x3482, 0x3868, 0x392c, 0x384e, 0x3678, 0x38ee, 0x395b, 0x38f8, 0x3194, 0x33e2, 0x2af5, 0x397c, 0x32ca, 0x32c3, 0x3913, 0x3309, 0x3bb1, 0x3253, 0x3640, 0x2cc8, 0x3385, 0x28d0, 0x385e, 0x39fd, 0x38cc, 0x3bf6, 0x332e, 0x3be1, 0x3835, 0x3b3e, 0x38cc, 0x38ff, 0x365f, 0x3a09, 0x3a32, 0x3b84, 0x3596, 0x37f3, 0x3431, 0x3af6, 0x3bec, 0x38cd, 0x35ab, 0x3af5, 0x3359, 0x3762, 0x3844, 0x374c, 0x3980, 0x3886, 0x2e62, 0x35cc, +0x3b76, 0x3b5f, 0x2434, 0x35fc, 0x38d5, 0x3095, 0x3944, 0x380e, 0x349f, 0x39d7, 0x3755, 0x3768, 0x3b3a, 0x34ce, 0x3bef, 0x365a, 0x3987, 0x3897, 0x3509, 0x3984, 0x32f8, 0x3b7b, 0x37b9, 0x3a4b, 0x2c86, 0x369a, 0x396d, 0x2d21, 0x3477, 0x39af, 0x3b60, 0x3680, 0x39d7, 0x31d8, 0x3b8a, 0x3aed, 0x3a65, 0x3710, 0x39d3, 0x3bf1, 0x331f, 0x20c0, 0x34f2, 0x34cc, 0x3934, 0x38c5, 0x396b, 0x3894, 0x38fa, 0x33c9, 0x3408, 0x3340, 0x360e, 0x36e6, 0x3942, 0x2f3c, 0x3be4, 0x38f4, 0x35a1, 0x2cf7, 0x3931, 0x3911, 0x39e7, 0x2dcc, 0x3951, 0x334c, 0x3b00, 0x39ad, 0x2370, 0x35ea, 0x3402, 0x37d6, 0x377d, 0x3652, 0x3b56, 0x2cc4, 0x3b1f, 0x35af, 0x3920, 0x3423, 0x398a, 0x35e2, 0x39f1, 0x3ab5, 0x3ae2, 0x345c, 0x31ef, 0x38ef, 0x3bb1, 0x3937, 0x2ae8, 0x3221, 0x3ae9, 0x390d, 0x3b2f, 0x3048, +0x3047, 0x3767, 0x37f7, 0x3bfa, 0x3b33, 0x3a2d, 0x362c, 0x3a93, 0x3b66, 0x391a, 0x31c7, 0x3282, 0x39b9, 0x3454, 0x37b7, 0x3019, 0x3a9a, 0x37b5, 0x2dcd, 0x3618, 0x34db, 0x3471, 0x3b35, 0x3684, 0x385c, 0x38bf, 0x3bd7, 0x3a44, 0x3130, 0x38c8, 0x30cf, 0x37bb, 0x3bcc, 0x3669, 0x3b27, 0x3949, 0x355f, 0x314a, 0x383d, 0x3a20, 0x381c, 0x3bcf, 0x3282, 0x39f3, 0x3a49, 0x3ad9, 0x34aa, 0x3add, 0x3938, 0x3bbe, 0x3650, 0x37f2, 0x2c79, 0x39c4, 0x3304, 0x3a8c, 0x3162, 0x3520, 0x3637, 0x39e3, 0x2478, 0x3803, 0x34dd, 0x3104, 0x37ee, 0x3861, 0x38e8, 0x356c, 0x3be0, 0x3633, 0x395a, 0x3afb, 0x378b, 0x3b8d, 0x2f97, 0x37df, 0x31dd, 0x3475, 0x34f7, 0x36ef, 0x3966, 0x2c50, 0x38a1, 0x2720, 0x39f3, 0x3805, 0x3310, 0x3656, 0x3571, 0x3bd9, 0x3bc0, 0x391c, 0x38d6, 0x2562, 0x1fc8, 0x3524, +0x362a, 0x3a8c, 0x3830, 0x39c7, 0x38ca, 0x3af3, 0x3602, 0x3700, 0x3773, 0x3a78, 0x38f3, 0x22be, 0x3822, 0x2eac, 0x3748, 0x32ee, 0x2a0e, 0x38ed, 0x3830, 0x3401, 0x3971, 0x3a35, 0x3984, 0x3a86, 0x3501, 0x2fe8, 0x3ba3, 0x3587, 0x3895, 0x3858, 0x2d46, 0x3724, 0x3b84, 0x39b6, 0x3a17, 0x3b1f, 0x38a9, 0x33de, 0x3723, 0x367d, 0x3bc4, 0x3817, 0x3b1e, 0x35f1, 0x3abb, 0x373d, 0x2abe, 0x3206, 0x3872, 0x3946, 0x3898, 0x33b2, 0x25fb, 0x36ae, 0x256a, 0x390e, 0x3b3b, 0x34d8, 0x36ba, 0x389b, 0x377a, 0x3b0e, 0x32a6, 0x26f9, 0x39e1, 0x327e, 0x2d58, 0x3bd3, 0x3a7f, 0x38b9, 0x3811, 0x29b7, 0x2816, 0x38f9, 0x3b64, 0x39b6, 0x3a29, 0x30a4, 0x3989, 0x3b73, 0x307a, 0x37c7, 0x372d, 0x3830, 0x390e, 0x315b, 0x335d, 0x3929, 0x3917, 0x374c, 0x34af, 0x3531, 0x34e9, 0x3bcf, 0x3761, 0x3b62, +0x34e5, 0x39e3, 0x3b35, 0x2a57, 0x3688, 0x2f0c, 0x3b87, 0x3bdd, 0x358d, 0x381a, 0x39ae, 0x2f79, 0x394f, 0x3708, 0x3560, 0x3ada, 0x3480, 0x3af5, 0x3bd8, 0x39d1, 0x3795, 0x2a29, 0x3b0a, 0x3515, 0x3858, 0x3ab4, 0x3968, 0x3660, 0x37b2, 0x3601, 0x36ae, 0x3229, 0x3383, 0x2c30, 0x3a41, 0x3b0d, 0x33ef, 0x3b6b, 0x366f, 0x3b33, 0x3a82, 0x3841, 0x3a89, 0x3bea, 0x3542, 0x328a, 0x3bc9, 0x34f2, 0x3ac0, 0x3067, 0x3311, 0x38f4, 0x23d0, 0x3964, 0x38b1, 0x390c, 0x3a9f, 0x28bb, 0x3ac1, 0x39e6, 0x31dd, 0x2f55, 0x3a19, 0x3a51, 0x3a38, 0x2841, 0x381a, 0x3938, 0x36ea, 0x3be0, 0x3b35, 0x39c1, 0x2fef, 0x37ec, 0x389f, 0x3b72, 0x37b9, 0x3bf7, 0x325d, 0x38e9, 0x333d, 0x39ce, 0x2e79, 0x3682, 0x37c1, 0x38b9, 0x3990, 0x37fd, 0x3302, 0x32a6, 0x2a69, 0x3831, 0x2b59, 0x3b48, 0x35b4, 0x2aed, +0x37e2, 0x340a, 0x3279, 0x3723, 0x397d, 0x3839, 0x39ec, 0x3025, 0x3803, 0x3b54, 0x3a70, 0x3b7d, 0x2f2a, 0x315c, 0x35ed, 0x3ace, 0x3845, 0x3bee, 0x3870, 0x3492, 0x380e, 0x3431, 0x3a47, 0x3a33, 0x38ae, 0x3a40, 0x3908, 0x33c5, 0x38db, 0x3b24, 0x3847, 0x32a3, 0x3959, 0x3a36, 0x35c4, 0x3960, 0x396f, 0x3786, 0x38ef, 0x36e7, 0x35c3, 0x3a28, 0x3893, 0x3b2c, 0x2e03, 0x374d, 0x3489, 0x3bf4, 0x38fb, 0x35b2, 0x38c1, 0x3a0f, 0x394f, 0x35e0, 0x34bd, 0x3bcc, 0x3be1, 0x315f, 0x2a41, 0x308d, 0x2e5d, 0x3a02, 0x2e99, 0x3b1a, 0x3b6c, 0x3ba1, 0x38da, 0x395a, 0x3877, 0x39ec, 0x3855, 0x2fd6, 0x2857, 0x2e1d, 0x3677, 0x3034, 0x3136, 0x3880, 0x327c, 0x38a3, 0x243e, 0x3921, 0x3b69, 0x3bca, 0x376e, 0x3998, 0x3b02, 0x3a2b, 0x35c0, 0x3985, 0x3b14, 0x38d5, 0x347b, 0x3adc, 0x3639, 0x3b9f, +0x3b50, 0x3334, 0x38b6, 0x3ae5, 0x3b39, 0x35fa, 0x2752, 0x3ba6, 0x3439, 0x389a, 0x2888, 0x39be, 0x3710, 0x3922, 0x3bbf, 0x3726, 0x2d91, 0x22ef, 0x398f, 0x3465, 0x3ba8, 0x3ad4, 0x39a0, 0x3a55, 0x3a2f, 0x387d, 0x3788, 0x3a19, 0x3926, 0x38a0, 0x383c, 0x3adc, 0x3b84, 0x3518, 0x322f, 0x3773, 0x3a74, 0x31b7, 0x3901, 0x3361, 0x3959, 0x2d8e, 0x3575, 0x2faf, 0x2ccf, 0x39ad, 0x339b, 0x3bcc, 0x3be6, 0x267e, 0x3582, 0x3973, 0x3b23, 0x3513, 0x3946, 0x38c8, 0x3b09, 0x383a, 0x34a6, 0x3aaa, 0x36f8, 0x34af, 0x368d, 0x3beb, 0x361f, 0x357f, 0x3b7f, 0x3ada, 0x37bb, 0x3986, 0x358c, 0x3ac2, 0x3448, 0x3ace, 0x2896, 0x377a, 0x3a2d, 0x3992, 0x381a, 0x389d, 0x3a18, 0x3bec, 0x37ac, 0x384d, 0x3107, 0x3323, 0x36d0, 0x371d, 0x3a21, 0x3b07, 0x2ef3, 0x342a, 0x39e6, 0x3037, 0x39a5, 0x3510, +0x3b81, 0x2559, 0x3914, 0x3883, 0x3534, 0x33e2, 0x29d9, 0x3b82, 0x3bf7, 0x390c, 0x31e3, 0x3af0, 0x2a26, 0x3803, 0x34ec, 0x356f, 0x3aed, 0x3af7, 0x34fc, 0x39f9, 0x3ad2, 0x39f6, 0x3abf, 0x397d, 0x2d55, 0x27f6, 0x3b03, 0x3335, 0x3872, 0x34df, 0x3801, 0x39c9, 0x326f, 0x3a15, 0x3810, 0x22c5, 0x359e, 0x366c, 0x3493, 0x39b2, 0x38c5, 0x3a6d, 0x39b9, 0x33dc, 0x34d7, 0x3b0b, 0x378d, 0x39ed, 0x3566, 0x396a, 0x368e, 0x3a4f, 0x3571, 0x3831, 0x3290, 0x3232, 0x39f4, 0x3915, 0x377d, 0x3af9, 0x3460, 0x31da, 0x23e6, 0x315c, 0x2b67, 0x366b, 0x2ccf, 0x38f8, 0x39c0, 0x37cc, 0x322b, 0x3979, 0x2529, 0x34b5, 0x3759, 0x360c, 0x3180, 0x3962, 0x30d2, 0x394f, 0x3ac5, 0x3b52, 0x371b, 0x3588, 0x3437, 0x34e5, 0x3a58, 0x3bb8, 0x3bd6, 0x3858, 0x3915, 0x3bcc, 0x3835, 0x30c9, 0x259f, 0x3051, +0x399d, 0x3044, 0x382b, 0x3449, 0x3b82, 0x3a4a, 0x38b5, 0x383f, 0x1c23, 0x3b6f, 0x3941, 0x35ff, 0x395e, 0x26c0, 0x3474, 0x39b9, 0x39da, 0x2aca, 0x380a, 0x39c3, 0x393e, 0x39e9, 0x3b77, 0x3a64, 0x345b, 0x3712, 0x38e4, 0x3a97, 0x3451, 0x3a3d, 0x379f, 0x3a01, 0x3642, 0x3b7e, 0x30b6, 0x35d6, 0x39b6, 0x2cb3, 0x383a, 0x3566, 0x3a76, 0x3418, 0x31ac, 0x3ae2, 0x350d, 0x3af6, 0x382c, 0x37b8, 0x339c, 0x3969, 0x379b, 0x36b8, 0x3444, 0x382a, 0x2fab, 0x3727, 0x3b3c, 0x2e19, 0x3643, 0x30d4, 0x284c, 0x388b, 0x3a47, 0x35cc, 0x3945, 0x3470, 0x3ae6, 0x39e5, 0x36fd, 0x38ed, 0x344b, 0x3b7c, 0x39d0, 0x3833, 0x3a38, 0x34f4, 0x3046, 0x3757, 0x371d, 0x25a8, 0x386d, 0x2f66, 0x38a2, 0x2e32, 0x39e3, 0x1969, 0x313d, 0x35f5, 0x3804, 0x28f5, 0x2e8a, 0x342c, 0x3bdc, 0x3ad3, 0x3259, 0x3622, +0x325e, 0x3912, 0x398b, 0x3b70, 0x39cd, 0x3931, 0x2f75, 0x3542, 0x357a, 0x315f, 0x3ac4, 0x374f, 0x32dd, 0x386c, 0x35f1, 0x39b7, 0x38b7, 0x3b2f, 0x3a7b, 0x3b5c, 0x3bef, 0x37f6, 0x3047, 0x386a, 0x3903, 0x3607, 0x3946, 0x3911, 0x399d, 0x3be8, 0x2d83, 0x3a3c, 0x369b, 0x204f, 0x3a4c, 0x3185, 0x38c8, 0x39c3, 0x3075, 0x3542, 0x361d, 0x250f, 0x385d, 0x3485, 0x1ac2, 0x37af, 0x3ab4, 0x2dd4, 0x3595, 0x36de, 0x3add, 0x3564, 0x3566, 0x3b8d, 0x2d55, 0x3629, 0x2c8a, 0x3280, 0x3801, 0x329a, 0x3b20, 0x3b42, 0x3bf0, 0x2f27, 0x3866, 0x2caf, 0x3b40, 0x3922, 0x351e, 0x3925, 0x3b42, 0x3968, 0x39db, 0x3b77, 0x3877, 0x384a, 0x3058, 0x3aaf, 0x3a70, 0x3b33, 0x3685, 0x3b0a, 0x3a8d, 0x2d38, 0x35bb, 0x31b2, 0x36e8, 0x3a79, 0x367e, 0x3a09, 0x3a74, 0x3b9f, 0x3367, 0x37a5, 0x38a3, 0x3949, +0x2bea, 0x2b88, 0x3965, 0x3112, 0x3b79, 0x391b, 0x38a9, 0x38dc, 0x36c4, 0x3ab1, 0x3677, 0x346e, 0x3b44, 0x34b7, 0x3301, 0x381d, 0x3a3a, 0x3254, 0x3b6b, 0x389a, 0x3a65, 0x379d, 0x3178, 0x2df2, 0x3380, 0x385d, 0x383c, 0x36ef, 0x3243, 0x3b7c, 0x38cb, 0x39f5, 0x3144, 0x3336, 0x3a1b, 0x3b54, 0x3983, 0x3b54, 0x3861, 0x34dd, 0x3996, 0x3a96, 0x34ec, 0x2e9e, 0x36db, 0x392f, 0x3164, 0x34df, 0x38fc, 0x35e5, 0x3432, 0x2a1b, 0x39d0, 0x385b, 0x2d25, 0x3405, 0x3809, 0x36f6, 0x3947, 0x3a23, 0x3ba7, 0x3a6f, 0x394f, 0x381c, 0x387e, 0x3aa3, 0x3586, 0x38ba, 0x3aed, 0x2f65, 0x3b77, 0x3921, 0x3843, 0x3652, 0x35ef, 0x39ea, 0x399a, 0x3a10, 0x3b1e, 0x39af, 0x3bac, 0x2f72, 0x3755, 0x38c7, 0x348e, 0x3aaf, 0x32cd, 0x3210, 0x3a78, 0x3462, 0x35a1, 0x327d, 0x38a4, 0x3569, 0x39fe, 0x3809, +0x39d6, 0x3985, 0x2211, 0x36f1, 0x36da, 0x34e8, 0x3bd7, 0x3aa3, 0x370b, 0x2e90, 0x3973, 0x3754, 0x3994, 0x31fe, 0x35e6, 0x3b87, 0x3967, 0x34d6, 0x3a01, 0x3935, 0x3afb, 0x3078, 0x3b9f, 0x31cf, 0x2496, 0x3ab7, 0x345e, 0x31a2, 0x3548, 0x3892, 0x38d8, 0x38e4, 0x3908, 0x340c, 0x3114, 0x37a7, 0x3a05, 0x37db, 0x39ee, 0x3b9e, 0x37e4, 0x375e, 0x27b0, 0x27ee, 0x3b89, 0x3bd6, 0x3911, 0x329d, 0x3596, 0x36b7, 0x38ea, 0x37b5, 0x353e, 0x368e, 0x3a25, 0x3989, 0x29cb, 0x36e2, 0x3b80, 0x390f, 0x3978, 0x359a, 0x3150, 0x3865, 0x3827, 0x2ebb, 0x3afc, 0x3ad8, 0x291b, 0x3b1f, 0x3036, 0x3b4b, 0x3411, 0x2450, 0x3928, 0x382f, 0x3968, 0x32af, 0x36e1, 0x34a0, 0x3076, 0x3289, 0x284d, 0x39ca, 0x3765, 0x2fc3, 0x3ad0, 0x2a90, 0x3a9e, 0x347f, 0x367c, 0x3bee, 0x3982, 0x380e, 0x3623, 0x33d5, +0x33eb, 0x315b, 0x3b82, 0x3901, 0x39d8, 0x3409, 0x394f, 0x38aa, 0x34e5, 0x3b0e, 0x30d8, 0x37db, 0x37cb, 0x32e0, 0x37de, 0x3896, 0x3b9f, 0x3919, 0x3869, 0x3762, 0x3698, 0x2dc6, 0x31ce, 0x3200, 0x36fa, 0x396f, 0x3b96, 0x3890, 0x3ac3, 0x331a, 0x3619, 0x3ac2, 0x2f37, 0x39e4, 0x39a0, 0x2130, 0x391c, 0x3a27, 0x3b7a, 0x3b49, 0x3ba8, 0x3a95, 0x2c78, 0x3a1a, 0x3591, 0x354a, 0x36c1, 0x38ba, 0x392f, 0x37a5, 0x3898, 0x3a9d, 0x3b8f, 0x389f, 0x3a6e, 0x389d, 0x36de, 0x3abe, 0x3669, 0x38f1, 0x391a, 0x3b6f, 0x2987, 0x30aa, 0x3ae7, 0x3709, 0x389a, 0x39a1, 0x34a0, 0x3a1a, 0x3bd0, 0x35d7, 0x3936, 0x3bc9, 0x327a, 0x3a1b, 0x31c8, 0x3be6, 0x3926, 0x3654, 0x317b, 0x39d2, 0x3b54, 0x39ae, 0x2d1e, 0x31a0, 0x30dd, 0x362a, 0x2c28, 0x3020, 0x3585, 0x30c7, 0x3af0, 0x3ad3, 0x3b2b, 0x382f, +0x384d, 0x3ace, 0x3a7d, 0x300d, 0x3a39, 0x3ac5, 0x2b3b, 0x2c05, 0x2dfc, 0x3bee, 0x3b46, 0x343f, 0x3a00, 0x33be, 0x2d9e, 0x3790, 0x3467, 0x3a11, 0x39e5, 0x3943, 0x34b2, 0x393c, 0x2e29, 0x34ae, 0x34dd, 0x2491, 0x3ac2, 0x3279, 0x3a46, 0x318d, 0x389a, 0x2f39, 0x1cb3, 0x37cf, 0x31c3, 0x318a, 0x3172, 0x3b66, 0x357a, 0x3896, 0x3b6b, 0x3a47, 0x3a43, 0x33bc, 0x35f4, 0x39f5, 0x39c1, 0x34fe, 0x39a2, 0x367b, 0x3b19, 0x3bef, 0x3461, 0x39a9, 0x3a35, 0x2bfa, 0x34b4, 0x38fa, 0x3203, 0x332b, 0x39ef, 0x3a2a, 0x3bc2, 0x39ef, 0x364e, 0x3a8c, 0x2fa8, 0x2612, 0x3406, 0x391a, 0x39ff, 0x3bba, 0x3971, 0x2637, 0x3664, 0x3a2b, 0x3053, 0x3bf4, 0x3b2c, 0x3b1f, 0x27e3, 0x3ba0, 0x38ee, 0x388f, 0x3a17, 0x328e, 0x3bcd, 0x306a, 0x3909, 0x38f2, 0x3a16, 0x380b, 0x2e11, 0x38b5, 0x36ba, 0x387a, +0x3a4f, 0x38f9, 0x3862, 0x3525, 0x38ae, 0x34bd, 0x3a07, 0x3881, 0x2e59, 0x3969, 0x3a7a, 0x3b75, 0x2619, 0x399d, 0x314a, 0x39fe, 0x3af1, 0x3a0c, 0x2875, 0x39c6, 0x3887, 0x3ab2, 0x36e8, 0x3497, 0x396f, 0x3567, 0x2ef7, 0x3845, 0x2cd3, 0x3b99, 0x30cc, 0x300d, 0x3a4f, 0x3453, 0x386a, 0x39d5, 0x3beb, 0x392e, 0x3766, 0x3b37, 0x3b57, 0x355c, 0x37fb, 0x3a36, 0x343a, 0x37e1, 0x1f1c, 0x218b, 0x3820, 0x345b, 0x3bd5, 0x329f, 0x3679, 0x3b0f, 0x28d4, 0x3891, 0x3b51, 0x3937, 0x3585, 0x3936, 0x3ace, 0x30fa, 0x384e, 0x3a16, 0x34bf, 0x34f4, 0x3a08, 0x3916, 0x2ed6, 0x3740, 0x382c, 0x3446, 0x3b77, 0x3af7, 0x3a42, 0x284f, 0x366c, 0x36ea, 0x3680, 0x326a, 0x3b5c, 0x3678, 0x3bee, 0x3853, 0x36cc, 0x35c2, 0x2f28, 0x34f6, 0x31d8, 0x38b6, 0x3a7b, 0x3b96, 0x3056, 0x3afc, 0x351a, 0x3570, +0x3439, 0x3a20, 0x3b65, 0x362f, 0x38f8, 0x30e5, 0x3974, 0x38cf, 0x3b7e, 0x3b2d, 0x3828, 0x382c, 0x3979, 0x349c, 0x3b6f, 0x3887, 0x3a3a, 0x3bec, 0x3aee, 0x3abd, 0x3510, 0x3a50, 0x2dcb, 0x31d9, 0x39ed, 0x3a5b, 0x39d6, 0x3a89, 0x3511, 0x3199, 0x39a3, 0x3803, 0x3a02, 0x3bdd, 0x3588, 0x35cb, 0x3a69, 0x3bab, 0x23ea, 0x3750, 0x3b92, 0x3bfc, 0x359f, 0x3bdb, 0x3a6b, 0x3b07, 0x355d, 0x3a0a, 0x39cd, 0x1e5e, 0x38c2, 0x3965, 0x34f4, 0x37d0, 0x35b2, 0x34c8, 0x3ad5, 0x34f4, 0xba8, 0x3b62, 0x380b, 0x3b8f, 0x3ae7, 0x30c0, 0x38a0, 0x3341, 0x323a, 0x32d1, 0x32a8, 0x3413, 0x38bb, 0x37cf, 0x397e, 0x3884, 0x2952, 0x2b54, 0x3b8a, 0x3bd4, 0x3522, 0x3b0f, 0x3888, 0x38e4, 0x38d1, 0x3bfa, 0x3adc, 0x3b72, 0x3bc5, 0x33de, 0x39f6, 0x390e, 0x2fd3, 0x3875, 0x261c, 0x2a54, 0x315d, 0x388a, +0x36a4, 0x38d4, 0x3405, 0x3761, 0x37ae, 0x3650, 0x3065, 0x3b0b, 0x283f, 0x3a67, 0x360c, 0x3b9c, 0x2eea, 0x2e99, 0x349f, 0x3849, 0x3b43, 0x3744, 0x3834, 0x3852, 0x36e7, 0x3835, 0x3499, 0x2ee3, 0x3aa2, 0x3823, 0x31c2, 0x380c, 0x354c, 0x37f5, 0x324c, 0x302b, 0x34bf, 0x26e6, 0x39a0, 0x3068, 0x2e1d, 0x3061, 0x3b24, 0x33a7, 0x3ada, 0x38a5, 0x37c3, 0x39a0, 0x3aa0, 0x382f, 0x21e9, 0x3a36, 0x3a8b, 0x395a, 0x343d, 0x3837, 0x361d, 0x33af, 0x3b87, 0x399b, 0x3904, 0x344a, 0x3a10, 0x3b08, 0x348c, 0x2fc7, 0x3239, 0x390b, 0x384c, 0x34c6, 0x2873, 0x357c, 0x32b6, 0x3ae5, 0x3bb4, 0x30f2, 0x39e7, 0x2b6a, 0x3969, 0x39ab, 0x3316, 0x3638, 0x3a22, 0x3505, 0x35f5, 0x3b42, 0x3372, 0x33e5, 0x322a, 0x3a8f, 0x36be, 0x3982, 0x341d, 0x3510, 0x3714, 0x3871, 0x3a56, 0x3739, 0x3457, 0x3822, +0x35ee, 0x3bb5, 0x357c, 0x3a66, 0x3bfe, 0x3469, 0x37e0, 0x39c0, 0x2c91, 0x3805, 0x31c4, 0x39e4, 0x32f9, 0x3140, 0x2ef9, 0x389c, 0x38e8, 0x3404, 0x2d4b, 0x36fd, 0x32a8, 0x397e, 0x3939, 0x2c8f, 0x327d, 0x341a, 0x35eb, 0x36bb, 0x307c, 0x3a9c, 0x3b25, 0x3b83, 0x31b7, 0x377c, 0x3450, 0x34af, 0x2d66, 0x36ab, 0x3520, 0x3648, 0x2e5e, 0x3adc, 0x3422, 0x3b9e, 0x36b4, 0x35ac, 0x3a7b, 0x36ae, 0x39c5, 0x2c2d, 0x3b8f, 0x3998, 0x3a82, 0x2cb5, 0x3a0b, 0x34aa, 0x3895, 0x3811, 0x3545, 0x35b5, 0x39c4, 0x3b43, 0x39ae, 0x355a, 0x2db8, 0x3b7f, 0x3655, 0x354d, 0x34ee, 0x30fb, 0x3a7c, 0x338b, 0x3b6c, 0x2c39, 0x38bb, 0x2de3, 0x3114, 0x38bf, 0x2e01, 0x3483, 0x2964, 0x3828, 0x2da3, 0x3a05, 0x3add, 0x3477, 0x3bf6, 0x3a7a, 0x38a8, 0x34be, 0x2d01, 0x2f9b, 0x29d1, 0x3995, 0x38a1, 0x3632, +0x3629, 0x3451, 0x31ca, 0x3b76, 0x382e, 0x3aad, 0x3a3a, 0x3aed, 0x3471, 0x3b38, 0x2a7b, 0x38f4, 0x3975, 0x383f, 0x30ba, 0x2cbb, 0x3adc, 0x31c2, 0x2ef0, 0x270a, 0x3734, 0x30a5, 0x3481, 0x3764, 0x3a6c, 0x3845, 0x2bfd, 0x3407, 0x3be1, 0x35ba, 0x3163, 0x332f, 0x38ae, 0x3361, 0x38a5, 0x3556, 0x265c, 0x38ac, 0x3869, 0x2d4e, 0x300a, 0x39bd, 0x38ef, 0x372d, 0x2d3e, 0x3a3a, 0x30a2, 0x1e66, 0x3bc7, 0x38c5, 0x3966, 0x3ace, 0x3a34, 0x2d9c, 0x3845, 0x30f3, 0x2c21, 0x3405, 0x2c4f, 0x3629, 0x3bcb, 0x315b, 0x2e94, 0x3399, 0x39a7, 0x3696, 0x377d, 0x36a0, 0x312d, 0x366f, 0x379a, 0x25a6, 0x3808, 0x2da5, 0x2bbf, 0x381d, 0x3a94, 0x3577, 0x31ba, 0x344e, 0x385f, 0x3687, 0x38a7, 0x2a84, 0x399a, 0x317a, 0x3a59, 0x3467, 0x3af3, 0x3b1d, 0x33c8, 0x35cf, 0x3af4, 0x2c27, 0x38ab, 0x2850, +0x3be1, 0x3a7a, 0x363b, 0x3aa9, 0x3af3, 0x37f1, 0x3815, 0x3a54, 0x2d86, 0x3b67, 0x3780, 0x3b73, 0x3755, 0x38a3, 0x3435, 0x2df3, 0x3bc1, 0x32c0, 0x2da1, 0x395b, 0x32a7, 0x377e, 0x3ba5, 0x3ace, 0x3971, 0x3095, 0x3a2b, 0x3780, 0x3a68, 0x3979, 0x392b, 0x38ca, 0x385a, 0x3a82, 0x385f, 0x36e3, 0x3318, 0x2aad, 0x3670, 0x3ba1, 0x3bd0, 0x3a29, 0x3116, 0x390c, 0x3756, 0x3aa6, 0x39f6, 0x31a7, 0x3be8, 0x389c, 0x3248, 0x3608, 0x357a, 0x37bd, 0x37a4, 0x3456, 0x3563, 0x31a3, 0x398a, 0x3940, 0x364b, 0x2273, 0x3847, 0x356c, 0x3574, 0x382e, 0x3b27, 0x39d7, 0x311b, 0x3825, 0x3abb, 0x3bb9, 0x3b33, 0x386f, 0x3b02, 0x3b39, 0x2453, 0x3888, 0x34e1, 0x318d, 0x36df, 0x3ba2, 0x2ba7, 0x3943, 0x3586, 0x38f6, 0x3a2a, 0x3b90, 0x3b00, 0x39f3, 0x3108, 0x3533, 0x3bb7, 0x3264, 0x3aa8, 0x3669, +0x3748, 0x3a5c, 0x3959, 0x3c00, 0x3b73, 0x30f8, 0x2e58, 0x37d5, 0x3836, 0x2e91, 0x3603, 0x38f2, 0x3647, 0x3855, 0x3a9e, 0x3851, 0x24fd, 0x3990, 0x38a2, 0x3aae, 0x314a, 0x39d4, 0x3afd, 0x3a0d, 0x3a94, 0x38d4, 0x3970, 0x35d2, 0x3899, 0x2e93, 0x388f, 0x3850, 0x367f, 0x3bbf, 0x3581, 0x3a5d, 0x261c, 0x3bb3, 0x3594, 0x3988, 0x3b5b, 0x3b6e, 0x37a7, 0x39fa, 0x3a8e, 0x3629, 0x3b1d, 0x3068, 0x38d0, 0x3859, 0x3514, 0x3865, 0x33e0, 0x39f5, 0x20bf, 0x3a8f, 0x2ff9, 0x3bc8, 0x3abf, 0x324d, 0x2b88, 0x3856, 0x38a6, 0x3bd7, 0x38d8, 0x3722, 0x39ee, 0x3947, 0x3794, 0x36a5, 0x3acd, 0x1f3f, 0x3497, 0x39d0, 0x3947, 0x38c7, 0x3a3f, 0x3661, 0x36dd, 0x2c46, 0x3bee, 0x2885, 0x3430, 0x38f7, 0x27b3, 0x3134, 0x3265, 0x2666, 0x3930, 0x3514, 0x2ec0, 0x3985, 0x37ef, 0x3a11, 0x3a70, 0x3578, +0x3a6e, 0x333d, 0x36c8, 0x33e0, 0x27ae, 0x2954, 0x36cc, 0x37db, 0x382f, 0x38cd, 0x3944, 0x3a4b, 0x3671, 0x3966, 0x33a3, 0x3882, 0x3739, 0x349b, 0x39b6, 0x3573, 0x2cbf, 0x374e, 0x2cc0, 0x3af4, 0x34ca, 0x314c, 0x3bb4, 0x3554, 0x3a8b, 0x335f, 0x2d08, 0x387b, 0x37c4, 0x34a9, 0x388d, 0x3884, 0x332e, 0x36de, 0x3590, 0x3803, 0x33dc, 0x28bf, 0x386a, 0x39e4, 0x3b9d, 0x3aff, 0x3b0b, 0x393a, 0x37fa, 0x3577, 0x3bfb, 0x3b19, 0x3422, 0x34cd, 0x39d4, 0x39dc, 0x31b9, 0x38f4, 0x3871, 0x2e80, 0x3b90, 0x3513, 0x363a, 0x39f9, 0x332f, 0x391a, 0x39f9, 0x38fd, 0x3b16, 0x382c, 0x3b91, 0x2fa4, 0x34db, 0x30f4, 0x37c5, 0x392c, 0x3b6f, 0x3835, 0x35ac, 0x379d, 0x3b39, 0x3924, 0x2f94, 0x34b0, 0x3149, 0x307c, 0x3a7e, 0x3656, 0x398a, 0x390f, 0x27f6, 0x31a6, 0x3a80, 0x3582, 0x3863, 0x3ae1, +0x3265, 0x257e, 0x360a, 0x2fc7, 0x3ba9, 0x3515, 0x3a80, 0x3056, 0x37c5, 0x2a16, 0x3915, 0x357a, 0x3556, 0x337e, 0x3af8, 0x3a9f, 0x35aa, 0x3903, 0x2ec4, 0x3751, 0x3a1b, 0x39d2, 0x3b76, 0x34ef, 0x3b5a, 0x394c, 0x3851, 0x3b4b, 0x3bb2, 0x3b80, 0x3bef, 0x3a09, 0x3af7, 0x3902, 0x3711, 0x3704, 0x374b, 0x3325, 0x39ee, 0x385c, 0x32a7, 0x281b, 0x2193, 0x3418, 0x35ac, 0x3800, 0x3a5f, 0x3bf9, 0x37f4, 0x3819, 0x3891, 0x3534, 0x366b, 0x3b04, 0x35b1, 0x3969, 0x3bc5, 0x3856, 0x2e11, 0x3784, 0x3388, 0x36eb, 0x35e3, 0x32f8, 0x2a50, 0x33ed, 0x3989, 0x34b8, 0x3be4, 0x3844, 0x34b0, 0x355e, 0x3a56, 0x3431, 0x345d, 0x389a, 0x366e, 0x3902, 0x3858, 0x38e1, 0x388c, 0x3565, 0x33c4, 0x3b68, 0x372f, 0x307c, 0x3bb9, 0x359f, 0x3a41, 0x3bcf, 0x3bb3, 0x2d88, 0x32f8, 0x354c, 0x3b9e, 0x3ae5, +0x3059, 0x3359, 0x382d, 0x3a91, 0x3bed, 0x28fb, 0x3885, 0x3a3c, 0x39e9, 0x39f7, 0x351e, 0x37e3, 0x3bad, 0x2834, 0x37d1, 0x3839, 0x3ad1, 0x39f3, 0x362f, 0x35ba, 0x3312, 0x3b21, 0x3536, 0x3bfd, 0x3518, 0x201e, 0x2022, 0x3b03, 0x3910, 0x39ce, 0x363c, 0x3b25, 0x3b4f, 0x3be8, 0x3655, 0x38dc, 0x344b, 0x3372, 0x3939, 0x372a, 0x3b86, 0x384e, 0x3b9e, 0x32c3, 0x3bd5, 0x3041, 0x3051, 0x257f, 0x3a6c, 0x3379, 0x2f52, 0x37de, 0x37ac, 0x3734, 0x3447, 0x3bbc, 0x3aaf, 0x38eb, 0x384a, 0x3ad6, 0x3a49, 0x3944, 0x2cf5, 0x38a3, 0x398b, 0x3b0e, 0x307a, 0x3504, 0x3728, 0x3500, 0x2f6e, 0x2e34, 0x3aa4, 0x39f7, 0x3831, 0x3902, 0x3509, 0x2d20, 0x3b99, 0x3860, 0x3901, 0x3420, 0x3944, 0x3926, 0x3acd, 0x3786, 0x3b09, 0x3ad7, 0x2cb6, 0x3a8e, 0x2233, 0x3892, 0x398a, 0x272e, 0x3853, 0x389c, +0x3a14, 0x3877, 0x3320, 0x34b7, 0x3a85, 0x34da, 0x38db, 0x3758, 0x3b8d, 0x3aa8, 0x3766, 0x34db, 0x3a54, 0x3806, 0x31ef, 0x33ab, 0x38bd, 0x3778, 0x3543, 0x36ec, 0x36fa, 0x2fc5, 0x3676, 0x350c, 0x390f, 0x3b8b, 0x394a, 0x38bb, 0x31d9, 0x3bf1, 0x36ce, 0x35dc, 0x38c2, 0x3910, 0x3944, 0x38f8, 0x37f6, 0x3b9b, 0x3574, 0x31ed, 0x244e, 0x28ef, 0x34fa, 0x3398, 0x3912, 0x365f, 0x3bb2, 0x38f7, 0x3af2, 0x3500, 0x3a8e, 0x3a55, 0x39be, 0x2471, 0x34b0, 0x336f, 0x380a, 0x3ae7, 0x34f5, 0x35f9, 0x3227, 0x263d, 0x3385, 0x372f, 0x2046, 0x3a80, 0x3b0a, 0x35cf, 0x38e1, 0x38b4, 0x2eb6, 0x353f, 0x314f, 0x3a4c, 0x3a52, 0x3b84, 0x39b8, 0x367d, 0x3b22, 0x310a, 0x3611, 0x37ad, 0x3496, 0x2e9c, 0x3215, 0x3b29, 0x38cf, 0x343f, 0x380a, 0x36b0, 0x3a08, 0x2c90, 0x36e4, 0x354a, 0x3b56, 0x37a1, +0x39f1, 0x340d, 0x3b34, 0x309a, 0x3074, 0x24a8, 0x261c, 0x3a16, 0x3846, 0x35dd, 0x2830, 0x3a03, 0x3729, 0x3766, 0x3461, 0x33db, 0x3b4a, 0x33eb, 0x3813, 0x34cd, 0x3875, 0x3a95, 0x31ef, 0x38b2, 0x3acc, 0x34d9, 0x3542, 0x37f4, 0x3937, 0x3858, 0x3997, 0x3538, 0x338b, 0x35ff, 0x3613, 0x3809, 0x3878, 0x3870, 0x2df0, 0x39f4, 0x3863, 0x30ce, 0x38ae, 0x384f, 0x3b24, 0x3045, 0x297f, 0x3b58, 0x3123, 0x2b6b, 0x3bc5, 0x388a, 0x3003, 0x3077, 0x34dc, 0x39cb, 0x3bcf, 0x3b16, 0x344c, 0x3aac, 0x364a, 0x399b, 0x3a68, 0x3583, 0x34c3, 0x3bc0, 0x3b1d, 0x3a15, 0x387f, 0x3756, 0x382e, 0x3a58, 0x18c3, 0x3a2e, 0x3b81, 0x34f8, 0x3802, 0x3631, 0x3920, 0x340c, 0x3b6c, 0x39a7, 0x1a4a, 0x38cc, 0x38ec, 0x3912, 0x3bd6, 0x3358, 0x3275, 0x3954, 0x3b39, 0x3674, 0x3a2e, 0x387c, 0x3a86, 0x34c2, +0x3585, 0x36c0, 0x3762, 0x380b, 0x31cf, 0x3992, 0x365a, 0x3b73, 0x35e8, 0x3925, 0x3b3b, 0x37cc, 0x3823, 0x2cd7, 0x2a80, 0x3a41, 0x37a5, 0x3479, 0x36eb, 0x29cc, 0x317d, 0x38b8, 0x32f8, 0x355e, 0x392c, 0x3b16, 0x3275, 0x306a, 0x22a8, 0x35fb, 0x32d4, 0x3a42, 0x32ba, 0x2443, 0x3898, 0x3164, 0x38ff, 0x3ba6, 0x35ae, 0x396a, 0x3a5c, 0x3922, 0x1df2, 0x3943, 0x309b, 0x3a53, 0x3439, 0x3802, 0x32bc, 0x34f6, 0x3957, 0x3a59, 0x36c9, 0x3b3c, 0x3aa0, 0x3903, 0x2b86, 0x380e, 0x2f83, 0x397a, 0x3a11, 0x3ab3, 0x38b9, 0x3a54, 0x3191, 0x2eb7, 0x3549, 0x3a39, 0x375b, 0x38d8, 0x346a, 0x3a3e, 0x35ff, 0x305b, 0x3b1d, 0x3882, 0x39da, 0x3a92, 0x2f74, 0x38f1, 0x3b8e, 0x361f, 0x38d4, 0x365b, 0x367c, 0x2658, 0x3762, 0x3905, 0x393f, 0x34c8, 0x3830, 0x39d1, 0x35e1, 0x23b7, 0x3b28, 0x39f4, +0x27a7, 0x38a0, 0x3954, 0x32c7, 0x3572, 0x25b3, 0x384f, 0x38fb, 0x3a34, 0x3b79, 0x3af6, 0x34c8, 0x3a0d, 0x3906, 0x3981, 0x3a97, 0x3b17, 0x34d5, 0x2dc4, 0x3401, 0x21b1, 0x3999, 0x3898, 0x2def, 0x3747, 0x300c, 0x3afe, 0x34d6, 0x36ac, 0x3b5f, 0x3952, 0x2a90, 0x34b4, 0x3a77, 0x3b03, 0x385e, 0x33d0, 0x37a9, 0x36a7, 0x231e, 0x3534, 0x35f6, 0x30e1, 0x3873, 0x2299, 0x387e, 0x3499, 0x30dc, 0x383a, 0x256e, 0x387f, 0x3395, 0x33c1, 0x38ac, 0x38fe, 0x383b, 0x36c3, 0x392b, 0x3812, 0x3168, 0x3b18, 0x386a, 0x3b17, 0x3981, 0x3577, 0x3874, 0x308a, 0x38d1, 0x3a7b, 0x361f, 0x38bf, 0x29c5, 0x2d56, 0x343b, 0x33bc, 0x38ab, 0x3a82, 0x2feb, 0x3885, 0x3531, 0x3588, 0x2ff6, 0x3851, 0x3a08, 0x36e7, 0x3b8c, 0x3182, 0x3a4e, 0x3849, 0x3509, 0x3909, 0x380e, 0x3692, 0x2e1e, 0x2f7f, 0x35eb, +0x3816, 0x2f7d, 0x3b42, 0x38c2, 0x3884, 0x3096, 0x39b7, 0x3868, 0x3879, 0x3606, 0x3111, 0x36d8, 0x39eb, 0x3bcf, 0x3ac4, 0x38bd, 0x3877, 0x3967, 0x398b, 0x39fe, 0x3514, 0x3139, 0x30a8, 0x3431, 0x2d75, 0x3a3a, 0x3b80, 0x3917, 0x307a, 0x2c42, 0x3143, 0x3954, 0x36ff, 0x381f, 0x37dd, 0x3b2f, 0x3972, 0x317f, 0x397b, 0x350d, 0x382e, 0x2ed6, 0x375c, 0x3462, 0x36ff, 0x364c, 0x39ba, 0x36c7, 0x3bea, 0x3211, 0x354e, 0x2d30, 0x1f03, 0x35f6, 0x3a24, 0x3576, 0x38ce, 0x38e5, 0x3bbe, 0x38a8, 0x3831, 0x39d0, 0x3772, 0x3ba5, 0x314f, 0x2572, 0x39d2, 0x2de3, 0x1d7a, 0x360b, 0x399a, 0x3863, 0x3a18, 0x3141, 0x3a7d, 0x391b, 0x3957, 0x33f7, 0x3801, 0x392a, 0x3a5a, 0x3a51, 0x3841, 0x2a4a, 0x3786, 0x355f, 0x28d9, 0x35cc, 0x2dfc, 0x302a, 0x2c60, 0x3b50, 0x3abe, 0x382f, 0x35ed, 0x3a8d, +0x3b1b, 0x3525, 0x3725, 0x2e88, 0x304b, 0x3920, 0x3962, 0x3908, 0x352b, 0x3667, 0x3880, 0x3692, 0x38bd, 0x317c, 0x30f3, 0x3beb, 0x302b, 0x326c, 0x3a36, 0x3a30, 0x39b6, 0x2a61, 0x34f1, 0x22d6, 0x39b6, 0x310f, 0x2dff, 0x38d1, 0x3700, 0x3412, 0x38de, 0x394f, 0x2de4, 0x2ed8, 0x3beb, 0x3a50, 0x3526, 0x246d, 0x361e, 0x2e4b, 0x3272, 0x3b5a, 0x3805, 0x3a98, 0x3653, 0x3abc, 0x301d, 0x399f, 0x2dae, 0x3ac4, 0x39dc, 0x3403, 0x3109, 0x2d85, 0x381e, 0x36b6, 0x348d, 0x35c6, 0x3b5f, 0x3b3a, 0x35c0, 0x36de, 0x38bc, 0x3308, 0x39a0, 0x39cf, 0x3456, 0x3a80, 0x39fc, 0x311a, 0x3bb1, 0x3a38, 0x3b9d, 0x3a27, 0x3912, 0x3377, 0x38a9, 0x34c6, 0x34ec, 0x35fa, 0x378c, 0x387e, 0x3686, 0x372c, 0x388d, 0x3ad6, 0x3bd3, 0x3b26, 0x3bd6, 0x3b91, 0x31e3, 0x381e, 0x353b, 0x3a90, 0x2cd6, 0x3047, +0x33df, 0x35c8, 0x396a, 0x321c, 0x286f, 0x2daa, 0x39aa, 0x3a83, 0x36ff, 0x3476, 0x3a33, 0x37d6, 0x2c5f, 0x3a23, 0x38cb, 0x36a9, 0x331b, 0x24ec, 0x3960, 0x2d61, 0x3a61, 0x330f, 0x3937, 0x2e70, 0x3797, 0x399d, 0x26dc, 0x320e, 0x342c, 0x3b32, 0x22bc, 0x3466, 0x3447, 0x3896, 0x31b7, 0x3b22, 0x383a, 0x3623, 0x38f8, 0x3552, 0x3a55, 0x29c5, 0x34bb, 0x3663, 0x2c7b, 0x378d, 0x250c, 0x3ac9, 0x39c4, 0x378d, 0x39d2, 0x39a9, 0x379f, 0x3473, 0x2db0, 0x3993, 0x3ad3, 0x3494, 0x39ae, 0x36d2, 0x397c, 0x39c9, 0x3adc, 0x359f, 0x2c2f, 0x3b0d, 0x3595, 0x3687, 0x39b3, 0x34e4, 0x3af6, 0x2f71, 0x39af, 0x3b28, 0x38fe, 0x381d, 0x28ef, 0x3abc, 0x3723, 0x3b6c, 0x381e, 0x3442, 0x3b90, 0x39cc, 0x39c5, 0x3654, 0x38ac, 0x1b4d, 0x391f, 0x38d2, 0x3ac7, 0x385a, 0x322c, 0x39e6, 0x289c, 0x3786, +0x3b5f, 0x37c4, 0x3906, 0x3069, 0x3478, 0x383c, 0x3a34, 0x3a85, 0x33b3, 0x3be6, 0x3a71, 0x33ac, 0x3a77, 0x3b21, 0x3b7d, 0x3957, 0x3814, 0x39b2, 0x3504, 0x387f, 0x37c6, 0x39e0, 0x39f1, 0x393b, 0x2fe0, 0x3806, 0x2d6e, 0x37a5, 0x3069, 0x3831, 0x3959, 0x3363, 0x2d3a, 0x3980, 0x35ec, 0x3a3c, 0x389c, 0x23eb, 0x3a24, 0x30fa, 0x3040, 0x38b4, 0x3b7b, 0x381f, 0x3a66, 0x246e, 0x3b37, 0x30c1, 0x38a5, 0x387e, 0x34aa, 0x362a, 0x3556, 0x2a52, 0x3445, 0x3a9b, 0x2986, 0x38d2, 0x3513, 0x3bca, 0x39fa, 0x303b, 0x31cc, 0x3414, 0x3b16, 0x3a43, 0x2e2c, 0x3a29, 0x3996, 0x3973, 0x39b3, 0x36dc, 0x2761, 0x32a1, 0x3815, 0x3708, 0x38fa, 0x38cb, 0x36d3, 0x39c8, 0x266c, 0x3b60, 0x33cf, 0x3be3, 0x3854, 0x34c0, 0x34d3, 0x39ac, 0x37ad, 0x2fcb, 0x3966, 0x31a2, 0x363f, 0x3434, 0x381e, 0x3a53, +0x3795, 0x38cd, 0x3c00, 0x393c, 0x38af, 0x3b72, 0x37c4, 0x3b4f, 0x30b0, 0x36fd, 0x377b, 0x38f2, 0x371b, 0x3ada, 0x2edd, 0x3782, 0x33a2, 0x3a25, 0x38ae, 0x3be0, 0x3a31, 0x32b2, 0x3323, 0x3b1f, 0x39fc, 0x3986, 0x3b38, 0x3881, 0x3a9d, 0x3936, 0x3946, 0x3159, 0x3504, 0x3792, 0x3547, 0x28ff, 0x3449, 0x3214, 0x313f, 0x3866, 0x3a59, 0x3b06, 0x2e51, 0x2759, 0x342e, 0x3726, 0x3473, 0x37ea, 0x3b1d, 0x3be8, 0x346d, 0x3b73, 0x38c3, 0x296c, 0x33b2, 0x34a7, 0x3af5, 0x3284, 0x359c, 0x384d, 0x2ff7, 0x3337, 0x339b, 0x30e4, 0x3001, 0x3b02, 0x2ddf, 0x3997, 0x320c, 0x3af9, 0x2c92, 0x37e8, 0x3b5d, 0x3132, 0x3860, 0x396b, 0x39fd, 0x38f3, 0x3968, 0x32e8, 0x3523, 0x395b, 0x2e01, 0x37b9, 0x3b53, 0x3b37, 0x398e, 0x389b, 0x3586, 0x37d6, 0x3976, 0x3785, 0x3b0c, 0x3975, 0x39e2, 0x3bb5, +0x3675, 0x343a, 0x38d9, 0x392e, 0x3b61, 0x35db, 0x3527, 0x3a75, 0x3a1e, 0x36bd, 0x3af7, 0x2dae, 0x3b77, 0x2fe7, 0x3a80, 0x3745, 0x3a6e, 0x3748, 0x37ad, 0x3492, 0x3a82, 0x35db, 0x2e6a, 0x34bf, 0x3984, 0x3aff, 0x3a9a, 0x2720, 0x3786, 0x3475, 0x3842, 0x36ce, 0x387f, 0x3875, 0x292c, 0x35b8, 0x3ac0, 0x39f1, 0x3537, 0x3920, 0x3a93, 0x2a40, 0x2c60, 0x39b0, 0x3559, 0x3989, 0x3670, 0x33ef, 0x36e4, 0x3ac3, 0x3802, 0x35b3, 0x36e9, 0x34b6, 0x3911, 0x35f1, 0x3591, 0x3a96, 0x39df, 0x3892, 0x3582, 0x3a67, 0x39cf, 0x3bf8, 0x3587, 0x2adb, 0x36f3, 0x3a9f, 0x34c5, 0x31ab, 0x3481, 0x26aa, 0x3929, 0x3749, 0x3764, 0x3743, 0x39db, 0x2850, 0x363d, 0x386f, 0x349c, 0x3ae1, 0x3834, 0x3480, 0x305d, 0x3bca, 0x3418, 0x3580, 0x3897, 0x3831, 0x3898, 0x39aa, 0x372b, 0x3b98, 0x3b92, 0x3adc, +0x355f, 0x3915, 0x21ad, 0x3a2a, 0x3803, 0x3af4, 0x34e4, 0x37b0, 0x399e, 0x33d8, 0x3904, 0x1c2b, 0x3831, 0x3b39, 0x3a0e, 0x37dd, 0x3bfb, 0x3a0f, 0x3623, 0x3beb, 0x39d0, 0x335e, 0x38e5, 0x3810, 0x37df, 0x2c84, 0x30bc, 0x3013, 0x342f, 0x285f, 0x3855, 0x3b81, 0x3a35, 0x33e5, 0x3a11, 0x3bab, 0x32df, 0x303d, 0x3973, 0x340f, 0x3aba, 0x34d9, 0x3924, 0x3b84, 0x3a67, 0x3980, 0x3612, 0x3b64, 0x39e3, 0x3ac3, 0x3350, 0x3865, 0x24d5, 0x3bac, 0x3594, 0x38d7, 0x3b53, 0x3b76, 0x39ee, 0x36de, 0x3a1c, 0x38ce, 0x25cc, 0x3847, 0x3b28, 0x34c5, 0x3a7e, 0x3afb, 0x3361, 0x2266, 0x37d1, 0x3886, 0x306b, 0x3b12, 0x3a8b, 0x2aad, 0x3855, 0x35b0, 0x35c4, 0x3b4e, 0x36fa, 0x396a, 0x26f4, 0x381a, 0x2f06, 0x2c3e, 0x3116, 0x3adf, 0x358b, 0x2f88, 0x3adf, 0x3842, 0x3a1a, 0x3b35, 0x291a, 0x2e9d, +0x32d1, 0x3946, 0x3a50, 0x398e, 0x2970, 0x3122, 0x286c, 0x3b80, 0x3bbe, 0x38ad, 0x3b51, 0x385a, 0x38c4, 0x3af0, 0x352a, 0x38e9, 0x3a80, 0x28e3, 0x395e, 0x34aa, 0x3973, 0x3492, 0x398c, 0x327b, 0x39d4, 0x3995, 0x3740, 0x2742, 0x388f, 0x3a24, 0x3a2f, 0x38d3, 0x384e, 0x3abd, 0x3bb8, 0x3814, 0x394b, 0x3aa0, 0x3af2, 0x37ad, 0x32aa, 0x3aa3, 0x3aa6, 0x3ac5, 0x2fbf, 0x3759, 0x3848, 0x32c6, 0x3459, 0x38af, 0x3980, 0x24db, 0x3ac5, 0x377c, 0x1d75, 0x36e9, 0x389b, 0x314e, 0x344f, 0x30ff, 0x3921, 0x3b72, 0x3884, 0x3836, 0x3af2, 0x35b8, 0x3116, 0x38ce, 0x3ae6, 0x3b16, 0x3bca, 0x373b, 0x3a8e, 0x3872, 0x2d2a, 0x344d, 0x3b2e, 0x3608, 0x320e, 0x2aa7, 0x361a, 0x2dc4, 0x3b4f, 0x2d4d, 0x34b3, 0x34c0, 0x393b, 0x3a76, 0x372f, 0x3637, 0x2b5c, 0x3a38, 0x367b, 0x2b1e, 0x344e, 0x385e, +0x3ab6, 0x38a2, 0x3674, 0x2d4d, 0x3bad, 0x3b44, 0x35ed, 0x38a7, 0x325e, 0x3b29, 0x3b65, 0x2f0f, 0x3a30, 0x3b4c, 0x3843, 0x3a21, 0x2e34, 0x3180, 0x3ae0, 0x3a02, 0x3a82, 0x2ad9, 0x3826, 0x3a94, 0x2f66, 0x217b, 0x3b82, 0x3839, 0x3263, 0x3a1b, 0x2958, 0x3b26, 0x3a3e, 0x3039, 0x3bd7, 0x2057, 0x3b99, 0x38ac, 0x372d, 0x344e, 0x31fa, 0x3bf8, 0x394e, 0x3acb, 0x3b88, 0x38cf, 0x3582, 0x3a2b, 0x370e, 0x34b5, 0x36d2, 0x3ae3, 0x38b9, 0x37a5, 0x3979, 0x3204, 0x3ba2, 0x3591, 0x3a00, 0x3944, 0x1b7f, 0x271e, 0x38a2, 0x38ad, 0x3ade, 0x3008, 0x34c9, 0x3269, 0x31da, 0x3bad, 0x3587, 0x3bea, 0x3512, 0x2deb, 0x3825, 0x3488, 0x30aa, 0x3baf, 0x378f, 0x39d9, 0x3ac4, 0x3427, 0x371e, 0x3b2d, 0x3138, 0x3654, 0x3815, 0x3b7c, 0x38cf, 0x382e, 0x1cdb, 0x2fa4, 0x3783, 0x383c, 0x37d1, 0x2df8, +0x335b, 0x3071, 0x367f, 0x3be1, 0x3a1b, 0x3afd, 0x390b, 0x3b17, 0x3861, 0x3adb, 0x3a04, 0x3859, 0x3a95, 0x37b6, 0x37ff, 0x3400, 0x34e3, 0x367d, 0x3ad0, 0x3506, 0x3b50, 0x33e6, 0x3a42, 0x3b3c, 0x382a, 0x3bf8, 0x3be8, 0x3917, 0x39ec, 0x265b, 0x3b11, 0x3b2a, 0x3aef, 0x35f9, 0x3a2b, 0x371d, 0x32f8, 0x338b, 0x3bc2, 0x399e, 0x3aa8, 0x34b1, 0x182c, 0x3691, 0x39c5, 0x359a, 0x3b2b, 0x38f9, 0x3953, 0x362a, 0x3a8e, 0x363d, 0x3b96, 0x380a, 0x37fc, 0x3694, 0x2fa9, 0x35d1, 0x3699, 0x2e36, 0x3922, 0x38b6, 0x2d05, 0x3161, 0x353e, 0x371f, 0x3913, 0x39b6, 0x35d6, 0x3b29, 0x395c, 0x3677, 0x3ac8, 0x35e1, 0x3b02, 0x3479, 0x321a, 0x2a17, 0x2890, 0x388a, 0x3109, 0x3a45, 0x301c, 0x349a, 0x31a2, 0x3b19, 0x2eb4, 0x2eff, 0x353c, 0x39f5, 0x396c, 0x3ae4, 0x3873, 0x3bf6, 0x3887, 0x3507, +0x34d1, 0x35d3, 0x3ad2, 0x3759, 0x2918, 0x36eb, 0x39bd, 0x3b25, 0x31b8, 0x35eb, 0x2999, 0x3b69, 0x3829, 0x3385, 0x3bf4, 0x3a9b, 0x3aa7, 0x319a, 0x3824, 0x38e6, 0x38aa, 0x375d, 0x3188, 0x34eb, 0x37bc, 0x3375, 0x367b, 0x33df, 0x34f6, 0x38b3, 0x38e3, 0x3010, 0x3a05, 0x2e64, 0x336a, 0x3466, 0x3962, 0x3640, 0x2a17, 0x31c5, 0x3815, 0x3472, 0x3b2c, 0x3b79, 0x32d7, 0x3656, 0x2a54, 0x3409, 0x3887, 0x34e6, 0x30ea, 0x2851, 0x39cc, 0x3153, 0x38af, 0x3868, 0x3ad3, 0x3853, 0x38a7, 0x3583, 0x31e3, 0x3284, 0x2909, 0x3ae9, 0x3abe, 0x310b, 0x3564, 0x33cb, 0x3999, 0x37bc, 0x352c, 0x32f7, 0x3522, 0x36de, 0x340c, 0x37f7, 0x3839, 0x39f8, 0x2b3b, 0x3ada, 0x3258, 0x3764, 0x395c, 0x374b, 0x3bbc, 0x35fd, 0x306c, 0x3645, 0x3b20, 0x3a18, 0x2c2b, 0x39e2, 0x3a43, 0x3934, 0x34b5, 0x390a, +0x3bc0, 0x358b, 0x3817, 0x3b77, 0x36de, 0x3868, 0x3b93, 0x2d8d, 0x3607, 0x37f9, 0x39b4, 0x3bc5, 0x3997, 0x33e1, 0x328b, 0x226a, 0x3aab, 0x390e, 0x34ee, 0x34ae, 0x3645, 0x3a4d, 0x31db, 0x3576, 0x38ed, 0x39d5, 0x2974, 0x3982, 0x34ca, 0x3839, 0x3b7a, 0x2e37, 0x2045, 0x3a1b, 0x3bf9, 0x2f9a, 0x2aba, 0x3944, 0x3a82, 0x24d0, 0x38fa, 0x2c8f, 0x3a4c, 0x391f, 0x39d2, 0x3154, 0x3a64, 0x3902, 0x398d, 0x3921, 0x3800, 0x3443, 0x2fb9, 0x3aa5, 0x3973, 0x2a30, 0x367d, 0x3850, 0x3a1e, 0x3b86, 0x34eb, 0x383c, 0x37b1, 0x2db1, 0x30d7, 0x347a, 0x2b61, 0x3441, 0x288b, 0x3bea, 0x2a52, 0x29de, 0x3a65, 0x37c2, 0x3370, 0x39e2, 0x3850, 0x3691, 0x2f33, 0x39cb, 0x3bbd, 0x35fe, 0x3696, 0x3bbe, 0x3451, 0x384e, 0x2f01, 0x380e, 0x3810, 0x35e9, 0x2c3b, 0x34bd, 0x3905, 0x3505, 0x36e9, 0x3b23, +0x38d5, 0x38b3, 0x2e40, 0x39da, 0x3459, 0x39b9, 0x385c, 0x3a5a, 0x37d8, 0x37bb, 0x3549, 0x3ba9, 0x3a79, 0x3b72, 0x2c21, 0x3576, 0x3bd3, 0x3ae5, 0x3b63, 0x3979, 0x319a, 0x3bb2, 0x39e7, 0x328c, 0x3af2, 0x34d2, 0x32c2, 0x38d1, 0x3831, 0x3a23, 0x3a51, 0x3646, 0x38be, 0x2f1b, 0x36a5, 0x3891, 0x38f0, 0x3a6a, 0x3249, 0x2f87, 0x36d8, 0x3a85, 0x2870, 0x369e, 0x3a6a, 0x34d5, 0x3419, 0x3b3e, 0x38d2, 0x3a7f, 0x3938, 0x38e4, 0x3332, 0x39db, 0x3933, 0x3a2a, 0x38cc, 0x3bae, 0x3b1a, 0x3837, 0x3ba2, 0x3582, 0x3639, 0x392a, 0x30d0, 0x3966, 0x3b0f, 0x35a7, 0x3962, 0x3b6d, 0x3503, 0x38e2, 0x370e, 0x3341, 0x3694, 0x3a68, 0x3879, 0x3661, 0x377f, 0x38fc, 0x38d5, 0x3238, 0x3a69, 0x32d0, 0x3a61, 0x388f, 0x3591, 0x3b25, 0x3818, 0x304b, 0x39f0, 0x3826, 0x399e, 0x332c, 0x3496, 0x3822, +0x3a10, 0x3839, 0x3b02, 0x248f, 0x39a8, 0x31fa, 0x3964, 0x34e5, 0x2abc, 0x3a82, 0x3440, 0x321b, 0x3859, 0x38f1, 0x3845, 0x3bbd, 0x3b28, 0x3410, 0x3855, 0x3acb, 0x3afe, 0x38fb, 0x341d, 0x3713, 0x3281, 0x387c, 0x3b3a, 0x388d, 0x34f1, 0x33b1, 0x35df, 0x3a40, 0x3b5a, 0x37a8, 0x3997, 0x32c0, 0x38e1, 0x287f, 0x30ed, 0x398d, 0x2fc0, 0x399c, 0x34b5, 0x3b4e, 0x3a20, 0x39ed, 0x2dfe, 0x3b53, 0x3529, 0x3b5d, 0x39b7, 0x3469, 0x35fb, 0x3af6, 0x3b95, 0x39bd, 0x39be, 0x3bad, 0x308a, 0x380a, 0x3851, 0x3810, 0x3866, 0x3adb, 0x3b96, 0x3118, 0x3a45, 0x36ab, 0x3250, 0x38f5, 0x360e, 0x3ac2, 0x30d1, 0x3a5f, 0x3a09, 0x3550, 0x3ba9, 0x360d, 0x3ad6, 0x3a1f, 0x376e, 0x308b, 0x3908, 0x38ac, 0x348a, 0x3ba4, 0x3704, 0x37ef, 0x35ea, 0x3836, 0x395a, 0x2c3d, 0x382e, 0x360a, 0x321a, 0x3967, +0x26ea, 0x3845, 0x344c, 0x3b46, 0x33ca, 0x2f66, 0x220e, 0x39c5, 0x35d6, 0x3af3, 0x39d0, 0x38f7, 0x3082, 0x3924, 0x3198, 0x3a81, 0x3a45, 0x3945, 0x368d, 0x3a76, 0x3a14, 0x3145, 0x2430, 0x37f0, 0x3af8, 0x31d6, 0x36ab, 0x3453, 0x2dcc, 0x359c, 0x3699, 0x37b4, 0x399c, 0x375e, 0x386a, 0x3927, 0x38c2, 0x33ac, 0x32de, 0x3ba4, 0xece, 0x398a, 0x3b1f, 0x3583, 0x3b41, 0x340f, 0x3bef, 0x3777, 0x3acd, 0x3818, 0x3ad3, 0x385d, 0x38f7, 0x399c, 0x38a1, 0x3a11, 0x38ad, 0x2fc0, 0x32c3, 0x3293, 0x3499, 0x3757, 0x28a6, 0x3b3d, 0x3b9b, 0x37a1, 0x3bcd, 0x3a17, 0x3b46, 0x39b0, 0x2cee, 0x346a, 0x3b63, 0x3855, 0x37a4, 0x36dc, 0x3baa, 0x20a7, 0x3b32, 0x2a40, 0x3ac4, 0x3855, 0x35cb, 0x3bcc, 0x3a66, 0x38bd, 0x213a, 0x2be8, 0x2793, 0x32a2, 0x3a2c, 0x3aae, 0x384b, 0x3a00, 0x375d, 0x35e2, +0x3938, 0x3629, 0x398a, 0x263c, 0x37f1, 0x39ed, 0x332c, 0x3879, 0x38df, 0x2cc1, 0x38cb, 0x398a, 0x3935, 0x3607, 0x2791, 0x3a21, 0x3590, 0x306b, 0x3720, 0x3abb, 0x3a6a, 0x2a36, 0x388b, 0x2c62, 0x393e, 0x36bc, 0x37be, 0x39bd, 0x39db, 0x35d8, 0x3b2d, 0x39ba, 0x33a4, 0x3a4b, 0x2f93, 0x38ca, 0x325d, 0x3974, 0x3116, 0x3bd6, 0x3630, 0x3888, 0x3a58, 0x3a1d, 0x3868, 0x38c5, 0x316f, 0x353d, 0x2a18, 0x3994, 0x399a, 0x2e05, 0x3b8b, 0x32f3, 0x3242, 0x2e23, 0x3191, 0x3ab7, 0x2aaf, 0x3a7d, 0x3726, 0x3b42, 0x3abc, 0x372b, 0x3a73, 0x390e, 0x38d0, 0x38e2, 0x39f9, 0x2fae, 0x3372, 0x3370, 0x3699, 0x3851, 0x3430, 0x3559, 0x3b7c, 0x3671, 0x35dd, 0x2d3e, 0x35c8, 0x2260, 0x3ab4, 0x3b38, 0x3327, 0x33df, 0x3a01, 0x3368, 0x361e, 0x3baa, 0x3990, 0x382b, 0x38fb, 0x35b9, 0x3921, 0x3918, +0x38ea, 0x349a, 0x3123, 0x2d03, 0x356f, 0x3735, 0x3b50, 0x355b, 0x3b23, 0x3a35, 0x30a3, 0x3568, 0x365c, 0x3328, 0x3ac5, 0x323f, 0x271b, 0x24a7, 0x369d, 0x32a5, 0x39e7, 0x37dc, 0x3a48, 0x36a7, 0x3037, 0x39b8, 0x35b5, 0x320c, 0x29c0, 0x3770, 0x3893, 0x384c, 0x3888, 0x399a, 0x3a4e, 0x31e7, 0x397d, 0x3876, 0x3425, 0x3929, 0x3734, 0x2cb9, 0x39e8, 0x399d, 0x27d8, 0x3a89, 0x3198, 0x35ee, 0x2576, 0x31a6, 0x398b, 0x31cb, 0x2e6d, 0x386a, 0x3b4e, 0x3882, 0x3a5b, 0x3797, 0x38f0, 0x3229, 0x3849, 0x3874, 0x2cb5, 0x3b07, 0x3b6f, 0x3b29, 0x3bdf, 0x34fd, 0x3502, 0x3ae1, 0x39ac, 0x37ef, 0x3bbc, 0x39f7, 0x3503, 0x3bf0, 0x34da, 0x3bb9, 0x3811, 0x3ac2, 0x37e5, 0x37a9, 0x38a2, 0x3ba7, 0x3862, 0x369c, 0x35f7, 0x388b, 0x3aa8, 0x335b, 0x3a6f, 0x3885, 0x36c6, 0x38a9, 0x396d, 0x34ec, +0x3a09, 0x3869, 0x34bb, 0x3761, 0x36a1, 0x3852, 0x3849, 0x3659, 0x3805, 0x3a89, 0x3539, 0x35eb, 0x3439, 0x3863, 0x3a88, 0x38e0, 0x388c, 0x351c, 0x350e, 0x3383, 0x31ad, 0x389e, 0x39a5, 0x363f, 0x3b6a, 0x30f5, 0x3a4f, 0x3669, 0x3ae5, 0x3950, 0x2e12, 0x3801, 0x3af3, 0x393f, 0x377b, 0x390c, 0x34ff, 0x30f2, 0x271a, 0x37a5, 0x289e, 0x39b6, 0x3bf3, 0x389f, 0x3a33, 0x3bf0, 0x39c0, 0x392a, 0x394d, 0x349c, 0x3b62, 0x327a, 0x377b, 0x3590, 0x397a, 0x3a04, 0x3247, 0x329c, 0x2d99, 0x3b76, 0x33ff, 0x3456, 0x32c3, 0x35b6, 0x3282, 0x32b5, 0x3a23, 0x39e0, 0x3767, 0x3600, 0x38d6, 0x3a7c, 0x3515, 0x36bc, 0x381a, 0x3bd6, 0x3baf, 0x3811, 0x39e0, 0x22ac, 0x391b, 0x29be, 0x39aa, 0x3329, 0x3a6f, 0x3bcb, 0x3118, 0x3bbf, 0x3674, 0x3918, 0x30cd, 0x3924, 0x3a6b, 0x3a8b, 0x34b5, 0x39cc, +0x2cde, 0x3945, 0x37ff, 0x3115, 0x3a3b, 0x3ae1, 0x3958, 0x28f5, 0x3b19, 0x33ff, 0x3bc4, 0x3476, 0x3886, 0x3511, 0x342b, 0x3b18, 0x36e9, 0x3ab9, 0x2423, 0x32e2, 0x3623, 0x38b4, 0x371b, 0x3bc0, 0x3b8d, 0x3366, 0x384f, 0x3a1a, 0x3a09, 0x3918, 0x3959, 0x3652, 0x3baa, 0x3685, 0x38b7, 0x378b, 0x32e9, 0x3a53, 0x3405, 0x3bc3, 0x34b9, 0x339d, 0x3819, 0x2fe8, 0x3bdb, 0x3421, 0x3575, 0x3796, 0x207e, 0x3b04, 0x38a8, 0x3b69, 0x35f1, 0x389a, 0x37ee, 0x38c3, 0x34db, 0x35a5, 0x3b83, 0x36a9, 0x2883, 0x3955, 0x3aa0, 0x334a, 0x34a9, 0x3772, 0x312a, 0x3bde, 0x3338, 0x3601, 0x3125, 0x3a73, 0x316c, 0x348e, 0x3bef, 0x3b52, 0x343b, 0x249c, 0x3a68, 0x3905, 0x3b4d, 0x1cf8, 0x356a, 0x3499, 0x3385, 0x3b44, 0x2aaf, 0x28a1, 0x3199, 0x379d, 0x3832, 0x2da7, 0x3a9e, 0x3bc7, 0x34a2, 0x2c5a, +0x3bde, 0x3822, 0x3715, 0x345e, 0x38c1, 0x3315, 0x38d1, 0x2da9, 0x37f6, 0x38d3, 0x3beb, 0x3ba6, 0x343f, 0x3af0, 0x3b0e, 0x2bd6, 0x3b3b, 0x3a5a, 0x3930, 0x3af7, 0x3504, 0x31a5, 0x2918, 0x3853, 0x214f, 0x3b67, 0x3b64, 0x34a9, 0x3894, 0x3a87, 0x3ad1, 0x3a09, 0x38a2, 0x39da, 0x3a16, 0x3485, 0x36bf, 0x3ada, 0x31eb, 0x3b8c, 0x2de3, 0x3914, 0x39d4, 0x399f, 0x3968, 0x3200, 0x3631, 0x3bd6, 0x390b, 0x312d, 0x3b94, 0x3bf1, 0x38ee, 0x378b, 0x29f3, 0x3810, 0x2f19, 0x3808, 0x389c, 0x3a3a, 0x376c, 0x3b58, 0x346d, 0x2e32, 0x3848, 0x3bec, 0x3779, 0x3237, 0x37d2, 0x3963, 0x37a5, 0x3993, 0x3495, 0x3679, 0x2c1d, 0x3add, 0x3722, 0x305d, 0x38a0, 0x3851, 0x3a01, 0x291b, 0x3447, 0x35f7, 0x3617, 0x3928, 0x2e5d, 0x1f75, 0x3b78, 0x12cc, 0x39db, 0x39be, 0x3b11, 0x3b5a, 0x2fae, 0x3696, +0x3b26, 0x3229, 0x31d8, 0x3b61, 0x290e, 0x3b7d, 0x3bf3, 0x38cc, 0x3a78, 0x35f8, 0x3b7d, 0x3883, 0x3b43, 0x3571, 0x3991, 0x3bc3, 0x3095, 0x350f, 0x39bf, 0x3823, 0x370c, 0x2aa8, 0x3473, 0x33da, 0x38c7, 0x3ab7, 0x3b3d, 0x20f4, 0x3b12, 0x3997, 0x3bfe, 0x3479, 0x3a5f, 0x3550, 0x3af7, 0x34f2, 0x382f, 0x3109, 0x3287, 0x3a6f, 0x3b41, 0x3919, 0x2a88, 0x3b07, 0x3097, 0x398d, 0x35a7, 0x3921, 0x332f, 0x3b65, 0x39c2, 0x3aea, 0x3a54, 0x3996, 0x38c1, 0x396c, 0x3a06, 0x3831, 0x33a9, 0x3457, 0x3a8f, 0x3b43, 0x310d, 0x38e9, 0x36b8, 0x392c, 0x36b7, 0x323f, 0x2e02, 0x3b91, 0x36ef, 0x356b, 0x35e9, 0x339f, 0x39ce, 0x3ba8, 0x31bf, 0x2d8d, 0x3b09, 0x2dd7, 0x3960, 0x3b44, 0x37df, 0x3814, 0x3783, 0x39e7, 0x3716, 0x397f, 0x3429, 0x35ef, 0x3a37, 0x3743, 0x342a, 0x33cf, 0x184a, 0x3829, +0x384e, 0x3ade, 0x35c2, 0x36b9, 0x3429, 0x3abf, 0x3ac6, 0x3a36, 0x2108, 0x38ef, 0x37ff, 0x39fe, 0x3815, 0x3935, 0x3ab5, 0x351d, 0x3add, 0x3b57, 0x37ad, 0x2cc3, 0x3ace, 0x3ac4, 0x37ac, 0x3904, 0x3951, 0x32e7, 0x3337, 0x270b, 0x3a71, 0x3b9c, 0x3808, 0x3033, 0x34be, 0x3742, 0x3a39, 0x27f7, 0x26a2, 0x3b34, 0x35e5, 0x3a0f, 0x3939, 0x365f, 0x3853, 0x3b36, 0x364e, 0x3334, 0x1c8a, 0x330f, 0x3b6a, 0x3a34, 0x37fc, 0x353d, 0x3922, 0x387e, 0x390d, 0x3950, 0x37fc, 0x3946, 0x3afd, 0x342b, 0x2a9d, 0x3b85, 0x32b2, 0x3afc, 0x39a0, 0x3a38, 0x3182, 0x3aac, 0x3840, 0x3b40, 0x3703, 0x2f71, 0x3992, 0x3a53, 0x3a8a, 0x370c, 0x3101, 0x3826, 0x3b5b, 0x39c0, 0x3a46, 0x37d7, 0x3751, 0x2ab9, 0x342b, 0x39e0, 0x36fc, 0x3a8a, 0x1fb5, 0x355b, 0x38dc, 0x3b4d, 0x3be0, 0x3793, 0x307f, 0x3bae, +0x33ae, 0x39cc, 0x3a09, 0x3b3a, 0x34bf, 0x3b1c, 0x35cf, 0x3aa3, 0x3504, 0x381b, 0x3a9d, 0x3703, 0x3bce, 0x3b36, 0x35ea, 0x3503, 0x3687, 0x2661, 0x3bff, 0x2d04, 0x3bee, 0x3841, 0x3074, 0x309f, 0x35a3, 0x34ca, 0x36d5, 0x3640, 0x37e6, 0x37c9, 0x3a6d, 0x34fd, 0x3918, 0x3aa0, 0x3762, 0x34e0, 0x3527, 0x3780, 0x341d, 0x385a, 0x3af7, 0x3bf7, 0x3926, 0x3617, 0x3615, 0x2a99, 0x3649, 0x3a98, 0x3613, 0x2e24, 0x3809, 0x35b6, 0x3a63, 0x3bdd, 0x3825, 0x38fb, 0x2ed9, 0x39a5, 0x2d38, 0x364c, 0x3a63, 0x397c, 0x35e5, 0x3ad5, 0x31a7, 0x3979, 0x2873, 0x2e5c, 0x3abb, 0x39b6, 0x3b74, 0x2ce6, 0x35ab, 0x3920, 0x2fee, 0x308b, 0x229f, 0x3547, 0x36d3, 0x359c, 0x3814, 0x34de, 0x3a39, 0x2ed6, 0x3bd6, 0x353d, 0x3afb, 0x3b17, 0x3733, 0x16f0, 0x3011, 0x38b2, 0x387a, 0x3984, 0x3747, 0x394d, +0x34f7, 0x3755, 0x3960, 0x355f, 0x3765, 0x38fa, 0x3be8, 0x33ca, 0x351f, 0x31eb, 0x397e, 0x1412, 0x3022, 0x3467, 0x39d7, 0x3a60, 0x2c85, 0x3241, 0x3a90, 0x3926, 0x397a, 0x38f1, 0x3996, 0x3a51, 0x3ad5, 0x2e68, 0x38a9, 0x3663, 0x399f, 0x35f3, 0x3b4c, 0x34aa, 0x3b6b, 0x32af, 0x3aa8, 0x3a22, 0x38b6, 0x34cd, 0x2c81, 0x3945, 0x37a9, 0x3a20, 0x2523, 0x3ad8, 0x29ca, 0x3b63, 0x3a69, 0x37dc, 0x323b, 0x3898, 0x38e3, 0x3637, 0x394a, 0x2d82, 0x392c, 0x3993, 0x35b8, 0x3810, 0x399e, 0x3672, 0x39fa, 0x36c2, 0x351f, 0x3797, 0x244f, 0x3b02, 0x3304, 0x385f, 0x3312, 0x394e, 0x396b, 0x28bf, 0x3885, 0x39e2, 0x347e, 0x33ad, 0x3526, 0x3a5f, 0x3b90, 0x3b1e, 0x2572, 0x3a9c, 0x30ec, 0x393e, 0x3a9b, 0x357a, 0x394b, 0x3449, 0x3545, 0x2fee, 0x3702, 0x362b, 0x3bd4, 0x27d9, 0x2d6d, 0x3080, +0x30fb, 0x382e, 0x387a, 0x3b71, 0x355f, 0x39cc, 0x33c0, 0x2f57, 0x3b2f, 0x3b79, 0x3aea, 0x3b17, 0x3b46, 0x3844, 0x380d, 0x30a7, 0x2348, 0x381f, 0x2c21, 0x3a3b, 0x2cf6, 0x3523, 0x3835, 0x1b53, 0x3ad3, 0x3b18, 0x372a, 0x39a5, 0x37e6, 0x39bd, 0x2cfd, 0x395d, 0x2ea2, 0x39cb, 0x3bdc, 0x36db, 0x3b48, 0x3acc, 0x3439, 0x34c8, 0x3361, 0x3b5b, 0x324a, 0x35ec, 0x2c87, 0x395e, 0x35fe, 0x37a4, 0x361f, 0x315f, 0x305e, 0x35f7, 0x3541, 0x3729, 0x37ed, 0x31b7, 0x3a9a, 0x34ee, 0x376c, 0x3a7a, 0x389e, 0x30b3, 0x328e, 0x3811, 0x36f5, 0x35d9, 0x37f9, 0x3bcf, 0x3a0d, 0x3658, 0x3ba9, 0x38df, 0x3997, 0x3a6d, 0x375e, 0x32f7, 0x382e, 0x3b0d, 0x38ed, 0x346a, 0x3b8a, 0x2da9, 0x359c, 0x3574, 0x3840, 0x3333, 0x3a5b, 0x358d, 0x39f3, 0x385d, 0x2959, 0x3908, 0x3b84, 0x3a40, 0x2f0d, 0x35e0, +0x2066, 0x3940, 0x3b3b, 0x320f, 0x37cc, 0x377a, 0x3b22, 0x36da, 0x3aa0, 0x3476, 0x34b4, 0x3941, 0x36f4, 0x391e, 0x3a8d, 0x32ca, 0x3853, 0x3af6, 0x34d2, 0x36a6, 0x33f1, 0x39a0, 0x3790, 0x3440, 0x390f, 0x3a83, 0x399d, 0x367d, 0x2b8e, 0x3575, 0x3a1b, 0x3a7c, 0x3a6c, 0x2eb2, 0x3a27, 0x369b, 0x3a45, 0x38a4, 0x346f, 0x3a8c, 0x307a, 0x36d0, 0x39be, 0x39ae, 0x34ee, 0x2ae7, 0x3559, 0x3858, 0x3705, 0x38eb, 0x39fa, 0x3565, 0x3285, 0x392a, 0x394a, 0x300a, 0x39f6, 0x2e3e, 0x33dc, 0x39c7, 0x295d, 0x3b80, 0x3888, 0x3760, 0x3bfb, 0x396f, 0x3729, 0x386d, 0x39bb, 0x2d93, 0x387a, 0x3b12, 0x3b2e, 0x3bdc, 0x33ec, 0x383d, 0x38d0, 0x3373, 0x3bb0, 0x3987, 0x3b2b, 0x3097, 0x3884, 0x3b20, 0x39bf, 0x3360, 0x2b53, 0x370a, 0x2f02, 0x38ab, 0x24ee, 0x3947, 0x3927, 0x29d7, 0x3b8d, 0x3b8b, +0x3a58, 0x292b, 0x3604, 0x398f, 0x321b, 0x341f, 0x3909, 0x3901, 0x3b49, 0x32ee, 0x3940, 0x3b77, 0x31f0, 0x344e, 0x380c, 0x36b1, 0x3a4e, 0x3638, 0x3922, 0x3864, 0x393b, 0x3903, 0x302f, 0x2ff2, 0x30b7, 0x3997, 0x385b, 0x3bbf, 0x3b39, 0x38de, 0x3a69, 0x3b51, 0x3aed, 0x387b, 0x269d, 0x39c7, 0x3a99, 0x3beb, 0x3672, 0x33ee, 0x200e, 0x3834, 0x34f7, 0x3971, 0x355a, 0x31fd, 0x2531, 0x385f, 0x3bf2, 0x2686, 0x364a, 0x358a, 0x2e99, 0x2f89, 0x3809, 0x3924, 0x39ee, 0x3990, 0x3987, 0x3972, 0x3813, 0x3840, 0x34dd, 0x374a, 0x3250, 0x2f4c, 0x35d9, 0x2991, 0x3b3f, 0x362e, 0x3455, 0x2abb, 0x3a2d, 0x3b57, 0x3567, 0x2cc0, 0x2d0d, 0x3be3, 0x2f3e, 0x3a9f, 0x3253, 0x34e8, 0x3712, 0x334e, 0x3ab9, 0x3bae, 0x3a1d, 0x3a5c, 0x3b96, 0x3adf, 0x3088, 0x3a8e, 0x35f3, 0x3795, 0x35d1, 0x3bb4, +0x3862, 0x3976, 0x3b9a, 0x3291, 0x3b5c, 0x3540, 0x2d00, 0x3702, 0x3519, 0x39dd, 0x3bff, 0x3560, 0x3642, 0x392c, 0x3a6f, 0x32ff, 0x32f2, 0x3836, 0x2d5f, 0x368d, 0x383b, 0x3abb, 0x2ec9, 0x3ada, 0x391a, 0x3811, 0x35d9, 0x3b90, 0x3aa3, 0x3149, 0x3b10, 0x3912, 0x3391, 0x318b, 0x22ed, 0x3a32, 0x3819, 0x39c9, 0x3865, 0x332e, 0x399b, 0x3aaa, 0x3b3e, 0x37b6, 0x35db, 0x3286, 0x3765, 0x2afe, 0x3b7a, 0x32b2, 0x38c9, 0x37d0, 0x3a6d, 0x3a3a, 0x3a9c, 0x364d, 0x3915, 0x36d5, 0x24fb, 0x35ed, 0x3abd, 0x3200, 0x3ae4, 0x3a0f, 0x3ac2, 0x33be, 0x3812, 0x3bae, 0x3969, 0x3237, 0x3bb0, 0x3681, 0x35c9, 0x37da, 0x2f15, 0x3362, 0x3b5c, 0x3a74, 0x315a, 0x3b44, 0x2f83, 0x3971, 0x3bfd, 0x3ab3, 0x35ae, 0x3a5a, 0x303d, 0x2a1d, 0x3a0c, 0x3bbe, 0x3365, 0x33df, 0x3521, 0x3bce, 0x3880, 0x3842, +0x3a15, 0x3835, 0x2ac7, 0x3640, 0x3864, 0x309d, 0x3934, 0x364d, 0x30f9, 0x3954, 0x34c0, 0x39a2, 0x36c1, 0x3a64, 0x2f3d, 0x338e, 0x3993, 0x34c0, 0x2c7e, 0x30a8, 0x3696, 0x2d67, 0x2017, 0x3757, 0x2ebc, 0x2c37, 0x3422, 0x36a8, 0x3a49, 0x364d, 0x3b0a, 0x3adc, 0x34f1, 0x3a15, 0x389b, 0x389b, 0x3557, 0x3542, 0x3a12, 0x38b4, 0x3a49, 0x38fd, 0x3a25, 0x3516, 0x3bc9, 0x3811, 0x1b72, 0x391e, 0x2ecb, 0x3a69, 0x3818, 0x342b, 0x3b44, 0x3912, 0x2ae6, 0x3bb1, 0x355e, 0x3182, 0x3793, 0x385b, 0x2983, 0x394d, 0x3021, 0x307c, 0x3419, 0x364f, 0x395f, 0x3395, 0x365d, 0x3a90, 0x3b4d, 0x3660, 0x35ad, 0x3b87, 0x3b40, 0x3919, 0x3800, 0x385c, 0x187b, 0x3b1e, 0x38c8, 0x38bf, 0x3844, 0x390b, 0x3672, 0x37df, 0x3a46, 0x3013, 0x30fd, 0x3a86, 0x36aa, 0x3a60, 0x39a7, 0x39b7, 0x37d2, 0x33e7, +0x2cde, 0x3a8d, 0x33d3, 0x2c74, 0x34c5, 0x2b02, 0x3ab0, 0x375d, 0x3a8f, 0x39c7, 0x340c, 0x3bc7, 0x39ae, 0x2ea6, 0x3b0b, 0x394b, 0x3823, 0x3504, 0x383a, 0x38f6, 0x382d, 0x3bda, 0x3a1b, 0x38c9, 0x35e2, 0x39f1, 0x38b9, 0x3281, 0x3bb3, 0x3156, 0x2c35, 0x3b28, 0x2cfe, 0x392a, 0x3908, 0x3a72, 0x2d0e, 0x3b20, 0x369d, 0x3bae, 0x2f9f, 0x3aac, 0x331f, 0x3ab7, 0x3999, 0x3980, 0x3b17, 0x39d3, 0x3609, 0x231d, 0x386c, 0x39b7, 0x2a32, 0x37b0, 0x350d, 0x2554, 0x33ee, 0x2c9a, 0x319a, 0x37d6, 0x347e, 0x3a54, 0x3903, 0x3aaa, 0x31fc, 0x33c9, 0x3988, 0x3ac7, 0x31b5, 0x354c, 0x3ba7, 0x342e, 0x3898, 0x3907, 0x3bc4, 0x36b6, 0x36fc, 0x3896, 0x3832, 0x33d8, 0x3af7, 0x38df, 0x3b8b, 0x2dc9, 0x29a0, 0x3b24, 0x34e6, 0x2d49, 0x34c2, 0x388e, 0x36cb, 0x2eff, 0x34fb, 0x3b91, 0x3be3, 0x39ed, +0x38fb, 0x3675, 0x36d9, 0x385b, 0x36ce, 0x3755, 0x354b, 0x3014, 0x3670, 0x3be2, 0x3af2, 0x3b6e, 0x345f, 0x2f8d, 0x3a55, 0x3919, 0x3ad3, 0x3388, 0x368a, 0x3bbf, 0x2b8e, 0x28fd, 0x2e73, 0x3baa, 0x3326, 0x3625, 0x351e, 0x35eb, 0x305c, 0x3bc5, 0x345b, 0x3473, 0x3555, 0x28bb, 0x357a, 0x39c2, 0x3871, 0x3232, 0x2c3a, 0x3983, 0x340a, 0x3af8, 0x3932, 0x3354, 0x3a39, 0x36b8, 0x367a, 0x29ce, 0x3bf0, 0x290d, 0x339f, 0x3afb, 0x340d, 0x3128, 0x38ac, 0x2b34, 0x346f, 0x3356, 0x3bb9, 0x2967, 0x355a, 0x37cd, 0x34f4, 0x3a66, 0x36b6, 0x2968, 0x3bf7, 0x3a0d, 0x361c, 0x3898, 0x3859, 0x39fe, 0x3bdb, 0x38aa, 0x3b92, 0x2fcc, 0x38b1, 0x3713, 0x3be1, 0x3826, 0x3b00, 0x32c3, 0x30a1, 0x38d7, 0x3bf3, 0x3b42, 0x38af, 0x304b, 0x3279, 0x37c5, 0x2072, 0x346c, 0x3857, 0x3597, 0x3624, 0x39d7, +0x3042, 0x392a, 0x3120, 0x20d7, 0x3b8c, 0x3a8f, 0x383a, 0x3a52, 0x3bbd, 0x31ad, 0x3781, 0x3359, 0x36cb, 0x33f1, 0x385b, 0x3225, 0x38d5, 0x3019, 0x3a17, 0x34d3, 0x3a34, 0x39ba, 0x3a17, 0x31e8, 0x3b53, 0x3b9c, 0x3b54, 0x33b6, 0x3488, 0x367a, 0x3a2c, 0x3ac7, 0x3b0a, 0x399a, 0x3891, 0x3a51, 0x3a4a, 0x380b, 0x391c, 0x3805, 0x381d, 0x3b2a, 0x2a0d, 0x3acc, 0x3b55, 0x3958, 0x3a2b, 0x35cd, 0x340e, 0x36e1, 0x3a09, 0x2569, 0x2c5f, 0x376c, 0x3431, 0x3ad3, 0x31fc, 0x331e, 0x396b, 0x2ebd, 0x380f, 0x3bce, 0x3a74, 0x32de, 0x30ec, 0x3300, 0x3aba, 0x34c3, 0x3abd, 0x30c6, 0x39af, 0x3a3d, 0x3ad9, 0x3097, 0x2af9, 0x38a6, 0x3071, 0x25c5, 0x34ea, 0x2ff3, 0x355e, 0x3b66, 0x1edc, 0x3a1f, 0x32c7, 0x381c, 0x3837, 0x3bc1, 0x3033, 0x3bcb, 0x3a53, 0x3ab7, 0x38be, 0x2a81, 0x36ad, 0x301f, +0x3931, 0x3ba1, 0x34ac, 0x383d, 0x3636, 0x35b9, 0x38f2, 0x2c53, 0x32a9, 0x3b31, 0x3181, 0x383c, 0x395b, 0x30ef, 0x3aa7, 0x30ce, 0x32ff, 0x328b, 0x3329, 0x2c12, 0x394e, 0x2c60, 0x35de, 0x3938, 0x2c18, 0x37be, 0x392e, 0x3438, 0x3650, 0x34c7, 0x392c, 0x39aa, 0x2e72, 0x3ab6, 0x2bc9, 0x3bfa, 0x36f2, 0x2830, 0x2ad4, 0x3b3f, 0x3ae7, 0x34c7, 0x3064, 0x35ef, 0x3956, 0x39e9, 0x31eb, 0x2ff8, 0x36f3, 0x38de, 0x34b8, 0x3aa8, 0x1c30, 0x3b4f, 0x38d9, 0x3bba, 0x39b7, 0x3b4c, 0x2ee9, 0x3837, 0x3835, 0x36c6, 0x3928, 0x2e72, 0x37d2, 0x3642, 0x31cb, 0x35d6, 0x3408, 0x3404, 0x39d4, 0x3877, 0x38a5, 0x31ae, 0x2c75, 0x341a, 0x3af5, 0x3abc, 0x330b, 0x387d, 0x3b46, 0x369f, 0x2bf0, 0x3bdc, 0x36fc, 0x362a, 0x374f, 0x3bc3, 0x3ac5, 0x38c1, 0x3965, 0x380f, 0x3675, 0x3bba, 0x3a38, 0x39ca +}; \ No newline at end of file diff --git a/redmule/inc/w_input.h b/redmule/inc/w_input.h new file mode 100644 index 0000000..dd2e275 --- /dev/null +++ b/redmule/inc/w_input.h @@ -0,0 +1,99 @@ + /* Header file generated by RedMulE Golden Model */ +uint16_t w_inp [9216] = { +0x2d1a, 0x2f9c, 0x3596, 0x38eb, 0x3a5c, 0x3827, 0x3b07, 0x397a, 0x347f, 0x3703, 0x2e26, 0x305c, 0x3ba2, 0x39cd, 0x36fa, 0x3899, 0x38dc, 0x3a60, 0x345b, 0x2d80, 0x36ad, 0x2eb8, 0x34ca, 0x384a, 0x33ef, 0x353e, 0x370e, 0x38f6, 0x3947, 0x387c, 0x3893, 0x38fd, 0x39a9, 0x29fb, 0x39ec, 0x3232, 0x35f8, 0x320c, 0x3b5c, 0x34b6, 0x39e6, 0x2b02, 0x340d, 0x30cc, 0x3b7d, 0x3298, 0x381a, 0x3aa8, 0x3b2b, 0x3605, 0x389e, 0x3a3a, 0x2f2c, 0x3ae4, 0x2cc3, 0x2e6b, 0x3850, 0x3a94, 0x396f, 0x3683, 0x3983, 0x39ea, 0x349f, 0x3b95, 0x28a5, 0x3853, 0x349a, 0x30cc, 0x389b, 0x3595, 0x31f9, 0x3a85, 0x367d, 0x3bbe, 0x3bde, 0x3ae7, 0x3977, 0x3a5d, 0x2497, 0x32ed, 0x39c5, 0x3553, 0x3b87, 0x357c, 0x3868, 0x2fc2, 0x1ad7, 0x3079, 0x3b2f, 0x3570, 0x3a70, 0x3761, 0x29cd, 0x3640, 0x3885, 0x2c6e, +0x3a6c, 0x322b, 0x34e2, 0x1a14, 0x385b, 0x3bdd, 0x3b0f, 0x3548, 0x35d5, 0x3105, 0x39f6, 0x2ce7, 0x365f, 0x286d, 0x3673, 0x3517, 0x3847, 0x3905, 0x34f8, 0x3a5b, 0x2809, 0x38e8, 0x3910, 0x3bce, 0x3aa7, 0x3a98, 0x3a82, 0x318b, 0x39a1, 0x39c7, 0x3960, 0x3206, 0x3320, 0x3893, 0x2e29, 0x391a, 0x28ae, 0x3535, 0x3a37, 0x3821, 0x32de, 0x326d, 0x3196, 0x3b5f, 0x38f2, 0x3b44, 0x3680, 0x3309, 0x3bf2, 0x3bb2, 0x3874, 0x3531, 0x2c98, 0x3648, 0x2d18, 0x2af5, 0x25d7, 0x3a75, 0x38bc, 0x3a77, 0x39bb, 0x3a92, 0x397d, 0x3486, 0x35e3, 0x3917, 0x3805, 0x3001, 0x3619, 0x3952, 0x34c7, 0x3a87, 0x35de, 0x385e, 0x2590, 0x3bb1, 0x2b49, 0x3526, 0x35c5, 0x3963, 0x374e, 0x346a, 0x35d0, 0x3622, 0x2dd8, 0x3aa0, 0x3292, 0x30d8, 0x3883, 0x3ad4, 0x3a22, 0x360f, 0x3424, 0x348f, 0x3886, 0x38f3, +0x3945, 0x3792, 0x3629, 0x3b2b, 0x3bf5, 0x3a69, 0x3199, 0x3b84, 0x35c4, 0x3b13, 0x27a5, 0x3b8a, 0x393d, 0x3a14, 0x3a40, 0x35e7, 0x3a6a, 0x38ad, 0x3bb9, 0x24d8, 0x3b90, 0x3797, 0x3716, 0x384e, 0x3832, 0x3855, 0x39c3, 0x39de, 0x2684, 0x3627, 0x35f0, 0x3a86, 0x3995, 0x2abc, 0x347a, 0x2409, 0x2758, 0x3664, 0x3ae9, 0x1eb1, 0x386a, 0x33dd, 0x3413, 0x243b, 0x3b5b, 0x36fb, 0x38ab, 0x39cb, 0x38e8, 0x308c, 0x3be2, 0x30c8, 0x382c, 0x3bcc, 0x3b0f, 0x30e7, 0x31b4, 0x2adb, 0x2354, 0x2c7e, 0x3774, 0x3299, 0x3574, 0x3b35, 0x38a3, 0x3836, 0x3400, 0x3721, 0x3acb, 0x37da, 0x3688, 0x35d5, 0x3977, 0x3247, 0x2a12, 0x3b36, 0x371a, 0x3750, 0x2ad9, 0x242b, 0x306f, 0x3502, 0x3b35, 0x394d, 0x3646, 0x315d, 0x387d, 0x349f, 0x305a, 0x3a84, 0x3a3e, 0x3be3, 0x3bf9, 0x3580, 0x3b14, 0x3a13, +0x371c, 0x2da9, 0x3995, 0x38be, 0x323e, 0x328d, 0x383d, 0x3991, 0x3a57, 0x38ca, 0x3867, 0x3982, 0x34fd, 0x347c, 0x380f, 0x3074, 0x38d4, 0x34fa, 0x326a, 0x377c, 0x3a52, 0x3abd, 0x3536, 0x226f, 0x319c, 0x3321, 0x393e, 0x3467, 0x3b37, 0x3bc1, 0x3a17, 0x394d, 0x33a2, 0x395d, 0x33e4, 0x3b09, 0x3855, 0x354d, 0x2f53, 0x34e7, 0x375b, 0x35f1, 0x367f, 0x3674, 0x2e07, 0x3ba0, 0x314b, 0x3bce, 0x2c5f, 0x384d, 0x3443, 0x36b1, 0x3973, 0x38d8, 0x340d, 0x3a77, 0x2ec7, 0x3538, 0x2e0e, 0x2d39, 0x3a81, 0x3b54, 0x3bdc, 0x3461, 0x2d5f, 0x3a52, 0x390c, 0x2186, 0x3896, 0x39d5, 0x3868, 0x2171, 0x303e, 0x3b19, 0x3915, 0x3be0, 0x39cb, 0x34ce, 0x357f, 0x394b, 0x39d3, 0x3af8, 0x3855, 0x3430, 0x36d6, 0x38bd, 0x3ad5, 0x38f4, 0x252e, 0x3b49, 0x36b0, 0x32b2, 0x3610, 0x3baa, 0x398b, 0x3ac1, +0x3655, 0x2ad4, 0x38e1, 0x3a9a, 0x37b9, 0x3027, 0x3889, 0x3017, 0x3baf, 0x32b8, 0x3922, 0x3984, 0x3ac3, 0x3775, 0x37f5, 0x38f0, 0x3a37, 0x3a8a, 0x283a, 0x1b5c, 0x3998, 0x2c23, 0x380e, 0x3254, 0x3ad7, 0x39f2, 0x328e, 0x36da, 0x370d, 0x2f71, 0x3944, 0x2e44, 0x36d7, 0x362a, 0x370d, 0x38a7, 0x3b99, 0x3850, 0x3111, 0x329d, 0x3bbf, 0x353e, 0x3932, 0x3542, 0x2ab8, 0x3bf2, 0x312c, 0x3070, 0x3983, 0x3882, 0x3aa6, 0x39fd, 0x384b, 0x3a76, 0x3b1f, 0x312a, 0x183e, 0x362e, 0x347e, 0x38cf, 0x3186, 0x38eb, 0x1c0b, 0x2def, 0x33ec, 0x3b0f, 0x387e, 0x344f, 0x3b28, 0x367f, 0x3661, 0x382a, 0x28c2, 0x3980, 0x3709, 0x3875, 0x3922, 0x37fb, 0x36a9, 0x2f28, 0x36c2, 0x30c6, 0x3bcf, 0x3aba, 0x3965, 0x3397, 0x39ab, 0x3812, 0x344e, 0x39ff, 0x3866, 0x3895, 0x3ba0, 0x3a13, 0x3a1b, 0x35ef, +0x382a, 0x34ad, 0x39c7, 0x2ef8, 0x377e, 0x3915, 0x3beb, 0x3a4f, 0x35e7, 0x3465, 0x3668, 0x3404, 0x3233, 0x3361, 0x3b7e, 0x3702, 0x3b3b, 0x3834, 0x36e7, 0x3a65, 0x2ed7, 0x3965, 0x3914, 0x34c7, 0x3722, 0x3612, 0x397f, 0x2e03, 0x36b6, 0x2da9, 0x33d1, 0x350e, 0x38af, 0x1b8f, 0x360b, 0x3803, 0x38e4, 0x328a, 0x330b, 0x383c, 0x3501, 0x334b, 0x35bf, 0x395f, 0x394f, 0x359b, 0x3b66, 0x2eee, 0x350f, 0x3759, 0x3a91, 0x3b46, 0x3808, 0x3b0e, 0x38c7, 0x3846, 0x2e4b, 0x2edb, 0x382a, 0x348d, 0x1a8b, 0x3510, 0x39c3, 0x30f8, 0x3758, 0x2fc8, 0x3386, 0x3316, 0x393f, 0x3351, 0x3b46, 0x389f, 0x3312, 0x28a9, 0x34ff, 0x3a51, 0x3b00, 0x36a4, 0x3811, 0x281c, 0x3646, 0x3b42, 0x3453, 0x32ea, 0x2f6b, 0x3a64, 0x2cd4, 0x28d1, 0x3a0b, 0x3276, 0x3b1d, 0x368e, 0x340a, 0x3ac3, 0x3067, 0x3987, +0x25a7, 0x39f4, 0x3b54, 0x38d8, 0x3708, 0x3999, 0x313e, 0x316b, 0x39af, 0x2e81, 0x3667, 0x39e3, 0x3904, 0x391d, 0x383d, 0x3956, 0x36c0, 0x30d0, 0x346d, 0x39cf, 0x3236, 0x354f, 0x377f, 0x326a, 0x3800, 0x3022, 0x3b2f, 0x3b98, 0x3a97, 0x3bca, 0x3a1e, 0x3a5b, 0x337d, 0x385c, 0x2fff, 0x399e, 0x33e3, 0x355a, 0x3835, 0x3a1e, 0x38d5, 0x3791, 0x2f0d, 0x2ef4, 0x3581, 0x397a, 0x3a26, 0x391b, 0x3727, 0x3874, 0x3a25, 0x30ba, 0x2b99, 0x3a8b, 0x345b, 0x3bab, 0x3900, 0x3743, 0x3b73, 0x391a, 0x3bd2, 0x39ea, 0x3599, 0x383b, 0x34c0, 0x34b3, 0x3bf0, 0x396d, 0x3b6f, 0x36f9, 0x350e, 0x3b43, 0x39da, 0x3b16, 0x38af, 0x369c, 0x3530, 0x3a87, 0x3a68, 0x2220, 0x2d27, 0x3a49, 0x2df1, 0x353a, 0x3a08, 0x3bdb, 0x378e, 0x2942, 0x35f0, 0x3618, 0x3897, 0x3946, 0x3b7d, 0x3a44, 0x356f, 0x389f, +0x3bd0, 0x2946, 0x3aa2, 0x3711, 0x3462, 0x369c, 0x3a56, 0x3b59, 0x32ac, 0x3813, 0x2f28, 0x3c00, 0x3404, 0x34dc, 0x29ec, 0x3bf1, 0x393e, 0x3b63, 0x3513, 0x3822, 0x382b, 0x35f2, 0x3b2c, 0x3498, 0x2515, 0x31aa, 0x3a7f, 0x391d, 0x3a54, 0x34ef, 0x353a, 0x3a41, 0x334a, 0x3b6a, 0x376f, 0x3bb0, 0x3821, 0x38c2, 0x3b57, 0x333d, 0x2ba8, 0x368e, 0x3a2c, 0x345b, 0x3b9a, 0x3976, 0x3870, 0x34b5, 0x386c, 0x3916, 0x38cc, 0x32a3, 0x3bd8, 0x30bc, 0x30a7, 0x38bc, 0x3727, 0x38e7, 0x337a, 0x3b34, 0x39b7, 0x391f, 0x27fa, 0x3b3f, 0x3940, 0x3698, 0x3256, 0x3a9b, 0x39c3, 0x2e76, 0x3899, 0x3915, 0x36a4, 0x3606, 0x3bd9, 0x314f, 0x2822, 0x3bba, 0x381b, 0x3252, 0x38dd, 0x2cb9, 0x38f3, 0x385c, 0x348d, 0x3220, 0x31a8, 0x3128, 0x3aed, 0x3903, 0x3be2, 0x3971, 0x29f4, 0x3130, 0x3b11, 0x35d7, +0x3a04, 0x393c, 0x3573, 0x3870, 0x3568, 0x38f5, 0x38a4, 0x353f, 0x3b0f, 0x363a, 0x35de, 0x3241, 0x3b97, 0x2e15, 0x3a8a, 0x3823, 0x38e0, 0x3556, 0x3a96, 0x364f, 0x337a, 0x34e3, 0x342b, 0x3994, 0x3b5c, 0x3b57, 0x3a63, 0x2f0d, 0x3b7a, 0x3a08, 0x3102, 0x34ce, 0x3036, 0x3864, 0x3887, 0x280c, 0x3bb5, 0x38a1, 0x3b71, 0x3b0c, 0x3487, 0x3b6e, 0x3aec, 0x3af6, 0x1cd8, 0x3381, 0x2923, 0x3b78, 0x3597, 0x3528, 0x3afe, 0x39c2, 0x3258, 0x3898, 0x3b8c, 0x2c32, 0x38e1, 0x2f4a, 0x3948, 0x39bb, 0x39cb, 0x386b, 0x3778, 0x3847, 0x2fa6, 0x3b01, 0x3a0c, 0x3a67, 0x3b8e, 0x3959, 0x346b, 0x38ba, 0x34f8, 0x3606, 0x3940, 0x3562, 0x3be6, 0x390c, 0x2d8b, 0x3987, 0x2f30, 0x2d65, 0x36d1, 0x3b44, 0x3421, 0x37cb, 0x3a4a, 0x338e, 0x3693, 0x3699, 0x3521, 0x3aae, 0x3930, 0x391c, 0x3654, 0x3898, +0x36f8, 0x34cd, 0x2149, 0x326e, 0x36fa, 0x3179, 0x2e80, 0x3a76, 0x3027, 0x3847, 0x3b9b, 0x38eb, 0x35c2, 0x34d4, 0x384a, 0x3595, 0x35ab, 0x3937, 0x3668, 0x3953, 0x3697, 0x2d28, 0x3baa, 0x3a75, 0x3889, 0x3996, 0x34d8, 0x39b2, 0x3b7d, 0x37c5, 0x3b60, 0x316d, 0x324c, 0x3a17, 0x35bd, 0x3914, 0x334e, 0x3375, 0x29e3, 0x34a3, 0x3346, 0x39e3, 0x32d6, 0x2b0b, 0x3ac7, 0x3aca, 0x3813, 0x3752, 0x3022, 0x39f7, 0x3971, 0x389f, 0x39c2, 0x3205, 0x3739, 0x38b3, 0x3942, 0x39dc, 0x39db, 0x382a, 0x3abb, 0x3978, 0x3ad0, 0x3568, 0x2c42, 0x3773, 0x31c8, 0x3b9f, 0x3594, 0x3a9a, 0x37c3, 0x31c2, 0x325a, 0x3931, 0x2265, 0x39ab, 0x24b6, 0x3291, 0x3a79, 0x3b31, 0x39ef, 0x3a6b, 0x381f, 0x304d, 0x33fb, 0x39d6, 0x3849, 0x3891, 0x367a, 0x3b66, 0x380e, 0x3481, 0x3b30, 0x2a58, 0x3bf3, 0x35d3, +0x3b73, 0x3bcf, 0x3a9c, 0x3a9f, 0x2d30, 0x3abe, 0x3510, 0x3980, 0x2809, 0x3bed, 0x2477, 0x31d1, 0x37d6, 0x3553, 0x3190, 0x38fd, 0x366f, 0x3917, 0x3bf2, 0x3b54, 0x34f0, 0x2f3f, 0x3b0a, 0x379a, 0x342d, 0x2db5, 0x3105, 0x35a8, 0x39a2, 0x3b84, 0x350e, 0x2c79, 0x3a84, 0x3419, 0x3af7, 0x3508, 0x39e6, 0x3a46, 0x2f9c, 0x3759, 0x2504, 0x37b5, 0x3b2b, 0x39cc, 0x3ae4, 0x38ec, 0x3751, 0x3841, 0x3b66, 0x2811, 0x34ac, 0x380a, 0x3666, 0x38f0, 0x3447, 0x33b7, 0x3bab, 0x388e, 0x2ce5, 0x307c, 0x3588, 0x3bf6, 0x38f9, 0x3b01, 0x340a, 0x3ae9, 0x3890, 0x3995, 0x3b9a, 0x3a50, 0x3751, 0x2cf7, 0x3a1b, 0x3b4b, 0x2474, 0x2eb0, 0x21b8, 0x38cd, 0x38d8, 0x35d6, 0x36f5, 0x240e, 0x29e9, 0x3686, 0x39d1, 0x3575, 0x3b7c, 0x3886, 0x2e72, 0x38d9, 0x34ac, 0x3816, 0x3b69, 0x3b7c, 0x2f10, 0x3428, +0x2aba, 0x3a08, 0x3acf, 0x364d, 0x344d, 0x3adf, 0x3526, 0x3a64, 0x3ad3, 0x34eb, 0x3943, 0x3894, 0x383a, 0x3bab, 0x3183, 0x3928, 0x3999, 0x300a, 0x35c5, 0x37a3, 0x384d, 0x3a84, 0x3959, 0x39ef, 0x360b, 0x350e, 0x36bf, 0x2f32, 0x3410, 0x383c, 0x3952, 0x33ee, 0x3899, 0x30a8, 0x3b1e, 0x30fa, 0x3b5c, 0x359d, 0x3802, 0x390f, 0x3815, 0x140e, 0x35f6, 0x3bfa, 0x38c4, 0x364f, 0x3b7f, 0x3b9f, 0x35a6, 0x3bf3, 0x3a2d, 0x3727, 0x39ab, 0x3944, 0x3ac5, 0x36df, 0x3b27, 0x3a1f, 0x3a69, 0x3994, 0x3673, 0x3b0c, 0x2f2f, 0x3303, 0x319f, 0x3567, 0x3753, 0x3b8f, 0x30f0, 0x3b7b, 0x36dc, 0x2941, 0x2b6c, 0x3ad2, 0x39cb, 0x3884, 0x3a58, 0x3a0c, 0x337a, 0x3a6e, 0x3b94, 0x37d1, 0x38f2, 0x3bf1, 0x3843, 0x2ae6, 0x384b, 0x3bf9, 0x36cb, 0x362e, 0x309a, 0x35ef, 0x36e6, 0x3484, 0x38a4, 0x3457, +0x370e, 0x341f, 0x39c0, 0x3527, 0x393f, 0x3438, 0x2685, 0x375f, 0x3803, 0x38eb, 0x39fe, 0x39b3, 0x380f, 0x3370, 0x2766, 0x3b26, 0x35b6, 0x38ab, 0x3890, 0x26a8, 0x3879, 0x3819, 0x3ae8, 0x3aae, 0x3385, 0x2944, 0x3966, 0x35cc, 0x3641, 0x3a73, 0x3b91, 0x35d5, 0x31f8, 0x34a1, 0x2bbe, 0x3419, 0x369f, 0x3289, 0x98e, 0x2fef, 0x3ad5, 0x3029, 0x3ae0, 0x3b11, 0x3a03, 0x2e69, 0x38ae, 0x2eed, 0x3871, 0x3848, 0x2f40, 0x3946, 0x38bb, 0x3851, 0x39f5, 0x2e9a, 0x38fc, 0x33e4, 0x349f, 0x3b2e, 0x3873, 0x388c, 0x395a, 0x3519, 0x3636, 0x2df3, 0x3bd5, 0x3a94, 0x2e66, 0x38af, 0x2e50, 0x3aff, 0x3b0e, 0x36c8, 0x187b, 0x3733, 0x3a82, 0x3baf, 0x35c4, 0x2f20, 0x3a36, 0x3266, 0x38c6, 0x37e7, 0x31c5, 0x3a24, 0x3805, 0x299b, 0x3b3b, 0x3163, 0x2f34, 0x30d5, 0x38a2, 0x392a, 0x32af, 0x3be7, +0x3377, 0x2cce, 0x36d4, 0x3852, 0x39ad, 0x30e1, 0x397f, 0x380e, 0x3bd1, 0x3ae1, 0x3413, 0x3aa8, 0x3bcf, 0x3b5f, 0x393f, 0x37cf, 0x391e, 0x38a4, 0x3a1c, 0x3778, 0x35ca, 0x3b75, 0x2fe7, 0x2f20, 0x2d50, 0x3b72, 0x37b3, 0x3ba6, 0x37f5, 0x3866, 0x3b8c, 0x382c, 0x2c3e, 0x39ba, 0x3be2, 0x3602, 0x3ba5, 0x38d5, 0x37ed, 0x36d6, 0x3b11, 0x34de, 0x3831, 0x39e8, 0x377f, 0x38e4, 0x363d, 0x2b40, 0x2c1e, 0x304c, 0x3bcc, 0x347f, 0x34d7, 0x313b, 0x3a3b, 0x1f13, 0x379e, 0x331f, 0x2d1c, 0x3778, 0x3550, 0x3a5f, 0x2fea, 0x3ab4, 0x32bb, 0x386c, 0x3690, 0x3787, 0x3a95, 0x367b, 0x385a, 0x3b3b, 0x3b49, 0x387c, 0x38f5, 0x2f80, 0x37d4, 0x3b87, 0x3881, 0x3996, 0x3547, 0x38d2, 0x3ab2, 0x3a1c, 0x3483, 0x3ae7, 0x394d, 0x333c, 0x34df, 0x39e5, 0x3aaf, 0x39e6, 0x30a3, 0x3a4d, 0x3890, 0x34cc, +0x3482, 0x3420, 0x2dcc, 0x310d, 0x38c5, 0x3b6a, 0x38ca, 0x3ba1, 0x3a7c, 0x318a, 0x2d61, 0x3635, 0x39e2, 0x3837, 0x39fe, 0x3842, 0x3574, 0x3992, 0x246c, 0x3565, 0x380e, 0x3712, 0x35e8, 0x3712, 0x38ed, 0x3307, 0x398f, 0x31f3, 0x3a5c, 0x3a73, 0x33ba, 0x3841, 0x35d0, 0x36df, 0x2ce4, 0x366e, 0x38a3, 0x251a, 0x399f, 0x372c, 0x359d, 0x3913, 0x397c, 0x2e64, 0x3861, 0x2d47, 0x3a98, 0x381d, 0x3b60, 0x3b4a, 0x381d, 0x3a0d, 0x3adb, 0x3869, 0x3353, 0x3939, 0x39ad, 0x3114, 0x3b12, 0x3860, 0x39fe, 0x3ba6, 0x247b, 0x3a0e, 0x3206, 0x3b0b, 0x3b25, 0x399f, 0x39b4, 0x3b42, 0x3a81, 0x36bb, 0x3522, 0x349e, 0x3494, 0x3081, 0x3978, 0x3768, 0x2edd, 0x37b4, 0x34d1, 0x3bf8, 0x3ad6, 0x3773, 0x3034, 0x381a, 0x3a52, 0x3771, 0x2b52, 0x3b3d, 0x3b20, 0x3bf8, 0x342f, 0x34f8, 0x3b72, 0x35b4, +0x3029, 0x36c3, 0x39c0, 0x393c, 0x30da, 0x3152, 0x3917, 0x3864, 0x390b, 0x3aea, 0x2c08, 0x36c6, 0x3bcd, 0x3375, 0x35bc, 0x3a2b, 0x3684, 0x368f, 0x3974, 0x37fd, 0x3901, 0x37a4, 0x3729, 0x35a0, 0x3ab0, 0x3251, 0x2857, 0x38ef, 0x2e96, 0x38d6, 0x2cda, 0x331c, 0x39a8, 0x3a44, 0x3a7c, 0x3aa8, 0x3851, 0x3974, 0x3b93, 0x3587, 0x3baf, 0x2eac, 0x37f4, 0x38a7, 0x292d, 0x2fc0, 0x330d, 0x3404, 0x3459, 0x3999, 0x385a, 0x396c, 0x3834, 0x2534, 0x3b44, 0x2ecf, 0x34f6, 0x3632, 0x2898, 0x3511, 0x3514, 0x3bd8, 0x3284, 0x3913, 0x34c4, 0x3967, 0x3845, 0x3ab4, 0x37eb, 0x30b8, 0x3629, 0x39c1, 0x2b02, 0x37f7, 0x31d5, 0x3812, 0x2c1b, 0x2a24, 0x3499, 0x36a7, 0x39c2, 0x3952, 0x351b, 0x3ba0, 0x3706, 0x3896, 0x3600, 0x22c8, 0x3077, 0x3839, 0x36ed, 0x38d4, 0x2fd0, 0x3a29, 0x370c, 0x3bfe, +0x335b, 0x311a, 0x39b1, 0x32aa, 0x3a7e, 0x387f, 0x3846, 0x3a3b, 0x379b, 0x34c4, 0x38dc, 0x2c37, 0x394c, 0x381d, 0x3113, 0x300e, 0x3922, 0x2ddd, 0x30ee, 0x3347, 0x3881, 0x2cb5, 0x311e, 0x3023, 0x384c, 0x3a29, 0x39b9, 0x391d, 0x36ff, 0x38d7, 0x3adf, 0x3892, 0x39d7, 0x3b41, 0x3a26, 0x35cf, 0x2fa9, 0x32ff, 0x3218, 0x34af, 0x3282, 0x2ff1, 0x3823, 0x3249, 0x35c7, 0x3baf, 0x3817, 0x39c2, 0x3799, 0x38e2, 0x39f5, 0x30d1, 0x3934, 0x3696, 0x351b, 0x3586, 0x3adf, 0x3747, 0x3aa0, 0x33d7, 0x3600, 0x3a9a, 0x3b09, 0x3a96, 0x364b, 0x38d2, 0x3b1e, 0x2793, 0x3555, 0x3b85, 0x3460, 0x3747, 0x3a29, 0x21c7, 0x3b24, 0x3b7a, 0x3902, 0x2cd6, 0x379b, 0x2970, 0x3910, 0x38c2, 0x3930, 0x3674, 0x39e6, 0x3ac8, 0x38e2, 0x3841, 0x37a2, 0x3a56, 0x3424, 0x3406, 0x385c, 0x3924, 0x3923, 0x36aa, +0x33bd, 0x37ed, 0x2b2e, 0x3bdc, 0x3ae1, 0x3055, 0x3b41, 0x31d7, 0x3880, 0x3125, 0x3015, 0x282f, 0x3bc1, 0x3bd1, 0x3684, 0x2ca5, 0x344e, 0x3bb1, 0x2094, 0x349a, 0x3211, 0x31bc, 0x3bd1, 0x2d9d, 0x3b07, 0x3b33, 0x350f, 0x3459, 0x3851, 0x36b4, 0x3a84, 0x3965, 0x3a34, 0x3b3c, 0x353d, 0x2ffd, 0x33e6, 0x376b, 0x3272, 0x2e28, 0x3aea, 0x3485, 0x39f4, 0x3955, 0x277e, 0x3bfc, 0x3526, 0x384e, 0x2485, 0x38b2, 0x3101, 0x2fbd, 0x359e, 0x36ba, 0x3aa5, 0x308a, 0x38d1, 0x3434, 0x3ae9, 0x3954, 0x33e0, 0x2ff9, 0x3aa9, 0x3721, 0x2cb5, 0x28e9, 0x3524, 0x3658, 0x3a2f, 0x315c, 0x38d9, 0x396e, 0x383b, 0x3a0a, 0x32fe, 0x3479, 0x2a64, 0x3162, 0x35dd, 0x350b, 0x2c86, 0x3878, 0x346b, 0x2719, 0x204d, 0x38a4, 0x3778, 0x3863, 0x3ae3, 0x3784, 0x3174, 0x3562, 0x3a26, 0x39c4, 0x31b9, 0x3600, +0x2cf9, 0x3a34, 0x3834, 0x346f, 0x3712, 0x29e1, 0x2cfe, 0x3873, 0x3b1f, 0x3bc2, 0x3936, 0x3551, 0x3b8e, 0x3742, 0x39b1, 0x36ab, 0x390f, 0x2a6d, 0x3805, 0x32b1, 0x2e34, 0x3898, 0x3375, 0x3997, 0x3845, 0x3b9a, 0x3bac, 0x3876, 0x392c, 0x3811, 0x3aad, 0x3700, 0x2ab0, 0x340c, 0x3ba5, 0x2d7c, 0x36c7, 0x38dc, 0x3745, 0x2c5c, 0x2d0d, 0x34ee, 0x339e, 0x3565, 0x3983, 0x302c, 0x2cd8, 0x3886, 0x3994, 0x3ba6, 0x38d1, 0x315d, 0x3083, 0x3860, 0x3769, 0x3bf0, 0x33cd, 0x2b0f, 0x360c, 0x380a, 0x3442, 0x3b5b, 0x36eb, 0x3938, 0x3b69, 0x3283, 0x301b, 0x2fb0, 0x3b51, 0x3aa6, 0x2b81, 0x2cfd, 0x3aaa, 0x38fc, 0x3a73, 0x3232, 0x3614, 0x3963, 0x3b01, 0x3b9c, 0x3889, 0x372a, 0x20de, 0x3629, 0x36c0, 0x31ca, 0x3b87, 0x3543, 0x38bf, 0x3aae, 0x37d6, 0x365e, 0x35a4, 0x35da, 0x3962, 0x3741, +0x2910, 0x3478, 0x38b6, 0x355e, 0x3a0a, 0x3969, 0x36b2, 0x3bcd, 0x2633, 0x36d6, 0x395c, 0x39d9, 0x3505, 0x34cf, 0x337f, 0x3560, 0x2f11, 0x3a3d, 0x3386, 0x39ac, 0x38d3, 0x2dbe, 0x3908, 0x3599, 0x2d42, 0x38eb, 0x2d1e, 0x3bb5, 0x3550, 0x377e, 0x387f, 0x2f07, 0x3b2f, 0x37a5, 0x390a, 0x3902, 0x38e8, 0x345a, 0x38a5, 0x378b, 0x2e8d, 0x3ab3, 0x3a78, 0x34d9, 0x341a, 0x3387, 0x289a, 0x2db0, 0x384f, 0x3be6, 0x24e4, 0x3b02, 0x3af5, 0x34b2, 0x2af4, 0x3ae6, 0x337d, 0x3875, 0x34f6, 0x262d, 0x3488, 0x3a14, 0x2cb8, 0x357c, 0x3b96, 0x3208, 0x3969, 0x2bae, 0x3b77, 0x3515, 0x345d, 0x39c9, 0x354d, 0x38cf, 0x3b12, 0x3af9, 0x3a3c, 0x2f0f, 0x3a0b, 0x3075, 0x3859, 0x2045, 0x382e, 0x3901, 0x159e, 0x30fd, 0x2b73, 0x31e0, 0x3bf4, 0x3a46, 0x3afd, 0x2bbe, 0x274d, 0x39dd, 0x2bc7, 0x3450, +0x2ace, 0x3a96, 0x3bae, 0x386d, 0x3a6a, 0x2a87, 0x3913, 0x3618, 0x2cce, 0x391e, 0x3346, 0x3a02, 0x3981, 0x3afe, 0x34da, 0x3aa3, 0x3846, 0x303e, 0x377a, 0x3bc0, 0x2d77, 0x2f1a, 0x3916, 0x3b20, 0x2896, 0x3b93, 0x3a74, 0x24dd, 0x3396, 0x3b7c, 0x3a9b, 0x3b17, 0x366a, 0x1e78, 0x3b60, 0x3153, 0x3844, 0x2aa8, 0x37ab, 0x352c, 0x3455, 0x3a4d, 0x3a7a, 0x3a2f, 0x35bb, 0x358f, 0x3781, 0x2288, 0x2e69, 0x39c4, 0x3534, 0x3ba4, 0x3b8a, 0x398b, 0x3998, 0x392a, 0x3bd5, 0x3a5b, 0x31e5, 0x39af, 0x3a90, 0x3ac1, 0x374e, 0x3791, 0x3aa4, 0x3519, 0x3b0a, 0x398e, 0x3bae, 0x339e, 0x35fe, 0x3ab9, 0x2a73, 0x38b3, 0x388c, 0x3530, 0x2fe3, 0x37b5, 0x3188, 0x3b00, 0x31b2, 0x34de, 0x2f74, 0x397b, 0x3a17, 0x2df1, 0x357a, 0x3882, 0x3958, 0x39f1, 0x3ba4, 0x3864, 0x36f8, 0x33d2, 0x390f, 0x395b, +0x3a33, 0x39ea, 0x3846, 0x3502, 0x29a0, 0x38da, 0x3a62, 0x39c8, 0x3a32, 0x3987, 0x2807, 0x3895, 0x3621, 0x3981, 0x368f, 0x25b3, 0x312e, 0x3bfe, 0x38c8, 0x396d, 0x3b4b, 0x380a, 0x3b65, 0x36ca, 0x3954, 0x3ae0, 0x32f0, 0x33b6, 0x3920, 0x35fd, 0x39b3, 0x2f18, 0x3876, 0x396c, 0x39eb, 0x3b39, 0x3ab4, 0x3b9b, 0x2504, 0x3621, 0x3534, 0x2ea1, 0x33e7, 0x3af5, 0x3965, 0x33ed, 0x38d8, 0x37cc, 0x3682, 0x311b, 0x36e0, 0x2805, 0x3502, 0x38ac, 0x2dfa, 0x39d6, 0x3a41, 0x38e1, 0x3992, 0x38da, 0x3a54, 0x356b, 0x3701, 0x389d, 0x35de, 0x3b8e, 0x3b4c, 0x302b, 0x36b5, 0x2dd3, 0x397b, 0x2e07, 0x3645, 0x3267, 0x38ca, 0x1b3c, 0x3a0b, 0x3821, 0x3881, 0x3a2b, 0x3980, 0x3711, 0x2b68, 0x3a27, 0x38ca, 0x3057, 0x3a56, 0x386a, 0x3bb8, 0x38ca, 0x3152, 0x3683, 0x39c4, 0x2cf6, 0x3351, 0x3903, +0x342c, 0x30b8, 0x3704, 0x38b1, 0x3811, 0x3860, 0x3916, 0x381f, 0x3892, 0x3349, 0x1e6c, 0x30e3, 0x38c8, 0x3b7b, 0x39d3, 0x30df, 0x3bf3, 0x2f61, 0x37fa, 0x396a, 0x3bbe, 0x3872, 0x38c1, 0x3ad8, 0x3624, 0x3536, 0x35bb, 0x3b72, 0x222a, 0x31e0, 0x34d3, 0x2ee5, 0x386d, 0x3a1e, 0x28b7, 0x21e6, 0x37ef, 0x3263, 0x3ae0, 0x211e, 0x38c4, 0x3ba4, 0x380b, 0x3757, 0x34f5, 0x3a18, 0x36fa, 0x3844, 0x39fd, 0x3aa1, 0x3be2, 0x33b5, 0x3523, 0x386c, 0x20a5, 0x314f, 0x3a95, 0x3a54, 0x3bdd, 0x35de, 0x3a9f, 0x398e, 0x3a70, 0x2a6d, 0x3538, 0x31d5, 0x38b4, 0x2199, 0x2bf6, 0x3a4a, 0x3057, 0x31e5, 0x3b51, 0x31d8, 0x398b, 0x2c16, 0x3571, 0x2a31, 0x39cf, 0x3507, 0x3874, 0x3b15, 0x2e8a, 0x36f5, 0x2f3b, 0x3be1, 0x3a1b, 0x38cb, 0x3759, 0x1e24, 0x3b85, 0x3998, 0x30f7, 0x2d7d, 0x3a8a, 0x3378, +0x37a0, 0x3b60, 0x32f2, 0x34cc, 0x3ba4, 0x3b40, 0x35b1, 0x1a3c, 0x239a, 0x3ab0, 0x38cf, 0x3b26, 0x3990, 0x39d7, 0x3b7e, 0x3980, 0x2b0a, 0x3985, 0x3862, 0x3a53, 0x3409, 0x27e2, 0x38f7, 0x3a2f, 0x2dd9, 0x34f1, 0x2dda, 0x395e, 0x375b, 0x3086, 0x3053, 0x3baf, 0x365b, 0x38b6, 0x3a51, 0x34e4, 0x356d, 0x35f9, 0x3b6e, 0x38aa, 0x2d39, 0x34ac, 0x27d5, 0x38c8, 0x280c, 0x1999, 0x36da, 0x31ca, 0x3bf6, 0x31be, 0x37a2, 0x3296, 0x3902, 0x2f66, 0x2f5e, 0x3867, 0x26c6, 0x32c4, 0x3412, 0x2dd7, 0x34a6, 0x3b89, 0x354b, 0x345e, 0x33cd, 0x35ad, 0x3804, 0x3583, 0x37ea, 0x3bcb, 0x30d0, 0x38e3, 0x3100, 0x2c8f, 0x3be4, 0x35e4, 0x35cb, 0x3a5e, 0x3a50, 0x3837, 0x3540, 0x3a4f, 0x3b11, 0x32fb, 0x3949, 0x3870, 0x36e9, 0x3382, 0x3aca, 0x3b72, 0x3b03, 0x3a4d, 0x369f, 0x389c, 0x3a02, 0x27e4, +0x3954, 0x36ba, 0x25e2, 0x3847, 0x357e, 0x38da, 0x361d, 0x3b50, 0x2a0f, 0x3af9, 0x37f1, 0x3831, 0x3bc1, 0x3aaf, 0x32de, 0x3980, 0x3877, 0x3a73, 0x2944, 0x3b22, 0x30e3, 0x357e, 0x3987, 0x26ed, 0x3a5c, 0x3a5e, 0x381a, 0x3ae1, 0x3bc4, 0x3b3e, 0x3579, 0x3835, 0x3ba0, 0x37d2, 0x38b9, 0x2c78, 0x3875, 0x3808, 0x346b, 0x38c6, 0x3970, 0x342d, 0x3104, 0x2b1a, 0x3aa6, 0x3b64, 0x3a9f, 0x36f1, 0x2cac, 0x3b98, 0x3ab5, 0x3ab7, 0x3685, 0x33a5, 0x30ae, 0x3689, 0x3bd4, 0x39c1, 0x3bb8, 0x3566, 0x37bb, 0x2ee2, 0x3036, 0x3a93, 0x35d2, 0x3a4a, 0x3be5, 0x324b, 0x357c, 0x3b9a, 0x3759, 0x39f8, 0x397c, 0x3a80, 0x39d9, 0x39f4, 0x2fbd, 0x390e, 0x3865, 0x39f1, 0x3b87, 0x37c1, 0x3a3f, 0x348c, 0x368b, 0x2714, 0x2a26, 0x32a9, 0x30dc, 0x3a35, 0x371a, 0x3b96, 0x3569, 0x388b, 0x3775, 0x3604, +0x386a, 0x391b, 0x3826, 0x38fd, 0x3156, 0x3bae, 0x3755, 0x38df, 0x391c, 0x3b3b, 0x3aa5, 0x3870, 0x3b20, 0x3a0b, 0x3a85, 0x395f, 0x3a77, 0x3264, 0x2c48, 0x3a8f, 0x3815, 0x3acc, 0x3b2d, 0x3be0, 0x39ac, 0x3a41, 0x3bc0, 0x39f6, 0x3524, 0x3024, 0x2ae0, 0x3b6f, 0x366f, 0x38e7, 0x3a0c, 0x38de, 0x3a12, 0x380b, 0x38ec, 0x3222, 0x308c, 0x3871, 0x381f, 0x3be5, 0x3a0f, 0x3ac7, 0x36fe, 0x3406, 0x331f, 0x354c, 0x379d, 0x373b, 0x380f, 0x37c2, 0x3822, 0x3b8f, 0x3871, 0x3444, 0x3357, 0x3052, 0x35a3, 0x353b, 0x3a18, 0x3b60, 0x3b2e, 0x39f1, 0x1bf8, 0x3b34, 0x3a45, 0x373b, 0x311e, 0x3b4f, 0x3bb9, 0x2f13, 0x390b, 0x38eb, 0x3a53, 0x3712, 0x3ad6, 0x3b2e, 0x3a91, 0x3171, 0x361b, 0x3ad7, 0x3577, 0x37d3, 0x31f3, 0x26d3, 0x2995, 0x3060, 0x3960, 0x38d3, 0x3a9b, 0x1aa9, 0x381e, 0x349b, +0x3485, 0x3be7, 0x3a58, 0x39bb, 0x36de, 0x3456, 0x2a1e, 0x2ed2, 0x2e40, 0x3041, 0x38f1, 0x3beb, 0x3aea, 0x3049, 0x3117, 0x3bf2, 0x3707, 0x3bf3, 0x38e3, 0x3b27, 0x3a88, 0x3b5a, 0x34a6, 0x3b51, 0x39bc, 0x3841, 0x3a1d, 0x3867, 0x35e7, 0x3b46, 0x2916, 0x3a6b, 0x3956, 0x3825, 0x352f, 0x3b66, 0x3975, 0x3637, 0x3b44, 0x356e, 0x387b, 0x34eb, 0x3a4b, 0x384f, 0x3b29, 0x3ad3, 0x3a09, 0x3542, 0x3a39, 0x3551, 0x3889, 0x3429, 0x3637, 0x3bc8, 0x1aee, 0x3b20, 0x3b0a, 0x3994, 0x2fea, 0x3b4b, 0x381d, 0x3758, 0x397e, 0x3861, 0x25cc, 0x391a, 0x28d2, 0x2524, 0x3424, 0x3a6a, 0x34f3, 0x3aca, 0x3a40, 0x34e1, 0x3647, 0x3623, 0x34e9, 0x3786, 0x38a6, 0x3be1, 0x34d6, 0x350c, 0x3bf3, 0x368b, 0x39bb, 0x34e0, 0x39b0, 0x342e, 0x360d, 0x34e3, 0x3867, 0x389a, 0x38d7, 0x31f9, 0x3565, 0x2e93, +0x39a8, 0x3b31, 0x384a, 0x3370, 0x316f, 0x3815, 0x35b5, 0x3594, 0x3bbd, 0x3afe, 0x39be, 0x2276, 0x3805, 0x3b69, 0x3964, 0x33c0, 0x3a3b, 0x3231, 0x3358, 0x2b23, 0x3645, 0x3b99, 0x3735, 0x2255, 0x3595, 0x2f45, 0x381a, 0x257c, 0x3ac7, 0x38e9, 0x381b, 0x36d0, 0x3132, 0x3814, 0x3a17, 0x3ad4, 0x2abf, 0x3887, 0x3424, 0x2e96, 0x3361, 0x341a, 0x38cf, 0x3448, 0x287f, 0x3b1c, 0x3b09, 0x3983, 0x3a6e, 0x375d, 0x3458, 0x383c, 0x3196, 0x3b2f, 0x1cbe, 0x31e6, 0x29c4, 0x3745, 0x395c, 0x3aac, 0x3b2f, 0x38f1, 0x320c, 0x3a9d, 0x375f, 0x3b01, 0x32ef, 0x3531, 0x36d3, 0x3726, 0x3642, 0x2c76, 0x3916, 0x342a, 0x3548, 0x39d7, 0x39de, 0x3c00, 0x3b1e, 0x391a, 0x35e8, 0x3b2b, 0x3645, 0x3a81, 0x3876, 0x37e2, 0x36c8, 0x3b62, 0x3302, 0x1bad, 0x3961, 0x3beb, 0x39a7, 0x3611, 0x381b, 0x3266, +0x3b25, 0x384e, 0x3940, 0x2891, 0x3a32, 0x3828, 0x34f3, 0x3652, 0x3178, 0x2839, 0x3aa2, 0x2a96, 0x2df4, 0x347b, 0x28ad, 0x3699, 0x36ba, 0x32ad, 0x39e5, 0x1c06, 0x340e, 0x3968, 0x387c, 0x3bc6, 0x3839, 0x39d4, 0x2645, 0x38ae, 0x3ae3, 0x367e, 0x3090, 0x34fe, 0x3b6b, 0x2e64, 0x36bb, 0x33ef, 0x2c5a, 0x38ae, 0x36db, 0x3a6e, 0x38ac, 0x39eb, 0x387f, 0x1b0d, 0x3b7c, 0x3461, 0x34cc, 0x3b4f, 0x3045, 0x38e9, 0x35fa, 0x3625, 0x33e7, 0x35f4, 0x3939, 0x35dd, 0x2b8e, 0x3574, 0x3b6a, 0x3921, 0x38de, 0x393e, 0x29f5, 0x2e2c, 0x3a10, 0x39a3, 0x32c2, 0x38e5, 0x38c7, 0x30c3, 0x3b6e, 0x34b3, 0x36f9, 0x38bb, 0x3b24, 0x359f, 0x3308, 0x2d54, 0x3a03, 0x39ee, 0x3a7b, 0x3076, 0x2ab0, 0x3b94, 0x32a7, 0x39b8, 0x3b78, 0x28ce, 0x375d, 0x3209, 0x3385, 0x38f1, 0x38ca, 0x3b51, 0x374e, 0x3593, +0x33ca, 0x33b7, 0x3663, 0x36c1, 0x3831, 0x347e, 0x39f8, 0x34bf, 0x39dc, 0x39e6, 0x2fa9, 0x32d9, 0x3a58, 0x39e5, 0x3116, 0x3026, 0x3b59, 0x3b82, 0x3a92, 0x316a, 0x38c3, 0x2770, 0x38e7, 0x380b, 0x3b2b, 0x380d, 0x32d6, 0x3602, 0x39df, 0x382c, 0x383c, 0x3b76, 0x3647, 0x38f3, 0x36b4, 0x3693, 0x251e, 0x3b19, 0x357e, 0x37d4, 0x37ab, 0x3aee, 0x349f, 0x32ec, 0x3401, 0x3bcc, 0x3145, 0x3845, 0x3b76, 0x38a9, 0x37f4, 0x343b, 0x3933, 0x38fe, 0x3af8, 0x3178, 0x392b, 0x3aed, 0x2f64, 0x3992, 0x39f8, 0x34fe, 0x3737, 0x3a24, 0x3bf9, 0x3a31, 0x3a60, 0x37b6, 0x39ad, 0x3ba5, 0x381d, 0x384d, 0x3702, 0x39d8, 0x379e, 0x38ba, 0x3a79, 0x391a, 0x34ce, 0x2d57, 0x3a7e, 0x35f0, 0x382f, 0x3937, 0x3698, 0x3acc, 0x34ca, 0x382d, 0x35f7, 0x34f7, 0x3b90, 0x374d, 0x380f, 0x2e14, 0x3ac3, 0x3583, +0x36fe, 0x38aa, 0x3abd, 0x3750, 0x2f2d, 0x3906, 0x3aed, 0x32e7, 0x3b42, 0x3823, 0x265f, 0x17f9, 0x248a, 0x38ee, 0x3a11, 0x3b21, 0x35a9, 0x2dd7, 0x35dc, 0x38ed, 0x3860, 0x3989, 0x3229, 0x333d, 0x2c78, 0x30fa, 0x2d3c, 0x3a04, 0x39c2, 0x3895, 0x3a67, 0x2f53, 0x3583, 0x39bd, 0x3a03, 0x3afd, 0x3892, 0x3889, 0x39e5, 0x3825, 0x39dd, 0x3a23, 0x3644, 0x31d1, 0x3875, 0x3a46, 0x38c1, 0x390c, 0x394d, 0x262a, 0x2823, 0x2c94, 0x3645, 0x39f9, 0x3366, 0x3710, 0x2f70, 0x348c, 0x2fa3, 0x3b0e, 0x3241, 0x3491, 0x386f, 0x38b6, 0x34e1, 0x30fc, 0x32cc, 0x37be, 0x3519, 0x334b, 0x389c, 0x34c1, 0x388b, 0x38cf, 0x3980, 0x2463, 0x3a34, 0x32ff, 0x3a3c, 0x3932, 0x3b47, 0x39ab, 0x3a9c, 0x27b6, 0x2d90, 0x35d2, 0x39d2, 0x3a5d, 0x3bf2, 0x3a5f, 0x38e1, 0x3b81, 0x3865, 0x3a31, 0x3b03, 0x3906, +0x35bf, 0x3818, 0x373b, 0x3491, 0x34a9, 0x3b40, 0x2cda, 0x381b, 0x2a00, 0x396e, 0x347a, 0x2d46, 0x2fa1, 0x3bef, 0x3acd, 0x362f, 0x2a7f, 0x3a38, 0x3346, 0x3889, 0x3061, 0x3b20, 0x3836, 0x35a4, 0x3a7d, 0x3487, 0x381a, 0x381f, 0x3977, 0x3862, 0x312a, 0x315e, 0x3841, 0x3453, 0x21f5, 0x363d, 0x2ddb, 0x35bb, 0x3bb4, 0x3b36, 0x382a, 0x36d8, 0x3764, 0x3b9e, 0x26b4, 0x29ce, 0x3451, 0x33ba, 0x37fb, 0x3a4f, 0x2181, 0x35cc, 0x3288, 0x2de2, 0x3a13, 0x2dd5, 0x326d, 0x3731, 0x3931, 0x3b0d, 0x34c6, 0x36bd, 0x38fe, 0x3a0a, 0x283b, 0x38c0, 0x3806, 0x39fa, 0x39a6, 0x39f8, 0x3b09, 0x36dc, 0x385c, 0x329a, 0x3a89, 0x2dbb, 0x39ee, 0x3b65, 0x3436, 0x37e3, 0x3a27, 0x3910, 0x3b43, 0x398c, 0x2efa, 0x3467, 0x39ce, 0x38ae, 0x3567, 0x3484, 0x38e0, 0x327e, 0x2c32, 0x39c1, 0x3b63, 0x35ac, +0x35c1, 0x2d9e, 0x38af, 0x32e3, 0x347f, 0x3855, 0x3527, 0x3850, 0x3b55, 0x3baa, 0x392a, 0x37d9, 0x39d3, 0x3960, 0x3ab0, 0x2ccb, 0x2da9, 0x3990, 0x3b87, 0x2c1c, 0x397d, 0x28f6, 0x397d, 0x3944, 0x30be, 0x3ba4, 0x2f6d, 0x34d4, 0x3416, 0x39e7, 0x398f, 0x3958, 0x3b7b, 0x3a1d, 0x31e6, 0x27fe, 0x3ba0, 0x33b2, 0x3080, 0x35a9, 0x3800, 0x37f6, 0x3965, 0x3594, 0x322e, 0x3b27, 0x3bdb, 0x3b7a, 0x38a6, 0x1848, 0x3b61, 0x3842, 0x3ad2, 0x390f, 0x3b17, 0x3715, 0x3798, 0x33cb, 0x33db, 0x383f, 0x394b, 0x30cb, 0x3bbb, 0x366d, 0x3b5b, 0x38ca, 0x36cb, 0x3558, 0x39f6, 0x3776, 0x388a, 0x35d1, 0x3475, 0x3509, 0x3742, 0x3b15, 0x3ad4, 0x3182, 0x39e7, 0x3b5a, 0x35dd, 0x3751, 0x32b8, 0x349f, 0x3996, 0x3a4c, 0x35e9, 0x266e, 0x37f2, 0x3be3, 0x2525, 0x26af, 0x3282, 0x3810, 0x2cf1, 0x383a, +0x3aa3, 0x399c, 0x3630, 0x38c8, 0x3203, 0x19a2, 0x35e2, 0x38fe, 0x38a2, 0x3b63, 0x3318, 0x231d, 0x3999, 0x3ae9, 0x3132, 0x21b2, 0x2a77, 0x394e, 0x2cf4, 0x3890, 0x38a6, 0x30ff, 0x3be2, 0x3231, 0x3b72, 0x3487, 0x3496, 0x351c, 0x38d6, 0x3944, 0x3949, 0x3b7b, 0x362f, 0x37cd, 0x38f6, 0x3a10, 0x3a93, 0x31be, 0x3b8e, 0x360a, 0x3567, 0x3803, 0x3b16, 0x3b59, 0x3a4e, 0x3770, 0x2d73, 0x3312, 0x382f, 0x30fa, 0x3921, 0x339d, 0x2222, 0x3049, 0x3b4e, 0x3b67, 0x3b07, 0x3b31, 0x34e8, 0x3684, 0x3a09, 0x389b, 0x3999, 0x39d1, 0x3765, 0x37bc, 0x3732, 0x3b35, 0x3819, 0x36ef, 0x38fc, 0x3665, 0x3b96, 0x3015, 0x3847, 0x35e6, 0x3167, 0x34ba, 0x3794, 0x3a6a, 0x35d8, 0x30f4, 0x34c7, 0x3bce, 0x3903, 0x3bf3, 0x3a72, 0x3828, 0x381a, 0x3981, 0x3925, 0x39a1, 0x35f4, 0x35dd, 0x3954, 0x2bc5, +0x3884, 0x2d8e, 0x2a49, 0x383f, 0x15af, 0x3a4c, 0x3af6, 0x3ad8, 0x3847, 0x3b07, 0x3a15, 0x3bdd, 0x3a8c, 0x2caf, 0x364a, 0x3825, 0x2b2c, 0x3a97, 0x33b8, 0x3ac4, 0x347e, 0x36f7, 0x36ed, 0x3131, 0x2bea, 0x3841, 0x3880, 0x39e4, 0x30c3, 0x3b62, 0x32ba, 0x34f0, 0x34c7, 0x396a, 0x3722, 0x384d, 0x3165, 0x3a71, 0x34bf, 0x3018, 0x372c, 0x3876, 0x347f, 0x3be2, 0x117d, 0x3a2c, 0x3917, 0x3895, 0x3a3b, 0x2f92, 0x3b65, 0x3af3, 0x39b3, 0x290c, 0x301b, 0x3a9e, 0x39ef, 0x38d0, 0x34e8, 0x336a, 0x37e8, 0x3685, 0x376e, 0x3b8b, 0x3b4c, 0x35a7, 0x3919, 0x3504, 0x3b59, 0x3a85, 0x2edc, 0x3b32, 0x36bc, 0x21fa, 0x357b, 0x38a6, 0x380d, 0x3969, 0x348c, 0x39cd, 0x2d9a, 0x3818, 0x380e, 0x39f4, 0x35ce, 0x3823, 0x3a29, 0x2c1a, 0x3846, 0x3811, 0x2f33, 0x38a1, 0x382b, 0x355a, 0x3961, 0x3a97, +0x352f, 0x3bec, 0x3a27, 0x3888, 0x39d2, 0x38d8, 0x314c, 0x38c8, 0x3779, 0x2f99, 0x3a5b, 0x3971, 0x3b93, 0x368c, 0x3904, 0x35f5, 0x277f, 0x34f9, 0x3368, 0x3824, 0x3a74, 0x3843, 0x3284, 0x35aa, 0x35b4, 0x372a, 0x35ca, 0x3b2b, 0x3877, 0x37cb, 0x3110, 0x33ad, 0x3ba3, 0x3bba, 0x34e4, 0x36ab, 0x3984, 0x2aac, 0x39ec, 0x38ae, 0x3931, 0x3410, 0x333e, 0x2c45, 0x3482, 0x3868, 0x392c, 0x384e, 0x3678, 0x38ee, 0x395b, 0x38f8, 0x3194, 0x33e2, 0x2af5, 0x397c, 0x32ca, 0x32c3, 0x3913, 0x3309, 0x3bb1, 0x3253, 0x3640, 0x2cc8, 0x3385, 0x28d0, 0x385e, 0x39fd, 0x38cc, 0x3bf6, 0x332e, 0x3be1, 0x3835, 0x3b3e, 0x38cc, 0x38ff, 0x365f, 0x3a09, 0x3a32, 0x3b84, 0x3596, 0x37f3, 0x3431, 0x3af6, 0x3bec, 0x38cd, 0x35ab, 0x3af5, 0x3359, 0x3762, 0x3844, 0x374c, 0x3980, 0x3886, 0x2e62, 0x35cc, +0x3b76, 0x3b5f, 0x2434, 0x35fc, 0x38d5, 0x3095, 0x3944, 0x380e, 0x349f, 0x39d7, 0x3755, 0x3768, 0x3b3a, 0x34ce, 0x3bef, 0x365a, 0x3987, 0x3897, 0x3509, 0x3984, 0x32f8, 0x3b7b, 0x37b9, 0x3a4b, 0x2c86, 0x369a, 0x396d, 0x2d21, 0x3477, 0x39af, 0x3b60, 0x3680, 0x39d7, 0x31d8, 0x3b8a, 0x3aed, 0x3a65, 0x3710, 0x39d3, 0x3bf1, 0x331f, 0x20c0, 0x34f2, 0x34cc, 0x3934, 0x38c5, 0x396b, 0x3894, 0x38fa, 0x33c9, 0x3408, 0x3340, 0x360e, 0x36e6, 0x3942, 0x2f3c, 0x3be4, 0x38f4, 0x35a1, 0x2cf7, 0x3931, 0x3911, 0x39e7, 0x2dcc, 0x3951, 0x334c, 0x3b00, 0x39ad, 0x2370, 0x35ea, 0x3402, 0x37d6, 0x377d, 0x3652, 0x3b56, 0x2cc4, 0x3b1f, 0x35af, 0x3920, 0x3423, 0x398a, 0x35e2, 0x39f1, 0x3ab5, 0x3ae2, 0x345c, 0x31ef, 0x38ef, 0x3bb1, 0x3937, 0x2ae8, 0x3221, 0x3ae9, 0x390d, 0x3b2f, 0x3048, +0x3047, 0x3767, 0x37f7, 0x3bfa, 0x3b33, 0x3a2d, 0x362c, 0x3a93, 0x3b66, 0x391a, 0x31c7, 0x3282, 0x39b9, 0x3454, 0x37b7, 0x3019, 0x3a9a, 0x37b5, 0x2dcd, 0x3618, 0x34db, 0x3471, 0x3b35, 0x3684, 0x385c, 0x38bf, 0x3bd7, 0x3a44, 0x3130, 0x38c8, 0x30cf, 0x37bb, 0x3bcc, 0x3669, 0x3b27, 0x3949, 0x355f, 0x314a, 0x383d, 0x3a20, 0x381c, 0x3bcf, 0x3282, 0x39f3, 0x3a49, 0x3ad9, 0x34aa, 0x3add, 0x3938, 0x3bbe, 0x3650, 0x37f2, 0x2c79, 0x39c4, 0x3304, 0x3a8c, 0x3162, 0x3520, 0x3637, 0x39e3, 0x2478, 0x3803, 0x34dd, 0x3104, 0x37ee, 0x3861, 0x38e8, 0x356c, 0x3be0, 0x3633, 0x395a, 0x3afb, 0x378b, 0x3b8d, 0x2f97, 0x37df, 0x31dd, 0x3475, 0x34f7, 0x36ef, 0x3966, 0x2c50, 0x38a1, 0x2720, 0x39f3, 0x3805, 0x3310, 0x3656, 0x3571, 0x3bd9, 0x3bc0, 0x391c, 0x38d6, 0x2562, 0x1fc8, 0x3524, +0x362a, 0x3a8c, 0x3830, 0x39c7, 0x38ca, 0x3af3, 0x3602, 0x3700, 0x3773, 0x3a78, 0x38f3, 0x22be, 0x3822, 0x2eac, 0x3748, 0x32ee, 0x2a0e, 0x38ed, 0x3830, 0x3401, 0x3971, 0x3a35, 0x3984, 0x3a86, 0x3501, 0x2fe8, 0x3ba3, 0x3587, 0x3895, 0x3858, 0x2d46, 0x3724, 0x3b84, 0x39b6, 0x3a17, 0x3b1f, 0x38a9, 0x33de, 0x3723, 0x367d, 0x3bc4, 0x3817, 0x3b1e, 0x35f1, 0x3abb, 0x373d, 0x2abe, 0x3206, 0x3872, 0x3946, 0x3898, 0x33b2, 0x25fb, 0x36ae, 0x256a, 0x390e, 0x3b3b, 0x34d8, 0x36ba, 0x389b, 0x377a, 0x3b0e, 0x32a6, 0x26f9, 0x39e1, 0x327e, 0x2d58, 0x3bd3, 0x3a7f, 0x38b9, 0x3811, 0x29b7, 0x2816, 0x38f9, 0x3b64, 0x39b6, 0x3a29, 0x30a4, 0x3989, 0x3b73, 0x307a, 0x37c7, 0x372d, 0x3830, 0x390e, 0x315b, 0x335d, 0x3929, 0x3917, 0x374c, 0x34af, 0x3531, 0x34e9, 0x3bcf, 0x3761, 0x3b62, +0x34e5, 0x39e3, 0x3b35, 0x2a57, 0x3688, 0x2f0c, 0x3b87, 0x3bdd, 0x358d, 0x381a, 0x39ae, 0x2f79, 0x394f, 0x3708, 0x3560, 0x3ada, 0x3480, 0x3af5, 0x3bd8, 0x39d1, 0x3795, 0x2a29, 0x3b0a, 0x3515, 0x3858, 0x3ab4, 0x3968, 0x3660, 0x37b2, 0x3601, 0x36ae, 0x3229, 0x3383, 0x2c30, 0x3a41, 0x3b0d, 0x33ef, 0x3b6b, 0x366f, 0x3b33, 0x3a82, 0x3841, 0x3a89, 0x3bea, 0x3542, 0x328a, 0x3bc9, 0x34f2, 0x3ac0, 0x3067, 0x3311, 0x38f4, 0x23d0, 0x3964, 0x38b1, 0x390c, 0x3a9f, 0x28bb, 0x3ac1, 0x39e6, 0x31dd, 0x2f55, 0x3a19, 0x3a51, 0x3a38, 0x2841, 0x381a, 0x3938, 0x36ea, 0x3be0, 0x3b35, 0x39c1, 0x2fef, 0x37ec, 0x389f, 0x3b72, 0x37b9, 0x3bf7, 0x325d, 0x38e9, 0x333d, 0x39ce, 0x2e79, 0x3682, 0x37c1, 0x38b9, 0x3990, 0x37fd, 0x3302, 0x32a6, 0x2a69, 0x3831, 0x2b59, 0x3b48, 0x35b4, 0x2aed, +0x37e2, 0x340a, 0x3279, 0x3723, 0x397d, 0x3839, 0x39ec, 0x3025, 0x3803, 0x3b54, 0x3a70, 0x3b7d, 0x2f2a, 0x315c, 0x35ed, 0x3ace, 0x3845, 0x3bee, 0x3870, 0x3492, 0x380e, 0x3431, 0x3a47, 0x3a33, 0x38ae, 0x3a40, 0x3908, 0x33c5, 0x38db, 0x3b24, 0x3847, 0x32a3, 0x3959, 0x3a36, 0x35c4, 0x3960, 0x396f, 0x3786, 0x38ef, 0x36e7, 0x35c3, 0x3a28, 0x3893, 0x3b2c, 0x2e03, 0x374d, 0x3489, 0x3bf4, 0x38fb, 0x35b2, 0x38c1, 0x3a0f, 0x394f, 0x35e0, 0x34bd, 0x3bcc, 0x3be1, 0x315f, 0x2a41, 0x308d, 0x2e5d, 0x3a02, 0x2e99, 0x3b1a, 0x3b6c, 0x3ba1, 0x38da, 0x395a, 0x3877, 0x39ec, 0x3855, 0x2fd6, 0x2857, 0x2e1d, 0x3677, 0x3034, 0x3136, 0x3880, 0x327c, 0x38a3, 0x243e, 0x3921, 0x3b69, 0x3bca, 0x376e, 0x3998, 0x3b02, 0x3a2b, 0x35c0, 0x3985, 0x3b14, 0x38d5, 0x347b, 0x3adc, 0x3639, 0x3b9f, +0x3b50, 0x3334, 0x38b6, 0x3ae5, 0x3b39, 0x35fa, 0x2752, 0x3ba6, 0x3439, 0x389a, 0x2888, 0x39be, 0x3710, 0x3922, 0x3bbf, 0x3726, 0x2d91, 0x22ef, 0x398f, 0x3465, 0x3ba8, 0x3ad4, 0x39a0, 0x3a55, 0x3a2f, 0x387d, 0x3788, 0x3a19, 0x3926, 0x38a0, 0x383c, 0x3adc, 0x3b84, 0x3518, 0x322f, 0x3773, 0x3a74, 0x31b7, 0x3901, 0x3361, 0x3959, 0x2d8e, 0x3575, 0x2faf, 0x2ccf, 0x39ad, 0x339b, 0x3bcc, 0x3be6, 0x267e, 0x3582, 0x3973, 0x3b23, 0x3513, 0x3946, 0x38c8, 0x3b09, 0x383a, 0x34a6, 0x3aaa, 0x36f8, 0x34af, 0x368d, 0x3beb, 0x361f, 0x357f, 0x3b7f, 0x3ada, 0x37bb, 0x3986, 0x358c, 0x3ac2, 0x3448, 0x3ace, 0x2896, 0x377a, 0x3a2d, 0x3992, 0x381a, 0x389d, 0x3a18, 0x3bec, 0x37ac, 0x384d, 0x3107, 0x3323, 0x36d0, 0x371d, 0x3a21, 0x3b07, 0x2ef3, 0x342a, 0x39e6, 0x3037, 0x39a5, 0x3510, +0x3b81, 0x2559, 0x3914, 0x3883, 0x3534, 0x33e2, 0x29d9, 0x3b82, 0x3bf7, 0x390c, 0x31e3, 0x3af0, 0x2a26, 0x3803, 0x34ec, 0x356f, 0x3aed, 0x3af7, 0x34fc, 0x39f9, 0x3ad2, 0x39f6, 0x3abf, 0x397d, 0x2d55, 0x27f6, 0x3b03, 0x3335, 0x3872, 0x34df, 0x3801, 0x39c9, 0x326f, 0x3a15, 0x3810, 0x22c5, 0x359e, 0x366c, 0x3493, 0x39b2, 0x38c5, 0x3a6d, 0x39b9, 0x33dc, 0x34d7, 0x3b0b, 0x378d, 0x39ed, 0x3566, 0x396a, 0x368e, 0x3a4f, 0x3571, 0x3831, 0x3290, 0x3232, 0x39f4, 0x3915, 0x377d, 0x3af9, 0x3460, 0x31da, 0x23e6, 0x315c, 0x2b67, 0x366b, 0x2ccf, 0x38f8, 0x39c0, 0x37cc, 0x322b, 0x3979, 0x2529, 0x34b5, 0x3759, 0x360c, 0x3180, 0x3962, 0x30d2, 0x394f, 0x3ac5, 0x3b52, 0x371b, 0x3588, 0x3437, 0x34e5, 0x3a58, 0x3bb8, 0x3bd6, 0x3858, 0x3915, 0x3bcc, 0x3835, 0x30c9, 0x259f, 0x3051, +0x399d, 0x3044, 0x382b, 0x3449, 0x3b82, 0x3a4a, 0x38b5, 0x383f, 0x1c23, 0x3b6f, 0x3941, 0x35ff, 0x395e, 0x26c0, 0x3474, 0x39b9, 0x39da, 0x2aca, 0x380a, 0x39c3, 0x393e, 0x39e9, 0x3b77, 0x3a64, 0x345b, 0x3712, 0x38e4, 0x3a97, 0x3451, 0x3a3d, 0x379f, 0x3a01, 0x3642, 0x3b7e, 0x30b6, 0x35d6, 0x39b6, 0x2cb3, 0x383a, 0x3566, 0x3a76, 0x3418, 0x31ac, 0x3ae2, 0x350d, 0x3af6, 0x382c, 0x37b8, 0x339c, 0x3969, 0x379b, 0x36b8, 0x3444, 0x382a, 0x2fab, 0x3727, 0x3b3c, 0x2e19, 0x3643, 0x30d4, 0x284c, 0x388b, 0x3a47, 0x35cc, 0x3945, 0x3470, 0x3ae6, 0x39e5, 0x36fd, 0x38ed, 0x344b, 0x3b7c, 0x39d0, 0x3833, 0x3a38, 0x34f4, 0x3046, 0x3757, 0x371d, 0x25a8, 0x386d, 0x2f66, 0x38a2, 0x2e32, 0x39e3, 0x1969, 0x313d, 0x35f5, 0x3804, 0x28f5, 0x2e8a, 0x342c, 0x3bdc, 0x3ad3, 0x3259, 0x3622, +0x325e, 0x3912, 0x398b, 0x3b70, 0x39cd, 0x3931, 0x2f75, 0x3542, 0x357a, 0x315f, 0x3ac4, 0x374f, 0x32dd, 0x386c, 0x35f1, 0x39b7, 0x38b7, 0x3b2f, 0x3a7b, 0x3b5c, 0x3bef, 0x37f6, 0x3047, 0x386a, 0x3903, 0x3607, 0x3946, 0x3911, 0x399d, 0x3be8, 0x2d83, 0x3a3c, 0x369b, 0x204f, 0x3a4c, 0x3185, 0x38c8, 0x39c3, 0x3075, 0x3542, 0x361d, 0x250f, 0x385d, 0x3485, 0x1ac2, 0x37af, 0x3ab4, 0x2dd4, 0x3595, 0x36de, 0x3add, 0x3564, 0x3566, 0x3b8d, 0x2d55, 0x3629, 0x2c8a, 0x3280, 0x3801, 0x329a, 0x3b20, 0x3b42, 0x3bf0, 0x2f27, 0x3866, 0x2caf, 0x3b40, 0x3922, 0x351e, 0x3925, 0x3b42, 0x3968, 0x39db, 0x3b77, 0x3877, 0x384a, 0x3058, 0x3aaf, 0x3a70, 0x3b33, 0x3685, 0x3b0a, 0x3a8d, 0x2d38, 0x35bb, 0x31b2, 0x36e8, 0x3a79, 0x367e, 0x3a09, 0x3a74, 0x3b9f, 0x3367, 0x37a5, 0x38a3, 0x3949, +0x2bea, 0x2b88, 0x3965, 0x3112, 0x3b79, 0x391b, 0x38a9, 0x38dc, 0x36c4, 0x3ab1, 0x3677, 0x346e, 0x3b44, 0x34b7, 0x3301, 0x381d, 0x3a3a, 0x3254, 0x3b6b, 0x389a, 0x3a65, 0x379d, 0x3178, 0x2df2, 0x3380, 0x385d, 0x383c, 0x36ef, 0x3243, 0x3b7c, 0x38cb, 0x39f5, 0x3144, 0x3336, 0x3a1b, 0x3b54, 0x3983, 0x3b54, 0x3861, 0x34dd, 0x3996, 0x3a96, 0x34ec, 0x2e9e, 0x36db, 0x392f, 0x3164, 0x34df, 0x38fc, 0x35e5, 0x3432, 0x2a1b, 0x39d0, 0x385b, 0x2d25, 0x3405, 0x3809, 0x36f6, 0x3947, 0x3a23, 0x3ba7, 0x3a6f, 0x394f, 0x381c, 0x387e, 0x3aa3, 0x3586, 0x38ba, 0x3aed, 0x2f65, 0x3b77, 0x3921, 0x3843, 0x3652, 0x35ef, 0x39ea, 0x399a, 0x3a10, 0x3b1e, 0x39af, 0x3bac, 0x2f72, 0x3755, 0x38c7, 0x348e, 0x3aaf, 0x32cd, 0x3210, 0x3a78, 0x3462, 0x35a1, 0x327d, 0x38a4, 0x3569, 0x39fe, 0x3809, +0x39d6, 0x3985, 0x2211, 0x36f1, 0x36da, 0x34e8, 0x3bd7, 0x3aa3, 0x370b, 0x2e90, 0x3973, 0x3754, 0x3994, 0x31fe, 0x35e6, 0x3b87, 0x3967, 0x34d6, 0x3a01, 0x3935, 0x3afb, 0x3078, 0x3b9f, 0x31cf, 0x2496, 0x3ab7, 0x345e, 0x31a2, 0x3548, 0x3892, 0x38d8, 0x38e4, 0x3908, 0x340c, 0x3114, 0x37a7, 0x3a05, 0x37db, 0x39ee, 0x3b9e, 0x37e4, 0x375e, 0x27b0, 0x27ee, 0x3b89, 0x3bd6, 0x3911, 0x329d, 0x3596, 0x36b7, 0x38ea, 0x37b5, 0x353e, 0x368e, 0x3a25, 0x3989, 0x29cb, 0x36e2, 0x3b80, 0x390f, 0x3978, 0x359a, 0x3150, 0x3865, 0x3827, 0x2ebb, 0x3afc, 0x3ad8, 0x291b, 0x3b1f, 0x3036, 0x3b4b, 0x3411, 0x2450, 0x3928, 0x382f, 0x3968, 0x32af, 0x36e1, 0x34a0, 0x3076, 0x3289, 0x284d, 0x39ca, 0x3765, 0x2fc3, 0x3ad0, 0x2a90, 0x3a9e, 0x347f, 0x367c, 0x3bee, 0x3982, 0x380e, 0x3623, 0x33d5, +0x33eb, 0x315b, 0x3b82, 0x3901, 0x39d8, 0x3409, 0x394f, 0x38aa, 0x34e5, 0x3b0e, 0x30d8, 0x37db, 0x37cb, 0x32e0, 0x37de, 0x3896, 0x3b9f, 0x3919, 0x3869, 0x3762, 0x3698, 0x2dc6, 0x31ce, 0x3200, 0x36fa, 0x396f, 0x3b96, 0x3890, 0x3ac3, 0x331a, 0x3619, 0x3ac2, 0x2f37, 0x39e4, 0x39a0, 0x2130, 0x391c, 0x3a27, 0x3b7a, 0x3b49, 0x3ba8, 0x3a95, 0x2c78, 0x3a1a, 0x3591, 0x354a, 0x36c1, 0x38ba, 0x392f, 0x37a5, 0x3898, 0x3a9d, 0x3b8f, 0x389f, 0x3a6e, 0x389d, 0x36de, 0x3abe, 0x3669, 0x38f1, 0x391a, 0x3b6f, 0x2987, 0x30aa, 0x3ae7, 0x3709, 0x389a, 0x39a1, 0x34a0, 0x3a1a, 0x3bd0, 0x35d7, 0x3936, 0x3bc9, 0x327a, 0x3a1b, 0x31c8, 0x3be6, 0x3926, 0x3654, 0x317b, 0x39d2, 0x3b54, 0x39ae, 0x2d1e, 0x31a0, 0x30dd, 0x362a, 0x2c28, 0x3020, 0x3585, 0x30c7, 0x3af0, 0x3ad3, 0x3b2b, 0x382f, +0x384d, 0x3ace, 0x3a7d, 0x300d, 0x3a39, 0x3ac5, 0x2b3b, 0x2c05, 0x2dfc, 0x3bee, 0x3b46, 0x343f, 0x3a00, 0x33be, 0x2d9e, 0x3790, 0x3467, 0x3a11, 0x39e5, 0x3943, 0x34b2, 0x393c, 0x2e29, 0x34ae, 0x34dd, 0x2491, 0x3ac2, 0x3279, 0x3a46, 0x318d, 0x389a, 0x2f39, 0x1cb3, 0x37cf, 0x31c3, 0x318a, 0x3172, 0x3b66, 0x357a, 0x3896, 0x3b6b, 0x3a47, 0x3a43, 0x33bc, 0x35f4, 0x39f5, 0x39c1, 0x34fe, 0x39a2, 0x367b, 0x3b19, 0x3bef, 0x3461, 0x39a9, 0x3a35, 0x2bfa, 0x34b4, 0x38fa, 0x3203, 0x332b, 0x39ef, 0x3a2a, 0x3bc2, 0x39ef, 0x364e, 0x3a8c, 0x2fa8, 0x2612, 0x3406, 0x391a, 0x39ff, 0x3bba, 0x3971, 0x2637, 0x3664, 0x3a2b, 0x3053, 0x3bf4, 0x3b2c, 0x3b1f, 0x27e3, 0x3ba0, 0x38ee, 0x388f, 0x3a17, 0x328e, 0x3bcd, 0x306a, 0x3909, 0x38f2, 0x3a16, 0x380b, 0x2e11, 0x38b5, 0x36ba, 0x387a, +0x3a4f, 0x38f9, 0x3862, 0x3525, 0x38ae, 0x34bd, 0x3a07, 0x3881, 0x2e59, 0x3969, 0x3a7a, 0x3b75, 0x2619, 0x399d, 0x314a, 0x39fe, 0x3af1, 0x3a0c, 0x2875, 0x39c6, 0x3887, 0x3ab2, 0x36e8, 0x3497, 0x396f, 0x3567, 0x2ef7, 0x3845, 0x2cd3, 0x3b99, 0x30cc, 0x300d, 0x3a4f, 0x3453, 0x386a, 0x39d5, 0x3beb, 0x392e, 0x3766, 0x3b37, 0x3b57, 0x355c, 0x37fb, 0x3a36, 0x343a, 0x37e1, 0x1f1c, 0x218b, 0x3820, 0x345b, 0x3bd5, 0x329f, 0x3679, 0x3b0f, 0x28d4, 0x3891, 0x3b51, 0x3937, 0x3585, 0x3936, 0x3ace, 0x30fa, 0x384e, 0x3a16, 0x34bf, 0x34f4, 0x3a08, 0x3916, 0x2ed6, 0x3740, 0x382c, 0x3446, 0x3b77, 0x3af7, 0x3a42, 0x284f, 0x366c, 0x36ea, 0x3680, 0x326a, 0x3b5c, 0x3678, 0x3bee, 0x3853, 0x36cc, 0x35c2, 0x2f28, 0x34f6, 0x31d8, 0x38b6, 0x3a7b, 0x3b96, 0x3056, 0x3afc, 0x351a, 0x3570, +0x3439, 0x3a20, 0x3b65, 0x362f, 0x38f8, 0x30e5, 0x3974, 0x38cf, 0x3b7e, 0x3b2d, 0x3828, 0x382c, 0x3979, 0x349c, 0x3b6f, 0x3887, 0x3a3a, 0x3bec, 0x3aee, 0x3abd, 0x3510, 0x3a50, 0x2dcb, 0x31d9, 0x39ed, 0x3a5b, 0x39d6, 0x3a89, 0x3511, 0x3199, 0x39a3, 0x3803, 0x3a02, 0x3bdd, 0x3588, 0x35cb, 0x3a69, 0x3bab, 0x23ea, 0x3750, 0x3b92, 0x3bfc, 0x359f, 0x3bdb, 0x3a6b, 0x3b07, 0x355d, 0x3a0a, 0x39cd, 0x1e5e, 0x38c2, 0x3965, 0x34f4, 0x37d0, 0x35b2, 0x34c8, 0x3ad5, 0x34f4, 0xba8, 0x3b62, 0x380b, 0x3b8f, 0x3ae7, 0x30c0, 0x38a0, 0x3341, 0x323a, 0x32d1, 0x32a8, 0x3413, 0x38bb, 0x37cf, 0x397e, 0x3884, 0x2952, 0x2b54, 0x3b8a, 0x3bd4, 0x3522, 0x3b0f, 0x3888, 0x38e4, 0x38d1, 0x3bfa, 0x3adc, 0x3b72, 0x3bc5, 0x33de, 0x39f6, 0x390e, 0x2fd3, 0x3875, 0x261c, 0x2a54, 0x315d, 0x388a, +0x36a4, 0x38d4, 0x3405, 0x3761, 0x37ae, 0x3650, 0x3065, 0x3b0b, 0x283f, 0x3a67, 0x360c, 0x3b9c, 0x2eea, 0x2e99, 0x349f, 0x3849, 0x3b43, 0x3744, 0x3834, 0x3852, 0x36e7, 0x3835, 0x3499, 0x2ee3, 0x3aa2, 0x3823, 0x31c2, 0x380c, 0x354c, 0x37f5, 0x324c, 0x302b, 0x34bf, 0x26e6, 0x39a0, 0x3068, 0x2e1d, 0x3061, 0x3b24, 0x33a7, 0x3ada, 0x38a5, 0x37c3, 0x39a0, 0x3aa0, 0x382f, 0x21e9, 0x3a36, 0x3a8b, 0x395a, 0x343d, 0x3837, 0x361d, 0x33af, 0x3b87, 0x399b, 0x3904, 0x344a, 0x3a10, 0x3b08, 0x348c, 0x2fc7, 0x3239, 0x390b, 0x384c, 0x34c6, 0x2873, 0x357c, 0x32b6, 0x3ae5, 0x3bb4, 0x30f2, 0x39e7, 0x2b6a, 0x3969, 0x39ab, 0x3316, 0x3638, 0x3a22, 0x3505, 0x35f5, 0x3b42, 0x3372, 0x33e5, 0x322a, 0x3a8f, 0x36be, 0x3982, 0x341d, 0x3510, 0x3714, 0x3871, 0x3a56, 0x3739, 0x3457, 0x3822, +0x35ee, 0x3bb5, 0x357c, 0x3a66, 0x3bfe, 0x3469, 0x37e0, 0x39c0, 0x2c91, 0x3805, 0x31c4, 0x39e4, 0x32f9, 0x3140, 0x2ef9, 0x389c, 0x38e8, 0x3404, 0x2d4b, 0x36fd, 0x32a8, 0x397e, 0x3939, 0x2c8f, 0x327d, 0x341a, 0x35eb, 0x36bb, 0x307c, 0x3a9c, 0x3b25, 0x3b83, 0x31b7, 0x377c, 0x3450, 0x34af, 0x2d66, 0x36ab, 0x3520, 0x3648, 0x2e5e, 0x3adc, 0x3422, 0x3b9e, 0x36b4, 0x35ac, 0x3a7b, 0x36ae, 0x39c5, 0x2c2d, 0x3b8f, 0x3998, 0x3a82, 0x2cb5, 0x3a0b, 0x34aa, 0x3895, 0x3811, 0x3545, 0x35b5, 0x39c4, 0x3b43, 0x39ae, 0x355a, 0x2db8, 0x3b7f, 0x3655, 0x354d, 0x34ee, 0x30fb, 0x3a7c, 0x338b, 0x3b6c, 0x2c39, 0x38bb, 0x2de3, 0x3114, 0x38bf, 0x2e01, 0x3483, 0x2964, 0x3828, 0x2da3, 0x3a05, 0x3add, 0x3477, 0x3bf6, 0x3a7a, 0x38a8, 0x34be, 0x2d01, 0x2f9b, 0x29d1, 0x3995, 0x38a1, 0x3632, +0x3629, 0x3451, 0x31ca, 0x3b76, 0x382e, 0x3aad, 0x3a3a, 0x3aed, 0x3471, 0x3b38, 0x2a7b, 0x38f4, 0x3975, 0x383f, 0x30ba, 0x2cbb, 0x3adc, 0x31c2, 0x2ef0, 0x270a, 0x3734, 0x30a5, 0x3481, 0x3764, 0x3a6c, 0x3845, 0x2bfd, 0x3407, 0x3be1, 0x35ba, 0x3163, 0x332f, 0x38ae, 0x3361, 0x38a5, 0x3556, 0x265c, 0x38ac, 0x3869, 0x2d4e, 0x300a, 0x39bd, 0x38ef, 0x372d, 0x2d3e, 0x3a3a, 0x30a2, 0x1e66, 0x3bc7, 0x38c5, 0x3966, 0x3ace, 0x3a34, 0x2d9c, 0x3845, 0x30f3, 0x2c21, 0x3405, 0x2c4f, 0x3629, 0x3bcb, 0x315b, 0x2e94, 0x3399, 0x39a7, 0x3696, 0x377d, 0x36a0, 0x312d, 0x366f, 0x379a, 0x25a6, 0x3808, 0x2da5, 0x2bbf, 0x381d, 0x3a94, 0x3577, 0x31ba, 0x344e, 0x385f, 0x3687, 0x38a7, 0x2a84, 0x399a, 0x317a, 0x3a59, 0x3467, 0x3af3, 0x3b1d, 0x33c8, 0x35cf, 0x3af4, 0x2c27, 0x38ab, 0x2850, +0x3be1, 0x3a7a, 0x363b, 0x3aa9, 0x3af3, 0x37f1, 0x3815, 0x3a54, 0x2d86, 0x3b67, 0x3780, 0x3b73, 0x3755, 0x38a3, 0x3435, 0x2df3, 0x3bc1, 0x32c0, 0x2da1, 0x395b, 0x32a7, 0x377e, 0x3ba5, 0x3ace, 0x3971, 0x3095, 0x3a2b, 0x3780, 0x3a68, 0x3979, 0x392b, 0x38ca, 0x385a, 0x3a82, 0x385f, 0x36e3, 0x3318, 0x2aad, 0x3670, 0x3ba1, 0x3bd0, 0x3a29, 0x3116, 0x390c, 0x3756, 0x3aa6, 0x39f6, 0x31a7, 0x3be8, 0x389c, 0x3248, 0x3608, 0x357a, 0x37bd, 0x37a4, 0x3456, 0x3563, 0x31a3, 0x398a, 0x3940, 0x364b, 0x2273, 0x3847, 0x356c, 0x3574, 0x382e, 0x3b27, 0x39d7, 0x311b, 0x3825, 0x3abb, 0x3bb9, 0x3b33, 0x386f, 0x3b02, 0x3b39, 0x2453, 0x3888, 0x34e1, 0x318d, 0x36df, 0x3ba2, 0x2ba7, 0x3943, 0x3586, 0x38f6, 0x3a2a, 0x3b90, 0x3b00, 0x39f3, 0x3108, 0x3533, 0x3bb7, 0x3264, 0x3aa8, 0x3669, +0x3748, 0x3a5c, 0x3959, 0x3c00, 0x3b73, 0x30f8, 0x2e58, 0x37d5, 0x3836, 0x2e91, 0x3603, 0x38f2, 0x3647, 0x3855, 0x3a9e, 0x3851, 0x24fd, 0x3990, 0x38a2, 0x3aae, 0x314a, 0x39d4, 0x3afd, 0x3a0d, 0x3a94, 0x38d4, 0x3970, 0x35d2, 0x3899, 0x2e93, 0x388f, 0x3850, 0x367f, 0x3bbf, 0x3581, 0x3a5d, 0x261c, 0x3bb3, 0x3594, 0x3988, 0x3b5b, 0x3b6e, 0x37a7, 0x39fa, 0x3a8e, 0x3629, 0x3b1d, 0x3068, 0x38d0, 0x3859, 0x3514, 0x3865, 0x33e0, 0x39f5, 0x20bf, 0x3a8f, 0x2ff9, 0x3bc8, 0x3abf, 0x324d, 0x2b88, 0x3856, 0x38a6, 0x3bd7, 0x38d8, 0x3722, 0x39ee, 0x3947, 0x3794, 0x36a5, 0x3acd, 0x1f3f, 0x3497, 0x39d0, 0x3947, 0x38c7, 0x3a3f, 0x3661, 0x36dd, 0x2c46, 0x3bee, 0x2885, 0x3430, 0x38f7, 0x27b3, 0x3134, 0x3265, 0x2666, 0x3930, 0x3514, 0x2ec0, 0x3985, 0x37ef, 0x3a11, 0x3a70, 0x3578, +0x3a6e, 0x333d, 0x36c8, 0x33e0, 0x27ae, 0x2954, 0x36cc, 0x37db, 0x382f, 0x38cd, 0x3944, 0x3a4b, 0x3671, 0x3966, 0x33a3, 0x3882, 0x3739, 0x349b, 0x39b6, 0x3573, 0x2cbf, 0x374e, 0x2cc0, 0x3af4, 0x34ca, 0x314c, 0x3bb4, 0x3554, 0x3a8b, 0x335f, 0x2d08, 0x387b, 0x37c4, 0x34a9, 0x388d, 0x3884, 0x332e, 0x36de, 0x3590, 0x3803, 0x33dc, 0x28bf, 0x386a, 0x39e4, 0x3b9d, 0x3aff, 0x3b0b, 0x393a, 0x37fa, 0x3577, 0x3bfb, 0x3b19, 0x3422, 0x34cd, 0x39d4, 0x39dc, 0x31b9, 0x38f4, 0x3871, 0x2e80, 0x3b90, 0x3513, 0x363a, 0x39f9, 0x332f, 0x391a, 0x39f9, 0x38fd, 0x3b16, 0x382c, 0x3b91, 0x2fa4, 0x34db, 0x30f4, 0x37c5, 0x392c, 0x3b6f, 0x3835, 0x35ac, 0x379d, 0x3b39, 0x3924, 0x2f94, 0x34b0, 0x3149, 0x307c, 0x3a7e, 0x3656, 0x398a, 0x390f, 0x27f6, 0x31a6, 0x3a80, 0x3582, 0x3863, 0x3ae1, +0x3265, 0x257e, 0x360a, 0x2fc7, 0x3ba9, 0x3515, 0x3a80, 0x3056, 0x37c5, 0x2a16, 0x3915, 0x357a, 0x3556, 0x337e, 0x3af8, 0x3a9f, 0x35aa, 0x3903, 0x2ec4, 0x3751, 0x3a1b, 0x39d2, 0x3b76, 0x34ef, 0x3b5a, 0x394c, 0x3851, 0x3b4b, 0x3bb2, 0x3b80, 0x3bef, 0x3a09, 0x3af7, 0x3902, 0x3711, 0x3704, 0x374b, 0x3325, 0x39ee, 0x385c, 0x32a7, 0x281b, 0x2193, 0x3418, 0x35ac, 0x3800, 0x3a5f, 0x3bf9, 0x37f4, 0x3819, 0x3891, 0x3534, 0x366b, 0x3b04, 0x35b1, 0x3969, 0x3bc5, 0x3856, 0x2e11, 0x3784, 0x3388, 0x36eb, 0x35e3, 0x32f8, 0x2a50, 0x33ed, 0x3989, 0x34b8, 0x3be4, 0x3844, 0x34b0, 0x355e, 0x3a56, 0x3431, 0x345d, 0x389a, 0x366e, 0x3902, 0x3858, 0x38e1, 0x388c, 0x3565, 0x33c4, 0x3b68, 0x372f, 0x307c, 0x3bb9, 0x359f, 0x3a41, 0x3bcf, 0x3bb3, 0x2d88, 0x32f8, 0x354c, 0x3b9e, 0x3ae5, +0x3059, 0x3359, 0x382d, 0x3a91, 0x3bed, 0x28fb, 0x3885, 0x3a3c, 0x39e9, 0x39f7, 0x351e, 0x37e3, 0x3bad, 0x2834, 0x37d1, 0x3839, 0x3ad1, 0x39f3, 0x362f, 0x35ba, 0x3312, 0x3b21, 0x3536, 0x3bfd, 0x3518, 0x201e, 0x2022, 0x3b03, 0x3910, 0x39ce, 0x363c, 0x3b25, 0x3b4f, 0x3be8, 0x3655, 0x38dc, 0x344b, 0x3372, 0x3939, 0x372a, 0x3b86, 0x384e, 0x3b9e, 0x32c3, 0x3bd5, 0x3041, 0x3051, 0x257f, 0x3a6c, 0x3379, 0x2f52, 0x37de, 0x37ac, 0x3734, 0x3447, 0x3bbc, 0x3aaf, 0x38eb, 0x384a, 0x3ad6, 0x3a49, 0x3944, 0x2cf5, 0x38a3, 0x398b, 0x3b0e, 0x307a, 0x3504, 0x3728, 0x3500, 0x2f6e, 0x2e34, 0x3aa4, 0x39f7, 0x3831, 0x3902, 0x3509, 0x2d20, 0x3b99, 0x3860, 0x3901, 0x3420, 0x3944, 0x3926, 0x3acd, 0x3786, 0x3b09, 0x3ad7, 0x2cb6, 0x3a8e, 0x2233, 0x3892, 0x398a, 0x272e, 0x3853, 0x389c, +0x3a14, 0x3877, 0x3320, 0x34b7, 0x3a85, 0x34da, 0x38db, 0x3758, 0x3b8d, 0x3aa8, 0x3766, 0x34db, 0x3a54, 0x3806, 0x31ef, 0x33ab, 0x38bd, 0x3778, 0x3543, 0x36ec, 0x36fa, 0x2fc5, 0x3676, 0x350c, 0x390f, 0x3b8b, 0x394a, 0x38bb, 0x31d9, 0x3bf1, 0x36ce, 0x35dc, 0x38c2, 0x3910, 0x3944, 0x38f8, 0x37f6, 0x3b9b, 0x3574, 0x31ed, 0x244e, 0x28ef, 0x34fa, 0x3398, 0x3912, 0x365f, 0x3bb2, 0x38f7, 0x3af2, 0x3500, 0x3a8e, 0x3a55, 0x39be, 0x2471, 0x34b0, 0x336f, 0x380a, 0x3ae7, 0x34f5, 0x35f9, 0x3227, 0x263d, 0x3385, 0x372f, 0x2046, 0x3a80, 0x3b0a, 0x35cf, 0x38e1, 0x38b4, 0x2eb6, 0x353f, 0x314f, 0x3a4c, 0x3a52, 0x3b84, 0x39b8, 0x367d, 0x3b22, 0x310a, 0x3611, 0x37ad, 0x3496, 0x2e9c, 0x3215, 0x3b29, 0x38cf, 0x343f, 0x380a, 0x36b0, 0x3a08, 0x2c90, 0x36e4, 0x354a, 0x3b56, 0x37a1, +0x39f1, 0x340d, 0x3b34, 0x309a, 0x3074, 0x24a8, 0x261c, 0x3a16, 0x3846, 0x35dd, 0x2830, 0x3a03, 0x3729, 0x3766, 0x3461, 0x33db, 0x3b4a, 0x33eb, 0x3813, 0x34cd, 0x3875, 0x3a95, 0x31ef, 0x38b2, 0x3acc, 0x34d9, 0x3542, 0x37f4, 0x3937, 0x3858, 0x3997, 0x3538, 0x338b, 0x35ff, 0x3613, 0x3809, 0x3878, 0x3870, 0x2df0, 0x39f4, 0x3863, 0x30ce, 0x38ae, 0x384f, 0x3b24, 0x3045, 0x297f, 0x3b58, 0x3123, 0x2b6b, 0x3bc5, 0x388a, 0x3003, 0x3077, 0x34dc, 0x39cb, 0x3bcf, 0x3b16, 0x344c, 0x3aac, 0x364a, 0x399b, 0x3a68, 0x3583, 0x34c3, 0x3bc0, 0x3b1d, 0x3a15, 0x387f, 0x3756, 0x382e, 0x3a58, 0x18c3, 0x3a2e, 0x3b81, 0x34f8, 0x3802, 0x3631, 0x3920, 0x340c, 0x3b6c, 0x39a7, 0x1a4a, 0x38cc, 0x38ec, 0x3912, 0x3bd6, 0x3358, 0x3275, 0x3954, 0x3b39, 0x3674, 0x3a2e, 0x387c, 0x3a86, 0x34c2, +0x3585, 0x36c0, 0x3762, 0x380b, 0x31cf, 0x3992, 0x365a, 0x3b73, 0x35e8, 0x3925, 0x3b3b, 0x37cc, 0x3823, 0x2cd7, 0x2a80, 0x3a41, 0x37a5, 0x3479, 0x36eb, 0x29cc, 0x317d, 0x38b8, 0x32f8, 0x355e, 0x392c, 0x3b16, 0x3275, 0x306a, 0x22a8, 0x35fb, 0x32d4, 0x3a42, 0x32ba, 0x2443, 0x3898, 0x3164, 0x38ff, 0x3ba6, 0x35ae, 0x396a, 0x3a5c, 0x3922, 0x1df2, 0x3943, 0x309b, 0x3a53, 0x3439, 0x3802, 0x32bc, 0x34f6, 0x3957, 0x3a59, 0x36c9, 0x3b3c, 0x3aa0, 0x3903, 0x2b86, 0x380e, 0x2f83, 0x397a, 0x3a11, 0x3ab3, 0x38b9, 0x3a54, 0x3191, 0x2eb7, 0x3549, 0x3a39, 0x375b, 0x38d8, 0x346a, 0x3a3e, 0x35ff, 0x305b, 0x3b1d, 0x3882, 0x39da, 0x3a92, 0x2f74, 0x38f1, 0x3b8e, 0x361f, 0x38d4, 0x365b, 0x367c, 0x2658, 0x3762, 0x3905, 0x393f, 0x34c8, 0x3830, 0x39d1, 0x35e1, 0x23b7, 0x3b28, 0x39f4, +0x27a7, 0x38a0, 0x3954, 0x32c7, 0x3572, 0x25b3, 0x384f, 0x38fb, 0x3a34, 0x3b79, 0x3af6, 0x34c8, 0x3a0d, 0x3906, 0x3981, 0x3a97, 0x3b17, 0x34d5, 0x2dc4, 0x3401, 0x21b1, 0x3999, 0x3898, 0x2def, 0x3747, 0x300c, 0x3afe, 0x34d6, 0x36ac, 0x3b5f, 0x3952, 0x2a90, 0x34b4, 0x3a77, 0x3b03, 0x385e, 0x33d0, 0x37a9, 0x36a7, 0x231e, 0x3534, 0x35f6, 0x30e1, 0x3873, 0x2299, 0x387e, 0x3499, 0x30dc, 0x383a, 0x256e, 0x387f, 0x3395, 0x33c1, 0x38ac, 0x38fe, 0x383b, 0x36c3, 0x392b, 0x3812, 0x3168, 0x3b18, 0x386a, 0x3b17, 0x3981, 0x3577, 0x3874, 0x308a, 0x38d1, 0x3a7b, 0x361f, 0x38bf, 0x29c5, 0x2d56, 0x343b, 0x33bc, 0x38ab, 0x3a82, 0x2feb, 0x3885, 0x3531, 0x3588, 0x2ff6, 0x3851, 0x3a08, 0x36e7, 0x3b8c, 0x3182, 0x3a4e, 0x3849, 0x3509, 0x3909, 0x380e, 0x3692, 0x2e1e, 0x2f7f, 0x35eb, +0x3816, 0x2f7d, 0x3b42, 0x38c2, 0x3884, 0x3096, 0x39b7, 0x3868, 0x3879, 0x3606, 0x3111, 0x36d8, 0x39eb, 0x3bcf, 0x3ac4, 0x38bd, 0x3877, 0x3967, 0x398b, 0x39fe, 0x3514, 0x3139, 0x30a8, 0x3431, 0x2d75, 0x3a3a, 0x3b80, 0x3917, 0x307a, 0x2c42, 0x3143, 0x3954, 0x36ff, 0x381f, 0x37dd, 0x3b2f, 0x3972, 0x317f, 0x397b, 0x350d, 0x382e, 0x2ed6, 0x375c, 0x3462, 0x36ff, 0x364c, 0x39ba, 0x36c7, 0x3bea, 0x3211, 0x354e, 0x2d30, 0x1f03, 0x35f6, 0x3a24, 0x3576, 0x38ce, 0x38e5, 0x3bbe, 0x38a8, 0x3831, 0x39d0, 0x3772, 0x3ba5, 0x314f, 0x2572, 0x39d2, 0x2de3, 0x1d7a, 0x360b, 0x399a, 0x3863, 0x3a18, 0x3141, 0x3a7d, 0x391b, 0x3957, 0x33f7, 0x3801, 0x392a, 0x3a5a, 0x3a51, 0x3841, 0x2a4a, 0x3786, 0x355f, 0x28d9, 0x35cc, 0x2dfc, 0x302a, 0x2c60, 0x3b50, 0x3abe, 0x382f, 0x35ed, 0x3a8d, +0x3b1b, 0x3525, 0x3725, 0x2e88, 0x304b, 0x3920, 0x3962, 0x3908, 0x352b, 0x3667, 0x3880, 0x3692, 0x38bd, 0x317c, 0x30f3, 0x3beb, 0x302b, 0x326c, 0x3a36, 0x3a30, 0x39b6, 0x2a61, 0x34f1, 0x22d6, 0x39b6, 0x310f, 0x2dff, 0x38d1, 0x3700, 0x3412, 0x38de, 0x394f, 0x2de4, 0x2ed8, 0x3beb, 0x3a50, 0x3526, 0x246d, 0x361e, 0x2e4b, 0x3272, 0x3b5a, 0x3805, 0x3a98, 0x3653, 0x3abc, 0x301d, 0x399f, 0x2dae, 0x3ac4, 0x39dc, 0x3403, 0x3109, 0x2d85, 0x381e, 0x36b6, 0x348d, 0x35c6, 0x3b5f, 0x3b3a, 0x35c0, 0x36de, 0x38bc, 0x3308, 0x39a0, 0x39cf, 0x3456, 0x3a80, 0x39fc, 0x311a, 0x3bb1, 0x3a38, 0x3b9d, 0x3a27, 0x3912, 0x3377, 0x38a9, 0x34c6, 0x34ec, 0x35fa, 0x378c, 0x387e, 0x3686, 0x372c, 0x388d, 0x3ad6, 0x3bd3, 0x3b26, 0x3bd6, 0x3b91, 0x31e3, 0x381e, 0x353b, 0x3a90, 0x2cd6, 0x3047, +0x33df, 0x35c8, 0x396a, 0x321c, 0x286f, 0x2daa, 0x39aa, 0x3a83, 0x36ff, 0x3476, 0x3a33, 0x37d6, 0x2c5f, 0x3a23, 0x38cb, 0x36a9, 0x331b, 0x24ec, 0x3960, 0x2d61, 0x3a61, 0x330f, 0x3937, 0x2e70, 0x3797, 0x399d, 0x26dc, 0x320e, 0x342c, 0x3b32, 0x22bc, 0x3466, 0x3447, 0x3896, 0x31b7, 0x3b22, 0x383a, 0x3623, 0x38f8, 0x3552, 0x3a55, 0x29c5, 0x34bb, 0x3663, 0x2c7b, 0x378d, 0x250c, 0x3ac9, 0x39c4, 0x378d, 0x39d2, 0x39a9, 0x379f, 0x3473, 0x2db0, 0x3993, 0x3ad3, 0x3494, 0x39ae, 0x36d2, 0x397c, 0x39c9, 0x3adc, 0x359f, 0x2c2f, 0x3b0d, 0x3595, 0x3687, 0x39b3, 0x34e4, 0x3af6, 0x2f71, 0x39af, 0x3b28, 0x38fe, 0x381d, 0x28ef, 0x3abc, 0x3723, 0x3b6c, 0x381e, 0x3442, 0x3b90, 0x39cc, 0x39c5, 0x3654, 0x38ac, 0x1b4d, 0x391f, 0x38d2, 0x3ac7, 0x385a, 0x322c, 0x39e6, 0x289c, 0x3786, +0x3b5f, 0x37c4, 0x3906, 0x3069, 0x3478, 0x383c, 0x3a34, 0x3a85, 0x33b3, 0x3be6, 0x3a71, 0x33ac, 0x3a77, 0x3b21, 0x3b7d, 0x3957, 0x3814, 0x39b2, 0x3504, 0x387f, 0x37c6, 0x39e0, 0x39f1, 0x393b, 0x2fe0, 0x3806, 0x2d6e, 0x37a5, 0x3069, 0x3831, 0x3959, 0x3363, 0x2d3a, 0x3980, 0x35ec, 0x3a3c, 0x389c, 0x23eb, 0x3a24, 0x30fa, 0x3040, 0x38b4, 0x3b7b, 0x381f, 0x3a66, 0x246e, 0x3b37, 0x30c1, 0x38a5, 0x387e, 0x34aa, 0x362a, 0x3556, 0x2a52, 0x3445, 0x3a9b, 0x2986, 0x38d2, 0x3513, 0x3bca, 0x39fa, 0x303b, 0x31cc, 0x3414, 0x3b16, 0x3a43, 0x2e2c, 0x3a29, 0x3996, 0x3973, 0x39b3, 0x36dc, 0x2761, 0x32a1, 0x3815, 0x3708, 0x38fa, 0x38cb, 0x36d3, 0x39c8, 0x266c, 0x3b60, 0x33cf, 0x3be3, 0x3854, 0x34c0, 0x34d3, 0x39ac, 0x37ad, 0x2fcb, 0x3966, 0x31a2, 0x363f, 0x3434, 0x381e, 0x3a53, +0x3795, 0x38cd, 0x3c00, 0x393c, 0x38af, 0x3b72, 0x37c4, 0x3b4f, 0x30b0, 0x36fd, 0x377b, 0x38f2, 0x371b, 0x3ada, 0x2edd, 0x3782, 0x33a2, 0x3a25, 0x38ae, 0x3be0, 0x3a31, 0x32b2, 0x3323, 0x3b1f, 0x39fc, 0x3986, 0x3b38, 0x3881, 0x3a9d, 0x3936, 0x3946, 0x3159, 0x3504, 0x3792, 0x3547, 0x28ff, 0x3449, 0x3214, 0x313f, 0x3866, 0x3a59, 0x3b06, 0x2e51, 0x2759, 0x342e, 0x3726, 0x3473, 0x37ea, 0x3b1d, 0x3be8, 0x346d, 0x3b73, 0x38c3, 0x296c, 0x33b2, 0x34a7, 0x3af5, 0x3284, 0x359c, 0x384d, 0x2ff7, 0x3337, 0x339b, 0x30e4, 0x3001, 0x3b02, 0x2ddf, 0x3997, 0x320c, 0x3af9, 0x2c92, 0x37e8, 0x3b5d, 0x3132, 0x3860, 0x396b, 0x39fd, 0x38f3, 0x3968, 0x32e8, 0x3523, 0x395b, 0x2e01, 0x37b9, 0x3b53, 0x3b37, 0x398e, 0x389b, 0x3586, 0x37d6, 0x3976, 0x3785, 0x3b0c, 0x3975, 0x39e2, 0x3bb5, +0x3675, 0x343a, 0x38d9, 0x392e, 0x3b61, 0x35db, 0x3527, 0x3a75, 0x3a1e, 0x36bd, 0x3af7, 0x2dae, 0x3b77, 0x2fe7, 0x3a80, 0x3745, 0x3a6e, 0x3748, 0x37ad, 0x3492, 0x3a82, 0x35db, 0x2e6a, 0x34bf, 0x3984, 0x3aff, 0x3a9a, 0x2720, 0x3786, 0x3475, 0x3842, 0x36ce, 0x387f, 0x3875, 0x292c, 0x35b8, 0x3ac0, 0x39f1, 0x3537, 0x3920, 0x3a93, 0x2a40, 0x2c60, 0x39b0, 0x3559, 0x3989, 0x3670, 0x33ef, 0x36e4, 0x3ac3, 0x3802, 0x35b3, 0x36e9, 0x34b6, 0x3911, 0x35f1, 0x3591, 0x3a96, 0x39df, 0x3892, 0x3582, 0x3a67, 0x39cf, 0x3bf8, 0x3587, 0x2adb, 0x36f3, 0x3a9f, 0x34c5, 0x31ab, 0x3481, 0x26aa, 0x3929, 0x3749, 0x3764, 0x3743, 0x39db, 0x2850, 0x363d, 0x386f, 0x349c, 0x3ae1, 0x3834, 0x3480, 0x305d, 0x3bca, 0x3418, 0x3580, 0x3897, 0x3831, 0x3898, 0x39aa, 0x372b, 0x3b98, 0x3b92, 0x3adc, +0x355f, 0x3915, 0x21ad, 0x3a2a, 0x3803, 0x3af4, 0x34e4, 0x37b0, 0x399e, 0x33d8, 0x3904, 0x1c2b, 0x3831, 0x3b39, 0x3a0e, 0x37dd, 0x3bfb, 0x3a0f, 0x3623, 0x3beb, 0x39d0, 0x335e, 0x38e5, 0x3810, 0x37df, 0x2c84, 0x30bc, 0x3013, 0x342f, 0x285f, 0x3855, 0x3b81, 0x3a35, 0x33e5, 0x3a11, 0x3bab, 0x32df, 0x303d, 0x3973, 0x340f, 0x3aba, 0x34d9, 0x3924, 0x3b84, 0x3a67, 0x3980, 0x3612, 0x3b64, 0x39e3, 0x3ac3, 0x3350, 0x3865, 0x24d5, 0x3bac, 0x3594, 0x38d7, 0x3b53, 0x3b76, 0x39ee, 0x36de, 0x3a1c, 0x38ce, 0x25cc, 0x3847, 0x3b28, 0x34c5, 0x3a7e, 0x3afb, 0x3361, 0x2266, 0x37d1, 0x3886, 0x306b, 0x3b12, 0x3a8b, 0x2aad, 0x3855, 0x35b0, 0x35c4, 0x3b4e, 0x36fa, 0x396a, 0x26f4, 0x381a, 0x2f06, 0x2c3e, 0x3116, 0x3adf, 0x358b, 0x2f88, 0x3adf, 0x3842, 0x3a1a, 0x3b35, 0x291a, 0x2e9d, +0x32d1, 0x3946, 0x3a50, 0x398e, 0x2970, 0x3122, 0x286c, 0x3b80, 0x3bbe, 0x38ad, 0x3b51, 0x385a, 0x38c4, 0x3af0, 0x352a, 0x38e9, 0x3a80, 0x28e3, 0x395e, 0x34aa, 0x3973, 0x3492, 0x398c, 0x327b, 0x39d4, 0x3995, 0x3740, 0x2742, 0x388f, 0x3a24, 0x3a2f, 0x38d3, 0x384e, 0x3abd, 0x3bb8, 0x3814, 0x394b, 0x3aa0, 0x3af2, 0x37ad, 0x32aa, 0x3aa3, 0x3aa6, 0x3ac5, 0x2fbf, 0x3759, 0x3848, 0x32c6, 0x3459, 0x38af, 0x3980, 0x24db, 0x3ac5, 0x377c, 0x1d75, 0x36e9, 0x389b, 0x314e, 0x344f, 0x30ff, 0x3921, 0x3b72, 0x3884, 0x3836, 0x3af2, 0x35b8, 0x3116, 0x38ce, 0x3ae6, 0x3b16, 0x3bca, 0x373b, 0x3a8e, 0x3872, 0x2d2a, 0x344d, 0x3b2e, 0x3608, 0x320e, 0x2aa7, 0x361a, 0x2dc4, 0x3b4f, 0x2d4d, 0x34b3, 0x34c0, 0x393b, 0x3a76, 0x372f, 0x3637, 0x2b5c, 0x3a38, 0x367b, 0x2b1e, 0x344e, 0x385e, +0x3ab6, 0x38a2, 0x3674, 0x2d4d, 0x3bad, 0x3b44, 0x35ed, 0x38a7, 0x325e, 0x3b29, 0x3b65, 0x2f0f, 0x3a30, 0x3b4c, 0x3843, 0x3a21, 0x2e34, 0x3180, 0x3ae0, 0x3a02, 0x3a82, 0x2ad9, 0x3826, 0x3a94, 0x2f66, 0x217b, 0x3b82, 0x3839, 0x3263, 0x3a1b, 0x2958, 0x3b26, 0x3a3e, 0x3039, 0x3bd7, 0x2057, 0x3b99, 0x38ac, 0x372d, 0x344e, 0x31fa, 0x3bf8, 0x394e, 0x3acb, 0x3b88, 0x38cf, 0x3582, 0x3a2b, 0x370e, 0x34b5, 0x36d2, 0x3ae3, 0x38b9, 0x37a5, 0x3979, 0x3204, 0x3ba2, 0x3591, 0x3a00, 0x3944, 0x1b7f, 0x271e, 0x38a2, 0x38ad, 0x3ade, 0x3008, 0x34c9, 0x3269, 0x31da, 0x3bad, 0x3587, 0x3bea, 0x3512, 0x2deb, 0x3825, 0x3488, 0x30aa, 0x3baf, 0x378f, 0x39d9, 0x3ac4, 0x3427, 0x371e, 0x3b2d, 0x3138, 0x3654, 0x3815, 0x3b7c, 0x38cf, 0x382e, 0x1cdb, 0x2fa4, 0x3783, 0x383c, 0x37d1, 0x2df8, +0x335b, 0x3071, 0x367f, 0x3be1, 0x3a1b, 0x3afd, 0x390b, 0x3b17, 0x3861, 0x3adb, 0x3a04, 0x3859, 0x3a95, 0x37b6, 0x37ff, 0x3400, 0x34e3, 0x367d, 0x3ad0, 0x3506, 0x3b50, 0x33e6, 0x3a42, 0x3b3c, 0x382a, 0x3bf8, 0x3be8, 0x3917, 0x39ec, 0x265b, 0x3b11, 0x3b2a, 0x3aef, 0x35f9, 0x3a2b, 0x371d, 0x32f8, 0x338b, 0x3bc2, 0x399e, 0x3aa8, 0x34b1, 0x182c, 0x3691, 0x39c5, 0x359a, 0x3b2b, 0x38f9, 0x3953, 0x362a, 0x3a8e, 0x363d, 0x3b96, 0x380a, 0x37fc, 0x3694, 0x2fa9, 0x35d1, 0x3699, 0x2e36, 0x3922, 0x38b6, 0x2d05, 0x3161, 0x353e, 0x371f, 0x3913, 0x39b6, 0x35d6, 0x3b29, 0x395c, 0x3677, 0x3ac8, 0x35e1, 0x3b02, 0x3479, 0x321a, 0x2a17, 0x2890, 0x388a, 0x3109, 0x3a45, 0x301c, 0x349a, 0x31a2, 0x3b19, 0x2eb4, 0x2eff, 0x353c, 0x39f5, 0x396c, 0x3ae4, 0x3873, 0x3bf6, 0x3887, 0x3507, +0x34d1, 0x35d3, 0x3ad2, 0x3759, 0x2918, 0x36eb, 0x39bd, 0x3b25, 0x31b8, 0x35eb, 0x2999, 0x3b69, 0x3829, 0x3385, 0x3bf4, 0x3a9b, 0x3aa7, 0x319a, 0x3824, 0x38e6, 0x38aa, 0x375d, 0x3188, 0x34eb, 0x37bc, 0x3375, 0x367b, 0x33df, 0x34f6, 0x38b3, 0x38e3, 0x3010, 0x3a05, 0x2e64, 0x336a, 0x3466, 0x3962, 0x3640, 0x2a17, 0x31c5, 0x3815, 0x3472, 0x3b2c, 0x3b79, 0x32d7, 0x3656, 0x2a54, 0x3409, 0x3887, 0x34e6, 0x30ea, 0x2851, 0x39cc, 0x3153, 0x38af, 0x3868, 0x3ad3, 0x3853, 0x38a7, 0x3583, 0x31e3, 0x3284, 0x2909, 0x3ae9, 0x3abe, 0x310b, 0x3564, 0x33cb, 0x3999, 0x37bc, 0x352c, 0x32f7, 0x3522, 0x36de, 0x340c, 0x37f7, 0x3839, 0x39f8, 0x2b3b, 0x3ada, 0x3258, 0x3764, 0x395c, 0x374b, 0x3bbc, 0x35fd, 0x306c, 0x3645, 0x3b20, 0x3a18, 0x2c2b, 0x39e2, 0x3a43, 0x3934, 0x34b5, 0x390a, +0x3bc0, 0x358b, 0x3817, 0x3b77, 0x36de, 0x3868, 0x3b93, 0x2d8d, 0x3607, 0x37f9, 0x39b4, 0x3bc5, 0x3997, 0x33e1, 0x328b, 0x226a, 0x3aab, 0x390e, 0x34ee, 0x34ae, 0x3645, 0x3a4d, 0x31db, 0x3576, 0x38ed, 0x39d5, 0x2974, 0x3982, 0x34ca, 0x3839, 0x3b7a, 0x2e37, 0x2045, 0x3a1b, 0x3bf9, 0x2f9a, 0x2aba, 0x3944, 0x3a82, 0x24d0, 0x38fa, 0x2c8f, 0x3a4c, 0x391f, 0x39d2, 0x3154, 0x3a64, 0x3902, 0x398d, 0x3921, 0x3800, 0x3443, 0x2fb9, 0x3aa5, 0x3973, 0x2a30, 0x367d, 0x3850, 0x3a1e, 0x3b86, 0x34eb, 0x383c, 0x37b1, 0x2db1, 0x30d7, 0x347a, 0x2b61, 0x3441, 0x288b, 0x3bea, 0x2a52, 0x29de, 0x3a65, 0x37c2, 0x3370, 0x39e2, 0x3850, 0x3691, 0x2f33, 0x39cb, 0x3bbd, 0x35fe, 0x3696, 0x3bbe, 0x3451, 0x384e, 0x2f01, 0x380e, 0x3810, 0x35e9, 0x2c3b, 0x34bd, 0x3905, 0x3505, 0x36e9, 0x3b23, +0x38d5, 0x38b3, 0x2e40, 0x39da, 0x3459, 0x39b9, 0x385c, 0x3a5a, 0x37d8, 0x37bb, 0x3549, 0x3ba9, 0x3a79, 0x3b72, 0x2c21, 0x3576, 0x3bd3, 0x3ae5, 0x3b63, 0x3979, 0x319a, 0x3bb2, 0x39e7, 0x328c, 0x3af2, 0x34d2, 0x32c2, 0x38d1, 0x3831, 0x3a23, 0x3a51, 0x3646, 0x38be, 0x2f1b, 0x36a5, 0x3891, 0x38f0, 0x3a6a, 0x3249, 0x2f87, 0x36d8, 0x3a85, 0x2870, 0x369e, 0x3a6a, 0x34d5, 0x3419, 0x3b3e, 0x38d2, 0x3a7f, 0x3938, 0x38e4, 0x3332, 0x39db, 0x3933, 0x3a2a, 0x38cc, 0x3bae, 0x3b1a, 0x3837, 0x3ba2, 0x3582, 0x3639, 0x392a, 0x30d0, 0x3966, 0x3b0f, 0x35a7, 0x3962, 0x3b6d, 0x3503, 0x38e2, 0x370e, 0x3341, 0x3694, 0x3a68, 0x3879, 0x3661, 0x377f, 0x38fc, 0x38d5, 0x3238, 0x3a69, 0x32d0, 0x3a61, 0x388f, 0x3591, 0x3b25, 0x3818, 0x304b, 0x39f0, 0x3826, 0x399e, 0x332c, 0x3496, 0x3822, +0x3a10, 0x3839, 0x3b02, 0x248f, 0x39a8, 0x31fa, 0x3964, 0x34e5, 0x2abc, 0x3a82, 0x3440, 0x321b, 0x3859, 0x38f1, 0x3845, 0x3bbd, 0x3b28, 0x3410, 0x3855, 0x3acb, 0x3afe, 0x38fb, 0x341d, 0x3713, 0x3281, 0x387c, 0x3b3a, 0x388d, 0x34f1, 0x33b1, 0x35df, 0x3a40, 0x3b5a, 0x37a8, 0x3997, 0x32c0, 0x38e1, 0x287f, 0x30ed, 0x398d, 0x2fc0, 0x399c, 0x34b5, 0x3b4e, 0x3a20, 0x39ed, 0x2dfe, 0x3b53, 0x3529, 0x3b5d, 0x39b7, 0x3469, 0x35fb, 0x3af6, 0x3b95, 0x39bd, 0x39be, 0x3bad, 0x308a, 0x380a, 0x3851, 0x3810, 0x3866, 0x3adb, 0x3b96, 0x3118, 0x3a45, 0x36ab, 0x3250, 0x38f5, 0x360e, 0x3ac2, 0x30d1, 0x3a5f, 0x3a09, 0x3550, 0x3ba9, 0x360d, 0x3ad6, 0x3a1f, 0x376e, 0x308b, 0x3908, 0x38ac, 0x348a, 0x3ba4, 0x3704, 0x37ef, 0x35ea, 0x3836, 0x395a, 0x2c3d, 0x382e, 0x360a, 0x321a, 0x3967, +0x26ea, 0x3845, 0x344c, 0x3b46, 0x33ca, 0x2f66, 0x220e, 0x39c5, 0x35d6, 0x3af3, 0x39d0, 0x38f7, 0x3082, 0x3924, 0x3198, 0x3a81, 0x3a45, 0x3945, 0x368d, 0x3a76, 0x3a14, 0x3145, 0x2430, 0x37f0, 0x3af8, 0x31d6, 0x36ab, 0x3453, 0x2dcc, 0x359c, 0x3699, 0x37b4, 0x399c, 0x375e, 0x386a, 0x3927, 0x38c2, 0x33ac, 0x32de, 0x3ba4, 0xece, 0x398a, 0x3b1f, 0x3583, 0x3b41, 0x340f, 0x3bef, 0x3777, 0x3acd, 0x3818, 0x3ad3, 0x385d, 0x38f7, 0x399c, 0x38a1, 0x3a11, 0x38ad, 0x2fc0, 0x32c3, 0x3293, 0x3499, 0x3757, 0x28a6, 0x3b3d, 0x3b9b, 0x37a1, 0x3bcd, 0x3a17, 0x3b46, 0x39b0, 0x2cee, 0x346a, 0x3b63, 0x3855, 0x37a4, 0x36dc, 0x3baa, 0x20a7, 0x3b32, 0x2a40, 0x3ac4, 0x3855, 0x35cb, 0x3bcc, 0x3a66, 0x38bd, 0x213a, 0x2be8, 0x2793, 0x32a2, 0x3a2c, 0x3aae, 0x384b, 0x3a00, 0x375d, 0x35e2, +0x3938, 0x3629, 0x398a, 0x263c, 0x37f1, 0x39ed, 0x332c, 0x3879, 0x38df, 0x2cc1, 0x38cb, 0x398a, 0x3935, 0x3607, 0x2791, 0x3a21, 0x3590, 0x306b, 0x3720, 0x3abb, 0x3a6a, 0x2a36, 0x388b, 0x2c62, 0x393e, 0x36bc, 0x37be, 0x39bd, 0x39db, 0x35d8, 0x3b2d, 0x39ba, 0x33a4, 0x3a4b, 0x2f93, 0x38ca, 0x325d, 0x3974, 0x3116, 0x3bd6, 0x3630, 0x3888, 0x3a58, 0x3a1d, 0x3868, 0x38c5, 0x316f, 0x353d, 0x2a18, 0x3994, 0x399a, 0x2e05, 0x3b8b, 0x32f3, 0x3242, 0x2e23, 0x3191, 0x3ab7, 0x2aaf, 0x3a7d, 0x3726, 0x3b42, 0x3abc, 0x372b, 0x3a73, 0x390e, 0x38d0, 0x38e2, 0x39f9, 0x2fae, 0x3372, 0x3370, 0x3699, 0x3851, 0x3430, 0x3559, 0x3b7c, 0x3671, 0x35dd, 0x2d3e, 0x35c8, 0x2260, 0x3ab4, 0x3b38, 0x3327, 0x33df, 0x3a01, 0x3368, 0x361e, 0x3baa, 0x3990, 0x382b, 0x38fb, 0x35b9, 0x3921, 0x3918, +0x38ea, 0x349a, 0x3123, 0x2d03, 0x356f, 0x3735, 0x3b50, 0x355b, 0x3b23, 0x3a35, 0x30a3, 0x3568, 0x365c, 0x3328, 0x3ac5, 0x323f, 0x271b, 0x24a7, 0x369d, 0x32a5, 0x39e7, 0x37dc, 0x3a48, 0x36a7, 0x3037, 0x39b8, 0x35b5, 0x320c, 0x29c0, 0x3770, 0x3893, 0x384c, 0x3888, 0x399a, 0x3a4e, 0x31e7, 0x397d, 0x3876, 0x3425, 0x3929, 0x3734, 0x2cb9, 0x39e8, 0x399d, 0x27d8, 0x3a89, 0x3198, 0x35ee, 0x2576, 0x31a6, 0x398b, 0x31cb, 0x2e6d, 0x386a, 0x3b4e, 0x3882, 0x3a5b, 0x3797, 0x38f0, 0x3229, 0x3849, 0x3874, 0x2cb5, 0x3b07, 0x3b6f, 0x3b29, 0x3bdf, 0x34fd, 0x3502, 0x3ae1, 0x39ac, 0x37ef, 0x3bbc, 0x39f7, 0x3503, 0x3bf0, 0x34da, 0x3bb9, 0x3811, 0x3ac2, 0x37e5, 0x37a9, 0x38a2, 0x3ba7, 0x3862, 0x369c, 0x35f7, 0x388b, 0x3aa8, 0x335b, 0x3a6f, 0x3885, 0x36c6, 0x38a9, 0x396d, 0x34ec, +0x3a09, 0x3869, 0x34bb, 0x3761, 0x36a1, 0x3852, 0x3849, 0x3659, 0x3805, 0x3a89, 0x3539, 0x35eb, 0x3439, 0x3863, 0x3a88, 0x38e0, 0x388c, 0x351c, 0x350e, 0x3383, 0x31ad, 0x389e, 0x39a5, 0x363f, 0x3b6a, 0x30f5, 0x3a4f, 0x3669, 0x3ae5, 0x3950, 0x2e12, 0x3801, 0x3af3, 0x393f, 0x377b, 0x390c, 0x34ff, 0x30f2, 0x271a, 0x37a5, 0x289e, 0x39b6, 0x3bf3, 0x389f, 0x3a33, 0x3bf0, 0x39c0, 0x392a, 0x394d, 0x349c, 0x3b62, 0x327a, 0x377b, 0x3590, 0x397a, 0x3a04, 0x3247, 0x329c, 0x2d99, 0x3b76, 0x33ff, 0x3456, 0x32c3, 0x35b6, 0x3282, 0x32b5, 0x3a23, 0x39e0, 0x3767, 0x3600, 0x38d6, 0x3a7c, 0x3515, 0x36bc, 0x381a, 0x3bd6, 0x3baf, 0x3811, 0x39e0, 0x22ac, 0x391b, 0x29be, 0x39aa, 0x3329, 0x3a6f, 0x3bcb, 0x3118, 0x3bbf, 0x3674, 0x3918, 0x30cd, 0x3924, 0x3a6b, 0x3a8b, 0x34b5, 0x39cc, +0x2cde, 0x3945, 0x37ff, 0x3115, 0x3a3b, 0x3ae1, 0x3958, 0x28f5, 0x3b19, 0x33ff, 0x3bc4, 0x3476, 0x3886, 0x3511, 0x342b, 0x3b18, 0x36e9, 0x3ab9, 0x2423, 0x32e2, 0x3623, 0x38b4, 0x371b, 0x3bc0, 0x3b8d, 0x3366, 0x384f, 0x3a1a, 0x3a09, 0x3918, 0x3959, 0x3652, 0x3baa, 0x3685, 0x38b7, 0x378b, 0x32e9, 0x3a53, 0x3405, 0x3bc3, 0x34b9, 0x339d, 0x3819, 0x2fe8, 0x3bdb, 0x3421, 0x3575, 0x3796, 0x207e, 0x3b04, 0x38a8, 0x3b69, 0x35f1, 0x389a, 0x37ee, 0x38c3, 0x34db, 0x35a5, 0x3b83, 0x36a9, 0x2883, 0x3955, 0x3aa0, 0x334a, 0x34a9, 0x3772, 0x312a, 0x3bde, 0x3338, 0x3601, 0x3125, 0x3a73, 0x316c, 0x348e, 0x3bef, 0x3b52, 0x343b, 0x249c, 0x3a68, 0x3905, 0x3b4d, 0x1cf8, 0x356a, 0x3499, 0x3385, 0x3b44, 0x2aaf, 0x28a1, 0x3199, 0x379d, 0x3832, 0x2da7, 0x3a9e, 0x3bc7, 0x34a2, 0x2c5a, +0x3bde, 0x3822, 0x3715, 0x345e, 0x38c1, 0x3315, 0x38d1, 0x2da9, 0x37f6, 0x38d3, 0x3beb, 0x3ba6, 0x343f, 0x3af0, 0x3b0e, 0x2bd6, 0x3b3b, 0x3a5a, 0x3930, 0x3af7, 0x3504, 0x31a5, 0x2918, 0x3853, 0x214f, 0x3b67, 0x3b64, 0x34a9, 0x3894, 0x3a87, 0x3ad1, 0x3a09, 0x38a2, 0x39da, 0x3a16, 0x3485, 0x36bf, 0x3ada, 0x31eb, 0x3b8c, 0x2de3, 0x3914, 0x39d4, 0x399f, 0x3968, 0x3200, 0x3631, 0x3bd6, 0x390b, 0x312d, 0x3b94, 0x3bf1, 0x38ee, 0x378b, 0x29f3, 0x3810, 0x2f19, 0x3808, 0x389c, 0x3a3a, 0x376c, 0x3b58, 0x346d, 0x2e32, 0x3848, 0x3bec, 0x3779, 0x3237, 0x37d2, 0x3963, 0x37a5, 0x3993, 0x3495, 0x3679, 0x2c1d, 0x3add, 0x3722, 0x305d, 0x38a0, 0x3851, 0x3a01, 0x291b, 0x3447, 0x35f7, 0x3617, 0x3928, 0x2e5d, 0x1f75, 0x3b78, 0x12cc, 0x39db, 0x39be, 0x3b11, 0x3b5a, 0x2fae, 0x3696, +0x3b26, 0x3229, 0x31d8, 0x3b61, 0x290e, 0x3b7d, 0x3bf3, 0x38cc, 0x3a78, 0x35f8, 0x3b7d, 0x3883, 0x3b43, 0x3571, 0x3991, 0x3bc3, 0x3095, 0x350f, 0x39bf, 0x3823, 0x370c, 0x2aa8, 0x3473, 0x33da, 0x38c7, 0x3ab7, 0x3b3d, 0x20f4, 0x3b12, 0x3997, 0x3bfe, 0x3479, 0x3a5f, 0x3550, 0x3af7, 0x34f2, 0x382f, 0x3109, 0x3287, 0x3a6f, 0x3b41, 0x3919, 0x2a88, 0x3b07, 0x3097, 0x398d, 0x35a7, 0x3921, 0x332f, 0x3b65, 0x39c2, 0x3aea, 0x3a54, 0x3996, 0x38c1, 0x396c, 0x3a06, 0x3831, 0x33a9, 0x3457, 0x3a8f, 0x3b43, 0x310d, 0x38e9, 0x36b8, 0x392c, 0x36b7, 0x323f, 0x2e02, 0x3b91, 0x36ef, 0x356b, 0x35e9, 0x339f, 0x39ce, 0x3ba8, 0x31bf, 0x2d8d, 0x3b09, 0x2dd7, 0x3960, 0x3b44, 0x37df, 0x3814, 0x3783, 0x39e7, 0x3716, 0x397f, 0x3429, 0x35ef, 0x3a37, 0x3743, 0x342a, 0x33cf, 0x184a, 0x3829, +0x384e, 0x3ade, 0x35c2, 0x36b9, 0x3429, 0x3abf, 0x3ac6, 0x3a36, 0x2108, 0x38ef, 0x37ff, 0x39fe, 0x3815, 0x3935, 0x3ab5, 0x351d, 0x3add, 0x3b57, 0x37ad, 0x2cc3, 0x3ace, 0x3ac4, 0x37ac, 0x3904, 0x3951, 0x32e7, 0x3337, 0x270b, 0x3a71, 0x3b9c, 0x3808, 0x3033, 0x34be, 0x3742, 0x3a39, 0x27f7, 0x26a2, 0x3b34, 0x35e5, 0x3a0f, 0x3939, 0x365f, 0x3853, 0x3b36, 0x364e, 0x3334, 0x1c8a, 0x330f, 0x3b6a, 0x3a34, 0x37fc, 0x353d, 0x3922, 0x387e, 0x390d, 0x3950, 0x37fc, 0x3946, 0x3afd, 0x342b, 0x2a9d, 0x3b85, 0x32b2, 0x3afc, 0x39a0, 0x3a38, 0x3182, 0x3aac, 0x3840, 0x3b40, 0x3703, 0x2f71, 0x3992, 0x3a53, 0x3a8a, 0x370c, 0x3101, 0x3826, 0x3b5b, 0x39c0, 0x3a46, 0x37d7, 0x3751, 0x2ab9, 0x342b, 0x39e0, 0x36fc, 0x3a8a, 0x1fb5, 0x355b, 0x38dc, 0x3b4d, 0x3be0, 0x3793, 0x307f, 0x3bae, +0x33ae, 0x39cc, 0x3a09, 0x3b3a, 0x34bf, 0x3b1c, 0x35cf, 0x3aa3, 0x3504, 0x381b, 0x3a9d, 0x3703, 0x3bce, 0x3b36, 0x35ea, 0x3503, 0x3687, 0x2661, 0x3bff, 0x2d04, 0x3bee, 0x3841, 0x3074, 0x309f, 0x35a3, 0x34ca, 0x36d5, 0x3640, 0x37e6, 0x37c9, 0x3a6d, 0x34fd, 0x3918, 0x3aa0, 0x3762, 0x34e0, 0x3527, 0x3780, 0x341d, 0x385a, 0x3af7, 0x3bf7, 0x3926, 0x3617, 0x3615, 0x2a99, 0x3649, 0x3a98, 0x3613, 0x2e24, 0x3809, 0x35b6, 0x3a63, 0x3bdd, 0x3825, 0x38fb, 0x2ed9, 0x39a5, 0x2d38, 0x364c, 0x3a63, 0x397c, 0x35e5, 0x3ad5, 0x31a7, 0x3979, 0x2873, 0x2e5c, 0x3abb, 0x39b6, 0x3b74, 0x2ce6, 0x35ab, 0x3920, 0x2fee, 0x308b, 0x229f, 0x3547, 0x36d3, 0x359c, 0x3814, 0x34de, 0x3a39, 0x2ed6, 0x3bd6, 0x353d, 0x3afb, 0x3b17, 0x3733, 0x16f0, 0x3011, 0x38b2, 0x387a, 0x3984, 0x3747, 0x394d, +0x34f7, 0x3755, 0x3960, 0x355f, 0x3765, 0x38fa, 0x3be8, 0x33ca, 0x351f, 0x31eb, 0x397e, 0x1412, 0x3022, 0x3467, 0x39d7, 0x3a60, 0x2c85, 0x3241, 0x3a90, 0x3926, 0x397a, 0x38f1, 0x3996, 0x3a51, 0x3ad5, 0x2e68, 0x38a9, 0x3663, 0x399f, 0x35f3, 0x3b4c, 0x34aa, 0x3b6b, 0x32af, 0x3aa8, 0x3a22, 0x38b6, 0x34cd, 0x2c81, 0x3945, 0x37a9, 0x3a20, 0x2523, 0x3ad8, 0x29ca, 0x3b63, 0x3a69, 0x37dc, 0x323b, 0x3898, 0x38e3, 0x3637, 0x394a, 0x2d82, 0x392c, 0x3993, 0x35b8, 0x3810, 0x399e, 0x3672, 0x39fa, 0x36c2, 0x351f, 0x3797, 0x244f, 0x3b02, 0x3304, 0x385f, 0x3312, 0x394e, 0x396b, 0x28bf, 0x3885, 0x39e2, 0x347e, 0x33ad, 0x3526, 0x3a5f, 0x3b90, 0x3b1e, 0x2572, 0x3a9c, 0x30ec, 0x393e, 0x3a9b, 0x357a, 0x394b, 0x3449, 0x3545, 0x2fee, 0x3702, 0x362b, 0x3bd4, 0x27d9, 0x2d6d, 0x3080, +0x30fb, 0x382e, 0x387a, 0x3b71, 0x355f, 0x39cc, 0x33c0, 0x2f57, 0x3b2f, 0x3b79, 0x3aea, 0x3b17, 0x3b46, 0x3844, 0x380d, 0x30a7, 0x2348, 0x381f, 0x2c21, 0x3a3b, 0x2cf6, 0x3523, 0x3835, 0x1b53, 0x3ad3, 0x3b18, 0x372a, 0x39a5, 0x37e6, 0x39bd, 0x2cfd, 0x395d, 0x2ea2, 0x39cb, 0x3bdc, 0x36db, 0x3b48, 0x3acc, 0x3439, 0x34c8, 0x3361, 0x3b5b, 0x324a, 0x35ec, 0x2c87, 0x395e, 0x35fe, 0x37a4, 0x361f, 0x315f, 0x305e, 0x35f7, 0x3541, 0x3729, 0x37ed, 0x31b7, 0x3a9a, 0x34ee, 0x376c, 0x3a7a, 0x389e, 0x30b3, 0x328e, 0x3811, 0x36f5, 0x35d9, 0x37f9, 0x3bcf, 0x3a0d, 0x3658, 0x3ba9, 0x38df, 0x3997, 0x3a6d, 0x375e, 0x32f7, 0x382e, 0x3b0d, 0x38ed, 0x346a, 0x3b8a, 0x2da9, 0x359c, 0x3574, 0x3840, 0x3333, 0x3a5b, 0x358d, 0x39f3, 0x385d, 0x2959, 0x3908, 0x3b84, 0x3a40, 0x2f0d, 0x35e0, +0x2066, 0x3940, 0x3b3b, 0x320f, 0x37cc, 0x377a, 0x3b22, 0x36da, 0x3aa0, 0x3476, 0x34b4, 0x3941, 0x36f4, 0x391e, 0x3a8d, 0x32ca, 0x3853, 0x3af6, 0x34d2, 0x36a6, 0x33f1, 0x39a0, 0x3790, 0x3440, 0x390f, 0x3a83, 0x399d, 0x367d, 0x2b8e, 0x3575, 0x3a1b, 0x3a7c, 0x3a6c, 0x2eb2, 0x3a27, 0x369b, 0x3a45, 0x38a4, 0x346f, 0x3a8c, 0x307a, 0x36d0, 0x39be, 0x39ae, 0x34ee, 0x2ae7, 0x3559, 0x3858, 0x3705, 0x38eb, 0x39fa, 0x3565, 0x3285, 0x392a, 0x394a, 0x300a, 0x39f6, 0x2e3e, 0x33dc, 0x39c7, 0x295d, 0x3b80, 0x3888, 0x3760, 0x3bfb, 0x396f, 0x3729, 0x386d, 0x39bb, 0x2d93, 0x387a, 0x3b12, 0x3b2e, 0x3bdc, 0x33ec, 0x383d, 0x38d0, 0x3373, 0x3bb0, 0x3987, 0x3b2b, 0x3097, 0x3884, 0x3b20, 0x39bf, 0x3360, 0x2b53, 0x370a, 0x2f02, 0x38ab, 0x24ee, 0x3947, 0x3927, 0x29d7, 0x3b8d, 0x3b8b, +0x3a58, 0x292b, 0x3604, 0x398f, 0x321b, 0x341f, 0x3909, 0x3901, 0x3b49, 0x32ee, 0x3940, 0x3b77, 0x31f0, 0x344e, 0x380c, 0x36b1, 0x3a4e, 0x3638, 0x3922, 0x3864, 0x393b, 0x3903, 0x302f, 0x2ff2, 0x30b7, 0x3997, 0x385b, 0x3bbf, 0x3b39, 0x38de, 0x3a69, 0x3b51, 0x3aed, 0x387b, 0x269d, 0x39c7, 0x3a99, 0x3beb, 0x3672, 0x33ee, 0x200e, 0x3834, 0x34f7, 0x3971, 0x355a, 0x31fd, 0x2531, 0x385f, 0x3bf2, 0x2686, 0x364a, 0x358a, 0x2e99, 0x2f89, 0x3809, 0x3924, 0x39ee, 0x3990, 0x3987, 0x3972, 0x3813, 0x3840, 0x34dd, 0x374a, 0x3250, 0x2f4c, 0x35d9, 0x2991, 0x3b3f, 0x362e, 0x3455, 0x2abb, 0x3a2d, 0x3b57, 0x3567, 0x2cc0, 0x2d0d, 0x3be3, 0x2f3e, 0x3a9f, 0x3253, 0x34e8, 0x3712, 0x334e, 0x3ab9, 0x3bae, 0x3a1d, 0x3a5c, 0x3b96, 0x3adf, 0x3088, 0x3a8e, 0x35f3, 0x3795, 0x35d1, 0x3bb4, +0x3862, 0x3976, 0x3b9a, 0x3291, 0x3b5c, 0x3540, 0x2d00, 0x3702, 0x3519, 0x39dd, 0x3bff, 0x3560, 0x3642, 0x392c, 0x3a6f, 0x32ff, 0x32f2, 0x3836, 0x2d5f, 0x368d, 0x383b, 0x3abb, 0x2ec9, 0x3ada, 0x391a, 0x3811, 0x35d9, 0x3b90, 0x3aa3, 0x3149, 0x3b10, 0x3912, 0x3391, 0x318b, 0x22ed, 0x3a32, 0x3819, 0x39c9, 0x3865, 0x332e, 0x399b, 0x3aaa, 0x3b3e, 0x37b6, 0x35db, 0x3286, 0x3765, 0x2afe, 0x3b7a, 0x32b2, 0x38c9, 0x37d0, 0x3a6d, 0x3a3a, 0x3a9c, 0x364d, 0x3915, 0x36d5, 0x24fb, 0x35ed, 0x3abd, 0x3200, 0x3ae4, 0x3a0f, 0x3ac2, 0x33be, 0x3812, 0x3bae, 0x3969, 0x3237, 0x3bb0, 0x3681, 0x35c9, 0x37da, 0x2f15, 0x3362, 0x3b5c, 0x3a74, 0x315a, 0x3b44, 0x2f83, 0x3971, 0x3bfd, 0x3ab3, 0x35ae, 0x3a5a, 0x303d, 0x2a1d, 0x3a0c, 0x3bbe, 0x3365, 0x33df, 0x3521, 0x3bce, 0x3880, 0x3842, +0x3a15, 0x3835, 0x2ac7, 0x3640, 0x3864, 0x309d, 0x3934, 0x364d, 0x30f9, 0x3954, 0x34c0, 0x39a2, 0x36c1, 0x3a64, 0x2f3d, 0x338e, 0x3993, 0x34c0, 0x2c7e, 0x30a8, 0x3696, 0x2d67, 0x2017, 0x3757, 0x2ebc, 0x2c37, 0x3422, 0x36a8, 0x3a49, 0x364d, 0x3b0a, 0x3adc, 0x34f1, 0x3a15, 0x389b, 0x389b, 0x3557, 0x3542, 0x3a12, 0x38b4, 0x3a49, 0x38fd, 0x3a25, 0x3516, 0x3bc9, 0x3811, 0x1b72, 0x391e, 0x2ecb, 0x3a69, 0x3818, 0x342b, 0x3b44, 0x3912, 0x2ae6, 0x3bb1, 0x355e, 0x3182, 0x3793, 0x385b, 0x2983, 0x394d, 0x3021, 0x307c, 0x3419, 0x364f, 0x395f, 0x3395, 0x365d, 0x3a90, 0x3b4d, 0x3660, 0x35ad, 0x3b87, 0x3b40, 0x3919, 0x3800, 0x385c, 0x187b, 0x3b1e, 0x38c8, 0x38bf, 0x3844, 0x390b, 0x3672, 0x37df, 0x3a46, 0x3013, 0x30fd, 0x3a86, 0x36aa, 0x3a60, 0x39a7, 0x39b7, 0x37d2, 0x33e7, +0x2cde, 0x3a8d, 0x33d3, 0x2c74, 0x34c5, 0x2b02, 0x3ab0, 0x375d, 0x3a8f, 0x39c7, 0x340c, 0x3bc7, 0x39ae, 0x2ea6, 0x3b0b, 0x394b, 0x3823, 0x3504, 0x383a, 0x38f6, 0x382d, 0x3bda, 0x3a1b, 0x38c9, 0x35e2, 0x39f1, 0x38b9, 0x3281, 0x3bb3, 0x3156, 0x2c35, 0x3b28, 0x2cfe, 0x392a, 0x3908, 0x3a72, 0x2d0e, 0x3b20, 0x369d, 0x3bae, 0x2f9f, 0x3aac, 0x331f, 0x3ab7, 0x3999, 0x3980, 0x3b17, 0x39d3, 0x3609, 0x231d, 0x386c, 0x39b7, 0x2a32, 0x37b0, 0x350d, 0x2554, 0x33ee, 0x2c9a, 0x319a, 0x37d6, 0x347e, 0x3a54, 0x3903, 0x3aaa, 0x31fc, 0x33c9, 0x3988, 0x3ac7, 0x31b5, 0x354c, 0x3ba7, 0x342e, 0x3898, 0x3907, 0x3bc4, 0x36b6, 0x36fc, 0x3896, 0x3832, 0x33d8, 0x3af7, 0x38df, 0x3b8b, 0x2dc9, 0x29a0, 0x3b24, 0x34e6, 0x2d49, 0x34c2, 0x388e, 0x36cb, 0x2eff, 0x34fb, 0x3b91, 0x3be3, 0x39ed, +0x38fb, 0x3675, 0x36d9, 0x385b, 0x36ce, 0x3755, 0x354b, 0x3014, 0x3670, 0x3be2, 0x3af2, 0x3b6e, 0x345f, 0x2f8d, 0x3a55, 0x3919, 0x3ad3, 0x3388, 0x368a, 0x3bbf, 0x2b8e, 0x28fd, 0x2e73, 0x3baa, 0x3326, 0x3625, 0x351e, 0x35eb, 0x305c, 0x3bc5, 0x345b, 0x3473, 0x3555, 0x28bb, 0x357a, 0x39c2, 0x3871, 0x3232, 0x2c3a, 0x3983, 0x340a, 0x3af8, 0x3932, 0x3354, 0x3a39, 0x36b8, 0x367a, 0x29ce, 0x3bf0, 0x290d, 0x339f, 0x3afb, 0x340d, 0x3128, 0x38ac, 0x2b34, 0x346f, 0x3356, 0x3bb9, 0x2967, 0x355a, 0x37cd, 0x34f4, 0x3a66, 0x36b6, 0x2968, 0x3bf7, 0x3a0d, 0x361c, 0x3898, 0x3859, 0x39fe, 0x3bdb, 0x38aa, 0x3b92, 0x2fcc, 0x38b1, 0x3713, 0x3be1, 0x3826, 0x3b00, 0x32c3, 0x30a1, 0x38d7, 0x3bf3, 0x3b42, 0x38af, 0x304b, 0x3279, 0x37c5, 0x2072, 0x346c, 0x3857, 0x3597, 0x3624, 0x39d7, +0x3042, 0x392a, 0x3120, 0x20d7, 0x3b8c, 0x3a8f, 0x383a, 0x3a52, 0x3bbd, 0x31ad, 0x3781, 0x3359, 0x36cb, 0x33f1, 0x385b, 0x3225, 0x38d5, 0x3019, 0x3a17, 0x34d3, 0x3a34, 0x39ba, 0x3a17, 0x31e8, 0x3b53, 0x3b9c, 0x3b54, 0x33b6, 0x3488, 0x367a, 0x3a2c, 0x3ac7, 0x3b0a, 0x399a, 0x3891, 0x3a51, 0x3a4a, 0x380b, 0x391c, 0x3805, 0x381d, 0x3b2a, 0x2a0d, 0x3acc, 0x3b55, 0x3958, 0x3a2b, 0x35cd, 0x340e, 0x36e1, 0x3a09, 0x2569, 0x2c5f, 0x376c, 0x3431, 0x3ad3, 0x31fc, 0x331e, 0x396b, 0x2ebd, 0x380f, 0x3bce, 0x3a74, 0x32de, 0x30ec, 0x3300, 0x3aba, 0x34c3, 0x3abd, 0x30c6, 0x39af, 0x3a3d, 0x3ad9, 0x3097, 0x2af9, 0x38a6, 0x3071, 0x25c5, 0x34ea, 0x2ff3, 0x355e, 0x3b66, 0x1edc, 0x3a1f, 0x32c7, 0x381c, 0x3837, 0x3bc1, 0x3033, 0x3bcb, 0x3a53, 0x3ab7, 0x38be, 0x2a81, 0x36ad, 0x301f, +0x3931, 0x3ba1, 0x34ac, 0x383d, 0x3636, 0x35b9, 0x38f2, 0x2c53, 0x32a9, 0x3b31, 0x3181, 0x383c, 0x395b, 0x30ef, 0x3aa7, 0x30ce, 0x32ff, 0x328b, 0x3329, 0x2c12, 0x394e, 0x2c60, 0x35de, 0x3938, 0x2c18, 0x37be, 0x392e, 0x3438, 0x3650, 0x34c7, 0x392c, 0x39aa, 0x2e72, 0x3ab6, 0x2bc9, 0x3bfa, 0x36f2, 0x2830, 0x2ad4, 0x3b3f, 0x3ae7, 0x34c7, 0x3064, 0x35ef, 0x3956, 0x39e9, 0x31eb, 0x2ff8, 0x36f3, 0x38de, 0x34b8, 0x3aa8, 0x1c30, 0x3b4f, 0x38d9, 0x3bba, 0x39b7, 0x3b4c, 0x2ee9, 0x3837, 0x3835, 0x36c6, 0x3928, 0x2e72, 0x37d2, 0x3642, 0x31cb, 0x35d6, 0x3408, 0x3404, 0x39d4, 0x3877, 0x38a5, 0x31ae, 0x2c75, 0x341a, 0x3af5, 0x3abc, 0x330b, 0x387d, 0x3b46, 0x369f, 0x2bf0, 0x3bdc, 0x36fc, 0x362a, 0x374f, 0x3bc3, 0x3ac5, 0x38c1, 0x3965, 0x380f, 0x3675, 0x3bba, 0x3a38, 0x39ca +}; \ No newline at end of file diff --git a/redmule/inc/x_2D.h b/redmule/inc/x_2D.h new file mode 100644 index 0000000..ebe42af --- /dev/null +++ b/redmule/inc/x_2D.h @@ -0,0 +1,99 @@ + /* Header file generated by RedMulE Golden Model */ +uint16_t x_inp_2D [96][96] = { +0x3122, 0x369c, 0x39bd, 0x3b58, 0x3be0, 0x3a5a, 0x3416, 0x386c, 0x3a11, 0x350e, 0x38ab, 0x35ad, 0x35d9, 0x390f, 0x3565, 0x36b0, 0x3aad, 0x3a64, 0x3797, 0x368d, 0x35a6, 0x396f, 0x2a5e, 0x3a29, 0x38a7, 0x33a8, 0x3409, 0x3621, 0x3b02, 0x34a7, 0x3a94, 0x3819, 0x3695, 0x380a, 0x3acd, 0x396a, 0x395a, 0x3663, 0x3bbe, 0x3306, 0x3a4d, 0x3b0d, 0x3bc3, 0x30fa, 0x32ab, 0x31fd, 0x3bc9, 0x38ce, 0x3180, 0x3980, 0x34ec, 0x3a84, 0x3bc9, 0x3719, 0x3a76, 0x38ab, 0x3707, 0x3904, 0x33d9, 0x34d6, 0x3053, 0x3bd4, 0x2f03, 0x1dbf, 0x2e5f, 0x36fa, 0x191d, 0x3187, 0x223f, 0x384b, 0x36dc, 0x3549, 0x343f, 0x36d8, 0x36de, 0x31ff, 0x174e, 0x30d3, 0x3452, 0x3258, 0x30b1, 0x3127, 0x3840, 0x3991, 0x3b1b, 0x3a7c, 0x36ec, 0x2304, 0x3946, 0x3876, 0x3a5d, 0x3a76, 0x2f78, 0x3b01, 0x3934, 0x3bc4, +0x2b27, 0x3669, 0x38ce, 0x2cde, 0x38e1, 0x3abd, 0x2c4f, 0x3971, 0x3964, 0x3a9d, 0x38b9, 0x390f, 0x3475, 0x3b16, 0x38f0, 0x397e, 0x3996, 0x3223, 0x36c6, 0x3bfd, 0x3161, 0x3a70, 0x3961, 0x38e1, 0x2b2b, 0x32c1, 0x3683, 0x36bb, 0x381a, 0x3b92, 0x356a, 0x38c4, 0x38df, 0x3a7b, 0x3b3a, 0x35a2, 0x27d3, 0x3af2, 0x3489, 0x38c7, 0x3985, 0x3a03, 0x30f6, 0x3a92, 0x38d5, 0x39a0, 0x3749, 0x3784, 0x1c70, 0x356b, 0x2d5f, 0x39db, 0x37ab, 0x39fb, 0x3b2c, 0x2ef8, 0x3336, 0x3afd, 0x38f0, 0x358f, 0x3ac4, 0x293d, 0x3328, 0x3741, 0x3993, 0x3463, 0x3918, 0x332e, 0x356d, 0x36ee, 0x34e7, 0x3757, 0x34b5, 0x3b7c, 0x3a63, 0x3b6c, 0x34a6, 0x34f3, 0x346a, 0x2bcf, 0x363d, 0x3081, 0x3abc, 0x35a5, 0x36ff, 0x2cb7, 0x2a53, 0x37a3, 0x3a98, 0x3b92, 0x3a9a, 0x38ff, 0x39dc, 0x3289, 0x3357, 0x39f6, +0x3b74, 0x3a5e, 0x3ba9, 0x365e, 0x3aa5, 0x3b42, 0x39b5, 0x2fb7, 0x39e5, 0x263d, 0x3405, 0x259f, 0x381d, 0x38dc, 0x3152, 0x37f5, 0x38b6, 0x3bfd, 0x3a4e, 0x3804, 0x370f, 0x382f, 0x395d, 0x38a5, 0x2edd, 0x3ac9, 0x34dc, 0x2a2a, 0x2aba, 0x35d0, 0x36b4, 0x3ae1, 0x3b35, 0x3a49, 0x3b5e, 0x38e8, 0x30ed, 0x3ab4, 0x3a92, 0x3bd9, 0x3437, 0x36d0, 0x3aad, 0x36d6, 0x35ed, 0x3635, 0x3bf7, 0x345a, 0x300a, 0x31d2, 0x340c, 0x38fd, 0x39ad, 0x39ac, 0x38bf, 0x38f6, 0x2f7e, 0x3685, 0x3be9, 0x3af0, 0x35d1, 0x35fb, 0x35ad, 0x3a6d, 0x3a78, 0x3813, 0x36a8, 0x3a6e, 0x39fc, 0x3918, 0x2179, 0x38a2, 0x37f9, 0x38dc, 0x24a9, 0x3647, 0x386a, 0x2890, 0x2d0f, 0x31e3, 0x394a, 0x36b2, 0x3071, 0x292d, 0x3568, 0x3adb, 0x394a, 0x2ff6, 0x3142, 0x322b, 0x2696, 0x3954, 0x229d, 0x383a, 0x2f3d, 0x3b4e, +0x3b1c, 0xd7b, 0x379c, 0x3421, 0x39a0, 0x3557, 0x2e38, 0x3b3a, 0x270e, 0x250b, 0x3b0a, 0x3aa1, 0x2d72, 0x351c, 0x3a11, 0x382b, 0x37f8, 0x3a82, 0x39e8, 0x3a1d, 0x3a45, 0x2fb7, 0x341b, 0x39ea, 0x3646, 0x3b27, 0x3abd, 0x350b, 0x3a3a, 0x3557, 0x37db, 0x315b, 0x305a, 0x3bd7, 0x3b33, 0x32b9, 0x3503, 0x2749, 0x3532, 0x37f2, 0x348e, 0x3422, 0x32a4, 0x37bf, 0x3b7b, 0x378f, 0x3476, 0x3a1a, 0x39a2, 0x35d9, 0x3b4d, 0x39f0, 0x34a7, 0x36c6, 0x3ab4, 0x39c2, 0x385b, 0x3add, 0x34cf, 0x3604, 0x39e1, 0x3872, 0x3751, 0x32db, 0x38df, 0x3602, 0x3509, 0x37d5, 0x342e, 0x39ef, 0x2f59, 0x2505, 0x314d, 0x35ff, 0x3bae, 0x3b38, 0x32af, 0x3b9b, 0x3b03, 0x2c5e, 0x3940, 0x38ef, 0x324c, 0x399a, 0x3a14, 0x39c6, 0x3a33, 0x382a, 0x3b36, 0x3ae7, 0x3b71, 0x3020, 0x3a14, 0x33d2, 0x3b1d, 0x2660, +0x2ace, 0x3a36, 0x39d6, 0x398d, 0x3ae2, 0x39dc, 0x3bb3, 0x26d5, 0x3a4a, 0x36ad, 0x3b31, 0x2b7e, 0x3baf, 0x3314, 0x2e0b, 0x31c1, 0x25a9, 0x378c, 0x3b45, 0x3ae9, 0x3586, 0x39fe, 0x3b5b, 0x3b18, 0x3a1b, 0x399b, 0x3aad, 0x30e1, 0x3b3b, 0x2d9f, 0x2614, 0x354e, 0x3806, 0x393e, 0x3564, 0x2346, 0x3b5e, 0x382f, 0x31c9, 0x3be1, 0x2e41, 0x394e, 0x346a, 0x3976, 0x38e7, 0x3503, 0x387f, 0x3025, 0x3232, 0x283b, 0x37d2, 0x32aa, 0x36e0, 0x3b92, 0x3a41, 0x2f32, 0x34cc, 0x3a30, 0x3a69, 0x3671, 0x3894, 0x3b3d, 0x3468, 0x3836, 0x2303, 0x2e8f, 0x3186, 0x37d1, 0x371f, 0x381a, 0x3af8, 0x2ca8, 0x31ba, 0x3a59, 0x3971, 0x3bdb, 0x3add, 0x35af, 0x3b81, 0x2f19, 0x3963, 0x3b58, 0x3aa4, 0x3b98, 0x3808, 0x33b7, 0x3833, 0x3506, 0x3467, 0x2f27, 0x35be, 0x346e, 0x39c9, 0x3677, 0x31b5, 0x3bf4, +0x3506, 0x30a7, 0x370d, 0x367e, 0x3264, 0x2fb7, 0x30d5, 0x3814, 0x3152, 0x38aa, 0x3a77, 0x2dde, 0x3077, 0x38df, 0x3744, 0x2af8, 0x37f8, 0x3aa2, 0x39e3, 0x3ada, 0x3931, 0x3bc0, 0x34b2, 0x35de, 0x33c8, 0x34d4, 0x395a, 0x36a1, 0x3a3a, 0x33e3, 0x38d7, 0x3476, 0x3b6f, 0x3506, 0x3448, 0x3b2c, 0x3766, 0x382b, 0x2efd, 0x33ec, 0x242c, 0x3976, 0x3027, 0x2c5f, 0x37df, 0x3b1a, 0x3641, 0x352d, 0x39ab, 0x3b49, 0x3a91, 0x35ba, 0x382f, 0x2b4c, 0x366f, 0x2f0b, 0x33e3, 0x2ccd, 0x3530, 0x33d0, 0x264e, 0x39b4, 0x3968, 0x29f5, 0x3a2c, 0x299a, 0x39c4, 0x380d, 0x3be2, 0x34b2, 0x3879, 0x3532, 0x34ac, 0x3685, 0x3b5e, 0x3426, 0x3b4d, 0x34ec, 0x32e0, 0x3767, 0x39d7, 0x3119, 0x39db, 0x36e1, 0x39ec, 0x388d, 0x3731, 0x314a, 0x39c5, 0x3325, 0x3284, 0x38c5, 0x2cf4, 0x2180, 0x3614, 0x382e, +0x2afc, 0x3562, 0x365c, 0x32dd, 0x3a1d, 0x39c0, 0x3510, 0x3ae7, 0x22b7, 0x3538, 0x3604, 0x3bb0, 0x3a8e, 0x38ca, 0x379d, 0x36f1, 0x3947, 0x317f, 0x2bfa, 0x3bc0, 0x3ad4, 0x3a19, 0x308b, 0x390b, 0x353d, 0x3599, 0x344e, 0x3159, 0x39fc, 0x362e, 0x3bf5, 0x3246, 0x38e9, 0x3551, 0x3981, 0x3776, 0x3964, 0x3966, 0x335b, 0x3361, 0x3abc, 0x39d1, 0x3b96, 0x3a40, 0x3bfc, 0x30f6, 0x2fc2, 0x350a, 0x3857, 0x3175, 0x3929, 0x383e, 0x38c1, 0x3b21, 0x3025, 0x3a20, 0x3b6f, 0x3600, 0x3b06, 0x30d2, 0x30c3, 0x3550, 0x3025, 0x33c7, 0x3724, 0x3819, 0x38e3, 0x33fe, 0x3ad1, 0x2f0b, 0x38fe, 0x3458, 0x3bca, 0x391e, 0x345a, 0x36da, 0x38d7, 0x2dbd, 0x2c4e, 0x38b4, 0x35ea, 0x2970, 0x2ec0, 0x2519, 0x3552, 0x37cd, 0x3893, 0x3150, 0x38d6, 0x360d, 0x3986, 0x38e3, 0x3847, 0x36dc, 0x3a12, 0x3a3b, +0x34ea, 0x3a8b, 0x31db, 0x3a10, 0x34ca, 0x3b7e, 0x324e, 0x393b, 0x3a38, 0x3791, 0x2727, 0x31a9, 0x3beb, 0x3a43, 0x3ad3, 0x2c46, 0x3bc4, 0x38a9, 0x3918, 0x3b1c, 0x381d, 0x32aa, 0x367b, 0x3a80, 0x3a59, 0x37f6, 0x37ac, 0x36aa, 0x3072, 0x3960, 0x388c, 0x3a91, 0x3908, 0x34ab, 0x2f14, 0x3b72, 0x38f9, 0x359f, 0x38e2, 0x2938, 0x39ba, 0x2aa7, 0x3276, 0x3a66, 0x394d, 0x2de4, 0x39b0, 0x3835, 0x3b49, 0x2d77, 0x3ba2, 0x348b, 0x39f0, 0x381d, 0x382c, 0x384d, 0x3798, 0x3a0f, 0x38c3, 0x2ecb, 0x3472, 0x308f, 0x350c, 0x3014, 0x38e7, 0x2aff, 0x30ec, 0x3928, 0x36f5, 0x3909, 0x3b46, 0x2a93, 0x37cb, 0x3bb6, 0x2fbc, 0x3a3a, 0x3a47, 0x343e, 0x3bf1, 0x3b8f, 0x3bcb, 0x376d, 0x3669, 0x3892, 0x35c2, 0x3512, 0x370f, 0x35dc, 0x3923, 0x39e8, 0x3880, 0x288b, 0x36e7, 0x359e, 0x346f, 0x3b64, +0x3b1c, 0x340e, 0x25ab, 0x3b4e, 0x3897, 0x3bdb, 0x2da4, 0x389c, 0x36fd, 0x3a3c, 0x2f2d, 0x38fb, 0x395c, 0x2ea7, 0x3949, 0x368b, 0x35a3, 0x377c, 0x32de, 0x35b1, 0x3529, 0x301d, 0x3771, 0x393f, 0x3993, 0x3ae0, 0x3bda, 0x375b, 0x31ff, 0x3989, 0x3ad0, 0x3bb6, 0x3814, 0x3999, 0x3854, 0x39e7, 0x37fa, 0x3afc, 0x185f, 0x2e32, 0x3697, 0x3942, 0x3aa0, 0x3b75, 0x3ad3, 0x3aa8, 0x39b8, 0x38c2, 0x38fb, 0x39a4, 0x3b8f, 0x3b2e, 0x334d, 0x3a0c, 0x361b, 0x3a46, 0x3337, 0x388d, 0x321b, 0x38bc, 0x3005, 0x35a4, 0x3bf5, 0x3bcf, 0x3a44, 0x3ac7, 0x3a7d, 0x3b2c, 0x39c5, 0x2001, 0x3594, 0x3a29, 0x3131, 0x3ab9, 0x39d9, 0x38c4, 0x3666, 0x37a8, 0x3a75, 0x3a10, 0x3441, 0x3b7e, 0x23f5, 0x3ab2, 0x306f, 0x3bc0, 0x3989, 0x3361, 0x36ea, 0x2eb9, 0x360f, 0x351c, 0x2a16, 0x3bfe, 0x372b, 0x3b97, +0x3bbf, 0x2cf5, 0x3922, 0x316e, 0x37ad, 0x3a7f, 0x3863, 0x3a4c, 0x37a4, 0x35c1, 0x3b77, 0x3549, 0x3a83, 0x37c4, 0x3b84, 0x38c6, 0x3a7f, 0x2f24, 0x2fc0, 0x3475, 0x3a6a, 0x3bc4, 0x3a21, 0x3b96, 0x365c, 0x38b7, 0x31ce, 0x3bcc, 0x3b80, 0x3a31, 0x3523, 0x2d9d, 0x359e, 0x3afe, 0x371d, 0x2d94, 0x3a2a, 0x3ace, 0x3bed, 0x3726, 0x2fa1, 0x3abe, 0x3624, 0x2be4, 0x2b70, 0x394e, 0x3640, 0x391d, 0x3892, 0x38e2, 0x333c, 0x3080, 0x2ac2, 0x326c, 0x2f8b, 0x38ac, 0x3097, 0x3b80, 0x3ae4, 0x39d4, 0x3676, 0x3969, 0x34c8, 0x3906, 0x2930, 0x3acb, 0x3bb3, 0x3bba, 0x3646, 0x2ba1, 0x30bf, 0x38f2, 0x3bbc, 0x3a3f, 0x34c2, 0x3832, 0x3938, 0x3a79, 0x3546, 0x3bd5, 0x3ae5, 0x329a, 0x342c, 0x2c42, 0x35c1, 0x2616, 0x3ad4, 0x38c6, 0x38b6, 0x3b0d, 0x38dd, 0x2e8d, 0x3891, 0x2f1c, 0x3b9d, 0x3a8f, +0x30e4, 0x2c4f, 0x2fb6, 0x31da, 0x3784, 0x3043, 0x2d5c, 0x3bc0, 0x3998, 0x3b84, 0x387f, 0x3b93, 0x3898, 0x337c, 0x32b4, 0x28c3, 0x334f, 0x389c, 0x3865, 0x360b, 0x3a70, 0x3201, 0x324c, 0x3583, 0x381a, 0x3a58, 0x33e9, 0x3b02, 0x3093, 0x33c0, 0x375c, 0x305d, 0x1f9a, 0x38e4, 0x3bc7, 0x35bb, 0x2d39, 0x3299, 0x3753, 0x3b37, 0x3af5, 0x36d7, 0x3324, 0x3716, 0x3b60, 0x3202, 0x3949, 0x3b79, 0x36c3, 0x3901, 0x39f5, 0x2b55, 0x3996, 0x38e1, 0x3836, 0x3b5a, 0x3790, 0x39f6, 0x3532, 0x37ac, 0x2bc5, 0x3948, 0x3b8f, 0x37b8, 0x3999, 0x3413, 0x3a8f, 0x2b74, 0x2839, 0x3870, 0x369f, 0x38b9, 0x3819, 0x3aef, 0x37f9, 0x368b, 0x3bf4, 0x30a6, 0x2e58, 0x3b6e, 0x3b59, 0x3a5d, 0x2e63, 0x2a40, 0x34b3, 0x377d, 0x3991, 0x3542, 0x3300, 0x396d, 0x3bf4, 0x371b, 0x2c09, 0x3020, 0x3a1e, 0x32c5, +0x3b59, 0x3bb5, 0x3a14, 0x384f, 0x3534, 0x3bb6, 0x3aef, 0x3b51, 0x357e, 0x3760, 0x3395, 0x3046, 0x3977, 0x380e, 0x3b85, 0x39ed, 0x3038, 0x2bdc, 0x3aec, 0x3aa6, 0x3ace, 0x38b5, 0x308b, 0x39e2, 0x3271, 0x3b31, 0x3693, 0x397e, 0x39a9, 0x396f, 0x3021, 0x3b12, 0x350e, 0x38ea, 0x38ef, 0x3aae, 0x37b3, 0x2e83, 0x32f6, 0x3818, 0x3702, 0x332d, 0x3bfc, 0x3b15, 0x3ae6, 0x337f, 0x29f9, 0x3ba8, 0x38b1, 0x381a, 0x3bd6, 0x3a40, 0x3027, 0x3b8b, 0x38b2, 0x35d1, 0x39b7, 0x3adf, 0x2b70, 0x1a44, 0x3470, 0x3b21, 0x3774, 0x3b7a, 0x38b8, 0x304d, 0x3bd6, 0x2a2a, 0x3a95, 0x34bc, 0x2835, 0x3b03, 0x35bd, 0x3bc2, 0x30fe, 0x3a5d, 0x3829, 0x34be, 0x3398, 0x32f7, 0x3b1c, 0x34a5, 0x3511, 0x3802, 0x383e, 0x3176, 0x3241, 0x359f, 0x36f9, 0x380a, 0x310c, 0x3b1f, 0x375d, 0x365a, 0x35d0, 0x3302, +0x3459, 0x35e1, 0x3514, 0x3ba6, 0x381e, 0x30d8, 0x320a, 0x3b8a, 0x39b8, 0x3873, 0x3982, 0x3ae7, 0x3a5b, 0x380d, 0x3bf6, 0x396d, 0x3126, 0x1cf5, 0x37f7, 0x3b43, 0x37a7, 0x3b91, 0x357b, 0x216d, 0x3336, 0x3885, 0x26d5, 0x38f1, 0x369e, 0x3b62, 0x30d5, 0x3a41, 0x31b1, 0x3b8d, 0x3983, 0x2cfb, 0x3857, 0x3239, 0x2ecf, 0x2e22, 0x3889, 0x31a0, 0x3432, 0x3957, 0x2aad, 0x3b93, 0x38e5, 0x3a32, 0x3bf6, 0x2a9e, 0x3a57, 0x34b8, 0x2e9b, 0x3a83, 0x3b86, 0x314e, 0x3738, 0x3954, 0x36bb, 0x3a82, 0x361e, 0x380a, 0x3bc7, 0x39ea, 0x37f9, 0x3a9f, 0x38fa, 0x3916, 0x3b87, 0x389c, 0x375f, 0x30b5, 0x381d, 0x39f9, 0x3969, 0x3b91, 0x31b3, 0x3968, 0x3baf, 0x3395, 0x38a5, 0x3ae2, 0x3b91, 0x3a31, 0x3a75, 0x3667, 0x346f, 0x31b1, 0x3921, 0x38a1, 0x3981, 0x3ab5, 0x34c5, 0x324b, 0x3b5f, 0x3b66, +0x35e0, 0x3b4e, 0x34ef, 0x1c7e, 0x3b6e, 0x3724, 0x3858, 0x381c, 0x3bc1, 0x3475, 0x3a93, 0x38a0, 0x3489, 0x3951, 0x3918, 0x304f, 0x314f, 0x3ad7, 0x382d, 0x38ef, 0x3818, 0x33a3, 0x392d, 0x3079, 0x39b8, 0x3b2f, 0x3ad7, 0x3a4a, 0x383b, 0x295b, 0x380a, 0x3895, 0x3a0a, 0x3b28, 0x36ef, 0x3617, 0x3668, 0x3b95, 0x38e3, 0x3b69, 0x3448, 0x38bc, 0x34b1, 0x34d7, 0x3146, 0x269b, 0x2b3b, 0x371a, 0x3a3e, 0x3a71, 0x3791, 0x3b89, 0x3a76, 0x3bfd, 0x354e, 0x3bc8, 0x3937, 0x302e, 0x38e3, 0x2c2c, 0x20e6, 0x3880, 0x2c5e, 0x2506, 0x38b6, 0x3b42, 0x3be1, 0x3ab4, 0x3a0d, 0x3573, 0x31a6, 0x366c, 0x37c2, 0x34b2, 0x3856, 0x3bd4, 0x3150, 0x2adb, 0x3779, 0x3694, 0x2a1e, 0x3763, 0x39cd, 0x39a5, 0x3470, 0x348e, 0x399f, 0x3326, 0x2d96, 0x363a, 0x3610, 0x38fd, 0x24f0, 0x34bd, 0x32c9, 0x3869, +0x361b, 0x3307, 0x3bfc, 0x36bd, 0x2784, 0x37f1, 0x3a2e, 0x3579, 0x35ab, 0x39c9, 0x39b4, 0x2e9a, 0x3869, 0x24bf, 0x2c45, 0x3a0b, 0x369d, 0x391f, 0x3789, 0x2d9b, 0x37ac, 0x3829, 0x3177, 0x3286, 0x312b, 0x3153, 0x2ff3, 0x375c, 0x2afb, 0x290a, 0x3aaf, 0x3b17, 0x39f6, 0x3a53, 0x3888, 0x3ab6, 0x37e8, 0x3442, 0x3523, 0x3a72, 0x2d0a, 0x3551, 0x3923, 0x3538, 0x3abc, 0x3a29, 0x358a, 0x2ec5, 0x3a32, 0x3371, 0x3438, 0x301a, 0x3877, 0x36f7, 0x39e0, 0x372f, 0x3b39, 0x399c, 0x38b5, 0x3488, 0x392b, 0x312e, 0x3bd2, 0x3b34, 0x35d7, 0x3193, 0x38a5, 0x3a75, 0x3768, 0x3660, 0x3add, 0x38c6, 0x3944, 0x353a, 0x398e, 0x3627, 0x361a, 0x32ca, 0x38dd, 0x3293, 0x37f1, 0x2b97, 0x2465, 0x3a2e, 0x39c5, 0x3bef, 0x3879, 0x3a91, 0x3873, 0x39ae, 0x3994, 0x35aa, 0x3648, 0x376e, 0x371e, 0x3a8c, +0x359b, 0x381d, 0x3506, 0x382e, 0x39b0, 0x2f4c, 0x3022, 0x3af3, 0x3828, 0x3407, 0x3244, 0x306d, 0x3c00, 0x3019, 0x39b3, 0x357e, 0x36bd, 0x3979, 0x369a, 0x2025, 0x3ab5, 0x3509, 0x3969, 0x3b5f, 0x38b3, 0x3a55, 0x3899, 0x3a8d, 0x348a, 0x3010, 0x3b00, 0x374c, 0x37e7, 0x35f2, 0x36bc, 0x31ec, 0x3b49, 0x3960, 0x27a1, 0x3984, 0x3824, 0x3a95, 0x39e4, 0x3901, 0x34a8, 0x354a, 0x3929, 0x38ef, 0x399c, 0x381a, 0x34ea, 0x247b, 0x3113, 0x37ff, 0x3923, 0x3a12, 0x398a, 0x3135, 0x374c, 0x345b, 0x3aae, 0x33ad, 0x3834, 0x3426, 0x32a3, 0x3854, 0x31cd, 0x3a78, 0x32ea, 0x288e, 0x38a9, 0x2d3a, 0x31ce, 0x2ed6, 0x393d, 0x197a, 0x3880, 0x39cd, 0x3884, 0x3af0, 0x312d, 0x3711, 0x32be, 0x3193, 0x323d, 0x3222, 0x28b9, 0x3bcc, 0x3626, 0x3836, 0x36bf, 0x3393, 0x32d3, 0x39f3, 0x3b91, 0x3719, +0x38ac, 0x1036, 0x3759, 0x3547, 0x365e, 0x3a68, 0x37eb, 0x353b, 0x3931, 0x294d, 0x35c8, 0x3aad, 0x387c, 0x3ac5, 0x3a08, 0x3a0d, 0x34b8, 0x3747, 0x3a10, 0x3908, 0x3825, 0x3509, 0x379f, 0x2ebe, 0x3a30, 0x353f, 0x3ab6, 0x35d3, 0x3ae3, 0x39a0, 0x272d, 0x2da5, 0x3a07, 0x323e, 0x3865, 0x3700, 0x2c37, 0x2fb3, 0x36e3, 0x279c, 0x364d, 0x38b9, 0x39b5, 0x35d8, 0x376b, 0x37f2, 0x3421, 0x3a83, 0x3562, 0x2cad, 0x382f, 0x3703, 0x38bf, 0x3afc, 0x3800, 0x3793, 0x3ae7, 0x39f6, 0x2d8f, 0x365d, 0x380f, 0x39cf, 0x3609, 0x2da9, 0x2cc7, 0x361c, 0x3682, 0x2762, 0x3611, 0x3954, 0x21e5, 0x29bd, 0x3b94, 0x32e9, 0x36fc, 0x3b3c, 0x3bec, 0x3bde, 0x35b2, 0x3640, 0x3824, 0x2dba, 0x35da, 0x3853, 0x3b62, 0x3b56, 0x373f, 0x324d, 0x395f, 0x2a6b, 0x3b59, 0x392f, 0x3953, 0x3bbe, 0x3a44, 0x38fc, +0x38aa, 0x3987, 0x24c1, 0x3a51, 0x3b03, 0x3770, 0x381d, 0x3847, 0x394a, 0x35fe, 0x3b59, 0x34d4, 0x380f, 0x3985, 0x2719, 0x3811, 0x3a63, 0x387d, 0x370b, 0x36e2, 0x38f4, 0x3af2, 0x364c, 0x30e7, 0x3816, 0x2afe, 0x339b, 0x380d, 0x304e, 0x3b55, 0x3a4e, 0x2ebb, 0x377a, 0x396d, 0x31bf, 0x3914, 0x372b, 0x38a5, 0x39a9, 0x24f1, 0x39ad, 0x348a, 0x3b26, 0x3ab0, 0x35f3, 0x38ac, 0x34a5, 0x39b2, 0x3a88, 0x364d, 0x36a3, 0x33eb, 0x39f7, 0x3ad7, 0x37c1, 0x3805, 0x357a, 0x3949, 0x28ee, 0x3b2e, 0x3ba7, 0x381c, 0x35bf, 0x323a, 0x39dd, 0x3b40, 0x3908, 0x32c0, 0x3a12, 0x3419, 0x388e, 0x3890, 0x3b59, 0x2ea4, 0x363b, 0x3790, 0x3a00, 0x3b36, 0x2a03, 0x3875, 0x3932, 0x3513, 0x3755, 0x2d73, 0x19b7, 0x352b, 0x309e, 0x2842, 0x38cc, 0x38a0, 0x3423, 0x380e, 0x3b76, 0x39ad, 0x3a11, 0x3a5b, +0x3bd8, 0x3b5c, 0x30ee, 0x3b97, 0x32ee, 0x3a5d, 0x3bfb, 0x3706, 0x2e45, 0x2f4f, 0x3281, 0x39ec, 0x3705, 0x369c, 0x3022, 0x3b27, 0x3a91, 0x3a6d, 0x3438, 0x3461, 0x3846, 0x394f, 0x3772, 0x36f3, 0x34d2, 0x39ee, 0x3578, 0x3959, 0x3282, 0x1b2c, 0x39be, 0x37f0, 0x3909, 0x34aa, 0x3ad6, 0x3ad8, 0x392b, 0x39b5, 0x3391, 0x3aa3, 0x3854, 0x3a72, 0x31bc, 0x23fa, 0x331a, 0x38aa, 0x3a73, 0x2a74, 0x3956, 0x30fd, 0x36bd, 0x312d, 0x38b3, 0x3b26, 0x1e7f, 0x310a, 0x235b, 0x367b, 0x383e, 0x3b57, 0x39b0, 0x3785, 0x2ddc, 0x38de, 0x2c79, 0x386b, 0x3ace, 0x32e5, 0x2c3a, 0x3bc5, 0x3a95, 0x317b, 0x3a54, 0x3ba1, 0x38ff, 0x3b54, 0x39dd, 0x344c, 0x38d0, 0x3984, 0x32d7, 0x35c3, 0x319e, 0x3881, 0x3b80, 0x3923, 0x396f, 0x343d, 0x378e, 0x39e0, 0x3434, 0x38ab, 0x3a55, 0x3905, 0x2a86, 0x3aa6, +0x2c3b, 0x33da, 0x2eb0, 0x3aa4, 0x2871, 0x31a0, 0x35ba, 0x35ed, 0x3a48, 0x3968, 0x35f8, 0x2810, 0x3ab8, 0x395a, 0x369e, 0x3664, 0x3bef, 0x30b9, 0x33f3, 0x366d, 0x3961, 0x377d, 0x3367, 0x3aa2, 0x39de, 0x3bdc, 0x37f3, 0x3618, 0x394c, 0x39c6, 0x3867, 0x34c3, 0x358b, 0x3256, 0x3aac, 0x3623, 0x39ee, 0x3723, 0x3b2a, 0x3a63, 0x3855, 0x38a1, 0x2cb1, 0x3b80, 0x38d6, 0x3045, 0x3bc3, 0x3bdf, 0x378b, 0x3af4, 0x2411, 0x3863, 0x3869, 0x353b, 0x24cc, 0x396a, 0x3a09, 0x3aab, 0x32cd, 0x3970, 0x3178, 0x3a61, 0x2faa, 0x3a82, 0x3487, 0x3af5, 0x36ee, 0x39f0, 0x2a25, 0x3006, 0x3bc0, 0x3151, 0x31b0, 0x36e6, 0x351c, 0x2a55, 0x3846, 0x38b7, 0x37e3, 0x3a7c, 0x293b, 0x327d, 0x3680, 0x390a, 0x3ad5, 0x2e0c, 0x3bb9, 0x1ddf, 0x35fa, 0x3995, 0x380c, 0x3923, 0x3a4f, 0x3ad5, 0x3a80, 0x3113, +0x324a, 0x39c6, 0x353b, 0x2d16, 0x346a, 0x321f, 0x3703, 0x2f6c, 0x2c37, 0x3ada, 0x3be4, 0x3b3e, 0x3aac, 0x3a7f, 0x36d4, 0x3606, 0x3343, 0x393a, 0x382b, 0x3424, 0x38d4, 0x39ed, 0x3013, 0x31ff, 0x3794, 0x3b1c, 0x3919, 0x3bb5, 0x3769, 0x39a1, 0x3be5, 0x3b1a, 0x35fd, 0x3ba8, 0x2af5, 0x38ea, 0x3b19, 0x3814, 0x39ea, 0x3b1e, 0x37c0, 0x34f3, 0x395a, 0x38b6, 0x392a, 0x38a5, 0x3121, 0x2d9b, 0x3799, 0x304c, 0x349d, 0x3153, 0x398a, 0x3a70, 0x3a3d, 0x34bd, 0x39d7, 0x37b6, 0x3817, 0x34a8, 0x3ae2, 0x350d, 0x3ad0, 0x3a0e, 0x3496, 0x3b73, 0x3879, 0x3841, 0x3316, 0x3671, 0x36a4, 0x30bf, 0x3a5e, 0x3594, 0x3bde, 0x3b55, 0x3982, 0x395b, 0x364c, 0x3a6c, 0x32b0, 0x39cd, 0x3900, 0x38dc, 0x390a, 0x2d48, 0x376e, 0x3473, 0x2c65, 0x3934, 0x30cd, 0x3518, 0x3ba4, 0x3423, 0x2f57, 0x3682, +0x3979, 0x37b1, 0x3926, 0x343b, 0x360a, 0x234e, 0x3895, 0x3a09, 0x3810, 0x39d4, 0x3529, 0x3a28, 0x331a, 0x385f, 0x2576, 0x3973, 0x3a0e, 0x33b0, 0x21da, 0x3925, 0x32c8, 0x2fbe, 0x32e7, 0x3b38, 0x3a9a, 0x2ab2, 0x320d, 0x3be9, 0x3720, 0x351d, 0x311b, 0x38f2, 0x3952, 0x3985, 0x3b4b, 0x3634, 0x38af, 0x398b, 0x278f, 0x3460, 0x2f0d, 0x28e1, 0x3412, 0x3978, 0x372c, 0x3a02, 0x2e72, 0x10dc, 0x36c6, 0x3883, 0x3b5a, 0x38e8, 0x3b97, 0x394e, 0x2d07, 0x39b1, 0x3754, 0x2c54, 0x3577, 0x3ab3, 0x3a2a, 0x376a, 0x39b4, 0x396a, 0x3222, 0x396c, 0x39dc, 0x34d5, 0x3903, 0x3841, 0x3912, 0x3bdb, 0x3ba8, 0x364c, 0x39b0, 0x38a9, 0x3acd, 0x3015, 0x368d, 0x3b46, 0x351a, 0x38e2, 0x36f2, 0x37c7, 0x3bdb, 0x3b60, 0x3ba0, 0x3bc3, 0x363f, 0x28c1, 0x2add, 0x3aaa, 0x397b, 0x390f, 0x2f8f, 0x3836, +0x380f, 0x35e9, 0x35ee, 0x3386, 0x388f, 0x3bca, 0x3782, 0x37f2, 0x308e, 0x3a28, 0x3738, 0x31f6, 0x36a4, 0x39eb, 0x2b1f, 0x3ba6, 0x3322, 0x3ad6, 0x386f, 0x3b19, 0x3aa5, 0x2dd8, 0x3a6a, 0x380b, 0x39e3, 0x3225, 0x3bb2, 0x39e9, 0x30e5, 0x39df, 0x3ae8, 0x3075, 0x3025, 0x2f80, 0x30c1, 0x3854, 0x3914, 0x24e1, 0x3b4c, 0x32f6, 0x2e0e, 0x38a8, 0x3572, 0x2e9b, 0x38c3, 0x31f1, 0x3357, 0x3770, 0x3575, 0x317f, 0x345d, 0x3162, 0x38cd, 0x3111, 0x3543, 0x36c2, 0x36d6, 0x3754, 0x3b6e, 0x3900, 0x3996, 0x38b5, 0x352e, 0x3a32, 0x3881, 0x2487, 0x3795, 0x3814, 0x38f9, 0x388b, 0x366d, 0x3b8a, 0x3751, 0x3a1b, 0x380d, 0x39da, 0x3a56, 0x306c, 0x3295, 0x3992, 0x345c, 0x3a88, 0x370a, 0x357e, 0x31bc, 0x3af0, 0x2f33, 0x2c05, 0x3255, 0x595, 0x3acd, 0x3615, 0x26d4, 0x31b8, 0x3860, 0x3839, +0x30a4, 0x2aed, 0x381b, 0x3438, 0x3519, 0x3a7d, 0x39e4, 0x3704, 0x376f, 0x31d2, 0x3643, 0x29d2, 0x3101, 0x34cc, 0x39c1, 0x333f, 0x3a92, 0x2b34, 0x2d97, 0x334d, 0x3b85, 0x3b74, 0x37f2, 0x38e0, 0x3092, 0x34d3, 0x38af, 0x3489, 0x365c, 0x3bab, 0x3abc, 0x3b90, 0x3251, 0x3397, 0x399d, 0x32a2, 0x3545, 0x29ac, 0x3405, 0x37dd, 0x3899, 0x312c, 0x3500, 0x3983, 0x3bd4, 0x3bfc, 0x33a7, 0x2df1, 0x2c94, 0x374e, 0x351c, 0x3a18, 0x3984, 0x3b46, 0x2d2c, 0x2997, 0x365e, 0x3461, 0x3654, 0x2530, 0x3945, 0x1e1e, 0x3374, 0x2fb7, 0x31de, 0x3bff, 0x387b, 0x3701, 0x284f, 0x3b59, 0x3a7d, 0x3866, 0x3958, 0x3a6c, 0x358a, 0x3132, 0x35be, 0x3819, 0x386a, 0x369d, 0x3b3b, 0x3549, 0x3b06, 0x3173, 0x31f2, 0x39fb, 0x35a6, 0x3525, 0x3737, 0x3abb, 0x3b5e, 0x3122, 0x39e5, 0x3538, 0x3817, 0x3727, +0x3979, 0x39fe, 0x3487, 0x3a8e, 0x3407, 0x3140, 0x3afa, 0x39b7, 0x374e, 0x3b66, 0x3b0f, 0x39c9, 0x3266, 0x34dc, 0x396a, 0x38db, 0x35bd, 0x31c8, 0x37ed, 0x3667, 0x357e, 0x3518, 0x3139, 0x3bd5, 0x3157, 0x3960, 0x39d2, 0x3a38, 0x366c, 0x3876, 0x39b9, 0x2cf0, 0x3825, 0x3a80, 0x3bbf, 0x3a2d, 0x2fd3, 0x35e2, 0x35c6, 0x3a07, 0x368f, 0x391e, 0x3be7, 0x39be, 0x3533, 0x39c7, 0x3137, 0x2d6e, 0x3905, 0x3b95, 0x38f8, 0x39f5, 0x3bc1, 0x38a7, 0x38e5, 0x2c58, 0x343c, 0x3656, 0x2c1c, 0x3b1d, 0x39c9, 0x3801, 0x39c1, 0x3bed, 0x26be, 0x362a, 0x3655, 0x31b4, 0x2ad7, 0x3810, 0x3afd, 0x1edc, 0x35e8, 0x2d9f, 0x32fb, 0x316e, 0x38ed, 0x3839, 0x390b, 0x3b97, 0x38e2, 0x3746, 0x3b3b, 0x3b03, 0x395e, 0x353e, 0x375a, 0x3824, 0x25bf, 0x357f, 0x31a9, 0x3aa5, 0x35d6, 0x2a95, 0x1b91, 0x318c, +0x3650, 0x38de, 0x32bf, 0x287b, 0x305d, 0x393e, 0x3bb2, 0x352d, 0x2593, 0x386f, 0x3814, 0x38bd, 0x3532, 0x3084, 0x2880, 0x3bdb, 0x37da, 0x3073, 0x3850, 0x3026, 0x337f, 0x3b64, 0x37e5, 0x33ad, 0x3624, 0x319f, 0x36d7, 0x3939, 0x3553, 0x359d, 0x392d, 0x385f, 0x394f, 0x3aca, 0x34b8, 0x3138, 0x367a, 0x38a4, 0x3a8e, 0x369e, 0x34ef, 0x3b01, 0x3ad8, 0x3875, 0x3bd5, 0x39c4, 0x3b56, 0x394d, 0x38ba, 0x3a48, 0x3ade, 0x3bd6, 0x395f, 0x3737, 0x2dee, 0x3891, 0x35ed, 0x39b2, 0x2fe6, 0x3130, 0x346e, 0x3886, 0x2fb6, 0x3183, 0x3ae1, 0x3301, 0x38f9, 0x3470, 0x3701, 0x3845, 0x327d, 0x33b3, 0x3b06, 0x358e, 0x35eb, 0x38a2, 0x34d1, 0x317c, 0x3b0f, 0x395e, 0x36dc, 0x3511, 0x3a8b, 0x3997, 0x380b, 0x38cb, 0x3b3c, 0x3b54, 0x3330, 0x33d7, 0x357d, 0x3439, 0x2bd4, 0x3678, 0x3891, 0x39cc, +0x3bdb, 0x3af1, 0x3828, 0x3a2b, 0x39b6, 0x36f5, 0x374a, 0x3752, 0x3b11, 0x3306, 0x3bac, 0x3799, 0x39fe, 0x38f5, 0x3219, 0x36df, 0x3ade, 0x3ab0, 0x2fa1, 0x3472, 0x3a33, 0x34d9, 0x390e, 0x37c0, 0x2d6b, 0x38e1, 0x3bdc, 0x3887, 0x3644, 0x319b, 0x32a7, 0x2876, 0x337a, 0x3b38, 0x3904, 0x354b, 0x24b5, 0x1699, 0x3b55, 0x39b7, 0x278d, 0x3784, 0x388d, 0x389f, 0x34ac, 0x30bc, 0x3180, 0x37e5, 0x3462, 0x3641, 0x363a, 0x3805, 0x2fa2, 0x260f, 0x3a51, 0x38c4, 0x30e4, 0x3836, 0x3478, 0x3a31, 0x36ae, 0x3294, 0x3b82, 0x3321, 0x3877, 0x3209, 0x38ad, 0x31af, 0x35b4, 0x28af, 0x3699, 0x3490, 0x3974, 0x3272, 0x391c, 0x3864, 0x31fe, 0x3780, 0x39d9, 0x3607, 0x35a1, 0x339e, 0x3047, 0x33c0, 0x3506, 0x2f45, 0x3b6e, 0x3875, 0x383b, 0x3b4b, 0x3859, 0x35c7, 0x2afe, 0x34f1, 0x363f, 0x2ccc, +0x2888, 0x3101, 0x397a, 0x3715, 0x35b1, 0x369b, 0x3a0c, 0x3839, 0x3514, 0x3189, 0x3be6, 0x3214, 0x3b29, 0x312e, 0x3879, 0x33a8, 0x3a6f, 0x3998, 0x3959, 0x3b41, 0x348b, 0x3acb, 0x391f, 0x39b5, 0x353b, 0x3513, 0x395b, 0x3a72, 0x329c, 0x3a2e, 0x2c1b, 0x376e, 0x3857, 0x35ce, 0x34d3, 0x3952, 0x3b6f, 0x3978, 0x3942, 0x3741, 0x35a2, 0x3201, 0x3806, 0x397a, 0x393f, 0x2f4e, 0x3a07, 0x3b5b, 0x33aa, 0x3686, 0x394b, 0x3b64, 0x3a53, 0x385a, 0x390a, 0x3965, 0x34b6, 0x2f08, 0x39b3, 0x3808, 0x3631, 0x35af, 0x3628, 0x31a2, 0x3b7f, 0x3a04, 0x2951, 0x3a91, 0x39a9, 0x3877, 0x3acc, 0x3aff, 0x3bae, 0x2aa4, 0x3bbe, 0x3b0c, 0x3462, 0x3842, 0x3902, 0x3a55, 0x30e8, 0x3520, 0x30bd, 0x3147, 0x3ba1, 0x3945, 0x37b9, 0x30b4, 0x3573, 0x3b4f, 0x3a1b, 0x3a4a, 0x2d52, 0x345c, 0x366c, 0x3451, +0x34b3, 0x2d91, 0x3564, 0x3803, 0x3b06, 0x3bf5, 0x36b0, 0x356e, 0x341d, 0x39fe, 0x3b9e, 0x2d69, 0x3329, 0x3b30, 0x300d, 0x34e8, 0x3823, 0x3ab8, 0x38ce, 0x3b3c, 0x2983, 0x3680, 0x2841, 0x39ed, 0x393e, 0x30cc, 0x3828, 0x3af3, 0x2d8e, 0x381c, 0x382b, 0x3b29, 0x3b58, 0x380a, 0x2c56, 0x36b0, 0x3b53, 0x2f0b, 0x357b, 0x38de, 0x374e, 0x3aef, 0x3a95, 0x3a7a, 0x3a23, 0x2f2b, 0x3903, 0x3b97, 0x39e3, 0x2e50, 0x35fd, 0x3bf5, 0x3ae9, 0x3bb6, 0x3ab7, 0x391f, 0x326f, 0x3264, 0x3453, 0x37b3, 0x2d1b, 0x3a55, 0x3921, 0x36d7, 0x2b01, 0x388e, 0x3969, 0x2f04, 0x31b9, 0x3bd2, 0x3a16, 0x362a, 0x31d7, 0x3ae1, 0x3735, 0x2e5f, 0x3b56, 0x38a8, 0x3b30, 0x3a77, 0x35e2, 0x3aa6, 0x3222, 0x38f3, 0x399b, 0x330b, 0x350f, 0x2b19, 0x3b45, 0x38b4, 0x3ba8, 0x3a8f, 0x3abe, 0x2760, 0x341e, 0x323d, +0x2eab, 0x3514, 0x3b83, 0x39bd, 0x331e, 0x2bfc, 0x389d, 0x381c, 0x36b5, 0x35e9, 0x392e, 0x2b7a, 0x2fcf, 0x3523, 0x3b37, 0x3129, 0x3a56, 0x3861, 0x3b75, 0x38cd, 0x3604, 0x3286, 0x3ac4, 0x3926, 0x3495, 0x3bfc, 0x351b, 0x3696, 0x34e1, 0x2f4e, 0x26e3, 0x39ce, 0x34db, 0x2e38, 0x393c, 0x371c, 0x3843, 0x3a1b, 0x272b, 0x3a27, 0x376c, 0x393f, 0x39cc, 0x39be, 0x39f7, 0x2c76, 0x3bd3, 0x3a3b, 0x3970, 0x3ab5, 0x3915, 0x35c3, 0x36d0, 0x3957, 0x3aa5, 0x25d6, 0x3b79, 0x2217, 0x39c7, 0x3b15, 0x3aa1, 0x3901, 0x378e, 0x3ada, 0x3a6f, 0x384d, 0x372d, 0x39d9, 0x3819, 0x37e8, 0x3527, 0x30ee, 0x3867, 0x3229, 0x3126, 0x3290, 0x3a62, 0x3b2f, 0x32f3, 0x39e0, 0x36e6, 0x3981, 0x305a, 0x2fd0, 0x3724, 0x3822, 0x3359, 0x3869, 0x3bcc, 0x37f1, 0x357c, 0x39df, 0x2e31, 0x3b10, 0x3601, 0x37b1, +0x3aa3, 0x385a, 0x392b, 0x3909, 0x3774, 0x3aab, 0x38a2, 0x3801, 0x2882, 0x38a7, 0x3621, 0x373e, 0x34b4, 0x2e13, 0x3999, 0x381c, 0x369f, 0x2633, 0x3acd, 0x386d, 0x3b94, 0x32a0, 0x1bdc, 0x3873, 0x3249, 0x3692, 0x3be9, 0x325a, 0x32c2, 0x3ad9, 0x1de3, 0x308f, 0x3971, 0x34e6, 0x212b, 0x3bd3, 0x3790, 0x3814, 0x3346, 0x3358, 0x3115, 0x3914, 0x35c7, 0x3287, 0x3b0b, 0x388f, 0x35ac, 0x3002, 0x3a5e, 0x2ede, 0x38cd, 0x374f, 0x3b4c, 0x3578, 0x394c, 0x3951, 0x353c, 0x2e59, 0x3877, 0x31f5, 0x3912, 0x394b, 0x37e7, 0x3667, 0x38c9, 0x3641, 0x343c, 0x37ee, 0x3aa8, 0x3440, 0x34d3, 0x394b, 0x301f, 0x3a76, 0x387e, 0x3a7d, 0x347e, 0x21c8, 0x397c, 0x301a, 0x3a2d, 0x3710, 0x399a, 0x359b, 0x3756, 0x3679, 0x37eb, 0x38e6, 0x2a71, 0x35f9, 0x37eb, 0x3afc, 0x370d, 0x3bce, 0x3884, 0x3211, +0x3a18, 0x3a44, 0x2fcd, 0x3b65, 0x3788, 0x2a46, 0x322a, 0x3538, 0x3bc2, 0x33f4, 0x3932, 0x3835, 0x2fa9, 0x3b95, 0x3756, 0x399d, 0x36b6, 0x3186, 0x389d, 0x346c, 0x3abb, 0x3be4, 0x3919, 0x3993, 0x2ffc, 0x39db, 0x3bce, 0x3b0e, 0x336e, 0x36af, 0x3192, 0x38b7, 0x37ba, 0x3ae4, 0x3116, 0x2c45, 0x3494, 0x3aea, 0x302c, 0x3816, 0x3686, 0x34f2, 0x2fa4, 0x3aa1, 0x222f, 0x370f, 0x341a, 0x3aae, 0x380d, 0x3863, 0x36ca, 0x3a60, 0x3695, 0x387d, 0x391c, 0x2c8b, 0x2d94, 0x369e, 0x399e, 0x36fd, 0x38fc, 0x3b6c, 0x36a8, 0x3a73, 0x33fb, 0x36d0, 0x3720, 0x36d7, 0x37be, 0x2a8f, 0x3180, 0x3ad3, 0x2a1f, 0x3737, 0x3920, 0x2b67, 0x3abf, 0x395e, 0x322b, 0x3ace, 0x39b1, 0x3bdf, 0x2e0b, 0x3018, 0x3278, 0x393a, 0x3a8c, 0x39d0, 0x39cd, 0x308f, 0x3776, 0x38b7, 0x3527, 0x388b, 0x3901, 0x3b8b, +0x237d, 0x38f9, 0x3431, 0x3b1f, 0x3a12, 0x33ac, 0x3a3d, 0x3943, 0x348d, 0x363f, 0x3a2a, 0x2420, 0x3081, 0x3815, 0x382e, 0x38e5, 0x3238, 0x284e, 0x2ec3, 0x3af5, 0x3191, 0x32d6, 0x31c8, 0x39bc, 0x3a2a, 0x340d, 0x3bd9, 0x33dc, 0x3066, 0x39df, 0x30e2, 0x350a, 0x37fc, 0x341d, 0x3828, 0x3a1b, 0x3010, 0x2992, 0x32fd, 0x3bb3, 0x368c, 0x2af2, 0x3af4, 0x3a8f, 0x3793, 0x3620, 0x3b85, 0x3557, 0x316b, 0x288d, 0x3408, 0x3ae8, 0x3af0, 0x3420, 0x3bbd, 0x3a80, 0x309a, 0x3a5d, 0x3a57, 0x3987, 0x3a47, 0x377f, 0x3a01, 0x3a72, 0x3b37, 0x3594, 0x3bfd, 0x36ae, 0x3b99, 0x3bd4, 0x3920, 0x3b8d, 0x37ae, 0x3a46, 0x3184, 0x38ba, 0x1ff8, 0x3b9c, 0x3b68, 0x3621, 0x37f4, 0x2fb7, 0x3010, 0x3b58, 0x33d3, 0x3bbb, 0x291f, 0x3945, 0x3be1, 0x30c6, 0x3bc3, 0x35c6, 0x3bdf, 0x2a15, 0x2e3f, 0x2b1a, +0x3847, 0x3671, 0x34cf, 0x35e0, 0x3b80, 0x34e1, 0x3b3b, 0x305a, 0x327f, 0x3a9e, 0x3803, 0x2a3a, 0x3969, 0x3765, 0x3891, 0x3acc, 0x397d, 0x3549, 0x356e, 0x34c8, 0x2632, 0x30ca, 0x36ba, 0x3a56, 0x37ca, 0x344d, 0x39bc, 0x32f3, 0x3be2, 0x3b24, 0x353f, 0x3ab8, 0x373e, 0x3906, 0x318e, 0x3993, 0x27e3, 0x255c, 0x3afa, 0x33a3, 0x3819, 0x333b, 0x3bb6, 0x3179, 0x3414, 0x35d6, 0x30b1, 0x386b, 0x3b8e, 0x3942, 0x386c, 0x3b39, 0x32d2, 0x37f6, 0x2503, 0x3b14, 0x385c, 0x3a12, 0x3895, 0x39d7, 0x377f, 0x2c2d, 0x3066, 0x3855, 0x35a4, 0x3aeb, 0x3a9c, 0x35a4, 0x2eb7, 0x3b6b, 0x3bfd, 0x38fa, 0x1fd4, 0x3583, 0x3bc9, 0x35d2, 0x3913, 0x34b8, 0x271f, 0x3453, 0x3833, 0x3bb2, 0x3a7f, 0x1c15, 0x1b01, 0x39f1, 0x3bdd, 0x3988, 0x3ac8, 0x397f, 0x3bb4, 0x36d5, 0x37bf, 0x34b4, 0x30f5, 0x39c7, +0x391e, 0x3b4f, 0x2eb2, 0x3b31, 0x3073, 0x39d0, 0x2cd1, 0x2f3b, 0x36cc, 0x3739, 0x222d, 0x3a71, 0x3ba4, 0x3b60, 0x2bb5, 0x3885, 0x3b90, 0x2cea, 0x3ab6, 0x37b0, 0x3813, 0x31a7, 0x3545, 0x3392, 0x39f4, 0x34ae, 0x36c2, 0x3177, 0x3902, 0x39b5, 0x2f98, 0x36c1, 0x36d5, 0x32e8, 0x39ed, 0x30c3, 0x39a8, 0x30f1, 0x39a1, 0x36ec, 0x3bea, 0x34b1, 0x3260, 0x343e, 0x3929, 0x31d9, 0x33d7, 0x3bee, 0x379c, 0x2395, 0x3983, 0x38ce, 0x3297, 0x35fc, 0x3776, 0x3b0a, 0x3ae2, 0x3991, 0x2c03, 0x3712, 0x3b68, 0x2e82, 0x2e43, 0x3705, 0x39d1, 0x3b64, 0x2ff0, 0x3a4a, 0x2f9e, 0x2f32, 0x3ba6, 0x3559, 0x3aa5, 0x39cb, 0x3671, 0x39d2, 0x3aaf, 0x3385, 0x3a0a, 0x3a03, 0x396d, 0x391d, 0x2685, 0x3802, 0x39d5, 0x2af3, 0x39e4, 0x3ace, 0x313a, 0x2d88, 0x2999, 0x39a4, 0x3302, 0x390b, 0x3847, 0x3b87, +0x3813, 0x30fa, 0x3986, 0x3bc2, 0x3bc2, 0x3bf1, 0x3251, 0x391a, 0x2445, 0x3884, 0x3649, 0x320f, 0x305c, 0x3418, 0x337f, 0x38fa, 0x39ac, 0x3a4d, 0x346d, 0x33ca, 0x32da, 0x335c, 0x37ff, 0x389e, 0x39b3, 0x364e, 0x328a, 0x3690, 0x36cb, 0x3126, 0x374a, 0x3ba4, 0x37fe, 0x3233, 0x2afb, 0x3335, 0x3095, 0x38c9, 0x3a8b, 0x39c4, 0x3505, 0x32f2, 0x3a53, 0x388e, 0x34b9, 0x39d7, 0x34e7, 0x3a78, 0x3b19, 0x34e0, 0x35e9, 0x375f, 0x3a89, 0x38c6, 0x3764, 0x383c, 0x266a, 0x3672, 0x31fc, 0x3b60, 0x3a99, 0x3917, 0x3b92, 0x3759, 0x3acd, 0x39ad, 0x31fe, 0x3bcc, 0x3bec, 0x31a6, 0x33fa, 0x36f4, 0x2295, 0x3b2b, 0x3625, 0x3882, 0x3a88, 0x369a, 0x3b81, 0x399f, 0x34a9, 0x381c, 0x2db8, 0x365d, 0x3741, 0x382c, 0x3b87, 0x3b1c, 0x300b, 0x2ef6, 0x2e99, 0x3975, 0x24d7, 0x387e, 0x344a, 0x3503, +0x3b1e, 0x3900, 0x2bf3, 0x3170, 0x39bd, 0x3a2e, 0x37ad, 0x38b6, 0x38bf, 0x31c3, 0x3ae8, 0x368d, 0x36ac, 0x35e2, 0x3497, 0x2dec, 0x39c9, 0x389b, 0x3156, 0x3a86, 0x3892, 0x3976, 0x394b, 0x3b82, 0x3907, 0x392e, 0x2538, 0x3871, 0x348e, 0x3a0d, 0x347f, 0x316b, 0x378b, 0x3aa4, 0x38f5, 0x3595, 0x2d85, 0x2d42, 0x3aca, 0x3688, 0x3085, 0x3694, 0x399c, 0x3b6c, 0x3bb8, 0x3bac, 0x3a69, 0x35bf, 0x316c, 0x335f, 0x2e66, 0x2f7e, 0x360e, 0x3b28, 0x3254, 0x347f, 0x3687, 0x3018, 0x37b7, 0x3ba9, 0x3814, 0x3bd2, 0x22ed, 0x3735, 0x39a7, 0x3a17, 0x3a9c, 0x3264, 0x35f9, 0x38e9, 0x3610, 0x3ad7, 0x39ab, 0x304c, 0x3734, 0x3a58, 0x30be, 0x394f, 0x2f1c, 0x33be, 0x3818, 0x38b7, 0x3845, 0x3a9d, 0x3721, 0x324f, 0x34e0, 0x3a0e, 0x3b77, 0x3b14, 0x3884, 0x3a5a, 0x3aed, 0x3349, 0x39d0, 0x3ba6, +0x3345, 0x3494, 0x396e, 0x33e0, 0x3a01, 0x26be, 0x3a27, 0x3a66, 0x3a48, 0x3bc4, 0x3a0e, 0x39ac, 0x3758, 0x32d8, 0x3570, 0x2add, 0x2f32, 0x3856, 0x3814, 0x39a6, 0x3418, 0x3919, 0x2faf, 0x3a0f, 0x3816, 0x3366, 0x388c, 0x3471, 0x2993, 0x395d, 0x32cc, 0x3b00, 0x3a82, 0x3b5a, 0x2edd, 0x30f7, 0x3bba, 0x2a65, 0x368e, 0x311e, 0x35ff, 0x3734, 0x2931, 0x34db, 0x3734, 0x3b8a, 0x2441, 0x33bc, 0x3aed, 0x3793, 0x31ee, 0x37fe, 0x31f4, 0x36f4, 0x390e, 0x3b97, 0x3963, 0x3510, 0x30f9, 0x3a6e, 0x35d3, 0x34ba, 0x3a05, 0x39de, 0x3646, 0x3b0f, 0x3b2e, 0x3698, 0x3bbd, 0x3306, 0x3990, 0x3984, 0x2e28, 0x3880, 0x3b82, 0x350c, 0x3a3e, 0x3b00, 0x3735, 0x3944, 0x39a1, 0x34ea, 0x3812, 0x3a9c, 0x2270, 0x3b9b, 0x383d, 0x34b9, 0x33ff, 0x314b, 0x35e9, 0x3a76, 0x3b80, 0x3922, 0x3767, 0x3119, +0x39f0, 0x391b, 0x37d6, 0x37d9, 0x3b86, 0x3923, 0x2434, 0x3be9, 0x3918, 0x36cb, 0x3b4a, 0x296e, 0x3bcf, 0x38d5, 0x3342, 0x3482, 0x3995, 0x3958, 0x33a0, 0x38a7, 0x3be6, 0x3b68, 0x3168, 0x398d, 0x3ab4, 0x325a, 0x3bd2, 0x3915, 0x1a9f, 0x356c, 0x303d, 0x3b50, 0x32c5, 0x3a1c, 0x3a0e, 0x392c, 0x3b24, 0x3b8b, 0x322b, 0x2661, 0x3bba, 0x35e3, 0x3be0, 0x38f5, 0x39ab, 0x316b, 0x3b05, 0x3a05, 0x3969, 0x370c, 0x3851, 0x3a7c, 0x3801, 0x3b8b, 0x38db, 0x3aef, 0x354a, 0x2845, 0x3ac7, 0x3547, 0x35c2, 0x3564, 0x30d5, 0x3bf1, 0x301b, 0x3434, 0x3583, 0x3a9c, 0x1c52, 0x2e1e, 0x3522, 0x3993, 0x3bfe, 0x3524, 0x370c, 0x33ed, 0x3981, 0x2bfe, 0x2ca4, 0x3b56, 0x3b03, 0x3450, 0x3768, 0x3baf, 0x3760, 0x3a8f, 0x2d31, 0x2c4e, 0x3167, 0x35e6, 0x396d, 0x3b31, 0x309b, 0x347e, 0x39ea, 0x3bb8, +0x3164, 0x2bac, 0x368e, 0x3bd4, 0x3427, 0x38b4, 0x3a4d, 0x39ba, 0x3a0d, 0x301a, 0x2fec, 0x2ce1, 0x3985, 0x2acc, 0x386d, 0x3808, 0x346b, 0x383b, 0x3b1b, 0x3406, 0x3bc5, 0x3b86, 0x3860, 0x35ae, 0x2e1c, 0x35d4, 0x350b, 0x35f5, 0x2a73, 0x3a6b, 0x364b, 0x3526, 0x278a, 0x375e, 0x299f, 0x39b0, 0x394e, 0x345d, 0x3760, 0x31ba, 0x3400, 0x3566, 0x3b36, 0x3a48, 0x34e3, 0x3b24, 0x347c, 0x32a3, 0x2da7, 0x364a, 0x33de, 0x33c5, 0x324f, 0x38f7, 0x3bfb, 0x3a94, 0x3312, 0x3924, 0x3831, 0x2ee6, 0x3b4a, 0x338b, 0x2bb3, 0x33ee, 0x3bf2, 0x3aa3, 0x376d, 0x1512, 0x37b5, 0x2e44, 0x39ad, 0x3b2f, 0x39a7, 0x3aa1, 0x2e75, 0x3955, 0x3663, 0x39a6, 0x296f, 0x34c6, 0x2ef3, 0x2fe3, 0x3647, 0x3bc2, 0x3b91, 0x376a, 0x39e5, 0x3466, 0x38b9, 0x3a80, 0x3861, 0x36ca, 0x3a2c, 0x3145, 0x3102, 0x33bc, +0x2ba4, 0x2eb9, 0x39ab, 0x33cf, 0x2c9f, 0x372c, 0x3973, 0x2ff9, 0x36a5, 0x3641, 0x3b93, 0x3bc9, 0x3ba9, 0x36cd, 0x3a8d, 0x3bd2, 0x399e, 0x34ed, 0x3b4c, 0x2c2b, 0x38f7, 0x3824, 0x2edd, 0x32fc, 0x30cc, 0x2b90, 0x2628, 0x3a65, 0x39de, 0x3800, 0x3a8c, 0x3a88, 0x1e84, 0x3890, 0x33b4, 0x37e8, 0x3aab, 0x342c, 0x3697, 0x379a, 0x2472, 0x38bb, 0x38d0, 0x3a8e, 0x393a, 0x34e7, 0x3baf, 0x37ce, 0x28c7, 0x32a5, 0x3a68, 0x3925, 0x3a49, 0x3944, 0x3976, 0x3866, 0x363a, 0x35e2, 0x296d, 0x29f3, 0x39a8, 0x3831, 0x3682, 0x3898, 0x2bca, 0x13aa, 0x37b8, 0x35fe, 0x3a5d, 0x3362, 0x34bd, 0x38c1, 0x3b66, 0x3801, 0x391b, 0x307b, 0x3936, 0x3ae2, 0x3899, 0x390a, 0x384b, 0x3af4, 0x3ae2, 0x35d2, 0x271a, 0x37ad, 0x3102, 0x38e5, 0x30b8, 0x2419, 0x30ee, 0x3437, 0x39b9, 0x3a44, 0x374e, 0x3551, +0x39a4, 0x35f6, 0x385e, 0x3864, 0x3977, 0x3159, 0x3625, 0x379a, 0x3b94, 0x3a2a, 0x2ea6, 0x38a1, 0x3ad9, 0x31cd, 0x3be9, 0x34ac, 0x38be, 0x3925, 0x36ae, 0x3bd3, 0x2e3b, 0x39d0, 0x3a89, 0x336b, 0x2d09, 0x3533, 0x382c, 0x2f0c, 0x385e, 0x3ba1, 0x3436, 0x39e4, 0x3a6b, 0x39b1, 0x3622, 0x334e, 0x38cd, 0x3740, 0x30d6, 0x391d, 0x3a70, 0x3390, 0x2c34, 0x3bf0, 0x3566, 0x3864, 0x2aaa, 0x2df7, 0x20cf, 0x3621, 0x39f8, 0x3ab0, 0x3a54, 0x39fb, 0x389e, 0x3724, 0x3755, 0x369d, 0x3944, 0x2843, 0x13b6, 0x316f, 0x3860, 0x3848, 0x3816, 0x315b, 0x3b72, 0x35e9, 0x396a, 0x399c, 0x3a7b, 0x315c, 0x3667, 0x37ae, 0x39f0, 0x386f, 0x3875, 0x3b25, 0x38ba, 0x3a14, 0x3abc, 0x36e1, 0x352d, 0x3904, 0x385d, 0x3b24, 0x32c9, 0x3afb, 0x3bd8, 0x3520, 0x145c, 0x378f, 0x3821, 0x2801, 0x3496, 0x3b18, +0x3716, 0x3bfe, 0x3591, 0x3b7d, 0x3a85, 0x3af1, 0x3abf, 0x38ae, 0x30cb, 0x3457, 0x3b9f, 0x32bc, 0x39e0, 0x33d6, 0x3acd, 0x38e4, 0x39bf, 0x39ce, 0x2c1a, 0x36c2, 0x3a5e, 0x3ba5, 0x3a2d, 0x3629, 0x3b8d, 0x36ce, 0x3997, 0x384a, 0x3acb, 0x36d2, 0x3b60, 0x3a38, 0x347d, 0x35b3, 0x286f, 0x2bf4, 0x3795, 0x2d33, 0x20c0, 0x3857, 0x3aac, 0x3766, 0x38c1, 0x3628, 0x2e3a, 0x3a93, 0x3ac6, 0x35ca, 0x3366, 0x3b05, 0x3a4c, 0x3be7, 0x37a8, 0x38c4, 0x36ae, 0x39b0, 0x34e1, 0x2dfc, 0x3b41, 0x385a, 0x306b, 0x3bfa, 0x39ab, 0x3ade, 0x3a80, 0x3574, 0x397e, 0x3792, 0x342e, 0x373c, 0x3918, 0x3275, 0x3827, 0x397e, 0x3889, 0x35b5, 0x30d7, 0x1d25, 0x30b4, 0x3580, 0x2ae1, 0x2bba, 0x38ea, 0x3a03, 0x3b44, 0x3539, 0x2de4, 0x3b56, 0x3949, 0x2792, 0x39ac, 0x31af, 0x3514, 0x3ac1, 0x34a6, 0x2c44, +0x330d, 0x36f5, 0x374e, 0x3bf7, 0x33ea, 0x3770, 0x2733, 0x30ef, 0x3b72, 0x2d2a, 0x392d, 0x36fb, 0x3a83, 0x34a1, 0x334c, 0x30b3, 0x2987, 0x3584, 0x3ab0, 0x3a9d, 0x2b67, 0x3a56, 0x35ba, 0x325f, 0x39b7, 0x2abd, 0x3a40, 0x38bf, 0x37b9, 0x3a67, 0x204a, 0x328d, 0x3403, 0x3adc, 0x2c0f, 0x3923, 0x39bc, 0x366a, 0x3082, 0x39d1, 0x3ad5, 0x3a4f, 0x3207, 0x3631, 0x381e, 0x3961, 0x358d, 0x3664, 0x3363, 0x3bf9, 0x372c, 0x3a5d, 0x3878, 0x335a, 0x35a2, 0x3532, 0x3809, 0x2ecb, 0x32e3, 0x3996, 0x36cf, 0x362f, 0x38d5, 0x39c7, 0x2ccd, 0x37c7, 0x2ba2, 0x3b59, 0x26c9, 0x38fa, 0x3b8a, 0x3bed, 0x3868, 0x3942, 0x393a, 0x3999, 0x363f, 0x3375, 0x3bc6, 0x3098, 0x384c, 0x381e, 0x39c6, 0x39be, 0x3204, 0x2023, 0x3acf, 0x3b55, 0x3850, 0x3ae7, 0x37ac, 0x388a, 0x3b11, 0x36e1, 0x2f03, 0x3a6d, +0x2f6f, 0x39b2, 0x308a, 0x3253, 0x3976, 0x38bd, 0x3bfa, 0x3b6d, 0x3816, 0x287b, 0x3588, 0x392b, 0x30bc, 0x3b83, 0x3a9b, 0x300d, 0x3ba4, 0x2d26, 0x372a, 0x3914, 0x36ee, 0x2f72, 0x3ad3, 0x323b, 0x32b6, 0x3a71, 0x3a92, 0x2416, 0x3ab2, 0x39c8, 0x313c, 0x3a5e, 0x3ab9, 0x30ed, 0x3ac3, 0x3339, 0x291e, 0x3847, 0x3bb9, 0x3b7c, 0x3369, 0x3aa1, 0x3b93, 0x380a, 0x33fd, 0x3545, 0x399a, 0x25a4, 0x36c6, 0x37fe, 0x3ae8, 0x3ad7, 0x3be3, 0x3589, 0x370e, 0x3299, 0x3358, 0x3960, 0x36e2, 0x3af9, 0x3676, 0x3b75, 0x39df, 0x32bf, 0x387f, 0x2764, 0x39ae, 0x32b4, 0x36bf, 0x3161, 0x3a40, 0x3bcb, 0x3447, 0x3a0d, 0x2baa, 0x38c7, 0x333a, 0x3a4b, 0x394f, 0x381d, 0x38bd, 0x2b6b, 0x388d, 0x3a37, 0x384e, 0x3b19, 0x31dc, 0x3236, 0x33aa, 0x32f2, 0x32b0, 0x3b95, 0x3bd2, 0x1db0, 0x36d4, 0x38ae, +0x3161, 0x30b6, 0x3784, 0x3701, 0x387e, 0x36ef, 0x2ad7, 0x3ab4, 0x3897, 0x397d, 0x355d, 0x34e3, 0x351d, 0x3b95, 0x3b12, 0x1c76, 0x3b71, 0x3b9a, 0x37e5, 0x3bc6, 0x2576, 0x33c0, 0x398e, 0x39d1, 0x37b9, 0x3a9f, 0x234c, 0x3979, 0x36a2, 0x3aad, 0x355c, 0x3479, 0x2d97, 0x2d54, 0x2ecb, 0x3481, 0x38ba, 0x32e2, 0x380c, 0x2f81, 0x3b87, 0x3a01, 0x35b6, 0x35f6, 0x389a, 0x341e, 0x3180, 0x35d7, 0x31af, 0x3983, 0x38ec, 0x298c, 0x3bea, 0x38d3, 0x2ba1, 0x32b9, 0x2f3e, 0x3b84, 0x3003, 0x34ff, 0x3bd9, 0x323b, 0x375a, 0x3462, 0x3824, 0x303d, 0x381a, 0x385e, 0x3bfd, 0x3993, 0x39c6, 0x3a0f, 0x3b8c, 0x3353, 0x3295, 0x39b6, 0x28dd, 0x3a8e, 0x3043, 0x2d8e, 0x3b67, 0x3504, 0x3b32, 0x30b6, 0x3a4c, 0x3239, 0x3443, 0x3031, 0x3afb, 0x3b11, 0x30f8, 0x3299, 0x3be6, 0x3476, 0x3a49, 0x3441, +0x31e8, 0x3992, 0x3509, 0x3313, 0x3635, 0x35cc, 0x3963, 0x3545, 0x3ba3, 0x2443, 0x35c5, 0x3bb8, 0x3a2e, 0x3642, 0x3ae7, 0x3832, 0x333e, 0x34d3, 0x37f5, 0x38a6, 0x39a9, 0x3850, 0x3ad9, 0x2a1f, 0x271c, 0x3878, 0x3586, 0x362d, 0x3922, 0x3ab8, 0x310e, 0x369c, 0x2efb, 0x3bde, 0x38c2, 0x3af3, 0x393a, 0x3401, 0x315e, 0x305f, 0x38f5, 0x39bf, 0x36c6, 0x3544, 0x3213, 0x386f, 0x378f, 0x3214, 0x3900, 0x35a4, 0x3bbd, 0x2f98, 0x3a9d, 0x3b3d, 0x395a, 0x3932, 0x3515, 0x2ef8, 0x3af6, 0x2d82, 0x2845, 0x39f8, 0x2b6d, 0x38eb, 0x3300, 0x2e15, 0x3788, 0x3962, 0x2e88, 0x356d, 0x3a36, 0x3bd3, 0x2485, 0x38fc, 0x3843, 0x38c0, 0x1351, 0x3aea, 0x2c6d, 0x3ad0, 0x337d, 0x394e, 0x3823, 0x34f9, 0x342e, 0x3203, 0x3b9a, 0x3ade, 0x357a, 0x3734, 0x398f, 0x3302, 0x3b51, 0x3607, 0x35c9, 0x2be4, +0x38d7, 0x3450, 0x359a, 0x2a01, 0x3a33, 0x3536, 0x3a66, 0x360d, 0x3b2f, 0x3a0f, 0x3a84, 0x36b5, 0x3920, 0x389e, 0x3622, 0x3175, 0x370e, 0x32d1, 0x3a64, 0x3a2d, 0x3afc, 0x36f1, 0x3b64, 0x3268, 0x36b8, 0x3b0e, 0x34f4, 0x3b5d, 0x38ac, 0x3153, 0x3128, 0x3670, 0x3b70, 0x39be, 0x3989, 0x35ae, 0x333a, 0x2bfb, 0x3ad9, 0x344c, 0x3ba9, 0x3b6c, 0x335e, 0x3a80, 0x2451, 0x3823, 0x385e, 0x30e0, 0x38e3, 0x30ad, 0x36a0, 0x3a1e, 0x37db, 0x193d, 0x3675, 0x3110, 0x394c, 0x2f96, 0x2c1f, 0x3982, 0x388d, 0x2ccc, 0x343e, 0x3a8c, 0x3710, 0x2da8, 0x384f, 0x35d2, 0x3174, 0x3267, 0x349c, 0x345a, 0x37f3, 0x380a, 0x3814, 0x380c, 0x3acc, 0x325e, 0x3738, 0x32ef, 0x3223, 0x3488, 0x36d9, 0x394d, 0x3450, 0x378c, 0x328e, 0x332a, 0x3b8e, 0x381d, 0x314a, 0x3530, 0x3378, 0x3a88, 0x3bf8, 0x30e7, +0x3860, 0x38b5, 0x3bc1, 0x2da6, 0x3b83, 0x3a43, 0x372a, 0x392c, 0x3404, 0x3449, 0x3972, 0x3bc5, 0x2dc0, 0x39dc, 0x354c, 0x24f9, 0x3617, 0x3bc1, 0x3960, 0x3762, 0x3962, 0x39e3, 0x3afe, 0x3a21, 0x3834, 0x3856, 0x3ad1, 0x36a8, 0x3b2b, 0x36eb, 0x2f4f, 0x3801, 0x3b42, 0x3af3, 0x380f, 0x326c, 0x351a, 0x3914, 0x38b2, 0x3a84, 0x369e, 0x3925, 0x3213, 0x3b80, 0x3763, 0x3af9, 0x2e55, 0x30ba, 0x3a12, 0x347f, 0x39d7, 0x3a46, 0x2ec5, 0x3b6a, 0x3b7f, 0x3a3f, 0x2eea, 0x38db, 0x33be, 0x356a, 0x3a21, 0x3623, 0x3822, 0x3a63, 0x34ef, 0x373b, 0x2d60, 0x3428, 0x3121, 0x3b9a, 0x3948, 0x3687, 0x382b, 0x2144, 0x3254, 0x387f, 0x3512, 0x357c, 0x3891, 0x2e61, 0x368a, 0x33a8, 0x3b26, 0x2e33, 0x282a, 0x2c3a, 0x365c, 0x35c7, 0x3b90, 0x3866, 0x3a86, 0x35cc, 0x3689, 0x3212, 0x3a1e, 0x3555, +0x2f7e, 0x3b2e, 0x3204, 0x3b95, 0x38c5, 0x394d, 0x3908, 0x3b28, 0x388d, 0x36c6, 0x3ac3, 0x3bc6, 0x305d, 0x3a21, 0x3477, 0x39c1, 0x34e7, 0x3ba1, 0x3850, 0x3276, 0x3513, 0x3576, 0x3407, 0x37e4, 0x2dde, 0x3113, 0x389b, 0x34cc, 0x3736, 0x34de, 0x3348, 0x3942, 0x3044, 0x365f, 0x3a40, 0x3a33, 0x34fb, 0x389a, 0x3983, 0x382e, 0x381d, 0x3293, 0x34a2, 0x330d, 0x31f1, 0x3b44, 0x3861, 0x35e1, 0x331a, 0x3839, 0x39d0, 0x3b0a, 0x34d0, 0x37dd, 0x332b, 0x38f4, 0x3ad1, 0x25b4, 0x3bee, 0x31ee, 0x31fc, 0x382d, 0x3889, 0x352b, 0x38a5, 0x21c1, 0x2e21, 0x3425, 0x2d5e, 0x28f2, 0x3ad7, 0x3945, 0x3282, 0x3844, 0x39d9, 0x2e75, 0x3adb, 0x3703, 0x3966, 0x383a, 0x2d09, 0x3008, 0x3b9f, 0x3b0f, 0x304a, 0x373e, 0x3a84, 0x3739, 0x39cd, 0x3678, 0x3a04, 0x2fe1, 0x3572, 0x3853, 0x38f6, 0x3abc, +0x3b09, 0x3b5a, 0x3be6, 0x2424, 0x345a, 0x3992, 0x3738, 0x35a8, 0x3379, 0x3949, 0x3a93, 0x37d9, 0x2fe8, 0x3a1c, 0x322a, 0x26b8, 0x3af8, 0x327a, 0x34f0, 0x3632, 0x3485, 0x385f, 0x3b33, 0x3396, 0x3ad8, 0x379a, 0x384e, 0x35e6, 0x331e, 0x3b6d, 0x34ca, 0x3997, 0x39c8, 0x3a97, 0x387d, 0x1854, 0x35d1, 0x3bd9, 0x389e, 0x365a, 0x396e, 0x2f7d, 0x3910, 0x388f, 0x39e6, 0x3a8e, 0x3a9e, 0x39b2, 0x2ff2, 0x39fc, 0x346f, 0x39bf, 0x3711, 0x3951, 0x3856, 0x39ea, 0x318e, 0x3778, 0x393c, 0x37ba, 0x3781, 0x3ad5, 0x3638, 0x3b18, 0x286d, 0x314b, 0x3b67, 0x3186, 0x37c4, 0x39f7, 0x376f, 0x3b12, 0x3882, 0x36b6, 0x3a84, 0x329a, 0x24a9, 0x38e3, 0x35ca, 0x3b5b, 0x333f, 0x3994, 0x3369, 0x385b, 0x3871, 0x3aac, 0x3649, 0x3953, 0x31d4, 0x3b45, 0x3808, 0x36e0, 0x35c6, 0x2bd8, 0x39b7, 0x3bd9, +0x3aa5, 0x340f, 0x3721, 0x35e0, 0x3a8f, 0x3ac1, 0x3b3f, 0x1e07, 0x342a, 0x36a2, 0x3830, 0x2dff, 0x35c4, 0x3441, 0x3ac6, 0x383f, 0x3bb1, 0x32d5, 0x3870, 0x3757, 0x36a5, 0x38c3, 0x3158, 0x377d, 0x363d, 0x2ede, 0x3698, 0x2f0b, 0x3860, 0x1a39, 0x39b4, 0x39c3, 0x35e2, 0x3529, 0x35e4, 0x38d3, 0x358a, 0x2cc9, 0x3665, 0x3479, 0x3917, 0x36f9, 0x34d3, 0x39f7, 0x3688, 0x3950, 0x36d5, 0x3a15, 0x35fd, 0x3556, 0x3751, 0x30b6, 0x3906, 0x3b32, 0x387f, 0x2d69, 0x3628, 0x3b4c, 0x3b17, 0x38ff, 0x3852, 0x38c4, 0x37e0, 0x368d, 0x38f6, 0x3885, 0x398e, 0x37dd, 0x3867, 0x35e7, 0x3bd1, 0x38a1, 0x3882, 0x2d3d, 0x3b21, 0x3443, 0x3381, 0x36df, 0x38ba, 0x3a7c, 0x3a03, 0x3881, 0x352b, 0x3914, 0x3b69, 0x3564, 0x3141, 0x3940, 0x327b, 0x390b, 0x3710, 0x3952, 0x3a3e, 0x3825, 0x3ae8, 0x39f8, +0x3950, 0x3a9d, 0x3a2c, 0x35d5, 0x34b7, 0x3a46, 0x3a47, 0x344e, 0x3a08, 0x3362, 0x3285, 0x33e8, 0x3618, 0x39fb, 0x2c3c, 0x39b0, 0x1336, 0x36bd, 0x358c, 0x3bc0, 0x354d, 0x38be, 0x3a08, 0x34e9, 0x3801, 0x3be9, 0x35fa, 0x3015, 0x26bc, 0x399e, 0x36d1, 0x3218, 0x3a92, 0x2ad4, 0x3114, 0x364e, 0x3aa5, 0x35cb, 0x354a, 0x2da0, 0x2fc1, 0x36a2, 0x2fde, 0x3b28, 0x367f, 0x32eb, 0x3b7e, 0x3912, 0x3894, 0x323f, 0x3807, 0x3971, 0x3b61, 0x2381, 0x3ac6, 0x3868, 0x3980, 0x3a49, 0x3183, 0x3657, 0x3851, 0x3956, 0x37be, 0x38ea, 0x38b3, 0x37e2, 0x38ca, 0x3b3b, 0x3543, 0x38af, 0x247b, 0x3716, 0x3b75, 0x3667, 0x3801, 0x2a16, 0x3b46, 0x2bb3, 0x3832, 0x3b8e, 0x3a02, 0x37e2, 0x38b7, 0x2a58, 0x3b4b, 0x3b3c, 0x3914, 0x27f4, 0x3512, 0x3934, 0x3a17, 0x3a1b, 0x3bab, 0x3ae0, 0x3ab8, 0x3454, +0x32bc, 0x35d5, 0x3b7f, 0x388c, 0x3740, 0x3290, 0x2d2a, 0x2bf5, 0x304b, 0x3a10, 0x388e, 0x2e4e, 0x3126, 0x3477, 0x386d, 0x3bc5, 0x3643, 0x3589, 0x3665, 0x39c5, 0x315d, 0x3375, 0x3b3d, 0x38bb, 0x320a, 0x371d, 0x3873, 0x31df, 0x3534, 0x3b7a, 0x3809, 0x3b1f, 0x3868, 0x35ec, 0x397c, 0x3535, 0x3be5, 0x3857, 0x3ae4, 0x338c, 0x3ace, 0x3931, 0x3bcc, 0x30d9, 0x3bb2, 0x38d5, 0x3840, 0x3aef, 0x385c, 0x3974, 0x3b1b, 0x369c, 0x3b54, 0x3074, 0x39bb, 0x3a1d, 0x2e7d, 0x34f9, 0x3a6c, 0x3505, 0x3ae2, 0x30df, 0x3ac9, 0x3460, 0x3517, 0x3b85, 0x3488, 0x3440, 0x3aab, 0x3089, 0x3879, 0x3343, 0x3395, 0x329f, 0x3753, 0x3a08, 0x388b, 0x3ac1, 0x3478, 0x33f5, 0x3a65, 0x343f, 0x307e, 0x38f3, 0x37a0, 0x3259, 0x3210, 0x385a, 0x3bff, 0x297f, 0x2e3b, 0x2e41, 0x3921, 0x3654, 0x34c2, 0x3bf6, +0x2dca, 0x391f, 0x399f, 0x2fae, 0x38c6, 0x2fea, 0x36a0, 0x31d7, 0x3a0a, 0x2adb, 0x31c7, 0x3bf1, 0x313c, 0x3a0f, 0x36d3, 0x3854, 0x355f, 0x3991, 0x3b44, 0x3b0c, 0x3aa8, 0x37f0, 0x38cf, 0x3394, 0x373a, 0x38ee, 0x3871, 0x3977, 0x29ef, 0x23f6, 0x3b79, 0x2430, 0x31ea, 0x2f51, 0x3b09, 0x39fa, 0x34c0, 0x2a71, 0x3186, 0x3869, 0x2c9d, 0x3995, 0x3a89, 0x3a6a, 0x308a, 0x32f2, 0x39e9, 0x3902, 0x3970, 0x3986, 0x3931, 0x3918, 0x36ab, 0x3a86, 0x38c2, 0x39f0, 0x2ca6, 0x3bac, 0x36b8, 0x34d2, 0x383e, 0x304a, 0x299b, 0x3172, 0x3b3b, 0x38e3, 0x39a0, 0x3b28, 0x3822, 0x3548, 0x35d3, 0x3a14, 0x282b, 0x39e4, 0x2d29, 0x3a68, 0x2dc2, 0x32c2, 0x3aa2, 0x3625, 0x3553, 0x3809, 0x3993, 0x3811, 0x3456, 0x2f37, 0x3210, 0x393f, 0x323c, 0x30eb, 0x361c, 0x3276, 0x3097, 0x34ee, 0x34f8, 0x31cd, +0x3ba8, 0x2a42, 0x31b2, 0x38e3, 0x3951, 0x29e1, 0x2e0a, 0x3a69, 0x2f3f, 0x3b90, 0x3634, 0x3b61, 0x35ef, 0x34c4, 0x386f, 0x2aae, 0x38a6, 0x1edc, 0x38f0, 0x37e7, 0x3ac3, 0x32fe, 0x3645, 0x31ef, 0x33e8, 0x3447, 0x3ad8, 0x3b4e, 0x193e, 0x2514, 0x36ad, 0x3b4c, 0x39d8, 0x3285, 0x31c9, 0x3a64, 0x2c2d, 0x3994, 0x302a, 0x3a31, 0x3adb, 0x2bfa, 0x3554, 0x399f, 0x32a0, 0x393b, 0x3831, 0x3a94, 0x2f96, 0x38bb, 0x3b49, 0x2168, 0x396c, 0x3425, 0x3b8d, 0x2634, 0x38fd, 0x3894, 0x3ac8, 0x3b82, 0x3891, 0x39a0, 0x3422, 0x36e1, 0x3727, 0x3802, 0x388e, 0x392d, 0x37ec, 0x340f, 0x2424, 0x3812, 0x3af6, 0x3352, 0x36e2, 0x385e, 0x3ba8, 0x38ca, 0x3986, 0x3b9e, 0x3319, 0x3be8, 0x389f, 0x29ea, 0x35c2, 0x394f, 0x33b7, 0x388b, 0x388d, 0x3bb5, 0x34f9, 0x35ff, 0x3842, 0x3181, 0x3889, 0x38ec, +0x34b9, 0x3818, 0x3af1, 0x35b7, 0x3462, 0x39bf, 0x3641, 0x367d, 0x3560, 0x2c3b, 0x3b63, 0x2cdc, 0x33be, 0x3a92, 0x2cf5, 0x3216, 0x315f, 0x39dc, 0x3b1a, 0x37e4, 0x3446, 0x37dc, 0x3934, 0x3835, 0x3916, 0x37d0, 0x384e, 0x2d75, 0x3268, 0x3570, 0x3506, 0x38e0, 0x38c0, 0x395f, 0x38bd, 0x3022, 0x3b3e, 0x393b, 0x3479, 0x3726, 0x3432, 0x3699, 0x38dc, 0x2def, 0x2ab6, 0x2fad, 0x3a35, 0x35b5, 0x30a8, 0x3968, 0x38ab, 0x3a6e, 0x346e, 0x3988, 0x3434, 0x35b6, 0x36dc, 0x2e2e, 0x2b5c, 0x3300, 0x32f9, 0x382a, 0x3bc2, 0x3b6f, 0x2ca0, 0x2d85, 0x397c, 0x38a1, 0x36e4, 0x37f0, 0x39ec, 0x30fb, 0x3bfb, 0x3a04, 0x301a, 0x3b8c, 0x39eb, 0x3a96, 0x39bc, 0x3921, 0x319b, 0x3805, 0x3b5f, 0x39ad, 0x316b, 0x3b91, 0x2c1d, 0x3b87, 0x35d3, 0x3b01, 0x36ad, 0x393f, 0x3674, 0x3603, 0x3af9, 0x2fa1, +0x3a49, 0x34d3, 0x3af0, 0x28b4, 0x3afb, 0x3684, 0x3640, 0x37ae, 0x38d3, 0x3916, 0x3699, 0x3b36, 0x38e7, 0x3ad9, 0x39af, 0x376a, 0x388f, 0x35c7, 0x3664, 0x3840, 0x3506, 0x3b62, 0x3347, 0x3a30, 0x347c, 0x3ae5, 0x3542, 0x35d6, 0x32f6, 0x38e3, 0x2091, 0x3a7f, 0x3b5a, 0x3610, 0x38c9, 0x348b, 0x37bf, 0x346a, 0x38a2, 0x3939, 0x3842, 0x3a03, 0x3afe, 0x1ec8, 0x3158, 0x3afc, 0x39e9, 0x3b79, 0x351a, 0x314e, 0x242c, 0x34b5, 0x3bc6, 0x25a0, 0x3b95, 0x29e3, 0x3517, 0x3bff, 0x3a4b, 0x3a79, 0x355f, 0x33cd, 0x35df, 0x3ab8, 0x39d4, 0x3afe, 0x35f7, 0x38aa, 0x2fc1, 0x3342, 0x394c, 0x3603, 0x3811, 0x3a0b, 0x34eb, 0x2ca7, 0x3192, 0x3a89, 0x396e, 0x3731, 0x3af0, 0x2cca, 0x3843, 0x36e3, 0x39f5, 0x2d99, 0x2a6b, 0x33bf, 0x2609, 0x32f0, 0x32ce, 0x35dd, 0x380d, 0x32e2, 0x3b6a, 0x3a8e, +0x2ced, 0x32da, 0x3a21, 0x367d, 0x36cd, 0x3631, 0x2b0d, 0x31fd, 0x3b89, 0x2e45, 0x3916, 0x362b, 0x3852, 0x2c73, 0x32a6, 0x3013, 0x396f, 0x3984, 0x3104, 0x3a93, 0x39de, 0x3807, 0x3464, 0x36bb, 0x36e7, 0x3aa3, 0x372a, 0x38ce, 0x3a85, 0x3bae, 0x27b1, 0x34c7, 0x37e5, 0x2be5, 0x3a8c, 0x2e62, 0x3b13, 0x2ee8, 0x3782, 0x3a40, 0x31b0, 0x37fd, 0x3759, 0x3382, 0x3bcc, 0x32fd, 0x3bdc, 0x39eb, 0x3a01, 0x380e, 0x31a6, 0x39f6, 0x38fc, 0x37c5, 0x3be0, 0x347a, 0x3524, 0x2da5, 0x23ed, 0x25e0, 0x3af4, 0x27f6, 0x39cd, 0x3575, 0x3827, 0x3b1d, 0x3bf3, 0x3bd8, 0x3697, 0x3b52, 0x2ec3, 0x33c0, 0x3b26, 0x3ab5, 0x34f6, 0x30f2, 0x38ff, 0x39ae, 0x3620, 0x32a6, 0x365a, 0x3a13, 0x2a9a, 0x28a9, 0x3198, 0x3819, 0x38bb, 0x3731, 0x3b3d, 0x37db, 0x3abb, 0x3be6, 0x34c7, 0x3709, 0x3959, 0x3556, +0x3b82, 0x36c8, 0x352e, 0x3a99, 0x3942, 0x37e9, 0x39c9, 0x3900, 0x123c, 0x3b9a, 0x3b46, 0x3a9a, 0x3a06, 0x36e3, 0x38bd, 0x3622, 0x396c, 0x3a7d, 0x361f, 0x3b83, 0x297b, 0x3a4b, 0x323f, 0x3b61, 0x3ac5, 0x24e9, 0x3138, 0x359a, 0x2931, 0x3b63, 0x3a8d, 0x3aa0, 0x384f, 0x3a36, 0x3641, 0x3af0, 0x3ada, 0x3526, 0x3a5c, 0x39cc, 0x3803, 0x3572, 0x3994, 0x3b9e, 0x3a64, 0x36ae, 0x37ec, 0x3ad2, 0x312b, 0x3434, 0x3b89, 0x38d1, 0x3309, 0x3573, 0x38e2, 0x2c51, 0x3b19, 0x3a0b, 0x3a49, 0x392a, 0x3ae7, 0x341f, 0x3701, 0x3577, 0x3a6b, 0x3864, 0x356f, 0x3a73, 0x3bdd, 0x39e1, 0x3397, 0x31c9, 0x3618, 0x3973, 0x3848, 0x2e85, 0x3adb, 0x30d0, 0x349e, 0x3121, 0x397e, 0x3ae2, 0x351f, 0x3137, 0x3903, 0x3b71, 0x3a3e, 0x3189, 0x3a1a, 0x39a5, 0x38b6, 0x35ee, 0x2c56, 0x3a09, 0x33a1, 0x294a, +0x382b, 0x39a6, 0x335a, 0x3687, 0x30cf, 0x38cc, 0x32d6, 0x2181, 0x3a52, 0x2cfb, 0x3991, 0x39bc, 0x3706, 0x3a02, 0x386e, 0x3b54, 0x3781, 0x381c, 0x38eb, 0x3b5d, 0x39c2, 0x38f2, 0x3b4c, 0x3bd7, 0x292a, 0x37c1, 0x3bfa, 0x29b6, 0x381e, 0x32ca, 0x3a70, 0x3a3a, 0x3ad7, 0x3042, 0x2ecb, 0x3bb6, 0x3703, 0x38fe, 0x3866, 0x3a69, 0x3bc7, 0x3b34, 0x2cfd, 0x2220, 0x3ba7, 0x3849, 0x39b3, 0x284b, 0x3a18, 0x39d9, 0x3aaf, 0x3809, 0x3be3, 0x3749, 0x2b7b, 0x382c, 0x356c, 0x37ac, 0x2a66, 0x3abb, 0x23d2, 0x3912, 0x3085, 0x2a21, 0x3b7a, 0x3616, 0x35f1, 0x3595, 0x3bd3, 0x356b, 0x3929, 0x3b99, 0x3a5f, 0x30f4, 0x3866, 0x3a8e, 0x2ca2, 0x3904, 0x3735, 0x373a, 0x3a5f, 0x3ba5, 0x2001, 0x39dc, 0x3a26, 0x3987, 0x3163, 0x3816, 0x2b55, 0x369c, 0x3aab, 0x3508, 0x3b86, 0x340d, 0x34d6, 0x3766, +0x3691, 0x3723, 0x2e9f, 0x38a2, 0x3a6a, 0x3645, 0x2e83, 0x2f93, 0x3947, 0x3744, 0x352b, 0x365c, 0x3a34, 0x3a63, 0x3bae, 0x3977, 0x281c, 0x377c, 0x3584, 0x3bf9, 0x2f97, 0x34c8, 0x3af7, 0x38e7, 0x3acf, 0x384d, 0x3bdd, 0x387d, 0x3a8f, 0x399e, 0x34e0, 0x3a84, 0x31b5, 0x291d, 0x394d, 0x3967, 0x3a1f, 0x378e, 0x3618, 0x386e, 0x345c, 0x3916, 0x353a, 0x3176, 0x396f, 0x2bc1, 0x3b5c, 0x3b8a, 0x2d3c, 0x354b, 0x2c50, 0x3539, 0x2c35, 0x320f, 0x3914, 0x2a96, 0x3bcf, 0x3a20, 0x3a5b, 0x372e, 0x35f5, 0x3992, 0x3b39, 0x39b8, 0x3aea, 0x3bb5, 0x3a65, 0x3884, 0x2b7a, 0x3b7d, 0x3455, 0x3039, 0x36b1, 0x31c8, 0x391b, 0x3942, 0x3b4b, 0x365c, 0x3a2c, 0x39b6, 0x3b02, 0x3901, 0x33b8, 0x3ad1, 0x2c3d, 0x3955, 0x3857, 0x33bb, 0x2ef2, 0x3446, 0x3917, 0x3ad2, 0x34be, 0x3939, 0x35ab, 0x370f, +0x32c0, 0x2fdc, 0x3b63, 0x2a85, 0x3a47, 0x34c2, 0x3651, 0x31c5, 0x2b72, 0x3b43, 0x3ba3, 0x2c85, 0x3958, 0x3bc2, 0x3818, 0x35d3, 0x3bec, 0x32c4, 0x301a, 0x351a, 0x3706, 0x348e, 0x2194, 0x3830, 0x324f, 0x3a6d, 0x3b87, 0x2a73, 0x3ba9, 0x3ad9, 0x39cd, 0x3af6, 0x1d41, 0x31e5, 0x3abb, 0x3184, 0x3911, 0x318e, 0x39a7, 0x3295, 0x39fd, 0x342a, 0x3822, 0x3be0, 0x3a97, 0x386d, 0x35cf, 0x39bd, 0x29b2, 0x320f, 0x2fe7, 0x2f1e, 0x2c19, 0x3054, 0x3907, 0x3a78, 0x2093, 0x3901, 0x2e53, 0x3981, 0x3713, 0x3b18, 0x3b76, 0x3bee, 0x39f2, 0x2c64, 0x3680, 0x3b35, 0x39db, 0x34a2, 0x3963, 0x3a3c, 0x3b52, 0x34a1, 0x3951, 0x3aad, 0x2870, 0x35fc, 0x3a47, 0x3955, 0x37e9, 0x36c2, 0x3a4c, 0x2bd8, 0x34ee, 0x3751, 0x3ae0, 0x3b51, 0x2861, 0x3391, 0x2fa9, 0x3837, 0x35cb, 0x304b, 0x3b0f, 0x358b, +0x2f61, 0x3096, 0x3a54, 0x3059, 0x39af, 0x3b95, 0x2c6d, 0x2faf, 0x38f6, 0x3427, 0x3af3, 0x343d, 0x3b5a, 0x341e, 0x32d7, 0x224f, 0x3af7, 0x3159, 0x346d, 0x3535, 0x34c2, 0x371f, 0x39d4, 0x380b, 0x310c, 0x206a, 0x3a65, 0x3976, 0x3af2, 0x39ab, 0x39df, 0x327f, 0x399c, 0x2d96, 0x38a4, 0x357c, 0x2f8f, 0x3046, 0x38ae, 0x3ac4, 0x38b8, 0x2c03, 0x34c0, 0x3171, 0x39c1, 0x3802, 0x366d, 0x341f, 0x3286, 0x36f0, 0x397f, 0x2176, 0x3aac, 0x3b7a, 0x3a3a, 0x3919, 0x3585, 0x2cc4, 0x39ed, 0x2833, 0x3b9e, 0x36e3, 0x3a31, 0x3a48, 0x38a8, 0x3401, 0x3b8e, 0x38a0, 0x3a07, 0x378d, 0x3512, 0x33a7, 0x3977, 0x3862, 0x357d, 0x3922, 0x371f, 0x318d, 0x3b57, 0x3667, 0x313b, 0x3bf3, 0x35e0, 0x3ae6, 0x3668, 0x2940, 0x2d29, 0x30f4, 0x3a66, 0x3b0d, 0x3b12, 0x35dd, 0x390b, 0x3990, 0x3011, 0x2b64, +0x334f, 0x3b09, 0x398f, 0x34e0, 0x28d3, 0x3385, 0x39e4, 0x357c, 0x3a45, 0x2df3, 0x2c61, 0x3569, 0x355e, 0x3b14, 0x3012, 0x1c32, 0x3a0e, 0x39d3, 0x20f2, 0x38f4, 0x398b, 0x3b9c, 0x374a, 0x3916, 0x3a5a, 0x3892, 0x3720, 0x38de, 0x3809, 0x3173, 0x38a4, 0x3698, 0x3815, 0x30a5, 0x3a18, 0x3534, 0x2e89, 0x3657, 0x2fc1, 0x39c5, 0x3b59, 0x337f, 0x383b, 0x3ba1, 0x2d4d, 0x2d7a, 0x3b8e, 0x39c9, 0x2b4a, 0x2d1b, 0x3af3, 0x375a, 0x360a, 0x3977, 0x398f, 0x3bb2, 0x358c, 0x369e, 0x390f, 0x35ed, 0x392c, 0x33d4, 0x3a6b, 0x3ade, 0x38b2, 0x3424, 0x2d4f, 0x3aeb, 0x3802, 0x33fa, 0x31c4, 0x35ef, 0x3b51, 0x2d27, 0x3912, 0x351a, 0x36ea, 0x3869, 0x2c73, 0x264b, 0x371d, 0x3a9e, 0x3159, 0x3a54, 0x3849, 0x394e, 0x3921, 0x3435, 0x38aa, 0x33ae, 0x3950, 0x3adf, 0x3b9b, 0x3a1d, 0x3706, 0x3b43, +0x3541, 0x3b8a, 0x3528, 0x39da, 0x36fa, 0x392e, 0x3195, 0x38e7, 0x392a, 0x366f, 0x308f, 0x29d5, 0x3be5, 0x345a, 0x35b5, 0x395b, 0x3a76, 0x3224, 0x1958, 0x39e1, 0x3b98, 0x3b80, 0x30a5, 0x3461, 0x3471, 0x365a, 0x3af0, 0x30ac, 0x38dd, 0x38ca, 0x2d58, 0x3bf4, 0x35bc, 0x3478, 0x235b, 0x3b92, 0x391f, 0x39e3, 0x3b11, 0x3afb, 0x2ea4, 0x2c61, 0x3756, 0x3821, 0x38d6, 0x3938, 0x3478, 0x3813, 0x3740, 0x31ea, 0x3b6d, 0x3be6, 0x2a58, 0x36c6, 0x31ee, 0x3642, 0x3b29, 0x37df, 0x337d, 0x336b, 0x3afa, 0x352b, 0x3aa6, 0x3898, 0x37cc, 0x33f2, 0x3b20, 0x3a61, 0x380e, 0x3b37, 0x38e6, 0x3b79, 0x365a, 0x387a, 0x24c7, 0x3301, 0x3b10, 0x3afb, 0x3819, 0x3aa3, 0x38cd, 0x384d, 0x3661, 0x383e, 0x3a34, 0x3b1a, 0x2d83, 0x36a8, 0x3b75, 0x3b0e, 0x363d, 0x3a67, 0x392e, 0x389c, 0x35a3, 0x2e39, +0x3ae7, 0x3849, 0x3bc7, 0x2a99, 0x31b2, 0x3535, 0x32dc, 0x2ab5, 0x3b34, 0x398c, 0x2b94, 0x36b5, 0x39fe, 0x376a, 0x39ee, 0x34f9, 0x31ce, 0x3968, 0x3809, 0x3261, 0x38f8, 0x3b62, 0x3807, 0x3992, 0x3b8e, 0x39e0, 0x3614, 0x3b23, 0x36d0, 0x38da, 0x3a8c, 0x3b55, 0x316c, 0x3b5d, 0x3531, 0x39a5, 0x24db, 0x293c, 0x3822, 0x38dc, 0x316f, 0x3750, 0x3601, 0x30bf, 0x3a74, 0x24af, 0x258b, 0x3bec, 0x293c, 0x3868, 0x360e, 0x310d, 0x36b3, 0x344c, 0x2cf0, 0x3476, 0x3a3a, 0x2e52, 0x3939, 0x3a69, 0x34df, 0x3a5b, 0x39c0, 0x347c, 0x371d, 0x391d, 0x3913, 0x306f, 0x3bfe, 0x380f, 0x3959, 0x39bd, 0x3619, 0x34e2, 0x36c6, 0x39bc, 0x3a2c, 0x3bc3, 0x3a29, 0x2c45, 0x3ac4, 0x3b46, 0x3a5c, 0x3be6, 0x2c2c, 0x3757, 0x39cb, 0x30f0, 0x38c8, 0x3154, 0x38b5, 0x3480, 0x3835, 0x3b8c, 0x311d, 0x3570, +0x38c4, 0x3400, 0x2d91, 0x3a09, 0x312a, 0x39e9, 0x3b4e, 0x320d, 0x372d, 0x33f0, 0x3b4c, 0x2253, 0x37dd, 0x39a8, 0x3a18, 0x3aeb, 0x3b0a, 0x35eb, 0x3a4c, 0x39ff, 0x3a97, 0x2b96, 0x37c0, 0x3169, 0x3727, 0x3859, 0x3874, 0x3a11, 0x356e, 0x39e4, 0x3849, 0x38ab, 0x292b, 0x38a8, 0x2e0b, 0x1e53, 0x3814, 0x367d, 0x3962, 0x39ff, 0x3a0e, 0x38a1, 0x3249, 0x2d7c, 0x31df, 0x3924, 0x3ae4, 0x3978, 0x38c9, 0x3808, 0x288b, 0x3004, 0x3983, 0x3427, 0x3aa2, 0x3bb9, 0x38bc, 0x380d, 0x3ba3, 0x3522, 0x3607, 0x38c1, 0x35d4, 0x3a19, 0x38d6, 0x3aef, 0x3682, 0x3b5c, 0x2de4, 0x35bb, 0x363b, 0x36df, 0x3803, 0x39e5, 0x2e9f, 0x3a36, 0x3a9c, 0x36dc, 0x3908, 0x3ada, 0x3978, 0x382c, 0x3ba7, 0x398e, 0x3800, 0x3ad7, 0x387e, 0x3429, 0x2d19, 0x3971, 0x37f1, 0x3af3, 0x3986, 0x3a07, 0x382f, 0x359b, +0x2f4d, 0x3a0f, 0x3890, 0x386e, 0x3229, 0x2fb8, 0x390a, 0x390e, 0x3b53, 0x3812, 0x2961, 0x3017, 0x39d5, 0x3958, 0x2d80, 0x2fad, 0x3730, 0x3853, 0x2882, 0x3bb9, 0x3939, 0x3bab, 0x2ffa, 0x28ff, 0x3a54, 0x38d5, 0x3456, 0x3bd4, 0x3a38, 0x30a8, 0x3a38, 0x32ab, 0x3788, 0x3a1d, 0x3bec, 0x325c, 0x3981, 0x3a5a, 0x2941, 0x3925, 0x353a, 0x360a, 0x38cf, 0x374d, 0x30a4, 0x2819, 0x3021, 0x3143, 0x3684, 0x3af2, 0x3a61, 0x3a31, 0x3625, 0x38a6, 0x3a5d, 0x3963, 0x3997, 0x391a, 0x3767, 0x3b35, 0x383c, 0x37bf, 0x3753, 0x357a, 0x3993, 0x382b, 0x3128, 0x3a93, 0x3b03, 0x38e2, 0x37e9, 0x3b05, 0x3789, 0x3be9, 0x3068, 0x36f4, 0x19c7, 0x3523, 0x28f3, 0x3746, 0x324c, 0x31cc, 0x377e, 0x35b4, 0x3127, 0x3a24, 0x351a, 0x3b16, 0x3801, 0x398d, 0x39a8, 0x3b6f, 0x3933, 0x3535, 0x30e3, 0x3b25, +0x353f, 0x306c, 0x3bd1, 0x380e, 0x3b05, 0x3859, 0x2e39, 0x37b4, 0x38fb, 0x392e, 0x32c0, 0x3adb, 0x29c4, 0x3b0e, 0x28a6, 0x341f, 0x371a, 0x39bc, 0x30a1, 0x3790, 0x3439, 0x3102, 0x3bcc, 0x2f3d, 0x39ad, 0x3b38, 0x390e, 0x391f, 0x39a7, 0x3099, 0x3a5b, 0x3894, 0x3674, 0x3948, 0x3895, 0x3458, 0x3bc6, 0x3a36, 0x381e, 0x3069, 0x39fc, 0x3a3f, 0x39f5, 0x3a9d, 0x3169, 0x39a9, 0x3b16, 0x362d, 0x3951, 0x3881, 0x3ac4, 0x2ecf, 0x3b79, 0x3abe, 0x3841, 0x2c1a, 0x3b7a, 0x3083, 0x3ad1, 0x3a90, 0x3974, 0x2e92, 0x3b5f, 0x3003, 0x39c1, 0x2ff2, 0x39dc, 0x3bbf, 0x3972, 0x3997, 0x3667, 0x3409, 0x3239, 0x3aaf, 0x358e, 0x33b8, 0x397a, 0x3b54, 0x399d, 0x351d, 0x35c8, 0x3362, 0x2964, 0x3102, 0x3bc4, 0x22b3, 0x3b29, 0x3925, 0x37f0, 0x23fc, 0x3bc8, 0x39f0, 0x30cd, 0x3569, 0x3a27, 0x3b0b, +0x392e, 0x38e0, 0x3436, 0x3aa6, 0x395a, 0x397e, 0x38f6, 0x3b45, 0x3050, 0x34b0, 0x3b1d, 0x3932, 0x3a3a, 0x3915, 0x3816, 0x3b23, 0x3342, 0x2c1e, 0x3bfa, 0x3978, 0x304c, 0x2cd7, 0x3a11, 0x37d8, 0x3ad2, 0x37cb, 0x3bf8, 0x37d3, 0x3589, 0x37aa, 0x399a, 0x3661, 0x3965, 0x328a, 0x3969, 0x3100, 0x2dc4, 0x34a0, 0x30a4, 0x3950, 0x2f40, 0x32ab, 0x3904, 0x398d, 0x3293, 0x34a7, 0x33a4, 0x38b6, 0x3834, 0x3add, 0x3a08, 0x38cf, 0x3a13, 0x3a6f, 0x382e, 0x3682, 0x3b4b, 0x323e, 0x38e0, 0x38dc, 0x3854, 0x3b9d, 0x3b13, 0x3940, 0x38d4, 0x30ac, 0x3061, 0x3906, 0x3b2d, 0x38f9, 0x3ab0, 0x3a5a, 0x34fd, 0x3b15, 0x3472, 0x3985, 0x3634, 0x3940, 0x35da, 0x38ba, 0x395b, 0x3488, 0x39ca, 0x3a14, 0x2b22, 0x3829, 0x3479, 0x30a6, 0x3910, 0x34e2, 0x3506, 0x3663, 0x23b2, 0x3812, 0x3416, 0x3455, +0x3bc0, 0x3487, 0x3853, 0x3738, 0x3a19, 0x38a3, 0x339a, 0x3906, 0x3a98, 0x3a4c, 0x32bb, 0x3460, 0x2031, 0x36a4, 0x387a, 0x3141, 0x2f39, 0x2efd, 0x394e, 0x2e35, 0x3528, 0x3c00, 0x3b44, 0x342b, 0x3b4d, 0x3bdb, 0x3185, 0x39cb, 0x358a, 0x39ce, 0x2060, 0x3baa, 0x3bc4, 0x30eb, 0x3aed, 0x3734, 0x3a1f, 0x15f9, 0x3a5c, 0x372e, 0x33f9, 0x3b71, 0x3715, 0x37e3, 0x3384, 0x38ff, 0x36e6, 0x28a1, 0x2d9e, 0x280b, 0x3853, 0x3b42, 0x2eda, 0x3a63, 0x2328, 0x3830, 0x35a6, 0x39e9, 0x33df, 0x3be1, 0x220a, 0x39b4, 0x3ade, 0x2e17, 0x3831, 0x2cfe, 0x3752, 0x38fb, 0x39ce, 0x350b, 0x3600, 0x2ffd, 0x363a, 0x358b, 0x2582, 0x3510, 0x36db, 0x2e28, 0x38e0, 0x3a49, 0x277a, 0x301e, 0x39ca, 0x3861, 0x31a7, 0x3550, 0x3862, 0x3476, 0x3a8d, 0x38c2, 0x394b, 0x3156, 0x39ea, 0x3bdf, 0x3880, 0x389a, +0x3a75, 0x35a7, 0x37b1, 0x3b17, 0x24de, 0x32cd, 0x2c9b, 0x3968, 0x3a36, 0x2e6f, 0x3549, 0x3971, 0x34cb, 0x34ac, 0x3bf7, 0x34b8, 0x3841, 0x3527, 0x3a22, 0x3955, 0x3454, 0x380d, 0x38cd, 0x39b3, 0x39c4, 0x3777, 0x3737, 0x2ead, 0x39ef, 0x3420, 0x3a95, 0x35f0, 0x347f, 0x2c76, 0x2cfd, 0x33de, 0x3363, 0x3bf0, 0x3afc, 0x3ab1, 0x3b88, 0x3bcb, 0x23ba, 0x3353, 0x2169, 0x33a7, 0x3484, 0x307b, 0x20b7, 0x384d, 0x302a, 0x3448, 0x39b1, 0x39ab, 0x3be0, 0x3430, 0x3a05, 0x3715, 0x35fe, 0x1e5c, 0x3b84, 0x3b3a, 0x3b0a, 0x320e, 0x2e29, 0x2f00, 0x37c3, 0x3865, 0x37ae, 0x3959, 0x3ba0, 0x3b56, 0x3b4a, 0x3934, 0x35bf, 0x3aa7, 0x3814, 0x320c, 0x3b4a, 0x2499, 0x34bd, 0x3a25, 0x39b8, 0x318b, 0x3b42, 0x3a28, 0x3912, 0x3be5, 0x37af, 0x2cb7, 0x3799, 0x37eb, 0x3981, 0x3033, 0x2f89, 0x3471, +0x3a59, 0x3ab8, 0x3a8d, 0x3bd7, 0x3ba2, 0x39d4, 0x3a8b, 0x278d, 0x32e2, 0x2ced, 0x397f, 0x39f2, 0x3b27, 0x3798, 0x35bf, 0x3597, 0x374e, 0x3ac6, 0x3728, 0x3673, 0x252b, 0x30c8, 0x3b7b, 0x39fb, 0x38db, 0x3ac7, 0x3728, 0x3420, 0x3749, 0x3749, 0x37f3, 0x3977, 0x3181, 0x2d5c, 0x37f8, 0x3966, 0x3b9f, 0x3901, 0x369f, 0x36fa, 0x2468, 0x38f7, 0x3900, 0x37f1, 0x39d6, 0x342d, 0x35d0, 0x359f, 0x3b0b, 0x3a28, 0x34b4, 0x3979, 0x3346, 0x3b9a, 0x391f, 0x3823, 0x350e, 0x3b34, 0x3202, 0x3a2b, 0x313e, 0x355b, 0x37fb, 0x3ac1, 0x36ac, 0x2452, 0x2711, 0x360d, 0x34b7, 0x3af8, 0x2b80, 0x3621, 0x3950, 0x3824, 0x3578, 0x3900, 0x2ac0, 0x38c6, 0x39e1, 0x3565, 0x348f, 0x32d5, 0x388c, 0x38c0, 0x30e3, 0x3738, 0x3bbb, 0x3b46, 0x3b6e, 0x3bd1, 0x3b3d, 0x2d5b, 0x3acd, 0x3a67, 0x35f0, 0x3956, +0x39dd, 0x3be7, 0x3468, 0x2fb1, 0x3b73, 0x348b, 0x37a8, 0x2c37, 0x3b32, 0x375a, 0x3a14, 0x353d, 0x371f, 0x3b1b, 0x3b62, 0x3aaa, 0x39e8, 0x32d1, 0x3b3e, 0x3b74, 0x337c, 0x383e, 0x2d50, 0x3bc2, 0x33f5, 0x330f, 0x3b93, 0x3552, 0x3842, 0x37b5, 0x3918, 0x3654, 0x38a6, 0x2863, 0x3b0c, 0x38e8, 0x3b18, 0x28d3, 0x3b95, 0x3ad8, 0x38d1, 0x39ac, 0x31fb, 0x396b, 0x3b8f, 0x3818, 0x2d54, 0x3bd6, 0x340f, 0x3a89, 0x3192, 0x2cff, 0x3a00, 0x3680, 0x3843, 0x353a, 0x3591, 0x320f, 0x380e, 0x3709, 0xca6, 0x3783, 0x2f2b, 0x2ca1, 0x3885, 0x3391, 0x2c3b, 0x3933, 0x3812, 0x363e, 0x39b5, 0x39d8, 0x3a4b, 0x3951, 0x38b6, 0x399a, 0x318f, 0x2c20, 0x3925, 0x37cc, 0x3795, 0x38b8, 0x3184, 0x3961, 0x376a, 0x302b, 0x319e, 0x3b7d, 0x29a8, 0x3ae9, 0x313d, 0x3b7c, 0x3b7a, 0x3729, 0x3455, 0x2da3, +0x355c, 0x351e, 0x39d5, 0x3bf8, 0x3b11, 0x338f, 0x3990, 0x34cd, 0x3378, 0x2cbc, 0x3948, 0x39ab, 0x3be7, 0x3b59, 0x38e2, 0x2d9f, 0x378b, 0x385b, 0x31e4, 0x35ed, 0x3b0e, 0x3915, 0x3984, 0x3a44, 0x3869, 0x39f7, 0x3239, 0x3a8b, 0x36fb, 0x3081, 0x3ac3, 0x3b0e, 0x3104, 0x2078, 0x3962, 0x29bc, 0x3bb8, 0x3985, 0x3a56, 0x3648, 0x3a7d, 0x3ad3, 0x34d9, 0x3bb5, 0x38d9, 0x39b6, 0x3a2f, 0x3767, 0x3a56, 0x3620, 0x394d, 0x2d7c, 0x322a, 0x3899, 0x3a53, 0x3353, 0x383e, 0x316e, 0x348d, 0x3af5, 0x3a16, 0x3804, 0x3418, 0x3b1a, 0x3be6, 0x3166, 0x2911, 0x3656, 0x3acd, 0x392e, 0x3112, 0x3968, 0x37b7, 0x3af6, 0x38dd, 0x36b4, 0x3444, 0x3be7, 0x3991, 0x375f, 0x38da, 0x315a, 0x3684, 0x21a4, 0x38f4, 0x3860, 0x3935, 0x3b0f, 0x3b40, 0x37b6, 0x35b3, 0x3476, 0x35e9, 0x38ad, 0x3b82, 0x2964, +0x3880, 0x3844, 0x3615, 0x39d0, 0x3310, 0x306b, 0x329d, 0x338a, 0x2f84, 0x3a43, 0x300b, 0x3a47, 0x3821, 0x3b60, 0x387a, 0x3301, 0x3046, 0x351a, 0x3711, 0x38ec, 0x33a1, 0x376e, 0x39da, 0x3aae, 0x3877, 0x3960, 0x38ef, 0x3412, 0x3bbd, 0x3b24, 0x39e5, 0x355d, 0x3ab6, 0x2de8, 0x3ab5, 0x34a8, 0x3856, 0x32b4, 0x3673, 0x3a8b, 0x2e18, 0x3035, 0x3823, 0x38e7, 0x398e, 0x3743, 0x36e4, 0x381c, 0x3893, 0x3ae2, 0x331f, 0x3bdb, 0x34ae, 0x3a85, 0x277f, 0x342f, 0x38da, 0x3b62, 0x393a, 0x26bc, 0x3563, 0x39ce, 0x38e1, 0x395a, 0x3698, 0x3907, 0x30ed, 0x3536, 0x3925, 0x3bc8, 0x30ee, 0x38c2, 0x351d, 0x306e, 0x3952, 0x327f, 0x3a90, 0x3875, 0x337f, 0x3ab1, 0x342c, 0x39e7, 0x3be5, 0x33a6, 0x39af, 0x36ab, 0x2bca, 0x3984, 0x3a01, 0x319e, 0x3904, 0x3b78, 0x3785, 0x3a75, 0x3ace, 0x39c2, +0x3a6e, 0x39c8, 0x3b65, 0x342b, 0x3491, 0x320a, 0x3a81, 0x1f58, 0x3af6, 0x3881, 0x35d6, 0x389c, 0x3a23, 0x336f, 0x36ad, 0x39ab, 0x3062, 0x37fc, 0x317b, 0x3870, 0x3add, 0x3a7f, 0x37fe, 0x340b, 0x3211, 0x3944, 0x3714, 0x3806, 0x3bce, 0x3441, 0x3781, 0x397e, 0x391c, 0x3182, 0x31ac, 0x3456, 0x38f3, 0x3b15, 0x3b76, 0x3bf1, 0x3971, 0x3601, 0x318d, 0x34f2, 0x3a78, 0x35f5, 0x35c7, 0x354f, 0x3570, 0x36c5, 0x39fc, 0x35cd, 0x380e, 0x3606, 0x39c0, 0x352c, 0x3112, 0x3b6b, 0x355c, 0x3977, 0x328f, 0x2d34, 0x3abb, 0x3942, 0x1cba, 0x367a, 0x3aa6, 0x341f, 0x383f, 0x3a9a, 0x3960, 0x358f, 0x2dce, 0x21ac, 0x3bef, 0x3bca, 0x3bdb, 0x3967, 0x38aa, 0x39c1, 0x3b5b, 0x3185, 0x352c, 0x388a, 0x3893, 0x3a70, 0x34e4, 0x38e2, 0x31ba, 0x34d8, 0x32b5, 0x3aed, 0x3802, 0x2f06, 0x36d9, 0x3493, +0x3a09, 0x2994, 0x2e77, 0x3ae8, 0x3bc6, 0x3ace, 0x3926, 0x35b6, 0x326a, 0x3079, 0x3769, 0x28d1, 0x3b41, 0x357b, 0x3aed, 0x34cd, 0x3361, 0x2b6a, 0x3bc8, 0x2115, 0x3b73, 0x371f, 0x3b10, 0x2d39, 0x3092, 0x3264, 0x39df, 0x34c1, 0x2a04, 0x3a86, 0x306c, 0x33bf, 0x37dd, 0x3b17, 0x2f12, 0x3676, 0x3991, 0x3a7a, 0x3bb9, 0x3a80, 0x3441, 0x3592, 0x358d, 0x39dc, 0x31d3, 0x3887, 0x30f5, 0x3855, 0x3be6, 0x3b49, 0x3a7f, 0x3a6c, 0x2de5, 0x269d, 0x37e8, 0x3b49, 0x3026, 0x318b, 0x35e1, 0x39ba, 0x3a34, 0x3a43, 0x35a4, 0x34dd, 0x3918, 0x3a6a, 0x3780, 0x38d0, 0x3b78, 0x3b3e, 0x23b9, 0x37d9, 0x2b95, 0x3619, 0x3377, 0x2df7, 0x3b1e, 0x36de, 0x368b, 0x3bc4, 0x22d2, 0x3730, 0x30cf, 0x379d, 0x3824, 0x37fe, 0x39ba, 0x28c6, 0x36d3, 0x3587, 0x3aaa, 0x3155, 0x3a2d, 0x26ff, 0x2ffb, 0x3a19, +0x31b1, 0x302e, 0x2eba, 0x31f0, 0x3ba8, 0x3510, 0x243a, 0x30a4, 0x3638, 0x3b45, 0x2954, 0x3530, 0x39bc, 0x3944, 0x3951, 0x3026, 0x368f, 0x38e4, 0x36ce, 0x3b31, 0x38e5, 0x3471, 0x3af0, 0x3acf, 0x3842, 0x3be1, 0x319c, 0x2f2d, 0x3490, 0x3bec, 0x3b40, 0x3837, 0x3b38, 0x37fb, 0x3887, 0x383e, 0x382e, 0x31bd, 0x3ae1, 0x3a96, 0x3814, 0x37e0, 0x279d, 0x3363, 0x2ba9, 0x312b, 0x3a46, 0x3617, 0x3a0d, 0x2817, 0x3a37, 0x3981, 0x2d54, 0x3437, 0x3959, 0x3151, 0x3bc2, 0x39c9, 0x3aa3, 0x2d25, 0x3976, 0x3a2b, 0x3acd, 0x3a43, 0x3a9e, 0x39a1, 0x3914, 0x37ac, 0x3702, 0x382c, 0x38d9, 0x318c, 0x210a, 0x2c14, 0x34e2, 0x3a22, 0x2861, 0x3bc6, 0x1265, 0x3b43, 0x332e, 0x3992, 0x3330, 0x3a50, 0x3b38, 0x3aad, 0x33ce, 0x39a9, 0x33be, 0x387d, 0x3ade, 0x3a94, 0x3a56, 0x3ae4, 0x38a9, 0x1ace, +0x3551, 0x3ad8, 0x37c2, 0x3b00, 0x3b8d, 0x36d9, 0x3baa, 0x38bb, 0x34df, 0x3710, 0x3599, 0x3b7b, 0x2fea, 0x385e, 0x2dd8, 0x2e4e, 0x394d, 0x208a, 0x350b, 0x3876, 0x2df7, 0x34f4, 0x3b4c, 0x386d, 0x3260, 0x3b9d, 0x3343, 0x383f, 0x3bf4, 0x333b, 0x3bde, 0x3bd3, 0x392f, 0x3a2d, 0x3bdd, 0x341e, 0x3b13, 0x2b1c, 0x3b34, 0x2bb7, 0x2a93, 0x39c2, 0x3634, 0x358c, 0x3ba9, 0x3231, 0x3a0d, 0x3bc7, 0x3813, 0x2814, 0x3a1b, 0x3b03, 0x2e0e, 0x3616, 0x383a, 0x3578, 0x3a1f, 0x3685, 0x303c, 0x34a7, 0x3bad, 0x3548, 0x2380, 0x364f, 0x36ac, 0x28f8, 0x3a74, 0x34e2, 0x392e, 0x3409, 0x30e5, 0x340f, 0x3581, 0x36a3, 0x3366, 0x35f1, 0x30c4, 0x374f, 0x3921, 0x3aec, 0x3881, 0x2b48, 0x38e7, 0x31ce, 0x3626, 0x3b4b, 0x3b9f, 0x34cd, 0x313e, 0x379e, 0x39a6, 0x38cf, 0x38e3, 0x3031, 0x398f, 0x3bbc, +0x3a15, 0x3737, 0x361a, 0x3b25, 0x3992, 0x350a, 0x3698, 0x37de, 0x3a78, 0x37f5, 0x36d2, 0x3a12, 0x348e, 0x3923, 0x352f, 0x3b28, 0x3989, 0x39d8, 0x3b7b, 0x37cf, 0x3bfd, 0x3143, 0x31f5, 0x36a2, 0x3ae8, 0x3b3d, 0x3aab, 0x320e, 0x2ecc, 0x368f, 0x29c4, 0x36d0, 0x3a8c, 0x35c1, 0x2daa, 0x3128, 0x3b96, 0x388c, 0x3786, 0x349a, 0x390b, 0x2843, 0x381f, 0x2d05, 0x31ee, 0x3976, 0x3722, 0x368a, 0x3899, 0x3b64, 0x3b84, 0x3ae4, 0x3135, 0x3838, 0x387c, 0x2636, 0x2cd7, 0x3bcd, 0x39a6, 0x3ac6, 0x34c3, 0x364d, 0x384b, 0x2c55, 0x34b6, 0x201f, 0x38de, 0x2fc0, 0x389c, 0x381b, 0x36a8, 0x372f, 0x2b5c, 0x3491, 0x30d7, 0x38d2, 0x3893, 0x33a0, 0x33c8, 0x3405, 0x3490, 0x387d, 0x3411, 0x3907, 0x3bc0, 0x3aa9, 0x3023, 0x395c, 0x3b10, 0x3b8e, 0x3791, 0x3b17, 0x3980, 0x3b13, 0x336a, 0x354d, +0x39d9, 0x35f5, 0x3034, 0x300f, 0x38e5, 0x395c, 0x3394, 0x392f, 0x390a, 0x2567, 0x3151, 0x3861, 0x3a84, 0x3759, 0x382b, 0x3185, 0x359b, 0x3a6b, 0x3927, 0x3b6c, 0x39ed, 0x2cc3, 0x34bc, 0x389f, 0x3617, 0x335f, 0x3a9e, 0x35c0, 0x378c, 0x38e7, 0x2d21, 0x2ec0, 0x3874, 0x3af1, 0x36c6, 0x3b7e, 0x364f, 0x386e, 0x34f3, 0x2761, 0x386e, 0x3ac9, 0x308e, 0x3ad6, 0x3194, 0x35f7, 0x31d0, 0x3a36, 0x34d6, 0x36b0, 0x34bf, 0x38cb, 0x2f2c, 0x3945, 0x325c, 0x39d0, 0x1fce, 0x3a04, 0x3118, 0x3a0c, 0x3a56, 0x3794, 0x3744, 0x3ad3, 0x36c3, 0x2700, 0x392c, 0x34fa, 0x3b4d, 0x2649, 0x393c, 0x3967, 0x37f7, 0x369e, 0x3ac1, 0x39b3, 0x39a1, 0x36a4, 0x3645, 0x39cc, 0x3af9, 0x31e3, 0x237a, 0x35d3, 0x35fa, 0x3b53, 0x3872, 0x3bcc, 0x3a9c, 0x3ba9, 0x34e9, 0x34ec, 0x3b31, 0x3b09, 0x31d7, 0x3a45, +0x33ab, 0x38b0, 0x384c, 0x3a48, 0x3340, 0x390f, 0x340e, 0x3937, 0x2ceb, 0x3b0d, 0x3b15, 0x3979, 0x3884, 0x376b, 0x3b79, 0x39d2, 0x36fb, 0x3442, 0x3994, 0x35c1, 0x3b6f, 0x3918, 0x3bea, 0x37f1, 0x3b25, 0x3bd5, 0x3ab4, 0x3604, 0x3593, 0x39fc, 0x3893, 0x37f7, 0x3a56, 0x3118, 0x3444, 0x36ac, 0x315a, 0x2eaa, 0x3a55, 0x3bea, 0x372f, 0x3b79, 0x38fa, 0x32a9, 0x2a8d, 0x326b, 0x39dd, 0x2c6e, 0x3a63, 0x39a8, 0x34dd, 0x2fa8, 0x3afa, 0x3ab1, 0x3854, 0x2e58, 0x3a7b, 0x39e6, 0x3489, 0x3631, 0x3826, 0x3ad2, 0x384d, 0x3565, 0x3a21, 0x3beb, 0x334d, 0x3603, 0x2de5, 0x31fa, 0x3111, 0x3455, 0x390c, 0x38aa, 0x3822, 0x2e75, 0x36cb, 0x3bb0, 0x38d7, 0x386a, 0x336f, 0x3150, 0x395a, 0x3219, 0x39f2, 0x3675, 0x2b46, 0x39d6, 0x2e2f, 0x3752, 0x3b23, 0x3670, 0x3b64, 0x39f4, 0x3bec, 0x3848, +0x389e, 0x3214, 0x3618, 0x32ca, 0x333b, 0x2fe6, 0x2cf6, 0x36f3, 0x3748, 0x380b, 0x3b5f, 0x3b4e, 0x2dce, 0x2474, 0x3a17, 0x320e, 0x38ac, 0x3b44, 0x3595, 0x3bd7, 0x3896, 0x32ea, 0x37d0, 0x34a8, 0x31f2, 0x3a51, 0x3b6c, 0x3753, 0x3abd, 0x3b26, 0x24a0, 0x32fb, 0x3a3a, 0x3bf9, 0x2fc5, 0x390d, 0x3a42, 0x331d, 0x3b2e, 0x370e, 0x32d3, 0x3b26, 0x3b7f, 0x2d64, 0x39ca, 0x3405, 0x3962, 0x36c0, 0x2ffe, 0x3b76, 0x3811, 0x3287, 0x34d7, 0x3beb, 0x3a37, 0x3756, 0x390e, 0x398b, 0x3160, 0x3bf9, 0x3a09, 0x38ee, 0x382a, 0x366e, 0x3836, 0x3b95, 0x3b30, 0x3bd4, 0x1c94, 0x33c6, 0x3391, 0x3b2c, 0x3b07, 0x37b6, 0x3499, 0x3942, 0x2dc7, 0x357d, 0x380f, 0x32e5, 0x3628, 0x386a, 0x3b66, 0x395b, 0x3611, 0x3bef, 0x3935, 0x34c3, 0x3354, 0x39ab, 0x3b9e, 0x34f5, 0x358b, 0x326f, 0x3952, 0x359f, +0x39c7, 0x399f, 0x2d59, 0x379e, 0x33fd, 0x3b7a, 0x327e, 0x392d, 0x3b6c, 0x34b5, 0x3a50, 0x365b, 0x392f, 0x3b31, 0x3a20, 0x3131, 0x3a43, 0x292e, 0x3a0c, 0x3bb1, 0x3bf6, 0x29e8, 0x32d4, 0x3b07, 0x3189, 0x32d5, 0x3689, 0x3a3e, 0x3857, 0x281c, 0x2b7b, 0x3545, 0x35a9, 0x3aa0, 0x2cf4, 0x3356, 0x3b2f, 0x3845, 0x3a9d, 0x38fa, 0x285c, 0x3aef, 0x387a, 0x2121, 0x376d, 0x30bb, 0x38b8, 0x3ad4, 0x3bf3, 0x3219, 0x398e, 0x2dc8, 0x31ae, 0x38b2, 0x34f9, 0x3846, 0x3bb0, 0x3bc9, 0x2fd2, 0x3403, 0x34c1, 0x3043, 0x3823, 0x38f1, 0x384a, 0x396a, 0x37c2, 0x3839, 0x3441, 0x3821, 0x2774, 0x380f, 0x39e4, 0x3832, 0x375b, 0x3a10, 0x3894, 0x2f6b, 0x3586, 0x34fe, 0x3bad, 0x3856, 0x35c6, 0x38ad, 0x3835, 0x368d, 0x39a1, 0x3736, 0x349e, 0x32c2, 0x2df5, 0x34c5, 0x3ba0, 0x349b, 0x35af, 0x35aa, +0x3a17, 0x3696, 0x3169, 0x3433, 0x3800, 0x38f3, 0x37f8, 0x376a, 0x2ec7, 0x3bad, 0x373f, 0x281c, 0x3968, 0x3403, 0x2c9e, 0x3b1f, 0x3003, 0x35cc, 0x3810, 0x367c, 0x3a68, 0x26e9, 0x34e2, 0x3902, 0x2edb, 0x3478, 0x2a6a, 0x3a45, 0x3867, 0x38c5, 0x3a61, 0x388c, 0x3738, 0x34be, 0x35e6, 0x36b3, 0x325c, 0x35c6, 0x384e, 0x358d, 0x3894, 0x31c8, 0x3820, 0x363b, 0x380e, 0x385f, 0x38ac, 0x36a3, 0x31da, 0x3b46, 0x3715, 0x37ec, 0x386b, 0x35c7, 0x3100, 0x3a7a, 0x3504, 0x3810, 0x3a22, 0x36a9, 0x3995, 0x3b0c, 0x37f0, 0x2d4e, 0x36c4, 0x347e, 0x39dc, 0x3a2a, 0x3951, 0x3bca, 0x3bf5, 0x3bb3, 0x3b46, 0x3afa, 0x311c, 0x3929, 0x3291, 0x372f, 0x306d, 0x2843, 0x391a, 0x30c4, 0x3a5b, 0x3be7, 0x3924, 0x38ae, 0x3734, 0x32bd, 0x3b39, 0x39f6, 0x3aaa, 0x327a, 0x3045, 0x383c, 0x3303, 0x352c, +0x3bcd, 0x3baa, 0x3116, 0x3ad3, 0x39bc, 0x3aee, 0x36b3, 0x3a06, 0x3408, 0x3971, 0x3545, 0x38aa, 0x3a21, 0x3743, 0x367e, 0x3ac3, 0x3a54, 0x2cad, 0x3820, 0x39eb, 0x398a, 0x34a9, 0x3b95, 0x3a34, 0x32bb, 0x3bda, 0x3704, 0x3aa2, 0x39a3, 0x3953, 0x38ed, 0x3821, 0x39eb, 0x36b4, 0x38b5, 0x382e, 0x3753, 0x3203, 0x3796, 0x2e26, 0x303a, 0x3895, 0x39a3, 0x3a1f, 0x3ad6, 0x302f, 0x376d, 0x347f, 0x32fc, 0x382d, 0x39fa, 0x2d39, 0x32b2, 0x2fef, 0x3044, 0x3497, 0x39a9, 0x3994, 0x346d, 0x38a8, 0x3487, 0x3431, 0x39a7, 0x375a, 0x3935, 0x2eaf, 0x2ff3, 0x3467, 0x35cf, 0x3738, 0x2df4, 0x3b14, 0x3978, 0x36a8, 0x3406, 0x3aad, 0x3169, 0x355a, 0x3a49, 0x2e40, 0x34a4, 0x34ac, 0x308a, 0x3546, 0x3b34, 0x3514, 0x3aaf, 0x3707, 0x3999, 0x3a99, 0x2cc7, 0x326d, 0x3a95, 0x3bb1, 0x315b, 0x3989, +0x39d7, 0x3684, 0x39f7, 0x3963, 0x31e0, 0x3a96, 0x3492, 0x3b63, 0x37fd, 0x3b38, 0x37ba, 0x34fd, 0x365b, 0x3496, 0x3a38, 0x3906, 0x3bed, 0x39d9, 0x389b, 0x34eb, 0x3332, 0x2b11, 0x31c8, 0x3889, 0x3810, 0x30b7, 0x28b6, 0x29d1, 0x3420, 0x3222, 0x387e, 0x3a70, 0x2cf8, 0x3b07, 0x304f, 0x3998, 0x360b, 0x3b8b, 0x3434, 0x38ee, 0x304f, 0x39e7, 0x3685, 0x3981, 0x3a46, 0x39af, 0x387a, 0x36e7, 0x3a5e, 0x33ef, 0x3a38, 0x32d1, 0x39f0, 0x345c, 0x36af, 0x3416, 0x3be9, 0x23fa, 0x3b3a, 0x3b59, 0x3732, 0x3578, 0x3bd8, 0x3a83, 0x387d, 0x3ad8, 0x394e, 0x3431, 0x3748, 0x3809, 0x3ac3, 0x3a1a, 0x38e0, 0x37ca, 0x2e29, 0x386d, 0x2e50, 0x360f, 0x31e4, 0x3715, 0x3986, 0x35a7, 0x3bd1, 0x3ae4, 0x3432, 0x3750, 0x38e8, 0x3926, 0x3b12, 0x3460, 0x358f, 0x3aab, 0x3906, 0x355a, 0x27fc, 0x3a2f, +0x386f, 0x3b47, 0x309b, 0x3098, 0x3b47, 0x35a2, 0x3677, 0x39a2, 0x35a4, 0x389e, 0x3b5f, 0x37e9, 0x32d3, 0x30cb, 0x2cc7, 0x2f1d, 0x392f, 0x3bfb, 0x392b, 0x3909, 0x3a3a, 0x38f8, 0x2e08, 0x3962, 0x358f, 0x37ea, 0x34db, 0x3bc8, 0x38ca, 0x3ba2, 0x3a0b, 0x39ba, 0x369c, 0x2cce, 0x3988, 0x3a39, 0x3be5, 0x2a39, 0x35c1, 0x3643, 0x37c9, 0x35bf, 0x352f, 0x3a7f, 0x350f, 0x330f, 0x3a34, 0x36aa, 0x38da, 0x2fc0, 0x387b, 0x37b7, 0x34a8, 0x396b, 0x39f3, 0x37f4, 0x3649, 0x3959, 0x3024, 0x373f, 0x38fd, 0x38c3, 0x39d3, 0x340b, 0x38cb, 0x30c4, 0x3877, 0x3af4, 0x28ef, 0x3a81, 0x2ff9, 0x3992, 0x2902, 0x3b16, 0x3590, 0x3a95, 0x3708, 0x3a63, 0x1ba7, 0x347d, 0x3a3e, 0x3bd4, 0x3946, 0x2da1, 0x38df, 0x396d, 0x39c9, 0x3810, 0x39de, 0x3b69, 0x30ad, 0x3748, 0x3678, 0x3a92, 0x39b8, 0x30c9, +0x3990, 0x2cd8, 0x303c, 0x2c03, 0x35c0, 0x3b10, 0x39b6, 0x35f6, 0x3bb8, 0x3733, 0x320f, 0x3a45, 0x3457, 0x392e, 0x3462, 0x36f3, 0x32d4, 0x3025, 0x24ba, 0x3826, 0x37a7, 0x3714, 0x38d7, 0x3630, 0x3a29, 0x3582, 0x3af6, 0x2639, 0x3b0e, 0x3872, 0x39c2, 0x2e2e, 0x396d, 0x3b99, 0x34b3, 0x3551, 0x3162, 0x3a7d, 0x35f0, 0x351b, 0x3661, 0x3ad0, 0x39cf, 0x25f1, 0x3987, 0x3296, 0x365f, 0x3902, 0x38fd, 0x3745, 0x3990, 0x3972, 0x3317, 0x3a87, 0x3985, 0x392d, 0x36a3, 0x34f1, 0x396f, 0x3a7a, 0x3465, 0x3362, 0x3b0b, 0x208d, 0x37e0, 0x3ade, 0x31dc, 0x3854, 0x34cc, 0x3874, 0x311e, 0x38ec, 0x35e2, 0x2de6, 0x3219, 0x38b0, 0x3be3, 0x3381, 0x3b39, 0x38e6, 0x3b20, 0x3bea, 0x38e2, 0x38d6, 0x39e6, 0x2db4, 0x3884, 0x1cb8, 0x176a, 0x2eba, 0x3bb1, 0x37fe, 0x371a, 0x3b1c, 0x3402, 0x3462, +0x3632, 0x2a7c, 0x3897, 0x32c6, 0x34d7, 0x3ad2, 0x3b38, 0x3aa2, 0x2c56, 0x392e, 0x376a, 0x3356, 0x36b3, 0x3b8d, 0x2fc0, 0x3b16, 0x38dd, 0x2f21, 0x3852, 0x3aeb, 0x3aad, 0x379e, 0x32c9, 0x324b, 0x3b1f, 0x382a, 0x3929, 0x2cbe, 0x3867, 0x3651, 0x389b, 0x2fd3, 0x3809, 0x3ade, 0x38ba, 0x3a92, 0x398d, 0x38c2, 0x3061, 0x37f4, 0x3ab9, 0x3a17, 0x2d4b, 0x3255, 0x3656, 0x3884, 0x3b75, 0x3b1a, 0x3a56, 0x353d, 0x2fab, 0x3a0d, 0x3180, 0x3bd5, 0x3ac0, 0x3298, 0x3a5f, 0x3009, 0x39d4, 0x3b69, 0x39ad, 0x3b16, 0x36b3, 0x2c5b, 0x3ab1, 0x39d1, 0x30bc, 0x36ba, 0x2f6d, 0x3817, 0x3b4c, 0x3b31, 0x39d1, 0x348b, 0x3b82, 0x3032, 0x2586, 0x3bbf, 0x2dea, 0x2f5f, 0x383a, 0x3bb8, 0x3a4c, 0x3421, 0x33f7, 0x3ab6, 0x398e, 0x3335, 0x3a1c, 0x37dd, 0x2fc9, 0x3824, 0x3463, 0x3bed, 0x3b6c, 0x313b, +0x3b2d, 0x3426, 0x335b, 0x3952, 0x347e, 0x3ba0, 0x3bbb, 0x39ec, 0x3b16, 0x3561, 0x3a65, 0x3196, 0x3bd4, 0x30b6, 0x3891, 0x3749, 0x3a0b, 0x3a40, 0x3485, 0x3b5d, 0x3b0d, 0x33b5, 0x3812, 0x37be, 0x3a0a, 0x38c9, 0x38d2, 0x398f, 0x3235, 0x3a91, 0x2b81, 0x26f6, 0x2d3a, 0x1cd9, 0x2ea1, 0x3970, 0x3a5b, 0x30e8, 0x2a5f, 0x390b, 0x38f4, 0x396c, 0x3b50, 0x3b24, 0x35dd, 0x396c, 0x33c7, 0x2c40, 0x397b, 0x390b, 0x348f, 0x38df, 0x38fb, 0x3be2, 0x3122, 0x3bb5, 0x2c56, 0x322f, 0x3836, 0x1ee5, 0x3b35, 0x359e, 0x3966, 0x39b3, 0x3163, 0x2902, 0x38b4, 0x3ace, 0x34ed, 0x3add, 0x3428, 0x369b, 0x3116, 0x3a77, 0x34f6, 0x39c9, 0x3263, 0x359d, 0x352c, 0x3b0b, 0x38c9, 0x31dc, 0x373d, 0x2ad4, 0x3452, 0x3156, 0x360d, 0x2d93, 0x38d0, 0x3978, 0x3901, 0x36f4, 0x3b26, 0x2e42, 0x3983, 0x3bce, +0x3990, 0x37f3, 0x2645, 0x3938, 0x3868, 0x3a22, 0x3a6a, 0x3b78, 0x3b4e, 0x371f, 0x39fb, 0x2e11, 0x38b8, 0x36d2, 0x3468, 0x34f2, 0x39bf, 0x3b8e, 0x3710, 0x348b, 0x38d6, 0x3aae, 0x35f0, 0x3ae0, 0x3ba8, 0x3857, 0x39c1, 0x3a03, 0x35b3, 0x3a2c, 0x3a7b, 0x350c, 0x30f8, 0x3830, 0x25aa, 0x24b3, 0x380b, 0x3879, 0x3929, 0x354d, 0x38b4, 0x2fea, 0x34bc, 0x3ba6, 0x3832, 0x3a2a, 0x387b, 0x343f, 0x3114, 0x2edb, 0x36ec, 0x3a24, 0x32ea, 0x2f80, 0x3675, 0x2df4, 0x39ce, 0x37ea, 0x3091, 0x3766, 0x38e3, 0x37d4, 0x39bc, 0x3425, 0x3336, 0x38aa, 0x34b9, 0x3bce, 0x37dc, 0x3af9, 0x39a9, 0x3b3e, 0x386a, 0x392b, 0x3942, 0x338a, 0x36f9, 0x36f3, 0x3b56, 0x33e2, 0x3bd1, 0x38aa, 0x3337, 0x3a61, 0x3ac5, 0x377c, 0x3819, 0x2ff3, 0x3870, 0x3b2c, 0x3925, 0x38cd, 0x3b0e, 0x3719, 0x3a2a, 0x326d, +0x32b3, 0x35f8, 0x3b6e, 0x3bde, 0x3baf, 0x3027, 0x3433, 0x3819, 0x2eab, 0x3b4f, 0x34a1, 0x34f8, 0x393a, 0x3a09, 0x38f7, 0x3489, 0x37ae, 0x3bfa, 0x2dc1, 0x3468, 0x26f5, 0x343f, 0x3b4e, 0x39b2, 0x339a, 0x3441, 0x3b51, 0x38dc, 0x3914, 0x2699, 0x3339, 0x2f3a, 0x38f1, 0x3a57, 0x2e7e, 0x36a4, 0x2cf6, 0x31e6, 0x3802, 0x3a75, 0x39f5, 0x38f5, 0x3327, 0x38d5, 0x36b4, 0x3b6c, 0x2279, 0x3b08, 0x39e9, 0x380f, 0x3b8c, 0x3432, 0x39c9, 0x343d, 0x38ad, 0x3be5, 0x3602, 0x3bc4, 0x3952, 0x350a, 0xc4c, 0x267d, 0x35e1, 0x3bdb, 0x3937, 0x348d, 0x3768, 0x3a78, 0x3717, 0x3342, 0x34f0, 0x36db, 0x2788, 0x3b52, 0x2acf, 0x3bef, 0x3899, 0x3279, 0x38e4, 0x3bc5, 0x38ed, 0x3369, 0x3652, 0x34b4, 0x378a, 0x3bf9, 0x3a9d, 0x3841, 0x3a01, 0x3065, 0x35a4, 0x3b47, 0x376f, 0x35e0, 0x34f0, 0x396c, +0x3a1e, 0x354b, 0x390b, 0x3165, 0x3435, 0x329e, 0x386e, 0x36ba, 0x2046, 0x385b, 0x3493, 0x3537, 0x2e29, 0x3bda, 0x3b0c, 0x35e0, 0x34b8, 0x25c1, 0x3698, 0x2ef1, 0x3516, 0x330e, 0x387a, 0x37eb, 0x3011, 0x2658, 0x350a, 0x393c, 0x2c1c, 0x2dbc, 0x25f3, 0x376f, 0x3a1c, 0x3112, 0x2c6d, 0x2e2a, 0x3a3d, 0x3ba0, 0x391a, 0x36ac, 0x3876, 0x32b9, 0x3ad9, 0x36f8, 0x39aa, 0x3095, 0x348d, 0x39a6, 0x35be, 0x3747, 0x31e9, 0x33b9, 0x31c0, 0x3926, 0x2d3f, 0x3b32, 0x3412, 0x3b52, 0x29eb, 0x333e, 0x3af4, 0x3974, 0x36ab, 0x3ba6, 0x3aed, 0x3807, 0x2b53, 0x33b0, 0x35d7, 0x37aa, 0x3838, 0x3478, 0x2f9d, 0x3b1b, 0x3b31, 0x30fb, 0x30fa, 0x38d7, 0x329f, 0x372b, 0x31b1, 0x38a9, 0x3932, 0x315d, 0x2d85, 0x374b, 0x3aa3, 0x3621, 0x2da1, 0x373a, 0x386d, 0x38ba, 0x3a4e, 0x1eea, 0x3887, 0x3438 +}; \ No newline at end of file diff --git a/redmule/inc/x_input.h b/redmule/inc/x_input.h new file mode 100644 index 0000000..6295303 --- /dev/null +++ b/redmule/inc/x_input.h @@ -0,0 +1,99 @@ + /* Header file generated by RedMulE Golden Model */ +uint16_t x_inp [9216] = { +0x3122, 0x369c, 0x39bd, 0x3b58, 0x3be0, 0x3a5a, 0x3416, 0x386c, 0x3a11, 0x350e, 0x38ab, 0x35ad, 0x35d9, 0x390f, 0x3565, 0x36b0, 0x3aad, 0x3a64, 0x3797, 0x368d, 0x35a6, 0x396f, 0x2a5e, 0x3a29, 0x38a7, 0x33a8, 0x3409, 0x3621, 0x3b02, 0x34a7, 0x3a94, 0x3819, 0x3695, 0x380a, 0x3acd, 0x396a, 0x395a, 0x3663, 0x3bbe, 0x3306, 0x3a4d, 0x3b0d, 0x3bc3, 0x30fa, 0x32ab, 0x31fd, 0x3bc9, 0x38ce, 0x3180, 0x3980, 0x34ec, 0x3a84, 0x3bc9, 0x3719, 0x3a76, 0x38ab, 0x3707, 0x3904, 0x33d9, 0x34d6, 0x3053, 0x3bd4, 0x2f03, 0x1dbf, 0x2e5f, 0x36fa, 0x191d, 0x3187, 0x223f, 0x384b, 0x36dc, 0x3549, 0x343f, 0x36d8, 0x36de, 0x31ff, 0x174e, 0x30d3, 0x3452, 0x3258, 0x30b1, 0x3127, 0x3840, 0x3991, 0x3b1b, 0x3a7c, 0x36ec, 0x2304, 0x3946, 0x3876, 0x3a5d, 0x3a76, 0x2f78, 0x3b01, 0x3934, 0x3bc4, +0x2b27, 0x3669, 0x38ce, 0x2cde, 0x38e1, 0x3abd, 0x2c4f, 0x3971, 0x3964, 0x3a9d, 0x38b9, 0x390f, 0x3475, 0x3b16, 0x38f0, 0x397e, 0x3996, 0x3223, 0x36c6, 0x3bfd, 0x3161, 0x3a70, 0x3961, 0x38e1, 0x2b2b, 0x32c1, 0x3683, 0x36bb, 0x381a, 0x3b92, 0x356a, 0x38c4, 0x38df, 0x3a7b, 0x3b3a, 0x35a2, 0x27d3, 0x3af2, 0x3489, 0x38c7, 0x3985, 0x3a03, 0x30f6, 0x3a92, 0x38d5, 0x39a0, 0x3749, 0x3784, 0x1c70, 0x356b, 0x2d5f, 0x39db, 0x37ab, 0x39fb, 0x3b2c, 0x2ef8, 0x3336, 0x3afd, 0x38f0, 0x358f, 0x3ac4, 0x293d, 0x3328, 0x3741, 0x3993, 0x3463, 0x3918, 0x332e, 0x356d, 0x36ee, 0x34e7, 0x3757, 0x34b5, 0x3b7c, 0x3a63, 0x3b6c, 0x34a6, 0x34f3, 0x346a, 0x2bcf, 0x363d, 0x3081, 0x3abc, 0x35a5, 0x36ff, 0x2cb7, 0x2a53, 0x37a3, 0x3a98, 0x3b92, 0x3a9a, 0x38ff, 0x39dc, 0x3289, 0x3357, 0x39f6, +0x3b74, 0x3a5e, 0x3ba9, 0x365e, 0x3aa5, 0x3b42, 0x39b5, 0x2fb7, 0x39e5, 0x263d, 0x3405, 0x259f, 0x381d, 0x38dc, 0x3152, 0x37f5, 0x38b6, 0x3bfd, 0x3a4e, 0x3804, 0x370f, 0x382f, 0x395d, 0x38a5, 0x2edd, 0x3ac9, 0x34dc, 0x2a2a, 0x2aba, 0x35d0, 0x36b4, 0x3ae1, 0x3b35, 0x3a49, 0x3b5e, 0x38e8, 0x30ed, 0x3ab4, 0x3a92, 0x3bd9, 0x3437, 0x36d0, 0x3aad, 0x36d6, 0x35ed, 0x3635, 0x3bf7, 0x345a, 0x300a, 0x31d2, 0x340c, 0x38fd, 0x39ad, 0x39ac, 0x38bf, 0x38f6, 0x2f7e, 0x3685, 0x3be9, 0x3af0, 0x35d1, 0x35fb, 0x35ad, 0x3a6d, 0x3a78, 0x3813, 0x36a8, 0x3a6e, 0x39fc, 0x3918, 0x2179, 0x38a2, 0x37f9, 0x38dc, 0x24a9, 0x3647, 0x386a, 0x2890, 0x2d0f, 0x31e3, 0x394a, 0x36b2, 0x3071, 0x292d, 0x3568, 0x3adb, 0x394a, 0x2ff6, 0x3142, 0x322b, 0x2696, 0x3954, 0x229d, 0x383a, 0x2f3d, 0x3b4e, +0x3b1c, 0xd7b, 0x379c, 0x3421, 0x39a0, 0x3557, 0x2e38, 0x3b3a, 0x270e, 0x250b, 0x3b0a, 0x3aa1, 0x2d72, 0x351c, 0x3a11, 0x382b, 0x37f8, 0x3a82, 0x39e8, 0x3a1d, 0x3a45, 0x2fb7, 0x341b, 0x39ea, 0x3646, 0x3b27, 0x3abd, 0x350b, 0x3a3a, 0x3557, 0x37db, 0x315b, 0x305a, 0x3bd7, 0x3b33, 0x32b9, 0x3503, 0x2749, 0x3532, 0x37f2, 0x348e, 0x3422, 0x32a4, 0x37bf, 0x3b7b, 0x378f, 0x3476, 0x3a1a, 0x39a2, 0x35d9, 0x3b4d, 0x39f0, 0x34a7, 0x36c6, 0x3ab4, 0x39c2, 0x385b, 0x3add, 0x34cf, 0x3604, 0x39e1, 0x3872, 0x3751, 0x32db, 0x38df, 0x3602, 0x3509, 0x37d5, 0x342e, 0x39ef, 0x2f59, 0x2505, 0x314d, 0x35ff, 0x3bae, 0x3b38, 0x32af, 0x3b9b, 0x3b03, 0x2c5e, 0x3940, 0x38ef, 0x324c, 0x399a, 0x3a14, 0x39c6, 0x3a33, 0x382a, 0x3b36, 0x3ae7, 0x3b71, 0x3020, 0x3a14, 0x33d2, 0x3b1d, 0x2660, +0x2ace, 0x3a36, 0x39d6, 0x398d, 0x3ae2, 0x39dc, 0x3bb3, 0x26d5, 0x3a4a, 0x36ad, 0x3b31, 0x2b7e, 0x3baf, 0x3314, 0x2e0b, 0x31c1, 0x25a9, 0x378c, 0x3b45, 0x3ae9, 0x3586, 0x39fe, 0x3b5b, 0x3b18, 0x3a1b, 0x399b, 0x3aad, 0x30e1, 0x3b3b, 0x2d9f, 0x2614, 0x354e, 0x3806, 0x393e, 0x3564, 0x2346, 0x3b5e, 0x382f, 0x31c9, 0x3be1, 0x2e41, 0x394e, 0x346a, 0x3976, 0x38e7, 0x3503, 0x387f, 0x3025, 0x3232, 0x283b, 0x37d2, 0x32aa, 0x36e0, 0x3b92, 0x3a41, 0x2f32, 0x34cc, 0x3a30, 0x3a69, 0x3671, 0x3894, 0x3b3d, 0x3468, 0x3836, 0x2303, 0x2e8f, 0x3186, 0x37d1, 0x371f, 0x381a, 0x3af8, 0x2ca8, 0x31ba, 0x3a59, 0x3971, 0x3bdb, 0x3add, 0x35af, 0x3b81, 0x2f19, 0x3963, 0x3b58, 0x3aa4, 0x3b98, 0x3808, 0x33b7, 0x3833, 0x3506, 0x3467, 0x2f27, 0x35be, 0x346e, 0x39c9, 0x3677, 0x31b5, 0x3bf4, +0x3506, 0x30a7, 0x370d, 0x367e, 0x3264, 0x2fb7, 0x30d5, 0x3814, 0x3152, 0x38aa, 0x3a77, 0x2dde, 0x3077, 0x38df, 0x3744, 0x2af8, 0x37f8, 0x3aa2, 0x39e3, 0x3ada, 0x3931, 0x3bc0, 0x34b2, 0x35de, 0x33c8, 0x34d4, 0x395a, 0x36a1, 0x3a3a, 0x33e3, 0x38d7, 0x3476, 0x3b6f, 0x3506, 0x3448, 0x3b2c, 0x3766, 0x382b, 0x2efd, 0x33ec, 0x242c, 0x3976, 0x3027, 0x2c5f, 0x37df, 0x3b1a, 0x3641, 0x352d, 0x39ab, 0x3b49, 0x3a91, 0x35ba, 0x382f, 0x2b4c, 0x366f, 0x2f0b, 0x33e3, 0x2ccd, 0x3530, 0x33d0, 0x264e, 0x39b4, 0x3968, 0x29f5, 0x3a2c, 0x299a, 0x39c4, 0x380d, 0x3be2, 0x34b2, 0x3879, 0x3532, 0x34ac, 0x3685, 0x3b5e, 0x3426, 0x3b4d, 0x34ec, 0x32e0, 0x3767, 0x39d7, 0x3119, 0x39db, 0x36e1, 0x39ec, 0x388d, 0x3731, 0x314a, 0x39c5, 0x3325, 0x3284, 0x38c5, 0x2cf4, 0x2180, 0x3614, 0x382e, +0x2afc, 0x3562, 0x365c, 0x32dd, 0x3a1d, 0x39c0, 0x3510, 0x3ae7, 0x22b7, 0x3538, 0x3604, 0x3bb0, 0x3a8e, 0x38ca, 0x379d, 0x36f1, 0x3947, 0x317f, 0x2bfa, 0x3bc0, 0x3ad4, 0x3a19, 0x308b, 0x390b, 0x353d, 0x3599, 0x344e, 0x3159, 0x39fc, 0x362e, 0x3bf5, 0x3246, 0x38e9, 0x3551, 0x3981, 0x3776, 0x3964, 0x3966, 0x335b, 0x3361, 0x3abc, 0x39d1, 0x3b96, 0x3a40, 0x3bfc, 0x30f6, 0x2fc2, 0x350a, 0x3857, 0x3175, 0x3929, 0x383e, 0x38c1, 0x3b21, 0x3025, 0x3a20, 0x3b6f, 0x3600, 0x3b06, 0x30d2, 0x30c3, 0x3550, 0x3025, 0x33c7, 0x3724, 0x3819, 0x38e3, 0x33fe, 0x3ad1, 0x2f0b, 0x38fe, 0x3458, 0x3bca, 0x391e, 0x345a, 0x36da, 0x38d7, 0x2dbd, 0x2c4e, 0x38b4, 0x35ea, 0x2970, 0x2ec0, 0x2519, 0x3552, 0x37cd, 0x3893, 0x3150, 0x38d6, 0x360d, 0x3986, 0x38e3, 0x3847, 0x36dc, 0x3a12, 0x3a3b, +0x34ea, 0x3a8b, 0x31db, 0x3a10, 0x34ca, 0x3b7e, 0x324e, 0x393b, 0x3a38, 0x3791, 0x2727, 0x31a9, 0x3beb, 0x3a43, 0x3ad3, 0x2c46, 0x3bc4, 0x38a9, 0x3918, 0x3b1c, 0x381d, 0x32aa, 0x367b, 0x3a80, 0x3a59, 0x37f6, 0x37ac, 0x36aa, 0x3072, 0x3960, 0x388c, 0x3a91, 0x3908, 0x34ab, 0x2f14, 0x3b72, 0x38f9, 0x359f, 0x38e2, 0x2938, 0x39ba, 0x2aa7, 0x3276, 0x3a66, 0x394d, 0x2de4, 0x39b0, 0x3835, 0x3b49, 0x2d77, 0x3ba2, 0x348b, 0x39f0, 0x381d, 0x382c, 0x384d, 0x3798, 0x3a0f, 0x38c3, 0x2ecb, 0x3472, 0x308f, 0x350c, 0x3014, 0x38e7, 0x2aff, 0x30ec, 0x3928, 0x36f5, 0x3909, 0x3b46, 0x2a93, 0x37cb, 0x3bb6, 0x2fbc, 0x3a3a, 0x3a47, 0x343e, 0x3bf1, 0x3b8f, 0x3bcb, 0x376d, 0x3669, 0x3892, 0x35c2, 0x3512, 0x370f, 0x35dc, 0x3923, 0x39e8, 0x3880, 0x288b, 0x36e7, 0x359e, 0x346f, 0x3b64, +0x3b1c, 0x340e, 0x25ab, 0x3b4e, 0x3897, 0x3bdb, 0x2da4, 0x389c, 0x36fd, 0x3a3c, 0x2f2d, 0x38fb, 0x395c, 0x2ea7, 0x3949, 0x368b, 0x35a3, 0x377c, 0x32de, 0x35b1, 0x3529, 0x301d, 0x3771, 0x393f, 0x3993, 0x3ae0, 0x3bda, 0x375b, 0x31ff, 0x3989, 0x3ad0, 0x3bb6, 0x3814, 0x3999, 0x3854, 0x39e7, 0x37fa, 0x3afc, 0x185f, 0x2e32, 0x3697, 0x3942, 0x3aa0, 0x3b75, 0x3ad3, 0x3aa8, 0x39b8, 0x38c2, 0x38fb, 0x39a4, 0x3b8f, 0x3b2e, 0x334d, 0x3a0c, 0x361b, 0x3a46, 0x3337, 0x388d, 0x321b, 0x38bc, 0x3005, 0x35a4, 0x3bf5, 0x3bcf, 0x3a44, 0x3ac7, 0x3a7d, 0x3b2c, 0x39c5, 0x2001, 0x3594, 0x3a29, 0x3131, 0x3ab9, 0x39d9, 0x38c4, 0x3666, 0x37a8, 0x3a75, 0x3a10, 0x3441, 0x3b7e, 0x23f5, 0x3ab2, 0x306f, 0x3bc0, 0x3989, 0x3361, 0x36ea, 0x2eb9, 0x360f, 0x351c, 0x2a16, 0x3bfe, 0x372b, 0x3b97, +0x3bbf, 0x2cf5, 0x3922, 0x316e, 0x37ad, 0x3a7f, 0x3863, 0x3a4c, 0x37a4, 0x35c1, 0x3b77, 0x3549, 0x3a83, 0x37c4, 0x3b84, 0x38c6, 0x3a7f, 0x2f24, 0x2fc0, 0x3475, 0x3a6a, 0x3bc4, 0x3a21, 0x3b96, 0x365c, 0x38b7, 0x31ce, 0x3bcc, 0x3b80, 0x3a31, 0x3523, 0x2d9d, 0x359e, 0x3afe, 0x371d, 0x2d94, 0x3a2a, 0x3ace, 0x3bed, 0x3726, 0x2fa1, 0x3abe, 0x3624, 0x2be4, 0x2b70, 0x394e, 0x3640, 0x391d, 0x3892, 0x38e2, 0x333c, 0x3080, 0x2ac2, 0x326c, 0x2f8b, 0x38ac, 0x3097, 0x3b80, 0x3ae4, 0x39d4, 0x3676, 0x3969, 0x34c8, 0x3906, 0x2930, 0x3acb, 0x3bb3, 0x3bba, 0x3646, 0x2ba1, 0x30bf, 0x38f2, 0x3bbc, 0x3a3f, 0x34c2, 0x3832, 0x3938, 0x3a79, 0x3546, 0x3bd5, 0x3ae5, 0x329a, 0x342c, 0x2c42, 0x35c1, 0x2616, 0x3ad4, 0x38c6, 0x38b6, 0x3b0d, 0x38dd, 0x2e8d, 0x3891, 0x2f1c, 0x3b9d, 0x3a8f, +0x30e4, 0x2c4f, 0x2fb6, 0x31da, 0x3784, 0x3043, 0x2d5c, 0x3bc0, 0x3998, 0x3b84, 0x387f, 0x3b93, 0x3898, 0x337c, 0x32b4, 0x28c3, 0x334f, 0x389c, 0x3865, 0x360b, 0x3a70, 0x3201, 0x324c, 0x3583, 0x381a, 0x3a58, 0x33e9, 0x3b02, 0x3093, 0x33c0, 0x375c, 0x305d, 0x1f9a, 0x38e4, 0x3bc7, 0x35bb, 0x2d39, 0x3299, 0x3753, 0x3b37, 0x3af5, 0x36d7, 0x3324, 0x3716, 0x3b60, 0x3202, 0x3949, 0x3b79, 0x36c3, 0x3901, 0x39f5, 0x2b55, 0x3996, 0x38e1, 0x3836, 0x3b5a, 0x3790, 0x39f6, 0x3532, 0x37ac, 0x2bc5, 0x3948, 0x3b8f, 0x37b8, 0x3999, 0x3413, 0x3a8f, 0x2b74, 0x2839, 0x3870, 0x369f, 0x38b9, 0x3819, 0x3aef, 0x37f9, 0x368b, 0x3bf4, 0x30a6, 0x2e58, 0x3b6e, 0x3b59, 0x3a5d, 0x2e63, 0x2a40, 0x34b3, 0x377d, 0x3991, 0x3542, 0x3300, 0x396d, 0x3bf4, 0x371b, 0x2c09, 0x3020, 0x3a1e, 0x32c5, +0x3b59, 0x3bb5, 0x3a14, 0x384f, 0x3534, 0x3bb6, 0x3aef, 0x3b51, 0x357e, 0x3760, 0x3395, 0x3046, 0x3977, 0x380e, 0x3b85, 0x39ed, 0x3038, 0x2bdc, 0x3aec, 0x3aa6, 0x3ace, 0x38b5, 0x308b, 0x39e2, 0x3271, 0x3b31, 0x3693, 0x397e, 0x39a9, 0x396f, 0x3021, 0x3b12, 0x350e, 0x38ea, 0x38ef, 0x3aae, 0x37b3, 0x2e83, 0x32f6, 0x3818, 0x3702, 0x332d, 0x3bfc, 0x3b15, 0x3ae6, 0x337f, 0x29f9, 0x3ba8, 0x38b1, 0x381a, 0x3bd6, 0x3a40, 0x3027, 0x3b8b, 0x38b2, 0x35d1, 0x39b7, 0x3adf, 0x2b70, 0x1a44, 0x3470, 0x3b21, 0x3774, 0x3b7a, 0x38b8, 0x304d, 0x3bd6, 0x2a2a, 0x3a95, 0x34bc, 0x2835, 0x3b03, 0x35bd, 0x3bc2, 0x30fe, 0x3a5d, 0x3829, 0x34be, 0x3398, 0x32f7, 0x3b1c, 0x34a5, 0x3511, 0x3802, 0x383e, 0x3176, 0x3241, 0x359f, 0x36f9, 0x380a, 0x310c, 0x3b1f, 0x375d, 0x365a, 0x35d0, 0x3302, +0x3459, 0x35e1, 0x3514, 0x3ba6, 0x381e, 0x30d8, 0x320a, 0x3b8a, 0x39b8, 0x3873, 0x3982, 0x3ae7, 0x3a5b, 0x380d, 0x3bf6, 0x396d, 0x3126, 0x1cf5, 0x37f7, 0x3b43, 0x37a7, 0x3b91, 0x357b, 0x216d, 0x3336, 0x3885, 0x26d5, 0x38f1, 0x369e, 0x3b62, 0x30d5, 0x3a41, 0x31b1, 0x3b8d, 0x3983, 0x2cfb, 0x3857, 0x3239, 0x2ecf, 0x2e22, 0x3889, 0x31a0, 0x3432, 0x3957, 0x2aad, 0x3b93, 0x38e5, 0x3a32, 0x3bf6, 0x2a9e, 0x3a57, 0x34b8, 0x2e9b, 0x3a83, 0x3b86, 0x314e, 0x3738, 0x3954, 0x36bb, 0x3a82, 0x361e, 0x380a, 0x3bc7, 0x39ea, 0x37f9, 0x3a9f, 0x38fa, 0x3916, 0x3b87, 0x389c, 0x375f, 0x30b5, 0x381d, 0x39f9, 0x3969, 0x3b91, 0x31b3, 0x3968, 0x3baf, 0x3395, 0x38a5, 0x3ae2, 0x3b91, 0x3a31, 0x3a75, 0x3667, 0x346f, 0x31b1, 0x3921, 0x38a1, 0x3981, 0x3ab5, 0x34c5, 0x324b, 0x3b5f, 0x3b66, +0x35e0, 0x3b4e, 0x34ef, 0x1c7e, 0x3b6e, 0x3724, 0x3858, 0x381c, 0x3bc1, 0x3475, 0x3a93, 0x38a0, 0x3489, 0x3951, 0x3918, 0x304f, 0x314f, 0x3ad7, 0x382d, 0x38ef, 0x3818, 0x33a3, 0x392d, 0x3079, 0x39b8, 0x3b2f, 0x3ad7, 0x3a4a, 0x383b, 0x295b, 0x380a, 0x3895, 0x3a0a, 0x3b28, 0x36ef, 0x3617, 0x3668, 0x3b95, 0x38e3, 0x3b69, 0x3448, 0x38bc, 0x34b1, 0x34d7, 0x3146, 0x269b, 0x2b3b, 0x371a, 0x3a3e, 0x3a71, 0x3791, 0x3b89, 0x3a76, 0x3bfd, 0x354e, 0x3bc8, 0x3937, 0x302e, 0x38e3, 0x2c2c, 0x20e6, 0x3880, 0x2c5e, 0x2506, 0x38b6, 0x3b42, 0x3be1, 0x3ab4, 0x3a0d, 0x3573, 0x31a6, 0x366c, 0x37c2, 0x34b2, 0x3856, 0x3bd4, 0x3150, 0x2adb, 0x3779, 0x3694, 0x2a1e, 0x3763, 0x39cd, 0x39a5, 0x3470, 0x348e, 0x399f, 0x3326, 0x2d96, 0x363a, 0x3610, 0x38fd, 0x24f0, 0x34bd, 0x32c9, 0x3869, +0x361b, 0x3307, 0x3bfc, 0x36bd, 0x2784, 0x37f1, 0x3a2e, 0x3579, 0x35ab, 0x39c9, 0x39b4, 0x2e9a, 0x3869, 0x24bf, 0x2c45, 0x3a0b, 0x369d, 0x391f, 0x3789, 0x2d9b, 0x37ac, 0x3829, 0x3177, 0x3286, 0x312b, 0x3153, 0x2ff3, 0x375c, 0x2afb, 0x290a, 0x3aaf, 0x3b17, 0x39f6, 0x3a53, 0x3888, 0x3ab6, 0x37e8, 0x3442, 0x3523, 0x3a72, 0x2d0a, 0x3551, 0x3923, 0x3538, 0x3abc, 0x3a29, 0x358a, 0x2ec5, 0x3a32, 0x3371, 0x3438, 0x301a, 0x3877, 0x36f7, 0x39e0, 0x372f, 0x3b39, 0x399c, 0x38b5, 0x3488, 0x392b, 0x312e, 0x3bd2, 0x3b34, 0x35d7, 0x3193, 0x38a5, 0x3a75, 0x3768, 0x3660, 0x3add, 0x38c6, 0x3944, 0x353a, 0x398e, 0x3627, 0x361a, 0x32ca, 0x38dd, 0x3293, 0x37f1, 0x2b97, 0x2465, 0x3a2e, 0x39c5, 0x3bef, 0x3879, 0x3a91, 0x3873, 0x39ae, 0x3994, 0x35aa, 0x3648, 0x376e, 0x371e, 0x3a8c, +0x359b, 0x381d, 0x3506, 0x382e, 0x39b0, 0x2f4c, 0x3022, 0x3af3, 0x3828, 0x3407, 0x3244, 0x306d, 0x3c00, 0x3019, 0x39b3, 0x357e, 0x36bd, 0x3979, 0x369a, 0x2025, 0x3ab5, 0x3509, 0x3969, 0x3b5f, 0x38b3, 0x3a55, 0x3899, 0x3a8d, 0x348a, 0x3010, 0x3b00, 0x374c, 0x37e7, 0x35f2, 0x36bc, 0x31ec, 0x3b49, 0x3960, 0x27a1, 0x3984, 0x3824, 0x3a95, 0x39e4, 0x3901, 0x34a8, 0x354a, 0x3929, 0x38ef, 0x399c, 0x381a, 0x34ea, 0x247b, 0x3113, 0x37ff, 0x3923, 0x3a12, 0x398a, 0x3135, 0x374c, 0x345b, 0x3aae, 0x33ad, 0x3834, 0x3426, 0x32a3, 0x3854, 0x31cd, 0x3a78, 0x32ea, 0x288e, 0x38a9, 0x2d3a, 0x31ce, 0x2ed6, 0x393d, 0x197a, 0x3880, 0x39cd, 0x3884, 0x3af0, 0x312d, 0x3711, 0x32be, 0x3193, 0x323d, 0x3222, 0x28b9, 0x3bcc, 0x3626, 0x3836, 0x36bf, 0x3393, 0x32d3, 0x39f3, 0x3b91, 0x3719, +0x38ac, 0x1036, 0x3759, 0x3547, 0x365e, 0x3a68, 0x37eb, 0x353b, 0x3931, 0x294d, 0x35c8, 0x3aad, 0x387c, 0x3ac5, 0x3a08, 0x3a0d, 0x34b8, 0x3747, 0x3a10, 0x3908, 0x3825, 0x3509, 0x379f, 0x2ebe, 0x3a30, 0x353f, 0x3ab6, 0x35d3, 0x3ae3, 0x39a0, 0x272d, 0x2da5, 0x3a07, 0x323e, 0x3865, 0x3700, 0x2c37, 0x2fb3, 0x36e3, 0x279c, 0x364d, 0x38b9, 0x39b5, 0x35d8, 0x376b, 0x37f2, 0x3421, 0x3a83, 0x3562, 0x2cad, 0x382f, 0x3703, 0x38bf, 0x3afc, 0x3800, 0x3793, 0x3ae7, 0x39f6, 0x2d8f, 0x365d, 0x380f, 0x39cf, 0x3609, 0x2da9, 0x2cc7, 0x361c, 0x3682, 0x2762, 0x3611, 0x3954, 0x21e5, 0x29bd, 0x3b94, 0x32e9, 0x36fc, 0x3b3c, 0x3bec, 0x3bde, 0x35b2, 0x3640, 0x3824, 0x2dba, 0x35da, 0x3853, 0x3b62, 0x3b56, 0x373f, 0x324d, 0x395f, 0x2a6b, 0x3b59, 0x392f, 0x3953, 0x3bbe, 0x3a44, 0x38fc, +0x38aa, 0x3987, 0x24c1, 0x3a51, 0x3b03, 0x3770, 0x381d, 0x3847, 0x394a, 0x35fe, 0x3b59, 0x34d4, 0x380f, 0x3985, 0x2719, 0x3811, 0x3a63, 0x387d, 0x370b, 0x36e2, 0x38f4, 0x3af2, 0x364c, 0x30e7, 0x3816, 0x2afe, 0x339b, 0x380d, 0x304e, 0x3b55, 0x3a4e, 0x2ebb, 0x377a, 0x396d, 0x31bf, 0x3914, 0x372b, 0x38a5, 0x39a9, 0x24f1, 0x39ad, 0x348a, 0x3b26, 0x3ab0, 0x35f3, 0x38ac, 0x34a5, 0x39b2, 0x3a88, 0x364d, 0x36a3, 0x33eb, 0x39f7, 0x3ad7, 0x37c1, 0x3805, 0x357a, 0x3949, 0x28ee, 0x3b2e, 0x3ba7, 0x381c, 0x35bf, 0x323a, 0x39dd, 0x3b40, 0x3908, 0x32c0, 0x3a12, 0x3419, 0x388e, 0x3890, 0x3b59, 0x2ea4, 0x363b, 0x3790, 0x3a00, 0x3b36, 0x2a03, 0x3875, 0x3932, 0x3513, 0x3755, 0x2d73, 0x19b7, 0x352b, 0x309e, 0x2842, 0x38cc, 0x38a0, 0x3423, 0x380e, 0x3b76, 0x39ad, 0x3a11, 0x3a5b, +0x3bd8, 0x3b5c, 0x30ee, 0x3b97, 0x32ee, 0x3a5d, 0x3bfb, 0x3706, 0x2e45, 0x2f4f, 0x3281, 0x39ec, 0x3705, 0x369c, 0x3022, 0x3b27, 0x3a91, 0x3a6d, 0x3438, 0x3461, 0x3846, 0x394f, 0x3772, 0x36f3, 0x34d2, 0x39ee, 0x3578, 0x3959, 0x3282, 0x1b2c, 0x39be, 0x37f0, 0x3909, 0x34aa, 0x3ad6, 0x3ad8, 0x392b, 0x39b5, 0x3391, 0x3aa3, 0x3854, 0x3a72, 0x31bc, 0x23fa, 0x331a, 0x38aa, 0x3a73, 0x2a74, 0x3956, 0x30fd, 0x36bd, 0x312d, 0x38b3, 0x3b26, 0x1e7f, 0x310a, 0x235b, 0x367b, 0x383e, 0x3b57, 0x39b0, 0x3785, 0x2ddc, 0x38de, 0x2c79, 0x386b, 0x3ace, 0x32e5, 0x2c3a, 0x3bc5, 0x3a95, 0x317b, 0x3a54, 0x3ba1, 0x38ff, 0x3b54, 0x39dd, 0x344c, 0x38d0, 0x3984, 0x32d7, 0x35c3, 0x319e, 0x3881, 0x3b80, 0x3923, 0x396f, 0x343d, 0x378e, 0x39e0, 0x3434, 0x38ab, 0x3a55, 0x3905, 0x2a86, 0x3aa6, +0x2c3b, 0x33da, 0x2eb0, 0x3aa4, 0x2871, 0x31a0, 0x35ba, 0x35ed, 0x3a48, 0x3968, 0x35f8, 0x2810, 0x3ab8, 0x395a, 0x369e, 0x3664, 0x3bef, 0x30b9, 0x33f3, 0x366d, 0x3961, 0x377d, 0x3367, 0x3aa2, 0x39de, 0x3bdc, 0x37f3, 0x3618, 0x394c, 0x39c6, 0x3867, 0x34c3, 0x358b, 0x3256, 0x3aac, 0x3623, 0x39ee, 0x3723, 0x3b2a, 0x3a63, 0x3855, 0x38a1, 0x2cb1, 0x3b80, 0x38d6, 0x3045, 0x3bc3, 0x3bdf, 0x378b, 0x3af4, 0x2411, 0x3863, 0x3869, 0x353b, 0x24cc, 0x396a, 0x3a09, 0x3aab, 0x32cd, 0x3970, 0x3178, 0x3a61, 0x2faa, 0x3a82, 0x3487, 0x3af5, 0x36ee, 0x39f0, 0x2a25, 0x3006, 0x3bc0, 0x3151, 0x31b0, 0x36e6, 0x351c, 0x2a55, 0x3846, 0x38b7, 0x37e3, 0x3a7c, 0x293b, 0x327d, 0x3680, 0x390a, 0x3ad5, 0x2e0c, 0x3bb9, 0x1ddf, 0x35fa, 0x3995, 0x380c, 0x3923, 0x3a4f, 0x3ad5, 0x3a80, 0x3113, +0x324a, 0x39c6, 0x353b, 0x2d16, 0x346a, 0x321f, 0x3703, 0x2f6c, 0x2c37, 0x3ada, 0x3be4, 0x3b3e, 0x3aac, 0x3a7f, 0x36d4, 0x3606, 0x3343, 0x393a, 0x382b, 0x3424, 0x38d4, 0x39ed, 0x3013, 0x31ff, 0x3794, 0x3b1c, 0x3919, 0x3bb5, 0x3769, 0x39a1, 0x3be5, 0x3b1a, 0x35fd, 0x3ba8, 0x2af5, 0x38ea, 0x3b19, 0x3814, 0x39ea, 0x3b1e, 0x37c0, 0x34f3, 0x395a, 0x38b6, 0x392a, 0x38a5, 0x3121, 0x2d9b, 0x3799, 0x304c, 0x349d, 0x3153, 0x398a, 0x3a70, 0x3a3d, 0x34bd, 0x39d7, 0x37b6, 0x3817, 0x34a8, 0x3ae2, 0x350d, 0x3ad0, 0x3a0e, 0x3496, 0x3b73, 0x3879, 0x3841, 0x3316, 0x3671, 0x36a4, 0x30bf, 0x3a5e, 0x3594, 0x3bde, 0x3b55, 0x3982, 0x395b, 0x364c, 0x3a6c, 0x32b0, 0x39cd, 0x3900, 0x38dc, 0x390a, 0x2d48, 0x376e, 0x3473, 0x2c65, 0x3934, 0x30cd, 0x3518, 0x3ba4, 0x3423, 0x2f57, 0x3682, +0x3979, 0x37b1, 0x3926, 0x343b, 0x360a, 0x234e, 0x3895, 0x3a09, 0x3810, 0x39d4, 0x3529, 0x3a28, 0x331a, 0x385f, 0x2576, 0x3973, 0x3a0e, 0x33b0, 0x21da, 0x3925, 0x32c8, 0x2fbe, 0x32e7, 0x3b38, 0x3a9a, 0x2ab2, 0x320d, 0x3be9, 0x3720, 0x351d, 0x311b, 0x38f2, 0x3952, 0x3985, 0x3b4b, 0x3634, 0x38af, 0x398b, 0x278f, 0x3460, 0x2f0d, 0x28e1, 0x3412, 0x3978, 0x372c, 0x3a02, 0x2e72, 0x10dc, 0x36c6, 0x3883, 0x3b5a, 0x38e8, 0x3b97, 0x394e, 0x2d07, 0x39b1, 0x3754, 0x2c54, 0x3577, 0x3ab3, 0x3a2a, 0x376a, 0x39b4, 0x396a, 0x3222, 0x396c, 0x39dc, 0x34d5, 0x3903, 0x3841, 0x3912, 0x3bdb, 0x3ba8, 0x364c, 0x39b0, 0x38a9, 0x3acd, 0x3015, 0x368d, 0x3b46, 0x351a, 0x38e2, 0x36f2, 0x37c7, 0x3bdb, 0x3b60, 0x3ba0, 0x3bc3, 0x363f, 0x28c1, 0x2add, 0x3aaa, 0x397b, 0x390f, 0x2f8f, 0x3836, +0x380f, 0x35e9, 0x35ee, 0x3386, 0x388f, 0x3bca, 0x3782, 0x37f2, 0x308e, 0x3a28, 0x3738, 0x31f6, 0x36a4, 0x39eb, 0x2b1f, 0x3ba6, 0x3322, 0x3ad6, 0x386f, 0x3b19, 0x3aa5, 0x2dd8, 0x3a6a, 0x380b, 0x39e3, 0x3225, 0x3bb2, 0x39e9, 0x30e5, 0x39df, 0x3ae8, 0x3075, 0x3025, 0x2f80, 0x30c1, 0x3854, 0x3914, 0x24e1, 0x3b4c, 0x32f6, 0x2e0e, 0x38a8, 0x3572, 0x2e9b, 0x38c3, 0x31f1, 0x3357, 0x3770, 0x3575, 0x317f, 0x345d, 0x3162, 0x38cd, 0x3111, 0x3543, 0x36c2, 0x36d6, 0x3754, 0x3b6e, 0x3900, 0x3996, 0x38b5, 0x352e, 0x3a32, 0x3881, 0x2487, 0x3795, 0x3814, 0x38f9, 0x388b, 0x366d, 0x3b8a, 0x3751, 0x3a1b, 0x380d, 0x39da, 0x3a56, 0x306c, 0x3295, 0x3992, 0x345c, 0x3a88, 0x370a, 0x357e, 0x31bc, 0x3af0, 0x2f33, 0x2c05, 0x3255, 0x595, 0x3acd, 0x3615, 0x26d4, 0x31b8, 0x3860, 0x3839, +0x30a4, 0x2aed, 0x381b, 0x3438, 0x3519, 0x3a7d, 0x39e4, 0x3704, 0x376f, 0x31d2, 0x3643, 0x29d2, 0x3101, 0x34cc, 0x39c1, 0x333f, 0x3a92, 0x2b34, 0x2d97, 0x334d, 0x3b85, 0x3b74, 0x37f2, 0x38e0, 0x3092, 0x34d3, 0x38af, 0x3489, 0x365c, 0x3bab, 0x3abc, 0x3b90, 0x3251, 0x3397, 0x399d, 0x32a2, 0x3545, 0x29ac, 0x3405, 0x37dd, 0x3899, 0x312c, 0x3500, 0x3983, 0x3bd4, 0x3bfc, 0x33a7, 0x2df1, 0x2c94, 0x374e, 0x351c, 0x3a18, 0x3984, 0x3b46, 0x2d2c, 0x2997, 0x365e, 0x3461, 0x3654, 0x2530, 0x3945, 0x1e1e, 0x3374, 0x2fb7, 0x31de, 0x3bff, 0x387b, 0x3701, 0x284f, 0x3b59, 0x3a7d, 0x3866, 0x3958, 0x3a6c, 0x358a, 0x3132, 0x35be, 0x3819, 0x386a, 0x369d, 0x3b3b, 0x3549, 0x3b06, 0x3173, 0x31f2, 0x39fb, 0x35a6, 0x3525, 0x3737, 0x3abb, 0x3b5e, 0x3122, 0x39e5, 0x3538, 0x3817, 0x3727, +0x3979, 0x39fe, 0x3487, 0x3a8e, 0x3407, 0x3140, 0x3afa, 0x39b7, 0x374e, 0x3b66, 0x3b0f, 0x39c9, 0x3266, 0x34dc, 0x396a, 0x38db, 0x35bd, 0x31c8, 0x37ed, 0x3667, 0x357e, 0x3518, 0x3139, 0x3bd5, 0x3157, 0x3960, 0x39d2, 0x3a38, 0x366c, 0x3876, 0x39b9, 0x2cf0, 0x3825, 0x3a80, 0x3bbf, 0x3a2d, 0x2fd3, 0x35e2, 0x35c6, 0x3a07, 0x368f, 0x391e, 0x3be7, 0x39be, 0x3533, 0x39c7, 0x3137, 0x2d6e, 0x3905, 0x3b95, 0x38f8, 0x39f5, 0x3bc1, 0x38a7, 0x38e5, 0x2c58, 0x343c, 0x3656, 0x2c1c, 0x3b1d, 0x39c9, 0x3801, 0x39c1, 0x3bed, 0x26be, 0x362a, 0x3655, 0x31b4, 0x2ad7, 0x3810, 0x3afd, 0x1edc, 0x35e8, 0x2d9f, 0x32fb, 0x316e, 0x38ed, 0x3839, 0x390b, 0x3b97, 0x38e2, 0x3746, 0x3b3b, 0x3b03, 0x395e, 0x353e, 0x375a, 0x3824, 0x25bf, 0x357f, 0x31a9, 0x3aa5, 0x35d6, 0x2a95, 0x1b91, 0x318c, +0x3650, 0x38de, 0x32bf, 0x287b, 0x305d, 0x393e, 0x3bb2, 0x352d, 0x2593, 0x386f, 0x3814, 0x38bd, 0x3532, 0x3084, 0x2880, 0x3bdb, 0x37da, 0x3073, 0x3850, 0x3026, 0x337f, 0x3b64, 0x37e5, 0x33ad, 0x3624, 0x319f, 0x36d7, 0x3939, 0x3553, 0x359d, 0x392d, 0x385f, 0x394f, 0x3aca, 0x34b8, 0x3138, 0x367a, 0x38a4, 0x3a8e, 0x369e, 0x34ef, 0x3b01, 0x3ad8, 0x3875, 0x3bd5, 0x39c4, 0x3b56, 0x394d, 0x38ba, 0x3a48, 0x3ade, 0x3bd6, 0x395f, 0x3737, 0x2dee, 0x3891, 0x35ed, 0x39b2, 0x2fe6, 0x3130, 0x346e, 0x3886, 0x2fb6, 0x3183, 0x3ae1, 0x3301, 0x38f9, 0x3470, 0x3701, 0x3845, 0x327d, 0x33b3, 0x3b06, 0x358e, 0x35eb, 0x38a2, 0x34d1, 0x317c, 0x3b0f, 0x395e, 0x36dc, 0x3511, 0x3a8b, 0x3997, 0x380b, 0x38cb, 0x3b3c, 0x3b54, 0x3330, 0x33d7, 0x357d, 0x3439, 0x2bd4, 0x3678, 0x3891, 0x39cc, +0x3bdb, 0x3af1, 0x3828, 0x3a2b, 0x39b6, 0x36f5, 0x374a, 0x3752, 0x3b11, 0x3306, 0x3bac, 0x3799, 0x39fe, 0x38f5, 0x3219, 0x36df, 0x3ade, 0x3ab0, 0x2fa1, 0x3472, 0x3a33, 0x34d9, 0x390e, 0x37c0, 0x2d6b, 0x38e1, 0x3bdc, 0x3887, 0x3644, 0x319b, 0x32a7, 0x2876, 0x337a, 0x3b38, 0x3904, 0x354b, 0x24b5, 0x1699, 0x3b55, 0x39b7, 0x278d, 0x3784, 0x388d, 0x389f, 0x34ac, 0x30bc, 0x3180, 0x37e5, 0x3462, 0x3641, 0x363a, 0x3805, 0x2fa2, 0x260f, 0x3a51, 0x38c4, 0x30e4, 0x3836, 0x3478, 0x3a31, 0x36ae, 0x3294, 0x3b82, 0x3321, 0x3877, 0x3209, 0x38ad, 0x31af, 0x35b4, 0x28af, 0x3699, 0x3490, 0x3974, 0x3272, 0x391c, 0x3864, 0x31fe, 0x3780, 0x39d9, 0x3607, 0x35a1, 0x339e, 0x3047, 0x33c0, 0x3506, 0x2f45, 0x3b6e, 0x3875, 0x383b, 0x3b4b, 0x3859, 0x35c7, 0x2afe, 0x34f1, 0x363f, 0x2ccc, +0x2888, 0x3101, 0x397a, 0x3715, 0x35b1, 0x369b, 0x3a0c, 0x3839, 0x3514, 0x3189, 0x3be6, 0x3214, 0x3b29, 0x312e, 0x3879, 0x33a8, 0x3a6f, 0x3998, 0x3959, 0x3b41, 0x348b, 0x3acb, 0x391f, 0x39b5, 0x353b, 0x3513, 0x395b, 0x3a72, 0x329c, 0x3a2e, 0x2c1b, 0x376e, 0x3857, 0x35ce, 0x34d3, 0x3952, 0x3b6f, 0x3978, 0x3942, 0x3741, 0x35a2, 0x3201, 0x3806, 0x397a, 0x393f, 0x2f4e, 0x3a07, 0x3b5b, 0x33aa, 0x3686, 0x394b, 0x3b64, 0x3a53, 0x385a, 0x390a, 0x3965, 0x34b6, 0x2f08, 0x39b3, 0x3808, 0x3631, 0x35af, 0x3628, 0x31a2, 0x3b7f, 0x3a04, 0x2951, 0x3a91, 0x39a9, 0x3877, 0x3acc, 0x3aff, 0x3bae, 0x2aa4, 0x3bbe, 0x3b0c, 0x3462, 0x3842, 0x3902, 0x3a55, 0x30e8, 0x3520, 0x30bd, 0x3147, 0x3ba1, 0x3945, 0x37b9, 0x30b4, 0x3573, 0x3b4f, 0x3a1b, 0x3a4a, 0x2d52, 0x345c, 0x366c, 0x3451, +0x34b3, 0x2d91, 0x3564, 0x3803, 0x3b06, 0x3bf5, 0x36b0, 0x356e, 0x341d, 0x39fe, 0x3b9e, 0x2d69, 0x3329, 0x3b30, 0x300d, 0x34e8, 0x3823, 0x3ab8, 0x38ce, 0x3b3c, 0x2983, 0x3680, 0x2841, 0x39ed, 0x393e, 0x30cc, 0x3828, 0x3af3, 0x2d8e, 0x381c, 0x382b, 0x3b29, 0x3b58, 0x380a, 0x2c56, 0x36b0, 0x3b53, 0x2f0b, 0x357b, 0x38de, 0x374e, 0x3aef, 0x3a95, 0x3a7a, 0x3a23, 0x2f2b, 0x3903, 0x3b97, 0x39e3, 0x2e50, 0x35fd, 0x3bf5, 0x3ae9, 0x3bb6, 0x3ab7, 0x391f, 0x326f, 0x3264, 0x3453, 0x37b3, 0x2d1b, 0x3a55, 0x3921, 0x36d7, 0x2b01, 0x388e, 0x3969, 0x2f04, 0x31b9, 0x3bd2, 0x3a16, 0x362a, 0x31d7, 0x3ae1, 0x3735, 0x2e5f, 0x3b56, 0x38a8, 0x3b30, 0x3a77, 0x35e2, 0x3aa6, 0x3222, 0x38f3, 0x399b, 0x330b, 0x350f, 0x2b19, 0x3b45, 0x38b4, 0x3ba8, 0x3a8f, 0x3abe, 0x2760, 0x341e, 0x323d, +0x2eab, 0x3514, 0x3b83, 0x39bd, 0x331e, 0x2bfc, 0x389d, 0x381c, 0x36b5, 0x35e9, 0x392e, 0x2b7a, 0x2fcf, 0x3523, 0x3b37, 0x3129, 0x3a56, 0x3861, 0x3b75, 0x38cd, 0x3604, 0x3286, 0x3ac4, 0x3926, 0x3495, 0x3bfc, 0x351b, 0x3696, 0x34e1, 0x2f4e, 0x26e3, 0x39ce, 0x34db, 0x2e38, 0x393c, 0x371c, 0x3843, 0x3a1b, 0x272b, 0x3a27, 0x376c, 0x393f, 0x39cc, 0x39be, 0x39f7, 0x2c76, 0x3bd3, 0x3a3b, 0x3970, 0x3ab5, 0x3915, 0x35c3, 0x36d0, 0x3957, 0x3aa5, 0x25d6, 0x3b79, 0x2217, 0x39c7, 0x3b15, 0x3aa1, 0x3901, 0x378e, 0x3ada, 0x3a6f, 0x384d, 0x372d, 0x39d9, 0x3819, 0x37e8, 0x3527, 0x30ee, 0x3867, 0x3229, 0x3126, 0x3290, 0x3a62, 0x3b2f, 0x32f3, 0x39e0, 0x36e6, 0x3981, 0x305a, 0x2fd0, 0x3724, 0x3822, 0x3359, 0x3869, 0x3bcc, 0x37f1, 0x357c, 0x39df, 0x2e31, 0x3b10, 0x3601, 0x37b1, +0x3aa3, 0x385a, 0x392b, 0x3909, 0x3774, 0x3aab, 0x38a2, 0x3801, 0x2882, 0x38a7, 0x3621, 0x373e, 0x34b4, 0x2e13, 0x3999, 0x381c, 0x369f, 0x2633, 0x3acd, 0x386d, 0x3b94, 0x32a0, 0x1bdc, 0x3873, 0x3249, 0x3692, 0x3be9, 0x325a, 0x32c2, 0x3ad9, 0x1de3, 0x308f, 0x3971, 0x34e6, 0x212b, 0x3bd3, 0x3790, 0x3814, 0x3346, 0x3358, 0x3115, 0x3914, 0x35c7, 0x3287, 0x3b0b, 0x388f, 0x35ac, 0x3002, 0x3a5e, 0x2ede, 0x38cd, 0x374f, 0x3b4c, 0x3578, 0x394c, 0x3951, 0x353c, 0x2e59, 0x3877, 0x31f5, 0x3912, 0x394b, 0x37e7, 0x3667, 0x38c9, 0x3641, 0x343c, 0x37ee, 0x3aa8, 0x3440, 0x34d3, 0x394b, 0x301f, 0x3a76, 0x387e, 0x3a7d, 0x347e, 0x21c8, 0x397c, 0x301a, 0x3a2d, 0x3710, 0x399a, 0x359b, 0x3756, 0x3679, 0x37eb, 0x38e6, 0x2a71, 0x35f9, 0x37eb, 0x3afc, 0x370d, 0x3bce, 0x3884, 0x3211, +0x3a18, 0x3a44, 0x2fcd, 0x3b65, 0x3788, 0x2a46, 0x322a, 0x3538, 0x3bc2, 0x33f4, 0x3932, 0x3835, 0x2fa9, 0x3b95, 0x3756, 0x399d, 0x36b6, 0x3186, 0x389d, 0x346c, 0x3abb, 0x3be4, 0x3919, 0x3993, 0x2ffc, 0x39db, 0x3bce, 0x3b0e, 0x336e, 0x36af, 0x3192, 0x38b7, 0x37ba, 0x3ae4, 0x3116, 0x2c45, 0x3494, 0x3aea, 0x302c, 0x3816, 0x3686, 0x34f2, 0x2fa4, 0x3aa1, 0x222f, 0x370f, 0x341a, 0x3aae, 0x380d, 0x3863, 0x36ca, 0x3a60, 0x3695, 0x387d, 0x391c, 0x2c8b, 0x2d94, 0x369e, 0x399e, 0x36fd, 0x38fc, 0x3b6c, 0x36a8, 0x3a73, 0x33fb, 0x36d0, 0x3720, 0x36d7, 0x37be, 0x2a8f, 0x3180, 0x3ad3, 0x2a1f, 0x3737, 0x3920, 0x2b67, 0x3abf, 0x395e, 0x322b, 0x3ace, 0x39b1, 0x3bdf, 0x2e0b, 0x3018, 0x3278, 0x393a, 0x3a8c, 0x39d0, 0x39cd, 0x308f, 0x3776, 0x38b7, 0x3527, 0x388b, 0x3901, 0x3b8b, +0x237d, 0x38f9, 0x3431, 0x3b1f, 0x3a12, 0x33ac, 0x3a3d, 0x3943, 0x348d, 0x363f, 0x3a2a, 0x2420, 0x3081, 0x3815, 0x382e, 0x38e5, 0x3238, 0x284e, 0x2ec3, 0x3af5, 0x3191, 0x32d6, 0x31c8, 0x39bc, 0x3a2a, 0x340d, 0x3bd9, 0x33dc, 0x3066, 0x39df, 0x30e2, 0x350a, 0x37fc, 0x341d, 0x3828, 0x3a1b, 0x3010, 0x2992, 0x32fd, 0x3bb3, 0x368c, 0x2af2, 0x3af4, 0x3a8f, 0x3793, 0x3620, 0x3b85, 0x3557, 0x316b, 0x288d, 0x3408, 0x3ae8, 0x3af0, 0x3420, 0x3bbd, 0x3a80, 0x309a, 0x3a5d, 0x3a57, 0x3987, 0x3a47, 0x377f, 0x3a01, 0x3a72, 0x3b37, 0x3594, 0x3bfd, 0x36ae, 0x3b99, 0x3bd4, 0x3920, 0x3b8d, 0x37ae, 0x3a46, 0x3184, 0x38ba, 0x1ff8, 0x3b9c, 0x3b68, 0x3621, 0x37f4, 0x2fb7, 0x3010, 0x3b58, 0x33d3, 0x3bbb, 0x291f, 0x3945, 0x3be1, 0x30c6, 0x3bc3, 0x35c6, 0x3bdf, 0x2a15, 0x2e3f, 0x2b1a, +0x3847, 0x3671, 0x34cf, 0x35e0, 0x3b80, 0x34e1, 0x3b3b, 0x305a, 0x327f, 0x3a9e, 0x3803, 0x2a3a, 0x3969, 0x3765, 0x3891, 0x3acc, 0x397d, 0x3549, 0x356e, 0x34c8, 0x2632, 0x30ca, 0x36ba, 0x3a56, 0x37ca, 0x344d, 0x39bc, 0x32f3, 0x3be2, 0x3b24, 0x353f, 0x3ab8, 0x373e, 0x3906, 0x318e, 0x3993, 0x27e3, 0x255c, 0x3afa, 0x33a3, 0x3819, 0x333b, 0x3bb6, 0x3179, 0x3414, 0x35d6, 0x30b1, 0x386b, 0x3b8e, 0x3942, 0x386c, 0x3b39, 0x32d2, 0x37f6, 0x2503, 0x3b14, 0x385c, 0x3a12, 0x3895, 0x39d7, 0x377f, 0x2c2d, 0x3066, 0x3855, 0x35a4, 0x3aeb, 0x3a9c, 0x35a4, 0x2eb7, 0x3b6b, 0x3bfd, 0x38fa, 0x1fd4, 0x3583, 0x3bc9, 0x35d2, 0x3913, 0x34b8, 0x271f, 0x3453, 0x3833, 0x3bb2, 0x3a7f, 0x1c15, 0x1b01, 0x39f1, 0x3bdd, 0x3988, 0x3ac8, 0x397f, 0x3bb4, 0x36d5, 0x37bf, 0x34b4, 0x30f5, 0x39c7, +0x391e, 0x3b4f, 0x2eb2, 0x3b31, 0x3073, 0x39d0, 0x2cd1, 0x2f3b, 0x36cc, 0x3739, 0x222d, 0x3a71, 0x3ba4, 0x3b60, 0x2bb5, 0x3885, 0x3b90, 0x2cea, 0x3ab6, 0x37b0, 0x3813, 0x31a7, 0x3545, 0x3392, 0x39f4, 0x34ae, 0x36c2, 0x3177, 0x3902, 0x39b5, 0x2f98, 0x36c1, 0x36d5, 0x32e8, 0x39ed, 0x30c3, 0x39a8, 0x30f1, 0x39a1, 0x36ec, 0x3bea, 0x34b1, 0x3260, 0x343e, 0x3929, 0x31d9, 0x33d7, 0x3bee, 0x379c, 0x2395, 0x3983, 0x38ce, 0x3297, 0x35fc, 0x3776, 0x3b0a, 0x3ae2, 0x3991, 0x2c03, 0x3712, 0x3b68, 0x2e82, 0x2e43, 0x3705, 0x39d1, 0x3b64, 0x2ff0, 0x3a4a, 0x2f9e, 0x2f32, 0x3ba6, 0x3559, 0x3aa5, 0x39cb, 0x3671, 0x39d2, 0x3aaf, 0x3385, 0x3a0a, 0x3a03, 0x396d, 0x391d, 0x2685, 0x3802, 0x39d5, 0x2af3, 0x39e4, 0x3ace, 0x313a, 0x2d88, 0x2999, 0x39a4, 0x3302, 0x390b, 0x3847, 0x3b87, +0x3813, 0x30fa, 0x3986, 0x3bc2, 0x3bc2, 0x3bf1, 0x3251, 0x391a, 0x2445, 0x3884, 0x3649, 0x320f, 0x305c, 0x3418, 0x337f, 0x38fa, 0x39ac, 0x3a4d, 0x346d, 0x33ca, 0x32da, 0x335c, 0x37ff, 0x389e, 0x39b3, 0x364e, 0x328a, 0x3690, 0x36cb, 0x3126, 0x374a, 0x3ba4, 0x37fe, 0x3233, 0x2afb, 0x3335, 0x3095, 0x38c9, 0x3a8b, 0x39c4, 0x3505, 0x32f2, 0x3a53, 0x388e, 0x34b9, 0x39d7, 0x34e7, 0x3a78, 0x3b19, 0x34e0, 0x35e9, 0x375f, 0x3a89, 0x38c6, 0x3764, 0x383c, 0x266a, 0x3672, 0x31fc, 0x3b60, 0x3a99, 0x3917, 0x3b92, 0x3759, 0x3acd, 0x39ad, 0x31fe, 0x3bcc, 0x3bec, 0x31a6, 0x33fa, 0x36f4, 0x2295, 0x3b2b, 0x3625, 0x3882, 0x3a88, 0x369a, 0x3b81, 0x399f, 0x34a9, 0x381c, 0x2db8, 0x365d, 0x3741, 0x382c, 0x3b87, 0x3b1c, 0x300b, 0x2ef6, 0x2e99, 0x3975, 0x24d7, 0x387e, 0x344a, 0x3503, +0x3b1e, 0x3900, 0x2bf3, 0x3170, 0x39bd, 0x3a2e, 0x37ad, 0x38b6, 0x38bf, 0x31c3, 0x3ae8, 0x368d, 0x36ac, 0x35e2, 0x3497, 0x2dec, 0x39c9, 0x389b, 0x3156, 0x3a86, 0x3892, 0x3976, 0x394b, 0x3b82, 0x3907, 0x392e, 0x2538, 0x3871, 0x348e, 0x3a0d, 0x347f, 0x316b, 0x378b, 0x3aa4, 0x38f5, 0x3595, 0x2d85, 0x2d42, 0x3aca, 0x3688, 0x3085, 0x3694, 0x399c, 0x3b6c, 0x3bb8, 0x3bac, 0x3a69, 0x35bf, 0x316c, 0x335f, 0x2e66, 0x2f7e, 0x360e, 0x3b28, 0x3254, 0x347f, 0x3687, 0x3018, 0x37b7, 0x3ba9, 0x3814, 0x3bd2, 0x22ed, 0x3735, 0x39a7, 0x3a17, 0x3a9c, 0x3264, 0x35f9, 0x38e9, 0x3610, 0x3ad7, 0x39ab, 0x304c, 0x3734, 0x3a58, 0x30be, 0x394f, 0x2f1c, 0x33be, 0x3818, 0x38b7, 0x3845, 0x3a9d, 0x3721, 0x324f, 0x34e0, 0x3a0e, 0x3b77, 0x3b14, 0x3884, 0x3a5a, 0x3aed, 0x3349, 0x39d0, 0x3ba6, +0x3345, 0x3494, 0x396e, 0x33e0, 0x3a01, 0x26be, 0x3a27, 0x3a66, 0x3a48, 0x3bc4, 0x3a0e, 0x39ac, 0x3758, 0x32d8, 0x3570, 0x2add, 0x2f32, 0x3856, 0x3814, 0x39a6, 0x3418, 0x3919, 0x2faf, 0x3a0f, 0x3816, 0x3366, 0x388c, 0x3471, 0x2993, 0x395d, 0x32cc, 0x3b00, 0x3a82, 0x3b5a, 0x2edd, 0x30f7, 0x3bba, 0x2a65, 0x368e, 0x311e, 0x35ff, 0x3734, 0x2931, 0x34db, 0x3734, 0x3b8a, 0x2441, 0x33bc, 0x3aed, 0x3793, 0x31ee, 0x37fe, 0x31f4, 0x36f4, 0x390e, 0x3b97, 0x3963, 0x3510, 0x30f9, 0x3a6e, 0x35d3, 0x34ba, 0x3a05, 0x39de, 0x3646, 0x3b0f, 0x3b2e, 0x3698, 0x3bbd, 0x3306, 0x3990, 0x3984, 0x2e28, 0x3880, 0x3b82, 0x350c, 0x3a3e, 0x3b00, 0x3735, 0x3944, 0x39a1, 0x34ea, 0x3812, 0x3a9c, 0x2270, 0x3b9b, 0x383d, 0x34b9, 0x33ff, 0x314b, 0x35e9, 0x3a76, 0x3b80, 0x3922, 0x3767, 0x3119, +0x39f0, 0x391b, 0x37d6, 0x37d9, 0x3b86, 0x3923, 0x2434, 0x3be9, 0x3918, 0x36cb, 0x3b4a, 0x296e, 0x3bcf, 0x38d5, 0x3342, 0x3482, 0x3995, 0x3958, 0x33a0, 0x38a7, 0x3be6, 0x3b68, 0x3168, 0x398d, 0x3ab4, 0x325a, 0x3bd2, 0x3915, 0x1a9f, 0x356c, 0x303d, 0x3b50, 0x32c5, 0x3a1c, 0x3a0e, 0x392c, 0x3b24, 0x3b8b, 0x322b, 0x2661, 0x3bba, 0x35e3, 0x3be0, 0x38f5, 0x39ab, 0x316b, 0x3b05, 0x3a05, 0x3969, 0x370c, 0x3851, 0x3a7c, 0x3801, 0x3b8b, 0x38db, 0x3aef, 0x354a, 0x2845, 0x3ac7, 0x3547, 0x35c2, 0x3564, 0x30d5, 0x3bf1, 0x301b, 0x3434, 0x3583, 0x3a9c, 0x1c52, 0x2e1e, 0x3522, 0x3993, 0x3bfe, 0x3524, 0x370c, 0x33ed, 0x3981, 0x2bfe, 0x2ca4, 0x3b56, 0x3b03, 0x3450, 0x3768, 0x3baf, 0x3760, 0x3a8f, 0x2d31, 0x2c4e, 0x3167, 0x35e6, 0x396d, 0x3b31, 0x309b, 0x347e, 0x39ea, 0x3bb8, +0x3164, 0x2bac, 0x368e, 0x3bd4, 0x3427, 0x38b4, 0x3a4d, 0x39ba, 0x3a0d, 0x301a, 0x2fec, 0x2ce1, 0x3985, 0x2acc, 0x386d, 0x3808, 0x346b, 0x383b, 0x3b1b, 0x3406, 0x3bc5, 0x3b86, 0x3860, 0x35ae, 0x2e1c, 0x35d4, 0x350b, 0x35f5, 0x2a73, 0x3a6b, 0x364b, 0x3526, 0x278a, 0x375e, 0x299f, 0x39b0, 0x394e, 0x345d, 0x3760, 0x31ba, 0x3400, 0x3566, 0x3b36, 0x3a48, 0x34e3, 0x3b24, 0x347c, 0x32a3, 0x2da7, 0x364a, 0x33de, 0x33c5, 0x324f, 0x38f7, 0x3bfb, 0x3a94, 0x3312, 0x3924, 0x3831, 0x2ee6, 0x3b4a, 0x338b, 0x2bb3, 0x33ee, 0x3bf2, 0x3aa3, 0x376d, 0x1512, 0x37b5, 0x2e44, 0x39ad, 0x3b2f, 0x39a7, 0x3aa1, 0x2e75, 0x3955, 0x3663, 0x39a6, 0x296f, 0x34c6, 0x2ef3, 0x2fe3, 0x3647, 0x3bc2, 0x3b91, 0x376a, 0x39e5, 0x3466, 0x38b9, 0x3a80, 0x3861, 0x36ca, 0x3a2c, 0x3145, 0x3102, 0x33bc, +0x2ba4, 0x2eb9, 0x39ab, 0x33cf, 0x2c9f, 0x372c, 0x3973, 0x2ff9, 0x36a5, 0x3641, 0x3b93, 0x3bc9, 0x3ba9, 0x36cd, 0x3a8d, 0x3bd2, 0x399e, 0x34ed, 0x3b4c, 0x2c2b, 0x38f7, 0x3824, 0x2edd, 0x32fc, 0x30cc, 0x2b90, 0x2628, 0x3a65, 0x39de, 0x3800, 0x3a8c, 0x3a88, 0x1e84, 0x3890, 0x33b4, 0x37e8, 0x3aab, 0x342c, 0x3697, 0x379a, 0x2472, 0x38bb, 0x38d0, 0x3a8e, 0x393a, 0x34e7, 0x3baf, 0x37ce, 0x28c7, 0x32a5, 0x3a68, 0x3925, 0x3a49, 0x3944, 0x3976, 0x3866, 0x363a, 0x35e2, 0x296d, 0x29f3, 0x39a8, 0x3831, 0x3682, 0x3898, 0x2bca, 0x13aa, 0x37b8, 0x35fe, 0x3a5d, 0x3362, 0x34bd, 0x38c1, 0x3b66, 0x3801, 0x391b, 0x307b, 0x3936, 0x3ae2, 0x3899, 0x390a, 0x384b, 0x3af4, 0x3ae2, 0x35d2, 0x271a, 0x37ad, 0x3102, 0x38e5, 0x30b8, 0x2419, 0x30ee, 0x3437, 0x39b9, 0x3a44, 0x374e, 0x3551, +0x39a4, 0x35f6, 0x385e, 0x3864, 0x3977, 0x3159, 0x3625, 0x379a, 0x3b94, 0x3a2a, 0x2ea6, 0x38a1, 0x3ad9, 0x31cd, 0x3be9, 0x34ac, 0x38be, 0x3925, 0x36ae, 0x3bd3, 0x2e3b, 0x39d0, 0x3a89, 0x336b, 0x2d09, 0x3533, 0x382c, 0x2f0c, 0x385e, 0x3ba1, 0x3436, 0x39e4, 0x3a6b, 0x39b1, 0x3622, 0x334e, 0x38cd, 0x3740, 0x30d6, 0x391d, 0x3a70, 0x3390, 0x2c34, 0x3bf0, 0x3566, 0x3864, 0x2aaa, 0x2df7, 0x20cf, 0x3621, 0x39f8, 0x3ab0, 0x3a54, 0x39fb, 0x389e, 0x3724, 0x3755, 0x369d, 0x3944, 0x2843, 0x13b6, 0x316f, 0x3860, 0x3848, 0x3816, 0x315b, 0x3b72, 0x35e9, 0x396a, 0x399c, 0x3a7b, 0x315c, 0x3667, 0x37ae, 0x39f0, 0x386f, 0x3875, 0x3b25, 0x38ba, 0x3a14, 0x3abc, 0x36e1, 0x352d, 0x3904, 0x385d, 0x3b24, 0x32c9, 0x3afb, 0x3bd8, 0x3520, 0x145c, 0x378f, 0x3821, 0x2801, 0x3496, 0x3b18, +0x3716, 0x3bfe, 0x3591, 0x3b7d, 0x3a85, 0x3af1, 0x3abf, 0x38ae, 0x30cb, 0x3457, 0x3b9f, 0x32bc, 0x39e0, 0x33d6, 0x3acd, 0x38e4, 0x39bf, 0x39ce, 0x2c1a, 0x36c2, 0x3a5e, 0x3ba5, 0x3a2d, 0x3629, 0x3b8d, 0x36ce, 0x3997, 0x384a, 0x3acb, 0x36d2, 0x3b60, 0x3a38, 0x347d, 0x35b3, 0x286f, 0x2bf4, 0x3795, 0x2d33, 0x20c0, 0x3857, 0x3aac, 0x3766, 0x38c1, 0x3628, 0x2e3a, 0x3a93, 0x3ac6, 0x35ca, 0x3366, 0x3b05, 0x3a4c, 0x3be7, 0x37a8, 0x38c4, 0x36ae, 0x39b0, 0x34e1, 0x2dfc, 0x3b41, 0x385a, 0x306b, 0x3bfa, 0x39ab, 0x3ade, 0x3a80, 0x3574, 0x397e, 0x3792, 0x342e, 0x373c, 0x3918, 0x3275, 0x3827, 0x397e, 0x3889, 0x35b5, 0x30d7, 0x1d25, 0x30b4, 0x3580, 0x2ae1, 0x2bba, 0x38ea, 0x3a03, 0x3b44, 0x3539, 0x2de4, 0x3b56, 0x3949, 0x2792, 0x39ac, 0x31af, 0x3514, 0x3ac1, 0x34a6, 0x2c44, +0x330d, 0x36f5, 0x374e, 0x3bf7, 0x33ea, 0x3770, 0x2733, 0x30ef, 0x3b72, 0x2d2a, 0x392d, 0x36fb, 0x3a83, 0x34a1, 0x334c, 0x30b3, 0x2987, 0x3584, 0x3ab0, 0x3a9d, 0x2b67, 0x3a56, 0x35ba, 0x325f, 0x39b7, 0x2abd, 0x3a40, 0x38bf, 0x37b9, 0x3a67, 0x204a, 0x328d, 0x3403, 0x3adc, 0x2c0f, 0x3923, 0x39bc, 0x366a, 0x3082, 0x39d1, 0x3ad5, 0x3a4f, 0x3207, 0x3631, 0x381e, 0x3961, 0x358d, 0x3664, 0x3363, 0x3bf9, 0x372c, 0x3a5d, 0x3878, 0x335a, 0x35a2, 0x3532, 0x3809, 0x2ecb, 0x32e3, 0x3996, 0x36cf, 0x362f, 0x38d5, 0x39c7, 0x2ccd, 0x37c7, 0x2ba2, 0x3b59, 0x26c9, 0x38fa, 0x3b8a, 0x3bed, 0x3868, 0x3942, 0x393a, 0x3999, 0x363f, 0x3375, 0x3bc6, 0x3098, 0x384c, 0x381e, 0x39c6, 0x39be, 0x3204, 0x2023, 0x3acf, 0x3b55, 0x3850, 0x3ae7, 0x37ac, 0x388a, 0x3b11, 0x36e1, 0x2f03, 0x3a6d, +0x2f6f, 0x39b2, 0x308a, 0x3253, 0x3976, 0x38bd, 0x3bfa, 0x3b6d, 0x3816, 0x287b, 0x3588, 0x392b, 0x30bc, 0x3b83, 0x3a9b, 0x300d, 0x3ba4, 0x2d26, 0x372a, 0x3914, 0x36ee, 0x2f72, 0x3ad3, 0x323b, 0x32b6, 0x3a71, 0x3a92, 0x2416, 0x3ab2, 0x39c8, 0x313c, 0x3a5e, 0x3ab9, 0x30ed, 0x3ac3, 0x3339, 0x291e, 0x3847, 0x3bb9, 0x3b7c, 0x3369, 0x3aa1, 0x3b93, 0x380a, 0x33fd, 0x3545, 0x399a, 0x25a4, 0x36c6, 0x37fe, 0x3ae8, 0x3ad7, 0x3be3, 0x3589, 0x370e, 0x3299, 0x3358, 0x3960, 0x36e2, 0x3af9, 0x3676, 0x3b75, 0x39df, 0x32bf, 0x387f, 0x2764, 0x39ae, 0x32b4, 0x36bf, 0x3161, 0x3a40, 0x3bcb, 0x3447, 0x3a0d, 0x2baa, 0x38c7, 0x333a, 0x3a4b, 0x394f, 0x381d, 0x38bd, 0x2b6b, 0x388d, 0x3a37, 0x384e, 0x3b19, 0x31dc, 0x3236, 0x33aa, 0x32f2, 0x32b0, 0x3b95, 0x3bd2, 0x1db0, 0x36d4, 0x38ae, +0x3161, 0x30b6, 0x3784, 0x3701, 0x387e, 0x36ef, 0x2ad7, 0x3ab4, 0x3897, 0x397d, 0x355d, 0x34e3, 0x351d, 0x3b95, 0x3b12, 0x1c76, 0x3b71, 0x3b9a, 0x37e5, 0x3bc6, 0x2576, 0x33c0, 0x398e, 0x39d1, 0x37b9, 0x3a9f, 0x234c, 0x3979, 0x36a2, 0x3aad, 0x355c, 0x3479, 0x2d97, 0x2d54, 0x2ecb, 0x3481, 0x38ba, 0x32e2, 0x380c, 0x2f81, 0x3b87, 0x3a01, 0x35b6, 0x35f6, 0x389a, 0x341e, 0x3180, 0x35d7, 0x31af, 0x3983, 0x38ec, 0x298c, 0x3bea, 0x38d3, 0x2ba1, 0x32b9, 0x2f3e, 0x3b84, 0x3003, 0x34ff, 0x3bd9, 0x323b, 0x375a, 0x3462, 0x3824, 0x303d, 0x381a, 0x385e, 0x3bfd, 0x3993, 0x39c6, 0x3a0f, 0x3b8c, 0x3353, 0x3295, 0x39b6, 0x28dd, 0x3a8e, 0x3043, 0x2d8e, 0x3b67, 0x3504, 0x3b32, 0x30b6, 0x3a4c, 0x3239, 0x3443, 0x3031, 0x3afb, 0x3b11, 0x30f8, 0x3299, 0x3be6, 0x3476, 0x3a49, 0x3441, +0x31e8, 0x3992, 0x3509, 0x3313, 0x3635, 0x35cc, 0x3963, 0x3545, 0x3ba3, 0x2443, 0x35c5, 0x3bb8, 0x3a2e, 0x3642, 0x3ae7, 0x3832, 0x333e, 0x34d3, 0x37f5, 0x38a6, 0x39a9, 0x3850, 0x3ad9, 0x2a1f, 0x271c, 0x3878, 0x3586, 0x362d, 0x3922, 0x3ab8, 0x310e, 0x369c, 0x2efb, 0x3bde, 0x38c2, 0x3af3, 0x393a, 0x3401, 0x315e, 0x305f, 0x38f5, 0x39bf, 0x36c6, 0x3544, 0x3213, 0x386f, 0x378f, 0x3214, 0x3900, 0x35a4, 0x3bbd, 0x2f98, 0x3a9d, 0x3b3d, 0x395a, 0x3932, 0x3515, 0x2ef8, 0x3af6, 0x2d82, 0x2845, 0x39f8, 0x2b6d, 0x38eb, 0x3300, 0x2e15, 0x3788, 0x3962, 0x2e88, 0x356d, 0x3a36, 0x3bd3, 0x2485, 0x38fc, 0x3843, 0x38c0, 0x1351, 0x3aea, 0x2c6d, 0x3ad0, 0x337d, 0x394e, 0x3823, 0x34f9, 0x342e, 0x3203, 0x3b9a, 0x3ade, 0x357a, 0x3734, 0x398f, 0x3302, 0x3b51, 0x3607, 0x35c9, 0x2be4, +0x38d7, 0x3450, 0x359a, 0x2a01, 0x3a33, 0x3536, 0x3a66, 0x360d, 0x3b2f, 0x3a0f, 0x3a84, 0x36b5, 0x3920, 0x389e, 0x3622, 0x3175, 0x370e, 0x32d1, 0x3a64, 0x3a2d, 0x3afc, 0x36f1, 0x3b64, 0x3268, 0x36b8, 0x3b0e, 0x34f4, 0x3b5d, 0x38ac, 0x3153, 0x3128, 0x3670, 0x3b70, 0x39be, 0x3989, 0x35ae, 0x333a, 0x2bfb, 0x3ad9, 0x344c, 0x3ba9, 0x3b6c, 0x335e, 0x3a80, 0x2451, 0x3823, 0x385e, 0x30e0, 0x38e3, 0x30ad, 0x36a0, 0x3a1e, 0x37db, 0x193d, 0x3675, 0x3110, 0x394c, 0x2f96, 0x2c1f, 0x3982, 0x388d, 0x2ccc, 0x343e, 0x3a8c, 0x3710, 0x2da8, 0x384f, 0x35d2, 0x3174, 0x3267, 0x349c, 0x345a, 0x37f3, 0x380a, 0x3814, 0x380c, 0x3acc, 0x325e, 0x3738, 0x32ef, 0x3223, 0x3488, 0x36d9, 0x394d, 0x3450, 0x378c, 0x328e, 0x332a, 0x3b8e, 0x381d, 0x314a, 0x3530, 0x3378, 0x3a88, 0x3bf8, 0x30e7, +0x3860, 0x38b5, 0x3bc1, 0x2da6, 0x3b83, 0x3a43, 0x372a, 0x392c, 0x3404, 0x3449, 0x3972, 0x3bc5, 0x2dc0, 0x39dc, 0x354c, 0x24f9, 0x3617, 0x3bc1, 0x3960, 0x3762, 0x3962, 0x39e3, 0x3afe, 0x3a21, 0x3834, 0x3856, 0x3ad1, 0x36a8, 0x3b2b, 0x36eb, 0x2f4f, 0x3801, 0x3b42, 0x3af3, 0x380f, 0x326c, 0x351a, 0x3914, 0x38b2, 0x3a84, 0x369e, 0x3925, 0x3213, 0x3b80, 0x3763, 0x3af9, 0x2e55, 0x30ba, 0x3a12, 0x347f, 0x39d7, 0x3a46, 0x2ec5, 0x3b6a, 0x3b7f, 0x3a3f, 0x2eea, 0x38db, 0x33be, 0x356a, 0x3a21, 0x3623, 0x3822, 0x3a63, 0x34ef, 0x373b, 0x2d60, 0x3428, 0x3121, 0x3b9a, 0x3948, 0x3687, 0x382b, 0x2144, 0x3254, 0x387f, 0x3512, 0x357c, 0x3891, 0x2e61, 0x368a, 0x33a8, 0x3b26, 0x2e33, 0x282a, 0x2c3a, 0x365c, 0x35c7, 0x3b90, 0x3866, 0x3a86, 0x35cc, 0x3689, 0x3212, 0x3a1e, 0x3555, +0x2f7e, 0x3b2e, 0x3204, 0x3b95, 0x38c5, 0x394d, 0x3908, 0x3b28, 0x388d, 0x36c6, 0x3ac3, 0x3bc6, 0x305d, 0x3a21, 0x3477, 0x39c1, 0x34e7, 0x3ba1, 0x3850, 0x3276, 0x3513, 0x3576, 0x3407, 0x37e4, 0x2dde, 0x3113, 0x389b, 0x34cc, 0x3736, 0x34de, 0x3348, 0x3942, 0x3044, 0x365f, 0x3a40, 0x3a33, 0x34fb, 0x389a, 0x3983, 0x382e, 0x381d, 0x3293, 0x34a2, 0x330d, 0x31f1, 0x3b44, 0x3861, 0x35e1, 0x331a, 0x3839, 0x39d0, 0x3b0a, 0x34d0, 0x37dd, 0x332b, 0x38f4, 0x3ad1, 0x25b4, 0x3bee, 0x31ee, 0x31fc, 0x382d, 0x3889, 0x352b, 0x38a5, 0x21c1, 0x2e21, 0x3425, 0x2d5e, 0x28f2, 0x3ad7, 0x3945, 0x3282, 0x3844, 0x39d9, 0x2e75, 0x3adb, 0x3703, 0x3966, 0x383a, 0x2d09, 0x3008, 0x3b9f, 0x3b0f, 0x304a, 0x373e, 0x3a84, 0x3739, 0x39cd, 0x3678, 0x3a04, 0x2fe1, 0x3572, 0x3853, 0x38f6, 0x3abc, +0x3b09, 0x3b5a, 0x3be6, 0x2424, 0x345a, 0x3992, 0x3738, 0x35a8, 0x3379, 0x3949, 0x3a93, 0x37d9, 0x2fe8, 0x3a1c, 0x322a, 0x26b8, 0x3af8, 0x327a, 0x34f0, 0x3632, 0x3485, 0x385f, 0x3b33, 0x3396, 0x3ad8, 0x379a, 0x384e, 0x35e6, 0x331e, 0x3b6d, 0x34ca, 0x3997, 0x39c8, 0x3a97, 0x387d, 0x1854, 0x35d1, 0x3bd9, 0x389e, 0x365a, 0x396e, 0x2f7d, 0x3910, 0x388f, 0x39e6, 0x3a8e, 0x3a9e, 0x39b2, 0x2ff2, 0x39fc, 0x346f, 0x39bf, 0x3711, 0x3951, 0x3856, 0x39ea, 0x318e, 0x3778, 0x393c, 0x37ba, 0x3781, 0x3ad5, 0x3638, 0x3b18, 0x286d, 0x314b, 0x3b67, 0x3186, 0x37c4, 0x39f7, 0x376f, 0x3b12, 0x3882, 0x36b6, 0x3a84, 0x329a, 0x24a9, 0x38e3, 0x35ca, 0x3b5b, 0x333f, 0x3994, 0x3369, 0x385b, 0x3871, 0x3aac, 0x3649, 0x3953, 0x31d4, 0x3b45, 0x3808, 0x36e0, 0x35c6, 0x2bd8, 0x39b7, 0x3bd9, +0x3aa5, 0x340f, 0x3721, 0x35e0, 0x3a8f, 0x3ac1, 0x3b3f, 0x1e07, 0x342a, 0x36a2, 0x3830, 0x2dff, 0x35c4, 0x3441, 0x3ac6, 0x383f, 0x3bb1, 0x32d5, 0x3870, 0x3757, 0x36a5, 0x38c3, 0x3158, 0x377d, 0x363d, 0x2ede, 0x3698, 0x2f0b, 0x3860, 0x1a39, 0x39b4, 0x39c3, 0x35e2, 0x3529, 0x35e4, 0x38d3, 0x358a, 0x2cc9, 0x3665, 0x3479, 0x3917, 0x36f9, 0x34d3, 0x39f7, 0x3688, 0x3950, 0x36d5, 0x3a15, 0x35fd, 0x3556, 0x3751, 0x30b6, 0x3906, 0x3b32, 0x387f, 0x2d69, 0x3628, 0x3b4c, 0x3b17, 0x38ff, 0x3852, 0x38c4, 0x37e0, 0x368d, 0x38f6, 0x3885, 0x398e, 0x37dd, 0x3867, 0x35e7, 0x3bd1, 0x38a1, 0x3882, 0x2d3d, 0x3b21, 0x3443, 0x3381, 0x36df, 0x38ba, 0x3a7c, 0x3a03, 0x3881, 0x352b, 0x3914, 0x3b69, 0x3564, 0x3141, 0x3940, 0x327b, 0x390b, 0x3710, 0x3952, 0x3a3e, 0x3825, 0x3ae8, 0x39f8, +0x3950, 0x3a9d, 0x3a2c, 0x35d5, 0x34b7, 0x3a46, 0x3a47, 0x344e, 0x3a08, 0x3362, 0x3285, 0x33e8, 0x3618, 0x39fb, 0x2c3c, 0x39b0, 0x1336, 0x36bd, 0x358c, 0x3bc0, 0x354d, 0x38be, 0x3a08, 0x34e9, 0x3801, 0x3be9, 0x35fa, 0x3015, 0x26bc, 0x399e, 0x36d1, 0x3218, 0x3a92, 0x2ad4, 0x3114, 0x364e, 0x3aa5, 0x35cb, 0x354a, 0x2da0, 0x2fc1, 0x36a2, 0x2fde, 0x3b28, 0x367f, 0x32eb, 0x3b7e, 0x3912, 0x3894, 0x323f, 0x3807, 0x3971, 0x3b61, 0x2381, 0x3ac6, 0x3868, 0x3980, 0x3a49, 0x3183, 0x3657, 0x3851, 0x3956, 0x37be, 0x38ea, 0x38b3, 0x37e2, 0x38ca, 0x3b3b, 0x3543, 0x38af, 0x247b, 0x3716, 0x3b75, 0x3667, 0x3801, 0x2a16, 0x3b46, 0x2bb3, 0x3832, 0x3b8e, 0x3a02, 0x37e2, 0x38b7, 0x2a58, 0x3b4b, 0x3b3c, 0x3914, 0x27f4, 0x3512, 0x3934, 0x3a17, 0x3a1b, 0x3bab, 0x3ae0, 0x3ab8, 0x3454, +0x32bc, 0x35d5, 0x3b7f, 0x388c, 0x3740, 0x3290, 0x2d2a, 0x2bf5, 0x304b, 0x3a10, 0x388e, 0x2e4e, 0x3126, 0x3477, 0x386d, 0x3bc5, 0x3643, 0x3589, 0x3665, 0x39c5, 0x315d, 0x3375, 0x3b3d, 0x38bb, 0x320a, 0x371d, 0x3873, 0x31df, 0x3534, 0x3b7a, 0x3809, 0x3b1f, 0x3868, 0x35ec, 0x397c, 0x3535, 0x3be5, 0x3857, 0x3ae4, 0x338c, 0x3ace, 0x3931, 0x3bcc, 0x30d9, 0x3bb2, 0x38d5, 0x3840, 0x3aef, 0x385c, 0x3974, 0x3b1b, 0x369c, 0x3b54, 0x3074, 0x39bb, 0x3a1d, 0x2e7d, 0x34f9, 0x3a6c, 0x3505, 0x3ae2, 0x30df, 0x3ac9, 0x3460, 0x3517, 0x3b85, 0x3488, 0x3440, 0x3aab, 0x3089, 0x3879, 0x3343, 0x3395, 0x329f, 0x3753, 0x3a08, 0x388b, 0x3ac1, 0x3478, 0x33f5, 0x3a65, 0x343f, 0x307e, 0x38f3, 0x37a0, 0x3259, 0x3210, 0x385a, 0x3bff, 0x297f, 0x2e3b, 0x2e41, 0x3921, 0x3654, 0x34c2, 0x3bf6, +0x2dca, 0x391f, 0x399f, 0x2fae, 0x38c6, 0x2fea, 0x36a0, 0x31d7, 0x3a0a, 0x2adb, 0x31c7, 0x3bf1, 0x313c, 0x3a0f, 0x36d3, 0x3854, 0x355f, 0x3991, 0x3b44, 0x3b0c, 0x3aa8, 0x37f0, 0x38cf, 0x3394, 0x373a, 0x38ee, 0x3871, 0x3977, 0x29ef, 0x23f6, 0x3b79, 0x2430, 0x31ea, 0x2f51, 0x3b09, 0x39fa, 0x34c0, 0x2a71, 0x3186, 0x3869, 0x2c9d, 0x3995, 0x3a89, 0x3a6a, 0x308a, 0x32f2, 0x39e9, 0x3902, 0x3970, 0x3986, 0x3931, 0x3918, 0x36ab, 0x3a86, 0x38c2, 0x39f0, 0x2ca6, 0x3bac, 0x36b8, 0x34d2, 0x383e, 0x304a, 0x299b, 0x3172, 0x3b3b, 0x38e3, 0x39a0, 0x3b28, 0x3822, 0x3548, 0x35d3, 0x3a14, 0x282b, 0x39e4, 0x2d29, 0x3a68, 0x2dc2, 0x32c2, 0x3aa2, 0x3625, 0x3553, 0x3809, 0x3993, 0x3811, 0x3456, 0x2f37, 0x3210, 0x393f, 0x323c, 0x30eb, 0x361c, 0x3276, 0x3097, 0x34ee, 0x34f8, 0x31cd, +0x3ba8, 0x2a42, 0x31b2, 0x38e3, 0x3951, 0x29e1, 0x2e0a, 0x3a69, 0x2f3f, 0x3b90, 0x3634, 0x3b61, 0x35ef, 0x34c4, 0x386f, 0x2aae, 0x38a6, 0x1edc, 0x38f0, 0x37e7, 0x3ac3, 0x32fe, 0x3645, 0x31ef, 0x33e8, 0x3447, 0x3ad8, 0x3b4e, 0x193e, 0x2514, 0x36ad, 0x3b4c, 0x39d8, 0x3285, 0x31c9, 0x3a64, 0x2c2d, 0x3994, 0x302a, 0x3a31, 0x3adb, 0x2bfa, 0x3554, 0x399f, 0x32a0, 0x393b, 0x3831, 0x3a94, 0x2f96, 0x38bb, 0x3b49, 0x2168, 0x396c, 0x3425, 0x3b8d, 0x2634, 0x38fd, 0x3894, 0x3ac8, 0x3b82, 0x3891, 0x39a0, 0x3422, 0x36e1, 0x3727, 0x3802, 0x388e, 0x392d, 0x37ec, 0x340f, 0x2424, 0x3812, 0x3af6, 0x3352, 0x36e2, 0x385e, 0x3ba8, 0x38ca, 0x3986, 0x3b9e, 0x3319, 0x3be8, 0x389f, 0x29ea, 0x35c2, 0x394f, 0x33b7, 0x388b, 0x388d, 0x3bb5, 0x34f9, 0x35ff, 0x3842, 0x3181, 0x3889, 0x38ec, +0x34b9, 0x3818, 0x3af1, 0x35b7, 0x3462, 0x39bf, 0x3641, 0x367d, 0x3560, 0x2c3b, 0x3b63, 0x2cdc, 0x33be, 0x3a92, 0x2cf5, 0x3216, 0x315f, 0x39dc, 0x3b1a, 0x37e4, 0x3446, 0x37dc, 0x3934, 0x3835, 0x3916, 0x37d0, 0x384e, 0x2d75, 0x3268, 0x3570, 0x3506, 0x38e0, 0x38c0, 0x395f, 0x38bd, 0x3022, 0x3b3e, 0x393b, 0x3479, 0x3726, 0x3432, 0x3699, 0x38dc, 0x2def, 0x2ab6, 0x2fad, 0x3a35, 0x35b5, 0x30a8, 0x3968, 0x38ab, 0x3a6e, 0x346e, 0x3988, 0x3434, 0x35b6, 0x36dc, 0x2e2e, 0x2b5c, 0x3300, 0x32f9, 0x382a, 0x3bc2, 0x3b6f, 0x2ca0, 0x2d85, 0x397c, 0x38a1, 0x36e4, 0x37f0, 0x39ec, 0x30fb, 0x3bfb, 0x3a04, 0x301a, 0x3b8c, 0x39eb, 0x3a96, 0x39bc, 0x3921, 0x319b, 0x3805, 0x3b5f, 0x39ad, 0x316b, 0x3b91, 0x2c1d, 0x3b87, 0x35d3, 0x3b01, 0x36ad, 0x393f, 0x3674, 0x3603, 0x3af9, 0x2fa1, +0x3a49, 0x34d3, 0x3af0, 0x28b4, 0x3afb, 0x3684, 0x3640, 0x37ae, 0x38d3, 0x3916, 0x3699, 0x3b36, 0x38e7, 0x3ad9, 0x39af, 0x376a, 0x388f, 0x35c7, 0x3664, 0x3840, 0x3506, 0x3b62, 0x3347, 0x3a30, 0x347c, 0x3ae5, 0x3542, 0x35d6, 0x32f6, 0x38e3, 0x2091, 0x3a7f, 0x3b5a, 0x3610, 0x38c9, 0x348b, 0x37bf, 0x346a, 0x38a2, 0x3939, 0x3842, 0x3a03, 0x3afe, 0x1ec8, 0x3158, 0x3afc, 0x39e9, 0x3b79, 0x351a, 0x314e, 0x242c, 0x34b5, 0x3bc6, 0x25a0, 0x3b95, 0x29e3, 0x3517, 0x3bff, 0x3a4b, 0x3a79, 0x355f, 0x33cd, 0x35df, 0x3ab8, 0x39d4, 0x3afe, 0x35f7, 0x38aa, 0x2fc1, 0x3342, 0x394c, 0x3603, 0x3811, 0x3a0b, 0x34eb, 0x2ca7, 0x3192, 0x3a89, 0x396e, 0x3731, 0x3af0, 0x2cca, 0x3843, 0x36e3, 0x39f5, 0x2d99, 0x2a6b, 0x33bf, 0x2609, 0x32f0, 0x32ce, 0x35dd, 0x380d, 0x32e2, 0x3b6a, 0x3a8e, +0x2ced, 0x32da, 0x3a21, 0x367d, 0x36cd, 0x3631, 0x2b0d, 0x31fd, 0x3b89, 0x2e45, 0x3916, 0x362b, 0x3852, 0x2c73, 0x32a6, 0x3013, 0x396f, 0x3984, 0x3104, 0x3a93, 0x39de, 0x3807, 0x3464, 0x36bb, 0x36e7, 0x3aa3, 0x372a, 0x38ce, 0x3a85, 0x3bae, 0x27b1, 0x34c7, 0x37e5, 0x2be5, 0x3a8c, 0x2e62, 0x3b13, 0x2ee8, 0x3782, 0x3a40, 0x31b0, 0x37fd, 0x3759, 0x3382, 0x3bcc, 0x32fd, 0x3bdc, 0x39eb, 0x3a01, 0x380e, 0x31a6, 0x39f6, 0x38fc, 0x37c5, 0x3be0, 0x347a, 0x3524, 0x2da5, 0x23ed, 0x25e0, 0x3af4, 0x27f6, 0x39cd, 0x3575, 0x3827, 0x3b1d, 0x3bf3, 0x3bd8, 0x3697, 0x3b52, 0x2ec3, 0x33c0, 0x3b26, 0x3ab5, 0x34f6, 0x30f2, 0x38ff, 0x39ae, 0x3620, 0x32a6, 0x365a, 0x3a13, 0x2a9a, 0x28a9, 0x3198, 0x3819, 0x38bb, 0x3731, 0x3b3d, 0x37db, 0x3abb, 0x3be6, 0x34c7, 0x3709, 0x3959, 0x3556, +0x3b82, 0x36c8, 0x352e, 0x3a99, 0x3942, 0x37e9, 0x39c9, 0x3900, 0x123c, 0x3b9a, 0x3b46, 0x3a9a, 0x3a06, 0x36e3, 0x38bd, 0x3622, 0x396c, 0x3a7d, 0x361f, 0x3b83, 0x297b, 0x3a4b, 0x323f, 0x3b61, 0x3ac5, 0x24e9, 0x3138, 0x359a, 0x2931, 0x3b63, 0x3a8d, 0x3aa0, 0x384f, 0x3a36, 0x3641, 0x3af0, 0x3ada, 0x3526, 0x3a5c, 0x39cc, 0x3803, 0x3572, 0x3994, 0x3b9e, 0x3a64, 0x36ae, 0x37ec, 0x3ad2, 0x312b, 0x3434, 0x3b89, 0x38d1, 0x3309, 0x3573, 0x38e2, 0x2c51, 0x3b19, 0x3a0b, 0x3a49, 0x392a, 0x3ae7, 0x341f, 0x3701, 0x3577, 0x3a6b, 0x3864, 0x356f, 0x3a73, 0x3bdd, 0x39e1, 0x3397, 0x31c9, 0x3618, 0x3973, 0x3848, 0x2e85, 0x3adb, 0x30d0, 0x349e, 0x3121, 0x397e, 0x3ae2, 0x351f, 0x3137, 0x3903, 0x3b71, 0x3a3e, 0x3189, 0x3a1a, 0x39a5, 0x38b6, 0x35ee, 0x2c56, 0x3a09, 0x33a1, 0x294a, +0x382b, 0x39a6, 0x335a, 0x3687, 0x30cf, 0x38cc, 0x32d6, 0x2181, 0x3a52, 0x2cfb, 0x3991, 0x39bc, 0x3706, 0x3a02, 0x386e, 0x3b54, 0x3781, 0x381c, 0x38eb, 0x3b5d, 0x39c2, 0x38f2, 0x3b4c, 0x3bd7, 0x292a, 0x37c1, 0x3bfa, 0x29b6, 0x381e, 0x32ca, 0x3a70, 0x3a3a, 0x3ad7, 0x3042, 0x2ecb, 0x3bb6, 0x3703, 0x38fe, 0x3866, 0x3a69, 0x3bc7, 0x3b34, 0x2cfd, 0x2220, 0x3ba7, 0x3849, 0x39b3, 0x284b, 0x3a18, 0x39d9, 0x3aaf, 0x3809, 0x3be3, 0x3749, 0x2b7b, 0x382c, 0x356c, 0x37ac, 0x2a66, 0x3abb, 0x23d2, 0x3912, 0x3085, 0x2a21, 0x3b7a, 0x3616, 0x35f1, 0x3595, 0x3bd3, 0x356b, 0x3929, 0x3b99, 0x3a5f, 0x30f4, 0x3866, 0x3a8e, 0x2ca2, 0x3904, 0x3735, 0x373a, 0x3a5f, 0x3ba5, 0x2001, 0x39dc, 0x3a26, 0x3987, 0x3163, 0x3816, 0x2b55, 0x369c, 0x3aab, 0x3508, 0x3b86, 0x340d, 0x34d6, 0x3766, +0x3691, 0x3723, 0x2e9f, 0x38a2, 0x3a6a, 0x3645, 0x2e83, 0x2f93, 0x3947, 0x3744, 0x352b, 0x365c, 0x3a34, 0x3a63, 0x3bae, 0x3977, 0x281c, 0x377c, 0x3584, 0x3bf9, 0x2f97, 0x34c8, 0x3af7, 0x38e7, 0x3acf, 0x384d, 0x3bdd, 0x387d, 0x3a8f, 0x399e, 0x34e0, 0x3a84, 0x31b5, 0x291d, 0x394d, 0x3967, 0x3a1f, 0x378e, 0x3618, 0x386e, 0x345c, 0x3916, 0x353a, 0x3176, 0x396f, 0x2bc1, 0x3b5c, 0x3b8a, 0x2d3c, 0x354b, 0x2c50, 0x3539, 0x2c35, 0x320f, 0x3914, 0x2a96, 0x3bcf, 0x3a20, 0x3a5b, 0x372e, 0x35f5, 0x3992, 0x3b39, 0x39b8, 0x3aea, 0x3bb5, 0x3a65, 0x3884, 0x2b7a, 0x3b7d, 0x3455, 0x3039, 0x36b1, 0x31c8, 0x391b, 0x3942, 0x3b4b, 0x365c, 0x3a2c, 0x39b6, 0x3b02, 0x3901, 0x33b8, 0x3ad1, 0x2c3d, 0x3955, 0x3857, 0x33bb, 0x2ef2, 0x3446, 0x3917, 0x3ad2, 0x34be, 0x3939, 0x35ab, 0x370f, +0x32c0, 0x2fdc, 0x3b63, 0x2a85, 0x3a47, 0x34c2, 0x3651, 0x31c5, 0x2b72, 0x3b43, 0x3ba3, 0x2c85, 0x3958, 0x3bc2, 0x3818, 0x35d3, 0x3bec, 0x32c4, 0x301a, 0x351a, 0x3706, 0x348e, 0x2194, 0x3830, 0x324f, 0x3a6d, 0x3b87, 0x2a73, 0x3ba9, 0x3ad9, 0x39cd, 0x3af6, 0x1d41, 0x31e5, 0x3abb, 0x3184, 0x3911, 0x318e, 0x39a7, 0x3295, 0x39fd, 0x342a, 0x3822, 0x3be0, 0x3a97, 0x386d, 0x35cf, 0x39bd, 0x29b2, 0x320f, 0x2fe7, 0x2f1e, 0x2c19, 0x3054, 0x3907, 0x3a78, 0x2093, 0x3901, 0x2e53, 0x3981, 0x3713, 0x3b18, 0x3b76, 0x3bee, 0x39f2, 0x2c64, 0x3680, 0x3b35, 0x39db, 0x34a2, 0x3963, 0x3a3c, 0x3b52, 0x34a1, 0x3951, 0x3aad, 0x2870, 0x35fc, 0x3a47, 0x3955, 0x37e9, 0x36c2, 0x3a4c, 0x2bd8, 0x34ee, 0x3751, 0x3ae0, 0x3b51, 0x2861, 0x3391, 0x2fa9, 0x3837, 0x35cb, 0x304b, 0x3b0f, 0x358b, +0x2f61, 0x3096, 0x3a54, 0x3059, 0x39af, 0x3b95, 0x2c6d, 0x2faf, 0x38f6, 0x3427, 0x3af3, 0x343d, 0x3b5a, 0x341e, 0x32d7, 0x224f, 0x3af7, 0x3159, 0x346d, 0x3535, 0x34c2, 0x371f, 0x39d4, 0x380b, 0x310c, 0x206a, 0x3a65, 0x3976, 0x3af2, 0x39ab, 0x39df, 0x327f, 0x399c, 0x2d96, 0x38a4, 0x357c, 0x2f8f, 0x3046, 0x38ae, 0x3ac4, 0x38b8, 0x2c03, 0x34c0, 0x3171, 0x39c1, 0x3802, 0x366d, 0x341f, 0x3286, 0x36f0, 0x397f, 0x2176, 0x3aac, 0x3b7a, 0x3a3a, 0x3919, 0x3585, 0x2cc4, 0x39ed, 0x2833, 0x3b9e, 0x36e3, 0x3a31, 0x3a48, 0x38a8, 0x3401, 0x3b8e, 0x38a0, 0x3a07, 0x378d, 0x3512, 0x33a7, 0x3977, 0x3862, 0x357d, 0x3922, 0x371f, 0x318d, 0x3b57, 0x3667, 0x313b, 0x3bf3, 0x35e0, 0x3ae6, 0x3668, 0x2940, 0x2d29, 0x30f4, 0x3a66, 0x3b0d, 0x3b12, 0x35dd, 0x390b, 0x3990, 0x3011, 0x2b64, +0x334f, 0x3b09, 0x398f, 0x34e0, 0x28d3, 0x3385, 0x39e4, 0x357c, 0x3a45, 0x2df3, 0x2c61, 0x3569, 0x355e, 0x3b14, 0x3012, 0x1c32, 0x3a0e, 0x39d3, 0x20f2, 0x38f4, 0x398b, 0x3b9c, 0x374a, 0x3916, 0x3a5a, 0x3892, 0x3720, 0x38de, 0x3809, 0x3173, 0x38a4, 0x3698, 0x3815, 0x30a5, 0x3a18, 0x3534, 0x2e89, 0x3657, 0x2fc1, 0x39c5, 0x3b59, 0x337f, 0x383b, 0x3ba1, 0x2d4d, 0x2d7a, 0x3b8e, 0x39c9, 0x2b4a, 0x2d1b, 0x3af3, 0x375a, 0x360a, 0x3977, 0x398f, 0x3bb2, 0x358c, 0x369e, 0x390f, 0x35ed, 0x392c, 0x33d4, 0x3a6b, 0x3ade, 0x38b2, 0x3424, 0x2d4f, 0x3aeb, 0x3802, 0x33fa, 0x31c4, 0x35ef, 0x3b51, 0x2d27, 0x3912, 0x351a, 0x36ea, 0x3869, 0x2c73, 0x264b, 0x371d, 0x3a9e, 0x3159, 0x3a54, 0x3849, 0x394e, 0x3921, 0x3435, 0x38aa, 0x33ae, 0x3950, 0x3adf, 0x3b9b, 0x3a1d, 0x3706, 0x3b43, +0x3541, 0x3b8a, 0x3528, 0x39da, 0x36fa, 0x392e, 0x3195, 0x38e7, 0x392a, 0x366f, 0x308f, 0x29d5, 0x3be5, 0x345a, 0x35b5, 0x395b, 0x3a76, 0x3224, 0x1958, 0x39e1, 0x3b98, 0x3b80, 0x30a5, 0x3461, 0x3471, 0x365a, 0x3af0, 0x30ac, 0x38dd, 0x38ca, 0x2d58, 0x3bf4, 0x35bc, 0x3478, 0x235b, 0x3b92, 0x391f, 0x39e3, 0x3b11, 0x3afb, 0x2ea4, 0x2c61, 0x3756, 0x3821, 0x38d6, 0x3938, 0x3478, 0x3813, 0x3740, 0x31ea, 0x3b6d, 0x3be6, 0x2a58, 0x36c6, 0x31ee, 0x3642, 0x3b29, 0x37df, 0x337d, 0x336b, 0x3afa, 0x352b, 0x3aa6, 0x3898, 0x37cc, 0x33f2, 0x3b20, 0x3a61, 0x380e, 0x3b37, 0x38e6, 0x3b79, 0x365a, 0x387a, 0x24c7, 0x3301, 0x3b10, 0x3afb, 0x3819, 0x3aa3, 0x38cd, 0x384d, 0x3661, 0x383e, 0x3a34, 0x3b1a, 0x2d83, 0x36a8, 0x3b75, 0x3b0e, 0x363d, 0x3a67, 0x392e, 0x389c, 0x35a3, 0x2e39, +0x3ae7, 0x3849, 0x3bc7, 0x2a99, 0x31b2, 0x3535, 0x32dc, 0x2ab5, 0x3b34, 0x398c, 0x2b94, 0x36b5, 0x39fe, 0x376a, 0x39ee, 0x34f9, 0x31ce, 0x3968, 0x3809, 0x3261, 0x38f8, 0x3b62, 0x3807, 0x3992, 0x3b8e, 0x39e0, 0x3614, 0x3b23, 0x36d0, 0x38da, 0x3a8c, 0x3b55, 0x316c, 0x3b5d, 0x3531, 0x39a5, 0x24db, 0x293c, 0x3822, 0x38dc, 0x316f, 0x3750, 0x3601, 0x30bf, 0x3a74, 0x24af, 0x258b, 0x3bec, 0x293c, 0x3868, 0x360e, 0x310d, 0x36b3, 0x344c, 0x2cf0, 0x3476, 0x3a3a, 0x2e52, 0x3939, 0x3a69, 0x34df, 0x3a5b, 0x39c0, 0x347c, 0x371d, 0x391d, 0x3913, 0x306f, 0x3bfe, 0x380f, 0x3959, 0x39bd, 0x3619, 0x34e2, 0x36c6, 0x39bc, 0x3a2c, 0x3bc3, 0x3a29, 0x2c45, 0x3ac4, 0x3b46, 0x3a5c, 0x3be6, 0x2c2c, 0x3757, 0x39cb, 0x30f0, 0x38c8, 0x3154, 0x38b5, 0x3480, 0x3835, 0x3b8c, 0x311d, 0x3570, +0x38c4, 0x3400, 0x2d91, 0x3a09, 0x312a, 0x39e9, 0x3b4e, 0x320d, 0x372d, 0x33f0, 0x3b4c, 0x2253, 0x37dd, 0x39a8, 0x3a18, 0x3aeb, 0x3b0a, 0x35eb, 0x3a4c, 0x39ff, 0x3a97, 0x2b96, 0x37c0, 0x3169, 0x3727, 0x3859, 0x3874, 0x3a11, 0x356e, 0x39e4, 0x3849, 0x38ab, 0x292b, 0x38a8, 0x2e0b, 0x1e53, 0x3814, 0x367d, 0x3962, 0x39ff, 0x3a0e, 0x38a1, 0x3249, 0x2d7c, 0x31df, 0x3924, 0x3ae4, 0x3978, 0x38c9, 0x3808, 0x288b, 0x3004, 0x3983, 0x3427, 0x3aa2, 0x3bb9, 0x38bc, 0x380d, 0x3ba3, 0x3522, 0x3607, 0x38c1, 0x35d4, 0x3a19, 0x38d6, 0x3aef, 0x3682, 0x3b5c, 0x2de4, 0x35bb, 0x363b, 0x36df, 0x3803, 0x39e5, 0x2e9f, 0x3a36, 0x3a9c, 0x36dc, 0x3908, 0x3ada, 0x3978, 0x382c, 0x3ba7, 0x398e, 0x3800, 0x3ad7, 0x387e, 0x3429, 0x2d19, 0x3971, 0x37f1, 0x3af3, 0x3986, 0x3a07, 0x382f, 0x359b, +0x2f4d, 0x3a0f, 0x3890, 0x386e, 0x3229, 0x2fb8, 0x390a, 0x390e, 0x3b53, 0x3812, 0x2961, 0x3017, 0x39d5, 0x3958, 0x2d80, 0x2fad, 0x3730, 0x3853, 0x2882, 0x3bb9, 0x3939, 0x3bab, 0x2ffa, 0x28ff, 0x3a54, 0x38d5, 0x3456, 0x3bd4, 0x3a38, 0x30a8, 0x3a38, 0x32ab, 0x3788, 0x3a1d, 0x3bec, 0x325c, 0x3981, 0x3a5a, 0x2941, 0x3925, 0x353a, 0x360a, 0x38cf, 0x374d, 0x30a4, 0x2819, 0x3021, 0x3143, 0x3684, 0x3af2, 0x3a61, 0x3a31, 0x3625, 0x38a6, 0x3a5d, 0x3963, 0x3997, 0x391a, 0x3767, 0x3b35, 0x383c, 0x37bf, 0x3753, 0x357a, 0x3993, 0x382b, 0x3128, 0x3a93, 0x3b03, 0x38e2, 0x37e9, 0x3b05, 0x3789, 0x3be9, 0x3068, 0x36f4, 0x19c7, 0x3523, 0x28f3, 0x3746, 0x324c, 0x31cc, 0x377e, 0x35b4, 0x3127, 0x3a24, 0x351a, 0x3b16, 0x3801, 0x398d, 0x39a8, 0x3b6f, 0x3933, 0x3535, 0x30e3, 0x3b25, +0x353f, 0x306c, 0x3bd1, 0x380e, 0x3b05, 0x3859, 0x2e39, 0x37b4, 0x38fb, 0x392e, 0x32c0, 0x3adb, 0x29c4, 0x3b0e, 0x28a6, 0x341f, 0x371a, 0x39bc, 0x30a1, 0x3790, 0x3439, 0x3102, 0x3bcc, 0x2f3d, 0x39ad, 0x3b38, 0x390e, 0x391f, 0x39a7, 0x3099, 0x3a5b, 0x3894, 0x3674, 0x3948, 0x3895, 0x3458, 0x3bc6, 0x3a36, 0x381e, 0x3069, 0x39fc, 0x3a3f, 0x39f5, 0x3a9d, 0x3169, 0x39a9, 0x3b16, 0x362d, 0x3951, 0x3881, 0x3ac4, 0x2ecf, 0x3b79, 0x3abe, 0x3841, 0x2c1a, 0x3b7a, 0x3083, 0x3ad1, 0x3a90, 0x3974, 0x2e92, 0x3b5f, 0x3003, 0x39c1, 0x2ff2, 0x39dc, 0x3bbf, 0x3972, 0x3997, 0x3667, 0x3409, 0x3239, 0x3aaf, 0x358e, 0x33b8, 0x397a, 0x3b54, 0x399d, 0x351d, 0x35c8, 0x3362, 0x2964, 0x3102, 0x3bc4, 0x22b3, 0x3b29, 0x3925, 0x37f0, 0x23fc, 0x3bc8, 0x39f0, 0x30cd, 0x3569, 0x3a27, 0x3b0b, +0x392e, 0x38e0, 0x3436, 0x3aa6, 0x395a, 0x397e, 0x38f6, 0x3b45, 0x3050, 0x34b0, 0x3b1d, 0x3932, 0x3a3a, 0x3915, 0x3816, 0x3b23, 0x3342, 0x2c1e, 0x3bfa, 0x3978, 0x304c, 0x2cd7, 0x3a11, 0x37d8, 0x3ad2, 0x37cb, 0x3bf8, 0x37d3, 0x3589, 0x37aa, 0x399a, 0x3661, 0x3965, 0x328a, 0x3969, 0x3100, 0x2dc4, 0x34a0, 0x30a4, 0x3950, 0x2f40, 0x32ab, 0x3904, 0x398d, 0x3293, 0x34a7, 0x33a4, 0x38b6, 0x3834, 0x3add, 0x3a08, 0x38cf, 0x3a13, 0x3a6f, 0x382e, 0x3682, 0x3b4b, 0x323e, 0x38e0, 0x38dc, 0x3854, 0x3b9d, 0x3b13, 0x3940, 0x38d4, 0x30ac, 0x3061, 0x3906, 0x3b2d, 0x38f9, 0x3ab0, 0x3a5a, 0x34fd, 0x3b15, 0x3472, 0x3985, 0x3634, 0x3940, 0x35da, 0x38ba, 0x395b, 0x3488, 0x39ca, 0x3a14, 0x2b22, 0x3829, 0x3479, 0x30a6, 0x3910, 0x34e2, 0x3506, 0x3663, 0x23b2, 0x3812, 0x3416, 0x3455, +0x3bc0, 0x3487, 0x3853, 0x3738, 0x3a19, 0x38a3, 0x339a, 0x3906, 0x3a98, 0x3a4c, 0x32bb, 0x3460, 0x2031, 0x36a4, 0x387a, 0x3141, 0x2f39, 0x2efd, 0x394e, 0x2e35, 0x3528, 0x3c00, 0x3b44, 0x342b, 0x3b4d, 0x3bdb, 0x3185, 0x39cb, 0x358a, 0x39ce, 0x2060, 0x3baa, 0x3bc4, 0x30eb, 0x3aed, 0x3734, 0x3a1f, 0x15f9, 0x3a5c, 0x372e, 0x33f9, 0x3b71, 0x3715, 0x37e3, 0x3384, 0x38ff, 0x36e6, 0x28a1, 0x2d9e, 0x280b, 0x3853, 0x3b42, 0x2eda, 0x3a63, 0x2328, 0x3830, 0x35a6, 0x39e9, 0x33df, 0x3be1, 0x220a, 0x39b4, 0x3ade, 0x2e17, 0x3831, 0x2cfe, 0x3752, 0x38fb, 0x39ce, 0x350b, 0x3600, 0x2ffd, 0x363a, 0x358b, 0x2582, 0x3510, 0x36db, 0x2e28, 0x38e0, 0x3a49, 0x277a, 0x301e, 0x39ca, 0x3861, 0x31a7, 0x3550, 0x3862, 0x3476, 0x3a8d, 0x38c2, 0x394b, 0x3156, 0x39ea, 0x3bdf, 0x3880, 0x389a, +0x3a75, 0x35a7, 0x37b1, 0x3b17, 0x24de, 0x32cd, 0x2c9b, 0x3968, 0x3a36, 0x2e6f, 0x3549, 0x3971, 0x34cb, 0x34ac, 0x3bf7, 0x34b8, 0x3841, 0x3527, 0x3a22, 0x3955, 0x3454, 0x380d, 0x38cd, 0x39b3, 0x39c4, 0x3777, 0x3737, 0x2ead, 0x39ef, 0x3420, 0x3a95, 0x35f0, 0x347f, 0x2c76, 0x2cfd, 0x33de, 0x3363, 0x3bf0, 0x3afc, 0x3ab1, 0x3b88, 0x3bcb, 0x23ba, 0x3353, 0x2169, 0x33a7, 0x3484, 0x307b, 0x20b7, 0x384d, 0x302a, 0x3448, 0x39b1, 0x39ab, 0x3be0, 0x3430, 0x3a05, 0x3715, 0x35fe, 0x1e5c, 0x3b84, 0x3b3a, 0x3b0a, 0x320e, 0x2e29, 0x2f00, 0x37c3, 0x3865, 0x37ae, 0x3959, 0x3ba0, 0x3b56, 0x3b4a, 0x3934, 0x35bf, 0x3aa7, 0x3814, 0x320c, 0x3b4a, 0x2499, 0x34bd, 0x3a25, 0x39b8, 0x318b, 0x3b42, 0x3a28, 0x3912, 0x3be5, 0x37af, 0x2cb7, 0x3799, 0x37eb, 0x3981, 0x3033, 0x2f89, 0x3471, +0x3a59, 0x3ab8, 0x3a8d, 0x3bd7, 0x3ba2, 0x39d4, 0x3a8b, 0x278d, 0x32e2, 0x2ced, 0x397f, 0x39f2, 0x3b27, 0x3798, 0x35bf, 0x3597, 0x374e, 0x3ac6, 0x3728, 0x3673, 0x252b, 0x30c8, 0x3b7b, 0x39fb, 0x38db, 0x3ac7, 0x3728, 0x3420, 0x3749, 0x3749, 0x37f3, 0x3977, 0x3181, 0x2d5c, 0x37f8, 0x3966, 0x3b9f, 0x3901, 0x369f, 0x36fa, 0x2468, 0x38f7, 0x3900, 0x37f1, 0x39d6, 0x342d, 0x35d0, 0x359f, 0x3b0b, 0x3a28, 0x34b4, 0x3979, 0x3346, 0x3b9a, 0x391f, 0x3823, 0x350e, 0x3b34, 0x3202, 0x3a2b, 0x313e, 0x355b, 0x37fb, 0x3ac1, 0x36ac, 0x2452, 0x2711, 0x360d, 0x34b7, 0x3af8, 0x2b80, 0x3621, 0x3950, 0x3824, 0x3578, 0x3900, 0x2ac0, 0x38c6, 0x39e1, 0x3565, 0x348f, 0x32d5, 0x388c, 0x38c0, 0x30e3, 0x3738, 0x3bbb, 0x3b46, 0x3b6e, 0x3bd1, 0x3b3d, 0x2d5b, 0x3acd, 0x3a67, 0x35f0, 0x3956, +0x39dd, 0x3be7, 0x3468, 0x2fb1, 0x3b73, 0x348b, 0x37a8, 0x2c37, 0x3b32, 0x375a, 0x3a14, 0x353d, 0x371f, 0x3b1b, 0x3b62, 0x3aaa, 0x39e8, 0x32d1, 0x3b3e, 0x3b74, 0x337c, 0x383e, 0x2d50, 0x3bc2, 0x33f5, 0x330f, 0x3b93, 0x3552, 0x3842, 0x37b5, 0x3918, 0x3654, 0x38a6, 0x2863, 0x3b0c, 0x38e8, 0x3b18, 0x28d3, 0x3b95, 0x3ad8, 0x38d1, 0x39ac, 0x31fb, 0x396b, 0x3b8f, 0x3818, 0x2d54, 0x3bd6, 0x340f, 0x3a89, 0x3192, 0x2cff, 0x3a00, 0x3680, 0x3843, 0x353a, 0x3591, 0x320f, 0x380e, 0x3709, 0xca6, 0x3783, 0x2f2b, 0x2ca1, 0x3885, 0x3391, 0x2c3b, 0x3933, 0x3812, 0x363e, 0x39b5, 0x39d8, 0x3a4b, 0x3951, 0x38b6, 0x399a, 0x318f, 0x2c20, 0x3925, 0x37cc, 0x3795, 0x38b8, 0x3184, 0x3961, 0x376a, 0x302b, 0x319e, 0x3b7d, 0x29a8, 0x3ae9, 0x313d, 0x3b7c, 0x3b7a, 0x3729, 0x3455, 0x2da3, +0x355c, 0x351e, 0x39d5, 0x3bf8, 0x3b11, 0x338f, 0x3990, 0x34cd, 0x3378, 0x2cbc, 0x3948, 0x39ab, 0x3be7, 0x3b59, 0x38e2, 0x2d9f, 0x378b, 0x385b, 0x31e4, 0x35ed, 0x3b0e, 0x3915, 0x3984, 0x3a44, 0x3869, 0x39f7, 0x3239, 0x3a8b, 0x36fb, 0x3081, 0x3ac3, 0x3b0e, 0x3104, 0x2078, 0x3962, 0x29bc, 0x3bb8, 0x3985, 0x3a56, 0x3648, 0x3a7d, 0x3ad3, 0x34d9, 0x3bb5, 0x38d9, 0x39b6, 0x3a2f, 0x3767, 0x3a56, 0x3620, 0x394d, 0x2d7c, 0x322a, 0x3899, 0x3a53, 0x3353, 0x383e, 0x316e, 0x348d, 0x3af5, 0x3a16, 0x3804, 0x3418, 0x3b1a, 0x3be6, 0x3166, 0x2911, 0x3656, 0x3acd, 0x392e, 0x3112, 0x3968, 0x37b7, 0x3af6, 0x38dd, 0x36b4, 0x3444, 0x3be7, 0x3991, 0x375f, 0x38da, 0x315a, 0x3684, 0x21a4, 0x38f4, 0x3860, 0x3935, 0x3b0f, 0x3b40, 0x37b6, 0x35b3, 0x3476, 0x35e9, 0x38ad, 0x3b82, 0x2964, +0x3880, 0x3844, 0x3615, 0x39d0, 0x3310, 0x306b, 0x329d, 0x338a, 0x2f84, 0x3a43, 0x300b, 0x3a47, 0x3821, 0x3b60, 0x387a, 0x3301, 0x3046, 0x351a, 0x3711, 0x38ec, 0x33a1, 0x376e, 0x39da, 0x3aae, 0x3877, 0x3960, 0x38ef, 0x3412, 0x3bbd, 0x3b24, 0x39e5, 0x355d, 0x3ab6, 0x2de8, 0x3ab5, 0x34a8, 0x3856, 0x32b4, 0x3673, 0x3a8b, 0x2e18, 0x3035, 0x3823, 0x38e7, 0x398e, 0x3743, 0x36e4, 0x381c, 0x3893, 0x3ae2, 0x331f, 0x3bdb, 0x34ae, 0x3a85, 0x277f, 0x342f, 0x38da, 0x3b62, 0x393a, 0x26bc, 0x3563, 0x39ce, 0x38e1, 0x395a, 0x3698, 0x3907, 0x30ed, 0x3536, 0x3925, 0x3bc8, 0x30ee, 0x38c2, 0x351d, 0x306e, 0x3952, 0x327f, 0x3a90, 0x3875, 0x337f, 0x3ab1, 0x342c, 0x39e7, 0x3be5, 0x33a6, 0x39af, 0x36ab, 0x2bca, 0x3984, 0x3a01, 0x319e, 0x3904, 0x3b78, 0x3785, 0x3a75, 0x3ace, 0x39c2, +0x3a6e, 0x39c8, 0x3b65, 0x342b, 0x3491, 0x320a, 0x3a81, 0x1f58, 0x3af6, 0x3881, 0x35d6, 0x389c, 0x3a23, 0x336f, 0x36ad, 0x39ab, 0x3062, 0x37fc, 0x317b, 0x3870, 0x3add, 0x3a7f, 0x37fe, 0x340b, 0x3211, 0x3944, 0x3714, 0x3806, 0x3bce, 0x3441, 0x3781, 0x397e, 0x391c, 0x3182, 0x31ac, 0x3456, 0x38f3, 0x3b15, 0x3b76, 0x3bf1, 0x3971, 0x3601, 0x318d, 0x34f2, 0x3a78, 0x35f5, 0x35c7, 0x354f, 0x3570, 0x36c5, 0x39fc, 0x35cd, 0x380e, 0x3606, 0x39c0, 0x352c, 0x3112, 0x3b6b, 0x355c, 0x3977, 0x328f, 0x2d34, 0x3abb, 0x3942, 0x1cba, 0x367a, 0x3aa6, 0x341f, 0x383f, 0x3a9a, 0x3960, 0x358f, 0x2dce, 0x21ac, 0x3bef, 0x3bca, 0x3bdb, 0x3967, 0x38aa, 0x39c1, 0x3b5b, 0x3185, 0x352c, 0x388a, 0x3893, 0x3a70, 0x34e4, 0x38e2, 0x31ba, 0x34d8, 0x32b5, 0x3aed, 0x3802, 0x2f06, 0x36d9, 0x3493, +0x3a09, 0x2994, 0x2e77, 0x3ae8, 0x3bc6, 0x3ace, 0x3926, 0x35b6, 0x326a, 0x3079, 0x3769, 0x28d1, 0x3b41, 0x357b, 0x3aed, 0x34cd, 0x3361, 0x2b6a, 0x3bc8, 0x2115, 0x3b73, 0x371f, 0x3b10, 0x2d39, 0x3092, 0x3264, 0x39df, 0x34c1, 0x2a04, 0x3a86, 0x306c, 0x33bf, 0x37dd, 0x3b17, 0x2f12, 0x3676, 0x3991, 0x3a7a, 0x3bb9, 0x3a80, 0x3441, 0x3592, 0x358d, 0x39dc, 0x31d3, 0x3887, 0x30f5, 0x3855, 0x3be6, 0x3b49, 0x3a7f, 0x3a6c, 0x2de5, 0x269d, 0x37e8, 0x3b49, 0x3026, 0x318b, 0x35e1, 0x39ba, 0x3a34, 0x3a43, 0x35a4, 0x34dd, 0x3918, 0x3a6a, 0x3780, 0x38d0, 0x3b78, 0x3b3e, 0x23b9, 0x37d9, 0x2b95, 0x3619, 0x3377, 0x2df7, 0x3b1e, 0x36de, 0x368b, 0x3bc4, 0x22d2, 0x3730, 0x30cf, 0x379d, 0x3824, 0x37fe, 0x39ba, 0x28c6, 0x36d3, 0x3587, 0x3aaa, 0x3155, 0x3a2d, 0x26ff, 0x2ffb, 0x3a19, +0x31b1, 0x302e, 0x2eba, 0x31f0, 0x3ba8, 0x3510, 0x243a, 0x30a4, 0x3638, 0x3b45, 0x2954, 0x3530, 0x39bc, 0x3944, 0x3951, 0x3026, 0x368f, 0x38e4, 0x36ce, 0x3b31, 0x38e5, 0x3471, 0x3af0, 0x3acf, 0x3842, 0x3be1, 0x319c, 0x2f2d, 0x3490, 0x3bec, 0x3b40, 0x3837, 0x3b38, 0x37fb, 0x3887, 0x383e, 0x382e, 0x31bd, 0x3ae1, 0x3a96, 0x3814, 0x37e0, 0x279d, 0x3363, 0x2ba9, 0x312b, 0x3a46, 0x3617, 0x3a0d, 0x2817, 0x3a37, 0x3981, 0x2d54, 0x3437, 0x3959, 0x3151, 0x3bc2, 0x39c9, 0x3aa3, 0x2d25, 0x3976, 0x3a2b, 0x3acd, 0x3a43, 0x3a9e, 0x39a1, 0x3914, 0x37ac, 0x3702, 0x382c, 0x38d9, 0x318c, 0x210a, 0x2c14, 0x34e2, 0x3a22, 0x2861, 0x3bc6, 0x1265, 0x3b43, 0x332e, 0x3992, 0x3330, 0x3a50, 0x3b38, 0x3aad, 0x33ce, 0x39a9, 0x33be, 0x387d, 0x3ade, 0x3a94, 0x3a56, 0x3ae4, 0x38a9, 0x1ace, +0x3551, 0x3ad8, 0x37c2, 0x3b00, 0x3b8d, 0x36d9, 0x3baa, 0x38bb, 0x34df, 0x3710, 0x3599, 0x3b7b, 0x2fea, 0x385e, 0x2dd8, 0x2e4e, 0x394d, 0x208a, 0x350b, 0x3876, 0x2df7, 0x34f4, 0x3b4c, 0x386d, 0x3260, 0x3b9d, 0x3343, 0x383f, 0x3bf4, 0x333b, 0x3bde, 0x3bd3, 0x392f, 0x3a2d, 0x3bdd, 0x341e, 0x3b13, 0x2b1c, 0x3b34, 0x2bb7, 0x2a93, 0x39c2, 0x3634, 0x358c, 0x3ba9, 0x3231, 0x3a0d, 0x3bc7, 0x3813, 0x2814, 0x3a1b, 0x3b03, 0x2e0e, 0x3616, 0x383a, 0x3578, 0x3a1f, 0x3685, 0x303c, 0x34a7, 0x3bad, 0x3548, 0x2380, 0x364f, 0x36ac, 0x28f8, 0x3a74, 0x34e2, 0x392e, 0x3409, 0x30e5, 0x340f, 0x3581, 0x36a3, 0x3366, 0x35f1, 0x30c4, 0x374f, 0x3921, 0x3aec, 0x3881, 0x2b48, 0x38e7, 0x31ce, 0x3626, 0x3b4b, 0x3b9f, 0x34cd, 0x313e, 0x379e, 0x39a6, 0x38cf, 0x38e3, 0x3031, 0x398f, 0x3bbc, +0x3a15, 0x3737, 0x361a, 0x3b25, 0x3992, 0x350a, 0x3698, 0x37de, 0x3a78, 0x37f5, 0x36d2, 0x3a12, 0x348e, 0x3923, 0x352f, 0x3b28, 0x3989, 0x39d8, 0x3b7b, 0x37cf, 0x3bfd, 0x3143, 0x31f5, 0x36a2, 0x3ae8, 0x3b3d, 0x3aab, 0x320e, 0x2ecc, 0x368f, 0x29c4, 0x36d0, 0x3a8c, 0x35c1, 0x2daa, 0x3128, 0x3b96, 0x388c, 0x3786, 0x349a, 0x390b, 0x2843, 0x381f, 0x2d05, 0x31ee, 0x3976, 0x3722, 0x368a, 0x3899, 0x3b64, 0x3b84, 0x3ae4, 0x3135, 0x3838, 0x387c, 0x2636, 0x2cd7, 0x3bcd, 0x39a6, 0x3ac6, 0x34c3, 0x364d, 0x384b, 0x2c55, 0x34b6, 0x201f, 0x38de, 0x2fc0, 0x389c, 0x381b, 0x36a8, 0x372f, 0x2b5c, 0x3491, 0x30d7, 0x38d2, 0x3893, 0x33a0, 0x33c8, 0x3405, 0x3490, 0x387d, 0x3411, 0x3907, 0x3bc0, 0x3aa9, 0x3023, 0x395c, 0x3b10, 0x3b8e, 0x3791, 0x3b17, 0x3980, 0x3b13, 0x336a, 0x354d, +0x39d9, 0x35f5, 0x3034, 0x300f, 0x38e5, 0x395c, 0x3394, 0x392f, 0x390a, 0x2567, 0x3151, 0x3861, 0x3a84, 0x3759, 0x382b, 0x3185, 0x359b, 0x3a6b, 0x3927, 0x3b6c, 0x39ed, 0x2cc3, 0x34bc, 0x389f, 0x3617, 0x335f, 0x3a9e, 0x35c0, 0x378c, 0x38e7, 0x2d21, 0x2ec0, 0x3874, 0x3af1, 0x36c6, 0x3b7e, 0x364f, 0x386e, 0x34f3, 0x2761, 0x386e, 0x3ac9, 0x308e, 0x3ad6, 0x3194, 0x35f7, 0x31d0, 0x3a36, 0x34d6, 0x36b0, 0x34bf, 0x38cb, 0x2f2c, 0x3945, 0x325c, 0x39d0, 0x1fce, 0x3a04, 0x3118, 0x3a0c, 0x3a56, 0x3794, 0x3744, 0x3ad3, 0x36c3, 0x2700, 0x392c, 0x34fa, 0x3b4d, 0x2649, 0x393c, 0x3967, 0x37f7, 0x369e, 0x3ac1, 0x39b3, 0x39a1, 0x36a4, 0x3645, 0x39cc, 0x3af9, 0x31e3, 0x237a, 0x35d3, 0x35fa, 0x3b53, 0x3872, 0x3bcc, 0x3a9c, 0x3ba9, 0x34e9, 0x34ec, 0x3b31, 0x3b09, 0x31d7, 0x3a45, +0x33ab, 0x38b0, 0x384c, 0x3a48, 0x3340, 0x390f, 0x340e, 0x3937, 0x2ceb, 0x3b0d, 0x3b15, 0x3979, 0x3884, 0x376b, 0x3b79, 0x39d2, 0x36fb, 0x3442, 0x3994, 0x35c1, 0x3b6f, 0x3918, 0x3bea, 0x37f1, 0x3b25, 0x3bd5, 0x3ab4, 0x3604, 0x3593, 0x39fc, 0x3893, 0x37f7, 0x3a56, 0x3118, 0x3444, 0x36ac, 0x315a, 0x2eaa, 0x3a55, 0x3bea, 0x372f, 0x3b79, 0x38fa, 0x32a9, 0x2a8d, 0x326b, 0x39dd, 0x2c6e, 0x3a63, 0x39a8, 0x34dd, 0x2fa8, 0x3afa, 0x3ab1, 0x3854, 0x2e58, 0x3a7b, 0x39e6, 0x3489, 0x3631, 0x3826, 0x3ad2, 0x384d, 0x3565, 0x3a21, 0x3beb, 0x334d, 0x3603, 0x2de5, 0x31fa, 0x3111, 0x3455, 0x390c, 0x38aa, 0x3822, 0x2e75, 0x36cb, 0x3bb0, 0x38d7, 0x386a, 0x336f, 0x3150, 0x395a, 0x3219, 0x39f2, 0x3675, 0x2b46, 0x39d6, 0x2e2f, 0x3752, 0x3b23, 0x3670, 0x3b64, 0x39f4, 0x3bec, 0x3848, +0x389e, 0x3214, 0x3618, 0x32ca, 0x333b, 0x2fe6, 0x2cf6, 0x36f3, 0x3748, 0x380b, 0x3b5f, 0x3b4e, 0x2dce, 0x2474, 0x3a17, 0x320e, 0x38ac, 0x3b44, 0x3595, 0x3bd7, 0x3896, 0x32ea, 0x37d0, 0x34a8, 0x31f2, 0x3a51, 0x3b6c, 0x3753, 0x3abd, 0x3b26, 0x24a0, 0x32fb, 0x3a3a, 0x3bf9, 0x2fc5, 0x390d, 0x3a42, 0x331d, 0x3b2e, 0x370e, 0x32d3, 0x3b26, 0x3b7f, 0x2d64, 0x39ca, 0x3405, 0x3962, 0x36c0, 0x2ffe, 0x3b76, 0x3811, 0x3287, 0x34d7, 0x3beb, 0x3a37, 0x3756, 0x390e, 0x398b, 0x3160, 0x3bf9, 0x3a09, 0x38ee, 0x382a, 0x366e, 0x3836, 0x3b95, 0x3b30, 0x3bd4, 0x1c94, 0x33c6, 0x3391, 0x3b2c, 0x3b07, 0x37b6, 0x3499, 0x3942, 0x2dc7, 0x357d, 0x380f, 0x32e5, 0x3628, 0x386a, 0x3b66, 0x395b, 0x3611, 0x3bef, 0x3935, 0x34c3, 0x3354, 0x39ab, 0x3b9e, 0x34f5, 0x358b, 0x326f, 0x3952, 0x359f, +0x39c7, 0x399f, 0x2d59, 0x379e, 0x33fd, 0x3b7a, 0x327e, 0x392d, 0x3b6c, 0x34b5, 0x3a50, 0x365b, 0x392f, 0x3b31, 0x3a20, 0x3131, 0x3a43, 0x292e, 0x3a0c, 0x3bb1, 0x3bf6, 0x29e8, 0x32d4, 0x3b07, 0x3189, 0x32d5, 0x3689, 0x3a3e, 0x3857, 0x281c, 0x2b7b, 0x3545, 0x35a9, 0x3aa0, 0x2cf4, 0x3356, 0x3b2f, 0x3845, 0x3a9d, 0x38fa, 0x285c, 0x3aef, 0x387a, 0x2121, 0x376d, 0x30bb, 0x38b8, 0x3ad4, 0x3bf3, 0x3219, 0x398e, 0x2dc8, 0x31ae, 0x38b2, 0x34f9, 0x3846, 0x3bb0, 0x3bc9, 0x2fd2, 0x3403, 0x34c1, 0x3043, 0x3823, 0x38f1, 0x384a, 0x396a, 0x37c2, 0x3839, 0x3441, 0x3821, 0x2774, 0x380f, 0x39e4, 0x3832, 0x375b, 0x3a10, 0x3894, 0x2f6b, 0x3586, 0x34fe, 0x3bad, 0x3856, 0x35c6, 0x38ad, 0x3835, 0x368d, 0x39a1, 0x3736, 0x349e, 0x32c2, 0x2df5, 0x34c5, 0x3ba0, 0x349b, 0x35af, 0x35aa, +0x3a17, 0x3696, 0x3169, 0x3433, 0x3800, 0x38f3, 0x37f8, 0x376a, 0x2ec7, 0x3bad, 0x373f, 0x281c, 0x3968, 0x3403, 0x2c9e, 0x3b1f, 0x3003, 0x35cc, 0x3810, 0x367c, 0x3a68, 0x26e9, 0x34e2, 0x3902, 0x2edb, 0x3478, 0x2a6a, 0x3a45, 0x3867, 0x38c5, 0x3a61, 0x388c, 0x3738, 0x34be, 0x35e6, 0x36b3, 0x325c, 0x35c6, 0x384e, 0x358d, 0x3894, 0x31c8, 0x3820, 0x363b, 0x380e, 0x385f, 0x38ac, 0x36a3, 0x31da, 0x3b46, 0x3715, 0x37ec, 0x386b, 0x35c7, 0x3100, 0x3a7a, 0x3504, 0x3810, 0x3a22, 0x36a9, 0x3995, 0x3b0c, 0x37f0, 0x2d4e, 0x36c4, 0x347e, 0x39dc, 0x3a2a, 0x3951, 0x3bca, 0x3bf5, 0x3bb3, 0x3b46, 0x3afa, 0x311c, 0x3929, 0x3291, 0x372f, 0x306d, 0x2843, 0x391a, 0x30c4, 0x3a5b, 0x3be7, 0x3924, 0x38ae, 0x3734, 0x32bd, 0x3b39, 0x39f6, 0x3aaa, 0x327a, 0x3045, 0x383c, 0x3303, 0x352c, +0x3bcd, 0x3baa, 0x3116, 0x3ad3, 0x39bc, 0x3aee, 0x36b3, 0x3a06, 0x3408, 0x3971, 0x3545, 0x38aa, 0x3a21, 0x3743, 0x367e, 0x3ac3, 0x3a54, 0x2cad, 0x3820, 0x39eb, 0x398a, 0x34a9, 0x3b95, 0x3a34, 0x32bb, 0x3bda, 0x3704, 0x3aa2, 0x39a3, 0x3953, 0x38ed, 0x3821, 0x39eb, 0x36b4, 0x38b5, 0x382e, 0x3753, 0x3203, 0x3796, 0x2e26, 0x303a, 0x3895, 0x39a3, 0x3a1f, 0x3ad6, 0x302f, 0x376d, 0x347f, 0x32fc, 0x382d, 0x39fa, 0x2d39, 0x32b2, 0x2fef, 0x3044, 0x3497, 0x39a9, 0x3994, 0x346d, 0x38a8, 0x3487, 0x3431, 0x39a7, 0x375a, 0x3935, 0x2eaf, 0x2ff3, 0x3467, 0x35cf, 0x3738, 0x2df4, 0x3b14, 0x3978, 0x36a8, 0x3406, 0x3aad, 0x3169, 0x355a, 0x3a49, 0x2e40, 0x34a4, 0x34ac, 0x308a, 0x3546, 0x3b34, 0x3514, 0x3aaf, 0x3707, 0x3999, 0x3a99, 0x2cc7, 0x326d, 0x3a95, 0x3bb1, 0x315b, 0x3989, +0x39d7, 0x3684, 0x39f7, 0x3963, 0x31e0, 0x3a96, 0x3492, 0x3b63, 0x37fd, 0x3b38, 0x37ba, 0x34fd, 0x365b, 0x3496, 0x3a38, 0x3906, 0x3bed, 0x39d9, 0x389b, 0x34eb, 0x3332, 0x2b11, 0x31c8, 0x3889, 0x3810, 0x30b7, 0x28b6, 0x29d1, 0x3420, 0x3222, 0x387e, 0x3a70, 0x2cf8, 0x3b07, 0x304f, 0x3998, 0x360b, 0x3b8b, 0x3434, 0x38ee, 0x304f, 0x39e7, 0x3685, 0x3981, 0x3a46, 0x39af, 0x387a, 0x36e7, 0x3a5e, 0x33ef, 0x3a38, 0x32d1, 0x39f0, 0x345c, 0x36af, 0x3416, 0x3be9, 0x23fa, 0x3b3a, 0x3b59, 0x3732, 0x3578, 0x3bd8, 0x3a83, 0x387d, 0x3ad8, 0x394e, 0x3431, 0x3748, 0x3809, 0x3ac3, 0x3a1a, 0x38e0, 0x37ca, 0x2e29, 0x386d, 0x2e50, 0x360f, 0x31e4, 0x3715, 0x3986, 0x35a7, 0x3bd1, 0x3ae4, 0x3432, 0x3750, 0x38e8, 0x3926, 0x3b12, 0x3460, 0x358f, 0x3aab, 0x3906, 0x355a, 0x27fc, 0x3a2f, +0x386f, 0x3b47, 0x309b, 0x3098, 0x3b47, 0x35a2, 0x3677, 0x39a2, 0x35a4, 0x389e, 0x3b5f, 0x37e9, 0x32d3, 0x30cb, 0x2cc7, 0x2f1d, 0x392f, 0x3bfb, 0x392b, 0x3909, 0x3a3a, 0x38f8, 0x2e08, 0x3962, 0x358f, 0x37ea, 0x34db, 0x3bc8, 0x38ca, 0x3ba2, 0x3a0b, 0x39ba, 0x369c, 0x2cce, 0x3988, 0x3a39, 0x3be5, 0x2a39, 0x35c1, 0x3643, 0x37c9, 0x35bf, 0x352f, 0x3a7f, 0x350f, 0x330f, 0x3a34, 0x36aa, 0x38da, 0x2fc0, 0x387b, 0x37b7, 0x34a8, 0x396b, 0x39f3, 0x37f4, 0x3649, 0x3959, 0x3024, 0x373f, 0x38fd, 0x38c3, 0x39d3, 0x340b, 0x38cb, 0x30c4, 0x3877, 0x3af4, 0x28ef, 0x3a81, 0x2ff9, 0x3992, 0x2902, 0x3b16, 0x3590, 0x3a95, 0x3708, 0x3a63, 0x1ba7, 0x347d, 0x3a3e, 0x3bd4, 0x3946, 0x2da1, 0x38df, 0x396d, 0x39c9, 0x3810, 0x39de, 0x3b69, 0x30ad, 0x3748, 0x3678, 0x3a92, 0x39b8, 0x30c9, +0x3990, 0x2cd8, 0x303c, 0x2c03, 0x35c0, 0x3b10, 0x39b6, 0x35f6, 0x3bb8, 0x3733, 0x320f, 0x3a45, 0x3457, 0x392e, 0x3462, 0x36f3, 0x32d4, 0x3025, 0x24ba, 0x3826, 0x37a7, 0x3714, 0x38d7, 0x3630, 0x3a29, 0x3582, 0x3af6, 0x2639, 0x3b0e, 0x3872, 0x39c2, 0x2e2e, 0x396d, 0x3b99, 0x34b3, 0x3551, 0x3162, 0x3a7d, 0x35f0, 0x351b, 0x3661, 0x3ad0, 0x39cf, 0x25f1, 0x3987, 0x3296, 0x365f, 0x3902, 0x38fd, 0x3745, 0x3990, 0x3972, 0x3317, 0x3a87, 0x3985, 0x392d, 0x36a3, 0x34f1, 0x396f, 0x3a7a, 0x3465, 0x3362, 0x3b0b, 0x208d, 0x37e0, 0x3ade, 0x31dc, 0x3854, 0x34cc, 0x3874, 0x311e, 0x38ec, 0x35e2, 0x2de6, 0x3219, 0x38b0, 0x3be3, 0x3381, 0x3b39, 0x38e6, 0x3b20, 0x3bea, 0x38e2, 0x38d6, 0x39e6, 0x2db4, 0x3884, 0x1cb8, 0x176a, 0x2eba, 0x3bb1, 0x37fe, 0x371a, 0x3b1c, 0x3402, 0x3462, +0x3632, 0x2a7c, 0x3897, 0x32c6, 0x34d7, 0x3ad2, 0x3b38, 0x3aa2, 0x2c56, 0x392e, 0x376a, 0x3356, 0x36b3, 0x3b8d, 0x2fc0, 0x3b16, 0x38dd, 0x2f21, 0x3852, 0x3aeb, 0x3aad, 0x379e, 0x32c9, 0x324b, 0x3b1f, 0x382a, 0x3929, 0x2cbe, 0x3867, 0x3651, 0x389b, 0x2fd3, 0x3809, 0x3ade, 0x38ba, 0x3a92, 0x398d, 0x38c2, 0x3061, 0x37f4, 0x3ab9, 0x3a17, 0x2d4b, 0x3255, 0x3656, 0x3884, 0x3b75, 0x3b1a, 0x3a56, 0x353d, 0x2fab, 0x3a0d, 0x3180, 0x3bd5, 0x3ac0, 0x3298, 0x3a5f, 0x3009, 0x39d4, 0x3b69, 0x39ad, 0x3b16, 0x36b3, 0x2c5b, 0x3ab1, 0x39d1, 0x30bc, 0x36ba, 0x2f6d, 0x3817, 0x3b4c, 0x3b31, 0x39d1, 0x348b, 0x3b82, 0x3032, 0x2586, 0x3bbf, 0x2dea, 0x2f5f, 0x383a, 0x3bb8, 0x3a4c, 0x3421, 0x33f7, 0x3ab6, 0x398e, 0x3335, 0x3a1c, 0x37dd, 0x2fc9, 0x3824, 0x3463, 0x3bed, 0x3b6c, 0x313b, +0x3b2d, 0x3426, 0x335b, 0x3952, 0x347e, 0x3ba0, 0x3bbb, 0x39ec, 0x3b16, 0x3561, 0x3a65, 0x3196, 0x3bd4, 0x30b6, 0x3891, 0x3749, 0x3a0b, 0x3a40, 0x3485, 0x3b5d, 0x3b0d, 0x33b5, 0x3812, 0x37be, 0x3a0a, 0x38c9, 0x38d2, 0x398f, 0x3235, 0x3a91, 0x2b81, 0x26f6, 0x2d3a, 0x1cd9, 0x2ea1, 0x3970, 0x3a5b, 0x30e8, 0x2a5f, 0x390b, 0x38f4, 0x396c, 0x3b50, 0x3b24, 0x35dd, 0x396c, 0x33c7, 0x2c40, 0x397b, 0x390b, 0x348f, 0x38df, 0x38fb, 0x3be2, 0x3122, 0x3bb5, 0x2c56, 0x322f, 0x3836, 0x1ee5, 0x3b35, 0x359e, 0x3966, 0x39b3, 0x3163, 0x2902, 0x38b4, 0x3ace, 0x34ed, 0x3add, 0x3428, 0x369b, 0x3116, 0x3a77, 0x34f6, 0x39c9, 0x3263, 0x359d, 0x352c, 0x3b0b, 0x38c9, 0x31dc, 0x373d, 0x2ad4, 0x3452, 0x3156, 0x360d, 0x2d93, 0x38d0, 0x3978, 0x3901, 0x36f4, 0x3b26, 0x2e42, 0x3983, 0x3bce, +0x3990, 0x37f3, 0x2645, 0x3938, 0x3868, 0x3a22, 0x3a6a, 0x3b78, 0x3b4e, 0x371f, 0x39fb, 0x2e11, 0x38b8, 0x36d2, 0x3468, 0x34f2, 0x39bf, 0x3b8e, 0x3710, 0x348b, 0x38d6, 0x3aae, 0x35f0, 0x3ae0, 0x3ba8, 0x3857, 0x39c1, 0x3a03, 0x35b3, 0x3a2c, 0x3a7b, 0x350c, 0x30f8, 0x3830, 0x25aa, 0x24b3, 0x380b, 0x3879, 0x3929, 0x354d, 0x38b4, 0x2fea, 0x34bc, 0x3ba6, 0x3832, 0x3a2a, 0x387b, 0x343f, 0x3114, 0x2edb, 0x36ec, 0x3a24, 0x32ea, 0x2f80, 0x3675, 0x2df4, 0x39ce, 0x37ea, 0x3091, 0x3766, 0x38e3, 0x37d4, 0x39bc, 0x3425, 0x3336, 0x38aa, 0x34b9, 0x3bce, 0x37dc, 0x3af9, 0x39a9, 0x3b3e, 0x386a, 0x392b, 0x3942, 0x338a, 0x36f9, 0x36f3, 0x3b56, 0x33e2, 0x3bd1, 0x38aa, 0x3337, 0x3a61, 0x3ac5, 0x377c, 0x3819, 0x2ff3, 0x3870, 0x3b2c, 0x3925, 0x38cd, 0x3b0e, 0x3719, 0x3a2a, 0x326d, +0x32b3, 0x35f8, 0x3b6e, 0x3bde, 0x3baf, 0x3027, 0x3433, 0x3819, 0x2eab, 0x3b4f, 0x34a1, 0x34f8, 0x393a, 0x3a09, 0x38f7, 0x3489, 0x37ae, 0x3bfa, 0x2dc1, 0x3468, 0x26f5, 0x343f, 0x3b4e, 0x39b2, 0x339a, 0x3441, 0x3b51, 0x38dc, 0x3914, 0x2699, 0x3339, 0x2f3a, 0x38f1, 0x3a57, 0x2e7e, 0x36a4, 0x2cf6, 0x31e6, 0x3802, 0x3a75, 0x39f5, 0x38f5, 0x3327, 0x38d5, 0x36b4, 0x3b6c, 0x2279, 0x3b08, 0x39e9, 0x380f, 0x3b8c, 0x3432, 0x39c9, 0x343d, 0x38ad, 0x3be5, 0x3602, 0x3bc4, 0x3952, 0x350a, 0xc4c, 0x267d, 0x35e1, 0x3bdb, 0x3937, 0x348d, 0x3768, 0x3a78, 0x3717, 0x3342, 0x34f0, 0x36db, 0x2788, 0x3b52, 0x2acf, 0x3bef, 0x3899, 0x3279, 0x38e4, 0x3bc5, 0x38ed, 0x3369, 0x3652, 0x34b4, 0x378a, 0x3bf9, 0x3a9d, 0x3841, 0x3a01, 0x3065, 0x35a4, 0x3b47, 0x376f, 0x35e0, 0x34f0, 0x396c, +0x3a1e, 0x354b, 0x390b, 0x3165, 0x3435, 0x329e, 0x386e, 0x36ba, 0x2046, 0x385b, 0x3493, 0x3537, 0x2e29, 0x3bda, 0x3b0c, 0x35e0, 0x34b8, 0x25c1, 0x3698, 0x2ef1, 0x3516, 0x330e, 0x387a, 0x37eb, 0x3011, 0x2658, 0x350a, 0x393c, 0x2c1c, 0x2dbc, 0x25f3, 0x376f, 0x3a1c, 0x3112, 0x2c6d, 0x2e2a, 0x3a3d, 0x3ba0, 0x391a, 0x36ac, 0x3876, 0x32b9, 0x3ad9, 0x36f8, 0x39aa, 0x3095, 0x348d, 0x39a6, 0x35be, 0x3747, 0x31e9, 0x33b9, 0x31c0, 0x3926, 0x2d3f, 0x3b32, 0x3412, 0x3b52, 0x29eb, 0x333e, 0x3af4, 0x3974, 0x36ab, 0x3ba6, 0x3aed, 0x3807, 0x2b53, 0x33b0, 0x35d7, 0x37aa, 0x3838, 0x3478, 0x2f9d, 0x3b1b, 0x3b31, 0x30fb, 0x30fa, 0x38d7, 0x329f, 0x372b, 0x31b1, 0x38a9, 0x3932, 0x315d, 0x2d85, 0x374b, 0x3aa3, 0x3621, 0x2da1, 0x373a, 0x386d, 0x38ba, 0x3a4e, 0x1eea, 0x3887, 0x3438 +}; \ No newline at end of file diff --git a/redmule/inc/y_2D.h b/redmule/inc/y_2D.h new file mode 100644 index 0000000..9ea877d --- /dev/null +++ b/redmule/inc/y_2D.h @@ -0,0 +1,99 @@ + /* Header file generated by RedMulE Golden Model */ +uint16_t y_inp_2D [96][96] = { +0x39fc, 0x3a87, 0x3a35, 0x2bf4, 0x34f8, 0x2c8c, 0x3822, 0x38a2, 0x3bf8, 0x3b3a, 0x37d8, 0x3041, 0x28b2, 0x38d2, 0x1822, 0x3044, 0x38dc, 0x308d, 0x3a14, 0x3952, 0x38be, 0x32ef, 0x351e, 0x38ab, 0x2eb4, 0x3689, 0x33ca, 0x3a1f, 0x3bbc, 0x37ed, 0x38d5, 0x35c8, 0x341b, 0x3b74, 0x3627, 0x3a34, 0x3220, 0x3b85, 0x3a43, 0x2eca, 0x3550, 0x3958, 0x3813, 0x2cca, 0x3869, 0x391e, 0x3260, 0x2e42, 0x3493, 0x39ed, 0x3b7b, 0x3699, 0x3863, 0x3a7e, 0x3ab4, 0x3bcb, 0x3920, 0x3502, 0x28df, 0x38c5, 0x35e5, 0x282d, 0x3645, 0x3a29, 0x2fbb, 0x338d, 0x3ba0, 0x320d, 0x2830, 0x3bb4, 0x390a, 0x367f, 0x3335, 0x3b1a, 0x38c0, 0x3781, 0x3773, 0x39b0, 0x3b74, 0x38ba, 0x3383, 0x3550, 0x357a, 0x3ba7, 0x30e6, 0x39f4, 0x3b11, 0x282b, 0x334f, 0x3644, 0x367c, 0x3ac3, 0x38f3, 0x39f9, 0x3b1d, 0x35cf, +0x3433, 0x2eea, 0x38c1, 0x362a, 0x35e6, 0x3070, 0x1c1d, 0x308e, 0x381d, 0x39e5, 0x3a51, 0x2fb2, 0x3723, 0x3b58, 0x293e, 0x337a, 0x3a39, 0x349c, 0x3766, 0x3a73, 0x39bd, 0x3a0c, 0x3843, 0x21b9, 0x39a5, 0x2fd6, 0x2cf4, 0x3112, 0x3a1a, 0x3bb6, 0x3a83, 0x398e, 0x3b92, 0x2a3f, 0x37f1, 0x3664, 0x35f0, 0x39be, 0x3279, 0x39e0, 0x3241, 0x3bc7, 0x3bae, 0x36bd, 0x1bf5, 0x3806, 0x37d3, 0x247c, 0x3789, 0x36b9, 0x3b84, 0x3093, 0x3a5d, 0x2863, 0x2fe0, 0x2c4b, 0x3bd5, 0x38b6, 0x3b0e, 0x3ad1, 0x3ba2, 0x3914, 0x3947, 0x3984, 0x397a, 0x35ed, 0x3891, 0x3b7f, 0x3b32, 0x3857, 0x3717, 0x2b73, 0x38c1, 0x3bc6, 0x3330, 0x35c8, 0x34ff, 0x3924, 0x387b, 0x3a27, 0x3b92, 0x22d9, 0x29be, 0x3b39, 0x361c, 0x34e6, 0x2b7e, 0x34d8, 0x38c2, 0x3a4c, 0x3a2f, 0x381f, 0x38f6, 0x3a9a, 0x394f, 0x382d, +0x3939, 0x397a, 0x3926, 0x3a59, 0x34e3, 0x3077, 0x3190, 0x3a6b, 0x2c3f, 0x3a51, 0x35d9, 0x3866, 0x2f73, 0x38f2, 0x3766, 0x3aa1, 0x3b55, 0x2f8f, 0x3993, 0x354a, 0x3650, 0x340d, 0x2f01, 0x3731, 0x394d, 0x3b15, 0x3806, 0x39b9, 0x3aa7, 0x387c, 0x3beb, 0x2e2f, 0x38e8, 0x353a, 0x36ba, 0x3b2e, 0x3b5c, 0x2d4b, 0x357e, 0x3bd8, 0x3be0, 0x38b0, 0x2a3b, 0x2ff0, 0x3268, 0x38f3, 0x31fc, 0x318c, 0x35b5, 0x3980, 0x3a4d, 0x33cc, 0x365b, 0x397e, 0x3809, 0x39af, 0x3537, 0x2ba6, 0x30f1, 0x38b2, 0x39fe, 0x39f3, 0x373b, 0x3bff, 0x36ce, 0x3b5d, 0x3b5a, 0x2f1d, 0x3be3, 0x395d, 0x34d0, 0x36a3, 0x3937, 0x33b3, 0x3b91, 0x3ab5, 0x3215, 0x396b, 0x3bed, 0x302d, 0x3862, 0x3b05, 0x2ba1, 0x2fa6, 0x35d2, 0x3806, 0x3b84, 0x3233, 0x2664, 0x3a63, 0x3bdb, 0x375f, 0x3b0b, 0x34ff, 0x3020, 0x375d, +0x3931, 0x2d6c, 0x31c3, 0x3a24, 0x34b8, 0x3865, 0x366e, 0x3aaf, 0x3530, 0x20d6, 0x35ac, 0x33e8, 0x3b37, 0x32d8, 0x333c, 0x3349, 0x30cd, 0x392f, 0x2c30, 0x3b0a, 0x390a, 0x3703, 0x3b5f, 0x39ac, 0x31ba, 0x32a4, 0x3b8f, 0x3a5e, 0x3ad1, 0x38bf, 0x38bb, 0x369f, 0x3b75, 0x32c6, 0x31d2, 0x280f, 0x3891, 0x3b09, 0x3531, 0x3899, 0x3a55, 0x37fe, 0x3b5e, 0x364a, 0x3ada, 0x386f, 0x38bb, 0x3a7b, 0x313f, 0x3592, 0x2ca6, 0x2eeb, 0x38b1, 0x35df, 0x326f, 0x3bf5, 0x3848, 0x2fbd, 0x3268, 0x3922, 0x376b, 0x3a5e, 0x3826, 0x3207, 0x33f3, 0x3302, 0x3a80, 0x3bf1, 0x35dd, 0x2a83, 0x3460, 0x3296, 0x3ada, 0x3484, 0x3989, 0x3680, 0x3969, 0x3ab4, 0x2fb1, 0x3b50, 0x38bd, 0x3ad1, 0x34ac, 0x3718, 0x2ed7, 0x3b53, 0x3114, 0x248a, 0x3960, 0x3ab6, 0x39ef, 0x21dd, 0x33b9, 0x3a05, 0x2fbe, 0x37a2, +0x3a70, 0x37f8, 0x37f1, 0x3591, 0x382f, 0x3276, 0x33ed, 0x3935, 0x275e, 0x353c, 0x3b24, 0x3b42, 0x38db, 0x33ca, 0x3bd7, 0x3694, 0x365f, 0x3997, 0x39b7, 0x3bcb, 0x3b6a, 0x269a, 0x3956, 0x3b4e, 0x3ba1, 0x3bee, 0x2aaf, 0x3530, 0x3ad7, 0x3bce, 0x3bd2, 0x397c, 0x3aee, 0x3b62, 0x3bfc, 0x3ba1, 0x3b44, 0x38e6, 0x3747, 0x3855, 0x3baf, 0x3b16, 0x3b35, 0x34e7, 0x3858, 0x3bdb, 0x39c3, 0x3898, 0x381e, 0x3899, 0x36be, 0x363c, 0x3a70, 0x1518, 0x334e, 0x38cd, 0x3a74, 0x3420, 0x35a7, 0x3a00, 0x3282, 0x32db, 0x3656, 0x2dd8, 0x2e5b, 0x399e, 0x3bd7, 0x3366, 0x34cd, 0x257c, 0x3a2e, 0x375b, 0x3971, 0x3472, 0x269f, 0x39ac, 0x39e6, 0x396b, 0x335b, 0x38cc, 0x3b3d, 0x38ee, 0x3895, 0x2e3b, 0x3ba0, 0x3bb7, 0x3401, 0x35df, 0x3b06, 0x3adf, 0x37af, 0x3948, 0x33a6, 0x3aa7, 0x36b2, 0x373c, +0x3872, 0x3674, 0x34d5, 0x3918, 0x37cd, 0x369a, 0x3a26, 0x3bc3, 0x380c, 0x35ba, 0x36eb, 0x3b54, 0x37a9, 0x3405, 0x397d, 0x351f, 0x2f10, 0x34fd, 0x333c, 0x36c9, 0x3584, 0x3998, 0x3b22, 0x3aff, 0x3931, 0x31b7, 0x39ae, 0x31e7, 0x3847, 0x392a, 0x3bff, 0x3a24, 0x15c5, 0x3905, 0x36e8, 0x3356, 0x2f46, 0x38a9, 0x3bd8, 0x3bfc, 0x2fbf, 0x3a7d, 0x3989, 0x3a6c, 0x3a8b, 0x32c9, 0x37da, 0x3b16, 0x394a, 0x3aa5, 0x2c30, 0x3968, 0x3119, 0x3af2, 0x2f8f, 0x34ef, 0x3ab3, 0x2445, 0x38d9, 0x3856, 0x3592, 0x389d, 0x2932, 0x31f8, 0x3775, 0x3947, 0x3893, 0x3b50, 0x3465, 0x355c, 0x3547, 0x3925, 0x32c2, 0x3a0e, 0x39f9, 0x39f0, 0x2a1c, 0x34a0, 0x3b51, 0x3bb8, 0x38af, 0x36c7, 0x361f, 0x397b, 0x3a7f, 0x39e2, 0x3a7e, 0x3a67, 0x304c, 0x34d8, 0x3921, 0x3287, 0x2d90, 0x3b36, 0x30cc, 0x1958, +0x36ea, 0x3419, 0x39f3, 0x3bf1, 0x3271, 0x3763, 0x3643, 0x337f, 0x3161, 0x3944, 0x33b1, 0x30c7, 0x3687, 0x342b, 0x2402, 0x394a, 0x3480, 0x3052, 0x2a6e, 0x376a, 0x3236, 0x381e, 0x3596, 0x3939, 0x373e, 0x34b4, 0x201a, 0x3245, 0x3169, 0x26c8, 0x3a1c, 0x389b, 0x3351, 0x3bac, 0x3261, 0x37ab, 0x39bb, 0x350f, 0x3b5d, 0x3b86, 0x34e8, 0x3104, 0x3969, 0x31f4, 0x399a, 0x370e, 0x34a3, 0x3064, 0x3519, 0x3542, 0x3a72, 0x3be0, 0x3ba2, 0x3a5b, 0x3455, 0x3ae5, 0x38ef, 0x358a, 0x3908, 0x38eb, 0x3572, 0x3b41, 0x39cb, 0x39f4, 0x3bb6, 0x2f51, 0x3345, 0x3475, 0x3b20, 0x3b7c, 0x385d, 0x36a4, 0x35b8, 0x3368, 0x3867, 0x37cb, 0x3b8c, 0x32e9, 0x366b, 0x3a3f, 0x3147, 0x3534, 0x25bc, 0x3828, 0x38f8, 0x27cd, 0x35c8, 0x2a95, 0x39cf, 0x328b, 0x3a6d, 0x34f4, 0x38ae, 0x2b5f, 0x3845, 0x3b30, +0x3719, 0x37fc, 0x3adc, 0x2273, 0x385f, 0x39d1, 0x2f2c, 0x2df2, 0x36a6, 0x3523, 0x234d, 0x3a3f, 0x2817, 0x355d, 0x399f, 0x3924, 0x3bd4, 0x35ca, 0x3319, 0x301a, 0x353f, 0x34d2, 0x3bfd, 0x373e, 0x3a2a, 0x320b, 0x2e90, 0x38e8, 0x2f48, 0x3873, 0x3b61, 0x39d5, 0x3af7, 0x3885, 0x3be2, 0x3963, 0x36cc, 0x331b, 0x31ad, 0x3668, 0x39a2, 0x36f9, 0x3b52, 0x3985, 0x395d, 0x2e15, 0x30c2, 0x37ed, 0x32d1, 0x3a04, 0x3bef, 0x2fd7, 0x301d, 0x3a39, 0x3999, 0x342d, 0x34e3, 0x3bde, 0x3825, 0x3ac0, 0x3495, 0x3505, 0x3820, 0x30df, 0x37fd, 0x386c, 0x37c5, 0x3bab, 0x3b3d, 0x37f1, 0x3b42, 0x3825, 0x3bb4, 0x38a0, 0x383b, 0x3a92, 0x3a5c, 0x24c7, 0x38c8, 0x3492, 0x30af, 0x3b63, 0x35bb, 0x3046, 0x3aec, 0x357f, 0x3bb6, 0x3886, 0x37c6, 0x3315, 0x39cd, 0x32ae, 0x3b6d, 0x2d8c, 0x3607, 0x3420, +0x385d, 0x3782, 0x38ad, 0x34af, 0x3aad, 0x3bf3, 0x34bc, 0x3bfc, 0x33f0, 0x34ab, 0x37b6, 0x308d, 0x3ac8, 0x3935, 0x3b3a, 0x3517, 0x2579, 0x3b26, 0x36f6, 0x381f, 0x3b3c, 0x3a9f, 0x3667, 0x1c3e, 0x3b29, 0x2344, 0x3010, 0x36f7, 0x3470, 0x3834, 0x33bc, 0x306f, 0x392b, 0x37bc, 0x357a, 0x38a5, 0x3a09, 0x38f3, 0x34c6, 0x304b, 0x3bb7, 0x36c3, 0x3435, 0x3984, 0x357c, 0x345b, 0x39b5, 0x3286, 0x3a6b, 0x2e0e, 0x3613, 0x33e9, 0x379f, 0x3a14, 0x3a3a, 0x2e0e, 0x38f6, 0x3589, 0x3807, 0x3a49, 0x3818, 0x39dd, 0x31b0, 0x3a67, 0x39de, 0x175e, 0x394b, 0x34de, 0x394a, 0x3853, 0x371b, 0x3b5d, 0x39bb, 0x3029, 0x3091, 0x37b8, 0x33f0, 0x3517, 0x391e, 0x35ce, 0x3bc7, 0x2c6e, 0x2d9c, 0x36c1, 0x3143, 0x35c5, 0x39c6, 0x3a05, 0x3b1f, 0x3941, 0x3adc, 0x393a, 0x3993, 0x3bac, 0x2781, 0x3912, +0x36b8, 0x3a59, 0x397c, 0x25c3, 0x3b19, 0x3304, 0x399d, 0x3bde, 0x2e7c, 0x341e, 0x3172, 0x3bfd, 0x3b45, 0x3186, 0x37fe, 0x3b92, 0x390e, 0x2d85, 0x34fa, 0x2c58, 0x3ac5, 0x398f, 0x386a, 0x3ae3, 0x2f53, 0x3b4d, 0x3602, 0x3042, 0x353d, 0x3811, 0x3928, 0x2414, 0x3bb8, 0x3841, 0x3990, 0x388a, 0x25d4, 0x3787, 0x39a9, 0x3963, 0x3554, 0x3b41, 0x3921, 0x2938, 0x39cc, 0x34d1, 0x38ec, 0x31ac, 0x3aed, 0x36ca, 0x3a41, 0x3754, 0x3ab4, 0x39ac, 0x387a, 0x3851, 0x3097, 0x3885, 0x2ef9, 0x2530, 0x3a9d, 0x39ec, 0x38ca, 0x3ad4, 0x39ea, 0x37ce, 0x3ac0, 0x2879, 0x3bda, 0x3af5, 0x2eaa, 0x35e9, 0x3a11, 0x3a48, 0x2782, 0x3a7f, 0x3662, 0x3a99, 0x2194, 0x3628, 0x3668, 0x36e5, 0x38ab, 0x3833, 0x30b4, 0x3237, 0x39df, 0x3a63, 0x370d, 0x2c4a, 0x3ae0, 0x3b29, 0x3bba, 0x3b64, 0x260a, 0x38f8, +0x2679, 0x3412, 0x395a, 0x3054, 0x3ac9, 0x3bb3, 0x31a7, 0x38f7, 0x1d33, 0x3aeb, 0x38f5, 0x3649, 0x3aab, 0x3894, 0x353b, 0x3bbf, 0x37e2, 0x3b2d, 0x3a05, 0x3b7f, 0x318f, 0x2487, 0x3a3b, 0x36e8, 0x35d0, 0x2e1b, 0x3a03, 0x3bb9, 0x2d71, 0x32e5, 0x31c0, 0x2a74, 0x3898, 0x3ae0, 0x381b, 0x308d, 0x3afa, 0x2e44, 0x3aa2, 0x39cb, 0x3a19, 0x321f, 0x3975, 0x3a94, 0x20b7, 0x3843, 0x3942, 0x38c2, 0x3587, 0x3ba0, 0x3b5b, 0x3981, 0x3ba0, 0x3988, 0x2fc0, 0x34d2, 0x30ad, 0x3102, 0x394d, 0x38ef, 0x353c, 0x39d3, 0x3b57, 0x36c4, 0x3619, 0x3a4d, 0x382f, 0x35e7, 0x26ce, 0x33c6, 0x25a6, 0x36b8, 0x3b5f, 0x3a6d, 0x34cb, 0x2bb8, 0x368b, 0x3368, 0x312a, 0x3869, 0x37a7, 0x3804, 0x34af, 0x39ff, 0x350d, 0x358e, 0x3a40, 0x349c, 0x3ac3, 0x39fa, 0x3153, 0x38da, 0x390b, 0x30ea, 0x3205, 0x3915, +0x3a69, 0x385c, 0x34dc, 0x2e57, 0x2dff, 0x2a23, 0x2f74, 0x2efc, 0x397f, 0x367e, 0x2932, 0x3565, 0x38f6, 0x3bae, 0x3abe, 0x34cf, 0x39f9, 0x3995, 0x3844, 0x3846, 0x3674, 0x39ab, 0x382b, 0x3aa9, 0x36eb, 0x3a6f, 0x37d9, 0x3804, 0x2c69, 0x3883, 0x367d, 0x3b09, 0x25e5, 0x34d7, 0x3848, 0x310c, 0x3bdf, 0x3890, 0x3623, 0x3951, 0x3a1e, 0x385c, 0x3a27, 0x2747, 0x37f7, 0x344d, 0x2903, 0x3b96, 0x396d, 0x3868, 0x3766, 0x3689, 0x3705, 0x2dc4, 0x39f1, 0x389b, 0x39b0, 0x31b3, 0x3a14, 0x309a, 0x3ba3, 0x32a9, 0x3652, 0x390d, 0x316f, 0x3812, 0x38dd, 0x3473, 0x396a, 0x3b35, 0x3a31, 0x2cb3, 0x1c90, 0x3794, 0x372c, 0x3238, 0x3b57, 0x3516, 0x3b9c, 0x3a83, 0x386e, 0x3747, 0x353b, 0x31d2, 0x3b04, 0x338e, 0x3802, 0x373c, 0x373c, 0x380f, 0x28c7, 0x3936, 0x37eb, 0x32a6, 0x30cc, 0x3be5, +0x3428, 0x3592, 0x3226, 0x38dd, 0x3823, 0x374e, 0x3ac7, 0x38cb, 0x32a9, 0x354b, 0x3517, 0x2f43, 0x3812, 0x3a7a, 0x3627, 0x3b87, 0x3849, 0x377a, 0x2fae, 0x3bf8, 0x38e2, 0x387d, 0x3bab, 0x3a95, 0x31c0, 0x2be8, 0x30fb, 0x3bd8, 0x3828, 0x2ac0, 0x39ef, 0x3927, 0x2417, 0x34a8, 0x3626, 0x3751, 0x3b5b, 0x3a42, 0x2c4c, 0x3806, 0x358e, 0x34c1, 0x2d4f, 0x3bda, 0x3990, 0x3651, 0x3431, 0x31a2, 0x3379, 0x339a, 0x37cf, 0x3bf3, 0x3ada, 0x384a, 0x373d, 0x38a4, 0x2d47, 0x390a, 0x312a, 0x3adb, 0x3bee, 0x3463, 0x3857, 0x3950, 0x349f, 0x3a8a, 0x3767, 0x3552, 0x2d8a, 0x2cc8, 0x36cd, 0x3510, 0x3a04, 0x35ac, 0x3b20, 0x3076, 0x3a93, 0x36d0, 0x315a, 0x3af1, 0x355d, 0x3b34, 0x3b5c, 0x2247, 0x37c7, 0x3b02, 0x3a5d, 0x3669, 0x282c, 0x3b81, 0x319c, 0x3700, 0x3a0d, 0x33c0, 0x3985, 0x335e, +0x3af9, 0x3733, 0x2f0c, 0x392a, 0x2528, 0x34c8, 0x39e5, 0x3409, 0x3424, 0x389e, 0x358a, 0x3664, 0x3541, 0x38fa, 0x1d31, 0x2d02, 0x3889, 0x3690, 0x3a15, 0x3a4b, 0x364a, 0x3791, 0x3a6f, 0x3aa1, 0x3ab0, 0x39ed, 0x37da, 0x3abc, 0x3b09, 0x376d, 0x2c63, 0x314f, 0x34b9, 0x3142, 0x39cf, 0x3242, 0x384f, 0x3bf9, 0x36a1, 0x358d, 0x3ade, 0x3bc9, 0x347d, 0x3a5a, 0x3b4e, 0x3aa3, 0x39bf, 0x318d, 0x3a37, 0x3833, 0x333b, 0x3bb9, 0x39f4, 0x2ff2, 0x38b3, 0x3508, 0x3817, 0x3bd8, 0x35a8, 0x38b0, 0x3aac, 0x3984, 0x3bff, 0x29ea, 0x34ca, 0x38c6, 0x3885, 0x3bd8, 0x38df, 0x38fa, 0x358e, 0x3528, 0x39e8, 0x2d40, 0x3464, 0x3bac, 0x3ad1, 0x399b, 0x3a77, 0x3bfe, 0x3b52, 0x3934, 0x35ca, 0x3bf7, 0x3852, 0x3858, 0x35a1, 0x3a72, 0x34d7, 0x39e3, 0x2fe5, 0x3b1c, 0x3aee, 0x3bf7, 0x25f0, 0x3881, +0x376e, 0x3833, 0x3ab2, 0x3b59, 0x3b7f, 0x3ac3, 0x3954, 0x302d, 0x3a5d, 0x38f9, 0x3a41, 0x3a0f, 0x33a5, 0x3150, 0x29b7, 0x39aa, 0x35d5, 0x31db, 0x389b, 0x3aa1, 0x3529, 0x3bf1, 0x38de, 0x39a9, 0x321d, 0x35d6, 0x3423, 0x3be2, 0x34b2, 0x3b42, 0x31d8, 0x345b, 0x3a2d, 0x3b72, 0x3a10, 0x338a, 0x3b84, 0x3be8, 0x3810, 0x38a5, 0x3ba8, 0x3921, 0x3ac0, 0x3329, 0x3bca, 0x3bbb, 0x389a, 0x35f3, 0x3908, 0x3927, 0x3534, 0x381b, 0x2d5f, 0x3bef, 0x35f6, 0x3b13, 0x3834, 0x25d5, 0x30f9, 0x397c, 0x31af, 0x3867, 0x2cc7, 0x28ea, 0x3afe, 0x3014, 0x3806, 0x31c4, 0x39fa, 0x3bb6, 0x250c, 0x391b, 0x39a4, 0x37e3, 0x38d9, 0x3747, 0x2b7e, 0x3939, 0x32d2, 0x3a48, 0x38c3, 0x312d, 0x3a2d, 0x3afd, 0x3101, 0x3b28, 0x370d, 0x2fce, 0x32fc, 0x3840, 0x39f5, 0x37b6, 0x39df, 0x1d49, 0x3b9b, 0x3694, +0x3580, 0x392f, 0x3953, 0x3ac8, 0x3af3, 0x33cd, 0x39a0, 0x3672, 0x373d, 0x236a, 0x3935, 0x39fa, 0x348e, 0x3759, 0x348d, 0x36e7, 0x391b, 0x3b46, 0x386c, 0x3515, 0x389f, 0x3b21, 0x3aef, 0x3bf5, 0x3a2d, 0x3428, 0x39d1, 0x3931, 0x39af, 0x38ba, 0x2cbf, 0x3bf4, 0x31be, 0x2dd5, 0x350d, 0x3af6, 0x2044, 0x36ae, 0x3810, 0x3690, 0x31f8, 0x2ed1, 0x3a21, 0x3b7b, 0x3a96, 0x355c, 0x3704, 0x34e4, 0x38d3, 0x2f90, 0x3902, 0x37b1, 0x3b2a, 0x3a69, 0x3792, 0x338b, 0x3006, 0x345e, 0x3530, 0x3b40, 0x3733, 0x2c59, 0x3bf1, 0x39e6, 0x3b20, 0x3bc1, 0x3b71, 0x37fc, 0x363f, 0x36f9, 0x3b39, 0x380a, 0x3516, 0x3814, 0x34b8, 0x3493, 0x3bbe, 0x328b, 0x3709, 0x393b, 0x373e, 0x3929, 0x37c0, 0x3464, 0x39f8, 0x35d1, 0x364e, 0x39ed, 0x3806, 0x398c, 0x39e1, 0x3be5, 0x3317, 0x3482, 0x3b35, 0x3bc5, +0x2be7, 0x3026, 0x3b12, 0x3476, 0x3967, 0x3767, 0x3a01, 0x385a, 0x30f5, 0x2ccc, 0x349d, 0x2811, 0x399c, 0x3afe, 0x39ee, 0x3903, 0x3490, 0x2d4b, 0x367c, 0x361f, 0x3add, 0x312b, 0x3502, 0x3a4b, 0x3b74, 0x38b0, 0x31bd, 0x3327, 0x3a68, 0x3078, 0x3811, 0x3bce, 0x3867, 0x362d, 0x39f7, 0x2c93, 0x325f, 0x3370, 0x3bcf, 0x3b0c, 0x3656, 0x3644, 0x3130, 0x34f1, 0x326f, 0x3ab4, 0x38b5, 0x2e0b, 0x38ec, 0x3b21, 0x3be6, 0x3a39, 0x38f2, 0x3621, 0x3bf7, 0x390d, 0x39ef, 0x2b80, 0x394b, 0x3b3c, 0x31c4, 0x1a0a, 0x354e, 0x3655, 0x3564, 0x2b0e, 0x3072, 0x3838, 0x3190, 0x3b46, 0x3909, 0x31d8, 0x3b8d, 0x3b39, 0x3773, 0x35a3, 0x394f, 0x3971, 0x3919, 0x3848, 0x3a7d, 0x3b3d, 0x357e, 0x2755, 0x3a56, 0x3488, 0x3ac6, 0x3a25, 0x3991, 0x347e, 0x3472, 0x3b22, 0x38c8, 0x3b54, 0x384c, 0x28a2, +0x3b41, 0x3ab1, 0x3a5d, 0x35d6, 0x36e5, 0x3a33, 0x3a55, 0x3457, 0x35b4, 0x34d5, 0x389b, 0x3928, 0x3be7, 0x32d5, 0x3b26, 0x3790, 0x3203, 0x3296, 0x3b45, 0x3bc4, 0x38d4, 0x34f7, 0x3b50, 0x3ab1, 0x36eb, 0x3120, 0x35af, 0x396d, 0x28f5, 0x37f3, 0x3b0b, 0x31a6, 0x3a46, 0x1ce8, 0x38f3, 0x39c2, 0x3970, 0x3bb5, 0x28d7, 0x3b21, 0x39b4, 0x355e, 0x35a6, 0x3bb9, 0x2cc3, 0x38c2, 0x376c, 0x2e88, 0x34b2, 0x3967, 0x3325, 0x3bda, 0x37c6, 0x39dc, 0x3135, 0x3966, 0x22f4, 0x3433, 0x37e1, 0x34dd, 0x3900, 0x3ae7, 0x38ee, 0x3926, 0x2a4a, 0x3a16, 0x3ba9, 0x38de, 0x343a, 0x3a6f, 0x315c, 0x392b, 0x38ce, 0x35c3, 0x3810, 0x3ae9, 0x3627, 0x29b7, 0x2816, 0x289e, 0x3bb0, 0x39d1, 0x335c, 0x39b1, 0x3b48, 0x3614, 0x3581, 0x33df, 0x332b, 0x3750, 0x3438, 0x3309, 0x3854, 0x3830, 0x32e3, 0x3a27, +0x38f4, 0x3074, 0x351c, 0x2b8d, 0x35c2, 0x33dc, 0x3972, 0x39f2, 0x3af7, 0x3b12, 0x3b1a, 0x352d, 0x335e, 0x357a, 0x32e1, 0x3a63, 0x3426, 0x316d, 0x3903, 0x36e4, 0x36cc, 0x35fd, 0x3b29, 0x3304, 0x387e, 0x347d, 0x3af3, 0x33b5, 0x3859, 0x3800, 0x39b1, 0x3ae4, 0x2839, 0x38e6, 0x3341, 0x3346, 0x3ad4, 0x38b2, 0x392b, 0x3bfa, 0x3090, 0x36f1, 0x29b5, 0x2fa6, 0x3bb5, 0x36bc, 0x30c4, 0x38f4, 0x1e3b, 0x34fd, 0x2c4c, 0x3a6b, 0x393c, 0x3aba, 0x3866, 0x356a, 0x3441, 0x3802, 0x367d, 0x3546, 0x380f, 0x38f2, 0x354b, 0x30af, 0x2e2f, 0x37cb, 0x3994, 0x36e3, 0x37a7, 0x3a8c, 0x395c, 0x3aa2, 0x2c2f, 0x35b4, 0x3180, 0x3ad0, 0x3237, 0x3ac6, 0x31f5, 0x3637, 0x398c, 0x3443, 0x3bd6, 0x3b63, 0x35d0, 0x3351, 0x3336, 0x3aa8, 0x3b66, 0x39df, 0x36fe, 0x3477, 0x3823, 0x38ef, 0x399e, 0x394b, +0x3a85, 0x2d22, 0x39b4, 0x3a4e, 0x3334, 0x1c3b, 0x3466, 0x3469, 0x3820, 0x3a70, 0x2d5e, 0x37d9, 0x37bb, 0x3bd8, 0x25ea, 0x3292, 0x3a58, 0x3847, 0x3aea, 0x389d, 0x386e, 0x3870, 0x3bc4, 0x3a95, 0x307f, 0x3928, 0x31c2, 0x38e5, 0x3994, 0x3b83, 0x297a, 0x33c0, 0x3a55, 0x390d, 0x3550, 0x3447, 0x3b6d, 0x2809, 0x3993, 0x2944, 0x3ae1, 0x3845, 0x3703, 0x38fb, 0x3880, 0x3b1b, 0x3312, 0x2d51, 0x2e33, 0x3ba5, 0x3805, 0x3359, 0x3b3c, 0x3663, 0x354f, 0x3904, 0x3787, 0x39ac, 0x3bc4, 0x2f65, 0x3778, 0x3ba8, 0x3100, 0x3840, 0x3b67, 0x3abe, 0x2d5b, 0x391f, 0x3670, 0x39b3, 0x3a4e, 0x3947, 0x2e35, 0x3755, 0x3bb9, 0x31bf, 0x3ba6, 0x3a10, 0x39d1, 0x3aae, 0x3b88, 0x380a, 0x345f, 0x3aeb, 0x3660, 0x373a, 0x2d6f, 0x33b0, 0x3518, 0x3b25, 0x3872, 0x3aab, 0x2ed0, 0x347d, 0x2fd0, 0x38c5, +0x2cda, 0x353c, 0x3866, 0x2332, 0x3bde, 0x3912, 0x3762, 0x3ae3, 0x3a55, 0x39df, 0x32e0, 0x3b63, 0x3ac3, 0x3a85, 0x34e8, 0x38d7, 0x3543, 0x3a1e, 0x36e7, 0x3008, 0x359e, 0x298b, 0x3b6c, 0x3b51, 0x38d1, 0x3444, 0x39ec, 0x391e, 0x3a6d, 0x39e9, 0x3b7c, 0x36bb, 0x21f7, 0x2896, 0x3308, 0x3afc, 0x3879, 0x2cac, 0x2699, 0x3475, 0x331b, 0x340f, 0x373b, 0x3814, 0x3b6d, 0x39bb, 0x2e09, 0x3284, 0x286f, 0x371d, 0x3966, 0x27c2, 0x3ac4, 0x3b92, 0x3ba4, 0x3acb, 0x30b0, 0x3a11, 0x3721, 0x34cc, 0x3b84, 0x3002, 0x38bc, 0x341e, 0x36c3, 0x3bd2, 0x39fe, 0x380f, 0x38c3, 0x3a9c, 0x373a, 0x3a79, 0x3bfa, 0x31c7, 0x340d, 0x3602, 0x38e4, 0x1ddd, 0x38b2, 0x3985, 0x2574, 0x339e, 0x3b39, 0x3765, 0x3369, 0x39b6, 0x3974, 0x3a25, 0x362c, 0x3aeb, 0x3935, 0x3271, 0x2de2, 0x35d5, 0x3b93, 0x32f0, +0x3425, 0x3871, 0x2d6d, 0x3070, 0x319d, 0x33b5, 0x333e, 0x397e, 0x2a76, 0x39eb, 0x3b34, 0x3988, 0x3b40, 0x36de, 0x39a6, 0x38d9, 0x398b, 0x3623, 0x325e, 0x37d1, 0x3406, 0x377f, 0x3a58, 0x3486, 0x3855, 0x3acc, 0x378c, 0x3b1b, 0x3bed, 0x3aae, 0x3998, 0x39dc, 0x38a0, 0x3b74, 0x38a1, 0x2a79, 0x2e26, 0x39fd, 0x377c, 0x39bb, 0x3ad6, 0x1a6c, 0x2e6b, 0x377b, 0x3b5c, 0x39bd, 0x32f6, 0x371a, 0x348d, 0x348b, 0x359c, 0x38c7, 0x3022, 0x389f, 0x3a5b, 0x328d, 0x3158, 0x3206, 0x364d, 0x3a90, 0x36df, 0x3934, 0x3a5e, 0x39e4, 0x3a42, 0x3afe, 0x38d5, 0x36c5, 0x3050, 0x2acf, 0x3a39, 0x29da, 0x365c, 0x364e, 0x2bc, 0x3850, 0x381b, 0x39b2, 0x3643, 0x390a, 0x30da, 0x3243, 0x2dd9, 0x3b6c, 0x38cc, 0x309c, 0x27f0, 0x3b84, 0x3979, 0x3b3e, 0x3b08, 0x376a, 0x390d, 0x2d9e, 0x3527, 0x3a25, +0x33e2, 0x3840, 0x3afd, 0x385b, 0x350a, 0x3b04, 0x377a, 0x38ad, 0x3aec, 0x39d7, 0x38ad, 0x3b9d, 0x37d6, 0x36f1, 0x3586, 0x325c, 0x2cf4, 0x3b30, 0x387d, 0x3a1d, 0x3a29, 0x3048, 0x3bdc, 0x30d7, 0x359a, 0x30c4, 0x3a22, 0x3148, 0x3bd3, 0x3699, 0x353e, 0x398f, 0x36f2, 0x3115, 0x3505, 0x39bc, 0x39b1, 0x37ec, 0x353f, 0x379f, 0x36df, 0x3479, 0x3815, 0x3503, 0x30dd, 0x39c5, 0x3a1e, 0x30a0, 0x385d, 0x3a44, 0x3819, 0x3599, 0x3994, 0x394a, 0x316a, 0x39ab, 0x2c23, 0x3985, 0x3bbe, 0x3bdd, 0x3486, 0x36f7, 0x3559, 0x391b, 0x2642, 0x3a96, 0x3bac, 0x367c, 0x3b59, 0x38f0, 0x268a, 0x3a03, 0x3106, 0x3bd1, 0x3279, 0x36c9, 0x3b40, 0x3750, 0x2e02, 0x3965, 0x3636, 0x3afb, 0x3960, 0x38d6, 0x3a62, 0x2910, 0x3a84, 0x359d, 0x3ad9, 0x33f7, 0x3b5d, 0x26e1, 0x376b, 0x3824, 0x2852, 0x3982, +0x3797, 0x36e3, 0x3924, 0x3947, 0x3b36, 0x361e, 0x376b, 0x365b, 0x37e8, 0x329f, 0x3970, 0x3126, 0x3562, 0x3b17, 0x3aca, 0x3602, 0x3b9d, 0x394a, 0x2388, 0x2b85, 0x3a24, 0x3a66, 0x3648, 0x28d2, 0x3b67, 0x38b8, 0x3b15, 0x352c, 0x3b39, 0x3838, 0x388e, 0x3576, 0x39f5, 0x31f9, 0x35a0, 0x3a41, 0x3afa, 0x3513, 0x3688, 0x3b2b, 0x32b6, 0x32de, 0x3949, 0x3b1e, 0x3a1e, 0x280d, 0x38da, 0x388e, 0x316f, 0x38d4, 0x29c5, 0x3637, 0x34af, 0x2d8c, 0x3872, 0x30ac, 0x396e, 0x38bd, 0x39ab, 0x3b69, 0x3120, 0x355f, 0x2e7f, 0x35ab, 0x3821, 0x2b37, 0x3bc5, 0x3a0a, 0x3572, 0x30b5, 0x399e, 0x2a66, 0x31b8, 0x3abc, 0x3754, 0x36a7, 0x3b8b, 0x347d, 0x3b36, 0x3924, 0x2f95, 0x3ba9, 0x2224, 0x34cd, 0x3aaf, 0x3608, 0x34ce, 0x344b, 0x34b5, 0x3bd8, 0x37d3, 0x3757, 0x2c21, 0x3b8f, 0x38d3, 0x3aa4, +0x39c6, 0x381d, 0x3842, 0x3bd1, 0x3092, 0x35d5, 0x251f, 0x2529, 0x3133, 0x3862, 0x3444, 0x3519, 0x3b60, 0x2fb5, 0x38c7, 0x387e, 0x3138, 0x36a9, 0x353c, 0x3411, 0x3bd3, 0x2a07, 0x3a5c, 0x3826, 0x3228, 0x334d, 0x2f07, 0x2c6a, 0x3b43, 0x3425, 0x3568, 0x382a, 0x348c, 0x3b5f, 0x3745, 0x2ae7, 0x3772, 0x302b, 0x336a, 0x383a, 0x3361, 0x3110, 0x3684, 0x39d1, 0x3151, 0x34f1, 0x295b, 0x26ba, 0x3b1b, 0x38d5, 0x36b1, 0x3069, 0x3bfa, 0x385f, 0x3695, 0x3b50, 0x3be0, 0x3741, 0x3af4, 0x2cd1, 0x3862, 0x352d, 0x3b8d, 0x3800, 0x3868, 0x3931, 0x37f8, 0x3ad0, 0x341d, 0x3507, 0x3602, 0x3831, 0x393b, 0x3695, 0x380e, 0x383f, 0x38de, 0x3954, 0x38b3, 0x20be, 0x2428, 0x2e52, 0x3b5b, 0x20ea, 0x3aa9, 0x3430, 0x3aac, 0x393b, 0x32e7, 0x2d58, 0x366e, 0x32f5, 0x3990, 0x3b9d, 0x2f4c, 0x3420, +0x38d5, 0x31e4, 0x2c0e, 0x3742, 0x3bc0, 0x30f9, 0x3656, 0x3aaa, 0x385e, 0x3908, 0x3584, 0x2814, 0x3891, 0x3553, 0x391c, 0x3330, 0x38e5, 0x1aaf, 0x3be5, 0x3ac7, 0x3936, 0x3bf5, 0x361f, 0x39b3, 0x38c1, 0x394a, 0x39e1, 0x2b67, 0x3585, 0x380e, 0x3344, 0x3001, 0x3983, 0x31ec, 0x3ac2, 0x380a, 0x32c2, 0x34aa, 0x393d, 0x364d, 0x239a, 0x3727, 0x3b5c, 0x3265, 0x2d1f, 0x32dd, 0x3ae3, 0x36a0, 0x3600, 0x38f3, 0x378a, 0x357c, 0x34dd, 0x39a9, 0x3846, 0x2431, 0x3abe, 0x36fa, 0x38bd, 0x3696, 0x2c2e, 0x229d, 0x386f, 0x3a8b, 0x3aa4, 0x34f4, 0x35af, 0x34c1, 0x2222, 0x1820, 0x3a30, 0x38ec, 0x3855, 0x3952, 0x3873, 0x384b, 0x3bb1, 0x35aa, 0x363a, 0x380e, 0x3b3d, 0x397a, 0x38ca, 0x3a88, 0x35de, 0x3bac, 0x3ab4, 0x3654, 0x38f3, 0x2076, 0x3585, 0x300a, 0x3a71, 0x3b90, 0x3a83, 0x3a86, +0x3ab7, 0x3bee, 0x37bd, 0x3b2c, 0x39fb, 0x274a, 0x3a7d, 0x38df, 0x2a8d, 0x3611, 0x34b4, 0x38e4, 0x36f8, 0x3b2a, 0x364b, 0x3ac3, 0x2d73, 0x38e3, 0x2fcd, 0x3af3, 0x359e, 0x3afd, 0x3b13, 0x3a89, 0x379e, 0x35d5, 0x30bc, 0x34ae, 0x3a6a, 0x312e, 0x293a, 0x39df, 0x3a97, 0x39db, 0x3b98, 0x3818, 0x344f, 0x26c9, 0x3a30, 0x3505, 0x3885, 0x3206, 0x38e4, 0x3940, 0x3a5d, 0x3aab, 0x35e7, 0x3458, 0x381d, 0x3959, 0x3930, 0x3476, 0x348f, 0x3469, 0x2e03, 0x3889, 0x3ba1, 0x35ac, 0x3ac1, 0x3bcb, 0x3acc, 0x34d7, 0x38bd, 0x2b4c, 0x21ff, 0x3802, 0x34a4, 0x36f9, 0x352f, 0x394e, 0x3796, 0x2456, 0x38c8, 0x302d, 0x2de8, 0x3539, 0x39e8, 0x3560, 0x3913, 0x3bbf, 0x331a, 0x3969, 0x3a9e, 0x3972, 0x3a32, 0x3a15, 0x386f, 0x3a17, 0x3956, 0x39c3, 0x3762, 0x3b51, 0x32af, 0x3b58, 0x34ff, 0x319d, +0x3431, 0x34fc, 0x3a81, 0x3ada, 0x39e6, 0x3a49, 0x33ad, 0x38c8, 0x33cb, 0x3576, 0x3aaf, 0x34ee, 0x2e14, 0x38d0, 0x39c1, 0x29cb, 0x3112, 0x3593, 0x2f07, 0x2fa0, 0x34c0, 0x366e, 0x3998, 0x3540, 0x37c6, 0x39b7, 0x396d, 0x3319, 0x341e, 0x354a, 0x3773, 0x2c1c, 0x3bfc, 0x381b, 0x3529, 0x37f8, 0x3bbd, 0x37a2, 0x36f1, 0x3870, 0x3a69, 0x3494, 0x3169, 0x3455, 0x356f, 0x32e7, 0x35c0, 0x398e, 0x2c2f, 0x2ffe, 0x3140, 0x39ff, 0x3aae, 0x3bb7, 0x35b8, 0x39b2, 0x3303, 0x3948, 0x3a7f, 0x25f7, 0x3750, 0x357e, 0x3785, 0x3817, 0x3b05, 0x3a90, 0x38ad, 0x376f, 0x3ac5, 0x3a07, 0x3311, 0x3b9b, 0x24d1, 0x3451, 0x32a6, 0x342c, 0x3a8c, 0x360a, 0x36ad, 0x3abf, 0x2116, 0x3bb1, 0x328b, 0x37a9, 0x3aab, 0x39c9, 0x345e, 0x36b0, 0x384c, 0x3bfb, 0x2d31, 0x3a05, 0x3427, 0x3726, 0x3743, 0x3398, +0x3b0a, 0x3b85, 0x33ed, 0x32b0, 0x3a95, 0x2135, 0x3712, 0x2f34, 0x378e, 0x390f, 0x39b1, 0x2ad2, 0x300a, 0x34ec, 0x3a00, 0x20f8, 0x3b47, 0x3861, 0x341d, 0x3015, 0x3959, 0x37c9, 0x2f6c, 0x3758, 0x37e5, 0x353b, 0x38da, 0x39ae, 0x3947, 0x36d7, 0x3284, 0x3bb9, 0x357f, 0x3999, 0x39c2, 0x3889, 0x38b7, 0x3684, 0x355e, 0x390d, 0x3b96, 0x385c, 0x3ba5, 0x36c0, 0x3bbc, 0x37fc, 0x391c, 0x3a42, 0x39ca, 0x34ae, 0x394c, 0x3271, 0x2cd6, 0x343b, 0x2d7b, 0x2eea, 0x38a3, 0x2ca6, 0x3549, 0x3847, 0x3bcb, 0x3adc, 0x2e68, 0x3809, 0x3930, 0x357b, 0x3b89, 0x3b94, 0x3875, 0x3640, 0x387c, 0x376c, 0x33b9, 0x3b7e, 0x384c, 0x3906, 0x3b91, 0x209d, 0x2c43, 0x32cf, 0x3686, 0x310c, 0x3a7a, 0x38ef, 0x3645, 0x354a, 0x3670, 0x3732, 0x37b9, 0x3928, 0x358d, 0x3893, 0x3602, 0x2e3d, 0x2a22, 0x2f70, +0x34c9, 0x38f4, 0x374e, 0x3828, 0x37ff, 0x3723, 0x35b4, 0x34b7, 0x3b94, 0x265a, 0x3658, 0x3938, 0x38f5, 0x3bb9, 0x3960, 0x3b5c, 0x38d3, 0x31ea, 0x3412, 0x3be3, 0x3b95, 0x3a20, 0x353b, 0x39c5, 0x3291, 0x387d, 0x3af8, 0x3915, 0x3af7, 0x3be4, 0x399c, 0x34e5, 0x324b, 0x3838, 0x3914, 0x385e, 0x38cd, 0x39fd, 0x39a0, 0x3495, 0x38a1, 0x382c, 0x2ed2, 0x3866, 0x33d8, 0x3396, 0x3b0c, 0x39c8, 0x314f, 0x346f, 0x3aee, 0x313e, 0x39b8, 0x34fe, 0x3882, 0x36d2, 0x3a8b, 0x3a8e, 0x3ae4, 0x3b31, 0x30da, 0x34e8, 0x38ce, 0x3643, 0x39b6, 0x34fb, 0x38d7, 0x3bde, 0x3ac9, 0x3af2, 0x38fe, 0x275f, 0x3748, 0x30ee, 0x3010, 0x3b23, 0x3a55, 0x3a43, 0x3a23, 0x37eb, 0x38fa, 0x3335, 0x3996, 0x39a0, 0x360f, 0x2630, 0x39f3, 0x3870, 0x383c, 0x384c, 0x3392, 0x3754, 0x3b4f, 0x3bc1, 0x382f, 0x3802, +0x3bb0, 0x36ad, 0x3a3f, 0x389e, 0x2d0c, 0x34b1, 0x3592, 0x3933, 0x25f1, 0x3ac7, 0x308e, 0x36b7, 0x3ab0, 0x2994, 0x38e4, 0x3689, 0x3c00, 0x3441, 0x30f6, 0x3a71, 0x3b19, 0x394e, 0x3826, 0x19a6, 0x3b2a, 0x3594, 0x3893, 0x34af, 0x3b34, 0x3ab3, 0x37e9, 0x3ba1, 0x3b01, 0x29ca, 0x3715, 0x3643, 0x312e, 0x3289, 0x311d, 0x383e, 0x38dc, 0x33a1, 0x384d, 0x3ba6, 0x3982, 0x34a7, 0x3b20, 0x3728, 0x3add, 0x2f89, 0x377b, 0x3a2d, 0x342e, 0x36e5, 0x3aa2, 0x3864, 0x38fe, 0x2d84, 0x3bef, 0x3bcd, 0x3553, 0x3953, 0x37be, 0x394a, 0x3a5f, 0x1d30, 0x3bfb, 0x3737, 0x3aa1, 0x3b6e, 0x3809, 0x3b5f, 0x389b, 0x3905, 0x3b29, 0x387d, 0x3afc, 0x3807, 0x3881, 0x3a2c, 0x37d5, 0x3a76, 0x35c4, 0x39ec, 0x3abf, 0x36ed, 0x3135, 0x381e, 0x3593, 0x3968, 0x2d97, 0x350c, 0x3a61, 0x3550, 0x2bde, 0x3400, +0x35ed, 0x34e7, 0x3846, 0x2e9e, 0x3afd, 0x3658, 0x36c2, 0x3863, 0x30b9, 0x350a, 0x3a30, 0x34cd, 0x3b2c, 0x3061, 0x3bc4, 0x2e78, 0x3475, 0x388a, 0x3678, 0x30c5, 0x38f2, 0x3807, 0x311d, 0x3aad, 0x3804, 0x3a1b, 0x38bf, 0x2c7f, 0x3be8, 0x3523, 0x32d3, 0x3a33, 0x38f1, 0x34af, 0x3797, 0x32e6, 0x3886, 0x33e8, 0x3a63, 0x34d3, 0x3618, 0x3571, 0x3abb, 0x3a0d, 0x39d4, 0x361c, 0x3b81, 0x3598, 0x301d, 0x390a, 0x2876, 0x39db, 0x344c, 0x3518, 0x3825, 0x33a5, 0x392b, 0x3671, 0x39a6, 0x3320, 0x3a67, 0x3447, 0x3a75, 0x34c7, 0x3ba8, 0x3108, 0x394f, 0x3986, 0x2c4d, 0x3856, 0x3b1c, 0x3343, 0x399d, 0x3a25, 0x2f68, 0x3be3, 0x3131, 0x349d, 0x39b0, 0x32d3, 0x305c, 0x3b49, 0x2e61, 0x36e1, 0x3a0c, 0x36cb, 0x3b96, 0x3648, 0x36a2, 0x3879, 0x387f, 0x3aa3, 0x2ac5, 0x30d8, 0x3424, 0x2bc4, +0x39b8, 0x38d0, 0x3bd2, 0x311b, 0x2cff, 0x2e9c, 0x3908, 0x39d9, 0x3628, 0x3c00, 0x39b7, 0x3a20, 0x3a6d, 0x3909, 0x37c2, 0x2c06, 0x3a29, 0x374d, 0x30c7, 0x3204, 0x392c, 0x3af6, 0x30de, 0x35ec, 0x3b48, 0x3b34, 0x38ec, 0x3b9f, 0x3625, 0x1a62, 0x3681, 0x2cbc, 0x39e6, 0x348b, 0x3726, 0x38d1, 0x35df, 0x382b, 0x3bc9, 0x39e9, 0x3a7b, 0x32df, 0x22ec, 0x35fa, 0x3a1d, 0x3b56, 0x37d2, 0x35af, 0x3bb3, 0x35bf, 0x38f2, 0x3090, 0x3163, 0x2ce6, 0x39a1, 0x3aa2, 0x38d3, 0x398d, 0x3a80, 0x35ff, 0x33e6, 0x3a00, 0x35a3, 0x3a52, 0x3175, 0x337b, 0x39c7, 0x399c, 0x3873, 0x390a, 0x39f9, 0x3766, 0x33d1, 0x38fe, 0x3a2b, 0x37ec, 0x39f9, 0x3980, 0x3ac0, 0x309f, 0x3313, 0x3897, 0x34a5, 0x36fb, 0x3725, 0x3a71, 0x3553, 0x3b09, 0x36ad, 0x3923, 0x3bdd, 0x3b9e, 0x2960, 0x3a59, 0x3a20, 0x375d, +0x39b6, 0x31e6, 0x34bc, 0x391e, 0x38cd, 0xca5, 0x360c, 0x35e6, 0x35b5, 0x3be9, 0x3be4, 0x3bea, 0x3741, 0x302e, 0x3557, 0x3bb1, 0x3be4, 0x342c, 0x350c, 0x352b, 0x3825, 0x3b05, 0x309d, 0x38f8, 0x3be3, 0x2d5d, 0x399a, 0x36b9, 0x3924, 0x3936, 0x3a45, 0x3a8f, 0x3853, 0x38a9, 0x381b, 0x3a9a, 0x393e, 0x31df, 0x3855, 0x38da, 0x37c6, 0x3bd8, 0x34fb, 0x2e5f, 0x3450, 0x304e, 0x3990, 0x29e1, 0x373c, 0x39a5, 0x3a5e, 0x3356, 0x2c13, 0x34a0, 0x3185, 0x3a8a, 0x3672, 0x2ee4, 0x2dbc, 0x22ae, 0x3a88, 0x388c, 0x30ce, 0x384d, 0x3453, 0x3ad0, 0x2e7f, 0x367a, 0x34c5, 0x39d6, 0x35de, 0x39fc, 0x3aa8, 0x3667, 0x3bb9, 0x35e7, 0x38c7, 0x2c83, 0x35a3, 0x35d7, 0x1a7c, 0x393e, 0x3588, 0x39dd, 0x3af3, 0x3965, 0x365b, 0x3a7e, 0x38ed, 0x3990, 0x3786, 0x3b07, 0x350e, 0x38b7, 0x357f, 0x3bb6, +0x2de9, 0x2ef1, 0x2cc9, 0x38a5, 0x347b, 0x310a, 0x351d, 0x3a9b, 0x3a68, 0x2228, 0x35d3, 0x338d, 0x3a3a, 0x24ec, 0x3ad0, 0x385a, 0x1c64, 0x39f9, 0x335e, 0x348c, 0x211e, 0x37d4, 0x353b, 0x3290, 0x3b68, 0x2f75, 0x2ff5, 0x3579, 0x3967, 0x3b5a, 0x3982, 0x3950, 0x35e9, 0x3a85, 0x3be5, 0x3252, 0x359b, 0x3799, 0x38ec, 0x3a0e, 0x3a45, 0x2d8e, 0x389d, 0x34d6, 0x3726, 0x3320, 0x3acd, 0x3642, 0x2574, 0x314a, 0x32a5, 0x3898, 0x370a, 0x3941, 0x340a, 0x2e05, 0x28b8, 0x39ad, 0x392e, 0x3821, 0x38d7, 0x3b07, 0x3485, 0x34d1, 0x399c, 0x1844, 0x2c8f, 0x3964, 0x3b56, 0x2dde, 0x2ede, 0x317b, 0x3a44, 0x3901, 0x3844, 0x382e, 0x29e6, 0x35ad, 0x3913, 0x3430, 0x3604, 0x3a5f, 0x3080, 0x3628, 0x3383, 0x3b3d, 0x385a, 0x38e8, 0x3ade, 0x3af3, 0x3a56, 0x3889, 0x2cf5, 0x3a61, 0x3b6a, 0x3b38, +0x2e45, 0x3736, 0x3743, 0x3680, 0x328f, 0x3a88, 0x39bb, 0x36a0, 0x3957, 0x2f27, 0x3a33, 0x3a9e, 0x3a9e, 0x2e09, 0x3154, 0x37b7, 0x3807, 0x3937, 0x390b, 0x3041, 0x3758, 0x39cf, 0x2e66, 0x2bc5, 0x3461, 0x3897, 0x39fd, 0x3b92, 0x36e3, 0x3a20, 0x3a8d, 0x335b, 0x3be1, 0x383d, 0x38ab, 0x3665, 0x3588, 0x3a4b, 0x33d5, 0x341b, 0x3806, 0x38fd, 0x382e, 0x32c1, 0x38d9, 0x2ccb, 0x292d, 0x380f, 0x35a2, 0x3b6e, 0x34af, 0x3889, 0x3109, 0x3480, 0x34bf, 0x3a56, 0x3163, 0x33fa, 0x345a, 0x39bb, 0x3b6e, 0x3a80, 0x36f6, 0x33c8, 0x3b98, 0x3663, 0x3aaf, 0x3926, 0x3a2d, 0x3a11, 0x33ac, 0x37a0, 0x3986, 0x3374, 0x3667, 0x3482, 0x378a, 0x2a39, 0x3535, 0x34f3, 0x3783, 0x36a7, 0x3606, 0x3843, 0x3acb, 0x2dcc, 0x3961, 0x34ed, 0x3890, 0x38e5, 0x3a7c, 0x384c, 0x39bf, 0x3a6b, 0x34a0, 0x361b, +0x2e5e, 0x3650, 0x3417, 0x36e5, 0x3b4c, 0x3892, 0x38ba, 0x32f3, 0x3b80, 0x39ea, 0x3357, 0x3212, 0x3b42, 0x3622, 0x3c00, 0x34c0, 0x38e0, 0x360c, 0x36bc, 0x34b0, 0x3b53, 0x2587, 0x387e, 0x3966, 0x3800, 0x35e2, 0x3917, 0x3be4, 0x378f, 0x2d21, 0x3415, 0x2ea8, 0x34d0, 0x36ac, 0x3a51, 0x3ba5, 0x3b7e, 0x2d48, 0x39c1, 0x30d5, 0x3244, 0x3894, 0x3aaa, 0x3451, 0x3a9f, 0x2e40, 0x3832, 0x35f6, 0x3429, 0x253c, 0x2c2e, 0x3bd6, 0x3a5c, 0x3622, 0x3155, 0x3a50, 0x313f, 0x31dc, 0x3b9d, 0x2d67, 0x3914, 0x38f5, 0x3ab6, 0x3bd3, 0x3754, 0x3683, 0x32b0, 0x31dd, 0x3911, 0x37c2, 0x2b09, 0x33b7, 0x3b7c, 0x344a, 0x2a7c, 0x3350, 0x3792, 0x36ea, 0x3463, 0x3a87, 0x29be, 0x3a23, 0x390d, 0x3b10, 0x381d, 0x3227, 0x38f4, 0x39bc, 0x3a71, 0x375d, 0x349d, 0x271c, 0x3921, 0x2e0a, 0x3b08, 0x3ba3, +0x3a92, 0x3923, 0x3012, 0x3527, 0x2ba3, 0x3aa1, 0x3ba3, 0x349a, 0x3729, 0x393a, 0x2ea9, 0x398a, 0x38a5, 0x3ad5, 0x38e6, 0x3a7b, 0x3783, 0x3822, 0x371a, 0x3247, 0x3af0, 0x3ac9, 0x35f6, 0x39d5, 0x39c3, 0x39bc, 0x3a9e, 0x39a8, 0x3af5, 0x3a01, 0x39ab, 0x35f6, 0x392e, 0x3bca, 0x2f53, 0x3595, 0x34c6, 0x3a96, 0x396f, 0x3515, 0x39c5, 0x37b3, 0x37c4, 0x2f64, 0x37ed, 0x3013, 0x3939, 0x3be7, 0x3a5e, 0x3526, 0x3a32, 0x3a8c, 0x334e, 0x39d6, 0x3b45, 0x395d, 0x3500, 0x375f, 0x2498, 0x3ad9, 0x3a04, 0x3961, 0x3a1e, 0x38cb, 0x383d, 0x35c3, 0x37ec, 0x38ab, 0x3aca, 0x29aa, 0x3480, 0x374c, 0x35d1, 0x33cc, 0x387a, 0x3544, 0x367d, 0x3259, 0x306b, 0x39c9, 0x323b, 0x3a58, 0x3156, 0x353d, 0x323a, 0x2987, 0x31ff, 0x3998, 0x311c, 0x38d0, 0x3a03, 0x38cc, 0x35b5, 0x398b, 0x3a0c, 0x3a96, +0x3ab6, 0x3a1c, 0x3a48, 0x3974, 0x3815, 0x368a, 0x36d5, 0x37aa, 0x345b, 0x3bd3, 0x3b1f, 0x3167, 0x2ecf, 0x3a80, 0x3636, 0x3a8e, 0x39d3, 0x3a1a, 0x3087, 0x3823, 0x3b9c, 0x3969, 0x2fb9, 0x3bb8, 0x39c5, 0x3991, 0x3392, 0x38f2, 0x3939, 0x2c68, 0x3b0a, 0x383a, 0x3bd7, 0x3a74, 0x3956, 0x3465, 0x39f3, 0x3880, 0x39bc, 0x39c5, 0x35e4, 0x3738, 0x3856, 0x399b, 0x3bda, 0x3366, 0x31a0, 0x3868, 0x3aa3, 0x38bd, 0x305a, 0x3743, 0x3a85, 0x2336, 0x39eb, 0x2d06, 0x37df, 0x3852, 0x3b46, 0x302c, 0x3a1e, 0x3b46, 0x3068, 0x3bd6, 0x381d, 0x31f6, 0x3491, 0x3848, 0x3315, 0x38c7, 0x3600, 0x3b9d, 0x38b2, 0x3977, 0x388c, 0x3ac2, 0x37ee, 0x35c4, 0x3b45, 0x374a, 0x3355, 0x1dbb, 0x38ec, 0x3003, 0x3a97, 0x311f, 0x3749, 0x2b59, 0x3842, 0x34a9, 0x3561, 0x3b07, 0x3a4a, 0x292f, 0x3961, 0x3546, +0x35dd, 0x3966, 0x2c7d, 0x3833, 0x285f, 0x20f2, 0x3a12, 0x392b, 0x2bae, 0x2fa6, 0x3a36, 0x303c, 0x3303, 0x2bc6, 0x3b94, 0x3a0e, 0x3ae2, 0x3a3c, 0x315c, 0x37bb, 0x3452, 0x3267, 0x2731, 0x3985, 0x3bcf, 0x397e, 0x2fae, 0x28b1, 0x39cc, 0x3536, 0x37a1, 0x3aa3, 0x396b, 0x2c59, 0x3bbf, 0x303c, 0x3bcf, 0x3a8e, 0x3afc, 0x3ab1, 0x2943, 0x3a17, 0x3552, 0x2f57, 0x3353, 0x3512, 0x2e78, 0x3b53, 0x388e, 0x399c, 0x336e, 0x38d4, 0x3849, 0x32b1, 0x316a, 0x2877, 0x2feb, 0x35b9, 0x375d, 0x29fa, 0x3ad2, 0x3569, 0x3981, 0x3455, 0x3847, 0x3a81, 0x3514, 0x29d0, 0x3137, 0x39ba, 0x3b1a, 0x2dd4, 0x383f, 0x39f7, 0x37f6, 0x3964, 0x371c, 0x39e4, 0x3136, 0x35da, 0x3b2f, 0x3946, 0x36dd, 0x3801, 0x3927, 0x2614, 0x2ca7, 0x39ae, 0x3401, 0x3242, 0x3a91, 0x3a1d, 0x3790, 0x333f, 0x3bb9, 0x3a1d, +0x3be5, 0x39e1, 0x35f3, 0x38fd, 0x3726, 0x3946, 0x3baf, 0x3a2f, 0x15e0, 0x318b, 0x359c, 0x2fbf, 0x3060, 0x3a09, 0x35c9, 0x39e2, 0x317e, 0x25ec, 0x3546, 0x3254, 0x36e9, 0x374c, 0x35c0, 0x3787, 0x3b82, 0x3727, 0x34a8, 0x3820, 0x3aee, 0x3814, 0x33da, 0x357f, 0x2f56, 0x3231, 0x3ba0, 0x35e4, 0x3998, 0x3609, 0x3979, 0x3311, 0x33e8, 0x39bd, 0x39f0, 0x3a32, 0x31dc, 0x3aee, 0x310e, 0x3843, 0x38c1, 0x382a, 0x382f, 0x3b24, 0x335c, 0x383b, 0x24f4, 0x371c, 0x3162, 0x2dce, 0x3ae6, 0x2d1e, 0x3a20, 0x39e9, 0x39c5, 0x219a, 0x37d4, 0x34fe, 0x14f6, 0x2e13, 0x3949, 0x3b98, 0x3a42, 0x3aee, 0x298f, 0x3740, 0x28e0, 0x3854, 0x3925, 0x3951, 0x3426, 0x3b4a, 0x3043, 0x345d, 0x3aec, 0x3b89, 0x378c, 0x355a, 0x3287, 0x340c, 0x35fb, 0x2f7d, 0x3839, 0x383a, 0x3a66, 0x388c, 0x36b3, 0x3908, +0x3323, 0x35b2, 0x3823, 0x3ad3, 0x3b52, 0x3634, 0x3a70, 0x3b37, 0x2d59, 0x3893, 0x3978, 0x3515, 0x2733, 0x399b, 0x3a86, 0x3b9c, 0x3582, 0x38e0, 0x389d, 0x3b34, 0x2d41, 0x31d7, 0x2db9, 0x3474, 0x35f6, 0x38fa, 0x3296, 0x3a85, 0x3102, 0x3129, 0x38e1, 0x39d4, 0x36ec, 0x2fea, 0x3a44, 0x3393, 0x39e0, 0x3613, 0x3bc1, 0x3145, 0x23d7, 0x3a17, 0x3515, 0x3845, 0x38f7, 0x33ee, 0x3b6f, 0x38f9, 0x38c7, 0x3489, 0x352b, 0x3b74, 0x39ab, 0x32e2, 0x37be, 0x38e6, 0x34e1, 0x31a5, 0x3be8, 0x2b0f, 0x3b16, 0x3a43, 0x3ae7, 0x39a2, 0x36a2, 0x33a5, 0x3160, 0x33c8, 0x30de, 0x38d9, 0x33f6, 0x35b0, 0x2982, 0x38e6, 0x3ae7, 0x3bca, 0x3911, 0x397b, 0x3596, 0x3790, 0x38eb, 0x3aa2, 0x38f6, 0x381f, 0x398e, 0x343b, 0x39ef, 0x39a3, 0x35f2, 0x2c2c, 0x39e2, 0x3b7f, 0x3858, 0x3b83, 0x3b02, 0x33df, +0x379c, 0x3ae9, 0x340b, 0x368f, 0x3a50, 0x38a6, 0x3aa2, 0x3bd6, 0x3855, 0x3841, 0x3410, 0x348d, 0x3625, 0x38a0, 0x3bdc, 0x34e3, 0x38f6, 0x3274, 0x3a03, 0x3adc, 0x35df, 0x39f5, 0x38b4, 0x38cc, 0x384d, 0x394f, 0x3597, 0x3a9c, 0x3767, 0x3b65, 0x39f5, 0x3857, 0x38c2, 0x3b12, 0x3580, 0x32b0, 0x3595, 0x3723, 0x3b92, 0x347f, 0x3526, 0x377d, 0x35c3, 0x354b, 0x3651, 0x3ae9, 0x38c7, 0x3bc0, 0x30d2, 0x395a, 0x34f2, 0x370d, 0x3748, 0x35fb, 0x3401, 0x34e8, 0x3931, 0x3a34, 0x381e, 0x3886, 0x3afc, 0x3bbc, 0x3af0, 0x3a9c, 0x3a5b, 0x34ef, 0x3979, 0x3ab0, 0x31f2, 0x34f8, 0x1c09, 0x3a9c, 0x36a0, 0x3af7, 0x3b87, 0x3745, 0x39b8, 0x3582, 0x3be2, 0x3bd6, 0x373f, 0x3552, 0x31c1, 0x3a29, 0x2f37, 0x363b, 0x3a9d, 0x39ee, 0x3aa7, 0x3a03, 0x3551, 0x39ce, 0x3a95, 0x3894, 0x32d1, 0x36f2, +0x385b, 0x342c, 0x3643, 0x3be4, 0x3b88, 0x3b64, 0x3975, 0x3142, 0x3583, 0x2f10, 0x34bb, 0x3b4d, 0x3924, 0x2609, 0x3929, 0x274b, 0x3476, 0x3bfd, 0x3abd, 0x3874, 0x33cf, 0x3756, 0x3820, 0x31a3, 0x35dd, 0x39a3, 0x3359, 0x397e, 0x3a12, 0x3ad6, 0x3a25, 0x38ab, 0x392c, 0x3bca, 0x38a9, 0x2f91, 0x381c, 0x29fb, 0x390e, 0x34f7, 0x3a14, 0x39fa, 0x3104, 0x3488, 0x326e, 0x3593, 0x3b50, 0x2e3d, 0x3423, 0x3919, 0x38db, 0x308b, 0x3883, 0x3ba9, 0x38e2, 0x3b74, 0x2b9d, 0x303d, 0x35ef, 0x29a3, 0x364d, 0x2fb5, 0x3991, 0x3a6a, 0x3bf5, 0x391f, 0x373f, 0x3a0a, 0x3a6f, 0x3ad6, 0x35ba, 0x3889, 0x3982, 0x3b8b, 0x3a43, 0x3bfb, 0x3355, 0x3591, 0x39de, 0x34b8, 0x3b76, 0x2a30, 0x30cc, 0x33d3, 0x2f46, 0x380e, 0x3b6e, 0x3576, 0x388b, 0x3b42, 0x35de, 0x39ab, 0x32f3, 0x35dc, 0x3594, 0x3184, +0x3b0c, 0x3478, 0x3b70, 0x389e, 0x3a28, 0x3bf3, 0x3350, 0x35fc, 0x396f, 0x3a40, 0x3242, 0x3a86, 0x3bd1, 0x314b, 0x2e15, 0x394f, 0x391b, 0x3763, 0x31e4, 0x3908, 0x3b48, 0x39e5, 0x3aca, 0x3a5b, 0x3626, 0x37fa, 0x381c, 0x3867, 0x342c, 0x3842, 0x3b77, 0x3ad7, 0x39a8, 0x3867, 0x3b9c, 0x3938, 0x3969, 0x2f52, 0x3a11, 0x3982, 0x3963, 0x3873, 0x3278, 0x3193, 0x369e, 0x3848, 0x3a63, 0x399a, 0x3ba0, 0x39c1, 0x3987, 0x3595, 0x2993, 0x3517, 0x31f2, 0x35a9, 0x3628, 0x3a6b, 0x3bf2, 0x3a75, 0x3129, 0x3460, 0x38d0, 0x370e, 0x3a52, 0x381a, 0x3b57, 0x388c, 0x3a87, 0x2c5a, 0x3ac9, 0x3686, 0x2023, 0x2fcb, 0x2845, 0x36f2, 0x3ac6, 0x2f91, 0x2a3b, 0x37bc, 0x3865, 0x3b91, 0x3887, 0x3b8b, 0x2edc, 0x38e1, 0x3465, 0x348f, 0x3bfb, 0x393a, 0x3b42, 0x394e, 0x2f39, 0x364b, 0x37a7, 0x3b51, +0x3810, 0x35e7, 0x388f, 0x38fc, 0x3740, 0x322e, 0x2f12, 0x39d5, 0x3834, 0x366f, 0x2c74, 0x35da, 0x3901, 0x39c1, 0x39f1, 0x381a, 0xc05, 0x3541, 0x39d3, 0x326a, 0x3993, 0x3ba8, 0x3bc9, 0x3b2b, 0x390d, 0x3a4b, 0x38db, 0x39a7, 0x3043, 0x345e, 0x2e17, 0x2cd7, 0x38ba, 0x3a26, 0x3a7d, 0x385b, 0x3a40, 0x25b0, 0x3ba4, 0x3b75, 0x30f9, 0x3508, 0x3885, 0x375d, 0x3acf, 0x36fb, 0x334b, 0x3a92, 0x3bbd, 0x3b15, 0x392e, 0x3b14, 0x33b3, 0x3ac3, 0x39f8, 0x35ae, 0x391d, 0x3b24, 0x316a, 0x30e9, 0x3813, 0x3736, 0x3b34, 0x2db4, 0x395a, 0x37ac, 0x3a01, 0x3671, 0x37af, 0x368a, 0x2de1, 0x3a69, 0x3416, 0x3294, 0x344d, 0x393e, 0x399f, 0x1d48, 0x38db, 0x3b08, 0x3944, 0x3a99, 0x39d5, 0x35fb, 0x2828, 0x3a19, 0x38b3, 0x3209, 0x3660, 0x38fa, 0x3a01, 0x3ba5, 0x322e, 0x3048, 0x3bb1, 0x3be6, +0x3b6f, 0x327c, 0x3932, 0x3721, 0x39b5, 0x28b8, 0x3b6d, 0x3a9e, 0x393c, 0x35e6, 0x3b4d, 0x2515, 0x2921, 0x395a, 0x3762, 0x34c7, 0x38ed, 0x3b61, 0x35ab, 0x2d3c, 0x3132, 0x35ef, 0x37e1, 0x37cf, 0x383c, 0x3b5e, 0x3a9d, 0x39af, 0x362e, 0x3b02, 0x3a85, 0x3ad0, 0x3739, 0x38f9, 0x3a16, 0x30e5, 0x3b92, 0x39b6, 0x39c4, 0x3b4d, 0x30c6, 0x35c6, 0x3513, 0x2e7a, 0x32a9, 0x346a, 0x359a, 0x3ae2, 0x3a27, 0x3b87, 0x3934, 0x358e, 0x33cd, 0x37a7, 0x3bbb, 0x383f, 0x357d, 0x3714, 0x35c1, 0x3540, 0x35ff, 0x39a6, 0x3686, 0x39bd, 0x3906, 0x357b, 0x3b22, 0x3be6, 0x38e3, 0x3876, 0x3954, 0x2c83, 0x3acf, 0x3aef, 0x3a67, 0x3548, 0x38d1, 0x359f, 0x3b59, 0x3b61, 0x39c8, 0x392e, 0x39a6, 0x3a3a, 0x3ad5, 0x3831, 0x39ae, 0x3b0e, 0x3b00, 0x3acf, 0x30e1, 0x3751, 0x2f93, 0x39e5, 0x39c3, 0x3928, +0x2df5, 0x36e5, 0x2605, 0x3827, 0x3566, 0x38b3, 0x3345, 0x3869, 0x38e2, 0x31a5, 0x37cf, 0x3b01, 0x3add, 0x2e7e, 0x3573, 0x2f1a, 0x2d92, 0x3a72, 0x3821, 0x313b, 0x3970, 0x3943, 0x3af1, 0x3aeb, 0x37d8, 0x35c7, 0x38a8, 0x3abb, 0x3893, 0x33a0, 0x3a05, 0x3830, 0x37d5, 0x2708, 0x3685, 0x3907, 0x3a07, 0x39f9, 0x3889, 0x2fd1, 0x38c8, 0x3091, 0x3b6a, 0x3332, 0x35f0, 0x36f0, 0x35ce, 0x3b5e, 0x3927, 0x3bf3, 0x392e, 0x39e6, 0x3703, 0x38c6, 0x37db, 0x364c, 0x3984, 0x2bd1, 0x34b3, 0x3873, 0x332b, 0x38a5, 0x2b51, 0x3a1c, 0x3446, 0x2f6a, 0x3975, 0x2f99, 0x38f4, 0x3849, 0x35f2, 0x3734, 0x38da, 0x38b9, 0x39cb, 0x3a6d, 0x39ea, 0x3160, 0x2fde, 0x3acb, 0x2d2d, 0x325b, 0x3a86, 0x3b66, 0x3a07, 0x361c, 0x394a, 0x2b5d, 0x3a45, 0x2dfa, 0x3505, 0x3263, 0x39e5, 0x3655, 0x32de, 0x3295, +0x38c9, 0x2f7b, 0x2f9e, 0x2d42, 0x3b0c, 0x378c, 0x2dac, 0x22ef, 0x3603, 0x396c, 0x3460, 0x3a7a, 0x3b62, 0x3177, 0x3703, 0x2936, 0x39a0, 0x38e7, 0x3b0d, 0x331e, 0x34cb, 0x39f3, 0x3138, 0x3a4d, 0x35d5, 0x399f, 0x3229, 0x39d3, 0x385c, 0x28ea, 0x3895, 0x3653, 0x3561, 0x3927, 0x35b6, 0x34b7, 0x3983, 0x2d4f, 0x2ad7, 0x3562, 0x324b, 0x29e0, 0x3928, 0x3a3d, 0x3aa2, 0x3128, 0x357a, 0x3a20, 0x3b17, 0x2919, 0x3702, 0x35bd, 0x3578, 0x3a6c, 0x3a68, 0x38e2, 0x3888, 0x38cd, 0x36f9, 0x3164, 0x351b, 0x39c4, 0x219b, 0x301f, 0x31fb, 0x343d, 0x38d5, 0x3900, 0x1dad, 0x3a61, 0x385e, 0x385b, 0x388e, 0x38b1, 0x351e, 0x34dc, 0x35c8, 0x316e, 0x36b7, 0x3beb, 0x3646, 0x2d3d, 0x35ff, 0x33bb, 0x36bf, 0x3adf, 0x3a75, 0x3b1f, 0x3a07, 0x38f1, 0x390a, 0x2e57, 0x27c6, 0x3afa, 0x396a, 0x2d0d, +0x3173, 0x3b83, 0x3ace, 0x3631, 0x3aa6, 0x38b6, 0x37c5, 0x365e, 0x2f2a, 0x3528, 0x3be0, 0x3af3, 0x37e7, 0x3947, 0x292e, 0x3b1b, 0x3959, 0x3082, 0x279b, 0x3a83, 0x3052, 0x3b4e, 0x3948, 0x39e1, 0x3566, 0x38c3, 0x3738, 0x30ee, 0x2731, 0x2ce3, 0x39a0, 0x3b90, 0x36c8, 0x3980, 0x357c, 0x34cf, 0x3a92, 0x3ac1, 0x1fc8, 0x3b89, 0x399c, 0x380f, 0x366e, 0x3767, 0x3650, 0x399b, 0x3413, 0x357b, 0x3610, 0x3a32, 0x3b9e, 0x3ae2, 0x3a84, 0x399b, 0x3ad1, 0x38a6, 0x3a6e, 0x36d4, 0x3bcc, 0x3043, 0x30ad, 0x35c2, 0x3b07, 0x2a03, 0x3658, 0x39ba, 0x3bf3, 0x3b92, 0x38ad, 0x36dc, 0x398e, 0x35ed, 0x3409, 0x3b31, 0x36d5, 0x3221, 0x3b12, 0x3887, 0x38e0, 0x3550, 0x31fa, 0x2f61, 0x3bd0, 0x34b8, 0x3860, 0x30db, 0x3415, 0x3b42, 0x31cb, 0x39c3, 0x3125, 0x3b66, 0x2468, 0x3a27, 0x3b63, 0x3ae5, +0x3809, 0x37a7, 0x39a2, 0x35c1, 0x3baf, 0x3798, 0x3518, 0x3583, 0x3bfc, 0x3bab, 0x3ab0, 0x3822, 0x3589, 0x33b1, 0x33e7, 0x3899, 0x3b93, 0x36bd, 0x3a87, 0x343c, 0x39a1, 0x3a0a, 0x38c6, 0x3b47, 0x3b64, 0x2d7e, 0x3bfd, 0x2d2d, 0x3a8a, 0x306c, 0x3766, 0x340d, 0x38e7, 0x3617, 0x3bd3, 0x398c, 0x3819, 0x3171, 0x36e6, 0x391f, 0x30d4, 0x39d5, 0x31bb, 0x3833, 0x3012, 0x2db1, 0x3aab, 0x3903, 0x3749, 0x379e, 0x3089, 0x2d69, 0x251b, 0x3448, 0x3418, 0x3b4e, 0x37de, 0x38c6, 0x373b, 0x38aa, 0x3968, 0x3b36, 0x3bfe, 0x38c9, 0x3ada, 0x38ba, 0x354e, 0x3a6e, 0x373d, 0x380c, 0x374b, 0x34d2, 0x35fd, 0x3a5d, 0x3a8d, 0x3a14, 0x3abd, 0x346c, 0x3766, 0x3908, 0x3ad3, 0x3a52, 0x341b, 0x2ad8, 0x3abb, 0x3083, 0x2933, 0x3b56, 0x3a33, 0x3753, 0x3529, 0x3bfd, 0x34a1, 0x3229, 0x3be1, 0x3b71, +0x3a9e, 0x3764, 0x35e7, 0x3831, 0x398a, 0x3877, 0x3aec, 0x39f0, 0x3159, 0x389f, 0x38bc, 0x3878, 0x3bc7, 0x3a01, 0x2896, 0x39af, 0x3784, 0x3260, 0x38d9, 0x3bcf, 0x3bfa, 0x3bc3, 0x2b23, 0x387d, 0x2e5b, 0x35a6, 0x3468, 0x3933, 0x2783, 0x37e8, 0x3af2, 0x332e, 0x3b77, 0x3ac3, 0x3514, 0x3bcd, 0x3bd8, 0x372f, 0x3979, 0x3b30, 0x3993, 0x3888, 0x38d5, 0x3a18, 0x3be4, 0x2b5c, 0x2518, 0x3b55, 0x3bbc, 0x3ba0, 0x2f21, 0x33b6, 0x352c, 0x39b3, 0x3bc7, 0x3a59, 0x38ea, 0x3432, 0x3b9b, 0x3b74, 0x3baf, 0x34a2, 0x3457, 0x3593, 0x3967, 0x3879, 0x3b79, 0x3806, 0x30ca, 0x384c, 0x394c, 0x37a7, 0x21ce, 0x3bbc, 0x305c, 0x3b11, 0x3a1a, 0x3a64, 0x2e80, 0x27ac, 0x3635, 0x361d, 0x2d4c, 0x2264, 0x37ba, 0x165c, 0x2ec8, 0x386b, 0x1b60, 0x3992, 0x357f, 0x2b6b, 0x37da, 0x3942, 0x2d77, 0x2f25, +0x34e0, 0x3809, 0x395b, 0x33dd, 0x38af, 0x3546, 0x2f78, 0x3469, 0x3832, 0x34b7, 0x3839, 0x32c0, 0x3676, 0x3b1f, 0x3872, 0x317b, 0x3403, 0x3444, 0x3438, 0x39cb, 0x3102, 0x3a90, 0x381a, 0x2db5, 0x3b1f, 0x3a44, 0x3aff, 0x354f, 0x3578, 0x3921, 0x38b0, 0x301f, 0x2da3, 0x3062, 0x3596, 0x3a07, 0x382a, 0x37bd, 0x3634, 0x34b1, 0x31a5, 0x353f, 0x33ec, 0x3986, 0x37a7, 0x332d, 0x3874, 0x3046, 0x3b5b, 0x3bf8, 0x37a0, 0x3822, 0x36c4, 0x385c, 0x3868, 0x39ec, 0x3959, 0x39cc, 0x382e, 0x2505, 0x3471, 0x358c, 0x3905, 0x395b, 0x312b, 0x3706, 0x2eec, 0x3a2a, 0x3be9, 0x3a96, 0x2932, 0x3a84, 0x38b2, 0x3884, 0x3655, 0x341f, 0x30b6, 0x363a, 0x3a7d, 0x389b, 0x348c, 0x3b98, 0x38cc, 0x3699, 0x373b, 0x3ad9, 0x377b, 0x33b4, 0x8ef, 0x3a4c, 0x39a2, 0x3bbc, 0x3b01, 0x3a46, 0x3b56, 0x38db, +0x29ab, 0x29e8, 0x3830, 0x39d7, 0x38ff, 0x33a2, 0x2ed0, 0x38e9, 0x3bd2, 0x380b, 0x3940, 0x3b79, 0x3477, 0x36f4, 0x38b8, 0x382d, 0x3838, 0x37f7, 0x219f, 0x34ec, 0x3af5, 0x347d, 0x3a0e, 0x352e, 0x39f3, 0x39ae, 0x3624, 0x1a5a, 0x329c, 0x3a57, 0x254a, 0x361b, 0x3554, 0x3a17, 0x3888, 0x34c7, 0x3628, 0x3321, 0x39de, 0x34f1, 0x386f, 0x37ae, 0x3709, 0x3909, 0x3ae3, 0x3a0e, 0x3495, 0x3bb8, 0x363c, 0x3039, 0x37e4, 0x30ff, 0x164f, 0x37aa, 0x3b7d, 0x2c60, 0x3828, 0x36b8, 0x235d, 0x29b9, 0x3917, 0x24db, 0x3946, 0x2e75, 0x359c, 0x35c3, 0x3b91, 0x35b5, 0x341f, 0x3873, 0x343a, 0x326a, 0x215c, 0x34f3, 0x35a9, 0x2efa, 0x29dd, 0x3b37, 0x3594, 0x305f, 0x3b48, 0x3bc9, 0x3957, 0x3bac, 0x3638, 0x369e, 0x3a45, 0x3173, 0x3bad, 0x354c, 0x32d9, 0x38d2, 0x3b97, 0x3409, 0x3871, 0x3ac2, +0x3739, 0x2c5b, 0x3480, 0x3206, 0x2ede, 0x345e, 0x3806, 0x354c, 0x38ac, 0x3404, 0x35b5, 0x2250, 0x3957, 0x3831, 0x37c2, 0x331a, 0x36c9, 0x3b7c, 0x2a94, 0x3b00, 0x3722, 0x38c4, 0x35b9, 0x3b30, 0x3af4, 0x3758, 0x3290, 0x33a6, 0x31fe, 0x3937, 0x3b74, 0x3010, 0x3076, 0x344d, 0x3773, 0x22d7, 0x25f7, 0x2cde, 0x3999, 0x3859, 0x32b9, 0x3985, 0x3a7e, 0x39eb, 0x35f1, 0x3a36, 0x3735, 0x3337, 0x34da, 0x30ca, 0x3a16, 0x3523, 0x3802, 0x3a05, 0x3609, 0x310b, 0x3770, 0x389c, 0x2d46, 0x382e, 0x332f, 0x2d06, 0x39d5, 0x3b65, 0x3a48, 0x3b45, 0x2d13, 0x389d, 0x27e8, 0x34e9, 0x3a4d, 0x2802, 0x3903, 0x3ac4, 0x3bb7, 0x38ab, 0x3a80, 0x3725, 0x2f22, 0x358e, 0x3b17, 0x3a80, 0x39b0, 0x3bdd, 0x3aa6, 0x326d, 0x34d4, 0x2f73, 0x39c3, 0x297f, 0x210c, 0x2713, 0x3887, 0x3aec, 0x3a48, 0x3a58, +0x35dc, 0x2ea9, 0x3576, 0x3b80, 0x34c8, 0x3bfb, 0x3268, 0x336c, 0x3574, 0x3712, 0x349c, 0x3bb4, 0x3875, 0x3be8, 0x3b9f, 0x3436, 0x31e8, 0x3a22, 0x2d06, 0x3222, 0x3b99, 0x37ef, 0x3511, 0x3a6f, 0x36dc, 0x3b58, 0x353a, 0x3985, 0x3938, 0x3b64, 0x2753, 0x21b5, 0x2bb1, 0x3291, 0x3af9, 0x30eb, 0x3819, 0x376e, 0x357f, 0x2d58, 0x398d, 0x3966, 0x3a12, 0x32f5, 0x3b9e, 0x3bac, 0x38e8, 0x37bc, 0x3106, 0x3750, 0x39f4, 0x3bf3, 0x38d4, 0x3b41, 0x3b4e, 0x3722, 0x3536, 0x35b1, 0x3a85, 0x34f8, 0x3bcf, 0x351f, 0x3953, 0x39d4, 0x3abc, 0x3521, 0x389f, 0x2386, 0x350b, 0x3b1d, 0x35a3, 0x359c, 0x3607, 0x3b0a, 0x385b, 0x3927, 0x39f9, 0x3a58, 0x36c7, 0x3030, 0x3ba8, 0x348e, 0x2f3d, 0x3973, 0x3b3c, 0x3a02, 0x3abd, 0x3a2e, 0x28f3, 0x3b9b, 0x348e, 0x396b, 0x3963, 0x39dc, 0x3a38, 0x3b12, +0x3a7c, 0x378c, 0x3a31, 0x3068, 0x3790, 0x24a7, 0x39b5, 0x3629, 0x34a4, 0x3bd4, 0x357b, 0x3bc8, 0x356b, 0x3a00, 0x3776, 0x32ad, 0x3327, 0x2da5, 0x2f3a, 0x366c, 0x25f9, 0x34e3, 0x3b50, 0x25c1, 0x33c4, 0x3822, 0x34d7, 0x3bed, 0x3a05, 0x3bab, 0x37e9, 0x37fe, 0x3a3c, 0x380d, 0x369f, 0x3b86, 0x2460, 0x39aa, 0x38e7, 0x388b, 0x1e16, 0x2f0c, 0x39a6, 0x3a99, 0x39b7, 0x35b2, 0x3221, 0x3618, 0x3a08, 0x37fc, 0x3481, 0x3ba6, 0x3408, 0x3415, 0x3adf, 0x3b77, 0x19f6, 0x328c, 0x3830, 0x3996, 0x3afb, 0x3528, 0x37e6, 0x39e1, 0x380b, 0x35bc, 0x3b6c, 0x3a1f, 0x385b, 0x34c9, 0x3b7c, 0x35f5, 0x258c, 0x39ec, 0x30f8, 0x322d, 0x3b8a, 0x3159, 0x399f, 0x2f24, 0x346a, 0x3738, 0x39cb, 0x3949, 0x3a2e, 0x3b54, 0x3adf, 0x3b62, 0x3ab1, 0x316d, 0x3aa6, 0x2ec2, 0x38f8, 0x2b3b, 0x2861, 0x3026, +0x2a43, 0x3b6a, 0x3a73, 0x31d4, 0x352e, 0x3461, 0x345c, 0x34f2, 0x2c0e, 0x38b3, 0x2e79, 0x3ba2, 0x2c1e, 0x3314, 0x371a, 0x3973, 0x2f6f, 0x3a7b, 0x3031, 0x39f1, 0x3b78, 0x381b, 0x2d2b, 0x38a6, 0x3864, 0x3a6b, 0x3045, 0x3731, 0x2d60, 0x382b, 0x31e4, 0x3985, 0x3bce, 0x34fe, 0x39f0, 0x381d, 0x35d3, 0x38a2, 0x2eeb, 0x3278, 0x3ace, 0x344a, 0x37a5, 0x341b, 0x3a62, 0x3549, 0x365d, 0x3a82, 0x3842, 0x37de, 0x3b1f, 0x32d3, 0x3b8e, 0x3a44, 0x2cfd, 0x3885, 0x3b2e, 0x34b1, 0x3674, 0x37d8, 0x3bff, 0x3535, 0x3487, 0x2fbe, 0x3abe, 0x3266, 0x31ad, 0x340a, 0x3be2, 0x21a8, 0x3924, 0x39ea, 0x381b, 0x3351, 0x3aa6, 0x3903, 0x38b5, 0x3284, 0x3937, 0x3a34, 0x344a, 0x3a26, 0x312f, 0x39a8, 0x3b8d, 0x373e, 0x3b66, 0x2764, 0x386d, 0x20a8, 0x381c, 0x395e, 0x2ee0, 0x3820, 0x37f5, 0x3bc2, +0x3bd7, 0x37b6, 0x39dd, 0x3b50, 0x3621, 0x3726, 0x3484, 0x360f, 0x39fa, 0x3b62, 0x2318, 0x1a60, 0x35b8, 0x340b, 0x2d49, 0x35ec, 0x3783, 0x3b02, 0x3654, 0x3b4f, 0x337c, 0x3bff, 0x36aa, 0x34cc, 0x38cd, 0x3555, 0x39a0, 0x34da, 0x2840, 0x3897, 0x3bcc, 0x30ff, 0x347f, 0x3acf, 0x39ac, 0x2544, 0x352e, 0x36d2, 0x3643, 0x33f1, 0x3bd2, 0x30b1, 0x38f3, 0x3a47, 0x3863, 0x37e5, 0x2048, 0x388c, 0x2c07, 0x3abc, 0x342a, 0x3986, 0x38ee, 0x39ff, 0x3485, 0x3947, 0x386c, 0x39e0, 0x3a96, 0x3bdc, 0x3158, 0x3ba6, 0x28fc, 0x29dd, 0x3b4e, 0x3a74, 0x3834, 0x3b8d, 0x1c2f, 0x390f, 0x3009, 0x39db, 0x2dc1, 0x3802, 0x3bb2, 0x3428, 0x2dff, 0x3a33, 0x355f, 0x3122, 0x3152, 0x3615, 0x38d7, 0x38f6, 0x3624, 0x3ac4, 0x1527, 0x3a83, 0x2db8, 0x3847, 0x3afe, 0x3a7e, 0x307e, 0x3711, 0x3726, 0x3a68, +0x2b4b, 0x3b91, 0x360b, 0x3b18, 0x375e, 0x2be2, 0x3a8d, 0x2bbb, 0x2f24, 0x3271, 0x2e97, 0x3734, 0x3a56, 0x35d8, 0x355c, 0x1578, 0x33d1, 0x3b60, 0x2793, 0x350b, 0x34c6, 0x38d3, 0x387f, 0x3a3f, 0x3928, 0x3021, 0x384d, 0x36f8, 0x3413, 0x3be3, 0x3817, 0x2280, 0x36ef, 0x3795, 0x385b, 0x3be6, 0x323d, 0x3880, 0x35d7, 0x3201, 0x3329, 0x3a49, 0x36bf, 0x3585, 0x2df9, 0x3897, 0x338c, 0x313c, 0x343c, 0x3ab6, 0x3927, 0x3514, 0x3944, 0x3bfa, 0x347e, 0x32a5, 0x357f, 0x3b96, 0x375b, 0x38cc, 0x3bc9, 0x384c, 0x39ec, 0x35f4, 0x36a6, 0x3bf9, 0x2aa9, 0x3b18, 0x3172, 0x3bc9, 0x3b41, 0x2e94, 0x39cd, 0x368f, 0x3903, 0x2d54, 0x3a45, 0x3378, 0x3a00, 0x392f, 0x39f1, 0x38c5, 0x2b64, 0x390d, 0x3b77, 0x391d, 0x343c, 0x3627, 0x3826, 0x344a, 0x3a0a, 0x37cb, 0x3b06, 0x3b16, 0x3656, 0x3a47, +0x3be3, 0x35b8, 0x37af, 0x3765, 0x38e8, 0x3bf3, 0x344e, 0x39f7, 0x3320, 0x3590, 0x30b6, 0x395c, 0x3abf, 0x34fe, 0x359a, 0x3a55, 0x39fd, 0x3a41, 0x3a8c, 0x382b, 0x3741, 0x36bb, 0x387f, 0x358a, 0x36f9, 0x3bc8, 0x33f7, 0x34bd, 0x3460, 0x3aa3, 0x39dc, 0x31f7, 0x38e1, 0x3b21, 0x384d, 0x38bb, 0x38ce, 0x381d, 0x38d7, 0x349a, 0x2d43, 0x3251, 0x3917, 0x39aa, 0x3871, 0x3a59, 0x3a1c, 0x382c, 0x37c1, 0x3a9e, 0x2f8f, 0x32a5, 0x1583, 0x319d, 0x38ff, 0x393c, 0x38e8, 0x2da0, 0x396a, 0x3987, 0x3887, 0x339d, 0x360c, 0x37d5, 0x3ad6, 0x3986, 0x3559, 0x3a60, 0x392b, 0x2e25, 0x2878, 0x3184, 0x309b, 0x35c8, 0x38cf, 0x358b, 0x3804, 0x3943, 0x312d, 0x3a2a, 0x29ab, 0x3b0d, 0x3959, 0x33c5, 0x3bfe, 0x33f0, 0x3a98, 0x29f1, 0x39ee, 0x37da, 0x3a1c, 0x3896, 0x387b, 0x3a07, 0x2e45, 0x3932, +0x3556, 0x38f6, 0x3826, 0x3299, 0x2e6c, 0x3957, 0x3687, 0x35e5, 0x34ea, 0x34ab, 0x2b4e, 0x3a50, 0x365f, 0x39d6, 0x3968, 0x3ad5, 0x3966, 0x305e, 0x2ef6, 0x3471, 0x343d, 0x3bab, 0x2e4b, 0x3853, 0x3a96, 0x3be5, 0x2a10, 0x3790, 0x34c6, 0x3aa6, 0x3864, 0x3b07, 0x31b7, 0x3b38, 0x25f8, 0x2f15, 0x34dc, 0x3bbd, 0x379f, 0x363d, 0x3b1a, 0x3862, 0x37c5, 0x32a9, 0x3590, 0x3074, 0x31de, 0x30f6, 0x37ed, 0x3722, 0x34fd, 0x3a1f, 0x3580, 0x37c5, 0x3b84, 0x3be4, 0x357c, 0x36ed, 0x30d5, 0x38cd, 0x343e, 0x3831, 0x397f, 0x36db, 0x383a, 0x24e2, 0x3a9d, 0x39dd, 0x36f7, 0x360a, 0x2be4, 0x2dca, 0x321c, 0x361b, 0x378e, 0xe22, 0x2486, 0x3550, 0x3900, 0x34a9, 0x3b2f, 0x3829, 0x1f15, 0x3906, 0x3220, 0x25b1, 0x38b1, 0x398d, 0x382e, 0x298d, 0x39a5, 0x3bb2, 0x31fd, 0x3964, 0x36f6, 0x3835, +0x3907, 0x3b4f, 0x3b17, 0x390d, 0x2b5c, 0x3533, 0x3a28, 0x345e, 0x3954, 0x386e, 0x3b0f, 0x321c, 0x3bce, 0x326d, 0x3a39, 0x3a70, 0x38b1, 0x38c6, 0x3aa4, 0x3aa1, 0x38b6, 0x3a65, 0x3b54, 0x3230, 0x397a, 0x3b63, 0x3869, 0x3003, 0x368e, 0x3a48, 0x3a19, 0x38be, 0x3bb0, 0x2e6e, 0x3ad2, 0x2a53, 0x35d9, 0x39d2, 0x2dd0, 0x32b2, 0x3180, 0x229f, 0x3bcc, 0x38d6, 0x3b74, 0x3bd1, 0x37f7, 0x380d, 0x3928, 0x3b54, 0x35ff, 0x3457, 0x3470, 0x3155, 0x3a41, 0x342c, 0x3af8, 0x2de0, 0x3608, 0x36ab, 0x3bdd, 0x35e3, 0x2aa9, 0x37d0, 0x3a4c, 0x35dc, 0x2e36, 0x37a3, 0x39b3, 0x2e4b, 0x3b11, 0x323a, 0x38de, 0x3ba3, 0x38ff, 0x3823, 0x310d, 0x3b05, 0x39f8, 0x3abf, 0x3bcf, 0x36c4, 0x3ae2, 0x36cd, 0x3a8f, 0x3a91, 0x368f, 0x37aa, 0x3969, 0x39aa, 0x3bff, 0x3422, 0x37c5, 0x35f0, 0x3b46, 0x3a21, +0x384a, 0x3984, 0x3349, 0x2014, 0x38ea, 0x28c4, 0x3520, 0x3a22, 0x3bec, 0x32e8, 0x275e, 0x3b5a, 0x3a2d, 0x3a3f, 0x3690, 0x321c, 0x3b62, 0x392f, 0x3a2c, 0x36b7, 0x38a2, 0x3205, 0x3520, 0x3b6f, 0x3378, 0x3911, 0x3833, 0x3991, 0x380b, 0x3a4a, 0x38a6, 0x3865, 0x3aa6, 0x38e7, 0x397a, 0x38fa, 0x3b10, 0x3440, 0x39a2, 0x3566, 0x365d, 0x307a, 0x2d18, 0x3978, 0x389c, 0x39f5, 0x38df, 0x29c3, 0x3a62, 0x3b75, 0x39b5, 0x2015, 0x307b, 0x39e1, 0x288f, 0x3936, 0x31ee, 0x3be2, 0x35e1, 0x391f, 0x345d, 0x39ff, 0x390c, 0x32cb, 0x38ce, 0x3441, 0x3a3a, 0x3713, 0x2fce, 0x321b, 0x2deb, 0x34e3, 0x3ade, 0x2a6e, 0x3bff, 0x3882, 0x3bec, 0x3ad9, 0x3abc, 0x3bb4, 0x36d8, 0x3617, 0x3015, 0x3a62, 0x3115, 0x384d, 0x3a19, 0x35cf, 0x3468, 0x300f, 0x371e, 0x34ba, 0x378b, 0x37fb, 0x3af8, 0x2fad, +0x2bed, 0x3854, 0x38ab, 0x3879, 0x2ff5, 0x3808, 0x38d5, 0x3ba2, 0x390c, 0x3ba1, 0x3343, 0x373d, 0x34b8, 0x37b5, 0x3653, 0x2db9, 0x3433, 0x318b, 0x39c9, 0x333d, 0x2ca0, 0x3b89, 0x3002, 0x34f2, 0x3969, 0x3a48, 0x1df8, 0x2421, 0x3b9d, 0x3b5a, 0x398a, 0x394b, 0x2fea, 0x296d, 0x3b39, 0x3696, 0x3b4d, 0x340d, 0x3b7e, 0x39ba, 0x2f44, 0x37af, 0x38e4, 0x3a86, 0x3b2d, 0x3954, 0x2bed, 0x3506, 0x2501, 0x3bc9, 0x3a58, 0x3abb, 0x384d, 0x33d6, 0x34d0, 0x3468, 0x3bbf, 0x3a17, 0x3534, 0x3b31, 0x3a7a, 0x3644, 0x36e3, 0x3a50, 0x2284, 0x3b1e, 0x37ed, 0x3ba9, 0x3919, 0x39d3, 0x3235, 0x3bc0, 0x3938, 0x32ea, 0x32fc, 0x3bc0, 0x3a91, 0x3af2, 0x3410, 0x38b5, 0x2ca8, 0x3097, 0x2b7c, 0x3528, 0x3b69, 0x3602, 0x3637, 0x383d, 0x34a3, 0x3ac4, 0x2c6b, 0x302e, 0x3b38, 0x34a3, 0x3519, 0x3674, +0x2f15, 0x2cb7, 0x3a46, 0x3663, 0x3b63, 0x38b4, 0x3b34, 0x3ba3, 0x2d14, 0x3422, 0x3701, 0x38e1, 0x39fe, 0x3112, 0x38dd, 0x357c, 0x2e9f, 0x35d1, 0x36ec, 0x306e, 0x38ea, 0x36c8, 0x34c7, 0x38e4, 0x3aee, 0x3ab5, 0x355e, 0x395c, 0x242b, 0x3197, 0x3832, 0x3987, 0x3682, 0x38f9, 0x3aaa, 0x209e, 0x35d4, 0x36a0, 0x3779, 0x39ff, 0x33e5, 0x3138, 0x35a6, 0x362f, 0x3b4e, 0x3417, 0x27c8, 0x39db, 0x3004, 0x3b6b, 0x30bd, 0x31e3, 0x3988, 0x32f4, 0x3ac7, 0x305a, 0x248b, 0x2dae, 0x21bf, 0x34c6, 0x2993, 0x3b6b, 0x3530, 0x3acc, 0x3563, 0x2e8c, 0x3492, 0x3954, 0x388b, 0x3b35, 0x3880, 0x38c4, 0x34c6, 0x3bb8, 0x360d, 0x28f6, 0x390a, 0x39e5, 0x2f09, 0x38e5, 0x34ca, 0x3634, 0x38b2, 0x39b7, 0x2d73, 0x396d, 0x3490, 0x39fd, 0x38dd, 0x39b9, 0x3adb, 0x326e, 0x3afc, 0x3bf5, 0x3bfc, 0x2b6a, +0x3440, 0x36eb, 0x32c4, 0x3be7, 0x3215, 0x3a10, 0x2dd5, 0x3999, 0x3bcd, 0x39a9, 0x351a, 0x36ad, 0x3732, 0x28a4, 0x205e, 0x30a4, 0x3a0b, 0x399e, 0x356a, 0x2c98, 0x3912, 0x3471, 0x3b45, 0x38df, 0x3b91, 0x303f, 0x3bf6, 0x374a, 0x3813, 0x3739, 0x30a9, 0x3155, 0x385b, 0x3952, 0x3229, 0x3639, 0x39c8, 0x3827, 0x333c, 0x3978, 0x38be, 0x3a90, 0x35b5, 0x3655, 0x33be, 0x39df, 0x3b24, 0x392a, 0x2bda, 0x3895, 0x3ac0, 0x352c, 0x2c77, 0x3893, 0x3ac3, 0x3305, 0x3699, 0x2a79, 0x3bf9, 0x3821, 0x39fa, 0x38b3, 0x3428, 0x3564, 0x3073, 0x37ba, 0x2877, 0x3b5f, 0x2c54, 0x35da, 0x3a33, 0x37d7, 0x396b, 0x3408, 0x36a3, 0x2d1b, 0x3860, 0x3bf5, 0x36cc, 0x3b43, 0x3846, 0x34ce, 0x3b1d, 0x34ca, 0x351d, 0x323d, 0x37ce, 0x3ac1, 0x35e5, 0x3b80, 0x3b7e, 0x3a78, 0x38e5, 0x3106, 0x3892, 0x35a5, +0x38f9, 0x3ac7, 0x3886, 0x3a8d, 0x3a5c, 0x39f0, 0x2c1e, 0x3ad7, 0x37bf, 0x366d, 0x3715, 0x290c, 0x320b, 0x3639, 0x3442, 0x33eb, 0x3602, 0x2b7b, 0x344e, 0x3906, 0x3780, 0x372b, 0x39f5, 0x39d7, 0x3742, 0x35d3, 0x3672, 0x2d25, 0x397c, 0x3953, 0x3970, 0x37d2, 0x38f2, 0x3790, 0x30c7, 0x3417, 0x31e2, 0x3b53, 0x3587, 0x3ad8, 0x3875, 0x3908, 0x2c27, 0x33b7, 0x3ad5, 0x3641, 0x3bcb, 0x3b70, 0x3b87, 0x346d, 0x397f, 0x25be, 0x3137, 0x3946, 0x36c4, 0x3b67, 0x3a20, 0x36e7, 0x31b1, 0x3948, 0x3bf5, 0x2b26, 0x34fe, 0x3522, 0x30e8, 0x2630, 0x37ff, 0x368f, 0x389e, 0x2d92, 0x37b4, 0x39b1, 0x3532, 0x39cf, 0x39ae, 0x3a2f, 0x3862, 0x3656, 0x39cb, 0x3a84, 0x37e3, 0x3b06, 0x3901, 0x2ccb, 0x2b4e, 0x348b, 0x3abf, 0x3a1f, 0x2e1e, 0x2d75, 0x39e5, 0x3143, 0x39ff, 0x38c2, 0x3ba0, 0x3a64, +0x3969, 0x2ffd, 0x39fd, 0x399d, 0x3863, 0x3896, 0x3ab1, 0x3815, 0x3bd8, 0x34fb, 0x3419, 0x3bf7, 0x38cc, 0x3659, 0x2bbc, 0x3bb0, 0x3abb, 0x3554, 0x394a, 0x3ad8, 0x2ea5, 0x3bf6, 0x37bb, 0x2363, 0x3aef, 0x36dc, 0x2dfb, 0x3721, 0x3558, 0x390c, 0x36df, 0x2ff3, 0x3b70, 0x266e, 0x3b66, 0x3957, 0x2884, 0x34e4, 0x3589, 0x3864, 0x3a4b, 0x30d7, 0x3611, 0x34ec, 0x36d2, 0x37f9, 0x3abe, 0x2be6, 0x39ed, 0x336a, 0x3aba, 0x396c, 0x3838, 0x23cb, 0x3bbb, 0x3944, 0x2f70, 0x2d41, 0x3b28, 0x3b81, 0x305c, 0x3a88, 0x38a6, 0x3829, 0x33c9, 0x34e0, 0x3a41, 0x346a, 0x3b1b, 0x378f, 0x3a1a, 0x395f, 0x3ba3, 0x3072, 0x3918, 0x302d, 0x3949, 0x3a56, 0x37ac, 0x3807, 0x3b7f, 0x3461, 0x3a65, 0x349a, 0x3b40, 0x2c4d, 0x39d3, 0x3b6e, 0x2f82, 0x3797, 0x3bdb, 0x3b73, 0x30ee, 0x3b5a, 0x2fa1, 0x3be4, +0x3b02, 0x38ec, 0x3b86, 0x3569, 0x3bef, 0x3029, 0x3368, 0x3ad9, 0x2e8e, 0x3bd8, 0x34cb, 0x2db1, 0x3aa2, 0x38da, 0x2ca5, 0x3ad4, 0x3842, 0x3a34, 0x3777, 0x3a3d, 0x3b37, 0x3bc7, 0x32ef, 0x3bd1, 0x3bd9, 0x34b4, 0x301f, 0x38af, 0x235f, 0x3595, 0x3a7d, 0x3a9a, 0x3b4b, 0x2801, 0x318e, 0x2ce5, 0x39ab, 0x39d5, 0x3986, 0x3823, 0x2b17, 0x395e, 0x35e3, 0x3740, 0x39e9, 0x3882, 0x384c, 0x36b7, 0x3426, 0x396b, 0x3b1d, 0x2c8e, 0x3bb6, 0x30a8, 0x37b3, 0x35f6, 0x3a37, 0x367f, 0x3877, 0x342f, 0x3939, 0x317c, 0x38b9, 0x3b47, 0x3437, 0x3533, 0x3ba2, 0x3b25, 0x3b39, 0x36d3, 0x34b1, 0x39b0, 0x30f6, 0x349a, 0x1e90, 0x3a7f, 0x3559, 0x37ed, 0x3aa9, 0x360f, 0x3445, 0x3256, 0x3925, 0x3974, 0x3897, 0x3ab0, 0x3410, 0x36d2, 0x367d, 0x2f29, 0x3917, 0x34d4, 0x3996, 0x3450, 0x3486, 0x3b67, +0x2c33, 0x3407, 0x3708, 0x321b, 0x39aa, 0x388f, 0x3427, 0x39c1, 0x3990, 0x3a24, 0x3970, 0x3bb4, 0x34be, 0x366e, 0x3bfc, 0x3748, 0x3bcc, 0x2d09, 0x394d, 0x398c, 0x3b19, 0x3855, 0x3954, 0x3268, 0x32ae, 0x3a02, 0x39e1, 0x3122, 0x3a60, 0x3b17, 0x3be2, 0x3b90, 0x36a0, 0x3962, 0x3b1d, 0x3871, 0x3368, 0x3114, 0x355d, 0x39ea, 0x3a34, 0x35dd, 0x3976, 0x3b29, 0x239b, 0x3576, 0x2bf6, 0x35f5, 0x314f, 0x3af9, 0x3535, 0x3a04, 0x3b55, 0x3a1c, 0x1f50, 0x348a, 0x3ab2, 0x39d1, 0x3bad, 0x255b, 0x344f, 0x24a5, 0x29c8, 0x38aa, 0x3a5f, 0x34b3, 0x395e, 0x35b9, 0x3a6b, 0x3ad1, 0x357f, 0x38c1, 0x37c8, 0x3b16, 0x31cb, 0x3464, 0x3a8b, 0x39ce, 0x3592, 0x3a6c, 0x39a6, 0x303b, 0x34eb, 0x3019, 0x3a0a, 0x3996, 0x3a65, 0x3bb8, 0x3804, 0x2a64, 0x3481, 0x3452, 0x39e7, 0x3be7, 0x34e4, 0x39ae, +0x3a52, 0x3a35, 0x3365, 0x35c6, 0x1e02, 0x2e5d, 0x399f, 0x375a, 0x3b3f, 0x3a1d, 0x34a7, 0x37fd, 0x34f5, 0x3a0f, 0x2909, 0x2ece, 0x350b, 0x38e1, 0x3a4e, 0x2c7f, 0x384d, 0x3aab, 0x2fc3, 0x3852, 0x3473, 0x3936, 0x359c, 0x3750, 0x3602, 0x36c7, 0x3815, 0x3790, 0x3980, 0x3544, 0x39b9, 0x3bcd, 0x3c00, 0x3560, 0x3aaa, 0x3b5a, 0x3301, 0x2c5a, 0x3a33, 0x2ccf, 0x3a7e, 0x364c, 0x393c, 0x34a1, 0x2da5, 0x372d, 0x350b, 0x3977, 0x37f4, 0x37d6, 0x3536, 0x3861, 0x360a, 0x3abb, 0x3871, 0x389e, 0x383e, 0x3b3e, 0x2744, 0x33d3, 0x3b94, 0x3028, 0x3bb7, 0x3736, 0x2da7, 0x2b10, 0x3a43, 0x345c, 0x38ac, 0x3574, 0x3689, 0x350d, 0x3bb1, 0x3acc, 0x38eb, 0x345f, 0x39f8, 0x325c, 0x36d3, 0x30a4, 0x3b49, 0x2b46, 0x3692, 0x3a37, 0x3788, 0x358d, 0x391b, 0x3872, 0x3632, 0x3ae4, 0x3b05, 0x35e4, +0x39ac, 0x34fc, 0x37e4, 0x3b1b, 0x380e, 0x2d0a, 0x38e3, 0x394b, 0x2c45, 0x3bcf, 0x3b0f, 0x38a0, 0x3456, 0x3668, 0x38ce, 0x3992, 0x38c0, 0x35fa, 0x320a, 0x38d9, 0x3bb9, 0x3334, 0x396b, 0x398f, 0x3854, 0x3bbf, 0x34c2, 0x2ae6, 0x3808, 0x3625, 0x29bb, 0x3aec, 0x246c, 0x3573, 0x3ae7, 0x3879, 0x3bdf, 0x2c64, 0x33f4, 0x3a63, 0x39c0, 0x3a35, 0x38f8, 0x38c6, 0x3b30, 0x3a3b, 0x2ec2, 0x32da, 0x316d, 0x2136, 0x3be5, 0x332b, 0x36c6, 0x38db, 0x3058, 0x2d9e, 0x37f9, 0x3733, 0x3ba2, 0x1d40, 0x339d, 0x2d02, 0x39e3, 0x3952, 0x380f, 0x3a19, 0x3795, 0x3799, 0x3547, 0x3b2a, 0x37c2, 0x3958, 0x39d1, 0x3303, 0x3612, 0x3aa8, 0x3ac2, 0x38f3, 0x2d4a, 0x37e8, 0x37e4, 0x39c1, 0x3bab, 0x36da, 0x3809, 0x2fe2, 0x3bd9, 0x3328, 0x397b, 0x3456, 0x324e, 0x34c7, 0x37d2, 0x3017, 0x3a40, 0x2c48, +0x39cc, 0x2c1f, 0x3a56, 0x3a9b, 0x3987, 0x2d9c, 0x38db, 0x39c4, 0x3a54, 0x373c, 0x367c, 0x3b9d, 0x38af, 0x3649, 0x38bc, 0x382e, 0x2f5f, 0x34b9, 0x2d83, 0x3720, 0x3b84, 0x39f7, 0x38b1, 0x3600, 0x3ba5, 0x3880, 0x39d6, 0x33af, 0x3bcd, 0x3bc0, 0x38aa, 0x277a, 0x3548, 0x2f9b, 0x3521, 0x3a8d, 0x3622, 0x2fd5, 0x35ca, 0x3405, 0x3399, 0x3428, 0x3ac0, 0x34e7, 0x3866, 0x3454, 0x3631, 0x2247, 0x34a1, 0x398b, 0x388d, 0x39cb, 0x3461, 0x3937, 0x351e, 0x3b71, 0x36a4, 0x3a61, 0x3ac2, 0x3b05, 0x39b4, 0x3b1c, 0x3bdf, 0x3835, 0x3398, 0x3931, 0x38c3, 0x3922, 0x292f, 0x39a7, 0x3688, 0x3817, 0x32d1, 0x37e9, 0x382b, 0x355c, 0x39a1, 0x38cc, 0x36ee, 0x35c6, 0x395f, 0x2c4a, 0x39db, 0x29f5, 0x3886, 0x3b23, 0x38db, 0x3bc0, 0x345a, 0x39da, 0x3ac1, 0x3b5f, 0x3ae9, 0x368f, 0x397e, 0x3b89, +0x3805, 0x3adf, 0x3610, 0x3a37, 0x3947, 0x3618, 0x31d9, 0x3b3a, 0x3a13, 0x376f, 0x3141, 0x3b63, 0x39ce, 0x3ad7, 0x28dc, 0x340b, 0x30e4, 0x35e0, 0x354f, 0x387c, 0x37fa, 0x3455, 0x38b9, 0x3726, 0x2d54, 0x3338, 0x343a, 0x3a7c, 0x24e3, 0x3892, 0x3a8e, 0x3a8f, 0x37a8, 0x39e6, 0x398a, 0x3b42, 0x3360, 0x3a57, 0x38e5, 0x3afb, 0x3719, 0x36cf, 0x387c, 0x3a4e, 0x2edd, 0x3a36, 0x25b5, 0x3135, 0x346b, 0x3b0e, 0x2f3a, 0x2ee6, 0x384b, 0x3aab, 0x3b0b, 0x34e7, 0x30ea, 0x34e8, 0x38ef, 0x3899, 0x387a, 0x3786, 0x2456, 0x2ccb, 0x3af0, 0x3699, 0x35d2, 0x379d, 0x39bd, 0x36f8, 0x27a8, 0x397a, 0x2511, 0x35a2, 0x3a21, 0x3848, 0x27c8, 0x20df, 0x3a83, 0x3bb3, 0x2044, 0x38ec, 0x3095, 0x39cf, 0x2f28, 0x3bd6, 0x3939, 0x360c, 0x2d7b, 0x389c, 0x3585, 0x3bcc, 0x11d9, 0x3a41, 0x3591, 0x3813, +0x38ae, 0x3998, 0x3a8d, 0x31c7, 0x3af7, 0x3392, 0x3586, 0x3881, 0x3a64, 0x3b82, 0x3a29, 0x3497, 0x3b46, 0x3083, 0x3523, 0x3685, 0x3bb9, 0x3575, 0x317b, 0x38da, 0x3b2a, 0x38cc, 0x3764, 0x3103, 0x396e, 0x3bad, 0x35e5, 0x3a46, 0x3b72, 0x37d0, 0x3359, 0x3b8e, 0x3845, 0x2fc1, 0x2b03, 0x3837, 0x3186, 0x366f, 0x185a, 0x2ceb, 0x36be, 0x390a, 0x3513, 0x31d2, 0x357a, 0x3769, 0x392e, 0x39cb, 0x31a1, 0x3197, 0x3283, 0x39f2, 0x37d5, 0x2d92, 0x3599, 0x31f7, 0x30d1, 0x3b0b, 0x39b9, 0x3434, 0x324f, 0x3627, 0x321a, 0x30b3, 0x39f5, 0x387d, 0x32e6, 0x3a6c, 0x3597, 0x34ad, 0x2fd5, 0x3a5e, 0x2cbd, 0x34c2, 0x3a9c, 0x369e, 0x3192, 0x321c, 0x2600, 0x37af, 0x3841, 0x3a09, 0x3348, 0x309c, 0x3396, 0x1439, 0x34de, 0x3978, 0x3938, 0x3600, 0x28e3, 0x2d7e, 0x3296, 0x36ac, 0x35d4, 0x265a, +0x318c, 0x383d, 0x3955, 0x3473, 0x3ad5, 0x3949, 0x3923, 0x2f75, 0x31e1, 0x36ba, 0x3b86, 0x393c, 0x3563, 0x38a8, 0x37ee, 0x378a, 0x38d6, 0x38e6, 0x3922, 0x2c66, 0x33fc, 0x3875, 0x388d, 0x3b8b, 0x295c, 0x3ac3, 0x3432, 0x2d94, 0x37f3, 0x2a0b, 0x38c1, 0x3bbb, 0x3735, 0x3b36, 0x3a8b, 0x3291, 0x3908, 0x39d7, 0x375a, 0x2f3a, 0x330d, 0x398d, 0x3890, 0x3bf0, 0x38ba, 0x3ac0, 0x21f8, 0x3b00, 0x396c, 0x34d9, 0x3409, 0x3463, 0x3187, 0x3522, 0x2bb8, 0x358a, 0x30e2, 0x33bd, 0x38db, 0x36f9, 0x2f32, 0x3a39, 0x3884, 0x3be5, 0x3879, 0x3126, 0x3878, 0x3775, 0x397e, 0x3a5f, 0x3974, 0x3a58, 0x3ada, 0x3b0a, 0x3917, 0x3b63, 0x3176, 0x384b, 0x3a52, 0x3b01, 0x3ace, 0x3b86, 0x336a, 0x3647, 0x3877, 0x37b3, 0x2a41, 0x2db4, 0x189d, 0x39e4, 0x3470, 0x2d16, 0x2c98, 0x3a47, 0x3495, 0x38fd, +0x3bae, 0x322f, 0x39ff, 0x3075, 0x20be, 0x3583, 0x3b80, 0x39b5, 0x34a9, 0x3a4b, 0x362a, 0x3a70, 0x3964, 0x3925, 0x37ec, 0x3b19, 0x30e9, 0x38a7, 0x3688, 0x386d, 0x3a48, 0x2faa, 0x3b5f, 0x3693, 0x367a, 0x374c, 0x3b97, 0x3beb, 0x36ce, 0x37fc, 0x38fe, 0x39c9, 0x38d5, 0x25d5, 0x36e3, 0x3a77, 0x3987, 0x3bad, 0x3a48, 0x3871, 0x318d, 0x371f, 0x3614, 0x3a6e, 0x3662, 0x3bae, 0x3a41, 0x2973, 0x3aa6, 0x29d1, 0x3910, 0x3bca, 0x34d4, 0x24ea, 0x3611, 0x37c5, 0x32cc, 0x3a93, 0x3a4c, 0x3b10, 0x3790, 0x3181, 0x346f, 0x39b8, 0x3720, 0x3a7e, 0x39c7, 0x2d80, 0x324f, 0x3bf8, 0x373f, 0x3039, 0x3872, 0x2ad3, 0x2b33, 0x3803, 0x39d1, 0x38c2, 0x2ce6, 0x3943, 0x375f, 0x37ca, 0x37a5, 0x3a00, 0x20f2, 0x3449, 0x2fc9, 0x39bb, 0x3775, 0x364c, 0x3926, 0x39ae, 0x3b18, 0x38ad, 0x3803, 0x3032, +0x2d61, 0x322b, 0x383d, 0x3a27, 0x3437, 0x290e, 0x3314, 0x3222, 0x3862, 0x3712, 0x310c, 0x3984, 0x3b97, 0x35b6, 0x39dd, 0x305e, 0x3986, 0x3a78, 0x2e12, 0x3091, 0x3ae9, 0x3b2a, 0x3887, 0x3a31, 0x2fd3, 0x381c, 0x3082, 0x3934, 0x37a5, 0x3b6a, 0x35a3, 0x320e, 0x39f1, 0x2ad6, 0x3295, 0x388a, 0x3baa, 0x372c, 0x3345, 0x3985, 0x3b40, 0x2caa, 0x3264, 0x30ad, 0x3965, 0x3bcd, 0x3830, 0x3921, 0x3ae3, 0x3bdd, 0x3b55, 0x3804, 0x38c9, 0x3430, 0x3995, 0x3b93, 0x37b7, 0x398e, 0x348e, 0x3a2b, 0x3ad6, 0x336c, 0x35c2, 0x3a01, 0x3284, 0x3a0f, 0x306c, 0x37e3, 0x3836, 0x3aea, 0x3490, 0x30bd, 0x3bb3, 0x3495, 0x3b7a, 0x3908, 0x3905, 0x34ff, 0x3a18, 0x2c6d, 0x31f6, 0x393b, 0x2b1c, 0x3b05, 0x3367, 0x383c, 0x3a5c, 0x34d2, 0x37dd, 0x364e, 0x38a6, 0x30ac, 0x36ab, 0x3272, 0x3a96, 0x34e8, +0x3705, 0x2f61, 0x3879, 0x3ae0, 0x2bec, 0x3a46, 0x39fc, 0x3b64, 0x3964, 0x390a, 0x3827, 0x30c6, 0x38c4, 0x3897, 0x3855, 0x38cf, 0x3074, 0x39fe, 0x3513, 0x38b8, 0x3a90, 0x3506, 0x3a0b, 0x39bf, 0x3ba3, 0x35b1, 0x3942, 0x30dc, 0x3a64, 0x3624, 0x39bd, 0x3725, 0x1c9a, 0x34cb, 0x335a, 0x3b3b, 0x3329, 0x2bda, 0x3368, 0x3b70, 0x3096, 0x3754, 0x2fd4, 0x35de, 0x2d13, 0x3618, 0x3025, 0x3684, 0x35b2, 0x3732, 0x384a, 0x2dbe, 0x317b, 0x3a1e, 0x388c, 0x3729, 0x393b, 0x377d, 0x3be1, 0x3a7b, 0x2776, 0x38c5, 0x3afb, 0x3334, 0x33d8, 0x3b7e, 0x369a, 0x39be, 0x3aa4, 0x3afb, 0x3a6c, 0x38c3, 0x3a6a, 0x3911, 0x2a60, 0x3543, 0x3249, 0x3592, 0x2bd4, 0x3a76, 0x3ab9, 0x38a3, 0x399a, 0x3b60, 0x3a47, 0x31ec, 0x385b, 0x3677, 0x3909, 0x3915, 0x30fb, 0x3ae8, 0x3a23, 0x38e7, 0x2364, 0x38f0, +0x3bb5, 0x31e2, 0x2bb9, 0x3443, 0x3631, 0x392e, 0x389f, 0x3447, 0x3ba3, 0x3a47, 0x3673, 0x3ab7, 0x3acf, 0x3871, 0x3770, 0x3865, 0x3139, 0x2830, 0x3b65, 0x38ab, 0x35d1, 0x38c0, 0x3684, 0x2fa5, 0x36ba, 0x38cb, 0x3a9d, 0x34b8, 0x3b1a, 0x3bcb, 0x3830, 0x3ab6, 0x2eec, 0x3832, 0x3b33, 0x3678, 0x38a2, 0x31ff, 0x3a7d, 0x3bd3, 0x34e8, 0x3819, 0x392f, 0x3704, 0x3b01, 0x25fd, 0x3729, 0x3557, 0x3bc3, 0x2e36, 0x3323, 0x3aed, 0x357a, 0x3b4b, 0x3412, 0x3637, 0x3b92, 0x3360, 0x39c2, 0x3776, 0x32a8, 0x3896, 0x2f5b, 0x328a, 0x31d9, 0x3bb4, 0x3ba2, 0x3a2c, 0x3a12, 0x305a, 0x31f9, 0x3523, 0x32b6, 0x3822, 0x2624, 0x3491, 0x3811, 0x3238, 0x3acb, 0x3a6f, 0x3662, 0x38b9, 0x3b68, 0x3a24, 0x35fb, 0x3be2, 0x37d9, 0x347b, 0x33b2, 0x3a36, 0x3816, 0x39cf, 0x377e, 0x2cee, 0x300a, 0x330d, +0x359c, 0x3826, 0x2baa, 0x3b80, 0x3b04, 0x380d, 0x3a4e, 0x2f7c, 0x3667, 0x3be5, 0x3b0a, 0x380a, 0x360d, 0x3be3, 0x3b83, 0x39c0, 0x391b, 0x285a, 0x3b4b, 0x38cb, 0x3a85, 0x3aeb, 0x3853, 0x355f, 0x3ab5, 0x33be, 0x38ff, 0x382f, 0x3be6, 0x3916, 0x36ff, 0x3a3e, 0x3b88, 0x3812, 0x3687, 0x2c26, 0x3921, 0x394b, 0x2e6f, 0x3aa9, 0x3b77, 0x3848, 0x3b3e, 0x38b4, 0x3811, 0x3659, 0x31d5, 0x3977, 0x3b06, 0x39b4, 0x34bf, 0x31cc, 0x3b30, 0x3a6e, 0x3712, 0x3b52, 0x3b7a, 0x37bd, 0x3484, 0x3bdd, 0x343d, 0x3bb5, 0x3952, 0x2f41, 0x3a12, 0x3b3e, 0x27fe, 0x39d2, 0x39f4, 0x2ca1, 0x3485, 0x36ba, 0x3156, 0x3905, 0x3ba8, 0x39cd, 0x3b64, 0x3ba5, 0x3c00, 0x3ae8, 0x3452, 0x3a39, 0x3861, 0x3b8e, 0x37b1, 0x3bcd, 0x350e, 0x379d, 0x3b83, 0x34cb, 0x3205, 0x39fc, 0x3669, 0x3508, 0x2a1c, 0x39f9, +0x3876, 0x3602, 0x2b8f, 0x36be, 0x3885, 0x2caa, 0x3532, 0x31a8, 0x3956, 0x3139, 0x3709, 0x2fce, 0x3987, 0x3ab4, 0x3406, 0x3727, 0x32dd, 0x3ac9, 0x356b, 0x30c9, 0x2cbb, 0x3552, 0x2c69, 0x39ce, 0x3ad5, 0x3753, 0x290e, 0x36c4, 0x3a7c, 0x3b32, 0x2e36, 0x37db, 0x38b0, 0x3912, 0x34f7, 0x228b, 0x391f, 0x2fbd, 0x3850, 0x3a5e, 0x3a5b, 0x3b82, 0x3a6e, 0x349c, 0x38ce, 0x3bcb, 0x3b4f, 0x31e8, 0x38bd, 0x34ad, 0x3451, 0x3318, 0x34d5, 0x388f, 0x39cf, 0x3844, 0x38d4, 0x3421, 0x38fa, 0x269e, 0x293c, 0x34f0, 0x3438, 0x372c, 0x34b0, 0x36d5, 0x2aa6, 0x3805, 0x3821, 0x31db, 0x39fc, 0x3aa9, 0x26e4, 0x34b9, 0x3215, 0x214a, 0x39e6, 0x3278, 0x39b1, 0x2e97, 0x34e4, 0x3ae7, 0x3bb6, 0x3b79, 0x388d, 0x3b2d, 0x3642, 0x32fe, 0x3b36, 0x39b3, 0x3957, 0x2d0f, 0x34e9, 0x3aef, 0x381d, 0x3b22, +0x2fcf, 0x38e8, 0x3648, 0x2d35, 0x3773, 0x3936, 0x38f7, 0x242a, 0x3bef, 0x3bfa, 0x389a, 0x34e9, 0x328b, 0x3392, 0x3753, 0x3a4c, 0x3ada, 0x2937, 0x38c5, 0x3a6a, 0x2fae, 0x2d27, 0x349e, 0x3be1, 0x34fe, 0x3604, 0x3a69, 0x3b92, 0x384b, 0x387b, 0x28ae, 0x347e, 0x3b9f, 0x3a73, 0x384d, 0x3a08, 0x3961, 0x35a6, 0x38fe, 0x36cc, 0x3962, 0x3456, 0x3ae6, 0x2782, 0x38f8, 0x3bc1, 0x3639, 0x301e, 0x38cf, 0x3873, 0x32d4, 0x3a2c, 0x3aba, 0x3a42, 0x204d, 0x37ae, 0x3adb, 0x3b1a, 0x29ed, 0x30ba, 0x381f, 0x36c0, 0x3602, 0x2dde, 0x3735, 0x3701, 0x3bae, 0x3645, 0x3412, 0x3601, 0x37d5, 0x3aee, 0x39b3, 0x3a06, 0x3ac6, 0x3822, 0x363e, 0x3af8, 0x32f9, 0x39c9, 0x2c2d, 0x3672, 0x29bf, 0x3a06, 0x3875, 0x3758, 0x35cc, 0x3b92, 0x3a44, 0x35ac, 0x3b23, 0x2c6f, 0x3aa4, 0x3676, 0x3be5, 0x3137, +0x38fb, 0x371e, 0x38ad, 0x39cf, 0x347c, 0x3a24, 0x3887, 0x3811, 0x396e, 0x39d1, 0x33cc, 0x3bb5, 0x34e3, 0x39dd, 0x35c5, 0x38be, 0x37cf, 0x372a, 0x3ada, 0x3acd, 0x332c, 0x38c5, 0x35fe, 0x2e0c, 0x388e, 0x3480, 0x3bac, 0x39ad, 0x3770, 0x3aec, 0x3ba5, 0x38eb, 0x3b10, 0x33fd, 0x26db, 0x319c, 0x3aa4, 0x3895, 0x379b, 0x349c, 0x3ab3, 0x3840, 0x3b70, 0x3b4e, 0x2e46, 0x3aff, 0x2f7f, 0x3732, 0x3991, 0x346c, 0x39ff, 0x2be5, 0x36cb, 0x3bb1, 0x35d4, 0x3883, 0x3ba4, 0x3362, 0x3866, 0x394c, 0x38c4, 0x3b6f, 0x378d, 0x2bdf, 0x3443, 0x3959, 0x30ae, 0x3a18, 0x2472, 0x2f6a, 0x3111, 0x3a6d, 0x394e, 0x35c4, 0x3834, 0x3bc5, 0x3afc, 0x3291, 0x34b3, 0x3863, 0x3778, 0x3a6c, 0x3903, 0x2d65, 0x372e, 0x2dfb, 0x32ff, 0x3586, 0x34d2, 0x2d32, 0x3a7f, 0x3002, 0x1d54, 0x34a5, 0x3b4b, 0x3455, +0x3975, 0x27ae, 0x37e0, 0x34c3, 0x31f6, 0x3896, 0x3993, 0x29df, 0x31c1, 0x2e25, 0x2cae, 0x3889, 0x3826, 0x33cd, 0x3bc4, 0x2400, 0x38a7, 0x313d, 0x3826, 0x3670, 0x3922, 0x25bf, 0x390e, 0x3b99, 0x358a, 0x344d, 0x3926, 0x3b4d, 0x239f, 0x3576, 0x3576, 0x356b, 0x3b40, 0x2ebc, 0x34ff, 0x2e6c, 0x3817, 0x35bf, 0x35fc, 0x285e, 0x3b5d, 0x3908, 0x3848, 0x3441, 0x321f, 0x28a5, 0x3a73, 0x342f, 0x37db, 0x39ff, 0x3ac1, 0x3409, 0x3808, 0x34aa, 0x3aee, 0x3590, 0x2ea7, 0x2db9, 0x3b2f, 0x3845, 0x3a0d, 0x34d7, 0x3902, 0x3b44, 0x37b4, 0x3737, 0x3174, 0x394a, 0x3769, 0x3b0a, 0x370f, 0x31a6, 0x3b3d, 0x3a37, 0x3bc7, 0x2d68, 0x363a, 0x31cc, 0x3289, 0x3983, 0x3825, 0x3bf4, 0x34b9, 0x37fe, 0x2de5, 0x3975, 0x3ac9, 0x3083, 0x2c4d, 0x37a2, 0x3544, 0x36ac, 0x387c, 0x30a6, 0x321c, 0x37cc, +0x3a9e, 0x3310, 0x3bf9, 0x36c9, 0x3845, 0x3877, 0x3b5c, 0x3b20, 0x392f, 0x398c, 0x3b42, 0x2c1e, 0x3229, 0x395f, 0x3749, 0x377f, 0x3390, 0x3a80, 0x35b4, 0x2ed5, 0x3795, 0x3067, 0x3998, 0x3a51, 0x3b44, 0x3a52, 0x397d, 0x37fc, 0x298f, 0x2d3d, 0x344b, 0x363e, 0x39bd, 0x3590, 0x3b40, 0x37f3, 0x2d81, 0x3295, 0x35ff, 0x3b02, 0x37f2, 0x37e0, 0x1de3, 0x375e, 0x2fd9, 0x3271, 0x3548, 0x363e, 0x39bb, 0x3817, 0x327a, 0x2bb1, 0x3bbf, 0x3bf3, 0x38e9, 0x39be, 0x392b, 0x2f02, 0x34c5, 0x39c3, 0x38ab, 0x393b, 0x1e1d, 0x3bc3, 0x3972, 0x3be2, 0x3391, 0x3a3f, 0x3b68, 0x33a1, 0x384a, 0x3503, 0x3353, 0x343d, 0x3ac3, 0x2e04, 0x2f98, 0x3020, 0x38f3, 0x3814, 0x3a21, 0x3b92, 0x3083, 0x35fe, 0x3993, 0x32cb, 0x3b67, 0x2f42, 0x3070, 0x32a5, 0x2d98, 0x3b98, 0x31b4, 0x306f, 0x2dc2, 0x3ad5, +0x38d9, 0x38e4, 0x31e3, 0x38d7, 0x3b05, 0x3645, 0x388a, 0x3964, 0x3ab3, 0x39d3, 0x35f4, 0x2777, 0x34e4, 0x3874, 0x3bf6, 0x3b51, 0x3b2e, 0x3887, 0x3bf3, 0x3b3a, 0x348d, 0x35f3, 0x3a72, 0x3bd9, 0x31ec, 0x2d30, 0x34e5, 0x36c2, 0x3907, 0x33da, 0x2e75, 0x2fa8, 0x2fbf, 0x342e, 0x385d, 0x3421, 0x3897, 0x3841, 0x195c, 0x322b, 0x315d, 0x3325, 0x306d, 0x394b, 0x2f4e, 0x3896, 0x3a65, 0x3bf9, 0x30dd, 0x3957, 0x39a5, 0x2f7f, 0x3a29, 0x38c9, 0x35d6, 0x3248, 0x371d, 0x3412, 0x3660, 0x3609, 0x3944, 0x3b17, 0x3af3, 0x3b89, 0x39da, 0x3764, 0x344d, 0x3462, 0x3907, 0x388a, 0x38f0, 0x2960, 0x393b, 0x32f0, 0x3956, 0x31d3, 0x3328, 0x33fd, 0x3256, 0x2913, 0x3665, 0x397f, 0x36ad, 0x31db, 0x3aa5, 0x39db, 0x329b, 0x38f0, 0x32a5, 0x3051, 0x3855, 0x3a9c, 0x3870, 0x3a27, 0x3b93, 0x3942, +0x34e3, 0x37d4, 0x36b0, 0x384f, 0x2eef, 0x2e05, 0x35bc, 0x3bee, 0x34c7, 0x374f, 0x3811, 0x39c4, 0x2de0, 0x3bda, 0x3700, 0x2dc6, 0x349f, 0x29cf, 0x3b8b, 0x39b9, 0x2e31, 0x39f9, 0x3815, 0x3076, 0x38cc, 0x39c1, 0x398c, 0x3a20, 0x3865, 0x34d3, 0x3ba8, 0x3b16, 0x2057, 0x248a, 0x3859, 0x2e3f, 0x30e1, 0x3842, 0x3627, 0x383d, 0x3bb8, 0x34c8, 0x3ad0, 0x3b23, 0x388b, 0x3014, 0x3235, 0x357c, 0x3ba7, 0x3977, 0x3a32, 0x3aba, 0x30f5, 0x31d2, 0x3857, 0x393a, 0x3894, 0x351a, 0x3805, 0x35ee, 0x3967, 0x3862, 0x2a1b, 0x3afc, 0x3a4a, 0x38a0, 0x2f0d, 0x38d3, 0x393c, 0x3a13, 0x3973, 0x3831, 0x3a43, 0x3865, 0x3b80, 0x395a, 0x3275, 0x3874, 0x3735, 0x399c, 0x395e, 0x3abb, 0x2fd8, 0x381a, 0x3834, 0x2ae7, 0x3b2f, 0x39f3, 0x38be, 0x3ade, 0x351f, 0x3900, 0x34e5, 0x389a, 0x31d6, 0x3be4, +0x394f, 0x3a3d, 0x3b26, 0x3a2f, 0x399e, 0x2e0a, 0x3bc9, 0x38d2, 0x3920, 0x343d, 0x3a0b, 0x2c78, 0x38aa, 0x3b54, 0x3639, 0x37b3, 0x377b, 0x3b67, 0x3836, 0x2d52, 0x3b65, 0x38fb, 0x3836, 0x32cf, 0x3a40, 0x367e, 0x3a47, 0x3b47, 0x2d4d, 0x36fc, 0x398a, 0x3b7c, 0x3290, 0x3b4f, 0x3bf6, 0x25de, 0x3937, 0x3798, 0x3b0f, 0x3a95, 0x3bbc, 0x3beb, 0x34cf, 0x269a, 0x3b63, 0x3543, 0x366f, 0x344f, 0x361b, 0x3518, 0x35fb, 0x39aa, 0x3922, 0x3969, 0x3024, 0x2965, 0x2f2d, 0x2e6c, 0x385e, 0x3ab9, 0x34af, 0x3aec, 0x3af1, 0x348b, 0x2f86, 0x3bda, 0x3888, 0x3909, 0x3ba0, 0x3743, 0x3b40, 0x3306, 0x3999, 0x36c0, 0x35f8, 0x3531, 0x3457, 0x397a, 0x3a86, 0x37b8, 0x3bf2, 0x3bb3, 0x378e, 0x3bc7, 0x38f8, 0x3515, 0x3be1, 0x26dd, 0x28e4, 0x3a19, 0x3a28, 0x289c, 0x38ed, 0x3a77, 0x32b0, 0x392e, +0x2fcb, 0x3b43, 0x357f, 0x3987, 0x3056, 0x39dc, 0x3bc7, 0x34c0, 0x3a41, 0x3b4a, 0x3317, 0x2230, 0x3b8c, 0x363d, 0x25bf, 0x3b25, 0x39e3, 0x39d5, 0x37bd, 0x3a52, 0x3a14, 0x1aec, 0x3756, 0x353a, 0x3826, 0x331e, 0x34f7, 0x3690, 0x3973, 0x3269, 0x2c1c, 0x1bea, 0x32da, 0x2d21, 0x346d, 0x351f, 0x2df0, 0x3be0, 0x3bee, 0x3bb2, 0x3b6f, 0x3596, 0x38a2, 0x3408, 0x2281, 0x3864, 0x3516, 0x3b24, 0x3a8d, 0x3a63, 0x3806, 0x36e1, 0x3b6b, 0x3656, 0x3b8f, 0x31d3, 0x3a70, 0x39f8, 0x3953, 0x31eb, 0x3a05, 0x3a58, 0x2f81, 0x395b, 0x3721, 0x3353, 0x35db, 0x2d72, 0x3786, 0x3ab5, 0x3b4b, 0x3bd0, 0x3607, 0x35b4, 0x3a79, 0x32e2, 0x3299, 0x36a2, 0x381c, 0x2fb4, 0x2b3f, 0x3a01, 0x390c, 0x29d1, 0x2b63, 0x3a4b, 0x3309, 0x34f5, 0x3b7b, 0x348d, 0x3a7e, 0x30ca, 0x3269, 0x363a, 0x35a4, 0x3735, +0x36c4, 0x396c, 0x377a, 0x2fac, 0x3bba, 0x3511, 0x38fd, 0x3be0, 0x392d, 0x3864, 0x3bef, 0x3ae7, 0x2cd2, 0x37e5, 0x31c9, 0x332d, 0x3be0, 0x326a, 0x309a, 0x387e, 0x39f2, 0x3302, 0x39ee, 0x3956, 0x3b30, 0x3829, 0x2894, 0x368f, 0x361d, 0x35cd, 0x3b8c, 0x3677, 0x3a95, 0x3a41, 0x382f, 0x3457, 0x3194, 0x31bc, 0x3abd, 0x392a, 0x387b, 0x3912, 0x388a, 0x3051, 0x3a9b, 0x2fc4, 0x3468, 0x33f7, 0x20fe, 0x3489, 0x1d98, 0x39f4, 0x2f82, 0x2c37, 0x391e, 0x37ef, 0x3bb0, 0x3538, 0x1e8b, 0x3985, 0x3805, 0x3823, 0x32eb, 0x36e7, 0x3569, 0x387d, 0x30f2, 0x38d2, 0x39b5, 0x3544, 0x3009, 0x377c, 0x3a65, 0x342a, 0x2cc6, 0x3983, 0x2720, 0x2760, 0x3443, 0x3856, 0x3949, 0x37b5, 0x3944, 0x33e1, 0x320c, 0x3a83, 0x39be, 0x36f2, 0x3bf3, 0x384d, 0x35dd, 0x3150, 0x36ee, 0x2f4b, 0x3bd4, 0x2816, +0x3bb4, 0x3590, 0x3bf3, 0x38dd, 0x3472, 0x37f9, 0x38ec, 0x25b3, 0x3aac, 0x394d, 0x2e48, 0x387c, 0x39ed, 0x350a, 0x36e1, 0x3ad8, 0x3580, 0x3a08, 0x38d7, 0x390f, 0x370e, 0x30ed, 0x2fb2, 0x37f2, 0x35a8, 0x38bb, 0x389a, 0x3960, 0x35e1, 0x35d1, 0x3799, 0x3356, 0x375c, 0x3889, 0x38e7, 0x385e, 0x30f1, 0x3032, 0x3006, 0x3356, 0x36b1, 0x3af5, 0x342c, 0x3a9f, 0x386d, 0x3a8d, 0x2670, 0x3ba5, 0x3907, 0x39cb, 0x389b, 0x2914, 0x2db1, 0x2f6f, 0x3aa3, 0x346a, 0x3716, 0x303d, 0x3991, 0x3a21, 0x3b53, 0x3589, 0x3a6b, 0x34f7, 0x2d99, 0x380b, 0x392f, 0x36d9, 0x2e31, 0x30a2, 0x3569, 0x2657, 0x36dd, 0x306d, 0x36b5, 0x3ac4, 0x3a7a, 0x36f7, 0x38d6, 0x3b02, 0x355e, 0x3a19, 0x3bc4, 0x365c, 0x3b77, 0x3660, 0x3bc9, 0x380a, 0x3673, 0x3a4a, 0x3b19, 0x3843, 0x328c, 0x1a13, 0x3bd6, 0x3be2, +0x388d, 0x30c3, 0x3998, 0x389e, 0x3354, 0x3174, 0x3922, 0x3970, 0x2962, 0x3bc2, 0x3b1e, 0x3bd7, 0x2d84, 0x3573, 0x3846, 0x3703, 0x31ec, 0x3a5a, 0x3459, 0x2674, 0x291f, 0x3b76, 0x364f, 0x316f, 0x3a52, 0x3866, 0x34de, 0x33fc, 0x37fc, 0x3a20, 0x3ac2, 0x3893, 0x3208, 0x38d0, 0x3b1c, 0x39cd, 0x36f6, 0x301f, 0x3965, 0x3971, 0x3afa, 0x34d9, 0x2e34, 0x35a3, 0x390d, 0x2e83, 0x3b5a, 0x3acb, 0x377e, 0x2416, 0x38b8, 0x3a2e, 0x3a04, 0x3062, 0x2ef1, 0x3584, 0x2afb, 0x382a, 0x3a74, 0x37da, 0x3730, 0x32a6, 0x3866, 0x389e, 0x3850, 0x3551, 0x3939, 0x3a0e, 0x2deb, 0x3b97, 0x38e9, 0x39b6, 0x35b5, 0x3999, 0x38fe, 0x1918, 0x326d, 0x3477, 0x34e5, 0x3855, 0x38f8, 0x3307, 0x385d, 0x3b17, 0x36d8, 0x3020, 0x3a66, 0x3bf9, 0x3b17, 0x28cf, 0x3abb, 0x38b3, 0x3bc0, 0x31e4, 0x30d8, 0x3090, +0x393f, 0x350a, 0x2171, 0x31dd, 0x3aa3, 0x3962, 0x2a30, 0x3a0c, 0x3983, 0x3474, 0x38a4, 0x30fc, 0x348a, 0x3afd, 0x3ab0, 0x2fca, 0x3bb3, 0x3be9, 0x3984, 0x3a8d, 0x3119, 0x3b78, 0x3bd6, 0x2ef6, 0x31ef, 0x27c9, 0x39be, 0x32fb, 0x2ce0, 0x368b, 0x3612, 0x32b6, 0x2d58, 0x3787, 0x3811, 0x3745, 0x3b86, 0x32f4, 0x3941, 0x3936, 0x2ab3, 0x39cd, 0x3851, 0x395d, 0x355e, 0x383e, 0x380a, 0x3b5d, 0x34d8, 0x3292, 0x3124, 0x31af, 0x3942, 0x2d54, 0x3b54, 0x3b1b, 0x3bbd, 0x3507, 0x324e, 0x3364, 0x2514, 0x3af6, 0x3236, 0x361c, 0x3721, 0x39b4, 0x3b86, 0x3907, 0x3316, 0x2c3b, 0x3bf4, 0x3abb, 0x38b8, 0x38e5, 0x38e4, 0x3941, 0x318e, 0x3563, 0x318a, 0x3953, 0x328a, 0x2ed0, 0x3782, 0x38b3, 0x3632, 0x35f0, 0x3a31, 0x3112, 0x3b49, 0x3b8e, 0x31f8, 0x3a70, 0x3bf1, 0x375e, 0x381c, 0x3791, +0x38f7, 0x2f6a, 0x3b74, 0x3198, 0x3815, 0x3184, 0x39cc, 0x37c1, 0x3b16, 0x39dd, 0x3690, 0x36ee, 0x3ba5, 0x383d, 0x3bee, 0x37f9, 0x3617, 0x399a, 0x3597, 0x3703, 0x3281, 0x3047, 0x35b6, 0x3835, 0x3708, 0x3634, 0x3965, 0x39b8, 0x3a00, 0x3996, 0x2bd0, 0x2ced, 0x36de, 0x35e6, 0x3b4d, 0x3888, 0x3bc5, 0x290f, 0x3baf, 0x388e, 0x3721, 0x3896, 0x3565, 0x33f9, 0x312b, 0x37c8, 0x3889, 0x376b, 0x3bb6, 0x375e, 0x35bf, 0x2f6b, 0x39f6, 0x34ba, 0x3936, 0x3969, 0x39de, 0x3ad4, 0x39eb, 0x3a5c, 0x33e3, 0x3367, 0x3297, 0x3bea, 0x3bcf, 0x3806, 0x39b7, 0x3b63, 0x37d2, 0x385b, 0x3a88, 0x3a6a, 0x3447, 0x385b, 0x3078, 0x347b, 0x3790, 0x32c5, 0x30f3, 0x33d2, 0x3864, 0x35a7, 0x359b, 0x32c2, 0x3bf7, 0x379d, 0x39ed, 0x3964, 0x367e, 0x2f3e, 0x3b0a, 0x3a32, 0x3b2b, 0x287e, 0x2ee6, 0x3ba2 +}; \ No newline at end of file diff --git a/redmule/inc/y_input.h b/redmule/inc/y_input.h new file mode 100644 index 0000000..19b8197 --- /dev/null +++ b/redmule/inc/y_input.h @@ -0,0 +1,99 @@ + /* Header file generated by RedMulE Golden Model */ +uint16_t y_inp [9216] = { +0x39fc, 0x3a87, 0x3a35, 0x2bf4, 0x34f8, 0x2c8c, 0x3822, 0x38a2, 0x3bf8, 0x3b3a, 0x37d8, 0x3041, 0x28b2, 0x38d2, 0x1822, 0x3044, 0x38dc, 0x308d, 0x3a14, 0x3952, 0x38be, 0x32ef, 0x351e, 0x38ab, 0x2eb4, 0x3689, 0x33ca, 0x3a1f, 0x3bbc, 0x37ed, 0x38d5, 0x35c8, 0x341b, 0x3b74, 0x3627, 0x3a34, 0x3220, 0x3b85, 0x3a43, 0x2eca, 0x3550, 0x3958, 0x3813, 0x2cca, 0x3869, 0x391e, 0x3260, 0x2e42, 0x3493, 0x39ed, 0x3b7b, 0x3699, 0x3863, 0x3a7e, 0x3ab4, 0x3bcb, 0x3920, 0x3502, 0x28df, 0x38c5, 0x35e5, 0x282d, 0x3645, 0x3a29, 0x2fbb, 0x338d, 0x3ba0, 0x320d, 0x2830, 0x3bb4, 0x390a, 0x367f, 0x3335, 0x3b1a, 0x38c0, 0x3781, 0x3773, 0x39b0, 0x3b74, 0x38ba, 0x3383, 0x3550, 0x357a, 0x3ba7, 0x30e6, 0x39f4, 0x3b11, 0x282b, 0x334f, 0x3644, 0x367c, 0x3ac3, 0x38f3, 0x39f9, 0x3b1d, 0x35cf, +0x3433, 0x2eea, 0x38c1, 0x362a, 0x35e6, 0x3070, 0x1c1d, 0x308e, 0x381d, 0x39e5, 0x3a51, 0x2fb2, 0x3723, 0x3b58, 0x293e, 0x337a, 0x3a39, 0x349c, 0x3766, 0x3a73, 0x39bd, 0x3a0c, 0x3843, 0x21b9, 0x39a5, 0x2fd6, 0x2cf4, 0x3112, 0x3a1a, 0x3bb6, 0x3a83, 0x398e, 0x3b92, 0x2a3f, 0x37f1, 0x3664, 0x35f0, 0x39be, 0x3279, 0x39e0, 0x3241, 0x3bc7, 0x3bae, 0x36bd, 0x1bf5, 0x3806, 0x37d3, 0x247c, 0x3789, 0x36b9, 0x3b84, 0x3093, 0x3a5d, 0x2863, 0x2fe0, 0x2c4b, 0x3bd5, 0x38b6, 0x3b0e, 0x3ad1, 0x3ba2, 0x3914, 0x3947, 0x3984, 0x397a, 0x35ed, 0x3891, 0x3b7f, 0x3b32, 0x3857, 0x3717, 0x2b73, 0x38c1, 0x3bc6, 0x3330, 0x35c8, 0x34ff, 0x3924, 0x387b, 0x3a27, 0x3b92, 0x22d9, 0x29be, 0x3b39, 0x361c, 0x34e6, 0x2b7e, 0x34d8, 0x38c2, 0x3a4c, 0x3a2f, 0x381f, 0x38f6, 0x3a9a, 0x394f, 0x382d, +0x3939, 0x397a, 0x3926, 0x3a59, 0x34e3, 0x3077, 0x3190, 0x3a6b, 0x2c3f, 0x3a51, 0x35d9, 0x3866, 0x2f73, 0x38f2, 0x3766, 0x3aa1, 0x3b55, 0x2f8f, 0x3993, 0x354a, 0x3650, 0x340d, 0x2f01, 0x3731, 0x394d, 0x3b15, 0x3806, 0x39b9, 0x3aa7, 0x387c, 0x3beb, 0x2e2f, 0x38e8, 0x353a, 0x36ba, 0x3b2e, 0x3b5c, 0x2d4b, 0x357e, 0x3bd8, 0x3be0, 0x38b0, 0x2a3b, 0x2ff0, 0x3268, 0x38f3, 0x31fc, 0x318c, 0x35b5, 0x3980, 0x3a4d, 0x33cc, 0x365b, 0x397e, 0x3809, 0x39af, 0x3537, 0x2ba6, 0x30f1, 0x38b2, 0x39fe, 0x39f3, 0x373b, 0x3bff, 0x36ce, 0x3b5d, 0x3b5a, 0x2f1d, 0x3be3, 0x395d, 0x34d0, 0x36a3, 0x3937, 0x33b3, 0x3b91, 0x3ab5, 0x3215, 0x396b, 0x3bed, 0x302d, 0x3862, 0x3b05, 0x2ba1, 0x2fa6, 0x35d2, 0x3806, 0x3b84, 0x3233, 0x2664, 0x3a63, 0x3bdb, 0x375f, 0x3b0b, 0x34ff, 0x3020, 0x375d, +0x3931, 0x2d6c, 0x31c3, 0x3a24, 0x34b8, 0x3865, 0x366e, 0x3aaf, 0x3530, 0x20d6, 0x35ac, 0x33e8, 0x3b37, 0x32d8, 0x333c, 0x3349, 0x30cd, 0x392f, 0x2c30, 0x3b0a, 0x390a, 0x3703, 0x3b5f, 0x39ac, 0x31ba, 0x32a4, 0x3b8f, 0x3a5e, 0x3ad1, 0x38bf, 0x38bb, 0x369f, 0x3b75, 0x32c6, 0x31d2, 0x280f, 0x3891, 0x3b09, 0x3531, 0x3899, 0x3a55, 0x37fe, 0x3b5e, 0x364a, 0x3ada, 0x386f, 0x38bb, 0x3a7b, 0x313f, 0x3592, 0x2ca6, 0x2eeb, 0x38b1, 0x35df, 0x326f, 0x3bf5, 0x3848, 0x2fbd, 0x3268, 0x3922, 0x376b, 0x3a5e, 0x3826, 0x3207, 0x33f3, 0x3302, 0x3a80, 0x3bf1, 0x35dd, 0x2a83, 0x3460, 0x3296, 0x3ada, 0x3484, 0x3989, 0x3680, 0x3969, 0x3ab4, 0x2fb1, 0x3b50, 0x38bd, 0x3ad1, 0x34ac, 0x3718, 0x2ed7, 0x3b53, 0x3114, 0x248a, 0x3960, 0x3ab6, 0x39ef, 0x21dd, 0x33b9, 0x3a05, 0x2fbe, 0x37a2, +0x3a70, 0x37f8, 0x37f1, 0x3591, 0x382f, 0x3276, 0x33ed, 0x3935, 0x275e, 0x353c, 0x3b24, 0x3b42, 0x38db, 0x33ca, 0x3bd7, 0x3694, 0x365f, 0x3997, 0x39b7, 0x3bcb, 0x3b6a, 0x269a, 0x3956, 0x3b4e, 0x3ba1, 0x3bee, 0x2aaf, 0x3530, 0x3ad7, 0x3bce, 0x3bd2, 0x397c, 0x3aee, 0x3b62, 0x3bfc, 0x3ba1, 0x3b44, 0x38e6, 0x3747, 0x3855, 0x3baf, 0x3b16, 0x3b35, 0x34e7, 0x3858, 0x3bdb, 0x39c3, 0x3898, 0x381e, 0x3899, 0x36be, 0x363c, 0x3a70, 0x1518, 0x334e, 0x38cd, 0x3a74, 0x3420, 0x35a7, 0x3a00, 0x3282, 0x32db, 0x3656, 0x2dd8, 0x2e5b, 0x399e, 0x3bd7, 0x3366, 0x34cd, 0x257c, 0x3a2e, 0x375b, 0x3971, 0x3472, 0x269f, 0x39ac, 0x39e6, 0x396b, 0x335b, 0x38cc, 0x3b3d, 0x38ee, 0x3895, 0x2e3b, 0x3ba0, 0x3bb7, 0x3401, 0x35df, 0x3b06, 0x3adf, 0x37af, 0x3948, 0x33a6, 0x3aa7, 0x36b2, 0x373c, +0x3872, 0x3674, 0x34d5, 0x3918, 0x37cd, 0x369a, 0x3a26, 0x3bc3, 0x380c, 0x35ba, 0x36eb, 0x3b54, 0x37a9, 0x3405, 0x397d, 0x351f, 0x2f10, 0x34fd, 0x333c, 0x36c9, 0x3584, 0x3998, 0x3b22, 0x3aff, 0x3931, 0x31b7, 0x39ae, 0x31e7, 0x3847, 0x392a, 0x3bff, 0x3a24, 0x15c5, 0x3905, 0x36e8, 0x3356, 0x2f46, 0x38a9, 0x3bd8, 0x3bfc, 0x2fbf, 0x3a7d, 0x3989, 0x3a6c, 0x3a8b, 0x32c9, 0x37da, 0x3b16, 0x394a, 0x3aa5, 0x2c30, 0x3968, 0x3119, 0x3af2, 0x2f8f, 0x34ef, 0x3ab3, 0x2445, 0x38d9, 0x3856, 0x3592, 0x389d, 0x2932, 0x31f8, 0x3775, 0x3947, 0x3893, 0x3b50, 0x3465, 0x355c, 0x3547, 0x3925, 0x32c2, 0x3a0e, 0x39f9, 0x39f0, 0x2a1c, 0x34a0, 0x3b51, 0x3bb8, 0x38af, 0x36c7, 0x361f, 0x397b, 0x3a7f, 0x39e2, 0x3a7e, 0x3a67, 0x304c, 0x34d8, 0x3921, 0x3287, 0x2d90, 0x3b36, 0x30cc, 0x1958, +0x36ea, 0x3419, 0x39f3, 0x3bf1, 0x3271, 0x3763, 0x3643, 0x337f, 0x3161, 0x3944, 0x33b1, 0x30c7, 0x3687, 0x342b, 0x2402, 0x394a, 0x3480, 0x3052, 0x2a6e, 0x376a, 0x3236, 0x381e, 0x3596, 0x3939, 0x373e, 0x34b4, 0x201a, 0x3245, 0x3169, 0x26c8, 0x3a1c, 0x389b, 0x3351, 0x3bac, 0x3261, 0x37ab, 0x39bb, 0x350f, 0x3b5d, 0x3b86, 0x34e8, 0x3104, 0x3969, 0x31f4, 0x399a, 0x370e, 0x34a3, 0x3064, 0x3519, 0x3542, 0x3a72, 0x3be0, 0x3ba2, 0x3a5b, 0x3455, 0x3ae5, 0x38ef, 0x358a, 0x3908, 0x38eb, 0x3572, 0x3b41, 0x39cb, 0x39f4, 0x3bb6, 0x2f51, 0x3345, 0x3475, 0x3b20, 0x3b7c, 0x385d, 0x36a4, 0x35b8, 0x3368, 0x3867, 0x37cb, 0x3b8c, 0x32e9, 0x366b, 0x3a3f, 0x3147, 0x3534, 0x25bc, 0x3828, 0x38f8, 0x27cd, 0x35c8, 0x2a95, 0x39cf, 0x328b, 0x3a6d, 0x34f4, 0x38ae, 0x2b5f, 0x3845, 0x3b30, +0x3719, 0x37fc, 0x3adc, 0x2273, 0x385f, 0x39d1, 0x2f2c, 0x2df2, 0x36a6, 0x3523, 0x234d, 0x3a3f, 0x2817, 0x355d, 0x399f, 0x3924, 0x3bd4, 0x35ca, 0x3319, 0x301a, 0x353f, 0x34d2, 0x3bfd, 0x373e, 0x3a2a, 0x320b, 0x2e90, 0x38e8, 0x2f48, 0x3873, 0x3b61, 0x39d5, 0x3af7, 0x3885, 0x3be2, 0x3963, 0x36cc, 0x331b, 0x31ad, 0x3668, 0x39a2, 0x36f9, 0x3b52, 0x3985, 0x395d, 0x2e15, 0x30c2, 0x37ed, 0x32d1, 0x3a04, 0x3bef, 0x2fd7, 0x301d, 0x3a39, 0x3999, 0x342d, 0x34e3, 0x3bde, 0x3825, 0x3ac0, 0x3495, 0x3505, 0x3820, 0x30df, 0x37fd, 0x386c, 0x37c5, 0x3bab, 0x3b3d, 0x37f1, 0x3b42, 0x3825, 0x3bb4, 0x38a0, 0x383b, 0x3a92, 0x3a5c, 0x24c7, 0x38c8, 0x3492, 0x30af, 0x3b63, 0x35bb, 0x3046, 0x3aec, 0x357f, 0x3bb6, 0x3886, 0x37c6, 0x3315, 0x39cd, 0x32ae, 0x3b6d, 0x2d8c, 0x3607, 0x3420, +0x385d, 0x3782, 0x38ad, 0x34af, 0x3aad, 0x3bf3, 0x34bc, 0x3bfc, 0x33f0, 0x34ab, 0x37b6, 0x308d, 0x3ac8, 0x3935, 0x3b3a, 0x3517, 0x2579, 0x3b26, 0x36f6, 0x381f, 0x3b3c, 0x3a9f, 0x3667, 0x1c3e, 0x3b29, 0x2344, 0x3010, 0x36f7, 0x3470, 0x3834, 0x33bc, 0x306f, 0x392b, 0x37bc, 0x357a, 0x38a5, 0x3a09, 0x38f3, 0x34c6, 0x304b, 0x3bb7, 0x36c3, 0x3435, 0x3984, 0x357c, 0x345b, 0x39b5, 0x3286, 0x3a6b, 0x2e0e, 0x3613, 0x33e9, 0x379f, 0x3a14, 0x3a3a, 0x2e0e, 0x38f6, 0x3589, 0x3807, 0x3a49, 0x3818, 0x39dd, 0x31b0, 0x3a67, 0x39de, 0x175e, 0x394b, 0x34de, 0x394a, 0x3853, 0x371b, 0x3b5d, 0x39bb, 0x3029, 0x3091, 0x37b8, 0x33f0, 0x3517, 0x391e, 0x35ce, 0x3bc7, 0x2c6e, 0x2d9c, 0x36c1, 0x3143, 0x35c5, 0x39c6, 0x3a05, 0x3b1f, 0x3941, 0x3adc, 0x393a, 0x3993, 0x3bac, 0x2781, 0x3912, +0x36b8, 0x3a59, 0x397c, 0x25c3, 0x3b19, 0x3304, 0x399d, 0x3bde, 0x2e7c, 0x341e, 0x3172, 0x3bfd, 0x3b45, 0x3186, 0x37fe, 0x3b92, 0x390e, 0x2d85, 0x34fa, 0x2c58, 0x3ac5, 0x398f, 0x386a, 0x3ae3, 0x2f53, 0x3b4d, 0x3602, 0x3042, 0x353d, 0x3811, 0x3928, 0x2414, 0x3bb8, 0x3841, 0x3990, 0x388a, 0x25d4, 0x3787, 0x39a9, 0x3963, 0x3554, 0x3b41, 0x3921, 0x2938, 0x39cc, 0x34d1, 0x38ec, 0x31ac, 0x3aed, 0x36ca, 0x3a41, 0x3754, 0x3ab4, 0x39ac, 0x387a, 0x3851, 0x3097, 0x3885, 0x2ef9, 0x2530, 0x3a9d, 0x39ec, 0x38ca, 0x3ad4, 0x39ea, 0x37ce, 0x3ac0, 0x2879, 0x3bda, 0x3af5, 0x2eaa, 0x35e9, 0x3a11, 0x3a48, 0x2782, 0x3a7f, 0x3662, 0x3a99, 0x2194, 0x3628, 0x3668, 0x36e5, 0x38ab, 0x3833, 0x30b4, 0x3237, 0x39df, 0x3a63, 0x370d, 0x2c4a, 0x3ae0, 0x3b29, 0x3bba, 0x3b64, 0x260a, 0x38f8, +0x2679, 0x3412, 0x395a, 0x3054, 0x3ac9, 0x3bb3, 0x31a7, 0x38f7, 0x1d33, 0x3aeb, 0x38f5, 0x3649, 0x3aab, 0x3894, 0x353b, 0x3bbf, 0x37e2, 0x3b2d, 0x3a05, 0x3b7f, 0x318f, 0x2487, 0x3a3b, 0x36e8, 0x35d0, 0x2e1b, 0x3a03, 0x3bb9, 0x2d71, 0x32e5, 0x31c0, 0x2a74, 0x3898, 0x3ae0, 0x381b, 0x308d, 0x3afa, 0x2e44, 0x3aa2, 0x39cb, 0x3a19, 0x321f, 0x3975, 0x3a94, 0x20b7, 0x3843, 0x3942, 0x38c2, 0x3587, 0x3ba0, 0x3b5b, 0x3981, 0x3ba0, 0x3988, 0x2fc0, 0x34d2, 0x30ad, 0x3102, 0x394d, 0x38ef, 0x353c, 0x39d3, 0x3b57, 0x36c4, 0x3619, 0x3a4d, 0x382f, 0x35e7, 0x26ce, 0x33c6, 0x25a6, 0x36b8, 0x3b5f, 0x3a6d, 0x34cb, 0x2bb8, 0x368b, 0x3368, 0x312a, 0x3869, 0x37a7, 0x3804, 0x34af, 0x39ff, 0x350d, 0x358e, 0x3a40, 0x349c, 0x3ac3, 0x39fa, 0x3153, 0x38da, 0x390b, 0x30ea, 0x3205, 0x3915, +0x3a69, 0x385c, 0x34dc, 0x2e57, 0x2dff, 0x2a23, 0x2f74, 0x2efc, 0x397f, 0x367e, 0x2932, 0x3565, 0x38f6, 0x3bae, 0x3abe, 0x34cf, 0x39f9, 0x3995, 0x3844, 0x3846, 0x3674, 0x39ab, 0x382b, 0x3aa9, 0x36eb, 0x3a6f, 0x37d9, 0x3804, 0x2c69, 0x3883, 0x367d, 0x3b09, 0x25e5, 0x34d7, 0x3848, 0x310c, 0x3bdf, 0x3890, 0x3623, 0x3951, 0x3a1e, 0x385c, 0x3a27, 0x2747, 0x37f7, 0x344d, 0x2903, 0x3b96, 0x396d, 0x3868, 0x3766, 0x3689, 0x3705, 0x2dc4, 0x39f1, 0x389b, 0x39b0, 0x31b3, 0x3a14, 0x309a, 0x3ba3, 0x32a9, 0x3652, 0x390d, 0x316f, 0x3812, 0x38dd, 0x3473, 0x396a, 0x3b35, 0x3a31, 0x2cb3, 0x1c90, 0x3794, 0x372c, 0x3238, 0x3b57, 0x3516, 0x3b9c, 0x3a83, 0x386e, 0x3747, 0x353b, 0x31d2, 0x3b04, 0x338e, 0x3802, 0x373c, 0x373c, 0x380f, 0x28c7, 0x3936, 0x37eb, 0x32a6, 0x30cc, 0x3be5, +0x3428, 0x3592, 0x3226, 0x38dd, 0x3823, 0x374e, 0x3ac7, 0x38cb, 0x32a9, 0x354b, 0x3517, 0x2f43, 0x3812, 0x3a7a, 0x3627, 0x3b87, 0x3849, 0x377a, 0x2fae, 0x3bf8, 0x38e2, 0x387d, 0x3bab, 0x3a95, 0x31c0, 0x2be8, 0x30fb, 0x3bd8, 0x3828, 0x2ac0, 0x39ef, 0x3927, 0x2417, 0x34a8, 0x3626, 0x3751, 0x3b5b, 0x3a42, 0x2c4c, 0x3806, 0x358e, 0x34c1, 0x2d4f, 0x3bda, 0x3990, 0x3651, 0x3431, 0x31a2, 0x3379, 0x339a, 0x37cf, 0x3bf3, 0x3ada, 0x384a, 0x373d, 0x38a4, 0x2d47, 0x390a, 0x312a, 0x3adb, 0x3bee, 0x3463, 0x3857, 0x3950, 0x349f, 0x3a8a, 0x3767, 0x3552, 0x2d8a, 0x2cc8, 0x36cd, 0x3510, 0x3a04, 0x35ac, 0x3b20, 0x3076, 0x3a93, 0x36d0, 0x315a, 0x3af1, 0x355d, 0x3b34, 0x3b5c, 0x2247, 0x37c7, 0x3b02, 0x3a5d, 0x3669, 0x282c, 0x3b81, 0x319c, 0x3700, 0x3a0d, 0x33c0, 0x3985, 0x335e, +0x3af9, 0x3733, 0x2f0c, 0x392a, 0x2528, 0x34c8, 0x39e5, 0x3409, 0x3424, 0x389e, 0x358a, 0x3664, 0x3541, 0x38fa, 0x1d31, 0x2d02, 0x3889, 0x3690, 0x3a15, 0x3a4b, 0x364a, 0x3791, 0x3a6f, 0x3aa1, 0x3ab0, 0x39ed, 0x37da, 0x3abc, 0x3b09, 0x376d, 0x2c63, 0x314f, 0x34b9, 0x3142, 0x39cf, 0x3242, 0x384f, 0x3bf9, 0x36a1, 0x358d, 0x3ade, 0x3bc9, 0x347d, 0x3a5a, 0x3b4e, 0x3aa3, 0x39bf, 0x318d, 0x3a37, 0x3833, 0x333b, 0x3bb9, 0x39f4, 0x2ff2, 0x38b3, 0x3508, 0x3817, 0x3bd8, 0x35a8, 0x38b0, 0x3aac, 0x3984, 0x3bff, 0x29ea, 0x34ca, 0x38c6, 0x3885, 0x3bd8, 0x38df, 0x38fa, 0x358e, 0x3528, 0x39e8, 0x2d40, 0x3464, 0x3bac, 0x3ad1, 0x399b, 0x3a77, 0x3bfe, 0x3b52, 0x3934, 0x35ca, 0x3bf7, 0x3852, 0x3858, 0x35a1, 0x3a72, 0x34d7, 0x39e3, 0x2fe5, 0x3b1c, 0x3aee, 0x3bf7, 0x25f0, 0x3881, +0x376e, 0x3833, 0x3ab2, 0x3b59, 0x3b7f, 0x3ac3, 0x3954, 0x302d, 0x3a5d, 0x38f9, 0x3a41, 0x3a0f, 0x33a5, 0x3150, 0x29b7, 0x39aa, 0x35d5, 0x31db, 0x389b, 0x3aa1, 0x3529, 0x3bf1, 0x38de, 0x39a9, 0x321d, 0x35d6, 0x3423, 0x3be2, 0x34b2, 0x3b42, 0x31d8, 0x345b, 0x3a2d, 0x3b72, 0x3a10, 0x338a, 0x3b84, 0x3be8, 0x3810, 0x38a5, 0x3ba8, 0x3921, 0x3ac0, 0x3329, 0x3bca, 0x3bbb, 0x389a, 0x35f3, 0x3908, 0x3927, 0x3534, 0x381b, 0x2d5f, 0x3bef, 0x35f6, 0x3b13, 0x3834, 0x25d5, 0x30f9, 0x397c, 0x31af, 0x3867, 0x2cc7, 0x28ea, 0x3afe, 0x3014, 0x3806, 0x31c4, 0x39fa, 0x3bb6, 0x250c, 0x391b, 0x39a4, 0x37e3, 0x38d9, 0x3747, 0x2b7e, 0x3939, 0x32d2, 0x3a48, 0x38c3, 0x312d, 0x3a2d, 0x3afd, 0x3101, 0x3b28, 0x370d, 0x2fce, 0x32fc, 0x3840, 0x39f5, 0x37b6, 0x39df, 0x1d49, 0x3b9b, 0x3694, +0x3580, 0x392f, 0x3953, 0x3ac8, 0x3af3, 0x33cd, 0x39a0, 0x3672, 0x373d, 0x236a, 0x3935, 0x39fa, 0x348e, 0x3759, 0x348d, 0x36e7, 0x391b, 0x3b46, 0x386c, 0x3515, 0x389f, 0x3b21, 0x3aef, 0x3bf5, 0x3a2d, 0x3428, 0x39d1, 0x3931, 0x39af, 0x38ba, 0x2cbf, 0x3bf4, 0x31be, 0x2dd5, 0x350d, 0x3af6, 0x2044, 0x36ae, 0x3810, 0x3690, 0x31f8, 0x2ed1, 0x3a21, 0x3b7b, 0x3a96, 0x355c, 0x3704, 0x34e4, 0x38d3, 0x2f90, 0x3902, 0x37b1, 0x3b2a, 0x3a69, 0x3792, 0x338b, 0x3006, 0x345e, 0x3530, 0x3b40, 0x3733, 0x2c59, 0x3bf1, 0x39e6, 0x3b20, 0x3bc1, 0x3b71, 0x37fc, 0x363f, 0x36f9, 0x3b39, 0x380a, 0x3516, 0x3814, 0x34b8, 0x3493, 0x3bbe, 0x328b, 0x3709, 0x393b, 0x373e, 0x3929, 0x37c0, 0x3464, 0x39f8, 0x35d1, 0x364e, 0x39ed, 0x3806, 0x398c, 0x39e1, 0x3be5, 0x3317, 0x3482, 0x3b35, 0x3bc5, +0x2be7, 0x3026, 0x3b12, 0x3476, 0x3967, 0x3767, 0x3a01, 0x385a, 0x30f5, 0x2ccc, 0x349d, 0x2811, 0x399c, 0x3afe, 0x39ee, 0x3903, 0x3490, 0x2d4b, 0x367c, 0x361f, 0x3add, 0x312b, 0x3502, 0x3a4b, 0x3b74, 0x38b0, 0x31bd, 0x3327, 0x3a68, 0x3078, 0x3811, 0x3bce, 0x3867, 0x362d, 0x39f7, 0x2c93, 0x325f, 0x3370, 0x3bcf, 0x3b0c, 0x3656, 0x3644, 0x3130, 0x34f1, 0x326f, 0x3ab4, 0x38b5, 0x2e0b, 0x38ec, 0x3b21, 0x3be6, 0x3a39, 0x38f2, 0x3621, 0x3bf7, 0x390d, 0x39ef, 0x2b80, 0x394b, 0x3b3c, 0x31c4, 0x1a0a, 0x354e, 0x3655, 0x3564, 0x2b0e, 0x3072, 0x3838, 0x3190, 0x3b46, 0x3909, 0x31d8, 0x3b8d, 0x3b39, 0x3773, 0x35a3, 0x394f, 0x3971, 0x3919, 0x3848, 0x3a7d, 0x3b3d, 0x357e, 0x2755, 0x3a56, 0x3488, 0x3ac6, 0x3a25, 0x3991, 0x347e, 0x3472, 0x3b22, 0x38c8, 0x3b54, 0x384c, 0x28a2, +0x3b41, 0x3ab1, 0x3a5d, 0x35d6, 0x36e5, 0x3a33, 0x3a55, 0x3457, 0x35b4, 0x34d5, 0x389b, 0x3928, 0x3be7, 0x32d5, 0x3b26, 0x3790, 0x3203, 0x3296, 0x3b45, 0x3bc4, 0x38d4, 0x34f7, 0x3b50, 0x3ab1, 0x36eb, 0x3120, 0x35af, 0x396d, 0x28f5, 0x37f3, 0x3b0b, 0x31a6, 0x3a46, 0x1ce8, 0x38f3, 0x39c2, 0x3970, 0x3bb5, 0x28d7, 0x3b21, 0x39b4, 0x355e, 0x35a6, 0x3bb9, 0x2cc3, 0x38c2, 0x376c, 0x2e88, 0x34b2, 0x3967, 0x3325, 0x3bda, 0x37c6, 0x39dc, 0x3135, 0x3966, 0x22f4, 0x3433, 0x37e1, 0x34dd, 0x3900, 0x3ae7, 0x38ee, 0x3926, 0x2a4a, 0x3a16, 0x3ba9, 0x38de, 0x343a, 0x3a6f, 0x315c, 0x392b, 0x38ce, 0x35c3, 0x3810, 0x3ae9, 0x3627, 0x29b7, 0x2816, 0x289e, 0x3bb0, 0x39d1, 0x335c, 0x39b1, 0x3b48, 0x3614, 0x3581, 0x33df, 0x332b, 0x3750, 0x3438, 0x3309, 0x3854, 0x3830, 0x32e3, 0x3a27, +0x38f4, 0x3074, 0x351c, 0x2b8d, 0x35c2, 0x33dc, 0x3972, 0x39f2, 0x3af7, 0x3b12, 0x3b1a, 0x352d, 0x335e, 0x357a, 0x32e1, 0x3a63, 0x3426, 0x316d, 0x3903, 0x36e4, 0x36cc, 0x35fd, 0x3b29, 0x3304, 0x387e, 0x347d, 0x3af3, 0x33b5, 0x3859, 0x3800, 0x39b1, 0x3ae4, 0x2839, 0x38e6, 0x3341, 0x3346, 0x3ad4, 0x38b2, 0x392b, 0x3bfa, 0x3090, 0x36f1, 0x29b5, 0x2fa6, 0x3bb5, 0x36bc, 0x30c4, 0x38f4, 0x1e3b, 0x34fd, 0x2c4c, 0x3a6b, 0x393c, 0x3aba, 0x3866, 0x356a, 0x3441, 0x3802, 0x367d, 0x3546, 0x380f, 0x38f2, 0x354b, 0x30af, 0x2e2f, 0x37cb, 0x3994, 0x36e3, 0x37a7, 0x3a8c, 0x395c, 0x3aa2, 0x2c2f, 0x35b4, 0x3180, 0x3ad0, 0x3237, 0x3ac6, 0x31f5, 0x3637, 0x398c, 0x3443, 0x3bd6, 0x3b63, 0x35d0, 0x3351, 0x3336, 0x3aa8, 0x3b66, 0x39df, 0x36fe, 0x3477, 0x3823, 0x38ef, 0x399e, 0x394b, +0x3a85, 0x2d22, 0x39b4, 0x3a4e, 0x3334, 0x1c3b, 0x3466, 0x3469, 0x3820, 0x3a70, 0x2d5e, 0x37d9, 0x37bb, 0x3bd8, 0x25ea, 0x3292, 0x3a58, 0x3847, 0x3aea, 0x389d, 0x386e, 0x3870, 0x3bc4, 0x3a95, 0x307f, 0x3928, 0x31c2, 0x38e5, 0x3994, 0x3b83, 0x297a, 0x33c0, 0x3a55, 0x390d, 0x3550, 0x3447, 0x3b6d, 0x2809, 0x3993, 0x2944, 0x3ae1, 0x3845, 0x3703, 0x38fb, 0x3880, 0x3b1b, 0x3312, 0x2d51, 0x2e33, 0x3ba5, 0x3805, 0x3359, 0x3b3c, 0x3663, 0x354f, 0x3904, 0x3787, 0x39ac, 0x3bc4, 0x2f65, 0x3778, 0x3ba8, 0x3100, 0x3840, 0x3b67, 0x3abe, 0x2d5b, 0x391f, 0x3670, 0x39b3, 0x3a4e, 0x3947, 0x2e35, 0x3755, 0x3bb9, 0x31bf, 0x3ba6, 0x3a10, 0x39d1, 0x3aae, 0x3b88, 0x380a, 0x345f, 0x3aeb, 0x3660, 0x373a, 0x2d6f, 0x33b0, 0x3518, 0x3b25, 0x3872, 0x3aab, 0x2ed0, 0x347d, 0x2fd0, 0x38c5, +0x2cda, 0x353c, 0x3866, 0x2332, 0x3bde, 0x3912, 0x3762, 0x3ae3, 0x3a55, 0x39df, 0x32e0, 0x3b63, 0x3ac3, 0x3a85, 0x34e8, 0x38d7, 0x3543, 0x3a1e, 0x36e7, 0x3008, 0x359e, 0x298b, 0x3b6c, 0x3b51, 0x38d1, 0x3444, 0x39ec, 0x391e, 0x3a6d, 0x39e9, 0x3b7c, 0x36bb, 0x21f7, 0x2896, 0x3308, 0x3afc, 0x3879, 0x2cac, 0x2699, 0x3475, 0x331b, 0x340f, 0x373b, 0x3814, 0x3b6d, 0x39bb, 0x2e09, 0x3284, 0x286f, 0x371d, 0x3966, 0x27c2, 0x3ac4, 0x3b92, 0x3ba4, 0x3acb, 0x30b0, 0x3a11, 0x3721, 0x34cc, 0x3b84, 0x3002, 0x38bc, 0x341e, 0x36c3, 0x3bd2, 0x39fe, 0x380f, 0x38c3, 0x3a9c, 0x373a, 0x3a79, 0x3bfa, 0x31c7, 0x340d, 0x3602, 0x38e4, 0x1ddd, 0x38b2, 0x3985, 0x2574, 0x339e, 0x3b39, 0x3765, 0x3369, 0x39b6, 0x3974, 0x3a25, 0x362c, 0x3aeb, 0x3935, 0x3271, 0x2de2, 0x35d5, 0x3b93, 0x32f0, +0x3425, 0x3871, 0x2d6d, 0x3070, 0x319d, 0x33b5, 0x333e, 0x397e, 0x2a76, 0x39eb, 0x3b34, 0x3988, 0x3b40, 0x36de, 0x39a6, 0x38d9, 0x398b, 0x3623, 0x325e, 0x37d1, 0x3406, 0x377f, 0x3a58, 0x3486, 0x3855, 0x3acc, 0x378c, 0x3b1b, 0x3bed, 0x3aae, 0x3998, 0x39dc, 0x38a0, 0x3b74, 0x38a1, 0x2a79, 0x2e26, 0x39fd, 0x377c, 0x39bb, 0x3ad6, 0x1a6c, 0x2e6b, 0x377b, 0x3b5c, 0x39bd, 0x32f6, 0x371a, 0x348d, 0x348b, 0x359c, 0x38c7, 0x3022, 0x389f, 0x3a5b, 0x328d, 0x3158, 0x3206, 0x364d, 0x3a90, 0x36df, 0x3934, 0x3a5e, 0x39e4, 0x3a42, 0x3afe, 0x38d5, 0x36c5, 0x3050, 0x2acf, 0x3a39, 0x29da, 0x365c, 0x364e, 0x2bc, 0x3850, 0x381b, 0x39b2, 0x3643, 0x390a, 0x30da, 0x3243, 0x2dd9, 0x3b6c, 0x38cc, 0x309c, 0x27f0, 0x3b84, 0x3979, 0x3b3e, 0x3b08, 0x376a, 0x390d, 0x2d9e, 0x3527, 0x3a25, +0x33e2, 0x3840, 0x3afd, 0x385b, 0x350a, 0x3b04, 0x377a, 0x38ad, 0x3aec, 0x39d7, 0x38ad, 0x3b9d, 0x37d6, 0x36f1, 0x3586, 0x325c, 0x2cf4, 0x3b30, 0x387d, 0x3a1d, 0x3a29, 0x3048, 0x3bdc, 0x30d7, 0x359a, 0x30c4, 0x3a22, 0x3148, 0x3bd3, 0x3699, 0x353e, 0x398f, 0x36f2, 0x3115, 0x3505, 0x39bc, 0x39b1, 0x37ec, 0x353f, 0x379f, 0x36df, 0x3479, 0x3815, 0x3503, 0x30dd, 0x39c5, 0x3a1e, 0x30a0, 0x385d, 0x3a44, 0x3819, 0x3599, 0x3994, 0x394a, 0x316a, 0x39ab, 0x2c23, 0x3985, 0x3bbe, 0x3bdd, 0x3486, 0x36f7, 0x3559, 0x391b, 0x2642, 0x3a96, 0x3bac, 0x367c, 0x3b59, 0x38f0, 0x268a, 0x3a03, 0x3106, 0x3bd1, 0x3279, 0x36c9, 0x3b40, 0x3750, 0x2e02, 0x3965, 0x3636, 0x3afb, 0x3960, 0x38d6, 0x3a62, 0x2910, 0x3a84, 0x359d, 0x3ad9, 0x33f7, 0x3b5d, 0x26e1, 0x376b, 0x3824, 0x2852, 0x3982, +0x3797, 0x36e3, 0x3924, 0x3947, 0x3b36, 0x361e, 0x376b, 0x365b, 0x37e8, 0x329f, 0x3970, 0x3126, 0x3562, 0x3b17, 0x3aca, 0x3602, 0x3b9d, 0x394a, 0x2388, 0x2b85, 0x3a24, 0x3a66, 0x3648, 0x28d2, 0x3b67, 0x38b8, 0x3b15, 0x352c, 0x3b39, 0x3838, 0x388e, 0x3576, 0x39f5, 0x31f9, 0x35a0, 0x3a41, 0x3afa, 0x3513, 0x3688, 0x3b2b, 0x32b6, 0x32de, 0x3949, 0x3b1e, 0x3a1e, 0x280d, 0x38da, 0x388e, 0x316f, 0x38d4, 0x29c5, 0x3637, 0x34af, 0x2d8c, 0x3872, 0x30ac, 0x396e, 0x38bd, 0x39ab, 0x3b69, 0x3120, 0x355f, 0x2e7f, 0x35ab, 0x3821, 0x2b37, 0x3bc5, 0x3a0a, 0x3572, 0x30b5, 0x399e, 0x2a66, 0x31b8, 0x3abc, 0x3754, 0x36a7, 0x3b8b, 0x347d, 0x3b36, 0x3924, 0x2f95, 0x3ba9, 0x2224, 0x34cd, 0x3aaf, 0x3608, 0x34ce, 0x344b, 0x34b5, 0x3bd8, 0x37d3, 0x3757, 0x2c21, 0x3b8f, 0x38d3, 0x3aa4, +0x39c6, 0x381d, 0x3842, 0x3bd1, 0x3092, 0x35d5, 0x251f, 0x2529, 0x3133, 0x3862, 0x3444, 0x3519, 0x3b60, 0x2fb5, 0x38c7, 0x387e, 0x3138, 0x36a9, 0x353c, 0x3411, 0x3bd3, 0x2a07, 0x3a5c, 0x3826, 0x3228, 0x334d, 0x2f07, 0x2c6a, 0x3b43, 0x3425, 0x3568, 0x382a, 0x348c, 0x3b5f, 0x3745, 0x2ae7, 0x3772, 0x302b, 0x336a, 0x383a, 0x3361, 0x3110, 0x3684, 0x39d1, 0x3151, 0x34f1, 0x295b, 0x26ba, 0x3b1b, 0x38d5, 0x36b1, 0x3069, 0x3bfa, 0x385f, 0x3695, 0x3b50, 0x3be0, 0x3741, 0x3af4, 0x2cd1, 0x3862, 0x352d, 0x3b8d, 0x3800, 0x3868, 0x3931, 0x37f8, 0x3ad0, 0x341d, 0x3507, 0x3602, 0x3831, 0x393b, 0x3695, 0x380e, 0x383f, 0x38de, 0x3954, 0x38b3, 0x20be, 0x2428, 0x2e52, 0x3b5b, 0x20ea, 0x3aa9, 0x3430, 0x3aac, 0x393b, 0x32e7, 0x2d58, 0x366e, 0x32f5, 0x3990, 0x3b9d, 0x2f4c, 0x3420, +0x38d5, 0x31e4, 0x2c0e, 0x3742, 0x3bc0, 0x30f9, 0x3656, 0x3aaa, 0x385e, 0x3908, 0x3584, 0x2814, 0x3891, 0x3553, 0x391c, 0x3330, 0x38e5, 0x1aaf, 0x3be5, 0x3ac7, 0x3936, 0x3bf5, 0x361f, 0x39b3, 0x38c1, 0x394a, 0x39e1, 0x2b67, 0x3585, 0x380e, 0x3344, 0x3001, 0x3983, 0x31ec, 0x3ac2, 0x380a, 0x32c2, 0x34aa, 0x393d, 0x364d, 0x239a, 0x3727, 0x3b5c, 0x3265, 0x2d1f, 0x32dd, 0x3ae3, 0x36a0, 0x3600, 0x38f3, 0x378a, 0x357c, 0x34dd, 0x39a9, 0x3846, 0x2431, 0x3abe, 0x36fa, 0x38bd, 0x3696, 0x2c2e, 0x229d, 0x386f, 0x3a8b, 0x3aa4, 0x34f4, 0x35af, 0x34c1, 0x2222, 0x1820, 0x3a30, 0x38ec, 0x3855, 0x3952, 0x3873, 0x384b, 0x3bb1, 0x35aa, 0x363a, 0x380e, 0x3b3d, 0x397a, 0x38ca, 0x3a88, 0x35de, 0x3bac, 0x3ab4, 0x3654, 0x38f3, 0x2076, 0x3585, 0x300a, 0x3a71, 0x3b90, 0x3a83, 0x3a86, +0x3ab7, 0x3bee, 0x37bd, 0x3b2c, 0x39fb, 0x274a, 0x3a7d, 0x38df, 0x2a8d, 0x3611, 0x34b4, 0x38e4, 0x36f8, 0x3b2a, 0x364b, 0x3ac3, 0x2d73, 0x38e3, 0x2fcd, 0x3af3, 0x359e, 0x3afd, 0x3b13, 0x3a89, 0x379e, 0x35d5, 0x30bc, 0x34ae, 0x3a6a, 0x312e, 0x293a, 0x39df, 0x3a97, 0x39db, 0x3b98, 0x3818, 0x344f, 0x26c9, 0x3a30, 0x3505, 0x3885, 0x3206, 0x38e4, 0x3940, 0x3a5d, 0x3aab, 0x35e7, 0x3458, 0x381d, 0x3959, 0x3930, 0x3476, 0x348f, 0x3469, 0x2e03, 0x3889, 0x3ba1, 0x35ac, 0x3ac1, 0x3bcb, 0x3acc, 0x34d7, 0x38bd, 0x2b4c, 0x21ff, 0x3802, 0x34a4, 0x36f9, 0x352f, 0x394e, 0x3796, 0x2456, 0x38c8, 0x302d, 0x2de8, 0x3539, 0x39e8, 0x3560, 0x3913, 0x3bbf, 0x331a, 0x3969, 0x3a9e, 0x3972, 0x3a32, 0x3a15, 0x386f, 0x3a17, 0x3956, 0x39c3, 0x3762, 0x3b51, 0x32af, 0x3b58, 0x34ff, 0x319d, +0x3431, 0x34fc, 0x3a81, 0x3ada, 0x39e6, 0x3a49, 0x33ad, 0x38c8, 0x33cb, 0x3576, 0x3aaf, 0x34ee, 0x2e14, 0x38d0, 0x39c1, 0x29cb, 0x3112, 0x3593, 0x2f07, 0x2fa0, 0x34c0, 0x366e, 0x3998, 0x3540, 0x37c6, 0x39b7, 0x396d, 0x3319, 0x341e, 0x354a, 0x3773, 0x2c1c, 0x3bfc, 0x381b, 0x3529, 0x37f8, 0x3bbd, 0x37a2, 0x36f1, 0x3870, 0x3a69, 0x3494, 0x3169, 0x3455, 0x356f, 0x32e7, 0x35c0, 0x398e, 0x2c2f, 0x2ffe, 0x3140, 0x39ff, 0x3aae, 0x3bb7, 0x35b8, 0x39b2, 0x3303, 0x3948, 0x3a7f, 0x25f7, 0x3750, 0x357e, 0x3785, 0x3817, 0x3b05, 0x3a90, 0x38ad, 0x376f, 0x3ac5, 0x3a07, 0x3311, 0x3b9b, 0x24d1, 0x3451, 0x32a6, 0x342c, 0x3a8c, 0x360a, 0x36ad, 0x3abf, 0x2116, 0x3bb1, 0x328b, 0x37a9, 0x3aab, 0x39c9, 0x345e, 0x36b0, 0x384c, 0x3bfb, 0x2d31, 0x3a05, 0x3427, 0x3726, 0x3743, 0x3398, +0x3b0a, 0x3b85, 0x33ed, 0x32b0, 0x3a95, 0x2135, 0x3712, 0x2f34, 0x378e, 0x390f, 0x39b1, 0x2ad2, 0x300a, 0x34ec, 0x3a00, 0x20f8, 0x3b47, 0x3861, 0x341d, 0x3015, 0x3959, 0x37c9, 0x2f6c, 0x3758, 0x37e5, 0x353b, 0x38da, 0x39ae, 0x3947, 0x36d7, 0x3284, 0x3bb9, 0x357f, 0x3999, 0x39c2, 0x3889, 0x38b7, 0x3684, 0x355e, 0x390d, 0x3b96, 0x385c, 0x3ba5, 0x36c0, 0x3bbc, 0x37fc, 0x391c, 0x3a42, 0x39ca, 0x34ae, 0x394c, 0x3271, 0x2cd6, 0x343b, 0x2d7b, 0x2eea, 0x38a3, 0x2ca6, 0x3549, 0x3847, 0x3bcb, 0x3adc, 0x2e68, 0x3809, 0x3930, 0x357b, 0x3b89, 0x3b94, 0x3875, 0x3640, 0x387c, 0x376c, 0x33b9, 0x3b7e, 0x384c, 0x3906, 0x3b91, 0x209d, 0x2c43, 0x32cf, 0x3686, 0x310c, 0x3a7a, 0x38ef, 0x3645, 0x354a, 0x3670, 0x3732, 0x37b9, 0x3928, 0x358d, 0x3893, 0x3602, 0x2e3d, 0x2a22, 0x2f70, +0x34c9, 0x38f4, 0x374e, 0x3828, 0x37ff, 0x3723, 0x35b4, 0x34b7, 0x3b94, 0x265a, 0x3658, 0x3938, 0x38f5, 0x3bb9, 0x3960, 0x3b5c, 0x38d3, 0x31ea, 0x3412, 0x3be3, 0x3b95, 0x3a20, 0x353b, 0x39c5, 0x3291, 0x387d, 0x3af8, 0x3915, 0x3af7, 0x3be4, 0x399c, 0x34e5, 0x324b, 0x3838, 0x3914, 0x385e, 0x38cd, 0x39fd, 0x39a0, 0x3495, 0x38a1, 0x382c, 0x2ed2, 0x3866, 0x33d8, 0x3396, 0x3b0c, 0x39c8, 0x314f, 0x346f, 0x3aee, 0x313e, 0x39b8, 0x34fe, 0x3882, 0x36d2, 0x3a8b, 0x3a8e, 0x3ae4, 0x3b31, 0x30da, 0x34e8, 0x38ce, 0x3643, 0x39b6, 0x34fb, 0x38d7, 0x3bde, 0x3ac9, 0x3af2, 0x38fe, 0x275f, 0x3748, 0x30ee, 0x3010, 0x3b23, 0x3a55, 0x3a43, 0x3a23, 0x37eb, 0x38fa, 0x3335, 0x3996, 0x39a0, 0x360f, 0x2630, 0x39f3, 0x3870, 0x383c, 0x384c, 0x3392, 0x3754, 0x3b4f, 0x3bc1, 0x382f, 0x3802, +0x3bb0, 0x36ad, 0x3a3f, 0x389e, 0x2d0c, 0x34b1, 0x3592, 0x3933, 0x25f1, 0x3ac7, 0x308e, 0x36b7, 0x3ab0, 0x2994, 0x38e4, 0x3689, 0x3c00, 0x3441, 0x30f6, 0x3a71, 0x3b19, 0x394e, 0x3826, 0x19a6, 0x3b2a, 0x3594, 0x3893, 0x34af, 0x3b34, 0x3ab3, 0x37e9, 0x3ba1, 0x3b01, 0x29ca, 0x3715, 0x3643, 0x312e, 0x3289, 0x311d, 0x383e, 0x38dc, 0x33a1, 0x384d, 0x3ba6, 0x3982, 0x34a7, 0x3b20, 0x3728, 0x3add, 0x2f89, 0x377b, 0x3a2d, 0x342e, 0x36e5, 0x3aa2, 0x3864, 0x38fe, 0x2d84, 0x3bef, 0x3bcd, 0x3553, 0x3953, 0x37be, 0x394a, 0x3a5f, 0x1d30, 0x3bfb, 0x3737, 0x3aa1, 0x3b6e, 0x3809, 0x3b5f, 0x389b, 0x3905, 0x3b29, 0x387d, 0x3afc, 0x3807, 0x3881, 0x3a2c, 0x37d5, 0x3a76, 0x35c4, 0x39ec, 0x3abf, 0x36ed, 0x3135, 0x381e, 0x3593, 0x3968, 0x2d97, 0x350c, 0x3a61, 0x3550, 0x2bde, 0x3400, +0x35ed, 0x34e7, 0x3846, 0x2e9e, 0x3afd, 0x3658, 0x36c2, 0x3863, 0x30b9, 0x350a, 0x3a30, 0x34cd, 0x3b2c, 0x3061, 0x3bc4, 0x2e78, 0x3475, 0x388a, 0x3678, 0x30c5, 0x38f2, 0x3807, 0x311d, 0x3aad, 0x3804, 0x3a1b, 0x38bf, 0x2c7f, 0x3be8, 0x3523, 0x32d3, 0x3a33, 0x38f1, 0x34af, 0x3797, 0x32e6, 0x3886, 0x33e8, 0x3a63, 0x34d3, 0x3618, 0x3571, 0x3abb, 0x3a0d, 0x39d4, 0x361c, 0x3b81, 0x3598, 0x301d, 0x390a, 0x2876, 0x39db, 0x344c, 0x3518, 0x3825, 0x33a5, 0x392b, 0x3671, 0x39a6, 0x3320, 0x3a67, 0x3447, 0x3a75, 0x34c7, 0x3ba8, 0x3108, 0x394f, 0x3986, 0x2c4d, 0x3856, 0x3b1c, 0x3343, 0x399d, 0x3a25, 0x2f68, 0x3be3, 0x3131, 0x349d, 0x39b0, 0x32d3, 0x305c, 0x3b49, 0x2e61, 0x36e1, 0x3a0c, 0x36cb, 0x3b96, 0x3648, 0x36a2, 0x3879, 0x387f, 0x3aa3, 0x2ac5, 0x30d8, 0x3424, 0x2bc4, +0x39b8, 0x38d0, 0x3bd2, 0x311b, 0x2cff, 0x2e9c, 0x3908, 0x39d9, 0x3628, 0x3c00, 0x39b7, 0x3a20, 0x3a6d, 0x3909, 0x37c2, 0x2c06, 0x3a29, 0x374d, 0x30c7, 0x3204, 0x392c, 0x3af6, 0x30de, 0x35ec, 0x3b48, 0x3b34, 0x38ec, 0x3b9f, 0x3625, 0x1a62, 0x3681, 0x2cbc, 0x39e6, 0x348b, 0x3726, 0x38d1, 0x35df, 0x382b, 0x3bc9, 0x39e9, 0x3a7b, 0x32df, 0x22ec, 0x35fa, 0x3a1d, 0x3b56, 0x37d2, 0x35af, 0x3bb3, 0x35bf, 0x38f2, 0x3090, 0x3163, 0x2ce6, 0x39a1, 0x3aa2, 0x38d3, 0x398d, 0x3a80, 0x35ff, 0x33e6, 0x3a00, 0x35a3, 0x3a52, 0x3175, 0x337b, 0x39c7, 0x399c, 0x3873, 0x390a, 0x39f9, 0x3766, 0x33d1, 0x38fe, 0x3a2b, 0x37ec, 0x39f9, 0x3980, 0x3ac0, 0x309f, 0x3313, 0x3897, 0x34a5, 0x36fb, 0x3725, 0x3a71, 0x3553, 0x3b09, 0x36ad, 0x3923, 0x3bdd, 0x3b9e, 0x2960, 0x3a59, 0x3a20, 0x375d, +0x39b6, 0x31e6, 0x34bc, 0x391e, 0x38cd, 0xca5, 0x360c, 0x35e6, 0x35b5, 0x3be9, 0x3be4, 0x3bea, 0x3741, 0x302e, 0x3557, 0x3bb1, 0x3be4, 0x342c, 0x350c, 0x352b, 0x3825, 0x3b05, 0x309d, 0x38f8, 0x3be3, 0x2d5d, 0x399a, 0x36b9, 0x3924, 0x3936, 0x3a45, 0x3a8f, 0x3853, 0x38a9, 0x381b, 0x3a9a, 0x393e, 0x31df, 0x3855, 0x38da, 0x37c6, 0x3bd8, 0x34fb, 0x2e5f, 0x3450, 0x304e, 0x3990, 0x29e1, 0x373c, 0x39a5, 0x3a5e, 0x3356, 0x2c13, 0x34a0, 0x3185, 0x3a8a, 0x3672, 0x2ee4, 0x2dbc, 0x22ae, 0x3a88, 0x388c, 0x30ce, 0x384d, 0x3453, 0x3ad0, 0x2e7f, 0x367a, 0x34c5, 0x39d6, 0x35de, 0x39fc, 0x3aa8, 0x3667, 0x3bb9, 0x35e7, 0x38c7, 0x2c83, 0x35a3, 0x35d7, 0x1a7c, 0x393e, 0x3588, 0x39dd, 0x3af3, 0x3965, 0x365b, 0x3a7e, 0x38ed, 0x3990, 0x3786, 0x3b07, 0x350e, 0x38b7, 0x357f, 0x3bb6, +0x2de9, 0x2ef1, 0x2cc9, 0x38a5, 0x347b, 0x310a, 0x351d, 0x3a9b, 0x3a68, 0x2228, 0x35d3, 0x338d, 0x3a3a, 0x24ec, 0x3ad0, 0x385a, 0x1c64, 0x39f9, 0x335e, 0x348c, 0x211e, 0x37d4, 0x353b, 0x3290, 0x3b68, 0x2f75, 0x2ff5, 0x3579, 0x3967, 0x3b5a, 0x3982, 0x3950, 0x35e9, 0x3a85, 0x3be5, 0x3252, 0x359b, 0x3799, 0x38ec, 0x3a0e, 0x3a45, 0x2d8e, 0x389d, 0x34d6, 0x3726, 0x3320, 0x3acd, 0x3642, 0x2574, 0x314a, 0x32a5, 0x3898, 0x370a, 0x3941, 0x340a, 0x2e05, 0x28b8, 0x39ad, 0x392e, 0x3821, 0x38d7, 0x3b07, 0x3485, 0x34d1, 0x399c, 0x1844, 0x2c8f, 0x3964, 0x3b56, 0x2dde, 0x2ede, 0x317b, 0x3a44, 0x3901, 0x3844, 0x382e, 0x29e6, 0x35ad, 0x3913, 0x3430, 0x3604, 0x3a5f, 0x3080, 0x3628, 0x3383, 0x3b3d, 0x385a, 0x38e8, 0x3ade, 0x3af3, 0x3a56, 0x3889, 0x2cf5, 0x3a61, 0x3b6a, 0x3b38, +0x2e45, 0x3736, 0x3743, 0x3680, 0x328f, 0x3a88, 0x39bb, 0x36a0, 0x3957, 0x2f27, 0x3a33, 0x3a9e, 0x3a9e, 0x2e09, 0x3154, 0x37b7, 0x3807, 0x3937, 0x390b, 0x3041, 0x3758, 0x39cf, 0x2e66, 0x2bc5, 0x3461, 0x3897, 0x39fd, 0x3b92, 0x36e3, 0x3a20, 0x3a8d, 0x335b, 0x3be1, 0x383d, 0x38ab, 0x3665, 0x3588, 0x3a4b, 0x33d5, 0x341b, 0x3806, 0x38fd, 0x382e, 0x32c1, 0x38d9, 0x2ccb, 0x292d, 0x380f, 0x35a2, 0x3b6e, 0x34af, 0x3889, 0x3109, 0x3480, 0x34bf, 0x3a56, 0x3163, 0x33fa, 0x345a, 0x39bb, 0x3b6e, 0x3a80, 0x36f6, 0x33c8, 0x3b98, 0x3663, 0x3aaf, 0x3926, 0x3a2d, 0x3a11, 0x33ac, 0x37a0, 0x3986, 0x3374, 0x3667, 0x3482, 0x378a, 0x2a39, 0x3535, 0x34f3, 0x3783, 0x36a7, 0x3606, 0x3843, 0x3acb, 0x2dcc, 0x3961, 0x34ed, 0x3890, 0x38e5, 0x3a7c, 0x384c, 0x39bf, 0x3a6b, 0x34a0, 0x361b, +0x2e5e, 0x3650, 0x3417, 0x36e5, 0x3b4c, 0x3892, 0x38ba, 0x32f3, 0x3b80, 0x39ea, 0x3357, 0x3212, 0x3b42, 0x3622, 0x3c00, 0x34c0, 0x38e0, 0x360c, 0x36bc, 0x34b0, 0x3b53, 0x2587, 0x387e, 0x3966, 0x3800, 0x35e2, 0x3917, 0x3be4, 0x378f, 0x2d21, 0x3415, 0x2ea8, 0x34d0, 0x36ac, 0x3a51, 0x3ba5, 0x3b7e, 0x2d48, 0x39c1, 0x30d5, 0x3244, 0x3894, 0x3aaa, 0x3451, 0x3a9f, 0x2e40, 0x3832, 0x35f6, 0x3429, 0x253c, 0x2c2e, 0x3bd6, 0x3a5c, 0x3622, 0x3155, 0x3a50, 0x313f, 0x31dc, 0x3b9d, 0x2d67, 0x3914, 0x38f5, 0x3ab6, 0x3bd3, 0x3754, 0x3683, 0x32b0, 0x31dd, 0x3911, 0x37c2, 0x2b09, 0x33b7, 0x3b7c, 0x344a, 0x2a7c, 0x3350, 0x3792, 0x36ea, 0x3463, 0x3a87, 0x29be, 0x3a23, 0x390d, 0x3b10, 0x381d, 0x3227, 0x38f4, 0x39bc, 0x3a71, 0x375d, 0x349d, 0x271c, 0x3921, 0x2e0a, 0x3b08, 0x3ba3, +0x3a92, 0x3923, 0x3012, 0x3527, 0x2ba3, 0x3aa1, 0x3ba3, 0x349a, 0x3729, 0x393a, 0x2ea9, 0x398a, 0x38a5, 0x3ad5, 0x38e6, 0x3a7b, 0x3783, 0x3822, 0x371a, 0x3247, 0x3af0, 0x3ac9, 0x35f6, 0x39d5, 0x39c3, 0x39bc, 0x3a9e, 0x39a8, 0x3af5, 0x3a01, 0x39ab, 0x35f6, 0x392e, 0x3bca, 0x2f53, 0x3595, 0x34c6, 0x3a96, 0x396f, 0x3515, 0x39c5, 0x37b3, 0x37c4, 0x2f64, 0x37ed, 0x3013, 0x3939, 0x3be7, 0x3a5e, 0x3526, 0x3a32, 0x3a8c, 0x334e, 0x39d6, 0x3b45, 0x395d, 0x3500, 0x375f, 0x2498, 0x3ad9, 0x3a04, 0x3961, 0x3a1e, 0x38cb, 0x383d, 0x35c3, 0x37ec, 0x38ab, 0x3aca, 0x29aa, 0x3480, 0x374c, 0x35d1, 0x33cc, 0x387a, 0x3544, 0x367d, 0x3259, 0x306b, 0x39c9, 0x323b, 0x3a58, 0x3156, 0x353d, 0x323a, 0x2987, 0x31ff, 0x3998, 0x311c, 0x38d0, 0x3a03, 0x38cc, 0x35b5, 0x398b, 0x3a0c, 0x3a96, +0x3ab6, 0x3a1c, 0x3a48, 0x3974, 0x3815, 0x368a, 0x36d5, 0x37aa, 0x345b, 0x3bd3, 0x3b1f, 0x3167, 0x2ecf, 0x3a80, 0x3636, 0x3a8e, 0x39d3, 0x3a1a, 0x3087, 0x3823, 0x3b9c, 0x3969, 0x2fb9, 0x3bb8, 0x39c5, 0x3991, 0x3392, 0x38f2, 0x3939, 0x2c68, 0x3b0a, 0x383a, 0x3bd7, 0x3a74, 0x3956, 0x3465, 0x39f3, 0x3880, 0x39bc, 0x39c5, 0x35e4, 0x3738, 0x3856, 0x399b, 0x3bda, 0x3366, 0x31a0, 0x3868, 0x3aa3, 0x38bd, 0x305a, 0x3743, 0x3a85, 0x2336, 0x39eb, 0x2d06, 0x37df, 0x3852, 0x3b46, 0x302c, 0x3a1e, 0x3b46, 0x3068, 0x3bd6, 0x381d, 0x31f6, 0x3491, 0x3848, 0x3315, 0x38c7, 0x3600, 0x3b9d, 0x38b2, 0x3977, 0x388c, 0x3ac2, 0x37ee, 0x35c4, 0x3b45, 0x374a, 0x3355, 0x1dbb, 0x38ec, 0x3003, 0x3a97, 0x311f, 0x3749, 0x2b59, 0x3842, 0x34a9, 0x3561, 0x3b07, 0x3a4a, 0x292f, 0x3961, 0x3546, +0x35dd, 0x3966, 0x2c7d, 0x3833, 0x285f, 0x20f2, 0x3a12, 0x392b, 0x2bae, 0x2fa6, 0x3a36, 0x303c, 0x3303, 0x2bc6, 0x3b94, 0x3a0e, 0x3ae2, 0x3a3c, 0x315c, 0x37bb, 0x3452, 0x3267, 0x2731, 0x3985, 0x3bcf, 0x397e, 0x2fae, 0x28b1, 0x39cc, 0x3536, 0x37a1, 0x3aa3, 0x396b, 0x2c59, 0x3bbf, 0x303c, 0x3bcf, 0x3a8e, 0x3afc, 0x3ab1, 0x2943, 0x3a17, 0x3552, 0x2f57, 0x3353, 0x3512, 0x2e78, 0x3b53, 0x388e, 0x399c, 0x336e, 0x38d4, 0x3849, 0x32b1, 0x316a, 0x2877, 0x2feb, 0x35b9, 0x375d, 0x29fa, 0x3ad2, 0x3569, 0x3981, 0x3455, 0x3847, 0x3a81, 0x3514, 0x29d0, 0x3137, 0x39ba, 0x3b1a, 0x2dd4, 0x383f, 0x39f7, 0x37f6, 0x3964, 0x371c, 0x39e4, 0x3136, 0x35da, 0x3b2f, 0x3946, 0x36dd, 0x3801, 0x3927, 0x2614, 0x2ca7, 0x39ae, 0x3401, 0x3242, 0x3a91, 0x3a1d, 0x3790, 0x333f, 0x3bb9, 0x3a1d, +0x3be5, 0x39e1, 0x35f3, 0x38fd, 0x3726, 0x3946, 0x3baf, 0x3a2f, 0x15e0, 0x318b, 0x359c, 0x2fbf, 0x3060, 0x3a09, 0x35c9, 0x39e2, 0x317e, 0x25ec, 0x3546, 0x3254, 0x36e9, 0x374c, 0x35c0, 0x3787, 0x3b82, 0x3727, 0x34a8, 0x3820, 0x3aee, 0x3814, 0x33da, 0x357f, 0x2f56, 0x3231, 0x3ba0, 0x35e4, 0x3998, 0x3609, 0x3979, 0x3311, 0x33e8, 0x39bd, 0x39f0, 0x3a32, 0x31dc, 0x3aee, 0x310e, 0x3843, 0x38c1, 0x382a, 0x382f, 0x3b24, 0x335c, 0x383b, 0x24f4, 0x371c, 0x3162, 0x2dce, 0x3ae6, 0x2d1e, 0x3a20, 0x39e9, 0x39c5, 0x219a, 0x37d4, 0x34fe, 0x14f6, 0x2e13, 0x3949, 0x3b98, 0x3a42, 0x3aee, 0x298f, 0x3740, 0x28e0, 0x3854, 0x3925, 0x3951, 0x3426, 0x3b4a, 0x3043, 0x345d, 0x3aec, 0x3b89, 0x378c, 0x355a, 0x3287, 0x340c, 0x35fb, 0x2f7d, 0x3839, 0x383a, 0x3a66, 0x388c, 0x36b3, 0x3908, +0x3323, 0x35b2, 0x3823, 0x3ad3, 0x3b52, 0x3634, 0x3a70, 0x3b37, 0x2d59, 0x3893, 0x3978, 0x3515, 0x2733, 0x399b, 0x3a86, 0x3b9c, 0x3582, 0x38e0, 0x389d, 0x3b34, 0x2d41, 0x31d7, 0x2db9, 0x3474, 0x35f6, 0x38fa, 0x3296, 0x3a85, 0x3102, 0x3129, 0x38e1, 0x39d4, 0x36ec, 0x2fea, 0x3a44, 0x3393, 0x39e0, 0x3613, 0x3bc1, 0x3145, 0x23d7, 0x3a17, 0x3515, 0x3845, 0x38f7, 0x33ee, 0x3b6f, 0x38f9, 0x38c7, 0x3489, 0x352b, 0x3b74, 0x39ab, 0x32e2, 0x37be, 0x38e6, 0x34e1, 0x31a5, 0x3be8, 0x2b0f, 0x3b16, 0x3a43, 0x3ae7, 0x39a2, 0x36a2, 0x33a5, 0x3160, 0x33c8, 0x30de, 0x38d9, 0x33f6, 0x35b0, 0x2982, 0x38e6, 0x3ae7, 0x3bca, 0x3911, 0x397b, 0x3596, 0x3790, 0x38eb, 0x3aa2, 0x38f6, 0x381f, 0x398e, 0x343b, 0x39ef, 0x39a3, 0x35f2, 0x2c2c, 0x39e2, 0x3b7f, 0x3858, 0x3b83, 0x3b02, 0x33df, +0x379c, 0x3ae9, 0x340b, 0x368f, 0x3a50, 0x38a6, 0x3aa2, 0x3bd6, 0x3855, 0x3841, 0x3410, 0x348d, 0x3625, 0x38a0, 0x3bdc, 0x34e3, 0x38f6, 0x3274, 0x3a03, 0x3adc, 0x35df, 0x39f5, 0x38b4, 0x38cc, 0x384d, 0x394f, 0x3597, 0x3a9c, 0x3767, 0x3b65, 0x39f5, 0x3857, 0x38c2, 0x3b12, 0x3580, 0x32b0, 0x3595, 0x3723, 0x3b92, 0x347f, 0x3526, 0x377d, 0x35c3, 0x354b, 0x3651, 0x3ae9, 0x38c7, 0x3bc0, 0x30d2, 0x395a, 0x34f2, 0x370d, 0x3748, 0x35fb, 0x3401, 0x34e8, 0x3931, 0x3a34, 0x381e, 0x3886, 0x3afc, 0x3bbc, 0x3af0, 0x3a9c, 0x3a5b, 0x34ef, 0x3979, 0x3ab0, 0x31f2, 0x34f8, 0x1c09, 0x3a9c, 0x36a0, 0x3af7, 0x3b87, 0x3745, 0x39b8, 0x3582, 0x3be2, 0x3bd6, 0x373f, 0x3552, 0x31c1, 0x3a29, 0x2f37, 0x363b, 0x3a9d, 0x39ee, 0x3aa7, 0x3a03, 0x3551, 0x39ce, 0x3a95, 0x3894, 0x32d1, 0x36f2, +0x385b, 0x342c, 0x3643, 0x3be4, 0x3b88, 0x3b64, 0x3975, 0x3142, 0x3583, 0x2f10, 0x34bb, 0x3b4d, 0x3924, 0x2609, 0x3929, 0x274b, 0x3476, 0x3bfd, 0x3abd, 0x3874, 0x33cf, 0x3756, 0x3820, 0x31a3, 0x35dd, 0x39a3, 0x3359, 0x397e, 0x3a12, 0x3ad6, 0x3a25, 0x38ab, 0x392c, 0x3bca, 0x38a9, 0x2f91, 0x381c, 0x29fb, 0x390e, 0x34f7, 0x3a14, 0x39fa, 0x3104, 0x3488, 0x326e, 0x3593, 0x3b50, 0x2e3d, 0x3423, 0x3919, 0x38db, 0x308b, 0x3883, 0x3ba9, 0x38e2, 0x3b74, 0x2b9d, 0x303d, 0x35ef, 0x29a3, 0x364d, 0x2fb5, 0x3991, 0x3a6a, 0x3bf5, 0x391f, 0x373f, 0x3a0a, 0x3a6f, 0x3ad6, 0x35ba, 0x3889, 0x3982, 0x3b8b, 0x3a43, 0x3bfb, 0x3355, 0x3591, 0x39de, 0x34b8, 0x3b76, 0x2a30, 0x30cc, 0x33d3, 0x2f46, 0x380e, 0x3b6e, 0x3576, 0x388b, 0x3b42, 0x35de, 0x39ab, 0x32f3, 0x35dc, 0x3594, 0x3184, +0x3b0c, 0x3478, 0x3b70, 0x389e, 0x3a28, 0x3bf3, 0x3350, 0x35fc, 0x396f, 0x3a40, 0x3242, 0x3a86, 0x3bd1, 0x314b, 0x2e15, 0x394f, 0x391b, 0x3763, 0x31e4, 0x3908, 0x3b48, 0x39e5, 0x3aca, 0x3a5b, 0x3626, 0x37fa, 0x381c, 0x3867, 0x342c, 0x3842, 0x3b77, 0x3ad7, 0x39a8, 0x3867, 0x3b9c, 0x3938, 0x3969, 0x2f52, 0x3a11, 0x3982, 0x3963, 0x3873, 0x3278, 0x3193, 0x369e, 0x3848, 0x3a63, 0x399a, 0x3ba0, 0x39c1, 0x3987, 0x3595, 0x2993, 0x3517, 0x31f2, 0x35a9, 0x3628, 0x3a6b, 0x3bf2, 0x3a75, 0x3129, 0x3460, 0x38d0, 0x370e, 0x3a52, 0x381a, 0x3b57, 0x388c, 0x3a87, 0x2c5a, 0x3ac9, 0x3686, 0x2023, 0x2fcb, 0x2845, 0x36f2, 0x3ac6, 0x2f91, 0x2a3b, 0x37bc, 0x3865, 0x3b91, 0x3887, 0x3b8b, 0x2edc, 0x38e1, 0x3465, 0x348f, 0x3bfb, 0x393a, 0x3b42, 0x394e, 0x2f39, 0x364b, 0x37a7, 0x3b51, +0x3810, 0x35e7, 0x388f, 0x38fc, 0x3740, 0x322e, 0x2f12, 0x39d5, 0x3834, 0x366f, 0x2c74, 0x35da, 0x3901, 0x39c1, 0x39f1, 0x381a, 0xc05, 0x3541, 0x39d3, 0x326a, 0x3993, 0x3ba8, 0x3bc9, 0x3b2b, 0x390d, 0x3a4b, 0x38db, 0x39a7, 0x3043, 0x345e, 0x2e17, 0x2cd7, 0x38ba, 0x3a26, 0x3a7d, 0x385b, 0x3a40, 0x25b0, 0x3ba4, 0x3b75, 0x30f9, 0x3508, 0x3885, 0x375d, 0x3acf, 0x36fb, 0x334b, 0x3a92, 0x3bbd, 0x3b15, 0x392e, 0x3b14, 0x33b3, 0x3ac3, 0x39f8, 0x35ae, 0x391d, 0x3b24, 0x316a, 0x30e9, 0x3813, 0x3736, 0x3b34, 0x2db4, 0x395a, 0x37ac, 0x3a01, 0x3671, 0x37af, 0x368a, 0x2de1, 0x3a69, 0x3416, 0x3294, 0x344d, 0x393e, 0x399f, 0x1d48, 0x38db, 0x3b08, 0x3944, 0x3a99, 0x39d5, 0x35fb, 0x2828, 0x3a19, 0x38b3, 0x3209, 0x3660, 0x38fa, 0x3a01, 0x3ba5, 0x322e, 0x3048, 0x3bb1, 0x3be6, +0x3b6f, 0x327c, 0x3932, 0x3721, 0x39b5, 0x28b8, 0x3b6d, 0x3a9e, 0x393c, 0x35e6, 0x3b4d, 0x2515, 0x2921, 0x395a, 0x3762, 0x34c7, 0x38ed, 0x3b61, 0x35ab, 0x2d3c, 0x3132, 0x35ef, 0x37e1, 0x37cf, 0x383c, 0x3b5e, 0x3a9d, 0x39af, 0x362e, 0x3b02, 0x3a85, 0x3ad0, 0x3739, 0x38f9, 0x3a16, 0x30e5, 0x3b92, 0x39b6, 0x39c4, 0x3b4d, 0x30c6, 0x35c6, 0x3513, 0x2e7a, 0x32a9, 0x346a, 0x359a, 0x3ae2, 0x3a27, 0x3b87, 0x3934, 0x358e, 0x33cd, 0x37a7, 0x3bbb, 0x383f, 0x357d, 0x3714, 0x35c1, 0x3540, 0x35ff, 0x39a6, 0x3686, 0x39bd, 0x3906, 0x357b, 0x3b22, 0x3be6, 0x38e3, 0x3876, 0x3954, 0x2c83, 0x3acf, 0x3aef, 0x3a67, 0x3548, 0x38d1, 0x359f, 0x3b59, 0x3b61, 0x39c8, 0x392e, 0x39a6, 0x3a3a, 0x3ad5, 0x3831, 0x39ae, 0x3b0e, 0x3b00, 0x3acf, 0x30e1, 0x3751, 0x2f93, 0x39e5, 0x39c3, 0x3928, +0x2df5, 0x36e5, 0x2605, 0x3827, 0x3566, 0x38b3, 0x3345, 0x3869, 0x38e2, 0x31a5, 0x37cf, 0x3b01, 0x3add, 0x2e7e, 0x3573, 0x2f1a, 0x2d92, 0x3a72, 0x3821, 0x313b, 0x3970, 0x3943, 0x3af1, 0x3aeb, 0x37d8, 0x35c7, 0x38a8, 0x3abb, 0x3893, 0x33a0, 0x3a05, 0x3830, 0x37d5, 0x2708, 0x3685, 0x3907, 0x3a07, 0x39f9, 0x3889, 0x2fd1, 0x38c8, 0x3091, 0x3b6a, 0x3332, 0x35f0, 0x36f0, 0x35ce, 0x3b5e, 0x3927, 0x3bf3, 0x392e, 0x39e6, 0x3703, 0x38c6, 0x37db, 0x364c, 0x3984, 0x2bd1, 0x34b3, 0x3873, 0x332b, 0x38a5, 0x2b51, 0x3a1c, 0x3446, 0x2f6a, 0x3975, 0x2f99, 0x38f4, 0x3849, 0x35f2, 0x3734, 0x38da, 0x38b9, 0x39cb, 0x3a6d, 0x39ea, 0x3160, 0x2fde, 0x3acb, 0x2d2d, 0x325b, 0x3a86, 0x3b66, 0x3a07, 0x361c, 0x394a, 0x2b5d, 0x3a45, 0x2dfa, 0x3505, 0x3263, 0x39e5, 0x3655, 0x32de, 0x3295, +0x38c9, 0x2f7b, 0x2f9e, 0x2d42, 0x3b0c, 0x378c, 0x2dac, 0x22ef, 0x3603, 0x396c, 0x3460, 0x3a7a, 0x3b62, 0x3177, 0x3703, 0x2936, 0x39a0, 0x38e7, 0x3b0d, 0x331e, 0x34cb, 0x39f3, 0x3138, 0x3a4d, 0x35d5, 0x399f, 0x3229, 0x39d3, 0x385c, 0x28ea, 0x3895, 0x3653, 0x3561, 0x3927, 0x35b6, 0x34b7, 0x3983, 0x2d4f, 0x2ad7, 0x3562, 0x324b, 0x29e0, 0x3928, 0x3a3d, 0x3aa2, 0x3128, 0x357a, 0x3a20, 0x3b17, 0x2919, 0x3702, 0x35bd, 0x3578, 0x3a6c, 0x3a68, 0x38e2, 0x3888, 0x38cd, 0x36f9, 0x3164, 0x351b, 0x39c4, 0x219b, 0x301f, 0x31fb, 0x343d, 0x38d5, 0x3900, 0x1dad, 0x3a61, 0x385e, 0x385b, 0x388e, 0x38b1, 0x351e, 0x34dc, 0x35c8, 0x316e, 0x36b7, 0x3beb, 0x3646, 0x2d3d, 0x35ff, 0x33bb, 0x36bf, 0x3adf, 0x3a75, 0x3b1f, 0x3a07, 0x38f1, 0x390a, 0x2e57, 0x27c6, 0x3afa, 0x396a, 0x2d0d, +0x3173, 0x3b83, 0x3ace, 0x3631, 0x3aa6, 0x38b6, 0x37c5, 0x365e, 0x2f2a, 0x3528, 0x3be0, 0x3af3, 0x37e7, 0x3947, 0x292e, 0x3b1b, 0x3959, 0x3082, 0x279b, 0x3a83, 0x3052, 0x3b4e, 0x3948, 0x39e1, 0x3566, 0x38c3, 0x3738, 0x30ee, 0x2731, 0x2ce3, 0x39a0, 0x3b90, 0x36c8, 0x3980, 0x357c, 0x34cf, 0x3a92, 0x3ac1, 0x1fc8, 0x3b89, 0x399c, 0x380f, 0x366e, 0x3767, 0x3650, 0x399b, 0x3413, 0x357b, 0x3610, 0x3a32, 0x3b9e, 0x3ae2, 0x3a84, 0x399b, 0x3ad1, 0x38a6, 0x3a6e, 0x36d4, 0x3bcc, 0x3043, 0x30ad, 0x35c2, 0x3b07, 0x2a03, 0x3658, 0x39ba, 0x3bf3, 0x3b92, 0x38ad, 0x36dc, 0x398e, 0x35ed, 0x3409, 0x3b31, 0x36d5, 0x3221, 0x3b12, 0x3887, 0x38e0, 0x3550, 0x31fa, 0x2f61, 0x3bd0, 0x34b8, 0x3860, 0x30db, 0x3415, 0x3b42, 0x31cb, 0x39c3, 0x3125, 0x3b66, 0x2468, 0x3a27, 0x3b63, 0x3ae5, +0x3809, 0x37a7, 0x39a2, 0x35c1, 0x3baf, 0x3798, 0x3518, 0x3583, 0x3bfc, 0x3bab, 0x3ab0, 0x3822, 0x3589, 0x33b1, 0x33e7, 0x3899, 0x3b93, 0x36bd, 0x3a87, 0x343c, 0x39a1, 0x3a0a, 0x38c6, 0x3b47, 0x3b64, 0x2d7e, 0x3bfd, 0x2d2d, 0x3a8a, 0x306c, 0x3766, 0x340d, 0x38e7, 0x3617, 0x3bd3, 0x398c, 0x3819, 0x3171, 0x36e6, 0x391f, 0x30d4, 0x39d5, 0x31bb, 0x3833, 0x3012, 0x2db1, 0x3aab, 0x3903, 0x3749, 0x379e, 0x3089, 0x2d69, 0x251b, 0x3448, 0x3418, 0x3b4e, 0x37de, 0x38c6, 0x373b, 0x38aa, 0x3968, 0x3b36, 0x3bfe, 0x38c9, 0x3ada, 0x38ba, 0x354e, 0x3a6e, 0x373d, 0x380c, 0x374b, 0x34d2, 0x35fd, 0x3a5d, 0x3a8d, 0x3a14, 0x3abd, 0x346c, 0x3766, 0x3908, 0x3ad3, 0x3a52, 0x341b, 0x2ad8, 0x3abb, 0x3083, 0x2933, 0x3b56, 0x3a33, 0x3753, 0x3529, 0x3bfd, 0x34a1, 0x3229, 0x3be1, 0x3b71, +0x3a9e, 0x3764, 0x35e7, 0x3831, 0x398a, 0x3877, 0x3aec, 0x39f0, 0x3159, 0x389f, 0x38bc, 0x3878, 0x3bc7, 0x3a01, 0x2896, 0x39af, 0x3784, 0x3260, 0x38d9, 0x3bcf, 0x3bfa, 0x3bc3, 0x2b23, 0x387d, 0x2e5b, 0x35a6, 0x3468, 0x3933, 0x2783, 0x37e8, 0x3af2, 0x332e, 0x3b77, 0x3ac3, 0x3514, 0x3bcd, 0x3bd8, 0x372f, 0x3979, 0x3b30, 0x3993, 0x3888, 0x38d5, 0x3a18, 0x3be4, 0x2b5c, 0x2518, 0x3b55, 0x3bbc, 0x3ba0, 0x2f21, 0x33b6, 0x352c, 0x39b3, 0x3bc7, 0x3a59, 0x38ea, 0x3432, 0x3b9b, 0x3b74, 0x3baf, 0x34a2, 0x3457, 0x3593, 0x3967, 0x3879, 0x3b79, 0x3806, 0x30ca, 0x384c, 0x394c, 0x37a7, 0x21ce, 0x3bbc, 0x305c, 0x3b11, 0x3a1a, 0x3a64, 0x2e80, 0x27ac, 0x3635, 0x361d, 0x2d4c, 0x2264, 0x37ba, 0x165c, 0x2ec8, 0x386b, 0x1b60, 0x3992, 0x357f, 0x2b6b, 0x37da, 0x3942, 0x2d77, 0x2f25, +0x34e0, 0x3809, 0x395b, 0x33dd, 0x38af, 0x3546, 0x2f78, 0x3469, 0x3832, 0x34b7, 0x3839, 0x32c0, 0x3676, 0x3b1f, 0x3872, 0x317b, 0x3403, 0x3444, 0x3438, 0x39cb, 0x3102, 0x3a90, 0x381a, 0x2db5, 0x3b1f, 0x3a44, 0x3aff, 0x354f, 0x3578, 0x3921, 0x38b0, 0x301f, 0x2da3, 0x3062, 0x3596, 0x3a07, 0x382a, 0x37bd, 0x3634, 0x34b1, 0x31a5, 0x353f, 0x33ec, 0x3986, 0x37a7, 0x332d, 0x3874, 0x3046, 0x3b5b, 0x3bf8, 0x37a0, 0x3822, 0x36c4, 0x385c, 0x3868, 0x39ec, 0x3959, 0x39cc, 0x382e, 0x2505, 0x3471, 0x358c, 0x3905, 0x395b, 0x312b, 0x3706, 0x2eec, 0x3a2a, 0x3be9, 0x3a96, 0x2932, 0x3a84, 0x38b2, 0x3884, 0x3655, 0x341f, 0x30b6, 0x363a, 0x3a7d, 0x389b, 0x348c, 0x3b98, 0x38cc, 0x3699, 0x373b, 0x3ad9, 0x377b, 0x33b4, 0x8ef, 0x3a4c, 0x39a2, 0x3bbc, 0x3b01, 0x3a46, 0x3b56, 0x38db, +0x29ab, 0x29e8, 0x3830, 0x39d7, 0x38ff, 0x33a2, 0x2ed0, 0x38e9, 0x3bd2, 0x380b, 0x3940, 0x3b79, 0x3477, 0x36f4, 0x38b8, 0x382d, 0x3838, 0x37f7, 0x219f, 0x34ec, 0x3af5, 0x347d, 0x3a0e, 0x352e, 0x39f3, 0x39ae, 0x3624, 0x1a5a, 0x329c, 0x3a57, 0x254a, 0x361b, 0x3554, 0x3a17, 0x3888, 0x34c7, 0x3628, 0x3321, 0x39de, 0x34f1, 0x386f, 0x37ae, 0x3709, 0x3909, 0x3ae3, 0x3a0e, 0x3495, 0x3bb8, 0x363c, 0x3039, 0x37e4, 0x30ff, 0x164f, 0x37aa, 0x3b7d, 0x2c60, 0x3828, 0x36b8, 0x235d, 0x29b9, 0x3917, 0x24db, 0x3946, 0x2e75, 0x359c, 0x35c3, 0x3b91, 0x35b5, 0x341f, 0x3873, 0x343a, 0x326a, 0x215c, 0x34f3, 0x35a9, 0x2efa, 0x29dd, 0x3b37, 0x3594, 0x305f, 0x3b48, 0x3bc9, 0x3957, 0x3bac, 0x3638, 0x369e, 0x3a45, 0x3173, 0x3bad, 0x354c, 0x32d9, 0x38d2, 0x3b97, 0x3409, 0x3871, 0x3ac2, +0x3739, 0x2c5b, 0x3480, 0x3206, 0x2ede, 0x345e, 0x3806, 0x354c, 0x38ac, 0x3404, 0x35b5, 0x2250, 0x3957, 0x3831, 0x37c2, 0x331a, 0x36c9, 0x3b7c, 0x2a94, 0x3b00, 0x3722, 0x38c4, 0x35b9, 0x3b30, 0x3af4, 0x3758, 0x3290, 0x33a6, 0x31fe, 0x3937, 0x3b74, 0x3010, 0x3076, 0x344d, 0x3773, 0x22d7, 0x25f7, 0x2cde, 0x3999, 0x3859, 0x32b9, 0x3985, 0x3a7e, 0x39eb, 0x35f1, 0x3a36, 0x3735, 0x3337, 0x34da, 0x30ca, 0x3a16, 0x3523, 0x3802, 0x3a05, 0x3609, 0x310b, 0x3770, 0x389c, 0x2d46, 0x382e, 0x332f, 0x2d06, 0x39d5, 0x3b65, 0x3a48, 0x3b45, 0x2d13, 0x389d, 0x27e8, 0x34e9, 0x3a4d, 0x2802, 0x3903, 0x3ac4, 0x3bb7, 0x38ab, 0x3a80, 0x3725, 0x2f22, 0x358e, 0x3b17, 0x3a80, 0x39b0, 0x3bdd, 0x3aa6, 0x326d, 0x34d4, 0x2f73, 0x39c3, 0x297f, 0x210c, 0x2713, 0x3887, 0x3aec, 0x3a48, 0x3a58, +0x35dc, 0x2ea9, 0x3576, 0x3b80, 0x34c8, 0x3bfb, 0x3268, 0x336c, 0x3574, 0x3712, 0x349c, 0x3bb4, 0x3875, 0x3be8, 0x3b9f, 0x3436, 0x31e8, 0x3a22, 0x2d06, 0x3222, 0x3b99, 0x37ef, 0x3511, 0x3a6f, 0x36dc, 0x3b58, 0x353a, 0x3985, 0x3938, 0x3b64, 0x2753, 0x21b5, 0x2bb1, 0x3291, 0x3af9, 0x30eb, 0x3819, 0x376e, 0x357f, 0x2d58, 0x398d, 0x3966, 0x3a12, 0x32f5, 0x3b9e, 0x3bac, 0x38e8, 0x37bc, 0x3106, 0x3750, 0x39f4, 0x3bf3, 0x38d4, 0x3b41, 0x3b4e, 0x3722, 0x3536, 0x35b1, 0x3a85, 0x34f8, 0x3bcf, 0x351f, 0x3953, 0x39d4, 0x3abc, 0x3521, 0x389f, 0x2386, 0x350b, 0x3b1d, 0x35a3, 0x359c, 0x3607, 0x3b0a, 0x385b, 0x3927, 0x39f9, 0x3a58, 0x36c7, 0x3030, 0x3ba8, 0x348e, 0x2f3d, 0x3973, 0x3b3c, 0x3a02, 0x3abd, 0x3a2e, 0x28f3, 0x3b9b, 0x348e, 0x396b, 0x3963, 0x39dc, 0x3a38, 0x3b12, +0x3a7c, 0x378c, 0x3a31, 0x3068, 0x3790, 0x24a7, 0x39b5, 0x3629, 0x34a4, 0x3bd4, 0x357b, 0x3bc8, 0x356b, 0x3a00, 0x3776, 0x32ad, 0x3327, 0x2da5, 0x2f3a, 0x366c, 0x25f9, 0x34e3, 0x3b50, 0x25c1, 0x33c4, 0x3822, 0x34d7, 0x3bed, 0x3a05, 0x3bab, 0x37e9, 0x37fe, 0x3a3c, 0x380d, 0x369f, 0x3b86, 0x2460, 0x39aa, 0x38e7, 0x388b, 0x1e16, 0x2f0c, 0x39a6, 0x3a99, 0x39b7, 0x35b2, 0x3221, 0x3618, 0x3a08, 0x37fc, 0x3481, 0x3ba6, 0x3408, 0x3415, 0x3adf, 0x3b77, 0x19f6, 0x328c, 0x3830, 0x3996, 0x3afb, 0x3528, 0x37e6, 0x39e1, 0x380b, 0x35bc, 0x3b6c, 0x3a1f, 0x385b, 0x34c9, 0x3b7c, 0x35f5, 0x258c, 0x39ec, 0x30f8, 0x322d, 0x3b8a, 0x3159, 0x399f, 0x2f24, 0x346a, 0x3738, 0x39cb, 0x3949, 0x3a2e, 0x3b54, 0x3adf, 0x3b62, 0x3ab1, 0x316d, 0x3aa6, 0x2ec2, 0x38f8, 0x2b3b, 0x2861, 0x3026, +0x2a43, 0x3b6a, 0x3a73, 0x31d4, 0x352e, 0x3461, 0x345c, 0x34f2, 0x2c0e, 0x38b3, 0x2e79, 0x3ba2, 0x2c1e, 0x3314, 0x371a, 0x3973, 0x2f6f, 0x3a7b, 0x3031, 0x39f1, 0x3b78, 0x381b, 0x2d2b, 0x38a6, 0x3864, 0x3a6b, 0x3045, 0x3731, 0x2d60, 0x382b, 0x31e4, 0x3985, 0x3bce, 0x34fe, 0x39f0, 0x381d, 0x35d3, 0x38a2, 0x2eeb, 0x3278, 0x3ace, 0x344a, 0x37a5, 0x341b, 0x3a62, 0x3549, 0x365d, 0x3a82, 0x3842, 0x37de, 0x3b1f, 0x32d3, 0x3b8e, 0x3a44, 0x2cfd, 0x3885, 0x3b2e, 0x34b1, 0x3674, 0x37d8, 0x3bff, 0x3535, 0x3487, 0x2fbe, 0x3abe, 0x3266, 0x31ad, 0x340a, 0x3be2, 0x21a8, 0x3924, 0x39ea, 0x381b, 0x3351, 0x3aa6, 0x3903, 0x38b5, 0x3284, 0x3937, 0x3a34, 0x344a, 0x3a26, 0x312f, 0x39a8, 0x3b8d, 0x373e, 0x3b66, 0x2764, 0x386d, 0x20a8, 0x381c, 0x395e, 0x2ee0, 0x3820, 0x37f5, 0x3bc2, +0x3bd7, 0x37b6, 0x39dd, 0x3b50, 0x3621, 0x3726, 0x3484, 0x360f, 0x39fa, 0x3b62, 0x2318, 0x1a60, 0x35b8, 0x340b, 0x2d49, 0x35ec, 0x3783, 0x3b02, 0x3654, 0x3b4f, 0x337c, 0x3bff, 0x36aa, 0x34cc, 0x38cd, 0x3555, 0x39a0, 0x34da, 0x2840, 0x3897, 0x3bcc, 0x30ff, 0x347f, 0x3acf, 0x39ac, 0x2544, 0x352e, 0x36d2, 0x3643, 0x33f1, 0x3bd2, 0x30b1, 0x38f3, 0x3a47, 0x3863, 0x37e5, 0x2048, 0x388c, 0x2c07, 0x3abc, 0x342a, 0x3986, 0x38ee, 0x39ff, 0x3485, 0x3947, 0x386c, 0x39e0, 0x3a96, 0x3bdc, 0x3158, 0x3ba6, 0x28fc, 0x29dd, 0x3b4e, 0x3a74, 0x3834, 0x3b8d, 0x1c2f, 0x390f, 0x3009, 0x39db, 0x2dc1, 0x3802, 0x3bb2, 0x3428, 0x2dff, 0x3a33, 0x355f, 0x3122, 0x3152, 0x3615, 0x38d7, 0x38f6, 0x3624, 0x3ac4, 0x1527, 0x3a83, 0x2db8, 0x3847, 0x3afe, 0x3a7e, 0x307e, 0x3711, 0x3726, 0x3a68, +0x2b4b, 0x3b91, 0x360b, 0x3b18, 0x375e, 0x2be2, 0x3a8d, 0x2bbb, 0x2f24, 0x3271, 0x2e97, 0x3734, 0x3a56, 0x35d8, 0x355c, 0x1578, 0x33d1, 0x3b60, 0x2793, 0x350b, 0x34c6, 0x38d3, 0x387f, 0x3a3f, 0x3928, 0x3021, 0x384d, 0x36f8, 0x3413, 0x3be3, 0x3817, 0x2280, 0x36ef, 0x3795, 0x385b, 0x3be6, 0x323d, 0x3880, 0x35d7, 0x3201, 0x3329, 0x3a49, 0x36bf, 0x3585, 0x2df9, 0x3897, 0x338c, 0x313c, 0x343c, 0x3ab6, 0x3927, 0x3514, 0x3944, 0x3bfa, 0x347e, 0x32a5, 0x357f, 0x3b96, 0x375b, 0x38cc, 0x3bc9, 0x384c, 0x39ec, 0x35f4, 0x36a6, 0x3bf9, 0x2aa9, 0x3b18, 0x3172, 0x3bc9, 0x3b41, 0x2e94, 0x39cd, 0x368f, 0x3903, 0x2d54, 0x3a45, 0x3378, 0x3a00, 0x392f, 0x39f1, 0x38c5, 0x2b64, 0x390d, 0x3b77, 0x391d, 0x343c, 0x3627, 0x3826, 0x344a, 0x3a0a, 0x37cb, 0x3b06, 0x3b16, 0x3656, 0x3a47, +0x3be3, 0x35b8, 0x37af, 0x3765, 0x38e8, 0x3bf3, 0x344e, 0x39f7, 0x3320, 0x3590, 0x30b6, 0x395c, 0x3abf, 0x34fe, 0x359a, 0x3a55, 0x39fd, 0x3a41, 0x3a8c, 0x382b, 0x3741, 0x36bb, 0x387f, 0x358a, 0x36f9, 0x3bc8, 0x33f7, 0x34bd, 0x3460, 0x3aa3, 0x39dc, 0x31f7, 0x38e1, 0x3b21, 0x384d, 0x38bb, 0x38ce, 0x381d, 0x38d7, 0x349a, 0x2d43, 0x3251, 0x3917, 0x39aa, 0x3871, 0x3a59, 0x3a1c, 0x382c, 0x37c1, 0x3a9e, 0x2f8f, 0x32a5, 0x1583, 0x319d, 0x38ff, 0x393c, 0x38e8, 0x2da0, 0x396a, 0x3987, 0x3887, 0x339d, 0x360c, 0x37d5, 0x3ad6, 0x3986, 0x3559, 0x3a60, 0x392b, 0x2e25, 0x2878, 0x3184, 0x309b, 0x35c8, 0x38cf, 0x358b, 0x3804, 0x3943, 0x312d, 0x3a2a, 0x29ab, 0x3b0d, 0x3959, 0x33c5, 0x3bfe, 0x33f0, 0x3a98, 0x29f1, 0x39ee, 0x37da, 0x3a1c, 0x3896, 0x387b, 0x3a07, 0x2e45, 0x3932, +0x3556, 0x38f6, 0x3826, 0x3299, 0x2e6c, 0x3957, 0x3687, 0x35e5, 0x34ea, 0x34ab, 0x2b4e, 0x3a50, 0x365f, 0x39d6, 0x3968, 0x3ad5, 0x3966, 0x305e, 0x2ef6, 0x3471, 0x343d, 0x3bab, 0x2e4b, 0x3853, 0x3a96, 0x3be5, 0x2a10, 0x3790, 0x34c6, 0x3aa6, 0x3864, 0x3b07, 0x31b7, 0x3b38, 0x25f8, 0x2f15, 0x34dc, 0x3bbd, 0x379f, 0x363d, 0x3b1a, 0x3862, 0x37c5, 0x32a9, 0x3590, 0x3074, 0x31de, 0x30f6, 0x37ed, 0x3722, 0x34fd, 0x3a1f, 0x3580, 0x37c5, 0x3b84, 0x3be4, 0x357c, 0x36ed, 0x30d5, 0x38cd, 0x343e, 0x3831, 0x397f, 0x36db, 0x383a, 0x24e2, 0x3a9d, 0x39dd, 0x36f7, 0x360a, 0x2be4, 0x2dca, 0x321c, 0x361b, 0x378e, 0xe22, 0x2486, 0x3550, 0x3900, 0x34a9, 0x3b2f, 0x3829, 0x1f15, 0x3906, 0x3220, 0x25b1, 0x38b1, 0x398d, 0x382e, 0x298d, 0x39a5, 0x3bb2, 0x31fd, 0x3964, 0x36f6, 0x3835, +0x3907, 0x3b4f, 0x3b17, 0x390d, 0x2b5c, 0x3533, 0x3a28, 0x345e, 0x3954, 0x386e, 0x3b0f, 0x321c, 0x3bce, 0x326d, 0x3a39, 0x3a70, 0x38b1, 0x38c6, 0x3aa4, 0x3aa1, 0x38b6, 0x3a65, 0x3b54, 0x3230, 0x397a, 0x3b63, 0x3869, 0x3003, 0x368e, 0x3a48, 0x3a19, 0x38be, 0x3bb0, 0x2e6e, 0x3ad2, 0x2a53, 0x35d9, 0x39d2, 0x2dd0, 0x32b2, 0x3180, 0x229f, 0x3bcc, 0x38d6, 0x3b74, 0x3bd1, 0x37f7, 0x380d, 0x3928, 0x3b54, 0x35ff, 0x3457, 0x3470, 0x3155, 0x3a41, 0x342c, 0x3af8, 0x2de0, 0x3608, 0x36ab, 0x3bdd, 0x35e3, 0x2aa9, 0x37d0, 0x3a4c, 0x35dc, 0x2e36, 0x37a3, 0x39b3, 0x2e4b, 0x3b11, 0x323a, 0x38de, 0x3ba3, 0x38ff, 0x3823, 0x310d, 0x3b05, 0x39f8, 0x3abf, 0x3bcf, 0x36c4, 0x3ae2, 0x36cd, 0x3a8f, 0x3a91, 0x368f, 0x37aa, 0x3969, 0x39aa, 0x3bff, 0x3422, 0x37c5, 0x35f0, 0x3b46, 0x3a21, +0x384a, 0x3984, 0x3349, 0x2014, 0x38ea, 0x28c4, 0x3520, 0x3a22, 0x3bec, 0x32e8, 0x275e, 0x3b5a, 0x3a2d, 0x3a3f, 0x3690, 0x321c, 0x3b62, 0x392f, 0x3a2c, 0x36b7, 0x38a2, 0x3205, 0x3520, 0x3b6f, 0x3378, 0x3911, 0x3833, 0x3991, 0x380b, 0x3a4a, 0x38a6, 0x3865, 0x3aa6, 0x38e7, 0x397a, 0x38fa, 0x3b10, 0x3440, 0x39a2, 0x3566, 0x365d, 0x307a, 0x2d18, 0x3978, 0x389c, 0x39f5, 0x38df, 0x29c3, 0x3a62, 0x3b75, 0x39b5, 0x2015, 0x307b, 0x39e1, 0x288f, 0x3936, 0x31ee, 0x3be2, 0x35e1, 0x391f, 0x345d, 0x39ff, 0x390c, 0x32cb, 0x38ce, 0x3441, 0x3a3a, 0x3713, 0x2fce, 0x321b, 0x2deb, 0x34e3, 0x3ade, 0x2a6e, 0x3bff, 0x3882, 0x3bec, 0x3ad9, 0x3abc, 0x3bb4, 0x36d8, 0x3617, 0x3015, 0x3a62, 0x3115, 0x384d, 0x3a19, 0x35cf, 0x3468, 0x300f, 0x371e, 0x34ba, 0x378b, 0x37fb, 0x3af8, 0x2fad, +0x2bed, 0x3854, 0x38ab, 0x3879, 0x2ff5, 0x3808, 0x38d5, 0x3ba2, 0x390c, 0x3ba1, 0x3343, 0x373d, 0x34b8, 0x37b5, 0x3653, 0x2db9, 0x3433, 0x318b, 0x39c9, 0x333d, 0x2ca0, 0x3b89, 0x3002, 0x34f2, 0x3969, 0x3a48, 0x1df8, 0x2421, 0x3b9d, 0x3b5a, 0x398a, 0x394b, 0x2fea, 0x296d, 0x3b39, 0x3696, 0x3b4d, 0x340d, 0x3b7e, 0x39ba, 0x2f44, 0x37af, 0x38e4, 0x3a86, 0x3b2d, 0x3954, 0x2bed, 0x3506, 0x2501, 0x3bc9, 0x3a58, 0x3abb, 0x384d, 0x33d6, 0x34d0, 0x3468, 0x3bbf, 0x3a17, 0x3534, 0x3b31, 0x3a7a, 0x3644, 0x36e3, 0x3a50, 0x2284, 0x3b1e, 0x37ed, 0x3ba9, 0x3919, 0x39d3, 0x3235, 0x3bc0, 0x3938, 0x32ea, 0x32fc, 0x3bc0, 0x3a91, 0x3af2, 0x3410, 0x38b5, 0x2ca8, 0x3097, 0x2b7c, 0x3528, 0x3b69, 0x3602, 0x3637, 0x383d, 0x34a3, 0x3ac4, 0x2c6b, 0x302e, 0x3b38, 0x34a3, 0x3519, 0x3674, +0x2f15, 0x2cb7, 0x3a46, 0x3663, 0x3b63, 0x38b4, 0x3b34, 0x3ba3, 0x2d14, 0x3422, 0x3701, 0x38e1, 0x39fe, 0x3112, 0x38dd, 0x357c, 0x2e9f, 0x35d1, 0x36ec, 0x306e, 0x38ea, 0x36c8, 0x34c7, 0x38e4, 0x3aee, 0x3ab5, 0x355e, 0x395c, 0x242b, 0x3197, 0x3832, 0x3987, 0x3682, 0x38f9, 0x3aaa, 0x209e, 0x35d4, 0x36a0, 0x3779, 0x39ff, 0x33e5, 0x3138, 0x35a6, 0x362f, 0x3b4e, 0x3417, 0x27c8, 0x39db, 0x3004, 0x3b6b, 0x30bd, 0x31e3, 0x3988, 0x32f4, 0x3ac7, 0x305a, 0x248b, 0x2dae, 0x21bf, 0x34c6, 0x2993, 0x3b6b, 0x3530, 0x3acc, 0x3563, 0x2e8c, 0x3492, 0x3954, 0x388b, 0x3b35, 0x3880, 0x38c4, 0x34c6, 0x3bb8, 0x360d, 0x28f6, 0x390a, 0x39e5, 0x2f09, 0x38e5, 0x34ca, 0x3634, 0x38b2, 0x39b7, 0x2d73, 0x396d, 0x3490, 0x39fd, 0x38dd, 0x39b9, 0x3adb, 0x326e, 0x3afc, 0x3bf5, 0x3bfc, 0x2b6a, +0x3440, 0x36eb, 0x32c4, 0x3be7, 0x3215, 0x3a10, 0x2dd5, 0x3999, 0x3bcd, 0x39a9, 0x351a, 0x36ad, 0x3732, 0x28a4, 0x205e, 0x30a4, 0x3a0b, 0x399e, 0x356a, 0x2c98, 0x3912, 0x3471, 0x3b45, 0x38df, 0x3b91, 0x303f, 0x3bf6, 0x374a, 0x3813, 0x3739, 0x30a9, 0x3155, 0x385b, 0x3952, 0x3229, 0x3639, 0x39c8, 0x3827, 0x333c, 0x3978, 0x38be, 0x3a90, 0x35b5, 0x3655, 0x33be, 0x39df, 0x3b24, 0x392a, 0x2bda, 0x3895, 0x3ac0, 0x352c, 0x2c77, 0x3893, 0x3ac3, 0x3305, 0x3699, 0x2a79, 0x3bf9, 0x3821, 0x39fa, 0x38b3, 0x3428, 0x3564, 0x3073, 0x37ba, 0x2877, 0x3b5f, 0x2c54, 0x35da, 0x3a33, 0x37d7, 0x396b, 0x3408, 0x36a3, 0x2d1b, 0x3860, 0x3bf5, 0x36cc, 0x3b43, 0x3846, 0x34ce, 0x3b1d, 0x34ca, 0x351d, 0x323d, 0x37ce, 0x3ac1, 0x35e5, 0x3b80, 0x3b7e, 0x3a78, 0x38e5, 0x3106, 0x3892, 0x35a5, +0x38f9, 0x3ac7, 0x3886, 0x3a8d, 0x3a5c, 0x39f0, 0x2c1e, 0x3ad7, 0x37bf, 0x366d, 0x3715, 0x290c, 0x320b, 0x3639, 0x3442, 0x33eb, 0x3602, 0x2b7b, 0x344e, 0x3906, 0x3780, 0x372b, 0x39f5, 0x39d7, 0x3742, 0x35d3, 0x3672, 0x2d25, 0x397c, 0x3953, 0x3970, 0x37d2, 0x38f2, 0x3790, 0x30c7, 0x3417, 0x31e2, 0x3b53, 0x3587, 0x3ad8, 0x3875, 0x3908, 0x2c27, 0x33b7, 0x3ad5, 0x3641, 0x3bcb, 0x3b70, 0x3b87, 0x346d, 0x397f, 0x25be, 0x3137, 0x3946, 0x36c4, 0x3b67, 0x3a20, 0x36e7, 0x31b1, 0x3948, 0x3bf5, 0x2b26, 0x34fe, 0x3522, 0x30e8, 0x2630, 0x37ff, 0x368f, 0x389e, 0x2d92, 0x37b4, 0x39b1, 0x3532, 0x39cf, 0x39ae, 0x3a2f, 0x3862, 0x3656, 0x39cb, 0x3a84, 0x37e3, 0x3b06, 0x3901, 0x2ccb, 0x2b4e, 0x348b, 0x3abf, 0x3a1f, 0x2e1e, 0x2d75, 0x39e5, 0x3143, 0x39ff, 0x38c2, 0x3ba0, 0x3a64, +0x3969, 0x2ffd, 0x39fd, 0x399d, 0x3863, 0x3896, 0x3ab1, 0x3815, 0x3bd8, 0x34fb, 0x3419, 0x3bf7, 0x38cc, 0x3659, 0x2bbc, 0x3bb0, 0x3abb, 0x3554, 0x394a, 0x3ad8, 0x2ea5, 0x3bf6, 0x37bb, 0x2363, 0x3aef, 0x36dc, 0x2dfb, 0x3721, 0x3558, 0x390c, 0x36df, 0x2ff3, 0x3b70, 0x266e, 0x3b66, 0x3957, 0x2884, 0x34e4, 0x3589, 0x3864, 0x3a4b, 0x30d7, 0x3611, 0x34ec, 0x36d2, 0x37f9, 0x3abe, 0x2be6, 0x39ed, 0x336a, 0x3aba, 0x396c, 0x3838, 0x23cb, 0x3bbb, 0x3944, 0x2f70, 0x2d41, 0x3b28, 0x3b81, 0x305c, 0x3a88, 0x38a6, 0x3829, 0x33c9, 0x34e0, 0x3a41, 0x346a, 0x3b1b, 0x378f, 0x3a1a, 0x395f, 0x3ba3, 0x3072, 0x3918, 0x302d, 0x3949, 0x3a56, 0x37ac, 0x3807, 0x3b7f, 0x3461, 0x3a65, 0x349a, 0x3b40, 0x2c4d, 0x39d3, 0x3b6e, 0x2f82, 0x3797, 0x3bdb, 0x3b73, 0x30ee, 0x3b5a, 0x2fa1, 0x3be4, +0x3b02, 0x38ec, 0x3b86, 0x3569, 0x3bef, 0x3029, 0x3368, 0x3ad9, 0x2e8e, 0x3bd8, 0x34cb, 0x2db1, 0x3aa2, 0x38da, 0x2ca5, 0x3ad4, 0x3842, 0x3a34, 0x3777, 0x3a3d, 0x3b37, 0x3bc7, 0x32ef, 0x3bd1, 0x3bd9, 0x34b4, 0x301f, 0x38af, 0x235f, 0x3595, 0x3a7d, 0x3a9a, 0x3b4b, 0x2801, 0x318e, 0x2ce5, 0x39ab, 0x39d5, 0x3986, 0x3823, 0x2b17, 0x395e, 0x35e3, 0x3740, 0x39e9, 0x3882, 0x384c, 0x36b7, 0x3426, 0x396b, 0x3b1d, 0x2c8e, 0x3bb6, 0x30a8, 0x37b3, 0x35f6, 0x3a37, 0x367f, 0x3877, 0x342f, 0x3939, 0x317c, 0x38b9, 0x3b47, 0x3437, 0x3533, 0x3ba2, 0x3b25, 0x3b39, 0x36d3, 0x34b1, 0x39b0, 0x30f6, 0x349a, 0x1e90, 0x3a7f, 0x3559, 0x37ed, 0x3aa9, 0x360f, 0x3445, 0x3256, 0x3925, 0x3974, 0x3897, 0x3ab0, 0x3410, 0x36d2, 0x367d, 0x2f29, 0x3917, 0x34d4, 0x3996, 0x3450, 0x3486, 0x3b67, +0x2c33, 0x3407, 0x3708, 0x321b, 0x39aa, 0x388f, 0x3427, 0x39c1, 0x3990, 0x3a24, 0x3970, 0x3bb4, 0x34be, 0x366e, 0x3bfc, 0x3748, 0x3bcc, 0x2d09, 0x394d, 0x398c, 0x3b19, 0x3855, 0x3954, 0x3268, 0x32ae, 0x3a02, 0x39e1, 0x3122, 0x3a60, 0x3b17, 0x3be2, 0x3b90, 0x36a0, 0x3962, 0x3b1d, 0x3871, 0x3368, 0x3114, 0x355d, 0x39ea, 0x3a34, 0x35dd, 0x3976, 0x3b29, 0x239b, 0x3576, 0x2bf6, 0x35f5, 0x314f, 0x3af9, 0x3535, 0x3a04, 0x3b55, 0x3a1c, 0x1f50, 0x348a, 0x3ab2, 0x39d1, 0x3bad, 0x255b, 0x344f, 0x24a5, 0x29c8, 0x38aa, 0x3a5f, 0x34b3, 0x395e, 0x35b9, 0x3a6b, 0x3ad1, 0x357f, 0x38c1, 0x37c8, 0x3b16, 0x31cb, 0x3464, 0x3a8b, 0x39ce, 0x3592, 0x3a6c, 0x39a6, 0x303b, 0x34eb, 0x3019, 0x3a0a, 0x3996, 0x3a65, 0x3bb8, 0x3804, 0x2a64, 0x3481, 0x3452, 0x39e7, 0x3be7, 0x34e4, 0x39ae, +0x3a52, 0x3a35, 0x3365, 0x35c6, 0x1e02, 0x2e5d, 0x399f, 0x375a, 0x3b3f, 0x3a1d, 0x34a7, 0x37fd, 0x34f5, 0x3a0f, 0x2909, 0x2ece, 0x350b, 0x38e1, 0x3a4e, 0x2c7f, 0x384d, 0x3aab, 0x2fc3, 0x3852, 0x3473, 0x3936, 0x359c, 0x3750, 0x3602, 0x36c7, 0x3815, 0x3790, 0x3980, 0x3544, 0x39b9, 0x3bcd, 0x3c00, 0x3560, 0x3aaa, 0x3b5a, 0x3301, 0x2c5a, 0x3a33, 0x2ccf, 0x3a7e, 0x364c, 0x393c, 0x34a1, 0x2da5, 0x372d, 0x350b, 0x3977, 0x37f4, 0x37d6, 0x3536, 0x3861, 0x360a, 0x3abb, 0x3871, 0x389e, 0x383e, 0x3b3e, 0x2744, 0x33d3, 0x3b94, 0x3028, 0x3bb7, 0x3736, 0x2da7, 0x2b10, 0x3a43, 0x345c, 0x38ac, 0x3574, 0x3689, 0x350d, 0x3bb1, 0x3acc, 0x38eb, 0x345f, 0x39f8, 0x325c, 0x36d3, 0x30a4, 0x3b49, 0x2b46, 0x3692, 0x3a37, 0x3788, 0x358d, 0x391b, 0x3872, 0x3632, 0x3ae4, 0x3b05, 0x35e4, +0x39ac, 0x34fc, 0x37e4, 0x3b1b, 0x380e, 0x2d0a, 0x38e3, 0x394b, 0x2c45, 0x3bcf, 0x3b0f, 0x38a0, 0x3456, 0x3668, 0x38ce, 0x3992, 0x38c0, 0x35fa, 0x320a, 0x38d9, 0x3bb9, 0x3334, 0x396b, 0x398f, 0x3854, 0x3bbf, 0x34c2, 0x2ae6, 0x3808, 0x3625, 0x29bb, 0x3aec, 0x246c, 0x3573, 0x3ae7, 0x3879, 0x3bdf, 0x2c64, 0x33f4, 0x3a63, 0x39c0, 0x3a35, 0x38f8, 0x38c6, 0x3b30, 0x3a3b, 0x2ec2, 0x32da, 0x316d, 0x2136, 0x3be5, 0x332b, 0x36c6, 0x38db, 0x3058, 0x2d9e, 0x37f9, 0x3733, 0x3ba2, 0x1d40, 0x339d, 0x2d02, 0x39e3, 0x3952, 0x380f, 0x3a19, 0x3795, 0x3799, 0x3547, 0x3b2a, 0x37c2, 0x3958, 0x39d1, 0x3303, 0x3612, 0x3aa8, 0x3ac2, 0x38f3, 0x2d4a, 0x37e8, 0x37e4, 0x39c1, 0x3bab, 0x36da, 0x3809, 0x2fe2, 0x3bd9, 0x3328, 0x397b, 0x3456, 0x324e, 0x34c7, 0x37d2, 0x3017, 0x3a40, 0x2c48, +0x39cc, 0x2c1f, 0x3a56, 0x3a9b, 0x3987, 0x2d9c, 0x38db, 0x39c4, 0x3a54, 0x373c, 0x367c, 0x3b9d, 0x38af, 0x3649, 0x38bc, 0x382e, 0x2f5f, 0x34b9, 0x2d83, 0x3720, 0x3b84, 0x39f7, 0x38b1, 0x3600, 0x3ba5, 0x3880, 0x39d6, 0x33af, 0x3bcd, 0x3bc0, 0x38aa, 0x277a, 0x3548, 0x2f9b, 0x3521, 0x3a8d, 0x3622, 0x2fd5, 0x35ca, 0x3405, 0x3399, 0x3428, 0x3ac0, 0x34e7, 0x3866, 0x3454, 0x3631, 0x2247, 0x34a1, 0x398b, 0x388d, 0x39cb, 0x3461, 0x3937, 0x351e, 0x3b71, 0x36a4, 0x3a61, 0x3ac2, 0x3b05, 0x39b4, 0x3b1c, 0x3bdf, 0x3835, 0x3398, 0x3931, 0x38c3, 0x3922, 0x292f, 0x39a7, 0x3688, 0x3817, 0x32d1, 0x37e9, 0x382b, 0x355c, 0x39a1, 0x38cc, 0x36ee, 0x35c6, 0x395f, 0x2c4a, 0x39db, 0x29f5, 0x3886, 0x3b23, 0x38db, 0x3bc0, 0x345a, 0x39da, 0x3ac1, 0x3b5f, 0x3ae9, 0x368f, 0x397e, 0x3b89, +0x3805, 0x3adf, 0x3610, 0x3a37, 0x3947, 0x3618, 0x31d9, 0x3b3a, 0x3a13, 0x376f, 0x3141, 0x3b63, 0x39ce, 0x3ad7, 0x28dc, 0x340b, 0x30e4, 0x35e0, 0x354f, 0x387c, 0x37fa, 0x3455, 0x38b9, 0x3726, 0x2d54, 0x3338, 0x343a, 0x3a7c, 0x24e3, 0x3892, 0x3a8e, 0x3a8f, 0x37a8, 0x39e6, 0x398a, 0x3b42, 0x3360, 0x3a57, 0x38e5, 0x3afb, 0x3719, 0x36cf, 0x387c, 0x3a4e, 0x2edd, 0x3a36, 0x25b5, 0x3135, 0x346b, 0x3b0e, 0x2f3a, 0x2ee6, 0x384b, 0x3aab, 0x3b0b, 0x34e7, 0x30ea, 0x34e8, 0x38ef, 0x3899, 0x387a, 0x3786, 0x2456, 0x2ccb, 0x3af0, 0x3699, 0x35d2, 0x379d, 0x39bd, 0x36f8, 0x27a8, 0x397a, 0x2511, 0x35a2, 0x3a21, 0x3848, 0x27c8, 0x20df, 0x3a83, 0x3bb3, 0x2044, 0x38ec, 0x3095, 0x39cf, 0x2f28, 0x3bd6, 0x3939, 0x360c, 0x2d7b, 0x389c, 0x3585, 0x3bcc, 0x11d9, 0x3a41, 0x3591, 0x3813, +0x38ae, 0x3998, 0x3a8d, 0x31c7, 0x3af7, 0x3392, 0x3586, 0x3881, 0x3a64, 0x3b82, 0x3a29, 0x3497, 0x3b46, 0x3083, 0x3523, 0x3685, 0x3bb9, 0x3575, 0x317b, 0x38da, 0x3b2a, 0x38cc, 0x3764, 0x3103, 0x396e, 0x3bad, 0x35e5, 0x3a46, 0x3b72, 0x37d0, 0x3359, 0x3b8e, 0x3845, 0x2fc1, 0x2b03, 0x3837, 0x3186, 0x366f, 0x185a, 0x2ceb, 0x36be, 0x390a, 0x3513, 0x31d2, 0x357a, 0x3769, 0x392e, 0x39cb, 0x31a1, 0x3197, 0x3283, 0x39f2, 0x37d5, 0x2d92, 0x3599, 0x31f7, 0x30d1, 0x3b0b, 0x39b9, 0x3434, 0x324f, 0x3627, 0x321a, 0x30b3, 0x39f5, 0x387d, 0x32e6, 0x3a6c, 0x3597, 0x34ad, 0x2fd5, 0x3a5e, 0x2cbd, 0x34c2, 0x3a9c, 0x369e, 0x3192, 0x321c, 0x2600, 0x37af, 0x3841, 0x3a09, 0x3348, 0x309c, 0x3396, 0x1439, 0x34de, 0x3978, 0x3938, 0x3600, 0x28e3, 0x2d7e, 0x3296, 0x36ac, 0x35d4, 0x265a, +0x318c, 0x383d, 0x3955, 0x3473, 0x3ad5, 0x3949, 0x3923, 0x2f75, 0x31e1, 0x36ba, 0x3b86, 0x393c, 0x3563, 0x38a8, 0x37ee, 0x378a, 0x38d6, 0x38e6, 0x3922, 0x2c66, 0x33fc, 0x3875, 0x388d, 0x3b8b, 0x295c, 0x3ac3, 0x3432, 0x2d94, 0x37f3, 0x2a0b, 0x38c1, 0x3bbb, 0x3735, 0x3b36, 0x3a8b, 0x3291, 0x3908, 0x39d7, 0x375a, 0x2f3a, 0x330d, 0x398d, 0x3890, 0x3bf0, 0x38ba, 0x3ac0, 0x21f8, 0x3b00, 0x396c, 0x34d9, 0x3409, 0x3463, 0x3187, 0x3522, 0x2bb8, 0x358a, 0x30e2, 0x33bd, 0x38db, 0x36f9, 0x2f32, 0x3a39, 0x3884, 0x3be5, 0x3879, 0x3126, 0x3878, 0x3775, 0x397e, 0x3a5f, 0x3974, 0x3a58, 0x3ada, 0x3b0a, 0x3917, 0x3b63, 0x3176, 0x384b, 0x3a52, 0x3b01, 0x3ace, 0x3b86, 0x336a, 0x3647, 0x3877, 0x37b3, 0x2a41, 0x2db4, 0x189d, 0x39e4, 0x3470, 0x2d16, 0x2c98, 0x3a47, 0x3495, 0x38fd, +0x3bae, 0x322f, 0x39ff, 0x3075, 0x20be, 0x3583, 0x3b80, 0x39b5, 0x34a9, 0x3a4b, 0x362a, 0x3a70, 0x3964, 0x3925, 0x37ec, 0x3b19, 0x30e9, 0x38a7, 0x3688, 0x386d, 0x3a48, 0x2faa, 0x3b5f, 0x3693, 0x367a, 0x374c, 0x3b97, 0x3beb, 0x36ce, 0x37fc, 0x38fe, 0x39c9, 0x38d5, 0x25d5, 0x36e3, 0x3a77, 0x3987, 0x3bad, 0x3a48, 0x3871, 0x318d, 0x371f, 0x3614, 0x3a6e, 0x3662, 0x3bae, 0x3a41, 0x2973, 0x3aa6, 0x29d1, 0x3910, 0x3bca, 0x34d4, 0x24ea, 0x3611, 0x37c5, 0x32cc, 0x3a93, 0x3a4c, 0x3b10, 0x3790, 0x3181, 0x346f, 0x39b8, 0x3720, 0x3a7e, 0x39c7, 0x2d80, 0x324f, 0x3bf8, 0x373f, 0x3039, 0x3872, 0x2ad3, 0x2b33, 0x3803, 0x39d1, 0x38c2, 0x2ce6, 0x3943, 0x375f, 0x37ca, 0x37a5, 0x3a00, 0x20f2, 0x3449, 0x2fc9, 0x39bb, 0x3775, 0x364c, 0x3926, 0x39ae, 0x3b18, 0x38ad, 0x3803, 0x3032, +0x2d61, 0x322b, 0x383d, 0x3a27, 0x3437, 0x290e, 0x3314, 0x3222, 0x3862, 0x3712, 0x310c, 0x3984, 0x3b97, 0x35b6, 0x39dd, 0x305e, 0x3986, 0x3a78, 0x2e12, 0x3091, 0x3ae9, 0x3b2a, 0x3887, 0x3a31, 0x2fd3, 0x381c, 0x3082, 0x3934, 0x37a5, 0x3b6a, 0x35a3, 0x320e, 0x39f1, 0x2ad6, 0x3295, 0x388a, 0x3baa, 0x372c, 0x3345, 0x3985, 0x3b40, 0x2caa, 0x3264, 0x30ad, 0x3965, 0x3bcd, 0x3830, 0x3921, 0x3ae3, 0x3bdd, 0x3b55, 0x3804, 0x38c9, 0x3430, 0x3995, 0x3b93, 0x37b7, 0x398e, 0x348e, 0x3a2b, 0x3ad6, 0x336c, 0x35c2, 0x3a01, 0x3284, 0x3a0f, 0x306c, 0x37e3, 0x3836, 0x3aea, 0x3490, 0x30bd, 0x3bb3, 0x3495, 0x3b7a, 0x3908, 0x3905, 0x34ff, 0x3a18, 0x2c6d, 0x31f6, 0x393b, 0x2b1c, 0x3b05, 0x3367, 0x383c, 0x3a5c, 0x34d2, 0x37dd, 0x364e, 0x38a6, 0x30ac, 0x36ab, 0x3272, 0x3a96, 0x34e8, +0x3705, 0x2f61, 0x3879, 0x3ae0, 0x2bec, 0x3a46, 0x39fc, 0x3b64, 0x3964, 0x390a, 0x3827, 0x30c6, 0x38c4, 0x3897, 0x3855, 0x38cf, 0x3074, 0x39fe, 0x3513, 0x38b8, 0x3a90, 0x3506, 0x3a0b, 0x39bf, 0x3ba3, 0x35b1, 0x3942, 0x30dc, 0x3a64, 0x3624, 0x39bd, 0x3725, 0x1c9a, 0x34cb, 0x335a, 0x3b3b, 0x3329, 0x2bda, 0x3368, 0x3b70, 0x3096, 0x3754, 0x2fd4, 0x35de, 0x2d13, 0x3618, 0x3025, 0x3684, 0x35b2, 0x3732, 0x384a, 0x2dbe, 0x317b, 0x3a1e, 0x388c, 0x3729, 0x393b, 0x377d, 0x3be1, 0x3a7b, 0x2776, 0x38c5, 0x3afb, 0x3334, 0x33d8, 0x3b7e, 0x369a, 0x39be, 0x3aa4, 0x3afb, 0x3a6c, 0x38c3, 0x3a6a, 0x3911, 0x2a60, 0x3543, 0x3249, 0x3592, 0x2bd4, 0x3a76, 0x3ab9, 0x38a3, 0x399a, 0x3b60, 0x3a47, 0x31ec, 0x385b, 0x3677, 0x3909, 0x3915, 0x30fb, 0x3ae8, 0x3a23, 0x38e7, 0x2364, 0x38f0, +0x3bb5, 0x31e2, 0x2bb9, 0x3443, 0x3631, 0x392e, 0x389f, 0x3447, 0x3ba3, 0x3a47, 0x3673, 0x3ab7, 0x3acf, 0x3871, 0x3770, 0x3865, 0x3139, 0x2830, 0x3b65, 0x38ab, 0x35d1, 0x38c0, 0x3684, 0x2fa5, 0x36ba, 0x38cb, 0x3a9d, 0x34b8, 0x3b1a, 0x3bcb, 0x3830, 0x3ab6, 0x2eec, 0x3832, 0x3b33, 0x3678, 0x38a2, 0x31ff, 0x3a7d, 0x3bd3, 0x34e8, 0x3819, 0x392f, 0x3704, 0x3b01, 0x25fd, 0x3729, 0x3557, 0x3bc3, 0x2e36, 0x3323, 0x3aed, 0x357a, 0x3b4b, 0x3412, 0x3637, 0x3b92, 0x3360, 0x39c2, 0x3776, 0x32a8, 0x3896, 0x2f5b, 0x328a, 0x31d9, 0x3bb4, 0x3ba2, 0x3a2c, 0x3a12, 0x305a, 0x31f9, 0x3523, 0x32b6, 0x3822, 0x2624, 0x3491, 0x3811, 0x3238, 0x3acb, 0x3a6f, 0x3662, 0x38b9, 0x3b68, 0x3a24, 0x35fb, 0x3be2, 0x37d9, 0x347b, 0x33b2, 0x3a36, 0x3816, 0x39cf, 0x377e, 0x2cee, 0x300a, 0x330d, +0x359c, 0x3826, 0x2baa, 0x3b80, 0x3b04, 0x380d, 0x3a4e, 0x2f7c, 0x3667, 0x3be5, 0x3b0a, 0x380a, 0x360d, 0x3be3, 0x3b83, 0x39c0, 0x391b, 0x285a, 0x3b4b, 0x38cb, 0x3a85, 0x3aeb, 0x3853, 0x355f, 0x3ab5, 0x33be, 0x38ff, 0x382f, 0x3be6, 0x3916, 0x36ff, 0x3a3e, 0x3b88, 0x3812, 0x3687, 0x2c26, 0x3921, 0x394b, 0x2e6f, 0x3aa9, 0x3b77, 0x3848, 0x3b3e, 0x38b4, 0x3811, 0x3659, 0x31d5, 0x3977, 0x3b06, 0x39b4, 0x34bf, 0x31cc, 0x3b30, 0x3a6e, 0x3712, 0x3b52, 0x3b7a, 0x37bd, 0x3484, 0x3bdd, 0x343d, 0x3bb5, 0x3952, 0x2f41, 0x3a12, 0x3b3e, 0x27fe, 0x39d2, 0x39f4, 0x2ca1, 0x3485, 0x36ba, 0x3156, 0x3905, 0x3ba8, 0x39cd, 0x3b64, 0x3ba5, 0x3c00, 0x3ae8, 0x3452, 0x3a39, 0x3861, 0x3b8e, 0x37b1, 0x3bcd, 0x350e, 0x379d, 0x3b83, 0x34cb, 0x3205, 0x39fc, 0x3669, 0x3508, 0x2a1c, 0x39f9, +0x3876, 0x3602, 0x2b8f, 0x36be, 0x3885, 0x2caa, 0x3532, 0x31a8, 0x3956, 0x3139, 0x3709, 0x2fce, 0x3987, 0x3ab4, 0x3406, 0x3727, 0x32dd, 0x3ac9, 0x356b, 0x30c9, 0x2cbb, 0x3552, 0x2c69, 0x39ce, 0x3ad5, 0x3753, 0x290e, 0x36c4, 0x3a7c, 0x3b32, 0x2e36, 0x37db, 0x38b0, 0x3912, 0x34f7, 0x228b, 0x391f, 0x2fbd, 0x3850, 0x3a5e, 0x3a5b, 0x3b82, 0x3a6e, 0x349c, 0x38ce, 0x3bcb, 0x3b4f, 0x31e8, 0x38bd, 0x34ad, 0x3451, 0x3318, 0x34d5, 0x388f, 0x39cf, 0x3844, 0x38d4, 0x3421, 0x38fa, 0x269e, 0x293c, 0x34f0, 0x3438, 0x372c, 0x34b0, 0x36d5, 0x2aa6, 0x3805, 0x3821, 0x31db, 0x39fc, 0x3aa9, 0x26e4, 0x34b9, 0x3215, 0x214a, 0x39e6, 0x3278, 0x39b1, 0x2e97, 0x34e4, 0x3ae7, 0x3bb6, 0x3b79, 0x388d, 0x3b2d, 0x3642, 0x32fe, 0x3b36, 0x39b3, 0x3957, 0x2d0f, 0x34e9, 0x3aef, 0x381d, 0x3b22, +0x2fcf, 0x38e8, 0x3648, 0x2d35, 0x3773, 0x3936, 0x38f7, 0x242a, 0x3bef, 0x3bfa, 0x389a, 0x34e9, 0x328b, 0x3392, 0x3753, 0x3a4c, 0x3ada, 0x2937, 0x38c5, 0x3a6a, 0x2fae, 0x2d27, 0x349e, 0x3be1, 0x34fe, 0x3604, 0x3a69, 0x3b92, 0x384b, 0x387b, 0x28ae, 0x347e, 0x3b9f, 0x3a73, 0x384d, 0x3a08, 0x3961, 0x35a6, 0x38fe, 0x36cc, 0x3962, 0x3456, 0x3ae6, 0x2782, 0x38f8, 0x3bc1, 0x3639, 0x301e, 0x38cf, 0x3873, 0x32d4, 0x3a2c, 0x3aba, 0x3a42, 0x204d, 0x37ae, 0x3adb, 0x3b1a, 0x29ed, 0x30ba, 0x381f, 0x36c0, 0x3602, 0x2dde, 0x3735, 0x3701, 0x3bae, 0x3645, 0x3412, 0x3601, 0x37d5, 0x3aee, 0x39b3, 0x3a06, 0x3ac6, 0x3822, 0x363e, 0x3af8, 0x32f9, 0x39c9, 0x2c2d, 0x3672, 0x29bf, 0x3a06, 0x3875, 0x3758, 0x35cc, 0x3b92, 0x3a44, 0x35ac, 0x3b23, 0x2c6f, 0x3aa4, 0x3676, 0x3be5, 0x3137, +0x38fb, 0x371e, 0x38ad, 0x39cf, 0x347c, 0x3a24, 0x3887, 0x3811, 0x396e, 0x39d1, 0x33cc, 0x3bb5, 0x34e3, 0x39dd, 0x35c5, 0x38be, 0x37cf, 0x372a, 0x3ada, 0x3acd, 0x332c, 0x38c5, 0x35fe, 0x2e0c, 0x388e, 0x3480, 0x3bac, 0x39ad, 0x3770, 0x3aec, 0x3ba5, 0x38eb, 0x3b10, 0x33fd, 0x26db, 0x319c, 0x3aa4, 0x3895, 0x379b, 0x349c, 0x3ab3, 0x3840, 0x3b70, 0x3b4e, 0x2e46, 0x3aff, 0x2f7f, 0x3732, 0x3991, 0x346c, 0x39ff, 0x2be5, 0x36cb, 0x3bb1, 0x35d4, 0x3883, 0x3ba4, 0x3362, 0x3866, 0x394c, 0x38c4, 0x3b6f, 0x378d, 0x2bdf, 0x3443, 0x3959, 0x30ae, 0x3a18, 0x2472, 0x2f6a, 0x3111, 0x3a6d, 0x394e, 0x35c4, 0x3834, 0x3bc5, 0x3afc, 0x3291, 0x34b3, 0x3863, 0x3778, 0x3a6c, 0x3903, 0x2d65, 0x372e, 0x2dfb, 0x32ff, 0x3586, 0x34d2, 0x2d32, 0x3a7f, 0x3002, 0x1d54, 0x34a5, 0x3b4b, 0x3455, +0x3975, 0x27ae, 0x37e0, 0x34c3, 0x31f6, 0x3896, 0x3993, 0x29df, 0x31c1, 0x2e25, 0x2cae, 0x3889, 0x3826, 0x33cd, 0x3bc4, 0x2400, 0x38a7, 0x313d, 0x3826, 0x3670, 0x3922, 0x25bf, 0x390e, 0x3b99, 0x358a, 0x344d, 0x3926, 0x3b4d, 0x239f, 0x3576, 0x3576, 0x356b, 0x3b40, 0x2ebc, 0x34ff, 0x2e6c, 0x3817, 0x35bf, 0x35fc, 0x285e, 0x3b5d, 0x3908, 0x3848, 0x3441, 0x321f, 0x28a5, 0x3a73, 0x342f, 0x37db, 0x39ff, 0x3ac1, 0x3409, 0x3808, 0x34aa, 0x3aee, 0x3590, 0x2ea7, 0x2db9, 0x3b2f, 0x3845, 0x3a0d, 0x34d7, 0x3902, 0x3b44, 0x37b4, 0x3737, 0x3174, 0x394a, 0x3769, 0x3b0a, 0x370f, 0x31a6, 0x3b3d, 0x3a37, 0x3bc7, 0x2d68, 0x363a, 0x31cc, 0x3289, 0x3983, 0x3825, 0x3bf4, 0x34b9, 0x37fe, 0x2de5, 0x3975, 0x3ac9, 0x3083, 0x2c4d, 0x37a2, 0x3544, 0x36ac, 0x387c, 0x30a6, 0x321c, 0x37cc, +0x3a9e, 0x3310, 0x3bf9, 0x36c9, 0x3845, 0x3877, 0x3b5c, 0x3b20, 0x392f, 0x398c, 0x3b42, 0x2c1e, 0x3229, 0x395f, 0x3749, 0x377f, 0x3390, 0x3a80, 0x35b4, 0x2ed5, 0x3795, 0x3067, 0x3998, 0x3a51, 0x3b44, 0x3a52, 0x397d, 0x37fc, 0x298f, 0x2d3d, 0x344b, 0x363e, 0x39bd, 0x3590, 0x3b40, 0x37f3, 0x2d81, 0x3295, 0x35ff, 0x3b02, 0x37f2, 0x37e0, 0x1de3, 0x375e, 0x2fd9, 0x3271, 0x3548, 0x363e, 0x39bb, 0x3817, 0x327a, 0x2bb1, 0x3bbf, 0x3bf3, 0x38e9, 0x39be, 0x392b, 0x2f02, 0x34c5, 0x39c3, 0x38ab, 0x393b, 0x1e1d, 0x3bc3, 0x3972, 0x3be2, 0x3391, 0x3a3f, 0x3b68, 0x33a1, 0x384a, 0x3503, 0x3353, 0x343d, 0x3ac3, 0x2e04, 0x2f98, 0x3020, 0x38f3, 0x3814, 0x3a21, 0x3b92, 0x3083, 0x35fe, 0x3993, 0x32cb, 0x3b67, 0x2f42, 0x3070, 0x32a5, 0x2d98, 0x3b98, 0x31b4, 0x306f, 0x2dc2, 0x3ad5, +0x38d9, 0x38e4, 0x31e3, 0x38d7, 0x3b05, 0x3645, 0x388a, 0x3964, 0x3ab3, 0x39d3, 0x35f4, 0x2777, 0x34e4, 0x3874, 0x3bf6, 0x3b51, 0x3b2e, 0x3887, 0x3bf3, 0x3b3a, 0x348d, 0x35f3, 0x3a72, 0x3bd9, 0x31ec, 0x2d30, 0x34e5, 0x36c2, 0x3907, 0x33da, 0x2e75, 0x2fa8, 0x2fbf, 0x342e, 0x385d, 0x3421, 0x3897, 0x3841, 0x195c, 0x322b, 0x315d, 0x3325, 0x306d, 0x394b, 0x2f4e, 0x3896, 0x3a65, 0x3bf9, 0x30dd, 0x3957, 0x39a5, 0x2f7f, 0x3a29, 0x38c9, 0x35d6, 0x3248, 0x371d, 0x3412, 0x3660, 0x3609, 0x3944, 0x3b17, 0x3af3, 0x3b89, 0x39da, 0x3764, 0x344d, 0x3462, 0x3907, 0x388a, 0x38f0, 0x2960, 0x393b, 0x32f0, 0x3956, 0x31d3, 0x3328, 0x33fd, 0x3256, 0x2913, 0x3665, 0x397f, 0x36ad, 0x31db, 0x3aa5, 0x39db, 0x329b, 0x38f0, 0x32a5, 0x3051, 0x3855, 0x3a9c, 0x3870, 0x3a27, 0x3b93, 0x3942, +0x34e3, 0x37d4, 0x36b0, 0x384f, 0x2eef, 0x2e05, 0x35bc, 0x3bee, 0x34c7, 0x374f, 0x3811, 0x39c4, 0x2de0, 0x3bda, 0x3700, 0x2dc6, 0x349f, 0x29cf, 0x3b8b, 0x39b9, 0x2e31, 0x39f9, 0x3815, 0x3076, 0x38cc, 0x39c1, 0x398c, 0x3a20, 0x3865, 0x34d3, 0x3ba8, 0x3b16, 0x2057, 0x248a, 0x3859, 0x2e3f, 0x30e1, 0x3842, 0x3627, 0x383d, 0x3bb8, 0x34c8, 0x3ad0, 0x3b23, 0x388b, 0x3014, 0x3235, 0x357c, 0x3ba7, 0x3977, 0x3a32, 0x3aba, 0x30f5, 0x31d2, 0x3857, 0x393a, 0x3894, 0x351a, 0x3805, 0x35ee, 0x3967, 0x3862, 0x2a1b, 0x3afc, 0x3a4a, 0x38a0, 0x2f0d, 0x38d3, 0x393c, 0x3a13, 0x3973, 0x3831, 0x3a43, 0x3865, 0x3b80, 0x395a, 0x3275, 0x3874, 0x3735, 0x399c, 0x395e, 0x3abb, 0x2fd8, 0x381a, 0x3834, 0x2ae7, 0x3b2f, 0x39f3, 0x38be, 0x3ade, 0x351f, 0x3900, 0x34e5, 0x389a, 0x31d6, 0x3be4, +0x394f, 0x3a3d, 0x3b26, 0x3a2f, 0x399e, 0x2e0a, 0x3bc9, 0x38d2, 0x3920, 0x343d, 0x3a0b, 0x2c78, 0x38aa, 0x3b54, 0x3639, 0x37b3, 0x377b, 0x3b67, 0x3836, 0x2d52, 0x3b65, 0x38fb, 0x3836, 0x32cf, 0x3a40, 0x367e, 0x3a47, 0x3b47, 0x2d4d, 0x36fc, 0x398a, 0x3b7c, 0x3290, 0x3b4f, 0x3bf6, 0x25de, 0x3937, 0x3798, 0x3b0f, 0x3a95, 0x3bbc, 0x3beb, 0x34cf, 0x269a, 0x3b63, 0x3543, 0x366f, 0x344f, 0x361b, 0x3518, 0x35fb, 0x39aa, 0x3922, 0x3969, 0x3024, 0x2965, 0x2f2d, 0x2e6c, 0x385e, 0x3ab9, 0x34af, 0x3aec, 0x3af1, 0x348b, 0x2f86, 0x3bda, 0x3888, 0x3909, 0x3ba0, 0x3743, 0x3b40, 0x3306, 0x3999, 0x36c0, 0x35f8, 0x3531, 0x3457, 0x397a, 0x3a86, 0x37b8, 0x3bf2, 0x3bb3, 0x378e, 0x3bc7, 0x38f8, 0x3515, 0x3be1, 0x26dd, 0x28e4, 0x3a19, 0x3a28, 0x289c, 0x38ed, 0x3a77, 0x32b0, 0x392e, +0x2fcb, 0x3b43, 0x357f, 0x3987, 0x3056, 0x39dc, 0x3bc7, 0x34c0, 0x3a41, 0x3b4a, 0x3317, 0x2230, 0x3b8c, 0x363d, 0x25bf, 0x3b25, 0x39e3, 0x39d5, 0x37bd, 0x3a52, 0x3a14, 0x1aec, 0x3756, 0x353a, 0x3826, 0x331e, 0x34f7, 0x3690, 0x3973, 0x3269, 0x2c1c, 0x1bea, 0x32da, 0x2d21, 0x346d, 0x351f, 0x2df0, 0x3be0, 0x3bee, 0x3bb2, 0x3b6f, 0x3596, 0x38a2, 0x3408, 0x2281, 0x3864, 0x3516, 0x3b24, 0x3a8d, 0x3a63, 0x3806, 0x36e1, 0x3b6b, 0x3656, 0x3b8f, 0x31d3, 0x3a70, 0x39f8, 0x3953, 0x31eb, 0x3a05, 0x3a58, 0x2f81, 0x395b, 0x3721, 0x3353, 0x35db, 0x2d72, 0x3786, 0x3ab5, 0x3b4b, 0x3bd0, 0x3607, 0x35b4, 0x3a79, 0x32e2, 0x3299, 0x36a2, 0x381c, 0x2fb4, 0x2b3f, 0x3a01, 0x390c, 0x29d1, 0x2b63, 0x3a4b, 0x3309, 0x34f5, 0x3b7b, 0x348d, 0x3a7e, 0x30ca, 0x3269, 0x363a, 0x35a4, 0x3735, +0x36c4, 0x396c, 0x377a, 0x2fac, 0x3bba, 0x3511, 0x38fd, 0x3be0, 0x392d, 0x3864, 0x3bef, 0x3ae7, 0x2cd2, 0x37e5, 0x31c9, 0x332d, 0x3be0, 0x326a, 0x309a, 0x387e, 0x39f2, 0x3302, 0x39ee, 0x3956, 0x3b30, 0x3829, 0x2894, 0x368f, 0x361d, 0x35cd, 0x3b8c, 0x3677, 0x3a95, 0x3a41, 0x382f, 0x3457, 0x3194, 0x31bc, 0x3abd, 0x392a, 0x387b, 0x3912, 0x388a, 0x3051, 0x3a9b, 0x2fc4, 0x3468, 0x33f7, 0x20fe, 0x3489, 0x1d98, 0x39f4, 0x2f82, 0x2c37, 0x391e, 0x37ef, 0x3bb0, 0x3538, 0x1e8b, 0x3985, 0x3805, 0x3823, 0x32eb, 0x36e7, 0x3569, 0x387d, 0x30f2, 0x38d2, 0x39b5, 0x3544, 0x3009, 0x377c, 0x3a65, 0x342a, 0x2cc6, 0x3983, 0x2720, 0x2760, 0x3443, 0x3856, 0x3949, 0x37b5, 0x3944, 0x33e1, 0x320c, 0x3a83, 0x39be, 0x36f2, 0x3bf3, 0x384d, 0x35dd, 0x3150, 0x36ee, 0x2f4b, 0x3bd4, 0x2816, +0x3bb4, 0x3590, 0x3bf3, 0x38dd, 0x3472, 0x37f9, 0x38ec, 0x25b3, 0x3aac, 0x394d, 0x2e48, 0x387c, 0x39ed, 0x350a, 0x36e1, 0x3ad8, 0x3580, 0x3a08, 0x38d7, 0x390f, 0x370e, 0x30ed, 0x2fb2, 0x37f2, 0x35a8, 0x38bb, 0x389a, 0x3960, 0x35e1, 0x35d1, 0x3799, 0x3356, 0x375c, 0x3889, 0x38e7, 0x385e, 0x30f1, 0x3032, 0x3006, 0x3356, 0x36b1, 0x3af5, 0x342c, 0x3a9f, 0x386d, 0x3a8d, 0x2670, 0x3ba5, 0x3907, 0x39cb, 0x389b, 0x2914, 0x2db1, 0x2f6f, 0x3aa3, 0x346a, 0x3716, 0x303d, 0x3991, 0x3a21, 0x3b53, 0x3589, 0x3a6b, 0x34f7, 0x2d99, 0x380b, 0x392f, 0x36d9, 0x2e31, 0x30a2, 0x3569, 0x2657, 0x36dd, 0x306d, 0x36b5, 0x3ac4, 0x3a7a, 0x36f7, 0x38d6, 0x3b02, 0x355e, 0x3a19, 0x3bc4, 0x365c, 0x3b77, 0x3660, 0x3bc9, 0x380a, 0x3673, 0x3a4a, 0x3b19, 0x3843, 0x328c, 0x1a13, 0x3bd6, 0x3be2, +0x388d, 0x30c3, 0x3998, 0x389e, 0x3354, 0x3174, 0x3922, 0x3970, 0x2962, 0x3bc2, 0x3b1e, 0x3bd7, 0x2d84, 0x3573, 0x3846, 0x3703, 0x31ec, 0x3a5a, 0x3459, 0x2674, 0x291f, 0x3b76, 0x364f, 0x316f, 0x3a52, 0x3866, 0x34de, 0x33fc, 0x37fc, 0x3a20, 0x3ac2, 0x3893, 0x3208, 0x38d0, 0x3b1c, 0x39cd, 0x36f6, 0x301f, 0x3965, 0x3971, 0x3afa, 0x34d9, 0x2e34, 0x35a3, 0x390d, 0x2e83, 0x3b5a, 0x3acb, 0x377e, 0x2416, 0x38b8, 0x3a2e, 0x3a04, 0x3062, 0x2ef1, 0x3584, 0x2afb, 0x382a, 0x3a74, 0x37da, 0x3730, 0x32a6, 0x3866, 0x389e, 0x3850, 0x3551, 0x3939, 0x3a0e, 0x2deb, 0x3b97, 0x38e9, 0x39b6, 0x35b5, 0x3999, 0x38fe, 0x1918, 0x326d, 0x3477, 0x34e5, 0x3855, 0x38f8, 0x3307, 0x385d, 0x3b17, 0x36d8, 0x3020, 0x3a66, 0x3bf9, 0x3b17, 0x28cf, 0x3abb, 0x38b3, 0x3bc0, 0x31e4, 0x30d8, 0x3090, +0x393f, 0x350a, 0x2171, 0x31dd, 0x3aa3, 0x3962, 0x2a30, 0x3a0c, 0x3983, 0x3474, 0x38a4, 0x30fc, 0x348a, 0x3afd, 0x3ab0, 0x2fca, 0x3bb3, 0x3be9, 0x3984, 0x3a8d, 0x3119, 0x3b78, 0x3bd6, 0x2ef6, 0x31ef, 0x27c9, 0x39be, 0x32fb, 0x2ce0, 0x368b, 0x3612, 0x32b6, 0x2d58, 0x3787, 0x3811, 0x3745, 0x3b86, 0x32f4, 0x3941, 0x3936, 0x2ab3, 0x39cd, 0x3851, 0x395d, 0x355e, 0x383e, 0x380a, 0x3b5d, 0x34d8, 0x3292, 0x3124, 0x31af, 0x3942, 0x2d54, 0x3b54, 0x3b1b, 0x3bbd, 0x3507, 0x324e, 0x3364, 0x2514, 0x3af6, 0x3236, 0x361c, 0x3721, 0x39b4, 0x3b86, 0x3907, 0x3316, 0x2c3b, 0x3bf4, 0x3abb, 0x38b8, 0x38e5, 0x38e4, 0x3941, 0x318e, 0x3563, 0x318a, 0x3953, 0x328a, 0x2ed0, 0x3782, 0x38b3, 0x3632, 0x35f0, 0x3a31, 0x3112, 0x3b49, 0x3b8e, 0x31f8, 0x3a70, 0x3bf1, 0x375e, 0x381c, 0x3791, +0x38f7, 0x2f6a, 0x3b74, 0x3198, 0x3815, 0x3184, 0x39cc, 0x37c1, 0x3b16, 0x39dd, 0x3690, 0x36ee, 0x3ba5, 0x383d, 0x3bee, 0x37f9, 0x3617, 0x399a, 0x3597, 0x3703, 0x3281, 0x3047, 0x35b6, 0x3835, 0x3708, 0x3634, 0x3965, 0x39b8, 0x3a00, 0x3996, 0x2bd0, 0x2ced, 0x36de, 0x35e6, 0x3b4d, 0x3888, 0x3bc5, 0x290f, 0x3baf, 0x388e, 0x3721, 0x3896, 0x3565, 0x33f9, 0x312b, 0x37c8, 0x3889, 0x376b, 0x3bb6, 0x375e, 0x35bf, 0x2f6b, 0x39f6, 0x34ba, 0x3936, 0x3969, 0x39de, 0x3ad4, 0x39eb, 0x3a5c, 0x33e3, 0x3367, 0x3297, 0x3bea, 0x3bcf, 0x3806, 0x39b7, 0x3b63, 0x37d2, 0x385b, 0x3a88, 0x3a6a, 0x3447, 0x385b, 0x3078, 0x347b, 0x3790, 0x32c5, 0x30f3, 0x33d2, 0x3864, 0x35a7, 0x359b, 0x32c2, 0x3bf7, 0x379d, 0x39ed, 0x3964, 0x367e, 0x2f3e, 0x3b0a, 0x3a32, 0x3b2b, 0x287e, 0x2ee6, 0x3ba2 +}; \ No newline at end of file diff --git a/redmule/inc/z_2D.h b/redmule/inc/z_2D.h new file mode 100644 index 0000000..047fe23 --- /dev/null +++ b/redmule/inc/z_2D.h @@ -0,0 +1,99 @@ + /* Header file generated by RedMulE Golden Model */ +uint16_t z_oup_2D [96][96] = { +0x4e2d, 0x4e0e, 0x4dda, 0x4de5, 0x4e0e, 0x4dbc, 0x4e3f, 0x4ed6, 0x4dce, 0x4eef, 0x4dfc, 0x4e55, 0x4e2f, 0x4d96, 0x4ddd, 0x4d8a, 0x4e4c, 0x4dc2, 0x4d63, 0x4daa, 0x4e0a, 0x4d89, 0x4dff, 0x4d7d, 0x4d9e, 0x4e07, 0x4ded, 0x4d68, 0x4e69, 0x4ea9, 0x4e7b, 0x4e13, 0x4e22, 0x4e13, 0x4e34, 0x4dd6, 0x4db5, 0x4db6, 0x4d9c, 0x4dfd, 0x4e51, 0x4e0f, 0x4d92, 0x4e46, 0x4db8, 0x4e97, 0x4d14, 0x4dcb, 0x4e6a, 0x4d8e, 0x4eb5, 0x4dee, 0x4d95, 0x4e1c, 0x4dcb, 0x4e1e, 0x4dff, 0x4d5d, 0x4d53, 0x4dde, 0x4dda, 0x4ea4, 0x4d1c, 0x4e1d, 0x4d30, 0x4dad, 0x4e27, 0x4e04, 0x4e55, 0x4ebb, 0x4e47, 0x4daa, 0x4ddf, 0x4dd8, 0x4e3a, 0x4db0, 0x4dc0, 0x4e1c, 0x4dc1, 0x4e33, 0x4e2b, 0x4dcd, 0x4da2, 0x4ebe, 0x4d64, 0x4da9, 0x4e7f, 0x4d80, 0x4e14, 0x4e9b, 0x4d7e, 0x4e85, 0x4e6d, 0x4e6e, 0x4e1e, 0x4def, +0x4def, 0x4d5f, 0x4e1d, 0x4daa, 0x4e29, 0x4dc0, 0x4e5f, 0x4f01, 0x4dcf, 0x4f33, 0x4dcf, 0x4e86, 0x4ecf, 0x4dfd, 0x4deb, 0x4d92, 0x4eda, 0x4e29, 0x4dae, 0x4e35, 0x4e49, 0x4da9, 0x4e33, 0x4d7d, 0x4e23, 0x4e28, 0x4dc0, 0x4e12, 0x4e62, 0x4eda, 0x4e71, 0x4e43, 0x4e2d, 0x4df3, 0x4e69, 0x4e0d, 0x4df7, 0x4dbd, 0x4dbc, 0x4da3, 0x4d9d, 0x4e3c, 0x4e01, 0x4ebb, 0x4dd5, 0x4e35, 0x4d3f, 0x4de4, 0x4efa, 0x4dc4, 0x4ee3, 0x4dac, 0x4d93, 0x4da3, 0x4da1, 0x4dee, 0x4e9a, 0x4db0, 0x4db0, 0x4e99, 0x4dfe, 0x4eaf, 0x4d59, 0x4e35, 0x4dee, 0x4de7, 0x4e60, 0x4e5d, 0x4ec7, 0x4eb1, 0x4e59, 0x4de0, 0x4e35, 0x4df5, 0x4df4, 0x4df1, 0x4df4, 0x4e27, 0x4dd5, 0x4e4b, 0x4e87, 0x4da1, 0x4dbc, 0x4eb6, 0x4d77, 0x4e4f, 0x4e04, 0x4d77, 0x4e43, 0x4ede, 0x4df7, 0x4e38, 0x4e81, 0x4e43, 0x4e43, 0x4e01, +0x4d9d, 0x4dbc, 0x4e1d, 0x4e2f, 0x4e69, 0x4ddf, 0x4e62, 0x4f1f, 0x4dbd, 0x4f0c, 0x4d88, 0x4da7, 0x4f23, 0x4dfa, 0x4e2e, 0x4de9, 0x4e67, 0x4de4, 0x4da6, 0x4ded, 0x4e28, 0x4d1b, 0x4e1d, 0x4dbb, 0x4dea, 0x4e1c, 0x4e67, 0x4ddc, 0x4de6, 0x4e7d, 0x4e2c, 0x4e1c, 0x4e41, 0x4def, 0x4e14, 0x4ddc, 0x4dc3, 0x4cfa, 0x4dac, 0x4db0, 0x4e84, 0x4df6, 0x4d77, 0x4e5a, 0x4dd5, 0x4ea7, 0x4d34, 0x4da6, 0x4eb7, 0x4dca, 0x4e9c, 0x4dcb, 0x4d04, 0x4dd7, 0x4dcd, 0x4e29, 0x4df3, 0x4d80, 0x4dc5, 0x4e3d, 0x4dd1, 0x4e42, 0x4d76, 0x4e54, 0x4d5a, 0x4db3, 0x4e0a, 0x4de8, 0x4ea2, 0x4e8e, 0x4dd8, 0x4e43, 0x4e16, 0x4d9b, 0x4e8b, 0x4e39, 0x4e02, 0x4dfa, 0x4de8, 0x4e07, 0x4ddd, 0x4dd4, 0x4d3f, 0x4e05, 0x4dac, 0x4e33, 0x4e61, 0x4d4c, 0x4e0b, 0x4e63, 0x4ddd, 0x4e37, 0x4e7d, 0x4e47, 0x4dbd, 0x4db9, +0x4db6, 0x4e32, 0x4e87, 0x4e33, 0x4e43, 0x4e2b, 0x4e79, 0x4f28, 0x4de8, 0x4edc, 0x4e5e, 0x4e94, 0x4f32, 0x4e18, 0x4dbc, 0x4e77, 0x4ea9, 0x4e8c, 0x4daa, 0x4ea9, 0x4e43, 0x4e20, 0x4e3c, 0x4da8, 0x4eb0, 0x4e1b, 0x4e7a, 0x4e32, 0x4eb8, 0x4eb2, 0x4ea5, 0x4e8b, 0x4e7f, 0x4de9, 0x4ee2, 0x4df5, 0x4e01, 0x4e5c, 0x4dbb, 0x4dee, 0x4e41, 0x4e65, 0x4e2d, 0x4ef5, 0x4e84, 0x4e78, 0x4de8, 0x4e32, 0x4ee1, 0x4dea, 0x4ef6, 0x4def, 0x4da8, 0x4e4f, 0x4dd0, 0x4e76, 0x4e84, 0x4def, 0x4d88, 0x4e53, 0x4e34, 0x4f79, 0x4db4, 0x4ea1, 0x4dc1, 0x4dee, 0x4e44, 0x4ec4, 0x4ed6, 0x4e82, 0x4e5e, 0x4df4, 0x4ec3, 0x4e45, 0x4ea1, 0x4e16, 0x4e00, 0x4e6f, 0x4e50, 0x4e80, 0x4e9c, 0x4df7, 0x4e1c, 0x4edf, 0x4dcb, 0x4e27, 0x4e39, 0x4d78, 0x4e1c, 0x4ec7, 0x4e37, 0x4e81, 0x4e8f, 0x4e4b, 0x4e45, 0x4dfa, +0x4e2a, 0x4e3d, 0x4e3d, 0x4df5, 0x4e3a, 0x4def, 0x4e2f, 0x4ed6, 0x4db3, 0x4ef3, 0x4e5a, 0x4e8e, 0x4f50, 0x4db6, 0x4e46, 0x4e34, 0x4ec9, 0x4e1b, 0x4dd6, 0x4e80, 0x4e1f, 0x4d99, 0x4e76, 0x4e52, 0x4e8a, 0x4e8d, 0x4e5b, 0x4dc1, 0x4eaf, 0x4efc, 0x4ebb, 0x4e52, 0x4e78, 0x4df4, 0x4e78, 0x4df1, 0x4dfa, 0x4dd4, 0x4d47, 0x4e48, 0x4e04, 0x4e20, 0x4ddd, 0x4ebb, 0x4e44, 0x4eca, 0x4d9b, 0x4dec, 0x4e9c, 0x4e12, 0x4ec7, 0x4dfd, 0x4d6c, 0x4e46, 0x4dc0, 0x4e37, 0x4e59, 0x4dbc, 0x4d8b, 0x4e40, 0x4e31, 0x4ef8, 0x4de1, 0x4de8, 0x4d97, 0x4dd2, 0x4ea0, 0x4e1c, 0x4e3a, 0x4eb4, 0x4dd5, 0x4e41, 0x4e5d, 0x4dbc, 0x4e1d, 0x4e55, 0x4e77, 0x4dfc, 0x4e4b, 0x4e22, 0x4ebe, 0x4d6d, 0x4dad, 0x4e2a, 0x4dd3, 0x4e56, 0x4e3a, 0x4d2e, 0x4e42, 0x4e95, 0x4dce, 0x4e3b, 0x4eef, 0x4e46, 0x4ded, 0x4df8, +0x4d39, 0x4d7b, 0x4da0, 0x4cfa, 0x4d82, 0x4d16, 0x4d98, 0x4e32, 0x4ce2, 0x4e4a, 0x4d6a, 0x4d64, 0x4e27, 0x4d47, 0x4d4c, 0x4d16, 0x4d7c, 0x4d49, 0x4d0d, 0x4d3e, 0x4d83, 0x4d12, 0x4d19, 0x4cbe, 0x4d0f, 0x4d83, 0x4d65, 0x4cdb, 0x4d3d, 0x4ded, 0x4dff, 0x4d5b, 0x4d74, 0x4d70, 0x4df1, 0x4ccd, 0x4d49, 0x4d16, 0x4cc3, 0x4d2f, 0x4d25, 0x4d85, 0x4d31, 0x4dc3, 0x4d5b, 0x4dcb, 0x4cb3, 0x4d51, 0x4d98, 0x4d29, 0x4dc9, 0x4cc1, 0x4cd1, 0x4d90, 0x4cd3, 0x4d59, 0x4d5e, 0x4cf7, 0x4cda, 0x4dae, 0x4d8f, 0x4e13, 0x4cee, 0x4d6a, 0x4d0f, 0x4d33, 0x4d00, 0x4d56, 0x4d88, 0x4dae, 0x4d78, 0x4d40, 0x4d9c, 0x4d7c, 0x4d58, 0x4d2c, 0x4d47, 0x4d28, 0x4db4, 0x4dfc, 0x4d97, 0x4cec, 0x4cf7, 0x4dc0, 0x4d0c, 0x4d81, 0x4d58, 0x4d28, 0x4d63, 0x4dad, 0x4d12, 0x4d75, 0x4d77, 0x4d51, 0x4ceb, 0x4d0b, +0x4d6b, 0x4d5e, 0x4e5d, 0x4da9, 0x4e1f, 0x4d97, 0x4df3, 0x4ec4, 0x4d90, 0x4ee0, 0x4da1, 0x4e24, 0x4e3b, 0x4d68, 0x4da9, 0x4ddf, 0x4dfd, 0x4d99, 0x4d6c, 0x4dba, 0x4e07, 0x4daa, 0x4df3, 0x4dd8, 0x4d51, 0x4dc7, 0x4ddb, 0x4d6e, 0x4dd9, 0x4df2, 0x4e39, 0x4e15, 0x4e04, 0x4e02, 0x4e05, 0x4dbf, 0x4de1, 0x4d43, 0x4d73, 0x4d9e, 0x4dd5, 0x4daf, 0x4daf, 0x4e51, 0x4dcc, 0x4e5c, 0x4d8f, 0x4d5d, 0x4e2f, 0x4d7c, 0x4e80, 0x4dd7, 0x4dbd, 0x4dc2, 0x4d5f, 0x4e11, 0x4de6, 0x4d6b, 0x4d1a, 0x4db4, 0x4dcb, 0x4eba, 0x4d24, 0x4ded, 0x4dc5, 0x4d51, 0x4dfe, 0x4dfd, 0x4e44, 0x4e33, 0x4e59, 0x4d99, 0x4ddf, 0x4d99, 0x4dd4, 0x4d66, 0x4df2, 0x4de9, 0x4d80, 0x4e30, 0x4e0a, 0x4daf, 0x4dc3, 0x4e3d, 0x4d79, 0x4d72, 0x4de1, 0x4d42, 0x4e4e, 0x4ea1, 0x4d84, 0x4e13, 0x4e0c, 0x4dc9, 0x4ddf, 0x4df4, +0x4db8, 0x4e02, 0x4e6b, 0x4d8a, 0x4e8f, 0x4e49, 0x4e5b, 0x4eb6, 0x4e1d, 0x4ef9, 0x4e2f, 0x4e65, 0x4ef9, 0x4db4, 0x4e86, 0x4e5c, 0x4eae, 0x4e23, 0x4d8f, 0x4e5a, 0x4e1e, 0x4de0, 0x4e5c, 0x4dbd, 0x4e38, 0x4e37, 0x4ec8, 0x4ded, 0x4ecd, 0x4ec5, 0x4f06, 0x4e9b, 0x4e8a, 0x4ea2, 0x4e41, 0x4dea, 0x4e04, 0x4d70, 0x4d5a, 0x4e34, 0x4e01, 0x4e51, 0x4e0f, 0x4ef0, 0x4dfe, 0x4edd, 0x4d8b, 0x4dd0, 0x4e6d, 0x4e69, 0x4f18, 0x4de4, 0x4d8f, 0x4e21, 0x4de2, 0x4e07, 0x4e56, 0x4ded, 0x4d8d, 0x4e39, 0x4e50, 0x4f37, 0x4dd6, 0x4e27, 0x4e04, 0x4df0, 0x4e92, 0x4e5b, 0x4e99, 0x4eeb, 0x4e66, 0x4e60, 0x4ebc, 0x4df6, 0x4e57, 0x4e40, 0x4eaf, 0x4e5c, 0x4e3f, 0x4e44, 0x4e23, 0x4de8, 0x4e56, 0x4e7e, 0x4e01, 0x4e52, 0x4e5b, 0x4dc5, 0x4e94, 0x4ee0, 0x4e48, 0x4e48, 0x4e63, 0x4e79, 0x4e21, 0x4e3c, +0x4e6a, 0x4e58, 0x4f33, 0x4e57, 0x4ef5, 0x4ee8, 0x4f08, 0x4fd1, 0x4e62, 0x4fc6, 0x4f04, 0x4eab, 0x4fda, 0x4e9b, 0x4eec, 0x4f27, 0x4f04, 0x4eaf, 0x4e19, 0x4f17, 0x4f28, 0x4e59, 0x4ea0, 0x4e0d, 0x4eec, 0x4e73, 0x4f0c, 0x4e6a, 0x4ead, 0x4f95, 0x4edf, 0x4e8f, 0x4eca, 0x4ecd, 0x4edd, 0x4ea5, 0x4edf, 0x4dff, 0x4e28, 0x4e64, 0x4f27, 0x4ed2, 0x4e25, 0x4f29, 0x4e6c, 0x4f95, 0x4e35, 0x4e5b, 0x4f4d, 0x4ea8, 0x4f3b, 0x4eb4, 0x4e2b, 0x4ec0, 0x4e61, 0x4e91, 0x4ee7, 0x4e8c, 0x4e76, 0x4f05, 0x4ed3, 0x4f5e, 0x4e81, 0x4f16, 0x4dfd, 0x4e55, 0x4e9d, 0x4ed1, 0x4ec6, 0x4fa5, 0x4ef2, 0x4ee3, 0x4f1d, 0x4e51, 0x4ebf, 0x4ed8, 0x4ee9, 0x4ef1, 0x4ee2, 0x4f02, 0x4fae, 0x4e7b, 0x4ee4, 0x4f3c, 0x4e59, 0x4ec7, 0x4e97, 0x4e36, 0x4efb, 0x4f02, 0x4ecb, 0x4f03, 0x4f13, 0x4eb2, 0x4e94, 0x4e77, +0x4e1b, 0x4e38, 0x4edf, 0x4dc6, 0x4ee0, 0x4e35, 0x4efd, 0x4f97, 0x4e50, 0x4f9b, 0x4ddc, 0x4e39, 0x4f6b, 0x4e55, 0x4eb4, 0x4e63, 0x4ea0, 0x4e3b, 0x4e17, 0x4e2a, 0x4ed9, 0x4e23, 0x4ee7, 0x4e56, 0x4e34, 0x4e9b, 0x4eda, 0x4e0b, 0x4e82, 0x4ef2, 0x4e95, 0x4ec3, 0x4f05, 0x4e55, 0x4efc, 0x4e8f, 0x4e7c, 0x4e01, 0x4e0a, 0x4e45, 0x4e28, 0x4e65, 0x4e20, 0x4e78, 0x4ebd, 0x4ea1, 0x4e22, 0x4e2b, 0x4f6f, 0x4dcf, 0x4f35, 0x4e0f, 0x4dcb, 0x4e76, 0x4e08, 0x4e7f, 0x4f05, 0x4e5b, 0x4dd7, 0x4e83, 0x4ebd, 0x4f4c, 0x4d7b, 0x4eef, 0x4e01, 0x4e78, 0x4ee6, 0x4ea6, 0x4f28, 0x4f00, 0x4e4e, 0x4e31, 0x4ed7, 0x4e4e, 0x4e6f, 0x4e7a, 0x4e9f, 0x4ee6, 0x4e74, 0x4e91, 0x4eba, 0x4e1f, 0x4e1f, 0x4f5d, 0x4e22, 0x4e84, 0x4e2c, 0x4da3, 0x4e82, 0x4ec5, 0x4ec8, 0x4f13, 0x4ef4, 0x4e9a, 0x4eb6, 0x4e5a, +0x4d6b, 0x4db6, 0x4e0b, 0x4d3b, 0x4df7, 0x4d88, 0x4e15, 0x4e81, 0x4d5f, 0x4ef0, 0x4e2f, 0x4da2, 0x4e6a, 0x4da1, 0x4d9c, 0x4e6c, 0x4e0b, 0x4db1, 0x4d3c, 0x4dfc, 0x4d97, 0x4d63, 0x4e39, 0x4d4d, 0x4da9, 0x4d99, 0x4e40, 0x4da0, 0x4de3, 0x4e28, 0x4e04, 0x4ddc, 0x4dcb, 0x4de6, 0x4e6b, 0x4d91, 0x4dd5, 0x4d84, 0x4d44, 0x4d36, 0x4d75, 0x4de6, 0x4dba, 0x4ed7, 0x4d6f, 0x4e5a, 0x4d88, 0x4d6d, 0x4e03, 0x4d64, 0x4e96, 0x4d8a, 0x4d5c, 0x4dca, 0x4d7c, 0x4e1b, 0x4dfc, 0x4d86, 0x4d66, 0x4dd9, 0x4df3, 0x4e53, 0x4d4b, 0x4e2a, 0x4d9b, 0x4d43, 0x4ddb, 0x4e5a, 0x4de7, 0x4e56, 0x4dee, 0x4d8c, 0x4dcc, 0x4dc7, 0x4daa, 0x4d80, 0x4d97, 0x4e56, 0x4d5f, 0x4e77, 0x4d98, 0x4d51, 0x4d8d, 0x4e89, 0x4d38, 0x4d6b, 0x4dc8, 0x4d8e, 0x4df9, 0x4e13, 0x4d2f, 0x4e07, 0x4e0f, 0x4da0, 0x4d95, 0x4d6a, +0x4e54, 0x4deb, 0x4ea3, 0x4d9d, 0x4e6c, 0x4e3c, 0x4e8d, 0x4f56, 0x4de7, 0x4fa9, 0x4e3a, 0x4eb4, 0x4f3d, 0x4e5d, 0x4ea7, 0x4ead, 0x4f1d, 0x4ea7, 0x4deb, 0x4ea7, 0x4e17, 0x4e36, 0x4e45, 0x4e27, 0x4e42, 0x4e3a, 0x4f1a, 0x4e11, 0x4eb4, 0x4ee0, 0x4e33, 0x4ed2, 0x4e16, 0x4e07, 0x4ea9, 0x4df2, 0x4e4c, 0x4dda, 0x4e31, 0x4e0e, 0x4e32, 0x4e56, 0x4e0c, 0x4efb, 0x4e64, 0x4ebb, 0x4dbf, 0x4e3b, 0x4f0c, 0x4e63, 0x4f04, 0x4e4f, 0x4d9c, 0x4e3a, 0x4e16, 0x4e7c, 0x4e46, 0x4de2, 0x4df4, 0x4e91, 0x4eb6, 0x4f27, 0x4d8a, 0x4ecc, 0x4e0d, 0x4db3, 0x4e8e, 0x4e8a, 0x4ef0, 0x4f1f, 0x4eab, 0x4ea3, 0x4e4a, 0x4df3, 0x4ec1, 0x4e6a, 0x4e6c, 0x4eff, 0x4e45, 0x4ed3, 0x4ec6, 0x4e6f, 0x4e4a, 0x4ebf, 0x4de4, 0x4e40, 0x4e27, 0x4d9e, 0x4e79, 0x4ecb, 0x4e61, 0x4ed6, 0x4e9a, 0x4e4b, 0x4e55, 0x4e73, +0x4e5e, 0x4e1e, 0x4ea1, 0x4df7, 0x4e66, 0x4e71, 0x4f2d, 0x4fbf, 0x4ea4, 0x4fe2, 0x4eab, 0x4eb4, 0x4f9c, 0x4e8b, 0x4e41, 0x4e79, 0x4f69, 0x4e96, 0x4e07, 0x4e86, 0x4ec0, 0x4e14, 0x4e95, 0x4df4, 0x4e9e, 0x4e78, 0x4eea, 0x4df9, 0x4f28, 0x4f40, 0x4f87, 0x4e93, 0x4e29, 0x4ec5, 0x4ec1, 0x4eb6, 0x4e8f, 0x4e9f, 0x4def, 0x4e75, 0x4e75, 0x4e9b, 0x4e29, 0x4f68, 0x4eac, 0x4ed8, 0x4da6, 0x4e52, 0x4f2e, 0x4ea6, 0x4f46, 0x4ea9, 0x4e5b, 0x4e52, 0x4e4d, 0x4e99, 0x4ea2, 0x4e9e, 0x4ded, 0x4ed3, 0x4f10, 0x4fe3, 0x4df6, 0x4ee2, 0x4e13, 0x4f05, 0x4ed1, 0x4ef3, 0x4ef8, 0x4ef2, 0x4eb6, 0x4e1f, 0x4ecc, 0x4e25, 0x4ea1, 0x4ea3, 0x4ef8, 0x4e98, 0x4e43, 0x4ee0, 0x4f0e, 0x4e38, 0x4e74, 0x4f7b, 0x4df6, 0x4ee6, 0x4eba, 0x4de8, 0x4e70, 0x4f1a, 0x4e91, 0x4ed2, 0x4f2a, 0x4e84, 0x4ed3, 0x4ea0, +0x4e1c, 0x4e04, 0x4dfd, 0x4e12, 0x4de2, 0x4e0b, 0x4e45, 0x4ecf, 0x4d91, 0x4edb, 0x4e15, 0x4de1, 0x4ee1, 0x4e07, 0x4da5, 0x4dc1, 0x4e24, 0x4e0f, 0x4d89, 0x4e26, 0x4da5, 0x4d97, 0x4e39, 0x4ddb, 0x4e48, 0x4e3b, 0x4e20, 0x4d9f, 0x4e65, 0x4e82, 0x4e0b, 0x4d9e, 0x4de7, 0x4dbd, 0x4e42, 0x4da5, 0x4dc9, 0x4da4, 0x4dc0, 0x4da9, 0x4e74, 0x4e5c, 0x4de2, 0x4ee1, 0x4e10, 0x4eb1, 0x4d66, 0x4da6, 0x4eba, 0x4e1f, 0x4e9c, 0x4e61, 0x4d43, 0x4dcb, 0x4d98, 0x4e08, 0x4e22, 0x4dea, 0x4ddd, 0x4e76, 0x4e4e, 0x4e86, 0x4d7b, 0x4dfe, 0x4d4c, 0x4e37, 0x4d97, 0x4e31, 0x4e4f, 0x4ebe, 0x4e34, 0x4da1, 0x4e64, 0x4d9e, 0x4df2, 0x4e04, 0x4dd1, 0x4e3a, 0x4dd7, 0x4ea4, 0x4e09, 0x4db9, 0x4d96, 0x4e9a, 0x4d95, 0x4dd5, 0x4e1d, 0x4d54, 0x4de8, 0x4e4a, 0x4dd0, 0x4e6e, 0x4e53, 0x4e49, 0x4d86, 0x4d68, +0x4da0, 0x4dee, 0x4e81, 0x4df4, 0x4de0, 0x4dcd, 0x4ddd, 0x4eae, 0x4dce, 0x4f09, 0x4e0f, 0x4df0, 0x4ecc, 0x4df5, 0x4ddf, 0x4dca, 0x4dd6, 0x4d7f, 0x4dc1, 0x4e0d, 0x4dff, 0x4d9f, 0x4dd5, 0x4d55, 0x4daa, 0x4d84, 0x4e57, 0x4da9, 0x4e39, 0x4eb3, 0x4e60, 0x4dea, 0x4dd4, 0x4e18, 0x4e4a, 0x4dbf, 0x4d8b, 0x4d9f, 0x4d54, 0x4d9f, 0x4e12, 0x4de5, 0x4d9b, 0x4e24, 0x4db4, 0x4e48, 0x4dba, 0x4d88, 0x4e72, 0x4d39, 0x4e4e, 0x4d65, 0x4cef, 0x4e05, 0x4da6, 0x4dbe, 0x4e07, 0x4d71, 0x4d4a, 0x4deb, 0x4e37, 0x4e5e, 0x4dc0, 0x4e20, 0x4d3a, 0x4d5a, 0x4dbd, 0x4e31, 0x4e64, 0x4e77, 0x4e40, 0x4da2, 0x4e46, 0x4da5, 0x4db6, 0x4db4, 0x4db0, 0x4e17, 0x4dc7, 0x4e14, 0x4e24, 0x4dc0, 0x4d5b, 0x4e25, 0x4d91, 0x4e08, 0x4e39, 0x4db0, 0x4ddc, 0x4e55, 0x4d39, 0x4e17, 0x4e75, 0x4dd5, 0x4de9, 0x4e2c, +0x4d74, 0x4d5a, 0x4dde, 0x4d5b, 0x4dc3, 0x4d09, 0x4d93, 0x4e08, 0x4da7, 0x4e79, 0x4d85, 0x4dea, 0x4e38, 0x4d6f, 0x4d63, 0x4d92, 0x4df3, 0x4d6a, 0x4cd6, 0x4d9c, 0x4d83, 0x4d56, 0x4dd5, 0x4d8e, 0x4d84, 0x4da6, 0x4e24, 0x4d2a, 0x4dbb, 0x4e22, 0x4da3, 0x4de8, 0x4d30, 0x4dcc, 0x4db8, 0x4d87, 0x4d63, 0x4d3b, 0x4d3a, 0x4d78, 0x4d6c, 0x4d6c, 0x4d72, 0x4df4, 0x4d6a, 0x4e25, 0x4d3a, 0x4d20, 0x4e25, 0x4d00, 0x4dfc, 0x4d64, 0x4cf9, 0x4d95, 0x4d05, 0x4d3b, 0x4db6, 0x4d0e, 0x4d12, 0x4dd1, 0x4d95, 0x4e0b, 0x4d6a, 0x4de4, 0x4d38, 0x4d87, 0x4e22, 0x4df4, 0x4dc1, 0x4e09, 0x4d9d, 0x4dca, 0x4dd9, 0x4d6a, 0x4d8f, 0x4d3e, 0x4dba, 0x4dbb, 0x4d84, 0x4d7b, 0x4e1e, 0x4d4d, 0x4d67, 0x4e00, 0x4d27, 0x4d54, 0x4db9, 0x4cda, 0x4db1, 0x4e29, 0x4d71, 0x4e22, 0x4df2, 0x4d61, 0x4df0, 0x4d52, +0x4d31, 0x4d90, 0x4e17, 0x4db3, 0x4e1b, 0x4dac, 0x4e08, 0x4ec6, 0x4da8, 0x4eea, 0x4dcb, 0x4e2c, 0x4ee0, 0x4df0, 0x4dda, 0x4dcc, 0x4ea1, 0x4d9a, 0x4dac, 0x4d91, 0x4e2b, 0x4daf, 0x4d8d, 0x4dc6, 0x4e1f, 0x4e0e, 0x4e23, 0x4d57, 0x4e3b, 0x4e3d, 0x4e32, 0x4e66, 0x4e1f, 0x4da7, 0x4e4d, 0x4d47, 0x4da1, 0x4d69, 0x4d6f, 0x4df5, 0x4e0b, 0x4e09, 0x4d7c, 0x4e41, 0x4e09, 0x4e4f, 0x4db3, 0x4df9, 0x4e6a, 0x4de9, 0x4f3e, 0x4e2d, 0x4da0, 0x4e44, 0x4e1a, 0x4df6, 0x4dfc, 0x4d91, 0x4d48, 0x4dcf, 0x4e23, 0x4eb4, 0x4ce1, 0x4e40, 0x4d7d, 0x4da5, 0x4e55, 0x4e34, 0x4e67, 0x4ea2, 0x4e48, 0x4db5, 0x4e25, 0x4e0b, 0x4e1a, 0x4dc4, 0x4e27, 0x4df3, 0x4de6, 0x4e31, 0x4e6f, 0x4de8, 0x4d85, 0x4e70, 0x4d69, 0x4dd9, 0x4de8, 0x4d18, 0x4da7, 0x4e04, 0x4dd3, 0x4e2c, 0x4e3d, 0x4e23, 0x4dd6, 0x4dd2, +0x4e0b, 0x4de2, 0x4e76, 0x4dc3, 0x4e4c, 0x4da5, 0x4e8f, 0x4ec5, 0x4e4d, 0x4f7d, 0x4df4, 0x4e19, 0x4efc, 0x4dc4, 0x4de0, 0x4dd8, 0x4ec5, 0x4dc9, 0x4dd7, 0x4e2b, 0x4e79, 0x4d8d, 0x4e5a, 0x4daa, 0x4e09, 0x4e3f, 0x4e7d, 0x4d99, 0x4e50, 0x4ed9, 0x4ec7, 0x4e5b, 0x4e31, 0x4e6d, 0x4ea8, 0x4e52, 0x4e4a, 0x4dfa, 0x4d61, 0x4e28, 0x4dfa, 0x4e30, 0x4dbd, 0x4ebd, 0x4e1c, 0x4f17, 0x4dad, 0x4e34, 0x4e90, 0x4dd8, 0x4f2e, 0x4e40, 0x4d4b, 0x4e2a, 0x4d89, 0x4deb, 0x4e42, 0x4de8, 0x4d63, 0x4e29, 0x4e46, 0x4f35, 0x4dd4, 0x4e25, 0x4d5f, 0x4e3a, 0x4ee4, 0x4e5b, 0x4e97, 0x4ea5, 0x4e51, 0x4e34, 0x4e6b, 0x4e53, 0x4e7a, 0x4e14, 0x4e12, 0x4e0e, 0x4df0, 0x4e0d, 0x4ebc, 0x4de5, 0x4dbb, 0x4ead, 0x4df9, 0x4e62, 0x4e34, 0x4d91, 0x4e53, 0x4ec3, 0x4e2a, 0x4e18, 0x4e5c, 0x4eac, 0x4e3c, 0x4e1a, +0x4db4, 0x4ded, 0x4e56, 0x4dd8, 0x4dd5, 0x4e20, 0x4f02, 0x4f27, 0x4e56, 0x4f17, 0x4e18, 0x4e35, 0x4f47, 0x4e28, 0x4e4c, 0x4e26, 0x4e8c, 0x4db7, 0x4dab, 0x4e2b, 0x4e62, 0x4de7, 0x4e47, 0x4d76, 0x4dd3, 0x4e32, 0x4e41, 0x4d9b, 0x4e36, 0x4ee1, 0x4eda, 0x4e4e, 0x4e46, 0x4e28, 0x4e76, 0x4e65, 0x4df2, 0x4dd6, 0x4dc5, 0x4e0c, 0x4e02, 0x4da9, 0x4da7, 0x4eb1, 0x4e0c, 0x4e9c, 0x4db8, 0x4e4b, 0x4ea5, 0x4dca, 0x4ea0, 0x4e03, 0x4d89, 0x4e30, 0x4da8, 0x4e2f, 0x4e4f, 0x4e24, 0x4dce, 0x4e2a, 0x4e77, 0x4f06, 0x4d80, 0x4e7e, 0x4d88, 0x4df1, 0x4e6b, 0x4e12, 0x4e4f, 0x4eed, 0x4e20, 0x4e44, 0x4df4, 0x4e38, 0x4e62, 0x4e44, 0x4e3a, 0x4e7d, 0x4e02, 0x4eac, 0x4e74, 0x4e07, 0x4df2, 0x4e84, 0x4dfe, 0x4e3a, 0x4e0c, 0x4d86, 0x4e4d, 0x4e72, 0x4dfb, 0x4e39, 0x4e61, 0x4e46, 0x4dfd, 0x4e42, +0x4de9, 0x4dbb, 0x4e30, 0x4d6f, 0x4dfa, 0x4d82, 0x4e70, 0x4ec5, 0x4da1, 0x4f06, 0x4e5b, 0x4e47, 0x4e79, 0x4dad, 0x4dd5, 0x4e61, 0x4e44, 0x4dae, 0x4dee, 0x4e4f, 0x4e40, 0x4d9e, 0x4e3e, 0x4ddf, 0x4dab, 0x4e84, 0x4e5e, 0x4da7, 0x4e58, 0x4f0e, 0x4e10, 0x4e42, 0x4e18, 0x4e24, 0x4e7c, 0x4e08, 0x4e14, 0x4db7, 0x4db8, 0x4e22, 0x4df6, 0x4e07, 0x4d8b, 0x4ebc, 0x4db7, 0x4eb3, 0x4d91, 0x4d9e, 0x4e45, 0x4db8, 0x4ed5, 0x4dc6, 0x4db4, 0x4da1, 0x4d70, 0x4e4c, 0x4e72, 0x4d8a, 0x4dc9, 0x4d7f, 0x4e1d, 0x4f30, 0x4d7c, 0x4e93, 0x4dd2, 0x4de4, 0x4e93, 0x4e72, 0x4e34, 0x4f3d, 0x4e42, 0x4de7, 0x4e76, 0x4df4, 0x4eae, 0x4df6, 0x4e2b, 0x4e50, 0x4e4b, 0x4e66, 0x4e63, 0x4de2, 0x4de1, 0x4e80, 0x4d96, 0x4dd7, 0x4dee, 0x4ce7, 0x4d9a, 0x4e60, 0x4dc3, 0x4e68, 0x4e4f, 0x4e2d, 0x4e06, 0x4e31, +0x4e00, 0x4e5b, 0x4e77, 0x4dda, 0x4e1a, 0x4dee, 0x4e83, 0x4f15, 0x4e59, 0x4f9a, 0x4e31, 0x4e60, 0x4f31, 0x4e94, 0x4df9, 0x4e36, 0x4eaf, 0x4e48, 0x4dd9, 0x4e49, 0x4e2c, 0x4e35, 0x4ec4, 0x4e48, 0x4e46, 0x4e24, 0x4e95, 0x4dbc, 0x4edf, 0x4f2e, 0x4eeb, 0x4e2f, 0x4e0d, 0x4e31, 0x4ef6, 0x4e75, 0x4dd4, 0x4dd9, 0x4d8f, 0x4e1f, 0x4e09, 0x4dc8, 0x4dfd, 0x4ef2, 0x4e8f, 0x4ed0, 0x4de5, 0x4e12, 0x4ebd, 0x4df4, 0x4ece, 0x4dda, 0x4d36, 0x4e4e, 0x4e0d, 0x4e28, 0x4ead, 0x4e24, 0x4df9, 0x4e79, 0x4eae, 0x4f04, 0x4deb, 0x4e71, 0x4d7e, 0x4e7b, 0x4e6d, 0x4ee2, 0x4e66, 0x4f2b, 0x4e6f, 0x4df6, 0x4ec0, 0x4e28, 0x4e7a, 0x4e28, 0x4e28, 0x4e4e, 0x4e66, 0x4ef7, 0x4ed3, 0x4deb, 0x4e05, 0x4eb3, 0x4dd9, 0x4e88, 0x4e61, 0x4dfd, 0x4e3b, 0x4e89, 0x4e3a, 0x4e50, 0x4ec6, 0x4e51, 0x4e3f, 0x4de0, +0x4dcf, 0x4e18, 0x4e1c, 0x4db7, 0x4e2e, 0x4e1f, 0x4e65, 0x4f10, 0x4dc9, 0x4fb4, 0x4e91, 0x4e63, 0x4f7c, 0x4e56, 0x4e23, 0x4e0d, 0x4e8d, 0x4dea, 0x4db7, 0x4e18, 0x4e14, 0x4da8, 0x4e1e, 0x4d71, 0x4df0, 0x4e35, 0x4e39, 0x4dec, 0x4e2a, 0x4f10, 0x4e78, 0x4e50, 0x4e31, 0x4e77, 0x4f16, 0x4dca, 0x4d9c, 0x4e1c, 0x4da1, 0x4e11, 0x4e25, 0x4e03, 0x4d87, 0x4ecf, 0x4e2a, 0x4ec7, 0x4d9b, 0x4e44, 0x4e78, 0x4dc2, 0x4f13, 0x4e08, 0x4d85, 0x4ddc, 0x4dd4, 0x4db3, 0x4e2e, 0x4e26, 0x4df4, 0x4e2e, 0x4e60, 0x4f22, 0x4d9d, 0x4ebb, 0x4d96, 0x4e65, 0x4e39, 0x4e4b, 0x4e0f, 0x4ee2, 0x4e96, 0x4dd0, 0x4e47, 0x4e26, 0x4e9e, 0x4e32, 0x4dfa, 0x4e81, 0x4e39, 0x4e73, 0x4ec3, 0x4d8e, 0x4dfe, 0x4e9d, 0x4ded, 0x4e43, 0x4ddb, 0x4d85, 0x4e00, 0x4e59, 0x4def, 0x4e65, 0x4e9c, 0x4e31, 0x4df9, 0x4dd1, +0x4d16, 0x4d87, 0x4e0a, 0x4d67, 0x4dfb, 0x4d49, 0x4daa, 0x4e26, 0x4d51, 0x4e60, 0x4d6f, 0x4d77, 0x4eb9, 0x4da7, 0x4d87, 0x4d9f, 0x4ddd, 0x4d9e, 0x4d4e, 0x4dc1, 0x4dc3, 0x4d44, 0x4d6b, 0x4d53, 0x4d48, 0x4d3f, 0x4ddb, 0x4d6f, 0x4db5, 0x4de9, 0x4dfc, 0x4ddb, 0x4de2, 0x4d7e, 0x4e02, 0x4d6f, 0x4d80, 0x4d13, 0x4d1b, 0x4d08, 0x4dc7, 0x4d52, 0x4d7f, 0x4d8b, 0x4db3, 0x4dfe, 0x4d24, 0x4d12, 0x4dd6, 0x4d8c, 0x4e24, 0x4d61, 0x4d12, 0x4dcd, 0x4d2d, 0x4d83, 0x4db3, 0x4dc8, 0x4d3f, 0x4dd5, 0x4d9e, 0x4e44, 0x4d09, 0x4dbc, 0x4d01, 0x4d29, 0x4d96, 0x4d7d, 0x4dd3, 0x4e10, 0x4d50, 0x4dd2, 0x4d5d, 0x4da8, 0x4dac, 0x4d98, 0x4d92, 0x4d5f, 0x4d9a, 0x4de5, 0x4dcd, 0x4da5, 0x4d6a, 0x4dd6, 0x4d0c, 0x4d65, 0x4d4c, 0x4d42, 0x4dd3, 0x4dbd, 0x4db7, 0x4d89, 0x4dcd, 0x4de3, 0x4d99, 0x4d64, +0x4cf5, 0x4d4a, 0x4dd3, 0x4d03, 0x4d77, 0x4d6c, 0x4db3, 0x4e28, 0x4d32, 0x4e34, 0x4d68, 0x4d9a, 0x4dad, 0x4db7, 0x4dad, 0x4d6d, 0x4e1e, 0x4d30, 0x4d3d, 0x4d9d, 0x4df3, 0x4d29, 0x4d33, 0x4ce2, 0x4d74, 0x4d67, 0x4d9d, 0x4d11, 0x4dca, 0x4e34, 0x4d92, 0x4dca, 0x4d8c, 0x4d33, 0x4da0, 0x4db5, 0x4d3b, 0x4d32, 0x4d0f, 0x4d4f, 0x4cf7, 0x4da4, 0x4d97, 0x4e28, 0x4d40, 0x4d7d, 0x4d00, 0x4d56, 0x4e0a, 0x4cc8, 0x4e0d, 0x4d08, 0x4d21, 0x4d52, 0x4cce, 0x4d5a, 0x4de3, 0x4ced, 0x4ced, 0x4db9, 0x4dbd, 0x4e16, 0x4cf5, 0x4da1, 0x4d57, 0x4d4f, 0x4ddc, 0x4daf, 0x4dfa, 0x4db2, 0x4e26, 0x4d1c, 0x4d8a, 0x4d31, 0x4d88, 0x4cd3, 0x4da8, 0x4dac, 0x4d50, 0x4d91, 0x4d76, 0x4d56, 0x4d5b, 0x4dab, 0x4d56, 0x4d93, 0x4d6f, 0x4cef, 0x4d8e, 0x4ddb, 0x4d6a, 0x4dd8, 0x4db3, 0x4dff, 0x4d77, 0x4d73, +0x4e14, 0x4df9, 0x4e48, 0x4dc5, 0x4dbd, 0x4dcc, 0x4e10, 0x4ec3, 0x4df1, 0x4f5c, 0x4e1c, 0x4e5d, 0x4edc, 0x4df1, 0x4dc0, 0x4e2d, 0x4e62, 0x4de3, 0x4d61, 0x4e39, 0x4e3b, 0x4d79, 0x4e3f, 0x4d76, 0x4daf, 0x4dc8, 0x4e42, 0x4d8d, 0x4e79, 0x4f05, 0x4e44, 0x4e3d, 0x4dce, 0x4e92, 0x4eb7, 0x4df7, 0x4dc4, 0x4db0, 0x4da3, 0x4df3, 0x4db6, 0x4dd6, 0x4dc5, 0x4ea3, 0x4d9e, 0x4ec8, 0x4d7c, 0x4e22, 0x4ee2, 0x4d92, 0x4f08, 0x4db2, 0x4dc3, 0x4df6, 0x4d31, 0x4e50, 0x4e8f, 0x4dd7, 0x4d6e, 0x4e1a, 0x4e86, 0x4f14, 0x4d99, 0x4e85, 0x4d54, 0x4e46, 0x4e26, 0x4e60, 0x4e4b, 0x4f02, 0x4e22, 0x4e04, 0x4e08, 0x4e0e, 0x4e68, 0x4e4a, 0x4de0, 0x4e5a, 0x4e36, 0x4e3d, 0x4e54, 0x4de2, 0x4df7, 0x4e14, 0x4dc6, 0x4e2f, 0x4e56, 0x4d70, 0x4dd2, 0x4e2a, 0x4e35, 0x4e7f, 0x4e7c, 0x4e20, 0x4db4, 0x4d7e, +0x4dc6, 0x4dc2, 0x4e0e, 0x4d9c, 0x4df6, 0x4df8, 0x4dfa, 0x4eb0, 0x4dbc, 0x4ee4, 0x4df7, 0x4da7, 0x4e6e, 0x4d80, 0x4dd3, 0x4dcf, 0x4e02, 0x4d96, 0x4df7, 0x4e57, 0x4e54, 0x4db1, 0x4e11, 0x4d54, 0x4e15, 0x4de1, 0x4e29, 0x4d6c, 0x4dfd, 0x4e7b, 0x4e56, 0x4dfb, 0x4e05, 0x4db1, 0x4e80, 0x4dde, 0x4db5, 0x4d95, 0x4d5e, 0x4de3, 0x4e10, 0x4dea, 0x4d4f, 0x4e65, 0x4dbc, 0x4e8c, 0x4d8d, 0x4ddc, 0x4e2d, 0x4daf, 0x4eb2, 0x4d7d, 0x4d12, 0x4dfc, 0x4d73, 0x4dcf, 0x4e1f, 0x4ddf, 0x4da2, 0x4e58, 0x4e2c, 0x4e98, 0x4d5b, 0x4dec, 0x4d85, 0x4d9f, 0x4de6, 0x4e43, 0x4dca, 0x4e3e, 0x4e6e, 0x4db7, 0x4e2e, 0x4dc1, 0x4dc9, 0x4da4, 0x4dc9, 0x4e02, 0x4df8, 0x4e2f, 0x4e59, 0x4dfe, 0x4d43, 0x4e64, 0x4d80, 0x4ddd, 0x4e15, 0x4d57, 0x4e48, 0x4df3, 0x4dad, 0x4e2f, 0x4e47, 0x4e28, 0x4d94, 0x4db7, +0x4d5f, 0x4d44, 0x4de2, 0x4d6d, 0x4d9b, 0x4d02, 0x4dbe, 0x4e08, 0x4d52, 0x4e16, 0x4d7f, 0x4d66, 0x4e4e, 0x4d55, 0x4d0f, 0x4d7f, 0x4d95, 0x4d6e, 0x4ce8, 0x4dad, 0x4d69, 0x4d42, 0x4dd8, 0x4d33, 0x4d9f, 0x4d61, 0x4dcb, 0x4d43, 0x4dbe, 0x4e12, 0x4dd1, 0x4da1, 0x4d81, 0x4da9, 0x4dff, 0x4d57, 0x4d5b, 0x4cef, 0x4d36, 0x4ccd, 0x4d6a, 0x4d20, 0x4d73, 0x4e30, 0x4d5c, 0x4e02, 0x4d09, 0x4d13, 0x4dee, 0x4d08, 0x4e28, 0x4ce2, 0x4ca5, 0x4d53, 0x4ce4, 0x4d25, 0x4dec, 0x4d44, 0x4d3a, 0x4dc9, 0x4da0, 0x4e0f, 0x4d36, 0x4d80, 0x4c83, 0x4d4c, 0x4d64, 0x4da2, 0x4e08, 0x4e17, 0x4d3f, 0x4d3b, 0x4db3, 0x4d82, 0x4d60, 0x4d87, 0x4d58, 0x4d7a, 0x4d47, 0x4da7, 0x4d24, 0x4d1c, 0x4d2b, 0x4e06, 0x4d16, 0x4dc6, 0x4d87, 0x4cdf, 0x4d70, 0x4db9, 0x4d27, 0x4dc9, 0x4dbb, 0x4d8f, 0x4d3f, 0x4d16, +0x4e12, 0x4e6c, 0x4e94, 0x4e81, 0x4ec0, 0x4e60, 0x4e3b, 0x4f8e, 0x4df8, 0x4f5a, 0x4e88, 0x4e88, 0x4f1c, 0x4e40, 0x4dea, 0x4ddf, 0x4ecb, 0x4e4e, 0x4e15, 0x4e32, 0x4ec9, 0x4dc5, 0x4e88, 0x4dd2, 0x4e51, 0x4e38, 0x4e88, 0x4e03, 0x4e75, 0x4ef6, 0x4eda, 0x4e88, 0x4ea8, 0x4e77, 0x4ec2, 0x4df3, 0x4e12, 0x4e23, 0x4df5, 0x4e0a, 0x4e86, 0x4e65, 0x4df8, 0x4ede, 0x4e52, 0x4ea9, 0x4da0, 0x4e3d, 0x4f16, 0x4e37, 0x4ee0, 0x4df5, 0x4def, 0x4e7a, 0x4dc7, 0x4e6b, 0x4ea5, 0x4e02, 0x4e52, 0x4e35, 0x4e6f, 0x4f2c, 0x4dd0, 0x4e5d, 0x4e27, 0x4e36, 0x4e9b, 0x4e77, 0x4eaa, 0x4f73, 0x4e60, 0x4dfc, 0x4f07, 0x4e60, 0x4e77, 0x4dfd, 0x4e39, 0x4e7a, 0x4e32, 0x4e65, 0x4e35, 0x4e28, 0x4dfe, 0x4eb3, 0x4e20, 0x4e8f, 0x4e7a, 0x4e05, 0x4e5b, 0x4eca, 0x4dcf, 0x4ec3, 0x4eee, 0x4ea4, 0x4e05, 0x4ded, +0x4e2a, 0x4e81, 0x4e68, 0x4de3, 0x4e93, 0x4dc5, 0x4e6a, 0x4f2a, 0x4df5, 0x4fa3, 0x4e54, 0x4e50, 0x4edf, 0x4e46, 0x4e9a, 0x4e35, 0x4ef8, 0x4e70, 0x4da1, 0x4e3d, 0x4e71, 0x4dfb, 0x4e64, 0x4d8e, 0x4e2f, 0x4e3d, 0x4e51, 0x4dd6, 0x4ecd, 0x4ea0, 0x4ecf, 0x4eba, 0x4e64, 0x4e65, 0x4ed8, 0x4dfd, 0x4e11, 0x4e1a, 0x4dc1, 0x4e5c, 0x4e66, 0x4e31, 0x4e6d, 0x4efa, 0x4dfe, 0x4f06, 0x4dd9, 0x4e0a, 0x4eed, 0x4df1, 0x4ef5, 0x4e12, 0x4dc6, 0x4e56, 0x4e31, 0x4dec, 0x4e66, 0x4db6, 0x4d8c, 0x4e40, 0x4e38, 0x4f37, 0x4dc4, 0x4ebe, 0x4e42, 0x4de6, 0x4e8b, 0x4eab, 0x4e84, 0x4eee, 0x4ec7, 0x4e13, 0x4e45, 0x4e7c, 0x4ea5, 0x4e72, 0x4e7f, 0x4e91, 0x4e53, 0x4e74, 0x4e5f, 0x4e41, 0x4e9c, 0x4ea3, 0x4da1, 0x4e06, 0x4e0b, 0x4dce, 0x4e5a, 0x4ed8, 0x4deb, 0x4e5c, 0x4ecd, 0x4eaf, 0x4e17, 0x4dc0, +0x4de1, 0x4df5, 0x4e47, 0x4de4, 0x4e55, 0x4de7, 0x4e23, 0x4f36, 0x4e02, 0x4f54, 0x4e1d, 0x4e77, 0x4ef4, 0x4e3a, 0x4e11, 0x4e2f, 0x4ef2, 0x4dd7, 0x4d78, 0x4e6f, 0x4e4b, 0x4da1, 0x4dc0, 0x4df2, 0x4de6, 0x4e31, 0x4ed7, 0x4e12, 0x4e15, 0x4eba, 0x4e06, 0x4e6e, 0x4e1e, 0x4e11, 0x4e69, 0x4dc7, 0x4df4, 0x4d9a, 0x4dbb, 0x4e16, 0x4dd8, 0x4e22, 0x4dad, 0x4e5c, 0x4df8, 0x4ea6, 0x4d9d, 0x4e12, 0x4ec1, 0x4dd9, 0x4f1a, 0x4ded, 0x4d6c, 0x4de3, 0x4dc5, 0x4e41, 0x4e66, 0x4d96, 0x4def, 0x4e15, 0x4e17, 0x4ec8, 0x4da2, 0x4e8e, 0x4de3, 0x4de2, 0x4ead, 0x4e9c, 0x4e8d, 0x4f0e, 0x4e35, 0x4e42, 0x4ebd, 0x4e0f, 0x4e8e, 0x4e1b, 0x4e29, 0x4e37, 0x4e5f, 0x4e33, 0x4e74, 0x4e10, 0x4dc6, 0x4e6f, 0x4dd4, 0x4e07, 0x4e8f, 0x4d7c, 0x4da2, 0x4ea6, 0x4ddd, 0x4ea0, 0x4edc, 0x4e44, 0x4e3f, 0x4dcf, +0x4d64, 0x4dbc, 0x4e2a, 0x4d7b, 0x4e0c, 0x4d70, 0x4d5c, 0x4e7f, 0x4d22, 0x4e82, 0x4dc7, 0x4e34, 0x4eb8, 0x4d43, 0x4d93, 0x4db4, 0x4e62, 0x4d6c, 0x4d5d, 0x4df9, 0x4daf, 0x4d4c, 0x4d4d, 0x4d5e, 0x4dc0, 0x4d68, 0x4e15, 0x4d39, 0x4e00, 0x4e8d, 0x4df5, 0x4e3d, 0x4dbd, 0x4d3d, 0x4ddc, 0x4d68, 0x4d55, 0x4d32, 0x4cec, 0x4d58, 0x4d8d, 0x4dcc, 0x4d55, 0x4ded, 0x4dfd, 0x4e14, 0x4d4e, 0x4d69, 0x4e63, 0x4d60, 0x4e56, 0x4db8, 0x4d40, 0x4daf, 0x4d4b, 0x4db7, 0x4d88, 0x4d57, 0x4d78, 0x4df0, 0x4ddf, 0x4ea7, 0x4d74, 0x4ddf, 0x4d1f, 0x4d45, 0x4dda, 0x4dc0, 0x4e11, 0x4e5e, 0x4de0, 0x4dfb, 0x4db1, 0x4dbe, 0x4df9, 0x4df0, 0x4db3, 0x4de6, 0x4d9c, 0x4e03, 0x4e08, 0x4d73, 0x4d70, 0x4df1, 0x4dca, 0x4dc5, 0x4d97, 0x4d15, 0x4db0, 0x4e61, 0x4d67, 0x4dc5, 0x4e20, 0x4d85, 0x4d6b, 0x4d62, +0x4d80, 0x4df6, 0x4e6f, 0x4d6a, 0x4e44, 0x4dc4, 0x4e6c, 0x4e7a, 0x4dd6, 0x4f7d, 0x4dda, 0x4dc4, 0x4f2e, 0x4db6, 0x4e17, 0x4ddb, 0x4e6f, 0x4dae, 0x4d64, 0x4dd7, 0x4e04, 0x4dba, 0x4dc3, 0x4de4, 0x4e27, 0x4e3a, 0x4e65, 0x4d7c, 0x4e06, 0x4ead, 0x4dfa, 0x4e4d, 0x4df1, 0x4e0d, 0x4eb9, 0x4dd6, 0x4e4e, 0x4d75, 0x4dca, 0x4df0, 0x4dde, 0x4e13, 0x4de3, 0x4ef2, 0x4dfe, 0x4e7e, 0x4d4a, 0x4dd2, 0x4e5c, 0x4dac, 0x4e79, 0x4dce, 0x4d0a, 0x4e15, 0x4dfc, 0x4df1, 0x4e77, 0x4db2, 0x4d70, 0x4e5c, 0x4e18, 0x4ee6, 0x4db1, 0x4e6b, 0x4d81, 0x4e15, 0x4e18, 0x4e15, 0x4dff, 0x4e9d, 0x4e3a, 0x4e0b, 0x4e75, 0x4dee, 0x4e31, 0x4e0e, 0x4de0, 0x4e45, 0x4e2c, 0x4e78, 0x4e7c, 0x4da5, 0x4dad, 0x4edc, 0x4df9, 0x4e0d, 0x4e39, 0x4d71, 0x4d8a, 0x4e50, 0x4dd8, 0x4e38, 0x4e5e, 0x4ddd, 0x4e18, 0x4d7e, +0x4dd4, 0x4df2, 0x4e8f, 0x4dd6, 0x4e08, 0x4dc1, 0x4e1b, 0x4f76, 0x4dea, 0x4f19, 0x4e8a, 0x4eb4, 0x4f5a, 0x4de2, 0x4df5, 0x4e7d, 0x4e87, 0x4e40, 0x4db8, 0x4ea9, 0x4e79, 0x4da2, 0x4e33, 0x4d4a, 0x4e4b, 0x4e18, 0x4e44, 0x4e00, 0x4e51, 0x4e9f, 0x4e5d, 0x4e73, 0x4e09, 0x4e51, 0x4e4f, 0x4e52, 0x4ddf, 0x4dc7, 0x4dd6, 0x4e21, 0x4e2f, 0x4e62, 0x4ddb, 0x4ea4, 0x4e07, 0x4eb9, 0x4ded, 0x4dcc, 0x4ed5, 0x4dcd, 0x4ebf, 0x4dce, 0x4d8e, 0x4dd4, 0x4d90, 0x4e36, 0x4e69, 0x4de2, 0x4d98, 0x4e4c, 0x4e10, 0x4ecc, 0x4d5d, 0x4ebc, 0x4dd7, 0x4e00, 0x4e78, 0x4e8f, 0x4ea8, 0x4ee1, 0x4e82, 0x4e2e, 0x4e0b, 0x4e1d, 0x4e94, 0x4e36, 0x4dff, 0x4e1d, 0x4e2d, 0x4dd3, 0x4e2e, 0x4e02, 0x4def, 0x4e83, 0x4dc1, 0x4e30, 0x4e18, 0x4dc8, 0x4dcc, 0x4e7b, 0x4deb, 0x4e91, 0x4e53, 0x4ead, 0x4e39, 0x4de7, +0x4db6, 0x4dde, 0x4e7e, 0x4d9c, 0x4e4d, 0x4d7f, 0x4dd3, 0x4e1d, 0x4dee, 0x4efe, 0x4e96, 0x4e29, 0x4e9f, 0x4e12, 0x4dfb, 0x4e03, 0x4e55, 0x4e4d, 0x4d8e, 0x4df4, 0x4e23, 0x4dd3, 0x4dbf, 0x4dd2, 0x4e6f, 0x4dab, 0x4e07, 0x4e0d, 0x4e82, 0x4e89, 0x4e4c, 0x4e3f, 0x4e3b, 0x4e64, 0x4e44, 0x4e2d, 0x4db1, 0x4dc5, 0x4db7, 0x4dcf, 0x4e33, 0x4e54, 0x4e27, 0x4e12, 0x4e13, 0x4e28, 0x4d7e, 0x4df7, 0x4eb3, 0x4df0, 0x4eda, 0x4df1, 0x4d04, 0x4df4, 0x4d89, 0x4dfb, 0x4e5b, 0x4dd4, 0x4d9e, 0x4e56, 0x4e47, 0x4ec2, 0x4d55, 0x4e0c, 0x4d56, 0x4e2c, 0x4d9b, 0x4e3c, 0x4e5b, 0x4ed3, 0x4e76, 0x4de1, 0x4e24, 0x4e31, 0x4e21, 0x4dec, 0x4dfe, 0x4e35, 0x4e3a, 0x4e7f, 0x4e71, 0x4dc9, 0x4e07, 0x4ea7, 0x4dbf, 0x4e4d, 0x4e21, 0x4d4e, 0x4dff, 0x4e44, 0x4dbc, 0x4e34, 0x4e63, 0x4e9d, 0x4ddd, 0x4e09, +0x4d5f, 0x4d52, 0x4e04, 0x4d4d, 0x4dc9, 0x4d7b, 0x4e22, 0x4e97, 0x4dc6, 0x4ec4, 0x4e0e, 0x4e14, 0x4ea4, 0x4d64, 0x4dbc, 0x4df1, 0x4e04, 0x4d9f, 0x4db5, 0x4dcb, 0x4dbc, 0x4d69, 0x4dc0, 0x4da8, 0x4e3e, 0x4e16, 0x4e73, 0x4d5d, 0x4e6c, 0x4eb7, 0x4e6f, 0x4de6, 0x4dc8, 0x4e02, 0x4e9e, 0x4d83, 0x4d8c, 0x4d6f, 0x4d25, 0x4dfd, 0x4e12, 0x4d9a, 0x4d58, 0x4e95, 0x4de8, 0x4e74, 0x4d50, 0x4df8, 0x4ddf, 0x4e0e, 0x4eb7, 0x4de1, 0x4d5f, 0x4d95, 0x4d8a, 0x4dcf, 0x4e35, 0x4dc7, 0x4d95, 0x4db6, 0x4db7, 0x4f00, 0x4d61, 0x4dc9, 0x4daa, 0x4daf, 0x4e2e, 0x4e12, 0x4e12, 0x4ed4, 0x4e2f, 0x4db5, 0x4e30, 0x4dfc, 0x4e4e, 0x4e39, 0x4e06, 0x4e30, 0x4ddd, 0x4e11, 0x4e6b, 0x4dc2, 0x4d96, 0x4e6a, 0x4d42, 0x4e30, 0x4e1f, 0x4d21, 0x4de8, 0x4e8c, 0x4dbc, 0x4dcc, 0x4e03, 0x4e61, 0x4df3, 0x4e23, +0x4d73, 0x4d6b, 0x4e65, 0x4d83, 0x4e07, 0x4de4, 0x4e20, 0x4ecc, 0x4d8e, 0x4eca, 0x4ddf, 0x4dc7, 0x4ead, 0x4d93, 0x4d81, 0x4df7, 0x4e5a, 0x4dac, 0x4d5e, 0x4dd7, 0x4e0c, 0x4d53, 0x4db1, 0x4cc3, 0x4e09, 0x4dac, 0x4e44, 0x4d97, 0x4df3, 0x4e6c, 0x4e2d, 0x4da1, 0x4df0, 0x4df1, 0x4e35, 0x4d86, 0x4d8f, 0x4da9, 0x4ce6, 0x4d92, 0x4e33, 0x4e02, 0x4d57, 0x4e1e, 0x4d6f, 0x4e9b, 0x4cf6, 0x4db4, 0x4df2, 0x4e0a, 0x4e79, 0x4db6, 0x4d5e, 0x4d87, 0x4d94, 0x4d98, 0x4dd8, 0x4d9f, 0x4d9b, 0x4e07, 0x4db5, 0x4e90, 0x4d8f, 0x4e04, 0x4d37, 0x4df3, 0x4dbb, 0x4e0b, 0x4e46, 0x4e72, 0x4e38, 0x4d88, 0x4de0, 0x4dd0, 0x4e34, 0x4e1c, 0x4ddc, 0x4de9, 0x4df7, 0x4dc5, 0x4e26, 0x4dcb, 0x4dc6, 0x4e10, 0x4db4, 0x4dda, 0x4e2c, 0x4d42, 0x4dda, 0x4e34, 0x4df9, 0x4df6, 0x4e4c, 0x4e60, 0x4dce, 0x4da1, +0x4dfb, 0x4ddc, 0x4dfc, 0x4df6, 0x4e60, 0x4e79, 0x4ee5, 0x4f0d, 0x4e50, 0x4f64, 0x4e51, 0x4e14, 0x4f68, 0x4e42, 0x4e0e, 0x4dea, 0x4e93, 0x4e28, 0x4dd7, 0x4e3a, 0x4e8b, 0x4d3a, 0x4e6a, 0x4dd7, 0x4e04, 0x4e77, 0x4e54, 0x4de5, 0x4e6e, 0x4ead, 0x4e4d, 0x4ed8, 0x4e36, 0x4e13, 0x4ef5, 0x4e57, 0x4e79, 0x4df7, 0x4dca, 0x4dd7, 0x4dc8, 0x4e46, 0x4df8, 0x4ea0, 0x4e57, 0x4eab, 0x4dbd, 0x4de8, 0x4ebc, 0x4ddd, 0x4f0b, 0x4e75, 0x4d8e, 0x4e2c, 0x4d68, 0x4e38, 0x4e5d, 0x4de2, 0x4e27, 0x4e44, 0x4e80, 0x4f24, 0x4db1, 0x4e59, 0x4dcb, 0x4df5, 0x4e8c, 0x4e7c, 0x4ec9, 0x4eca, 0x4e37, 0x4e6b, 0x4e74, 0x4e1e, 0x4ebb, 0x4e4e, 0x4e39, 0x4e60, 0x4e2e, 0x4e6a, 0x4ebd, 0x4ddd, 0x4dd9, 0x4e88, 0x4db2, 0x4e21, 0x4de8, 0x4daf, 0x4e9e, 0x4e7e, 0x4e1d, 0x4e78, 0x4e9e, 0x4e69, 0x4e48, 0x4df0, +0x4e18, 0x4e15, 0x4e0d, 0x4d9d, 0x4de2, 0x4db6, 0x4e03, 0x4e90, 0x4db2, 0x4f64, 0x4e3c, 0x4e44, 0x4f07, 0x4e61, 0x4e19, 0x4e2a, 0x4e27, 0x4dea, 0x4dda, 0x4e0d, 0x4e2a, 0x4d6f, 0x4df2, 0x4dae, 0x4e27, 0x4e12, 0x4e69, 0x4d56, 0x4e61, 0x4ec9, 0x4e75, 0x4dfb, 0x4df1, 0x4e4b, 0x4e66, 0x4e00, 0x4df6, 0x4dd5, 0x4d9c, 0x4dd9, 0x4dc1, 0x4e0f, 0x4dff, 0x4e66, 0x4e12, 0x4e5e, 0x4dc5, 0x4e06, 0x4ea9, 0x4d9a, 0x4edd, 0x4d9c, 0x4d79, 0x4dfa, 0x4dec, 0x4de7, 0x4e23, 0x4dde, 0x4d74, 0x4e25, 0x4e5e, 0x4ed2, 0x4dbe, 0x4eb2, 0x4d68, 0x4df8, 0x4e4e, 0x4e5f, 0x4e72, 0x4eae, 0x4e68, 0x4d79, 0x4e1b, 0x4df4, 0x4e5c, 0x4e0b, 0x4e38, 0x4e14, 0x4e30, 0x4e1e, 0x4e6e, 0x4da5, 0x4e15, 0x4e83, 0x4d85, 0x4e05, 0x4dc2, 0x4d58, 0x4dfe, 0x4e6a, 0x4dbd, 0x4df2, 0x4e78, 0x4e34, 0x4e58, 0x4de8, +0x4ed2, 0x4e61, 0x4e8f, 0x4ebf, 0x4ef5, 0x4e4a, 0x4ed0, 0x4f75, 0x4dcc, 0x500b, 0x4e3a, 0x4ed7, 0x4f6a, 0x4e6b, 0x4e3d, 0x4e69, 0x4ee1, 0x4ef6, 0x4de0, 0x4e8a, 0x4ea9, 0x4dd9, 0x4e98, 0x4e63, 0x4e1a, 0x4eb5, 0x4f27, 0x4dfb, 0x4eec, 0x4f05, 0x4ee4, 0x4ec3, 0x4ede, 0x4ed6, 0x4eee, 0x4e11, 0x4e56, 0x4dc8, 0x4e3e, 0x4e6d, 0x4ebb, 0x4e82, 0x4e5e, 0x4f27, 0x4ec1, 0x4f29, 0x4dc5, 0x4e07, 0x4f4b, 0x4e3a, 0x4f06, 0x4e9b, 0x4e12, 0x4e68, 0x4e1b, 0x4e6c, 0x4ec0, 0x4e53, 0x4dd4, 0x4e71, 0x4ea6, 0x4f59, 0x4d84, 0x4ed9, 0x4dd2, 0x4e56, 0x4ecf, 0x4e41, 0x4e5b, 0x4f78, 0x4eaa, 0x4ee4, 0x4ec2, 0x4e0f, 0x4ea8, 0x4e99, 0x4e0f, 0x4ed0, 0x4e36, 0x4e7e, 0x4ea4, 0x4e09, 0x4ea2, 0x4ed1, 0x4e45, 0x4e2d, 0x4e7f, 0x4dfe, 0x4ea7, 0x4f08, 0x4e5b, 0x4f1e, 0x4f1b, 0x4e8d, 0x4e63, 0x4e1f, +0x4d50, 0x4d58, 0x4dc6, 0x4d63, 0x4d51, 0x4cf4, 0x4dea, 0x4e93, 0x4d63, 0x4e41, 0x4d61, 0x4dd5, 0x4e3a, 0x4d60, 0x4dd1, 0x4d9f, 0x4e21, 0x4d1d, 0x4d52, 0x4d9e, 0x4df7, 0x4d53, 0x4d8c, 0x4d57, 0x4dad, 0x4d52, 0x4ddb, 0x4ccb, 0x4e0b, 0x4e33, 0x4e0d, 0x4e17, 0x4d8e, 0x4d64, 0x4e15, 0x4d7d, 0x4db1, 0x4d3c, 0x4d35, 0x4d81, 0x4d5b, 0x4ddf, 0x4d29, 0x4e15, 0x4d2c, 0x4dbe, 0x4ca5, 0x4d96, 0x4dd8, 0x4d8b, 0x4deb, 0x4d1f, 0x4d1e, 0x4d79, 0x4ce2, 0x4d9c, 0x4de9, 0x4d13, 0x4d46, 0x4d99, 0x4ddf, 0x4e32, 0x4d14, 0x4dae, 0x4d49, 0x4d7d, 0x4dd3, 0x4dc0, 0x4e07, 0x4e17, 0x4de2, 0x4d3c, 0x4dcc, 0x4dd0, 0x4dff, 0x4d24, 0x4d49, 0x4dc4, 0x4d5e, 0x4d94, 0x4e1d, 0x4d76, 0x4d29, 0x4dce, 0x4d50, 0x4d84, 0x4d8a, 0x4d39, 0x4dcc, 0x4dd3, 0x4d6b, 0x4de9, 0x4e08, 0x4d81, 0x4d94, 0x4d8a, +0x4d9f, 0x4e04, 0x4e12, 0x4d91, 0x4df5, 0x4d8b, 0x4dbb, 0x4ea8, 0x4da5, 0x4edd, 0x4da2, 0x4da1, 0x4e67, 0x4dae, 0x4db6, 0x4df3, 0x4e3c, 0x4d05, 0x4d7d, 0x4dcd, 0x4dbd, 0x4d86, 0x4da9, 0x4d85, 0x4dc9, 0x4daa, 0x4e3d, 0x4d34, 0x4dfa, 0x4e65, 0x4e16, 0x4ddf, 0x4dae, 0x4d7e, 0x4e6f, 0x4d42, 0x4d8c, 0x4d5c, 0x4d39, 0x4e04, 0x4d90, 0x4da6, 0x4d72, 0x4e42, 0x4e03, 0x4e15, 0x4d9b, 0x4dc6, 0x4e18, 0x4d68, 0x4e3e, 0x4da7, 0x4cfb, 0x4db9, 0x4db4, 0x4d47, 0x4dac, 0x4d0d, 0x4d91, 0x4de7, 0x4dcc, 0x4ece, 0x4d39, 0x4ddb, 0x4d3f, 0x4d17, 0x4e3d, 0x4e87, 0x4da9, 0x4e9d, 0x4df6, 0x4dba, 0x4de3, 0x4d73, 0x4ddf, 0x4d6c, 0x4df5, 0x4dc4, 0x4d89, 0x4dac, 0x4e55, 0x4d8d, 0x4d29, 0x4e7c, 0x4d3e, 0x4dc3, 0x4dc6, 0x4d16, 0x4db1, 0x4db6, 0x4d2e, 0x4e10, 0x4e8f, 0x4e53, 0x4def, 0x4d93, +0x4d7c, 0x4dc3, 0x4e09, 0x4e1d, 0x4e57, 0x4dfd, 0x4ea6, 0x4f29, 0x4e11, 0x4f37, 0x4e26, 0x4e3f, 0x4f1f, 0x4e26, 0x4e37, 0x4e0b, 0x4ea0, 0x4e58, 0x4d9f, 0x4df1, 0x4e40, 0x4d80, 0x4e42, 0x4da5, 0x4e6b, 0x4e59, 0x4e1a, 0x4dc2, 0x4e18, 0x4eae, 0x4eb2, 0x4e4e, 0x4e46, 0x4e70, 0x4e78, 0x4de5, 0x4dfb, 0x4d66, 0x4ddb, 0x4dcf, 0x4de8, 0x4e80, 0x4e25, 0x4efd, 0x4e0a, 0x4e74, 0x4d9c, 0x4e3a, 0x4ec3, 0x4e2a, 0x4ea9, 0x4db9, 0x4d98, 0x4e32, 0x4dfd, 0x4e29, 0x4e8b, 0x4da4, 0x4dda, 0x4e59, 0x4e6d, 0x4f14, 0x4da8, 0x4e73, 0x4e03, 0x4e0e, 0x4e3f, 0x4e4f, 0x4e67, 0x4ece, 0x4e6d, 0x4db3, 0x4e71, 0x4e03, 0x4e4d, 0x4e1d, 0x4e9e, 0x4deb, 0x4dd6, 0x4de6, 0x4ebf, 0x4da2, 0x4e25, 0x4eb3, 0x4dbd, 0x4e42, 0x4e33, 0x4dfa, 0x4e18, 0x4e34, 0x4db7, 0x4e62, 0x4e91, 0x4e55, 0x4e39, 0x4e0e, +0x4e1c, 0x4e0e, 0x4ea5, 0x4dfe, 0x4e42, 0x4e24, 0x4ee6, 0x4f64, 0x4e07, 0x4f49, 0x4e23, 0x4e79, 0x4f00, 0x4e39, 0x4e49, 0x4e64, 0x4efa, 0x4e6b, 0x4dcb, 0x4ebb, 0x4dec, 0x4e02, 0x4e6b, 0x4dad, 0x4e53, 0x4e8d, 0x4e1b, 0x4dbe, 0x4e5f, 0x4f4a, 0x4ea3, 0x4e1b, 0x4e26, 0x4e29, 0x4e9b, 0x4e22, 0x4e06, 0x4e0a, 0x4e12, 0x4dd4, 0x4e83, 0x4e6b, 0x4e03, 0x4ebb, 0x4e0e, 0x4eef, 0x4db8, 0x4de8, 0x4ef8, 0x4dfa, 0x4e70, 0x4dfe, 0x4db4, 0x4e48, 0x4db3, 0x4dd6, 0x4e90, 0x4e0f, 0x4e43, 0x4eb7, 0x4eb4, 0x4f39, 0x4db4, 0x4eea, 0x4dc9, 0x4e4f, 0x4e79, 0x4e82, 0x4e4d, 0x4ebe, 0x4ea0, 0x4e1d, 0x4e88, 0x4e2a, 0x4ea2, 0x4dff, 0x4e4a, 0x4e1e, 0x4e56, 0x4e42, 0x4eee, 0x4e13, 0x4e05, 0x4e8d, 0x4d84, 0x4e5f, 0x4e72, 0x4da9, 0x4e65, 0x4e82, 0x4dd0, 0x4eec, 0x4ebf, 0x4e6d, 0x4e05, 0x4e34, +0x4df7, 0x4df8, 0x4e19, 0x4dc2, 0x4e08, 0x4d96, 0x4e15, 0x4e8b, 0x4dd6, 0x4ee6, 0x4e2a, 0x4e81, 0x4eb0, 0x4dbc, 0x4db3, 0x4dc1, 0x4e4a, 0x4e07, 0x4de6, 0x4e38, 0x4e01, 0x4d73, 0x4de0, 0x4d6b, 0x4e18, 0x4e38, 0x4e4c, 0x4d81, 0x4e65, 0x4efa, 0x4e48, 0x4e20, 0x4e19, 0x4dc1, 0x4e7b, 0x4dd9, 0x4e18, 0x4dd3, 0x4d4c, 0x4ddd, 0x4dc0, 0x4e14, 0x4d8a, 0x4e9f, 0x4dbf, 0x4e45, 0x4d36, 0x4e03, 0x4e7c, 0x4d8b, 0x4e7a, 0x4dc3, 0x4d4d, 0x4dff, 0x4d84, 0x4ddd, 0x4e76, 0x4d7d, 0x4d74, 0x4e02, 0x4e10, 0x4e5f, 0x4d8c, 0x4e26, 0x4d8b, 0x4dd5, 0x4e33, 0x4e0a, 0x4df0, 0x4ee1, 0x4e21, 0x4d9d, 0x4e45, 0x4e22, 0x4e2a, 0x4de6, 0x4e22, 0x4e4c, 0x4de5, 0x4e0e, 0x4e9d, 0x4d29, 0x4d9c, 0x4e5e, 0x4d53, 0x4e15, 0x4e02, 0x4d64, 0x4dd4, 0x4e46, 0x4d64, 0x4e19, 0x4e5f, 0x4e3a, 0x4d78, 0x4db6, +0x4dec, 0x4ddb, 0x4e68, 0x4d9e, 0x4e3c, 0x4e3e, 0x4e41, 0x4f6c, 0x4e24, 0x4f2a, 0x4e2e, 0x4e7c, 0x4f37, 0x4dde, 0x4dd5, 0x4e75, 0x4eb7, 0x4dc9, 0x4dcb, 0x4e36, 0x4e72, 0x4df6, 0x4e52, 0x4db5, 0x4dfa, 0x4e34, 0x4ebf, 0x4dcd, 0x4e14, 0x4edf, 0x4e6b, 0x4e8b, 0x4e41, 0x4e5f, 0x4e82, 0x4dd6, 0x4e0a, 0x4db8, 0x4dc6, 0x4e34, 0x4e16, 0x4eb4, 0x4e02, 0x4ed2, 0x4e2d, 0x4ef5, 0x4dc5, 0x4e36, 0x4eb4, 0x4df0, 0x4f4d, 0x4de8, 0x4dac, 0x4e0a, 0x4d9c, 0x4e45, 0x4e79, 0x4dd1, 0x4db0, 0x4ec1, 0x4dfb, 0x4ee0, 0x4d70, 0x4e88, 0x4df2, 0x4df6, 0x4e3f, 0x4e33, 0x4ef4, 0x4f0b, 0x4e75, 0x4e45, 0x4e05, 0x4d91, 0x4e72, 0x4e1b, 0x4e66, 0x4e32, 0x4dd1, 0x4e14, 0x4e63, 0x4e10, 0x4df1, 0x4ebf, 0x4d89, 0x4e6a, 0x4e7b, 0x4d91, 0x4e3f, 0x4e61, 0x4e31, 0x4e7f, 0x4ddd, 0x4e16, 0x4e2b, 0x4de8, +0x4d4a, 0x4d3f, 0x4d6a, 0x4d6a, 0x4e2b, 0x4d74, 0x4de3, 0x4eb1, 0x4dd9, 0x4e75, 0x4da3, 0x4dde, 0x4e51, 0x4ded, 0x4e0a, 0x4d83, 0x4e72, 0x4dd7, 0x4d43, 0x4d74, 0x4e0c, 0x4da8, 0x4df0, 0x4d54, 0x4df0, 0x4e0a, 0x4e25, 0x4d74, 0x4e0f, 0x4e13, 0x4e18, 0x4e0e, 0x4e0c, 0x4dfa, 0x4e2f, 0x4d82, 0x4dbe, 0x4d6a, 0x4d42, 0x4d8b, 0x4ce1, 0x4dc9, 0x4d63, 0x4e1f, 0x4db1, 0x4e11, 0x4d22, 0x4df3, 0x4e58, 0x4d7d, 0x4ec2, 0x4d84, 0x4d46, 0x4d6e, 0x4d20, 0x4d68, 0x4dfe, 0x4d39, 0x4d23, 0x4d87, 0x4d7e, 0x4ec7, 0x4d2a, 0x4dbf, 0x4d44, 0x4d8f, 0x4e0a, 0x4dff, 0x4e30, 0x4e2e, 0x4d94, 0x4d89, 0x4e04, 0x4d72, 0x4dee, 0x4d41, 0x4dd4, 0x4d58, 0x4dba, 0x4d8f, 0x4e19, 0x4dac, 0x4db5, 0x4dea, 0x4ce2, 0x4e1a, 0x4d87, 0x4d54, 0x4d86, 0x4e3e, 0x4e04, 0x4e41, 0x4dd4, 0x4df5, 0x4e28, 0x4d92, +0x4d5e, 0x4dba, 0x4df8, 0x4d94, 0x4df0, 0x4d7d, 0x4dfc, 0x4e83, 0x4df1, 0x4e98, 0x4dd4, 0x4dc6, 0x4e84, 0x4daa, 0x4d97, 0x4d98, 0x4dfd, 0x4d9e, 0x4d4a, 0x4dd7, 0x4d7e, 0x4da5, 0x4dbf, 0x4dd1, 0x4de8, 0x4db7, 0x4dfd, 0x4d45, 0x4dba, 0x4e6c, 0x4df2, 0x4dfc, 0x4dc2, 0x4dad, 0x4e19, 0x4d4d, 0x4df1, 0x4dab, 0x4d76, 0x4da8, 0x4d60, 0x4e55, 0x4dab, 0x4e58, 0x4d6a, 0x4e07, 0x4d48, 0x4d82, 0x4e78, 0x4d73, 0x4e49, 0x4dbe, 0x4d0c, 0x4d80, 0x4dbb, 0x4d67, 0x4e27, 0x4d34, 0x4d72, 0x4de1, 0x4e1d, 0x4e81, 0x4cf1, 0x4e18, 0x4d84, 0x4d8d, 0x4e1b, 0x4e4d, 0x4dd0, 0x4e69, 0x4dc1, 0x4da0, 0x4e4a, 0x4d7b, 0x4dc0, 0x4d4f, 0x4de4, 0x4e1b, 0x4da1, 0x4e14, 0x4e2c, 0x4d53, 0x4d67, 0x4ecd, 0x4d98, 0x4dc2, 0x4dff, 0x4d37, 0x4deb, 0x4dcb, 0x4cff, 0x4de8, 0x4e0a, 0x4d80, 0x4dba, 0x4d6a, +0x4d78, 0x4d5c, 0x4dbd, 0x4d18, 0x4d9d, 0x4d98, 0x4d95, 0x4e53, 0x4d96, 0x4e9f, 0x4db1, 0x4dea, 0x4ea8, 0x4d7f, 0x4d8b, 0x4d7a, 0x4de6, 0x4d5d, 0x4d91, 0x4da5, 0x4da8, 0x4d38, 0x4ddd, 0x4d87, 0x4d57, 0x4dfd, 0x4e38, 0x4d7b, 0x4d9a, 0x4e34, 0x4e26, 0x4da2, 0x4dc3, 0x4d63, 0x4de6, 0x4d54, 0x4dec, 0x4cfb, 0x4d33, 0x4d01, 0x4d50, 0x4da9, 0x4da2, 0x4e13, 0x4dbf, 0x4dff, 0x4d20, 0x4de2, 0x4e2b, 0x4d73, 0x4e87, 0x4d96, 0x4ce3, 0x4d66, 0x4d63, 0x4d8a, 0x4e2e, 0x4d32, 0x4d64, 0x4da9, 0x4da7, 0x4e99, 0x4cff, 0x4e26, 0x4d53, 0x4d79, 0x4df7, 0x4daf, 0x4e47, 0x4e48, 0x4d6a, 0x4dc0, 0x4ddd, 0x4d4d, 0x4dfb, 0x4d9b, 0x4db0, 0x4d67, 0x4ddb, 0x4dfc, 0x4d88, 0x4d4f, 0x4cfd, 0x4e65, 0x4d56, 0x4dca, 0x4dcb, 0x4cdd, 0x4d73, 0x4db6, 0x4d42, 0x4dae, 0x4e26, 0x4d76, 0x4d67, 0x4d82, +0x4dbf, 0x4df6, 0x4e63, 0x4dbc, 0x4edf, 0x4e0f, 0x4dfc, 0x4ecc, 0x4e07, 0x4f24, 0x4e00, 0x4e3b, 0x4f2d, 0x4e76, 0x4e0c, 0x4d9b, 0x4ecf, 0x4e60, 0x4df9, 0x4e4e, 0x4e0e, 0x4dd0, 0x4e7d, 0x4dfb, 0x4e65, 0x4eab, 0x4e78, 0x4e0c, 0x4e44, 0x4e4c, 0x4e70, 0x4e9f, 0x4e78, 0x4e01, 0x4e8d, 0x4e02, 0x4e1e, 0x4dcd, 0x4dce, 0x4dac, 0x4e25, 0x4e11, 0x4df9, 0x4ee4, 0x4e60, 0x4eb6, 0x4dc2, 0x4e32, 0x4f0f, 0x4dad, 0x4f16, 0x4dac, 0x4d37, 0x4e75, 0x4daf, 0x4df5, 0x4e91, 0x4db6, 0x4dc3, 0x4e51, 0x4e1a, 0x4f04, 0x4dd3, 0x4e22, 0x4dcd, 0x4dd4, 0x4e5a, 0x4e38, 0x4e9f, 0x4e7a, 0x4ea4, 0x4e59, 0x4e63, 0x4e09, 0x4e3f, 0x4dff, 0x4e0b, 0x4e1b, 0x4e1b, 0x4e7a, 0x4e5f, 0x4d96, 0x4dc5, 0x4e7d, 0x4d96, 0x4e22, 0x4e39, 0x4d5a, 0x4e54, 0x4eb5, 0x4e10, 0x4e66, 0x4e83, 0x4e2c, 0x4e34, 0x4d5a, +0x4d71, 0x4dd1, 0x4e56, 0x4d84, 0x4dcc, 0x4d86, 0x4e2f, 0x4e5a, 0x4dc0, 0x4ea7, 0x4e1e, 0x4e25, 0x4ea5, 0x4d59, 0x4d96, 0x4e00, 0x4e1c, 0x4d7f, 0x4d79, 0x4e33, 0x4d81, 0x4d99, 0x4d92, 0x4d4f, 0x4d9b, 0x4dec, 0x4e45, 0x4d44, 0x4dcf, 0x4e43, 0x4e26, 0x4dfe, 0x4dd8, 0x4e01, 0x4e6b, 0x4dd2, 0x4ddd, 0x4db8, 0x4d2e, 0x4dec, 0x4de0, 0x4e0f, 0x4da8, 0x4ed9, 0x4da5, 0x4e7f, 0x4cfb, 0x4d7b, 0x4e07, 0x4da2, 0x4e9f, 0x4d95, 0x4d3b, 0x4db7, 0x4da1, 0x4dc7, 0x4dfb, 0x4d73, 0x4d74, 0x4dfb, 0x4df9, 0x4ed7, 0x4d61, 0x4de7, 0x4d74, 0x4db0, 0x4da0, 0x4e05, 0x4e52, 0x4e67, 0x4e3b, 0x4d86, 0x4dca, 0x4ded, 0x4d7e, 0x4d87, 0x4dee, 0x4dec, 0x4dd8, 0x4df7, 0x4e19, 0x4d39, 0x4da2, 0x4e7b, 0x4d5f, 0x4de3, 0x4de7, 0x4d6e, 0x4dad, 0x4e39, 0x4d1b, 0x4e13, 0x4dfe, 0x4de6, 0x4dad, 0x4dd7, +0x4e08, 0x4de7, 0x4e3b, 0x4e57, 0x4ec6, 0x4e89, 0x4eae, 0x4f6b, 0x4e5a, 0x4fbb, 0x4e68, 0x4e30, 0x4f54, 0x4e46, 0x4e31, 0x4e01, 0x4f2d, 0x4e6e, 0x4e0a, 0x4e3e, 0x4ead, 0x4dd6, 0x4e96, 0x4e12, 0x4e62, 0x4e8d, 0x4ec0, 0x4e03, 0x4e58, 0x4eec, 0x4ea5, 0x4eac, 0x4e98, 0x4e68, 0x4efa, 0x4e20, 0x4e2d, 0x4e0a, 0x4e29, 0x4e36, 0x4e62, 0x4e6e, 0x4dc5, 0x4ee7, 0x4e9f, 0x4ef0, 0x4e06, 0x4e0e, 0x4f08, 0x4df4, 0x4f16, 0x4dc9, 0x4d49, 0x4e98, 0x4dcd, 0x4e73, 0x4ecb, 0x4e7e, 0x4e22, 0x4e87, 0x4e90, 0x4f22, 0x4dd9, 0x4ed8, 0x4e21, 0x4e27, 0x4e54, 0x4e73, 0x4e8d, 0x4f3b, 0x4e98, 0x4dfe, 0x4ec4, 0x4e22, 0x4e8b, 0x4e79, 0x4e10, 0x4e68, 0x4e06, 0x4e7a, 0x4ef9, 0x4e1c, 0x4e11, 0x4e9c, 0x4dc7, 0x4e2a, 0x4dec, 0x4e0c, 0x4e55, 0x4e89, 0x4e5f, 0x4f06, 0x4eaf, 0x4e44, 0x4ea0, 0x4e10, +0x4dbc, 0x4dc0, 0x4e13, 0x4da8, 0x4e6c, 0x4e0f, 0x4e94, 0x4ee8, 0x4df0, 0x4f1d, 0x4e41, 0x4e33, 0x4f18, 0x4dbd, 0x4df9, 0x4e19, 0x4e6e, 0x4d98, 0x4d78, 0x4ddf, 0x4e5e, 0x4dad, 0x4dbf, 0x4d88, 0x4e07, 0x4e26, 0x4e1c, 0x4dd3, 0x4e6d, 0x4ef3, 0x4e99, 0x4e3d, 0x4e3c, 0x4e6b, 0x4e6f, 0x4e0e, 0x4df7, 0x4dab, 0x4dd2, 0x4e20, 0x4e18, 0x4dfe, 0x4da4, 0x4e68, 0x4e1e, 0x4e3d, 0x4d7f, 0x4df2, 0x4eb9, 0x4dda, 0x4ec6, 0x4ddb, 0x4d6c, 0x4e1c, 0x4d9e, 0x4e23, 0x4e36, 0x4d74, 0x4dd5, 0x4e31, 0x4e36, 0x4f13, 0x4d62, 0x4e07, 0x4d70, 0x4df5, 0x4e70, 0x4e46, 0x4e5d, 0x4eb4, 0x4e6d, 0x4de1, 0x4e64, 0x4e17, 0x4e36, 0x4e2f, 0x4e29, 0x4e32, 0x4dde, 0x4dc9, 0x4e74, 0x4de5, 0x4de6, 0x4e52, 0x4da3, 0x4e0e, 0x4e4b, 0x4daf, 0x4dec, 0x4ebe, 0x4dc5, 0x4e10, 0x4e83, 0x4e8d, 0x4e13, 0x4e0d, +0x4de6, 0x4e03, 0x4e4f, 0x4d8b, 0x4e9b, 0x4e0f, 0x4ea4, 0x4ed6, 0x4dca, 0x4f1d, 0x4e28, 0x4e48, 0x4eff, 0x4e00, 0x4e96, 0x4e11, 0x4eb8, 0x4dae, 0x4df2, 0x4e6d, 0x4e65, 0x4e1a, 0x4e33, 0x4e04, 0x4e00, 0x4e74, 0x4eca, 0x4df9, 0x4e32, 0x4e8c, 0x4eac, 0x4e81, 0x4e27, 0x4e2a, 0x4e53, 0x4de1, 0x4df1, 0x4d9c, 0x4dd9, 0x4e37, 0x4e26, 0x4e2f, 0x4d63, 0x4edb, 0x4e62, 0x4ebd, 0x4dd5, 0x4e05, 0x4eb9, 0x4dd1, 0x4f1c, 0x4dee, 0x4d5f, 0x4e2c, 0x4e1e, 0x4e07, 0x4e03, 0x4ddf, 0x4dc5, 0x4dd1, 0x4e05, 0x4edb, 0x4dca, 0x4e5a, 0x4d80, 0x4dd5, 0x4e75, 0x4e6a, 0x4e69, 0x4eb3, 0x4e49, 0x4e88, 0x4ea2, 0x4e28, 0x4ea6, 0x4e21, 0x4e0a, 0x4e2f, 0x4e39, 0x4e43, 0x4e3b, 0x4e07, 0x4d9a, 0x4e97, 0x4d98, 0x4e81, 0x4dd9, 0x4d1d, 0x4e15, 0x4e7c, 0x4e15, 0x4e48, 0x4ec0, 0x4e99, 0x4e31, 0x4e50, +0x4d4e, 0x4dcf, 0x4e16, 0x4e0f, 0x4e3d, 0x4d5b, 0x4dd0, 0x4ed8, 0x4dfa, 0x4f4d, 0x4dbd, 0x4e5d, 0x4e9b, 0x4d9b, 0x4e37, 0x4dcd, 0x4e8e, 0x4e45, 0x4d87, 0x4dfa, 0x4e43, 0x4dd6, 0x4e1c, 0x4d8a, 0x4e32, 0x4ddb, 0x4e30, 0x4d75, 0x4db6, 0x4eca, 0x4dcd, 0x4e08, 0x4e13, 0x4e61, 0x4e35, 0x4dd9, 0x4dbc, 0x4d9e, 0x4d85, 0x4dfe, 0x4e2a, 0x4e31, 0x4d76, 0x4e50, 0x4dcc, 0x4e8e, 0x4d2d, 0x4de9, 0x4eaf, 0x4d8a, 0x4ebd, 0x4db0, 0x4d28, 0x4def, 0x4da2, 0x4db8, 0x4e71, 0x4dc0, 0x4d07, 0x4dd9, 0x4e0d, 0x4eec, 0x4dd4, 0x4dff, 0x4d97, 0x4ded, 0x4e33, 0x4e55, 0x4e1f, 0x4e88, 0x4e25, 0x4da1, 0x4e0d, 0x4de9, 0x4e00, 0x4dc7, 0x4de5, 0x4dc9, 0x4e36, 0x4dd4, 0x4eae, 0x4df1, 0x4e29, 0x4ecc, 0x4d81, 0x4e1d, 0x4e1a, 0x4d93, 0x4dd0, 0x4e67, 0x4ddf, 0x4e49, 0x4e29, 0x4dfc, 0x4e4e, 0x4e15, +0x4d53, 0x4d54, 0x4dcb, 0x4d20, 0x4d9f, 0x4d7b, 0x4db1, 0x4e61, 0x4d86, 0x4e2b, 0x4d85, 0x4dca, 0x4e88, 0x4d8f, 0x4d7c, 0x4dbd, 0x4dd1, 0x4d53, 0x4cf8, 0x4e33, 0x4daa, 0x4d52, 0x4d77, 0x4d28, 0x4db3, 0x4db7, 0x4da2, 0x4d5f, 0x4d8b, 0x4e40, 0x4e0a, 0x4d4e, 0x4d44, 0x4d89, 0x4dd4, 0x4ced, 0x4d7e, 0x4d23, 0x4d3b, 0x4d33, 0x4d97, 0x4dbe, 0x4d4e, 0x4e18, 0x4d25, 0x4e37, 0x4cec, 0x4d58, 0x4dd8, 0x4d79, 0x4e3c, 0x4d8d, 0x4d0e, 0x4d56, 0x4ce2, 0x4d47, 0x4dec, 0x4d34, 0x4d24, 0x4df8, 0x4d54, 0x4dc0, 0x4ce1, 0x4db2, 0x4d4d, 0x4d59, 0x4d7b, 0x4db2, 0x4db9, 0x4e11, 0x4d44, 0x4daa, 0x4dc6, 0x4d61, 0x4db8, 0x4d7d, 0x4d94, 0x4dc4, 0x4d64, 0x4da8, 0x4db3, 0x4d5b, 0x4d48, 0x4e4c, 0x4d38, 0x4cf7, 0x4dda, 0x4ce7, 0x4de8, 0x4de0, 0x4d34, 0x4dc4, 0x4e01, 0x4db9, 0x4d72, 0x4d31, +0x4d50, 0x4d8a, 0x4e4e, 0x4d70, 0x4e36, 0x4db3, 0x4e2c, 0x4ec3, 0x4de3, 0x4f03, 0x4e28, 0x4e59, 0x4ec1, 0x4dee, 0x4db6, 0x4dfa, 0x4e6c, 0x4de5, 0x4d40, 0x4dc9, 0x4e59, 0x4d89, 0x4dc7, 0x4da5, 0x4d83, 0x4e48, 0x4e69, 0x4df2, 0x4e0e, 0x4ebb, 0x4e4c, 0x4e39, 0x4e07, 0x4e1c, 0x4e5c, 0x4db9, 0x4e05, 0x4d7f, 0x4d54, 0x4de6, 0x4dca, 0x4df7, 0x4d7c, 0x4e50, 0x4e43, 0x4e69, 0x4da0, 0x4e1d, 0x4e57, 0x4db8, 0x4eb1, 0x4e23, 0x4d6d, 0x4e1c, 0x4d74, 0x4e16, 0x4e3b, 0x4dcc, 0x4d94, 0x4e5b, 0x4e25, 0x4ec5, 0x4d65, 0x4e1c, 0x4d5b, 0x4ded, 0x4e12, 0x4e06, 0x4e1a, 0x4eb6, 0x4de4, 0x4dbf, 0x4e1a, 0x4e3b, 0x4e57, 0x4dff, 0x4dd6, 0x4e6a, 0x4dc5, 0x4e4f, 0x4e81, 0x4d7e, 0x4dc1, 0x4e84, 0x4dd8, 0x4dff, 0x4e2f, 0x4dc2, 0x4db1, 0x4e70, 0x4de1, 0x4de9, 0x4e31, 0x4e11, 0x4e46, 0x4dbf, +0x4daa, 0x4da3, 0x4dcd, 0x4dce, 0x4d97, 0x4d78, 0x4e0a, 0x4eeb, 0x4ddb, 0x4f2f, 0x4dbe, 0x4e55, 0x4eca, 0x4e37, 0x4deb, 0x4d90, 0x4e6f, 0x4dbd, 0x4d88, 0x4e24, 0x4d99, 0x4d4a, 0x4dd8, 0x4ceb, 0x4d9c, 0x4e53, 0x4e45, 0x4d8f, 0x4dc8, 0x4e40, 0x4e47, 0x4dff, 0x4e47, 0x4dba, 0x4e4b, 0x4d96, 0x4dc2, 0x4db6, 0x4d80, 0x4dbc, 0x4d66, 0x4dec, 0x4d6b, 0x4e8e, 0x4e05, 0x4e1c, 0x4d0c, 0x4da3, 0x4e61, 0x4d3a, 0x4e7c, 0x4d5f, 0x4d0d, 0x4db2, 0x4db0, 0x4dec, 0x4dbd, 0x4d72, 0x4d40, 0x4db3, 0x4e06, 0x4e52, 0x4d18, 0x4e65, 0x4d80, 0x4d43, 0x4e0b, 0x4dc6, 0x4e60, 0x4e71, 0x4e0e, 0x4d92, 0x4e0a, 0x4d7c, 0x4dbb, 0x4d6b, 0x4df5, 0x4d64, 0x4d99, 0x4d9a, 0x4de1, 0x4d52, 0x4d93, 0x4de8, 0x4d70, 0x4e12, 0x4db2, 0x4d20, 0x4de8, 0x4df9, 0x4dcb, 0x4e62, 0x4e5e, 0x4dd3, 0x4d3f, 0x4d5a, +0x4d97, 0x4db8, 0x4e07, 0x4d81, 0x4e2e, 0x4db2, 0x4e2a, 0x4f25, 0x4ddf, 0x4f35, 0x4d9b, 0x4e84, 0x4ecf, 0x4df4, 0x4e15, 0x4e10, 0x4e45, 0x4e11, 0x4d9c, 0x4dda, 0x4e85, 0x4d3e, 0x4e4e, 0x4d9c, 0x4de0, 0x4e49, 0x4e53, 0x4d84, 0x4e03, 0x4eb8, 0x4e40, 0x4e82, 0x4e10, 0x4e2e, 0x4e7c, 0x4dd6, 0x4de8, 0x4d6f, 0x4db7, 0x4de3, 0x4e01, 0x4db7, 0x4da6, 0x4e61, 0x4e0a, 0x4e53, 0x4dc8, 0x4df9, 0x4ed6, 0x4d8b, 0x4ef9, 0x4da4, 0x4dd6, 0x4dc9, 0x4db2, 0x4dee, 0x4e8c, 0x4d86, 0x4d9c, 0x4e36, 0x4e13, 0x4ebd, 0x4d11, 0x4e28, 0x4d81, 0x4e22, 0x4e2f, 0x4e4f, 0x4ed6, 0x4e82, 0x4e2f, 0x4e17, 0x4e48, 0x4d87, 0x4e49, 0x4e4e, 0x4e39, 0x4e45, 0x4ddc, 0x4df7, 0x4e29, 0x4df2, 0x4dc2, 0x4eef, 0x4d9b, 0x4df4, 0x4e4a, 0x4d73, 0x4e0f, 0x4e7e, 0x4de6, 0x4e4c, 0x4e43, 0x4e12, 0x4e38, 0x4de6, +0x4dca, 0x4e05, 0x4e41, 0x4da4, 0x4e08, 0x4dc1, 0x4dfa, 0x4ed4, 0x4d4c, 0x4ee9, 0x4dfb, 0x4dd2, 0x4e70, 0x4ddc, 0x4d8e, 0x4dc3, 0x4e7b, 0x4dec, 0x4d8f, 0x4e28, 0x4e1d, 0x4d79, 0x4dde, 0x4db1, 0x4df1, 0x4dd5, 0x4e31, 0x4d3a, 0x4ddd, 0x4e3b, 0x4e47, 0x4df8, 0x4dec, 0x4d7f, 0x4e3c, 0x4d7f, 0x4d7f, 0x4d62, 0x4d46, 0x4dc9, 0x4df7, 0x4de7, 0x4ddf, 0x4e5c, 0x4dc1, 0x4e44, 0x4d43, 0x4db3, 0x4e4d, 0x4dae, 0x4e60, 0x4dbf, 0x4d71, 0x4de0, 0x4dba, 0x4dc1, 0x4e2a, 0x4d6d, 0x4dab, 0x4df8, 0x4de5, 0x4e56, 0x4d64, 0x4dcc, 0x4e01, 0x4dce, 0x4e3a, 0x4e88, 0x4dff, 0x4e6b, 0x4e35, 0x4e05, 0x4de3, 0x4dc4, 0x4e69, 0x4dc4, 0x4de5, 0x4df8, 0x4da5, 0x4e0e, 0x4d96, 0x4dc7, 0x4d53, 0x4ec2, 0x4d82, 0x4ddf, 0x4dac, 0x4d33, 0x4d9b, 0x4e30, 0x4d97, 0x4e3b, 0x4e89, 0x4e5c, 0x4db9, 0x4d9d, +0x4e27, 0x4e5c, 0x4f2b, 0x4e51, 0x4ee2, 0x4e60, 0x4f10, 0x4f9b, 0x4e52, 0x4f9e, 0x4e9d, 0x4e87, 0x4f8a, 0x4e8b, 0x4e8b, 0x4e96, 0x4f19, 0x4f34, 0x4e0a, 0x4ece, 0x4eec, 0x4e27, 0x4ea4, 0x4e3e, 0x4eb1, 0x4e34, 0x4ed1, 0x4ea7, 0x4f40, 0x4f9a, 0x4f51, 0x4e8e, 0x4f25, 0x4ec4, 0x4f12, 0x4ea6, 0x4e7c, 0x4e17, 0x4de8, 0x4e73, 0x4ebf, 0x4e45, 0x4e3c, 0x4f00, 0x4e94, 0x4f3d, 0x4e02, 0x4ea7, 0x4f5b, 0x4eab, 0x4f40, 0x4e4d, 0x4e05, 0x4e79, 0x4e13, 0x4e81, 0x4f20, 0x4e9d, 0x4e6d, 0x4eda, 0x4ec8, 0x4f9e, 0x4e39, 0x4ebb, 0x4de4, 0x4e67, 0x4ed6, 0x4f43, 0x4eef, 0x4f8e, 0x4edd, 0x4e5d, 0x4ebe, 0x4f3b, 0x4f37, 0x4e7a, 0x4ec0, 0x4ecc, 0x4f01, 0x4ef6, 0x4f29, 0x4e9d, 0x4e7a, 0x4ed0, 0x4e93, 0x4ef1, 0x4eb9, 0x4e43, 0x4eca, 0x4f54, 0x4e4a, 0x4e98, 0x4f5d, 0x4f33, 0x4e9e, 0x4e9f, +0x4dd7, 0x4ebb, 0x4e87, 0x4e2d, 0x4ed6, 0x4ed8, 0x4e71, 0x4f2b, 0x4e32, 0x4f42, 0x4eb7, 0x4e64, 0x4f8f, 0x4e1a, 0x4e53, 0x4ec8, 0x4e44, 0x4e5b, 0x4e7e, 0x4e80, 0x4ec2, 0x4e18, 0x4e55, 0x4e2e, 0x4e9e, 0x4ec8, 0x4e5f, 0x4dfb, 0x4e68, 0x4f3b, 0x4e83, 0x4e36, 0x4ec6, 0x4e3e, 0x4ee6, 0x4e26, 0x4e82, 0x4e57, 0x4e3b, 0x4e3d, 0x4e2f, 0x4e84, 0x4e1f, 0x4f3a, 0x4e2c, 0x4ebc, 0x4e1e, 0x4e4b, 0x4f06, 0x4e2a, 0x4f35, 0x4e4a, 0x4dc1, 0x4e5e, 0x4e0d, 0x4e33, 0x4e6b, 0x4daa, 0x4ddc, 0x4e74, 0x4e61, 0x4f4e, 0x4e23, 0x4e9d, 0x4dc1, 0x4df8, 0x4e6c, 0x4ed2, 0x4ea7, 0x4f25, 0x4e7b, 0x4e3e, 0x4e69, 0x4e17, 0x4ed4, 0x4e04, 0x4e81, 0x4e74, 0x4e3a, 0x4edf, 0x4e87, 0x4e5a, 0x4e63, 0x4ea2, 0x4ddd, 0x4eaf, 0x4eac, 0x4db0, 0x4ea1, 0x4efd, 0x4e60, 0x4e88, 0x4df4, 0x4f25, 0x4e13, 0x4e34, +0x4e0d, 0x4dd9, 0x4e1e, 0x4dbd, 0x4e05, 0x4e05, 0x4e9b, 0x4ef7, 0x4e05, 0x4ee9, 0x4e79, 0x4e50, 0x4f3d, 0x4e4d, 0x4e45, 0x4ec1, 0x4eaa, 0x4e11, 0x4da2, 0x4e41, 0x4e50, 0x4df9, 0x4e0e, 0x4dff, 0x4e54, 0x4e44, 0x4e2b, 0x4e1e, 0x4e8f, 0x4ef0, 0x4e44, 0x4e5a, 0x4e65, 0x4e53, 0x4e7c, 0x4e31, 0x4e00, 0x4d7c, 0x4e09, 0x4e2d, 0x4e8c, 0x4e18, 0x4def, 0x4e73, 0x4e1e, 0x4eb6, 0x4d9e, 0x4e23, 0x4eaa, 0x4e62, 0x4ee7, 0x4e4f, 0x4d89, 0x4e3c, 0x4e0f, 0x4e80, 0x4e2e, 0x4e16, 0x4df6, 0x4e79, 0x4e9e, 0x4ef9, 0x4d5f, 0x4e39, 0x4d87, 0x4e04, 0x4eda, 0x4e99, 0x4e75, 0x4f32, 0x4e55, 0x4e47, 0x4e23, 0x4e5a, 0x4eb0, 0x4e39, 0x4e6d, 0x4e3b, 0x4e5c, 0x4e89, 0x4ec6, 0x4e16, 0x4e36, 0x4f0b, 0x4d76, 0x4e1a, 0x4e5b, 0x4dc4, 0x4dfb, 0x4e5b, 0x4e5f, 0x4e8c, 0x4e8b, 0x4e7d, 0x4e14, 0x4df3, +0x4db1, 0x4da2, 0x4e28, 0x4dc6, 0x4e3d, 0x4e08, 0x4df4, 0x4e7e, 0x4db8, 0x4ee4, 0x4e5c, 0x4df9, 0x4eee, 0x4db3, 0x4daf, 0x4e26, 0x4e20, 0x4dee, 0x4df8, 0x4e2e, 0x4e2a, 0x4d7e, 0x4e32, 0x4d94, 0x4e1b, 0x4e49, 0x4e84, 0x4dc4, 0x4dff, 0x4ead, 0x4e55, 0x4e4a, 0x4e04, 0x4e07, 0x4ebb, 0x4dac, 0x4daf, 0x4ded, 0x4d53, 0x4d9a, 0x4dd7, 0x4de6, 0x4d5b, 0x4e3d, 0x4dff, 0x4ea8, 0x4d9d, 0x4da4, 0x4e1e, 0x4d92, 0x4e7a, 0x4d3e, 0x4d57, 0x4db5, 0x4d77, 0x4d96, 0x4e1a, 0x4d7a, 0x4d74, 0x4de0, 0x4dba, 0x4eb6, 0x4d49, 0x4e27, 0x4d55, 0x4dca, 0x4e02, 0x4e83, 0x4e6b, 0x4eaf, 0x4e2b, 0x4de9, 0x4e53, 0x4db5, 0x4e0b, 0x4dd7, 0x4dbe, 0x4df5, 0x4dd0, 0x4dc9, 0x4e66, 0x4d69, 0x4e0e, 0x4e3b, 0x4d50, 0x4dff, 0x4de3, 0x4d65, 0x4dd4, 0x4e0e, 0x4df0, 0x4e52, 0x4ee9, 0x4e3e, 0x4e53, 0x4dbd, +0x4d94, 0x4d90, 0x4e41, 0x4d3c, 0x4de7, 0x4d6d, 0x4dfa, 0x4e97, 0x4de8, 0x4e5c, 0x4dde, 0x4dfe, 0x4e81, 0x4d8a, 0x4d99, 0x4dce, 0x4e82, 0x4de2, 0x4dba, 0x4dab, 0x4dc5, 0x4d4e, 0x4d64, 0x4db5, 0x4d8c, 0x4dcb, 0x4dc9, 0x4d74, 0x4dfa, 0x4e2f, 0x4e29, 0x4db3, 0x4deb, 0x4d7e, 0x4ddd, 0x4d9a, 0x4d6e, 0x4da2, 0x4cdf, 0x4d82, 0x4da5, 0x4dd1, 0x4da7, 0x4e45, 0x4dba, 0x4df1, 0x4d49, 0x4d32, 0x4e97, 0x4d3f, 0x4e88, 0x4d72, 0x4cfe, 0x4dd3, 0x4d33, 0x4d53, 0x4db0, 0x4d6b, 0x4d5f, 0x4e02, 0x4dcb, 0x4e93, 0x4d95, 0x4dc5, 0x4da2, 0x4d86, 0x4ddf, 0x4df4, 0x4dac, 0x4e0d, 0x4dd1, 0x4d3f, 0x4df6, 0x4d42, 0x4e24, 0x4dac, 0x4e2e, 0x4da2, 0x4db6, 0x4df0, 0x4dd6, 0x4d6f, 0x4d6b, 0x4e2f, 0x4d51, 0x4e39, 0x4dfd, 0x4d12, 0x4d9a, 0x4ded, 0x4d3a, 0x4dec, 0x4e1b, 0x4e0d, 0x4dbc, 0x4dad, +0x4d87, 0x4dd5, 0x4e10, 0x4dd0, 0x4e3f, 0x4ddf, 0x4ea2, 0x4ec6, 0x4ddd, 0x4f15, 0x4df0, 0x4e47, 0x4ed0, 0x4dcc, 0x4dfa, 0x4de6, 0x4e44, 0x4dd7, 0x4da0, 0x4e0c, 0x4db8, 0x4d9c, 0x4dde, 0x4dcf, 0x4dfe, 0x4e85, 0x4e7b, 0x4da6, 0x4e87, 0x4e73, 0x4e85, 0x4e39, 0x4de2, 0x4e46, 0x4e55, 0x4dc6, 0x4d80, 0x4d68, 0x4d9e, 0x4e35, 0x4e1c, 0x4e41, 0x4d37, 0x4eab, 0x4e25, 0x4ea0, 0x4dab, 0x4dd5, 0x4e40, 0x4dc4, 0x4ea6, 0x4e0b, 0x4d35, 0x4ddd, 0x4d6f, 0x4dec, 0x4e3e, 0x4d86, 0x4dc7, 0x4e1b, 0x4dd1, 0x4e7d, 0x4d5b, 0x4e56, 0x4d3e, 0x4dc6, 0x4e47, 0x4e41, 0x4deb, 0x4ea3, 0x4e0b, 0x4e1e, 0x4e4f, 0x4d7d, 0x4e69, 0x4e05, 0x4e07, 0x4de1, 0x4dd4, 0x4df4, 0x4e23, 0x4daa, 0x4d5c, 0x4e50, 0x4d8c, 0x4e56, 0x4df2, 0x4d1b, 0x4db1, 0x4e56, 0x4d5c, 0x4e3b, 0x4ea7, 0x4e3d, 0x4dc1, 0x4dce, +0x4dd5, 0x4e1b, 0x4f0a, 0x4d93, 0x4e7e, 0x4e1d, 0x4e8c, 0x4f7b, 0x4df4, 0x4f3f, 0x4e9f, 0x4e5e, 0x4f33, 0x4e21, 0x4e55, 0x4e7b, 0x4ec6, 0x4e75, 0x4e2f, 0x4e95, 0x4ead, 0x4df1, 0x4e00, 0x4e1b, 0x4e6a, 0x4e69, 0x4f05, 0x4dce, 0x4e65, 0x4ecc, 0x4e72, 0x4e86, 0x4ea7, 0x4e4c, 0x4ef1, 0x4e36, 0x4e28, 0x4dd8, 0x4dca, 0x4e83, 0x4e23, 0x4e65, 0x4e7f, 0x4f31, 0x4ebf, 0x4e83, 0x4d66, 0x4e3d, 0x4e9e, 0x4e64, 0x4eba, 0x4e12, 0x4d90, 0x4e34, 0x4e11, 0x4e31, 0x4e89, 0x4de1, 0x4dca, 0x4e9f, 0x4e43, 0x4f58, 0x4dc9, 0x4e96, 0x4e38, 0x4dfa, 0x4e94, 0x4eb1, 0x4ed4, 0x4f1b, 0x4ee2, 0x4e92, 0x4e30, 0x4e86, 0x4eb1, 0x4e4e, 0x4ea0, 0x4e74, 0x4e52, 0x4ebc, 0x4edd, 0x4dd8, 0x4e1d, 0x4ee2, 0x4df0, 0x4eb0, 0x4e12, 0x4dd4, 0x4e3d, 0x4e9e, 0x4e31, 0x4e44, 0x4ecb, 0x4ebb, 0x4e2c, 0x4e6d, +0x4dc2, 0x4e12, 0x4e1c, 0x4de3, 0x4dfc, 0x4df2, 0x4e09, 0x4ed4, 0x4e52, 0x4f49, 0x4e69, 0x4dc9, 0x4f08, 0x4e73, 0x4e21, 0x4e51, 0x4e85, 0x4e2d, 0x4da5, 0x4e0c, 0x4e09, 0x4d7b, 0x4de6, 0x4dec, 0x4e9e, 0x4e06, 0x4ea8, 0x4da2, 0x4e74, 0x4eac, 0x4e13, 0x4e45, 0x4e43, 0x4dea, 0x4e85, 0x4dbb, 0x4df5, 0x4dc4, 0x4d87, 0x4e18, 0x4de4, 0x4e20, 0x4dd5, 0x4ebd, 0x4e32, 0x4e40, 0x4de9, 0x4e07, 0x4e5a, 0x4de1, 0x4f32, 0x4e22, 0x4d57, 0x4e23, 0x4ded, 0x4dd4, 0x4e11, 0x4dd4, 0x4dfd, 0x4e5d, 0x4e9f, 0x4ed0, 0x4d86, 0x4ea8, 0x4d69, 0x4de3, 0x4e2b, 0x4ec8, 0x4e3c, 0x4eca, 0x4e2f, 0x4de7, 0x4e3e, 0x4e01, 0x4e59, 0x4df2, 0x4e82, 0x4e3a, 0x4e45, 0x4e91, 0x4e9a, 0x4dc0, 0x4e61, 0x4e8d, 0x4d51, 0x4e31, 0x4dc1, 0x4d96, 0x4dad, 0x4e37, 0x4e2b, 0x4e8d, 0x4e69, 0x4dfe, 0x4e37, 0x4ddd, +0x4e19, 0x4e6d, 0x4ec5, 0x4e2a, 0x4e9c, 0x4e04, 0x4ec6, 0x4f61, 0x4e1f, 0x4f72, 0x4e4d, 0x4e51, 0x4f2c, 0x4e6a, 0x4e48, 0x4e99, 0x4edc, 0x4dd0, 0x4e2e, 0x4eb1, 0x4e52, 0x4de8, 0x4e5b, 0x4e0a, 0x4e2c, 0x4e35, 0x4ef2, 0x4dd0, 0x4eff, 0x4f6d, 0x4ef2, 0x4eca, 0x4e90, 0x4e6e, 0x4ece, 0x4e89, 0x4dfc, 0x4e16, 0x4dcd, 0x4eb7, 0x4e79, 0x4ee7, 0x4e2e, 0x4ec0, 0x4e93, 0x4ec0, 0x4dc4, 0x4e5a, 0x4f28, 0x4e17, 0x4efc, 0x4e44, 0x4dbc, 0x4e77, 0x4df3, 0x4eda, 0x4ec2, 0x4e34, 0x4e15, 0x4e78, 0x4eb2, 0x4f87, 0x4da1, 0x4f1e, 0x4dcb, 0x4e72, 0x4eea, 0x4e8c, 0x4edb, 0x4f22, 0x4ecd, 0x4e54, 0x4eb8, 0x4e87, 0x4ef0, 0x4ea3, 0x4e57, 0x4e79, 0x4e85, 0x4e82, 0x4ebb, 0x4e3c, 0x4e29, 0x4ec4, 0x4e06, 0x4ea8, 0x4eb7, 0x4dc5, 0x4e31, 0x4e8a, 0x4e72, 0x4eac, 0x4ed9, 0x4f1d, 0x4e7e, 0x4e68, +0x4e35, 0x4dd4, 0x4e38, 0x4dda, 0x4e05, 0x4db1, 0x4e5a, 0x4f1a, 0x4e2b, 0x4f39, 0x4e30, 0x4e96, 0x4ecf, 0x4df6, 0x4dd0, 0x4ddc, 0x4e5e, 0x4ddc, 0x4d6c, 0x4e50, 0x4dd5, 0x4dc0, 0x4e05, 0x4d65, 0x4e16, 0x4e46, 0x4e57, 0x4dc0, 0x4e5c, 0x4ed2, 0x4e79, 0x4e11, 0x4e1a, 0x4e14, 0x4e85, 0x4e2f, 0x4dc9, 0x4dd8, 0x4d4c, 0x4ddb, 0x4e37, 0x4e35, 0x4dba, 0x4eb9, 0x4dee, 0x4ed1, 0x4d7c, 0x4dfc, 0x4e86, 0x4d78, 0x4e88, 0x4e1e, 0x4d54, 0x4dc0, 0x4da2, 0x4e0f, 0x4e83, 0x4db6, 0x4dc1, 0x4e78, 0x4e0a, 0x4e34, 0x4d73, 0x4e83, 0x4d8c, 0x4dce, 0x4e55, 0x4e11, 0x4e83, 0x4e43, 0x4e7c, 0x4e05, 0x4e93, 0x4ddf, 0x4e3f, 0x4dc4, 0x4e19, 0x4e6c, 0x4db9, 0x4e54, 0x4e9e, 0x4da3, 0x4dbe, 0x4e6a, 0x4db0, 0x4e1a, 0x4e57, 0x4d7b, 0x4e6e, 0x4eac, 0x4da4, 0x4e9a, 0x4e6c, 0x4e7f, 0x4de6, 0x4e0c, +0x4e70, 0x4e5d, 0x4ea9, 0x4e2c, 0x4ee1, 0x4e13, 0x4e9d, 0x4f97, 0x4e21, 0x4ff6, 0x4e48, 0x4e57, 0x4f7e, 0x4e75, 0x4e56, 0x4e79, 0x4f65, 0x4e3f, 0x4da0, 0x4e90, 0x4edc, 0x4e8e, 0x4e4d, 0x4e51, 0x4e9c, 0x4e2a, 0x4e9e, 0x4e30, 0x4e4c, 0x4edf, 0x4ef8, 0x4e91, 0x4eb6, 0x4e71, 0x4ead, 0x4e48, 0x4e87, 0x4de3, 0x4df8, 0x4e29, 0x4e76, 0x4ebb, 0x4e35, 0x4ef6, 0x4e9e, 0x4fa9, 0x4dd5, 0x4e21, 0x4ec4, 0x4e4a, 0x4f80, 0x4e0d, 0x4e07, 0x4e07, 0x4e45, 0x4e40, 0x4ef9, 0x4e38, 0x4dd3, 0x4e67, 0x4e85, 0x4ecf, 0x4dde, 0x4eaf, 0x4e1a, 0x4e83, 0x4e6d, 0x4f2c, 0x4ee4, 0x4eab, 0x4e78, 0x4e42, 0x4e9f, 0x4e30, 0x4e70, 0x4e27, 0x4eee, 0x4e55, 0x4e96, 0x4e9f, 0x4e9c, 0x4e3e, 0x4e46, 0x4f72, 0x4e1a, 0x4e80, 0x4eb9, 0x4e04, 0x4e5e, 0x4ee7, 0x4e43, 0x4ec0, 0x4f4b, 0x4e59, 0x4e76, 0x4e27, +0x4dd1, 0x4dbf, 0x4ec4, 0x4df3, 0x4e12, 0x4e04, 0x4e47, 0x4f88, 0x4e3e, 0x4f9c, 0x4e70, 0x4eb7, 0x4f21, 0x4e20, 0x4e02, 0x4ec1, 0x4f47, 0x4e07, 0x4e00, 0x4e95, 0x4e30, 0x4dd6, 0x4dee, 0x4d9d, 0x4e09, 0x4e05, 0x4ec7, 0x4ddb, 0x4e57, 0x4f16, 0x4e8d, 0x4e60, 0x4e58, 0x4e2e, 0x4ed0, 0x4df3, 0x4e32, 0x4df6, 0x4d99, 0x4def, 0x4e67, 0x4e3d, 0x4e21, 0x4f1d, 0x4e24, 0x4ef2, 0x4da9, 0x4e02, 0x4eea, 0x4e2d, 0x4f3d, 0x4e61, 0x4de9, 0x4e51, 0x4db4, 0x4e1e, 0x4e8c, 0x4e23, 0x4dc5, 0x4e4f, 0x4e56, 0x4f11, 0x4d7f, 0x4eda, 0x4de8, 0x4e06, 0x4e52, 0x4e14, 0x4e97, 0x4f22, 0x4e29, 0x4e43, 0x4e97, 0x4e37, 0x4e58, 0x4e4c, 0x4e7f, 0x4e69, 0x4e35, 0x4e48, 0x4efe, 0x4de6, 0x4e23, 0x4e4f, 0x4df0, 0x4e55, 0x4e59, 0x4daf, 0x4e32, 0x4e56, 0x4dea, 0x4ea4, 0x4e72, 0x4e7f, 0x4e22, 0x4e13, +0x4d97, 0x4d55, 0x4d67, 0x4d11, 0x4d7c, 0x4d95, 0x4e13, 0x4ea2, 0x4e15, 0x4ef3, 0x4db7, 0x4db6, 0x4eb7, 0x4d99, 0x4e38, 0x4d63, 0x4df6, 0x4da1, 0x4d6d, 0x4d9c, 0x4dda, 0x4d83, 0x4db0, 0x4d74, 0x4db4, 0x4e71, 0x4e1a, 0x4d50, 0x4dec, 0x4e26, 0x4df3, 0x4dd0, 0x4ddf, 0x4d85, 0x4dfb, 0x4da2, 0x4ddc, 0x4d82, 0x4d45, 0x4d6e, 0x4d55, 0x4d8f, 0x4d1e, 0x4de2, 0x4d78, 0x4e5d, 0x4d4b, 0x4da0, 0x4e24, 0x4d4a, 0x4e82, 0x4dc8, 0x4d13, 0x4d73, 0x4d4e, 0x4d5c, 0x4de9, 0x4d89, 0x4d71, 0x4db5, 0x4e0d, 0x4e4b, 0x4d15, 0x4e2f, 0x4d88, 0x4da4, 0x4de9, 0x4ded, 0x4e35, 0x4e27, 0x4dcb, 0x4d4c, 0x4dc5, 0x4d59, 0x4de3, 0x4da6, 0x4e7e, 0x4dfa, 0x4ddc, 0x4dfc, 0x4e23, 0x4d71, 0x4d5d, 0x4e2a, 0x4d4c, 0x4daa, 0x4d9c, 0x4cff, 0x4ddd, 0x4df5, 0x4d8f, 0x4dd1, 0x4de1, 0x4d5f, 0x4e4c, 0x4d88, +0x4d87, 0x4dde, 0x4e24, 0x4dd2, 0x4e20, 0x4e17, 0x4e1d, 0x4f2c, 0x4d91, 0x4f09, 0x4e23, 0x4e27, 0x4ec8, 0x4e1a, 0x4dcd, 0x4e00, 0x4e75, 0x4d91, 0x4d53, 0x4db2, 0x4e16, 0x4dac, 0x4e22, 0x4dfb, 0x4e20, 0x4dee, 0x4e47, 0x4d7a, 0x4e7b, 0x4e9e, 0x4dff, 0x4e26, 0x4e2e, 0x4dc3, 0x4ec2, 0x4da2, 0x4dca, 0x4d87, 0x4da3, 0x4e18, 0x4dd7, 0x4e50, 0x4d98, 0x4e92, 0x4e26, 0x4e14, 0x4d10, 0x4e33, 0x4e59, 0x4db0, 0x4e95, 0x4da1, 0x4d9b, 0x4df6, 0x4d2d, 0x4deb, 0x4e1b, 0x4d76, 0x4da5, 0x4df7, 0x4dd6, 0x4ea5, 0x4d40, 0x4e65, 0x4d83, 0x4e04, 0x4df1, 0x4e6e, 0x4e48, 0x4ee2, 0x4e35, 0x4da7, 0x4da9, 0x4dd4, 0x4e79, 0x4db5, 0x4e37, 0x4dc8, 0x4d68, 0x4e17, 0x4e90, 0x4d82, 0x4dec, 0x4dfe, 0x4d30, 0x4d85, 0x4e2a, 0x4d6d, 0x4de9, 0x4e64, 0x4da7, 0x4e1c, 0x4e59, 0x4e02, 0x4e09, 0x4d96, +0x4df9, 0x4e01, 0x4e8b, 0x4e85, 0x4ed5, 0x4e7a, 0x4e85, 0x4eed, 0x4e77, 0x4f1c, 0x4e7f, 0x4eb9, 0x4f54, 0x4e45, 0x4eaa, 0x4e35, 0x4ec6, 0x4e41, 0x4d94, 0x4ec8, 0x4e7b, 0x4e37, 0x4e55, 0x4df2, 0x4e9f, 0x4e53, 0x4ef9, 0x4e48, 0x4ebc, 0x4ee7, 0x4eb1, 0x4e74, 0x4ea0, 0x4ddc, 0x4e90, 0x4e52, 0x4e1c, 0x4de6, 0x4dbe, 0x4e24, 0x4e5c, 0x4e12, 0x4dc0, 0x4ebd, 0x4e07, 0x4f14, 0x4e16, 0x4e15, 0x4f3c, 0x4e16, 0x4f0c, 0x4e40, 0x4d4d, 0x4e9d, 0x4dff, 0x4dbc, 0x4e61, 0x4e0d, 0x4e13, 0x4e52, 0x4e85, 0x4f06, 0x4e05, 0x4e79, 0x4d69, 0x4dcf, 0x4ed8, 0x4e6b, 0x4e76, 0x4f03, 0x4e57, 0x4e66, 0x4edb, 0x4e8f, 0x4e75, 0x4e3c, 0x4e88, 0x4e9f, 0x4e6d, 0x4e35, 0x4ef2, 0x4e30, 0x4e50, 0x4e68, 0x4df4, 0x4e6b, 0x4e3d, 0x4da2, 0x4e5d, 0x4ed7, 0x4e33, 0x4ec0, 0x4f16, 0x4eb7, 0x4e7a, 0x4e3a, +0x4db5, 0x4dff, 0x4e06, 0x4e03, 0x4e6e, 0x4e3e, 0x4e52, 0x4edb, 0x4e09, 0x4f15, 0x4e4b, 0x4e9c, 0x4f54, 0x4d9e, 0x4dbe, 0x4e42, 0x4e0c, 0x4e1e, 0x4dd6, 0x4e41, 0x4e17, 0x4d7b, 0x4de5, 0x4deb, 0x4df3, 0x4e40, 0x4e41, 0x4e02, 0x4e89, 0x4f23, 0x4e46, 0x4e53, 0x4e20, 0x4e27, 0x4ee9, 0x4df9, 0x4e15, 0x4e38, 0x4df4, 0x4e14, 0x4e1a, 0x4e01, 0x4db3, 0x4ebc, 0x4d8c, 0x4e77, 0x4d53, 0x4dbd, 0x4ed1, 0x4dde, 0x4eb1, 0x4dd4, 0x4db1, 0x4e08, 0x4d6e, 0x4da6, 0x4e43, 0x4d66, 0x4dbe, 0x4e1d, 0x4e10, 0x4f3f, 0x4d2a, 0x4e1f, 0x4da6, 0x4dca, 0x4e6b, 0x4e59, 0x4e81, 0x4f21, 0x4dfd, 0x4e23, 0x4e33, 0x4e48, 0x4eb9, 0x4e08, 0x4dd9, 0x4e5c, 0x4df8, 0x4e6e, 0x4e16, 0x4dca, 0x4e50, 0x4e5c, 0x4d71, 0x4e32, 0x4e43, 0x4d64, 0x4dfe, 0x4ee3, 0x4d83, 0x4e66, 0x4e3d, 0x4eeb, 0x4e28, 0x4ddf, +0x4e3e, 0x4e49, 0x4ee3, 0x4e3f, 0x4ef6, 0x4eac, 0x4ea8, 0x4f54, 0x4ea4, 0x4fdf, 0x4e91, 0x4eb4, 0x4f8a, 0x4e75, 0x4e81, 0x4e8e, 0x4f45, 0x4e2f, 0x4e26, 0x4edd, 0x4ed4, 0x4e5b, 0x4e64, 0x4de7, 0x4e6b, 0x4e8b, 0x4f22, 0x4e3b, 0x4e8e, 0x4f34, 0x4ed1, 0x4edd, 0x4eaf, 0x4e27, 0x4ef4, 0x4e73, 0x4ea4, 0x4e3b, 0x4da0, 0x4e2d, 0x4e7c, 0x4e81, 0x4e2e, 0x4f31, 0x4e48, 0x4f48, 0x4e39, 0x4e7c, 0x4f0f, 0x4df3, 0x4f12, 0x4e19, 0x4dcb, 0x4e4f, 0x4e16, 0x4dea, 0x4eb6, 0x4e0b, 0x4e3c, 0x4ea1, 0x4e48, 0x4f80, 0x4dd3, 0x4ed8, 0x4e21, 0x4e47, 0x4f42, 0x4f09, 0x4eec, 0x4ef0, 0x4e6e, 0x4ec3, 0x4ed3, 0x4e99, 0x4ee3, 0x4e24, 0x4ebc, 0x4eb2, 0x4e78, 0x4e8a, 0x4f01, 0x4e89, 0x4e67, 0x4ed7, 0x4e1d, 0x4e37, 0x4e9f, 0x4e03, 0x4e95, 0x4f02, 0x4df4, 0x4efe, 0x4f55, 0x4ee1, 0x4eb7, 0x4e4f, +0x4d92, 0x4dde, 0x4e21, 0x4d5d, 0x4e90, 0x4e15, 0x4e89, 0x4ea3, 0x4deb, 0x4f4c, 0x4ec4, 0x4e70, 0x4eda, 0x4e2f, 0x4e38, 0x4e19, 0x4ecf, 0x4e55, 0x4dbc, 0x4e20, 0x4e52, 0x4de4, 0x4de0, 0x4e1e, 0x4db4, 0x4e72, 0x4e1b, 0x4dd5, 0x4e30, 0x4ea3, 0x4e57, 0x4ea3, 0x4e27, 0x4e31, 0x4ede, 0x4dd0, 0x4df6, 0x4e00, 0x4dca, 0x4e1c, 0x4e49, 0x4e2b, 0x4ddc, 0x4eb6, 0x4e62, 0x4ed8, 0x4d69, 0x4e49, 0x4eb5, 0x4de9, 0x4eeb, 0x4df2, 0x4d4c, 0x4e79, 0x4dba, 0x4e24, 0x4e5b, 0x4dd0, 0x4e06, 0x4e3e, 0x4e41, 0x4f2c, 0x4dbb, 0x4e7a, 0x4dff, 0x4d9f, 0x4e54, 0x4e51, 0x4e3a, 0x4f00, 0x4e88, 0x4e3d, 0x4eaa, 0x4e47, 0x4eb3, 0x4e57, 0x4e32, 0x4e26, 0x4e80, 0x4efc, 0x4f49, 0x4e0b, 0x4dfb, 0x4e9b, 0x4d69, 0x4e31, 0x4deb, 0x4d4e, 0x4de8, 0x4e9a, 0x4e12, 0x4e74, 0x4e6a, 0x4e94, 0x4e34, 0x4de3, +0x4de1, 0x4e39, 0x4e47, 0x4de2, 0x4e53, 0x4e02, 0x4e7e, 0x4ec5, 0x4e01, 0x4f33, 0x4e30, 0x4dfc, 0x4f1f, 0x4e5c, 0x4e28, 0x4e30, 0x4ea0, 0x4e23, 0x4dd5, 0x4e19, 0x4e43, 0x4dc9, 0x4e8f, 0x4dd0, 0x4e3e, 0x4e3e, 0x4e9a, 0x4dd4, 0x4e31, 0x4f06, 0x4e76, 0x4e21, 0x4e7f, 0x4e1f, 0x4eb7, 0x4e0c, 0x4dde, 0x4dc8, 0x4de7, 0x4dfe, 0x4e10, 0x4e2b, 0x4ded, 0x4edf, 0x4e37, 0x4e72, 0x4dec, 0x4e3a, 0x4ebb, 0x4ddf, 0x4ec0, 0x4dbe, 0x4d1e, 0x4e87, 0x4dc6, 0x4e0b, 0x4e5a, 0x4de7, 0x4dcd, 0x4e96, 0x4e66, 0x4eda, 0x4d77, 0x4e4a, 0x4da4, 0x4df5, 0x4e8d, 0x4e4c, 0x4e68, 0x4ede, 0x4e5d, 0x4dd1, 0x4e06, 0x4e2d, 0x4e0c, 0x4e46, 0x4e5e, 0x4e15, 0x4de8, 0x4e6c, 0x4e54, 0x4daa, 0x4df4, 0x4ed0, 0x4d80, 0x4e1a, 0x4df9, 0x4dcb, 0x4dee, 0x4e1c, 0x4e17, 0x4e5c, 0x4e8c, 0x4e33, 0x4dd3, 0x4e27, +0x4d34, 0x4dbb, 0x4e7d, 0x4d47, 0x4dfd, 0x4d0b, 0x4ddc, 0x4e68, 0x4dc6, 0x4ecd, 0x4d9c, 0x4d7d, 0x4ee0, 0x4d69, 0x4ded, 0x4dca, 0x4e3c, 0x4dcd, 0x4d5e, 0x4dbf, 0x4e4c, 0x4db0, 0x4db2, 0x4d97, 0x4da9, 0x4d9f, 0x4e43, 0x4d2a, 0x4dab, 0x4e3d, 0x4e06, 0x4dd4, 0x4daa, 0x4d79, 0x4de6, 0x4de1, 0x4e01, 0x4d62, 0x4d05, 0x4dc7, 0x4ea2, 0x4db4, 0x4d8b, 0x4e6e, 0x4ddd, 0x4e74, 0x4d00, 0x4d9a, 0x4e77, 0x4ddc, 0x4e8b, 0x4dd1, 0x4ccc, 0x4e3f, 0x4d93, 0x4e15, 0x4e91, 0x4de6, 0x4d2c, 0x4e2d, 0x4e02, 0x4ea1, 0x4daf, 0x4e3f, 0x4d8b, 0x4db9, 0x4dde, 0x4e0e, 0x4de3, 0x4e50, 0x4e05, 0x4d89, 0x4e03, 0x4e13, 0x4e4e, 0x4d9c, 0x4df4, 0x4e2d, 0x4df6, 0x4e00, 0x4df1, 0x4ddd, 0x4d7e, 0x4e68, 0x4d6c, 0x4e07, 0x4dca, 0x4d0b, 0x4dba, 0x4dde, 0x4e18, 0x4db6, 0x4dc8, 0x4e2b, 0x4dfa, 0x4d96, +0x4d85, 0x4dc7, 0x4e03, 0x4dc7, 0x4ddd, 0x4dce, 0x4e82, 0x4f1b, 0x4e5b, 0x4f6b, 0x4ec1, 0x4e3e, 0x4f42, 0x4e4a, 0x4e5e, 0x4e3c, 0x4e55, 0x4e43, 0x4dbe, 0x4e0d, 0x4e30, 0x4d9f, 0x4e29, 0x4df5, 0x4e4f, 0x4e49, 0x4e01, 0x4dc1, 0x4e7c, 0x4e7f, 0x4e9d, 0x4e1b, 0x4e00, 0x4e55, 0x4e85, 0x4e25, 0x4e0b, 0x4da9, 0x4da2, 0x4e0e, 0x4e49, 0x4e9b, 0x4ded, 0x4e7f, 0x4df3, 0x4ea5, 0x4d68, 0x4dd6, 0x4ec1, 0x4db5, 0x4ed0, 0x4e11, 0x4d68, 0x4e0c, 0x4e37, 0x4e5f, 0x4e8a, 0x4d98, 0x4e15, 0x4e34, 0x4e33, 0x4ef1, 0x4dc1, 0x4e90, 0x4dd5, 0x4dfb, 0x4e50, 0x4eb3, 0x4ebf, 0x4f41, 0x4e9b, 0x4e12, 0x4e83, 0x4df5, 0x4e9e, 0x4e2f, 0x4e5c, 0x4dfd, 0x4e64, 0x4ea9, 0x4ec7, 0x4e31, 0x4e1b, 0x4eb6, 0x4ddc, 0x4e68, 0x4e72, 0x4d96, 0x4e27, 0x4e93, 0x4dd6, 0x4e70, 0x4e8a, 0x4e37, 0x4e0b, 0x4e0e, +0x4e2a, 0x4db0, 0x4e2a, 0x4d72, 0x4dbf, 0x4e19, 0x4e05, 0x4ea8, 0x4dfa, 0x4eed, 0x4e02, 0x4e06, 0x4e93, 0x4de1, 0x4e4e, 0x4da8, 0x4e27, 0x4d5d, 0x4dc5, 0x4e0c, 0x4e4f, 0x4e0a, 0x4dc2, 0x4da0, 0x4db7, 0x4ddf, 0x4e72, 0x4dc6, 0x4e8d, 0x4e41, 0x4e66, 0x4e35, 0x4dc7, 0x4e21, 0x4e2d, 0x4df3, 0x4df3, 0x4d7e, 0x4da9, 0x4e2e, 0x4e07, 0x4ded, 0x4d9d, 0x4e6c, 0x4e27, 0x4ec2, 0x4d98, 0x4e01, 0x4e73, 0x4d6e, 0x4ed1, 0x4d9e, 0x4d36, 0x4de8, 0x4da2, 0x4e1c, 0x4dcb, 0x4de2, 0x4d8c, 0x4e31, 0x4e44, 0x4eee, 0x4d69, 0x4dd4, 0x4d7e, 0x4de5, 0x4e35, 0x4e4f, 0x4e55, 0x4e9c, 0x4e58, 0x4da4, 0x4e09, 0x4dd2, 0x4e27, 0x4dec, 0x4e42, 0x4e28, 0x4e50, 0x4e66, 0x4e37, 0x4e51, 0x4dd0, 0x4ebe, 0x4d62, 0x4e19, 0x4e4e, 0x4d5a, 0x4e12, 0x4e5d, 0x4ddc, 0x4e4c, 0x4e8f, 0x4e44, 0x4e84, 0x4dbe, +0x4d61, 0x4dfd, 0x4ded, 0x4ddc, 0x4e50, 0x4d9c, 0x4e71, 0x4e90, 0x4e16, 0x4f8b, 0x4e5d, 0x4e68, 0x4f60, 0x4e08, 0x4e2a, 0x4e27, 0x4f17, 0x4e21, 0x4d68, 0x4e1d, 0x4dea, 0x4de6, 0x4dd9, 0x4d88, 0x4e27, 0x4e43, 0x4e60, 0x4da5, 0x4e57, 0x4f23, 0x4e7d, 0x4e5f, 0x4e69, 0x4dfe, 0x4ebf, 0x4d9b, 0x4e4f, 0x4de4, 0x4d8e, 0x4dfa, 0x4e03, 0x4e22, 0x4df2, 0x4e90, 0x4e18, 0x4e72, 0x4cf7, 0x4dfe, 0x4e7e, 0x4dfa, 0x4e98, 0x4dd4, 0x4d98, 0x4e42, 0x4de0, 0x4e02, 0x4ec0, 0x4dcb, 0x4d4f, 0x4e5a, 0x4df3, 0x4f15, 0x4d77, 0x4e51, 0x4da6, 0x4e02, 0x4de0, 0x4e2d, 0x4ea4, 0x4e88, 0x4dec, 0x4df1, 0x4e0a, 0x4e5a, 0x4e9c, 0x4e02, 0x4df8, 0x4e2c, 0x4e4a, 0x4e9a, 0x4e7b, 0x4d92, 0x4e1c, 0x4e88, 0x4ddb, 0x4e52, 0x4e18, 0x4d6c, 0x4dde, 0x4eb1, 0x4dc8, 0x4e2d, 0x4e24, 0x4df0, 0x4dea, 0x4e1e, +0x4daf, 0x4da3, 0x4e3a, 0x4dec, 0x4e70, 0x4d93, 0x4e3a, 0x4e83, 0x4df9, 0x4efd, 0x4e07, 0x4e51, 0x4f5d, 0x4dde, 0x4e0b, 0x4dfc, 0x4e45, 0x4ddc, 0x4d75, 0x4dc9, 0x4df3, 0x4d8d, 0x4de0, 0x4da4, 0x4e37, 0x4e7a, 0x4e46, 0x4dc8, 0x4e2e, 0x4ebd, 0x4e27, 0x4e67, 0x4e3e, 0x4e2f, 0x4e5f, 0x4d98, 0x4e5f, 0x4d6e, 0x4da8, 0x4dc7, 0x4dd5, 0x4e31, 0x4ddb, 0x4e89, 0x4de0, 0x4e73, 0x4d87, 0x4dd9, 0x4ea2, 0x4dae, 0x4e92, 0x4dc9, 0x4d4f, 0x4df1, 0x4e02, 0x4df1, 0x4e69, 0x4de0, 0x4d7f, 0x4e39, 0x4dc3, 0x4e99, 0x4d2f, 0x4e69, 0x4d99, 0x4d5a, 0x4e3d, 0x4e3b, 0x4e74, 0x4eac, 0x4e2d, 0x4e43, 0x4e44, 0x4e36, 0x4e2d, 0x4dc2, 0x4e43, 0x4e3a, 0x4e22, 0x4de6, 0x4e76, 0x4d64, 0x4e25, 0x4e7c, 0x4dc2, 0x4e51, 0x4daa, 0x4d57, 0x4e4f, 0x4e55, 0x4db5, 0x4df2, 0x4e66, 0x4e42, 0x4e18, 0x4e30, +0x4df6, 0x4e52, 0x4e8b, 0x4da7, 0x4e2b, 0x4e27, 0x4e8a, 0x4f5e, 0x4e20, 0x4fd0, 0x4e78, 0x4ed1, 0x4ef4, 0x4e3b, 0x4e31, 0x4e7c, 0x4ec6, 0x4de8, 0x4e00, 0x4e9b, 0x4e95, 0x4df6, 0x4e8f, 0x4e58, 0x4e3b, 0x4e7a, 0x4ea5, 0x4e09, 0x4ea0, 0x4f19, 0x4e5c, 0x4e85, 0x4e5f, 0x4e71, 0x4e94, 0x4e66, 0x4e34, 0x4dfd, 0x4ddc, 0x4e1d, 0x4e27, 0x4e64, 0x4e43, 0x4eb2, 0x4e7d, 0x4f30, 0x4e1a, 0x4e05, 0x4f21, 0x4dde, 0x4f53, 0x4e6f, 0x4e0a, 0x4e5e, 0x4dd2, 0x4e50, 0x4ee9, 0x4e05, 0x4dab, 0x4e4b, 0x4eb3, 0x4f2d, 0x4e0a, 0x4ec8, 0x4dbf, 0x4e3f, 0x4eca, 0x4ec0, 0x4ed5, 0x4f2c, 0x4e9c, 0x4e3d, 0x4ebc, 0x4e31, 0x4e9c, 0x4e33, 0x4e4e, 0x4e9c, 0x4e15, 0x4edc, 0x4ee4, 0x4e68, 0x4dd4, 0x4ef6, 0x4de9, 0x4e52, 0x4ebb, 0x4d9b, 0x4e7b, 0x4f28, 0x4e7d, 0x4e9c, 0x4e77, 0x4e80, 0x4e9f, 0x4e17, +0x4e60, 0x4e53, 0x4e8b, 0x4e28, 0x4e69, 0x4e47, 0x4e69, 0x4f88, 0x4dfc, 0x4f2c, 0x4e91, 0x4e75, 0x4f10, 0x4ecc, 0x4deb, 0x4dfa, 0x4e6d, 0x4e37, 0x4e21, 0x4e5c, 0x4ebd, 0x4dc5, 0x4e7f, 0x4e47, 0x4e82, 0x4e61, 0x4ea7, 0x4df0, 0x4eb8, 0x4f35, 0x4eac, 0x4ea1, 0x4f06, 0x4e15, 0x4ea4, 0x4df5, 0x4e63, 0x4de8, 0x4dd8, 0x4e0d, 0x4e25, 0x4e7f, 0x4e50, 0x4e90, 0x4e3d, 0x4ecd, 0x4dad, 0x4e6c, 0x4f1a, 0x4dd8, 0x4f33, 0x4e40, 0x4dfb, 0x4e3e, 0x4db5, 0x4e5f, 0x4eeb, 0x4e34, 0x4dda, 0x4e80, 0x4ecc, 0x4ed4, 0x4db3, 0x4e12, 0x4d87, 0x4e52, 0x4e2f, 0x4ed6, 0x4e9c, 0x4f17, 0x4e5e, 0x4e12, 0x4e48, 0x4e31, 0x4e88, 0x4e64, 0x4e44, 0x4e23, 0x4e16, 0x4ea3, 0x4e98, 0x4e0a, 0x4de2, 0x4ebc, 0x4dfc, 0x4e22, 0x4e5b, 0x4dd5, 0x4e85, 0x4ea4, 0x4e42, 0x4e4f, 0x4ea1, 0x4e2d, 0x4e44, 0x4d7d, +0x4db5, 0x4dad, 0x4e2a, 0x4d31, 0x4e06, 0x4dbc, 0x4e4e, 0x4e78, 0x4d7e, 0x4ea3, 0x4dc2, 0x4db8, 0x4ec4, 0x4daa, 0x4e42, 0x4de2, 0x4e01, 0x4dac, 0x4dbc, 0x4e00, 0x4da6, 0x4d71, 0x4e01, 0x4dd2, 0x4d92, 0x4db6, 0x4ec5, 0x4d54, 0x4e7b, 0x4e3f, 0x4e0b, 0x4dfc, 0x4e05, 0x4d6c, 0x4e96, 0x4d90, 0x4dae, 0x4d2d, 0x4d7c, 0x4dc9, 0x4d91, 0x4dcc, 0x4dab, 0x4e48, 0x4df2, 0x4e26, 0x4da6, 0x4dd1, 0x4e7d, 0x4dc3, 0x4eab, 0x4e04, 0x4d1f, 0x4dcb, 0x4db2, 0x4da9, 0x4dd1, 0x4d8c, 0x4d8d, 0x4df2, 0x4e1c, 0x4ef9, 0x4d3c, 0x4e0a, 0x4d23, 0x4d8f, 0x4e02, 0x4e27, 0x4e29, 0x4ea2, 0x4e10, 0x4dc6, 0x4de3, 0x4db2, 0x4e61, 0x4df7, 0x4df5, 0x4e25, 0x4de6, 0x4e46, 0x4e0f, 0x4dc8, 0x4d8f, 0x4e3c, 0x4d4e, 0x4ddd, 0x4df1, 0x4cfa, 0x4e06, 0x4e72, 0x4de3, 0x4dda, 0x4df9, 0x4e24, 0x4da8, 0x4d7f, +0x4d8f, 0x4d95, 0x4e5a, 0x4dbc, 0x4ded, 0x4daf, 0x4e1c, 0x4eea, 0x4db3, 0x4ee9, 0x4e7d, 0x4dd2, 0x4e60, 0x4df6, 0x4dfd, 0x4e2d, 0x4e5d, 0x4df0, 0x4db2, 0x4dde, 0x4de1, 0x4d4e, 0x4dd9, 0x4db6, 0x4de8, 0x4dcd, 0x4dff, 0x4d63, 0x4dee, 0x4e75, 0x4e5d, 0x4dfd, 0x4e30, 0x4d88, 0x4e6f, 0x4dc4, 0x4d8b, 0x4d90, 0x4d4e, 0x4dc2, 0x4e07, 0x4e3e, 0x4d82, 0x4e79, 0x4da7, 0x4de0, 0x4d1a, 0x4d8a, 0x4e91, 0x4da7, 0x4e5c, 0x4dcc, 0x4d9d, 0x4df7, 0x4d69, 0x4dee, 0x4e05, 0x4da3, 0x4d41, 0x4e2d, 0x4e13, 0x4ec4, 0x4cf6, 0x4e41, 0x4dc4, 0x4dad, 0x4d96, 0x4e74, 0x4e66, 0x4e4b, 0x4df8, 0x4da1, 0x4dbe, 0x4ddd, 0x4e12, 0x4d81, 0x4da9, 0x4dba, 0x4df4, 0x4dfb, 0x4e53, 0x4dbb, 0x4d79, 0x4e13, 0x4d93, 0x4dfc, 0x4da8, 0x4d6e, 0x4ddb, 0x4dee, 0x4db2, 0x4e71, 0x4e06, 0x4e15, 0x4dad, 0x4e10, +0x4dbe, 0x4d9a, 0x4e47, 0x4d82, 0x4e18, 0x4e0e, 0x4e70, 0x4ebd, 0x4e2f, 0x4eee, 0x4e47, 0x4e16, 0x4ed6, 0x4dee, 0x4e5a, 0x4e64, 0x4e99, 0x4dfa, 0x4dd7, 0x4e82, 0x4e32, 0x4dd0, 0x4e4a, 0x4e31, 0x4db7, 0x4dab, 0x4e6f, 0x4df7, 0x4e5e, 0x4ea5, 0x4e2f, 0x4e3d, 0x4e1b, 0x4dee, 0x4e6e, 0x4df6, 0x4e07, 0x4d94, 0x4d52, 0x4d9d, 0x4d9a, 0x4dc1, 0x4d68, 0x4e8a, 0x4de5, 0x4ed0, 0x4dbc, 0x4e0e, 0x4e82, 0x4df1, 0x4eda, 0x4deb, 0x4d7d, 0x4e03, 0x4d79, 0x4d9c, 0x4e18, 0x4df0, 0x4dc0, 0x4e04, 0x4e3c, 0x4f3c, 0x4dcf, 0x4e53, 0x4d88, 0x4dad, 0x4e2e, 0x4e30, 0x4e7a, 0x4ea5, 0x4dca, 0x4df9, 0x4e4a, 0x4e05, 0x4e9c, 0x4dca, 0x4e18, 0x4e1c, 0x4e4d, 0x4e3a, 0x4ed8, 0x4dd7, 0x4dd2, 0x4e56, 0x4da1, 0x4e5c, 0x4dec, 0x4d66, 0x4e07, 0x4e62, 0x4e15, 0x4e5e, 0x4e30, 0x4e1d, 0x4e47, 0x4e0e, +0x4dec, 0x4e01, 0x4e70, 0x4dfa, 0x4e67, 0x4db4, 0x4e83, 0x4f89, 0x4e1b, 0x4f76, 0x4e4b, 0x4e2b, 0x4f33, 0x4e79, 0x4e5f, 0x4e1d, 0x4e90, 0x4df1, 0x4df9, 0x4e53, 0x4deb, 0x4d95, 0x4e23, 0x4d81, 0x4e0a, 0x4e1e, 0x4efc, 0x4df0, 0x4e8d, 0x4ee7, 0x4e99, 0x4ecb, 0x4e37, 0x4e41, 0x4ece, 0x4e28, 0x4deb, 0x4dba, 0x4dd7, 0x4e1d, 0x4e40, 0x4e1e, 0x4e08, 0x4eab, 0x4e61, 0x4e9e, 0x4db5, 0x4e32, 0x4ed9, 0x4df4, 0x4f2d, 0x4e58, 0x4d91, 0x4dd9, 0x4dd4, 0x4e32, 0x4e5e, 0x4db8, 0x4dfb, 0x4e4d, 0x4e87, 0x4f3e, 0x4dcc, 0x4ea3, 0x4d85, 0x4e3b, 0x4e3a, 0x4e95, 0x4ea9, 0x4efa, 0x4f03, 0x4e56, 0x4e70, 0x4e59, 0x4e85, 0x4e7b, 0x4e0a, 0x4e5e, 0x4e33, 0x4e61, 0x4edb, 0x4e24, 0x4e24, 0x4e4e, 0x4ddc, 0x4e35, 0x4e52, 0x4dc2, 0x4e58, 0x4ecb, 0x4dea, 0x4e93, 0x4e7a, 0x4e7a, 0x4e24, 0x4e24, +0x4e1a, 0x4e76, 0x4e5f, 0x4dcb, 0x4e4c, 0x4e37, 0x4ed6, 0x4ec9, 0x4de4, 0x4f1e, 0x4e8e, 0x4e22, 0x4eef, 0x4e5e, 0x4e26, 0x4e5b, 0x4ed3, 0x4e7a, 0x4dbf, 0x4e76, 0x4e06, 0x4de0, 0x4e59, 0x4de5, 0x4e66, 0x4e1f, 0x4e76, 0x4dd8, 0x4e8d, 0x4ef8, 0x4ed3, 0x4e45, 0x4e84, 0x4e3d, 0x4ef2, 0x4df1, 0x4df6, 0x4e09, 0x4d77, 0x4e22, 0x4dc6, 0x4e8a, 0x4dcd, 0x4e8f, 0x4e57, 0x4eef, 0x4dbc, 0x4e40, 0x4f00, 0x4deb, 0x4e93, 0x4e33, 0x4d66, 0x4e1a, 0x4dc6, 0x4dee, 0x4e42, 0x4dd8, 0x4e23, 0x4e83, 0x4e0b, 0x4ee3, 0x4da3, 0x4e63, 0x4dbf, 0x4e1a, 0x4e7a, 0x4e8f, 0x4ede, 0x4eed, 0x4e27, 0x4e5a, 0x4e42, 0x4e2f, 0x4ea2, 0x4e1d, 0x4e16, 0x4e7e, 0x4eab, 0x4e64, 0x4ec7, 0x4dc2, 0x4d9a, 0x4eca, 0x4e4a, 0x4e22, 0x4e54, 0x4dd1, 0x4e67, 0x4e81, 0x4de7, 0x4e32, 0x4f41, 0x4e70, 0x4e0d, 0x4ddc, +0x4da1, 0x4deb, 0x4e14, 0x4d79, 0x4e1c, 0x4db9, 0x4e1a, 0x4e73, 0x4dd2, 0x4ee5, 0x4dd8, 0x4dbd, 0x4e94, 0x4dd3, 0x4da2, 0x4e2d, 0x4e62, 0x4dda, 0x4d75, 0x4e2d, 0x4e01, 0x4d3e, 0x4ddf, 0x4ddb, 0x4e1e, 0x4d91, 0x4e09, 0x4da9, 0x4e74, 0x4e7a, 0x4dba, 0x4dd4, 0x4e30, 0x4da4, 0x4e3e, 0x4d81, 0x4d95, 0x4d95, 0x4d81, 0x4e30, 0x4e23, 0x4e35, 0x4dbd, 0x4e34, 0x4e0a, 0x4e89, 0x4d2f, 0x4df7, 0x4e72, 0x4dbe, 0x4ef1, 0x4e28, 0x4d7e, 0x4dd9, 0x4dc9, 0x4dd5, 0x4e30, 0x4de8, 0x4da4, 0x4e00, 0x4e0a, 0x4e66, 0x4d32, 0x4e04, 0x4d5e, 0x4db9, 0x4e11, 0x4e3e, 0x4de4, 0x4e6c, 0x4e38, 0x4e10, 0x4db9, 0x4df4, 0x4e63, 0x4dec, 0x4deb, 0x4dd5, 0x4e2c, 0x4e28, 0x4e22, 0x4d86, 0x4dd8, 0x4e3e, 0x4d27, 0x4e7e, 0x4dc5, 0x4cf5, 0x4e04, 0x4e4e, 0x4e1c, 0x4df2, 0x4e10, 0x4de0, 0x4d6b, 0x4d53, +0x4de7, 0x4e37, 0x4e87, 0x4e27, 0x4e9b, 0x4e07, 0x4e87, 0x4f9e, 0x4e14, 0x4faf, 0x4edd, 0x4f04, 0x4f20, 0x4e28, 0x4d9f, 0x4e6d, 0x4f14, 0x4df2, 0x4e1b, 0x4e74, 0x4e77, 0x4d6f, 0x4e33, 0x4dff, 0x4e7c, 0x4e75, 0x4e6e, 0x4e2c, 0x4e68, 0x4f3a, 0x4ec2, 0x4e8f, 0x4eda, 0x4e35, 0x4f59, 0x4e42, 0x4e34, 0x4dfe, 0x4e42, 0x4e5b, 0x4e3a, 0x4e91, 0x4e20, 0x4e71, 0x4eec, 0x4eba, 0x4e03, 0x4e1f, 0x4eac, 0x4dd8, 0x4f57, 0x4ead, 0x4de8, 0x4de5, 0x4e17, 0x4e96, 0x4e7c, 0x4db7, 0x4ddb, 0x4e47, 0x4e6a, 0x4f17, 0x4d7d, 0x4e98, 0x4e04, 0x4e32, 0x4e82, 0x4ecf, 0x4ed7, 0x4f05, 0x4e77, 0x4ec6, 0x4ee5, 0x4e3f, 0x4e8f, 0x4e83, 0x4dcd, 0x4e0e, 0x4e9d, 0x4e58, 0x4eea, 0x4df3, 0x4de0, 0x4ecb, 0x4e06, 0x4e8a, 0x4e68, 0x4d67, 0x4e5a, 0x4eef, 0x4e05, 0x4e8b, 0x4eff, 0x4e46, 0x4e60, 0x4dd7, +0x4dcc, 0x4dee, 0x4e78, 0x4db4, 0x4e61, 0x4db1, 0x4e3e, 0x4edd, 0x4db1, 0x4ede, 0x4d68, 0x4e5a, 0x4efb, 0x4dd2, 0x4dfe, 0x4e28, 0x4ec4, 0x4e16, 0x4d85, 0x4e55, 0x4dff, 0x4dc4, 0x4e27, 0x4dc9, 0x4dc7, 0x4dd2, 0x4e79, 0x4d94, 0x4e4e, 0x4e8b, 0x4e6a, 0x4e52, 0x4dfc, 0x4e08, 0x4e1e, 0x4dff, 0x4daf, 0x4d7b, 0x4d51, 0x4da5, 0x4deb, 0x4e25, 0x4e00, 0x4e7a, 0x4de4, 0x4ea6, 0x4d64, 0x4ddc, 0x4ea0, 0x4ddb, 0x4e73, 0x4dfa, 0x4d1b, 0x4e17, 0x4d78, 0x4de8, 0x4eb9, 0x4dc4, 0x4dc0, 0x4e2e, 0x4e61, 0x4eb6, 0x4dac, 0x4e6a, 0x4d86, 0x4dd0, 0x4e92, 0x4e20, 0x4e2b, 0x4e5f, 0x4df0, 0x4e2d, 0x4e1b, 0x4dd7, 0x4e1d, 0x4e1f, 0x4e45, 0x4e6e, 0x4dc8, 0x4de8, 0x4e5f, 0x4dea, 0x4dd3, 0x4e5e, 0x4dda, 0x4dee, 0x4dac, 0x4d7d, 0x4e39, 0x4e3c, 0x4e22, 0x4e6e, 0x4e77, 0x4e45, 0x4e0b, 0x4dd3, +0x4e35, 0x4e33, 0x4e9c, 0x4de7, 0x4e4c, 0x4e54, 0x4eeb, 0x4f2a, 0x4e39, 0x4f67, 0x4e9e, 0x4e61, 0x4f2b, 0x4e50, 0x4e45, 0x4eab, 0x4f08, 0x4e4f, 0x4e01, 0x4e7a, 0x4e73, 0x4df9, 0x4e88, 0x4dd9, 0x4ea5, 0x4e6d, 0x4ef7, 0x4dcf, 0x4f2f, 0x4f58, 0x4ef7, 0x4eca, 0x4e71, 0x4e82, 0x4f22, 0x4e73, 0x4e35, 0x4e09, 0x4de6, 0x4e4a, 0x4e4c, 0x4e58, 0x4e07, 0x4f1c, 0x4ea0, 0x4f1d, 0x4de4, 0x4e88, 0x4ec8, 0x4e27, 0x4f13, 0x4df9, 0x4dc0, 0x4e55, 0x4da9, 0x4e3b, 0x4eb5, 0x4df2, 0x4e28, 0x4ea0, 0x4e45, 0x4f56, 0x4dfe, 0x4ebe, 0x4db8, 0x4e2b, 0x4ea1, 0x4ebc, 0x4ec6, 0x4f16, 0x4e85, 0x4e5a, 0x4e8c, 0x4e67, 0x4efc, 0x4e11, 0x4e3e, 0x4e7c, 0x4e7b, 0x4e66, 0x4ecf, 0x4df3, 0x4e39, 0x4e97, 0x4dd1, 0x4eb3, 0x4e47, 0x4e05, 0x4e7d, 0x4eb7, 0x4e7b, 0x4eca, 0x4f2b, 0x4ea0, 0x4e2b, 0x4e51, +0x4db9, 0x4dbf, 0x4e60, 0x4db6, 0x4ec2, 0x4da9, 0x4e40, 0x4eb2, 0x4dd0, 0x4ee8, 0x4df1, 0x4e3d, 0x4eef, 0x4e3a, 0x4e4c, 0x4dfe, 0x4e5e, 0x4e52, 0x4df0, 0x4e28, 0x4e65, 0x4de5, 0x4e47, 0x4d6d, 0x4e02, 0x4dd1, 0x4e7c, 0x4dde, 0x4e2f, 0x4e87, 0x4e9e, 0x4e58, 0x4e0a, 0x4e91, 0x4e0c, 0x4e05, 0x4e1d, 0x4d89, 0x4d53, 0x4da9, 0x4e6b, 0x4e71, 0x4df8, 0x4e8a, 0x4dcd, 0x4ed8, 0x4d7f, 0x4e1d, 0x4e77, 0x4d97, 0x4ea3, 0x4d6f, 0x4d9d, 0x4e0f, 0x4dcb, 0x4e2b, 0x4e8e, 0x4dbd, 0x4d96, 0x4e28, 0x4e09, 0x4f0c, 0x4d95, 0x4e53, 0x4d66, 0x4e32, 0x4e1c, 0x4dfb, 0x4e2a, 0x4e91, 0x4ed8, 0x4dd0, 0x4e94, 0x4e1e, 0x4dd3, 0x4e4a, 0x4dcd, 0x4e56, 0x4e2f, 0x4e7e, 0x4e22, 0x4dd2, 0x4e42, 0x4e9a, 0x4ddc, 0x4e3c, 0x4e8a, 0x4d97, 0x4e00, 0x4e7e, 0x4d80, 0x4e5c, 0x4eba, 0x4e5e, 0x4e47, 0x4e02, +0x4c99, 0x4c81, 0x4d53, 0x4cb2, 0x4d3f, 0x4ca4, 0x4d31, 0x4dab, 0x4d46, 0x4dae, 0x4ce7, 0x4d3d, 0x4da8, 0x4d00, 0x4d6a, 0x4d0d, 0x4d75, 0x4d0c, 0x4cc1, 0x4cf5, 0x4d2e, 0x4cc4, 0x4ccf, 0x4cac, 0x4cfc, 0x4cfa, 0x4d7f, 0x4ccd, 0x4d41, 0x4d62, 0x4d43, 0x4d2f, 0x4cf8, 0x4cfc, 0x4db4, 0x4d00, 0x4cfa, 0x4cad, 0x4cf2, 0x4cf7, 0x4d04, 0x4cf2, 0x4caf, 0x4d56, 0x4cda, 0x4d5b, 0x4cef, 0x4d37, 0x4d81, 0x4cca, 0x4ddd, 0x4ca3, 0x4c50, 0x4d2d, 0x4c81, 0x4cf7, 0x4d46, 0x4ce2, 0x4ce5, 0x4d38, 0x4cf5, 0x4de8, 0x4c6a, 0x4d4f, 0x4c86, 0x4cc3, 0x4d31, 0x4d5b, 0x4d55, 0x4d82, 0x4d74, 0x4cc0, 0x4d08, 0x4d27, 0x4d0a, 0x4cd9, 0x4cf2, 0x4d38, 0x4c9b, 0x4d29, 0x4d67, 0x4d1a, 0x4d25, 0x4d1d, 0x4cdd, 0x4cd0, 0x4ced, 0x4c6d, 0x4d0d, 0x4d72, 0x4d3f, 0x4d94, 0x4d5a, 0x4d2d, 0x4d00, 0x4cb8 +}; \ No newline at end of file diff --git a/redmule/inc/z_output.h b/redmule/inc/z_output.h new file mode 100644 index 0000000..9cc0610 --- /dev/null +++ b/redmule/inc/z_output.h @@ -0,0 +1,99 @@ + /* Header file generated by RedMulE Golden Model */ +uint16_t z_oup [9216] = { +0x4e2d, 0x4e0e, 0x4dda, 0x4de5, 0x4e0e, 0x4dbc, 0x4e3f, 0x4ed6, 0x4dce, 0x4eef, 0x4dfc, 0x4e55, 0x4e2f, 0x4d96, 0x4ddd, 0x4d8a, 0x4e4c, 0x4dc2, 0x4d63, 0x4daa, 0x4e0a, 0x4d89, 0x4dff, 0x4d7d, 0x4d9e, 0x4e07, 0x4ded, 0x4d68, 0x4e69, 0x4ea9, 0x4e7b, 0x4e13, 0x4e22, 0x4e13, 0x4e34, 0x4dd6, 0x4db5, 0x4db6, 0x4d9c, 0x4dfd, 0x4e51, 0x4e0f, 0x4d92, 0x4e46, 0x4db8, 0x4e97, 0x4d14, 0x4dcb, 0x4e6a, 0x4d8e, 0x4eb5, 0x4dee, 0x4d95, 0x4e1c, 0x4dcb, 0x4e1e, 0x4dff, 0x4d5d, 0x4d53, 0x4dde, 0x4dda, 0x4ea4, 0x4d1c, 0x4e1d, 0x4d30, 0x4dad, 0x4e27, 0x4e04, 0x4e55, 0x4ebb, 0x4e47, 0x4daa, 0x4ddf, 0x4dd8, 0x4e3a, 0x4db0, 0x4dc0, 0x4e1c, 0x4dc1, 0x4e33, 0x4e2b, 0x4dcd, 0x4da2, 0x4ebe, 0x4d64, 0x4da9, 0x4e7f, 0x4d80, 0x4e14, 0x4e9b, 0x4d7e, 0x4e85, 0x4e6d, 0x4e6e, 0x4e1e, 0x4def, +0x4def, 0x4d5f, 0x4e1d, 0x4daa, 0x4e29, 0x4dc0, 0x4e5f, 0x4f01, 0x4dcf, 0x4f33, 0x4dcf, 0x4e86, 0x4ecf, 0x4dfd, 0x4deb, 0x4d92, 0x4eda, 0x4e29, 0x4dae, 0x4e35, 0x4e49, 0x4da9, 0x4e33, 0x4d7d, 0x4e23, 0x4e28, 0x4dc0, 0x4e12, 0x4e62, 0x4eda, 0x4e71, 0x4e43, 0x4e2d, 0x4df3, 0x4e69, 0x4e0d, 0x4df7, 0x4dbd, 0x4dbc, 0x4da3, 0x4d9d, 0x4e3c, 0x4e01, 0x4ebb, 0x4dd5, 0x4e35, 0x4d3f, 0x4de4, 0x4efa, 0x4dc4, 0x4ee3, 0x4dac, 0x4d93, 0x4da3, 0x4da1, 0x4dee, 0x4e9a, 0x4db0, 0x4db0, 0x4e99, 0x4dfe, 0x4eaf, 0x4d59, 0x4e35, 0x4dee, 0x4de7, 0x4e60, 0x4e5d, 0x4ec7, 0x4eb1, 0x4e59, 0x4de0, 0x4e35, 0x4df5, 0x4df4, 0x4df1, 0x4df4, 0x4e27, 0x4dd5, 0x4e4b, 0x4e87, 0x4da1, 0x4dbc, 0x4eb6, 0x4d77, 0x4e4f, 0x4e04, 0x4d77, 0x4e43, 0x4ede, 0x4df7, 0x4e38, 0x4e81, 0x4e43, 0x4e43, 0x4e01, +0x4d9d, 0x4dbc, 0x4e1d, 0x4e2f, 0x4e69, 0x4ddf, 0x4e62, 0x4f1f, 0x4dbd, 0x4f0c, 0x4d88, 0x4da7, 0x4f23, 0x4dfa, 0x4e2e, 0x4de9, 0x4e67, 0x4de4, 0x4da6, 0x4ded, 0x4e28, 0x4d1b, 0x4e1d, 0x4dbb, 0x4dea, 0x4e1c, 0x4e67, 0x4ddc, 0x4de6, 0x4e7d, 0x4e2c, 0x4e1c, 0x4e41, 0x4def, 0x4e14, 0x4ddc, 0x4dc3, 0x4cfa, 0x4dac, 0x4db0, 0x4e84, 0x4df6, 0x4d77, 0x4e5a, 0x4dd5, 0x4ea7, 0x4d34, 0x4da6, 0x4eb7, 0x4dca, 0x4e9c, 0x4dcb, 0x4d04, 0x4dd7, 0x4dcd, 0x4e29, 0x4df3, 0x4d80, 0x4dc5, 0x4e3d, 0x4dd1, 0x4e42, 0x4d76, 0x4e54, 0x4d5a, 0x4db3, 0x4e0a, 0x4de8, 0x4ea2, 0x4e8e, 0x4dd8, 0x4e43, 0x4e16, 0x4d9b, 0x4e8b, 0x4e39, 0x4e02, 0x4dfa, 0x4de8, 0x4e07, 0x4ddd, 0x4dd4, 0x4d3f, 0x4e05, 0x4dac, 0x4e33, 0x4e61, 0x4d4c, 0x4e0b, 0x4e63, 0x4ddd, 0x4e37, 0x4e7d, 0x4e47, 0x4dbd, 0x4db9, +0x4db6, 0x4e32, 0x4e87, 0x4e33, 0x4e43, 0x4e2b, 0x4e79, 0x4f28, 0x4de8, 0x4edc, 0x4e5e, 0x4e94, 0x4f32, 0x4e18, 0x4dbc, 0x4e77, 0x4ea9, 0x4e8c, 0x4daa, 0x4ea9, 0x4e43, 0x4e20, 0x4e3c, 0x4da8, 0x4eb0, 0x4e1b, 0x4e7a, 0x4e32, 0x4eb8, 0x4eb2, 0x4ea5, 0x4e8b, 0x4e7f, 0x4de9, 0x4ee2, 0x4df5, 0x4e01, 0x4e5c, 0x4dbb, 0x4dee, 0x4e41, 0x4e65, 0x4e2d, 0x4ef5, 0x4e84, 0x4e78, 0x4de8, 0x4e32, 0x4ee1, 0x4dea, 0x4ef6, 0x4def, 0x4da8, 0x4e4f, 0x4dd0, 0x4e76, 0x4e84, 0x4def, 0x4d88, 0x4e53, 0x4e34, 0x4f79, 0x4db4, 0x4ea1, 0x4dc1, 0x4dee, 0x4e44, 0x4ec4, 0x4ed6, 0x4e82, 0x4e5e, 0x4df4, 0x4ec3, 0x4e45, 0x4ea1, 0x4e16, 0x4e00, 0x4e6f, 0x4e50, 0x4e80, 0x4e9c, 0x4df7, 0x4e1c, 0x4edf, 0x4dcb, 0x4e27, 0x4e39, 0x4d78, 0x4e1c, 0x4ec7, 0x4e37, 0x4e81, 0x4e8f, 0x4e4b, 0x4e45, 0x4dfa, +0x4e2a, 0x4e3d, 0x4e3d, 0x4df5, 0x4e3a, 0x4def, 0x4e2f, 0x4ed6, 0x4db3, 0x4ef3, 0x4e5a, 0x4e8e, 0x4f50, 0x4db6, 0x4e46, 0x4e34, 0x4ec9, 0x4e1b, 0x4dd6, 0x4e80, 0x4e1f, 0x4d99, 0x4e76, 0x4e52, 0x4e8a, 0x4e8d, 0x4e5b, 0x4dc1, 0x4eaf, 0x4efc, 0x4ebb, 0x4e52, 0x4e78, 0x4df4, 0x4e78, 0x4df1, 0x4dfa, 0x4dd4, 0x4d47, 0x4e48, 0x4e04, 0x4e20, 0x4ddd, 0x4ebb, 0x4e44, 0x4eca, 0x4d9b, 0x4dec, 0x4e9c, 0x4e12, 0x4ec7, 0x4dfd, 0x4d6c, 0x4e46, 0x4dc0, 0x4e37, 0x4e59, 0x4dbc, 0x4d8b, 0x4e40, 0x4e31, 0x4ef8, 0x4de1, 0x4de8, 0x4d97, 0x4dd2, 0x4ea0, 0x4e1c, 0x4e3a, 0x4eb4, 0x4dd5, 0x4e41, 0x4e5d, 0x4dbc, 0x4e1d, 0x4e55, 0x4e77, 0x4dfc, 0x4e4b, 0x4e22, 0x4ebe, 0x4d6d, 0x4dad, 0x4e2a, 0x4dd3, 0x4e56, 0x4e3a, 0x4d2e, 0x4e42, 0x4e95, 0x4dce, 0x4e3b, 0x4eef, 0x4e46, 0x4ded, 0x4df8, +0x4d39, 0x4d7b, 0x4da0, 0x4cfa, 0x4d82, 0x4d16, 0x4d98, 0x4e32, 0x4ce2, 0x4e4a, 0x4d6a, 0x4d64, 0x4e27, 0x4d47, 0x4d4c, 0x4d16, 0x4d7c, 0x4d49, 0x4d0d, 0x4d3e, 0x4d83, 0x4d12, 0x4d19, 0x4cbe, 0x4d0f, 0x4d83, 0x4d65, 0x4cdb, 0x4d3d, 0x4ded, 0x4dff, 0x4d5b, 0x4d74, 0x4d70, 0x4df1, 0x4ccd, 0x4d49, 0x4d16, 0x4cc3, 0x4d2f, 0x4d25, 0x4d85, 0x4d31, 0x4dc3, 0x4d5b, 0x4dcb, 0x4cb3, 0x4d51, 0x4d98, 0x4d29, 0x4dc9, 0x4cc1, 0x4cd1, 0x4d90, 0x4cd3, 0x4d59, 0x4d5e, 0x4cf7, 0x4cda, 0x4dae, 0x4d8f, 0x4e13, 0x4cee, 0x4d6a, 0x4d0f, 0x4d33, 0x4d00, 0x4d56, 0x4d88, 0x4dae, 0x4d78, 0x4d40, 0x4d9c, 0x4d7c, 0x4d58, 0x4d2c, 0x4d47, 0x4d28, 0x4db4, 0x4dfc, 0x4d97, 0x4cec, 0x4cf7, 0x4dc0, 0x4d0c, 0x4d81, 0x4d58, 0x4d28, 0x4d63, 0x4dad, 0x4d12, 0x4d75, 0x4d77, 0x4d51, 0x4ceb, 0x4d0b, +0x4d6b, 0x4d5e, 0x4e5d, 0x4da9, 0x4e1f, 0x4d97, 0x4df3, 0x4ec4, 0x4d90, 0x4ee0, 0x4da1, 0x4e24, 0x4e3b, 0x4d68, 0x4da9, 0x4ddf, 0x4dfd, 0x4d99, 0x4d6c, 0x4dba, 0x4e07, 0x4daa, 0x4df3, 0x4dd8, 0x4d51, 0x4dc7, 0x4ddb, 0x4d6e, 0x4dd9, 0x4df2, 0x4e39, 0x4e15, 0x4e04, 0x4e02, 0x4e05, 0x4dbf, 0x4de1, 0x4d43, 0x4d73, 0x4d9e, 0x4dd5, 0x4daf, 0x4daf, 0x4e51, 0x4dcc, 0x4e5c, 0x4d8f, 0x4d5d, 0x4e2f, 0x4d7c, 0x4e80, 0x4dd7, 0x4dbd, 0x4dc2, 0x4d5f, 0x4e11, 0x4de6, 0x4d6b, 0x4d1a, 0x4db4, 0x4dcb, 0x4eba, 0x4d24, 0x4ded, 0x4dc5, 0x4d51, 0x4dfe, 0x4dfd, 0x4e44, 0x4e33, 0x4e59, 0x4d99, 0x4ddf, 0x4d99, 0x4dd4, 0x4d66, 0x4df2, 0x4de9, 0x4d80, 0x4e30, 0x4e0a, 0x4daf, 0x4dc3, 0x4e3d, 0x4d79, 0x4d72, 0x4de1, 0x4d42, 0x4e4e, 0x4ea1, 0x4d84, 0x4e13, 0x4e0c, 0x4dc9, 0x4ddf, 0x4df4, +0x4db8, 0x4e02, 0x4e6b, 0x4d8a, 0x4e8f, 0x4e49, 0x4e5b, 0x4eb6, 0x4e1d, 0x4ef9, 0x4e2f, 0x4e65, 0x4ef9, 0x4db4, 0x4e86, 0x4e5c, 0x4eae, 0x4e23, 0x4d8f, 0x4e5a, 0x4e1e, 0x4de0, 0x4e5c, 0x4dbd, 0x4e38, 0x4e37, 0x4ec8, 0x4ded, 0x4ecd, 0x4ec5, 0x4f06, 0x4e9b, 0x4e8a, 0x4ea2, 0x4e41, 0x4dea, 0x4e04, 0x4d70, 0x4d5a, 0x4e34, 0x4e01, 0x4e51, 0x4e0f, 0x4ef0, 0x4dfe, 0x4edd, 0x4d8b, 0x4dd0, 0x4e6d, 0x4e69, 0x4f18, 0x4de4, 0x4d8f, 0x4e21, 0x4de2, 0x4e07, 0x4e56, 0x4ded, 0x4d8d, 0x4e39, 0x4e50, 0x4f37, 0x4dd6, 0x4e27, 0x4e04, 0x4df0, 0x4e92, 0x4e5b, 0x4e99, 0x4eeb, 0x4e66, 0x4e60, 0x4ebc, 0x4df6, 0x4e57, 0x4e40, 0x4eaf, 0x4e5c, 0x4e3f, 0x4e44, 0x4e23, 0x4de8, 0x4e56, 0x4e7e, 0x4e01, 0x4e52, 0x4e5b, 0x4dc5, 0x4e94, 0x4ee0, 0x4e48, 0x4e48, 0x4e63, 0x4e79, 0x4e21, 0x4e3c, +0x4e6a, 0x4e58, 0x4f33, 0x4e57, 0x4ef5, 0x4ee8, 0x4f08, 0x4fd1, 0x4e62, 0x4fc6, 0x4f04, 0x4eab, 0x4fda, 0x4e9b, 0x4eec, 0x4f27, 0x4f04, 0x4eaf, 0x4e19, 0x4f17, 0x4f28, 0x4e59, 0x4ea0, 0x4e0d, 0x4eec, 0x4e73, 0x4f0c, 0x4e6a, 0x4ead, 0x4f95, 0x4edf, 0x4e8f, 0x4eca, 0x4ecd, 0x4edd, 0x4ea5, 0x4edf, 0x4dff, 0x4e28, 0x4e64, 0x4f27, 0x4ed2, 0x4e25, 0x4f29, 0x4e6c, 0x4f95, 0x4e35, 0x4e5b, 0x4f4d, 0x4ea8, 0x4f3b, 0x4eb4, 0x4e2b, 0x4ec0, 0x4e61, 0x4e91, 0x4ee7, 0x4e8c, 0x4e76, 0x4f05, 0x4ed3, 0x4f5e, 0x4e81, 0x4f16, 0x4dfd, 0x4e55, 0x4e9d, 0x4ed1, 0x4ec6, 0x4fa5, 0x4ef2, 0x4ee3, 0x4f1d, 0x4e51, 0x4ebf, 0x4ed8, 0x4ee9, 0x4ef1, 0x4ee2, 0x4f02, 0x4fae, 0x4e7b, 0x4ee4, 0x4f3c, 0x4e59, 0x4ec7, 0x4e97, 0x4e36, 0x4efb, 0x4f02, 0x4ecb, 0x4f03, 0x4f13, 0x4eb2, 0x4e94, 0x4e77, +0x4e1b, 0x4e38, 0x4edf, 0x4dc6, 0x4ee0, 0x4e35, 0x4efd, 0x4f97, 0x4e50, 0x4f9b, 0x4ddc, 0x4e39, 0x4f6b, 0x4e55, 0x4eb4, 0x4e63, 0x4ea0, 0x4e3b, 0x4e17, 0x4e2a, 0x4ed9, 0x4e23, 0x4ee7, 0x4e56, 0x4e34, 0x4e9b, 0x4eda, 0x4e0b, 0x4e82, 0x4ef2, 0x4e95, 0x4ec3, 0x4f05, 0x4e55, 0x4efc, 0x4e8f, 0x4e7c, 0x4e01, 0x4e0a, 0x4e45, 0x4e28, 0x4e65, 0x4e20, 0x4e78, 0x4ebd, 0x4ea1, 0x4e22, 0x4e2b, 0x4f6f, 0x4dcf, 0x4f35, 0x4e0f, 0x4dcb, 0x4e76, 0x4e08, 0x4e7f, 0x4f05, 0x4e5b, 0x4dd7, 0x4e83, 0x4ebd, 0x4f4c, 0x4d7b, 0x4eef, 0x4e01, 0x4e78, 0x4ee6, 0x4ea6, 0x4f28, 0x4f00, 0x4e4e, 0x4e31, 0x4ed7, 0x4e4e, 0x4e6f, 0x4e7a, 0x4e9f, 0x4ee6, 0x4e74, 0x4e91, 0x4eba, 0x4e1f, 0x4e1f, 0x4f5d, 0x4e22, 0x4e84, 0x4e2c, 0x4da3, 0x4e82, 0x4ec5, 0x4ec8, 0x4f13, 0x4ef4, 0x4e9a, 0x4eb6, 0x4e5a, +0x4d6b, 0x4db6, 0x4e0b, 0x4d3b, 0x4df7, 0x4d88, 0x4e15, 0x4e81, 0x4d5f, 0x4ef0, 0x4e2f, 0x4da2, 0x4e6a, 0x4da1, 0x4d9c, 0x4e6c, 0x4e0b, 0x4db1, 0x4d3c, 0x4dfc, 0x4d97, 0x4d63, 0x4e39, 0x4d4d, 0x4da9, 0x4d99, 0x4e40, 0x4da0, 0x4de3, 0x4e28, 0x4e04, 0x4ddc, 0x4dcb, 0x4de6, 0x4e6b, 0x4d91, 0x4dd5, 0x4d84, 0x4d44, 0x4d36, 0x4d75, 0x4de6, 0x4dba, 0x4ed7, 0x4d6f, 0x4e5a, 0x4d88, 0x4d6d, 0x4e03, 0x4d64, 0x4e96, 0x4d8a, 0x4d5c, 0x4dca, 0x4d7c, 0x4e1b, 0x4dfc, 0x4d86, 0x4d66, 0x4dd9, 0x4df3, 0x4e53, 0x4d4b, 0x4e2a, 0x4d9b, 0x4d43, 0x4ddb, 0x4e5a, 0x4de7, 0x4e56, 0x4dee, 0x4d8c, 0x4dcc, 0x4dc7, 0x4daa, 0x4d80, 0x4d97, 0x4e56, 0x4d5f, 0x4e77, 0x4d98, 0x4d51, 0x4d8d, 0x4e89, 0x4d38, 0x4d6b, 0x4dc8, 0x4d8e, 0x4df9, 0x4e13, 0x4d2f, 0x4e07, 0x4e0f, 0x4da0, 0x4d95, 0x4d6a, +0x4e54, 0x4deb, 0x4ea3, 0x4d9d, 0x4e6c, 0x4e3c, 0x4e8d, 0x4f56, 0x4de7, 0x4fa9, 0x4e3a, 0x4eb4, 0x4f3d, 0x4e5d, 0x4ea7, 0x4ead, 0x4f1d, 0x4ea7, 0x4deb, 0x4ea7, 0x4e17, 0x4e36, 0x4e45, 0x4e27, 0x4e42, 0x4e3a, 0x4f1a, 0x4e11, 0x4eb4, 0x4ee0, 0x4e33, 0x4ed2, 0x4e16, 0x4e07, 0x4ea9, 0x4df2, 0x4e4c, 0x4dda, 0x4e31, 0x4e0e, 0x4e32, 0x4e56, 0x4e0c, 0x4efb, 0x4e64, 0x4ebb, 0x4dbf, 0x4e3b, 0x4f0c, 0x4e63, 0x4f04, 0x4e4f, 0x4d9c, 0x4e3a, 0x4e16, 0x4e7c, 0x4e46, 0x4de2, 0x4df4, 0x4e91, 0x4eb6, 0x4f27, 0x4d8a, 0x4ecc, 0x4e0d, 0x4db3, 0x4e8e, 0x4e8a, 0x4ef0, 0x4f1f, 0x4eab, 0x4ea3, 0x4e4a, 0x4df3, 0x4ec1, 0x4e6a, 0x4e6c, 0x4eff, 0x4e45, 0x4ed3, 0x4ec6, 0x4e6f, 0x4e4a, 0x4ebf, 0x4de4, 0x4e40, 0x4e27, 0x4d9e, 0x4e79, 0x4ecb, 0x4e61, 0x4ed6, 0x4e9a, 0x4e4b, 0x4e55, 0x4e73, +0x4e5e, 0x4e1e, 0x4ea1, 0x4df7, 0x4e66, 0x4e71, 0x4f2d, 0x4fbf, 0x4ea4, 0x4fe2, 0x4eab, 0x4eb4, 0x4f9c, 0x4e8b, 0x4e41, 0x4e79, 0x4f69, 0x4e96, 0x4e07, 0x4e86, 0x4ec0, 0x4e14, 0x4e95, 0x4df4, 0x4e9e, 0x4e78, 0x4eea, 0x4df9, 0x4f28, 0x4f40, 0x4f87, 0x4e93, 0x4e29, 0x4ec5, 0x4ec1, 0x4eb6, 0x4e8f, 0x4e9f, 0x4def, 0x4e75, 0x4e75, 0x4e9b, 0x4e29, 0x4f68, 0x4eac, 0x4ed8, 0x4da6, 0x4e52, 0x4f2e, 0x4ea6, 0x4f46, 0x4ea9, 0x4e5b, 0x4e52, 0x4e4d, 0x4e99, 0x4ea2, 0x4e9e, 0x4ded, 0x4ed3, 0x4f10, 0x4fe3, 0x4df6, 0x4ee2, 0x4e13, 0x4f05, 0x4ed1, 0x4ef3, 0x4ef8, 0x4ef2, 0x4eb6, 0x4e1f, 0x4ecc, 0x4e25, 0x4ea1, 0x4ea3, 0x4ef8, 0x4e98, 0x4e43, 0x4ee0, 0x4f0e, 0x4e38, 0x4e74, 0x4f7b, 0x4df6, 0x4ee6, 0x4eba, 0x4de8, 0x4e70, 0x4f1a, 0x4e91, 0x4ed2, 0x4f2a, 0x4e84, 0x4ed3, 0x4ea0, +0x4e1c, 0x4e04, 0x4dfd, 0x4e12, 0x4de2, 0x4e0b, 0x4e45, 0x4ecf, 0x4d91, 0x4edb, 0x4e15, 0x4de1, 0x4ee1, 0x4e07, 0x4da5, 0x4dc1, 0x4e24, 0x4e0f, 0x4d89, 0x4e26, 0x4da5, 0x4d97, 0x4e39, 0x4ddb, 0x4e48, 0x4e3b, 0x4e20, 0x4d9f, 0x4e65, 0x4e82, 0x4e0b, 0x4d9e, 0x4de7, 0x4dbd, 0x4e42, 0x4da5, 0x4dc9, 0x4da4, 0x4dc0, 0x4da9, 0x4e74, 0x4e5c, 0x4de2, 0x4ee1, 0x4e10, 0x4eb1, 0x4d66, 0x4da6, 0x4eba, 0x4e1f, 0x4e9c, 0x4e61, 0x4d43, 0x4dcb, 0x4d98, 0x4e08, 0x4e22, 0x4dea, 0x4ddd, 0x4e76, 0x4e4e, 0x4e86, 0x4d7b, 0x4dfe, 0x4d4c, 0x4e37, 0x4d97, 0x4e31, 0x4e4f, 0x4ebe, 0x4e34, 0x4da1, 0x4e64, 0x4d9e, 0x4df2, 0x4e04, 0x4dd1, 0x4e3a, 0x4dd7, 0x4ea4, 0x4e09, 0x4db9, 0x4d96, 0x4e9a, 0x4d95, 0x4dd5, 0x4e1d, 0x4d54, 0x4de8, 0x4e4a, 0x4dd0, 0x4e6e, 0x4e53, 0x4e49, 0x4d86, 0x4d68, +0x4da0, 0x4dee, 0x4e81, 0x4df4, 0x4de0, 0x4dcd, 0x4ddd, 0x4eae, 0x4dce, 0x4f09, 0x4e0f, 0x4df0, 0x4ecc, 0x4df5, 0x4ddf, 0x4dca, 0x4dd6, 0x4d7f, 0x4dc1, 0x4e0d, 0x4dff, 0x4d9f, 0x4dd5, 0x4d55, 0x4daa, 0x4d84, 0x4e57, 0x4da9, 0x4e39, 0x4eb3, 0x4e60, 0x4dea, 0x4dd4, 0x4e18, 0x4e4a, 0x4dbf, 0x4d8b, 0x4d9f, 0x4d54, 0x4d9f, 0x4e12, 0x4de5, 0x4d9b, 0x4e24, 0x4db4, 0x4e48, 0x4dba, 0x4d88, 0x4e72, 0x4d39, 0x4e4e, 0x4d65, 0x4cef, 0x4e05, 0x4da6, 0x4dbe, 0x4e07, 0x4d71, 0x4d4a, 0x4deb, 0x4e37, 0x4e5e, 0x4dc0, 0x4e20, 0x4d3a, 0x4d5a, 0x4dbd, 0x4e31, 0x4e64, 0x4e77, 0x4e40, 0x4da2, 0x4e46, 0x4da5, 0x4db6, 0x4db4, 0x4db0, 0x4e17, 0x4dc7, 0x4e14, 0x4e24, 0x4dc0, 0x4d5b, 0x4e25, 0x4d91, 0x4e08, 0x4e39, 0x4db0, 0x4ddc, 0x4e55, 0x4d39, 0x4e17, 0x4e75, 0x4dd5, 0x4de9, 0x4e2c, +0x4d74, 0x4d5a, 0x4dde, 0x4d5b, 0x4dc3, 0x4d09, 0x4d93, 0x4e08, 0x4da7, 0x4e79, 0x4d85, 0x4dea, 0x4e38, 0x4d6f, 0x4d63, 0x4d92, 0x4df3, 0x4d6a, 0x4cd6, 0x4d9c, 0x4d83, 0x4d56, 0x4dd5, 0x4d8e, 0x4d84, 0x4da6, 0x4e24, 0x4d2a, 0x4dbb, 0x4e22, 0x4da3, 0x4de8, 0x4d30, 0x4dcc, 0x4db8, 0x4d87, 0x4d63, 0x4d3b, 0x4d3a, 0x4d78, 0x4d6c, 0x4d6c, 0x4d72, 0x4df4, 0x4d6a, 0x4e25, 0x4d3a, 0x4d20, 0x4e25, 0x4d00, 0x4dfc, 0x4d64, 0x4cf9, 0x4d95, 0x4d05, 0x4d3b, 0x4db6, 0x4d0e, 0x4d12, 0x4dd1, 0x4d95, 0x4e0b, 0x4d6a, 0x4de4, 0x4d38, 0x4d87, 0x4e22, 0x4df4, 0x4dc1, 0x4e09, 0x4d9d, 0x4dca, 0x4dd9, 0x4d6a, 0x4d8f, 0x4d3e, 0x4dba, 0x4dbb, 0x4d84, 0x4d7b, 0x4e1e, 0x4d4d, 0x4d67, 0x4e00, 0x4d27, 0x4d54, 0x4db9, 0x4cda, 0x4db1, 0x4e29, 0x4d71, 0x4e22, 0x4df2, 0x4d61, 0x4df0, 0x4d52, +0x4d31, 0x4d90, 0x4e17, 0x4db3, 0x4e1b, 0x4dac, 0x4e08, 0x4ec6, 0x4da8, 0x4eea, 0x4dcb, 0x4e2c, 0x4ee0, 0x4df0, 0x4dda, 0x4dcc, 0x4ea1, 0x4d9a, 0x4dac, 0x4d91, 0x4e2b, 0x4daf, 0x4d8d, 0x4dc6, 0x4e1f, 0x4e0e, 0x4e23, 0x4d57, 0x4e3b, 0x4e3d, 0x4e32, 0x4e66, 0x4e1f, 0x4da7, 0x4e4d, 0x4d47, 0x4da1, 0x4d69, 0x4d6f, 0x4df5, 0x4e0b, 0x4e09, 0x4d7c, 0x4e41, 0x4e09, 0x4e4f, 0x4db3, 0x4df9, 0x4e6a, 0x4de9, 0x4f3e, 0x4e2d, 0x4da0, 0x4e44, 0x4e1a, 0x4df6, 0x4dfc, 0x4d91, 0x4d48, 0x4dcf, 0x4e23, 0x4eb4, 0x4ce1, 0x4e40, 0x4d7d, 0x4da5, 0x4e55, 0x4e34, 0x4e67, 0x4ea2, 0x4e48, 0x4db5, 0x4e25, 0x4e0b, 0x4e1a, 0x4dc4, 0x4e27, 0x4df3, 0x4de6, 0x4e31, 0x4e6f, 0x4de8, 0x4d85, 0x4e70, 0x4d69, 0x4dd9, 0x4de8, 0x4d18, 0x4da7, 0x4e04, 0x4dd3, 0x4e2c, 0x4e3d, 0x4e23, 0x4dd6, 0x4dd2, +0x4e0b, 0x4de2, 0x4e76, 0x4dc3, 0x4e4c, 0x4da5, 0x4e8f, 0x4ec5, 0x4e4d, 0x4f7d, 0x4df4, 0x4e19, 0x4efc, 0x4dc4, 0x4de0, 0x4dd8, 0x4ec5, 0x4dc9, 0x4dd7, 0x4e2b, 0x4e79, 0x4d8d, 0x4e5a, 0x4daa, 0x4e09, 0x4e3f, 0x4e7d, 0x4d99, 0x4e50, 0x4ed9, 0x4ec7, 0x4e5b, 0x4e31, 0x4e6d, 0x4ea8, 0x4e52, 0x4e4a, 0x4dfa, 0x4d61, 0x4e28, 0x4dfa, 0x4e30, 0x4dbd, 0x4ebd, 0x4e1c, 0x4f17, 0x4dad, 0x4e34, 0x4e90, 0x4dd8, 0x4f2e, 0x4e40, 0x4d4b, 0x4e2a, 0x4d89, 0x4deb, 0x4e42, 0x4de8, 0x4d63, 0x4e29, 0x4e46, 0x4f35, 0x4dd4, 0x4e25, 0x4d5f, 0x4e3a, 0x4ee4, 0x4e5b, 0x4e97, 0x4ea5, 0x4e51, 0x4e34, 0x4e6b, 0x4e53, 0x4e7a, 0x4e14, 0x4e12, 0x4e0e, 0x4df0, 0x4e0d, 0x4ebc, 0x4de5, 0x4dbb, 0x4ead, 0x4df9, 0x4e62, 0x4e34, 0x4d91, 0x4e53, 0x4ec3, 0x4e2a, 0x4e18, 0x4e5c, 0x4eac, 0x4e3c, 0x4e1a, +0x4db4, 0x4ded, 0x4e56, 0x4dd8, 0x4dd5, 0x4e20, 0x4f02, 0x4f27, 0x4e56, 0x4f17, 0x4e18, 0x4e35, 0x4f47, 0x4e28, 0x4e4c, 0x4e26, 0x4e8c, 0x4db7, 0x4dab, 0x4e2b, 0x4e62, 0x4de7, 0x4e47, 0x4d76, 0x4dd3, 0x4e32, 0x4e41, 0x4d9b, 0x4e36, 0x4ee1, 0x4eda, 0x4e4e, 0x4e46, 0x4e28, 0x4e76, 0x4e65, 0x4df2, 0x4dd6, 0x4dc5, 0x4e0c, 0x4e02, 0x4da9, 0x4da7, 0x4eb1, 0x4e0c, 0x4e9c, 0x4db8, 0x4e4b, 0x4ea5, 0x4dca, 0x4ea0, 0x4e03, 0x4d89, 0x4e30, 0x4da8, 0x4e2f, 0x4e4f, 0x4e24, 0x4dce, 0x4e2a, 0x4e77, 0x4f06, 0x4d80, 0x4e7e, 0x4d88, 0x4df1, 0x4e6b, 0x4e12, 0x4e4f, 0x4eed, 0x4e20, 0x4e44, 0x4df4, 0x4e38, 0x4e62, 0x4e44, 0x4e3a, 0x4e7d, 0x4e02, 0x4eac, 0x4e74, 0x4e07, 0x4df2, 0x4e84, 0x4dfe, 0x4e3a, 0x4e0c, 0x4d86, 0x4e4d, 0x4e72, 0x4dfb, 0x4e39, 0x4e61, 0x4e46, 0x4dfd, 0x4e42, +0x4de9, 0x4dbb, 0x4e30, 0x4d6f, 0x4dfa, 0x4d82, 0x4e70, 0x4ec5, 0x4da1, 0x4f06, 0x4e5b, 0x4e47, 0x4e79, 0x4dad, 0x4dd5, 0x4e61, 0x4e44, 0x4dae, 0x4dee, 0x4e4f, 0x4e40, 0x4d9e, 0x4e3e, 0x4ddf, 0x4dab, 0x4e84, 0x4e5e, 0x4da7, 0x4e58, 0x4f0e, 0x4e10, 0x4e42, 0x4e18, 0x4e24, 0x4e7c, 0x4e08, 0x4e14, 0x4db7, 0x4db8, 0x4e22, 0x4df6, 0x4e07, 0x4d8b, 0x4ebc, 0x4db7, 0x4eb3, 0x4d91, 0x4d9e, 0x4e45, 0x4db8, 0x4ed5, 0x4dc6, 0x4db4, 0x4da1, 0x4d70, 0x4e4c, 0x4e72, 0x4d8a, 0x4dc9, 0x4d7f, 0x4e1d, 0x4f30, 0x4d7c, 0x4e93, 0x4dd2, 0x4de4, 0x4e93, 0x4e72, 0x4e34, 0x4f3d, 0x4e42, 0x4de7, 0x4e76, 0x4df4, 0x4eae, 0x4df6, 0x4e2b, 0x4e50, 0x4e4b, 0x4e66, 0x4e63, 0x4de2, 0x4de1, 0x4e80, 0x4d96, 0x4dd7, 0x4dee, 0x4ce7, 0x4d9a, 0x4e60, 0x4dc3, 0x4e68, 0x4e4f, 0x4e2d, 0x4e06, 0x4e31, +0x4e00, 0x4e5b, 0x4e77, 0x4dda, 0x4e1a, 0x4dee, 0x4e83, 0x4f15, 0x4e59, 0x4f9a, 0x4e31, 0x4e60, 0x4f31, 0x4e94, 0x4df9, 0x4e36, 0x4eaf, 0x4e48, 0x4dd9, 0x4e49, 0x4e2c, 0x4e35, 0x4ec4, 0x4e48, 0x4e46, 0x4e24, 0x4e95, 0x4dbc, 0x4edf, 0x4f2e, 0x4eeb, 0x4e2f, 0x4e0d, 0x4e31, 0x4ef6, 0x4e75, 0x4dd4, 0x4dd9, 0x4d8f, 0x4e1f, 0x4e09, 0x4dc8, 0x4dfd, 0x4ef2, 0x4e8f, 0x4ed0, 0x4de5, 0x4e12, 0x4ebd, 0x4df4, 0x4ece, 0x4dda, 0x4d36, 0x4e4e, 0x4e0d, 0x4e28, 0x4ead, 0x4e24, 0x4df9, 0x4e79, 0x4eae, 0x4f04, 0x4deb, 0x4e71, 0x4d7e, 0x4e7b, 0x4e6d, 0x4ee2, 0x4e66, 0x4f2b, 0x4e6f, 0x4df6, 0x4ec0, 0x4e28, 0x4e7a, 0x4e28, 0x4e28, 0x4e4e, 0x4e66, 0x4ef7, 0x4ed3, 0x4deb, 0x4e05, 0x4eb3, 0x4dd9, 0x4e88, 0x4e61, 0x4dfd, 0x4e3b, 0x4e89, 0x4e3a, 0x4e50, 0x4ec6, 0x4e51, 0x4e3f, 0x4de0, +0x4dcf, 0x4e18, 0x4e1c, 0x4db7, 0x4e2e, 0x4e1f, 0x4e65, 0x4f10, 0x4dc9, 0x4fb4, 0x4e91, 0x4e63, 0x4f7c, 0x4e56, 0x4e23, 0x4e0d, 0x4e8d, 0x4dea, 0x4db7, 0x4e18, 0x4e14, 0x4da8, 0x4e1e, 0x4d71, 0x4df0, 0x4e35, 0x4e39, 0x4dec, 0x4e2a, 0x4f10, 0x4e78, 0x4e50, 0x4e31, 0x4e77, 0x4f16, 0x4dca, 0x4d9c, 0x4e1c, 0x4da1, 0x4e11, 0x4e25, 0x4e03, 0x4d87, 0x4ecf, 0x4e2a, 0x4ec7, 0x4d9b, 0x4e44, 0x4e78, 0x4dc2, 0x4f13, 0x4e08, 0x4d85, 0x4ddc, 0x4dd4, 0x4db3, 0x4e2e, 0x4e26, 0x4df4, 0x4e2e, 0x4e60, 0x4f22, 0x4d9d, 0x4ebb, 0x4d96, 0x4e65, 0x4e39, 0x4e4b, 0x4e0f, 0x4ee2, 0x4e96, 0x4dd0, 0x4e47, 0x4e26, 0x4e9e, 0x4e32, 0x4dfa, 0x4e81, 0x4e39, 0x4e73, 0x4ec3, 0x4d8e, 0x4dfe, 0x4e9d, 0x4ded, 0x4e43, 0x4ddb, 0x4d85, 0x4e00, 0x4e59, 0x4def, 0x4e65, 0x4e9c, 0x4e31, 0x4df9, 0x4dd1, +0x4d16, 0x4d87, 0x4e0a, 0x4d67, 0x4dfb, 0x4d49, 0x4daa, 0x4e26, 0x4d51, 0x4e60, 0x4d6f, 0x4d77, 0x4eb9, 0x4da7, 0x4d87, 0x4d9f, 0x4ddd, 0x4d9e, 0x4d4e, 0x4dc1, 0x4dc3, 0x4d44, 0x4d6b, 0x4d53, 0x4d48, 0x4d3f, 0x4ddb, 0x4d6f, 0x4db5, 0x4de9, 0x4dfc, 0x4ddb, 0x4de2, 0x4d7e, 0x4e02, 0x4d6f, 0x4d80, 0x4d13, 0x4d1b, 0x4d08, 0x4dc7, 0x4d52, 0x4d7f, 0x4d8b, 0x4db3, 0x4dfe, 0x4d24, 0x4d12, 0x4dd6, 0x4d8c, 0x4e24, 0x4d61, 0x4d12, 0x4dcd, 0x4d2d, 0x4d83, 0x4db3, 0x4dc8, 0x4d3f, 0x4dd5, 0x4d9e, 0x4e44, 0x4d09, 0x4dbc, 0x4d01, 0x4d29, 0x4d96, 0x4d7d, 0x4dd3, 0x4e10, 0x4d50, 0x4dd2, 0x4d5d, 0x4da8, 0x4dac, 0x4d98, 0x4d92, 0x4d5f, 0x4d9a, 0x4de5, 0x4dcd, 0x4da5, 0x4d6a, 0x4dd6, 0x4d0c, 0x4d65, 0x4d4c, 0x4d42, 0x4dd3, 0x4dbd, 0x4db7, 0x4d89, 0x4dcd, 0x4de3, 0x4d99, 0x4d64, +0x4cf5, 0x4d4a, 0x4dd3, 0x4d03, 0x4d77, 0x4d6c, 0x4db3, 0x4e28, 0x4d32, 0x4e34, 0x4d68, 0x4d9a, 0x4dad, 0x4db7, 0x4dad, 0x4d6d, 0x4e1e, 0x4d30, 0x4d3d, 0x4d9d, 0x4df3, 0x4d29, 0x4d33, 0x4ce2, 0x4d74, 0x4d67, 0x4d9d, 0x4d11, 0x4dca, 0x4e34, 0x4d92, 0x4dca, 0x4d8c, 0x4d33, 0x4da0, 0x4db5, 0x4d3b, 0x4d32, 0x4d0f, 0x4d4f, 0x4cf7, 0x4da4, 0x4d97, 0x4e28, 0x4d40, 0x4d7d, 0x4d00, 0x4d56, 0x4e0a, 0x4cc8, 0x4e0d, 0x4d08, 0x4d21, 0x4d52, 0x4cce, 0x4d5a, 0x4de3, 0x4ced, 0x4ced, 0x4db9, 0x4dbd, 0x4e16, 0x4cf5, 0x4da1, 0x4d57, 0x4d4f, 0x4ddc, 0x4daf, 0x4dfa, 0x4db2, 0x4e26, 0x4d1c, 0x4d8a, 0x4d31, 0x4d88, 0x4cd3, 0x4da8, 0x4dac, 0x4d50, 0x4d91, 0x4d76, 0x4d56, 0x4d5b, 0x4dab, 0x4d56, 0x4d93, 0x4d6f, 0x4cef, 0x4d8e, 0x4ddb, 0x4d6a, 0x4dd8, 0x4db3, 0x4dff, 0x4d77, 0x4d73, +0x4e14, 0x4df9, 0x4e48, 0x4dc5, 0x4dbd, 0x4dcc, 0x4e10, 0x4ec3, 0x4df1, 0x4f5c, 0x4e1c, 0x4e5d, 0x4edc, 0x4df1, 0x4dc0, 0x4e2d, 0x4e62, 0x4de3, 0x4d61, 0x4e39, 0x4e3b, 0x4d79, 0x4e3f, 0x4d76, 0x4daf, 0x4dc8, 0x4e42, 0x4d8d, 0x4e79, 0x4f05, 0x4e44, 0x4e3d, 0x4dce, 0x4e92, 0x4eb7, 0x4df7, 0x4dc4, 0x4db0, 0x4da3, 0x4df3, 0x4db6, 0x4dd6, 0x4dc5, 0x4ea3, 0x4d9e, 0x4ec8, 0x4d7c, 0x4e22, 0x4ee2, 0x4d92, 0x4f08, 0x4db2, 0x4dc3, 0x4df6, 0x4d31, 0x4e50, 0x4e8f, 0x4dd7, 0x4d6e, 0x4e1a, 0x4e86, 0x4f14, 0x4d99, 0x4e85, 0x4d54, 0x4e46, 0x4e26, 0x4e60, 0x4e4b, 0x4f02, 0x4e22, 0x4e04, 0x4e08, 0x4e0e, 0x4e68, 0x4e4a, 0x4de0, 0x4e5a, 0x4e36, 0x4e3d, 0x4e54, 0x4de2, 0x4df7, 0x4e14, 0x4dc6, 0x4e2f, 0x4e56, 0x4d70, 0x4dd2, 0x4e2a, 0x4e35, 0x4e7f, 0x4e7c, 0x4e20, 0x4db4, 0x4d7e, +0x4dc6, 0x4dc2, 0x4e0e, 0x4d9c, 0x4df6, 0x4df8, 0x4dfa, 0x4eb0, 0x4dbc, 0x4ee4, 0x4df7, 0x4da7, 0x4e6e, 0x4d80, 0x4dd3, 0x4dcf, 0x4e02, 0x4d96, 0x4df7, 0x4e57, 0x4e54, 0x4db1, 0x4e11, 0x4d54, 0x4e15, 0x4de1, 0x4e29, 0x4d6c, 0x4dfd, 0x4e7b, 0x4e56, 0x4dfb, 0x4e05, 0x4db1, 0x4e80, 0x4dde, 0x4db5, 0x4d95, 0x4d5e, 0x4de3, 0x4e10, 0x4dea, 0x4d4f, 0x4e65, 0x4dbc, 0x4e8c, 0x4d8d, 0x4ddc, 0x4e2d, 0x4daf, 0x4eb2, 0x4d7d, 0x4d12, 0x4dfc, 0x4d73, 0x4dcf, 0x4e1f, 0x4ddf, 0x4da2, 0x4e58, 0x4e2c, 0x4e98, 0x4d5b, 0x4dec, 0x4d85, 0x4d9f, 0x4de6, 0x4e43, 0x4dca, 0x4e3e, 0x4e6e, 0x4db7, 0x4e2e, 0x4dc1, 0x4dc9, 0x4da4, 0x4dc9, 0x4e02, 0x4df8, 0x4e2f, 0x4e59, 0x4dfe, 0x4d43, 0x4e64, 0x4d80, 0x4ddd, 0x4e15, 0x4d57, 0x4e48, 0x4df3, 0x4dad, 0x4e2f, 0x4e47, 0x4e28, 0x4d94, 0x4db7, +0x4d5f, 0x4d44, 0x4de2, 0x4d6d, 0x4d9b, 0x4d02, 0x4dbe, 0x4e08, 0x4d52, 0x4e16, 0x4d7f, 0x4d66, 0x4e4e, 0x4d55, 0x4d0f, 0x4d7f, 0x4d95, 0x4d6e, 0x4ce8, 0x4dad, 0x4d69, 0x4d42, 0x4dd8, 0x4d33, 0x4d9f, 0x4d61, 0x4dcb, 0x4d43, 0x4dbe, 0x4e12, 0x4dd1, 0x4da1, 0x4d81, 0x4da9, 0x4dff, 0x4d57, 0x4d5b, 0x4cef, 0x4d36, 0x4ccd, 0x4d6a, 0x4d20, 0x4d73, 0x4e30, 0x4d5c, 0x4e02, 0x4d09, 0x4d13, 0x4dee, 0x4d08, 0x4e28, 0x4ce2, 0x4ca5, 0x4d53, 0x4ce4, 0x4d25, 0x4dec, 0x4d44, 0x4d3a, 0x4dc9, 0x4da0, 0x4e0f, 0x4d36, 0x4d80, 0x4c83, 0x4d4c, 0x4d64, 0x4da2, 0x4e08, 0x4e17, 0x4d3f, 0x4d3b, 0x4db3, 0x4d82, 0x4d60, 0x4d87, 0x4d58, 0x4d7a, 0x4d47, 0x4da7, 0x4d24, 0x4d1c, 0x4d2b, 0x4e06, 0x4d16, 0x4dc6, 0x4d87, 0x4cdf, 0x4d70, 0x4db9, 0x4d27, 0x4dc9, 0x4dbb, 0x4d8f, 0x4d3f, 0x4d16, +0x4e12, 0x4e6c, 0x4e94, 0x4e81, 0x4ec0, 0x4e60, 0x4e3b, 0x4f8e, 0x4df8, 0x4f5a, 0x4e88, 0x4e88, 0x4f1c, 0x4e40, 0x4dea, 0x4ddf, 0x4ecb, 0x4e4e, 0x4e15, 0x4e32, 0x4ec9, 0x4dc5, 0x4e88, 0x4dd2, 0x4e51, 0x4e38, 0x4e88, 0x4e03, 0x4e75, 0x4ef6, 0x4eda, 0x4e88, 0x4ea8, 0x4e77, 0x4ec2, 0x4df3, 0x4e12, 0x4e23, 0x4df5, 0x4e0a, 0x4e86, 0x4e65, 0x4df8, 0x4ede, 0x4e52, 0x4ea9, 0x4da0, 0x4e3d, 0x4f16, 0x4e37, 0x4ee0, 0x4df5, 0x4def, 0x4e7a, 0x4dc7, 0x4e6b, 0x4ea5, 0x4e02, 0x4e52, 0x4e35, 0x4e6f, 0x4f2c, 0x4dd0, 0x4e5d, 0x4e27, 0x4e36, 0x4e9b, 0x4e77, 0x4eaa, 0x4f73, 0x4e60, 0x4dfc, 0x4f07, 0x4e60, 0x4e77, 0x4dfd, 0x4e39, 0x4e7a, 0x4e32, 0x4e65, 0x4e35, 0x4e28, 0x4dfe, 0x4eb3, 0x4e20, 0x4e8f, 0x4e7a, 0x4e05, 0x4e5b, 0x4eca, 0x4dcf, 0x4ec3, 0x4eee, 0x4ea4, 0x4e05, 0x4ded, +0x4e2a, 0x4e81, 0x4e68, 0x4de3, 0x4e93, 0x4dc5, 0x4e6a, 0x4f2a, 0x4df5, 0x4fa3, 0x4e54, 0x4e50, 0x4edf, 0x4e46, 0x4e9a, 0x4e35, 0x4ef8, 0x4e70, 0x4da1, 0x4e3d, 0x4e71, 0x4dfb, 0x4e64, 0x4d8e, 0x4e2f, 0x4e3d, 0x4e51, 0x4dd6, 0x4ecd, 0x4ea0, 0x4ecf, 0x4eba, 0x4e64, 0x4e65, 0x4ed8, 0x4dfd, 0x4e11, 0x4e1a, 0x4dc1, 0x4e5c, 0x4e66, 0x4e31, 0x4e6d, 0x4efa, 0x4dfe, 0x4f06, 0x4dd9, 0x4e0a, 0x4eed, 0x4df1, 0x4ef5, 0x4e12, 0x4dc6, 0x4e56, 0x4e31, 0x4dec, 0x4e66, 0x4db6, 0x4d8c, 0x4e40, 0x4e38, 0x4f37, 0x4dc4, 0x4ebe, 0x4e42, 0x4de6, 0x4e8b, 0x4eab, 0x4e84, 0x4eee, 0x4ec7, 0x4e13, 0x4e45, 0x4e7c, 0x4ea5, 0x4e72, 0x4e7f, 0x4e91, 0x4e53, 0x4e74, 0x4e5f, 0x4e41, 0x4e9c, 0x4ea3, 0x4da1, 0x4e06, 0x4e0b, 0x4dce, 0x4e5a, 0x4ed8, 0x4deb, 0x4e5c, 0x4ecd, 0x4eaf, 0x4e17, 0x4dc0, +0x4de1, 0x4df5, 0x4e47, 0x4de4, 0x4e55, 0x4de7, 0x4e23, 0x4f36, 0x4e02, 0x4f54, 0x4e1d, 0x4e77, 0x4ef4, 0x4e3a, 0x4e11, 0x4e2f, 0x4ef2, 0x4dd7, 0x4d78, 0x4e6f, 0x4e4b, 0x4da1, 0x4dc0, 0x4df2, 0x4de6, 0x4e31, 0x4ed7, 0x4e12, 0x4e15, 0x4eba, 0x4e06, 0x4e6e, 0x4e1e, 0x4e11, 0x4e69, 0x4dc7, 0x4df4, 0x4d9a, 0x4dbb, 0x4e16, 0x4dd8, 0x4e22, 0x4dad, 0x4e5c, 0x4df8, 0x4ea6, 0x4d9d, 0x4e12, 0x4ec1, 0x4dd9, 0x4f1a, 0x4ded, 0x4d6c, 0x4de3, 0x4dc5, 0x4e41, 0x4e66, 0x4d96, 0x4def, 0x4e15, 0x4e17, 0x4ec8, 0x4da2, 0x4e8e, 0x4de3, 0x4de2, 0x4ead, 0x4e9c, 0x4e8d, 0x4f0e, 0x4e35, 0x4e42, 0x4ebd, 0x4e0f, 0x4e8e, 0x4e1b, 0x4e29, 0x4e37, 0x4e5f, 0x4e33, 0x4e74, 0x4e10, 0x4dc6, 0x4e6f, 0x4dd4, 0x4e07, 0x4e8f, 0x4d7c, 0x4da2, 0x4ea6, 0x4ddd, 0x4ea0, 0x4edc, 0x4e44, 0x4e3f, 0x4dcf, +0x4d64, 0x4dbc, 0x4e2a, 0x4d7b, 0x4e0c, 0x4d70, 0x4d5c, 0x4e7f, 0x4d22, 0x4e82, 0x4dc7, 0x4e34, 0x4eb8, 0x4d43, 0x4d93, 0x4db4, 0x4e62, 0x4d6c, 0x4d5d, 0x4df9, 0x4daf, 0x4d4c, 0x4d4d, 0x4d5e, 0x4dc0, 0x4d68, 0x4e15, 0x4d39, 0x4e00, 0x4e8d, 0x4df5, 0x4e3d, 0x4dbd, 0x4d3d, 0x4ddc, 0x4d68, 0x4d55, 0x4d32, 0x4cec, 0x4d58, 0x4d8d, 0x4dcc, 0x4d55, 0x4ded, 0x4dfd, 0x4e14, 0x4d4e, 0x4d69, 0x4e63, 0x4d60, 0x4e56, 0x4db8, 0x4d40, 0x4daf, 0x4d4b, 0x4db7, 0x4d88, 0x4d57, 0x4d78, 0x4df0, 0x4ddf, 0x4ea7, 0x4d74, 0x4ddf, 0x4d1f, 0x4d45, 0x4dda, 0x4dc0, 0x4e11, 0x4e5e, 0x4de0, 0x4dfb, 0x4db1, 0x4dbe, 0x4df9, 0x4df0, 0x4db3, 0x4de6, 0x4d9c, 0x4e03, 0x4e08, 0x4d73, 0x4d70, 0x4df1, 0x4dca, 0x4dc5, 0x4d97, 0x4d15, 0x4db0, 0x4e61, 0x4d67, 0x4dc5, 0x4e20, 0x4d85, 0x4d6b, 0x4d62, +0x4d80, 0x4df6, 0x4e6f, 0x4d6a, 0x4e44, 0x4dc4, 0x4e6c, 0x4e7a, 0x4dd6, 0x4f7d, 0x4dda, 0x4dc4, 0x4f2e, 0x4db6, 0x4e17, 0x4ddb, 0x4e6f, 0x4dae, 0x4d64, 0x4dd7, 0x4e04, 0x4dba, 0x4dc3, 0x4de4, 0x4e27, 0x4e3a, 0x4e65, 0x4d7c, 0x4e06, 0x4ead, 0x4dfa, 0x4e4d, 0x4df1, 0x4e0d, 0x4eb9, 0x4dd6, 0x4e4e, 0x4d75, 0x4dca, 0x4df0, 0x4dde, 0x4e13, 0x4de3, 0x4ef2, 0x4dfe, 0x4e7e, 0x4d4a, 0x4dd2, 0x4e5c, 0x4dac, 0x4e79, 0x4dce, 0x4d0a, 0x4e15, 0x4dfc, 0x4df1, 0x4e77, 0x4db2, 0x4d70, 0x4e5c, 0x4e18, 0x4ee6, 0x4db1, 0x4e6b, 0x4d81, 0x4e15, 0x4e18, 0x4e15, 0x4dff, 0x4e9d, 0x4e3a, 0x4e0b, 0x4e75, 0x4dee, 0x4e31, 0x4e0e, 0x4de0, 0x4e45, 0x4e2c, 0x4e78, 0x4e7c, 0x4da5, 0x4dad, 0x4edc, 0x4df9, 0x4e0d, 0x4e39, 0x4d71, 0x4d8a, 0x4e50, 0x4dd8, 0x4e38, 0x4e5e, 0x4ddd, 0x4e18, 0x4d7e, +0x4dd4, 0x4df2, 0x4e8f, 0x4dd6, 0x4e08, 0x4dc1, 0x4e1b, 0x4f76, 0x4dea, 0x4f19, 0x4e8a, 0x4eb4, 0x4f5a, 0x4de2, 0x4df5, 0x4e7d, 0x4e87, 0x4e40, 0x4db8, 0x4ea9, 0x4e79, 0x4da2, 0x4e33, 0x4d4a, 0x4e4b, 0x4e18, 0x4e44, 0x4e00, 0x4e51, 0x4e9f, 0x4e5d, 0x4e73, 0x4e09, 0x4e51, 0x4e4f, 0x4e52, 0x4ddf, 0x4dc7, 0x4dd6, 0x4e21, 0x4e2f, 0x4e62, 0x4ddb, 0x4ea4, 0x4e07, 0x4eb9, 0x4ded, 0x4dcc, 0x4ed5, 0x4dcd, 0x4ebf, 0x4dce, 0x4d8e, 0x4dd4, 0x4d90, 0x4e36, 0x4e69, 0x4de2, 0x4d98, 0x4e4c, 0x4e10, 0x4ecc, 0x4d5d, 0x4ebc, 0x4dd7, 0x4e00, 0x4e78, 0x4e8f, 0x4ea8, 0x4ee1, 0x4e82, 0x4e2e, 0x4e0b, 0x4e1d, 0x4e94, 0x4e36, 0x4dff, 0x4e1d, 0x4e2d, 0x4dd3, 0x4e2e, 0x4e02, 0x4def, 0x4e83, 0x4dc1, 0x4e30, 0x4e18, 0x4dc8, 0x4dcc, 0x4e7b, 0x4deb, 0x4e91, 0x4e53, 0x4ead, 0x4e39, 0x4de7, +0x4db6, 0x4dde, 0x4e7e, 0x4d9c, 0x4e4d, 0x4d7f, 0x4dd3, 0x4e1d, 0x4dee, 0x4efe, 0x4e96, 0x4e29, 0x4e9f, 0x4e12, 0x4dfb, 0x4e03, 0x4e55, 0x4e4d, 0x4d8e, 0x4df4, 0x4e23, 0x4dd3, 0x4dbf, 0x4dd2, 0x4e6f, 0x4dab, 0x4e07, 0x4e0d, 0x4e82, 0x4e89, 0x4e4c, 0x4e3f, 0x4e3b, 0x4e64, 0x4e44, 0x4e2d, 0x4db1, 0x4dc5, 0x4db7, 0x4dcf, 0x4e33, 0x4e54, 0x4e27, 0x4e12, 0x4e13, 0x4e28, 0x4d7e, 0x4df7, 0x4eb3, 0x4df0, 0x4eda, 0x4df1, 0x4d04, 0x4df4, 0x4d89, 0x4dfb, 0x4e5b, 0x4dd4, 0x4d9e, 0x4e56, 0x4e47, 0x4ec2, 0x4d55, 0x4e0c, 0x4d56, 0x4e2c, 0x4d9b, 0x4e3c, 0x4e5b, 0x4ed3, 0x4e76, 0x4de1, 0x4e24, 0x4e31, 0x4e21, 0x4dec, 0x4dfe, 0x4e35, 0x4e3a, 0x4e7f, 0x4e71, 0x4dc9, 0x4e07, 0x4ea7, 0x4dbf, 0x4e4d, 0x4e21, 0x4d4e, 0x4dff, 0x4e44, 0x4dbc, 0x4e34, 0x4e63, 0x4e9d, 0x4ddd, 0x4e09, +0x4d5f, 0x4d52, 0x4e04, 0x4d4d, 0x4dc9, 0x4d7b, 0x4e22, 0x4e97, 0x4dc6, 0x4ec4, 0x4e0e, 0x4e14, 0x4ea4, 0x4d64, 0x4dbc, 0x4df1, 0x4e04, 0x4d9f, 0x4db5, 0x4dcb, 0x4dbc, 0x4d69, 0x4dc0, 0x4da8, 0x4e3e, 0x4e16, 0x4e73, 0x4d5d, 0x4e6c, 0x4eb7, 0x4e6f, 0x4de6, 0x4dc8, 0x4e02, 0x4e9e, 0x4d83, 0x4d8c, 0x4d6f, 0x4d25, 0x4dfd, 0x4e12, 0x4d9a, 0x4d58, 0x4e95, 0x4de8, 0x4e74, 0x4d50, 0x4df8, 0x4ddf, 0x4e0e, 0x4eb7, 0x4de1, 0x4d5f, 0x4d95, 0x4d8a, 0x4dcf, 0x4e35, 0x4dc7, 0x4d95, 0x4db6, 0x4db7, 0x4f00, 0x4d61, 0x4dc9, 0x4daa, 0x4daf, 0x4e2e, 0x4e12, 0x4e12, 0x4ed4, 0x4e2f, 0x4db5, 0x4e30, 0x4dfc, 0x4e4e, 0x4e39, 0x4e06, 0x4e30, 0x4ddd, 0x4e11, 0x4e6b, 0x4dc2, 0x4d96, 0x4e6a, 0x4d42, 0x4e30, 0x4e1f, 0x4d21, 0x4de8, 0x4e8c, 0x4dbc, 0x4dcc, 0x4e03, 0x4e61, 0x4df3, 0x4e23, +0x4d73, 0x4d6b, 0x4e65, 0x4d83, 0x4e07, 0x4de4, 0x4e20, 0x4ecc, 0x4d8e, 0x4eca, 0x4ddf, 0x4dc7, 0x4ead, 0x4d93, 0x4d81, 0x4df7, 0x4e5a, 0x4dac, 0x4d5e, 0x4dd7, 0x4e0c, 0x4d53, 0x4db1, 0x4cc3, 0x4e09, 0x4dac, 0x4e44, 0x4d97, 0x4df3, 0x4e6c, 0x4e2d, 0x4da1, 0x4df0, 0x4df1, 0x4e35, 0x4d86, 0x4d8f, 0x4da9, 0x4ce6, 0x4d92, 0x4e33, 0x4e02, 0x4d57, 0x4e1e, 0x4d6f, 0x4e9b, 0x4cf6, 0x4db4, 0x4df2, 0x4e0a, 0x4e79, 0x4db6, 0x4d5e, 0x4d87, 0x4d94, 0x4d98, 0x4dd8, 0x4d9f, 0x4d9b, 0x4e07, 0x4db5, 0x4e90, 0x4d8f, 0x4e04, 0x4d37, 0x4df3, 0x4dbb, 0x4e0b, 0x4e46, 0x4e72, 0x4e38, 0x4d88, 0x4de0, 0x4dd0, 0x4e34, 0x4e1c, 0x4ddc, 0x4de9, 0x4df7, 0x4dc5, 0x4e26, 0x4dcb, 0x4dc6, 0x4e10, 0x4db4, 0x4dda, 0x4e2c, 0x4d42, 0x4dda, 0x4e34, 0x4df9, 0x4df6, 0x4e4c, 0x4e60, 0x4dce, 0x4da1, +0x4dfb, 0x4ddc, 0x4dfc, 0x4df6, 0x4e60, 0x4e79, 0x4ee5, 0x4f0d, 0x4e50, 0x4f64, 0x4e51, 0x4e14, 0x4f68, 0x4e42, 0x4e0e, 0x4dea, 0x4e93, 0x4e28, 0x4dd7, 0x4e3a, 0x4e8b, 0x4d3a, 0x4e6a, 0x4dd7, 0x4e04, 0x4e77, 0x4e54, 0x4de5, 0x4e6e, 0x4ead, 0x4e4d, 0x4ed8, 0x4e36, 0x4e13, 0x4ef5, 0x4e57, 0x4e79, 0x4df7, 0x4dca, 0x4dd7, 0x4dc8, 0x4e46, 0x4df8, 0x4ea0, 0x4e57, 0x4eab, 0x4dbd, 0x4de8, 0x4ebc, 0x4ddd, 0x4f0b, 0x4e75, 0x4d8e, 0x4e2c, 0x4d68, 0x4e38, 0x4e5d, 0x4de2, 0x4e27, 0x4e44, 0x4e80, 0x4f24, 0x4db1, 0x4e59, 0x4dcb, 0x4df5, 0x4e8c, 0x4e7c, 0x4ec9, 0x4eca, 0x4e37, 0x4e6b, 0x4e74, 0x4e1e, 0x4ebb, 0x4e4e, 0x4e39, 0x4e60, 0x4e2e, 0x4e6a, 0x4ebd, 0x4ddd, 0x4dd9, 0x4e88, 0x4db2, 0x4e21, 0x4de8, 0x4daf, 0x4e9e, 0x4e7e, 0x4e1d, 0x4e78, 0x4e9e, 0x4e69, 0x4e48, 0x4df0, +0x4e18, 0x4e15, 0x4e0d, 0x4d9d, 0x4de2, 0x4db6, 0x4e03, 0x4e90, 0x4db2, 0x4f64, 0x4e3c, 0x4e44, 0x4f07, 0x4e61, 0x4e19, 0x4e2a, 0x4e27, 0x4dea, 0x4dda, 0x4e0d, 0x4e2a, 0x4d6f, 0x4df2, 0x4dae, 0x4e27, 0x4e12, 0x4e69, 0x4d56, 0x4e61, 0x4ec9, 0x4e75, 0x4dfb, 0x4df1, 0x4e4b, 0x4e66, 0x4e00, 0x4df6, 0x4dd5, 0x4d9c, 0x4dd9, 0x4dc1, 0x4e0f, 0x4dff, 0x4e66, 0x4e12, 0x4e5e, 0x4dc5, 0x4e06, 0x4ea9, 0x4d9a, 0x4edd, 0x4d9c, 0x4d79, 0x4dfa, 0x4dec, 0x4de7, 0x4e23, 0x4dde, 0x4d74, 0x4e25, 0x4e5e, 0x4ed2, 0x4dbe, 0x4eb2, 0x4d68, 0x4df8, 0x4e4e, 0x4e5f, 0x4e72, 0x4eae, 0x4e68, 0x4d79, 0x4e1b, 0x4df4, 0x4e5c, 0x4e0b, 0x4e38, 0x4e14, 0x4e30, 0x4e1e, 0x4e6e, 0x4da5, 0x4e15, 0x4e83, 0x4d85, 0x4e05, 0x4dc2, 0x4d58, 0x4dfe, 0x4e6a, 0x4dbd, 0x4df2, 0x4e78, 0x4e34, 0x4e58, 0x4de8, +0x4ed2, 0x4e61, 0x4e8f, 0x4ebf, 0x4ef5, 0x4e4a, 0x4ed0, 0x4f75, 0x4dcc, 0x500b, 0x4e3a, 0x4ed7, 0x4f6a, 0x4e6b, 0x4e3d, 0x4e69, 0x4ee1, 0x4ef6, 0x4de0, 0x4e8a, 0x4ea9, 0x4dd9, 0x4e98, 0x4e63, 0x4e1a, 0x4eb5, 0x4f27, 0x4dfb, 0x4eec, 0x4f05, 0x4ee4, 0x4ec3, 0x4ede, 0x4ed6, 0x4eee, 0x4e11, 0x4e56, 0x4dc8, 0x4e3e, 0x4e6d, 0x4ebb, 0x4e82, 0x4e5e, 0x4f27, 0x4ec1, 0x4f29, 0x4dc5, 0x4e07, 0x4f4b, 0x4e3a, 0x4f06, 0x4e9b, 0x4e12, 0x4e68, 0x4e1b, 0x4e6c, 0x4ec0, 0x4e53, 0x4dd4, 0x4e71, 0x4ea6, 0x4f59, 0x4d84, 0x4ed9, 0x4dd2, 0x4e56, 0x4ecf, 0x4e41, 0x4e5b, 0x4f78, 0x4eaa, 0x4ee4, 0x4ec2, 0x4e0f, 0x4ea8, 0x4e99, 0x4e0f, 0x4ed0, 0x4e36, 0x4e7e, 0x4ea4, 0x4e09, 0x4ea2, 0x4ed1, 0x4e45, 0x4e2d, 0x4e7f, 0x4dfe, 0x4ea7, 0x4f08, 0x4e5b, 0x4f1e, 0x4f1b, 0x4e8d, 0x4e63, 0x4e1f, +0x4d50, 0x4d58, 0x4dc6, 0x4d63, 0x4d51, 0x4cf4, 0x4dea, 0x4e93, 0x4d63, 0x4e41, 0x4d61, 0x4dd5, 0x4e3a, 0x4d60, 0x4dd1, 0x4d9f, 0x4e21, 0x4d1d, 0x4d52, 0x4d9e, 0x4df7, 0x4d53, 0x4d8c, 0x4d57, 0x4dad, 0x4d52, 0x4ddb, 0x4ccb, 0x4e0b, 0x4e33, 0x4e0d, 0x4e17, 0x4d8e, 0x4d64, 0x4e15, 0x4d7d, 0x4db1, 0x4d3c, 0x4d35, 0x4d81, 0x4d5b, 0x4ddf, 0x4d29, 0x4e15, 0x4d2c, 0x4dbe, 0x4ca5, 0x4d96, 0x4dd8, 0x4d8b, 0x4deb, 0x4d1f, 0x4d1e, 0x4d79, 0x4ce2, 0x4d9c, 0x4de9, 0x4d13, 0x4d46, 0x4d99, 0x4ddf, 0x4e32, 0x4d14, 0x4dae, 0x4d49, 0x4d7d, 0x4dd3, 0x4dc0, 0x4e07, 0x4e17, 0x4de2, 0x4d3c, 0x4dcc, 0x4dd0, 0x4dff, 0x4d24, 0x4d49, 0x4dc4, 0x4d5e, 0x4d94, 0x4e1d, 0x4d76, 0x4d29, 0x4dce, 0x4d50, 0x4d84, 0x4d8a, 0x4d39, 0x4dcc, 0x4dd3, 0x4d6b, 0x4de9, 0x4e08, 0x4d81, 0x4d94, 0x4d8a, +0x4d9f, 0x4e04, 0x4e12, 0x4d91, 0x4df5, 0x4d8b, 0x4dbb, 0x4ea8, 0x4da5, 0x4edd, 0x4da2, 0x4da1, 0x4e67, 0x4dae, 0x4db6, 0x4df3, 0x4e3c, 0x4d05, 0x4d7d, 0x4dcd, 0x4dbd, 0x4d86, 0x4da9, 0x4d85, 0x4dc9, 0x4daa, 0x4e3d, 0x4d34, 0x4dfa, 0x4e65, 0x4e16, 0x4ddf, 0x4dae, 0x4d7e, 0x4e6f, 0x4d42, 0x4d8c, 0x4d5c, 0x4d39, 0x4e04, 0x4d90, 0x4da6, 0x4d72, 0x4e42, 0x4e03, 0x4e15, 0x4d9b, 0x4dc6, 0x4e18, 0x4d68, 0x4e3e, 0x4da7, 0x4cfb, 0x4db9, 0x4db4, 0x4d47, 0x4dac, 0x4d0d, 0x4d91, 0x4de7, 0x4dcc, 0x4ece, 0x4d39, 0x4ddb, 0x4d3f, 0x4d17, 0x4e3d, 0x4e87, 0x4da9, 0x4e9d, 0x4df6, 0x4dba, 0x4de3, 0x4d73, 0x4ddf, 0x4d6c, 0x4df5, 0x4dc4, 0x4d89, 0x4dac, 0x4e55, 0x4d8d, 0x4d29, 0x4e7c, 0x4d3e, 0x4dc3, 0x4dc6, 0x4d16, 0x4db1, 0x4db6, 0x4d2e, 0x4e10, 0x4e8f, 0x4e53, 0x4def, 0x4d93, +0x4d7c, 0x4dc3, 0x4e09, 0x4e1d, 0x4e57, 0x4dfd, 0x4ea6, 0x4f29, 0x4e11, 0x4f37, 0x4e26, 0x4e3f, 0x4f1f, 0x4e26, 0x4e37, 0x4e0b, 0x4ea0, 0x4e58, 0x4d9f, 0x4df1, 0x4e40, 0x4d80, 0x4e42, 0x4da5, 0x4e6b, 0x4e59, 0x4e1a, 0x4dc2, 0x4e18, 0x4eae, 0x4eb2, 0x4e4e, 0x4e46, 0x4e70, 0x4e78, 0x4de5, 0x4dfb, 0x4d66, 0x4ddb, 0x4dcf, 0x4de8, 0x4e80, 0x4e25, 0x4efd, 0x4e0a, 0x4e74, 0x4d9c, 0x4e3a, 0x4ec3, 0x4e2a, 0x4ea9, 0x4db9, 0x4d98, 0x4e32, 0x4dfd, 0x4e29, 0x4e8b, 0x4da4, 0x4dda, 0x4e59, 0x4e6d, 0x4f14, 0x4da8, 0x4e73, 0x4e03, 0x4e0e, 0x4e3f, 0x4e4f, 0x4e67, 0x4ece, 0x4e6d, 0x4db3, 0x4e71, 0x4e03, 0x4e4d, 0x4e1d, 0x4e9e, 0x4deb, 0x4dd6, 0x4de6, 0x4ebf, 0x4da2, 0x4e25, 0x4eb3, 0x4dbd, 0x4e42, 0x4e33, 0x4dfa, 0x4e18, 0x4e34, 0x4db7, 0x4e62, 0x4e91, 0x4e55, 0x4e39, 0x4e0e, +0x4e1c, 0x4e0e, 0x4ea5, 0x4dfe, 0x4e42, 0x4e24, 0x4ee6, 0x4f64, 0x4e07, 0x4f49, 0x4e23, 0x4e79, 0x4f00, 0x4e39, 0x4e49, 0x4e64, 0x4efa, 0x4e6b, 0x4dcb, 0x4ebb, 0x4dec, 0x4e02, 0x4e6b, 0x4dad, 0x4e53, 0x4e8d, 0x4e1b, 0x4dbe, 0x4e5f, 0x4f4a, 0x4ea3, 0x4e1b, 0x4e26, 0x4e29, 0x4e9b, 0x4e22, 0x4e06, 0x4e0a, 0x4e12, 0x4dd4, 0x4e83, 0x4e6b, 0x4e03, 0x4ebb, 0x4e0e, 0x4eef, 0x4db8, 0x4de8, 0x4ef8, 0x4dfa, 0x4e70, 0x4dfe, 0x4db4, 0x4e48, 0x4db3, 0x4dd6, 0x4e90, 0x4e0f, 0x4e43, 0x4eb7, 0x4eb4, 0x4f39, 0x4db4, 0x4eea, 0x4dc9, 0x4e4f, 0x4e79, 0x4e82, 0x4e4d, 0x4ebe, 0x4ea0, 0x4e1d, 0x4e88, 0x4e2a, 0x4ea2, 0x4dff, 0x4e4a, 0x4e1e, 0x4e56, 0x4e42, 0x4eee, 0x4e13, 0x4e05, 0x4e8d, 0x4d84, 0x4e5f, 0x4e72, 0x4da9, 0x4e65, 0x4e82, 0x4dd0, 0x4eec, 0x4ebf, 0x4e6d, 0x4e05, 0x4e34, +0x4df7, 0x4df8, 0x4e19, 0x4dc2, 0x4e08, 0x4d96, 0x4e15, 0x4e8b, 0x4dd6, 0x4ee6, 0x4e2a, 0x4e81, 0x4eb0, 0x4dbc, 0x4db3, 0x4dc1, 0x4e4a, 0x4e07, 0x4de6, 0x4e38, 0x4e01, 0x4d73, 0x4de0, 0x4d6b, 0x4e18, 0x4e38, 0x4e4c, 0x4d81, 0x4e65, 0x4efa, 0x4e48, 0x4e20, 0x4e19, 0x4dc1, 0x4e7b, 0x4dd9, 0x4e18, 0x4dd3, 0x4d4c, 0x4ddd, 0x4dc0, 0x4e14, 0x4d8a, 0x4e9f, 0x4dbf, 0x4e45, 0x4d36, 0x4e03, 0x4e7c, 0x4d8b, 0x4e7a, 0x4dc3, 0x4d4d, 0x4dff, 0x4d84, 0x4ddd, 0x4e76, 0x4d7d, 0x4d74, 0x4e02, 0x4e10, 0x4e5f, 0x4d8c, 0x4e26, 0x4d8b, 0x4dd5, 0x4e33, 0x4e0a, 0x4df0, 0x4ee1, 0x4e21, 0x4d9d, 0x4e45, 0x4e22, 0x4e2a, 0x4de6, 0x4e22, 0x4e4c, 0x4de5, 0x4e0e, 0x4e9d, 0x4d29, 0x4d9c, 0x4e5e, 0x4d53, 0x4e15, 0x4e02, 0x4d64, 0x4dd4, 0x4e46, 0x4d64, 0x4e19, 0x4e5f, 0x4e3a, 0x4d78, 0x4db6, +0x4dec, 0x4ddb, 0x4e68, 0x4d9e, 0x4e3c, 0x4e3e, 0x4e41, 0x4f6c, 0x4e24, 0x4f2a, 0x4e2e, 0x4e7c, 0x4f37, 0x4dde, 0x4dd5, 0x4e75, 0x4eb7, 0x4dc9, 0x4dcb, 0x4e36, 0x4e72, 0x4df6, 0x4e52, 0x4db5, 0x4dfa, 0x4e34, 0x4ebf, 0x4dcd, 0x4e14, 0x4edf, 0x4e6b, 0x4e8b, 0x4e41, 0x4e5f, 0x4e82, 0x4dd6, 0x4e0a, 0x4db8, 0x4dc6, 0x4e34, 0x4e16, 0x4eb4, 0x4e02, 0x4ed2, 0x4e2d, 0x4ef5, 0x4dc5, 0x4e36, 0x4eb4, 0x4df0, 0x4f4d, 0x4de8, 0x4dac, 0x4e0a, 0x4d9c, 0x4e45, 0x4e79, 0x4dd1, 0x4db0, 0x4ec1, 0x4dfb, 0x4ee0, 0x4d70, 0x4e88, 0x4df2, 0x4df6, 0x4e3f, 0x4e33, 0x4ef4, 0x4f0b, 0x4e75, 0x4e45, 0x4e05, 0x4d91, 0x4e72, 0x4e1b, 0x4e66, 0x4e32, 0x4dd1, 0x4e14, 0x4e63, 0x4e10, 0x4df1, 0x4ebf, 0x4d89, 0x4e6a, 0x4e7b, 0x4d91, 0x4e3f, 0x4e61, 0x4e31, 0x4e7f, 0x4ddd, 0x4e16, 0x4e2b, 0x4de8, +0x4d4a, 0x4d3f, 0x4d6a, 0x4d6a, 0x4e2b, 0x4d74, 0x4de3, 0x4eb1, 0x4dd9, 0x4e75, 0x4da3, 0x4dde, 0x4e51, 0x4ded, 0x4e0a, 0x4d83, 0x4e72, 0x4dd7, 0x4d43, 0x4d74, 0x4e0c, 0x4da8, 0x4df0, 0x4d54, 0x4df0, 0x4e0a, 0x4e25, 0x4d74, 0x4e0f, 0x4e13, 0x4e18, 0x4e0e, 0x4e0c, 0x4dfa, 0x4e2f, 0x4d82, 0x4dbe, 0x4d6a, 0x4d42, 0x4d8b, 0x4ce1, 0x4dc9, 0x4d63, 0x4e1f, 0x4db1, 0x4e11, 0x4d22, 0x4df3, 0x4e58, 0x4d7d, 0x4ec2, 0x4d84, 0x4d46, 0x4d6e, 0x4d20, 0x4d68, 0x4dfe, 0x4d39, 0x4d23, 0x4d87, 0x4d7e, 0x4ec7, 0x4d2a, 0x4dbf, 0x4d44, 0x4d8f, 0x4e0a, 0x4dff, 0x4e30, 0x4e2e, 0x4d94, 0x4d89, 0x4e04, 0x4d72, 0x4dee, 0x4d41, 0x4dd4, 0x4d58, 0x4dba, 0x4d8f, 0x4e19, 0x4dac, 0x4db5, 0x4dea, 0x4ce2, 0x4e1a, 0x4d87, 0x4d54, 0x4d86, 0x4e3e, 0x4e04, 0x4e41, 0x4dd4, 0x4df5, 0x4e28, 0x4d92, +0x4d5e, 0x4dba, 0x4df8, 0x4d94, 0x4df0, 0x4d7d, 0x4dfc, 0x4e83, 0x4df1, 0x4e98, 0x4dd4, 0x4dc6, 0x4e84, 0x4daa, 0x4d97, 0x4d98, 0x4dfd, 0x4d9e, 0x4d4a, 0x4dd7, 0x4d7e, 0x4da5, 0x4dbf, 0x4dd1, 0x4de8, 0x4db7, 0x4dfd, 0x4d45, 0x4dba, 0x4e6c, 0x4df2, 0x4dfc, 0x4dc2, 0x4dad, 0x4e19, 0x4d4d, 0x4df1, 0x4dab, 0x4d76, 0x4da8, 0x4d60, 0x4e55, 0x4dab, 0x4e58, 0x4d6a, 0x4e07, 0x4d48, 0x4d82, 0x4e78, 0x4d73, 0x4e49, 0x4dbe, 0x4d0c, 0x4d80, 0x4dbb, 0x4d67, 0x4e27, 0x4d34, 0x4d72, 0x4de1, 0x4e1d, 0x4e81, 0x4cf1, 0x4e18, 0x4d84, 0x4d8d, 0x4e1b, 0x4e4d, 0x4dd0, 0x4e69, 0x4dc1, 0x4da0, 0x4e4a, 0x4d7b, 0x4dc0, 0x4d4f, 0x4de4, 0x4e1b, 0x4da1, 0x4e14, 0x4e2c, 0x4d53, 0x4d67, 0x4ecd, 0x4d98, 0x4dc2, 0x4dff, 0x4d37, 0x4deb, 0x4dcb, 0x4cff, 0x4de8, 0x4e0a, 0x4d80, 0x4dba, 0x4d6a, +0x4d78, 0x4d5c, 0x4dbd, 0x4d18, 0x4d9d, 0x4d98, 0x4d95, 0x4e53, 0x4d96, 0x4e9f, 0x4db1, 0x4dea, 0x4ea8, 0x4d7f, 0x4d8b, 0x4d7a, 0x4de6, 0x4d5d, 0x4d91, 0x4da5, 0x4da8, 0x4d38, 0x4ddd, 0x4d87, 0x4d57, 0x4dfd, 0x4e38, 0x4d7b, 0x4d9a, 0x4e34, 0x4e26, 0x4da2, 0x4dc3, 0x4d63, 0x4de6, 0x4d54, 0x4dec, 0x4cfb, 0x4d33, 0x4d01, 0x4d50, 0x4da9, 0x4da2, 0x4e13, 0x4dbf, 0x4dff, 0x4d20, 0x4de2, 0x4e2b, 0x4d73, 0x4e87, 0x4d96, 0x4ce3, 0x4d66, 0x4d63, 0x4d8a, 0x4e2e, 0x4d32, 0x4d64, 0x4da9, 0x4da7, 0x4e99, 0x4cff, 0x4e26, 0x4d53, 0x4d79, 0x4df7, 0x4daf, 0x4e47, 0x4e48, 0x4d6a, 0x4dc0, 0x4ddd, 0x4d4d, 0x4dfb, 0x4d9b, 0x4db0, 0x4d67, 0x4ddb, 0x4dfc, 0x4d88, 0x4d4f, 0x4cfd, 0x4e65, 0x4d56, 0x4dca, 0x4dcb, 0x4cdd, 0x4d73, 0x4db6, 0x4d42, 0x4dae, 0x4e26, 0x4d76, 0x4d67, 0x4d82, +0x4dbf, 0x4df6, 0x4e63, 0x4dbc, 0x4edf, 0x4e0f, 0x4dfc, 0x4ecc, 0x4e07, 0x4f24, 0x4e00, 0x4e3b, 0x4f2d, 0x4e76, 0x4e0c, 0x4d9b, 0x4ecf, 0x4e60, 0x4df9, 0x4e4e, 0x4e0e, 0x4dd0, 0x4e7d, 0x4dfb, 0x4e65, 0x4eab, 0x4e78, 0x4e0c, 0x4e44, 0x4e4c, 0x4e70, 0x4e9f, 0x4e78, 0x4e01, 0x4e8d, 0x4e02, 0x4e1e, 0x4dcd, 0x4dce, 0x4dac, 0x4e25, 0x4e11, 0x4df9, 0x4ee4, 0x4e60, 0x4eb6, 0x4dc2, 0x4e32, 0x4f0f, 0x4dad, 0x4f16, 0x4dac, 0x4d37, 0x4e75, 0x4daf, 0x4df5, 0x4e91, 0x4db6, 0x4dc3, 0x4e51, 0x4e1a, 0x4f04, 0x4dd3, 0x4e22, 0x4dcd, 0x4dd4, 0x4e5a, 0x4e38, 0x4e9f, 0x4e7a, 0x4ea4, 0x4e59, 0x4e63, 0x4e09, 0x4e3f, 0x4dff, 0x4e0b, 0x4e1b, 0x4e1b, 0x4e7a, 0x4e5f, 0x4d96, 0x4dc5, 0x4e7d, 0x4d96, 0x4e22, 0x4e39, 0x4d5a, 0x4e54, 0x4eb5, 0x4e10, 0x4e66, 0x4e83, 0x4e2c, 0x4e34, 0x4d5a, +0x4d71, 0x4dd1, 0x4e56, 0x4d84, 0x4dcc, 0x4d86, 0x4e2f, 0x4e5a, 0x4dc0, 0x4ea7, 0x4e1e, 0x4e25, 0x4ea5, 0x4d59, 0x4d96, 0x4e00, 0x4e1c, 0x4d7f, 0x4d79, 0x4e33, 0x4d81, 0x4d99, 0x4d92, 0x4d4f, 0x4d9b, 0x4dec, 0x4e45, 0x4d44, 0x4dcf, 0x4e43, 0x4e26, 0x4dfe, 0x4dd8, 0x4e01, 0x4e6b, 0x4dd2, 0x4ddd, 0x4db8, 0x4d2e, 0x4dec, 0x4de0, 0x4e0f, 0x4da8, 0x4ed9, 0x4da5, 0x4e7f, 0x4cfb, 0x4d7b, 0x4e07, 0x4da2, 0x4e9f, 0x4d95, 0x4d3b, 0x4db7, 0x4da1, 0x4dc7, 0x4dfb, 0x4d73, 0x4d74, 0x4dfb, 0x4df9, 0x4ed7, 0x4d61, 0x4de7, 0x4d74, 0x4db0, 0x4da0, 0x4e05, 0x4e52, 0x4e67, 0x4e3b, 0x4d86, 0x4dca, 0x4ded, 0x4d7e, 0x4d87, 0x4dee, 0x4dec, 0x4dd8, 0x4df7, 0x4e19, 0x4d39, 0x4da2, 0x4e7b, 0x4d5f, 0x4de3, 0x4de7, 0x4d6e, 0x4dad, 0x4e39, 0x4d1b, 0x4e13, 0x4dfe, 0x4de6, 0x4dad, 0x4dd7, +0x4e08, 0x4de7, 0x4e3b, 0x4e57, 0x4ec6, 0x4e89, 0x4eae, 0x4f6b, 0x4e5a, 0x4fbb, 0x4e68, 0x4e30, 0x4f54, 0x4e46, 0x4e31, 0x4e01, 0x4f2d, 0x4e6e, 0x4e0a, 0x4e3e, 0x4ead, 0x4dd6, 0x4e96, 0x4e12, 0x4e62, 0x4e8d, 0x4ec0, 0x4e03, 0x4e58, 0x4eec, 0x4ea5, 0x4eac, 0x4e98, 0x4e68, 0x4efa, 0x4e20, 0x4e2d, 0x4e0a, 0x4e29, 0x4e36, 0x4e62, 0x4e6e, 0x4dc5, 0x4ee7, 0x4e9f, 0x4ef0, 0x4e06, 0x4e0e, 0x4f08, 0x4df4, 0x4f16, 0x4dc9, 0x4d49, 0x4e98, 0x4dcd, 0x4e73, 0x4ecb, 0x4e7e, 0x4e22, 0x4e87, 0x4e90, 0x4f22, 0x4dd9, 0x4ed8, 0x4e21, 0x4e27, 0x4e54, 0x4e73, 0x4e8d, 0x4f3b, 0x4e98, 0x4dfe, 0x4ec4, 0x4e22, 0x4e8b, 0x4e79, 0x4e10, 0x4e68, 0x4e06, 0x4e7a, 0x4ef9, 0x4e1c, 0x4e11, 0x4e9c, 0x4dc7, 0x4e2a, 0x4dec, 0x4e0c, 0x4e55, 0x4e89, 0x4e5f, 0x4f06, 0x4eaf, 0x4e44, 0x4ea0, 0x4e10, +0x4dbc, 0x4dc0, 0x4e13, 0x4da8, 0x4e6c, 0x4e0f, 0x4e94, 0x4ee8, 0x4df0, 0x4f1d, 0x4e41, 0x4e33, 0x4f18, 0x4dbd, 0x4df9, 0x4e19, 0x4e6e, 0x4d98, 0x4d78, 0x4ddf, 0x4e5e, 0x4dad, 0x4dbf, 0x4d88, 0x4e07, 0x4e26, 0x4e1c, 0x4dd3, 0x4e6d, 0x4ef3, 0x4e99, 0x4e3d, 0x4e3c, 0x4e6b, 0x4e6f, 0x4e0e, 0x4df7, 0x4dab, 0x4dd2, 0x4e20, 0x4e18, 0x4dfe, 0x4da4, 0x4e68, 0x4e1e, 0x4e3d, 0x4d7f, 0x4df2, 0x4eb9, 0x4dda, 0x4ec6, 0x4ddb, 0x4d6c, 0x4e1c, 0x4d9e, 0x4e23, 0x4e36, 0x4d74, 0x4dd5, 0x4e31, 0x4e36, 0x4f13, 0x4d62, 0x4e07, 0x4d70, 0x4df5, 0x4e70, 0x4e46, 0x4e5d, 0x4eb4, 0x4e6d, 0x4de1, 0x4e64, 0x4e17, 0x4e36, 0x4e2f, 0x4e29, 0x4e32, 0x4dde, 0x4dc9, 0x4e74, 0x4de5, 0x4de6, 0x4e52, 0x4da3, 0x4e0e, 0x4e4b, 0x4daf, 0x4dec, 0x4ebe, 0x4dc5, 0x4e10, 0x4e83, 0x4e8d, 0x4e13, 0x4e0d, +0x4de6, 0x4e03, 0x4e4f, 0x4d8b, 0x4e9b, 0x4e0f, 0x4ea4, 0x4ed6, 0x4dca, 0x4f1d, 0x4e28, 0x4e48, 0x4eff, 0x4e00, 0x4e96, 0x4e11, 0x4eb8, 0x4dae, 0x4df2, 0x4e6d, 0x4e65, 0x4e1a, 0x4e33, 0x4e04, 0x4e00, 0x4e74, 0x4eca, 0x4df9, 0x4e32, 0x4e8c, 0x4eac, 0x4e81, 0x4e27, 0x4e2a, 0x4e53, 0x4de1, 0x4df1, 0x4d9c, 0x4dd9, 0x4e37, 0x4e26, 0x4e2f, 0x4d63, 0x4edb, 0x4e62, 0x4ebd, 0x4dd5, 0x4e05, 0x4eb9, 0x4dd1, 0x4f1c, 0x4dee, 0x4d5f, 0x4e2c, 0x4e1e, 0x4e07, 0x4e03, 0x4ddf, 0x4dc5, 0x4dd1, 0x4e05, 0x4edb, 0x4dca, 0x4e5a, 0x4d80, 0x4dd5, 0x4e75, 0x4e6a, 0x4e69, 0x4eb3, 0x4e49, 0x4e88, 0x4ea2, 0x4e28, 0x4ea6, 0x4e21, 0x4e0a, 0x4e2f, 0x4e39, 0x4e43, 0x4e3b, 0x4e07, 0x4d9a, 0x4e97, 0x4d98, 0x4e81, 0x4dd9, 0x4d1d, 0x4e15, 0x4e7c, 0x4e15, 0x4e48, 0x4ec0, 0x4e99, 0x4e31, 0x4e50, +0x4d4e, 0x4dcf, 0x4e16, 0x4e0f, 0x4e3d, 0x4d5b, 0x4dd0, 0x4ed8, 0x4dfa, 0x4f4d, 0x4dbd, 0x4e5d, 0x4e9b, 0x4d9b, 0x4e37, 0x4dcd, 0x4e8e, 0x4e45, 0x4d87, 0x4dfa, 0x4e43, 0x4dd6, 0x4e1c, 0x4d8a, 0x4e32, 0x4ddb, 0x4e30, 0x4d75, 0x4db6, 0x4eca, 0x4dcd, 0x4e08, 0x4e13, 0x4e61, 0x4e35, 0x4dd9, 0x4dbc, 0x4d9e, 0x4d85, 0x4dfe, 0x4e2a, 0x4e31, 0x4d76, 0x4e50, 0x4dcc, 0x4e8e, 0x4d2d, 0x4de9, 0x4eaf, 0x4d8a, 0x4ebd, 0x4db0, 0x4d28, 0x4def, 0x4da2, 0x4db8, 0x4e71, 0x4dc0, 0x4d07, 0x4dd9, 0x4e0d, 0x4eec, 0x4dd4, 0x4dff, 0x4d97, 0x4ded, 0x4e33, 0x4e55, 0x4e1f, 0x4e88, 0x4e25, 0x4da1, 0x4e0d, 0x4de9, 0x4e00, 0x4dc7, 0x4de5, 0x4dc9, 0x4e36, 0x4dd4, 0x4eae, 0x4df1, 0x4e29, 0x4ecc, 0x4d81, 0x4e1d, 0x4e1a, 0x4d93, 0x4dd0, 0x4e67, 0x4ddf, 0x4e49, 0x4e29, 0x4dfc, 0x4e4e, 0x4e15, +0x4d53, 0x4d54, 0x4dcb, 0x4d20, 0x4d9f, 0x4d7b, 0x4db1, 0x4e61, 0x4d86, 0x4e2b, 0x4d85, 0x4dca, 0x4e88, 0x4d8f, 0x4d7c, 0x4dbd, 0x4dd1, 0x4d53, 0x4cf8, 0x4e33, 0x4daa, 0x4d52, 0x4d77, 0x4d28, 0x4db3, 0x4db7, 0x4da2, 0x4d5f, 0x4d8b, 0x4e40, 0x4e0a, 0x4d4e, 0x4d44, 0x4d89, 0x4dd4, 0x4ced, 0x4d7e, 0x4d23, 0x4d3b, 0x4d33, 0x4d97, 0x4dbe, 0x4d4e, 0x4e18, 0x4d25, 0x4e37, 0x4cec, 0x4d58, 0x4dd8, 0x4d79, 0x4e3c, 0x4d8d, 0x4d0e, 0x4d56, 0x4ce2, 0x4d47, 0x4dec, 0x4d34, 0x4d24, 0x4df8, 0x4d54, 0x4dc0, 0x4ce1, 0x4db2, 0x4d4d, 0x4d59, 0x4d7b, 0x4db2, 0x4db9, 0x4e11, 0x4d44, 0x4daa, 0x4dc6, 0x4d61, 0x4db8, 0x4d7d, 0x4d94, 0x4dc4, 0x4d64, 0x4da8, 0x4db3, 0x4d5b, 0x4d48, 0x4e4c, 0x4d38, 0x4cf7, 0x4dda, 0x4ce7, 0x4de8, 0x4de0, 0x4d34, 0x4dc4, 0x4e01, 0x4db9, 0x4d72, 0x4d31, +0x4d50, 0x4d8a, 0x4e4e, 0x4d70, 0x4e36, 0x4db3, 0x4e2c, 0x4ec3, 0x4de3, 0x4f03, 0x4e28, 0x4e59, 0x4ec1, 0x4dee, 0x4db6, 0x4dfa, 0x4e6c, 0x4de5, 0x4d40, 0x4dc9, 0x4e59, 0x4d89, 0x4dc7, 0x4da5, 0x4d83, 0x4e48, 0x4e69, 0x4df2, 0x4e0e, 0x4ebb, 0x4e4c, 0x4e39, 0x4e07, 0x4e1c, 0x4e5c, 0x4db9, 0x4e05, 0x4d7f, 0x4d54, 0x4de6, 0x4dca, 0x4df7, 0x4d7c, 0x4e50, 0x4e43, 0x4e69, 0x4da0, 0x4e1d, 0x4e57, 0x4db8, 0x4eb1, 0x4e23, 0x4d6d, 0x4e1c, 0x4d74, 0x4e16, 0x4e3b, 0x4dcc, 0x4d94, 0x4e5b, 0x4e25, 0x4ec5, 0x4d65, 0x4e1c, 0x4d5b, 0x4ded, 0x4e12, 0x4e06, 0x4e1a, 0x4eb6, 0x4de4, 0x4dbf, 0x4e1a, 0x4e3b, 0x4e57, 0x4dff, 0x4dd6, 0x4e6a, 0x4dc5, 0x4e4f, 0x4e81, 0x4d7e, 0x4dc1, 0x4e84, 0x4dd8, 0x4dff, 0x4e2f, 0x4dc2, 0x4db1, 0x4e70, 0x4de1, 0x4de9, 0x4e31, 0x4e11, 0x4e46, 0x4dbf, +0x4daa, 0x4da3, 0x4dcd, 0x4dce, 0x4d97, 0x4d78, 0x4e0a, 0x4eeb, 0x4ddb, 0x4f2f, 0x4dbe, 0x4e55, 0x4eca, 0x4e37, 0x4deb, 0x4d90, 0x4e6f, 0x4dbd, 0x4d88, 0x4e24, 0x4d99, 0x4d4a, 0x4dd8, 0x4ceb, 0x4d9c, 0x4e53, 0x4e45, 0x4d8f, 0x4dc8, 0x4e40, 0x4e47, 0x4dff, 0x4e47, 0x4dba, 0x4e4b, 0x4d96, 0x4dc2, 0x4db6, 0x4d80, 0x4dbc, 0x4d66, 0x4dec, 0x4d6b, 0x4e8e, 0x4e05, 0x4e1c, 0x4d0c, 0x4da3, 0x4e61, 0x4d3a, 0x4e7c, 0x4d5f, 0x4d0d, 0x4db2, 0x4db0, 0x4dec, 0x4dbd, 0x4d72, 0x4d40, 0x4db3, 0x4e06, 0x4e52, 0x4d18, 0x4e65, 0x4d80, 0x4d43, 0x4e0b, 0x4dc6, 0x4e60, 0x4e71, 0x4e0e, 0x4d92, 0x4e0a, 0x4d7c, 0x4dbb, 0x4d6b, 0x4df5, 0x4d64, 0x4d99, 0x4d9a, 0x4de1, 0x4d52, 0x4d93, 0x4de8, 0x4d70, 0x4e12, 0x4db2, 0x4d20, 0x4de8, 0x4df9, 0x4dcb, 0x4e62, 0x4e5e, 0x4dd3, 0x4d3f, 0x4d5a, +0x4d97, 0x4db8, 0x4e07, 0x4d81, 0x4e2e, 0x4db2, 0x4e2a, 0x4f25, 0x4ddf, 0x4f35, 0x4d9b, 0x4e84, 0x4ecf, 0x4df4, 0x4e15, 0x4e10, 0x4e45, 0x4e11, 0x4d9c, 0x4dda, 0x4e85, 0x4d3e, 0x4e4e, 0x4d9c, 0x4de0, 0x4e49, 0x4e53, 0x4d84, 0x4e03, 0x4eb8, 0x4e40, 0x4e82, 0x4e10, 0x4e2e, 0x4e7c, 0x4dd6, 0x4de8, 0x4d6f, 0x4db7, 0x4de3, 0x4e01, 0x4db7, 0x4da6, 0x4e61, 0x4e0a, 0x4e53, 0x4dc8, 0x4df9, 0x4ed6, 0x4d8b, 0x4ef9, 0x4da4, 0x4dd6, 0x4dc9, 0x4db2, 0x4dee, 0x4e8c, 0x4d86, 0x4d9c, 0x4e36, 0x4e13, 0x4ebd, 0x4d11, 0x4e28, 0x4d81, 0x4e22, 0x4e2f, 0x4e4f, 0x4ed6, 0x4e82, 0x4e2f, 0x4e17, 0x4e48, 0x4d87, 0x4e49, 0x4e4e, 0x4e39, 0x4e45, 0x4ddc, 0x4df7, 0x4e29, 0x4df2, 0x4dc2, 0x4eef, 0x4d9b, 0x4df4, 0x4e4a, 0x4d73, 0x4e0f, 0x4e7e, 0x4de6, 0x4e4c, 0x4e43, 0x4e12, 0x4e38, 0x4de6, +0x4dca, 0x4e05, 0x4e41, 0x4da4, 0x4e08, 0x4dc1, 0x4dfa, 0x4ed4, 0x4d4c, 0x4ee9, 0x4dfb, 0x4dd2, 0x4e70, 0x4ddc, 0x4d8e, 0x4dc3, 0x4e7b, 0x4dec, 0x4d8f, 0x4e28, 0x4e1d, 0x4d79, 0x4dde, 0x4db1, 0x4df1, 0x4dd5, 0x4e31, 0x4d3a, 0x4ddd, 0x4e3b, 0x4e47, 0x4df8, 0x4dec, 0x4d7f, 0x4e3c, 0x4d7f, 0x4d7f, 0x4d62, 0x4d46, 0x4dc9, 0x4df7, 0x4de7, 0x4ddf, 0x4e5c, 0x4dc1, 0x4e44, 0x4d43, 0x4db3, 0x4e4d, 0x4dae, 0x4e60, 0x4dbf, 0x4d71, 0x4de0, 0x4dba, 0x4dc1, 0x4e2a, 0x4d6d, 0x4dab, 0x4df8, 0x4de5, 0x4e56, 0x4d64, 0x4dcc, 0x4e01, 0x4dce, 0x4e3a, 0x4e88, 0x4dff, 0x4e6b, 0x4e35, 0x4e05, 0x4de3, 0x4dc4, 0x4e69, 0x4dc4, 0x4de5, 0x4df8, 0x4da5, 0x4e0e, 0x4d96, 0x4dc7, 0x4d53, 0x4ec2, 0x4d82, 0x4ddf, 0x4dac, 0x4d33, 0x4d9b, 0x4e30, 0x4d97, 0x4e3b, 0x4e89, 0x4e5c, 0x4db9, 0x4d9d, +0x4e27, 0x4e5c, 0x4f2b, 0x4e51, 0x4ee2, 0x4e60, 0x4f10, 0x4f9b, 0x4e52, 0x4f9e, 0x4e9d, 0x4e87, 0x4f8a, 0x4e8b, 0x4e8b, 0x4e96, 0x4f19, 0x4f34, 0x4e0a, 0x4ece, 0x4eec, 0x4e27, 0x4ea4, 0x4e3e, 0x4eb1, 0x4e34, 0x4ed1, 0x4ea7, 0x4f40, 0x4f9a, 0x4f51, 0x4e8e, 0x4f25, 0x4ec4, 0x4f12, 0x4ea6, 0x4e7c, 0x4e17, 0x4de8, 0x4e73, 0x4ebf, 0x4e45, 0x4e3c, 0x4f00, 0x4e94, 0x4f3d, 0x4e02, 0x4ea7, 0x4f5b, 0x4eab, 0x4f40, 0x4e4d, 0x4e05, 0x4e79, 0x4e13, 0x4e81, 0x4f20, 0x4e9d, 0x4e6d, 0x4eda, 0x4ec8, 0x4f9e, 0x4e39, 0x4ebb, 0x4de4, 0x4e67, 0x4ed6, 0x4f43, 0x4eef, 0x4f8e, 0x4edd, 0x4e5d, 0x4ebe, 0x4f3b, 0x4f37, 0x4e7a, 0x4ec0, 0x4ecc, 0x4f01, 0x4ef6, 0x4f29, 0x4e9d, 0x4e7a, 0x4ed0, 0x4e93, 0x4ef1, 0x4eb9, 0x4e43, 0x4eca, 0x4f54, 0x4e4a, 0x4e98, 0x4f5d, 0x4f33, 0x4e9e, 0x4e9f, +0x4dd7, 0x4ebb, 0x4e87, 0x4e2d, 0x4ed6, 0x4ed8, 0x4e71, 0x4f2b, 0x4e32, 0x4f42, 0x4eb7, 0x4e64, 0x4f8f, 0x4e1a, 0x4e53, 0x4ec8, 0x4e44, 0x4e5b, 0x4e7e, 0x4e80, 0x4ec2, 0x4e18, 0x4e55, 0x4e2e, 0x4e9e, 0x4ec8, 0x4e5f, 0x4dfb, 0x4e68, 0x4f3b, 0x4e83, 0x4e36, 0x4ec6, 0x4e3e, 0x4ee6, 0x4e26, 0x4e82, 0x4e57, 0x4e3b, 0x4e3d, 0x4e2f, 0x4e84, 0x4e1f, 0x4f3a, 0x4e2c, 0x4ebc, 0x4e1e, 0x4e4b, 0x4f06, 0x4e2a, 0x4f35, 0x4e4a, 0x4dc1, 0x4e5e, 0x4e0d, 0x4e33, 0x4e6b, 0x4daa, 0x4ddc, 0x4e74, 0x4e61, 0x4f4e, 0x4e23, 0x4e9d, 0x4dc1, 0x4df8, 0x4e6c, 0x4ed2, 0x4ea7, 0x4f25, 0x4e7b, 0x4e3e, 0x4e69, 0x4e17, 0x4ed4, 0x4e04, 0x4e81, 0x4e74, 0x4e3a, 0x4edf, 0x4e87, 0x4e5a, 0x4e63, 0x4ea2, 0x4ddd, 0x4eaf, 0x4eac, 0x4db0, 0x4ea1, 0x4efd, 0x4e60, 0x4e88, 0x4df4, 0x4f25, 0x4e13, 0x4e34, +0x4e0d, 0x4dd9, 0x4e1e, 0x4dbd, 0x4e05, 0x4e05, 0x4e9b, 0x4ef7, 0x4e05, 0x4ee9, 0x4e79, 0x4e50, 0x4f3d, 0x4e4d, 0x4e45, 0x4ec1, 0x4eaa, 0x4e11, 0x4da2, 0x4e41, 0x4e50, 0x4df9, 0x4e0e, 0x4dff, 0x4e54, 0x4e44, 0x4e2b, 0x4e1e, 0x4e8f, 0x4ef0, 0x4e44, 0x4e5a, 0x4e65, 0x4e53, 0x4e7c, 0x4e31, 0x4e00, 0x4d7c, 0x4e09, 0x4e2d, 0x4e8c, 0x4e18, 0x4def, 0x4e73, 0x4e1e, 0x4eb6, 0x4d9e, 0x4e23, 0x4eaa, 0x4e62, 0x4ee7, 0x4e4f, 0x4d89, 0x4e3c, 0x4e0f, 0x4e80, 0x4e2e, 0x4e16, 0x4df6, 0x4e79, 0x4e9e, 0x4ef9, 0x4d5f, 0x4e39, 0x4d87, 0x4e04, 0x4eda, 0x4e99, 0x4e75, 0x4f32, 0x4e55, 0x4e47, 0x4e23, 0x4e5a, 0x4eb0, 0x4e39, 0x4e6d, 0x4e3b, 0x4e5c, 0x4e89, 0x4ec6, 0x4e16, 0x4e36, 0x4f0b, 0x4d76, 0x4e1a, 0x4e5b, 0x4dc4, 0x4dfb, 0x4e5b, 0x4e5f, 0x4e8c, 0x4e8b, 0x4e7d, 0x4e14, 0x4df3, +0x4db1, 0x4da2, 0x4e28, 0x4dc6, 0x4e3d, 0x4e08, 0x4df4, 0x4e7e, 0x4db8, 0x4ee4, 0x4e5c, 0x4df9, 0x4eee, 0x4db3, 0x4daf, 0x4e26, 0x4e20, 0x4dee, 0x4df8, 0x4e2e, 0x4e2a, 0x4d7e, 0x4e32, 0x4d94, 0x4e1b, 0x4e49, 0x4e84, 0x4dc4, 0x4dff, 0x4ead, 0x4e55, 0x4e4a, 0x4e04, 0x4e07, 0x4ebb, 0x4dac, 0x4daf, 0x4ded, 0x4d53, 0x4d9a, 0x4dd7, 0x4de6, 0x4d5b, 0x4e3d, 0x4dff, 0x4ea8, 0x4d9d, 0x4da4, 0x4e1e, 0x4d92, 0x4e7a, 0x4d3e, 0x4d57, 0x4db5, 0x4d77, 0x4d96, 0x4e1a, 0x4d7a, 0x4d74, 0x4de0, 0x4dba, 0x4eb6, 0x4d49, 0x4e27, 0x4d55, 0x4dca, 0x4e02, 0x4e83, 0x4e6b, 0x4eaf, 0x4e2b, 0x4de9, 0x4e53, 0x4db5, 0x4e0b, 0x4dd7, 0x4dbe, 0x4df5, 0x4dd0, 0x4dc9, 0x4e66, 0x4d69, 0x4e0e, 0x4e3b, 0x4d50, 0x4dff, 0x4de3, 0x4d65, 0x4dd4, 0x4e0e, 0x4df0, 0x4e52, 0x4ee9, 0x4e3e, 0x4e53, 0x4dbd, +0x4d94, 0x4d90, 0x4e41, 0x4d3c, 0x4de7, 0x4d6d, 0x4dfa, 0x4e97, 0x4de8, 0x4e5c, 0x4dde, 0x4dfe, 0x4e81, 0x4d8a, 0x4d99, 0x4dce, 0x4e82, 0x4de2, 0x4dba, 0x4dab, 0x4dc5, 0x4d4e, 0x4d64, 0x4db5, 0x4d8c, 0x4dcb, 0x4dc9, 0x4d74, 0x4dfa, 0x4e2f, 0x4e29, 0x4db3, 0x4deb, 0x4d7e, 0x4ddd, 0x4d9a, 0x4d6e, 0x4da2, 0x4cdf, 0x4d82, 0x4da5, 0x4dd1, 0x4da7, 0x4e45, 0x4dba, 0x4df1, 0x4d49, 0x4d32, 0x4e97, 0x4d3f, 0x4e88, 0x4d72, 0x4cfe, 0x4dd3, 0x4d33, 0x4d53, 0x4db0, 0x4d6b, 0x4d5f, 0x4e02, 0x4dcb, 0x4e93, 0x4d95, 0x4dc5, 0x4da2, 0x4d86, 0x4ddf, 0x4df4, 0x4dac, 0x4e0d, 0x4dd1, 0x4d3f, 0x4df6, 0x4d42, 0x4e24, 0x4dac, 0x4e2e, 0x4da2, 0x4db6, 0x4df0, 0x4dd6, 0x4d6f, 0x4d6b, 0x4e2f, 0x4d51, 0x4e39, 0x4dfd, 0x4d12, 0x4d9a, 0x4ded, 0x4d3a, 0x4dec, 0x4e1b, 0x4e0d, 0x4dbc, 0x4dad, +0x4d87, 0x4dd5, 0x4e10, 0x4dd0, 0x4e3f, 0x4ddf, 0x4ea2, 0x4ec6, 0x4ddd, 0x4f15, 0x4df0, 0x4e47, 0x4ed0, 0x4dcc, 0x4dfa, 0x4de6, 0x4e44, 0x4dd7, 0x4da0, 0x4e0c, 0x4db8, 0x4d9c, 0x4dde, 0x4dcf, 0x4dfe, 0x4e85, 0x4e7b, 0x4da6, 0x4e87, 0x4e73, 0x4e85, 0x4e39, 0x4de2, 0x4e46, 0x4e55, 0x4dc6, 0x4d80, 0x4d68, 0x4d9e, 0x4e35, 0x4e1c, 0x4e41, 0x4d37, 0x4eab, 0x4e25, 0x4ea0, 0x4dab, 0x4dd5, 0x4e40, 0x4dc4, 0x4ea6, 0x4e0b, 0x4d35, 0x4ddd, 0x4d6f, 0x4dec, 0x4e3e, 0x4d86, 0x4dc7, 0x4e1b, 0x4dd1, 0x4e7d, 0x4d5b, 0x4e56, 0x4d3e, 0x4dc6, 0x4e47, 0x4e41, 0x4deb, 0x4ea3, 0x4e0b, 0x4e1e, 0x4e4f, 0x4d7d, 0x4e69, 0x4e05, 0x4e07, 0x4de1, 0x4dd4, 0x4df4, 0x4e23, 0x4daa, 0x4d5c, 0x4e50, 0x4d8c, 0x4e56, 0x4df2, 0x4d1b, 0x4db1, 0x4e56, 0x4d5c, 0x4e3b, 0x4ea7, 0x4e3d, 0x4dc1, 0x4dce, +0x4dd5, 0x4e1b, 0x4f0a, 0x4d93, 0x4e7e, 0x4e1d, 0x4e8c, 0x4f7b, 0x4df4, 0x4f3f, 0x4e9f, 0x4e5e, 0x4f33, 0x4e21, 0x4e55, 0x4e7b, 0x4ec6, 0x4e75, 0x4e2f, 0x4e95, 0x4ead, 0x4df1, 0x4e00, 0x4e1b, 0x4e6a, 0x4e69, 0x4f05, 0x4dce, 0x4e65, 0x4ecc, 0x4e72, 0x4e86, 0x4ea7, 0x4e4c, 0x4ef1, 0x4e36, 0x4e28, 0x4dd8, 0x4dca, 0x4e83, 0x4e23, 0x4e65, 0x4e7f, 0x4f31, 0x4ebf, 0x4e83, 0x4d66, 0x4e3d, 0x4e9e, 0x4e64, 0x4eba, 0x4e12, 0x4d90, 0x4e34, 0x4e11, 0x4e31, 0x4e89, 0x4de1, 0x4dca, 0x4e9f, 0x4e43, 0x4f58, 0x4dc9, 0x4e96, 0x4e38, 0x4dfa, 0x4e94, 0x4eb1, 0x4ed4, 0x4f1b, 0x4ee2, 0x4e92, 0x4e30, 0x4e86, 0x4eb1, 0x4e4e, 0x4ea0, 0x4e74, 0x4e52, 0x4ebc, 0x4edd, 0x4dd8, 0x4e1d, 0x4ee2, 0x4df0, 0x4eb0, 0x4e12, 0x4dd4, 0x4e3d, 0x4e9e, 0x4e31, 0x4e44, 0x4ecb, 0x4ebb, 0x4e2c, 0x4e6d, +0x4dc2, 0x4e12, 0x4e1c, 0x4de3, 0x4dfc, 0x4df2, 0x4e09, 0x4ed4, 0x4e52, 0x4f49, 0x4e69, 0x4dc9, 0x4f08, 0x4e73, 0x4e21, 0x4e51, 0x4e85, 0x4e2d, 0x4da5, 0x4e0c, 0x4e09, 0x4d7b, 0x4de6, 0x4dec, 0x4e9e, 0x4e06, 0x4ea8, 0x4da2, 0x4e74, 0x4eac, 0x4e13, 0x4e45, 0x4e43, 0x4dea, 0x4e85, 0x4dbb, 0x4df5, 0x4dc4, 0x4d87, 0x4e18, 0x4de4, 0x4e20, 0x4dd5, 0x4ebd, 0x4e32, 0x4e40, 0x4de9, 0x4e07, 0x4e5a, 0x4de1, 0x4f32, 0x4e22, 0x4d57, 0x4e23, 0x4ded, 0x4dd4, 0x4e11, 0x4dd4, 0x4dfd, 0x4e5d, 0x4e9f, 0x4ed0, 0x4d86, 0x4ea8, 0x4d69, 0x4de3, 0x4e2b, 0x4ec8, 0x4e3c, 0x4eca, 0x4e2f, 0x4de7, 0x4e3e, 0x4e01, 0x4e59, 0x4df2, 0x4e82, 0x4e3a, 0x4e45, 0x4e91, 0x4e9a, 0x4dc0, 0x4e61, 0x4e8d, 0x4d51, 0x4e31, 0x4dc1, 0x4d96, 0x4dad, 0x4e37, 0x4e2b, 0x4e8d, 0x4e69, 0x4dfe, 0x4e37, 0x4ddd, +0x4e19, 0x4e6d, 0x4ec5, 0x4e2a, 0x4e9c, 0x4e04, 0x4ec6, 0x4f61, 0x4e1f, 0x4f72, 0x4e4d, 0x4e51, 0x4f2c, 0x4e6a, 0x4e48, 0x4e99, 0x4edc, 0x4dd0, 0x4e2e, 0x4eb1, 0x4e52, 0x4de8, 0x4e5b, 0x4e0a, 0x4e2c, 0x4e35, 0x4ef2, 0x4dd0, 0x4eff, 0x4f6d, 0x4ef2, 0x4eca, 0x4e90, 0x4e6e, 0x4ece, 0x4e89, 0x4dfc, 0x4e16, 0x4dcd, 0x4eb7, 0x4e79, 0x4ee7, 0x4e2e, 0x4ec0, 0x4e93, 0x4ec0, 0x4dc4, 0x4e5a, 0x4f28, 0x4e17, 0x4efc, 0x4e44, 0x4dbc, 0x4e77, 0x4df3, 0x4eda, 0x4ec2, 0x4e34, 0x4e15, 0x4e78, 0x4eb2, 0x4f87, 0x4da1, 0x4f1e, 0x4dcb, 0x4e72, 0x4eea, 0x4e8c, 0x4edb, 0x4f22, 0x4ecd, 0x4e54, 0x4eb8, 0x4e87, 0x4ef0, 0x4ea3, 0x4e57, 0x4e79, 0x4e85, 0x4e82, 0x4ebb, 0x4e3c, 0x4e29, 0x4ec4, 0x4e06, 0x4ea8, 0x4eb7, 0x4dc5, 0x4e31, 0x4e8a, 0x4e72, 0x4eac, 0x4ed9, 0x4f1d, 0x4e7e, 0x4e68, +0x4e35, 0x4dd4, 0x4e38, 0x4dda, 0x4e05, 0x4db1, 0x4e5a, 0x4f1a, 0x4e2b, 0x4f39, 0x4e30, 0x4e96, 0x4ecf, 0x4df6, 0x4dd0, 0x4ddc, 0x4e5e, 0x4ddc, 0x4d6c, 0x4e50, 0x4dd5, 0x4dc0, 0x4e05, 0x4d65, 0x4e16, 0x4e46, 0x4e57, 0x4dc0, 0x4e5c, 0x4ed2, 0x4e79, 0x4e11, 0x4e1a, 0x4e14, 0x4e85, 0x4e2f, 0x4dc9, 0x4dd8, 0x4d4c, 0x4ddb, 0x4e37, 0x4e35, 0x4dba, 0x4eb9, 0x4dee, 0x4ed1, 0x4d7c, 0x4dfc, 0x4e86, 0x4d78, 0x4e88, 0x4e1e, 0x4d54, 0x4dc0, 0x4da2, 0x4e0f, 0x4e83, 0x4db6, 0x4dc1, 0x4e78, 0x4e0a, 0x4e34, 0x4d73, 0x4e83, 0x4d8c, 0x4dce, 0x4e55, 0x4e11, 0x4e83, 0x4e43, 0x4e7c, 0x4e05, 0x4e93, 0x4ddf, 0x4e3f, 0x4dc4, 0x4e19, 0x4e6c, 0x4db9, 0x4e54, 0x4e9e, 0x4da3, 0x4dbe, 0x4e6a, 0x4db0, 0x4e1a, 0x4e57, 0x4d7b, 0x4e6e, 0x4eac, 0x4da4, 0x4e9a, 0x4e6c, 0x4e7f, 0x4de6, 0x4e0c, +0x4e70, 0x4e5d, 0x4ea9, 0x4e2c, 0x4ee1, 0x4e13, 0x4e9d, 0x4f97, 0x4e21, 0x4ff6, 0x4e48, 0x4e57, 0x4f7e, 0x4e75, 0x4e56, 0x4e79, 0x4f65, 0x4e3f, 0x4da0, 0x4e90, 0x4edc, 0x4e8e, 0x4e4d, 0x4e51, 0x4e9c, 0x4e2a, 0x4e9e, 0x4e30, 0x4e4c, 0x4edf, 0x4ef8, 0x4e91, 0x4eb6, 0x4e71, 0x4ead, 0x4e48, 0x4e87, 0x4de3, 0x4df8, 0x4e29, 0x4e76, 0x4ebb, 0x4e35, 0x4ef6, 0x4e9e, 0x4fa9, 0x4dd5, 0x4e21, 0x4ec4, 0x4e4a, 0x4f80, 0x4e0d, 0x4e07, 0x4e07, 0x4e45, 0x4e40, 0x4ef9, 0x4e38, 0x4dd3, 0x4e67, 0x4e85, 0x4ecf, 0x4dde, 0x4eaf, 0x4e1a, 0x4e83, 0x4e6d, 0x4f2c, 0x4ee4, 0x4eab, 0x4e78, 0x4e42, 0x4e9f, 0x4e30, 0x4e70, 0x4e27, 0x4eee, 0x4e55, 0x4e96, 0x4e9f, 0x4e9c, 0x4e3e, 0x4e46, 0x4f72, 0x4e1a, 0x4e80, 0x4eb9, 0x4e04, 0x4e5e, 0x4ee7, 0x4e43, 0x4ec0, 0x4f4b, 0x4e59, 0x4e76, 0x4e27, +0x4dd1, 0x4dbf, 0x4ec4, 0x4df3, 0x4e12, 0x4e04, 0x4e47, 0x4f88, 0x4e3e, 0x4f9c, 0x4e70, 0x4eb7, 0x4f21, 0x4e20, 0x4e02, 0x4ec1, 0x4f47, 0x4e07, 0x4e00, 0x4e95, 0x4e30, 0x4dd6, 0x4dee, 0x4d9d, 0x4e09, 0x4e05, 0x4ec7, 0x4ddb, 0x4e57, 0x4f16, 0x4e8d, 0x4e60, 0x4e58, 0x4e2e, 0x4ed0, 0x4df3, 0x4e32, 0x4df6, 0x4d99, 0x4def, 0x4e67, 0x4e3d, 0x4e21, 0x4f1d, 0x4e24, 0x4ef2, 0x4da9, 0x4e02, 0x4eea, 0x4e2d, 0x4f3d, 0x4e61, 0x4de9, 0x4e51, 0x4db4, 0x4e1e, 0x4e8c, 0x4e23, 0x4dc5, 0x4e4f, 0x4e56, 0x4f11, 0x4d7f, 0x4eda, 0x4de8, 0x4e06, 0x4e52, 0x4e14, 0x4e97, 0x4f22, 0x4e29, 0x4e43, 0x4e97, 0x4e37, 0x4e58, 0x4e4c, 0x4e7f, 0x4e69, 0x4e35, 0x4e48, 0x4efe, 0x4de6, 0x4e23, 0x4e4f, 0x4df0, 0x4e55, 0x4e59, 0x4daf, 0x4e32, 0x4e56, 0x4dea, 0x4ea4, 0x4e72, 0x4e7f, 0x4e22, 0x4e13, +0x4d97, 0x4d55, 0x4d67, 0x4d11, 0x4d7c, 0x4d95, 0x4e13, 0x4ea2, 0x4e15, 0x4ef3, 0x4db7, 0x4db6, 0x4eb7, 0x4d99, 0x4e38, 0x4d63, 0x4df6, 0x4da1, 0x4d6d, 0x4d9c, 0x4dda, 0x4d83, 0x4db0, 0x4d74, 0x4db4, 0x4e71, 0x4e1a, 0x4d50, 0x4dec, 0x4e26, 0x4df3, 0x4dd0, 0x4ddf, 0x4d85, 0x4dfb, 0x4da2, 0x4ddc, 0x4d82, 0x4d45, 0x4d6e, 0x4d55, 0x4d8f, 0x4d1e, 0x4de2, 0x4d78, 0x4e5d, 0x4d4b, 0x4da0, 0x4e24, 0x4d4a, 0x4e82, 0x4dc8, 0x4d13, 0x4d73, 0x4d4e, 0x4d5c, 0x4de9, 0x4d89, 0x4d71, 0x4db5, 0x4e0d, 0x4e4b, 0x4d15, 0x4e2f, 0x4d88, 0x4da4, 0x4de9, 0x4ded, 0x4e35, 0x4e27, 0x4dcb, 0x4d4c, 0x4dc5, 0x4d59, 0x4de3, 0x4da6, 0x4e7e, 0x4dfa, 0x4ddc, 0x4dfc, 0x4e23, 0x4d71, 0x4d5d, 0x4e2a, 0x4d4c, 0x4daa, 0x4d9c, 0x4cff, 0x4ddd, 0x4df5, 0x4d8f, 0x4dd1, 0x4de1, 0x4d5f, 0x4e4c, 0x4d88, +0x4d87, 0x4dde, 0x4e24, 0x4dd2, 0x4e20, 0x4e17, 0x4e1d, 0x4f2c, 0x4d91, 0x4f09, 0x4e23, 0x4e27, 0x4ec8, 0x4e1a, 0x4dcd, 0x4e00, 0x4e75, 0x4d91, 0x4d53, 0x4db2, 0x4e16, 0x4dac, 0x4e22, 0x4dfb, 0x4e20, 0x4dee, 0x4e47, 0x4d7a, 0x4e7b, 0x4e9e, 0x4dff, 0x4e26, 0x4e2e, 0x4dc3, 0x4ec2, 0x4da2, 0x4dca, 0x4d87, 0x4da3, 0x4e18, 0x4dd7, 0x4e50, 0x4d98, 0x4e92, 0x4e26, 0x4e14, 0x4d10, 0x4e33, 0x4e59, 0x4db0, 0x4e95, 0x4da1, 0x4d9b, 0x4df6, 0x4d2d, 0x4deb, 0x4e1b, 0x4d76, 0x4da5, 0x4df7, 0x4dd6, 0x4ea5, 0x4d40, 0x4e65, 0x4d83, 0x4e04, 0x4df1, 0x4e6e, 0x4e48, 0x4ee2, 0x4e35, 0x4da7, 0x4da9, 0x4dd4, 0x4e79, 0x4db5, 0x4e37, 0x4dc8, 0x4d68, 0x4e17, 0x4e90, 0x4d82, 0x4dec, 0x4dfe, 0x4d30, 0x4d85, 0x4e2a, 0x4d6d, 0x4de9, 0x4e64, 0x4da7, 0x4e1c, 0x4e59, 0x4e02, 0x4e09, 0x4d96, +0x4df9, 0x4e01, 0x4e8b, 0x4e85, 0x4ed5, 0x4e7a, 0x4e85, 0x4eed, 0x4e77, 0x4f1c, 0x4e7f, 0x4eb9, 0x4f54, 0x4e45, 0x4eaa, 0x4e35, 0x4ec6, 0x4e41, 0x4d94, 0x4ec8, 0x4e7b, 0x4e37, 0x4e55, 0x4df2, 0x4e9f, 0x4e53, 0x4ef9, 0x4e48, 0x4ebc, 0x4ee7, 0x4eb1, 0x4e74, 0x4ea0, 0x4ddc, 0x4e90, 0x4e52, 0x4e1c, 0x4de6, 0x4dbe, 0x4e24, 0x4e5c, 0x4e12, 0x4dc0, 0x4ebd, 0x4e07, 0x4f14, 0x4e16, 0x4e15, 0x4f3c, 0x4e16, 0x4f0c, 0x4e40, 0x4d4d, 0x4e9d, 0x4dff, 0x4dbc, 0x4e61, 0x4e0d, 0x4e13, 0x4e52, 0x4e85, 0x4f06, 0x4e05, 0x4e79, 0x4d69, 0x4dcf, 0x4ed8, 0x4e6b, 0x4e76, 0x4f03, 0x4e57, 0x4e66, 0x4edb, 0x4e8f, 0x4e75, 0x4e3c, 0x4e88, 0x4e9f, 0x4e6d, 0x4e35, 0x4ef2, 0x4e30, 0x4e50, 0x4e68, 0x4df4, 0x4e6b, 0x4e3d, 0x4da2, 0x4e5d, 0x4ed7, 0x4e33, 0x4ec0, 0x4f16, 0x4eb7, 0x4e7a, 0x4e3a, +0x4db5, 0x4dff, 0x4e06, 0x4e03, 0x4e6e, 0x4e3e, 0x4e52, 0x4edb, 0x4e09, 0x4f15, 0x4e4b, 0x4e9c, 0x4f54, 0x4d9e, 0x4dbe, 0x4e42, 0x4e0c, 0x4e1e, 0x4dd6, 0x4e41, 0x4e17, 0x4d7b, 0x4de5, 0x4deb, 0x4df3, 0x4e40, 0x4e41, 0x4e02, 0x4e89, 0x4f23, 0x4e46, 0x4e53, 0x4e20, 0x4e27, 0x4ee9, 0x4df9, 0x4e15, 0x4e38, 0x4df4, 0x4e14, 0x4e1a, 0x4e01, 0x4db3, 0x4ebc, 0x4d8c, 0x4e77, 0x4d53, 0x4dbd, 0x4ed1, 0x4dde, 0x4eb1, 0x4dd4, 0x4db1, 0x4e08, 0x4d6e, 0x4da6, 0x4e43, 0x4d66, 0x4dbe, 0x4e1d, 0x4e10, 0x4f3f, 0x4d2a, 0x4e1f, 0x4da6, 0x4dca, 0x4e6b, 0x4e59, 0x4e81, 0x4f21, 0x4dfd, 0x4e23, 0x4e33, 0x4e48, 0x4eb9, 0x4e08, 0x4dd9, 0x4e5c, 0x4df8, 0x4e6e, 0x4e16, 0x4dca, 0x4e50, 0x4e5c, 0x4d71, 0x4e32, 0x4e43, 0x4d64, 0x4dfe, 0x4ee3, 0x4d83, 0x4e66, 0x4e3d, 0x4eeb, 0x4e28, 0x4ddf, +0x4e3e, 0x4e49, 0x4ee3, 0x4e3f, 0x4ef6, 0x4eac, 0x4ea8, 0x4f54, 0x4ea4, 0x4fdf, 0x4e91, 0x4eb4, 0x4f8a, 0x4e75, 0x4e81, 0x4e8e, 0x4f45, 0x4e2f, 0x4e26, 0x4edd, 0x4ed4, 0x4e5b, 0x4e64, 0x4de7, 0x4e6b, 0x4e8b, 0x4f22, 0x4e3b, 0x4e8e, 0x4f34, 0x4ed1, 0x4edd, 0x4eaf, 0x4e27, 0x4ef4, 0x4e73, 0x4ea4, 0x4e3b, 0x4da0, 0x4e2d, 0x4e7c, 0x4e81, 0x4e2e, 0x4f31, 0x4e48, 0x4f48, 0x4e39, 0x4e7c, 0x4f0f, 0x4df3, 0x4f12, 0x4e19, 0x4dcb, 0x4e4f, 0x4e16, 0x4dea, 0x4eb6, 0x4e0b, 0x4e3c, 0x4ea1, 0x4e48, 0x4f80, 0x4dd3, 0x4ed8, 0x4e21, 0x4e47, 0x4f42, 0x4f09, 0x4eec, 0x4ef0, 0x4e6e, 0x4ec3, 0x4ed3, 0x4e99, 0x4ee3, 0x4e24, 0x4ebc, 0x4eb2, 0x4e78, 0x4e8a, 0x4f01, 0x4e89, 0x4e67, 0x4ed7, 0x4e1d, 0x4e37, 0x4e9f, 0x4e03, 0x4e95, 0x4f02, 0x4df4, 0x4efe, 0x4f55, 0x4ee1, 0x4eb7, 0x4e4f, +0x4d92, 0x4dde, 0x4e21, 0x4d5d, 0x4e90, 0x4e15, 0x4e89, 0x4ea3, 0x4deb, 0x4f4c, 0x4ec4, 0x4e70, 0x4eda, 0x4e2f, 0x4e38, 0x4e19, 0x4ecf, 0x4e55, 0x4dbc, 0x4e20, 0x4e52, 0x4de4, 0x4de0, 0x4e1e, 0x4db4, 0x4e72, 0x4e1b, 0x4dd5, 0x4e30, 0x4ea3, 0x4e57, 0x4ea3, 0x4e27, 0x4e31, 0x4ede, 0x4dd0, 0x4df6, 0x4e00, 0x4dca, 0x4e1c, 0x4e49, 0x4e2b, 0x4ddc, 0x4eb6, 0x4e62, 0x4ed8, 0x4d69, 0x4e49, 0x4eb5, 0x4de9, 0x4eeb, 0x4df2, 0x4d4c, 0x4e79, 0x4dba, 0x4e24, 0x4e5b, 0x4dd0, 0x4e06, 0x4e3e, 0x4e41, 0x4f2c, 0x4dbb, 0x4e7a, 0x4dff, 0x4d9f, 0x4e54, 0x4e51, 0x4e3a, 0x4f00, 0x4e88, 0x4e3d, 0x4eaa, 0x4e47, 0x4eb3, 0x4e57, 0x4e32, 0x4e26, 0x4e80, 0x4efc, 0x4f49, 0x4e0b, 0x4dfb, 0x4e9b, 0x4d69, 0x4e31, 0x4deb, 0x4d4e, 0x4de8, 0x4e9a, 0x4e12, 0x4e74, 0x4e6a, 0x4e94, 0x4e34, 0x4de3, +0x4de1, 0x4e39, 0x4e47, 0x4de2, 0x4e53, 0x4e02, 0x4e7e, 0x4ec5, 0x4e01, 0x4f33, 0x4e30, 0x4dfc, 0x4f1f, 0x4e5c, 0x4e28, 0x4e30, 0x4ea0, 0x4e23, 0x4dd5, 0x4e19, 0x4e43, 0x4dc9, 0x4e8f, 0x4dd0, 0x4e3e, 0x4e3e, 0x4e9a, 0x4dd4, 0x4e31, 0x4f06, 0x4e76, 0x4e21, 0x4e7f, 0x4e1f, 0x4eb7, 0x4e0c, 0x4dde, 0x4dc8, 0x4de7, 0x4dfe, 0x4e10, 0x4e2b, 0x4ded, 0x4edf, 0x4e37, 0x4e72, 0x4dec, 0x4e3a, 0x4ebb, 0x4ddf, 0x4ec0, 0x4dbe, 0x4d1e, 0x4e87, 0x4dc6, 0x4e0b, 0x4e5a, 0x4de7, 0x4dcd, 0x4e96, 0x4e66, 0x4eda, 0x4d77, 0x4e4a, 0x4da4, 0x4df5, 0x4e8d, 0x4e4c, 0x4e68, 0x4ede, 0x4e5d, 0x4dd1, 0x4e06, 0x4e2d, 0x4e0c, 0x4e46, 0x4e5e, 0x4e15, 0x4de8, 0x4e6c, 0x4e54, 0x4daa, 0x4df4, 0x4ed0, 0x4d80, 0x4e1a, 0x4df9, 0x4dcb, 0x4dee, 0x4e1c, 0x4e17, 0x4e5c, 0x4e8c, 0x4e33, 0x4dd3, 0x4e27, +0x4d34, 0x4dbb, 0x4e7d, 0x4d47, 0x4dfd, 0x4d0b, 0x4ddc, 0x4e68, 0x4dc6, 0x4ecd, 0x4d9c, 0x4d7d, 0x4ee0, 0x4d69, 0x4ded, 0x4dca, 0x4e3c, 0x4dcd, 0x4d5e, 0x4dbf, 0x4e4c, 0x4db0, 0x4db2, 0x4d97, 0x4da9, 0x4d9f, 0x4e43, 0x4d2a, 0x4dab, 0x4e3d, 0x4e06, 0x4dd4, 0x4daa, 0x4d79, 0x4de6, 0x4de1, 0x4e01, 0x4d62, 0x4d05, 0x4dc7, 0x4ea2, 0x4db4, 0x4d8b, 0x4e6e, 0x4ddd, 0x4e74, 0x4d00, 0x4d9a, 0x4e77, 0x4ddc, 0x4e8b, 0x4dd1, 0x4ccc, 0x4e3f, 0x4d93, 0x4e15, 0x4e91, 0x4de6, 0x4d2c, 0x4e2d, 0x4e02, 0x4ea1, 0x4daf, 0x4e3f, 0x4d8b, 0x4db9, 0x4dde, 0x4e0e, 0x4de3, 0x4e50, 0x4e05, 0x4d89, 0x4e03, 0x4e13, 0x4e4e, 0x4d9c, 0x4df4, 0x4e2d, 0x4df6, 0x4e00, 0x4df1, 0x4ddd, 0x4d7e, 0x4e68, 0x4d6c, 0x4e07, 0x4dca, 0x4d0b, 0x4dba, 0x4dde, 0x4e18, 0x4db6, 0x4dc8, 0x4e2b, 0x4dfa, 0x4d96, +0x4d85, 0x4dc7, 0x4e03, 0x4dc7, 0x4ddd, 0x4dce, 0x4e82, 0x4f1b, 0x4e5b, 0x4f6b, 0x4ec1, 0x4e3e, 0x4f42, 0x4e4a, 0x4e5e, 0x4e3c, 0x4e55, 0x4e43, 0x4dbe, 0x4e0d, 0x4e30, 0x4d9f, 0x4e29, 0x4df5, 0x4e4f, 0x4e49, 0x4e01, 0x4dc1, 0x4e7c, 0x4e7f, 0x4e9d, 0x4e1b, 0x4e00, 0x4e55, 0x4e85, 0x4e25, 0x4e0b, 0x4da9, 0x4da2, 0x4e0e, 0x4e49, 0x4e9b, 0x4ded, 0x4e7f, 0x4df3, 0x4ea5, 0x4d68, 0x4dd6, 0x4ec1, 0x4db5, 0x4ed0, 0x4e11, 0x4d68, 0x4e0c, 0x4e37, 0x4e5f, 0x4e8a, 0x4d98, 0x4e15, 0x4e34, 0x4e33, 0x4ef1, 0x4dc1, 0x4e90, 0x4dd5, 0x4dfb, 0x4e50, 0x4eb3, 0x4ebf, 0x4f41, 0x4e9b, 0x4e12, 0x4e83, 0x4df5, 0x4e9e, 0x4e2f, 0x4e5c, 0x4dfd, 0x4e64, 0x4ea9, 0x4ec7, 0x4e31, 0x4e1b, 0x4eb6, 0x4ddc, 0x4e68, 0x4e72, 0x4d96, 0x4e27, 0x4e93, 0x4dd6, 0x4e70, 0x4e8a, 0x4e37, 0x4e0b, 0x4e0e, +0x4e2a, 0x4db0, 0x4e2a, 0x4d72, 0x4dbf, 0x4e19, 0x4e05, 0x4ea8, 0x4dfa, 0x4eed, 0x4e02, 0x4e06, 0x4e93, 0x4de1, 0x4e4e, 0x4da8, 0x4e27, 0x4d5d, 0x4dc5, 0x4e0c, 0x4e4f, 0x4e0a, 0x4dc2, 0x4da0, 0x4db7, 0x4ddf, 0x4e72, 0x4dc6, 0x4e8d, 0x4e41, 0x4e66, 0x4e35, 0x4dc7, 0x4e21, 0x4e2d, 0x4df3, 0x4df3, 0x4d7e, 0x4da9, 0x4e2e, 0x4e07, 0x4ded, 0x4d9d, 0x4e6c, 0x4e27, 0x4ec2, 0x4d98, 0x4e01, 0x4e73, 0x4d6e, 0x4ed1, 0x4d9e, 0x4d36, 0x4de8, 0x4da2, 0x4e1c, 0x4dcb, 0x4de2, 0x4d8c, 0x4e31, 0x4e44, 0x4eee, 0x4d69, 0x4dd4, 0x4d7e, 0x4de5, 0x4e35, 0x4e4f, 0x4e55, 0x4e9c, 0x4e58, 0x4da4, 0x4e09, 0x4dd2, 0x4e27, 0x4dec, 0x4e42, 0x4e28, 0x4e50, 0x4e66, 0x4e37, 0x4e51, 0x4dd0, 0x4ebe, 0x4d62, 0x4e19, 0x4e4e, 0x4d5a, 0x4e12, 0x4e5d, 0x4ddc, 0x4e4c, 0x4e8f, 0x4e44, 0x4e84, 0x4dbe, +0x4d61, 0x4dfd, 0x4ded, 0x4ddc, 0x4e50, 0x4d9c, 0x4e71, 0x4e90, 0x4e16, 0x4f8b, 0x4e5d, 0x4e68, 0x4f60, 0x4e08, 0x4e2a, 0x4e27, 0x4f17, 0x4e21, 0x4d68, 0x4e1d, 0x4dea, 0x4de6, 0x4dd9, 0x4d88, 0x4e27, 0x4e43, 0x4e60, 0x4da5, 0x4e57, 0x4f23, 0x4e7d, 0x4e5f, 0x4e69, 0x4dfe, 0x4ebf, 0x4d9b, 0x4e4f, 0x4de4, 0x4d8e, 0x4dfa, 0x4e03, 0x4e22, 0x4df2, 0x4e90, 0x4e18, 0x4e72, 0x4cf7, 0x4dfe, 0x4e7e, 0x4dfa, 0x4e98, 0x4dd4, 0x4d98, 0x4e42, 0x4de0, 0x4e02, 0x4ec0, 0x4dcb, 0x4d4f, 0x4e5a, 0x4df3, 0x4f15, 0x4d77, 0x4e51, 0x4da6, 0x4e02, 0x4de0, 0x4e2d, 0x4ea4, 0x4e88, 0x4dec, 0x4df1, 0x4e0a, 0x4e5a, 0x4e9c, 0x4e02, 0x4df8, 0x4e2c, 0x4e4a, 0x4e9a, 0x4e7b, 0x4d92, 0x4e1c, 0x4e88, 0x4ddb, 0x4e52, 0x4e18, 0x4d6c, 0x4dde, 0x4eb1, 0x4dc8, 0x4e2d, 0x4e24, 0x4df0, 0x4dea, 0x4e1e, +0x4daf, 0x4da3, 0x4e3a, 0x4dec, 0x4e70, 0x4d93, 0x4e3a, 0x4e83, 0x4df9, 0x4efd, 0x4e07, 0x4e51, 0x4f5d, 0x4dde, 0x4e0b, 0x4dfc, 0x4e45, 0x4ddc, 0x4d75, 0x4dc9, 0x4df3, 0x4d8d, 0x4de0, 0x4da4, 0x4e37, 0x4e7a, 0x4e46, 0x4dc8, 0x4e2e, 0x4ebd, 0x4e27, 0x4e67, 0x4e3e, 0x4e2f, 0x4e5f, 0x4d98, 0x4e5f, 0x4d6e, 0x4da8, 0x4dc7, 0x4dd5, 0x4e31, 0x4ddb, 0x4e89, 0x4de0, 0x4e73, 0x4d87, 0x4dd9, 0x4ea2, 0x4dae, 0x4e92, 0x4dc9, 0x4d4f, 0x4df1, 0x4e02, 0x4df1, 0x4e69, 0x4de0, 0x4d7f, 0x4e39, 0x4dc3, 0x4e99, 0x4d2f, 0x4e69, 0x4d99, 0x4d5a, 0x4e3d, 0x4e3b, 0x4e74, 0x4eac, 0x4e2d, 0x4e43, 0x4e44, 0x4e36, 0x4e2d, 0x4dc2, 0x4e43, 0x4e3a, 0x4e22, 0x4de6, 0x4e76, 0x4d64, 0x4e25, 0x4e7c, 0x4dc2, 0x4e51, 0x4daa, 0x4d57, 0x4e4f, 0x4e55, 0x4db5, 0x4df2, 0x4e66, 0x4e42, 0x4e18, 0x4e30, +0x4df6, 0x4e52, 0x4e8b, 0x4da7, 0x4e2b, 0x4e27, 0x4e8a, 0x4f5e, 0x4e20, 0x4fd0, 0x4e78, 0x4ed1, 0x4ef4, 0x4e3b, 0x4e31, 0x4e7c, 0x4ec6, 0x4de8, 0x4e00, 0x4e9b, 0x4e95, 0x4df6, 0x4e8f, 0x4e58, 0x4e3b, 0x4e7a, 0x4ea5, 0x4e09, 0x4ea0, 0x4f19, 0x4e5c, 0x4e85, 0x4e5f, 0x4e71, 0x4e94, 0x4e66, 0x4e34, 0x4dfd, 0x4ddc, 0x4e1d, 0x4e27, 0x4e64, 0x4e43, 0x4eb2, 0x4e7d, 0x4f30, 0x4e1a, 0x4e05, 0x4f21, 0x4dde, 0x4f53, 0x4e6f, 0x4e0a, 0x4e5e, 0x4dd2, 0x4e50, 0x4ee9, 0x4e05, 0x4dab, 0x4e4b, 0x4eb3, 0x4f2d, 0x4e0a, 0x4ec8, 0x4dbf, 0x4e3f, 0x4eca, 0x4ec0, 0x4ed5, 0x4f2c, 0x4e9c, 0x4e3d, 0x4ebc, 0x4e31, 0x4e9c, 0x4e33, 0x4e4e, 0x4e9c, 0x4e15, 0x4edc, 0x4ee4, 0x4e68, 0x4dd4, 0x4ef6, 0x4de9, 0x4e52, 0x4ebb, 0x4d9b, 0x4e7b, 0x4f28, 0x4e7d, 0x4e9c, 0x4e77, 0x4e80, 0x4e9f, 0x4e17, +0x4e60, 0x4e53, 0x4e8b, 0x4e28, 0x4e69, 0x4e47, 0x4e69, 0x4f88, 0x4dfc, 0x4f2c, 0x4e91, 0x4e75, 0x4f10, 0x4ecc, 0x4deb, 0x4dfa, 0x4e6d, 0x4e37, 0x4e21, 0x4e5c, 0x4ebd, 0x4dc5, 0x4e7f, 0x4e47, 0x4e82, 0x4e61, 0x4ea7, 0x4df0, 0x4eb8, 0x4f35, 0x4eac, 0x4ea1, 0x4f06, 0x4e15, 0x4ea4, 0x4df5, 0x4e63, 0x4de8, 0x4dd8, 0x4e0d, 0x4e25, 0x4e7f, 0x4e50, 0x4e90, 0x4e3d, 0x4ecd, 0x4dad, 0x4e6c, 0x4f1a, 0x4dd8, 0x4f33, 0x4e40, 0x4dfb, 0x4e3e, 0x4db5, 0x4e5f, 0x4eeb, 0x4e34, 0x4dda, 0x4e80, 0x4ecc, 0x4ed4, 0x4db3, 0x4e12, 0x4d87, 0x4e52, 0x4e2f, 0x4ed6, 0x4e9c, 0x4f17, 0x4e5e, 0x4e12, 0x4e48, 0x4e31, 0x4e88, 0x4e64, 0x4e44, 0x4e23, 0x4e16, 0x4ea3, 0x4e98, 0x4e0a, 0x4de2, 0x4ebc, 0x4dfc, 0x4e22, 0x4e5b, 0x4dd5, 0x4e85, 0x4ea4, 0x4e42, 0x4e4f, 0x4ea1, 0x4e2d, 0x4e44, 0x4d7d, +0x4db5, 0x4dad, 0x4e2a, 0x4d31, 0x4e06, 0x4dbc, 0x4e4e, 0x4e78, 0x4d7e, 0x4ea3, 0x4dc2, 0x4db8, 0x4ec4, 0x4daa, 0x4e42, 0x4de2, 0x4e01, 0x4dac, 0x4dbc, 0x4e00, 0x4da6, 0x4d71, 0x4e01, 0x4dd2, 0x4d92, 0x4db6, 0x4ec5, 0x4d54, 0x4e7b, 0x4e3f, 0x4e0b, 0x4dfc, 0x4e05, 0x4d6c, 0x4e96, 0x4d90, 0x4dae, 0x4d2d, 0x4d7c, 0x4dc9, 0x4d91, 0x4dcc, 0x4dab, 0x4e48, 0x4df2, 0x4e26, 0x4da6, 0x4dd1, 0x4e7d, 0x4dc3, 0x4eab, 0x4e04, 0x4d1f, 0x4dcb, 0x4db2, 0x4da9, 0x4dd1, 0x4d8c, 0x4d8d, 0x4df2, 0x4e1c, 0x4ef9, 0x4d3c, 0x4e0a, 0x4d23, 0x4d8f, 0x4e02, 0x4e27, 0x4e29, 0x4ea2, 0x4e10, 0x4dc6, 0x4de3, 0x4db2, 0x4e61, 0x4df7, 0x4df5, 0x4e25, 0x4de6, 0x4e46, 0x4e0f, 0x4dc8, 0x4d8f, 0x4e3c, 0x4d4e, 0x4ddd, 0x4df1, 0x4cfa, 0x4e06, 0x4e72, 0x4de3, 0x4dda, 0x4df9, 0x4e24, 0x4da8, 0x4d7f, +0x4d8f, 0x4d95, 0x4e5a, 0x4dbc, 0x4ded, 0x4daf, 0x4e1c, 0x4eea, 0x4db3, 0x4ee9, 0x4e7d, 0x4dd2, 0x4e60, 0x4df6, 0x4dfd, 0x4e2d, 0x4e5d, 0x4df0, 0x4db2, 0x4dde, 0x4de1, 0x4d4e, 0x4dd9, 0x4db6, 0x4de8, 0x4dcd, 0x4dff, 0x4d63, 0x4dee, 0x4e75, 0x4e5d, 0x4dfd, 0x4e30, 0x4d88, 0x4e6f, 0x4dc4, 0x4d8b, 0x4d90, 0x4d4e, 0x4dc2, 0x4e07, 0x4e3e, 0x4d82, 0x4e79, 0x4da7, 0x4de0, 0x4d1a, 0x4d8a, 0x4e91, 0x4da7, 0x4e5c, 0x4dcc, 0x4d9d, 0x4df7, 0x4d69, 0x4dee, 0x4e05, 0x4da3, 0x4d41, 0x4e2d, 0x4e13, 0x4ec4, 0x4cf6, 0x4e41, 0x4dc4, 0x4dad, 0x4d96, 0x4e74, 0x4e66, 0x4e4b, 0x4df8, 0x4da1, 0x4dbe, 0x4ddd, 0x4e12, 0x4d81, 0x4da9, 0x4dba, 0x4df4, 0x4dfb, 0x4e53, 0x4dbb, 0x4d79, 0x4e13, 0x4d93, 0x4dfc, 0x4da8, 0x4d6e, 0x4ddb, 0x4dee, 0x4db2, 0x4e71, 0x4e06, 0x4e15, 0x4dad, 0x4e10, +0x4dbe, 0x4d9a, 0x4e47, 0x4d82, 0x4e18, 0x4e0e, 0x4e70, 0x4ebd, 0x4e2f, 0x4eee, 0x4e47, 0x4e16, 0x4ed6, 0x4dee, 0x4e5a, 0x4e64, 0x4e99, 0x4dfa, 0x4dd7, 0x4e82, 0x4e32, 0x4dd0, 0x4e4a, 0x4e31, 0x4db7, 0x4dab, 0x4e6f, 0x4df7, 0x4e5e, 0x4ea5, 0x4e2f, 0x4e3d, 0x4e1b, 0x4dee, 0x4e6e, 0x4df6, 0x4e07, 0x4d94, 0x4d52, 0x4d9d, 0x4d9a, 0x4dc1, 0x4d68, 0x4e8a, 0x4de5, 0x4ed0, 0x4dbc, 0x4e0e, 0x4e82, 0x4df1, 0x4eda, 0x4deb, 0x4d7d, 0x4e03, 0x4d79, 0x4d9c, 0x4e18, 0x4df0, 0x4dc0, 0x4e04, 0x4e3c, 0x4f3c, 0x4dcf, 0x4e53, 0x4d88, 0x4dad, 0x4e2e, 0x4e30, 0x4e7a, 0x4ea5, 0x4dca, 0x4df9, 0x4e4a, 0x4e05, 0x4e9c, 0x4dca, 0x4e18, 0x4e1c, 0x4e4d, 0x4e3a, 0x4ed8, 0x4dd7, 0x4dd2, 0x4e56, 0x4da1, 0x4e5c, 0x4dec, 0x4d66, 0x4e07, 0x4e62, 0x4e15, 0x4e5e, 0x4e30, 0x4e1d, 0x4e47, 0x4e0e, +0x4dec, 0x4e01, 0x4e70, 0x4dfa, 0x4e67, 0x4db4, 0x4e83, 0x4f89, 0x4e1b, 0x4f76, 0x4e4b, 0x4e2b, 0x4f33, 0x4e79, 0x4e5f, 0x4e1d, 0x4e90, 0x4df1, 0x4df9, 0x4e53, 0x4deb, 0x4d95, 0x4e23, 0x4d81, 0x4e0a, 0x4e1e, 0x4efc, 0x4df0, 0x4e8d, 0x4ee7, 0x4e99, 0x4ecb, 0x4e37, 0x4e41, 0x4ece, 0x4e28, 0x4deb, 0x4dba, 0x4dd7, 0x4e1d, 0x4e40, 0x4e1e, 0x4e08, 0x4eab, 0x4e61, 0x4e9e, 0x4db5, 0x4e32, 0x4ed9, 0x4df4, 0x4f2d, 0x4e58, 0x4d91, 0x4dd9, 0x4dd4, 0x4e32, 0x4e5e, 0x4db8, 0x4dfb, 0x4e4d, 0x4e87, 0x4f3e, 0x4dcc, 0x4ea3, 0x4d85, 0x4e3b, 0x4e3a, 0x4e95, 0x4ea9, 0x4efa, 0x4f03, 0x4e56, 0x4e70, 0x4e59, 0x4e85, 0x4e7b, 0x4e0a, 0x4e5e, 0x4e33, 0x4e61, 0x4edb, 0x4e24, 0x4e24, 0x4e4e, 0x4ddc, 0x4e35, 0x4e52, 0x4dc2, 0x4e58, 0x4ecb, 0x4dea, 0x4e93, 0x4e7a, 0x4e7a, 0x4e24, 0x4e24, +0x4e1a, 0x4e76, 0x4e5f, 0x4dcb, 0x4e4c, 0x4e37, 0x4ed6, 0x4ec9, 0x4de4, 0x4f1e, 0x4e8e, 0x4e22, 0x4eef, 0x4e5e, 0x4e26, 0x4e5b, 0x4ed3, 0x4e7a, 0x4dbf, 0x4e76, 0x4e06, 0x4de0, 0x4e59, 0x4de5, 0x4e66, 0x4e1f, 0x4e76, 0x4dd8, 0x4e8d, 0x4ef8, 0x4ed3, 0x4e45, 0x4e84, 0x4e3d, 0x4ef2, 0x4df1, 0x4df6, 0x4e09, 0x4d77, 0x4e22, 0x4dc6, 0x4e8a, 0x4dcd, 0x4e8f, 0x4e57, 0x4eef, 0x4dbc, 0x4e40, 0x4f00, 0x4deb, 0x4e93, 0x4e33, 0x4d66, 0x4e1a, 0x4dc6, 0x4dee, 0x4e42, 0x4dd8, 0x4e23, 0x4e83, 0x4e0b, 0x4ee3, 0x4da3, 0x4e63, 0x4dbf, 0x4e1a, 0x4e7a, 0x4e8f, 0x4ede, 0x4eed, 0x4e27, 0x4e5a, 0x4e42, 0x4e2f, 0x4ea2, 0x4e1d, 0x4e16, 0x4e7e, 0x4eab, 0x4e64, 0x4ec7, 0x4dc2, 0x4d9a, 0x4eca, 0x4e4a, 0x4e22, 0x4e54, 0x4dd1, 0x4e67, 0x4e81, 0x4de7, 0x4e32, 0x4f41, 0x4e70, 0x4e0d, 0x4ddc, +0x4da1, 0x4deb, 0x4e14, 0x4d79, 0x4e1c, 0x4db9, 0x4e1a, 0x4e73, 0x4dd2, 0x4ee5, 0x4dd8, 0x4dbd, 0x4e94, 0x4dd3, 0x4da2, 0x4e2d, 0x4e62, 0x4dda, 0x4d75, 0x4e2d, 0x4e01, 0x4d3e, 0x4ddf, 0x4ddb, 0x4e1e, 0x4d91, 0x4e09, 0x4da9, 0x4e74, 0x4e7a, 0x4dba, 0x4dd4, 0x4e30, 0x4da4, 0x4e3e, 0x4d81, 0x4d95, 0x4d95, 0x4d81, 0x4e30, 0x4e23, 0x4e35, 0x4dbd, 0x4e34, 0x4e0a, 0x4e89, 0x4d2f, 0x4df7, 0x4e72, 0x4dbe, 0x4ef1, 0x4e28, 0x4d7e, 0x4dd9, 0x4dc9, 0x4dd5, 0x4e30, 0x4de8, 0x4da4, 0x4e00, 0x4e0a, 0x4e66, 0x4d32, 0x4e04, 0x4d5e, 0x4db9, 0x4e11, 0x4e3e, 0x4de4, 0x4e6c, 0x4e38, 0x4e10, 0x4db9, 0x4df4, 0x4e63, 0x4dec, 0x4deb, 0x4dd5, 0x4e2c, 0x4e28, 0x4e22, 0x4d86, 0x4dd8, 0x4e3e, 0x4d27, 0x4e7e, 0x4dc5, 0x4cf5, 0x4e04, 0x4e4e, 0x4e1c, 0x4df2, 0x4e10, 0x4de0, 0x4d6b, 0x4d53, +0x4de7, 0x4e37, 0x4e87, 0x4e27, 0x4e9b, 0x4e07, 0x4e87, 0x4f9e, 0x4e14, 0x4faf, 0x4edd, 0x4f04, 0x4f20, 0x4e28, 0x4d9f, 0x4e6d, 0x4f14, 0x4df2, 0x4e1b, 0x4e74, 0x4e77, 0x4d6f, 0x4e33, 0x4dff, 0x4e7c, 0x4e75, 0x4e6e, 0x4e2c, 0x4e68, 0x4f3a, 0x4ec2, 0x4e8f, 0x4eda, 0x4e35, 0x4f59, 0x4e42, 0x4e34, 0x4dfe, 0x4e42, 0x4e5b, 0x4e3a, 0x4e91, 0x4e20, 0x4e71, 0x4eec, 0x4eba, 0x4e03, 0x4e1f, 0x4eac, 0x4dd8, 0x4f57, 0x4ead, 0x4de8, 0x4de5, 0x4e17, 0x4e96, 0x4e7c, 0x4db7, 0x4ddb, 0x4e47, 0x4e6a, 0x4f17, 0x4d7d, 0x4e98, 0x4e04, 0x4e32, 0x4e82, 0x4ecf, 0x4ed7, 0x4f05, 0x4e77, 0x4ec6, 0x4ee5, 0x4e3f, 0x4e8f, 0x4e83, 0x4dcd, 0x4e0e, 0x4e9d, 0x4e58, 0x4eea, 0x4df3, 0x4de0, 0x4ecb, 0x4e06, 0x4e8a, 0x4e68, 0x4d67, 0x4e5a, 0x4eef, 0x4e05, 0x4e8b, 0x4eff, 0x4e46, 0x4e60, 0x4dd7, +0x4dcc, 0x4dee, 0x4e78, 0x4db4, 0x4e61, 0x4db1, 0x4e3e, 0x4edd, 0x4db1, 0x4ede, 0x4d68, 0x4e5a, 0x4efb, 0x4dd2, 0x4dfe, 0x4e28, 0x4ec4, 0x4e16, 0x4d85, 0x4e55, 0x4dff, 0x4dc4, 0x4e27, 0x4dc9, 0x4dc7, 0x4dd2, 0x4e79, 0x4d94, 0x4e4e, 0x4e8b, 0x4e6a, 0x4e52, 0x4dfc, 0x4e08, 0x4e1e, 0x4dff, 0x4daf, 0x4d7b, 0x4d51, 0x4da5, 0x4deb, 0x4e25, 0x4e00, 0x4e7a, 0x4de4, 0x4ea6, 0x4d64, 0x4ddc, 0x4ea0, 0x4ddb, 0x4e73, 0x4dfa, 0x4d1b, 0x4e17, 0x4d78, 0x4de8, 0x4eb9, 0x4dc4, 0x4dc0, 0x4e2e, 0x4e61, 0x4eb6, 0x4dac, 0x4e6a, 0x4d86, 0x4dd0, 0x4e92, 0x4e20, 0x4e2b, 0x4e5f, 0x4df0, 0x4e2d, 0x4e1b, 0x4dd7, 0x4e1d, 0x4e1f, 0x4e45, 0x4e6e, 0x4dc8, 0x4de8, 0x4e5f, 0x4dea, 0x4dd3, 0x4e5e, 0x4dda, 0x4dee, 0x4dac, 0x4d7d, 0x4e39, 0x4e3c, 0x4e22, 0x4e6e, 0x4e77, 0x4e45, 0x4e0b, 0x4dd3, +0x4e35, 0x4e33, 0x4e9c, 0x4de7, 0x4e4c, 0x4e54, 0x4eeb, 0x4f2a, 0x4e39, 0x4f67, 0x4e9e, 0x4e61, 0x4f2b, 0x4e50, 0x4e45, 0x4eab, 0x4f08, 0x4e4f, 0x4e01, 0x4e7a, 0x4e73, 0x4df9, 0x4e88, 0x4dd9, 0x4ea5, 0x4e6d, 0x4ef7, 0x4dcf, 0x4f2f, 0x4f58, 0x4ef7, 0x4eca, 0x4e71, 0x4e82, 0x4f22, 0x4e73, 0x4e35, 0x4e09, 0x4de6, 0x4e4a, 0x4e4c, 0x4e58, 0x4e07, 0x4f1c, 0x4ea0, 0x4f1d, 0x4de4, 0x4e88, 0x4ec8, 0x4e27, 0x4f13, 0x4df9, 0x4dc0, 0x4e55, 0x4da9, 0x4e3b, 0x4eb5, 0x4df2, 0x4e28, 0x4ea0, 0x4e45, 0x4f56, 0x4dfe, 0x4ebe, 0x4db8, 0x4e2b, 0x4ea1, 0x4ebc, 0x4ec6, 0x4f16, 0x4e85, 0x4e5a, 0x4e8c, 0x4e67, 0x4efc, 0x4e11, 0x4e3e, 0x4e7c, 0x4e7b, 0x4e66, 0x4ecf, 0x4df3, 0x4e39, 0x4e97, 0x4dd1, 0x4eb3, 0x4e47, 0x4e05, 0x4e7d, 0x4eb7, 0x4e7b, 0x4eca, 0x4f2b, 0x4ea0, 0x4e2b, 0x4e51, +0x4db9, 0x4dbf, 0x4e60, 0x4db6, 0x4ec2, 0x4da9, 0x4e40, 0x4eb2, 0x4dd0, 0x4ee8, 0x4df1, 0x4e3d, 0x4eef, 0x4e3a, 0x4e4c, 0x4dfe, 0x4e5e, 0x4e52, 0x4df0, 0x4e28, 0x4e65, 0x4de5, 0x4e47, 0x4d6d, 0x4e02, 0x4dd1, 0x4e7c, 0x4dde, 0x4e2f, 0x4e87, 0x4e9e, 0x4e58, 0x4e0a, 0x4e91, 0x4e0c, 0x4e05, 0x4e1d, 0x4d89, 0x4d53, 0x4da9, 0x4e6b, 0x4e71, 0x4df8, 0x4e8a, 0x4dcd, 0x4ed8, 0x4d7f, 0x4e1d, 0x4e77, 0x4d97, 0x4ea3, 0x4d6f, 0x4d9d, 0x4e0f, 0x4dcb, 0x4e2b, 0x4e8e, 0x4dbd, 0x4d96, 0x4e28, 0x4e09, 0x4f0c, 0x4d95, 0x4e53, 0x4d66, 0x4e32, 0x4e1c, 0x4dfb, 0x4e2a, 0x4e91, 0x4ed8, 0x4dd0, 0x4e94, 0x4e1e, 0x4dd3, 0x4e4a, 0x4dcd, 0x4e56, 0x4e2f, 0x4e7e, 0x4e22, 0x4dd2, 0x4e42, 0x4e9a, 0x4ddc, 0x4e3c, 0x4e8a, 0x4d97, 0x4e00, 0x4e7e, 0x4d80, 0x4e5c, 0x4eba, 0x4e5e, 0x4e47, 0x4e02, +0x4c99, 0x4c81, 0x4d53, 0x4cb2, 0x4d3f, 0x4ca4, 0x4d31, 0x4dab, 0x4d46, 0x4dae, 0x4ce7, 0x4d3d, 0x4da8, 0x4d00, 0x4d6a, 0x4d0d, 0x4d75, 0x4d0c, 0x4cc1, 0x4cf5, 0x4d2e, 0x4cc4, 0x4ccf, 0x4cac, 0x4cfc, 0x4cfa, 0x4d7f, 0x4ccd, 0x4d41, 0x4d62, 0x4d43, 0x4d2f, 0x4cf8, 0x4cfc, 0x4db4, 0x4d00, 0x4cfa, 0x4cad, 0x4cf2, 0x4cf7, 0x4d04, 0x4cf2, 0x4caf, 0x4d56, 0x4cda, 0x4d5b, 0x4cef, 0x4d37, 0x4d81, 0x4cca, 0x4ddd, 0x4ca3, 0x4c50, 0x4d2d, 0x4c81, 0x4cf7, 0x4d46, 0x4ce2, 0x4ce5, 0x4d38, 0x4cf5, 0x4de8, 0x4c6a, 0x4d4f, 0x4c86, 0x4cc3, 0x4d31, 0x4d5b, 0x4d55, 0x4d82, 0x4d74, 0x4cc0, 0x4d08, 0x4d27, 0x4d0a, 0x4cd9, 0x4cf2, 0x4d38, 0x4c9b, 0x4d29, 0x4d67, 0x4d1a, 0x4d25, 0x4d1d, 0x4cdd, 0x4cd0, 0x4ced, 0x4c6d, 0x4d0d, 0x4d72, 0x4d3f, 0x4d94, 0x4d5a, 0x4d2d, 0x4d00, 0x4cb8 +}; \ No newline at end of file diff --git a/redmule/redmule.c b/redmule/redmule.c new file mode 100644 index 0000000..5b5c037 --- /dev/null +++ b/redmule/redmule.c @@ -0,0 +1,91 @@ +/* + * Copyright (C) 2022-2023 ETH Zurich and University of Bologna + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * SPDX-License-Identifier: Apache-2.0 + * + * Author: Yvan Tortorella + * + * RedMulE SW test + */ + +#include +#include "stdio.h" +#include "utils/redmule_utils.h" +#include "archi_redmule.h" +#include "hal_redmule.h" + +// #include "inc/x_input.h" +// #include "inc/w_input.h" +// #include "inc/y_input.h" +// #include "inc/z_output.h" +#include "inc/golden.h" + +int main() { + + volatile int errors = 0; + + if(get_core_id() == 0){ + uint16_t m_size = M_SIZE; + uint16_t n_size = N_SIZE; + uint16_t k_size = K_SIZE; + + uint8_t volatile *x = (uint8_t volatile *) pi_l1_malloc(0, (2*m_size*n_size)); + uint8_t volatile *w = (uint8_t volatile *) pi_l1_malloc(0, (2*n_size*k_size)); + uint8_t volatile *y = (uint8_t volatile *) pi_l1_malloc(0, (2*m_size*k_size)); + + generate_test_data16((int) x, (int) w, (int) y, (int) m_size, (int) n_size, (int) k_size); + + int gold_sum = 0, check_sum = 0; + int i,j; + + int offload_id_tmp, offload_id; + + // Enable RedMulE + hwpe_cg_enable(); + + hwpe_soft_clear(); + + // while( ( offload_id_tmp = hwpe_acquire_job() ) < 0); + + // redmule_cfg ((unsigned int) x, + // (unsigned int) w, + // (unsigned int) y, + // m_size, n_size, k_size, + // (uint8_t) GEMM, + // (uint8_t) Float16); + redmule_x_add_set ((unsigned int) x); + redmule_w_add_set ((unsigned int) w); + redmule_y_add_set ((unsigned int) y); + redmule_z_add_set ((unsigned int) y); + redmule_cfg (m_size, n_size, k_size, gemm_ops); + + // Start RedMulE operation + hwpe_trigger_job(); + + // Wait for end of computation + redmule_evt_wait(); + + // Disable RedMulE + hwpe_cg_disable(); + + errors = redmule_compare16((int) y, (int) m_size, (int) k_size); + + *(int *) 0x1A1040A0 = errors; + + printf ("Terminated test with %d errors. See you!\n", errors); + + } + synch_barrier(); + return errors; +} diff --git a/redmule/utils/redmule_utils.h b/redmule/utils/redmule_utils.h new file mode 100644 index 0000000..3f7fa59 --- /dev/null +++ b/redmule/utils/redmule_utils.h @@ -0,0 +1,246 @@ +/* + * Copyright (C) 2022-2023 ETH Zurich and University of Bologna + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * SPDX-License-Identifier: Apache-2.0 + * + * Author: Yvan Tortorella + * + */ + +#include "../inc/x_input.h" +#include "../inc/w_input.h" +#include "../inc/y_input.h" +#include "../inc/z_output.h" + +#ifndef REDMULE_UTILS_H +#define REDMULE_UTILS_H + +void generate_test_data16(int x_start_addr, + int w_start_addr, + int y_start_addr, + int m_size, + int n_size, + int k_size) { + + int x_addr = x_start_addr; + int w_addr = w_start_addr; + int y_addr = y_start_addr; + int x_end_addr = x_start_addr + (2*m_size*n_size); + int w_end_addr = w_start_addr + (2*n_size*k_size); + int y_end_addr = y_start_addr + (2*m_size*k_size); + + // Generating input stimuli from golden model + for (x_addr = x_start_addr; x_addr < x_end_addr; x_addr += 2) { + int x = x_addr - x_start_addr; + *(uint32_t *)(x_addr) = x_inp[x/2]; + } + + // Generating Weight stimuli from golden model + for (w_addr = w_start_addr; w_addr < w_end_addr; w_addr += 2) { + int w = w_addr - w_start_addr; + *(uint32_t *)(w_addr) = w_inp[w/2]; + } + + for (y_addr = y_start_addr; y_addr < y_end_addr; y_addr += 2) { + int y = y_addr - y_start_addr; + *(uint32_t *)(y_addr) = y_inp[y/2]; + } +} + +int redmule_compare16 (int z_start_addr, int m_size, int k_size) { + int err = 0; + int z_end_addr = z_start_addr + 2*m_size*k_size; + uint16_t z_computed; + uint16_t diff, diff_1, diff_2; + + for (int z_addr = z_start_addr; z_addr < z_end_addr; z_addr += 2) { + int z = z_addr - z_start_addr; + z_computed = *(uint32_t *)(z_addr); + + if ( z_computed != z_oup[z/2] ) { + diff_1 = z_computed - z_oup[z/2]; + if (diff_1 > 3) { + diff_2 = z_oup[z/2] - z_computed; + if (diff_2 > 3) { + err++; + } + } + } + } + + return err; + +} + +int redmule16_compare_int(uint32_t *actual_z, uint32_t *golden_z, int len) { + #define ERR 0x0011 + uint32_t actual_word = 0; + uint16_t actual_MSHWord, actual_LSHWord; + uint32_t golden_word = 0; + uint16_t golden_MSHWord, golden_LSHWord; + uint32_t actual = 0; + uint32_t golden = 0; + + int errors = 0; + int error; + + for (int i=0; i golden_LSHWord) ? (actual_LSHWord - golden_LSHWord) : 0; + diff = (actual_LSHWord < golden_LSHWord) ? (golden_LSHWord - actual_LSHWord) : 0; + + if (diff > ERR) { + error = 1; + #ifdef VERBOSE + tfp_printf ("diff: 0x%08x\n", diff); + tfp_printf ("LSW: Error!\n"); + #endif + } + + // Checking Most Significant Half-Word + actual_MSHWord = (uint16_t)((actual_word >> 16) & 0x0000FFFF); + golden_MSHWord = (uint16_t)((golden_word >> 16) & 0x0000FFFF); + + diff = (actual_MSHWord > golden_MSHWord) ? (actual_MSHWord - golden_MSHWord) : 0; + diff = (actual_MSHWord < golden_MSHWord) ? (golden_MSHWord - actual_MSHWord) : 0; + + if (diff > ERR) { + error = 1; + #ifdef VERBOSE + tfp_printf ("diff: 0x%08x\n", diff); + tfp_printf ("MSW: Error!\n"); + #endif + } + + errors += error; + + #ifdef DEBUG + tfp_printf(" Golden: 0x%08x; Actual: 0x%08x,\n", golden_word, actual_word); + #endif + + #ifdef VERBOSE + if(error) { + if(errors==1) tfp_printf(" golden <- actual @ address @ index\n"); + tfp_printf(" 0x%08x <- 0x%08x @ 0x%08x @ 0x%08x\n", golden_word, actual_word, (actual_z+i), i*4); + } + #endif + } + return errors; +} + +int redmule8_compare_int(uint32_t *actual_z, uint32_t *golden_z, int len) { + #define ERR 0x0011 + uint32_t actual_word = 0; + uint8_t actual_Byte0, + actual_Byte1, + actual_Byte2, + actual_Byte3; + uint32_t golden_word = 0; + uint8_t golden_Byte0, + golden_Byte1, + golden_Byte2, + golden_Byte3; + uint32_t actual = 0; + uint32_t golden = 0; + + int errors = 0; + int error; + + for (int i=0; i golden_Byte0) ? (actual_Byte0 - golden_Byte0) : 0; + diff = (actual_Byte0 < golden_Byte0) ? (golden_Byte0 - actual_Byte0) : 0; + + if (diff > ERR) { + error = 1; + tfp_printf ("diff: 0x%08x\n", diff); + tfp_printf ("Byte0: Error!\n"); + } + + // Cheching Byte1 + actual_Byte1 = (uint8_t)( (actual_word >> 8 ) & 0x000000FF); + golden_Byte1 = (uint8_t)( (golden_word >> 8 ) & 0x000000FF); + + diff = (actual_Byte1 > golden_Byte1) ? (actual_Byte1 - golden_Byte1) : 0; + diff = (actual_Byte1 < golden_Byte1) ? (golden_Byte1 - actual_Byte1) : 0; + + if (diff > ERR) { + error = 1; + tfp_printf ("diff: 0x%08x\n", diff); + tfp_printf ("Byte1: Error!\n"); + } + + // Cheching Byte2 + actual_Byte2 = (uint8_t)( (actual_word >> 16 ) & 0x000000FF); + golden_Byte2 = (uint8_t)( (golden_word >> 16 ) & 0x000000FF); + + diff = (actual_Byte2 > golden_Byte2) ? (actual_Byte2 - golden_Byte2) : 0; + diff = (actual_Byte2 < golden_Byte2) ? (golden_Byte2 - actual_Byte2) : 0; + + if (diff > ERR) { + error = 1; + tfp_printf ("diff: 0x%08x\n", diff); + tfp_printf ("Byte2: Error!\n"); + } + + // Cheching Byte3 + actual_Byte3 = (uint8_t)( (actual_word >> 24 ) & 0x000000FF); + golden_Byte3 = (uint8_t)( (golden_word >> 24 ) & 0x000000FF); + + diff = (actual_Byte3 > golden_Byte3) ? (actual_Byte3 - golden_Byte3) : 0; + diff = (actual_Byte3 < golden_Byte3) ? (golden_Byte3 - actual_Byte3) : 0; + + if (diff > ERR) { + error = 1; + tfp_printf ("diff: 0x%08x\n", diff); + tfp_printf ("Byte3: Error!\n"); + } + + errors += error; + + #ifdef DEBUG + tfp_printf(" Golden: 0x%08x; Actual: 0x%08x,\n", golden_word, actual_word); + #endif + + #ifdef VERBOSE + if(error) { + if(errors==1) tfp_printf(" golden <- actual @ address @ index\n"); + tfp_printf(" 0x%08x <- 0x%08x @ 0x%08x @ 0x%08x\n", golden_word, actual_word, (actual_z+i), i*4); + } + #endif + } + return errors; +} + +#endif From 7ee9073a21314f82bf140dafba783c96382cc9a3 Mon Sep 17 00:00:00 2001 From: Yvan Tortorella Date: Mon, 11 Sep 2023 10:58:35 +0200 Subject: [PATCH 08/71] Cleaner HWPE test integration, added DMA-based tensors initialization. TODO: understand why the core reads Xs during matrix checks. --- {redmule => hwpe/redmule}/Makefile | 4 + {redmule => hwpe/redmule}/archi_redmule.h | 29 ++- {redmule => hwpe/redmule}/hal_redmule.h | 271 +++++++++++++++++++-- {redmule => hwpe/redmule}/inc/golden.h | 0 {redmule => hwpe/redmule}/inc/tensor_dim.h | 0 {redmule => hwpe/redmule}/inc/w_2D.h | 0 {redmule => hwpe/redmule}/inc/w_input.h | 0 {redmule => hwpe/redmule}/inc/x_2D.h | 0 {redmule => hwpe/redmule}/inc/x_input.h | 0 {redmule => hwpe/redmule}/inc/y_2D.h | 0 {redmule => hwpe/redmule}/inc/y_input.h | 0 {redmule => hwpe/redmule}/inc/z_2D.h | 0 {redmule => hwpe/redmule}/inc/z_output.h | 0 {redmule => hwpe/redmule}/redmule.c | 40 ++- redmule/utils/redmule_utils.h | 246 ------------------- 15 files changed, 315 insertions(+), 275 deletions(-) rename {redmule => hwpe/redmule}/Makefile (67%) rename {redmule => hwpe/redmule}/archi_redmule.h (88%) rename {redmule => hwpe/redmule}/hal_redmule.h (54%) rename {redmule => hwpe/redmule}/inc/golden.h (100%) rename {redmule => hwpe/redmule}/inc/tensor_dim.h (100%) rename {redmule => hwpe/redmule}/inc/w_2D.h (100%) rename {redmule => hwpe/redmule}/inc/w_input.h (100%) rename {redmule => hwpe/redmule}/inc/x_2D.h (100%) rename {redmule => hwpe/redmule}/inc/x_input.h (100%) rename {redmule => hwpe/redmule}/inc/y_2D.h (100%) rename {redmule => hwpe/redmule}/inc/y_input.h (100%) rename {redmule => hwpe/redmule}/inc/z_2D.h (100%) rename {redmule => hwpe/redmule}/inc/z_output.h (100%) rename {redmule => hwpe/redmule}/redmule.c (70%) delete mode 100644 redmule/utils/redmule_utils.h diff --git a/redmule/Makefile b/hwpe/redmule/Makefile similarity index 67% rename from redmule/Makefile rename to hwpe/redmule/Makefile index ce481f9..0b85ed2 100644 --- a/redmule/Makefile +++ b/hwpe/redmule/Makefile @@ -2,4 +2,8 @@ PULP_APP = test PULP_APP_SRCS = redmule.c PULP_CFLAGS = -O3 +ifeq ($(use_dma),1) + PULP_CFLAGS += -DUSE_DMA +endif + include $(PULP_SDK_HOME)/install/rules/pulp_rt.mk diff --git a/redmule/archi_redmule.h b/hwpe/redmule/archi_redmule.h similarity index 88% rename from redmule/archi_redmule.h rename to hwpe/redmule/archi_redmule.h index 956c190..39f3203 100644 --- a/redmule/archi_redmule.h +++ b/hwpe/redmule/archi_redmule.h @@ -62,8 +62,17 @@ * */ -#define ARCHI_CL_EVT_ACC0 12 -#define ARCHI_CL_EVT_ACC1 13 +/* PULP Cluster Archi defines */ +#define ARCHI_CLUST_CTRL_BASE 0x50200000 +#define ARCHI_CLUST_HWPE_BASE 0x50201000 +#define DMA_COMMAND_QUEUE 0x50204400 +#define DMA_STATUS_REGISTER 0x50204404 +#define ARCHI_CL_HWPE_EVT0 12 +#define ARCHI_CL_HWPE_EVT1 13 +#define FC_DMA_EVENT 8 +#define CL_DMA_EVENT 22 +#define CLUST_CTRL_HWPE_EN 0x18 +#define CLUST_CTRL_HWPE_EN_MASK 0x800 #define __builtin_bitinsert(a,b,c,d) (a | (((b << (32-c)) >> (32-c)) << d)) // RedMulE architecture @@ -74,9 +83,6 @@ #define PIPE_REGS 3 #define ARRAY_WIDTH 12 /* Superior limit is ARRAY_HEIGHT*PIPE_REGS */ -// Base address -#define REDMULE_BASE_ADD 0x50201000 - // Commands #define REDMULE_TRIGGER 0x00 #define REDMULE_ACQUIRE 0x04 @@ -142,4 +148,17 @@ #define FP16ALT 0x4 #define FP8ALT 0x5 +/* DMA Archi */ +#define DMA_TX 0 +#define DMA_RX 1 +#define DMA_INC 1 + +#define PLP_DMA_TYPE_BIT 0x00000011 +#define PLP_DMA_INCR_BIT 0x00000012 +#define PLP_DMA_2D_BIT 0x00000013 +#define PLP_DMA_ELE_BIT 0x00000014 +#define PLP_DMA_ILE_BIT 0x00000015 +#define PLP_DMA_BLE_BIT 0x00000016 +#define PLP_DMA_2D_TCDM_BIT 0x0000017 + #endif diff --git a/redmule/hal_redmule.h b/hwpe/redmule/hal_redmule.h similarity index 54% rename from redmule/hal_redmule.h rename to hwpe/redmule/hal_redmule.h index b4595e0..c5a0c32 100644 --- a/redmule/hal_redmule.h +++ b/hwpe/redmule/hal_redmule.h @@ -23,6 +23,11 @@ #define __HAL_REDMULE_H__ #include +#include "inc/x_input.h" +#include "inc/w_input.h" +#include "inc/y_input.h" +#include "inc/z_output.h" +#include "inc/golden.h" #include "inc/tensor_dim.h" /* @@ -32,20 +37,12 @@ * */ -/* LOW-LEVEL HAL */ -#define CLUST_CTRL_BASE 0x50200000 -#define REDMULE_ADDR_BASE 0x50201000 -#define REDMULE_ADDR_SPACE 0x00000100 - -#define CLUST_CTRL_HWPE_EN 0x18 -#define CLUS_CTRL_REDMULE_CG_EN_MASK 0x800 - // For all the following functions we use __builtin_pulp_OffsetedWrite and __builtin_pulp_OffsetedRead // instead of classic load/store because otherwise the compiler is not able to correctly factorize // the HWPE base in case several accesses are done, ending up with twice more code -#define HWPE_WRITE(value, offset) *(int *)(REDMULE_ADDR_BASE + offset) = value -#define HWPE_READ(offset) *(int *)(REDMULE_ADDR_BASE + offset) +#define HWPE_WRITE(value, offset) *(int *)(ARCHI_CLUST_HWPE_BASE + offset) = value +#define HWPE_READ(offset) *(int *)(ARCHI_CLUST_HWPE_BASE + offset) static inline void redmule_x_add_set (unsigned int value) { HWPE_WRITE(value, REDMULE_REG_OFFS + REDMULE_REG_X_PTR); @@ -89,17 +86,48 @@ static inline void hwpe_soft_clear() { } static inline void hwpe_cg_enable() { - *(volatile int*) (CLUST_CTRL_BASE + CLUST_CTRL_HWPE_EN) |= CLUS_CTRL_REDMULE_CG_EN_MASK; + *(volatile int*) (ARCHI_CLUST_CTRL_BASE + CLUST_CTRL_HWPE_EN) |= CLUST_CTRL_HWPE_EN_MASK; } static inline void hwpe_cg_disable() { - *(volatile int*) (CLUST_CTRL_BASE + CLUST_CTRL_HWPE_EN) &= ~CLUS_CTRL_REDMULE_CG_EN_MASK; + *(volatile int*) (ARCHI_CLUST_CTRL_BASE + CLUST_CTRL_HWPE_EN) &= ~CLUST_CTRL_HWPE_EN_MASK; } static inline void redmule_evt_wait() { do { - eu_evt_maskWaitAndClr (1 << ARCHI_CL_EVT_ACC0); - } while((*(int volatile *)(REDMULE_ADDR_BASE + REDMULE_STATUS)) != 0); + eu_evt_maskWaitAndClr (1 << ARCHI_CL_HWPE_EVT0); + } while((*(int volatile *)(ARCHI_CLUST_HWPE_BASE + REDMULE_STATUS)) != 0); +} + +/* DMA APIs */ +static inline int mchan_alloc(){ + return *(volatile int*) DMA_COMMAND_QUEUE; +} + +static inline void mchan_transfer(unsigned int len, + unsigned int ext_addr, + unsigned int tcdm_addr) { + + *(volatile int*) DMA_COMMAND_QUEUE = len | + (DMA_RX << PLP_DMA_TYPE_BIT) | + (DMA_INC << PLP_DMA_INCR_BIT) | + (0 << PLP_DMA_2D_BIT) | + (1 << PLP_DMA_ELE_BIT) | + (1 << PLP_DMA_ILE_BIT) | + (0 << PLP_DMA_BLE_BIT) | + (0 << PLP_DMA_2D_TCDM_BIT); + *(volatile int*) DMA_COMMAND_QUEUE = tcdm_addr; + *(volatile int*) DMA_COMMAND_QUEUE = ext_addr; +} + +static inline void mchan_barrier(int id) { + while(((*(volatile int*)(DMA_STATUS_REGISTER)) >> id ) & 0x1 ) { + eu_evt_maskWaitAndClr(1 << FC_DMA_EVENT); + } +} + +static inline void mchan_free(int id) { + *(volatile int*) DMA_STATUS_REGISTER = 0x1 << id; } // void redmule_cfg (unsigned int x, unsigned int w, unsigned int z, @@ -281,4 +309,219 @@ void redmule_cfg (uint16_t m_size, uint16_t n_size, uint16_t k_size, uint8_t gem HWPE_WRITE(op_selection , REDMULE_REG_OFFS + REDMULE_REG_OP_SELECTION ); } +void generate_test_data16(int x_start_addr, + int w_start_addr, + int y_start_addr, + int m_size, + int n_size, + int k_size) { + + int x_addr = x_start_addr; + int w_addr = w_start_addr; + int y_addr = y_start_addr; + int x_end_addr = x_start_addr + (2*m_size*n_size); + int w_end_addr = w_start_addr + (2*n_size*k_size); + int y_end_addr = y_start_addr + (2*m_size*k_size); + + // Generating input stimuli from golden model + for (x_addr = x_start_addr; x_addr < x_end_addr; x_addr += 2) { + int x = x_addr - x_start_addr; + *(uint32_t *)(x_addr) = x_inp[x/2]; + } + + // Generating Weight stimuli from golden model + for (w_addr = w_start_addr; w_addr < w_end_addr; w_addr += 2) { + int w = w_addr - w_start_addr; + *(uint32_t *)(w_addr) = w_inp[w/2]; + } + + for (y_addr = y_start_addr; y_addr < y_end_addr; y_addr += 2) { + int y = y_addr - y_start_addr; + *(uint32_t *)(y_addr) = y_inp[y/2]; + } +} + +int redmule_compare16 (int z_start_addr, int m_size, int k_size) { + int err = 0; + int z_end_addr = z_start_addr + 2*m_size*k_size; + uint16_t z_computed; + uint16_t diff, diff_1, diff_2; + + for (int z_addr = z_start_addr; z_addr < z_end_addr; z_addr += 2) { + int z = z_addr - z_start_addr; + z_computed = *(uint32_t *)(z_addr); + + if ( z_computed != z_oup[z/2] ) { + diff_1 = z_computed - z_oup[z/2]; + if (diff_1 > 3) { + diff_2 = z_oup[z/2] - z_computed; + if (diff_2 > 3) { + err++; + } + } + } + } + + return err; + +} + +int redmule16_compare_int(uint32_t *actual_z, uint32_t *golden_z, int len) { + #define ERR 0x0011 + uint32_t actual_word = 0; + uint16_t actual_MSHWord, actual_LSHWord; + uint32_t golden_word = 0; + uint16_t golden_MSHWord, golden_LSHWord; + uint32_t actual = 0; + uint32_t golden = 0; + + int errors = 0; + int error; + + for (int i=0; i golden_LSHWord) ? (actual_LSHWord - golden_LSHWord) : 0; + diff = (actual_LSHWord < golden_LSHWord) ? (golden_LSHWord - actual_LSHWord) : 0; + + if (diff > ERR) { + error = 1; + #ifdef VERBOSE + tfp_printf ("diff: 0x%08x\n", diff); + tfp_printf ("LSW: Error!\n"); + #endif + } + + // Checking Most Significant Half-Word + actual_MSHWord = (uint16_t)((actual_word >> 16) & 0x0000FFFF); + golden_MSHWord = (uint16_t)((golden_word >> 16) & 0x0000FFFF); + + diff = (actual_MSHWord > golden_MSHWord) ? (actual_MSHWord - golden_MSHWord) : 0; + diff = (actual_MSHWord < golden_MSHWord) ? (golden_MSHWord - actual_MSHWord) : 0; + + if (diff > ERR) { + error = 1; + #ifdef VERBOSE + tfp_printf ("diff: 0x%08x\n", diff); + tfp_printf ("MSW: Error!\n"); + #endif + } + + errors += error; + + #ifdef DEBUG + tfp_printf(" Golden: 0x%08x; Actual: 0x%08x,\n", golden_word, actual_word); + #endif + + #ifdef VERBOSE + if(error) { + if(errors==1) tfp_printf(" golden <- actual @ address @ index\n"); + tfp_printf(" 0x%08x <- 0x%08x @ 0x%08x @ 0x%08x\n", golden_word, actual_word, (actual_z+i), i*4); + } + #endif + } + return errors; +} + +int redmule8_compare_int(uint32_t *actual_z, uint32_t *golden_z, int len) { + #define ERR 0x0011 + uint32_t actual_word = 0; + uint8_t actual_Byte0, + actual_Byte1, + actual_Byte2, + actual_Byte3; + uint32_t golden_word = 0; + uint8_t golden_Byte0, + golden_Byte1, + golden_Byte2, + golden_Byte3; + uint32_t actual = 0; + uint32_t golden = 0; + + int errors = 0; + int error; + + for (int i=0; i golden_Byte0) ? (actual_Byte0 - golden_Byte0) : 0; + diff = (actual_Byte0 < golden_Byte0) ? (golden_Byte0 - actual_Byte0) : 0; + + if (diff > ERR) { + error = 1; + tfp_printf ("diff: 0x%08x\n", diff); + tfp_printf ("Byte0: Error!\n"); + } + + // Cheching Byte1 + actual_Byte1 = (uint8_t)( (actual_word >> 8 ) & 0x000000FF); + golden_Byte1 = (uint8_t)( (golden_word >> 8 ) & 0x000000FF); + + diff = (actual_Byte1 > golden_Byte1) ? (actual_Byte1 - golden_Byte1) : 0; + diff = (actual_Byte1 < golden_Byte1) ? (golden_Byte1 - actual_Byte1) : 0; + + if (diff > ERR) { + error = 1; + tfp_printf ("diff: 0x%08x\n", diff); + tfp_printf ("Byte1: Error!\n"); + } + + // Cheching Byte2 + actual_Byte2 = (uint8_t)( (actual_word >> 16 ) & 0x000000FF); + golden_Byte2 = (uint8_t)( (golden_word >> 16 ) & 0x000000FF); + + diff = (actual_Byte2 > golden_Byte2) ? (actual_Byte2 - golden_Byte2) : 0; + diff = (actual_Byte2 < golden_Byte2) ? (golden_Byte2 - actual_Byte2) : 0; + + if (diff > ERR) { + error = 1; + tfp_printf ("diff: 0x%08x\n", diff); + tfp_printf ("Byte2: Error!\n"); + } + + // Cheching Byte3 + actual_Byte3 = (uint8_t)( (actual_word >> 24 ) & 0x000000FF); + golden_Byte3 = (uint8_t)( (golden_word >> 24 ) & 0x000000FF); + + diff = (actual_Byte3 > golden_Byte3) ? (actual_Byte3 - golden_Byte3) : 0; + diff = (actual_Byte3 < golden_Byte3) ? (golden_Byte3 - actual_Byte3) : 0; + + if (diff > ERR) { + error = 1; + tfp_printf ("diff: 0x%08x\n", diff); + tfp_printf ("Byte3: Error!\n"); + } + + errors += error; + + #ifdef DEBUG + tfp_printf(" Golden: 0x%08x; Actual: 0x%08x,\n", golden_word, actual_word); + #endif + + #ifdef VERBOSE + if(error) { + if(errors==1) tfp_printf(" golden <- actual @ address @ index\n"); + tfp_printf(" 0x%08x <- 0x%08x @ 0x%08x @ 0x%08x\n", golden_word, actual_word, (actual_z+i), i*4); + } + #endif + } + return errors; +} + #endif diff --git a/redmule/inc/golden.h b/hwpe/redmule/inc/golden.h similarity index 100% rename from redmule/inc/golden.h rename to hwpe/redmule/inc/golden.h diff --git a/redmule/inc/tensor_dim.h b/hwpe/redmule/inc/tensor_dim.h similarity index 100% rename from redmule/inc/tensor_dim.h rename to hwpe/redmule/inc/tensor_dim.h diff --git a/redmule/inc/w_2D.h b/hwpe/redmule/inc/w_2D.h similarity index 100% rename from redmule/inc/w_2D.h rename to hwpe/redmule/inc/w_2D.h diff --git a/redmule/inc/w_input.h b/hwpe/redmule/inc/w_input.h similarity index 100% rename from redmule/inc/w_input.h rename to hwpe/redmule/inc/w_input.h diff --git a/redmule/inc/x_2D.h b/hwpe/redmule/inc/x_2D.h similarity index 100% rename from redmule/inc/x_2D.h rename to hwpe/redmule/inc/x_2D.h diff --git a/redmule/inc/x_input.h b/hwpe/redmule/inc/x_input.h similarity index 100% rename from redmule/inc/x_input.h rename to hwpe/redmule/inc/x_input.h diff --git a/redmule/inc/y_2D.h b/hwpe/redmule/inc/y_2D.h similarity index 100% rename from redmule/inc/y_2D.h rename to hwpe/redmule/inc/y_2D.h diff --git a/redmule/inc/y_input.h b/hwpe/redmule/inc/y_input.h similarity index 100% rename from redmule/inc/y_input.h rename to hwpe/redmule/inc/y_input.h diff --git a/redmule/inc/z_2D.h b/hwpe/redmule/inc/z_2D.h similarity index 100% rename from redmule/inc/z_2D.h rename to hwpe/redmule/inc/z_2D.h diff --git a/redmule/inc/z_output.h b/hwpe/redmule/inc/z_output.h similarity index 100% rename from redmule/inc/z_output.h rename to hwpe/redmule/inc/z_output.h diff --git a/redmule/redmule.c b/hwpe/redmule/redmule.c similarity index 70% rename from redmule/redmule.c rename to hwpe/redmule/redmule.c index 5b5c037..9e361b1 100644 --- a/redmule/redmule.c +++ b/hwpe/redmule/redmule.c @@ -21,30 +21,52 @@ #include #include "stdio.h" -#include "utils/redmule_utils.h" #include "archi_redmule.h" #include "hal_redmule.h" -// #include "inc/x_input.h" -// #include "inc/w_input.h" -// #include "inc/y_input.h" -// #include "inc/z_output.h" -#include "inc/golden.h" - int main() { volatile int errors = 0; if(get_core_id() == 0){ + uint16_t m_size = M_SIZE; uint16_t n_size = N_SIZE; uint16_t k_size = K_SIZE; + uint8_t *x_ext = x_inp; + uint8_t *w_ext = w_inp; + uint8_t *y_ext = y_inp; + uint8_t *z_ext = z_oup; + uint8_t volatile *x = (uint8_t volatile *) pi_l1_malloc(0, (2*m_size*n_size)); uint8_t volatile *w = (uint8_t volatile *) pi_l1_malloc(0, (2*n_size*k_size)); uint8_t volatile *y = (uint8_t volatile *) pi_l1_malloc(0, (2*m_size*k_size)); - generate_test_data16((int) x, (int) w, (int) y, (int) m_size, (int) n_size, (int) k_size); + #ifdef USE_DMA + volatile unsigned int dma_id = 0; + dma_id = mchan_alloc(); + mchan_transfer((unsigned int) 2*(2*m_size*n_size), + (unsigned int) x_ext, + (unsigned int) x ); + mchan_barrier(dma_id); + mchan_free(dma_id); + + dma_id = mchan_alloc(); + mchan_transfer((unsigned int) 2*(2*n_size*k_size), + (unsigned int) w_ext, + (unsigned int) w ); + mchan_barrier(dma_id); + mchan_free(dma_id); + + dma_id = mchan_alloc(); + mchan_transfer((unsigned int) 2*(2*m_size*k_size), + (unsigned int) y_ext, + (unsigned int) y ); + mchan_barrier(dma_id); + #else + generate_test_data16((int) x, (int) w, (int) y, (int) m_size, (int) n_size, (int) k_size); + #endif int gold_sum = 0, check_sum = 0; int i,j; @@ -56,8 +78,6 @@ int main() { hwpe_soft_clear(); - // while( ( offload_id_tmp = hwpe_acquire_job() ) < 0); - // redmule_cfg ((unsigned int) x, // (unsigned int) w, // (unsigned int) y, diff --git a/redmule/utils/redmule_utils.h b/redmule/utils/redmule_utils.h deleted file mode 100644 index 3f7fa59..0000000 --- a/redmule/utils/redmule_utils.h +++ /dev/null @@ -1,246 +0,0 @@ -/* - * Copyright (C) 2022-2023 ETH Zurich and University of Bologna - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * SPDX-License-Identifier: Apache-2.0 - * - * Author: Yvan Tortorella - * - */ - -#include "../inc/x_input.h" -#include "../inc/w_input.h" -#include "../inc/y_input.h" -#include "../inc/z_output.h" - -#ifndef REDMULE_UTILS_H -#define REDMULE_UTILS_H - -void generate_test_data16(int x_start_addr, - int w_start_addr, - int y_start_addr, - int m_size, - int n_size, - int k_size) { - - int x_addr = x_start_addr; - int w_addr = w_start_addr; - int y_addr = y_start_addr; - int x_end_addr = x_start_addr + (2*m_size*n_size); - int w_end_addr = w_start_addr + (2*n_size*k_size); - int y_end_addr = y_start_addr + (2*m_size*k_size); - - // Generating input stimuli from golden model - for (x_addr = x_start_addr; x_addr < x_end_addr; x_addr += 2) { - int x = x_addr - x_start_addr; - *(uint32_t *)(x_addr) = x_inp[x/2]; - } - - // Generating Weight stimuli from golden model - for (w_addr = w_start_addr; w_addr < w_end_addr; w_addr += 2) { - int w = w_addr - w_start_addr; - *(uint32_t *)(w_addr) = w_inp[w/2]; - } - - for (y_addr = y_start_addr; y_addr < y_end_addr; y_addr += 2) { - int y = y_addr - y_start_addr; - *(uint32_t *)(y_addr) = y_inp[y/2]; - } -} - -int redmule_compare16 (int z_start_addr, int m_size, int k_size) { - int err = 0; - int z_end_addr = z_start_addr + 2*m_size*k_size; - uint16_t z_computed; - uint16_t diff, diff_1, diff_2; - - for (int z_addr = z_start_addr; z_addr < z_end_addr; z_addr += 2) { - int z = z_addr - z_start_addr; - z_computed = *(uint32_t *)(z_addr); - - if ( z_computed != z_oup[z/2] ) { - diff_1 = z_computed - z_oup[z/2]; - if (diff_1 > 3) { - diff_2 = z_oup[z/2] - z_computed; - if (diff_2 > 3) { - err++; - } - } - } - } - - return err; - -} - -int redmule16_compare_int(uint32_t *actual_z, uint32_t *golden_z, int len) { - #define ERR 0x0011 - uint32_t actual_word = 0; - uint16_t actual_MSHWord, actual_LSHWord; - uint32_t golden_word = 0; - uint16_t golden_MSHWord, golden_LSHWord; - uint32_t actual = 0; - uint32_t golden = 0; - - int errors = 0; - int error; - - for (int i=0; i golden_LSHWord) ? (actual_LSHWord - golden_LSHWord) : 0; - diff = (actual_LSHWord < golden_LSHWord) ? (golden_LSHWord - actual_LSHWord) : 0; - - if (diff > ERR) { - error = 1; - #ifdef VERBOSE - tfp_printf ("diff: 0x%08x\n", diff); - tfp_printf ("LSW: Error!\n"); - #endif - } - - // Checking Most Significant Half-Word - actual_MSHWord = (uint16_t)((actual_word >> 16) & 0x0000FFFF); - golden_MSHWord = (uint16_t)((golden_word >> 16) & 0x0000FFFF); - - diff = (actual_MSHWord > golden_MSHWord) ? (actual_MSHWord - golden_MSHWord) : 0; - diff = (actual_MSHWord < golden_MSHWord) ? (golden_MSHWord - actual_MSHWord) : 0; - - if (diff > ERR) { - error = 1; - #ifdef VERBOSE - tfp_printf ("diff: 0x%08x\n", diff); - tfp_printf ("MSW: Error!\n"); - #endif - } - - errors += error; - - #ifdef DEBUG - tfp_printf(" Golden: 0x%08x; Actual: 0x%08x,\n", golden_word, actual_word); - #endif - - #ifdef VERBOSE - if(error) { - if(errors==1) tfp_printf(" golden <- actual @ address @ index\n"); - tfp_printf(" 0x%08x <- 0x%08x @ 0x%08x @ 0x%08x\n", golden_word, actual_word, (actual_z+i), i*4); - } - #endif - } - return errors; -} - -int redmule8_compare_int(uint32_t *actual_z, uint32_t *golden_z, int len) { - #define ERR 0x0011 - uint32_t actual_word = 0; - uint8_t actual_Byte0, - actual_Byte1, - actual_Byte2, - actual_Byte3; - uint32_t golden_word = 0; - uint8_t golden_Byte0, - golden_Byte1, - golden_Byte2, - golden_Byte3; - uint32_t actual = 0; - uint32_t golden = 0; - - int errors = 0; - int error; - - for (int i=0; i golden_Byte0) ? (actual_Byte0 - golden_Byte0) : 0; - diff = (actual_Byte0 < golden_Byte0) ? (golden_Byte0 - actual_Byte0) : 0; - - if (diff > ERR) { - error = 1; - tfp_printf ("diff: 0x%08x\n", diff); - tfp_printf ("Byte0: Error!\n"); - } - - // Cheching Byte1 - actual_Byte1 = (uint8_t)( (actual_word >> 8 ) & 0x000000FF); - golden_Byte1 = (uint8_t)( (golden_word >> 8 ) & 0x000000FF); - - diff = (actual_Byte1 > golden_Byte1) ? (actual_Byte1 - golden_Byte1) : 0; - diff = (actual_Byte1 < golden_Byte1) ? (golden_Byte1 - actual_Byte1) : 0; - - if (diff > ERR) { - error = 1; - tfp_printf ("diff: 0x%08x\n", diff); - tfp_printf ("Byte1: Error!\n"); - } - - // Cheching Byte2 - actual_Byte2 = (uint8_t)( (actual_word >> 16 ) & 0x000000FF); - golden_Byte2 = (uint8_t)( (golden_word >> 16 ) & 0x000000FF); - - diff = (actual_Byte2 > golden_Byte2) ? (actual_Byte2 - golden_Byte2) : 0; - diff = (actual_Byte2 < golden_Byte2) ? (golden_Byte2 - actual_Byte2) : 0; - - if (diff > ERR) { - error = 1; - tfp_printf ("diff: 0x%08x\n", diff); - tfp_printf ("Byte2: Error!\n"); - } - - // Cheching Byte3 - actual_Byte3 = (uint8_t)( (actual_word >> 24 ) & 0x000000FF); - golden_Byte3 = (uint8_t)( (golden_word >> 24 ) & 0x000000FF); - - diff = (actual_Byte3 > golden_Byte3) ? (actual_Byte3 - golden_Byte3) : 0; - diff = (actual_Byte3 < golden_Byte3) ? (golden_Byte3 - actual_Byte3) : 0; - - if (diff > ERR) { - error = 1; - tfp_printf ("diff: 0x%08x\n", diff); - tfp_printf ("Byte3: Error!\n"); - } - - errors += error; - - #ifdef DEBUG - tfp_printf(" Golden: 0x%08x; Actual: 0x%08x,\n", golden_word, actual_word); - #endif - - #ifdef VERBOSE - if(error) { - if(errors==1) tfp_printf(" golden <- actual @ address @ index\n"); - tfp_printf(" 0x%08x <- 0x%08x @ 0x%08x @ 0x%08x\n", golden_word, actual_word, (actual_z+i), i*4); - } - #endif - } - return errors; -} - -#endif From 5489a97d39721e6d6eedc028e4dacc75eb706ed6 Mon Sep 17 00:00:00 2001 From: Yvan Tortorella Date: Sat, 30 Sep 2023 11:06:21 +0200 Subject: [PATCH 09/71] Updated HWPE test, restored old CI script for mchan tests --- hwpe/redmule/archi_redmule.h | 8 +- hwpe/redmule/inc/golden.h | 4994 +++------------------------------ hwpe/redmule/inc/tensor_dim.h | 6 +- hwpe/redmule/inc/w_2D.h | 130 +- hwpe/redmule/inc/w_input.h | 130 +- hwpe/redmule/inc/x_2D.h | 122 +- hwpe/redmule/inc/x_input.h | 122 +- hwpe/redmule/inc/y_2D.h | 122 +- hwpe/redmule/inc/y_input.h | 122 +- hwpe/redmule/inc/z_2D.h | 122 +- hwpe/redmule/inc/z_output.h | 122 +- hwpe/redmule/redmule.c | 1 + pulp_cluster-mchan-tests.yaml | 10 +- 13 files changed, 614 insertions(+), 5397 deletions(-) diff --git a/hwpe/redmule/archi_redmule.h b/hwpe/redmule/archi_redmule.h index 39f3203..9222d63 100644 --- a/hwpe/redmule/archi_redmule.h +++ b/hwpe/redmule/archi_redmule.h @@ -137,10 +137,10 @@ #define RNE 0x0 #define RTZ 0x1 -#define OP_FMADD 0x3 -#define OP_ADD 0x5 -#define OP_MUL 0x6 -#define OP_MINMAX 0xA +#define OP_FMADD 0x0 +#define OP_ADD 0x2 +#define OP_MUL 0x3 +#define OP_MINMAX 0x7 // FP Formats encoding #define FP16 0x2 diff --git a/hwpe/redmule/inc/golden.h b/hwpe/redmule/inc/golden.h index 3e6ba0d..f664e47 100644 --- a/hwpe/redmule/inc/golden.h +++ b/hwpe/redmule/inc/golden.h @@ -1,4611 +1,387 @@ /* Header file generated by RedMulE Golden Model */ -uint32_t golden [4608] = { -0x4e0e4e2d, -0x4de54dda, -0x4dbc4e0e, -0x4ed64e3f, -0x4eef4dce, -0x4e554dfc, -0x4d964e2f, -0x4d8a4ddd, -0x4dc24e4c, -0x4daa4d63, -0x4d894e0a, -0x4d7d4dff, -0x4e074d9e, -0x4d684ded, -0x4ea94e69, -0x4e134e7b, -0x4e134e22, -0x4dd64e34, -0x4db64db5, -0x4dfd4d9c, -0x4e0f4e51, -0x4e464d92, -0x4e974db8, -0x4dcb4d14, -0x4d8e4e6a, -0x4dee4eb5, -0x4e1c4d95, -0x4e1e4dcb, -0x4d5d4dff, -0x4dde4d53, -0x4ea44dda, -0x4e1d4d1c, -0x4dad4d30, -0x4e044e27, -0x4ebb4e55, -0x4daa4e47, -0x4dd84ddf, -0x4db04e3a, -0x4e1c4dc0, -0x4e334dc1, -0x4dcd4e2b, -0x4ebe4da2, -0x4da94d64, -0x4d804e7f, -0x4e9b4e14, -0x4e854d7e, -0x4e6e4e6d, -0x4def4e1e, -0x4d5f4def, -0x4daa4e1d, -0x4dc04e29, -0x4f014e5f, -0x4f334dcf, -0x4e864dcf, -0x4dfd4ecf, -0x4d924deb, -0x4e294eda, -0x4e354dae, -0x4da94e49, -0x4d7d4e33, -0x4e284e23, -0x4e124dc0, -0x4eda4e62, -0x4e434e71, -0x4df34e2d, -0x4e0d4e69, -0x4dbd4df7, -0x4da34dbc, -0x4e3c4d9d, -0x4ebb4e01, -0x4e354dd5, -0x4de44d3f, -0x4dc44efa, -0x4dac4ee3, -0x4da34d93, -0x4dee4da1, -0x4db04e9a, -0x4e994db0, -0x4eaf4dfe, -0x4e354d59, -0x4de74dee, -0x4e5d4e60, -0x4eb14ec7, -0x4de04e59, -0x4df54e35, -0x4df14df4, -0x4e274df4, -0x4e4b4dd5, -0x4da14e87, -0x4eb64dbc, -0x4e4f4d77, -0x4d774e04, -0x4ede4e43, -0x4e384df7, -0x4e434e81, -0x4e014e43, -0x4dbc4d9d, -0x4e2f4e1d, -0x4ddf4e69, -0x4f1f4e62, -0x4f0c4dbd, -0x4da74d88, -0x4dfa4f23, -0x4de94e2e, -0x4de44e67, -0x4ded4da6, -0x4d1b4e28, -0x4dbb4e1d, -0x4e1c4dea, -0x4ddc4e67, -0x4e7d4de6, -0x4e1c4e2c, -0x4def4e41, -0x4ddc4e14, -0x4cfa4dc3, -0x4db04dac, -0x4df64e84, -0x4e5a4d77, -0x4ea74dd5, -0x4da64d34, -0x4dca4eb7, -0x4dcb4e9c, -0x4dd74d04, -0x4e294dcd, -0x4d804df3, -0x4e3d4dc5, -0x4e424dd1, -0x4e544d76, -0x4db34d5a, -0x4de84e0a, -0x4e8e4ea2, -0x4e434dd8, -0x4d9b4e16, -0x4e394e8b, -0x4dfa4e02, -0x4e074de8, -0x4dd44ddd, -0x4e054d3f, -0x4e334dac, -0x4d4c4e61, -0x4e634e0b, -0x4e374ddd, -0x4e474e7d, -0x4db94dbd, -0x4e324db6, -0x4e334e87, -0x4e2b4e43, -0x4f284e79, -0x4edc4de8, -0x4e944e5e, -0x4e184f32, -0x4e774dbc, -0x4e8c4ea9, -0x4ea94daa, -0x4e204e43, -0x4da84e3c, -0x4e1b4eb0, -0x4e324e7a, -0x4eb24eb8, -0x4e8b4ea5, -0x4de94e7f, -0x4df54ee2, -0x4e5c4e01, -0x4dee4dbb, -0x4e654e41, -0x4ef54e2d, -0x4e784e84, -0x4e324de8, -0x4dea4ee1, -0x4def4ef6, -0x4e4f4da8, -0x4e764dd0, -0x4def4e84, -0x4e534d88, -0x4f794e34, -0x4ea14db4, -0x4dee4dc1, -0x4ec44e44, -0x4e824ed6, -0x4df44e5e, -0x4e454ec3, -0x4e164ea1, -0x4e6f4e00, -0x4e804e50, -0x4df74e9c, -0x4edf4e1c, -0x4e274dcb, -0x4d784e39, -0x4ec74e1c, -0x4e814e37, -0x4e4b4e8f, -0x4dfa4e45, -0x4e3d4e2a, -0x4df54e3d, -0x4def4e3a, -0x4ed64e2f, -0x4ef34db3, -0x4e8e4e5a, -0x4db64f50, -0x4e344e46, -0x4e1b4ec9, -0x4e804dd6, -0x4d994e1f, -0x4e524e76, -0x4e8d4e8a, -0x4dc14e5b, -0x4efc4eaf, -0x4e524ebb, -0x4df44e78, -0x4df14e78, -0x4dd44dfa, -0x4e484d47, -0x4e204e04, -0x4ebb4ddd, -0x4eca4e44, -0x4dec4d9b, -0x4e124e9c, -0x4dfd4ec7, -0x4e464d6c, -0x4e374dc0, -0x4dbc4e59, -0x4e404d8b, -0x4ef84e31, -0x4de84de1, -0x4dd24d97, -0x4e1c4ea0, -0x4eb44e3a, -0x4e414dd5, -0x4dbc4e5d, -0x4e554e1d, -0x4dfc4e77, -0x4e224e4b, -0x4d6d4ebe, -0x4e2a4dad, -0x4e564dd3, -0x4d2e4e3a, -0x4e954e42, -0x4e3b4dce, -0x4e464eef, -0x4df84ded, -0x4d7b4d39, -0x4cfa4da0, -0x4d164d82, -0x4e324d98, -0x4e4a4ce2, -0x4d644d6a, -0x4d474e27, -0x4d164d4c, -0x4d494d7c, -0x4d3e4d0d, -0x4d124d83, -0x4cbe4d19, -0x4d834d0f, -0x4cdb4d65, -0x4ded4d3d, -0x4d5b4dff, -0x4d704d74, -0x4ccd4df1, -0x4d164d49, -0x4d2f4cc3, -0x4d854d25, -0x4dc34d31, -0x4dcb4d5b, -0x4d514cb3, -0x4d294d98, -0x4cc14dc9, -0x4d904cd1, -0x4d594cd3, -0x4cf74d5e, -0x4dae4cda, -0x4e134d8f, -0x4d6a4cee, -0x4d334d0f, -0x4d564d00, -0x4dae4d88, -0x4d404d78, -0x4d7c4d9c, -0x4d2c4d58, -0x4d284d47, -0x4dfc4db4, -0x4cec4d97, -0x4dc04cf7, -0x4d814d0c, -0x4d284d58, -0x4dad4d63, -0x4d754d12, -0x4d514d77, -0x4d0b4ceb, -0x4d5e4d6b, -0x4da94e5d, -0x4d974e1f, -0x4ec44df3, -0x4ee04d90, -0x4e244da1, -0x4d684e3b, -0x4ddf4da9, -0x4d994dfd, -0x4dba4d6c, -0x4daa4e07, -0x4dd84df3, -0x4dc74d51, -0x4d6e4ddb, -0x4df24dd9, -0x4e154e39, -0x4e024e04, -0x4dbf4e05, -0x4d434de1, -0x4d9e4d73, -0x4daf4dd5, -0x4e514daf, -0x4e5c4dcc, -0x4d5d4d8f, -0x4d7c4e2f, -0x4dd74e80, -0x4dc24dbd, -0x4e114d5f, -0x4d6b4de6, -0x4db44d1a, -0x4eba4dcb, -0x4ded4d24, -0x4d514dc5, -0x4dfd4dfe, -0x4e334e44, -0x4d994e59, -0x4d994ddf, -0x4d664dd4, -0x4de94df2, -0x4e304d80, -0x4daf4e0a, -0x4e3d4dc3, -0x4d724d79, -0x4d424de1, -0x4ea14e4e, -0x4e134d84, -0x4dc94e0c, -0x4df44ddf, -0x4e024db8, -0x4d8a4e6b, -0x4e494e8f, -0x4eb64e5b, -0x4ef94e1d, -0x4e654e2f, -0x4db44ef9, -0x4e5c4e86, -0x4e234eae, -0x4e5a4d8f, -0x4de04e1e, -0x4dbd4e5c, -0x4e374e38, -0x4ded4ec8, -0x4ec54ecd, -0x4e9b4f06, -0x4ea24e8a, -0x4dea4e41, -0x4d704e04, -0x4e344d5a, -0x4e514e01, -0x4ef04e0f, -0x4edd4dfe, -0x4dd04d8b, -0x4e694e6d, -0x4de44f18, -0x4e214d8f, -0x4e074de2, -0x4ded4e56, -0x4e394d8d, -0x4f374e50, -0x4e274dd6, -0x4df04e04, -0x4e5b4e92, -0x4eeb4e99, -0x4e604e66, -0x4df64ebc, -0x4e404e57, -0x4e5c4eaf, -0x4e444e3f, -0x4de84e23, -0x4e7e4e56, -0x4e524e01, -0x4dc54e5b, -0x4ee04e94, -0x4e484e48, -0x4e794e63, -0x4e3c4e21, -0x4e584e6a, -0x4e574f33, -0x4ee84ef5, -0x4fd14f08, -0x4fc64e62, -0x4eab4f04, -0x4e9b4fda, -0x4f274eec, -0x4eaf4f04, -0x4f174e19, -0x4e594f28, -0x4e0d4ea0, -0x4e734eec, -0x4e6a4f0c, -0x4f954ead, -0x4e8f4edf, -0x4ecd4eca, -0x4ea54edd, -0x4dff4edf, -0x4e644e28, -0x4ed24f27, -0x4f294e25, -0x4f954e6c, -0x4e5b4e35, -0x4ea84f4d, -0x4eb44f3b, -0x4ec04e2b, -0x4e914e61, -0x4e8c4ee7, -0x4f054e76, -0x4f5e4ed3, -0x4f164e81, -0x4e554dfd, -0x4ed14e9d, -0x4fa54ec6, -0x4ee34ef2, -0x4e514f1d, -0x4ed84ebf, -0x4ef14ee9, -0x4f024ee2, -0x4e7b4fae, -0x4f3c4ee4, -0x4ec74e59, -0x4e364e97, -0x4f024efb, -0x4f034ecb, -0x4eb24f13, -0x4e774e94, -0x4e384e1b, -0x4dc64edf, -0x4e354ee0, -0x4f974efd, -0x4f9b4e50, -0x4e394ddc, -0x4e554f6b, -0x4e634eb4, -0x4e3b4ea0, -0x4e2a4e17, -0x4e234ed9, -0x4e564ee7, -0x4e9b4e34, -0x4e0b4eda, -0x4ef24e82, -0x4ec34e95, -0x4e554f05, -0x4e8f4efc, -0x4e014e7c, -0x4e454e0a, -0x4e654e28, -0x4e784e20, -0x4ea14ebd, -0x4e2b4e22, -0x4dcf4f6f, -0x4e0f4f35, -0x4e764dcb, -0x4e7f4e08, -0x4e5b4f05, -0x4e834dd7, -0x4f4c4ebd, -0x4eef4d7b, -0x4e784e01, -0x4ea64ee6, -0x4f004f28, -0x4e314e4e, -0x4e4e4ed7, -0x4e7a4e6f, -0x4ee64e9f, -0x4e914e74, -0x4e1f4eba, -0x4f5d4e1f, -0x4e844e22, -0x4da34e2c, -0x4ec54e82, -0x4f134ec8, -0x4e9a4ef4, -0x4e5a4eb6, -0x4db64d6b, -0x4d3b4e0b, -0x4d884df7, -0x4e814e15, -0x4ef04d5f, -0x4da24e2f, -0x4da14e6a, -0x4e6c4d9c, -0x4db14e0b, -0x4dfc4d3c, -0x4d634d97, -0x4d4d4e39, -0x4d994da9, -0x4da04e40, -0x4e284de3, -0x4ddc4e04, -0x4de64dcb, -0x4d914e6b, -0x4d844dd5, -0x4d364d44, -0x4de64d75, -0x4ed74dba, -0x4e5a4d6f, -0x4d6d4d88, -0x4d644e03, -0x4d8a4e96, -0x4dca4d5c, -0x4e1b4d7c, -0x4d864dfc, -0x4dd94d66, -0x4e534df3, -0x4e2a4d4b, -0x4d434d9b, -0x4e5a4ddb, -0x4e564de7, -0x4d8c4dee, -0x4dc74dcc, -0x4d804daa, -0x4e564d97, -0x4e774d5f, -0x4d514d98, -0x4e894d8d, -0x4d6b4d38, -0x4d8e4dc8, -0x4e134df9, -0x4e074d2f, -0x4da04e0f, -0x4d6a4d95, -0x4deb4e54, -0x4d9d4ea3, -0x4e3c4e6c, -0x4f564e8d, -0x4fa94de7, -0x4eb44e3a, -0x4e5d4f3d, -0x4ead4ea7, -0x4ea74f1d, -0x4ea74deb, -0x4e364e17, -0x4e274e45, -0x4e3a4e42, -0x4e114f1a, -0x4ee04eb4, -0x4ed24e33, -0x4e074e16, -0x4df24ea9, -0x4dda4e4c, -0x4e0e4e31, -0x4e564e32, -0x4efb4e0c, -0x4ebb4e64, -0x4e3b4dbf, -0x4e634f0c, -0x4e4f4f04, -0x4e3a4d9c, -0x4e7c4e16, -0x4de24e46, -0x4e914df4, -0x4f274eb6, -0x4ecc4d8a, -0x4db34e0d, -0x4e8a4e8e, -0x4f1f4ef0, -0x4ea34eab, -0x4df34e4a, -0x4e6a4ec1, -0x4eff4e6c, -0x4ed34e45, -0x4e6f4ec6, -0x4ebf4e4a, -0x4e404de4, -0x4d9e4e27, -0x4ecb4e79, -0x4ed64e61, -0x4e4b4e9a, -0x4e734e55, -0x4e1e4e5e, -0x4df74ea1, -0x4e714e66, -0x4fbf4f2d, -0x4fe24ea4, -0x4eb44eab, -0x4e8b4f9c, -0x4e794e41, -0x4e964f69, -0x4e864e07, -0x4e144ec0, -0x4df44e95, -0x4e784e9e, -0x4df94eea, -0x4f404f28, -0x4e934f87, -0x4ec54e29, -0x4eb64ec1, -0x4e9f4e8f, -0x4e754def, -0x4e9b4e75, -0x4f684e29, -0x4ed84eac, -0x4e524da6, -0x4ea64f2e, -0x4ea94f46, -0x4e524e5b, -0x4e994e4d, -0x4e9e4ea2, -0x4ed34ded, -0x4fe34f10, -0x4ee24df6, -0x4f054e13, -0x4ef34ed1, -0x4ef24ef8, -0x4e1f4eb6, -0x4e254ecc, -0x4ea34ea1, -0x4e984ef8, -0x4ee04e43, -0x4e384f0e, -0x4f7b4e74, -0x4ee64df6, -0x4de84eba, -0x4f1a4e70, -0x4ed24e91, -0x4e844f2a, -0x4ea04ed3, -0x4e044e1c, -0x4e124dfd, -0x4e0b4de2, -0x4ecf4e45, -0x4edb4d91, -0x4de14e15, -0x4e074ee1, -0x4dc14da5, -0x4e0f4e24, -0x4e264d89, -0x4d974da5, -0x4ddb4e39, -0x4e3b4e48, -0x4d9f4e20, -0x4e824e65, -0x4d9e4e0b, -0x4dbd4de7, -0x4da54e42, -0x4da44dc9, -0x4da94dc0, -0x4e5c4e74, -0x4ee14de2, -0x4eb14e10, -0x4da64d66, -0x4e1f4eba, -0x4e614e9c, -0x4dcb4d43, -0x4e084d98, -0x4dea4e22, -0x4e764ddd, -0x4e864e4e, -0x4dfe4d7b, -0x4e374d4c, -0x4e314d97, -0x4ebe4e4f, -0x4da14e34, -0x4d9e4e64, -0x4e044df2, -0x4e3a4dd1, -0x4ea44dd7, -0x4db94e09, -0x4e9a4d96, -0x4dd54d95, -0x4d544e1d, -0x4e4a4de8, -0x4e6e4dd0, -0x4e494e53, -0x4d684d86, -0x4dee4da0, -0x4df44e81, -0x4dcd4de0, -0x4eae4ddd, -0x4f094dce, -0x4df04e0f, -0x4df54ecc, -0x4dca4ddf, -0x4d7f4dd6, -0x4e0d4dc1, -0x4d9f4dff, -0x4d554dd5, -0x4d844daa, -0x4da94e57, -0x4eb34e39, -0x4dea4e60, -0x4e184dd4, -0x4dbf4e4a, -0x4d9f4d8b, -0x4d9f4d54, -0x4de54e12, -0x4e244d9b, -0x4e484db4, -0x4d884dba, -0x4d394e72, -0x4d654e4e, -0x4e054cef, -0x4dbe4da6, -0x4d714e07, -0x4deb4d4a, -0x4e5e4e37, -0x4e204dc0, -0x4d5a4d3a, -0x4e314dbd, -0x4e774e64, -0x4da24e40, -0x4da54e46, -0x4db44db6, -0x4e174db0, -0x4e144dc7, -0x4dc04e24, -0x4e254d5b, -0x4e084d91, -0x4db04e39, -0x4e554ddc, -0x4e174d39, -0x4dd54e75, -0x4e2c4de9, -0x4d5a4d74, -0x4d5b4dde, -0x4d094dc3, -0x4e084d93, -0x4e794da7, -0x4dea4d85, -0x4d6f4e38, -0x4d924d63, -0x4d6a4df3, -0x4d9c4cd6, -0x4d564d83, -0x4d8e4dd5, -0x4da64d84, -0x4d2a4e24, -0x4e224dbb, -0x4de84da3, -0x4dcc4d30, -0x4d874db8, -0x4d3b4d63, -0x4d784d3a, -0x4d6c4d6c, -0x4df44d72, -0x4e254d6a, -0x4d204d3a, -0x4d004e25, -0x4d644dfc, -0x4d954cf9, -0x4d3b4d05, -0x4d0e4db6, -0x4dd14d12, -0x4e0b4d95, -0x4de44d6a, -0x4d874d38, -0x4df44e22, -0x4e094dc1, -0x4dca4d9d, -0x4d6a4dd9, -0x4d3e4d8f, -0x4dbb4dba, -0x4d7b4d84, -0x4d4d4e1e, -0x4e004d67, -0x4d544d27, -0x4cda4db9, -0x4e294db1, -0x4e224d71, -0x4d614df2, -0x4d524df0, -0x4d904d31, -0x4db34e17, -0x4dac4e1b, -0x4ec64e08, -0x4eea4da8, -0x4e2c4dcb, -0x4df04ee0, -0x4dcc4dda, -0x4d9a4ea1, -0x4d914dac, -0x4daf4e2b, -0x4dc64d8d, -0x4e0e4e1f, -0x4d574e23, -0x4e3d4e3b, -0x4e664e32, -0x4da74e1f, -0x4d474e4d, -0x4d694da1, -0x4df54d6f, -0x4e094e0b, -0x4e414d7c, -0x4e4f4e09, -0x4df94db3, -0x4de94e6a, -0x4e2d4f3e, -0x4e444da0, -0x4df64e1a, -0x4d914dfc, -0x4dcf4d48, -0x4eb44e23, -0x4e404ce1, -0x4da54d7d, -0x4e344e55, -0x4ea24e67, -0x4db54e48, -0x4e0b4e25, -0x4dc44e1a, -0x4df34e27, -0x4e314de6, -0x4de84e6f, -0x4e704d85, -0x4dd94d69, -0x4d184de8, -0x4e044da7, -0x4e2c4dd3, -0x4e234e3d, -0x4dd24dd6, -0x4de24e0b, -0x4dc34e76, -0x4da54e4c, -0x4ec54e8f, -0x4f7d4e4d, -0x4e194df4, -0x4dc44efc, -0x4dd84de0, -0x4dc94ec5, -0x4e2b4dd7, -0x4d8d4e79, -0x4daa4e5a, -0x4e3f4e09, -0x4d994e7d, -0x4ed94e50, -0x4e5b4ec7, -0x4e6d4e31, -0x4e524ea8, -0x4dfa4e4a, -0x4e284d61, -0x4e304dfa, -0x4ebd4dbd, -0x4f174e1c, -0x4e344dad, -0x4dd84e90, -0x4e404f2e, -0x4e2a4d4b, -0x4deb4d89, -0x4de84e42, -0x4e294d63, -0x4f354e46, -0x4e254dd4, -0x4e3a4d5f, -0x4e5b4ee4, -0x4ea54e97, -0x4e344e51, -0x4e534e6b, -0x4e144e7a, -0x4e0e4e12, -0x4e0d4df0, -0x4de54ebc, -0x4ead4dbb, -0x4e624df9, -0x4d914e34, -0x4ec34e53, -0x4e184e2a, -0x4eac4e5c, -0x4e1a4e3c, -0x4ded4db4, -0x4dd84e56, -0x4e204dd5, -0x4f274f02, -0x4f174e56, -0x4e354e18, -0x4e284f47, -0x4e264e4c, -0x4db74e8c, -0x4e2b4dab, -0x4de74e62, -0x4d764e47, -0x4e324dd3, -0x4d9b4e41, -0x4ee14e36, -0x4e4e4eda, -0x4e284e46, -0x4e654e76, -0x4dd64df2, -0x4e0c4dc5, -0x4da94e02, -0x4eb14da7, -0x4e9c4e0c, -0x4e4b4db8, -0x4dca4ea5, -0x4e034ea0, -0x4e304d89, -0x4e2f4da8, -0x4e244e4f, -0x4e2a4dce, -0x4f064e77, -0x4e7e4d80, -0x4df14d88, -0x4e124e6b, -0x4eed4e4f, -0x4e444e20, -0x4e384df4, -0x4e444e62, -0x4e7d4e3a, -0x4eac4e02, -0x4e074e74, -0x4e844df2, -0x4e3a4dfe, -0x4d864e0c, -0x4e724e4d, -0x4e394dfb, -0x4e464e61, -0x4e424dfd, -0x4dbb4de9, -0x4d6f4e30, -0x4d824dfa, -0x4ec54e70, -0x4f064da1, -0x4e474e5b, -0x4dad4e79, -0x4e614dd5, -0x4dae4e44, -0x4e4f4dee, -0x4d9e4e40, -0x4ddf4e3e, -0x4e844dab, -0x4da74e5e, -0x4f0e4e58, -0x4e424e10, -0x4e244e18, -0x4e084e7c, -0x4db74e14, -0x4e224db8, -0x4e074df6, -0x4ebc4d8b, -0x4eb34db7, -0x4d9e4d91, -0x4db84e45, -0x4dc64ed5, -0x4da14db4, -0x4e4c4d70, -0x4d8a4e72, -0x4d7f4dc9, -0x4f304e1d, -0x4e934d7c, -0x4de44dd2, -0x4e724e93, -0x4f3d4e34, -0x4de74e42, -0x4df44e76, -0x4df64eae, -0x4e504e2b, -0x4e664e4b, -0x4de24e63, -0x4e804de1, -0x4dd74d96, -0x4ce74dee, -0x4e604d9a, -0x4e684dc3, -0x4e2d4e4f, -0x4e314e06, -0x4e5b4e00, -0x4dda4e77, -0x4dee4e1a, -0x4f154e83, -0x4f9a4e59, -0x4e604e31, -0x4e944f31, -0x4e364df9, -0x4e484eaf, -0x4e494dd9, -0x4e354e2c, -0x4e484ec4, -0x4e244e46, -0x4dbc4e95, -0x4f2e4edf, -0x4e2f4eeb, -0x4e314e0d, -0x4e754ef6, -0x4dd94dd4, -0x4e1f4d8f, -0x4dc84e09, -0x4ef24dfd, -0x4ed04e8f, -0x4e124de5, -0x4df44ebd, -0x4dda4ece, -0x4e4e4d36, -0x4e284e0d, -0x4e244ead, -0x4e794df9, -0x4f044eae, -0x4e714deb, -0x4e7b4d7e, -0x4ee24e6d, -0x4f2b4e66, -0x4df64e6f, -0x4e284ec0, -0x4e284e7a, -0x4e4e4e28, -0x4ef74e66, -0x4deb4ed3, -0x4eb34e05, -0x4e884dd9, -0x4dfd4e61, -0x4e894e3b, -0x4e504e3a, -0x4e514ec6, -0x4de04e3f, -0x4e184dcf, -0x4db74e1c, -0x4e1f4e2e, -0x4f104e65, -0x4fb44dc9, -0x4e634e91, -0x4e564f7c, -0x4e0d4e23, -0x4dea4e8d, -0x4e184db7, -0x4da84e14, -0x4d714e1e, -0x4e354df0, -0x4dec4e39, -0x4f104e2a, -0x4e504e78, -0x4e774e31, -0x4dca4f16, -0x4e1c4d9c, -0x4e114da1, -0x4e034e25, -0x4ecf4d87, -0x4ec74e2a, -0x4e444d9b, -0x4dc24e78, -0x4e084f13, -0x4ddc4d85, -0x4db34dd4, -0x4e264e2e, -0x4e2e4df4, -0x4f224e60, -0x4ebb4d9d, -0x4e654d96, -0x4e4b4e39, -0x4ee24e0f, -0x4dd04e96, -0x4e264e47, -0x4e324e9e, -0x4e814dfa, -0x4e734e39, -0x4d8e4ec3, -0x4e9d4dfe, -0x4e434ded, -0x4d854ddb, -0x4e594e00, -0x4e654def, -0x4e314e9c, -0x4dd14df9, -0x4d874d16, -0x4d674e0a, -0x4d494dfb, -0x4e264daa, -0x4e604d51, -0x4d774d6f, -0x4da74eb9, -0x4d9f4d87, -0x4d9e4ddd, -0x4dc14d4e, -0x4d444dc3, -0x4d534d6b, -0x4d3f4d48, -0x4d6f4ddb, -0x4de94db5, -0x4ddb4dfc, -0x4d7e4de2, -0x4d6f4e02, -0x4d134d80, -0x4d084d1b, -0x4d524dc7, -0x4d8b4d7f, -0x4dfe4db3, -0x4d124d24, -0x4d8c4dd6, -0x4d614e24, -0x4dcd4d12, -0x4d834d2d, -0x4dc84db3, -0x4dd54d3f, -0x4e444d9e, -0x4dbc4d09, -0x4d294d01, -0x4d7d4d96, -0x4e104dd3, -0x4dd24d50, -0x4da84d5d, -0x4d984dac, -0x4d5f4d92, -0x4de54d9a, -0x4da54dcd, -0x4dd64d6a, -0x4d654d0c, -0x4d424d4c, -0x4dbd4dd3, -0x4d894db7, -0x4de34dcd, -0x4d644d99, -0x4d4a4cf5, -0x4d034dd3, -0x4d6c4d77, -0x4e284db3, -0x4e344d32, -0x4d9a4d68, -0x4db74dad, -0x4d6d4dad, -0x4d304e1e, -0x4d9d4d3d, -0x4d294df3, -0x4ce24d33, -0x4d674d74, -0x4d114d9d, -0x4e344dca, -0x4dca4d92, -0x4d334d8c, -0x4db54da0, -0x4d324d3b, -0x4d4f4d0f, -0x4da44cf7, -0x4e284d97, -0x4d7d4d40, -0x4d564d00, -0x4cc84e0a, -0x4d084e0d, -0x4d524d21, -0x4d5a4cce, -0x4ced4de3, -0x4db94ced, -0x4e164dbd, -0x4da14cf5, -0x4d4f4d57, -0x4daf4ddc, -0x4db24dfa, -0x4d1c4e26, -0x4d314d8a, -0x4cd34d88, -0x4dac4da8, -0x4d914d50, -0x4d564d76, -0x4dab4d5b, -0x4d934d56, -0x4cef4d6f, -0x4ddb4d8e, -0x4dd84d6a, -0x4dff4db3, -0x4d734d77, -0x4df94e14, -0x4dc54e48, -0x4dcc4dbd, -0x4ec34e10, -0x4f5c4df1, -0x4e5d4e1c, -0x4df14edc, -0x4e2d4dc0, -0x4de34e62, -0x4e394d61, -0x4d794e3b, -0x4d764e3f, -0x4dc84daf, -0x4d8d4e42, -0x4f054e79, -0x4e3d4e44, -0x4e924dce, -0x4df74eb7, -0x4db04dc4, -0x4df34da3, -0x4dd64db6, -0x4ea34dc5, -0x4ec84d9e, -0x4e224d7c, -0x4d924ee2, -0x4db24f08, -0x4df64dc3, -0x4e504d31, -0x4dd74e8f, -0x4e1a4d6e, -0x4f144e86, -0x4e854d99, -0x4e464d54, -0x4e604e26, -0x4f024e4b, -0x4e044e22, -0x4e0e4e08, -0x4e4a4e68, -0x4e5a4de0, -0x4e3d4e36, -0x4de24e54, -0x4e144df7, -0x4e2f4dc6, -0x4d704e56, -0x4e2a4dd2, -0x4e7f4e35, -0x4e204e7c, -0x4d7e4db4, -0x4dc24dc6, -0x4d9c4e0e, -0x4df84df6, -0x4eb04dfa, -0x4ee44dbc, -0x4da74df7, -0x4d804e6e, -0x4dcf4dd3, -0x4d964e02, -0x4e574df7, -0x4db14e54, -0x4d544e11, -0x4de14e15, -0x4d6c4e29, -0x4e7b4dfd, -0x4dfb4e56, -0x4db14e05, -0x4dde4e80, -0x4d954db5, -0x4de34d5e, -0x4dea4e10, -0x4e654d4f, -0x4e8c4dbc, -0x4ddc4d8d, -0x4daf4e2d, -0x4d7d4eb2, -0x4dfc4d12, -0x4dcf4d73, -0x4ddf4e1f, -0x4e584da2, -0x4e984e2c, -0x4dec4d5b, -0x4d9f4d85, -0x4e434de6, -0x4e3e4dca, -0x4db74e6e, -0x4dc14e2e, -0x4da44dc9, -0x4e024dc9, -0x4e2f4df8, -0x4dfe4e59, -0x4e644d43, -0x4ddd4d80, -0x4d574e15, -0x4df34e48, -0x4e2f4dad, -0x4e284e47, -0x4db74d94, -0x4d444d5f, -0x4d6d4de2, -0x4d024d9b, -0x4e084dbe, -0x4e164d52, -0x4d664d7f, -0x4d554e4e, -0x4d7f4d0f, -0x4d6e4d95, -0x4dad4ce8, -0x4d424d69, -0x4d334dd8, -0x4d614d9f, -0x4d434dcb, -0x4e124dbe, -0x4da14dd1, -0x4da94d81, -0x4d574dff, -0x4cef4d5b, -0x4ccd4d36, -0x4d204d6a, -0x4e304d73, -0x4e024d5c, -0x4d134d09, -0x4d084dee, -0x4ce24e28, -0x4d534ca5, -0x4d254ce4, -0x4d444dec, -0x4dc94d3a, -0x4e0f4da0, -0x4d804d36, -0x4d4c4c83, -0x4da24d64, -0x4e174e08, -0x4d3b4d3f, -0x4d824db3, -0x4d874d60, -0x4d7a4d58, -0x4da74d47, -0x4d1c4d24, -0x4e064d2b, -0x4dc64d16, -0x4cdf4d87, -0x4db94d70, -0x4dc94d27, -0x4d8f4dbb, -0x4d164d3f, -0x4e6c4e12, -0x4e814e94, -0x4e604ec0, -0x4f8e4e3b, -0x4f5a4df8, -0x4e884e88, -0x4e404f1c, -0x4ddf4dea, -0x4e4e4ecb, -0x4e324e15, -0x4dc54ec9, -0x4dd24e88, -0x4e384e51, -0x4e034e88, -0x4ef64e75, -0x4e884eda, -0x4e774ea8, -0x4df34ec2, -0x4e234e12, -0x4e0a4df5, -0x4e654e86, -0x4ede4df8, -0x4ea94e52, -0x4e3d4da0, -0x4e374f16, -0x4df54ee0, -0x4e7a4def, -0x4e6b4dc7, -0x4e024ea5, -0x4e354e52, -0x4f2c4e6f, -0x4e5d4dd0, -0x4e364e27, -0x4e774e9b, -0x4f734eaa, -0x4dfc4e60, -0x4e604f07, -0x4dfd4e77, -0x4e7a4e39, -0x4e654e32, -0x4e284e35, -0x4eb34dfe, -0x4e8f4e20, -0x4e054e7a, -0x4eca4e5b, -0x4ec34dcf, -0x4ea44eee, -0x4ded4e05, -0x4e814e2a, -0x4de34e68, -0x4dc54e93, -0x4f2a4e6a, -0x4fa34df5, -0x4e504e54, -0x4e464edf, -0x4e354e9a, -0x4e704ef8, -0x4e3d4da1, -0x4dfb4e71, -0x4d8e4e64, -0x4e3d4e2f, -0x4dd64e51, -0x4ea04ecd, -0x4eba4ecf, -0x4e654e64, -0x4dfd4ed8, -0x4e1a4e11, -0x4e5c4dc1, -0x4e314e66, -0x4efa4e6d, -0x4f064dfe, -0x4e0a4dd9, -0x4df14eed, -0x4e124ef5, -0x4e564dc6, -0x4dec4e31, -0x4db64e66, -0x4e404d8c, -0x4f374e38, -0x4ebe4dc4, -0x4de64e42, -0x4eab4e8b, -0x4eee4e84, -0x4e134ec7, -0x4e7c4e45, -0x4e724ea5, -0x4e914e7f, -0x4e744e53, -0x4e414e5f, -0x4ea34e9c, -0x4e064da1, -0x4dce4e0b, -0x4ed84e5a, -0x4e5c4deb, -0x4eaf4ecd, -0x4dc04e17, -0x4df54de1, -0x4de44e47, -0x4de74e55, -0x4f364e23, -0x4f544e02, -0x4e774e1d, -0x4e3a4ef4, -0x4e2f4e11, -0x4dd74ef2, -0x4e6f4d78, -0x4da14e4b, -0x4df24dc0, -0x4e314de6, -0x4e124ed7, -0x4eba4e15, -0x4e6e4e06, -0x4e114e1e, -0x4dc74e69, -0x4d9a4df4, -0x4e164dbb, -0x4e224dd8, -0x4e5c4dad, -0x4ea64df8, -0x4e124d9d, -0x4dd94ec1, -0x4ded4f1a, -0x4de34d6c, -0x4e414dc5, -0x4d964e66, -0x4e154def, -0x4ec84e17, -0x4e8e4da2, -0x4de24de3, -0x4e9c4ead, -0x4f0e4e8d, -0x4e424e35, -0x4e0f4ebd, -0x4e1b4e8e, -0x4e374e29, -0x4e334e5f, -0x4e104e74, -0x4e6f4dc6, -0x4e074dd4, -0x4d7c4e8f, -0x4ea64da2, -0x4ea04ddd, -0x4e444edc, -0x4dcf4e3f, -0x4dbc4d64, -0x4d7b4e2a, -0x4d704e0c, -0x4e7f4d5c, -0x4e824d22, -0x4e344dc7, -0x4d434eb8, -0x4db44d93, -0x4d6c4e62, -0x4df94d5d, -0x4d4c4daf, -0x4d5e4d4d, -0x4d684dc0, -0x4d394e15, -0x4e8d4e00, -0x4e3d4df5, -0x4d3d4dbd, -0x4d684ddc, -0x4d324d55, -0x4d584cec, -0x4dcc4d8d, -0x4ded4d55, -0x4e144dfd, -0x4d694d4e, -0x4d604e63, -0x4db84e56, -0x4daf4d40, -0x4db74d4b, -0x4d574d88, -0x4df04d78, -0x4ea74ddf, -0x4ddf4d74, -0x4d454d1f, -0x4dc04dda, -0x4e5e4e11, -0x4dfb4de0, -0x4dbe4db1, -0x4df04df9, -0x4de64db3, -0x4e034d9c, -0x4d734e08, -0x4df14d70, -0x4dc54dca, -0x4d154d97, -0x4e614db0, -0x4dc54d67, -0x4d854e20, -0x4d624d6b, -0x4df64d80, -0x4d6a4e6f, -0x4dc44e44, -0x4e7a4e6c, -0x4f7d4dd6, -0x4dc44dda, -0x4db64f2e, -0x4ddb4e17, -0x4dae4e6f, -0x4dd74d64, -0x4dba4e04, -0x4de44dc3, -0x4e3a4e27, -0x4d7c4e65, -0x4ead4e06, -0x4e4d4dfa, -0x4e0d4df1, -0x4dd64eb9, -0x4d754e4e, -0x4df04dca, -0x4e134dde, -0x4ef24de3, -0x4e7e4dfe, -0x4dd24d4a, -0x4dac4e5c, -0x4dce4e79, -0x4e154d0a, -0x4df14dfc, -0x4db24e77, -0x4e5c4d70, -0x4ee64e18, -0x4e6b4db1, -0x4e154d81, -0x4e154e18, -0x4e9d4dff, -0x4e0b4e3a, -0x4dee4e75, -0x4e0e4e31, -0x4e454de0, -0x4e784e2c, -0x4da54e7c, -0x4edc4dad, -0x4e0d4df9, -0x4d714e39, -0x4e504d8a, -0x4e384dd8, -0x4ddd4e5e, -0x4d7e4e18, -0x4df24dd4, -0x4dd64e8f, -0x4dc14e08, -0x4f764e1b, -0x4f194dea, -0x4eb44e8a, -0x4de24f5a, -0x4e7d4df5, -0x4e404e87, -0x4ea94db8, -0x4da24e79, -0x4d4a4e33, -0x4e184e4b, -0x4e004e44, -0x4e9f4e51, -0x4e734e5d, -0x4e514e09, -0x4e524e4f, -0x4dc74ddf, -0x4e214dd6, -0x4e624e2f, -0x4ea44ddb, -0x4eb94e07, -0x4dcc4ded, -0x4dcd4ed5, -0x4dce4ebf, -0x4dd44d8e, -0x4e364d90, -0x4de24e69, -0x4e4c4d98, -0x4ecc4e10, -0x4ebc4d5d, -0x4e004dd7, -0x4e8f4e78, -0x4ee14ea8, -0x4e2e4e82, -0x4e1d4e0b, -0x4e364e94, -0x4e1d4dff, -0x4dd34e2d, -0x4e024e2e, -0x4e834def, -0x4e304dc1, -0x4dc84e18, -0x4e7b4dcc, -0x4e914deb, -0x4ead4e53, -0x4de74e39, -0x4dde4db6, -0x4d9c4e7e, -0x4d7f4e4d, -0x4e1d4dd3, -0x4efe4dee, -0x4e294e96, -0x4e124e9f, -0x4e034dfb, -0x4e4d4e55, -0x4df44d8e, -0x4dd34e23, -0x4dd24dbf, -0x4dab4e6f, -0x4e0d4e07, -0x4e894e82, -0x4e3f4e4c, -0x4e644e3b, -0x4e2d4e44, -0x4dc54db1, -0x4dcf4db7, -0x4e544e33, -0x4e124e27, -0x4e284e13, -0x4df74d7e, -0x4df04eb3, -0x4df14eda, -0x4df44d04, -0x4dfb4d89, -0x4dd44e5b, -0x4e564d9e, -0x4ec24e47, -0x4e0c4d55, -0x4e2c4d56, -0x4e3c4d9b, -0x4ed34e5b, -0x4de14e76, -0x4e314e24, -0x4dec4e21, -0x4e354dfe, -0x4e7f4e3a, -0x4dc94e71, -0x4ea74e07, -0x4e4d4dbf, -0x4d4e4e21, -0x4e444dff, -0x4e344dbc, -0x4e9d4e63, -0x4e094ddd, -0x4d524d5f, -0x4d4d4e04, -0x4d7b4dc9, -0x4e974e22, -0x4ec44dc6, -0x4e144e0e, -0x4d644ea4, -0x4df14dbc, -0x4d9f4e04, -0x4dcb4db5, -0x4d694dbc, -0x4da84dc0, -0x4e164e3e, -0x4d5d4e73, -0x4eb74e6c, -0x4de64e6f, -0x4e024dc8, -0x4d834e9e, -0x4d6f4d8c, -0x4dfd4d25, -0x4d9a4e12, -0x4e954d58, -0x4e744de8, -0x4df84d50, -0x4e0e4ddf, -0x4de14eb7, -0x4d954d5f, -0x4dcf4d8a, -0x4dc74e35, -0x4db64d95, -0x4f004db7, -0x4dc94d61, -0x4daf4daa, -0x4e124e2e, -0x4ed44e12, -0x4db54e2f, -0x4dfc4e30, -0x4e394e4e, -0x4e304e06, -0x4e114ddd, -0x4dc24e6b, -0x4e6a4d96, -0x4e304d42, -0x4d214e1f, -0x4e8c4de8, -0x4dcc4dbc, -0x4e614e03, -0x4e234df3, -0x4d6b4d73, -0x4d834e65, -0x4de44e07, -0x4ecc4e20, -0x4eca4d8e, -0x4dc74ddf, -0x4d934ead, -0x4df74d81, -0x4dac4e5a, -0x4dd74d5e, -0x4d534e0c, -0x4cc34db1, -0x4dac4e09, -0x4d974e44, -0x4e6c4df3, -0x4da14e2d, -0x4df14df0, -0x4d864e35, -0x4da94d8f, -0x4d924ce6, -0x4e024e33, -0x4e1e4d57, -0x4e9b4d6f, -0x4db44cf6, -0x4e0a4df2, -0x4db64e79, -0x4d874d5e, -0x4d984d94, -0x4d9f4dd8, -0x4e074d9b, -0x4e904db5, -0x4e044d8f, -0x4df34d37, -0x4e0b4dbb, -0x4e724e46, -0x4d884e38, -0x4dd04de0, -0x4e1c4e34, -0x4de94ddc, -0x4dc54df7, -0x4dcb4e26, -0x4e104dc6, -0x4dda4db4, -0x4d424e2c, -0x4e344dda, -0x4df64df9, -0x4e604e4c, -0x4da14dce, -0x4ddc4dfb, -0x4df64dfc, -0x4e794e60, -0x4f0d4ee5, -0x4f644e50, -0x4e144e51, -0x4e424f68, -0x4dea4e0e, -0x4e284e93, -0x4e3a4dd7, -0x4d3a4e8b, -0x4dd74e6a, -0x4e774e04, -0x4de54e54, -0x4ead4e6e, -0x4ed84e4d, -0x4e134e36, -0x4e574ef5, -0x4df74e79, -0x4dd74dca, -0x4e464dc8, -0x4ea04df8, -0x4eab4e57, -0x4de84dbd, -0x4ddd4ebc, -0x4e754f0b, -0x4e2c4d8e, -0x4e384d68, -0x4de24e5d, -0x4e444e27, -0x4f244e80, -0x4e594db1, -0x4df54dcb, -0x4e7c4e8c, -0x4eca4ec9, -0x4e6b4e37, -0x4e1e4e74, -0x4e4e4ebb, -0x4e604e39, -0x4e6a4e2e, -0x4ddd4ebd, -0x4e884dd9, -0x4e214db2, -0x4daf4de8, -0x4e7e4e9e, -0x4e784e1d, -0x4e694e9e, -0x4df04e48, -0x4e154e18, -0x4d9d4e0d, -0x4db64de2, -0x4e904e03, -0x4f644db2, -0x4e444e3c, -0x4e614f07, -0x4e2a4e19, -0x4dea4e27, -0x4e0d4dda, -0x4d6f4e2a, -0x4dae4df2, -0x4e124e27, -0x4d564e69, -0x4ec94e61, -0x4dfb4e75, -0x4e4b4df1, -0x4e004e66, -0x4dd54df6, -0x4dd94d9c, -0x4e0f4dc1, -0x4e664dff, -0x4e5e4e12, -0x4e064dc5, -0x4d9a4ea9, -0x4d9c4edd, -0x4dfa4d79, -0x4de74dec, -0x4dde4e23, -0x4e254d74, -0x4ed24e5e, -0x4eb24dbe, -0x4df84d68, -0x4e5f4e4e, -0x4eae4e72, -0x4d794e68, -0x4df44e1b, -0x4e0b4e5c, -0x4e144e38, -0x4e1e4e30, -0x4da54e6e, -0x4e834e15, -0x4e054d85, -0x4d584dc2, -0x4e6a4dfe, -0x4df24dbd, -0x4e344e78, -0x4de84e58, -0x4e614ed2, -0x4ebf4e8f, -0x4e4a4ef5, -0x4f754ed0, -0x500b4dcc, -0x4ed74e3a, -0x4e6b4f6a, -0x4e694e3d, -0x4ef64ee1, -0x4e8a4de0, -0x4dd94ea9, -0x4e634e98, -0x4eb54e1a, -0x4dfb4f27, -0x4f054eec, -0x4ec34ee4, -0x4ed64ede, -0x4e114eee, -0x4dc84e56, -0x4e6d4e3e, -0x4e824ebb, -0x4f274e5e, -0x4f294ec1, -0x4e074dc5, -0x4e3a4f4b, -0x4e9b4f06, -0x4e684e12, -0x4e6c4e1b, -0x4e534ec0, -0x4e714dd4, -0x4f594ea6, -0x4ed94d84, -0x4e564dd2, -0x4e414ecf, -0x4f784e5b, -0x4ee44eaa, -0x4e0f4ec2, -0x4e994ea8, -0x4ed04e0f, -0x4e7e4e36, -0x4e094ea4, -0x4ed14ea2, -0x4e2d4e45, -0x4dfe4e7f, -0x4f084ea7, -0x4f1e4e5b, -0x4e8d4f1b, -0x4e1f4e63, -0x4d584d50, -0x4d634dc6, -0x4cf44d51, -0x4e934dea, -0x4e414d63, -0x4dd54d61, -0x4d604e3a, -0x4d9f4dd1, -0x4d1d4e21, -0x4d9e4d52, -0x4d534df7, -0x4d574d8c, -0x4d524dad, -0x4ccb4ddb, -0x4e334e0b, -0x4e174e0d, -0x4d644d8e, -0x4d7d4e15, -0x4d3c4db1, -0x4d814d35, -0x4ddf4d5b, -0x4e154d29, -0x4dbe4d2c, -0x4d964ca5, -0x4d8b4dd8, -0x4d1f4deb, -0x4d794d1e, -0x4d9c4ce2, -0x4d134de9, -0x4d994d46, -0x4e324ddf, -0x4dae4d14, -0x4d7d4d49, -0x4dc04dd3, -0x4e174e07, -0x4d3c4de2, -0x4dd04dcc, -0x4d244dff, -0x4dc44d49, -0x4d944d5e, -0x4d764e1d, -0x4dce4d29, -0x4d844d50, -0x4d394d8a, -0x4dd34dcc, -0x4de94d6b, -0x4d814e08, -0x4d8a4d94, -0x4e044d9f, -0x4d914e12, -0x4d8b4df5, -0x4ea84dbb, -0x4edd4da5, -0x4da14da2, -0x4dae4e67, -0x4df34db6, -0x4d054e3c, -0x4dcd4d7d, -0x4d864dbd, -0x4d854da9, -0x4daa4dc9, -0x4d344e3d, -0x4e654dfa, -0x4ddf4e16, -0x4d7e4dae, -0x4d424e6f, -0x4d5c4d8c, -0x4e044d39, -0x4da64d90, -0x4e424d72, -0x4e154e03, -0x4dc64d9b, -0x4d684e18, -0x4da74e3e, -0x4db94cfb, -0x4d474db4, -0x4d0d4dac, -0x4de74d91, -0x4ece4dcc, -0x4ddb4d39, -0x4d174d3f, -0x4e874e3d, -0x4e9d4da9, -0x4dba4df6, -0x4d734de3, -0x4d6c4ddf, -0x4dc44df5, -0x4dac4d89, -0x4d8d4e55, -0x4e7c4d29, -0x4dc34d3e, -0x4d164dc6, -0x4db64db1, -0x4e104d2e, -0x4e534e8f, -0x4d934def, -0x4dc34d7c, -0x4e1d4e09, -0x4dfd4e57, -0x4f294ea6, -0x4f374e11, -0x4e3f4e26, -0x4e264f1f, -0x4e0b4e37, -0x4e584ea0, -0x4df14d9f, -0x4d804e40, -0x4da54e42, -0x4e594e6b, -0x4dc24e1a, -0x4eae4e18, -0x4e4e4eb2, -0x4e704e46, -0x4de54e78, -0x4d664dfb, -0x4dcf4ddb, -0x4e804de8, -0x4efd4e25, -0x4e744e0a, -0x4e3a4d9c, -0x4e2a4ec3, -0x4db94ea9, -0x4e324d98, -0x4e294dfd, -0x4da44e8b, -0x4e594dda, -0x4f144e6d, -0x4e734da8, -0x4e0e4e03, -0x4e4f4e3f, -0x4ece4e67, -0x4db34e6d, -0x4e034e71, -0x4e1d4e4d, -0x4deb4e9e, -0x4de64dd6, -0x4da24ebf, -0x4eb34e25, -0x4e424dbd, -0x4dfa4e33, -0x4e344e18, -0x4e624db7, -0x4e554e91, -0x4e0e4e39, -0x4e0e4e1c, -0x4dfe4ea5, -0x4e244e42, -0x4f644ee6, -0x4f494e07, -0x4e794e23, -0x4e394f00, -0x4e644e49, -0x4e6b4efa, -0x4ebb4dcb, -0x4e024dec, -0x4dad4e6b, -0x4e8d4e53, -0x4dbe4e1b, -0x4f4a4e5f, -0x4e1b4ea3, -0x4e294e26, -0x4e224e9b, -0x4e0a4e06, -0x4dd44e12, -0x4e6b4e83, -0x4ebb4e03, -0x4eef4e0e, -0x4de84db8, -0x4dfa4ef8, -0x4dfe4e70, -0x4e484db4, -0x4dd64db3, -0x4e0f4e90, -0x4eb74e43, -0x4f394eb4, -0x4eea4db4, -0x4e4f4dc9, -0x4e824e79, -0x4ebe4e4d, -0x4e1d4ea0, -0x4e2a4e88, -0x4dff4ea2, -0x4e1e4e4a, -0x4e424e56, -0x4e134eee, -0x4e8d4e05, -0x4e5f4d84, -0x4da94e72, -0x4e824e65, -0x4eec4dd0, -0x4e6d4ebf, -0x4e344e05, -0x4df84df7, -0x4dc24e19, -0x4d964e08, -0x4e8b4e15, -0x4ee64dd6, -0x4e814e2a, -0x4dbc4eb0, -0x4dc14db3, -0x4e074e4a, -0x4e384de6, -0x4d734e01, -0x4d6b4de0, -0x4e384e18, -0x4d814e4c, -0x4efa4e65, -0x4e204e48, -0x4dc14e19, -0x4dd94e7b, -0x4dd34e18, -0x4ddd4d4c, -0x4e144dc0, -0x4e9f4d8a, -0x4e454dbf, -0x4e034d36, -0x4d8b4e7c, -0x4dc34e7a, -0x4dff4d4d, -0x4ddd4d84, -0x4d7d4e76, -0x4e024d74, -0x4e5f4e10, -0x4e264d8c, -0x4dd54d8b, -0x4e0a4e33, -0x4ee14df0, -0x4d9d4e21, -0x4e224e45, -0x4de64e2a, -0x4e4c4e22, -0x4e0e4de5, -0x4d294e9d, -0x4e5e4d9c, -0x4e154d53, -0x4d644e02, -0x4e464dd4, -0x4e194d64, -0x4e3a4e5f, -0x4db64d78, -0x4ddb4dec, -0x4d9e4e68, -0x4e3e4e3c, -0x4f6c4e41, -0x4f2a4e24, -0x4e7c4e2e, -0x4dde4f37, -0x4e754dd5, -0x4dc94eb7, -0x4e364dcb, -0x4df64e72, -0x4db54e52, -0x4e344dfa, -0x4dcd4ebf, -0x4edf4e14, -0x4e8b4e6b, -0x4e5f4e41, -0x4dd64e82, -0x4db84e0a, -0x4e344dc6, -0x4eb44e16, -0x4ed24e02, -0x4ef54e2d, -0x4e364dc5, -0x4df04eb4, -0x4de84f4d, -0x4e0a4dac, -0x4e454d9c, -0x4dd14e79, -0x4ec14db0, -0x4ee04dfb, -0x4e884d70, -0x4df64df2, -0x4e334e3f, -0x4f0b4ef4, -0x4e454e75, -0x4d914e05, -0x4e1b4e72, -0x4e324e66, -0x4e144dd1, -0x4e104e63, -0x4ebf4df1, -0x4e6a4d89, -0x4d914e7b, -0x4e614e3f, -0x4e7f4e31, -0x4e164ddd, -0x4de84e2b, -0x4d3f4d4a, -0x4d6a4d6a, -0x4d744e2b, -0x4eb14de3, -0x4e754dd9, -0x4dde4da3, -0x4ded4e51, -0x4d834e0a, -0x4dd74e72, -0x4d744d43, -0x4da84e0c, -0x4d544df0, -0x4e0a4df0, -0x4d744e25, -0x4e134e0f, -0x4e0e4e18, -0x4dfa4e0c, -0x4d824e2f, -0x4d6a4dbe, -0x4d8b4d42, -0x4dc94ce1, -0x4e1f4d63, -0x4e114db1, -0x4df34d22, -0x4d7d4e58, -0x4d844ec2, -0x4d6e4d46, -0x4d684d20, -0x4d394dfe, -0x4d874d23, -0x4ec74d7e, -0x4dbf4d2a, -0x4d8f4d44, -0x4dff4e0a, -0x4e2e4e30, -0x4d894d94, -0x4d724e04, -0x4d414dee, -0x4d584dd4, -0x4d8f4dba, -0x4dac4e19, -0x4dea4db5, -0x4e1a4ce2, -0x4d544d87, -0x4e3e4d86, -0x4e414e04, -0x4df54dd4, -0x4d924e28, -0x4dba4d5e, -0x4d944df8, -0x4d7d4df0, -0x4e834dfc, -0x4e984df1, -0x4dc64dd4, -0x4daa4e84, -0x4d984d97, -0x4d9e4dfd, -0x4dd74d4a, -0x4da54d7e, -0x4dd14dbf, -0x4db74de8, -0x4d454dfd, -0x4e6c4dba, -0x4dfc4df2, -0x4dad4dc2, -0x4d4d4e19, -0x4dab4df1, -0x4da84d76, -0x4e554d60, -0x4e584dab, -0x4e074d6a, -0x4d824d48, -0x4d734e78, -0x4dbe4e49, -0x4d804d0c, -0x4d674dbb, -0x4d344e27, -0x4de14d72, -0x4e814e1d, -0x4e184cf1, -0x4d8d4d84, -0x4e4d4e1b, -0x4e694dd0, -0x4da04dc1, -0x4d7b4e4a, -0x4d4f4dc0, -0x4e1b4de4, -0x4e144da1, -0x4d534e2c, -0x4ecd4d67, -0x4dc24d98, -0x4d374dff, -0x4dcb4deb, -0x4de84cff, -0x4d804e0a, -0x4d6a4dba, -0x4d5c4d78, -0x4d184dbd, -0x4d984d9d, -0x4e534d95, -0x4e9f4d96, -0x4dea4db1, -0x4d7f4ea8, -0x4d7a4d8b, -0x4d5d4de6, -0x4da54d91, -0x4d384da8, -0x4d874ddd, -0x4dfd4d57, -0x4d7b4e38, -0x4e344d9a, -0x4da24e26, -0x4d634dc3, -0x4d544de6, -0x4cfb4dec, -0x4d014d33, -0x4da94d50, -0x4e134da2, -0x4dff4dbf, -0x4de24d20, -0x4d734e2b, -0x4d964e87, -0x4d664ce3, -0x4d8a4d63, -0x4d324e2e, -0x4da94d64, -0x4e994da7, -0x4e264cff, -0x4d794d53, -0x4daf4df7, -0x4e484e47, -0x4dc04d6a, -0x4d4d4ddd, -0x4d9b4dfb, -0x4d674db0, -0x4dfc4ddb, -0x4d4f4d88, -0x4e654cfd, -0x4dca4d56, -0x4cdd4dcb, -0x4db64d73, -0x4dae4d42, -0x4d764e26, -0x4d824d67, -0x4df64dbf, -0x4dbc4e63, -0x4e0f4edf, -0x4ecc4dfc, -0x4f244e07, -0x4e3b4e00, -0x4e764f2d, -0x4d9b4e0c, -0x4e604ecf, -0x4e4e4df9, -0x4dd04e0e, -0x4dfb4e7d, -0x4eab4e65, -0x4e0c4e78, -0x4e4c4e44, -0x4e9f4e70, -0x4e014e78, -0x4e024e8d, -0x4dcd4e1e, -0x4dac4dce, -0x4e114e25, -0x4ee44df9, -0x4eb64e60, -0x4e324dc2, -0x4dad4f0f, -0x4dac4f16, -0x4e754d37, -0x4df54daf, -0x4db64e91, -0x4e514dc3, -0x4f044e1a, -0x4e224dd3, -0x4dd44dcd, -0x4e384e5a, -0x4e7a4e9f, -0x4e594ea4, -0x4e094e63, -0x4dff4e3f, -0x4e1b4e0b, -0x4e7a4e1b, -0x4d964e5f, -0x4e7d4dc5, -0x4e224d96, -0x4d5a4e39, -0x4eb54e54, -0x4e664e10, -0x4e2c4e83, -0x4d5a4e34, -0x4dd14d71, -0x4d844e56, -0x4d864dcc, -0x4e5a4e2f, -0x4ea74dc0, -0x4e254e1e, -0x4d594ea5, -0x4e004d96, -0x4d7f4e1c, -0x4e334d79, -0x4d994d81, -0x4d4f4d92, -0x4dec4d9b, -0x4d444e45, -0x4e434dcf, -0x4dfe4e26, -0x4e014dd8, -0x4dd24e6b, -0x4db84ddd, -0x4dec4d2e, -0x4e0f4de0, -0x4ed94da8, -0x4e7f4da5, -0x4d7b4cfb, -0x4da24e07, -0x4d954e9f, -0x4db74d3b, -0x4dc74da1, -0x4d734dfb, -0x4dfb4d74, -0x4ed74df9, -0x4de74d61, -0x4db04d74, -0x4e054da0, -0x4e674e52, -0x4d864e3b, -0x4ded4dca, -0x4d874d7e, -0x4dec4dee, -0x4df74dd8, -0x4d394e19, -0x4e7b4da2, -0x4de34d5f, -0x4d6e4de7, -0x4e394dad, -0x4e134d1b, -0x4de64dfe, -0x4dd74dad, -0x4de74e08, -0x4e574e3b, -0x4e894ec6, -0x4f6b4eae, -0x4fbb4e5a, -0x4e304e68, -0x4e464f54, -0x4e014e31, -0x4e6e4f2d, -0x4e3e4e0a, -0x4dd64ead, -0x4e124e96, -0x4e8d4e62, -0x4e034ec0, -0x4eec4e58, -0x4eac4ea5, -0x4e684e98, -0x4e204efa, -0x4e0a4e2d, -0x4e364e29, -0x4e6e4e62, -0x4ee74dc5, -0x4ef04e9f, -0x4e0e4e06, -0x4df44f08, -0x4dc94f16, -0x4e984d49, -0x4e734dcd, -0x4e7e4ecb, -0x4e874e22, -0x4f224e90, -0x4ed84dd9, -0x4e274e21, -0x4e734e54, -0x4f3b4e8d, -0x4dfe4e98, -0x4e224ec4, -0x4e794e8b, -0x4e684e10, -0x4e7a4e06, -0x4e1c4ef9, -0x4e9c4e11, -0x4e2a4dc7, -0x4e0c4dec, -0x4e894e55, -0x4f064e5f, -0x4e444eaf, -0x4e104ea0, -0x4dc04dbc, -0x4da84e13, -0x4e0f4e6c, -0x4ee84e94, -0x4f1d4df0, -0x4e334e41, -0x4dbd4f18, -0x4e194df9, -0x4d984e6e, -0x4ddf4d78, -0x4dad4e5e, -0x4d884dbf, -0x4e264e07, -0x4dd34e1c, -0x4ef34e6d, -0x4e3d4e99, -0x4e6b4e3c, -0x4e0e4e6f, -0x4dab4df7, -0x4e204dd2, -0x4dfe4e18, -0x4e684da4, -0x4e3d4e1e, -0x4df24d7f, -0x4dda4eb9, -0x4ddb4ec6, -0x4e1c4d6c, -0x4e234d9e, -0x4d744e36, -0x4e314dd5, -0x4f134e36, -0x4e074d62, -0x4df54d70, -0x4e464e70, -0x4eb44e5d, -0x4de14e6d, -0x4e174e64, -0x4e2f4e36, -0x4e324e29, -0x4dc94dde, -0x4de54e74, -0x4e524de6, -0x4e0e4da3, -0x4daf4e4b, -0x4ebe4dec, -0x4e104dc5, -0x4e8d4e83, -0x4e0d4e13, -0x4e034de6, -0x4d8b4e4f, -0x4e0f4e9b, -0x4ed64ea4, -0x4f1d4dca, -0x4e484e28, -0x4e004eff, -0x4e114e96, -0x4dae4eb8, -0x4e6d4df2, -0x4e1a4e65, -0x4e044e33, -0x4e744e00, -0x4df94eca, -0x4e8c4e32, -0x4e814eac, -0x4e2a4e27, -0x4de14e53, -0x4d9c4df1, -0x4e374dd9, -0x4e2f4e26, -0x4edb4d63, -0x4ebd4e62, -0x4e054dd5, -0x4dd14eb9, -0x4dee4f1c, -0x4e2c4d5f, -0x4e074e1e, -0x4ddf4e03, -0x4dd14dc5, -0x4edb4e05, -0x4e5a4dca, -0x4dd54d80, -0x4e6a4e75, -0x4eb34e69, -0x4e884e49, -0x4e284ea2, -0x4e214ea6, -0x4e2f4e0a, -0x4e434e39, -0x4e074e3b, -0x4e974d9a, -0x4e814d98, -0x4d1d4dd9, -0x4e7c4e15, -0x4e484e15, -0x4e994ec0, -0x4e504e31, -0x4dcf4d4e, -0x4e0f4e16, -0x4d5b4e3d, -0x4ed84dd0, -0x4f4d4dfa, -0x4e5d4dbd, -0x4d9b4e9b, -0x4dcd4e37, -0x4e454e8e, -0x4dfa4d87, -0x4dd64e43, -0x4d8a4e1c, -0x4ddb4e32, -0x4d754e30, -0x4eca4db6, -0x4e084dcd, -0x4e614e13, -0x4dd94e35, -0x4d9e4dbc, -0x4dfe4d85, -0x4e314e2a, -0x4e504d76, -0x4e8e4dcc, -0x4de94d2d, -0x4d8a4eaf, -0x4db04ebd, -0x4def4d28, -0x4db84da2, -0x4dc04e71, -0x4dd94d07, -0x4eec4e0d, -0x4dff4dd4, -0x4ded4d97, -0x4e554e33, -0x4e884e1f, -0x4da14e25, -0x4de94e0d, -0x4dc74e00, -0x4dc94de5, -0x4dd44e36, -0x4df14eae, -0x4ecc4e29, -0x4e1d4d81, -0x4d934e1a, -0x4e674dd0, -0x4e494ddf, -0x4dfc4e29, -0x4e154e4e, -0x4d544d53, -0x4d204dcb, -0x4d7b4d9f, -0x4e614db1, -0x4e2b4d86, -0x4dca4d85, -0x4d8f4e88, -0x4dbd4d7c, -0x4d534dd1, -0x4e334cf8, -0x4d524daa, -0x4d284d77, -0x4db74db3, -0x4d5f4da2, -0x4e404d8b, -0x4d4e4e0a, -0x4d894d44, -0x4ced4dd4, -0x4d234d7e, -0x4d334d3b, -0x4dbe4d97, -0x4e184d4e, -0x4e374d25, -0x4d584cec, -0x4d794dd8, -0x4d8d4e3c, -0x4d564d0e, -0x4d474ce2, -0x4d344dec, -0x4df84d24, -0x4dc04d54, -0x4db24ce1, -0x4d594d4d, -0x4db24d7b, -0x4e114db9, -0x4daa4d44, -0x4d614dc6, -0x4d7d4db8, -0x4dc44d94, -0x4da84d64, -0x4d5b4db3, -0x4e4c4d48, -0x4cf74d38, -0x4ce74dda, -0x4de04de8, -0x4dc44d34, -0x4db94e01, -0x4d314d72, -0x4d8a4d50, -0x4d704e4e, -0x4db34e36, -0x4ec34e2c, -0x4f034de3, -0x4e594e28, -0x4dee4ec1, -0x4dfa4db6, -0x4de54e6c, -0x4dc94d40, -0x4d894e59, -0x4da54dc7, -0x4e484d83, -0x4df24e69, -0x4ebb4e0e, -0x4e394e4c, -0x4e1c4e07, -0x4db94e5c, -0x4d7f4e05, -0x4de64d54, -0x4df74dca, -0x4e504d7c, -0x4e694e43, -0x4e1d4da0, -0x4db84e57, -0x4e234eb1, -0x4e1c4d6d, -0x4e164d74, -0x4dcc4e3b, -0x4e5b4d94, -0x4ec54e25, -0x4e1c4d65, -0x4ded4d5b, -0x4e064e12, -0x4eb64e1a, -0x4dbf4de4, -0x4e3b4e1a, -0x4dff4e57, -0x4e6a4dd6, -0x4e4f4dc5, -0x4d7e4e81, -0x4e844dc1, -0x4dff4dd8, -0x4dc24e2f, -0x4e704db1, -0x4de94de1, -0x4e114e31, -0x4dbf4e46, -0x4da34daa, -0x4dce4dcd, -0x4d784d97, -0x4eeb4e0a, -0x4f2f4ddb, -0x4e554dbe, -0x4e374eca, -0x4d904deb, -0x4dbd4e6f, -0x4e244d88, -0x4d4a4d99, -0x4ceb4dd8, -0x4e534d9c, -0x4d8f4e45, -0x4e404dc8, -0x4dff4e47, -0x4dba4e47, -0x4d964e4b, -0x4db64dc2, -0x4dbc4d80, -0x4dec4d66, -0x4e8e4d6b, -0x4e1c4e05, -0x4da34d0c, -0x4d3a4e61, -0x4d5f4e7c, -0x4db24d0d, -0x4dec4db0, -0x4d724dbd, -0x4db34d40, -0x4e524e06, -0x4e654d18, -0x4d434d80, -0x4dc64e0b, -0x4e714e60, -0x4d924e0e, -0x4d7c4e0a, -0x4d6b4dbb, -0x4d644df5, -0x4d9a4d99, -0x4d524de1, -0x4de84d93, -0x4e124d70, -0x4d204db2, -0x4df94de8, -0x4e624dcb, -0x4dd34e5e, -0x4d5a4d3f, -0x4db84d97, -0x4d814e07, -0x4db24e2e, -0x4f254e2a, -0x4f354ddf, -0x4e844d9b, -0x4df44ecf, -0x4e104e15, -0x4e114e45, -0x4dda4d9c, -0x4d3e4e85, -0x4d9c4e4e, -0x4e494de0, -0x4d844e53, -0x4eb84e03, -0x4e824e40, -0x4e2e4e10, -0x4dd64e7c, -0x4d6f4de8, -0x4de34db7, -0x4db74e01, -0x4e614da6, -0x4e534e0a, -0x4df94dc8, -0x4d8b4ed6, -0x4da44ef9, -0x4dc94dd6, -0x4dee4db2, -0x4d864e8c, -0x4e364d9c, -0x4ebd4e13, -0x4e284d11, -0x4e224d81, -0x4e4f4e2f, -0x4e824ed6, -0x4e174e2f, -0x4d874e48, -0x4e4e4e49, -0x4e454e39, -0x4df74ddc, -0x4df24e29, -0x4eef4dc2, -0x4df44d9b, -0x4d734e4a, -0x4e7e4e0f, -0x4e4c4de6, -0x4e124e43, -0x4de64e38, -0x4e054dca, -0x4da44e41, -0x4dc14e08, -0x4ed44dfa, -0x4ee94d4c, -0x4dd24dfb, -0x4ddc4e70, -0x4dc34d8e, -0x4dec4e7b, -0x4e284d8f, -0x4d794e1d, -0x4db14dde, -0x4dd54df1, -0x4d3a4e31, -0x4e3b4ddd, -0x4df84e47, -0x4d7f4dec, -0x4d7f4e3c, -0x4d624d7f, -0x4dc94d46, -0x4de74df7, -0x4e5c4ddf, -0x4e444dc1, -0x4db34d43, -0x4dae4e4d, -0x4dbf4e60, -0x4de04d71, -0x4dc14dba, -0x4d6d4e2a, -0x4df84dab, -0x4e564de5, -0x4dcc4d64, -0x4dce4e01, -0x4e884e3a, -0x4e6b4dff, -0x4e054e35, -0x4dc44de3, -0x4dc44e69, -0x4df84de5, -0x4e0e4da5, -0x4dc74d96, -0x4ec24d53, -0x4ddf4d82, -0x4d334dac, -0x4e304d9b, -0x4e3b4d97, -0x4e5c4e89, -0x4d9d4db9, -0x4e5c4e27, -0x4e514f2b, -0x4e604ee2, -0x4f9b4f10, -0x4f9e4e52, -0x4e874e9d, -0x4e8b4f8a, -0x4e964e8b, -0x4f344f19, -0x4ece4e0a, -0x4e274eec, -0x4e3e4ea4, -0x4e344eb1, -0x4ea74ed1, -0x4f9a4f40, -0x4e8e4f51, -0x4ec44f25, -0x4ea64f12, -0x4e174e7c, -0x4e734de8, -0x4e454ebf, -0x4f004e3c, -0x4f3d4e94, -0x4ea74e02, -0x4eab4f5b, -0x4e4d4f40, -0x4e794e05, -0x4e814e13, -0x4e9d4f20, -0x4eda4e6d, -0x4f9e4ec8, -0x4ebb4e39, -0x4e674de4, -0x4f434ed6, -0x4f8e4eef, -0x4e5d4edd, -0x4f3b4ebe, -0x4e7a4f37, -0x4ecc4ec0, -0x4ef64f01, -0x4e9d4f29, -0x4ed04e7a, -0x4ef14e93, -0x4e434eb9, -0x4f544eca, -0x4e984e4a, -0x4f334f5d, -0x4e9f4e9e, -0x4ebb4dd7, -0x4e2d4e87, -0x4ed84ed6, -0x4f2b4e71, -0x4f424e32, -0x4e644eb7, -0x4e1a4f8f, -0x4ec84e53, -0x4e5b4e44, -0x4e804e7e, -0x4e184ec2, -0x4e2e4e55, -0x4ec84e9e, -0x4dfb4e5f, -0x4f3b4e68, -0x4e364e83, -0x4e3e4ec6, -0x4e264ee6, -0x4e574e82, -0x4e3d4e3b, -0x4e844e2f, -0x4f3a4e1f, -0x4ebc4e2c, -0x4e4b4e1e, -0x4e2a4f06, -0x4e4a4f35, -0x4e5e4dc1, -0x4e334e0d, -0x4daa4e6b, -0x4e744ddc, -0x4f4e4e61, -0x4e9d4e23, -0x4df84dc1, -0x4ed24e6c, -0x4f254ea7, -0x4e3e4e7b, -0x4e174e69, -0x4e044ed4, -0x4e744e81, -0x4edf4e3a, -0x4e5a4e87, -0x4ea24e63, -0x4eaf4ddd, -0x4db04eac, -0x4efd4ea1, -0x4e884e60, -0x4f254df4, -0x4e344e13, -0x4dd94e0d, -0x4dbd4e1e, -0x4e054e05, -0x4ef74e9b, -0x4ee94e05, -0x4e504e79, -0x4e4d4f3d, -0x4ec14e45, -0x4e114eaa, -0x4e414da2, -0x4df94e50, -0x4dff4e0e, -0x4e444e54, -0x4e1e4e2b, -0x4ef04e8f, -0x4e5a4e44, -0x4e534e65, -0x4e314e7c, -0x4d7c4e00, -0x4e2d4e09, -0x4e184e8c, -0x4e734def, -0x4eb64e1e, -0x4e234d9e, -0x4e624eaa, -0x4e4f4ee7, -0x4e3c4d89, -0x4e804e0f, -0x4e164e2e, -0x4e794df6, -0x4ef94e9e, -0x4e394d5f, -0x4e044d87, -0x4e994eda, -0x4f324e75, -0x4e474e55, -0x4e5a4e23, -0x4e394eb0, -0x4e3b4e6d, -0x4e894e5c, -0x4e164ec6, -0x4f0b4e36, -0x4e1a4d76, -0x4dc44e5b, -0x4e5b4dfb, -0x4e8c4e5f, -0x4e7d4e8b, -0x4df34e14, -0x4da24db1, -0x4dc64e28, -0x4e084e3d, -0x4e7e4df4, -0x4ee44db8, -0x4df94e5c, -0x4db34eee, -0x4e264daf, -0x4dee4e20, -0x4e2e4df8, -0x4d7e4e2a, -0x4d944e32, -0x4e494e1b, -0x4dc44e84, -0x4ead4dff, -0x4e4a4e55, -0x4e074e04, -0x4dac4ebb, -0x4ded4daf, -0x4d9a4d53, -0x4de64dd7, -0x4e3d4d5b, -0x4ea84dff, -0x4da44d9d, -0x4d924e1e, -0x4d3e4e7a, -0x4db54d57, -0x4d964d77, -0x4d7a4e1a, -0x4de04d74, -0x4eb64dba, -0x4e274d49, -0x4dca4d55, -0x4e834e02, -0x4eaf4e6b, -0x4de94e2b, -0x4db54e53, -0x4dd74e0b, -0x4df54dbe, -0x4dc94dd0, -0x4d694e66, -0x4e3b4e0e, -0x4dff4d50, -0x4d654de3, -0x4e0e4dd4, -0x4e524df0, -0x4e3e4ee9, -0x4dbd4e53, -0x4d904d94, -0x4d3c4e41, -0x4d6d4de7, -0x4e974dfa, -0x4e5c4de8, -0x4dfe4dde, -0x4d8a4e81, -0x4dce4d99, -0x4de24e82, -0x4dab4dba, -0x4d4e4dc5, -0x4db54d64, -0x4dcb4d8c, -0x4d744dc9, -0x4e2f4dfa, -0x4db34e29, -0x4d7e4deb, -0x4d9a4ddd, -0x4da24d6e, -0x4d824cdf, -0x4dd14da5, -0x4e454da7, -0x4df14dba, -0x4d324d49, -0x4d3f4e97, -0x4d724e88, -0x4dd34cfe, -0x4d534d33, -0x4d6b4db0, -0x4e024d5f, -0x4e934dcb, -0x4dc54d95, -0x4d864da2, -0x4df44ddf, -0x4e0d4dac, -0x4d3f4dd1, -0x4d424df6, -0x4dac4e24, -0x4da24e2e, -0x4df04db6, -0x4d6f4dd6, -0x4e2f4d6b, -0x4e394d51, -0x4d124dfd, -0x4ded4d9a, -0x4dec4d3a, -0x4e0d4e1b, -0x4dad4dbc, -0x4dd54d87, -0x4dd04e10, -0x4ddf4e3f, -0x4ec64ea2, -0x4f154ddd, -0x4e474df0, -0x4dcc4ed0, -0x4de64dfa, -0x4dd74e44, -0x4e0c4da0, -0x4d9c4db8, -0x4dcf4dde, -0x4e854dfe, -0x4da64e7b, -0x4e734e87, -0x4e394e85, -0x4e464de2, -0x4dc64e55, -0x4d684d80, -0x4e354d9e, -0x4e414e1c, -0x4eab4d37, -0x4ea04e25, -0x4dd54dab, -0x4dc44e40, -0x4e0b4ea6, -0x4ddd4d35, -0x4dec4d6f, -0x4d864e3e, -0x4e1b4dc7, -0x4e7d4dd1, -0x4e564d5b, -0x4dc64d3e, -0x4e414e47, -0x4ea34deb, -0x4e1e4e0b, -0x4d7d4e4f, -0x4e054e69, -0x4de14e07, -0x4df44dd4, -0x4daa4e23, -0x4e504d5c, -0x4e564d8c, -0x4d1b4df2, -0x4e564db1, -0x4e3b4d5c, -0x4e3d4ea7, -0x4dce4dc1, -0x4e1b4dd5, -0x4d934f0a, -0x4e1d4e7e, -0x4f7b4e8c, -0x4f3f4df4, -0x4e5e4e9f, -0x4e214f33, -0x4e7b4e55, -0x4e754ec6, -0x4e954e2f, -0x4df14ead, -0x4e1b4e00, -0x4e694e6a, -0x4dce4f05, -0x4ecc4e65, -0x4e864e72, -0x4e4c4ea7, -0x4e364ef1, -0x4dd84e28, -0x4e834dca, -0x4e654e23, -0x4f314e7f, -0x4e834ebf, -0x4e3d4d66, -0x4e644e9e, -0x4e124eba, -0x4e344d90, -0x4e314e11, -0x4de14e89, -0x4e9f4dca, -0x4f584e43, -0x4e964dc9, -0x4dfa4e38, -0x4eb14e94, -0x4f1b4ed4, -0x4e924ee2, -0x4e864e30, -0x4e4e4eb1, -0x4e744ea0, -0x4ebc4e52, -0x4dd84edd, -0x4ee24e1d, -0x4eb04df0, -0x4dd44e12, -0x4e9e4e3d, -0x4e444e31, -0x4ebb4ecb, -0x4e6d4e2c, -0x4e124dc2, -0x4de34e1c, -0x4df24dfc, -0x4ed44e09, -0x4f494e52, -0x4dc94e69, -0x4e734f08, -0x4e514e21, -0x4e2d4e85, -0x4e0c4da5, -0x4d7b4e09, -0x4dec4de6, -0x4e064e9e, -0x4da24ea8, -0x4eac4e74, -0x4e454e13, -0x4dea4e43, -0x4dbb4e85, -0x4dc44df5, -0x4e184d87, -0x4e204de4, -0x4ebd4dd5, -0x4e404e32, -0x4e074de9, -0x4de14e5a, -0x4e224f32, -0x4e234d57, -0x4dd44ded, -0x4dd44e11, -0x4e5d4dfd, -0x4ed04e9f, -0x4ea84d86, -0x4de34d69, -0x4ec84e2b, -0x4eca4e3c, -0x4de74e2f, -0x4e014e3e, -0x4df24e59, -0x4e3a4e82, -0x4e914e45, -0x4dc04e9a, -0x4e8d4e61, -0x4e314d51, -0x4d964dc1, -0x4e374dad, -0x4e8d4e2b, -0x4dfe4e69, -0x4ddd4e37, -0x4e6d4e19, -0x4e2a4ec5, -0x4e044e9c, -0x4f614ec6, -0x4f724e1f, -0x4e514e4d, -0x4e6a4f2c, -0x4e994e48, -0x4dd04edc, -0x4eb14e2e, -0x4de84e52, -0x4e0a4e5b, -0x4e354e2c, -0x4dd04ef2, -0x4f6d4eff, -0x4eca4ef2, -0x4e6e4e90, -0x4e894ece, -0x4e164dfc, -0x4eb74dcd, -0x4ee74e79, -0x4ec04e2e, -0x4ec04e93, -0x4e5a4dc4, -0x4e174f28, -0x4e444efc, -0x4e774dbc, -0x4eda4df3, -0x4e344ec2, -0x4e784e15, -0x4f874eb2, -0x4f1e4da1, -0x4e724dcb, -0x4e8c4eea, -0x4f224edb, -0x4e544ecd, -0x4e874eb8, -0x4ea34ef0, -0x4e794e57, -0x4e824e85, -0x4e3c4ebb, -0x4ec44e29, -0x4ea84e06, -0x4dc54eb7, -0x4e8a4e31, -0x4eac4e72, -0x4f1d4ed9, -0x4e684e7e, -0x4dd44e35, -0x4dda4e38, -0x4db14e05, -0x4f1a4e5a, -0x4f394e2b, -0x4e964e30, -0x4df64ecf, -0x4ddc4dd0, -0x4ddc4e5e, -0x4e504d6c, -0x4dc04dd5, -0x4d654e05, -0x4e464e16, -0x4dc04e57, -0x4ed24e5c, -0x4e114e79, -0x4e144e1a, -0x4e2f4e85, -0x4dd84dc9, -0x4ddb4d4c, -0x4e354e37, -0x4eb94dba, -0x4ed14dee, -0x4dfc4d7c, -0x4d784e86, -0x4e1e4e88, -0x4dc04d54, -0x4e0f4da2, -0x4db64e83, -0x4e784dc1, -0x4e344e0a, -0x4e834d73, -0x4dce4d8c, -0x4e114e55, -0x4e434e83, -0x4e054e7c, -0x4ddf4e93, -0x4dc44e3f, -0x4e6c4e19, -0x4e544db9, -0x4da34e9e, -0x4e6a4dbe, -0x4e1a4db0, -0x4d7b4e57, -0x4eac4e6e, -0x4e9a4da4, -0x4e7f4e6c, -0x4e0c4de6, -0x4e5d4e70, -0x4e2c4ea9, -0x4e134ee1, -0x4f974e9d, -0x4ff64e21, -0x4e574e48, -0x4e754f7e, -0x4e794e56, -0x4e3f4f65, -0x4e904da0, -0x4e8e4edc, -0x4e514e4d, -0x4e2a4e9c, -0x4e304e9e, -0x4edf4e4c, -0x4e914ef8, -0x4e714eb6, -0x4e484ead, -0x4de34e87, -0x4e294df8, -0x4ebb4e76, -0x4ef64e35, -0x4fa94e9e, -0x4e214dd5, -0x4e4a4ec4, -0x4e0d4f80, -0x4e074e07, -0x4e404e45, -0x4e384ef9, -0x4e674dd3, -0x4ecf4e85, -0x4eaf4dde, -0x4e834e1a, -0x4f2c4e6d, -0x4eab4ee4, -0x4e424e78, -0x4e304e9f, -0x4e274e70, -0x4e554eee, -0x4e9f4e96, -0x4e3e4e9c, -0x4f724e46, -0x4e804e1a, -0x4e044eb9, -0x4ee74e5e, -0x4ec04e43, -0x4e594f4b, -0x4e274e76, -0x4dbf4dd1, -0x4df34ec4, -0x4e044e12, -0x4f884e47, -0x4f9c4e3e, -0x4eb74e70, -0x4e204f21, -0x4ec14e02, -0x4e074f47, -0x4e954e00, -0x4dd64e30, -0x4d9d4dee, -0x4e054e09, -0x4ddb4ec7, -0x4f164e57, -0x4e604e8d, -0x4e2e4e58, -0x4df34ed0, -0x4df64e32, -0x4def4d99, -0x4e3d4e67, -0x4f1d4e21, -0x4ef24e24, -0x4e024da9, -0x4e2d4eea, -0x4e614f3d, -0x4e514de9, -0x4e1e4db4, -0x4e234e8c, -0x4e4f4dc5, -0x4f114e56, -0x4eda4d7f, -0x4e064de8, -0x4e144e52, -0x4f224e97, -0x4e434e29, -0x4e374e97, -0x4e4c4e58, -0x4e694e7f, -0x4e484e35, -0x4de64efe, -0x4e4f4e23, -0x4e554df0, -0x4daf4e59, -0x4e564e32, -0x4ea44dea, -0x4e7f4e72, -0x4e134e22, -0x4d554d97, -0x4d114d67, -0x4d954d7c, -0x4ea24e13, -0x4ef34e15, -0x4db64db7, -0x4d994eb7, -0x4d634e38, -0x4da14df6, -0x4d9c4d6d, -0x4d834dda, -0x4d744db0, -0x4e714db4, -0x4d504e1a, -0x4e264dec, -0x4dd04df3, -0x4d854ddf, -0x4da24dfb, -0x4d824ddc, -0x4d6e4d45, -0x4d8f4d55, -0x4de24d1e, -0x4e5d4d78, -0x4da04d4b, -0x4d4a4e24, -0x4dc84e82, -0x4d734d13, -0x4d5c4d4e, -0x4d894de9, -0x4db54d71, -0x4e4b4e0d, -0x4e2f4d15, -0x4da44d88, -0x4ded4de9, -0x4e274e35, -0x4d4c4dcb, -0x4d594dc5, -0x4da64de3, -0x4dfa4e7e, -0x4dfc4ddc, -0x4d714e23, -0x4e2a4d5d, -0x4daa4d4c, -0x4cff4d9c, -0x4df54ddd, -0x4dd14d8f, -0x4d5f4de1, -0x4d884e4c, -0x4dde4d87, -0x4dd24e24, -0x4e174e20, -0x4f2c4e1d, -0x4f094d91, -0x4e274e23, -0x4e1a4ec8, -0x4e004dcd, -0x4d914e75, -0x4db24d53, -0x4dac4e16, -0x4dfb4e22, -0x4dee4e20, -0x4d7a4e47, -0x4e9e4e7b, -0x4e264dff, -0x4dc34e2e, -0x4da24ec2, -0x4d874dca, -0x4e184da3, -0x4e504dd7, -0x4e924d98, -0x4e144e26, -0x4e334d10, -0x4db04e59, -0x4da14e95, -0x4df64d9b, -0x4deb4d2d, -0x4d764e1b, -0x4df74da5, -0x4ea54dd6, -0x4e654d40, -0x4e044d83, -0x4e6e4df1, -0x4ee24e48, -0x4da74e35, -0x4dd44da9, -0x4db54e79, -0x4dc84e37, -0x4e174d68, -0x4d824e90, -0x4dfe4dec, -0x4d854d30, -0x4d6d4e2a, -0x4e644de9, -0x4e1c4da7, -0x4e024e59, -0x4d964e09, -0x4e014df9, -0x4e854e8b, -0x4e7a4ed5, -0x4eed4e85, -0x4f1c4e77, -0x4eb94e7f, -0x4e454f54, -0x4e354eaa, -0x4e414ec6, -0x4ec84d94, -0x4e374e7b, -0x4df24e55, -0x4e534e9f, -0x4e484ef9, -0x4ee74ebc, -0x4e744eb1, -0x4ddc4ea0, -0x4e524e90, -0x4de64e1c, -0x4e244dbe, -0x4e124e5c, -0x4ebd4dc0, -0x4f144e07, -0x4e154e16, -0x4e164f3c, -0x4e404f0c, -0x4e9d4d4d, -0x4dbc4dff, -0x4e0d4e61, -0x4e524e13, -0x4f064e85, -0x4e794e05, -0x4dcf4d69, -0x4e6b4ed8, -0x4f034e76, -0x4e664e57, -0x4e8f4edb, -0x4e3c4e75, -0x4e9f4e88, -0x4e354e6d, -0x4e304ef2, -0x4e684e50, -0x4e6b4df4, -0x4da24e3d, -0x4ed74e5d, -0x4ec04e33, -0x4eb74f16, -0x4e3a4e7a, -0x4dff4db5, -0x4e034e06, -0x4e3e4e6e, -0x4edb4e52, -0x4f154e09, -0x4e9c4e4b, -0x4d9e4f54, -0x4e424dbe, -0x4e1e4e0c, -0x4e414dd6, -0x4d7b4e17, -0x4deb4de5, -0x4e404df3, -0x4e024e41, -0x4f234e89, -0x4e534e46, -0x4e274e20, -0x4df94ee9, -0x4e384e15, -0x4e144df4, -0x4e014e1a, -0x4ebc4db3, -0x4e774d8c, -0x4dbd4d53, -0x4dde4ed1, -0x4dd44eb1, -0x4e084db1, -0x4da64d6e, -0x4d664e43, -0x4e1d4dbe, -0x4f3f4e10, -0x4e1f4d2a, -0x4dca4da6, -0x4e594e6b, -0x4f214e81, -0x4e234dfd, -0x4e484e33, -0x4e084eb9, -0x4e5c4dd9, -0x4e6e4df8, -0x4dca4e16, -0x4e5c4e50, -0x4e324d71, -0x4d644e43, -0x4ee34dfe, -0x4e664d83, -0x4eeb4e3d, -0x4ddf4e28, -0x4e494e3e, -0x4e3f4ee3, -0x4eac4ef6, -0x4f544ea8, -0x4fdf4ea4, -0x4eb44e91, -0x4e754f8a, -0x4e8e4e81, -0x4e2f4f45, -0x4edd4e26, -0x4e5b4ed4, -0x4de74e64, -0x4e8b4e6b, -0x4e3b4f22, -0x4f344e8e, -0x4edd4ed1, -0x4e274eaf, -0x4e734ef4, -0x4e3b4ea4, -0x4e2d4da0, -0x4e814e7c, -0x4f314e2e, -0x4f484e48, -0x4e7c4e39, -0x4df34f0f, -0x4e194f12, -0x4e4f4dcb, -0x4dea4e16, -0x4e0b4eb6, -0x4ea14e3c, -0x4f804e48, -0x4ed84dd3, -0x4e474e21, -0x4f094f42, -0x4ef04eec, -0x4ec34e6e, -0x4e994ed3, -0x4e244ee3, -0x4eb24ebc, -0x4e8a4e78, -0x4e894f01, -0x4ed74e67, -0x4e374e1d, -0x4e034e9f, -0x4f024e95, -0x4efe4df4, -0x4ee14f55, -0x4e4f4eb7, -0x4dde4d92, -0x4d5d4e21, -0x4e154e90, -0x4ea34e89, -0x4f4c4deb, -0x4e704ec4, -0x4e2f4eda, -0x4e194e38, -0x4e554ecf, -0x4e204dbc, -0x4de44e52, -0x4e1e4de0, -0x4e724db4, -0x4dd54e1b, -0x4ea34e30, -0x4ea34e57, -0x4e314e27, -0x4dd04ede, -0x4e004df6, -0x4e1c4dca, -0x4e2b4e49, -0x4eb64ddc, -0x4ed84e62, -0x4e494d69, -0x4de94eb5, -0x4df24eeb, -0x4e794d4c, -0x4e244dba, -0x4dd04e5b, -0x4e3e4e06, -0x4f2c4e41, -0x4e7a4dbb, -0x4d9f4dff, -0x4e514e54, -0x4f004e3a, -0x4e3d4e88, -0x4e474eaa, -0x4e574eb3, -0x4e264e32, -0x4efc4e80, -0x4e0b4f49, -0x4e9b4dfb, -0x4e314d69, -0x4d4e4deb, -0x4e9a4de8, -0x4e744e12, -0x4e944e6a, -0x4de34e34, -0x4e394de1, -0x4de24e47, -0x4e024e53, -0x4ec54e7e, -0x4f334e01, -0x4dfc4e30, -0x4e5c4f1f, -0x4e304e28, -0x4e234ea0, -0x4e194dd5, -0x4dc94e43, -0x4dd04e8f, -0x4e3e4e3e, -0x4dd44e9a, -0x4f064e31, -0x4e214e76, -0x4e1f4e7f, -0x4e0c4eb7, -0x4dc84dde, -0x4dfe4de7, -0x4e2b4e10, -0x4edf4ded, -0x4e724e37, -0x4e3a4dec, -0x4ddf4ebb, -0x4dbe4ec0, -0x4e874d1e, -0x4e0b4dc6, -0x4de74e5a, -0x4e964dcd, -0x4eda4e66, -0x4e4a4d77, -0x4df54da4, -0x4e4c4e8d, -0x4ede4e68, -0x4dd14e5d, -0x4e2d4e06, -0x4e464e0c, -0x4e154e5e, -0x4e6c4de8, -0x4daa4e54, -0x4ed04df4, -0x4e1a4d80, -0x4dcb4df9, -0x4e1c4dee, -0x4e5c4e17, -0x4e334e8c, -0x4e274dd3, -0x4dbb4d34, -0x4d474e7d, -0x4d0b4dfd, -0x4e684ddc, -0x4ecd4dc6, -0x4d7d4d9c, -0x4d694ee0, -0x4dca4ded, -0x4dcd4e3c, -0x4dbf4d5e, -0x4db04e4c, -0x4d974db2, -0x4d9f4da9, -0x4d2a4e43, -0x4e3d4dab, -0x4dd44e06, -0x4d794daa, -0x4de14de6, -0x4d624e01, -0x4dc74d05, -0x4db44ea2, -0x4e6e4d8b, -0x4e744ddd, -0x4d9a4d00, -0x4ddc4e77, -0x4dd14e8b, -0x4e3f4ccc, -0x4e154d93, -0x4de64e91, -0x4e2d4d2c, -0x4ea14e02, -0x4e3f4daf, -0x4db94d8b, -0x4e0e4dde, -0x4e504de3, -0x4d894e05, -0x4e134e03, -0x4d9c4e4e, -0x4e2d4df4, -0x4e004df6, -0x4ddd4df1, -0x4e684d7e, -0x4e074d6c, -0x4d0b4dca, -0x4dde4dba, -0x4db64e18, -0x4e2b4dc8, -0x4d964dfa, -0x4dc74d85, -0x4dc74e03, -0x4dce4ddd, -0x4f1b4e82, -0x4f6b4e5b, -0x4e3e4ec1, -0x4e4a4f42, -0x4e3c4e5e, -0x4e434e55, -0x4e0d4dbe, -0x4d9f4e30, -0x4df54e29, -0x4e494e4f, -0x4dc14e01, -0x4e7f4e7c, -0x4e1b4e9d, -0x4e554e00, -0x4e254e85, -0x4da94e0b, -0x4e0e4da2, -0x4e9b4e49, -0x4e7f4ded, -0x4ea54df3, -0x4dd64d68, -0x4db54ec1, -0x4e114ed0, -0x4e0c4d68, -0x4e5f4e37, -0x4d984e8a, -0x4e344e15, -0x4ef14e33, -0x4e904dc1, -0x4dfb4dd5, -0x4eb34e50, -0x4f414ebf, -0x4e124e9b, -0x4df54e83, -0x4e2f4e9e, -0x4dfd4e5c, -0x4ea94e64, -0x4e314ec7, -0x4eb64e1b, -0x4e684ddc, -0x4d964e72, -0x4e934e27, -0x4e704dd6, -0x4e374e8a, -0x4e0e4e0b, -0x4db04e2a, -0x4d724e2a, -0x4e194dbf, -0x4ea84e05, -0x4eed4dfa, -0x4e064e02, -0x4de14e93, -0x4da84e4e, -0x4d5d4e27, -0x4e0c4dc5, -0x4e0a4e4f, -0x4da04dc2, -0x4ddf4db7, -0x4dc64e72, -0x4e414e8d, -0x4e354e66, -0x4e214dc7, -0x4df34e2d, -0x4d7e4df3, -0x4e2e4da9, -0x4ded4e07, -0x4e6c4d9d, -0x4ec24e27, -0x4e014d98, -0x4d6e4e73, -0x4d9e4ed1, -0x4de84d36, -0x4e1c4da2, -0x4de24dcb, -0x4e314d8c, -0x4eee4e44, -0x4dd44d69, -0x4de54d7e, -0x4e4f4e35, -0x4e9c4e55, -0x4da44e58, -0x4dd24e09, -0x4dec4e27, -0x4e284e42, -0x4e664e50, -0x4e514e37, -0x4ebe4dd0, -0x4e194d62, -0x4d5a4e4e, -0x4e5d4e12, -0x4e4c4ddc, -0x4e444e8f, -0x4dbe4e84, -0x4dfd4d61, -0x4ddc4ded, -0x4d9c4e50, -0x4e904e71, -0x4f8b4e16, -0x4e684e5d, -0x4e084f60, -0x4e274e2a, -0x4e214f17, -0x4e1d4d68, -0x4de64dea, -0x4d884dd9, -0x4e434e27, -0x4da54e60, -0x4f234e57, -0x4e5f4e7d, -0x4dfe4e69, -0x4d9b4ebf, -0x4de44e4f, -0x4dfa4d8e, -0x4e224e03, -0x4e904df2, -0x4e724e18, -0x4dfe4cf7, -0x4dfa4e7e, -0x4dd44e98, -0x4e424d98, -0x4e024de0, -0x4dcb4ec0, -0x4e5a4d4f, -0x4f154df3, -0x4e514d77, -0x4e024da6, -0x4e2d4de0, -0x4e884ea4, -0x4df14dec, -0x4e5a4e0a, -0x4e024e9c, -0x4e2c4df8, -0x4e9a4e4a, -0x4d924e7b, -0x4e884e1c, -0x4e524ddb, -0x4d6c4e18, -0x4eb14dde, -0x4e2d4dc8, -0x4df04e24, -0x4e1e4dea, -0x4da34daf, -0x4dec4e3a, -0x4d934e70, -0x4e834e3a, -0x4efd4df9, -0x4e514e07, -0x4dde4f5d, -0x4dfc4e0b, -0x4ddc4e45, -0x4dc94d75, -0x4d8d4df3, -0x4da44de0, -0x4e7a4e37, -0x4dc84e46, -0x4ebd4e2e, -0x4e674e27, -0x4e2f4e3e, -0x4d984e5f, -0x4d6e4e5f, -0x4dc74da8, -0x4e314dd5, -0x4e894ddb, -0x4e734de0, -0x4dd94d87, -0x4dae4ea2, -0x4dc94e92, -0x4df14d4f, -0x4df14e02, -0x4de04e69, -0x4e394d7f, -0x4e994dc3, -0x4e694d2f, -0x4d5a4d99, -0x4e3b4e3d, -0x4eac4e74, -0x4e434e2d, -0x4e364e44, -0x4dc24e2d, -0x4e3a4e43, -0x4de64e22, -0x4d644e76, -0x4e7c4e25, -0x4e514dc2, -0x4d574daa, -0x4e554e4f, -0x4df24db5, -0x4e424e66, -0x4e304e18, -0x4e524df6, -0x4da74e8b, -0x4e274e2b, -0x4f5e4e8a, -0x4fd04e20, -0x4ed14e78, -0x4e3b4ef4, -0x4e7c4e31, -0x4de84ec6, -0x4e9b4e00, -0x4df64e95, -0x4e584e8f, -0x4e7a4e3b, -0x4e094ea5, -0x4f194ea0, -0x4e854e5c, -0x4e714e5f, -0x4e664e94, -0x4dfd4e34, -0x4e1d4ddc, -0x4e644e27, -0x4eb24e43, -0x4f304e7d, -0x4e054e1a, -0x4dde4f21, -0x4e6f4f53, -0x4e5e4e0a, -0x4e504dd2, -0x4e054ee9, -0x4e4b4dab, -0x4f2d4eb3, -0x4ec84e0a, -0x4e3f4dbf, -0x4ec04eca, -0x4f2c4ed5, -0x4e3d4e9c, -0x4e314ebc, -0x4e334e9c, -0x4e9c4e4e, -0x4edc4e15, -0x4e684ee4, -0x4ef64dd4, -0x4e524de9, -0x4d9b4ebb, -0x4f284e7b, -0x4e9c4e7d, -0x4e804e77, -0x4e174e9f, -0x4e534e60, -0x4e284e8b, -0x4e474e69, -0x4f884e69, -0x4f2c4dfc, -0x4e754e91, -0x4ecc4f10, -0x4dfa4deb, -0x4e374e6d, -0x4e5c4e21, -0x4dc54ebd, -0x4e474e7f, -0x4e614e82, -0x4df04ea7, -0x4f354eb8, -0x4ea14eac, -0x4e154f06, -0x4df54ea4, -0x4de84e63, -0x4e0d4dd8, -0x4e7f4e25, -0x4e904e50, -0x4ecd4e3d, -0x4e6c4dad, -0x4dd84f1a, -0x4e404f33, -0x4e3e4dfb, -0x4e5f4db5, -0x4e344eeb, -0x4e804dda, -0x4ed44ecc, -0x4e124db3, -0x4e524d87, -0x4ed64e2f, -0x4f174e9c, -0x4e124e5e, -0x4e314e48, -0x4e644e88, -0x4e234e44, -0x4ea34e16, -0x4e0a4e98, -0x4ebc4de2, -0x4e224dfc, -0x4dd54e5b, -0x4ea44e85, -0x4e4f4e42, -0x4e2d4ea1, -0x4d7d4e44, -0x4dad4db5, -0x4d314e2a, -0x4dbc4e06, -0x4e784e4e, -0x4ea34d7e, -0x4db84dc2, -0x4daa4ec4, -0x4de24e42, -0x4dac4e01, -0x4e004dbc, -0x4d714da6, -0x4dd24e01, -0x4db64d92, -0x4d544ec5, -0x4e3f4e7b, -0x4dfc4e0b, -0x4d6c4e05, -0x4d904e96, -0x4d2d4dae, -0x4dc94d7c, -0x4dcc4d91, -0x4e484dab, -0x4e264df2, -0x4dd14da6, -0x4dc34e7d, -0x4e044eab, -0x4dcb4d1f, -0x4da94db2, -0x4d8c4dd1, -0x4df24d8d, -0x4ef94e1c, -0x4e0a4d3c, -0x4d8f4d23, -0x4e274e02, -0x4ea24e29, -0x4dc64e10, -0x4db24de3, -0x4df74e61, -0x4e254df5, -0x4e464de6, -0x4dc84e0f, -0x4e3c4d8f, -0x4ddd4d4e, -0x4cfa4df1, -0x4e724e06, -0x4dda4de3, -0x4e244df9, -0x4d7f4da8, -0x4d954d8f, -0x4dbc4e5a, -0x4daf4ded, -0x4eea4e1c, -0x4ee94db3, -0x4dd24e7d, -0x4df64e60, -0x4e2d4dfd, -0x4df04e5d, -0x4dde4db2, -0x4d4e4de1, -0x4db64dd9, -0x4dcd4de8, -0x4d634dff, -0x4e754dee, -0x4dfd4e5d, -0x4d884e30, -0x4dc44e6f, -0x4d904d8b, -0x4dc24d4e, -0x4e3e4e07, -0x4e794d82, -0x4de04da7, -0x4d8a4d1a, -0x4da74e91, -0x4dcc4e5c, -0x4df74d9d, -0x4dee4d69, -0x4da34e05, -0x4e2d4d41, -0x4ec44e13, -0x4e414cf6, -0x4dad4dc4, -0x4e744d96, -0x4e4b4e66, -0x4da14df8, -0x4ddd4dbe, -0x4d814e12, -0x4dba4da9, -0x4dfb4df4, -0x4dbb4e53, -0x4e134d79, -0x4dfc4d93, -0x4d6e4da8, -0x4dee4ddb, -0x4e714db2, -0x4e154e06, -0x4e104dad, -0x4d9a4dbe, -0x4d824e47, -0x4e0e4e18, -0x4ebd4e70, -0x4eee4e2f, -0x4e164e47, -0x4dee4ed6, -0x4e644e5a, -0x4dfa4e99, -0x4e824dd7, -0x4dd04e32, -0x4e314e4a, -0x4dab4db7, -0x4df74e6f, -0x4ea54e5e, -0x4e3d4e2f, -0x4dee4e1b, -0x4df64e6e, -0x4d944e07, -0x4d9d4d52, -0x4dc14d9a, -0x4e8a4d68, -0x4ed04de5, -0x4e0e4dbc, -0x4df14e82, -0x4deb4eda, -0x4e034d7d, -0x4d9c4d79, -0x4df04e18, -0x4e044dc0, -0x4f3c4e3c, -0x4e534dcf, -0x4dad4d88, -0x4e304e2e, -0x4ea54e7a, -0x4df94dca, -0x4e054e4a, -0x4dca4e9c, -0x4e1c4e18, -0x4e3a4e4d, -0x4dd74ed8, -0x4e564dd2, -0x4e5c4da1, -0x4d664dec, -0x4e624e07, -0x4e5e4e15, -0x4e1d4e30, -0x4e0e4e47, -0x4e014dec, -0x4dfa4e70, -0x4db44e67, -0x4f894e83, -0x4f764e1b, -0x4e2b4e4b, -0x4e794f33, -0x4e1d4e5f, -0x4df14e90, -0x4e534df9, -0x4d954deb, -0x4d814e23, -0x4e1e4e0a, -0x4df04efc, -0x4ee74e8d, -0x4ecb4e99, -0x4e414e37, -0x4e284ece, -0x4dba4deb, -0x4e1d4dd7, -0x4e1e4e40, -0x4eab4e08, -0x4e9e4e61, -0x4e324db5, -0x4df44ed9, -0x4e584f2d, -0x4dd94d91, -0x4e324dd4, -0x4db84e5e, -0x4e4d4dfb, -0x4f3e4e87, -0x4ea34dcc, -0x4e3b4d85, -0x4e954e3a, -0x4efa4ea9, -0x4e564f03, -0x4e594e70, -0x4e7b4e85, -0x4e5e4e0a, -0x4e614e33, -0x4e244edb, -0x4e4e4e24, -0x4e354ddc, -0x4dc24e52, -0x4ecb4e58, -0x4e934dea, -0x4e7a4e7a, -0x4e244e24, -0x4e764e1a, -0x4dcb4e5f, -0x4e374e4c, -0x4ec94ed6, -0x4f1e4de4, -0x4e224e8e, -0x4e5e4eef, -0x4e5b4e26, -0x4e7a4ed3, -0x4e764dbf, -0x4de04e06, -0x4de54e59, -0x4e1f4e66, -0x4dd84e76, -0x4ef84e8d, -0x4e454ed3, -0x4e3d4e84, -0x4df14ef2, -0x4e094df6, -0x4e224d77, -0x4e8a4dc6, -0x4e8f4dcd, -0x4eef4e57, -0x4e404dbc, -0x4deb4f00, -0x4e334e93, -0x4e1a4d66, -0x4dee4dc6, -0x4dd84e42, -0x4e834e23, -0x4ee34e0b, -0x4e634da3, -0x4e1a4dbf, -0x4e8f4e7a, -0x4eed4ede, -0x4e5a4e27, -0x4e2f4e42, -0x4e1d4ea2, -0x4e7e4e16, -0x4e644eab, -0x4dc24ec7, -0x4eca4d9a, -0x4e224e4a, -0x4dd14e54, -0x4e814e67, -0x4e324de7, -0x4e704f41, -0x4ddc4e0d, -0x4deb4da1, -0x4d794e14, -0x4db94e1c, -0x4e734e1a, -0x4ee54dd2, -0x4dbd4dd8, -0x4dd34e94, -0x4e2d4da2, -0x4dda4e62, -0x4e2d4d75, -0x4d3e4e01, -0x4ddb4ddf, -0x4d914e1e, -0x4da94e09, -0x4e7a4e74, -0x4dd44dba, -0x4da44e30, -0x4d814e3e, -0x4d954d95, -0x4e304d81, -0x4e354e23, -0x4e344dbd, -0x4e894e0a, -0x4df74d2f, -0x4dbe4e72, -0x4e284ef1, -0x4dd94d7e, -0x4dd54dc9, -0x4de84e30, -0x4e004da4, -0x4e664e0a, -0x4e044d32, -0x4db94d5e, -0x4e3e4e11, -0x4e6c4de4, -0x4e104e38, -0x4df44db9, -0x4dec4e63, -0x4dd54deb, -0x4e284e2c, -0x4d864e22, -0x4e3e4dd8, -0x4e7e4d27, -0x4cf54dc5, -0x4e4e4e04, -0x4df24e1c, -0x4de04e10, -0x4d534d6b, -0x4e374de7, -0x4e274e87, -0x4e074e9b, -0x4f9e4e87, -0x4faf4e14, -0x4f044edd, -0x4e284f20, -0x4e6d4d9f, -0x4df24f14, -0x4e744e1b, -0x4d6f4e77, -0x4dff4e33, -0x4e754e7c, -0x4e2c4e6e, -0x4f3a4e68, -0x4e8f4ec2, -0x4e354eda, -0x4e424f59, -0x4dfe4e34, -0x4e5b4e42, -0x4e914e3a, -0x4e714e20, -0x4eba4eec, -0x4e1f4e03, -0x4dd84eac, -0x4ead4f57, -0x4de54de8, -0x4e964e17, -0x4db74e7c, -0x4e474ddb, -0x4f174e6a, -0x4e984d7d, -0x4e324e04, -0x4ecf4e82, -0x4f054ed7, -0x4ec64e77, -0x4e3f4ee5, -0x4e834e8f, -0x4e0e4dcd, -0x4e584e9d, -0x4df34eea, -0x4ecb4de0, -0x4e8a4e06, -0x4d674e68, -0x4eef4e5a, -0x4e8b4e05, -0x4e464eff, -0x4dd74e60, -0x4dee4dcc, -0x4db44e78, -0x4db14e61, -0x4edd4e3e, -0x4ede4db1, -0x4e5a4d68, -0x4dd24efb, -0x4e284dfe, -0x4e164ec4, -0x4e554d85, -0x4dc44dff, -0x4dc94e27, -0x4dd24dc7, -0x4d944e79, -0x4e8b4e4e, -0x4e524e6a, -0x4e084dfc, -0x4dff4e1e, -0x4d7b4daf, -0x4da54d51, -0x4e254deb, -0x4e7a4e00, -0x4ea64de4, -0x4ddc4d64, -0x4ddb4ea0, -0x4dfa4e73, -0x4e174d1b, -0x4de84d78, -0x4dc44eb9, -0x4e2e4dc0, -0x4eb64e61, -0x4e6a4dac, -0x4dd04d86, -0x4e204e92, -0x4e5f4e2b, -0x4e2d4df0, -0x4dd74e1b, -0x4e1f4e1d, -0x4e6e4e45, -0x4de84dc8, -0x4dea4e5f, -0x4e5e4dd3, -0x4dee4dda, -0x4d7d4dac, -0x4e3c4e39, -0x4e6e4e22, -0x4e454e77, -0x4dd34e0b, -0x4e334e35, -0x4de74e9c, -0x4e544e4c, -0x4f2a4eeb, -0x4f674e39, -0x4e614e9e, -0x4e504f2b, -0x4eab4e45, -0x4e4f4f08, -0x4e7a4e01, -0x4df94e73, -0x4dd94e88, -0x4e6d4ea5, -0x4dcf4ef7, -0x4f584f2f, -0x4eca4ef7, -0x4e824e71, -0x4e734f22, -0x4e094e35, -0x4e4a4de6, -0x4e584e4c, -0x4f1c4e07, -0x4f1d4ea0, -0x4e884de4, -0x4e274ec8, -0x4df94f13, -0x4e554dc0, -0x4e3b4da9, -0x4df24eb5, -0x4ea04e28, -0x4f564e45, -0x4ebe4dfe, -0x4e2b4db8, -0x4ebc4ea1, -0x4f164ec6, -0x4e5a4e85, -0x4e674e8c, -0x4e114efc, -0x4e7c4e3e, -0x4e664e7b, -0x4df34ecf, -0x4e974e39, -0x4eb34dd1, -0x4e054e47, -0x4eb74e7d, -0x4eca4e7b, -0x4ea04f2b, -0x4e514e2b, -0x4dbf4db9, -0x4db64e60, -0x4da94ec2, -0x4eb24e40, -0x4ee84dd0, -0x4e3d4df1, -0x4e3a4eef, -0x4dfe4e4c, -0x4e524e5e, -0x4e284df0, -0x4de54e65, -0x4d6d4e47, -0x4dd14e02, -0x4dde4e7c, -0x4e874e2f, -0x4e584e9e, -0x4e914e0a, -0x4e054e0c, -0x4d894e1d, -0x4da94d53, -0x4e714e6b, -0x4e8a4df8, -0x4ed84dcd, -0x4e1d4d7f, -0x4d974e77, -0x4d6f4ea3, -0x4e0f4d9d, -0x4e2b4dcb, -0x4dbd4e8e, -0x4e284d96, -0x4f0c4e09, -0x4e534d95, -0x4e324d66, -0x4dfb4e1c, -0x4e914e2a, -0x4dd04ed8, -0x4e1e4e94, -0x4e4a4dd3, -0x4e564dcd, -0x4e7e4e2f, -0x4dd24e22, -0x4e9a4e42, -0x4e3c4ddc, -0x4d974e8a, -0x4e7e4e00, -0x4e5c4d80, -0x4e5e4eba, -0x4e024e47, -0x4c814c99, -0x4cb24d53, -0x4ca44d3f, -0x4dab4d31, -0x4dae4d46, -0x4d3d4ce7, -0x4d004da8, -0x4d0d4d6a, -0x4d0c4d75, -0x4cf54cc1, -0x4cc44d2e, -0x4cac4ccf, -0x4cfa4cfc, -0x4ccd4d7f, -0x4d624d41, -0x4d2f4d43, -0x4cfc4cf8, -0x4d004db4, -0x4cad4cfa, -0x4cf74cf2, -0x4cf24d04, -0x4d564caf, -0x4d5b4cda, -0x4d374cef, -0x4cca4d81, -0x4ca34ddd, -0x4d2d4c50, -0x4cf74c81, -0x4ce24d46, -0x4d384ce5, -0x4de84cf5, -0x4d4f4c6a, -0x4cc34c86, -0x4d5b4d31, -0x4d824d55, -0x4cc04d74, -0x4d274d08, -0x4cd94d0a, -0x4d384cf2, -0x4d294c9b, -0x4d1a4d67, -0x4d1d4d25, -0x4cd04cdd, -0x4c6d4ced, -0x4d724d0d, -0x4d944d3f, -0x4d2d4d5a, -0x4cb84d00, +uint32_t golden [384] = { +0x48974845, +0x48384608, +0x487b4855, +0x48804869, +0x48b046d1, +0x483f48db, +0x485f48c9, +0x483a4881, +0x472c484b, +0x492b4762, +0x48fd4822, +0x492e488e, +0x484f483e, +0x46d749e8, +0x489d484b, +0x47e9490b, +0x47d2484f, +0x474744be, +0x46c047c7, +0x48af4727, +0x482d46c5, +0x482e483d, +0x479f4897, +0x4749488b, +0x46a8489a, +0x488b46f2, +0x47e84891, +0x483d4872, +0x46fd4716, +0x46a049b5, +0x47a446e7, +0x476748a1, +0x49354939, +0x48c14703, +0x48bd4863, +0x48cf4913, +0x48b848b6, +0x49204946, +0x48e1495e, +0x48b24938, +0x4882493a, +0x49d5483b, +0x49724911, +0x49df496b, +0x488848f2, +0x48214a46, +0x490c48c1, +0x48a349b2, +0x47b0463a, +0x476244cb, +0x46b94765, +0x4814466a, +0x47964631, +0x474b4666, +0x47044798, +0x47614838, +0x459047d3, +0x48a245ea, +0x484447f1, +0x4776484b, +0x46d847d6, +0x44d348f3, +0x478d46fa, +0x466e481e, +0x481e4827, +0x479445a2, +0x48064727, +0x48d5475d, +0x48284708, +0x480d4862, +0x48324895, +0x47f148bd, +0x46a7482a, +0x492d47b1, +0x4884484d, +0x485f48dc, +0x480c476d, +0x46d348e9, +0x48844728, +0x480e48a0, +0x48134862, +0x485a4675, +0x473847e8, +0x48234836, +0x482146e7, +0x47b34822, +0x48554846, +0x47174863, +0x47c14872, +0x488e46d5, +0x485f47e2, +0x48b8487c, +0x4788481e, +0x467748bd, +0x47f846c9, +0x47fc48fe, +0x47b247a0, +0x467e4588, +0x46c74662, +0x481246e8, +0x474e4536, +0x468f46c0, +0x4679481f, +0x46e246a1, +0x45604809, +0x47eb4630, +0x475746b5, +0x477f4848, +0x46d846a6, +0x459a4870, +0x46784670, +0x468c47d2, +0x48c44762, +0x479146e3, +0x486d46b1, +0x486747d0, +0x47f6468d, +0x475648a5, +0x48544857, +0x48384866, +0x46ec484d, +0x48f647d2, +0x4879484a, +0x483c4848, +0x4806471d, +0x473048fa, +0x47b84768, +0x46f94865, +0x491848a8, +0x486746ca, +0x48624800, +0x491048d3, +0x4849474e, +0x486b48eb, +0x48c54966, +0x483048f4, +0x477848f9, +0x499e481e, +0x48f148cf, +0x49234982, +0x47cf487c, +0x464949ea, +0x495e4773, +0x483f48b2, +0x497548a7, +0x481e4616, +0x4866481f, +0x486448b6, +0x487347dc, +0x487f485c, +0x491f4938, +0x48b6490d, +0x48a148f8, +0x492d4859, +0x4915489c, +0x48874899, +0x4859486c, +0x471e49ca, +0x49184867, +0x482748d3, +0x4998488b, +0x481d4704, +0x488048b8, +0x49444876, +0x48f2470c, +0x489b48b9, +0x48e54956, +0x48a548d6, +0x485648dc, +0x49ab484e, +0x490e48e0, +0x494548dd, +0x48dd488b, +0x47ea4a32, +0x49114835, +0x48194965, +0x481e460e, +0x4673452c, +0x4717475c, +0x46d046f6, +0x46bc4696, +0x481e4726, +0x46ea4763, +0x475846fe, +0x4627478b, +0x483f4704, +0x47b146ad, +0x48164792, +0x468446f2, +0x45a84827, +0x47a4472f, +0x462b4797, +0x48ab483f, +0x4863468f, +0x4766485a, +0x48cb481d, +0x490347dc, +0x483048fc, +0x483e48cc, +0x486448ab, +0x47634966, +0x499d4794, +0x488b488e, +0x496048dc, +0x484c4854, +0x474c499c, +0x48bc4826, +0x48834949, +0x4905489d, +0x481e4718, +0x48f448e3, +0x490448c1, +0x48b347e8, +0x48d44892, +0x489448ff, +0x488648d5, +0x480348fa, +0x492e47d2, +0x48b24870, +0x492b48e5, +0x4785487b, +0x471d49e3, +0x48bf4837, +0x48c4489b, +0x4871475c, +0x4811464a, +0x471c47af, +0x48174817, +0x484e463b, +0x464f477f, +0x487c4704, +0x472547a3, +0x462a4853, +0x4860465a, +0x48804736, +0x482b47e1, +0x46c04811, +0x475d48dc, +0x48064668, +0x46f44893, +0x49594858, +0x487b463d, +0x484e480f, +0x48a648c0, +0x48944847, +0x484a48a0, +0x48f4491e, +0x48b548fc, +0x47d248ce, +0x497f47db, +0x49394955, +0x48ce48a7, +0x48844890, +0x476349d6, +0x4922486e, +0x48c348f4, +0x491c47ec, +0x47834698, +0x47544715, +0x47524745, +0x4832472f, +0x48094817, +0x48c347f8, +0x480047e6, +0x473048b6, +0x48cb480a, +0x488e479e, +0x488e47c2, +0x47ee472f, +0x4744489d, +0x48514755, +0x47d34846, +0x48a04838, +0x47624634, +0x48064786, +0x482d47e3, +0x486c4726, +0x480347b7, +0x481448ac, +0x483948e0, +0x47504827, +0x48c546f2, +0x4886483f, +0x485648ad, +0x47a947e8, +0x47434937, +0x481f46d0, +0x4804484c, +0x481f47fd, +0x4813456d, +0x4807474d, +0x480e4688, +0x481046e8, +0x4799469f, +0x478f4853, +0x482447f2, +0x471f47d0, +0x485f46da, +0x481c4813, +0x4863482e, +0x480b4786, +0x46b848c9, +0x46e2475a, +0x46c54852, +0x480245af, +0x46c24466, +0x4743465d, +0x47ba46b7, +0x46c34636, +0x47844677, +0x47c2485a, +0x46ac46dc, +0x460e47de, +0x4834465f, +0x476947f4, +0x481046fc, +0x45ea45fd, +0x45b548d0, +0x47834704, +0x46c44830, +0x47c74759, +0x45b0453d, +0x47024741, +0x47934736, +0x47ba461b, +0x46dd470b, +0x470b4657, +0x4710470d, +0x468f486c, +0x46ba45c3, +0x483b479d, +0x477446c9, +0x46a746a9, +0x46064833, +0x46a94690, +0x46a746f5, +0x48bb47ac, +0x4803452c, +0x4824470f, +0x48cb47d5, +0x484a4707, +0x47974832, +0x482c4851, +0x4877487a, +0x465d4891, +0x48ce47f4, +0x48994898, +0x486a484e, +0x47f047ac, +0x4611493e, +0x489e47e2, +0x46af488c, +0x48364665, +0x46b645e4, +0x46b946a1, +0x46dd46c8, +0x474b4658, +0x4777467b, +0x47984769, +0x475e4785, +0x4656472a, +0x488145fb, +0x472d46fc, +0x47a3476e, +0x46ca465d, +0x45004855, +0x479a464f, +0x473846c3, +0x486c481e, +0x48014659, +0x477a4756, +0x487b47d5, +0x48084706, +0x4838484f, +0x48634870, +0x480648d3, +0x47714865, +0x494c46be, +0x484c4915, +0x48624900, +0x46e8481a, +0x46a04974, +0x483d4775, +0x480e487c, }; \ No newline at end of file diff --git a/hwpe/redmule/inc/tensor_dim.h b/hwpe/redmule/inc/tensor_dim.h index 284125f..21bd0d8 100644 --- a/hwpe/redmule/inc/tensor_dim.h +++ b/hwpe/redmule/inc/tensor_dim.h @@ -2,9 +2,9 @@ #ifndef __TENSOR_DIM__ #define __TENSOR_DIM__ -#define M_SIZE 96 -#define N_SIZE 96 -#define K_SIZE 96 +#define M_SIZE 24 +#define N_SIZE 32 +#define K_SIZE 32 #define SRC_FMT FP16 #define DST_FMT FP16 #define FPFORMAT 16 diff --git a/hwpe/redmule/inc/w_2D.h b/hwpe/redmule/inc/w_2D.h index 74b1a11..9409c64 100644 --- a/hwpe/redmule/inc/w_2D.h +++ b/hwpe/redmule/inc/w_2D.h @@ -1,99 +1,35 @@ /* Header file generated by RedMulE Golden Model */ -uint16_t w_inp_2D [96][96] = { -0x2d1a, 0x2f9c, 0x3596, 0x38eb, 0x3a5c, 0x3827, 0x3b07, 0x397a, 0x347f, 0x3703, 0x2e26, 0x305c, 0x3ba2, 0x39cd, 0x36fa, 0x3899, 0x38dc, 0x3a60, 0x345b, 0x2d80, 0x36ad, 0x2eb8, 0x34ca, 0x384a, 0x33ef, 0x353e, 0x370e, 0x38f6, 0x3947, 0x387c, 0x3893, 0x38fd, 0x39a9, 0x29fb, 0x39ec, 0x3232, 0x35f8, 0x320c, 0x3b5c, 0x34b6, 0x39e6, 0x2b02, 0x340d, 0x30cc, 0x3b7d, 0x3298, 0x381a, 0x3aa8, 0x3b2b, 0x3605, 0x389e, 0x3a3a, 0x2f2c, 0x3ae4, 0x2cc3, 0x2e6b, 0x3850, 0x3a94, 0x396f, 0x3683, 0x3983, 0x39ea, 0x349f, 0x3b95, 0x28a5, 0x3853, 0x349a, 0x30cc, 0x389b, 0x3595, 0x31f9, 0x3a85, 0x367d, 0x3bbe, 0x3bde, 0x3ae7, 0x3977, 0x3a5d, 0x2497, 0x32ed, 0x39c5, 0x3553, 0x3b87, 0x357c, 0x3868, 0x2fc2, 0x1ad7, 0x3079, 0x3b2f, 0x3570, 0x3a70, 0x3761, 0x29cd, 0x3640, 0x3885, 0x2c6e, -0x3a6c, 0x322b, 0x34e2, 0x1a14, 0x385b, 0x3bdd, 0x3b0f, 0x3548, 0x35d5, 0x3105, 0x39f6, 0x2ce7, 0x365f, 0x286d, 0x3673, 0x3517, 0x3847, 0x3905, 0x34f8, 0x3a5b, 0x2809, 0x38e8, 0x3910, 0x3bce, 0x3aa7, 0x3a98, 0x3a82, 0x318b, 0x39a1, 0x39c7, 0x3960, 0x3206, 0x3320, 0x3893, 0x2e29, 0x391a, 0x28ae, 0x3535, 0x3a37, 0x3821, 0x32de, 0x326d, 0x3196, 0x3b5f, 0x38f2, 0x3b44, 0x3680, 0x3309, 0x3bf2, 0x3bb2, 0x3874, 0x3531, 0x2c98, 0x3648, 0x2d18, 0x2af5, 0x25d7, 0x3a75, 0x38bc, 0x3a77, 0x39bb, 0x3a92, 0x397d, 0x3486, 0x35e3, 0x3917, 0x3805, 0x3001, 0x3619, 0x3952, 0x34c7, 0x3a87, 0x35de, 0x385e, 0x2590, 0x3bb1, 0x2b49, 0x3526, 0x35c5, 0x3963, 0x374e, 0x346a, 0x35d0, 0x3622, 0x2dd8, 0x3aa0, 0x3292, 0x30d8, 0x3883, 0x3ad4, 0x3a22, 0x360f, 0x3424, 0x348f, 0x3886, 0x38f3, -0x3945, 0x3792, 0x3629, 0x3b2b, 0x3bf5, 0x3a69, 0x3199, 0x3b84, 0x35c4, 0x3b13, 0x27a5, 0x3b8a, 0x393d, 0x3a14, 0x3a40, 0x35e7, 0x3a6a, 0x38ad, 0x3bb9, 0x24d8, 0x3b90, 0x3797, 0x3716, 0x384e, 0x3832, 0x3855, 0x39c3, 0x39de, 0x2684, 0x3627, 0x35f0, 0x3a86, 0x3995, 0x2abc, 0x347a, 0x2409, 0x2758, 0x3664, 0x3ae9, 0x1eb1, 0x386a, 0x33dd, 0x3413, 0x243b, 0x3b5b, 0x36fb, 0x38ab, 0x39cb, 0x38e8, 0x308c, 0x3be2, 0x30c8, 0x382c, 0x3bcc, 0x3b0f, 0x30e7, 0x31b4, 0x2adb, 0x2354, 0x2c7e, 0x3774, 0x3299, 0x3574, 0x3b35, 0x38a3, 0x3836, 0x3400, 0x3721, 0x3acb, 0x37da, 0x3688, 0x35d5, 0x3977, 0x3247, 0x2a12, 0x3b36, 0x371a, 0x3750, 0x2ad9, 0x242b, 0x306f, 0x3502, 0x3b35, 0x394d, 0x3646, 0x315d, 0x387d, 0x349f, 0x305a, 0x3a84, 0x3a3e, 0x3be3, 0x3bf9, 0x3580, 0x3b14, 0x3a13, -0x371c, 0x2da9, 0x3995, 0x38be, 0x323e, 0x328d, 0x383d, 0x3991, 0x3a57, 0x38ca, 0x3867, 0x3982, 0x34fd, 0x347c, 0x380f, 0x3074, 0x38d4, 0x34fa, 0x326a, 0x377c, 0x3a52, 0x3abd, 0x3536, 0x226f, 0x319c, 0x3321, 0x393e, 0x3467, 0x3b37, 0x3bc1, 0x3a17, 0x394d, 0x33a2, 0x395d, 0x33e4, 0x3b09, 0x3855, 0x354d, 0x2f53, 0x34e7, 0x375b, 0x35f1, 0x367f, 0x3674, 0x2e07, 0x3ba0, 0x314b, 0x3bce, 0x2c5f, 0x384d, 0x3443, 0x36b1, 0x3973, 0x38d8, 0x340d, 0x3a77, 0x2ec7, 0x3538, 0x2e0e, 0x2d39, 0x3a81, 0x3b54, 0x3bdc, 0x3461, 0x2d5f, 0x3a52, 0x390c, 0x2186, 0x3896, 0x39d5, 0x3868, 0x2171, 0x303e, 0x3b19, 0x3915, 0x3be0, 0x39cb, 0x34ce, 0x357f, 0x394b, 0x39d3, 0x3af8, 0x3855, 0x3430, 0x36d6, 0x38bd, 0x3ad5, 0x38f4, 0x252e, 0x3b49, 0x36b0, 0x32b2, 0x3610, 0x3baa, 0x398b, 0x3ac1, -0x3655, 0x2ad4, 0x38e1, 0x3a9a, 0x37b9, 0x3027, 0x3889, 0x3017, 0x3baf, 0x32b8, 0x3922, 0x3984, 0x3ac3, 0x3775, 0x37f5, 0x38f0, 0x3a37, 0x3a8a, 0x283a, 0x1b5c, 0x3998, 0x2c23, 0x380e, 0x3254, 0x3ad7, 0x39f2, 0x328e, 0x36da, 0x370d, 0x2f71, 0x3944, 0x2e44, 0x36d7, 0x362a, 0x370d, 0x38a7, 0x3b99, 0x3850, 0x3111, 0x329d, 0x3bbf, 0x353e, 0x3932, 0x3542, 0x2ab8, 0x3bf2, 0x312c, 0x3070, 0x3983, 0x3882, 0x3aa6, 0x39fd, 0x384b, 0x3a76, 0x3b1f, 0x312a, 0x183e, 0x362e, 0x347e, 0x38cf, 0x3186, 0x38eb, 0x1c0b, 0x2def, 0x33ec, 0x3b0f, 0x387e, 0x344f, 0x3b28, 0x367f, 0x3661, 0x382a, 0x28c2, 0x3980, 0x3709, 0x3875, 0x3922, 0x37fb, 0x36a9, 0x2f28, 0x36c2, 0x30c6, 0x3bcf, 0x3aba, 0x3965, 0x3397, 0x39ab, 0x3812, 0x344e, 0x39ff, 0x3866, 0x3895, 0x3ba0, 0x3a13, 0x3a1b, 0x35ef, -0x382a, 0x34ad, 0x39c7, 0x2ef8, 0x377e, 0x3915, 0x3beb, 0x3a4f, 0x35e7, 0x3465, 0x3668, 0x3404, 0x3233, 0x3361, 0x3b7e, 0x3702, 0x3b3b, 0x3834, 0x36e7, 0x3a65, 0x2ed7, 0x3965, 0x3914, 0x34c7, 0x3722, 0x3612, 0x397f, 0x2e03, 0x36b6, 0x2da9, 0x33d1, 0x350e, 0x38af, 0x1b8f, 0x360b, 0x3803, 0x38e4, 0x328a, 0x330b, 0x383c, 0x3501, 0x334b, 0x35bf, 0x395f, 0x394f, 0x359b, 0x3b66, 0x2eee, 0x350f, 0x3759, 0x3a91, 0x3b46, 0x3808, 0x3b0e, 0x38c7, 0x3846, 0x2e4b, 0x2edb, 0x382a, 0x348d, 0x1a8b, 0x3510, 0x39c3, 0x30f8, 0x3758, 0x2fc8, 0x3386, 0x3316, 0x393f, 0x3351, 0x3b46, 0x389f, 0x3312, 0x28a9, 0x34ff, 0x3a51, 0x3b00, 0x36a4, 0x3811, 0x281c, 0x3646, 0x3b42, 0x3453, 0x32ea, 0x2f6b, 0x3a64, 0x2cd4, 0x28d1, 0x3a0b, 0x3276, 0x3b1d, 0x368e, 0x340a, 0x3ac3, 0x3067, 0x3987, -0x25a7, 0x39f4, 0x3b54, 0x38d8, 0x3708, 0x3999, 0x313e, 0x316b, 0x39af, 0x2e81, 0x3667, 0x39e3, 0x3904, 0x391d, 0x383d, 0x3956, 0x36c0, 0x30d0, 0x346d, 0x39cf, 0x3236, 0x354f, 0x377f, 0x326a, 0x3800, 0x3022, 0x3b2f, 0x3b98, 0x3a97, 0x3bca, 0x3a1e, 0x3a5b, 0x337d, 0x385c, 0x2fff, 0x399e, 0x33e3, 0x355a, 0x3835, 0x3a1e, 0x38d5, 0x3791, 0x2f0d, 0x2ef4, 0x3581, 0x397a, 0x3a26, 0x391b, 0x3727, 0x3874, 0x3a25, 0x30ba, 0x2b99, 0x3a8b, 0x345b, 0x3bab, 0x3900, 0x3743, 0x3b73, 0x391a, 0x3bd2, 0x39ea, 0x3599, 0x383b, 0x34c0, 0x34b3, 0x3bf0, 0x396d, 0x3b6f, 0x36f9, 0x350e, 0x3b43, 0x39da, 0x3b16, 0x38af, 0x369c, 0x3530, 0x3a87, 0x3a68, 0x2220, 0x2d27, 0x3a49, 0x2df1, 0x353a, 0x3a08, 0x3bdb, 0x378e, 0x2942, 0x35f0, 0x3618, 0x3897, 0x3946, 0x3b7d, 0x3a44, 0x356f, 0x389f, -0x3bd0, 0x2946, 0x3aa2, 0x3711, 0x3462, 0x369c, 0x3a56, 0x3b59, 0x32ac, 0x3813, 0x2f28, 0x3c00, 0x3404, 0x34dc, 0x29ec, 0x3bf1, 0x393e, 0x3b63, 0x3513, 0x3822, 0x382b, 0x35f2, 0x3b2c, 0x3498, 0x2515, 0x31aa, 0x3a7f, 0x391d, 0x3a54, 0x34ef, 0x353a, 0x3a41, 0x334a, 0x3b6a, 0x376f, 0x3bb0, 0x3821, 0x38c2, 0x3b57, 0x333d, 0x2ba8, 0x368e, 0x3a2c, 0x345b, 0x3b9a, 0x3976, 0x3870, 0x34b5, 0x386c, 0x3916, 0x38cc, 0x32a3, 0x3bd8, 0x30bc, 0x30a7, 0x38bc, 0x3727, 0x38e7, 0x337a, 0x3b34, 0x39b7, 0x391f, 0x27fa, 0x3b3f, 0x3940, 0x3698, 0x3256, 0x3a9b, 0x39c3, 0x2e76, 0x3899, 0x3915, 0x36a4, 0x3606, 0x3bd9, 0x314f, 0x2822, 0x3bba, 0x381b, 0x3252, 0x38dd, 0x2cb9, 0x38f3, 0x385c, 0x348d, 0x3220, 0x31a8, 0x3128, 0x3aed, 0x3903, 0x3be2, 0x3971, 0x29f4, 0x3130, 0x3b11, 0x35d7, -0x3a04, 0x393c, 0x3573, 0x3870, 0x3568, 0x38f5, 0x38a4, 0x353f, 0x3b0f, 0x363a, 0x35de, 0x3241, 0x3b97, 0x2e15, 0x3a8a, 0x3823, 0x38e0, 0x3556, 0x3a96, 0x364f, 0x337a, 0x34e3, 0x342b, 0x3994, 0x3b5c, 0x3b57, 0x3a63, 0x2f0d, 0x3b7a, 0x3a08, 0x3102, 0x34ce, 0x3036, 0x3864, 0x3887, 0x280c, 0x3bb5, 0x38a1, 0x3b71, 0x3b0c, 0x3487, 0x3b6e, 0x3aec, 0x3af6, 0x1cd8, 0x3381, 0x2923, 0x3b78, 0x3597, 0x3528, 0x3afe, 0x39c2, 0x3258, 0x3898, 0x3b8c, 0x2c32, 0x38e1, 0x2f4a, 0x3948, 0x39bb, 0x39cb, 0x386b, 0x3778, 0x3847, 0x2fa6, 0x3b01, 0x3a0c, 0x3a67, 0x3b8e, 0x3959, 0x346b, 0x38ba, 0x34f8, 0x3606, 0x3940, 0x3562, 0x3be6, 0x390c, 0x2d8b, 0x3987, 0x2f30, 0x2d65, 0x36d1, 0x3b44, 0x3421, 0x37cb, 0x3a4a, 0x338e, 0x3693, 0x3699, 0x3521, 0x3aae, 0x3930, 0x391c, 0x3654, 0x3898, -0x36f8, 0x34cd, 0x2149, 0x326e, 0x36fa, 0x3179, 0x2e80, 0x3a76, 0x3027, 0x3847, 0x3b9b, 0x38eb, 0x35c2, 0x34d4, 0x384a, 0x3595, 0x35ab, 0x3937, 0x3668, 0x3953, 0x3697, 0x2d28, 0x3baa, 0x3a75, 0x3889, 0x3996, 0x34d8, 0x39b2, 0x3b7d, 0x37c5, 0x3b60, 0x316d, 0x324c, 0x3a17, 0x35bd, 0x3914, 0x334e, 0x3375, 0x29e3, 0x34a3, 0x3346, 0x39e3, 0x32d6, 0x2b0b, 0x3ac7, 0x3aca, 0x3813, 0x3752, 0x3022, 0x39f7, 0x3971, 0x389f, 0x39c2, 0x3205, 0x3739, 0x38b3, 0x3942, 0x39dc, 0x39db, 0x382a, 0x3abb, 0x3978, 0x3ad0, 0x3568, 0x2c42, 0x3773, 0x31c8, 0x3b9f, 0x3594, 0x3a9a, 0x37c3, 0x31c2, 0x325a, 0x3931, 0x2265, 0x39ab, 0x24b6, 0x3291, 0x3a79, 0x3b31, 0x39ef, 0x3a6b, 0x381f, 0x304d, 0x33fb, 0x39d6, 0x3849, 0x3891, 0x367a, 0x3b66, 0x380e, 0x3481, 0x3b30, 0x2a58, 0x3bf3, 0x35d3, -0x3b73, 0x3bcf, 0x3a9c, 0x3a9f, 0x2d30, 0x3abe, 0x3510, 0x3980, 0x2809, 0x3bed, 0x2477, 0x31d1, 0x37d6, 0x3553, 0x3190, 0x38fd, 0x366f, 0x3917, 0x3bf2, 0x3b54, 0x34f0, 0x2f3f, 0x3b0a, 0x379a, 0x342d, 0x2db5, 0x3105, 0x35a8, 0x39a2, 0x3b84, 0x350e, 0x2c79, 0x3a84, 0x3419, 0x3af7, 0x3508, 0x39e6, 0x3a46, 0x2f9c, 0x3759, 0x2504, 0x37b5, 0x3b2b, 0x39cc, 0x3ae4, 0x38ec, 0x3751, 0x3841, 0x3b66, 0x2811, 0x34ac, 0x380a, 0x3666, 0x38f0, 0x3447, 0x33b7, 0x3bab, 0x388e, 0x2ce5, 0x307c, 0x3588, 0x3bf6, 0x38f9, 0x3b01, 0x340a, 0x3ae9, 0x3890, 0x3995, 0x3b9a, 0x3a50, 0x3751, 0x2cf7, 0x3a1b, 0x3b4b, 0x2474, 0x2eb0, 0x21b8, 0x38cd, 0x38d8, 0x35d6, 0x36f5, 0x240e, 0x29e9, 0x3686, 0x39d1, 0x3575, 0x3b7c, 0x3886, 0x2e72, 0x38d9, 0x34ac, 0x3816, 0x3b69, 0x3b7c, 0x2f10, 0x3428, -0x2aba, 0x3a08, 0x3acf, 0x364d, 0x344d, 0x3adf, 0x3526, 0x3a64, 0x3ad3, 0x34eb, 0x3943, 0x3894, 0x383a, 0x3bab, 0x3183, 0x3928, 0x3999, 0x300a, 0x35c5, 0x37a3, 0x384d, 0x3a84, 0x3959, 0x39ef, 0x360b, 0x350e, 0x36bf, 0x2f32, 0x3410, 0x383c, 0x3952, 0x33ee, 0x3899, 0x30a8, 0x3b1e, 0x30fa, 0x3b5c, 0x359d, 0x3802, 0x390f, 0x3815, 0x140e, 0x35f6, 0x3bfa, 0x38c4, 0x364f, 0x3b7f, 0x3b9f, 0x35a6, 0x3bf3, 0x3a2d, 0x3727, 0x39ab, 0x3944, 0x3ac5, 0x36df, 0x3b27, 0x3a1f, 0x3a69, 0x3994, 0x3673, 0x3b0c, 0x2f2f, 0x3303, 0x319f, 0x3567, 0x3753, 0x3b8f, 0x30f0, 0x3b7b, 0x36dc, 0x2941, 0x2b6c, 0x3ad2, 0x39cb, 0x3884, 0x3a58, 0x3a0c, 0x337a, 0x3a6e, 0x3b94, 0x37d1, 0x38f2, 0x3bf1, 0x3843, 0x2ae6, 0x384b, 0x3bf9, 0x36cb, 0x362e, 0x309a, 0x35ef, 0x36e6, 0x3484, 0x38a4, 0x3457, -0x370e, 0x341f, 0x39c0, 0x3527, 0x393f, 0x3438, 0x2685, 0x375f, 0x3803, 0x38eb, 0x39fe, 0x39b3, 0x380f, 0x3370, 0x2766, 0x3b26, 0x35b6, 0x38ab, 0x3890, 0x26a8, 0x3879, 0x3819, 0x3ae8, 0x3aae, 0x3385, 0x2944, 0x3966, 0x35cc, 0x3641, 0x3a73, 0x3b91, 0x35d5, 0x31f8, 0x34a1, 0x2bbe, 0x3419, 0x369f, 0x3289, 0x98e, 0x2fef, 0x3ad5, 0x3029, 0x3ae0, 0x3b11, 0x3a03, 0x2e69, 0x38ae, 0x2eed, 0x3871, 0x3848, 0x2f40, 0x3946, 0x38bb, 0x3851, 0x39f5, 0x2e9a, 0x38fc, 0x33e4, 0x349f, 0x3b2e, 0x3873, 0x388c, 0x395a, 0x3519, 0x3636, 0x2df3, 0x3bd5, 0x3a94, 0x2e66, 0x38af, 0x2e50, 0x3aff, 0x3b0e, 0x36c8, 0x187b, 0x3733, 0x3a82, 0x3baf, 0x35c4, 0x2f20, 0x3a36, 0x3266, 0x38c6, 0x37e7, 0x31c5, 0x3a24, 0x3805, 0x299b, 0x3b3b, 0x3163, 0x2f34, 0x30d5, 0x38a2, 0x392a, 0x32af, 0x3be7, -0x3377, 0x2cce, 0x36d4, 0x3852, 0x39ad, 0x30e1, 0x397f, 0x380e, 0x3bd1, 0x3ae1, 0x3413, 0x3aa8, 0x3bcf, 0x3b5f, 0x393f, 0x37cf, 0x391e, 0x38a4, 0x3a1c, 0x3778, 0x35ca, 0x3b75, 0x2fe7, 0x2f20, 0x2d50, 0x3b72, 0x37b3, 0x3ba6, 0x37f5, 0x3866, 0x3b8c, 0x382c, 0x2c3e, 0x39ba, 0x3be2, 0x3602, 0x3ba5, 0x38d5, 0x37ed, 0x36d6, 0x3b11, 0x34de, 0x3831, 0x39e8, 0x377f, 0x38e4, 0x363d, 0x2b40, 0x2c1e, 0x304c, 0x3bcc, 0x347f, 0x34d7, 0x313b, 0x3a3b, 0x1f13, 0x379e, 0x331f, 0x2d1c, 0x3778, 0x3550, 0x3a5f, 0x2fea, 0x3ab4, 0x32bb, 0x386c, 0x3690, 0x3787, 0x3a95, 0x367b, 0x385a, 0x3b3b, 0x3b49, 0x387c, 0x38f5, 0x2f80, 0x37d4, 0x3b87, 0x3881, 0x3996, 0x3547, 0x38d2, 0x3ab2, 0x3a1c, 0x3483, 0x3ae7, 0x394d, 0x333c, 0x34df, 0x39e5, 0x3aaf, 0x39e6, 0x30a3, 0x3a4d, 0x3890, 0x34cc, -0x3482, 0x3420, 0x2dcc, 0x310d, 0x38c5, 0x3b6a, 0x38ca, 0x3ba1, 0x3a7c, 0x318a, 0x2d61, 0x3635, 0x39e2, 0x3837, 0x39fe, 0x3842, 0x3574, 0x3992, 0x246c, 0x3565, 0x380e, 0x3712, 0x35e8, 0x3712, 0x38ed, 0x3307, 0x398f, 0x31f3, 0x3a5c, 0x3a73, 0x33ba, 0x3841, 0x35d0, 0x36df, 0x2ce4, 0x366e, 0x38a3, 0x251a, 0x399f, 0x372c, 0x359d, 0x3913, 0x397c, 0x2e64, 0x3861, 0x2d47, 0x3a98, 0x381d, 0x3b60, 0x3b4a, 0x381d, 0x3a0d, 0x3adb, 0x3869, 0x3353, 0x3939, 0x39ad, 0x3114, 0x3b12, 0x3860, 0x39fe, 0x3ba6, 0x247b, 0x3a0e, 0x3206, 0x3b0b, 0x3b25, 0x399f, 0x39b4, 0x3b42, 0x3a81, 0x36bb, 0x3522, 0x349e, 0x3494, 0x3081, 0x3978, 0x3768, 0x2edd, 0x37b4, 0x34d1, 0x3bf8, 0x3ad6, 0x3773, 0x3034, 0x381a, 0x3a52, 0x3771, 0x2b52, 0x3b3d, 0x3b20, 0x3bf8, 0x342f, 0x34f8, 0x3b72, 0x35b4, -0x3029, 0x36c3, 0x39c0, 0x393c, 0x30da, 0x3152, 0x3917, 0x3864, 0x390b, 0x3aea, 0x2c08, 0x36c6, 0x3bcd, 0x3375, 0x35bc, 0x3a2b, 0x3684, 0x368f, 0x3974, 0x37fd, 0x3901, 0x37a4, 0x3729, 0x35a0, 0x3ab0, 0x3251, 0x2857, 0x38ef, 0x2e96, 0x38d6, 0x2cda, 0x331c, 0x39a8, 0x3a44, 0x3a7c, 0x3aa8, 0x3851, 0x3974, 0x3b93, 0x3587, 0x3baf, 0x2eac, 0x37f4, 0x38a7, 0x292d, 0x2fc0, 0x330d, 0x3404, 0x3459, 0x3999, 0x385a, 0x396c, 0x3834, 0x2534, 0x3b44, 0x2ecf, 0x34f6, 0x3632, 0x2898, 0x3511, 0x3514, 0x3bd8, 0x3284, 0x3913, 0x34c4, 0x3967, 0x3845, 0x3ab4, 0x37eb, 0x30b8, 0x3629, 0x39c1, 0x2b02, 0x37f7, 0x31d5, 0x3812, 0x2c1b, 0x2a24, 0x3499, 0x36a7, 0x39c2, 0x3952, 0x351b, 0x3ba0, 0x3706, 0x3896, 0x3600, 0x22c8, 0x3077, 0x3839, 0x36ed, 0x38d4, 0x2fd0, 0x3a29, 0x370c, 0x3bfe, -0x335b, 0x311a, 0x39b1, 0x32aa, 0x3a7e, 0x387f, 0x3846, 0x3a3b, 0x379b, 0x34c4, 0x38dc, 0x2c37, 0x394c, 0x381d, 0x3113, 0x300e, 0x3922, 0x2ddd, 0x30ee, 0x3347, 0x3881, 0x2cb5, 0x311e, 0x3023, 0x384c, 0x3a29, 0x39b9, 0x391d, 0x36ff, 0x38d7, 0x3adf, 0x3892, 0x39d7, 0x3b41, 0x3a26, 0x35cf, 0x2fa9, 0x32ff, 0x3218, 0x34af, 0x3282, 0x2ff1, 0x3823, 0x3249, 0x35c7, 0x3baf, 0x3817, 0x39c2, 0x3799, 0x38e2, 0x39f5, 0x30d1, 0x3934, 0x3696, 0x351b, 0x3586, 0x3adf, 0x3747, 0x3aa0, 0x33d7, 0x3600, 0x3a9a, 0x3b09, 0x3a96, 0x364b, 0x38d2, 0x3b1e, 0x2793, 0x3555, 0x3b85, 0x3460, 0x3747, 0x3a29, 0x21c7, 0x3b24, 0x3b7a, 0x3902, 0x2cd6, 0x379b, 0x2970, 0x3910, 0x38c2, 0x3930, 0x3674, 0x39e6, 0x3ac8, 0x38e2, 0x3841, 0x37a2, 0x3a56, 0x3424, 0x3406, 0x385c, 0x3924, 0x3923, 0x36aa, -0x33bd, 0x37ed, 0x2b2e, 0x3bdc, 0x3ae1, 0x3055, 0x3b41, 0x31d7, 0x3880, 0x3125, 0x3015, 0x282f, 0x3bc1, 0x3bd1, 0x3684, 0x2ca5, 0x344e, 0x3bb1, 0x2094, 0x349a, 0x3211, 0x31bc, 0x3bd1, 0x2d9d, 0x3b07, 0x3b33, 0x350f, 0x3459, 0x3851, 0x36b4, 0x3a84, 0x3965, 0x3a34, 0x3b3c, 0x353d, 0x2ffd, 0x33e6, 0x376b, 0x3272, 0x2e28, 0x3aea, 0x3485, 0x39f4, 0x3955, 0x277e, 0x3bfc, 0x3526, 0x384e, 0x2485, 0x38b2, 0x3101, 0x2fbd, 0x359e, 0x36ba, 0x3aa5, 0x308a, 0x38d1, 0x3434, 0x3ae9, 0x3954, 0x33e0, 0x2ff9, 0x3aa9, 0x3721, 0x2cb5, 0x28e9, 0x3524, 0x3658, 0x3a2f, 0x315c, 0x38d9, 0x396e, 0x383b, 0x3a0a, 0x32fe, 0x3479, 0x2a64, 0x3162, 0x35dd, 0x350b, 0x2c86, 0x3878, 0x346b, 0x2719, 0x204d, 0x38a4, 0x3778, 0x3863, 0x3ae3, 0x3784, 0x3174, 0x3562, 0x3a26, 0x39c4, 0x31b9, 0x3600, -0x2cf9, 0x3a34, 0x3834, 0x346f, 0x3712, 0x29e1, 0x2cfe, 0x3873, 0x3b1f, 0x3bc2, 0x3936, 0x3551, 0x3b8e, 0x3742, 0x39b1, 0x36ab, 0x390f, 0x2a6d, 0x3805, 0x32b1, 0x2e34, 0x3898, 0x3375, 0x3997, 0x3845, 0x3b9a, 0x3bac, 0x3876, 0x392c, 0x3811, 0x3aad, 0x3700, 0x2ab0, 0x340c, 0x3ba5, 0x2d7c, 0x36c7, 0x38dc, 0x3745, 0x2c5c, 0x2d0d, 0x34ee, 0x339e, 0x3565, 0x3983, 0x302c, 0x2cd8, 0x3886, 0x3994, 0x3ba6, 0x38d1, 0x315d, 0x3083, 0x3860, 0x3769, 0x3bf0, 0x33cd, 0x2b0f, 0x360c, 0x380a, 0x3442, 0x3b5b, 0x36eb, 0x3938, 0x3b69, 0x3283, 0x301b, 0x2fb0, 0x3b51, 0x3aa6, 0x2b81, 0x2cfd, 0x3aaa, 0x38fc, 0x3a73, 0x3232, 0x3614, 0x3963, 0x3b01, 0x3b9c, 0x3889, 0x372a, 0x20de, 0x3629, 0x36c0, 0x31ca, 0x3b87, 0x3543, 0x38bf, 0x3aae, 0x37d6, 0x365e, 0x35a4, 0x35da, 0x3962, 0x3741, -0x2910, 0x3478, 0x38b6, 0x355e, 0x3a0a, 0x3969, 0x36b2, 0x3bcd, 0x2633, 0x36d6, 0x395c, 0x39d9, 0x3505, 0x34cf, 0x337f, 0x3560, 0x2f11, 0x3a3d, 0x3386, 0x39ac, 0x38d3, 0x2dbe, 0x3908, 0x3599, 0x2d42, 0x38eb, 0x2d1e, 0x3bb5, 0x3550, 0x377e, 0x387f, 0x2f07, 0x3b2f, 0x37a5, 0x390a, 0x3902, 0x38e8, 0x345a, 0x38a5, 0x378b, 0x2e8d, 0x3ab3, 0x3a78, 0x34d9, 0x341a, 0x3387, 0x289a, 0x2db0, 0x384f, 0x3be6, 0x24e4, 0x3b02, 0x3af5, 0x34b2, 0x2af4, 0x3ae6, 0x337d, 0x3875, 0x34f6, 0x262d, 0x3488, 0x3a14, 0x2cb8, 0x357c, 0x3b96, 0x3208, 0x3969, 0x2bae, 0x3b77, 0x3515, 0x345d, 0x39c9, 0x354d, 0x38cf, 0x3b12, 0x3af9, 0x3a3c, 0x2f0f, 0x3a0b, 0x3075, 0x3859, 0x2045, 0x382e, 0x3901, 0x159e, 0x30fd, 0x2b73, 0x31e0, 0x3bf4, 0x3a46, 0x3afd, 0x2bbe, 0x274d, 0x39dd, 0x2bc7, 0x3450, -0x2ace, 0x3a96, 0x3bae, 0x386d, 0x3a6a, 0x2a87, 0x3913, 0x3618, 0x2cce, 0x391e, 0x3346, 0x3a02, 0x3981, 0x3afe, 0x34da, 0x3aa3, 0x3846, 0x303e, 0x377a, 0x3bc0, 0x2d77, 0x2f1a, 0x3916, 0x3b20, 0x2896, 0x3b93, 0x3a74, 0x24dd, 0x3396, 0x3b7c, 0x3a9b, 0x3b17, 0x366a, 0x1e78, 0x3b60, 0x3153, 0x3844, 0x2aa8, 0x37ab, 0x352c, 0x3455, 0x3a4d, 0x3a7a, 0x3a2f, 0x35bb, 0x358f, 0x3781, 0x2288, 0x2e69, 0x39c4, 0x3534, 0x3ba4, 0x3b8a, 0x398b, 0x3998, 0x392a, 0x3bd5, 0x3a5b, 0x31e5, 0x39af, 0x3a90, 0x3ac1, 0x374e, 0x3791, 0x3aa4, 0x3519, 0x3b0a, 0x398e, 0x3bae, 0x339e, 0x35fe, 0x3ab9, 0x2a73, 0x38b3, 0x388c, 0x3530, 0x2fe3, 0x37b5, 0x3188, 0x3b00, 0x31b2, 0x34de, 0x2f74, 0x397b, 0x3a17, 0x2df1, 0x357a, 0x3882, 0x3958, 0x39f1, 0x3ba4, 0x3864, 0x36f8, 0x33d2, 0x390f, 0x395b, -0x3a33, 0x39ea, 0x3846, 0x3502, 0x29a0, 0x38da, 0x3a62, 0x39c8, 0x3a32, 0x3987, 0x2807, 0x3895, 0x3621, 0x3981, 0x368f, 0x25b3, 0x312e, 0x3bfe, 0x38c8, 0x396d, 0x3b4b, 0x380a, 0x3b65, 0x36ca, 0x3954, 0x3ae0, 0x32f0, 0x33b6, 0x3920, 0x35fd, 0x39b3, 0x2f18, 0x3876, 0x396c, 0x39eb, 0x3b39, 0x3ab4, 0x3b9b, 0x2504, 0x3621, 0x3534, 0x2ea1, 0x33e7, 0x3af5, 0x3965, 0x33ed, 0x38d8, 0x37cc, 0x3682, 0x311b, 0x36e0, 0x2805, 0x3502, 0x38ac, 0x2dfa, 0x39d6, 0x3a41, 0x38e1, 0x3992, 0x38da, 0x3a54, 0x356b, 0x3701, 0x389d, 0x35de, 0x3b8e, 0x3b4c, 0x302b, 0x36b5, 0x2dd3, 0x397b, 0x2e07, 0x3645, 0x3267, 0x38ca, 0x1b3c, 0x3a0b, 0x3821, 0x3881, 0x3a2b, 0x3980, 0x3711, 0x2b68, 0x3a27, 0x38ca, 0x3057, 0x3a56, 0x386a, 0x3bb8, 0x38ca, 0x3152, 0x3683, 0x39c4, 0x2cf6, 0x3351, 0x3903, -0x342c, 0x30b8, 0x3704, 0x38b1, 0x3811, 0x3860, 0x3916, 0x381f, 0x3892, 0x3349, 0x1e6c, 0x30e3, 0x38c8, 0x3b7b, 0x39d3, 0x30df, 0x3bf3, 0x2f61, 0x37fa, 0x396a, 0x3bbe, 0x3872, 0x38c1, 0x3ad8, 0x3624, 0x3536, 0x35bb, 0x3b72, 0x222a, 0x31e0, 0x34d3, 0x2ee5, 0x386d, 0x3a1e, 0x28b7, 0x21e6, 0x37ef, 0x3263, 0x3ae0, 0x211e, 0x38c4, 0x3ba4, 0x380b, 0x3757, 0x34f5, 0x3a18, 0x36fa, 0x3844, 0x39fd, 0x3aa1, 0x3be2, 0x33b5, 0x3523, 0x386c, 0x20a5, 0x314f, 0x3a95, 0x3a54, 0x3bdd, 0x35de, 0x3a9f, 0x398e, 0x3a70, 0x2a6d, 0x3538, 0x31d5, 0x38b4, 0x2199, 0x2bf6, 0x3a4a, 0x3057, 0x31e5, 0x3b51, 0x31d8, 0x398b, 0x2c16, 0x3571, 0x2a31, 0x39cf, 0x3507, 0x3874, 0x3b15, 0x2e8a, 0x36f5, 0x2f3b, 0x3be1, 0x3a1b, 0x38cb, 0x3759, 0x1e24, 0x3b85, 0x3998, 0x30f7, 0x2d7d, 0x3a8a, 0x3378, -0x37a0, 0x3b60, 0x32f2, 0x34cc, 0x3ba4, 0x3b40, 0x35b1, 0x1a3c, 0x239a, 0x3ab0, 0x38cf, 0x3b26, 0x3990, 0x39d7, 0x3b7e, 0x3980, 0x2b0a, 0x3985, 0x3862, 0x3a53, 0x3409, 0x27e2, 0x38f7, 0x3a2f, 0x2dd9, 0x34f1, 0x2dda, 0x395e, 0x375b, 0x3086, 0x3053, 0x3baf, 0x365b, 0x38b6, 0x3a51, 0x34e4, 0x356d, 0x35f9, 0x3b6e, 0x38aa, 0x2d39, 0x34ac, 0x27d5, 0x38c8, 0x280c, 0x1999, 0x36da, 0x31ca, 0x3bf6, 0x31be, 0x37a2, 0x3296, 0x3902, 0x2f66, 0x2f5e, 0x3867, 0x26c6, 0x32c4, 0x3412, 0x2dd7, 0x34a6, 0x3b89, 0x354b, 0x345e, 0x33cd, 0x35ad, 0x3804, 0x3583, 0x37ea, 0x3bcb, 0x30d0, 0x38e3, 0x3100, 0x2c8f, 0x3be4, 0x35e4, 0x35cb, 0x3a5e, 0x3a50, 0x3837, 0x3540, 0x3a4f, 0x3b11, 0x32fb, 0x3949, 0x3870, 0x36e9, 0x3382, 0x3aca, 0x3b72, 0x3b03, 0x3a4d, 0x369f, 0x389c, 0x3a02, 0x27e4, -0x3954, 0x36ba, 0x25e2, 0x3847, 0x357e, 0x38da, 0x361d, 0x3b50, 0x2a0f, 0x3af9, 0x37f1, 0x3831, 0x3bc1, 0x3aaf, 0x32de, 0x3980, 0x3877, 0x3a73, 0x2944, 0x3b22, 0x30e3, 0x357e, 0x3987, 0x26ed, 0x3a5c, 0x3a5e, 0x381a, 0x3ae1, 0x3bc4, 0x3b3e, 0x3579, 0x3835, 0x3ba0, 0x37d2, 0x38b9, 0x2c78, 0x3875, 0x3808, 0x346b, 0x38c6, 0x3970, 0x342d, 0x3104, 0x2b1a, 0x3aa6, 0x3b64, 0x3a9f, 0x36f1, 0x2cac, 0x3b98, 0x3ab5, 0x3ab7, 0x3685, 0x33a5, 0x30ae, 0x3689, 0x3bd4, 0x39c1, 0x3bb8, 0x3566, 0x37bb, 0x2ee2, 0x3036, 0x3a93, 0x35d2, 0x3a4a, 0x3be5, 0x324b, 0x357c, 0x3b9a, 0x3759, 0x39f8, 0x397c, 0x3a80, 0x39d9, 0x39f4, 0x2fbd, 0x390e, 0x3865, 0x39f1, 0x3b87, 0x37c1, 0x3a3f, 0x348c, 0x368b, 0x2714, 0x2a26, 0x32a9, 0x30dc, 0x3a35, 0x371a, 0x3b96, 0x3569, 0x388b, 0x3775, 0x3604, -0x386a, 0x391b, 0x3826, 0x38fd, 0x3156, 0x3bae, 0x3755, 0x38df, 0x391c, 0x3b3b, 0x3aa5, 0x3870, 0x3b20, 0x3a0b, 0x3a85, 0x395f, 0x3a77, 0x3264, 0x2c48, 0x3a8f, 0x3815, 0x3acc, 0x3b2d, 0x3be0, 0x39ac, 0x3a41, 0x3bc0, 0x39f6, 0x3524, 0x3024, 0x2ae0, 0x3b6f, 0x366f, 0x38e7, 0x3a0c, 0x38de, 0x3a12, 0x380b, 0x38ec, 0x3222, 0x308c, 0x3871, 0x381f, 0x3be5, 0x3a0f, 0x3ac7, 0x36fe, 0x3406, 0x331f, 0x354c, 0x379d, 0x373b, 0x380f, 0x37c2, 0x3822, 0x3b8f, 0x3871, 0x3444, 0x3357, 0x3052, 0x35a3, 0x353b, 0x3a18, 0x3b60, 0x3b2e, 0x39f1, 0x1bf8, 0x3b34, 0x3a45, 0x373b, 0x311e, 0x3b4f, 0x3bb9, 0x2f13, 0x390b, 0x38eb, 0x3a53, 0x3712, 0x3ad6, 0x3b2e, 0x3a91, 0x3171, 0x361b, 0x3ad7, 0x3577, 0x37d3, 0x31f3, 0x26d3, 0x2995, 0x3060, 0x3960, 0x38d3, 0x3a9b, 0x1aa9, 0x381e, 0x349b, -0x3485, 0x3be7, 0x3a58, 0x39bb, 0x36de, 0x3456, 0x2a1e, 0x2ed2, 0x2e40, 0x3041, 0x38f1, 0x3beb, 0x3aea, 0x3049, 0x3117, 0x3bf2, 0x3707, 0x3bf3, 0x38e3, 0x3b27, 0x3a88, 0x3b5a, 0x34a6, 0x3b51, 0x39bc, 0x3841, 0x3a1d, 0x3867, 0x35e7, 0x3b46, 0x2916, 0x3a6b, 0x3956, 0x3825, 0x352f, 0x3b66, 0x3975, 0x3637, 0x3b44, 0x356e, 0x387b, 0x34eb, 0x3a4b, 0x384f, 0x3b29, 0x3ad3, 0x3a09, 0x3542, 0x3a39, 0x3551, 0x3889, 0x3429, 0x3637, 0x3bc8, 0x1aee, 0x3b20, 0x3b0a, 0x3994, 0x2fea, 0x3b4b, 0x381d, 0x3758, 0x397e, 0x3861, 0x25cc, 0x391a, 0x28d2, 0x2524, 0x3424, 0x3a6a, 0x34f3, 0x3aca, 0x3a40, 0x34e1, 0x3647, 0x3623, 0x34e9, 0x3786, 0x38a6, 0x3be1, 0x34d6, 0x350c, 0x3bf3, 0x368b, 0x39bb, 0x34e0, 0x39b0, 0x342e, 0x360d, 0x34e3, 0x3867, 0x389a, 0x38d7, 0x31f9, 0x3565, 0x2e93, -0x39a8, 0x3b31, 0x384a, 0x3370, 0x316f, 0x3815, 0x35b5, 0x3594, 0x3bbd, 0x3afe, 0x39be, 0x2276, 0x3805, 0x3b69, 0x3964, 0x33c0, 0x3a3b, 0x3231, 0x3358, 0x2b23, 0x3645, 0x3b99, 0x3735, 0x2255, 0x3595, 0x2f45, 0x381a, 0x257c, 0x3ac7, 0x38e9, 0x381b, 0x36d0, 0x3132, 0x3814, 0x3a17, 0x3ad4, 0x2abf, 0x3887, 0x3424, 0x2e96, 0x3361, 0x341a, 0x38cf, 0x3448, 0x287f, 0x3b1c, 0x3b09, 0x3983, 0x3a6e, 0x375d, 0x3458, 0x383c, 0x3196, 0x3b2f, 0x1cbe, 0x31e6, 0x29c4, 0x3745, 0x395c, 0x3aac, 0x3b2f, 0x38f1, 0x320c, 0x3a9d, 0x375f, 0x3b01, 0x32ef, 0x3531, 0x36d3, 0x3726, 0x3642, 0x2c76, 0x3916, 0x342a, 0x3548, 0x39d7, 0x39de, 0x3c00, 0x3b1e, 0x391a, 0x35e8, 0x3b2b, 0x3645, 0x3a81, 0x3876, 0x37e2, 0x36c8, 0x3b62, 0x3302, 0x1bad, 0x3961, 0x3beb, 0x39a7, 0x3611, 0x381b, 0x3266, -0x3b25, 0x384e, 0x3940, 0x2891, 0x3a32, 0x3828, 0x34f3, 0x3652, 0x3178, 0x2839, 0x3aa2, 0x2a96, 0x2df4, 0x347b, 0x28ad, 0x3699, 0x36ba, 0x32ad, 0x39e5, 0x1c06, 0x340e, 0x3968, 0x387c, 0x3bc6, 0x3839, 0x39d4, 0x2645, 0x38ae, 0x3ae3, 0x367e, 0x3090, 0x34fe, 0x3b6b, 0x2e64, 0x36bb, 0x33ef, 0x2c5a, 0x38ae, 0x36db, 0x3a6e, 0x38ac, 0x39eb, 0x387f, 0x1b0d, 0x3b7c, 0x3461, 0x34cc, 0x3b4f, 0x3045, 0x38e9, 0x35fa, 0x3625, 0x33e7, 0x35f4, 0x3939, 0x35dd, 0x2b8e, 0x3574, 0x3b6a, 0x3921, 0x38de, 0x393e, 0x29f5, 0x2e2c, 0x3a10, 0x39a3, 0x32c2, 0x38e5, 0x38c7, 0x30c3, 0x3b6e, 0x34b3, 0x36f9, 0x38bb, 0x3b24, 0x359f, 0x3308, 0x2d54, 0x3a03, 0x39ee, 0x3a7b, 0x3076, 0x2ab0, 0x3b94, 0x32a7, 0x39b8, 0x3b78, 0x28ce, 0x375d, 0x3209, 0x3385, 0x38f1, 0x38ca, 0x3b51, 0x374e, 0x3593, -0x33ca, 0x33b7, 0x3663, 0x36c1, 0x3831, 0x347e, 0x39f8, 0x34bf, 0x39dc, 0x39e6, 0x2fa9, 0x32d9, 0x3a58, 0x39e5, 0x3116, 0x3026, 0x3b59, 0x3b82, 0x3a92, 0x316a, 0x38c3, 0x2770, 0x38e7, 0x380b, 0x3b2b, 0x380d, 0x32d6, 0x3602, 0x39df, 0x382c, 0x383c, 0x3b76, 0x3647, 0x38f3, 0x36b4, 0x3693, 0x251e, 0x3b19, 0x357e, 0x37d4, 0x37ab, 0x3aee, 0x349f, 0x32ec, 0x3401, 0x3bcc, 0x3145, 0x3845, 0x3b76, 0x38a9, 0x37f4, 0x343b, 0x3933, 0x38fe, 0x3af8, 0x3178, 0x392b, 0x3aed, 0x2f64, 0x3992, 0x39f8, 0x34fe, 0x3737, 0x3a24, 0x3bf9, 0x3a31, 0x3a60, 0x37b6, 0x39ad, 0x3ba5, 0x381d, 0x384d, 0x3702, 0x39d8, 0x379e, 0x38ba, 0x3a79, 0x391a, 0x34ce, 0x2d57, 0x3a7e, 0x35f0, 0x382f, 0x3937, 0x3698, 0x3acc, 0x34ca, 0x382d, 0x35f7, 0x34f7, 0x3b90, 0x374d, 0x380f, 0x2e14, 0x3ac3, 0x3583, -0x36fe, 0x38aa, 0x3abd, 0x3750, 0x2f2d, 0x3906, 0x3aed, 0x32e7, 0x3b42, 0x3823, 0x265f, 0x17f9, 0x248a, 0x38ee, 0x3a11, 0x3b21, 0x35a9, 0x2dd7, 0x35dc, 0x38ed, 0x3860, 0x3989, 0x3229, 0x333d, 0x2c78, 0x30fa, 0x2d3c, 0x3a04, 0x39c2, 0x3895, 0x3a67, 0x2f53, 0x3583, 0x39bd, 0x3a03, 0x3afd, 0x3892, 0x3889, 0x39e5, 0x3825, 0x39dd, 0x3a23, 0x3644, 0x31d1, 0x3875, 0x3a46, 0x38c1, 0x390c, 0x394d, 0x262a, 0x2823, 0x2c94, 0x3645, 0x39f9, 0x3366, 0x3710, 0x2f70, 0x348c, 0x2fa3, 0x3b0e, 0x3241, 0x3491, 0x386f, 0x38b6, 0x34e1, 0x30fc, 0x32cc, 0x37be, 0x3519, 0x334b, 0x389c, 0x34c1, 0x388b, 0x38cf, 0x3980, 0x2463, 0x3a34, 0x32ff, 0x3a3c, 0x3932, 0x3b47, 0x39ab, 0x3a9c, 0x27b6, 0x2d90, 0x35d2, 0x39d2, 0x3a5d, 0x3bf2, 0x3a5f, 0x38e1, 0x3b81, 0x3865, 0x3a31, 0x3b03, 0x3906, -0x35bf, 0x3818, 0x373b, 0x3491, 0x34a9, 0x3b40, 0x2cda, 0x381b, 0x2a00, 0x396e, 0x347a, 0x2d46, 0x2fa1, 0x3bef, 0x3acd, 0x362f, 0x2a7f, 0x3a38, 0x3346, 0x3889, 0x3061, 0x3b20, 0x3836, 0x35a4, 0x3a7d, 0x3487, 0x381a, 0x381f, 0x3977, 0x3862, 0x312a, 0x315e, 0x3841, 0x3453, 0x21f5, 0x363d, 0x2ddb, 0x35bb, 0x3bb4, 0x3b36, 0x382a, 0x36d8, 0x3764, 0x3b9e, 0x26b4, 0x29ce, 0x3451, 0x33ba, 0x37fb, 0x3a4f, 0x2181, 0x35cc, 0x3288, 0x2de2, 0x3a13, 0x2dd5, 0x326d, 0x3731, 0x3931, 0x3b0d, 0x34c6, 0x36bd, 0x38fe, 0x3a0a, 0x283b, 0x38c0, 0x3806, 0x39fa, 0x39a6, 0x39f8, 0x3b09, 0x36dc, 0x385c, 0x329a, 0x3a89, 0x2dbb, 0x39ee, 0x3b65, 0x3436, 0x37e3, 0x3a27, 0x3910, 0x3b43, 0x398c, 0x2efa, 0x3467, 0x39ce, 0x38ae, 0x3567, 0x3484, 0x38e0, 0x327e, 0x2c32, 0x39c1, 0x3b63, 0x35ac, -0x35c1, 0x2d9e, 0x38af, 0x32e3, 0x347f, 0x3855, 0x3527, 0x3850, 0x3b55, 0x3baa, 0x392a, 0x37d9, 0x39d3, 0x3960, 0x3ab0, 0x2ccb, 0x2da9, 0x3990, 0x3b87, 0x2c1c, 0x397d, 0x28f6, 0x397d, 0x3944, 0x30be, 0x3ba4, 0x2f6d, 0x34d4, 0x3416, 0x39e7, 0x398f, 0x3958, 0x3b7b, 0x3a1d, 0x31e6, 0x27fe, 0x3ba0, 0x33b2, 0x3080, 0x35a9, 0x3800, 0x37f6, 0x3965, 0x3594, 0x322e, 0x3b27, 0x3bdb, 0x3b7a, 0x38a6, 0x1848, 0x3b61, 0x3842, 0x3ad2, 0x390f, 0x3b17, 0x3715, 0x3798, 0x33cb, 0x33db, 0x383f, 0x394b, 0x30cb, 0x3bbb, 0x366d, 0x3b5b, 0x38ca, 0x36cb, 0x3558, 0x39f6, 0x3776, 0x388a, 0x35d1, 0x3475, 0x3509, 0x3742, 0x3b15, 0x3ad4, 0x3182, 0x39e7, 0x3b5a, 0x35dd, 0x3751, 0x32b8, 0x349f, 0x3996, 0x3a4c, 0x35e9, 0x266e, 0x37f2, 0x3be3, 0x2525, 0x26af, 0x3282, 0x3810, 0x2cf1, 0x383a, -0x3aa3, 0x399c, 0x3630, 0x38c8, 0x3203, 0x19a2, 0x35e2, 0x38fe, 0x38a2, 0x3b63, 0x3318, 0x231d, 0x3999, 0x3ae9, 0x3132, 0x21b2, 0x2a77, 0x394e, 0x2cf4, 0x3890, 0x38a6, 0x30ff, 0x3be2, 0x3231, 0x3b72, 0x3487, 0x3496, 0x351c, 0x38d6, 0x3944, 0x3949, 0x3b7b, 0x362f, 0x37cd, 0x38f6, 0x3a10, 0x3a93, 0x31be, 0x3b8e, 0x360a, 0x3567, 0x3803, 0x3b16, 0x3b59, 0x3a4e, 0x3770, 0x2d73, 0x3312, 0x382f, 0x30fa, 0x3921, 0x339d, 0x2222, 0x3049, 0x3b4e, 0x3b67, 0x3b07, 0x3b31, 0x34e8, 0x3684, 0x3a09, 0x389b, 0x3999, 0x39d1, 0x3765, 0x37bc, 0x3732, 0x3b35, 0x3819, 0x36ef, 0x38fc, 0x3665, 0x3b96, 0x3015, 0x3847, 0x35e6, 0x3167, 0x34ba, 0x3794, 0x3a6a, 0x35d8, 0x30f4, 0x34c7, 0x3bce, 0x3903, 0x3bf3, 0x3a72, 0x3828, 0x381a, 0x3981, 0x3925, 0x39a1, 0x35f4, 0x35dd, 0x3954, 0x2bc5, -0x3884, 0x2d8e, 0x2a49, 0x383f, 0x15af, 0x3a4c, 0x3af6, 0x3ad8, 0x3847, 0x3b07, 0x3a15, 0x3bdd, 0x3a8c, 0x2caf, 0x364a, 0x3825, 0x2b2c, 0x3a97, 0x33b8, 0x3ac4, 0x347e, 0x36f7, 0x36ed, 0x3131, 0x2bea, 0x3841, 0x3880, 0x39e4, 0x30c3, 0x3b62, 0x32ba, 0x34f0, 0x34c7, 0x396a, 0x3722, 0x384d, 0x3165, 0x3a71, 0x34bf, 0x3018, 0x372c, 0x3876, 0x347f, 0x3be2, 0x117d, 0x3a2c, 0x3917, 0x3895, 0x3a3b, 0x2f92, 0x3b65, 0x3af3, 0x39b3, 0x290c, 0x301b, 0x3a9e, 0x39ef, 0x38d0, 0x34e8, 0x336a, 0x37e8, 0x3685, 0x376e, 0x3b8b, 0x3b4c, 0x35a7, 0x3919, 0x3504, 0x3b59, 0x3a85, 0x2edc, 0x3b32, 0x36bc, 0x21fa, 0x357b, 0x38a6, 0x380d, 0x3969, 0x348c, 0x39cd, 0x2d9a, 0x3818, 0x380e, 0x39f4, 0x35ce, 0x3823, 0x3a29, 0x2c1a, 0x3846, 0x3811, 0x2f33, 0x38a1, 0x382b, 0x355a, 0x3961, 0x3a97, -0x352f, 0x3bec, 0x3a27, 0x3888, 0x39d2, 0x38d8, 0x314c, 0x38c8, 0x3779, 0x2f99, 0x3a5b, 0x3971, 0x3b93, 0x368c, 0x3904, 0x35f5, 0x277f, 0x34f9, 0x3368, 0x3824, 0x3a74, 0x3843, 0x3284, 0x35aa, 0x35b4, 0x372a, 0x35ca, 0x3b2b, 0x3877, 0x37cb, 0x3110, 0x33ad, 0x3ba3, 0x3bba, 0x34e4, 0x36ab, 0x3984, 0x2aac, 0x39ec, 0x38ae, 0x3931, 0x3410, 0x333e, 0x2c45, 0x3482, 0x3868, 0x392c, 0x384e, 0x3678, 0x38ee, 0x395b, 0x38f8, 0x3194, 0x33e2, 0x2af5, 0x397c, 0x32ca, 0x32c3, 0x3913, 0x3309, 0x3bb1, 0x3253, 0x3640, 0x2cc8, 0x3385, 0x28d0, 0x385e, 0x39fd, 0x38cc, 0x3bf6, 0x332e, 0x3be1, 0x3835, 0x3b3e, 0x38cc, 0x38ff, 0x365f, 0x3a09, 0x3a32, 0x3b84, 0x3596, 0x37f3, 0x3431, 0x3af6, 0x3bec, 0x38cd, 0x35ab, 0x3af5, 0x3359, 0x3762, 0x3844, 0x374c, 0x3980, 0x3886, 0x2e62, 0x35cc, -0x3b76, 0x3b5f, 0x2434, 0x35fc, 0x38d5, 0x3095, 0x3944, 0x380e, 0x349f, 0x39d7, 0x3755, 0x3768, 0x3b3a, 0x34ce, 0x3bef, 0x365a, 0x3987, 0x3897, 0x3509, 0x3984, 0x32f8, 0x3b7b, 0x37b9, 0x3a4b, 0x2c86, 0x369a, 0x396d, 0x2d21, 0x3477, 0x39af, 0x3b60, 0x3680, 0x39d7, 0x31d8, 0x3b8a, 0x3aed, 0x3a65, 0x3710, 0x39d3, 0x3bf1, 0x331f, 0x20c0, 0x34f2, 0x34cc, 0x3934, 0x38c5, 0x396b, 0x3894, 0x38fa, 0x33c9, 0x3408, 0x3340, 0x360e, 0x36e6, 0x3942, 0x2f3c, 0x3be4, 0x38f4, 0x35a1, 0x2cf7, 0x3931, 0x3911, 0x39e7, 0x2dcc, 0x3951, 0x334c, 0x3b00, 0x39ad, 0x2370, 0x35ea, 0x3402, 0x37d6, 0x377d, 0x3652, 0x3b56, 0x2cc4, 0x3b1f, 0x35af, 0x3920, 0x3423, 0x398a, 0x35e2, 0x39f1, 0x3ab5, 0x3ae2, 0x345c, 0x31ef, 0x38ef, 0x3bb1, 0x3937, 0x2ae8, 0x3221, 0x3ae9, 0x390d, 0x3b2f, 0x3048, -0x3047, 0x3767, 0x37f7, 0x3bfa, 0x3b33, 0x3a2d, 0x362c, 0x3a93, 0x3b66, 0x391a, 0x31c7, 0x3282, 0x39b9, 0x3454, 0x37b7, 0x3019, 0x3a9a, 0x37b5, 0x2dcd, 0x3618, 0x34db, 0x3471, 0x3b35, 0x3684, 0x385c, 0x38bf, 0x3bd7, 0x3a44, 0x3130, 0x38c8, 0x30cf, 0x37bb, 0x3bcc, 0x3669, 0x3b27, 0x3949, 0x355f, 0x314a, 0x383d, 0x3a20, 0x381c, 0x3bcf, 0x3282, 0x39f3, 0x3a49, 0x3ad9, 0x34aa, 0x3add, 0x3938, 0x3bbe, 0x3650, 0x37f2, 0x2c79, 0x39c4, 0x3304, 0x3a8c, 0x3162, 0x3520, 0x3637, 0x39e3, 0x2478, 0x3803, 0x34dd, 0x3104, 0x37ee, 0x3861, 0x38e8, 0x356c, 0x3be0, 0x3633, 0x395a, 0x3afb, 0x378b, 0x3b8d, 0x2f97, 0x37df, 0x31dd, 0x3475, 0x34f7, 0x36ef, 0x3966, 0x2c50, 0x38a1, 0x2720, 0x39f3, 0x3805, 0x3310, 0x3656, 0x3571, 0x3bd9, 0x3bc0, 0x391c, 0x38d6, 0x2562, 0x1fc8, 0x3524, -0x362a, 0x3a8c, 0x3830, 0x39c7, 0x38ca, 0x3af3, 0x3602, 0x3700, 0x3773, 0x3a78, 0x38f3, 0x22be, 0x3822, 0x2eac, 0x3748, 0x32ee, 0x2a0e, 0x38ed, 0x3830, 0x3401, 0x3971, 0x3a35, 0x3984, 0x3a86, 0x3501, 0x2fe8, 0x3ba3, 0x3587, 0x3895, 0x3858, 0x2d46, 0x3724, 0x3b84, 0x39b6, 0x3a17, 0x3b1f, 0x38a9, 0x33de, 0x3723, 0x367d, 0x3bc4, 0x3817, 0x3b1e, 0x35f1, 0x3abb, 0x373d, 0x2abe, 0x3206, 0x3872, 0x3946, 0x3898, 0x33b2, 0x25fb, 0x36ae, 0x256a, 0x390e, 0x3b3b, 0x34d8, 0x36ba, 0x389b, 0x377a, 0x3b0e, 0x32a6, 0x26f9, 0x39e1, 0x327e, 0x2d58, 0x3bd3, 0x3a7f, 0x38b9, 0x3811, 0x29b7, 0x2816, 0x38f9, 0x3b64, 0x39b6, 0x3a29, 0x30a4, 0x3989, 0x3b73, 0x307a, 0x37c7, 0x372d, 0x3830, 0x390e, 0x315b, 0x335d, 0x3929, 0x3917, 0x374c, 0x34af, 0x3531, 0x34e9, 0x3bcf, 0x3761, 0x3b62, -0x34e5, 0x39e3, 0x3b35, 0x2a57, 0x3688, 0x2f0c, 0x3b87, 0x3bdd, 0x358d, 0x381a, 0x39ae, 0x2f79, 0x394f, 0x3708, 0x3560, 0x3ada, 0x3480, 0x3af5, 0x3bd8, 0x39d1, 0x3795, 0x2a29, 0x3b0a, 0x3515, 0x3858, 0x3ab4, 0x3968, 0x3660, 0x37b2, 0x3601, 0x36ae, 0x3229, 0x3383, 0x2c30, 0x3a41, 0x3b0d, 0x33ef, 0x3b6b, 0x366f, 0x3b33, 0x3a82, 0x3841, 0x3a89, 0x3bea, 0x3542, 0x328a, 0x3bc9, 0x34f2, 0x3ac0, 0x3067, 0x3311, 0x38f4, 0x23d0, 0x3964, 0x38b1, 0x390c, 0x3a9f, 0x28bb, 0x3ac1, 0x39e6, 0x31dd, 0x2f55, 0x3a19, 0x3a51, 0x3a38, 0x2841, 0x381a, 0x3938, 0x36ea, 0x3be0, 0x3b35, 0x39c1, 0x2fef, 0x37ec, 0x389f, 0x3b72, 0x37b9, 0x3bf7, 0x325d, 0x38e9, 0x333d, 0x39ce, 0x2e79, 0x3682, 0x37c1, 0x38b9, 0x3990, 0x37fd, 0x3302, 0x32a6, 0x2a69, 0x3831, 0x2b59, 0x3b48, 0x35b4, 0x2aed, -0x37e2, 0x340a, 0x3279, 0x3723, 0x397d, 0x3839, 0x39ec, 0x3025, 0x3803, 0x3b54, 0x3a70, 0x3b7d, 0x2f2a, 0x315c, 0x35ed, 0x3ace, 0x3845, 0x3bee, 0x3870, 0x3492, 0x380e, 0x3431, 0x3a47, 0x3a33, 0x38ae, 0x3a40, 0x3908, 0x33c5, 0x38db, 0x3b24, 0x3847, 0x32a3, 0x3959, 0x3a36, 0x35c4, 0x3960, 0x396f, 0x3786, 0x38ef, 0x36e7, 0x35c3, 0x3a28, 0x3893, 0x3b2c, 0x2e03, 0x374d, 0x3489, 0x3bf4, 0x38fb, 0x35b2, 0x38c1, 0x3a0f, 0x394f, 0x35e0, 0x34bd, 0x3bcc, 0x3be1, 0x315f, 0x2a41, 0x308d, 0x2e5d, 0x3a02, 0x2e99, 0x3b1a, 0x3b6c, 0x3ba1, 0x38da, 0x395a, 0x3877, 0x39ec, 0x3855, 0x2fd6, 0x2857, 0x2e1d, 0x3677, 0x3034, 0x3136, 0x3880, 0x327c, 0x38a3, 0x243e, 0x3921, 0x3b69, 0x3bca, 0x376e, 0x3998, 0x3b02, 0x3a2b, 0x35c0, 0x3985, 0x3b14, 0x38d5, 0x347b, 0x3adc, 0x3639, 0x3b9f, -0x3b50, 0x3334, 0x38b6, 0x3ae5, 0x3b39, 0x35fa, 0x2752, 0x3ba6, 0x3439, 0x389a, 0x2888, 0x39be, 0x3710, 0x3922, 0x3bbf, 0x3726, 0x2d91, 0x22ef, 0x398f, 0x3465, 0x3ba8, 0x3ad4, 0x39a0, 0x3a55, 0x3a2f, 0x387d, 0x3788, 0x3a19, 0x3926, 0x38a0, 0x383c, 0x3adc, 0x3b84, 0x3518, 0x322f, 0x3773, 0x3a74, 0x31b7, 0x3901, 0x3361, 0x3959, 0x2d8e, 0x3575, 0x2faf, 0x2ccf, 0x39ad, 0x339b, 0x3bcc, 0x3be6, 0x267e, 0x3582, 0x3973, 0x3b23, 0x3513, 0x3946, 0x38c8, 0x3b09, 0x383a, 0x34a6, 0x3aaa, 0x36f8, 0x34af, 0x368d, 0x3beb, 0x361f, 0x357f, 0x3b7f, 0x3ada, 0x37bb, 0x3986, 0x358c, 0x3ac2, 0x3448, 0x3ace, 0x2896, 0x377a, 0x3a2d, 0x3992, 0x381a, 0x389d, 0x3a18, 0x3bec, 0x37ac, 0x384d, 0x3107, 0x3323, 0x36d0, 0x371d, 0x3a21, 0x3b07, 0x2ef3, 0x342a, 0x39e6, 0x3037, 0x39a5, 0x3510, -0x3b81, 0x2559, 0x3914, 0x3883, 0x3534, 0x33e2, 0x29d9, 0x3b82, 0x3bf7, 0x390c, 0x31e3, 0x3af0, 0x2a26, 0x3803, 0x34ec, 0x356f, 0x3aed, 0x3af7, 0x34fc, 0x39f9, 0x3ad2, 0x39f6, 0x3abf, 0x397d, 0x2d55, 0x27f6, 0x3b03, 0x3335, 0x3872, 0x34df, 0x3801, 0x39c9, 0x326f, 0x3a15, 0x3810, 0x22c5, 0x359e, 0x366c, 0x3493, 0x39b2, 0x38c5, 0x3a6d, 0x39b9, 0x33dc, 0x34d7, 0x3b0b, 0x378d, 0x39ed, 0x3566, 0x396a, 0x368e, 0x3a4f, 0x3571, 0x3831, 0x3290, 0x3232, 0x39f4, 0x3915, 0x377d, 0x3af9, 0x3460, 0x31da, 0x23e6, 0x315c, 0x2b67, 0x366b, 0x2ccf, 0x38f8, 0x39c0, 0x37cc, 0x322b, 0x3979, 0x2529, 0x34b5, 0x3759, 0x360c, 0x3180, 0x3962, 0x30d2, 0x394f, 0x3ac5, 0x3b52, 0x371b, 0x3588, 0x3437, 0x34e5, 0x3a58, 0x3bb8, 0x3bd6, 0x3858, 0x3915, 0x3bcc, 0x3835, 0x30c9, 0x259f, 0x3051, -0x399d, 0x3044, 0x382b, 0x3449, 0x3b82, 0x3a4a, 0x38b5, 0x383f, 0x1c23, 0x3b6f, 0x3941, 0x35ff, 0x395e, 0x26c0, 0x3474, 0x39b9, 0x39da, 0x2aca, 0x380a, 0x39c3, 0x393e, 0x39e9, 0x3b77, 0x3a64, 0x345b, 0x3712, 0x38e4, 0x3a97, 0x3451, 0x3a3d, 0x379f, 0x3a01, 0x3642, 0x3b7e, 0x30b6, 0x35d6, 0x39b6, 0x2cb3, 0x383a, 0x3566, 0x3a76, 0x3418, 0x31ac, 0x3ae2, 0x350d, 0x3af6, 0x382c, 0x37b8, 0x339c, 0x3969, 0x379b, 0x36b8, 0x3444, 0x382a, 0x2fab, 0x3727, 0x3b3c, 0x2e19, 0x3643, 0x30d4, 0x284c, 0x388b, 0x3a47, 0x35cc, 0x3945, 0x3470, 0x3ae6, 0x39e5, 0x36fd, 0x38ed, 0x344b, 0x3b7c, 0x39d0, 0x3833, 0x3a38, 0x34f4, 0x3046, 0x3757, 0x371d, 0x25a8, 0x386d, 0x2f66, 0x38a2, 0x2e32, 0x39e3, 0x1969, 0x313d, 0x35f5, 0x3804, 0x28f5, 0x2e8a, 0x342c, 0x3bdc, 0x3ad3, 0x3259, 0x3622, -0x325e, 0x3912, 0x398b, 0x3b70, 0x39cd, 0x3931, 0x2f75, 0x3542, 0x357a, 0x315f, 0x3ac4, 0x374f, 0x32dd, 0x386c, 0x35f1, 0x39b7, 0x38b7, 0x3b2f, 0x3a7b, 0x3b5c, 0x3bef, 0x37f6, 0x3047, 0x386a, 0x3903, 0x3607, 0x3946, 0x3911, 0x399d, 0x3be8, 0x2d83, 0x3a3c, 0x369b, 0x204f, 0x3a4c, 0x3185, 0x38c8, 0x39c3, 0x3075, 0x3542, 0x361d, 0x250f, 0x385d, 0x3485, 0x1ac2, 0x37af, 0x3ab4, 0x2dd4, 0x3595, 0x36de, 0x3add, 0x3564, 0x3566, 0x3b8d, 0x2d55, 0x3629, 0x2c8a, 0x3280, 0x3801, 0x329a, 0x3b20, 0x3b42, 0x3bf0, 0x2f27, 0x3866, 0x2caf, 0x3b40, 0x3922, 0x351e, 0x3925, 0x3b42, 0x3968, 0x39db, 0x3b77, 0x3877, 0x384a, 0x3058, 0x3aaf, 0x3a70, 0x3b33, 0x3685, 0x3b0a, 0x3a8d, 0x2d38, 0x35bb, 0x31b2, 0x36e8, 0x3a79, 0x367e, 0x3a09, 0x3a74, 0x3b9f, 0x3367, 0x37a5, 0x38a3, 0x3949, -0x2bea, 0x2b88, 0x3965, 0x3112, 0x3b79, 0x391b, 0x38a9, 0x38dc, 0x36c4, 0x3ab1, 0x3677, 0x346e, 0x3b44, 0x34b7, 0x3301, 0x381d, 0x3a3a, 0x3254, 0x3b6b, 0x389a, 0x3a65, 0x379d, 0x3178, 0x2df2, 0x3380, 0x385d, 0x383c, 0x36ef, 0x3243, 0x3b7c, 0x38cb, 0x39f5, 0x3144, 0x3336, 0x3a1b, 0x3b54, 0x3983, 0x3b54, 0x3861, 0x34dd, 0x3996, 0x3a96, 0x34ec, 0x2e9e, 0x36db, 0x392f, 0x3164, 0x34df, 0x38fc, 0x35e5, 0x3432, 0x2a1b, 0x39d0, 0x385b, 0x2d25, 0x3405, 0x3809, 0x36f6, 0x3947, 0x3a23, 0x3ba7, 0x3a6f, 0x394f, 0x381c, 0x387e, 0x3aa3, 0x3586, 0x38ba, 0x3aed, 0x2f65, 0x3b77, 0x3921, 0x3843, 0x3652, 0x35ef, 0x39ea, 0x399a, 0x3a10, 0x3b1e, 0x39af, 0x3bac, 0x2f72, 0x3755, 0x38c7, 0x348e, 0x3aaf, 0x32cd, 0x3210, 0x3a78, 0x3462, 0x35a1, 0x327d, 0x38a4, 0x3569, 0x39fe, 0x3809, -0x39d6, 0x3985, 0x2211, 0x36f1, 0x36da, 0x34e8, 0x3bd7, 0x3aa3, 0x370b, 0x2e90, 0x3973, 0x3754, 0x3994, 0x31fe, 0x35e6, 0x3b87, 0x3967, 0x34d6, 0x3a01, 0x3935, 0x3afb, 0x3078, 0x3b9f, 0x31cf, 0x2496, 0x3ab7, 0x345e, 0x31a2, 0x3548, 0x3892, 0x38d8, 0x38e4, 0x3908, 0x340c, 0x3114, 0x37a7, 0x3a05, 0x37db, 0x39ee, 0x3b9e, 0x37e4, 0x375e, 0x27b0, 0x27ee, 0x3b89, 0x3bd6, 0x3911, 0x329d, 0x3596, 0x36b7, 0x38ea, 0x37b5, 0x353e, 0x368e, 0x3a25, 0x3989, 0x29cb, 0x36e2, 0x3b80, 0x390f, 0x3978, 0x359a, 0x3150, 0x3865, 0x3827, 0x2ebb, 0x3afc, 0x3ad8, 0x291b, 0x3b1f, 0x3036, 0x3b4b, 0x3411, 0x2450, 0x3928, 0x382f, 0x3968, 0x32af, 0x36e1, 0x34a0, 0x3076, 0x3289, 0x284d, 0x39ca, 0x3765, 0x2fc3, 0x3ad0, 0x2a90, 0x3a9e, 0x347f, 0x367c, 0x3bee, 0x3982, 0x380e, 0x3623, 0x33d5, -0x33eb, 0x315b, 0x3b82, 0x3901, 0x39d8, 0x3409, 0x394f, 0x38aa, 0x34e5, 0x3b0e, 0x30d8, 0x37db, 0x37cb, 0x32e0, 0x37de, 0x3896, 0x3b9f, 0x3919, 0x3869, 0x3762, 0x3698, 0x2dc6, 0x31ce, 0x3200, 0x36fa, 0x396f, 0x3b96, 0x3890, 0x3ac3, 0x331a, 0x3619, 0x3ac2, 0x2f37, 0x39e4, 0x39a0, 0x2130, 0x391c, 0x3a27, 0x3b7a, 0x3b49, 0x3ba8, 0x3a95, 0x2c78, 0x3a1a, 0x3591, 0x354a, 0x36c1, 0x38ba, 0x392f, 0x37a5, 0x3898, 0x3a9d, 0x3b8f, 0x389f, 0x3a6e, 0x389d, 0x36de, 0x3abe, 0x3669, 0x38f1, 0x391a, 0x3b6f, 0x2987, 0x30aa, 0x3ae7, 0x3709, 0x389a, 0x39a1, 0x34a0, 0x3a1a, 0x3bd0, 0x35d7, 0x3936, 0x3bc9, 0x327a, 0x3a1b, 0x31c8, 0x3be6, 0x3926, 0x3654, 0x317b, 0x39d2, 0x3b54, 0x39ae, 0x2d1e, 0x31a0, 0x30dd, 0x362a, 0x2c28, 0x3020, 0x3585, 0x30c7, 0x3af0, 0x3ad3, 0x3b2b, 0x382f, -0x384d, 0x3ace, 0x3a7d, 0x300d, 0x3a39, 0x3ac5, 0x2b3b, 0x2c05, 0x2dfc, 0x3bee, 0x3b46, 0x343f, 0x3a00, 0x33be, 0x2d9e, 0x3790, 0x3467, 0x3a11, 0x39e5, 0x3943, 0x34b2, 0x393c, 0x2e29, 0x34ae, 0x34dd, 0x2491, 0x3ac2, 0x3279, 0x3a46, 0x318d, 0x389a, 0x2f39, 0x1cb3, 0x37cf, 0x31c3, 0x318a, 0x3172, 0x3b66, 0x357a, 0x3896, 0x3b6b, 0x3a47, 0x3a43, 0x33bc, 0x35f4, 0x39f5, 0x39c1, 0x34fe, 0x39a2, 0x367b, 0x3b19, 0x3bef, 0x3461, 0x39a9, 0x3a35, 0x2bfa, 0x34b4, 0x38fa, 0x3203, 0x332b, 0x39ef, 0x3a2a, 0x3bc2, 0x39ef, 0x364e, 0x3a8c, 0x2fa8, 0x2612, 0x3406, 0x391a, 0x39ff, 0x3bba, 0x3971, 0x2637, 0x3664, 0x3a2b, 0x3053, 0x3bf4, 0x3b2c, 0x3b1f, 0x27e3, 0x3ba0, 0x38ee, 0x388f, 0x3a17, 0x328e, 0x3bcd, 0x306a, 0x3909, 0x38f2, 0x3a16, 0x380b, 0x2e11, 0x38b5, 0x36ba, 0x387a, -0x3a4f, 0x38f9, 0x3862, 0x3525, 0x38ae, 0x34bd, 0x3a07, 0x3881, 0x2e59, 0x3969, 0x3a7a, 0x3b75, 0x2619, 0x399d, 0x314a, 0x39fe, 0x3af1, 0x3a0c, 0x2875, 0x39c6, 0x3887, 0x3ab2, 0x36e8, 0x3497, 0x396f, 0x3567, 0x2ef7, 0x3845, 0x2cd3, 0x3b99, 0x30cc, 0x300d, 0x3a4f, 0x3453, 0x386a, 0x39d5, 0x3beb, 0x392e, 0x3766, 0x3b37, 0x3b57, 0x355c, 0x37fb, 0x3a36, 0x343a, 0x37e1, 0x1f1c, 0x218b, 0x3820, 0x345b, 0x3bd5, 0x329f, 0x3679, 0x3b0f, 0x28d4, 0x3891, 0x3b51, 0x3937, 0x3585, 0x3936, 0x3ace, 0x30fa, 0x384e, 0x3a16, 0x34bf, 0x34f4, 0x3a08, 0x3916, 0x2ed6, 0x3740, 0x382c, 0x3446, 0x3b77, 0x3af7, 0x3a42, 0x284f, 0x366c, 0x36ea, 0x3680, 0x326a, 0x3b5c, 0x3678, 0x3bee, 0x3853, 0x36cc, 0x35c2, 0x2f28, 0x34f6, 0x31d8, 0x38b6, 0x3a7b, 0x3b96, 0x3056, 0x3afc, 0x351a, 0x3570, -0x3439, 0x3a20, 0x3b65, 0x362f, 0x38f8, 0x30e5, 0x3974, 0x38cf, 0x3b7e, 0x3b2d, 0x3828, 0x382c, 0x3979, 0x349c, 0x3b6f, 0x3887, 0x3a3a, 0x3bec, 0x3aee, 0x3abd, 0x3510, 0x3a50, 0x2dcb, 0x31d9, 0x39ed, 0x3a5b, 0x39d6, 0x3a89, 0x3511, 0x3199, 0x39a3, 0x3803, 0x3a02, 0x3bdd, 0x3588, 0x35cb, 0x3a69, 0x3bab, 0x23ea, 0x3750, 0x3b92, 0x3bfc, 0x359f, 0x3bdb, 0x3a6b, 0x3b07, 0x355d, 0x3a0a, 0x39cd, 0x1e5e, 0x38c2, 0x3965, 0x34f4, 0x37d0, 0x35b2, 0x34c8, 0x3ad5, 0x34f4, 0xba8, 0x3b62, 0x380b, 0x3b8f, 0x3ae7, 0x30c0, 0x38a0, 0x3341, 0x323a, 0x32d1, 0x32a8, 0x3413, 0x38bb, 0x37cf, 0x397e, 0x3884, 0x2952, 0x2b54, 0x3b8a, 0x3bd4, 0x3522, 0x3b0f, 0x3888, 0x38e4, 0x38d1, 0x3bfa, 0x3adc, 0x3b72, 0x3bc5, 0x33de, 0x39f6, 0x390e, 0x2fd3, 0x3875, 0x261c, 0x2a54, 0x315d, 0x388a, -0x36a4, 0x38d4, 0x3405, 0x3761, 0x37ae, 0x3650, 0x3065, 0x3b0b, 0x283f, 0x3a67, 0x360c, 0x3b9c, 0x2eea, 0x2e99, 0x349f, 0x3849, 0x3b43, 0x3744, 0x3834, 0x3852, 0x36e7, 0x3835, 0x3499, 0x2ee3, 0x3aa2, 0x3823, 0x31c2, 0x380c, 0x354c, 0x37f5, 0x324c, 0x302b, 0x34bf, 0x26e6, 0x39a0, 0x3068, 0x2e1d, 0x3061, 0x3b24, 0x33a7, 0x3ada, 0x38a5, 0x37c3, 0x39a0, 0x3aa0, 0x382f, 0x21e9, 0x3a36, 0x3a8b, 0x395a, 0x343d, 0x3837, 0x361d, 0x33af, 0x3b87, 0x399b, 0x3904, 0x344a, 0x3a10, 0x3b08, 0x348c, 0x2fc7, 0x3239, 0x390b, 0x384c, 0x34c6, 0x2873, 0x357c, 0x32b6, 0x3ae5, 0x3bb4, 0x30f2, 0x39e7, 0x2b6a, 0x3969, 0x39ab, 0x3316, 0x3638, 0x3a22, 0x3505, 0x35f5, 0x3b42, 0x3372, 0x33e5, 0x322a, 0x3a8f, 0x36be, 0x3982, 0x341d, 0x3510, 0x3714, 0x3871, 0x3a56, 0x3739, 0x3457, 0x3822, -0x35ee, 0x3bb5, 0x357c, 0x3a66, 0x3bfe, 0x3469, 0x37e0, 0x39c0, 0x2c91, 0x3805, 0x31c4, 0x39e4, 0x32f9, 0x3140, 0x2ef9, 0x389c, 0x38e8, 0x3404, 0x2d4b, 0x36fd, 0x32a8, 0x397e, 0x3939, 0x2c8f, 0x327d, 0x341a, 0x35eb, 0x36bb, 0x307c, 0x3a9c, 0x3b25, 0x3b83, 0x31b7, 0x377c, 0x3450, 0x34af, 0x2d66, 0x36ab, 0x3520, 0x3648, 0x2e5e, 0x3adc, 0x3422, 0x3b9e, 0x36b4, 0x35ac, 0x3a7b, 0x36ae, 0x39c5, 0x2c2d, 0x3b8f, 0x3998, 0x3a82, 0x2cb5, 0x3a0b, 0x34aa, 0x3895, 0x3811, 0x3545, 0x35b5, 0x39c4, 0x3b43, 0x39ae, 0x355a, 0x2db8, 0x3b7f, 0x3655, 0x354d, 0x34ee, 0x30fb, 0x3a7c, 0x338b, 0x3b6c, 0x2c39, 0x38bb, 0x2de3, 0x3114, 0x38bf, 0x2e01, 0x3483, 0x2964, 0x3828, 0x2da3, 0x3a05, 0x3add, 0x3477, 0x3bf6, 0x3a7a, 0x38a8, 0x34be, 0x2d01, 0x2f9b, 0x29d1, 0x3995, 0x38a1, 0x3632, -0x3629, 0x3451, 0x31ca, 0x3b76, 0x382e, 0x3aad, 0x3a3a, 0x3aed, 0x3471, 0x3b38, 0x2a7b, 0x38f4, 0x3975, 0x383f, 0x30ba, 0x2cbb, 0x3adc, 0x31c2, 0x2ef0, 0x270a, 0x3734, 0x30a5, 0x3481, 0x3764, 0x3a6c, 0x3845, 0x2bfd, 0x3407, 0x3be1, 0x35ba, 0x3163, 0x332f, 0x38ae, 0x3361, 0x38a5, 0x3556, 0x265c, 0x38ac, 0x3869, 0x2d4e, 0x300a, 0x39bd, 0x38ef, 0x372d, 0x2d3e, 0x3a3a, 0x30a2, 0x1e66, 0x3bc7, 0x38c5, 0x3966, 0x3ace, 0x3a34, 0x2d9c, 0x3845, 0x30f3, 0x2c21, 0x3405, 0x2c4f, 0x3629, 0x3bcb, 0x315b, 0x2e94, 0x3399, 0x39a7, 0x3696, 0x377d, 0x36a0, 0x312d, 0x366f, 0x379a, 0x25a6, 0x3808, 0x2da5, 0x2bbf, 0x381d, 0x3a94, 0x3577, 0x31ba, 0x344e, 0x385f, 0x3687, 0x38a7, 0x2a84, 0x399a, 0x317a, 0x3a59, 0x3467, 0x3af3, 0x3b1d, 0x33c8, 0x35cf, 0x3af4, 0x2c27, 0x38ab, 0x2850, -0x3be1, 0x3a7a, 0x363b, 0x3aa9, 0x3af3, 0x37f1, 0x3815, 0x3a54, 0x2d86, 0x3b67, 0x3780, 0x3b73, 0x3755, 0x38a3, 0x3435, 0x2df3, 0x3bc1, 0x32c0, 0x2da1, 0x395b, 0x32a7, 0x377e, 0x3ba5, 0x3ace, 0x3971, 0x3095, 0x3a2b, 0x3780, 0x3a68, 0x3979, 0x392b, 0x38ca, 0x385a, 0x3a82, 0x385f, 0x36e3, 0x3318, 0x2aad, 0x3670, 0x3ba1, 0x3bd0, 0x3a29, 0x3116, 0x390c, 0x3756, 0x3aa6, 0x39f6, 0x31a7, 0x3be8, 0x389c, 0x3248, 0x3608, 0x357a, 0x37bd, 0x37a4, 0x3456, 0x3563, 0x31a3, 0x398a, 0x3940, 0x364b, 0x2273, 0x3847, 0x356c, 0x3574, 0x382e, 0x3b27, 0x39d7, 0x311b, 0x3825, 0x3abb, 0x3bb9, 0x3b33, 0x386f, 0x3b02, 0x3b39, 0x2453, 0x3888, 0x34e1, 0x318d, 0x36df, 0x3ba2, 0x2ba7, 0x3943, 0x3586, 0x38f6, 0x3a2a, 0x3b90, 0x3b00, 0x39f3, 0x3108, 0x3533, 0x3bb7, 0x3264, 0x3aa8, 0x3669, -0x3748, 0x3a5c, 0x3959, 0x3c00, 0x3b73, 0x30f8, 0x2e58, 0x37d5, 0x3836, 0x2e91, 0x3603, 0x38f2, 0x3647, 0x3855, 0x3a9e, 0x3851, 0x24fd, 0x3990, 0x38a2, 0x3aae, 0x314a, 0x39d4, 0x3afd, 0x3a0d, 0x3a94, 0x38d4, 0x3970, 0x35d2, 0x3899, 0x2e93, 0x388f, 0x3850, 0x367f, 0x3bbf, 0x3581, 0x3a5d, 0x261c, 0x3bb3, 0x3594, 0x3988, 0x3b5b, 0x3b6e, 0x37a7, 0x39fa, 0x3a8e, 0x3629, 0x3b1d, 0x3068, 0x38d0, 0x3859, 0x3514, 0x3865, 0x33e0, 0x39f5, 0x20bf, 0x3a8f, 0x2ff9, 0x3bc8, 0x3abf, 0x324d, 0x2b88, 0x3856, 0x38a6, 0x3bd7, 0x38d8, 0x3722, 0x39ee, 0x3947, 0x3794, 0x36a5, 0x3acd, 0x1f3f, 0x3497, 0x39d0, 0x3947, 0x38c7, 0x3a3f, 0x3661, 0x36dd, 0x2c46, 0x3bee, 0x2885, 0x3430, 0x38f7, 0x27b3, 0x3134, 0x3265, 0x2666, 0x3930, 0x3514, 0x2ec0, 0x3985, 0x37ef, 0x3a11, 0x3a70, 0x3578, -0x3a6e, 0x333d, 0x36c8, 0x33e0, 0x27ae, 0x2954, 0x36cc, 0x37db, 0x382f, 0x38cd, 0x3944, 0x3a4b, 0x3671, 0x3966, 0x33a3, 0x3882, 0x3739, 0x349b, 0x39b6, 0x3573, 0x2cbf, 0x374e, 0x2cc0, 0x3af4, 0x34ca, 0x314c, 0x3bb4, 0x3554, 0x3a8b, 0x335f, 0x2d08, 0x387b, 0x37c4, 0x34a9, 0x388d, 0x3884, 0x332e, 0x36de, 0x3590, 0x3803, 0x33dc, 0x28bf, 0x386a, 0x39e4, 0x3b9d, 0x3aff, 0x3b0b, 0x393a, 0x37fa, 0x3577, 0x3bfb, 0x3b19, 0x3422, 0x34cd, 0x39d4, 0x39dc, 0x31b9, 0x38f4, 0x3871, 0x2e80, 0x3b90, 0x3513, 0x363a, 0x39f9, 0x332f, 0x391a, 0x39f9, 0x38fd, 0x3b16, 0x382c, 0x3b91, 0x2fa4, 0x34db, 0x30f4, 0x37c5, 0x392c, 0x3b6f, 0x3835, 0x35ac, 0x379d, 0x3b39, 0x3924, 0x2f94, 0x34b0, 0x3149, 0x307c, 0x3a7e, 0x3656, 0x398a, 0x390f, 0x27f6, 0x31a6, 0x3a80, 0x3582, 0x3863, 0x3ae1, -0x3265, 0x257e, 0x360a, 0x2fc7, 0x3ba9, 0x3515, 0x3a80, 0x3056, 0x37c5, 0x2a16, 0x3915, 0x357a, 0x3556, 0x337e, 0x3af8, 0x3a9f, 0x35aa, 0x3903, 0x2ec4, 0x3751, 0x3a1b, 0x39d2, 0x3b76, 0x34ef, 0x3b5a, 0x394c, 0x3851, 0x3b4b, 0x3bb2, 0x3b80, 0x3bef, 0x3a09, 0x3af7, 0x3902, 0x3711, 0x3704, 0x374b, 0x3325, 0x39ee, 0x385c, 0x32a7, 0x281b, 0x2193, 0x3418, 0x35ac, 0x3800, 0x3a5f, 0x3bf9, 0x37f4, 0x3819, 0x3891, 0x3534, 0x366b, 0x3b04, 0x35b1, 0x3969, 0x3bc5, 0x3856, 0x2e11, 0x3784, 0x3388, 0x36eb, 0x35e3, 0x32f8, 0x2a50, 0x33ed, 0x3989, 0x34b8, 0x3be4, 0x3844, 0x34b0, 0x355e, 0x3a56, 0x3431, 0x345d, 0x389a, 0x366e, 0x3902, 0x3858, 0x38e1, 0x388c, 0x3565, 0x33c4, 0x3b68, 0x372f, 0x307c, 0x3bb9, 0x359f, 0x3a41, 0x3bcf, 0x3bb3, 0x2d88, 0x32f8, 0x354c, 0x3b9e, 0x3ae5, -0x3059, 0x3359, 0x382d, 0x3a91, 0x3bed, 0x28fb, 0x3885, 0x3a3c, 0x39e9, 0x39f7, 0x351e, 0x37e3, 0x3bad, 0x2834, 0x37d1, 0x3839, 0x3ad1, 0x39f3, 0x362f, 0x35ba, 0x3312, 0x3b21, 0x3536, 0x3bfd, 0x3518, 0x201e, 0x2022, 0x3b03, 0x3910, 0x39ce, 0x363c, 0x3b25, 0x3b4f, 0x3be8, 0x3655, 0x38dc, 0x344b, 0x3372, 0x3939, 0x372a, 0x3b86, 0x384e, 0x3b9e, 0x32c3, 0x3bd5, 0x3041, 0x3051, 0x257f, 0x3a6c, 0x3379, 0x2f52, 0x37de, 0x37ac, 0x3734, 0x3447, 0x3bbc, 0x3aaf, 0x38eb, 0x384a, 0x3ad6, 0x3a49, 0x3944, 0x2cf5, 0x38a3, 0x398b, 0x3b0e, 0x307a, 0x3504, 0x3728, 0x3500, 0x2f6e, 0x2e34, 0x3aa4, 0x39f7, 0x3831, 0x3902, 0x3509, 0x2d20, 0x3b99, 0x3860, 0x3901, 0x3420, 0x3944, 0x3926, 0x3acd, 0x3786, 0x3b09, 0x3ad7, 0x2cb6, 0x3a8e, 0x2233, 0x3892, 0x398a, 0x272e, 0x3853, 0x389c, -0x3a14, 0x3877, 0x3320, 0x34b7, 0x3a85, 0x34da, 0x38db, 0x3758, 0x3b8d, 0x3aa8, 0x3766, 0x34db, 0x3a54, 0x3806, 0x31ef, 0x33ab, 0x38bd, 0x3778, 0x3543, 0x36ec, 0x36fa, 0x2fc5, 0x3676, 0x350c, 0x390f, 0x3b8b, 0x394a, 0x38bb, 0x31d9, 0x3bf1, 0x36ce, 0x35dc, 0x38c2, 0x3910, 0x3944, 0x38f8, 0x37f6, 0x3b9b, 0x3574, 0x31ed, 0x244e, 0x28ef, 0x34fa, 0x3398, 0x3912, 0x365f, 0x3bb2, 0x38f7, 0x3af2, 0x3500, 0x3a8e, 0x3a55, 0x39be, 0x2471, 0x34b0, 0x336f, 0x380a, 0x3ae7, 0x34f5, 0x35f9, 0x3227, 0x263d, 0x3385, 0x372f, 0x2046, 0x3a80, 0x3b0a, 0x35cf, 0x38e1, 0x38b4, 0x2eb6, 0x353f, 0x314f, 0x3a4c, 0x3a52, 0x3b84, 0x39b8, 0x367d, 0x3b22, 0x310a, 0x3611, 0x37ad, 0x3496, 0x2e9c, 0x3215, 0x3b29, 0x38cf, 0x343f, 0x380a, 0x36b0, 0x3a08, 0x2c90, 0x36e4, 0x354a, 0x3b56, 0x37a1, -0x39f1, 0x340d, 0x3b34, 0x309a, 0x3074, 0x24a8, 0x261c, 0x3a16, 0x3846, 0x35dd, 0x2830, 0x3a03, 0x3729, 0x3766, 0x3461, 0x33db, 0x3b4a, 0x33eb, 0x3813, 0x34cd, 0x3875, 0x3a95, 0x31ef, 0x38b2, 0x3acc, 0x34d9, 0x3542, 0x37f4, 0x3937, 0x3858, 0x3997, 0x3538, 0x338b, 0x35ff, 0x3613, 0x3809, 0x3878, 0x3870, 0x2df0, 0x39f4, 0x3863, 0x30ce, 0x38ae, 0x384f, 0x3b24, 0x3045, 0x297f, 0x3b58, 0x3123, 0x2b6b, 0x3bc5, 0x388a, 0x3003, 0x3077, 0x34dc, 0x39cb, 0x3bcf, 0x3b16, 0x344c, 0x3aac, 0x364a, 0x399b, 0x3a68, 0x3583, 0x34c3, 0x3bc0, 0x3b1d, 0x3a15, 0x387f, 0x3756, 0x382e, 0x3a58, 0x18c3, 0x3a2e, 0x3b81, 0x34f8, 0x3802, 0x3631, 0x3920, 0x340c, 0x3b6c, 0x39a7, 0x1a4a, 0x38cc, 0x38ec, 0x3912, 0x3bd6, 0x3358, 0x3275, 0x3954, 0x3b39, 0x3674, 0x3a2e, 0x387c, 0x3a86, 0x34c2, -0x3585, 0x36c0, 0x3762, 0x380b, 0x31cf, 0x3992, 0x365a, 0x3b73, 0x35e8, 0x3925, 0x3b3b, 0x37cc, 0x3823, 0x2cd7, 0x2a80, 0x3a41, 0x37a5, 0x3479, 0x36eb, 0x29cc, 0x317d, 0x38b8, 0x32f8, 0x355e, 0x392c, 0x3b16, 0x3275, 0x306a, 0x22a8, 0x35fb, 0x32d4, 0x3a42, 0x32ba, 0x2443, 0x3898, 0x3164, 0x38ff, 0x3ba6, 0x35ae, 0x396a, 0x3a5c, 0x3922, 0x1df2, 0x3943, 0x309b, 0x3a53, 0x3439, 0x3802, 0x32bc, 0x34f6, 0x3957, 0x3a59, 0x36c9, 0x3b3c, 0x3aa0, 0x3903, 0x2b86, 0x380e, 0x2f83, 0x397a, 0x3a11, 0x3ab3, 0x38b9, 0x3a54, 0x3191, 0x2eb7, 0x3549, 0x3a39, 0x375b, 0x38d8, 0x346a, 0x3a3e, 0x35ff, 0x305b, 0x3b1d, 0x3882, 0x39da, 0x3a92, 0x2f74, 0x38f1, 0x3b8e, 0x361f, 0x38d4, 0x365b, 0x367c, 0x2658, 0x3762, 0x3905, 0x393f, 0x34c8, 0x3830, 0x39d1, 0x35e1, 0x23b7, 0x3b28, 0x39f4, -0x27a7, 0x38a0, 0x3954, 0x32c7, 0x3572, 0x25b3, 0x384f, 0x38fb, 0x3a34, 0x3b79, 0x3af6, 0x34c8, 0x3a0d, 0x3906, 0x3981, 0x3a97, 0x3b17, 0x34d5, 0x2dc4, 0x3401, 0x21b1, 0x3999, 0x3898, 0x2def, 0x3747, 0x300c, 0x3afe, 0x34d6, 0x36ac, 0x3b5f, 0x3952, 0x2a90, 0x34b4, 0x3a77, 0x3b03, 0x385e, 0x33d0, 0x37a9, 0x36a7, 0x231e, 0x3534, 0x35f6, 0x30e1, 0x3873, 0x2299, 0x387e, 0x3499, 0x30dc, 0x383a, 0x256e, 0x387f, 0x3395, 0x33c1, 0x38ac, 0x38fe, 0x383b, 0x36c3, 0x392b, 0x3812, 0x3168, 0x3b18, 0x386a, 0x3b17, 0x3981, 0x3577, 0x3874, 0x308a, 0x38d1, 0x3a7b, 0x361f, 0x38bf, 0x29c5, 0x2d56, 0x343b, 0x33bc, 0x38ab, 0x3a82, 0x2feb, 0x3885, 0x3531, 0x3588, 0x2ff6, 0x3851, 0x3a08, 0x36e7, 0x3b8c, 0x3182, 0x3a4e, 0x3849, 0x3509, 0x3909, 0x380e, 0x3692, 0x2e1e, 0x2f7f, 0x35eb, -0x3816, 0x2f7d, 0x3b42, 0x38c2, 0x3884, 0x3096, 0x39b7, 0x3868, 0x3879, 0x3606, 0x3111, 0x36d8, 0x39eb, 0x3bcf, 0x3ac4, 0x38bd, 0x3877, 0x3967, 0x398b, 0x39fe, 0x3514, 0x3139, 0x30a8, 0x3431, 0x2d75, 0x3a3a, 0x3b80, 0x3917, 0x307a, 0x2c42, 0x3143, 0x3954, 0x36ff, 0x381f, 0x37dd, 0x3b2f, 0x3972, 0x317f, 0x397b, 0x350d, 0x382e, 0x2ed6, 0x375c, 0x3462, 0x36ff, 0x364c, 0x39ba, 0x36c7, 0x3bea, 0x3211, 0x354e, 0x2d30, 0x1f03, 0x35f6, 0x3a24, 0x3576, 0x38ce, 0x38e5, 0x3bbe, 0x38a8, 0x3831, 0x39d0, 0x3772, 0x3ba5, 0x314f, 0x2572, 0x39d2, 0x2de3, 0x1d7a, 0x360b, 0x399a, 0x3863, 0x3a18, 0x3141, 0x3a7d, 0x391b, 0x3957, 0x33f7, 0x3801, 0x392a, 0x3a5a, 0x3a51, 0x3841, 0x2a4a, 0x3786, 0x355f, 0x28d9, 0x35cc, 0x2dfc, 0x302a, 0x2c60, 0x3b50, 0x3abe, 0x382f, 0x35ed, 0x3a8d, -0x3b1b, 0x3525, 0x3725, 0x2e88, 0x304b, 0x3920, 0x3962, 0x3908, 0x352b, 0x3667, 0x3880, 0x3692, 0x38bd, 0x317c, 0x30f3, 0x3beb, 0x302b, 0x326c, 0x3a36, 0x3a30, 0x39b6, 0x2a61, 0x34f1, 0x22d6, 0x39b6, 0x310f, 0x2dff, 0x38d1, 0x3700, 0x3412, 0x38de, 0x394f, 0x2de4, 0x2ed8, 0x3beb, 0x3a50, 0x3526, 0x246d, 0x361e, 0x2e4b, 0x3272, 0x3b5a, 0x3805, 0x3a98, 0x3653, 0x3abc, 0x301d, 0x399f, 0x2dae, 0x3ac4, 0x39dc, 0x3403, 0x3109, 0x2d85, 0x381e, 0x36b6, 0x348d, 0x35c6, 0x3b5f, 0x3b3a, 0x35c0, 0x36de, 0x38bc, 0x3308, 0x39a0, 0x39cf, 0x3456, 0x3a80, 0x39fc, 0x311a, 0x3bb1, 0x3a38, 0x3b9d, 0x3a27, 0x3912, 0x3377, 0x38a9, 0x34c6, 0x34ec, 0x35fa, 0x378c, 0x387e, 0x3686, 0x372c, 0x388d, 0x3ad6, 0x3bd3, 0x3b26, 0x3bd6, 0x3b91, 0x31e3, 0x381e, 0x353b, 0x3a90, 0x2cd6, 0x3047, -0x33df, 0x35c8, 0x396a, 0x321c, 0x286f, 0x2daa, 0x39aa, 0x3a83, 0x36ff, 0x3476, 0x3a33, 0x37d6, 0x2c5f, 0x3a23, 0x38cb, 0x36a9, 0x331b, 0x24ec, 0x3960, 0x2d61, 0x3a61, 0x330f, 0x3937, 0x2e70, 0x3797, 0x399d, 0x26dc, 0x320e, 0x342c, 0x3b32, 0x22bc, 0x3466, 0x3447, 0x3896, 0x31b7, 0x3b22, 0x383a, 0x3623, 0x38f8, 0x3552, 0x3a55, 0x29c5, 0x34bb, 0x3663, 0x2c7b, 0x378d, 0x250c, 0x3ac9, 0x39c4, 0x378d, 0x39d2, 0x39a9, 0x379f, 0x3473, 0x2db0, 0x3993, 0x3ad3, 0x3494, 0x39ae, 0x36d2, 0x397c, 0x39c9, 0x3adc, 0x359f, 0x2c2f, 0x3b0d, 0x3595, 0x3687, 0x39b3, 0x34e4, 0x3af6, 0x2f71, 0x39af, 0x3b28, 0x38fe, 0x381d, 0x28ef, 0x3abc, 0x3723, 0x3b6c, 0x381e, 0x3442, 0x3b90, 0x39cc, 0x39c5, 0x3654, 0x38ac, 0x1b4d, 0x391f, 0x38d2, 0x3ac7, 0x385a, 0x322c, 0x39e6, 0x289c, 0x3786, -0x3b5f, 0x37c4, 0x3906, 0x3069, 0x3478, 0x383c, 0x3a34, 0x3a85, 0x33b3, 0x3be6, 0x3a71, 0x33ac, 0x3a77, 0x3b21, 0x3b7d, 0x3957, 0x3814, 0x39b2, 0x3504, 0x387f, 0x37c6, 0x39e0, 0x39f1, 0x393b, 0x2fe0, 0x3806, 0x2d6e, 0x37a5, 0x3069, 0x3831, 0x3959, 0x3363, 0x2d3a, 0x3980, 0x35ec, 0x3a3c, 0x389c, 0x23eb, 0x3a24, 0x30fa, 0x3040, 0x38b4, 0x3b7b, 0x381f, 0x3a66, 0x246e, 0x3b37, 0x30c1, 0x38a5, 0x387e, 0x34aa, 0x362a, 0x3556, 0x2a52, 0x3445, 0x3a9b, 0x2986, 0x38d2, 0x3513, 0x3bca, 0x39fa, 0x303b, 0x31cc, 0x3414, 0x3b16, 0x3a43, 0x2e2c, 0x3a29, 0x3996, 0x3973, 0x39b3, 0x36dc, 0x2761, 0x32a1, 0x3815, 0x3708, 0x38fa, 0x38cb, 0x36d3, 0x39c8, 0x266c, 0x3b60, 0x33cf, 0x3be3, 0x3854, 0x34c0, 0x34d3, 0x39ac, 0x37ad, 0x2fcb, 0x3966, 0x31a2, 0x363f, 0x3434, 0x381e, 0x3a53, -0x3795, 0x38cd, 0x3c00, 0x393c, 0x38af, 0x3b72, 0x37c4, 0x3b4f, 0x30b0, 0x36fd, 0x377b, 0x38f2, 0x371b, 0x3ada, 0x2edd, 0x3782, 0x33a2, 0x3a25, 0x38ae, 0x3be0, 0x3a31, 0x32b2, 0x3323, 0x3b1f, 0x39fc, 0x3986, 0x3b38, 0x3881, 0x3a9d, 0x3936, 0x3946, 0x3159, 0x3504, 0x3792, 0x3547, 0x28ff, 0x3449, 0x3214, 0x313f, 0x3866, 0x3a59, 0x3b06, 0x2e51, 0x2759, 0x342e, 0x3726, 0x3473, 0x37ea, 0x3b1d, 0x3be8, 0x346d, 0x3b73, 0x38c3, 0x296c, 0x33b2, 0x34a7, 0x3af5, 0x3284, 0x359c, 0x384d, 0x2ff7, 0x3337, 0x339b, 0x30e4, 0x3001, 0x3b02, 0x2ddf, 0x3997, 0x320c, 0x3af9, 0x2c92, 0x37e8, 0x3b5d, 0x3132, 0x3860, 0x396b, 0x39fd, 0x38f3, 0x3968, 0x32e8, 0x3523, 0x395b, 0x2e01, 0x37b9, 0x3b53, 0x3b37, 0x398e, 0x389b, 0x3586, 0x37d6, 0x3976, 0x3785, 0x3b0c, 0x3975, 0x39e2, 0x3bb5, -0x3675, 0x343a, 0x38d9, 0x392e, 0x3b61, 0x35db, 0x3527, 0x3a75, 0x3a1e, 0x36bd, 0x3af7, 0x2dae, 0x3b77, 0x2fe7, 0x3a80, 0x3745, 0x3a6e, 0x3748, 0x37ad, 0x3492, 0x3a82, 0x35db, 0x2e6a, 0x34bf, 0x3984, 0x3aff, 0x3a9a, 0x2720, 0x3786, 0x3475, 0x3842, 0x36ce, 0x387f, 0x3875, 0x292c, 0x35b8, 0x3ac0, 0x39f1, 0x3537, 0x3920, 0x3a93, 0x2a40, 0x2c60, 0x39b0, 0x3559, 0x3989, 0x3670, 0x33ef, 0x36e4, 0x3ac3, 0x3802, 0x35b3, 0x36e9, 0x34b6, 0x3911, 0x35f1, 0x3591, 0x3a96, 0x39df, 0x3892, 0x3582, 0x3a67, 0x39cf, 0x3bf8, 0x3587, 0x2adb, 0x36f3, 0x3a9f, 0x34c5, 0x31ab, 0x3481, 0x26aa, 0x3929, 0x3749, 0x3764, 0x3743, 0x39db, 0x2850, 0x363d, 0x386f, 0x349c, 0x3ae1, 0x3834, 0x3480, 0x305d, 0x3bca, 0x3418, 0x3580, 0x3897, 0x3831, 0x3898, 0x39aa, 0x372b, 0x3b98, 0x3b92, 0x3adc, -0x355f, 0x3915, 0x21ad, 0x3a2a, 0x3803, 0x3af4, 0x34e4, 0x37b0, 0x399e, 0x33d8, 0x3904, 0x1c2b, 0x3831, 0x3b39, 0x3a0e, 0x37dd, 0x3bfb, 0x3a0f, 0x3623, 0x3beb, 0x39d0, 0x335e, 0x38e5, 0x3810, 0x37df, 0x2c84, 0x30bc, 0x3013, 0x342f, 0x285f, 0x3855, 0x3b81, 0x3a35, 0x33e5, 0x3a11, 0x3bab, 0x32df, 0x303d, 0x3973, 0x340f, 0x3aba, 0x34d9, 0x3924, 0x3b84, 0x3a67, 0x3980, 0x3612, 0x3b64, 0x39e3, 0x3ac3, 0x3350, 0x3865, 0x24d5, 0x3bac, 0x3594, 0x38d7, 0x3b53, 0x3b76, 0x39ee, 0x36de, 0x3a1c, 0x38ce, 0x25cc, 0x3847, 0x3b28, 0x34c5, 0x3a7e, 0x3afb, 0x3361, 0x2266, 0x37d1, 0x3886, 0x306b, 0x3b12, 0x3a8b, 0x2aad, 0x3855, 0x35b0, 0x35c4, 0x3b4e, 0x36fa, 0x396a, 0x26f4, 0x381a, 0x2f06, 0x2c3e, 0x3116, 0x3adf, 0x358b, 0x2f88, 0x3adf, 0x3842, 0x3a1a, 0x3b35, 0x291a, 0x2e9d, -0x32d1, 0x3946, 0x3a50, 0x398e, 0x2970, 0x3122, 0x286c, 0x3b80, 0x3bbe, 0x38ad, 0x3b51, 0x385a, 0x38c4, 0x3af0, 0x352a, 0x38e9, 0x3a80, 0x28e3, 0x395e, 0x34aa, 0x3973, 0x3492, 0x398c, 0x327b, 0x39d4, 0x3995, 0x3740, 0x2742, 0x388f, 0x3a24, 0x3a2f, 0x38d3, 0x384e, 0x3abd, 0x3bb8, 0x3814, 0x394b, 0x3aa0, 0x3af2, 0x37ad, 0x32aa, 0x3aa3, 0x3aa6, 0x3ac5, 0x2fbf, 0x3759, 0x3848, 0x32c6, 0x3459, 0x38af, 0x3980, 0x24db, 0x3ac5, 0x377c, 0x1d75, 0x36e9, 0x389b, 0x314e, 0x344f, 0x30ff, 0x3921, 0x3b72, 0x3884, 0x3836, 0x3af2, 0x35b8, 0x3116, 0x38ce, 0x3ae6, 0x3b16, 0x3bca, 0x373b, 0x3a8e, 0x3872, 0x2d2a, 0x344d, 0x3b2e, 0x3608, 0x320e, 0x2aa7, 0x361a, 0x2dc4, 0x3b4f, 0x2d4d, 0x34b3, 0x34c0, 0x393b, 0x3a76, 0x372f, 0x3637, 0x2b5c, 0x3a38, 0x367b, 0x2b1e, 0x344e, 0x385e, -0x3ab6, 0x38a2, 0x3674, 0x2d4d, 0x3bad, 0x3b44, 0x35ed, 0x38a7, 0x325e, 0x3b29, 0x3b65, 0x2f0f, 0x3a30, 0x3b4c, 0x3843, 0x3a21, 0x2e34, 0x3180, 0x3ae0, 0x3a02, 0x3a82, 0x2ad9, 0x3826, 0x3a94, 0x2f66, 0x217b, 0x3b82, 0x3839, 0x3263, 0x3a1b, 0x2958, 0x3b26, 0x3a3e, 0x3039, 0x3bd7, 0x2057, 0x3b99, 0x38ac, 0x372d, 0x344e, 0x31fa, 0x3bf8, 0x394e, 0x3acb, 0x3b88, 0x38cf, 0x3582, 0x3a2b, 0x370e, 0x34b5, 0x36d2, 0x3ae3, 0x38b9, 0x37a5, 0x3979, 0x3204, 0x3ba2, 0x3591, 0x3a00, 0x3944, 0x1b7f, 0x271e, 0x38a2, 0x38ad, 0x3ade, 0x3008, 0x34c9, 0x3269, 0x31da, 0x3bad, 0x3587, 0x3bea, 0x3512, 0x2deb, 0x3825, 0x3488, 0x30aa, 0x3baf, 0x378f, 0x39d9, 0x3ac4, 0x3427, 0x371e, 0x3b2d, 0x3138, 0x3654, 0x3815, 0x3b7c, 0x38cf, 0x382e, 0x1cdb, 0x2fa4, 0x3783, 0x383c, 0x37d1, 0x2df8, -0x335b, 0x3071, 0x367f, 0x3be1, 0x3a1b, 0x3afd, 0x390b, 0x3b17, 0x3861, 0x3adb, 0x3a04, 0x3859, 0x3a95, 0x37b6, 0x37ff, 0x3400, 0x34e3, 0x367d, 0x3ad0, 0x3506, 0x3b50, 0x33e6, 0x3a42, 0x3b3c, 0x382a, 0x3bf8, 0x3be8, 0x3917, 0x39ec, 0x265b, 0x3b11, 0x3b2a, 0x3aef, 0x35f9, 0x3a2b, 0x371d, 0x32f8, 0x338b, 0x3bc2, 0x399e, 0x3aa8, 0x34b1, 0x182c, 0x3691, 0x39c5, 0x359a, 0x3b2b, 0x38f9, 0x3953, 0x362a, 0x3a8e, 0x363d, 0x3b96, 0x380a, 0x37fc, 0x3694, 0x2fa9, 0x35d1, 0x3699, 0x2e36, 0x3922, 0x38b6, 0x2d05, 0x3161, 0x353e, 0x371f, 0x3913, 0x39b6, 0x35d6, 0x3b29, 0x395c, 0x3677, 0x3ac8, 0x35e1, 0x3b02, 0x3479, 0x321a, 0x2a17, 0x2890, 0x388a, 0x3109, 0x3a45, 0x301c, 0x349a, 0x31a2, 0x3b19, 0x2eb4, 0x2eff, 0x353c, 0x39f5, 0x396c, 0x3ae4, 0x3873, 0x3bf6, 0x3887, 0x3507, -0x34d1, 0x35d3, 0x3ad2, 0x3759, 0x2918, 0x36eb, 0x39bd, 0x3b25, 0x31b8, 0x35eb, 0x2999, 0x3b69, 0x3829, 0x3385, 0x3bf4, 0x3a9b, 0x3aa7, 0x319a, 0x3824, 0x38e6, 0x38aa, 0x375d, 0x3188, 0x34eb, 0x37bc, 0x3375, 0x367b, 0x33df, 0x34f6, 0x38b3, 0x38e3, 0x3010, 0x3a05, 0x2e64, 0x336a, 0x3466, 0x3962, 0x3640, 0x2a17, 0x31c5, 0x3815, 0x3472, 0x3b2c, 0x3b79, 0x32d7, 0x3656, 0x2a54, 0x3409, 0x3887, 0x34e6, 0x30ea, 0x2851, 0x39cc, 0x3153, 0x38af, 0x3868, 0x3ad3, 0x3853, 0x38a7, 0x3583, 0x31e3, 0x3284, 0x2909, 0x3ae9, 0x3abe, 0x310b, 0x3564, 0x33cb, 0x3999, 0x37bc, 0x352c, 0x32f7, 0x3522, 0x36de, 0x340c, 0x37f7, 0x3839, 0x39f8, 0x2b3b, 0x3ada, 0x3258, 0x3764, 0x395c, 0x374b, 0x3bbc, 0x35fd, 0x306c, 0x3645, 0x3b20, 0x3a18, 0x2c2b, 0x39e2, 0x3a43, 0x3934, 0x34b5, 0x390a, -0x3bc0, 0x358b, 0x3817, 0x3b77, 0x36de, 0x3868, 0x3b93, 0x2d8d, 0x3607, 0x37f9, 0x39b4, 0x3bc5, 0x3997, 0x33e1, 0x328b, 0x226a, 0x3aab, 0x390e, 0x34ee, 0x34ae, 0x3645, 0x3a4d, 0x31db, 0x3576, 0x38ed, 0x39d5, 0x2974, 0x3982, 0x34ca, 0x3839, 0x3b7a, 0x2e37, 0x2045, 0x3a1b, 0x3bf9, 0x2f9a, 0x2aba, 0x3944, 0x3a82, 0x24d0, 0x38fa, 0x2c8f, 0x3a4c, 0x391f, 0x39d2, 0x3154, 0x3a64, 0x3902, 0x398d, 0x3921, 0x3800, 0x3443, 0x2fb9, 0x3aa5, 0x3973, 0x2a30, 0x367d, 0x3850, 0x3a1e, 0x3b86, 0x34eb, 0x383c, 0x37b1, 0x2db1, 0x30d7, 0x347a, 0x2b61, 0x3441, 0x288b, 0x3bea, 0x2a52, 0x29de, 0x3a65, 0x37c2, 0x3370, 0x39e2, 0x3850, 0x3691, 0x2f33, 0x39cb, 0x3bbd, 0x35fe, 0x3696, 0x3bbe, 0x3451, 0x384e, 0x2f01, 0x380e, 0x3810, 0x35e9, 0x2c3b, 0x34bd, 0x3905, 0x3505, 0x36e9, 0x3b23, -0x38d5, 0x38b3, 0x2e40, 0x39da, 0x3459, 0x39b9, 0x385c, 0x3a5a, 0x37d8, 0x37bb, 0x3549, 0x3ba9, 0x3a79, 0x3b72, 0x2c21, 0x3576, 0x3bd3, 0x3ae5, 0x3b63, 0x3979, 0x319a, 0x3bb2, 0x39e7, 0x328c, 0x3af2, 0x34d2, 0x32c2, 0x38d1, 0x3831, 0x3a23, 0x3a51, 0x3646, 0x38be, 0x2f1b, 0x36a5, 0x3891, 0x38f0, 0x3a6a, 0x3249, 0x2f87, 0x36d8, 0x3a85, 0x2870, 0x369e, 0x3a6a, 0x34d5, 0x3419, 0x3b3e, 0x38d2, 0x3a7f, 0x3938, 0x38e4, 0x3332, 0x39db, 0x3933, 0x3a2a, 0x38cc, 0x3bae, 0x3b1a, 0x3837, 0x3ba2, 0x3582, 0x3639, 0x392a, 0x30d0, 0x3966, 0x3b0f, 0x35a7, 0x3962, 0x3b6d, 0x3503, 0x38e2, 0x370e, 0x3341, 0x3694, 0x3a68, 0x3879, 0x3661, 0x377f, 0x38fc, 0x38d5, 0x3238, 0x3a69, 0x32d0, 0x3a61, 0x388f, 0x3591, 0x3b25, 0x3818, 0x304b, 0x39f0, 0x3826, 0x399e, 0x332c, 0x3496, 0x3822, -0x3a10, 0x3839, 0x3b02, 0x248f, 0x39a8, 0x31fa, 0x3964, 0x34e5, 0x2abc, 0x3a82, 0x3440, 0x321b, 0x3859, 0x38f1, 0x3845, 0x3bbd, 0x3b28, 0x3410, 0x3855, 0x3acb, 0x3afe, 0x38fb, 0x341d, 0x3713, 0x3281, 0x387c, 0x3b3a, 0x388d, 0x34f1, 0x33b1, 0x35df, 0x3a40, 0x3b5a, 0x37a8, 0x3997, 0x32c0, 0x38e1, 0x287f, 0x30ed, 0x398d, 0x2fc0, 0x399c, 0x34b5, 0x3b4e, 0x3a20, 0x39ed, 0x2dfe, 0x3b53, 0x3529, 0x3b5d, 0x39b7, 0x3469, 0x35fb, 0x3af6, 0x3b95, 0x39bd, 0x39be, 0x3bad, 0x308a, 0x380a, 0x3851, 0x3810, 0x3866, 0x3adb, 0x3b96, 0x3118, 0x3a45, 0x36ab, 0x3250, 0x38f5, 0x360e, 0x3ac2, 0x30d1, 0x3a5f, 0x3a09, 0x3550, 0x3ba9, 0x360d, 0x3ad6, 0x3a1f, 0x376e, 0x308b, 0x3908, 0x38ac, 0x348a, 0x3ba4, 0x3704, 0x37ef, 0x35ea, 0x3836, 0x395a, 0x2c3d, 0x382e, 0x360a, 0x321a, 0x3967, -0x26ea, 0x3845, 0x344c, 0x3b46, 0x33ca, 0x2f66, 0x220e, 0x39c5, 0x35d6, 0x3af3, 0x39d0, 0x38f7, 0x3082, 0x3924, 0x3198, 0x3a81, 0x3a45, 0x3945, 0x368d, 0x3a76, 0x3a14, 0x3145, 0x2430, 0x37f0, 0x3af8, 0x31d6, 0x36ab, 0x3453, 0x2dcc, 0x359c, 0x3699, 0x37b4, 0x399c, 0x375e, 0x386a, 0x3927, 0x38c2, 0x33ac, 0x32de, 0x3ba4, 0xece, 0x398a, 0x3b1f, 0x3583, 0x3b41, 0x340f, 0x3bef, 0x3777, 0x3acd, 0x3818, 0x3ad3, 0x385d, 0x38f7, 0x399c, 0x38a1, 0x3a11, 0x38ad, 0x2fc0, 0x32c3, 0x3293, 0x3499, 0x3757, 0x28a6, 0x3b3d, 0x3b9b, 0x37a1, 0x3bcd, 0x3a17, 0x3b46, 0x39b0, 0x2cee, 0x346a, 0x3b63, 0x3855, 0x37a4, 0x36dc, 0x3baa, 0x20a7, 0x3b32, 0x2a40, 0x3ac4, 0x3855, 0x35cb, 0x3bcc, 0x3a66, 0x38bd, 0x213a, 0x2be8, 0x2793, 0x32a2, 0x3a2c, 0x3aae, 0x384b, 0x3a00, 0x375d, 0x35e2, -0x3938, 0x3629, 0x398a, 0x263c, 0x37f1, 0x39ed, 0x332c, 0x3879, 0x38df, 0x2cc1, 0x38cb, 0x398a, 0x3935, 0x3607, 0x2791, 0x3a21, 0x3590, 0x306b, 0x3720, 0x3abb, 0x3a6a, 0x2a36, 0x388b, 0x2c62, 0x393e, 0x36bc, 0x37be, 0x39bd, 0x39db, 0x35d8, 0x3b2d, 0x39ba, 0x33a4, 0x3a4b, 0x2f93, 0x38ca, 0x325d, 0x3974, 0x3116, 0x3bd6, 0x3630, 0x3888, 0x3a58, 0x3a1d, 0x3868, 0x38c5, 0x316f, 0x353d, 0x2a18, 0x3994, 0x399a, 0x2e05, 0x3b8b, 0x32f3, 0x3242, 0x2e23, 0x3191, 0x3ab7, 0x2aaf, 0x3a7d, 0x3726, 0x3b42, 0x3abc, 0x372b, 0x3a73, 0x390e, 0x38d0, 0x38e2, 0x39f9, 0x2fae, 0x3372, 0x3370, 0x3699, 0x3851, 0x3430, 0x3559, 0x3b7c, 0x3671, 0x35dd, 0x2d3e, 0x35c8, 0x2260, 0x3ab4, 0x3b38, 0x3327, 0x33df, 0x3a01, 0x3368, 0x361e, 0x3baa, 0x3990, 0x382b, 0x38fb, 0x35b9, 0x3921, 0x3918, -0x38ea, 0x349a, 0x3123, 0x2d03, 0x356f, 0x3735, 0x3b50, 0x355b, 0x3b23, 0x3a35, 0x30a3, 0x3568, 0x365c, 0x3328, 0x3ac5, 0x323f, 0x271b, 0x24a7, 0x369d, 0x32a5, 0x39e7, 0x37dc, 0x3a48, 0x36a7, 0x3037, 0x39b8, 0x35b5, 0x320c, 0x29c0, 0x3770, 0x3893, 0x384c, 0x3888, 0x399a, 0x3a4e, 0x31e7, 0x397d, 0x3876, 0x3425, 0x3929, 0x3734, 0x2cb9, 0x39e8, 0x399d, 0x27d8, 0x3a89, 0x3198, 0x35ee, 0x2576, 0x31a6, 0x398b, 0x31cb, 0x2e6d, 0x386a, 0x3b4e, 0x3882, 0x3a5b, 0x3797, 0x38f0, 0x3229, 0x3849, 0x3874, 0x2cb5, 0x3b07, 0x3b6f, 0x3b29, 0x3bdf, 0x34fd, 0x3502, 0x3ae1, 0x39ac, 0x37ef, 0x3bbc, 0x39f7, 0x3503, 0x3bf0, 0x34da, 0x3bb9, 0x3811, 0x3ac2, 0x37e5, 0x37a9, 0x38a2, 0x3ba7, 0x3862, 0x369c, 0x35f7, 0x388b, 0x3aa8, 0x335b, 0x3a6f, 0x3885, 0x36c6, 0x38a9, 0x396d, 0x34ec, -0x3a09, 0x3869, 0x34bb, 0x3761, 0x36a1, 0x3852, 0x3849, 0x3659, 0x3805, 0x3a89, 0x3539, 0x35eb, 0x3439, 0x3863, 0x3a88, 0x38e0, 0x388c, 0x351c, 0x350e, 0x3383, 0x31ad, 0x389e, 0x39a5, 0x363f, 0x3b6a, 0x30f5, 0x3a4f, 0x3669, 0x3ae5, 0x3950, 0x2e12, 0x3801, 0x3af3, 0x393f, 0x377b, 0x390c, 0x34ff, 0x30f2, 0x271a, 0x37a5, 0x289e, 0x39b6, 0x3bf3, 0x389f, 0x3a33, 0x3bf0, 0x39c0, 0x392a, 0x394d, 0x349c, 0x3b62, 0x327a, 0x377b, 0x3590, 0x397a, 0x3a04, 0x3247, 0x329c, 0x2d99, 0x3b76, 0x33ff, 0x3456, 0x32c3, 0x35b6, 0x3282, 0x32b5, 0x3a23, 0x39e0, 0x3767, 0x3600, 0x38d6, 0x3a7c, 0x3515, 0x36bc, 0x381a, 0x3bd6, 0x3baf, 0x3811, 0x39e0, 0x22ac, 0x391b, 0x29be, 0x39aa, 0x3329, 0x3a6f, 0x3bcb, 0x3118, 0x3bbf, 0x3674, 0x3918, 0x30cd, 0x3924, 0x3a6b, 0x3a8b, 0x34b5, 0x39cc, -0x2cde, 0x3945, 0x37ff, 0x3115, 0x3a3b, 0x3ae1, 0x3958, 0x28f5, 0x3b19, 0x33ff, 0x3bc4, 0x3476, 0x3886, 0x3511, 0x342b, 0x3b18, 0x36e9, 0x3ab9, 0x2423, 0x32e2, 0x3623, 0x38b4, 0x371b, 0x3bc0, 0x3b8d, 0x3366, 0x384f, 0x3a1a, 0x3a09, 0x3918, 0x3959, 0x3652, 0x3baa, 0x3685, 0x38b7, 0x378b, 0x32e9, 0x3a53, 0x3405, 0x3bc3, 0x34b9, 0x339d, 0x3819, 0x2fe8, 0x3bdb, 0x3421, 0x3575, 0x3796, 0x207e, 0x3b04, 0x38a8, 0x3b69, 0x35f1, 0x389a, 0x37ee, 0x38c3, 0x34db, 0x35a5, 0x3b83, 0x36a9, 0x2883, 0x3955, 0x3aa0, 0x334a, 0x34a9, 0x3772, 0x312a, 0x3bde, 0x3338, 0x3601, 0x3125, 0x3a73, 0x316c, 0x348e, 0x3bef, 0x3b52, 0x343b, 0x249c, 0x3a68, 0x3905, 0x3b4d, 0x1cf8, 0x356a, 0x3499, 0x3385, 0x3b44, 0x2aaf, 0x28a1, 0x3199, 0x379d, 0x3832, 0x2da7, 0x3a9e, 0x3bc7, 0x34a2, 0x2c5a, -0x3bde, 0x3822, 0x3715, 0x345e, 0x38c1, 0x3315, 0x38d1, 0x2da9, 0x37f6, 0x38d3, 0x3beb, 0x3ba6, 0x343f, 0x3af0, 0x3b0e, 0x2bd6, 0x3b3b, 0x3a5a, 0x3930, 0x3af7, 0x3504, 0x31a5, 0x2918, 0x3853, 0x214f, 0x3b67, 0x3b64, 0x34a9, 0x3894, 0x3a87, 0x3ad1, 0x3a09, 0x38a2, 0x39da, 0x3a16, 0x3485, 0x36bf, 0x3ada, 0x31eb, 0x3b8c, 0x2de3, 0x3914, 0x39d4, 0x399f, 0x3968, 0x3200, 0x3631, 0x3bd6, 0x390b, 0x312d, 0x3b94, 0x3bf1, 0x38ee, 0x378b, 0x29f3, 0x3810, 0x2f19, 0x3808, 0x389c, 0x3a3a, 0x376c, 0x3b58, 0x346d, 0x2e32, 0x3848, 0x3bec, 0x3779, 0x3237, 0x37d2, 0x3963, 0x37a5, 0x3993, 0x3495, 0x3679, 0x2c1d, 0x3add, 0x3722, 0x305d, 0x38a0, 0x3851, 0x3a01, 0x291b, 0x3447, 0x35f7, 0x3617, 0x3928, 0x2e5d, 0x1f75, 0x3b78, 0x12cc, 0x39db, 0x39be, 0x3b11, 0x3b5a, 0x2fae, 0x3696, -0x3b26, 0x3229, 0x31d8, 0x3b61, 0x290e, 0x3b7d, 0x3bf3, 0x38cc, 0x3a78, 0x35f8, 0x3b7d, 0x3883, 0x3b43, 0x3571, 0x3991, 0x3bc3, 0x3095, 0x350f, 0x39bf, 0x3823, 0x370c, 0x2aa8, 0x3473, 0x33da, 0x38c7, 0x3ab7, 0x3b3d, 0x20f4, 0x3b12, 0x3997, 0x3bfe, 0x3479, 0x3a5f, 0x3550, 0x3af7, 0x34f2, 0x382f, 0x3109, 0x3287, 0x3a6f, 0x3b41, 0x3919, 0x2a88, 0x3b07, 0x3097, 0x398d, 0x35a7, 0x3921, 0x332f, 0x3b65, 0x39c2, 0x3aea, 0x3a54, 0x3996, 0x38c1, 0x396c, 0x3a06, 0x3831, 0x33a9, 0x3457, 0x3a8f, 0x3b43, 0x310d, 0x38e9, 0x36b8, 0x392c, 0x36b7, 0x323f, 0x2e02, 0x3b91, 0x36ef, 0x356b, 0x35e9, 0x339f, 0x39ce, 0x3ba8, 0x31bf, 0x2d8d, 0x3b09, 0x2dd7, 0x3960, 0x3b44, 0x37df, 0x3814, 0x3783, 0x39e7, 0x3716, 0x397f, 0x3429, 0x35ef, 0x3a37, 0x3743, 0x342a, 0x33cf, 0x184a, 0x3829, -0x384e, 0x3ade, 0x35c2, 0x36b9, 0x3429, 0x3abf, 0x3ac6, 0x3a36, 0x2108, 0x38ef, 0x37ff, 0x39fe, 0x3815, 0x3935, 0x3ab5, 0x351d, 0x3add, 0x3b57, 0x37ad, 0x2cc3, 0x3ace, 0x3ac4, 0x37ac, 0x3904, 0x3951, 0x32e7, 0x3337, 0x270b, 0x3a71, 0x3b9c, 0x3808, 0x3033, 0x34be, 0x3742, 0x3a39, 0x27f7, 0x26a2, 0x3b34, 0x35e5, 0x3a0f, 0x3939, 0x365f, 0x3853, 0x3b36, 0x364e, 0x3334, 0x1c8a, 0x330f, 0x3b6a, 0x3a34, 0x37fc, 0x353d, 0x3922, 0x387e, 0x390d, 0x3950, 0x37fc, 0x3946, 0x3afd, 0x342b, 0x2a9d, 0x3b85, 0x32b2, 0x3afc, 0x39a0, 0x3a38, 0x3182, 0x3aac, 0x3840, 0x3b40, 0x3703, 0x2f71, 0x3992, 0x3a53, 0x3a8a, 0x370c, 0x3101, 0x3826, 0x3b5b, 0x39c0, 0x3a46, 0x37d7, 0x3751, 0x2ab9, 0x342b, 0x39e0, 0x36fc, 0x3a8a, 0x1fb5, 0x355b, 0x38dc, 0x3b4d, 0x3be0, 0x3793, 0x307f, 0x3bae, -0x33ae, 0x39cc, 0x3a09, 0x3b3a, 0x34bf, 0x3b1c, 0x35cf, 0x3aa3, 0x3504, 0x381b, 0x3a9d, 0x3703, 0x3bce, 0x3b36, 0x35ea, 0x3503, 0x3687, 0x2661, 0x3bff, 0x2d04, 0x3bee, 0x3841, 0x3074, 0x309f, 0x35a3, 0x34ca, 0x36d5, 0x3640, 0x37e6, 0x37c9, 0x3a6d, 0x34fd, 0x3918, 0x3aa0, 0x3762, 0x34e0, 0x3527, 0x3780, 0x341d, 0x385a, 0x3af7, 0x3bf7, 0x3926, 0x3617, 0x3615, 0x2a99, 0x3649, 0x3a98, 0x3613, 0x2e24, 0x3809, 0x35b6, 0x3a63, 0x3bdd, 0x3825, 0x38fb, 0x2ed9, 0x39a5, 0x2d38, 0x364c, 0x3a63, 0x397c, 0x35e5, 0x3ad5, 0x31a7, 0x3979, 0x2873, 0x2e5c, 0x3abb, 0x39b6, 0x3b74, 0x2ce6, 0x35ab, 0x3920, 0x2fee, 0x308b, 0x229f, 0x3547, 0x36d3, 0x359c, 0x3814, 0x34de, 0x3a39, 0x2ed6, 0x3bd6, 0x353d, 0x3afb, 0x3b17, 0x3733, 0x16f0, 0x3011, 0x38b2, 0x387a, 0x3984, 0x3747, 0x394d, -0x34f7, 0x3755, 0x3960, 0x355f, 0x3765, 0x38fa, 0x3be8, 0x33ca, 0x351f, 0x31eb, 0x397e, 0x1412, 0x3022, 0x3467, 0x39d7, 0x3a60, 0x2c85, 0x3241, 0x3a90, 0x3926, 0x397a, 0x38f1, 0x3996, 0x3a51, 0x3ad5, 0x2e68, 0x38a9, 0x3663, 0x399f, 0x35f3, 0x3b4c, 0x34aa, 0x3b6b, 0x32af, 0x3aa8, 0x3a22, 0x38b6, 0x34cd, 0x2c81, 0x3945, 0x37a9, 0x3a20, 0x2523, 0x3ad8, 0x29ca, 0x3b63, 0x3a69, 0x37dc, 0x323b, 0x3898, 0x38e3, 0x3637, 0x394a, 0x2d82, 0x392c, 0x3993, 0x35b8, 0x3810, 0x399e, 0x3672, 0x39fa, 0x36c2, 0x351f, 0x3797, 0x244f, 0x3b02, 0x3304, 0x385f, 0x3312, 0x394e, 0x396b, 0x28bf, 0x3885, 0x39e2, 0x347e, 0x33ad, 0x3526, 0x3a5f, 0x3b90, 0x3b1e, 0x2572, 0x3a9c, 0x30ec, 0x393e, 0x3a9b, 0x357a, 0x394b, 0x3449, 0x3545, 0x2fee, 0x3702, 0x362b, 0x3bd4, 0x27d9, 0x2d6d, 0x3080, -0x30fb, 0x382e, 0x387a, 0x3b71, 0x355f, 0x39cc, 0x33c0, 0x2f57, 0x3b2f, 0x3b79, 0x3aea, 0x3b17, 0x3b46, 0x3844, 0x380d, 0x30a7, 0x2348, 0x381f, 0x2c21, 0x3a3b, 0x2cf6, 0x3523, 0x3835, 0x1b53, 0x3ad3, 0x3b18, 0x372a, 0x39a5, 0x37e6, 0x39bd, 0x2cfd, 0x395d, 0x2ea2, 0x39cb, 0x3bdc, 0x36db, 0x3b48, 0x3acc, 0x3439, 0x34c8, 0x3361, 0x3b5b, 0x324a, 0x35ec, 0x2c87, 0x395e, 0x35fe, 0x37a4, 0x361f, 0x315f, 0x305e, 0x35f7, 0x3541, 0x3729, 0x37ed, 0x31b7, 0x3a9a, 0x34ee, 0x376c, 0x3a7a, 0x389e, 0x30b3, 0x328e, 0x3811, 0x36f5, 0x35d9, 0x37f9, 0x3bcf, 0x3a0d, 0x3658, 0x3ba9, 0x38df, 0x3997, 0x3a6d, 0x375e, 0x32f7, 0x382e, 0x3b0d, 0x38ed, 0x346a, 0x3b8a, 0x2da9, 0x359c, 0x3574, 0x3840, 0x3333, 0x3a5b, 0x358d, 0x39f3, 0x385d, 0x2959, 0x3908, 0x3b84, 0x3a40, 0x2f0d, 0x35e0, -0x2066, 0x3940, 0x3b3b, 0x320f, 0x37cc, 0x377a, 0x3b22, 0x36da, 0x3aa0, 0x3476, 0x34b4, 0x3941, 0x36f4, 0x391e, 0x3a8d, 0x32ca, 0x3853, 0x3af6, 0x34d2, 0x36a6, 0x33f1, 0x39a0, 0x3790, 0x3440, 0x390f, 0x3a83, 0x399d, 0x367d, 0x2b8e, 0x3575, 0x3a1b, 0x3a7c, 0x3a6c, 0x2eb2, 0x3a27, 0x369b, 0x3a45, 0x38a4, 0x346f, 0x3a8c, 0x307a, 0x36d0, 0x39be, 0x39ae, 0x34ee, 0x2ae7, 0x3559, 0x3858, 0x3705, 0x38eb, 0x39fa, 0x3565, 0x3285, 0x392a, 0x394a, 0x300a, 0x39f6, 0x2e3e, 0x33dc, 0x39c7, 0x295d, 0x3b80, 0x3888, 0x3760, 0x3bfb, 0x396f, 0x3729, 0x386d, 0x39bb, 0x2d93, 0x387a, 0x3b12, 0x3b2e, 0x3bdc, 0x33ec, 0x383d, 0x38d0, 0x3373, 0x3bb0, 0x3987, 0x3b2b, 0x3097, 0x3884, 0x3b20, 0x39bf, 0x3360, 0x2b53, 0x370a, 0x2f02, 0x38ab, 0x24ee, 0x3947, 0x3927, 0x29d7, 0x3b8d, 0x3b8b, -0x3a58, 0x292b, 0x3604, 0x398f, 0x321b, 0x341f, 0x3909, 0x3901, 0x3b49, 0x32ee, 0x3940, 0x3b77, 0x31f0, 0x344e, 0x380c, 0x36b1, 0x3a4e, 0x3638, 0x3922, 0x3864, 0x393b, 0x3903, 0x302f, 0x2ff2, 0x30b7, 0x3997, 0x385b, 0x3bbf, 0x3b39, 0x38de, 0x3a69, 0x3b51, 0x3aed, 0x387b, 0x269d, 0x39c7, 0x3a99, 0x3beb, 0x3672, 0x33ee, 0x200e, 0x3834, 0x34f7, 0x3971, 0x355a, 0x31fd, 0x2531, 0x385f, 0x3bf2, 0x2686, 0x364a, 0x358a, 0x2e99, 0x2f89, 0x3809, 0x3924, 0x39ee, 0x3990, 0x3987, 0x3972, 0x3813, 0x3840, 0x34dd, 0x374a, 0x3250, 0x2f4c, 0x35d9, 0x2991, 0x3b3f, 0x362e, 0x3455, 0x2abb, 0x3a2d, 0x3b57, 0x3567, 0x2cc0, 0x2d0d, 0x3be3, 0x2f3e, 0x3a9f, 0x3253, 0x34e8, 0x3712, 0x334e, 0x3ab9, 0x3bae, 0x3a1d, 0x3a5c, 0x3b96, 0x3adf, 0x3088, 0x3a8e, 0x35f3, 0x3795, 0x35d1, 0x3bb4, -0x3862, 0x3976, 0x3b9a, 0x3291, 0x3b5c, 0x3540, 0x2d00, 0x3702, 0x3519, 0x39dd, 0x3bff, 0x3560, 0x3642, 0x392c, 0x3a6f, 0x32ff, 0x32f2, 0x3836, 0x2d5f, 0x368d, 0x383b, 0x3abb, 0x2ec9, 0x3ada, 0x391a, 0x3811, 0x35d9, 0x3b90, 0x3aa3, 0x3149, 0x3b10, 0x3912, 0x3391, 0x318b, 0x22ed, 0x3a32, 0x3819, 0x39c9, 0x3865, 0x332e, 0x399b, 0x3aaa, 0x3b3e, 0x37b6, 0x35db, 0x3286, 0x3765, 0x2afe, 0x3b7a, 0x32b2, 0x38c9, 0x37d0, 0x3a6d, 0x3a3a, 0x3a9c, 0x364d, 0x3915, 0x36d5, 0x24fb, 0x35ed, 0x3abd, 0x3200, 0x3ae4, 0x3a0f, 0x3ac2, 0x33be, 0x3812, 0x3bae, 0x3969, 0x3237, 0x3bb0, 0x3681, 0x35c9, 0x37da, 0x2f15, 0x3362, 0x3b5c, 0x3a74, 0x315a, 0x3b44, 0x2f83, 0x3971, 0x3bfd, 0x3ab3, 0x35ae, 0x3a5a, 0x303d, 0x2a1d, 0x3a0c, 0x3bbe, 0x3365, 0x33df, 0x3521, 0x3bce, 0x3880, 0x3842, -0x3a15, 0x3835, 0x2ac7, 0x3640, 0x3864, 0x309d, 0x3934, 0x364d, 0x30f9, 0x3954, 0x34c0, 0x39a2, 0x36c1, 0x3a64, 0x2f3d, 0x338e, 0x3993, 0x34c0, 0x2c7e, 0x30a8, 0x3696, 0x2d67, 0x2017, 0x3757, 0x2ebc, 0x2c37, 0x3422, 0x36a8, 0x3a49, 0x364d, 0x3b0a, 0x3adc, 0x34f1, 0x3a15, 0x389b, 0x389b, 0x3557, 0x3542, 0x3a12, 0x38b4, 0x3a49, 0x38fd, 0x3a25, 0x3516, 0x3bc9, 0x3811, 0x1b72, 0x391e, 0x2ecb, 0x3a69, 0x3818, 0x342b, 0x3b44, 0x3912, 0x2ae6, 0x3bb1, 0x355e, 0x3182, 0x3793, 0x385b, 0x2983, 0x394d, 0x3021, 0x307c, 0x3419, 0x364f, 0x395f, 0x3395, 0x365d, 0x3a90, 0x3b4d, 0x3660, 0x35ad, 0x3b87, 0x3b40, 0x3919, 0x3800, 0x385c, 0x187b, 0x3b1e, 0x38c8, 0x38bf, 0x3844, 0x390b, 0x3672, 0x37df, 0x3a46, 0x3013, 0x30fd, 0x3a86, 0x36aa, 0x3a60, 0x39a7, 0x39b7, 0x37d2, 0x33e7, -0x2cde, 0x3a8d, 0x33d3, 0x2c74, 0x34c5, 0x2b02, 0x3ab0, 0x375d, 0x3a8f, 0x39c7, 0x340c, 0x3bc7, 0x39ae, 0x2ea6, 0x3b0b, 0x394b, 0x3823, 0x3504, 0x383a, 0x38f6, 0x382d, 0x3bda, 0x3a1b, 0x38c9, 0x35e2, 0x39f1, 0x38b9, 0x3281, 0x3bb3, 0x3156, 0x2c35, 0x3b28, 0x2cfe, 0x392a, 0x3908, 0x3a72, 0x2d0e, 0x3b20, 0x369d, 0x3bae, 0x2f9f, 0x3aac, 0x331f, 0x3ab7, 0x3999, 0x3980, 0x3b17, 0x39d3, 0x3609, 0x231d, 0x386c, 0x39b7, 0x2a32, 0x37b0, 0x350d, 0x2554, 0x33ee, 0x2c9a, 0x319a, 0x37d6, 0x347e, 0x3a54, 0x3903, 0x3aaa, 0x31fc, 0x33c9, 0x3988, 0x3ac7, 0x31b5, 0x354c, 0x3ba7, 0x342e, 0x3898, 0x3907, 0x3bc4, 0x36b6, 0x36fc, 0x3896, 0x3832, 0x33d8, 0x3af7, 0x38df, 0x3b8b, 0x2dc9, 0x29a0, 0x3b24, 0x34e6, 0x2d49, 0x34c2, 0x388e, 0x36cb, 0x2eff, 0x34fb, 0x3b91, 0x3be3, 0x39ed, -0x38fb, 0x3675, 0x36d9, 0x385b, 0x36ce, 0x3755, 0x354b, 0x3014, 0x3670, 0x3be2, 0x3af2, 0x3b6e, 0x345f, 0x2f8d, 0x3a55, 0x3919, 0x3ad3, 0x3388, 0x368a, 0x3bbf, 0x2b8e, 0x28fd, 0x2e73, 0x3baa, 0x3326, 0x3625, 0x351e, 0x35eb, 0x305c, 0x3bc5, 0x345b, 0x3473, 0x3555, 0x28bb, 0x357a, 0x39c2, 0x3871, 0x3232, 0x2c3a, 0x3983, 0x340a, 0x3af8, 0x3932, 0x3354, 0x3a39, 0x36b8, 0x367a, 0x29ce, 0x3bf0, 0x290d, 0x339f, 0x3afb, 0x340d, 0x3128, 0x38ac, 0x2b34, 0x346f, 0x3356, 0x3bb9, 0x2967, 0x355a, 0x37cd, 0x34f4, 0x3a66, 0x36b6, 0x2968, 0x3bf7, 0x3a0d, 0x361c, 0x3898, 0x3859, 0x39fe, 0x3bdb, 0x38aa, 0x3b92, 0x2fcc, 0x38b1, 0x3713, 0x3be1, 0x3826, 0x3b00, 0x32c3, 0x30a1, 0x38d7, 0x3bf3, 0x3b42, 0x38af, 0x304b, 0x3279, 0x37c5, 0x2072, 0x346c, 0x3857, 0x3597, 0x3624, 0x39d7, -0x3042, 0x392a, 0x3120, 0x20d7, 0x3b8c, 0x3a8f, 0x383a, 0x3a52, 0x3bbd, 0x31ad, 0x3781, 0x3359, 0x36cb, 0x33f1, 0x385b, 0x3225, 0x38d5, 0x3019, 0x3a17, 0x34d3, 0x3a34, 0x39ba, 0x3a17, 0x31e8, 0x3b53, 0x3b9c, 0x3b54, 0x33b6, 0x3488, 0x367a, 0x3a2c, 0x3ac7, 0x3b0a, 0x399a, 0x3891, 0x3a51, 0x3a4a, 0x380b, 0x391c, 0x3805, 0x381d, 0x3b2a, 0x2a0d, 0x3acc, 0x3b55, 0x3958, 0x3a2b, 0x35cd, 0x340e, 0x36e1, 0x3a09, 0x2569, 0x2c5f, 0x376c, 0x3431, 0x3ad3, 0x31fc, 0x331e, 0x396b, 0x2ebd, 0x380f, 0x3bce, 0x3a74, 0x32de, 0x30ec, 0x3300, 0x3aba, 0x34c3, 0x3abd, 0x30c6, 0x39af, 0x3a3d, 0x3ad9, 0x3097, 0x2af9, 0x38a6, 0x3071, 0x25c5, 0x34ea, 0x2ff3, 0x355e, 0x3b66, 0x1edc, 0x3a1f, 0x32c7, 0x381c, 0x3837, 0x3bc1, 0x3033, 0x3bcb, 0x3a53, 0x3ab7, 0x38be, 0x2a81, 0x36ad, 0x301f, -0x3931, 0x3ba1, 0x34ac, 0x383d, 0x3636, 0x35b9, 0x38f2, 0x2c53, 0x32a9, 0x3b31, 0x3181, 0x383c, 0x395b, 0x30ef, 0x3aa7, 0x30ce, 0x32ff, 0x328b, 0x3329, 0x2c12, 0x394e, 0x2c60, 0x35de, 0x3938, 0x2c18, 0x37be, 0x392e, 0x3438, 0x3650, 0x34c7, 0x392c, 0x39aa, 0x2e72, 0x3ab6, 0x2bc9, 0x3bfa, 0x36f2, 0x2830, 0x2ad4, 0x3b3f, 0x3ae7, 0x34c7, 0x3064, 0x35ef, 0x3956, 0x39e9, 0x31eb, 0x2ff8, 0x36f3, 0x38de, 0x34b8, 0x3aa8, 0x1c30, 0x3b4f, 0x38d9, 0x3bba, 0x39b7, 0x3b4c, 0x2ee9, 0x3837, 0x3835, 0x36c6, 0x3928, 0x2e72, 0x37d2, 0x3642, 0x31cb, 0x35d6, 0x3408, 0x3404, 0x39d4, 0x3877, 0x38a5, 0x31ae, 0x2c75, 0x341a, 0x3af5, 0x3abc, 0x330b, 0x387d, 0x3b46, 0x369f, 0x2bf0, 0x3bdc, 0x36fc, 0x362a, 0x374f, 0x3bc3, 0x3ac5, 0x38c1, 0x3965, 0x380f, 0x3675, 0x3bba, 0x3a38, 0x39ca +uint16_t w_inp_2D [32][32] = { +0x311a, 0x39e0, 0x387d, 0x3a4a, 0x386f, 0x3ada, 0x392f, 0x3854, 0x3014, 0x2fd2, 0x31c9, 0x2fca, 0x2e55, 0x3bc8, 0x396d, 0x3b1d, 0x39f6, 0x333a, 0x3908, 0x3628, 0x3bab, 0x3b8b, 0x3b4a, 0x322d, 0x3925, 0x317a, 0x3725, 0x31c2, 0x3066, 0x38f3, 0x3a17, 0x3476, +0x3bda, 0x3196, 0x3922, 0x3680, 0x396a, 0x3021, 0x3761, 0x374d, 0x2fc2, 0x3967, 0x3b94, 0x33b5, 0x3797, 0x34d6, 0x3655, 0x2176, 0x39bc, 0x3999, 0x3658, 0x3904, 0x3759, 0x2ade, 0x3a5a, 0x3b78, 0x36c7, 0x2d01, 0x3b58, 0x2d9a, 0x373d, 0x3952, 0x38e8, 0x3887, +0x37b6, 0x3a88, 0x2f8a, 0x2d79, 0x3413, 0x3421, 0x3976, 0x32b2, 0x3446, 0x2d99, 0x3a56, 0x3322, 0x3b49, 0x39fa, 0x3acd, 0x3af6, 0x304c, 0x3abb, 0x3a83, 0x38b2, 0x3ab9, 0x363e, 0x389f, 0x31bb, 0x38e1, 0x3bc4, 0x3b9b, 0x2984, 0x3a43, 0x3b2f, 0x35d6, 0x3bda, +0x2df3, 0x3bf8, 0x2acc, 0x378b, 0x3555, 0x2e59, 0x31d4, 0x34ec, 0x3a46, 0x3bab, 0x3214, 0x3161, 0x3470, 0x3a03, 0x368e, 0x31ad, 0x27cb, 0x2ecb, 0x3422, 0x39f7, 0x3644, 0x3a77, 0x313f, 0x34f2, 0x39b3, 0x3bf2, 0x379a, 0x3456, 0x35fe, 0x3ae7, 0x3964, 0x385f, +0x3b16, 0x3999, 0x3833, 0x2eda, 0x3afd, 0x3a4a, 0x3ba2, 0x2bd4, 0x3b38, 0x31a2, 0x32dd, 0x353c, 0x366f, 0x375e, 0x3821, 0x367a, 0x3b44, 0x39e6, 0x3787, 0x339e, 0x39d7, 0x38c6, 0x37d5, 0x342f, 0x3984, 0x319b, 0x33b5, 0x35ab, 0x398a, 0x374e, 0x36b6, 0x3b21, +0x3bbb, 0x2ab3, 0x2ad5, 0x33bc, 0x2bef, 0x3780, 0x3738, 0x3a0b, 0x3b09, 0x30ca, 0x384e, 0x3ab3, 0x39bd, 0x3453, 0x3a6d, 0x3957, 0x2c10, 0x30e9, 0x35d4, 0x3aef, 0x3be9, 0x39ad, 0x3a74, 0x3af9, 0x3739, 0x2d4d, 0x39fe, 0x3b72, 0x2c57, 0x398c, 0x381f, 0x3930, +0x3820, 0x321b, 0x3964, 0x2964, 0x33a0, 0x2d00, 0x2490, 0x336b, 0x3465, 0x3b2e, 0x3aa0, 0x371f, 0x300e, 0x3a09, 0x3bf1, 0x25cc, 0x3b6f, 0x3384, 0x3a88, 0x3acb, 0x3814, 0x36d0, 0x3081, 0x3a2c, 0x3353, 0x39cb, 0x31ed, 0x3af6, 0x3721, 0x36c7, 0x2ce2, 0x390d, +0x3698, 0x3ab2, 0x3b3e, 0x2eb4, 0x3998, 0x39e3, 0x3a77, 0x3632, 0x2c12, 0x3bd5, 0x3ba3, 0x3bba, 0x323c, 0x367b, 0x3557, 0x39c8, 0x37db, 0x3b45, 0x3b6e, 0x3931, 0x3121, 0x3a8d, 0x3a55, 0x3b9b, 0x358a, 0x3925, 0x3491, 0x3912, 0x3b6b, 0x3584, 0x32df, 0x3120, +0x32b2, 0x3b0a, 0x2cad, 0x3465, 0x3ad3, 0x3bcd, 0x363b, 0x3afe, 0x354b, 0x3374, 0x39af, 0x3b7f, 0x308c, 0x2e72, 0x3380, 0x3b70, 0x3902, 0x38d8, 0x39f3, 0x3a4b, 0x3853, 0x397b, 0x2ebe, 0x387f, 0x2845, 0x37e2, 0x360f, 0x370b, 0x3acb, 0x35d4, 0x36e6, 0x3262, +0x2e88, 0x3a54, 0x2ee3, 0x3575, 0x3afe, 0x2aee, 0x39a0, 0x3aae, 0x3693, 0x3432, 0x3834, 0x3b9b, 0x3bcb, 0x2e3a, 0x356d, 0x374e, 0x3924, 0x383c, 0x311e, 0x3ac5, 0x352d, 0x311e, 0x38ca, 0x34d4, 0x36ca, 0x34ed, 0x3a13, 0x33eb, 0x3639, 0x3828, 0x3b3c, 0x3939, +0x3837, 0x3521, 0x2cb5, 0x3629, 0x3924, 0x384c, 0x366a, 0x3bbf, 0x2e9e, 0x3ba8, 0x33ad, 0x38c8, 0x3934, 0x3907, 0x249a, 0x3690, 0x3a09, 0x3215, 0x3898, 0x325d, 0x37d5, 0x3195, 0x361c, 0x3ae4, 0x351f, 0x3452, 0x3bc0, 0x375c, 0x39bf, 0x317a, 0x3aae, 0x283a, +0x3476, 0x3b92, 0x3472, 0x383e, 0x280f, 0x39d6, 0x2fd1, 0x31f4, 0x2ffb, 0x3b97, 0x3692, 0x36c0, 0x3989, 0x33cf, 0x3ba6, 0x3239, 0x35d7, 0x33ab, 0x31eb, 0x3b47, 0x389b, 0x3b88, 0x3580, 0x354c, 0x3802, 0x3b9a, 0x3b94, 0x2a92, 0x2db1, 0x38bd, 0x2dfb, 0x3900, +0x344f, 0x3739, 0x27a5, 0x3b2e, 0x342b, 0x34bb, 0x30c8, 0x3ae8, 0x3b26, 0x3982, 0x38c0, 0x3408, 0x38c8, 0x36ef, 0x3bf0, 0x3acf, 0x3a3c, 0x3825, 0x31a5, 0x3ada, 0x3b5b, 0x37db, 0x3a01, 0x3663, 0x3a7d, 0x327b, 0x3a1f, 0x3862, 0x38af, 0x3204, 0x372e, 0x3b19, +0x3708, 0x3622, 0x2e62, 0x39ab, 0x2d4d, 0x31b4, 0x3552, 0x3bbc, 0x36f2, 0x36eb, 0x38ef, 0x3755, 0x3bbe, 0x2c17, 0x3815, 0x2f53, 0x363f, 0x38c1, 0x3246, 0x386b, 0x34de, 0x34e4, 0x3baa, 0x349e, 0x32ce, 0x3a68, 0x373f, 0x2cce, 0x3b36, 0x28ba, 0x3b50, 0x3232, +0x1f34, 0x3928, 0x35cd, 0x3b38, 0x30ce, 0x35a1, 0x3a06, 0x3a32, 0x3a53, 0x3489, 0x3241, 0x372f, 0x390c, 0x3a1b, 0x378a, 0x3713, 0x3769, 0x37a8, 0x3418, 0x3ad4, 0x3a4e, 0x3bf7, 0x37a5, 0x34dc, 0x39b2, 0x351b, 0x3372, 0x349f, 0x2f50, 0x3ab1, 0x3795, 0x2db7, +0x3864, 0x3157, 0x3900, 0x323e, 0x389e, 0x3880, 0x3b1f, 0x37a1, 0x396c, 0x2e43, 0x2c2a, 0x3b78, 0x3988, 0x3a14, 0x39c1, 0x3b51, 0x3780, 0x3bf2, 0x2d19, 0x3815, 0x3a5f, 0x3641, 0x2f62, 0x37d5, 0x3564, 0x139a, 0x3ab8, 0x28f7, 0x3785, 0x34e1, 0x3097, 0x3768, +0x3971, 0x3ae2, 0x32ae, 0x2fd5, 0x382a, 0x346c, 0x3133, 0x3167, 0x3940, 0x2d12, 0x389a, 0x3bd0, 0x3943, 0x391c, 0x3a75, 0x2a11, 0x391e, 0x372d, 0x3a79, 0x3b72, 0x3373, 0x39b7, 0x35d7, 0x372b, 0x3a6d, 0x38a1, 0x3279, 0x3434, 0x3694, 0x3b45, 0x3abb, 0x392d, +0x34a8, 0x3757, 0x32ca, 0x345d, 0x36a5, 0x3854, 0x2dcd, 0x30af, 0x38dd, 0x3067, 0x3411, 0x3997, 0x397a, 0x3a64, 0x38b8, 0x3962, 0x3509, 0x3bb6, 0x3a66, 0x339f, 0x372a, 0x31a8, 0x37da, 0x36ff, 0x33c6, 0x31da, 0x3977, 0x3b72, 0x3841, 0x3567, 0x3433, 0x33b8, +0x39fe, 0x3a10, 0x3bf2, 0x35e7, 0x3a4a, 0x3b3e, 0x2ec7, 0x3aa4, 0x3846, 0x3af9, 0x38a9, 0x2c1f, 0x39ab, 0x349f, 0x31d6, 0x39ae, 0x3b79, 0x352d, 0x3516, 0x347c, 0x2f33, 0x35ad, 0x31c4, 0x3b52, 0x354b, 0x3786, 0x3ab7, 0x3896, 0x34ac, 0x352f, 0x37e6, 0x326a, +0x2e44, 0x34c7, 0x388d, 0x3bf4, 0x363f, 0x3b3d, 0x33b1, 0x3b8b, 0x3340, 0x37f7, 0x3b07, 0x25bf, 0x398e, 0x3505, 0x3bd7, 0x366d, 0x388a, 0x2cc0, 0x359a, 0x3b9a, 0x3b99, 0x379d, 0x3b6b, 0x39b8, 0x3223, 0x2703, 0x3ba9, 0x2ecb, 0x3759, 0x39d8, 0x37ac, 0x32cf, +0x35f2, 0x38a3, 0x399e, 0x3bd2, 0x3780, 0x3af3, 0x3b5e, 0x337b, 0x3a08, 0x35da, 0x3446, 0x3b25, 0x3ad0, 0x3bee, 0x3141, 0x32d8, 0x34ce, 0x2ac9, 0x3800, 0x3a8a, 0x2d53, 0x368a, 0x3561, 0x3998, 0x35a3, 0x3677, 0x3ab2, 0x3269, 0x3236, 0x3b3e, 0x3aba, 0x3bac, +0x395d, 0x3820, 0x1df6, 0x3bb5, 0x35b5, 0x3675, 0x3b74, 0x360f, 0x34de, 0x3a0c, 0x3aeb, 0x299d, 0x3207, 0x3bd8, 0x2178, 0x3995, 0x3948, 0x3908, 0x3843, 0x2ea5, 0x3045, 0x3989, 0x345d, 0x39c5, 0x3a89, 0x3863, 0x3be0, 0x397a, 0x38f1, 0x39e2, 0x3b08, 0x352e, +0x385f, 0x28f2, 0x3bc3, 0x35e0, 0x380c, 0x3b9c, 0x3afc, 0x390a, 0x3689, 0x34fd, 0x2cf5, 0x308e, 0x342b, 0x3921, 0x3a67, 0x3ad6, 0x2986, 0x32fc, 0x35aa, 0x3507, 0x3608, 0x33fd, 0x3bf3, 0x39e2, 0x3b0f, 0x30b7, 0x3896, 0x3ae4, 0x2145, 0x35b6, 0x2e1d, 0x3ad1, +0x333d, 0x3afb, 0x2703, 0x3413, 0x1d7d, 0x3b7f, 0x3ae1, 0x303c, 0x3004, 0x39d3, 0x3554, 0x31a4, 0x354e, 0x3662, 0x39c5, 0x2eb7, 0x2c6e, 0x397f, 0x31d8, 0x1f0c, 0x38e3, 0x35f0, 0x2714, 0x28d1, 0x375e, 0x3a75, 0x3830, 0x3578, 0x397d, 0x3b18, 0x383c, 0x3498, +0x39ad, 0x3598, 0x23c4, 0x34ea, 0x3a61, 0x2b00, 0x3707, 0x3ae1, 0x37ae, 0x389d, 0x37fa, 0x3673, 0x3278, 0xf3e, 0x3809, 0x33c6, 0x3bf5, 0x3279, 0x3816, 0x360c, 0x39c8, 0x381f, 0x3741, 0x2d66, 0x38c0, 0x37d3, 0x377a, 0x3621, 0x2faf, 0x392e, 0x2de6, 0x33c5, +0x3803, 0x2600, 0x32e9, 0x39b4, 0x38d2, 0x34e8, 0x2fe6, 0x3199, 0x3643, 0x3a77, 0x27cc, 0x39d7, 0x34c6, 0x2ea8, 0x364e, 0x3b07, 0x31c7, 0x30a1, 0x31b1, 0x3b8f, 0x3571, 0x3b75, 0x3989, 0x3805, 0x39fb, 0x3945, 0x352b, 0x31d8, 0x3904, 0x3440, 0x3a57, 0x2cf7, +0x3b39, 0x2fcd, 0x2b89, 0x2edd, 0x3682, 0x36a9, 0x32c8, 0x37ac, 0x32a5, 0x3311, 0x394b, 0x3b84, 0x3aec, 0x3601, 0x2765, 0x3b69, 0x396b, 0x3727, 0x3bfe, 0x3907, 0x376f, 0x3674, 0x3973, 0x3671, 0x3491, 0x3993, 0x383f, 0x3335, 0x3989, 0x3550, 0x3077, 0x35f5, +0x3a59, 0x3950, 0x380c, 0x37cd, 0x30bf, 0x3607, 0x3afa, 0x3b5d, 0x32b9, 0x386b, 0x35bd, 0x3aca, 0x3ba5, 0x3b2d, 0x3b19, 0x3b8b, 0x345e, 0x2845, 0x34aa, 0x372a, 0x3448, 0x34f5, 0x3ae2, 0x3637, 0x2cb5, 0x354b, 0x3b15, 0x2ca8, 0x2641, 0x3178, 0x2cfe, 0x39b4, +0x3bdd, 0x3acb, 0x3a05, 0x38a2, 0x3b4a, 0x34e5, 0x395f, 0x394b, 0x34c4, 0x3aa5, 0x29bb, 0x2d96, 0x339d, 0x387c, 0x382e, 0x385a, 0x396b, 0x3aa9, 0x2f1e, 0x33a7, 0x3b90, 0x3b7b, 0x3b5f, 0x39d3, 0x3b18, 0x354f, 0x2cdb, 0x3a6f, 0x3434, 0x34ff, 0x3a5b, 0x3b84, +0x3a33, 0x384b, 0x2e67, 0x3b85, 0x3853, 0x380c, 0x346a, 0x3aaa, 0x3492, 0x33e8, 0x3bf2, 0x38ae, 0x3a29, 0x3830, 0x3221, 0x35b1, 0x3a48, 0x2c68, 0x2ced, 0x3a7e, 0x3539, 0x3922, 0x374c, 0x3aaa, 0x2dae, 0x395d, 0x3b3d, 0x3890, 0x2cfe, 0x2dd6, 0x3bad, 0x33c5, +0x2c07, 0x3a2c, 0x37a8, 0x390f, 0x2fc8, 0x35ae, 0x388c, 0x30ee, 0x3674, 0x391d, 0x3bfc, 0x36bf, 0x322d, 0x3a78, 0x35c0, 0x3492, 0x3ac8, 0x3504, 0x3315, 0x381d, 0x3a7a, 0x3a08, 0x343c, 0x3bda, 0x341b, 0x39f0, 0x3b9e, 0x395d, 0x3c00, 0x38ab, 0x3bcf, 0x3564, +0x33c4, 0x3b0d, 0x3623, 0x33b9, 0x3b92, 0x1e71, 0x2c57, 0x36d0, 0x314b, 0x3a16, 0x3372, 0x341b, 0x3aaa, 0x3444, 0x396b, 0x2dd7, 0x3b30, 0x3559, 0x3b5b, 0x3a29, 0x2d19, 0x38b7, 0x3b01, 0x3afa, 0x398a, 0x3839, 0x3ac9, 0x2e31, 0x3924, 0x39f2, 0x3a7f, 0x3285 }; \ No newline at end of file diff --git a/hwpe/redmule/inc/w_input.h b/hwpe/redmule/inc/w_input.h index dd2e275..dc4d3be 100644 --- a/hwpe/redmule/inc/w_input.h +++ b/hwpe/redmule/inc/w_input.h @@ -1,99 +1,35 @@ /* Header file generated by RedMulE Golden Model */ -uint16_t w_inp [9216] = { -0x2d1a, 0x2f9c, 0x3596, 0x38eb, 0x3a5c, 0x3827, 0x3b07, 0x397a, 0x347f, 0x3703, 0x2e26, 0x305c, 0x3ba2, 0x39cd, 0x36fa, 0x3899, 0x38dc, 0x3a60, 0x345b, 0x2d80, 0x36ad, 0x2eb8, 0x34ca, 0x384a, 0x33ef, 0x353e, 0x370e, 0x38f6, 0x3947, 0x387c, 0x3893, 0x38fd, 0x39a9, 0x29fb, 0x39ec, 0x3232, 0x35f8, 0x320c, 0x3b5c, 0x34b6, 0x39e6, 0x2b02, 0x340d, 0x30cc, 0x3b7d, 0x3298, 0x381a, 0x3aa8, 0x3b2b, 0x3605, 0x389e, 0x3a3a, 0x2f2c, 0x3ae4, 0x2cc3, 0x2e6b, 0x3850, 0x3a94, 0x396f, 0x3683, 0x3983, 0x39ea, 0x349f, 0x3b95, 0x28a5, 0x3853, 0x349a, 0x30cc, 0x389b, 0x3595, 0x31f9, 0x3a85, 0x367d, 0x3bbe, 0x3bde, 0x3ae7, 0x3977, 0x3a5d, 0x2497, 0x32ed, 0x39c5, 0x3553, 0x3b87, 0x357c, 0x3868, 0x2fc2, 0x1ad7, 0x3079, 0x3b2f, 0x3570, 0x3a70, 0x3761, 0x29cd, 0x3640, 0x3885, 0x2c6e, -0x3a6c, 0x322b, 0x34e2, 0x1a14, 0x385b, 0x3bdd, 0x3b0f, 0x3548, 0x35d5, 0x3105, 0x39f6, 0x2ce7, 0x365f, 0x286d, 0x3673, 0x3517, 0x3847, 0x3905, 0x34f8, 0x3a5b, 0x2809, 0x38e8, 0x3910, 0x3bce, 0x3aa7, 0x3a98, 0x3a82, 0x318b, 0x39a1, 0x39c7, 0x3960, 0x3206, 0x3320, 0x3893, 0x2e29, 0x391a, 0x28ae, 0x3535, 0x3a37, 0x3821, 0x32de, 0x326d, 0x3196, 0x3b5f, 0x38f2, 0x3b44, 0x3680, 0x3309, 0x3bf2, 0x3bb2, 0x3874, 0x3531, 0x2c98, 0x3648, 0x2d18, 0x2af5, 0x25d7, 0x3a75, 0x38bc, 0x3a77, 0x39bb, 0x3a92, 0x397d, 0x3486, 0x35e3, 0x3917, 0x3805, 0x3001, 0x3619, 0x3952, 0x34c7, 0x3a87, 0x35de, 0x385e, 0x2590, 0x3bb1, 0x2b49, 0x3526, 0x35c5, 0x3963, 0x374e, 0x346a, 0x35d0, 0x3622, 0x2dd8, 0x3aa0, 0x3292, 0x30d8, 0x3883, 0x3ad4, 0x3a22, 0x360f, 0x3424, 0x348f, 0x3886, 0x38f3, -0x3945, 0x3792, 0x3629, 0x3b2b, 0x3bf5, 0x3a69, 0x3199, 0x3b84, 0x35c4, 0x3b13, 0x27a5, 0x3b8a, 0x393d, 0x3a14, 0x3a40, 0x35e7, 0x3a6a, 0x38ad, 0x3bb9, 0x24d8, 0x3b90, 0x3797, 0x3716, 0x384e, 0x3832, 0x3855, 0x39c3, 0x39de, 0x2684, 0x3627, 0x35f0, 0x3a86, 0x3995, 0x2abc, 0x347a, 0x2409, 0x2758, 0x3664, 0x3ae9, 0x1eb1, 0x386a, 0x33dd, 0x3413, 0x243b, 0x3b5b, 0x36fb, 0x38ab, 0x39cb, 0x38e8, 0x308c, 0x3be2, 0x30c8, 0x382c, 0x3bcc, 0x3b0f, 0x30e7, 0x31b4, 0x2adb, 0x2354, 0x2c7e, 0x3774, 0x3299, 0x3574, 0x3b35, 0x38a3, 0x3836, 0x3400, 0x3721, 0x3acb, 0x37da, 0x3688, 0x35d5, 0x3977, 0x3247, 0x2a12, 0x3b36, 0x371a, 0x3750, 0x2ad9, 0x242b, 0x306f, 0x3502, 0x3b35, 0x394d, 0x3646, 0x315d, 0x387d, 0x349f, 0x305a, 0x3a84, 0x3a3e, 0x3be3, 0x3bf9, 0x3580, 0x3b14, 0x3a13, -0x371c, 0x2da9, 0x3995, 0x38be, 0x323e, 0x328d, 0x383d, 0x3991, 0x3a57, 0x38ca, 0x3867, 0x3982, 0x34fd, 0x347c, 0x380f, 0x3074, 0x38d4, 0x34fa, 0x326a, 0x377c, 0x3a52, 0x3abd, 0x3536, 0x226f, 0x319c, 0x3321, 0x393e, 0x3467, 0x3b37, 0x3bc1, 0x3a17, 0x394d, 0x33a2, 0x395d, 0x33e4, 0x3b09, 0x3855, 0x354d, 0x2f53, 0x34e7, 0x375b, 0x35f1, 0x367f, 0x3674, 0x2e07, 0x3ba0, 0x314b, 0x3bce, 0x2c5f, 0x384d, 0x3443, 0x36b1, 0x3973, 0x38d8, 0x340d, 0x3a77, 0x2ec7, 0x3538, 0x2e0e, 0x2d39, 0x3a81, 0x3b54, 0x3bdc, 0x3461, 0x2d5f, 0x3a52, 0x390c, 0x2186, 0x3896, 0x39d5, 0x3868, 0x2171, 0x303e, 0x3b19, 0x3915, 0x3be0, 0x39cb, 0x34ce, 0x357f, 0x394b, 0x39d3, 0x3af8, 0x3855, 0x3430, 0x36d6, 0x38bd, 0x3ad5, 0x38f4, 0x252e, 0x3b49, 0x36b0, 0x32b2, 0x3610, 0x3baa, 0x398b, 0x3ac1, -0x3655, 0x2ad4, 0x38e1, 0x3a9a, 0x37b9, 0x3027, 0x3889, 0x3017, 0x3baf, 0x32b8, 0x3922, 0x3984, 0x3ac3, 0x3775, 0x37f5, 0x38f0, 0x3a37, 0x3a8a, 0x283a, 0x1b5c, 0x3998, 0x2c23, 0x380e, 0x3254, 0x3ad7, 0x39f2, 0x328e, 0x36da, 0x370d, 0x2f71, 0x3944, 0x2e44, 0x36d7, 0x362a, 0x370d, 0x38a7, 0x3b99, 0x3850, 0x3111, 0x329d, 0x3bbf, 0x353e, 0x3932, 0x3542, 0x2ab8, 0x3bf2, 0x312c, 0x3070, 0x3983, 0x3882, 0x3aa6, 0x39fd, 0x384b, 0x3a76, 0x3b1f, 0x312a, 0x183e, 0x362e, 0x347e, 0x38cf, 0x3186, 0x38eb, 0x1c0b, 0x2def, 0x33ec, 0x3b0f, 0x387e, 0x344f, 0x3b28, 0x367f, 0x3661, 0x382a, 0x28c2, 0x3980, 0x3709, 0x3875, 0x3922, 0x37fb, 0x36a9, 0x2f28, 0x36c2, 0x30c6, 0x3bcf, 0x3aba, 0x3965, 0x3397, 0x39ab, 0x3812, 0x344e, 0x39ff, 0x3866, 0x3895, 0x3ba0, 0x3a13, 0x3a1b, 0x35ef, -0x382a, 0x34ad, 0x39c7, 0x2ef8, 0x377e, 0x3915, 0x3beb, 0x3a4f, 0x35e7, 0x3465, 0x3668, 0x3404, 0x3233, 0x3361, 0x3b7e, 0x3702, 0x3b3b, 0x3834, 0x36e7, 0x3a65, 0x2ed7, 0x3965, 0x3914, 0x34c7, 0x3722, 0x3612, 0x397f, 0x2e03, 0x36b6, 0x2da9, 0x33d1, 0x350e, 0x38af, 0x1b8f, 0x360b, 0x3803, 0x38e4, 0x328a, 0x330b, 0x383c, 0x3501, 0x334b, 0x35bf, 0x395f, 0x394f, 0x359b, 0x3b66, 0x2eee, 0x350f, 0x3759, 0x3a91, 0x3b46, 0x3808, 0x3b0e, 0x38c7, 0x3846, 0x2e4b, 0x2edb, 0x382a, 0x348d, 0x1a8b, 0x3510, 0x39c3, 0x30f8, 0x3758, 0x2fc8, 0x3386, 0x3316, 0x393f, 0x3351, 0x3b46, 0x389f, 0x3312, 0x28a9, 0x34ff, 0x3a51, 0x3b00, 0x36a4, 0x3811, 0x281c, 0x3646, 0x3b42, 0x3453, 0x32ea, 0x2f6b, 0x3a64, 0x2cd4, 0x28d1, 0x3a0b, 0x3276, 0x3b1d, 0x368e, 0x340a, 0x3ac3, 0x3067, 0x3987, -0x25a7, 0x39f4, 0x3b54, 0x38d8, 0x3708, 0x3999, 0x313e, 0x316b, 0x39af, 0x2e81, 0x3667, 0x39e3, 0x3904, 0x391d, 0x383d, 0x3956, 0x36c0, 0x30d0, 0x346d, 0x39cf, 0x3236, 0x354f, 0x377f, 0x326a, 0x3800, 0x3022, 0x3b2f, 0x3b98, 0x3a97, 0x3bca, 0x3a1e, 0x3a5b, 0x337d, 0x385c, 0x2fff, 0x399e, 0x33e3, 0x355a, 0x3835, 0x3a1e, 0x38d5, 0x3791, 0x2f0d, 0x2ef4, 0x3581, 0x397a, 0x3a26, 0x391b, 0x3727, 0x3874, 0x3a25, 0x30ba, 0x2b99, 0x3a8b, 0x345b, 0x3bab, 0x3900, 0x3743, 0x3b73, 0x391a, 0x3bd2, 0x39ea, 0x3599, 0x383b, 0x34c0, 0x34b3, 0x3bf0, 0x396d, 0x3b6f, 0x36f9, 0x350e, 0x3b43, 0x39da, 0x3b16, 0x38af, 0x369c, 0x3530, 0x3a87, 0x3a68, 0x2220, 0x2d27, 0x3a49, 0x2df1, 0x353a, 0x3a08, 0x3bdb, 0x378e, 0x2942, 0x35f0, 0x3618, 0x3897, 0x3946, 0x3b7d, 0x3a44, 0x356f, 0x389f, -0x3bd0, 0x2946, 0x3aa2, 0x3711, 0x3462, 0x369c, 0x3a56, 0x3b59, 0x32ac, 0x3813, 0x2f28, 0x3c00, 0x3404, 0x34dc, 0x29ec, 0x3bf1, 0x393e, 0x3b63, 0x3513, 0x3822, 0x382b, 0x35f2, 0x3b2c, 0x3498, 0x2515, 0x31aa, 0x3a7f, 0x391d, 0x3a54, 0x34ef, 0x353a, 0x3a41, 0x334a, 0x3b6a, 0x376f, 0x3bb0, 0x3821, 0x38c2, 0x3b57, 0x333d, 0x2ba8, 0x368e, 0x3a2c, 0x345b, 0x3b9a, 0x3976, 0x3870, 0x34b5, 0x386c, 0x3916, 0x38cc, 0x32a3, 0x3bd8, 0x30bc, 0x30a7, 0x38bc, 0x3727, 0x38e7, 0x337a, 0x3b34, 0x39b7, 0x391f, 0x27fa, 0x3b3f, 0x3940, 0x3698, 0x3256, 0x3a9b, 0x39c3, 0x2e76, 0x3899, 0x3915, 0x36a4, 0x3606, 0x3bd9, 0x314f, 0x2822, 0x3bba, 0x381b, 0x3252, 0x38dd, 0x2cb9, 0x38f3, 0x385c, 0x348d, 0x3220, 0x31a8, 0x3128, 0x3aed, 0x3903, 0x3be2, 0x3971, 0x29f4, 0x3130, 0x3b11, 0x35d7, -0x3a04, 0x393c, 0x3573, 0x3870, 0x3568, 0x38f5, 0x38a4, 0x353f, 0x3b0f, 0x363a, 0x35de, 0x3241, 0x3b97, 0x2e15, 0x3a8a, 0x3823, 0x38e0, 0x3556, 0x3a96, 0x364f, 0x337a, 0x34e3, 0x342b, 0x3994, 0x3b5c, 0x3b57, 0x3a63, 0x2f0d, 0x3b7a, 0x3a08, 0x3102, 0x34ce, 0x3036, 0x3864, 0x3887, 0x280c, 0x3bb5, 0x38a1, 0x3b71, 0x3b0c, 0x3487, 0x3b6e, 0x3aec, 0x3af6, 0x1cd8, 0x3381, 0x2923, 0x3b78, 0x3597, 0x3528, 0x3afe, 0x39c2, 0x3258, 0x3898, 0x3b8c, 0x2c32, 0x38e1, 0x2f4a, 0x3948, 0x39bb, 0x39cb, 0x386b, 0x3778, 0x3847, 0x2fa6, 0x3b01, 0x3a0c, 0x3a67, 0x3b8e, 0x3959, 0x346b, 0x38ba, 0x34f8, 0x3606, 0x3940, 0x3562, 0x3be6, 0x390c, 0x2d8b, 0x3987, 0x2f30, 0x2d65, 0x36d1, 0x3b44, 0x3421, 0x37cb, 0x3a4a, 0x338e, 0x3693, 0x3699, 0x3521, 0x3aae, 0x3930, 0x391c, 0x3654, 0x3898, -0x36f8, 0x34cd, 0x2149, 0x326e, 0x36fa, 0x3179, 0x2e80, 0x3a76, 0x3027, 0x3847, 0x3b9b, 0x38eb, 0x35c2, 0x34d4, 0x384a, 0x3595, 0x35ab, 0x3937, 0x3668, 0x3953, 0x3697, 0x2d28, 0x3baa, 0x3a75, 0x3889, 0x3996, 0x34d8, 0x39b2, 0x3b7d, 0x37c5, 0x3b60, 0x316d, 0x324c, 0x3a17, 0x35bd, 0x3914, 0x334e, 0x3375, 0x29e3, 0x34a3, 0x3346, 0x39e3, 0x32d6, 0x2b0b, 0x3ac7, 0x3aca, 0x3813, 0x3752, 0x3022, 0x39f7, 0x3971, 0x389f, 0x39c2, 0x3205, 0x3739, 0x38b3, 0x3942, 0x39dc, 0x39db, 0x382a, 0x3abb, 0x3978, 0x3ad0, 0x3568, 0x2c42, 0x3773, 0x31c8, 0x3b9f, 0x3594, 0x3a9a, 0x37c3, 0x31c2, 0x325a, 0x3931, 0x2265, 0x39ab, 0x24b6, 0x3291, 0x3a79, 0x3b31, 0x39ef, 0x3a6b, 0x381f, 0x304d, 0x33fb, 0x39d6, 0x3849, 0x3891, 0x367a, 0x3b66, 0x380e, 0x3481, 0x3b30, 0x2a58, 0x3bf3, 0x35d3, -0x3b73, 0x3bcf, 0x3a9c, 0x3a9f, 0x2d30, 0x3abe, 0x3510, 0x3980, 0x2809, 0x3bed, 0x2477, 0x31d1, 0x37d6, 0x3553, 0x3190, 0x38fd, 0x366f, 0x3917, 0x3bf2, 0x3b54, 0x34f0, 0x2f3f, 0x3b0a, 0x379a, 0x342d, 0x2db5, 0x3105, 0x35a8, 0x39a2, 0x3b84, 0x350e, 0x2c79, 0x3a84, 0x3419, 0x3af7, 0x3508, 0x39e6, 0x3a46, 0x2f9c, 0x3759, 0x2504, 0x37b5, 0x3b2b, 0x39cc, 0x3ae4, 0x38ec, 0x3751, 0x3841, 0x3b66, 0x2811, 0x34ac, 0x380a, 0x3666, 0x38f0, 0x3447, 0x33b7, 0x3bab, 0x388e, 0x2ce5, 0x307c, 0x3588, 0x3bf6, 0x38f9, 0x3b01, 0x340a, 0x3ae9, 0x3890, 0x3995, 0x3b9a, 0x3a50, 0x3751, 0x2cf7, 0x3a1b, 0x3b4b, 0x2474, 0x2eb0, 0x21b8, 0x38cd, 0x38d8, 0x35d6, 0x36f5, 0x240e, 0x29e9, 0x3686, 0x39d1, 0x3575, 0x3b7c, 0x3886, 0x2e72, 0x38d9, 0x34ac, 0x3816, 0x3b69, 0x3b7c, 0x2f10, 0x3428, -0x2aba, 0x3a08, 0x3acf, 0x364d, 0x344d, 0x3adf, 0x3526, 0x3a64, 0x3ad3, 0x34eb, 0x3943, 0x3894, 0x383a, 0x3bab, 0x3183, 0x3928, 0x3999, 0x300a, 0x35c5, 0x37a3, 0x384d, 0x3a84, 0x3959, 0x39ef, 0x360b, 0x350e, 0x36bf, 0x2f32, 0x3410, 0x383c, 0x3952, 0x33ee, 0x3899, 0x30a8, 0x3b1e, 0x30fa, 0x3b5c, 0x359d, 0x3802, 0x390f, 0x3815, 0x140e, 0x35f6, 0x3bfa, 0x38c4, 0x364f, 0x3b7f, 0x3b9f, 0x35a6, 0x3bf3, 0x3a2d, 0x3727, 0x39ab, 0x3944, 0x3ac5, 0x36df, 0x3b27, 0x3a1f, 0x3a69, 0x3994, 0x3673, 0x3b0c, 0x2f2f, 0x3303, 0x319f, 0x3567, 0x3753, 0x3b8f, 0x30f0, 0x3b7b, 0x36dc, 0x2941, 0x2b6c, 0x3ad2, 0x39cb, 0x3884, 0x3a58, 0x3a0c, 0x337a, 0x3a6e, 0x3b94, 0x37d1, 0x38f2, 0x3bf1, 0x3843, 0x2ae6, 0x384b, 0x3bf9, 0x36cb, 0x362e, 0x309a, 0x35ef, 0x36e6, 0x3484, 0x38a4, 0x3457, -0x370e, 0x341f, 0x39c0, 0x3527, 0x393f, 0x3438, 0x2685, 0x375f, 0x3803, 0x38eb, 0x39fe, 0x39b3, 0x380f, 0x3370, 0x2766, 0x3b26, 0x35b6, 0x38ab, 0x3890, 0x26a8, 0x3879, 0x3819, 0x3ae8, 0x3aae, 0x3385, 0x2944, 0x3966, 0x35cc, 0x3641, 0x3a73, 0x3b91, 0x35d5, 0x31f8, 0x34a1, 0x2bbe, 0x3419, 0x369f, 0x3289, 0x98e, 0x2fef, 0x3ad5, 0x3029, 0x3ae0, 0x3b11, 0x3a03, 0x2e69, 0x38ae, 0x2eed, 0x3871, 0x3848, 0x2f40, 0x3946, 0x38bb, 0x3851, 0x39f5, 0x2e9a, 0x38fc, 0x33e4, 0x349f, 0x3b2e, 0x3873, 0x388c, 0x395a, 0x3519, 0x3636, 0x2df3, 0x3bd5, 0x3a94, 0x2e66, 0x38af, 0x2e50, 0x3aff, 0x3b0e, 0x36c8, 0x187b, 0x3733, 0x3a82, 0x3baf, 0x35c4, 0x2f20, 0x3a36, 0x3266, 0x38c6, 0x37e7, 0x31c5, 0x3a24, 0x3805, 0x299b, 0x3b3b, 0x3163, 0x2f34, 0x30d5, 0x38a2, 0x392a, 0x32af, 0x3be7, -0x3377, 0x2cce, 0x36d4, 0x3852, 0x39ad, 0x30e1, 0x397f, 0x380e, 0x3bd1, 0x3ae1, 0x3413, 0x3aa8, 0x3bcf, 0x3b5f, 0x393f, 0x37cf, 0x391e, 0x38a4, 0x3a1c, 0x3778, 0x35ca, 0x3b75, 0x2fe7, 0x2f20, 0x2d50, 0x3b72, 0x37b3, 0x3ba6, 0x37f5, 0x3866, 0x3b8c, 0x382c, 0x2c3e, 0x39ba, 0x3be2, 0x3602, 0x3ba5, 0x38d5, 0x37ed, 0x36d6, 0x3b11, 0x34de, 0x3831, 0x39e8, 0x377f, 0x38e4, 0x363d, 0x2b40, 0x2c1e, 0x304c, 0x3bcc, 0x347f, 0x34d7, 0x313b, 0x3a3b, 0x1f13, 0x379e, 0x331f, 0x2d1c, 0x3778, 0x3550, 0x3a5f, 0x2fea, 0x3ab4, 0x32bb, 0x386c, 0x3690, 0x3787, 0x3a95, 0x367b, 0x385a, 0x3b3b, 0x3b49, 0x387c, 0x38f5, 0x2f80, 0x37d4, 0x3b87, 0x3881, 0x3996, 0x3547, 0x38d2, 0x3ab2, 0x3a1c, 0x3483, 0x3ae7, 0x394d, 0x333c, 0x34df, 0x39e5, 0x3aaf, 0x39e6, 0x30a3, 0x3a4d, 0x3890, 0x34cc, -0x3482, 0x3420, 0x2dcc, 0x310d, 0x38c5, 0x3b6a, 0x38ca, 0x3ba1, 0x3a7c, 0x318a, 0x2d61, 0x3635, 0x39e2, 0x3837, 0x39fe, 0x3842, 0x3574, 0x3992, 0x246c, 0x3565, 0x380e, 0x3712, 0x35e8, 0x3712, 0x38ed, 0x3307, 0x398f, 0x31f3, 0x3a5c, 0x3a73, 0x33ba, 0x3841, 0x35d0, 0x36df, 0x2ce4, 0x366e, 0x38a3, 0x251a, 0x399f, 0x372c, 0x359d, 0x3913, 0x397c, 0x2e64, 0x3861, 0x2d47, 0x3a98, 0x381d, 0x3b60, 0x3b4a, 0x381d, 0x3a0d, 0x3adb, 0x3869, 0x3353, 0x3939, 0x39ad, 0x3114, 0x3b12, 0x3860, 0x39fe, 0x3ba6, 0x247b, 0x3a0e, 0x3206, 0x3b0b, 0x3b25, 0x399f, 0x39b4, 0x3b42, 0x3a81, 0x36bb, 0x3522, 0x349e, 0x3494, 0x3081, 0x3978, 0x3768, 0x2edd, 0x37b4, 0x34d1, 0x3bf8, 0x3ad6, 0x3773, 0x3034, 0x381a, 0x3a52, 0x3771, 0x2b52, 0x3b3d, 0x3b20, 0x3bf8, 0x342f, 0x34f8, 0x3b72, 0x35b4, -0x3029, 0x36c3, 0x39c0, 0x393c, 0x30da, 0x3152, 0x3917, 0x3864, 0x390b, 0x3aea, 0x2c08, 0x36c6, 0x3bcd, 0x3375, 0x35bc, 0x3a2b, 0x3684, 0x368f, 0x3974, 0x37fd, 0x3901, 0x37a4, 0x3729, 0x35a0, 0x3ab0, 0x3251, 0x2857, 0x38ef, 0x2e96, 0x38d6, 0x2cda, 0x331c, 0x39a8, 0x3a44, 0x3a7c, 0x3aa8, 0x3851, 0x3974, 0x3b93, 0x3587, 0x3baf, 0x2eac, 0x37f4, 0x38a7, 0x292d, 0x2fc0, 0x330d, 0x3404, 0x3459, 0x3999, 0x385a, 0x396c, 0x3834, 0x2534, 0x3b44, 0x2ecf, 0x34f6, 0x3632, 0x2898, 0x3511, 0x3514, 0x3bd8, 0x3284, 0x3913, 0x34c4, 0x3967, 0x3845, 0x3ab4, 0x37eb, 0x30b8, 0x3629, 0x39c1, 0x2b02, 0x37f7, 0x31d5, 0x3812, 0x2c1b, 0x2a24, 0x3499, 0x36a7, 0x39c2, 0x3952, 0x351b, 0x3ba0, 0x3706, 0x3896, 0x3600, 0x22c8, 0x3077, 0x3839, 0x36ed, 0x38d4, 0x2fd0, 0x3a29, 0x370c, 0x3bfe, -0x335b, 0x311a, 0x39b1, 0x32aa, 0x3a7e, 0x387f, 0x3846, 0x3a3b, 0x379b, 0x34c4, 0x38dc, 0x2c37, 0x394c, 0x381d, 0x3113, 0x300e, 0x3922, 0x2ddd, 0x30ee, 0x3347, 0x3881, 0x2cb5, 0x311e, 0x3023, 0x384c, 0x3a29, 0x39b9, 0x391d, 0x36ff, 0x38d7, 0x3adf, 0x3892, 0x39d7, 0x3b41, 0x3a26, 0x35cf, 0x2fa9, 0x32ff, 0x3218, 0x34af, 0x3282, 0x2ff1, 0x3823, 0x3249, 0x35c7, 0x3baf, 0x3817, 0x39c2, 0x3799, 0x38e2, 0x39f5, 0x30d1, 0x3934, 0x3696, 0x351b, 0x3586, 0x3adf, 0x3747, 0x3aa0, 0x33d7, 0x3600, 0x3a9a, 0x3b09, 0x3a96, 0x364b, 0x38d2, 0x3b1e, 0x2793, 0x3555, 0x3b85, 0x3460, 0x3747, 0x3a29, 0x21c7, 0x3b24, 0x3b7a, 0x3902, 0x2cd6, 0x379b, 0x2970, 0x3910, 0x38c2, 0x3930, 0x3674, 0x39e6, 0x3ac8, 0x38e2, 0x3841, 0x37a2, 0x3a56, 0x3424, 0x3406, 0x385c, 0x3924, 0x3923, 0x36aa, -0x33bd, 0x37ed, 0x2b2e, 0x3bdc, 0x3ae1, 0x3055, 0x3b41, 0x31d7, 0x3880, 0x3125, 0x3015, 0x282f, 0x3bc1, 0x3bd1, 0x3684, 0x2ca5, 0x344e, 0x3bb1, 0x2094, 0x349a, 0x3211, 0x31bc, 0x3bd1, 0x2d9d, 0x3b07, 0x3b33, 0x350f, 0x3459, 0x3851, 0x36b4, 0x3a84, 0x3965, 0x3a34, 0x3b3c, 0x353d, 0x2ffd, 0x33e6, 0x376b, 0x3272, 0x2e28, 0x3aea, 0x3485, 0x39f4, 0x3955, 0x277e, 0x3bfc, 0x3526, 0x384e, 0x2485, 0x38b2, 0x3101, 0x2fbd, 0x359e, 0x36ba, 0x3aa5, 0x308a, 0x38d1, 0x3434, 0x3ae9, 0x3954, 0x33e0, 0x2ff9, 0x3aa9, 0x3721, 0x2cb5, 0x28e9, 0x3524, 0x3658, 0x3a2f, 0x315c, 0x38d9, 0x396e, 0x383b, 0x3a0a, 0x32fe, 0x3479, 0x2a64, 0x3162, 0x35dd, 0x350b, 0x2c86, 0x3878, 0x346b, 0x2719, 0x204d, 0x38a4, 0x3778, 0x3863, 0x3ae3, 0x3784, 0x3174, 0x3562, 0x3a26, 0x39c4, 0x31b9, 0x3600, -0x2cf9, 0x3a34, 0x3834, 0x346f, 0x3712, 0x29e1, 0x2cfe, 0x3873, 0x3b1f, 0x3bc2, 0x3936, 0x3551, 0x3b8e, 0x3742, 0x39b1, 0x36ab, 0x390f, 0x2a6d, 0x3805, 0x32b1, 0x2e34, 0x3898, 0x3375, 0x3997, 0x3845, 0x3b9a, 0x3bac, 0x3876, 0x392c, 0x3811, 0x3aad, 0x3700, 0x2ab0, 0x340c, 0x3ba5, 0x2d7c, 0x36c7, 0x38dc, 0x3745, 0x2c5c, 0x2d0d, 0x34ee, 0x339e, 0x3565, 0x3983, 0x302c, 0x2cd8, 0x3886, 0x3994, 0x3ba6, 0x38d1, 0x315d, 0x3083, 0x3860, 0x3769, 0x3bf0, 0x33cd, 0x2b0f, 0x360c, 0x380a, 0x3442, 0x3b5b, 0x36eb, 0x3938, 0x3b69, 0x3283, 0x301b, 0x2fb0, 0x3b51, 0x3aa6, 0x2b81, 0x2cfd, 0x3aaa, 0x38fc, 0x3a73, 0x3232, 0x3614, 0x3963, 0x3b01, 0x3b9c, 0x3889, 0x372a, 0x20de, 0x3629, 0x36c0, 0x31ca, 0x3b87, 0x3543, 0x38bf, 0x3aae, 0x37d6, 0x365e, 0x35a4, 0x35da, 0x3962, 0x3741, -0x2910, 0x3478, 0x38b6, 0x355e, 0x3a0a, 0x3969, 0x36b2, 0x3bcd, 0x2633, 0x36d6, 0x395c, 0x39d9, 0x3505, 0x34cf, 0x337f, 0x3560, 0x2f11, 0x3a3d, 0x3386, 0x39ac, 0x38d3, 0x2dbe, 0x3908, 0x3599, 0x2d42, 0x38eb, 0x2d1e, 0x3bb5, 0x3550, 0x377e, 0x387f, 0x2f07, 0x3b2f, 0x37a5, 0x390a, 0x3902, 0x38e8, 0x345a, 0x38a5, 0x378b, 0x2e8d, 0x3ab3, 0x3a78, 0x34d9, 0x341a, 0x3387, 0x289a, 0x2db0, 0x384f, 0x3be6, 0x24e4, 0x3b02, 0x3af5, 0x34b2, 0x2af4, 0x3ae6, 0x337d, 0x3875, 0x34f6, 0x262d, 0x3488, 0x3a14, 0x2cb8, 0x357c, 0x3b96, 0x3208, 0x3969, 0x2bae, 0x3b77, 0x3515, 0x345d, 0x39c9, 0x354d, 0x38cf, 0x3b12, 0x3af9, 0x3a3c, 0x2f0f, 0x3a0b, 0x3075, 0x3859, 0x2045, 0x382e, 0x3901, 0x159e, 0x30fd, 0x2b73, 0x31e0, 0x3bf4, 0x3a46, 0x3afd, 0x2bbe, 0x274d, 0x39dd, 0x2bc7, 0x3450, -0x2ace, 0x3a96, 0x3bae, 0x386d, 0x3a6a, 0x2a87, 0x3913, 0x3618, 0x2cce, 0x391e, 0x3346, 0x3a02, 0x3981, 0x3afe, 0x34da, 0x3aa3, 0x3846, 0x303e, 0x377a, 0x3bc0, 0x2d77, 0x2f1a, 0x3916, 0x3b20, 0x2896, 0x3b93, 0x3a74, 0x24dd, 0x3396, 0x3b7c, 0x3a9b, 0x3b17, 0x366a, 0x1e78, 0x3b60, 0x3153, 0x3844, 0x2aa8, 0x37ab, 0x352c, 0x3455, 0x3a4d, 0x3a7a, 0x3a2f, 0x35bb, 0x358f, 0x3781, 0x2288, 0x2e69, 0x39c4, 0x3534, 0x3ba4, 0x3b8a, 0x398b, 0x3998, 0x392a, 0x3bd5, 0x3a5b, 0x31e5, 0x39af, 0x3a90, 0x3ac1, 0x374e, 0x3791, 0x3aa4, 0x3519, 0x3b0a, 0x398e, 0x3bae, 0x339e, 0x35fe, 0x3ab9, 0x2a73, 0x38b3, 0x388c, 0x3530, 0x2fe3, 0x37b5, 0x3188, 0x3b00, 0x31b2, 0x34de, 0x2f74, 0x397b, 0x3a17, 0x2df1, 0x357a, 0x3882, 0x3958, 0x39f1, 0x3ba4, 0x3864, 0x36f8, 0x33d2, 0x390f, 0x395b, -0x3a33, 0x39ea, 0x3846, 0x3502, 0x29a0, 0x38da, 0x3a62, 0x39c8, 0x3a32, 0x3987, 0x2807, 0x3895, 0x3621, 0x3981, 0x368f, 0x25b3, 0x312e, 0x3bfe, 0x38c8, 0x396d, 0x3b4b, 0x380a, 0x3b65, 0x36ca, 0x3954, 0x3ae0, 0x32f0, 0x33b6, 0x3920, 0x35fd, 0x39b3, 0x2f18, 0x3876, 0x396c, 0x39eb, 0x3b39, 0x3ab4, 0x3b9b, 0x2504, 0x3621, 0x3534, 0x2ea1, 0x33e7, 0x3af5, 0x3965, 0x33ed, 0x38d8, 0x37cc, 0x3682, 0x311b, 0x36e0, 0x2805, 0x3502, 0x38ac, 0x2dfa, 0x39d6, 0x3a41, 0x38e1, 0x3992, 0x38da, 0x3a54, 0x356b, 0x3701, 0x389d, 0x35de, 0x3b8e, 0x3b4c, 0x302b, 0x36b5, 0x2dd3, 0x397b, 0x2e07, 0x3645, 0x3267, 0x38ca, 0x1b3c, 0x3a0b, 0x3821, 0x3881, 0x3a2b, 0x3980, 0x3711, 0x2b68, 0x3a27, 0x38ca, 0x3057, 0x3a56, 0x386a, 0x3bb8, 0x38ca, 0x3152, 0x3683, 0x39c4, 0x2cf6, 0x3351, 0x3903, -0x342c, 0x30b8, 0x3704, 0x38b1, 0x3811, 0x3860, 0x3916, 0x381f, 0x3892, 0x3349, 0x1e6c, 0x30e3, 0x38c8, 0x3b7b, 0x39d3, 0x30df, 0x3bf3, 0x2f61, 0x37fa, 0x396a, 0x3bbe, 0x3872, 0x38c1, 0x3ad8, 0x3624, 0x3536, 0x35bb, 0x3b72, 0x222a, 0x31e0, 0x34d3, 0x2ee5, 0x386d, 0x3a1e, 0x28b7, 0x21e6, 0x37ef, 0x3263, 0x3ae0, 0x211e, 0x38c4, 0x3ba4, 0x380b, 0x3757, 0x34f5, 0x3a18, 0x36fa, 0x3844, 0x39fd, 0x3aa1, 0x3be2, 0x33b5, 0x3523, 0x386c, 0x20a5, 0x314f, 0x3a95, 0x3a54, 0x3bdd, 0x35de, 0x3a9f, 0x398e, 0x3a70, 0x2a6d, 0x3538, 0x31d5, 0x38b4, 0x2199, 0x2bf6, 0x3a4a, 0x3057, 0x31e5, 0x3b51, 0x31d8, 0x398b, 0x2c16, 0x3571, 0x2a31, 0x39cf, 0x3507, 0x3874, 0x3b15, 0x2e8a, 0x36f5, 0x2f3b, 0x3be1, 0x3a1b, 0x38cb, 0x3759, 0x1e24, 0x3b85, 0x3998, 0x30f7, 0x2d7d, 0x3a8a, 0x3378, -0x37a0, 0x3b60, 0x32f2, 0x34cc, 0x3ba4, 0x3b40, 0x35b1, 0x1a3c, 0x239a, 0x3ab0, 0x38cf, 0x3b26, 0x3990, 0x39d7, 0x3b7e, 0x3980, 0x2b0a, 0x3985, 0x3862, 0x3a53, 0x3409, 0x27e2, 0x38f7, 0x3a2f, 0x2dd9, 0x34f1, 0x2dda, 0x395e, 0x375b, 0x3086, 0x3053, 0x3baf, 0x365b, 0x38b6, 0x3a51, 0x34e4, 0x356d, 0x35f9, 0x3b6e, 0x38aa, 0x2d39, 0x34ac, 0x27d5, 0x38c8, 0x280c, 0x1999, 0x36da, 0x31ca, 0x3bf6, 0x31be, 0x37a2, 0x3296, 0x3902, 0x2f66, 0x2f5e, 0x3867, 0x26c6, 0x32c4, 0x3412, 0x2dd7, 0x34a6, 0x3b89, 0x354b, 0x345e, 0x33cd, 0x35ad, 0x3804, 0x3583, 0x37ea, 0x3bcb, 0x30d0, 0x38e3, 0x3100, 0x2c8f, 0x3be4, 0x35e4, 0x35cb, 0x3a5e, 0x3a50, 0x3837, 0x3540, 0x3a4f, 0x3b11, 0x32fb, 0x3949, 0x3870, 0x36e9, 0x3382, 0x3aca, 0x3b72, 0x3b03, 0x3a4d, 0x369f, 0x389c, 0x3a02, 0x27e4, -0x3954, 0x36ba, 0x25e2, 0x3847, 0x357e, 0x38da, 0x361d, 0x3b50, 0x2a0f, 0x3af9, 0x37f1, 0x3831, 0x3bc1, 0x3aaf, 0x32de, 0x3980, 0x3877, 0x3a73, 0x2944, 0x3b22, 0x30e3, 0x357e, 0x3987, 0x26ed, 0x3a5c, 0x3a5e, 0x381a, 0x3ae1, 0x3bc4, 0x3b3e, 0x3579, 0x3835, 0x3ba0, 0x37d2, 0x38b9, 0x2c78, 0x3875, 0x3808, 0x346b, 0x38c6, 0x3970, 0x342d, 0x3104, 0x2b1a, 0x3aa6, 0x3b64, 0x3a9f, 0x36f1, 0x2cac, 0x3b98, 0x3ab5, 0x3ab7, 0x3685, 0x33a5, 0x30ae, 0x3689, 0x3bd4, 0x39c1, 0x3bb8, 0x3566, 0x37bb, 0x2ee2, 0x3036, 0x3a93, 0x35d2, 0x3a4a, 0x3be5, 0x324b, 0x357c, 0x3b9a, 0x3759, 0x39f8, 0x397c, 0x3a80, 0x39d9, 0x39f4, 0x2fbd, 0x390e, 0x3865, 0x39f1, 0x3b87, 0x37c1, 0x3a3f, 0x348c, 0x368b, 0x2714, 0x2a26, 0x32a9, 0x30dc, 0x3a35, 0x371a, 0x3b96, 0x3569, 0x388b, 0x3775, 0x3604, -0x386a, 0x391b, 0x3826, 0x38fd, 0x3156, 0x3bae, 0x3755, 0x38df, 0x391c, 0x3b3b, 0x3aa5, 0x3870, 0x3b20, 0x3a0b, 0x3a85, 0x395f, 0x3a77, 0x3264, 0x2c48, 0x3a8f, 0x3815, 0x3acc, 0x3b2d, 0x3be0, 0x39ac, 0x3a41, 0x3bc0, 0x39f6, 0x3524, 0x3024, 0x2ae0, 0x3b6f, 0x366f, 0x38e7, 0x3a0c, 0x38de, 0x3a12, 0x380b, 0x38ec, 0x3222, 0x308c, 0x3871, 0x381f, 0x3be5, 0x3a0f, 0x3ac7, 0x36fe, 0x3406, 0x331f, 0x354c, 0x379d, 0x373b, 0x380f, 0x37c2, 0x3822, 0x3b8f, 0x3871, 0x3444, 0x3357, 0x3052, 0x35a3, 0x353b, 0x3a18, 0x3b60, 0x3b2e, 0x39f1, 0x1bf8, 0x3b34, 0x3a45, 0x373b, 0x311e, 0x3b4f, 0x3bb9, 0x2f13, 0x390b, 0x38eb, 0x3a53, 0x3712, 0x3ad6, 0x3b2e, 0x3a91, 0x3171, 0x361b, 0x3ad7, 0x3577, 0x37d3, 0x31f3, 0x26d3, 0x2995, 0x3060, 0x3960, 0x38d3, 0x3a9b, 0x1aa9, 0x381e, 0x349b, -0x3485, 0x3be7, 0x3a58, 0x39bb, 0x36de, 0x3456, 0x2a1e, 0x2ed2, 0x2e40, 0x3041, 0x38f1, 0x3beb, 0x3aea, 0x3049, 0x3117, 0x3bf2, 0x3707, 0x3bf3, 0x38e3, 0x3b27, 0x3a88, 0x3b5a, 0x34a6, 0x3b51, 0x39bc, 0x3841, 0x3a1d, 0x3867, 0x35e7, 0x3b46, 0x2916, 0x3a6b, 0x3956, 0x3825, 0x352f, 0x3b66, 0x3975, 0x3637, 0x3b44, 0x356e, 0x387b, 0x34eb, 0x3a4b, 0x384f, 0x3b29, 0x3ad3, 0x3a09, 0x3542, 0x3a39, 0x3551, 0x3889, 0x3429, 0x3637, 0x3bc8, 0x1aee, 0x3b20, 0x3b0a, 0x3994, 0x2fea, 0x3b4b, 0x381d, 0x3758, 0x397e, 0x3861, 0x25cc, 0x391a, 0x28d2, 0x2524, 0x3424, 0x3a6a, 0x34f3, 0x3aca, 0x3a40, 0x34e1, 0x3647, 0x3623, 0x34e9, 0x3786, 0x38a6, 0x3be1, 0x34d6, 0x350c, 0x3bf3, 0x368b, 0x39bb, 0x34e0, 0x39b0, 0x342e, 0x360d, 0x34e3, 0x3867, 0x389a, 0x38d7, 0x31f9, 0x3565, 0x2e93, -0x39a8, 0x3b31, 0x384a, 0x3370, 0x316f, 0x3815, 0x35b5, 0x3594, 0x3bbd, 0x3afe, 0x39be, 0x2276, 0x3805, 0x3b69, 0x3964, 0x33c0, 0x3a3b, 0x3231, 0x3358, 0x2b23, 0x3645, 0x3b99, 0x3735, 0x2255, 0x3595, 0x2f45, 0x381a, 0x257c, 0x3ac7, 0x38e9, 0x381b, 0x36d0, 0x3132, 0x3814, 0x3a17, 0x3ad4, 0x2abf, 0x3887, 0x3424, 0x2e96, 0x3361, 0x341a, 0x38cf, 0x3448, 0x287f, 0x3b1c, 0x3b09, 0x3983, 0x3a6e, 0x375d, 0x3458, 0x383c, 0x3196, 0x3b2f, 0x1cbe, 0x31e6, 0x29c4, 0x3745, 0x395c, 0x3aac, 0x3b2f, 0x38f1, 0x320c, 0x3a9d, 0x375f, 0x3b01, 0x32ef, 0x3531, 0x36d3, 0x3726, 0x3642, 0x2c76, 0x3916, 0x342a, 0x3548, 0x39d7, 0x39de, 0x3c00, 0x3b1e, 0x391a, 0x35e8, 0x3b2b, 0x3645, 0x3a81, 0x3876, 0x37e2, 0x36c8, 0x3b62, 0x3302, 0x1bad, 0x3961, 0x3beb, 0x39a7, 0x3611, 0x381b, 0x3266, -0x3b25, 0x384e, 0x3940, 0x2891, 0x3a32, 0x3828, 0x34f3, 0x3652, 0x3178, 0x2839, 0x3aa2, 0x2a96, 0x2df4, 0x347b, 0x28ad, 0x3699, 0x36ba, 0x32ad, 0x39e5, 0x1c06, 0x340e, 0x3968, 0x387c, 0x3bc6, 0x3839, 0x39d4, 0x2645, 0x38ae, 0x3ae3, 0x367e, 0x3090, 0x34fe, 0x3b6b, 0x2e64, 0x36bb, 0x33ef, 0x2c5a, 0x38ae, 0x36db, 0x3a6e, 0x38ac, 0x39eb, 0x387f, 0x1b0d, 0x3b7c, 0x3461, 0x34cc, 0x3b4f, 0x3045, 0x38e9, 0x35fa, 0x3625, 0x33e7, 0x35f4, 0x3939, 0x35dd, 0x2b8e, 0x3574, 0x3b6a, 0x3921, 0x38de, 0x393e, 0x29f5, 0x2e2c, 0x3a10, 0x39a3, 0x32c2, 0x38e5, 0x38c7, 0x30c3, 0x3b6e, 0x34b3, 0x36f9, 0x38bb, 0x3b24, 0x359f, 0x3308, 0x2d54, 0x3a03, 0x39ee, 0x3a7b, 0x3076, 0x2ab0, 0x3b94, 0x32a7, 0x39b8, 0x3b78, 0x28ce, 0x375d, 0x3209, 0x3385, 0x38f1, 0x38ca, 0x3b51, 0x374e, 0x3593, -0x33ca, 0x33b7, 0x3663, 0x36c1, 0x3831, 0x347e, 0x39f8, 0x34bf, 0x39dc, 0x39e6, 0x2fa9, 0x32d9, 0x3a58, 0x39e5, 0x3116, 0x3026, 0x3b59, 0x3b82, 0x3a92, 0x316a, 0x38c3, 0x2770, 0x38e7, 0x380b, 0x3b2b, 0x380d, 0x32d6, 0x3602, 0x39df, 0x382c, 0x383c, 0x3b76, 0x3647, 0x38f3, 0x36b4, 0x3693, 0x251e, 0x3b19, 0x357e, 0x37d4, 0x37ab, 0x3aee, 0x349f, 0x32ec, 0x3401, 0x3bcc, 0x3145, 0x3845, 0x3b76, 0x38a9, 0x37f4, 0x343b, 0x3933, 0x38fe, 0x3af8, 0x3178, 0x392b, 0x3aed, 0x2f64, 0x3992, 0x39f8, 0x34fe, 0x3737, 0x3a24, 0x3bf9, 0x3a31, 0x3a60, 0x37b6, 0x39ad, 0x3ba5, 0x381d, 0x384d, 0x3702, 0x39d8, 0x379e, 0x38ba, 0x3a79, 0x391a, 0x34ce, 0x2d57, 0x3a7e, 0x35f0, 0x382f, 0x3937, 0x3698, 0x3acc, 0x34ca, 0x382d, 0x35f7, 0x34f7, 0x3b90, 0x374d, 0x380f, 0x2e14, 0x3ac3, 0x3583, -0x36fe, 0x38aa, 0x3abd, 0x3750, 0x2f2d, 0x3906, 0x3aed, 0x32e7, 0x3b42, 0x3823, 0x265f, 0x17f9, 0x248a, 0x38ee, 0x3a11, 0x3b21, 0x35a9, 0x2dd7, 0x35dc, 0x38ed, 0x3860, 0x3989, 0x3229, 0x333d, 0x2c78, 0x30fa, 0x2d3c, 0x3a04, 0x39c2, 0x3895, 0x3a67, 0x2f53, 0x3583, 0x39bd, 0x3a03, 0x3afd, 0x3892, 0x3889, 0x39e5, 0x3825, 0x39dd, 0x3a23, 0x3644, 0x31d1, 0x3875, 0x3a46, 0x38c1, 0x390c, 0x394d, 0x262a, 0x2823, 0x2c94, 0x3645, 0x39f9, 0x3366, 0x3710, 0x2f70, 0x348c, 0x2fa3, 0x3b0e, 0x3241, 0x3491, 0x386f, 0x38b6, 0x34e1, 0x30fc, 0x32cc, 0x37be, 0x3519, 0x334b, 0x389c, 0x34c1, 0x388b, 0x38cf, 0x3980, 0x2463, 0x3a34, 0x32ff, 0x3a3c, 0x3932, 0x3b47, 0x39ab, 0x3a9c, 0x27b6, 0x2d90, 0x35d2, 0x39d2, 0x3a5d, 0x3bf2, 0x3a5f, 0x38e1, 0x3b81, 0x3865, 0x3a31, 0x3b03, 0x3906, -0x35bf, 0x3818, 0x373b, 0x3491, 0x34a9, 0x3b40, 0x2cda, 0x381b, 0x2a00, 0x396e, 0x347a, 0x2d46, 0x2fa1, 0x3bef, 0x3acd, 0x362f, 0x2a7f, 0x3a38, 0x3346, 0x3889, 0x3061, 0x3b20, 0x3836, 0x35a4, 0x3a7d, 0x3487, 0x381a, 0x381f, 0x3977, 0x3862, 0x312a, 0x315e, 0x3841, 0x3453, 0x21f5, 0x363d, 0x2ddb, 0x35bb, 0x3bb4, 0x3b36, 0x382a, 0x36d8, 0x3764, 0x3b9e, 0x26b4, 0x29ce, 0x3451, 0x33ba, 0x37fb, 0x3a4f, 0x2181, 0x35cc, 0x3288, 0x2de2, 0x3a13, 0x2dd5, 0x326d, 0x3731, 0x3931, 0x3b0d, 0x34c6, 0x36bd, 0x38fe, 0x3a0a, 0x283b, 0x38c0, 0x3806, 0x39fa, 0x39a6, 0x39f8, 0x3b09, 0x36dc, 0x385c, 0x329a, 0x3a89, 0x2dbb, 0x39ee, 0x3b65, 0x3436, 0x37e3, 0x3a27, 0x3910, 0x3b43, 0x398c, 0x2efa, 0x3467, 0x39ce, 0x38ae, 0x3567, 0x3484, 0x38e0, 0x327e, 0x2c32, 0x39c1, 0x3b63, 0x35ac, -0x35c1, 0x2d9e, 0x38af, 0x32e3, 0x347f, 0x3855, 0x3527, 0x3850, 0x3b55, 0x3baa, 0x392a, 0x37d9, 0x39d3, 0x3960, 0x3ab0, 0x2ccb, 0x2da9, 0x3990, 0x3b87, 0x2c1c, 0x397d, 0x28f6, 0x397d, 0x3944, 0x30be, 0x3ba4, 0x2f6d, 0x34d4, 0x3416, 0x39e7, 0x398f, 0x3958, 0x3b7b, 0x3a1d, 0x31e6, 0x27fe, 0x3ba0, 0x33b2, 0x3080, 0x35a9, 0x3800, 0x37f6, 0x3965, 0x3594, 0x322e, 0x3b27, 0x3bdb, 0x3b7a, 0x38a6, 0x1848, 0x3b61, 0x3842, 0x3ad2, 0x390f, 0x3b17, 0x3715, 0x3798, 0x33cb, 0x33db, 0x383f, 0x394b, 0x30cb, 0x3bbb, 0x366d, 0x3b5b, 0x38ca, 0x36cb, 0x3558, 0x39f6, 0x3776, 0x388a, 0x35d1, 0x3475, 0x3509, 0x3742, 0x3b15, 0x3ad4, 0x3182, 0x39e7, 0x3b5a, 0x35dd, 0x3751, 0x32b8, 0x349f, 0x3996, 0x3a4c, 0x35e9, 0x266e, 0x37f2, 0x3be3, 0x2525, 0x26af, 0x3282, 0x3810, 0x2cf1, 0x383a, -0x3aa3, 0x399c, 0x3630, 0x38c8, 0x3203, 0x19a2, 0x35e2, 0x38fe, 0x38a2, 0x3b63, 0x3318, 0x231d, 0x3999, 0x3ae9, 0x3132, 0x21b2, 0x2a77, 0x394e, 0x2cf4, 0x3890, 0x38a6, 0x30ff, 0x3be2, 0x3231, 0x3b72, 0x3487, 0x3496, 0x351c, 0x38d6, 0x3944, 0x3949, 0x3b7b, 0x362f, 0x37cd, 0x38f6, 0x3a10, 0x3a93, 0x31be, 0x3b8e, 0x360a, 0x3567, 0x3803, 0x3b16, 0x3b59, 0x3a4e, 0x3770, 0x2d73, 0x3312, 0x382f, 0x30fa, 0x3921, 0x339d, 0x2222, 0x3049, 0x3b4e, 0x3b67, 0x3b07, 0x3b31, 0x34e8, 0x3684, 0x3a09, 0x389b, 0x3999, 0x39d1, 0x3765, 0x37bc, 0x3732, 0x3b35, 0x3819, 0x36ef, 0x38fc, 0x3665, 0x3b96, 0x3015, 0x3847, 0x35e6, 0x3167, 0x34ba, 0x3794, 0x3a6a, 0x35d8, 0x30f4, 0x34c7, 0x3bce, 0x3903, 0x3bf3, 0x3a72, 0x3828, 0x381a, 0x3981, 0x3925, 0x39a1, 0x35f4, 0x35dd, 0x3954, 0x2bc5, -0x3884, 0x2d8e, 0x2a49, 0x383f, 0x15af, 0x3a4c, 0x3af6, 0x3ad8, 0x3847, 0x3b07, 0x3a15, 0x3bdd, 0x3a8c, 0x2caf, 0x364a, 0x3825, 0x2b2c, 0x3a97, 0x33b8, 0x3ac4, 0x347e, 0x36f7, 0x36ed, 0x3131, 0x2bea, 0x3841, 0x3880, 0x39e4, 0x30c3, 0x3b62, 0x32ba, 0x34f0, 0x34c7, 0x396a, 0x3722, 0x384d, 0x3165, 0x3a71, 0x34bf, 0x3018, 0x372c, 0x3876, 0x347f, 0x3be2, 0x117d, 0x3a2c, 0x3917, 0x3895, 0x3a3b, 0x2f92, 0x3b65, 0x3af3, 0x39b3, 0x290c, 0x301b, 0x3a9e, 0x39ef, 0x38d0, 0x34e8, 0x336a, 0x37e8, 0x3685, 0x376e, 0x3b8b, 0x3b4c, 0x35a7, 0x3919, 0x3504, 0x3b59, 0x3a85, 0x2edc, 0x3b32, 0x36bc, 0x21fa, 0x357b, 0x38a6, 0x380d, 0x3969, 0x348c, 0x39cd, 0x2d9a, 0x3818, 0x380e, 0x39f4, 0x35ce, 0x3823, 0x3a29, 0x2c1a, 0x3846, 0x3811, 0x2f33, 0x38a1, 0x382b, 0x355a, 0x3961, 0x3a97, -0x352f, 0x3bec, 0x3a27, 0x3888, 0x39d2, 0x38d8, 0x314c, 0x38c8, 0x3779, 0x2f99, 0x3a5b, 0x3971, 0x3b93, 0x368c, 0x3904, 0x35f5, 0x277f, 0x34f9, 0x3368, 0x3824, 0x3a74, 0x3843, 0x3284, 0x35aa, 0x35b4, 0x372a, 0x35ca, 0x3b2b, 0x3877, 0x37cb, 0x3110, 0x33ad, 0x3ba3, 0x3bba, 0x34e4, 0x36ab, 0x3984, 0x2aac, 0x39ec, 0x38ae, 0x3931, 0x3410, 0x333e, 0x2c45, 0x3482, 0x3868, 0x392c, 0x384e, 0x3678, 0x38ee, 0x395b, 0x38f8, 0x3194, 0x33e2, 0x2af5, 0x397c, 0x32ca, 0x32c3, 0x3913, 0x3309, 0x3bb1, 0x3253, 0x3640, 0x2cc8, 0x3385, 0x28d0, 0x385e, 0x39fd, 0x38cc, 0x3bf6, 0x332e, 0x3be1, 0x3835, 0x3b3e, 0x38cc, 0x38ff, 0x365f, 0x3a09, 0x3a32, 0x3b84, 0x3596, 0x37f3, 0x3431, 0x3af6, 0x3bec, 0x38cd, 0x35ab, 0x3af5, 0x3359, 0x3762, 0x3844, 0x374c, 0x3980, 0x3886, 0x2e62, 0x35cc, -0x3b76, 0x3b5f, 0x2434, 0x35fc, 0x38d5, 0x3095, 0x3944, 0x380e, 0x349f, 0x39d7, 0x3755, 0x3768, 0x3b3a, 0x34ce, 0x3bef, 0x365a, 0x3987, 0x3897, 0x3509, 0x3984, 0x32f8, 0x3b7b, 0x37b9, 0x3a4b, 0x2c86, 0x369a, 0x396d, 0x2d21, 0x3477, 0x39af, 0x3b60, 0x3680, 0x39d7, 0x31d8, 0x3b8a, 0x3aed, 0x3a65, 0x3710, 0x39d3, 0x3bf1, 0x331f, 0x20c0, 0x34f2, 0x34cc, 0x3934, 0x38c5, 0x396b, 0x3894, 0x38fa, 0x33c9, 0x3408, 0x3340, 0x360e, 0x36e6, 0x3942, 0x2f3c, 0x3be4, 0x38f4, 0x35a1, 0x2cf7, 0x3931, 0x3911, 0x39e7, 0x2dcc, 0x3951, 0x334c, 0x3b00, 0x39ad, 0x2370, 0x35ea, 0x3402, 0x37d6, 0x377d, 0x3652, 0x3b56, 0x2cc4, 0x3b1f, 0x35af, 0x3920, 0x3423, 0x398a, 0x35e2, 0x39f1, 0x3ab5, 0x3ae2, 0x345c, 0x31ef, 0x38ef, 0x3bb1, 0x3937, 0x2ae8, 0x3221, 0x3ae9, 0x390d, 0x3b2f, 0x3048, -0x3047, 0x3767, 0x37f7, 0x3bfa, 0x3b33, 0x3a2d, 0x362c, 0x3a93, 0x3b66, 0x391a, 0x31c7, 0x3282, 0x39b9, 0x3454, 0x37b7, 0x3019, 0x3a9a, 0x37b5, 0x2dcd, 0x3618, 0x34db, 0x3471, 0x3b35, 0x3684, 0x385c, 0x38bf, 0x3bd7, 0x3a44, 0x3130, 0x38c8, 0x30cf, 0x37bb, 0x3bcc, 0x3669, 0x3b27, 0x3949, 0x355f, 0x314a, 0x383d, 0x3a20, 0x381c, 0x3bcf, 0x3282, 0x39f3, 0x3a49, 0x3ad9, 0x34aa, 0x3add, 0x3938, 0x3bbe, 0x3650, 0x37f2, 0x2c79, 0x39c4, 0x3304, 0x3a8c, 0x3162, 0x3520, 0x3637, 0x39e3, 0x2478, 0x3803, 0x34dd, 0x3104, 0x37ee, 0x3861, 0x38e8, 0x356c, 0x3be0, 0x3633, 0x395a, 0x3afb, 0x378b, 0x3b8d, 0x2f97, 0x37df, 0x31dd, 0x3475, 0x34f7, 0x36ef, 0x3966, 0x2c50, 0x38a1, 0x2720, 0x39f3, 0x3805, 0x3310, 0x3656, 0x3571, 0x3bd9, 0x3bc0, 0x391c, 0x38d6, 0x2562, 0x1fc8, 0x3524, -0x362a, 0x3a8c, 0x3830, 0x39c7, 0x38ca, 0x3af3, 0x3602, 0x3700, 0x3773, 0x3a78, 0x38f3, 0x22be, 0x3822, 0x2eac, 0x3748, 0x32ee, 0x2a0e, 0x38ed, 0x3830, 0x3401, 0x3971, 0x3a35, 0x3984, 0x3a86, 0x3501, 0x2fe8, 0x3ba3, 0x3587, 0x3895, 0x3858, 0x2d46, 0x3724, 0x3b84, 0x39b6, 0x3a17, 0x3b1f, 0x38a9, 0x33de, 0x3723, 0x367d, 0x3bc4, 0x3817, 0x3b1e, 0x35f1, 0x3abb, 0x373d, 0x2abe, 0x3206, 0x3872, 0x3946, 0x3898, 0x33b2, 0x25fb, 0x36ae, 0x256a, 0x390e, 0x3b3b, 0x34d8, 0x36ba, 0x389b, 0x377a, 0x3b0e, 0x32a6, 0x26f9, 0x39e1, 0x327e, 0x2d58, 0x3bd3, 0x3a7f, 0x38b9, 0x3811, 0x29b7, 0x2816, 0x38f9, 0x3b64, 0x39b6, 0x3a29, 0x30a4, 0x3989, 0x3b73, 0x307a, 0x37c7, 0x372d, 0x3830, 0x390e, 0x315b, 0x335d, 0x3929, 0x3917, 0x374c, 0x34af, 0x3531, 0x34e9, 0x3bcf, 0x3761, 0x3b62, -0x34e5, 0x39e3, 0x3b35, 0x2a57, 0x3688, 0x2f0c, 0x3b87, 0x3bdd, 0x358d, 0x381a, 0x39ae, 0x2f79, 0x394f, 0x3708, 0x3560, 0x3ada, 0x3480, 0x3af5, 0x3bd8, 0x39d1, 0x3795, 0x2a29, 0x3b0a, 0x3515, 0x3858, 0x3ab4, 0x3968, 0x3660, 0x37b2, 0x3601, 0x36ae, 0x3229, 0x3383, 0x2c30, 0x3a41, 0x3b0d, 0x33ef, 0x3b6b, 0x366f, 0x3b33, 0x3a82, 0x3841, 0x3a89, 0x3bea, 0x3542, 0x328a, 0x3bc9, 0x34f2, 0x3ac0, 0x3067, 0x3311, 0x38f4, 0x23d0, 0x3964, 0x38b1, 0x390c, 0x3a9f, 0x28bb, 0x3ac1, 0x39e6, 0x31dd, 0x2f55, 0x3a19, 0x3a51, 0x3a38, 0x2841, 0x381a, 0x3938, 0x36ea, 0x3be0, 0x3b35, 0x39c1, 0x2fef, 0x37ec, 0x389f, 0x3b72, 0x37b9, 0x3bf7, 0x325d, 0x38e9, 0x333d, 0x39ce, 0x2e79, 0x3682, 0x37c1, 0x38b9, 0x3990, 0x37fd, 0x3302, 0x32a6, 0x2a69, 0x3831, 0x2b59, 0x3b48, 0x35b4, 0x2aed, -0x37e2, 0x340a, 0x3279, 0x3723, 0x397d, 0x3839, 0x39ec, 0x3025, 0x3803, 0x3b54, 0x3a70, 0x3b7d, 0x2f2a, 0x315c, 0x35ed, 0x3ace, 0x3845, 0x3bee, 0x3870, 0x3492, 0x380e, 0x3431, 0x3a47, 0x3a33, 0x38ae, 0x3a40, 0x3908, 0x33c5, 0x38db, 0x3b24, 0x3847, 0x32a3, 0x3959, 0x3a36, 0x35c4, 0x3960, 0x396f, 0x3786, 0x38ef, 0x36e7, 0x35c3, 0x3a28, 0x3893, 0x3b2c, 0x2e03, 0x374d, 0x3489, 0x3bf4, 0x38fb, 0x35b2, 0x38c1, 0x3a0f, 0x394f, 0x35e0, 0x34bd, 0x3bcc, 0x3be1, 0x315f, 0x2a41, 0x308d, 0x2e5d, 0x3a02, 0x2e99, 0x3b1a, 0x3b6c, 0x3ba1, 0x38da, 0x395a, 0x3877, 0x39ec, 0x3855, 0x2fd6, 0x2857, 0x2e1d, 0x3677, 0x3034, 0x3136, 0x3880, 0x327c, 0x38a3, 0x243e, 0x3921, 0x3b69, 0x3bca, 0x376e, 0x3998, 0x3b02, 0x3a2b, 0x35c0, 0x3985, 0x3b14, 0x38d5, 0x347b, 0x3adc, 0x3639, 0x3b9f, -0x3b50, 0x3334, 0x38b6, 0x3ae5, 0x3b39, 0x35fa, 0x2752, 0x3ba6, 0x3439, 0x389a, 0x2888, 0x39be, 0x3710, 0x3922, 0x3bbf, 0x3726, 0x2d91, 0x22ef, 0x398f, 0x3465, 0x3ba8, 0x3ad4, 0x39a0, 0x3a55, 0x3a2f, 0x387d, 0x3788, 0x3a19, 0x3926, 0x38a0, 0x383c, 0x3adc, 0x3b84, 0x3518, 0x322f, 0x3773, 0x3a74, 0x31b7, 0x3901, 0x3361, 0x3959, 0x2d8e, 0x3575, 0x2faf, 0x2ccf, 0x39ad, 0x339b, 0x3bcc, 0x3be6, 0x267e, 0x3582, 0x3973, 0x3b23, 0x3513, 0x3946, 0x38c8, 0x3b09, 0x383a, 0x34a6, 0x3aaa, 0x36f8, 0x34af, 0x368d, 0x3beb, 0x361f, 0x357f, 0x3b7f, 0x3ada, 0x37bb, 0x3986, 0x358c, 0x3ac2, 0x3448, 0x3ace, 0x2896, 0x377a, 0x3a2d, 0x3992, 0x381a, 0x389d, 0x3a18, 0x3bec, 0x37ac, 0x384d, 0x3107, 0x3323, 0x36d0, 0x371d, 0x3a21, 0x3b07, 0x2ef3, 0x342a, 0x39e6, 0x3037, 0x39a5, 0x3510, -0x3b81, 0x2559, 0x3914, 0x3883, 0x3534, 0x33e2, 0x29d9, 0x3b82, 0x3bf7, 0x390c, 0x31e3, 0x3af0, 0x2a26, 0x3803, 0x34ec, 0x356f, 0x3aed, 0x3af7, 0x34fc, 0x39f9, 0x3ad2, 0x39f6, 0x3abf, 0x397d, 0x2d55, 0x27f6, 0x3b03, 0x3335, 0x3872, 0x34df, 0x3801, 0x39c9, 0x326f, 0x3a15, 0x3810, 0x22c5, 0x359e, 0x366c, 0x3493, 0x39b2, 0x38c5, 0x3a6d, 0x39b9, 0x33dc, 0x34d7, 0x3b0b, 0x378d, 0x39ed, 0x3566, 0x396a, 0x368e, 0x3a4f, 0x3571, 0x3831, 0x3290, 0x3232, 0x39f4, 0x3915, 0x377d, 0x3af9, 0x3460, 0x31da, 0x23e6, 0x315c, 0x2b67, 0x366b, 0x2ccf, 0x38f8, 0x39c0, 0x37cc, 0x322b, 0x3979, 0x2529, 0x34b5, 0x3759, 0x360c, 0x3180, 0x3962, 0x30d2, 0x394f, 0x3ac5, 0x3b52, 0x371b, 0x3588, 0x3437, 0x34e5, 0x3a58, 0x3bb8, 0x3bd6, 0x3858, 0x3915, 0x3bcc, 0x3835, 0x30c9, 0x259f, 0x3051, -0x399d, 0x3044, 0x382b, 0x3449, 0x3b82, 0x3a4a, 0x38b5, 0x383f, 0x1c23, 0x3b6f, 0x3941, 0x35ff, 0x395e, 0x26c0, 0x3474, 0x39b9, 0x39da, 0x2aca, 0x380a, 0x39c3, 0x393e, 0x39e9, 0x3b77, 0x3a64, 0x345b, 0x3712, 0x38e4, 0x3a97, 0x3451, 0x3a3d, 0x379f, 0x3a01, 0x3642, 0x3b7e, 0x30b6, 0x35d6, 0x39b6, 0x2cb3, 0x383a, 0x3566, 0x3a76, 0x3418, 0x31ac, 0x3ae2, 0x350d, 0x3af6, 0x382c, 0x37b8, 0x339c, 0x3969, 0x379b, 0x36b8, 0x3444, 0x382a, 0x2fab, 0x3727, 0x3b3c, 0x2e19, 0x3643, 0x30d4, 0x284c, 0x388b, 0x3a47, 0x35cc, 0x3945, 0x3470, 0x3ae6, 0x39e5, 0x36fd, 0x38ed, 0x344b, 0x3b7c, 0x39d0, 0x3833, 0x3a38, 0x34f4, 0x3046, 0x3757, 0x371d, 0x25a8, 0x386d, 0x2f66, 0x38a2, 0x2e32, 0x39e3, 0x1969, 0x313d, 0x35f5, 0x3804, 0x28f5, 0x2e8a, 0x342c, 0x3bdc, 0x3ad3, 0x3259, 0x3622, -0x325e, 0x3912, 0x398b, 0x3b70, 0x39cd, 0x3931, 0x2f75, 0x3542, 0x357a, 0x315f, 0x3ac4, 0x374f, 0x32dd, 0x386c, 0x35f1, 0x39b7, 0x38b7, 0x3b2f, 0x3a7b, 0x3b5c, 0x3bef, 0x37f6, 0x3047, 0x386a, 0x3903, 0x3607, 0x3946, 0x3911, 0x399d, 0x3be8, 0x2d83, 0x3a3c, 0x369b, 0x204f, 0x3a4c, 0x3185, 0x38c8, 0x39c3, 0x3075, 0x3542, 0x361d, 0x250f, 0x385d, 0x3485, 0x1ac2, 0x37af, 0x3ab4, 0x2dd4, 0x3595, 0x36de, 0x3add, 0x3564, 0x3566, 0x3b8d, 0x2d55, 0x3629, 0x2c8a, 0x3280, 0x3801, 0x329a, 0x3b20, 0x3b42, 0x3bf0, 0x2f27, 0x3866, 0x2caf, 0x3b40, 0x3922, 0x351e, 0x3925, 0x3b42, 0x3968, 0x39db, 0x3b77, 0x3877, 0x384a, 0x3058, 0x3aaf, 0x3a70, 0x3b33, 0x3685, 0x3b0a, 0x3a8d, 0x2d38, 0x35bb, 0x31b2, 0x36e8, 0x3a79, 0x367e, 0x3a09, 0x3a74, 0x3b9f, 0x3367, 0x37a5, 0x38a3, 0x3949, -0x2bea, 0x2b88, 0x3965, 0x3112, 0x3b79, 0x391b, 0x38a9, 0x38dc, 0x36c4, 0x3ab1, 0x3677, 0x346e, 0x3b44, 0x34b7, 0x3301, 0x381d, 0x3a3a, 0x3254, 0x3b6b, 0x389a, 0x3a65, 0x379d, 0x3178, 0x2df2, 0x3380, 0x385d, 0x383c, 0x36ef, 0x3243, 0x3b7c, 0x38cb, 0x39f5, 0x3144, 0x3336, 0x3a1b, 0x3b54, 0x3983, 0x3b54, 0x3861, 0x34dd, 0x3996, 0x3a96, 0x34ec, 0x2e9e, 0x36db, 0x392f, 0x3164, 0x34df, 0x38fc, 0x35e5, 0x3432, 0x2a1b, 0x39d0, 0x385b, 0x2d25, 0x3405, 0x3809, 0x36f6, 0x3947, 0x3a23, 0x3ba7, 0x3a6f, 0x394f, 0x381c, 0x387e, 0x3aa3, 0x3586, 0x38ba, 0x3aed, 0x2f65, 0x3b77, 0x3921, 0x3843, 0x3652, 0x35ef, 0x39ea, 0x399a, 0x3a10, 0x3b1e, 0x39af, 0x3bac, 0x2f72, 0x3755, 0x38c7, 0x348e, 0x3aaf, 0x32cd, 0x3210, 0x3a78, 0x3462, 0x35a1, 0x327d, 0x38a4, 0x3569, 0x39fe, 0x3809, -0x39d6, 0x3985, 0x2211, 0x36f1, 0x36da, 0x34e8, 0x3bd7, 0x3aa3, 0x370b, 0x2e90, 0x3973, 0x3754, 0x3994, 0x31fe, 0x35e6, 0x3b87, 0x3967, 0x34d6, 0x3a01, 0x3935, 0x3afb, 0x3078, 0x3b9f, 0x31cf, 0x2496, 0x3ab7, 0x345e, 0x31a2, 0x3548, 0x3892, 0x38d8, 0x38e4, 0x3908, 0x340c, 0x3114, 0x37a7, 0x3a05, 0x37db, 0x39ee, 0x3b9e, 0x37e4, 0x375e, 0x27b0, 0x27ee, 0x3b89, 0x3bd6, 0x3911, 0x329d, 0x3596, 0x36b7, 0x38ea, 0x37b5, 0x353e, 0x368e, 0x3a25, 0x3989, 0x29cb, 0x36e2, 0x3b80, 0x390f, 0x3978, 0x359a, 0x3150, 0x3865, 0x3827, 0x2ebb, 0x3afc, 0x3ad8, 0x291b, 0x3b1f, 0x3036, 0x3b4b, 0x3411, 0x2450, 0x3928, 0x382f, 0x3968, 0x32af, 0x36e1, 0x34a0, 0x3076, 0x3289, 0x284d, 0x39ca, 0x3765, 0x2fc3, 0x3ad0, 0x2a90, 0x3a9e, 0x347f, 0x367c, 0x3bee, 0x3982, 0x380e, 0x3623, 0x33d5, -0x33eb, 0x315b, 0x3b82, 0x3901, 0x39d8, 0x3409, 0x394f, 0x38aa, 0x34e5, 0x3b0e, 0x30d8, 0x37db, 0x37cb, 0x32e0, 0x37de, 0x3896, 0x3b9f, 0x3919, 0x3869, 0x3762, 0x3698, 0x2dc6, 0x31ce, 0x3200, 0x36fa, 0x396f, 0x3b96, 0x3890, 0x3ac3, 0x331a, 0x3619, 0x3ac2, 0x2f37, 0x39e4, 0x39a0, 0x2130, 0x391c, 0x3a27, 0x3b7a, 0x3b49, 0x3ba8, 0x3a95, 0x2c78, 0x3a1a, 0x3591, 0x354a, 0x36c1, 0x38ba, 0x392f, 0x37a5, 0x3898, 0x3a9d, 0x3b8f, 0x389f, 0x3a6e, 0x389d, 0x36de, 0x3abe, 0x3669, 0x38f1, 0x391a, 0x3b6f, 0x2987, 0x30aa, 0x3ae7, 0x3709, 0x389a, 0x39a1, 0x34a0, 0x3a1a, 0x3bd0, 0x35d7, 0x3936, 0x3bc9, 0x327a, 0x3a1b, 0x31c8, 0x3be6, 0x3926, 0x3654, 0x317b, 0x39d2, 0x3b54, 0x39ae, 0x2d1e, 0x31a0, 0x30dd, 0x362a, 0x2c28, 0x3020, 0x3585, 0x30c7, 0x3af0, 0x3ad3, 0x3b2b, 0x382f, -0x384d, 0x3ace, 0x3a7d, 0x300d, 0x3a39, 0x3ac5, 0x2b3b, 0x2c05, 0x2dfc, 0x3bee, 0x3b46, 0x343f, 0x3a00, 0x33be, 0x2d9e, 0x3790, 0x3467, 0x3a11, 0x39e5, 0x3943, 0x34b2, 0x393c, 0x2e29, 0x34ae, 0x34dd, 0x2491, 0x3ac2, 0x3279, 0x3a46, 0x318d, 0x389a, 0x2f39, 0x1cb3, 0x37cf, 0x31c3, 0x318a, 0x3172, 0x3b66, 0x357a, 0x3896, 0x3b6b, 0x3a47, 0x3a43, 0x33bc, 0x35f4, 0x39f5, 0x39c1, 0x34fe, 0x39a2, 0x367b, 0x3b19, 0x3bef, 0x3461, 0x39a9, 0x3a35, 0x2bfa, 0x34b4, 0x38fa, 0x3203, 0x332b, 0x39ef, 0x3a2a, 0x3bc2, 0x39ef, 0x364e, 0x3a8c, 0x2fa8, 0x2612, 0x3406, 0x391a, 0x39ff, 0x3bba, 0x3971, 0x2637, 0x3664, 0x3a2b, 0x3053, 0x3bf4, 0x3b2c, 0x3b1f, 0x27e3, 0x3ba0, 0x38ee, 0x388f, 0x3a17, 0x328e, 0x3bcd, 0x306a, 0x3909, 0x38f2, 0x3a16, 0x380b, 0x2e11, 0x38b5, 0x36ba, 0x387a, -0x3a4f, 0x38f9, 0x3862, 0x3525, 0x38ae, 0x34bd, 0x3a07, 0x3881, 0x2e59, 0x3969, 0x3a7a, 0x3b75, 0x2619, 0x399d, 0x314a, 0x39fe, 0x3af1, 0x3a0c, 0x2875, 0x39c6, 0x3887, 0x3ab2, 0x36e8, 0x3497, 0x396f, 0x3567, 0x2ef7, 0x3845, 0x2cd3, 0x3b99, 0x30cc, 0x300d, 0x3a4f, 0x3453, 0x386a, 0x39d5, 0x3beb, 0x392e, 0x3766, 0x3b37, 0x3b57, 0x355c, 0x37fb, 0x3a36, 0x343a, 0x37e1, 0x1f1c, 0x218b, 0x3820, 0x345b, 0x3bd5, 0x329f, 0x3679, 0x3b0f, 0x28d4, 0x3891, 0x3b51, 0x3937, 0x3585, 0x3936, 0x3ace, 0x30fa, 0x384e, 0x3a16, 0x34bf, 0x34f4, 0x3a08, 0x3916, 0x2ed6, 0x3740, 0x382c, 0x3446, 0x3b77, 0x3af7, 0x3a42, 0x284f, 0x366c, 0x36ea, 0x3680, 0x326a, 0x3b5c, 0x3678, 0x3bee, 0x3853, 0x36cc, 0x35c2, 0x2f28, 0x34f6, 0x31d8, 0x38b6, 0x3a7b, 0x3b96, 0x3056, 0x3afc, 0x351a, 0x3570, -0x3439, 0x3a20, 0x3b65, 0x362f, 0x38f8, 0x30e5, 0x3974, 0x38cf, 0x3b7e, 0x3b2d, 0x3828, 0x382c, 0x3979, 0x349c, 0x3b6f, 0x3887, 0x3a3a, 0x3bec, 0x3aee, 0x3abd, 0x3510, 0x3a50, 0x2dcb, 0x31d9, 0x39ed, 0x3a5b, 0x39d6, 0x3a89, 0x3511, 0x3199, 0x39a3, 0x3803, 0x3a02, 0x3bdd, 0x3588, 0x35cb, 0x3a69, 0x3bab, 0x23ea, 0x3750, 0x3b92, 0x3bfc, 0x359f, 0x3bdb, 0x3a6b, 0x3b07, 0x355d, 0x3a0a, 0x39cd, 0x1e5e, 0x38c2, 0x3965, 0x34f4, 0x37d0, 0x35b2, 0x34c8, 0x3ad5, 0x34f4, 0xba8, 0x3b62, 0x380b, 0x3b8f, 0x3ae7, 0x30c0, 0x38a0, 0x3341, 0x323a, 0x32d1, 0x32a8, 0x3413, 0x38bb, 0x37cf, 0x397e, 0x3884, 0x2952, 0x2b54, 0x3b8a, 0x3bd4, 0x3522, 0x3b0f, 0x3888, 0x38e4, 0x38d1, 0x3bfa, 0x3adc, 0x3b72, 0x3bc5, 0x33de, 0x39f6, 0x390e, 0x2fd3, 0x3875, 0x261c, 0x2a54, 0x315d, 0x388a, -0x36a4, 0x38d4, 0x3405, 0x3761, 0x37ae, 0x3650, 0x3065, 0x3b0b, 0x283f, 0x3a67, 0x360c, 0x3b9c, 0x2eea, 0x2e99, 0x349f, 0x3849, 0x3b43, 0x3744, 0x3834, 0x3852, 0x36e7, 0x3835, 0x3499, 0x2ee3, 0x3aa2, 0x3823, 0x31c2, 0x380c, 0x354c, 0x37f5, 0x324c, 0x302b, 0x34bf, 0x26e6, 0x39a0, 0x3068, 0x2e1d, 0x3061, 0x3b24, 0x33a7, 0x3ada, 0x38a5, 0x37c3, 0x39a0, 0x3aa0, 0x382f, 0x21e9, 0x3a36, 0x3a8b, 0x395a, 0x343d, 0x3837, 0x361d, 0x33af, 0x3b87, 0x399b, 0x3904, 0x344a, 0x3a10, 0x3b08, 0x348c, 0x2fc7, 0x3239, 0x390b, 0x384c, 0x34c6, 0x2873, 0x357c, 0x32b6, 0x3ae5, 0x3bb4, 0x30f2, 0x39e7, 0x2b6a, 0x3969, 0x39ab, 0x3316, 0x3638, 0x3a22, 0x3505, 0x35f5, 0x3b42, 0x3372, 0x33e5, 0x322a, 0x3a8f, 0x36be, 0x3982, 0x341d, 0x3510, 0x3714, 0x3871, 0x3a56, 0x3739, 0x3457, 0x3822, -0x35ee, 0x3bb5, 0x357c, 0x3a66, 0x3bfe, 0x3469, 0x37e0, 0x39c0, 0x2c91, 0x3805, 0x31c4, 0x39e4, 0x32f9, 0x3140, 0x2ef9, 0x389c, 0x38e8, 0x3404, 0x2d4b, 0x36fd, 0x32a8, 0x397e, 0x3939, 0x2c8f, 0x327d, 0x341a, 0x35eb, 0x36bb, 0x307c, 0x3a9c, 0x3b25, 0x3b83, 0x31b7, 0x377c, 0x3450, 0x34af, 0x2d66, 0x36ab, 0x3520, 0x3648, 0x2e5e, 0x3adc, 0x3422, 0x3b9e, 0x36b4, 0x35ac, 0x3a7b, 0x36ae, 0x39c5, 0x2c2d, 0x3b8f, 0x3998, 0x3a82, 0x2cb5, 0x3a0b, 0x34aa, 0x3895, 0x3811, 0x3545, 0x35b5, 0x39c4, 0x3b43, 0x39ae, 0x355a, 0x2db8, 0x3b7f, 0x3655, 0x354d, 0x34ee, 0x30fb, 0x3a7c, 0x338b, 0x3b6c, 0x2c39, 0x38bb, 0x2de3, 0x3114, 0x38bf, 0x2e01, 0x3483, 0x2964, 0x3828, 0x2da3, 0x3a05, 0x3add, 0x3477, 0x3bf6, 0x3a7a, 0x38a8, 0x34be, 0x2d01, 0x2f9b, 0x29d1, 0x3995, 0x38a1, 0x3632, -0x3629, 0x3451, 0x31ca, 0x3b76, 0x382e, 0x3aad, 0x3a3a, 0x3aed, 0x3471, 0x3b38, 0x2a7b, 0x38f4, 0x3975, 0x383f, 0x30ba, 0x2cbb, 0x3adc, 0x31c2, 0x2ef0, 0x270a, 0x3734, 0x30a5, 0x3481, 0x3764, 0x3a6c, 0x3845, 0x2bfd, 0x3407, 0x3be1, 0x35ba, 0x3163, 0x332f, 0x38ae, 0x3361, 0x38a5, 0x3556, 0x265c, 0x38ac, 0x3869, 0x2d4e, 0x300a, 0x39bd, 0x38ef, 0x372d, 0x2d3e, 0x3a3a, 0x30a2, 0x1e66, 0x3bc7, 0x38c5, 0x3966, 0x3ace, 0x3a34, 0x2d9c, 0x3845, 0x30f3, 0x2c21, 0x3405, 0x2c4f, 0x3629, 0x3bcb, 0x315b, 0x2e94, 0x3399, 0x39a7, 0x3696, 0x377d, 0x36a0, 0x312d, 0x366f, 0x379a, 0x25a6, 0x3808, 0x2da5, 0x2bbf, 0x381d, 0x3a94, 0x3577, 0x31ba, 0x344e, 0x385f, 0x3687, 0x38a7, 0x2a84, 0x399a, 0x317a, 0x3a59, 0x3467, 0x3af3, 0x3b1d, 0x33c8, 0x35cf, 0x3af4, 0x2c27, 0x38ab, 0x2850, -0x3be1, 0x3a7a, 0x363b, 0x3aa9, 0x3af3, 0x37f1, 0x3815, 0x3a54, 0x2d86, 0x3b67, 0x3780, 0x3b73, 0x3755, 0x38a3, 0x3435, 0x2df3, 0x3bc1, 0x32c0, 0x2da1, 0x395b, 0x32a7, 0x377e, 0x3ba5, 0x3ace, 0x3971, 0x3095, 0x3a2b, 0x3780, 0x3a68, 0x3979, 0x392b, 0x38ca, 0x385a, 0x3a82, 0x385f, 0x36e3, 0x3318, 0x2aad, 0x3670, 0x3ba1, 0x3bd0, 0x3a29, 0x3116, 0x390c, 0x3756, 0x3aa6, 0x39f6, 0x31a7, 0x3be8, 0x389c, 0x3248, 0x3608, 0x357a, 0x37bd, 0x37a4, 0x3456, 0x3563, 0x31a3, 0x398a, 0x3940, 0x364b, 0x2273, 0x3847, 0x356c, 0x3574, 0x382e, 0x3b27, 0x39d7, 0x311b, 0x3825, 0x3abb, 0x3bb9, 0x3b33, 0x386f, 0x3b02, 0x3b39, 0x2453, 0x3888, 0x34e1, 0x318d, 0x36df, 0x3ba2, 0x2ba7, 0x3943, 0x3586, 0x38f6, 0x3a2a, 0x3b90, 0x3b00, 0x39f3, 0x3108, 0x3533, 0x3bb7, 0x3264, 0x3aa8, 0x3669, -0x3748, 0x3a5c, 0x3959, 0x3c00, 0x3b73, 0x30f8, 0x2e58, 0x37d5, 0x3836, 0x2e91, 0x3603, 0x38f2, 0x3647, 0x3855, 0x3a9e, 0x3851, 0x24fd, 0x3990, 0x38a2, 0x3aae, 0x314a, 0x39d4, 0x3afd, 0x3a0d, 0x3a94, 0x38d4, 0x3970, 0x35d2, 0x3899, 0x2e93, 0x388f, 0x3850, 0x367f, 0x3bbf, 0x3581, 0x3a5d, 0x261c, 0x3bb3, 0x3594, 0x3988, 0x3b5b, 0x3b6e, 0x37a7, 0x39fa, 0x3a8e, 0x3629, 0x3b1d, 0x3068, 0x38d0, 0x3859, 0x3514, 0x3865, 0x33e0, 0x39f5, 0x20bf, 0x3a8f, 0x2ff9, 0x3bc8, 0x3abf, 0x324d, 0x2b88, 0x3856, 0x38a6, 0x3bd7, 0x38d8, 0x3722, 0x39ee, 0x3947, 0x3794, 0x36a5, 0x3acd, 0x1f3f, 0x3497, 0x39d0, 0x3947, 0x38c7, 0x3a3f, 0x3661, 0x36dd, 0x2c46, 0x3bee, 0x2885, 0x3430, 0x38f7, 0x27b3, 0x3134, 0x3265, 0x2666, 0x3930, 0x3514, 0x2ec0, 0x3985, 0x37ef, 0x3a11, 0x3a70, 0x3578, -0x3a6e, 0x333d, 0x36c8, 0x33e0, 0x27ae, 0x2954, 0x36cc, 0x37db, 0x382f, 0x38cd, 0x3944, 0x3a4b, 0x3671, 0x3966, 0x33a3, 0x3882, 0x3739, 0x349b, 0x39b6, 0x3573, 0x2cbf, 0x374e, 0x2cc0, 0x3af4, 0x34ca, 0x314c, 0x3bb4, 0x3554, 0x3a8b, 0x335f, 0x2d08, 0x387b, 0x37c4, 0x34a9, 0x388d, 0x3884, 0x332e, 0x36de, 0x3590, 0x3803, 0x33dc, 0x28bf, 0x386a, 0x39e4, 0x3b9d, 0x3aff, 0x3b0b, 0x393a, 0x37fa, 0x3577, 0x3bfb, 0x3b19, 0x3422, 0x34cd, 0x39d4, 0x39dc, 0x31b9, 0x38f4, 0x3871, 0x2e80, 0x3b90, 0x3513, 0x363a, 0x39f9, 0x332f, 0x391a, 0x39f9, 0x38fd, 0x3b16, 0x382c, 0x3b91, 0x2fa4, 0x34db, 0x30f4, 0x37c5, 0x392c, 0x3b6f, 0x3835, 0x35ac, 0x379d, 0x3b39, 0x3924, 0x2f94, 0x34b0, 0x3149, 0x307c, 0x3a7e, 0x3656, 0x398a, 0x390f, 0x27f6, 0x31a6, 0x3a80, 0x3582, 0x3863, 0x3ae1, -0x3265, 0x257e, 0x360a, 0x2fc7, 0x3ba9, 0x3515, 0x3a80, 0x3056, 0x37c5, 0x2a16, 0x3915, 0x357a, 0x3556, 0x337e, 0x3af8, 0x3a9f, 0x35aa, 0x3903, 0x2ec4, 0x3751, 0x3a1b, 0x39d2, 0x3b76, 0x34ef, 0x3b5a, 0x394c, 0x3851, 0x3b4b, 0x3bb2, 0x3b80, 0x3bef, 0x3a09, 0x3af7, 0x3902, 0x3711, 0x3704, 0x374b, 0x3325, 0x39ee, 0x385c, 0x32a7, 0x281b, 0x2193, 0x3418, 0x35ac, 0x3800, 0x3a5f, 0x3bf9, 0x37f4, 0x3819, 0x3891, 0x3534, 0x366b, 0x3b04, 0x35b1, 0x3969, 0x3bc5, 0x3856, 0x2e11, 0x3784, 0x3388, 0x36eb, 0x35e3, 0x32f8, 0x2a50, 0x33ed, 0x3989, 0x34b8, 0x3be4, 0x3844, 0x34b0, 0x355e, 0x3a56, 0x3431, 0x345d, 0x389a, 0x366e, 0x3902, 0x3858, 0x38e1, 0x388c, 0x3565, 0x33c4, 0x3b68, 0x372f, 0x307c, 0x3bb9, 0x359f, 0x3a41, 0x3bcf, 0x3bb3, 0x2d88, 0x32f8, 0x354c, 0x3b9e, 0x3ae5, -0x3059, 0x3359, 0x382d, 0x3a91, 0x3bed, 0x28fb, 0x3885, 0x3a3c, 0x39e9, 0x39f7, 0x351e, 0x37e3, 0x3bad, 0x2834, 0x37d1, 0x3839, 0x3ad1, 0x39f3, 0x362f, 0x35ba, 0x3312, 0x3b21, 0x3536, 0x3bfd, 0x3518, 0x201e, 0x2022, 0x3b03, 0x3910, 0x39ce, 0x363c, 0x3b25, 0x3b4f, 0x3be8, 0x3655, 0x38dc, 0x344b, 0x3372, 0x3939, 0x372a, 0x3b86, 0x384e, 0x3b9e, 0x32c3, 0x3bd5, 0x3041, 0x3051, 0x257f, 0x3a6c, 0x3379, 0x2f52, 0x37de, 0x37ac, 0x3734, 0x3447, 0x3bbc, 0x3aaf, 0x38eb, 0x384a, 0x3ad6, 0x3a49, 0x3944, 0x2cf5, 0x38a3, 0x398b, 0x3b0e, 0x307a, 0x3504, 0x3728, 0x3500, 0x2f6e, 0x2e34, 0x3aa4, 0x39f7, 0x3831, 0x3902, 0x3509, 0x2d20, 0x3b99, 0x3860, 0x3901, 0x3420, 0x3944, 0x3926, 0x3acd, 0x3786, 0x3b09, 0x3ad7, 0x2cb6, 0x3a8e, 0x2233, 0x3892, 0x398a, 0x272e, 0x3853, 0x389c, -0x3a14, 0x3877, 0x3320, 0x34b7, 0x3a85, 0x34da, 0x38db, 0x3758, 0x3b8d, 0x3aa8, 0x3766, 0x34db, 0x3a54, 0x3806, 0x31ef, 0x33ab, 0x38bd, 0x3778, 0x3543, 0x36ec, 0x36fa, 0x2fc5, 0x3676, 0x350c, 0x390f, 0x3b8b, 0x394a, 0x38bb, 0x31d9, 0x3bf1, 0x36ce, 0x35dc, 0x38c2, 0x3910, 0x3944, 0x38f8, 0x37f6, 0x3b9b, 0x3574, 0x31ed, 0x244e, 0x28ef, 0x34fa, 0x3398, 0x3912, 0x365f, 0x3bb2, 0x38f7, 0x3af2, 0x3500, 0x3a8e, 0x3a55, 0x39be, 0x2471, 0x34b0, 0x336f, 0x380a, 0x3ae7, 0x34f5, 0x35f9, 0x3227, 0x263d, 0x3385, 0x372f, 0x2046, 0x3a80, 0x3b0a, 0x35cf, 0x38e1, 0x38b4, 0x2eb6, 0x353f, 0x314f, 0x3a4c, 0x3a52, 0x3b84, 0x39b8, 0x367d, 0x3b22, 0x310a, 0x3611, 0x37ad, 0x3496, 0x2e9c, 0x3215, 0x3b29, 0x38cf, 0x343f, 0x380a, 0x36b0, 0x3a08, 0x2c90, 0x36e4, 0x354a, 0x3b56, 0x37a1, -0x39f1, 0x340d, 0x3b34, 0x309a, 0x3074, 0x24a8, 0x261c, 0x3a16, 0x3846, 0x35dd, 0x2830, 0x3a03, 0x3729, 0x3766, 0x3461, 0x33db, 0x3b4a, 0x33eb, 0x3813, 0x34cd, 0x3875, 0x3a95, 0x31ef, 0x38b2, 0x3acc, 0x34d9, 0x3542, 0x37f4, 0x3937, 0x3858, 0x3997, 0x3538, 0x338b, 0x35ff, 0x3613, 0x3809, 0x3878, 0x3870, 0x2df0, 0x39f4, 0x3863, 0x30ce, 0x38ae, 0x384f, 0x3b24, 0x3045, 0x297f, 0x3b58, 0x3123, 0x2b6b, 0x3bc5, 0x388a, 0x3003, 0x3077, 0x34dc, 0x39cb, 0x3bcf, 0x3b16, 0x344c, 0x3aac, 0x364a, 0x399b, 0x3a68, 0x3583, 0x34c3, 0x3bc0, 0x3b1d, 0x3a15, 0x387f, 0x3756, 0x382e, 0x3a58, 0x18c3, 0x3a2e, 0x3b81, 0x34f8, 0x3802, 0x3631, 0x3920, 0x340c, 0x3b6c, 0x39a7, 0x1a4a, 0x38cc, 0x38ec, 0x3912, 0x3bd6, 0x3358, 0x3275, 0x3954, 0x3b39, 0x3674, 0x3a2e, 0x387c, 0x3a86, 0x34c2, -0x3585, 0x36c0, 0x3762, 0x380b, 0x31cf, 0x3992, 0x365a, 0x3b73, 0x35e8, 0x3925, 0x3b3b, 0x37cc, 0x3823, 0x2cd7, 0x2a80, 0x3a41, 0x37a5, 0x3479, 0x36eb, 0x29cc, 0x317d, 0x38b8, 0x32f8, 0x355e, 0x392c, 0x3b16, 0x3275, 0x306a, 0x22a8, 0x35fb, 0x32d4, 0x3a42, 0x32ba, 0x2443, 0x3898, 0x3164, 0x38ff, 0x3ba6, 0x35ae, 0x396a, 0x3a5c, 0x3922, 0x1df2, 0x3943, 0x309b, 0x3a53, 0x3439, 0x3802, 0x32bc, 0x34f6, 0x3957, 0x3a59, 0x36c9, 0x3b3c, 0x3aa0, 0x3903, 0x2b86, 0x380e, 0x2f83, 0x397a, 0x3a11, 0x3ab3, 0x38b9, 0x3a54, 0x3191, 0x2eb7, 0x3549, 0x3a39, 0x375b, 0x38d8, 0x346a, 0x3a3e, 0x35ff, 0x305b, 0x3b1d, 0x3882, 0x39da, 0x3a92, 0x2f74, 0x38f1, 0x3b8e, 0x361f, 0x38d4, 0x365b, 0x367c, 0x2658, 0x3762, 0x3905, 0x393f, 0x34c8, 0x3830, 0x39d1, 0x35e1, 0x23b7, 0x3b28, 0x39f4, -0x27a7, 0x38a0, 0x3954, 0x32c7, 0x3572, 0x25b3, 0x384f, 0x38fb, 0x3a34, 0x3b79, 0x3af6, 0x34c8, 0x3a0d, 0x3906, 0x3981, 0x3a97, 0x3b17, 0x34d5, 0x2dc4, 0x3401, 0x21b1, 0x3999, 0x3898, 0x2def, 0x3747, 0x300c, 0x3afe, 0x34d6, 0x36ac, 0x3b5f, 0x3952, 0x2a90, 0x34b4, 0x3a77, 0x3b03, 0x385e, 0x33d0, 0x37a9, 0x36a7, 0x231e, 0x3534, 0x35f6, 0x30e1, 0x3873, 0x2299, 0x387e, 0x3499, 0x30dc, 0x383a, 0x256e, 0x387f, 0x3395, 0x33c1, 0x38ac, 0x38fe, 0x383b, 0x36c3, 0x392b, 0x3812, 0x3168, 0x3b18, 0x386a, 0x3b17, 0x3981, 0x3577, 0x3874, 0x308a, 0x38d1, 0x3a7b, 0x361f, 0x38bf, 0x29c5, 0x2d56, 0x343b, 0x33bc, 0x38ab, 0x3a82, 0x2feb, 0x3885, 0x3531, 0x3588, 0x2ff6, 0x3851, 0x3a08, 0x36e7, 0x3b8c, 0x3182, 0x3a4e, 0x3849, 0x3509, 0x3909, 0x380e, 0x3692, 0x2e1e, 0x2f7f, 0x35eb, -0x3816, 0x2f7d, 0x3b42, 0x38c2, 0x3884, 0x3096, 0x39b7, 0x3868, 0x3879, 0x3606, 0x3111, 0x36d8, 0x39eb, 0x3bcf, 0x3ac4, 0x38bd, 0x3877, 0x3967, 0x398b, 0x39fe, 0x3514, 0x3139, 0x30a8, 0x3431, 0x2d75, 0x3a3a, 0x3b80, 0x3917, 0x307a, 0x2c42, 0x3143, 0x3954, 0x36ff, 0x381f, 0x37dd, 0x3b2f, 0x3972, 0x317f, 0x397b, 0x350d, 0x382e, 0x2ed6, 0x375c, 0x3462, 0x36ff, 0x364c, 0x39ba, 0x36c7, 0x3bea, 0x3211, 0x354e, 0x2d30, 0x1f03, 0x35f6, 0x3a24, 0x3576, 0x38ce, 0x38e5, 0x3bbe, 0x38a8, 0x3831, 0x39d0, 0x3772, 0x3ba5, 0x314f, 0x2572, 0x39d2, 0x2de3, 0x1d7a, 0x360b, 0x399a, 0x3863, 0x3a18, 0x3141, 0x3a7d, 0x391b, 0x3957, 0x33f7, 0x3801, 0x392a, 0x3a5a, 0x3a51, 0x3841, 0x2a4a, 0x3786, 0x355f, 0x28d9, 0x35cc, 0x2dfc, 0x302a, 0x2c60, 0x3b50, 0x3abe, 0x382f, 0x35ed, 0x3a8d, -0x3b1b, 0x3525, 0x3725, 0x2e88, 0x304b, 0x3920, 0x3962, 0x3908, 0x352b, 0x3667, 0x3880, 0x3692, 0x38bd, 0x317c, 0x30f3, 0x3beb, 0x302b, 0x326c, 0x3a36, 0x3a30, 0x39b6, 0x2a61, 0x34f1, 0x22d6, 0x39b6, 0x310f, 0x2dff, 0x38d1, 0x3700, 0x3412, 0x38de, 0x394f, 0x2de4, 0x2ed8, 0x3beb, 0x3a50, 0x3526, 0x246d, 0x361e, 0x2e4b, 0x3272, 0x3b5a, 0x3805, 0x3a98, 0x3653, 0x3abc, 0x301d, 0x399f, 0x2dae, 0x3ac4, 0x39dc, 0x3403, 0x3109, 0x2d85, 0x381e, 0x36b6, 0x348d, 0x35c6, 0x3b5f, 0x3b3a, 0x35c0, 0x36de, 0x38bc, 0x3308, 0x39a0, 0x39cf, 0x3456, 0x3a80, 0x39fc, 0x311a, 0x3bb1, 0x3a38, 0x3b9d, 0x3a27, 0x3912, 0x3377, 0x38a9, 0x34c6, 0x34ec, 0x35fa, 0x378c, 0x387e, 0x3686, 0x372c, 0x388d, 0x3ad6, 0x3bd3, 0x3b26, 0x3bd6, 0x3b91, 0x31e3, 0x381e, 0x353b, 0x3a90, 0x2cd6, 0x3047, -0x33df, 0x35c8, 0x396a, 0x321c, 0x286f, 0x2daa, 0x39aa, 0x3a83, 0x36ff, 0x3476, 0x3a33, 0x37d6, 0x2c5f, 0x3a23, 0x38cb, 0x36a9, 0x331b, 0x24ec, 0x3960, 0x2d61, 0x3a61, 0x330f, 0x3937, 0x2e70, 0x3797, 0x399d, 0x26dc, 0x320e, 0x342c, 0x3b32, 0x22bc, 0x3466, 0x3447, 0x3896, 0x31b7, 0x3b22, 0x383a, 0x3623, 0x38f8, 0x3552, 0x3a55, 0x29c5, 0x34bb, 0x3663, 0x2c7b, 0x378d, 0x250c, 0x3ac9, 0x39c4, 0x378d, 0x39d2, 0x39a9, 0x379f, 0x3473, 0x2db0, 0x3993, 0x3ad3, 0x3494, 0x39ae, 0x36d2, 0x397c, 0x39c9, 0x3adc, 0x359f, 0x2c2f, 0x3b0d, 0x3595, 0x3687, 0x39b3, 0x34e4, 0x3af6, 0x2f71, 0x39af, 0x3b28, 0x38fe, 0x381d, 0x28ef, 0x3abc, 0x3723, 0x3b6c, 0x381e, 0x3442, 0x3b90, 0x39cc, 0x39c5, 0x3654, 0x38ac, 0x1b4d, 0x391f, 0x38d2, 0x3ac7, 0x385a, 0x322c, 0x39e6, 0x289c, 0x3786, -0x3b5f, 0x37c4, 0x3906, 0x3069, 0x3478, 0x383c, 0x3a34, 0x3a85, 0x33b3, 0x3be6, 0x3a71, 0x33ac, 0x3a77, 0x3b21, 0x3b7d, 0x3957, 0x3814, 0x39b2, 0x3504, 0x387f, 0x37c6, 0x39e0, 0x39f1, 0x393b, 0x2fe0, 0x3806, 0x2d6e, 0x37a5, 0x3069, 0x3831, 0x3959, 0x3363, 0x2d3a, 0x3980, 0x35ec, 0x3a3c, 0x389c, 0x23eb, 0x3a24, 0x30fa, 0x3040, 0x38b4, 0x3b7b, 0x381f, 0x3a66, 0x246e, 0x3b37, 0x30c1, 0x38a5, 0x387e, 0x34aa, 0x362a, 0x3556, 0x2a52, 0x3445, 0x3a9b, 0x2986, 0x38d2, 0x3513, 0x3bca, 0x39fa, 0x303b, 0x31cc, 0x3414, 0x3b16, 0x3a43, 0x2e2c, 0x3a29, 0x3996, 0x3973, 0x39b3, 0x36dc, 0x2761, 0x32a1, 0x3815, 0x3708, 0x38fa, 0x38cb, 0x36d3, 0x39c8, 0x266c, 0x3b60, 0x33cf, 0x3be3, 0x3854, 0x34c0, 0x34d3, 0x39ac, 0x37ad, 0x2fcb, 0x3966, 0x31a2, 0x363f, 0x3434, 0x381e, 0x3a53, -0x3795, 0x38cd, 0x3c00, 0x393c, 0x38af, 0x3b72, 0x37c4, 0x3b4f, 0x30b0, 0x36fd, 0x377b, 0x38f2, 0x371b, 0x3ada, 0x2edd, 0x3782, 0x33a2, 0x3a25, 0x38ae, 0x3be0, 0x3a31, 0x32b2, 0x3323, 0x3b1f, 0x39fc, 0x3986, 0x3b38, 0x3881, 0x3a9d, 0x3936, 0x3946, 0x3159, 0x3504, 0x3792, 0x3547, 0x28ff, 0x3449, 0x3214, 0x313f, 0x3866, 0x3a59, 0x3b06, 0x2e51, 0x2759, 0x342e, 0x3726, 0x3473, 0x37ea, 0x3b1d, 0x3be8, 0x346d, 0x3b73, 0x38c3, 0x296c, 0x33b2, 0x34a7, 0x3af5, 0x3284, 0x359c, 0x384d, 0x2ff7, 0x3337, 0x339b, 0x30e4, 0x3001, 0x3b02, 0x2ddf, 0x3997, 0x320c, 0x3af9, 0x2c92, 0x37e8, 0x3b5d, 0x3132, 0x3860, 0x396b, 0x39fd, 0x38f3, 0x3968, 0x32e8, 0x3523, 0x395b, 0x2e01, 0x37b9, 0x3b53, 0x3b37, 0x398e, 0x389b, 0x3586, 0x37d6, 0x3976, 0x3785, 0x3b0c, 0x3975, 0x39e2, 0x3bb5, -0x3675, 0x343a, 0x38d9, 0x392e, 0x3b61, 0x35db, 0x3527, 0x3a75, 0x3a1e, 0x36bd, 0x3af7, 0x2dae, 0x3b77, 0x2fe7, 0x3a80, 0x3745, 0x3a6e, 0x3748, 0x37ad, 0x3492, 0x3a82, 0x35db, 0x2e6a, 0x34bf, 0x3984, 0x3aff, 0x3a9a, 0x2720, 0x3786, 0x3475, 0x3842, 0x36ce, 0x387f, 0x3875, 0x292c, 0x35b8, 0x3ac0, 0x39f1, 0x3537, 0x3920, 0x3a93, 0x2a40, 0x2c60, 0x39b0, 0x3559, 0x3989, 0x3670, 0x33ef, 0x36e4, 0x3ac3, 0x3802, 0x35b3, 0x36e9, 0x34b6, 0x3911, 0x35f1, 0x3591, 0x3a96, 0x39df, 0x3892, 0x3582, 0x3a67, 0x39cf, 0x3bf8, 0x3587, 0x2adb, 0x36f3, 0x3a9f, 0x34c5, 0x31ab, 0x3481, 0x26aa, 0x3929, 0x3749, 0x3764, 0x3743, 0x39db, 0x2850, 0x363d, 0x386f, 0x349c, 0x3ae1, 0x3834, 0x3480, 0x305d, 0x3bca, 0x3418, 0x3580, 0x3897, 0x3831, 0x3898, 0x39aa, 0x372b, 0x3b98, 0x3b92, 0x3adc, -0x355f, 0x3915, 0x21ad, 0x3a2a, 0x3803, 0x3af4, 0x34e4, 0x37b0, 0x399e, 0x33d8, 0x3904, 0x1c2b, 0x3831, 0x3b39, 0x3a0e, 0x37dd, 0x3bfb, 0x3a0f, 0x3623, 0x3beb, 0x39d0, 0x335e, 0x38e5, 0x3810, 0x37df, 0x2c84, 0x30bc, 0x3013, 0x342f, 0x285f, 0x3855, 0x3b81, 0x3a35, 0x33e5, 0x3a11, 0x3bab, 0x32df, 0x303d, 0x3973, 0x340f, 0x3aba, 0x34d9, 0x3924, 0x3b84, 0x3a67, 0x3980, 0x3612, 0x3b64, 0x39e3, 0x3ac3, 0x3350, 0x3865, 0x24d5, 0x3bac, 0x3594, 0x38d7, 0x3b53, 0x3b76, 0x39ee, 0x36de, 0x3a1c, 0x38ce, 0x25cc, 0x3847, 0x3b28, 0x34c5, 0x3a7e, 0x3afb, 0x3361, 0x2266, 0x37d1, 0x3886, 0x306b, 0x3b12, 0x3a8b, 0x2aad, 0x3855, 0x35b0, 0x35c4, 0x3b4e, 0x36fa, 0x396a, 0x26f4, 0x381a, 0x2f06, 0x2c3e, 0x3116, 0x3adf, 0x358b, 0x2f88, 0x3adf, 0x3842, 0x3a1a, 0x3b35, 0x291a, 0x2e9d, -0x32d1, 0x3946, 0x3a50, 0x398e, 0x2970, 0x3122, 0x286c, 0x3b80, 0x3bbe, 0x38ad, 0x3b51, 0x385a, 0x38c4, 0x3af0, 0x352a, 0x38e9, 0x3a80, 0x28e3, 0x395e, 0x34aa, 0x3973, 0x3492, 0x398c, 0x327b, 0x39d4, 0x3995, 0x3740, 0x2742, 0x388f, 0x3a24, 0x3a2f, 0x38d3, 0x384e, 0x3abd, 0x3bb8, 0x3814, 0x394b, 0x3aa0, 0x3af2, 0x37ad, 0x32aa, 0x3aa3, 0x3aa6, 0x3ac5, 0x2fbf, 0x3759, 0x3848, 0x32c6, 0x3459, 0x38af, 0x3980, 0x24db, 0x3ac5, 0x377c, 0x1d75, 0x36e9, 0x389b, 0x314e, 0x344f, 0x30ff, 0x3921, 0x3b72, 0x3884, 0x3836, 0x3af2, 0x35b8, 0x3116, 0x38ce, 0x3ae6, 0x3b16, 0x3bca, 0x373b, 0x3a8e, 0x3872, 0x2d2a, 0x344d, 0x3b2e, 0x3608, 0x320e, 0x2aa7, 0x361a, 0x2dc4, 0x3b4f, 0x2d4d, 0x34b3, 0x34c0, 0x393b, 0x3a76, 0x372f, 0x3637, 0x2b5c, 0x3a38, 0x367b, 0x2b1e, 0x344e, 0x385e, -0x3ab6, 0x38a2, 0x3674, 0x2d4d, 0x3bad, 0x3b44, 0x35ed, 0x38a7, 0x325e, 0x3b29, 0x3b65, 0x2f0f, 0x3a30, 0x3b4c, 0x3843, 0x3a21, 0x2e34, 0x3180, 0x3ae0, 0x3a02, 0x3a82, 0x2ad9, 0x3826, 0x3a94, 0x2f66, 0x217b, 0x3b82, 0x3839, 0x3263, 0x3a1b, 0x2958, 0x3b26, 0x3a3e, 0x3039, 0x3bd7, 0x2057, 0x3b99, 0x38ac, 0x372d, 0x344e, 0x31fa, 0x3bf8, 0x394e, 0x3acb, 0x3b88, 0x38cf, 0x3582, 0x3a2b, 0x370e, 0x34b5, 0x36d2, 0x3ae3, 0x38b9, 0x37a5, 0x3979, 0x3204, 0x3ba2, 0x3591, 0x3a00, 0x3944, 0x1b7f, 0x271e, 0x38a2, 0x38ad, 0x3ade, 0x3008, 0x34c9, 0x3269, 0x31da, 0x3bad, 0x3587, 0x3bea, 0x3512, 0x2deb, 0x3825, 0x3488, 0x30aa, 0x3baf, 0x378f, 0x39d9, 0x3ac4, 0x3427, 0x371e, 0x3b2d, 0x3138, 0x3654, 0x3815, 0x3b7c, 0x38cf, 0x382e, 0x1cdb, 0x2fa4, 0x3783, 0x383c, 0x37d1, 0x2df8, -0x335b, 0x3071, 0x367f, 0x3be1, 0x3a1b, 0x3afd, 0x390b, 0x3b17, 0x3861, 0x3adb, 0x3a04, 0x3859, 0x3a95, 0x37b6, 0x37ff, 0x3400, 0x34e3, 0x367d, 0x3ad0, 0x3506, 0x3b50, 0x33e6, 0x3a42, 0x3b3c, 0x382a, 0x3bf8, 0x3be8, 0x3917, 0x39ec, 0x265b, 0x3b11, 0x3b2a, 0x3aef, 0x35f9, 0x3a2b, 0x371d, 0x32f8, 0x338b, 0x3bc2, 0x399e, 0x3aa8, 0x34b1, 0x182c, 0x3691, 0x39c5, 0x359a, 0x3b2b, 0x38f9, 0x3953, 0x362a, 0x3a8e, 0x363d, 0x3b96, 0x380a, 0x37fc, 0x3694, 0x2fa9, 0x35d1, 0x3699, 0x2e36, 0x3922, 0x38b6, 0x2d05, 0x3161, 0x353e, 0x371f, 0x3913, 0x39b6, 0x35d6, 0x3b29, 0x395c, 0x3677, 0x3ac8, 0x35e1, 0x3b02, 0x3479, 0x321a, 0x2a17, 0x2890, 0x388a, 0x3109, 0x3a45, 0x301c, 0x349a, 0x31a2, 0x3b19, 0x2eb4, 0x2eff, 0x353c, 0x39f5, 0x396c, 0x3ae4, 0x3873, 0x3bf6, 0x3887, 0x3507, -0x34d1, 0x35d3, 0x3ad2, 0x3759, 0x2918, 0x36eb, 0x39bd, 0x3b25, 0x31b8, 0x35eb, 0x2999, 0x3b69, 0x3829, 0x3385, 0x3bf4, 0x3a9b, 0x3aa7, 0x319a, 0x3824, 0x38e6, 0x38aa, 0x375d, 0x3188, 0x34eb, 0x37bc, 0x3375, 0x367b, 0x33df, 0x34f6, 0x38b3, 0x38e3, 0x3010, 0x3a05, 0x2e64, 0x336a, 0x3466, 0x3962, 0x3640, 0x2a17, 0x31c5, 0x3815, 0x3472, 0x3b2c, 0x3b79, 0x32d7, 0x3656, 0x2a54, 0x3409, 0x3887, 0x34e6, 0x30ea, 0x2851, 0x39cc, 0x3153, 0x38af, 0x3868, 0x3ad3, 0x3853, 0x38a7, 0x3583, 0x31e3, 0x3284, 0x2909, 0x3ae9, 0x3abe, 0x310b, 0x3564, 0x33cb, 0x3999, 0x37bc, 0x352c, 0x32f7, 0x3522, 0x36de, 0x340c, 0x37f7, 0x3839, 0x39f8, 0x2b3b, 0x3ada, 0x3258, 0x3764, 0x395c, 0x374b, 0x3bbc, 0x35fd, 0x306c, 0x3645, 0x3b20, 0x3a18, 0x2c2b, 0x39e2, 0x3a43, 0x3934, 0x34b5, 0x390a, -0x3bc0, 0x358b, 0x3817, 0x3b77, 0x36de, 0x3868, 0x3b93, 0x2d8d, 0x3607, 0x37f9, 0x39b4, 0x3bc5, 0x3997, 0x33e1, 0x328b, 0x226a, 0x3aab, 0x390e, 0x34ee, 0x34ae, 0x3645, 0x3a4d, 0x31db, 0x3576, 0x38ed, 0x39d5, 0x2974, 0x3982, 0x34ca, 0x3839, 0x3b7a, 0x2e37, 0x2045, 0x3a1b, 0x3bf9, 0x2f9a, 0x2aba, 0x3944, 0x3a82, 0x24d0, 0x38fa, 0x2c8f, 0x3a4c, 0x391f, 0x39d2, 0x3154, 0x3a64, 0x3902, 0x398d, 0x3921, 0x3800, 0x3443, 0x2fb9, 0x3aa5, 0x3973, 0x2a30, 0x367d, 0x3850, 0x3a1e, 0x3b86, 0x34eb, 0x383c, 0x37b1, 0x2db1, 0x30d7, 0x347a, 0x2b61, 0x3441, 0x288b, 0x3bea, 0x2a52, 0x29de, 0x3a65, 0x37c2, 0x3370, 0x39e2, 0x3850, 0x3691, 0x2f33, 0x39cb, 0x3bbd, 0x35fe, 0x3696, 0x3bbe, 0x3451, 0x384e, 0x2f01, 0x380e, 0x3810, 0x35e9, 0x2c3b, 0x34bd, 0x3905, 0x3505, 0x36e9, 0x3b23, -0x38d5, 0x38b3, 0x2e40, 0x39da, 0x3459, 0x39b9, 0x385c, 0x3a5a, 0x37d8, 0x37bb, 0x3549, 0x3ba9, 0x3a79, 0x3b72, 0x2c21, 0x3576, 0x3bd3, 0x3ae5, 0x3b63, 0x3979, 0x319a, 0x3bb2, 0x39e7, 0x328c, 0x3af2, 0x34d2, 0x32c2, 0x38d1, 0x3831, 0x3a23, 0x3a51, 0x3646, 0x38be, 0x2f1b, 0x36a5, 0x3891, 0x38f0, 0x3a6a, 0x3249, 0x2f87, 0x36d8, 0x3a85, 0x2870, 0x369e, 0x3a6a, 0x34d5, 0x3419, 0x3b3e, 0x38d2, 0x3a7f, 0x3938, 0x38e4, 0x3332, 0x39db, 0x3933, 0x3a2a, 0x38cc, 0x3bae, 0x3b1a, 0x3837, 0x3ba2, 0x3582, 0x3639, 0x392a, 0x30d0, 0x3966, 0x3b0f, 0x35a7, 0x3962, 0x3b6d, 0x3503, 0x38e2, 0x370e, 0x3341, 0x3694, 0x3a68, 0x3879, 0x3661, 0x377f, 0x38fc, 0x38d5, 0x3238, 0x3a69, 0x32d0, 0x3a61, 0x388f, 0x3591, 0x3b25, 0x3818, 0x304b, 0x39f0, 0x3826, 0x399e, 0x332c, 0x3496, 0x3822, -0x3a10, 0x3839, 0x3b02, 0x248f, 0x39a8, 0x31fa, 0x3964, 0x34e5, 0x2abc, 0x3a82, 0x3440, 0x321b, 0x3859, 0x38f1, 0x3845, 0x3bbd, 0x3b28, 0x3410, 0x3855, 0x3acb, 0x3afe, 0x38fb, 0x341d, 0x3713, 0x3281, 0x387c, 0x3b3a, 0x388d, 0x34f1, 0x33b1, 0x35df, 0x3a40, 0x3b5a, 0x37a8, 0x3997, 0x32c0, 0x38e1, 0x287f, 0x30ed, 0x398d, 0x2fc0, 0x399c, 0x34b5, 0x3b4e, 0x3a20, 0x39ed, 0x2dfe, 0x3b53, 0x3529, 0x3b5d, 0x39b7, 0x3469, 0x35fb, 0x3af6, 0x3b95, 0x39bd, 0x39be, 0x3bad, 0x308a, 0x380a, 0x3851, 0x3810, 0x3866, 0x3adb, 0x3b96, 0x3118, 0x3a45, 0x36ab, 0x3250, 0x38f5, 0x360e, 0x3ac2, 0x30d1, 0x3a5f, 0x3a09, 0x3550, 0x3ba9, 0x360d, 0x3ad6, 0x3a1f, 0x376e, 0x308b, 0x3908, 0x38ac, 0x348a, 0x3ba4, 0x3704, 0x37ef, 0x35ea, 0x3836, 0x395a, 0x2c3d, 0x382e, 0x360a, 0x321a, 0x3967, -0x26ea, 0x3845, 0x344c, 0x3b46, 0x33ca, 0x2f66, 0x220e, 0x39c5, 0x35d6, 0x3af3, 0x39d0, 0x38f7, 0x3082, 0x3924, 0x3198, 0x3a81, 0x3a45, 0x3945, 0x368d, 0x3a76, 0x3a14, 0x3145, 0x2430, 0x37f0, 0x3af8, 0x31d6, 0x36ab, 0x3453, 0x2dcc, 0x359c, 0x3699, 0x37b4, 0x399c, 0x375e, 0x386a, 0x3927, 0x38c2, 0x33ac, 0x32de, 0x3ba4, 0xece, 0x398a, 0x3b1f, 0x3583, 0x3b41, 0x340f, 0x3bef, 0x3777, 0x3acd, 0x3818, 0x3ad3, 0x385d, 0x38f7, 0x399c, 0x38a1, 0x3a11, 0x38ad, 0x2fc0, 0x32c3, 0x3293, 0x3499, 0x3757, 0x28a6, 0x3b3d, 0x3b9b, 0x37a1, 0x3bcd, 0x3a17, 0x3b46, 0x39b0, 0x2cee, 0x346a, 0x3b63, 0x3855, 0x37a4, 0x36dc, 0x3baa, 0x20a7, 0x3b32, 0x2a40, 0x3ac4, 0x3855, 0x35cb, 0x3bcc, 0x3a66, 0x38bd, 0x213a, 0x2be8, 0x2793, 0x32a2, 0x3a2c, 0x3aae, 0x384b, 0x3a00, 0x375d, 0x35e2, -0x3938, 0x3629, 0x398a, 0x263c, 0x37f1, 0x39ed, 0x332c, 0x3879, 0x38df, 0x2cc1, 0x38cb, 0x398a, 0x3935, 0x3607, 0x2791, 0x3a21, 0x3590, 0x306b, 0x3720, 0x3abb, 0x3a6a, 0x2a36, 0x388b, 0x2c62, 0x393e, 0x36bc, 0x37be, 0x39bd, 0x39db, 0x35d8, 0x3b2d, 0x39ba, 0x33a4, 0x3a4b, 0x2f93, 0x38ca, 0x325d, 0x3974, 0x3116, 0x3bd6, 0x3630, 0x3888, 0x3a58, 0x3a1d, 0x3868, 0x38c5, 0x316f, 0x353d, 0x2a18, 0x3994, 0x399a, 0x2e05, 0x3b8b, 0x32f3, 0x3242, 0x2e23, 0x3191, 0x3ab7, 0x2aaf, 0x3a7d, 0x3726, 0x3b42, 0x3abc, 0x372b, 0x3a73, 0x390e, 0x38d0, 0x38e2, 0x39f9, 0x2fae, 0x3372, 0x3370, 0x3699, 0x3851, 0x3430, 0x3559, 0x3b7c, 0x3671, 0x35dd, 0x2d3e, 0x35c8, 0x2260, 0x3ab4, 0x3b38, 0x3327, 0x33df, 0x3a01, 0x3368, 0x361e, 0x3baa, 0x3990, 0x382b, 0x38fb, 0x35b9, 0x3921, 0x3918, -0x38ea, 0x349a, 0x3123, 0x2d03, 0x356f, 0x3735, 0x3b50, 0x355b, 0x3b23, 0x3a35, 0x30a3, 0x3568, 0x365c, 0x3328, 0x3ac5, 0x323f, 0x271b, 0x24a7, 0x369d, 0x32a5, 0x39e7, 0x37dc, 0x3a48, 0x36a7, 0x3037, 0x39b8, 0x35b5, 0x320c, 0x29c0, 0x3770, 0x3893, 0x384c, 0x3888, 0x399a, 0x3a4e, 0x31e7, 0x397d, 0x3876, 0x3425, 0x3929, 0x3734, 0x2cb9, 0x39e8, 0x399d, 0x27d8, 0x3a89, 0x3198, 0x35ee, 0x2576, 0x31a6, 0x398b, 0x31cb, 0x2e6d, 0x386a, 0x3b4e, 0x3882, 0x3a5b, 0x3797, 0x38f0, 0x3229, 0x3849, 0x3874, 0x2cb5, 0x3b07, 0x3b6f, 0x3b29, 0x3bdf, 0x34fd, 0x3502, 0x3ae1, 0x39ac, 0x37ef, 0x3bbc, 0x39f7, 0x3503, 0x3bf0, 0x34da, 0x3bb9, 0x3811, 0x3ac2, 0x37e5, 0x37a9, 0x38a2, 0x3ba7, 0x3862, 0x369c, 0x35f7, 0x388b, 0x3aa8, 0x335b, 0x3a6f, 0x3885, 0x36c6, 0x38a9, 0x396d, 0x34ec, -0x3a09, 0x3869, 0x34bb, 0x3761, 0x36a1, 0x3852, 0x3849, 0x3659, 0x3805, 0x3a89, 0x3539, 0x35eb, 0x3439, 0x3863, 0x3a88, 0x38e0, 0x388c, 0x351c, 0x350e, 0x3383, 0x31ad, 0x389e, 0x39a5, 0x363f, 0x3b6a, 0x30f5, 0x3a4f, 0x3669, 0x3ae5, 0x3950, 0x2e12, 0x3801, 0x3af3, 0x393f, 0x377b, 0x390c, 0x34ff, 0x30f2, 0x271a, 0x37a5, 0x289e, 0x39b6, 0x3bf3, 0x389f, 0x3a33, 0x3bf0, 0x39c0, 0x392a, 0x394d, 0x349c, 0x3b62, 0x327a, 0x377b, 0x3590, 0x397a, 0x3a04, 0x3247, 0x329c, 0x2d99, 0x3b76, 0x33ff, 0x3456, 0x32c3, 0x35b6, 0x3282, 0x32b5, 0x3a23, 0x39e0, 0x3767, 0x3600, 0x38d6, 0x3a7c, 0x3515, 0x36bc, 0x381a, 0x3bd6, 0x3baf, 0x3811, 0x39e0, 0x22ac, 0x391b, 0x29be, 0x39aa, 0x3329, 0x3a6f, 0x3bcb, 0x3118, 0x3bbf, 0x3674, 0x3918, 0x30cd, 0x3924, 0x3a6b, 0x3a8b, 0x34b5, 0x39cc, -0x2cde, 0x3945, 0x37ff, 0x3115, 0x3a3b, 0x3ae1, 0x3958, 0x28f5, 0x3b19, 0x33ff, 0x3bc4, 0x3476, 0x3886, 0x3511, 0x342b, 0x3b18, 0x36e9, 0x3ab9, 0x2423, 0x32e2, 0x3623, 0x38b4, 0x371b, 0x3bc0, 0x3b8d, 0x3366, 0x384f, 0x3a1a, 0x3a09, 0x3918, 0x3959, 0x3652, 0x3baa, 0x3685, 0x38b7, 0x378b, 0x32e9, 0x3a53, 0x3405, 0x3bc3, 0x34b9, 0x339d, 0x3819, 0x2fe8, 0x3bdb, 0x3421, 0x3575, 0x3796, 0x207e, 0x3b04, 0x38a8, 0x3b69, 0x35f1, 0x389a, 0x37ee, 0x38c3, 0x34db, 0x35a5, 0x3b83, 0x36a9, 0x2883, 0x3955, 0x3aa0, 0x334a, 0x34a9, 0x3772, 0x312a, 0x3bde, 0x3338, 0x3601, 0x3125, 0x3a73, 0x316c, 0x348e, 0x3bef, 0x3b52, 0x343b, 0x249c, 0x3a68, 0x3905, 0x3b4d, 0x1cf8, 0x356a, 0x3499, 0x3385, 0x3b44, 0x2aaf, 0x28a1, 0x3199, 0x379d, 0x3832, 0x2da7, 0x3a9e, 0x3bc7, 0x34a2, 0x2c5a, -0x3bde, 0x3822, 0x3715, 0x345e, 0x38c1, 0x3315, 0x38d1, 0x2da9, 0x37f6, 0x38d3, 0x3beb, 0x3ba6, 0x343f, 0x3af0, 0x3b0e, 0x2bd6, 0x3b3b, 0x3a5a, 0x3930, 0x3af7, 0x3504, 0x31a5, 0x2918, 0x3853, 0x214f, 0x3b67, 0x3b64, 0x34a9, 0x3894, 0x3a87, 0x3ad1, 0x3a09, 0x38a2, 0x39da, 0x3a16, 0x3485, 0x36bf, 0x3ada, 0x31eb, 0x3b8c, 0x2de3, 0x3914, 0x39d4, 0x399f, 0x3968, 0x3200, 0x3631, 0x3bd6, 0x390b, 0x312d, 0x3b94, 0x3bf1, 0x38ee, 0x378b, 0x29f3, 0x3810, 0x2f19, 0x3808, 0x389c, 0x3a3a, 0x376c, 0x3b58, 0x346d, 0x2e32, 0x3848, 0x3bec, 0x3779, 0x3237, 0x37d2, 0x3963, 0x37a5, 0x3993, 0x3495, 0x3679, 0x2c1d, 0x3add, 0x3722, 0x305d, 0x38a0, 0x3851, 0x3a01, 0x291b, 0x3447, 0x35f7, 0x3617, 0x3928, 0x2e5d, 0x1f75, 0x3b78, 0x12cc, 0x39db, 0x39be, 0x3b11, 0x3b5a, 0x2fae, 0x3696, -0x3b26, 0x3229, 0x31d8, 0x3b61, 0x290e, 0x3b7d, 0x3bf3, 0x38cc, 0x3a78, 0x35f8, 0x3b7d, 0x3883, 0x3b43, 0x3571, 0x3991, 0x3bc3, 0x3095, 0x350f, 0x39bf, 0x3823, 0x370c, 0x2aa8, 0x3473, 0x33da, 0x38c7, 0x3ab7, 0x3b3d, 0x20f4, 0x3b12, 0x3997, 0x3bfe, 0x3479, 0x3a5f, 0x3550, 0x3af7, 0x34f2, 0x382f, 0x3109, 0x3287, 0x3a6f, 0x3b41, 0x3919, 0x2a88, 0x3b07, 0x3097, 0x398d, 0x35a7, 0x3921, 0x332f, 0x3b65, 0x39c2, 0x3aea, 0x3a54, 0x3996, 0x38c1, 0x396c, 0x3a06, 0x3831, 0x33a9, 0x3457, 0x3a8f, 0x3b43, 0x310d, 0x38e9, 0x36b8, 0x392c, 0x36b7, 0x323f, 0x2e02, 0x3b91, 0x36ef, 0x356b, 0x35e9, 0x339f, 0x39ce, 0x3ba8, 0x31bf, 0x2d8d, 0x3b09, 0x2dd7, 0x3960, 0x3b44, 0x37df, 0x3814, 0x3783, 0x39e7, 0x3716, 0x397f, 0x3429, 0x35ef, 0x3a37, 0x3743, 0x342a, 0x33cf, 0x184a, 0x3829, -0x384e, 0x3ade, 0x35c2, 0x36b9, 0x3429, 0x3abf, 0x3ac6, 0x3a36, 0x2108, 0x38ef, 0x37ff, 0x39fe, 0x3815, 0x3935, 0x3ab5, 0x351d, 0x3add, 0x3b57, 0x37ad, 0x2cc3, 0x3ace, 0x3ac4, 0x37ac, 0x3904, 0x3951, 0x32e7, 0x3337, 0x270b, 0x3a71, 0x3b9c, 0x3808, 0x3033, 0x34be, 0x3742, 0x3a39, 0x27f7, 0x26a2, 0x3b34, 0x35e5, 0x3a0f, 0x3939, 0x365f, 0x3853, 0x3b36, 0x364e, 0x3334, 0x1c8a, 0x330f, 0x3b6a, 0x3a34, 0x37fc, 0x353d, 0x3922, 0x387e, 0x390d, 0x3950, 0x37fc, 0x3946, 0x3afd, 0x342b, 0x2a9d, 0x3b85, 0x32b2, 0x3afc, 0x39a0, 0x3a38, 0x3182, 0x3aac, 0x3840, 0x3b40, 0x3703, 0x2f71, 0x3992, 0x3a53, 0x3a8a, 0x370c, 0x3101, 0x3826, 0x3b5b, 0x39c0, 0x3a46, 0x37d7, 0x3751, 0x2ab9, 0x342b, 0x39e0, 0x36fc, 0x3a8a, 0x1fb5, 0x355b, 0x38dc, 0x3b4d, 0x3be0, 0x3793, 0x307f, 0x3bae, -0x33ae, 0x39cc, 0x3a09, 0x3b3a, 0x34bf, 0x3b1c, 0x35cf, 0x3aa3, 0x3504, 0x381b, 0x3a9d, 0x3703, 0x3bce, 0x3b36, 0x35ea, 0x3503, 0x3687, 0x2661, 0x3bff, 0x2d04, 0x3bee, 0x3841, 0x3074, 0x309f, 0x35a3, 0x34ca, 0x36d5, 0x3640, 0x37e6, 0x37c9, 0x3a6d, 0x34fd, 0x3918, 0x3aa0, 0x3762, 0x34e0, 0x3527, 0x3780, 0x341d, 0x385a, 0x3af7, 0x3bf7, 0x3926, 0x3617, 0x3615, 0x2a99, 0x3649, 0x3a98, 0x3613, 0x2e24, 0x3809, 0x35b6, 0x3a63, 0x3bdd, 0x3825, 0x38fb, 0x2ed9, 0x39a5, 0x2d38, 0x364c, 0x3a63, 0x397c, 0x35e5, 0x3ad5, 0x31a7, 0x3979, 0x2873, 0x2e5c, 0x3abb, 0x39b6, 0x3b74, 0x2ce6, 0x35ab, 0x3920, 0x2fee, 0x308b, 0x229f, 0x3547, 0x36d3, 0x359c, 0x3814, 0x34de, 0x3a39, 0x2ed6, 0x3bd6, 0x353d, 0x3afb, 0x3b17, 0x3733, 0x16f0, 0x3011, 0x38b2, 0x387a, 0x3984, 0x3747, 0x394d, -0x34f7, 0x3755, 0x3960, 0x355f, 0x3765, 0x38fa, 0x3be8, 0x33ca, 0x351f, 0x31eb, 0x397e, 0x1412, 0x3022, 0x3467, 0x39d7, 0x3a60, 0x2c85, 0x3241, 0x3a90, 0x3926, 0x397a, 0x38f1, 0x3996, 0x3a51, 0x3ad5, 0x2e68, 0x38a9, 0x3663, 0x399f, 0x35f3, 0x3b4c, 0x34aa, 0x3b6b, 0x32af, 0x3aa8, 0x3a22, 0x38b6, 0x34cd, 0x2c81, 0x3945, 0x37a9, 0x3a20, 0x2523, 0x3ad8, 0x29ca, 0x3b63, 0x3a69, 0x37dc, 0x323b, 0x3898, 0x38e3, 0x3637, 0x394a, 0x2d82, 0x392c, 0x3993, 0x35b8, 0x3810, 0x399e, 0x3672, 0x39fa, 0x36c2, 0x351f, 0x3797, 0x244f, 0x3b02, 0x3304, 0x385f, 0x3312, 0x394e, 0x396b, 0x28bf, 0x3885, 0x39e2, 0x347e, 0x33ad, 0x3526, 0x3a5f, 0x3b90, 0x3b1e, 0x2572, 0x3a9c, 0x30ec, 0x393e, 0x3a9b, 0x357a, 0x394b, 0x3449, 0x3545, 0x2fee, 0x3702, 0x362b, 0x3bd4, 0x27d9, 0x2d6d, 0x3080, -0x30fb, 0x382e, 0x387a, 0x3b71, 0x355f, 0x39cc, 0x33c0, 0x2f57, 0x3b2f, 0x3b79, 0x3aea, 0x3b17, 0x3b46, 0x3844, 0x380d, 0x30a7, 0x2348, 0x381f, 0x2c21, 0x3a3b, 0x2cf6, 0x3523, 0x3835, 0x1b53, 0x3ad3, 0x3b18, 0x372a, 0x39a5, 0x37e6, 0x39bd, 0x2cfd, 0x395d, 0x2ea2, 0x39cb, 0x3bdc, 0x36db, 0x3b48, 0x3acc, 0x3439, 0x34c8, 0x3361, 0x3b5b, 0x324a, 0x35ec, 0x2c87, 0x395e, 0x35fe, 0x37a4, 0x361f, 0x315f, 0x305e, 0x35f7, 0x3541, 0x3729, 0x37ed, 0x31b7, 0x3a9a, 0x34ee, 0x376c, 0x3a7a, 0x389e, 0x30b3, 0x328e, 0x3811, 0x36f5, 0x35d9, 0x37f9, 0x3bcf, 0x3a0d, 0x3658, 0x3ba9, 0x38df, 0x3997, 0x3a6d, 0x375e, 0x32f7, 0x382e, 0x3b0d, 0x38ed, 0x346a, 0x3b8a, 0x2da9, 0x359c, 0x3574, 0x3840, 0x3333, 0x3a5b, 0x358d, 0x39f3, 0x385d, 0x2959, 0x3908, 0x3b84, 0x3a40, 0x2f0d, 0x35e0, -0x2066, 0x3940, 0x3b3b, 0x320f, 0x37cc, 0x377a, 0x3b22, 0x36da, 0x3aa0, 0x3476, 0x34b4, 0x3941, 0x36f4, 0x391e, 0x3a8d, 0x32ca, 0x3853, 0x3af6, 0x34d2, 0x36a6, 0x33f1, 0x39a0, 0x3790, 0x3440, 0x390f, 0x3a83, 0x399d, 0x367d, 0x2b8e, 0x3575, 0x3a1b, 0x3a7c, 0x3a6c, 0x2eb2, 0x3a27, 0x369b, 0x3a45, 0x38a4, 0x346f, 0x3a8c, 0x307a, 0x36d0, 0x39be, 0x39ae, 0x34ee, 0x2ae7, 0x3559, 0x3858, 0x3705, 0x38eb, 0x39fa, 0x3565, 0x3285, 0x392a, 0x394a, 0x300a, 0x39f6, 0x2e3e, 0x33dc, 0x39c7, 0x295d, 0x3b80, 0x3888, 0x3760, 0x3bfb, 0x396f, 0x3729, 0x386d, 0x39bb, 0x2d93, 0x387a, 0x3b12, 0x3b2e, 0x3bdc, 0x33ec, 0x383d, 0x38d0, 0x3373, 0x3bb0, 0x3987, 0x3b2b, 0x3097, 0x3884, 0x3b20, 0x39bf, 0x3360, 0x2b53, 0x370a, 0x2f02, 0x38ab, 0x24ee, 0x3947, 0x3927, 0x29d7, 0x3b8d, 0x3b8b, -0x3a58, 0x292b, 0x3604, 0x398f, 0x321b, 0x341f, 0x3909, 0x3901, 0x3b49, 0x32ee, 0x3940, 0x3b77, 0x31f0, 0x344e, 0x380c, 0x36b1, 0x3a4e, 0x3638, 0x3922, 0x3864, 0x393b, 0x3903, 0x302f, 0x2ff2, 0x30b7, 0x3997, 0x385b, 0x3bbf, 0x3b39, 0x38de, 0x3a69, 0x3b51, 0x3aed, 0x387b, 0x269d, 0x39c7, 0x3a99, 0x3beb, 0x3672, 0x33ee, 0x200e, 0x3834, 0x34f7, 0x3971, 0x355a, 0x31fd, 0x2531, 0x385f, 0x3bf2, 0x2686, 0x364a, 0x358a, 0x2e99, 0x2f89, 0x3809, 0x3924, 0x39ee, 0x3990, 0x3987, 0x3972, 0x3813, 0x3840, 0x34dd, 0x374a, 0x3250, 0x2f4c, 0x35d9, 0x2991, 0x3b3f, 0x362e, 0x3455, 0x2abb, 0x3a2d, 0x3b57, 0x3567, 0x2cc0, 0x2d0d, 0x3be3, 0x2f3e, 0x3a9f, 0x3253, 0x34e8, 0x3712, 0x334e, 0x3ab9, 0x3bae, 0x3a1d, 0x3a5c, 0x3b96, 0x3adf, 0x3088, 0x3a8e, 0x35f3, 0x3795, 0x35d1, 0x3bb4, -0x3862, 0x3976, 0x3b9a, 0x3291, 0x3b5c, 0x3540, 0x2d00, 0x3702, 0x3519, 0x39dd, 0x3bff, 0x3560, 0x3642, 0x392c, 0x3a6f, 0x32ff, 0x32f2, 0x3836, 0x2d5f, 0x368d, 0x383b, 0x3abb, 0x2ec9, 0x3ada, 0x391a, 0x3811, 0x35d9, 0x3b90, 0x3aa3, 0x3149, 0x3b10, 0x3912, 0x3391, 0x318b, 0x22ed, 0x3a32, 0x3819, 0x39c9, 0x3865, 0x332e, 0x399b, 0x3aaa, 0x3b3e, 0x37b6, 0x35db, 0x3286, 0x3765, 0x2afe, 0x3b7a, 0x32b2, 0x38c9, 0x37d0, 0x3a6d, 0x3a3a, 0x3a9c, 0x364d, 0x3915, 0x36d5, 0x24fb, 0x35ed, 0x3abd, 0x3200, 0x3ae4, 0x3a0f, 0x3ac2, 0x33be, 0x3812, 0x3bae, 0x3969, 0x3237, 0x3bb0, 0x3681, 0x35c9, 0x37da, 0x2f15, 0x3362, 0x3b5c, 0x3a74, 0x315a, 0x3b44, 0x2f83, 0x3971, 0x3bfd, 0x3ab3, 0x35ae, 0x3a5a, 0x303d, 0x2a1d, 0x3a0c, 0x3bbe, 0x3365, 0x33df, 0x3521, 0x3bce, 0x3880, 0x3842, -0x3a15, 0x3835, 0x2ac7, 0x3640, 0x3864, 0x309d, 0x3934, 0x364d, 0x30f9, 0x3954, 0x34c0, 0x39a2, 0x36c1, 0x3a64, 0x2f3d, 0x338e, 0x3993, 0x34c0, 0x2c7e, 0x30a8, 0x3696, 0x2d67, 0x2017, 0x3757, 0x2ebc, 0x2c37, 0x3422, 0x36a8, 0x3a49, 0x364d, 0x3b0a, 0x3adc, 0x34f1, 0x3a15, 0x389b, 0x389b, 0x3557, 0x3542, 0x3a12, 0x38b4, 0x3a49, 0x38fd, 0x3a25, 0x3516, 0x3bc9, 0x3811, 0x1b72, 0x391e, 0x2ecb, 0x3a69, 0x3818, 0x342b, 0x3b44, 0x3912, 0x2ae6, 0x3bb1, 0x355e, 0x3182, 0x3793, 0x385b, 0x2983, 0x394d, 0x3021, 0x307c, 0x3419, 0x364f, 0x395f, 0x3395, 0x365d, 0x3a90, 0x3b4d, 0x3660, 0x35ad, 0x3b87, 0x3b40, 0x3919, 0x3800, 0x385c, 0x187b, 0x3b1e, 0x38c8, 0x38bf, 0x3844, 0x390b, 0x3672, 0x37df, 0x3a46, 0x3013, 0x30fd, 0x3a86, 0x36aa, 0x3a60, 0x39a7, 0x39b7, 0x37d2, 0x33e7, -0x2cde, 0x3a8d, 0x33d3, 0x2c74, 0x34c5, 0x2b02, 0x3ab0, 0x375d, 0x3a8f, 0x39c7, 0x340c, 0x3bc7, 0x39ae, 0x2ea6, 0x3b0b, 0x394b, 0x3823, 0x3504, 0x383a, 0x38f6, 0x382d, 0x3bda, 0x3a1b, 0x38c9, 0x35e2, 0x39f1, 0x38b9, 0x3281, 0x3bb3, 0x3156, 0x2c35, 0x3b28, 0x2cfe, 0x392a, 0x3908, 0x3a72, 0x2d0e, 0x3b20, 0x369d, 0x3bae, 0x2f9f, 0x3aac, 0x331f, 0x3ab7, 0x3999, 0x3980, 0x3b17, 0x39d3, 0x3609, 0x231d, 0x386c, 0x39b7, 0x2a32, 0x37b0, 0x350d, 0x2554, 0x33ee, 0x2c9a, 0x319a, 0x37d6, 0x347e, 0x3a54, 0x3903, 0x3aaa, 0x31fc, 0x33c9, 0x3988, 0x3ac7, 0x31b5, 0x354c, 0x3ba7, 0x342e, 0x3898, 0x3907, 0x3bc4, 0x36b6, 0x36fc, 0x3896, 0x3832, 0x33d8, 0x3af7, 0x38df, 0x3b8b, 0x2dc9, 0x29a0, 0x3b24, 0x34e6, 0x2d49, 0x34c2, 0x388e, 0x36cb, 0x2eff, 0x34fb, 0x3b91, 0x3be3, 0x39ed, -0x38fb, 0x3675, 0x36d9, 0x385b, 0x36ce, 0x3755, 0x354b, 0x3014, 0x3670, 0x3be2, 0x3af2, 0x3b6e, 0x345f, 0x2f8d, 0x3a55, 0x3919, 0x3ad3, 0x3388, 0x368a, 0x3bbf, 0x2b8e, 0x28fd, 0x2e73, 0x3baa, 0x3326, 0x3625, 0x351e, 0x35eb, 0x305c, 0x3bc5, 0x345b, 0x3473, 0x3555, 0x28bb, 0x357a, 0x39c2, 0x3871, 0x3232, 0x2c3a, 0x3983, 0x340a, 0x3af8, 0x3932, 0x3354, 0x3a39, 0x36b8, 0x367a, 0x29ce, 0x3bf0, 0x290d, 0x339f, 0x3afb, 0x340d, 0x3128, 0x38ac, 0x2b34, 0x346f, 0x3356, 0x3bb9, 0x2967, 0x355a, 0x37cd, 0x34f4, 0x3a66, 0x36b6, 0x2968, 0x3bf7, 0x3a0d, 0x361c, 0x3898, 0x3859, 0x39fe, 0x3bdb, 0x38aa, 0x3b92, 0x2fcc, 0x38b1, 0x3713, 0x3be1, 0x3826, 0x3b00, 0x32c3, 0x30a1, 0x38d7, 0x3bf3, 0x3b42, 0x38af, 0x304b, 0x3279, 0x37c5, 0x2072, 0x346c, 0x3857, 0x3597, 0x3624, 0x39d7, -0x3042, 0x392a, 0x3120, 0x20d7, 0x3b8c, 0x3a8f, 0x383a, 0x3a52, 0x3bbd, 0x31ad, 0x3781, 0x3359, 0x36cb, 0x33f1, 0x385b, 0x3225, 0x38d5, 0x3019, 0x3a17, 0x34d3, 0x3a34, 0x39ba, 0x3a17, 0x31e8, 0x3b53, 0x3b9c, 0x3b54, 0x33b6, 0x3488, 0x367a, 0x3a2c, 0x3ac7, 0x3b0a, 0x399a, 0x3891, 0x3a51, 0x3a4a, 0x380b, 0x391c, 0x3805, 0x381d, 0x3b2a, 0x2a0d, 0x3acc, 0x3b55, 0x3958, 0x3a2b, 0x35cd, 0x340e, 0x36e1, 0x3a09, 0x2569, 0x2c5f, 0x376c, 0x3431, 0x3ad3, 0x31fc, 0x331e, 0x396b, 0x2ebd, 0x380f, 0x3bce, 0x3a74, 0x32de, 0x30ec, 0x3300, 0x3aba, 0x34c3, 0x3abd, 0x30c6, 0x39af, 0x3a3d, 0x3ad9, 0x3097, 0x2af9, 0x38a6, 0x3071, 0x25c5, 0x34ea, 0x2ff3, 0x355e, 0x3b66, 0x1edc, 0x3a1f, 0x32c7, 0x381c, 0x3837, 0x3bc1, 0x3033, 0x3bcb, 0x3a53, 0x3ab7, 0x38be, 0x2a81, 0x36ad, 0x301f, -0x3931, 0x3ba1, 0x34ac, 0x383d, 0x3636, 0x35b9, 0x38f2, 0x2c53, 0x32a9, 0x3b31, 0x3181, 0x383c, 0x395b, 0x30ef, 0x3aa7, 0x30ce, 0x32ff, 0x328b, 0x3329, 0x2c12, 0x394e, 0x2c60, 0x35de, 0x3938, 0x2c18, 0x37be, 0x392e, 0x3438, 0x3650, 0x34c7, 0x392c, 0x39aa, 0x2e72, 0x3ab6, 0x2bc9, 0x3bfa, 0x36f2, 0x2830, 0x2ad4, 0x3b3f, 0x3ae7, 0x34c7, 0x3064, 0x35ef, 0x3956, 0x39e9, 0x31eb, 0x2ff8, 0x36f3, 0x38de, 0x34b8, 0x3aa8, 0x1c30, 0x3b4f, 0x38d9, 0x3bba, 0x39b7, 0x3b4c, 0x2ee9, 0x3837, 0x3835, 0x36c6, 0x3928, 0x2e72, 0x37d2, 0x3642, 0x31cb, 0x35d6, 0x3408, 0x3404, 0x39d4, 0x3877, 0x38a5, 0x31ae, 0x2c75, 0x341a, 0x3af5, 0x3abc, 0x330b, 0x387d, 0x3b46, 0x369f, 0x2bf0, 0x3bdc, 0x36fc, 0x362a, 0x374f, 0x3bc3, 0x3ac5, 0x38c1, 0x3965, 0x380f, 0x3675, 0x3bba, 0x3a38, 0x39ca +uint16_t w_inp [1024] = { +0x311a, 0x39e0, 0x387d, 0x3a4a, 0x386f, 0x3ada, 0x392f, 0x3854, 0x3014, 0x2fd2, 0x31c9, 0x2fca, 0x2e55, 0x3bc8, 0x396d, 0x3b1d, 0x39f6, 0x333a, 0x3908, 0x3628, 0x3bab, 0x3b8b, 0x3b4a, 0x322d, 0x3925, 0x317a, 0x3725, 0x31c2, 0x3066, 0x38f3, 0x3a17, 0x3476, +0x3bda, 0x3196, 0x3922, 0x3680, 0x396a, 0x3021, 0x3761, 0x374d, 0x2fc2, 0x3967, 0x3b94, 0x33b5, 0x3797, 0x34d6, 0x3655, 0x2176, 0x39bc, 0x3999, 0x3658, 0x3904, 0x3759, 0x2ade, 0x3a5a, 0x3b78, 0x36c7, 0x2d01, 0x3b58, 0x2d9a, 0x373d, 0x3952, 0x38e8, 0x3887, +0x37b6, 0x3a88, 0x2f8a, 0x2d79, 0x3413, 0x3421, 0x3976, 0x32b2, 0x3446, 0x2d99, 0x3a56, 0x3322, 0x3b49, 0x39fa, 0x3acd, 0x3af6, 0x304c, 0x3abb, 0x3a83, 0x38b2, 0x3ab9, 0x363e, 0x389f, 0x31bb, 0x38e1, 0x3bc4, 0x3b9b, 0x2984, 0x3a43, 0x3b2f, 0x35d6, 0x3bda, +0x2df3, 0x3bf8, 0x2acc, 0x378b, 0x3555, 0x2e59, 0x31d4, 0x34ec, 0x3a46, 0x3bab, 0x3214, 0x3161, 0x3470, 0x3a03, 0x368e, 0x31ad, 0x27cb, 0x2ecb, 0x3422, 0x39f7, 0x3644, 0x3a77, 0x313f, 0x34f2, 0x39b3, 0x3bf2, 0x379a, 0x3456, 0x35fe, 0x3ae7, 0x3964, 0x385f, +0x3b16, 0x3999, 0x3833, 0x2eda, 0x3afd, 0x3a4a, 0x3ba2, 0x2bd4, 0x3b38, 0x31a2, 0x32dd, 0x353c, 0x366f, 0x375e, 0x3821, 0x367a, 0x3b44, 0x39e6, 0x3787, 0x339e, 0x39d7, 0x38c6, 0x37d5, 0x342f, 0x3984, 0x319b, 0x33b5, 0x35ab, 0x398a, 0x374e, 0x36b6, 0x3b21, +0x3bbb, 0x2ab3, 0x2ad5, 0x33bc, 0x2bef, 0x3780, 0x3738, 0x3a0b, 0x3b09, 0x30ca, 0x384e, 0x3ab3, 0x39bd, 0x3453, 0x3a6d, 0x3957, 0x2c10, 0x30e9, 0x35d4, 0x3aef, 0x3be9, 0x39ad, 0x3a74, 0x3af9, 0x3739, 0x2d4d, 0x39fe, 0x3b72, 0x2c57, 0x398c, 0x381f, 0x3930, +0x3820, 0x321b, 0x3964, 0x2964, 0x33a0, 0x2d00, 0x2490, 0x336b, 0x3465, 0x3b2e, 0x3aa0, 0x371f, 0x300e, 0x3a09, 0x3bf1, 0x25cc, 0x3b6f, 0x3384, 0x3a88, 0x3acb, 0x3814, 0x36d0, 0x3081, 0x3a2c, 0x3353, 0x39cb, 0x31ed, 0x3af6, 0x3721, 0x36c7, 0x2ce2, 0x390d, +0x3698, 0x3ab2, 0x3b3e, 0x2eb4, 0x3998, 0x39e3, 0x3a77, 0x3632, 0x2c12, 0x3bd5, 0x3ba3, 0x3bba, 0x323c, 0x367b, 0x3557, 0x39c8, 0x37db, 0x3b45, 0x3b6e, 0x3931, 0x3121, 0x3a8d, 0x3a55, 0x3b9b, 0x358a, 0x3925, 0x3491, 0x3912, 0x3b6b, 0x3584, 0x32df, 0x3120, +0x32b2, 0x3b0a, 0x2cad, 0x3465, 0x3ad3, 0x3bcd, 0x363b, 0x3afe, 0x354b, 0x3374, 0x39af, 0x3b7f, 0x308c, 0x2e72, 0x3380, 0x3b70, 0x3902, 0x38d8, 0x39f3, 0x3a4b, 0x3853, 0x397b, 0x2ebe, 0x387f, 0x2845, 0x37e2, 0x360f, 0x370b, 0x3acb, 0x35d4, 0x36e6, 0x3262, +0x2e88, 0x3a54, 0x2ee3, 0x3575, 0x3afe, 0x2aee, 0x39a0, 0x3aae, 0x3693, 0x3432, 0x3834, 0x3b9b, 0x3bcb, 0x2e3a, 0x356d, 0x374e, 0x3924, 0x383c, 0x311e, 0x3ac5, 0x352d, 0x311e, 0x38ca, 0x34d4, 0x36ca, 0x34ed, 0x3a13, 0x33eb, 0x3639, 0x3828, 0x3b3c, 0x3939, +0x3837, 0x3521, 0x2cb5, 0x3629, 0x3924, 0x384c, 0x366a, 0x3bbf, 0x2e9e, 0x3ba8, 0x33ad, 0x38c8, 0x3934, 0x3907, 0x249a, 0x3690, 0x3a09, 0x3215, 0x3898, 0x325d, 0x37d5, 0x3195, 0x361c, 0x3ae4, 0x351f, 0x3452, 0x3bc0, 0x375c, 0x39bf, 0x317a, 0x3aae, 0x283a, +0x3476, 0x3b92, 0x3472, 0x383e, 0x280f, 0x39d6, 0x2fd1, 0x31f4, 0x2ffb, 0x3b97, 0x3692, 0x36c0, 0x3989, 0x33cf, 0x3ba6, 0x3239, 0x35d7, 0x33ab, 0x31eb, 0x3b47, 0x389b, 0x3b88, 0x3580, 0x354c, 0x3802, 0x3b9a, 0x3b94, 0x2a92, 0x2db1, 0x38bd, 0x2dfb, 0x3900, +0x344f, 0x3739, 0x27a5, 0x3b2e, 0x342b, 0x34bb, 0x30c8, 0x3ae8, 0x3b26, 0x3982, 0x38c0, 0x3408, 0x38c8, 0x36ef, 0x3bf0, 0x3acf, 0x3a3c, 0x3825, 0x31a5, 0x3ada, 0x3b5b, 0x37db, 0x3a01, 0x3663, 0x3a7d, 0x327b, 0x3a1f, 0x3862, 0x38af, 0x3204, 0x372e, 0x3b19, +0x3708, 0x3622, 0x2e62, 0x39ab, 0x2d4d, 0x31b4, 0x3552, 0x3bbc, 0x36f2, 0x36eb, 0x38ef, 0x3755, 0x3bbe, 0x2c17, 0x3815, 0x2f53, 0x363f, 0x38c1, 0x3246, 0x386b, 0x34de, 0x34e4, 0x3baa, 0x349e, 0x32ce, 0x3a68, 0x373f, 0x2cce, 0x3b36, 0x28ba, 0x3b50, 0x3232, +0x1f34, 0x3928, 0x35cd, 0x3b38, 0x30ce, 0x35a1, 0x3a06, 0x3a32, 0x3a53, 0x3489, 0x3241, 0x372f, 0x390c, 0x3a1b, 0x378a, 0x3713, 0x3769, 0x37a8, 0x3418, 0x3ad4, 0x3a4e, 0x3bf7, 0x37a5, 0x34dc, 0x39b2, 0x351b, 0x3372, 0x349f, 0x2f50, 0x3ab1, 0x3795, 0x2db7, +0x3864, 0x3157, 0x3900, 0x323e, 0x389e, 0x3880, 0x3b1f, 0x37a1, 0x396c, 0x2e43, 0x2c2a, 0x3b78, 0x3988, 0x3a14, 0x39c1, 0x3b51, 0x3780, 0x3bf2, 0x2d19, 0x3815, 0x3a5f, 0x3641, 0x2f62, 0x37d5, 0x3564, 0x139a, 0x3ab8, 0x28f7, 0x3785, 0x34e1, 0x3097, 0x3768, +0x3971, 0x3ae2, 0x32ae, 0x2fd5, 0x382a, 0x346c, 0x3133, 0x3167, 0x3940, 0x2d12, 0x389a, 0x3bd0, 0x3943, 0x391c, 0x3a75, 0x2a11, 0x391e, 0x372d, 0x3a79, 0x3b72, 0x3373, 0x39b7, 0x35d7, 0x372b, 0x3a6d, 0x38a1, 0x3279, 0x3434, 0x3694, 0x3b45, 0x3abb, 0x392d, +0x34a8, 0x3757, 0x32ca, 0x345d, 0x36a5, 0x3854, 0x2dcd, 0x30af, 0x38dd, 0x3067, 0x3411, 0x3997, 0x397a, 0x3a64, 0x38b8, 0x3962, 0x3509, 0x3bb6, 0x3a66, 0x339f, 0x372a, 0x31a8, 0x37da, 0x36ff, 0x33c6, 0x31da, 0x3977, 0x3b72, 0x3841, 0x3567, 0x3433, 0x33b8, +0x39fe, 0x3a10, 0x3bf2, 0x35e7, 0x3a4a, 0x3b3e, 0x2ec7, 0x3aa4, 0x3846, 0x3af9, 0x38a9, 0x2c1f, 0x39ab, 0x349f, 0x31d6, 0x39ae, 0x3b79, 0x352d, 0x3516, 0x347c, 0x2f33, 0x35ad, 0x31c4, 0x3b52, 0x354b, 0x3786, 0x3ab7, 0x3896, 0x34ac, 0x352f, 0x37e6, 0x326a, +0x2e44, 0x34c7, 0x388d, 0x3bf4, 0x363f, 0x3b3d, 0x33b1, 0x3b8b, 0x3340, 0x37f7, 0x3b07, 0x25bf, 0x398e, 0x3505, 0x3bd7, 0x366d, 0x388a, 0x2cc0, 0x359a, 0x3b9a, 0x3b99, 0x379d, 0x3b6b, 0x39b8, 0x3223, 0x2703, 0x3ba9, 0x2ecb, 0x3759, 0x39d8, 0x37ac, 0x32cf, +0x35f2, 0x38a3, 0x399e, 0x3bd2, 0x3780, 0x3af3, 0x3b5e, 0x337b, 0x3a08, 0x35da, 0x3446, 0x3b25, 0x3ad0, 0x3bee, 0x3141, 0x32d8, 0x34ce, 0x2ac9, 0x3800, 0x3a8a, 0x2d53, 0x368a, 0x3561, 0x3998, 0x35a3, 0x3677, 0x3ab2, 0x3269, 0x3236, 0x3b3e, 0x3aba, 0x3bac, +0x395d, 0x3820, 0x1df6, 0x3bb5, 0x35b5, 0x3675, 0x3b74, 0x360f, 0x34de, 0x3a0c, 0x3aeb, 0x299d, 0x3207, 0x3bd8, 0x2178, 0x3995, 0x3948, 0x3908, 0x3843, 0x2ea5, 0x3045, 0x3989, 0x345d, 0x39c5, 0x3a89, 0x3863, 0x3be0, 0x397a, 0x38f1, 0x39e2, 0x3b08, 0x352e, +0x385f, 0x28f2, 0x3bc3, 0x35e0, 0x380c, 0x3b9c, 0x3afc, 0x390a, 0x3689, 0x34fd, 0x2cf5, 0x308e, 0x342b, 0x3921, 0x3a67, 0x3ad6, 0x2986, 0x32fc, 0x35aa, 0x3507, 0x3608, 0x33fd, 0x3bf3, 0x39e2, 0x3b0f, 0x30b7, 0x3896, 0x3ae4, 0x2145, 0x35b6, 0x2e1d, 0x3ad1, +0x333d, 0x3afb, 0x2703, 0x3413, 0x1d7d, 0x3b7f, 0x3ae1, 0x303c, 0x3004, 0x39d3, 0x3554, 0x31a4, 0x354e, 0x3662, 0x39c5, 0x2eb7, 0x2c6e, 0x397f, 0x31d8, 0x1f0c, 0x38e3, 0x35f0, 0x2714, 0x28d1, 0x375e, 0x3a75, 0x3830, 0x3578, 0x397d, 0x3b18, 0x383c, 0x3498, +0x39ad, 0x3598, 0x23c4, 0x34ea, 0x3a61, 0x2b00, 0x3707, 0x3ae1, 0x37ae, 0x389d, 0x37fa, 0x3673, 0x3278, 0xf3e, 0x3809, 0x33c6, 0x3bf5, 0x3279, 0x3816, 0x360c, 0x39c8, 0x381f, 0x3741, 0x2d66, 0x38c0, 0x37d3, 0x377a, 0x3621, 0x2faf, 0x392e, 0x2de6, 0x33c5, +0x3803, 0x2600, 0x32e9, 0x39b4, 0x38d2, 0x34e8, 0x2fe6, 0x3199, 0x3643, 0x3a77, 0x27cc, 0x39d7, 0x34c6, 0x2ea8, 0x364e, 0x3b07, 0x31c7, 0x30a1, 0x31b1, 0x3b8f, 0x3571, 0x3b75, 0x3989, 0x3805, 0x39fb, 0x3945, 0x352b, 0x31d8, 0x3904, 0x3440, 0x3a57, 0x2cf7, +0x3b39, 0x2fcd, 0x2b89, 0x2edd, 0x3682, 0x36a9, 0x32c8, 0x37ac, 0x32a5, 0x3311, 0x394b, 0x3b84, 0x3aec, 0x3601, 0x2765, 0x3b69, 0x396b, 0x3727, 0x3bfe, 0x3907, 0x376f, 0x3674, 0x3973, 0x3671, 0x3491, 0x3993, 0x383f, 0x3335, 0x3989, 0x3550, 0x3077, 0x35f5, +0x3a59, 0x3950, 0x380c, 0x37cd, 0x30bf, 0x3607, 0x3afa, 0x3b5d, 0x32b9, 0x386b, 0x35bd, 0x3aca, 0x3ba5, 0x3b2d, 0x3b19, 0x3b8b, 0x345e, 0x2845, 0x34aa, 0x372a, 0x3448, 0x34f5, 0x3ae2, 0x3637, 0x2cb5, 0x354b, 0x3b15, 0x2ca8, 0x2641, 0x3178, 0x2cfe, 0x39b4, +0x3bdd, 0x3acb, 0x3a05, 0x38a2, 0x3b4a, 0x34e5, 0x395f, 0x394b, 0x34c4, 0x3aa5, 0x29bb, 0x2d96, 0x339d, 0x387c, 0x382e, 0x385a, 0x396b, 0x3aa9, 0x2f1e, 0x33a7, 0x3b90, 0x3b7b, 0x3b5f, 0x39d3, 0x3b18, 0x354f, 0x2cdb, 0x3a6f, 0x3434, 0x34ff, 0x3a5b, 0x3b84, +0x3a33, 0x384b, 0x2e67, 0x3b85, 0x3853, 0x380c, 0x346a, 0x3aaa, 0x3492, 0x33e8, 0x3bf2, 0x38ae, 0x3a29, 0x3830, 0x3221, 0x35b1, 0x3a48, 0x2c68, 0x2ced, 0x3a7e, 0x3539, 0x3922, 0x374c, 0x3aaa, 0x2dae, 0x395d, 0x3b3d, 0x3890, 0x2cfe, 0x2dd6, 0x3bad, 0x33c5, +0x2c07, 0x3a2c, 0x37a8, 0x390f, 0x2fc8, 0x35ae, 0x388c, 0x30ee, 0x3674, 0x391d, 0x3bfc, 0x36bf, 0x322d, 0x3a78, 0x35c0, 0x3492, 0x3ac8, 0x3504, 0x3315, 0x381d, 0x3a7a, 0x3a08, 0x343c, 0x3bda, 0x341b, 0x39f0, 0x3b9e, 0x395d, 0x3c00, 0x38ab, 0x3bcf, 0x3564, +0x33c4, 0x3b0d, 0x3623, 0x33b9, 0x3b92, 0x1e71, 0x2c57, 0x36d0, 0x314b, 0x3a16, 0x3372, 0x341b, 0x3aaa, 0x3444, 0x396b, 0x2dd7, 0x3b30, 0x3559, 0x3b5b, 0x3a29, 0x2d19, 0x38b7, 0x3b01, 0x3afa, 0x398a, 0x3839, 0x3ac9, 0x2e31, 0x3924, 0x39f2, 0x3a7f, 0x3285 }; \ No newline at end of file diff --git a/hwpe/redmule/inc/x_2D.h b/hwpe/redmule/inc/x_2D.h index ebe42af..0b589f8 100644 --- a/hwpe/redmule/inc/x_2D.h +++ b/hwpe/redmule/inc/x_2D.h @@ -1,99 +1,27 @@ /* Header file generated by RedMulE Golden Model */ -uint16_t x_inp_2D [96][96] = { -0x3122, 0x369c, 0x39bd, 0x3b58, 0x3be0, 0x3a5a, 0x3416, 0x386c, 0x3a11, 0x350e, 0x38ab, 0x35ad, 0x35d9, 0x390f, 0x3565, 0x36b0, 0x3aad, 0x3a64, 0x3797, 0x368d, 0x35a6, 0x396f, 0x2a5e, 0x3a29, 0x38a7, 0x33a8, 0x3409, 0x3621, 0x3b02, 0x34a7, 0x3a94, 0x3819, 0x3695, 0x380a, 0x3acd, 0x396a, 0x395a, 0x3663, 0x3bbe, 0x3306, 0x3a4d, 0x3b0d, 0x3bc3, 0x30fa, 0x32ab, 0x31fd, 0x3bc9, 0x38ce, 0x3180, 0x3980, 0x34ec, 0x3a84, 0x3bc9, 0x3719, 0x3a76, 0x38ab, 0x3707, 0x3904, 0x33d9, 0x34d6, 0x3053, 0x3bd4, 0x2f03, 0x1dbf, 0x2e5f, 0x36fa, 0x191d, 0x3187, 0x223f, 0x384b, 0x36dc, 0x3549, 0x343f, 0x36d8, 0x36de, 0x31ff, 0x174e, 0x30d3, 0x3452, 0x3258, 0x30b1, 0x3127, 0x3840, 0x3991, 0x3b1b, 0x3a7c, 0x36ec, 0x2304, 0x3946, 0x3876, 0x3a5d, 0x3a76, 0x2f78, 0x3b01, 0x3934, 0x3bc4, -0x2b27, 0x3669, 0x38ce, 0x2cde, 0x38e1, 0x3abd, 0x2c4f, 0x3971, 0x3964, 0x3a9d, 0x38b9, 0x390f, 0x3475, 0x3b16, 0x38f0, 0x397e, 0x3996, 0x3223, 0x36c6, 0x3bfd, 0x3161, 0x3a70, 0x3961, 0x38e1, 0x2b2b, 0x32c1, 0x3683, 0x36bb, 0x381a, 0x3b92, 0x356a, 0x38c4, 0x38df, 0x3a7b, 0x3b3a, 0x35a2, 0x27d3, 0x3af2, 0x3489, 0x38c7, 0x3985, 0x3a03, 0x30f6, 0x3a92, 0x38d5, 0x39a0, 0x3749, 0x3784, 0x1c70, 0x356b, 0x2d5f, 0x39db, 0x37ab, 0x39fb, 0x3b2c, 0x2ef8, 0x3336, 0x3afd, 0x38f0, 0x358f, 0x3ac4, 0x293d, 0x3328, 0x3741, 0x3993, 0x3463, 0x3918, 0x332e, 0x356d, 0x36ee, 0x34e7, 0x3757, 0x34b5, 0x3b7c, 0x3a63, 0x3b6c, 0x34a6, 0x34f3, 0x346a, 0x2bcf, 0x363d, 0x3081, 0x3abc, 0x35a5, 0x36ff, 0x2cb7, 0x2a53, 0x37a3, 0x3a98, 0x3b92, 0x3a9a, 0x38ff, 0x39dc, 0x3289, 0x3357, 0x39f6, -0x3b74, 0x3a5e, 0x3ba9, 0x365e, 0x3aa5, 0x3b42, 0x39b5, 0x2fb7, 0x39e5, 0x263d, 0x3405, 0x259f, 0x381d, 0x38dc, 0x3152, 0x37f5, 0x38b6, 0x3bfd, 0x3a4e, 0x3804, 0x370f, 0x382f, 0x395d, 0x38a5, 0x2edd, 0x3ac9, 0x34dc, 0x2a2a, 0x2aba, 0x35d0, 0x36b4, 0x3ae1, 0x3b35, 0x3a49, 0x3b5e, 0x38e8, 0x30ed, 0x3ab4, 0x3a92, 0x3bd9, 0x3437, 0x36d0, 0x3aad, 0x36d6, 0x35ed, 0x3635, 0x3bf7, 0x345a, 0x300a, 0x31d2, 0x340c, 0x38fd, 0x39ad, 0x39ac, 0x38bf, 0x38f6, 0x2f7e, 0x3685, 0x3be9, 0x3af0, 0x35d1, 0x35fb, 0x35ad, 0x3a6d, 0x3a78, 0x3813, 0x36a8, 0x3a6e, 0x39fc, 0x3918, 0x2179, 0x38a2, 0x37f9, 0x38dc, 0x24a9, 0x3647, 0x386a, 0x2890, 0x2d0f, 0x31e3, 0x394a, 0x36b2, 0x3071, 0x292d, 0x3568, 0x3adb, 0x394a, 0x2ff6, 0x3142, 0x322b, 0x2696, 0x3954, 0x229d, 0x383a, 0x2f3d, 0x3b4e, -0x3b1c, 0xd7b, 0x379c, 0x3421, 0x39a0, 0x3557, 0x2e38, 0x3b3a, 0x270e, 0x250b, 0x3b0a, 0x3aa1, 0x2d72, 0x351c, 0x3a11, 0x382b, 0x37f8, 0x3a82, 0x39e8, 0x3a1d, 0x3a45, 0x2fb7, 0x341b, 0x39ea, 0x3646, 0x3b27, 0x3abd, 0x350b, 0x3a3a, 0x3557, 0x37db, 0x315b, 0x305a, 0x3bd7, 0x3b33, 0x32b9, 0x3503, 0x2749, 0x3532, 0x37f2, 0x348e, 0x3422, 0x32a4, 0x37bf, 0x3b7b, 0x378f, 0x3476, 0x3a1a, 0x39a2, 0x35d9, 0x3b4d, 0x39f0, 0x34a7, 0x36c6, 0x3ab4, 0x39c2, 0x385b, 0x3add, 0x34cf, 0x3604, 0x39e1, 0x3872, 0x3751, 0x32db, 0x38df, 0x3602, 0x3509, 0x37d5, 0x342e, 0x39ef, 0x2f59, 0x2505, 0x314d, 0x35ff, 0x3bae, 0x3b38, 0x32af, 0x3b9b, 0x3b03, 0x2c5e, 0x3940, 0x38ef, 0x324c, 0x399a, 0x3a14, 0x39c6, 0x3a33, 0x382a, 0x3b36, 0x3ae7, 0x3b71, 0x3020, 0x3a14, 0x33d2, 0x3b1d, 0x2660, -0x2ace, 0x3a36, 0x39d6, 0x398d, 0x3ae2, 0x39dc, 0x3bb3, 0x26d5, 0x3a4a, 0x36ad, 0x3b31, 0x2b7e, 0x3baf, 0x3314, 0x2e0b, 0x31c1, 0x25a9, 0x378c, 0x3b45, 0x3ae9, 0x3586, 0x39fe, 0x3b5b, 0x3b18, 0x3a1b, 0x399b, 0x3aad, 0x30e1, 0x3b3b, 0x2d9f, 0x2614, 0x354e, 0x3806, 0x393e, 0x3564, 0x2346, 0x3b5e, 0x382f, 0x31c9, 0x3be1, 0x2e41, 0x394e, 0x346a, 0x3976, 0x38e7, 0x3503, 0x387f, 0x3025, 0x3232, 0x283b, 0x37d2, 0x32aa, 0x36e0, 0x3b92, 0x3a41, 0x2f32, 0x34cc, 0x3a30, 0x3a69, 0x3671, 0x3894, 0x3b3d, 0x3468, 0x3836, 0x2303, 0x2e8f, 0x3186, 0x37d1, 0x371f, 0x381a, 0x3af8, 0x2ca8, 0x31ba, 0x3a59, 0x3971, 0x3bdb, 0x3add, 0x35af, 0x3b81, 0x2f19, 0x3963, 0x3b58, 0x3aa4, 0x3b98, 0x3808, 0x33b7, 0x3833, 0x3506, 0x3467, 0x2f27, 0x35be, 0x346e, 0x39c9, 0x3677, 0x31b5, 0x3bf4, -0x3506, 0x30a7, 0x370d, 0x367e, 0x3264, 0x2fb7, 0x30d5, 0x3814, 0x3152, 0x38aa, 0x3a77, 0x2dde, 0x3077, 0x38df, 0x3744, 0x2af8, 0x37f8, 0x3aa2, 0x39e3, 0x3ada, 0x3931, 0x3bc0, 0x34b2, 0x35de, 0x33c8, 0x34d4, 0x395a, 0x36a1, 0x3a3a, 0x33e3, 0x38d7, 0x3476, 0x3b6f, 0x3506, 0x3448, 0x3b2c, 0x3766, 0x382b, 0x2efd, 0x33ec, 0x242c, 0x3976, 0x3027, 0x2c5f, 0x37df, 0x3b1a, 0x3641, 0x352d, 0x39ab, 0x3b49, 0x3a91, 0x35ba, 0x382f, 0x2b4c, 0x366f, 0x2f0b, 0x33e3, 0x2ccd, 0x3530, 0x33d0, 0x264e, 0x39b4, 0x3968, 0x29f5, 0x3a2c, 0x299a, 0x39c4, 0x380d, 0x3be2, 0x34b2, 0x3879, 0x3532, 0x34ac, 0x3685, 0x3b5e, 0x3426, 0x3b4d, 0x34ec, 0x32e0, 0x3767, 0x39d7, 0x3119, 0x39db, 0x36e1, 0x39ec, 0x388d, 0x3731, 0x314a, 0x39c5, 0x3325, 0x3284, 0x38c5, 0x2cf4, 0x2180, 0x3614, 0x382e, -0x2afc, 0x3562, 0x365c, 0x32dd, 0x3a1d, 0x39c0, 0x3510, 0x3ae7, 0x22b7, 0x3538, 0x3604, 0x3bb0, 0x3a8e, 0x38ca, 0x379d, 0x36f1, 0x3947, 0x317f, 0x2bfa, 0x3bc0, 0x3ad4, 0x3a19, 0x308b, 0x390b, 0x353d, 0x3599, 0x344e, 0x3159, 0x39fc, 0x362e, 0x3bf5, 0x3246, 0x38e9, 0x3551, 0x3981, 0x3776, 0x3964, 0x3966, 0x335b, 0x3361, 0x3abc, 0x39d1, 0x3b96, 0x3a40, 0x3bfc, 0x30f6, 0x2fc2, 0x350a, 0x3857, 0x3175, 0x3929, 0x383e, 0x38c1, 0x3b21, 0x3025, 0x3a20, 0x3b6f, 0x3600, 0x3b06, 0x30d2, 0x30c3, 0x3550, 0x3025, 0x33c7, 0x3724, 0x3819, 0x38e3, 0x33fe, 0x3ad1, 0x2f0b, 0x38fe, 0x3458, 0x3bca, 0x391e, 0x345a, 0x36da, 0x38d7, 0x2dbd, 0x2c4e, 0x38b4, 0x35ea, 0x2970, 0x2ec0, 0x2519, 0x3552, 0x37cd, 0x3893, 0x3150, 0x38d6, 0x360d, 0x3986, 0x38e3, 0x3847, 0x36dc, 0x3a12, 0x3a3b, -0x34ea, 0x3a8b, 0x31db, 0x3a10, 0x34ca, 0x3b7e, 0x324e, 0x393b, 0x3a38, 0x3791, 0x2727, 0x31a9, 0x3beb, 0x3a43, 0x3ad3, 0x2c46, 0x3bc4, 0x38a9, 0x3918, 0x3b1c, 0x381d, 0x32aa, 0x367b, 0x3a80, 0x3a59, 0x37f6, 0x37ac, 0x36aa, 0x3072, 0x3960, 0x388c, 0x3a91, 0x3908, 0x34ab, 0x2f14, 0x3b72, 0x38f9, 0x359f, 0x38e2, 0x2938, 0x39ba, 0x2aa7, 0x3276, 0x3a66, 0x394d, 0x2de4, 0x39b0, 0x3835, 0x3b49, 0x2d77, 0x3ba2, 0x348b, 0x39f0, 0x381d, 0x382c, 0x384d, 0x3798, 0x3a0f, 0x38c3, 0x2ecb, 0x3472, 0x308f, 0x350c, 0x3014, 0x38e7, 0x2aff, 0x30ec, 0x3928, 0x36f5, 0x3909, 0x3b46, 0x2a93, 0x37cb, 0x3bb6, 0x2fbc, 0x3a3a, 0x3a47, 0x343e, 0x3bf1, 0x3b8f, 0x3bcb, 0x376d, 0x3669, 0x3892, 0x35c2, 0x3512, 0x370f, 0x35dc, 0x3923, 0x39e8, 0x3880, 0x288b, 0x36e7, 0x359e, 0x346f, 0x3b64, -0x3b1c, 0x340e, 0x25ab, 0x3b4e, 0x3897, 0x3bdb, 0x2da4, 0x389c, 0x36fd, 0x3a3c, 0x2f2d, 0x38fb, 0x395c, 0x2ea7, 0x3949, 0x368b, 0x35a3, 0x377c, 0x32de, 0x35b1, 0x3529, 0x301d, 0x3771, 0x393f, 0x3993, 0x3ae0, 0x3bda, 0x375b, 0x31ff, 0x3989, 0x3ad0, 0x3bb6, 0x3814, 0x3999, 0x3854, 0x39e7, 0x37fa, 0x3afc, 0x185f, 0x2e32, 0x3697, 0x3942, 0x3aa0, 0x3b75, 0x3ad3, 0x3aa8, 0x39b8, 0x38c2, 0x38fb, 0x39a4, 0x3b8f, 0x3b2e, 0x334d, 0x3a0c, 0x361b, 0x3a46, 0x3337, 0x388d, 0x321b, 0x38bc, 0x3005, 0x35a4, 0x3bf5, 0x3bcf, 0x3a44, 0x3ac7, 0x3a7d, 0x3b2c, 0x39c5, 0x2001, 0x3594, 0x3a29, 0x3131, 0x3ab9, 0x39d9, 0x38c4, 0x3666, 0x37a8, 0x3a75, 0x3a10, 0x3441, 0x3b7e, 0x23f5, 0x3ab2, 0x306f, 0x3bc0, 0x3989, 0x3361, 0x36ea, 0x2eb9, 0x360f, 0x351c, 0x2a16, 0x3bfe, 0x372b, 0x3b97, -0x3bbf, 0x2cf5, 0x3922, 0x316e, 0x37ad, 0x3a7f, 0x3863, 0x3a4c, 0x37a4, 0x35c1, 0x3b77, 0x3549, 0x3a83, 0x37c4, 0x3b84, 0x38c6, 0x3a7f, 0x2f24, 0x2fc0, 0x3475, 0x3a6a, 0x3bc4, 0x3a21, 0x3b96, 0x365c, 0x38b7, 0x31ce, 0x3bcc, 0x3b80, 0x3a31, 0x3523, 0x2d9d, 0x359e, 0x3afe, 0x371d, 0x2d94, 0x3a2a, 0x3ace, 0x3bed, 0x3726, 0x2fa1, 0x3abe, 0x3624, 0x2be4, 0x2b70, 0x394e, 0x3640, 0x391d, 0x3892, 0x38e2, 0x333c, 0x3080, 0x2ac2, 0x326c, 0x2f8b, 0x38ac, 0x3097, 0x3b80, 0x3ae4, 0x39d4, 0x3676, 0x3969, 0x34c8, 0x3906, 0x2930, 0x3acb, 0x3bb3, 0x3bba, 0x3646, 0x2ba1, 0x30bf, 0x38f2, 0x3bbc, 0x3a3f, 0x34c2, 0x3832, 0x3938, 0x3a79, 0x3546, 0x3bd5, 0x3ae5, 0x329a, 0x342c, 0x2c42, 0x35c1, 0x2616, 0x3ad4, 0x38c6, 0x38b6, 0x3b0d, 0x38dd, 0x2e8d, 0x3891, 0x2f1c, 0x3b9d, 0x3a8f, -0x30e4, 0x2c4f, 0x2fb6, 0x31da, 0x3784, 0x3043, 0x2d5c, 0x3bc0, 0x3998, 0x3b84, 0x387f, 0x3b93, 0x3898, 0x337c, 0x32b4, 0x28c3, 0x334f, 0x389c, 0x3865, 0x360b, 0x3a70, 0x3201, 0x324c, 0x3583, 0x381a, 0x3a58, 0x33e9, 0x3b02, 0x3093, 0x33c0, 0x375c, 0x305d, 0x1f9a, 0x38e4, 0x3bc7, 0x35bb, 0x2d39, 0x3299, 0x3753, 0x3b37, 0x3af5, 0x36d7, 0x3324, 0x3716, 0x3b60, 0x3202, 0x3949, 0x3b79, 0x36c3, 0x3901, 0x39f5, 0x2b55, 0x3996, 0x38e1, 0x3836, 0x3b5a, 0x3790, 0x39f6, 0x3532, 0x37ac, 0x2bc5, 0x3948, 0x3b8f, 0x37b8, 0x3999, 0x3413, 0x3a8f, 0x2b74, 0x2839, 0x3870, 0x369f, 0x38b9, 0x3819, 0x3aef, 0x37f9, 0x368b, 0x3bf4, 0x30a6, 0x2e58, 0x3b6e, 0x3b59, 0x3a5d, 0x2e63, 0x2a40, 0x34b3, 0x377d, 0x3991, 0x3542, 0x3300, 0x396d, 0x3bf4, 0x371b, 0x2c09, 0x3020, 0x3a1e, 0x32c5, -0x3b59, 0x3bb5, 0x3a14, 0x384f, 0x3534, 0x3bb6, 0x3aef, 0x3b51, 0x357e, 0x3760, 0x3395, 0x3046, 0x3977, 0x380e, 0x3b85, 0x39ed, 0x3038, 0x2bdc, 0x3aec, 0x3aa6, 0x3ace, 0x38b5, 0x308b, 0x39e2, 0x3271, 0x3b31, 0x3693, 0x397e, 0x39a9, 0x396f, 0x3021, 0x3b12, 0x350e, 0x38ea, 0x38ef, 0x3aae, 0x37b3, 0x2e83, 0x32f6, 0x3818, 0x3702, 0x332d, 0x3bfc, 0x3b15, 0x3ae6, 0x337f, 0x29f9, 0x3ba8, 0x38b1, 0x381a, 0x3bd6, 0x3a40, 0x3027, 0x3b8b, 0x38b2, 0x35d1, 0x39b7, 0x3adf, 0x2b70, 0x1a44, 0x3470, 0x3b21, 0x3774, 0x3b7a, 0x38b8, 0x304d, 0x3bd6, 0x2a2a, 0x3a95, 0x34bc, 0x2835, 0x3b03, 0x35bd, 0x3bc2, 0x30fe, 0x3a5d, 0x3829, 0x34be, 0x3398, 0x32f7, 0x3b1c, 0x34a5, 0x3511, 0x3802, 0x383e, 0x3176, 0x3241, 0x359f, 0x36f9, 0x380a, 0x310c, 0x3b1f, 0x375d, 0x365a, 0x35d0, 0x3302, -0x3459, 0x35e1, 0x3514, 0x3ba6, 0x381e, 0x30d8, 0x320a, 0x3b8a, 0x39b8, 0x3873, 0x3982, 0x3ae7, 0x3a5b, 0x380d, 0x3bf6, 0x396d, 0x3126, 0x1cf5, 0x37f7, 0x3b43, 0x37a7, 0x3b91, 0x357b, 0x216d, 0x3336, 0x3885, 0x26d5, 0x38f1, 0x369e, 0x3b62, 0x30d5, 0x3a41, 0x31b1, 0x3b8d, 0x3983, 0x2cfb, 0x3857, 0x3239, 0x2ecf, 0x2e22, 0x3889, 0x31a0, 0x3432, 0x3957, 0x2aad, 0x3b93, 0x38e5, 0x3a32, 0x3bf6, 0x2a9e, 0x3a57, 0x34b8, 0x2e9b, 0x3a83, 0x3b86, 0x314e, 0x3738, 0x3954, 0x36bb, 0x3a82, 0x361e, 0x380a, 0x3bc7, 0x39ea, 0x37f9, 0x3a9f, 0x38fa, 0x3916, 0x3b87, 0x389c, 0x375f, 0x30b5, 0x381d, 0x39f9, 0x3969, 0x3b91, 0x31b3, 0x3968, 0x3baf, 0x3395, 0x38a5, 0x3ae2, 0x3b91, 0x3a31, 0x3a75, 0x3667, 0x346f, 0x31b1, 0x3921, 0x38a1, 0x3981, 0x3ab5, 0x34c5, 0x324b, 0x3b5f, 0x3b66, -0x35e0, 0x3b4e, 0x34ef, 0x1c7e, 0x3b6e, 0x3724, 0x3858, 0x381c, 0x3bc1, 0x3475, 0x3a93, 0x38a0, 0x3489, 0x3951, 0x3918, 0x304f, 0x314f, 0x3ad7, 0x382d, 0x38ef, 0x3818, 0x33a3, 0x392d, 0x3079, 0x39b8, 0x3b2f, 0x3ad7, 0x3a4a, 0x383b, 0x295b, 0x380a, 0x3895, 0x3a0a, 0x3b28, 0x36ef, 0x3617, 0x3668, 0x3b95, 0x38e3, 0x3b69, 0x3448, 0x38bc, 0x34b1, 0x34d7, 0x3146, 0x269b, 0x2b3b, 0x371a, 0x3a3e, 0x3a71, 0x3791, 0x3b89, 0x3a76, 0x3bfd, 0x354e, 0x3bc8, 0x3937, 0x302e, 0x38e3, 0x2c2c, 0x20e6, 0x3880, 0x2c5e, 0x2506, 0x38b6, 0x3b42, 0x3be1, 0x3ab4, 0x3a0d, 0x3573, 0x31a6, 0x366c, 0x37c2, 0x34b2, 0x3856, 0x3bd4, 0x3150, 0x2adb, 0x3779, 0x3694, 0x2a1e, 0x3763, 0x39cd, 0x39a5, 0x3470, 0x348e, 0x399f, 0x3326, 0x2d96, 0x363a, 0x3610, 0x38fd, 0x24f0, 0x34bd, 0x32c9, 0x3869, -0x361b, 0x3307, 0x3bfc, 0x36bd, 0x2784, 0x37f1, 0x3a2e, 0x3579, 0x35ab, 0x39c9, 0x39b4, 0x2e9a, 0x3869, 0x24bf, 0x2c45, 0x3a0b, 0x369d, 0x391f, 0x3789, 0x2d9b, 0x37ac, 0x3829, 0x3177, 0x3286, 0x312b, 0x3153, 0x2ff3, 0x375c, 0x2afb, 0x290a, 0x3aaf, 0x3b17, 0x39f6, 0x3a53, 0x3888, 0x3ab6, 0x37e8, 0x3442, 0x3523, 0x3a72, 0x2d0a, 0x3551, 0x3923, 0x3538, 0x3abc, 0x3a29, 0x358a, 0x2ec5, 0x3a32, 0x3371, 0x3438, 0x301a, 0x3877, 0x36f7, 0x39e0, 0x372f, 0x3b39, 0x399c, 0x38b5, 0x3488, 0x392b, 0x312e, 0x3bd2, 0x3b34, 0x35d7, 0x3193, 0x38a5, 0x3a75, 0x3768, 0x3660, 0x3add, 0x38c6, 0x3944, 0x353a, 0x398e, 0x3627, 0x361a, 0x32ca, 0x38dd, 0x3293, 0x37f1, 0x2b97, 0x2465, 0x3a2e, 0x39c5, 0x3bef, 0x3879, 0x3a91, 0x3873, 0x39ae, 0x3994, 0x35aa, 0x3648, 0x376e, 0x371e, 0x3a8c, -0x359b, 0x381d, 0x3506, 0x382e, 0x39b0, 0x2f4c, 0x3022, 0x3af3, 0x3828, 0x3407, 0x3244, 0x306d, 0x3c00, 0x3019, 0x39b3, 0x357e, 0x36bd, 0x3979, 0x369a, 0x2025, 0x3ab5, 0x3509, 0x3969, 0x3b5f, 0x38b3, 0x3a55, 0x3899, 0x3a8d, 0x348a, 0x3010, 0x3b00, 0x374c, 0x37e7, 0x35f2, 0x36bc, 0x31ec, 0x3b49, 0x3960, 0x27a1, 0x3984, 0x3824, 0x3a95, 0x39e4, 0x3901, 0x34a8, 0x354a, 0x3929, 0x38ef, 0x399c, 0x381a, 0x34ea, 0x247b, 0x3113, 0x37ff, 0x3923, 0x3a12, 0x398a, 0x3135, 0x374c, 0x345b, 0x3aae, 0x33ad, 0x3834, 0x3426, 0x32a3, 0x3854, 0x31cd, 0x3a78, 0x32ea, 0x288e, 0x38a9, 0x2d3a, 0x31ce, 0x2ed6, 0x393d, 0x197a, 0x3880, 0x39cd, 0x3884, 0x3af0, 0x312d, 0x3711, 0x32be, 0x3193, 0x323d, 0x3222, 0x28b9, 0x3bcc, 0x3626, 0x3836, 0x36bf, 0x3393, 0x32d3, 0x39f3, 0x3b91, 0x3719, -0x38ac, 0x1036, 0x3759, 0x3547, 0x365e, 0x3a68, 0x37eb, 0x353b, 0x3931, 0x294d, 0x35c8, 0x3aad, 0x387c, 0x3ac5, 0x3a08, 0x3a0d, 0x34b8, 0x3747, 0x3a10, 0x3908, 0x3825, 0x3509, 0x379f, 0x2ebe, 0x3a30, 0x353f, 0x3ab6, 0x35d3, 0x3ae3, 0x39a0, 0x272d, 0x2da5, 0x3a07, 0x323e, 0x3865, 0x3700, 0x2c37, 0x2fb3, 0x36e3, 0x279c, 0x364d, 0x38b9, 0x39b5, 0x35d8, 0x376b, 0x37f2, 0x3421, 0x3a83, 0x3562, 0x2cad, 0x382f, 0x3703, 0x38bf, 0x3afc, 0x3800, 0x3793, 0x3ae7, 0x39f6, 0x2d8f, 0x365d, 0x380f, 0x39cf, 0x3609, 0x2da9, 0x2cc7, 0x361c, 0x3682, 0x2762, 0x3611, 0x3954, 0x21e5, 0x29bd, 0x3b94, 0x32e9, 0x36fc, 0x3b3c, 0x3bec, 0x3bde, 0x35b2, 0x3640, 0x3824, 0x2dba, 0x35da, 0x3853, 0x3b62, 0x3b56, 0x373f, 0x324d, 0x395f, 0x2a6b, 0x3b59, 0x392f, 0x3953, 0x3bbe, 0x3a44, 0x38fc, -0x38aa, 0x3987, 0x24c1, 0x3a51, 0x3b03, 0x3770, 0x381d, 0x3847, 0x394a, 0x35fe, 0x3b59, 0x34d4, 0x380f, 0x3985, 0x2719, 0x3811, 0x3a63, 0x387d, 0x370b, 0x36e2, 0x38f4, 0x3af2, 0x364c, 0x30e7, 0x3816, 0x2afe, 0x339b, 0x380d, 0x304e, 0x3b55, 0x3a4e, 0x2ebb, 0x377a, 0x396d, 0x31bf, 0x3914, 0x372b, 0x38a5, 0x39a9, 0x24f1, 0x39ad, 0x348a, 0x3b26, 0x3ab0, 0x35f3, 0x38ac, 0x34a5, 0x39b2, 0x3a88, 0x364d, 0x36a3, 0x33eb, 0x39f7, 0x3ad7, 0x37c1, 0x3805, 0x357a, 0x3949, 0x28ee, 0x3b2e, 0x3ba7, 0x381c, 0x35bf, 0x323a, 0x39dd, 0x3b40, 0x3908, 0x32c0, 0x3a12, 0x3419, 0x388e, 0x3890, 0x3b59, 0x2ea4, 0x363b, 0x3790, 0x3a00, 0x3b36, 0x2a03, 0x3875, 0x3932, 0x3513, 0x3755, 0x2d73, 0x19b7, 0x352b, 0x309e, 0x2842, 0x38cc, 0x38a0, 0x3423, 0x380e, 0x3b76, 0x39ad, 0x3a11, 0x3a5b, -0x3bd8, 0x3b5c, 0x30ee, 0x3b97, 0x32ee, 0x3a5d, 0x3bfb, 0x3706, 0x2e45, 0x2f4f, 0x3281, 0x39ec, 0x3705, 0x369c, 0x3022, 0x3b27, 0x3a91, 0x3a6d, 0x3438, 0x3461, 0x3846, 0x394f, 0x3772, 0x36f3, 0x34d2, 0x39ee, 0x3578, 0x3959, 0x3282, 0x1b2c, 0x39be, 0x37f0, 0x3909, 0x34aa, 0x3ad6, 0x3ad8, 0x392b, 0x39b5, 0x3391, 0x3aa3, 0x3854, 0x3a72, 0x31bc, 0x23fa, 0x331a, 0x38aa, 0x3a73, 0x2a74, 0x3956, 0x30fd, 0x36bd, 0x312d, 0x38b3, 0x3b26, 0x1e7f, 0x310a, 0x235b, 0x367b, 0x383e, 0x3b57, 0x39b0, 0x3785, 0x2ddc, 0x38de, 0x2c79, 0x386b, 0x3ace, 0x32e5, 0x2c3a, 0x3bc5, 0x3a95, 0x317b, 0x3a54, 0x3ba1, 0x38ff, 0x3b54, 0x39dd, 0x344c, 0x38d0, 0x3984, 0x32d7, 0x35c3, 0x319e, 0x3881, 0x3b80, 0x3923, 0x396f, 0x343d, 0x378e, 0x39e0, 0x3434, 0x38ab, 0x3a55, 0x3905, 0x2a86, 0x3aa6, -0x2c3b, 0x33da, 0x2eb0, 0x3aa4, 0x2871, 0x31a0, 0x35ba, 0x35ed, 0x3a48, 0x3968, 0x35f8, 0x2810, 0x3ab8, 0x395a, 0x369e, 0x3664, 0x3bef, 0x30b9, 0x33f3, 0x366d, 0x3961, 0x377d, 0x3367, 0x3aa2, 0x39de, 0x3bdc, 0x37f3, 0x3618, 0x394c, 0x39c6, 0x3867, 0x34c3, 0x358b, 0x3256, 0x3aac, 0x3623, 0x39ee, 0x3723, 0x3b2a, 0x3a63, 0x3855, 0x38a1, 0x2cb1, 0x3b80, 0x38d6, 0x3045, 0x3bc3, 0x3bdf, 0x378b, 0x3af4, 0x2411, 0x3863, 0x3869, 0x353b, 0x24cc, 0x396a, 0x3a09, 0x3aab, 0x32cd, 0x3970, 0x3178, 0x3a61, 0x2faa, 0x3a82, 0x3487, 0x3af5, 0x36ee, 0x39f0, 0x2a25, 0x3006, 0x3bc0, 0x3151, 0x31b0, 0x36e6, 0x351c, 0x2a55, 0x3846, 0x38b7, 0x37e3, 0x3a7c, 0x293b, 0x327d, 0x3680, 0x390a, 0x3ad5, 0x2e0c, 0x3bb9, 0x1ddf, 0x35fa, 0x3995, 0x380c, 0x3923, 0x3a4f, 0x3ad5, 0x3a80, 0x3113, -0x324a, 0x39c6, 0x353b, 0x2d16, 0x346a, 0x321f, 0x3703, 0x2f6c, 0x2c37, 0x3ada, 0x3be4, 0x3b3e, 0x3aac, 0x3a7f, 0x36d4, 0x3606, 0x3343, 0x393a, 0x382b, 0x3424, 0x38d4, 0x39ed, 0x3013, 0x31ff, 0x3794, 0x3b1c, 0x3919, 0x3bb5, 0x3769, 0x39a1, 0x3be5, 0x3b1a, 0x35fd, 0x3ba8, 0x2af5, 0x38ea, 0x3b19, 0x3814, 0x39ea, 0x3b1e, 0x37c0, 0x34f3, 0x395a, 0x38b6, 0x392a, 0x38a5, 0x3121, 0x2d9b, 0x3799, 0x304c, 0x349d, 0x3153, 0x398a, 0x3a70, 0x3a3d, 0x34bd, 0x39d7, 0x37b6, 0x3817, 0x34a8, 0x3ae2, 0x350d, 0x3ad0, 0x3a0e, 0x3496, 0x3b73, 0x3879, 0x3841, 0x3316, 0x3671, 0x36a4, 0x30bf, 0x3a5e, 0x3594, 0x3bde, 0x3b55, 0x3982, 0x395b, 0x364c, 0x3a6c, 0x32b0, 0x39cd, 0x3900, 0x38dc, 0x390a, 0x2d48, 0x376e, 0x3473, 0x2c65, 0x3934, 0x30cd, 0x3518, 0x3ba4, 0x3423, 0x2f57, 0x3682, -0x3979, 0x37b1, 0x3926, 0x343b, 0x360a, 0x234e, 0x3895, 0x3a09, 0x3810, 0x39d4, 0x3529, 0x3a28, 0x331a, 0x385f, 0x2576, 0x3973, 0x3a0e, 0x33b0, 0x21da, 0x3925, 0x32c8, 0x2fbe, 0x32e7, 0x3b38, 0x3a9a, 0x2ab2, 0x320d, 0x3be9, 0x3720, 0x351d, 0x311b, 0x38f2, 0x3952, 0x3985, 0x3b4b, 0x3634, 0x38af, 0x398b, 0x278f, 0x3460, 0x2f0d, 0x28e1, 0x3412, 0x3978, 0x372c, 0x3a02, 0x2e72, 0x10dc, 0x36c6, 0x3883, 0x3b5a, 0x38e8, 0x3b97, 0x394e, 0x2d07, 0x39b1, 0x3754, 0x2c54, 0x3577, 0x3ab3, 0x3a2a, 0x376a, 0x39b4, 0x396a, 0x3222, 0x396c, 0x39dc, 0x34d5, 0x3903, 0x3841, 0x3912, 0x3bdb, 0x3ba8, 0x364c, 0x39b0, 0x38a9, 0x3acd, 0x3015, 0x368d, 0x3b46, 0x351a, 0x38e2, 0x36f2, 0x37c7, 0x3bdb, 0x3b60, 0x3ba0, 0x3bc3, 0x363f, 0x28c1, 0x2add, 0x3aaa, 0x397b, 0x390f, 0x2f8f, 0x3836, -0x380f, 0x35e9, 0x35ee, 0x3386, 0x388f, 0x3bca, 0x3782, 0x37f2, 0x308e, 0x3a28, 0x3738, 0x31f6, 0x36a4, 0x39eb, 0x2b1f, 0x3ba6, 0x3322, 0x3ad6, 0x386f, 0x3b19, 0x3aa5, 0x2dd8, 0x3a6a, 0x380b, 0x39e3, 0x3225, 0x3bb2, 0x39e9, 0x30e5, 0x39df, 0x3ae8, 0x3075, 0x3025, 0x2f80, 0x30c1, 0x3854, 0x3914, 0x24e1, 0x3b4c, 0x32f6, 0x2e0e, 0x38a8, 0x3572, 0x2e9b, 0x38c3, 0x31f1, 0x3357, 0x3770, 0x3575, 0x317f, 0x345d, 0x3162, 0x38cd, 0x3111, 0x3543, 0x36c2, 0x36d6, 0x3754, 0x3b6e, 0x3900, 0x3996, 0x38b5, 0x352e, 0x3a32, 0x3881, 0x2487, 0x3795, 0x3814, 0x38f9, 0x388b, 0x366d, 0x3b8a, 0x3751, 0x3a1b, 0x380d, 0x39da, 0x3a56, 0x306c, 0x3295, 0x3992, 0x345c, 0x3a88, 0x370a, 0x357e, 0x31bc, 0x3af0, 0x2f33, 0x2c05, 0x3255, 0x595, 0x3acd, 0x3615, 0x26d4, 0x31b8, 0x3860, 0x3839, -0x30a4, 0x2aed, 0x381b, 0x3438, 0x3519, 0x3a7d, 0x39e4, 0x3704, 0x376f, 0x31d2, 0x3643, 0x29d2, 0x3101, 0x34cc, 0x39c1, 0x333f, 0x3a92, 0x2b34, 0x2d97, 0x334d, 0x3b85, 0x3b74, 0x37f2, 0x38e0, 0x3092, 0x34d3, 0x38af, 0x3489, 0x365c, 0x3bab, 0x3abc, 0x3b90, 0x3251, 0x3397, 0x399d, 0x32a2, 0x3545, 0x29ac, 0x3405, 0x37dd, 0x3899, 0x312c, 0x3500, 0x3983, 0x3bd4, 0x3bfc, 0x33a7, 0x2df1, 0x2c94, 0x374e, 0x351c, 0x3a18, 0x3984, 0x3b46, 0x2d2c, 0x2997, 0x365e, 0x3461, 0x3654, 0x2530, 0x3945, 0x1e1e, 0x3374, 0x2fb7, 0x31de, 0x3bff, 0x387b, 0x3701, 0x284f, 0x3b59, 0x3a7d, 0x3866, 0x3958, 0x3a6c, 0x358a, 0x3132, 0x35be, 0x3819, 0x386a, 0x369d, 0x3b3b, 0x3549, 0x3b06, 0x3173, 0x31f2, 0x39fb, 0x35a6, 0x3525, 0x3737, 0x3abb, 0x3b5e, 0x3122, 0x39e5, 0x3538, 0x3817, 0x3727, -0x3979, 0x39fe, 0x3487, 0x3a8e, 0x3407, 0x3140, 0x3afa, 0x39b7, 0x374e, 0x3b66, 0x3b0f, 0x39c9, 0x3266, 0x34dc, 0x396a, 0x38db, 0x35bd, 0x31c8, 0x37ed, 0x3667, 0x357e, 0x3518, 0x3139, 0x3bd5, 0x3157, 0x3960, 0x39d2, 0x3a38, 0x366c, 0x3876, 0x39b9, 0x2cf0, 0x3825, 0x3a80, 0x3bbf, 0x3a2d, 0x2fd3, 0x35e2, 0x35c6, 0x3a07, 0x368f, 0x391e, 0x3be7, 0x39be, 0x3533, 0x39c7, 0x3137, 0x2d6e, 0x3905, 0x3b95, 0x38f8, 0x39f5, 0x3bc1, 0x38a7, 0x38e5, 0x2c58, 0x343c, 0x3656, 0x2c1c, 0x3b1d, 0x39c9, 0x3801, 0x39c1, 0x3bed, 0x26be, 0x362a, 0x3655, 0x31b4, 0x2ad7, 0x3810, 0x3afd, 0x1edc, 0x35e8, 0x2d9f, 0x32fb, 0x316e, 0x38ed, 0x3839, 0x390b, 0x3b97, 0x38e2, 0x3746, 0x3b3b, 0x3b03, 0x395e, 0x353e, 0x375a, 0x3824, 0x25bf, 0x357f, 0x31a9, 0x3aa5, 0x35d6, 0x2a95, 0x1b91, 0x318c, -0x3650, 0x38de, 0x32bf, 0x287b, 0x305d, 0x393e, 0x3bb2, 0x352d, 0x2593, 0x386f, 0x3814, 0x38bd, 0x3532, 0x3084, 0x2880, 0x3bdb, 0x37da, 0x3073, 0x3850, 0x3026, 0x337f, 0x3b64, 0x37e5, 0x33ad, 0x3624, 0x319f, 0x36d7, 0x3939, 0x3553, 0x359d, 0x392d, 0x385f, 0x394f, 0x3aca, 0x34b8, 0x3138, 0x367a, 0x38a4, 0x3a8e, 0x369e, 0x34ef, 0x3b01, 0x3ad8, 0x3875, 0x3bd5, 0x39c4, 0x3b56, 0x394d, 0x38ba, 0x3a48, 0x3ade, 0x3bd6, 0x395f, 0x3737, 0x2dee, 0x3891, 0x35ed, 0x39b2, 0x2fe6, 0x3130, 0x346e, 0x3886, 0x2fb6, 0x3183, 0x3ae1, 0x3301, 0x38f9, 0x3470, 0x3701, 0x3845, 0x327d, 0x33b3, 0x3b06, 0x358e, 0x35eb, 0x38a2, 0x34d1, 0x317c, 0x3b0f, 0x395e, 0x36dc, 0x3511, 0x3a8b, 0x3997, 0x380b, 0x38cb, 0x3b3c, 0x3b54, 0x3330, 0x33d7, 0x357d, 0x3439, 0x2bd4, 0x3678, 0x3891, 0x39cc, -0x3bdb, 0x3af1, 0x3828, 0x3a2b, 0x39b6, 0x36f5, 0x374a, 0x3752, 0x3b11, 0x3306, 0x3bac, 0x3799, 0x39fe, 0x38f5, 0x3219, 0x36df, 0x3ade, 0x3ab0, 0x2fa1, 0x3472, 0x3a33, 0x34d9, 0x390e, 0x37c0, 0x2d6b, 0x38e1, 0x3bdc, 0x3887, 0x3644, 0x319b, 0x32a7, 0x2876, 0x337a, 0x3b38, 0x3904, 0x354b, 0x24b5, 0x1699, 0x3b55, 0x39b7, 0x278d, 0x3784, 0x388d, 0x389f, 0x34ac, 0x30bc, 0x3180, 0x37e5, 0x3462, 0x3641, 0x363a, 0x3805, 0x2fa2, 0x260f, 0x3a51, 0x38c4, 0x30e4, 0x3836, 0x3478, 0x3a31, 0x36ae, 0x3294, 0x3b82, 0x3321, 0x3877, 0x3209, 0x38ad, 0x31af, 0x35b4, 0x28af, 0x3699, 0x3490, 0x3974, 0x3272, 0x391c, 0x3864, 0x31fe, 0x3780, 0x39d9, 0x3607, 0x35a1, 0x339e, 0x3047, 0x33c0, 0x3506, 0x2f45, 0x3b6e, 0x3875, 0x383b, 0x3b4b, 0x3859, 0x35c7, 0x2afe, 0x34f1, 0x363f, 0x2ccc, -0x2888, 0x3101, 0x397a, 0x3715, 0x35b1, 0x369b, 0x3a0c, 0x3839, 0x3514, 0x3189, 0x3be6, 0x3214, 0x3b29, 0x312e, 0x3879, 0x33a8, 0x3a6f, 0x3998, 0x3959, 0x3b41, 0x348b, 0x3acb, 0x391f, 0x39b5, 0x353b, 0x3513, 0x395b, 0x3a72, 0x329c, 0x3a2e, 0x2c1b, 0x376e, 0x3857, 0x35ce, 0x34d3, 0x3952, 0x3b6f, 0x3978, 0x3942, 0x3741, 0x35a2, 0x3201, 0x3806, 0x397a, 0x393f, 0x2f4e, 0x3a07, 0x3b5b, 0x33aa, 0x3686, 0x394b, 0x3b64, 0x3a53, 0x385a, 0x390a, 0x3965, 0x34b6, 0x2f08, 0x39b3, 0x3808, 0x3631, 0x35af, 0x3628, 0x31a2, 0x3b7f, 0x3a04, 0x2951, 0x3a91, 0x39a9, 0x3877, 0x3acc, 0x3aff, 0x3bae, 0x2aa4, 0x3bbe, 0x3b0c, 0x3462, 0x3842, 0x3902, 0x3a55, 0x30e8, 0x3520, 0x30bd, 0x3147, 0x3ba1, 0x3945, 0x37b9, 0x30b4, 0x3573, 0x3b4f, 0x3a1b, 0x3a4a, 0x2d52, 0x345c, 0x366c, 0x3451, -0x34b3, 0x2d91, 0x3564, 0x3803, 0x3b06, 0x3bf5, 0x36b0, 0x356e, 0x341d, 0x39fe, 0x3b9e, 0x2d69, 0x3329, 0x3b30, 0x300d, 0x34e8, 0x3823, 0x3ab8, 0x38ce, 0x3b3c, 0x2983, 0x3680, 0x2841, 0x39ed, 0x393e, 0x30cc, 0x3828, 0x3af3, 0x2d8e, 0x381c, 0x382b, 0x3b29, 0x3b58, 0x380a, 0x2c56, 0x36b0, 0x3b53, 0x2f0b, 0x357b, 0x38de, 0x374e, 0x3aef, 0x3a95, 0x3a7a, 0x3a23, 0x2f2b, 0x3903, 0x3b97, 0x39e3, 0x2e50, 0x35fd, 0x3bf5, 0x3ae9, 0x3bb6, 0x3ab7, 0x391f, 0x326f, 0x3264, 0x3453, 0x37b3, 0x2d1b, 0x3a55, 0x3921, 0x36d7, 0x2b01, 0x388e, 0x3969, 0x2f04, 0x31b9, 0x3bd2, 0x3a16, 0x362a, 0x31d7, 0x3ae1, 0x3735, 0x2e5f, 0x3b56, 0x38a8, 0x3b30, 0x3a77, 0x35e2, 0x3aa6, 0x3222, 0x38f3, 0x399b, 0x330b, 0x350f, 0x2b19, 0x3b45, 0x38b4, 0x3ba8, 0x3a8f, 0x3abe, 0x2760, 0x341e, 0x323d, -0x2eab, 0x3514, 0x3b83, 0x39bd, 0x331e, 0x2bfc, 0x389d, 0x381c, 0x36b5, 0x35e9, 0x392e, 0x2b7a, 0x2fcf, 0x3523, 0x3b37, 0x3129, 0x3a56, 0x3861, 0x3b75, 0x38cd, 0x3604, 0x3286, 0x3ac4, 0x3926, 0x3495, 0x3bfc, 0x351b, 0x3696, 0x34e1, 0x2f4e, 0x26e3, 0x39ce, 0x34db, 0x2e38, 0x393c, 0x371c, 0x3843, 0x3a1b, 0x272b, 0x3a27, 0x376c, 0x393f, 0x39cc, 0x39be, 0x39f7, 0x2c76, 0x3bd3, 0x3a3b, 0x3970, 0x3ab5, 0x3915, 0x35c3, 0x36d0, 0x3957, 0x3aa5, 0x25d6, 0x3b79, 0x2217, 0x39c7, 0x3b15, 0x3aa1, 0x3901, 0x378e, 0x3ada, 0x3a6f, 0x384d, 0x372d, 0x39d9, 0x3819, 0x37e8, 0x3527, 0x30ee, 0x3867, 0x3229, 0x3126, 0x3290, 0x3a62, 0x3b2f, 0x32f3, 0x39e0, 0x36e6, 0x3981, 0x305a, 0x2fd0, 0x3724, 0x3822, 0x3359, 0x3869, 0x3bcc, 0x37f1, 0x357c, 0x39df, 0x2e31, 0x3b10, 0x3601, 0x37b1, -0x3aa3, 0x385a, 0x392b, 0x3909, 0x3774, 0x3aab, 0x38a2, 0x3801, 0x2882, 0x38a7, 0x3621, 0x373e, 0x34b4, 0x2e13, 0x3999, 0x381c, 0x369f, 0x2633, 0x3acd, 0x386d, 0x3b94, 0x32a0, 0x1bdc, 0x3873, 0x3249, 0x3692, 0x3be9, 0x325a, 0x32c2, 0x3ad9, 0x1de3, 0x308f, 0x3971, 0x34e6, 0x212b, 0x3bd3, 0x3790, 0x3814, 0x3346, 0x3358, 0x3115, 0x3914, 0x35c7, 0x3287, 0x3b0b, 0x388f, 0x35ac, 0x3002, 0x3a5e, 0x2ede, 0x38cd, 0x374f, 0x3b4c, 0x3578, 0x394c, 0x3951, 0x353c, 0x2e59, 0x3877, 0x31f5, 0x3912, 0x394b, 0x37e7, 0x3667, 0x38c9, 0x3641, 0x343c, 0x37ee, 0x3aa8, 0x3440, 0x34d3, 0x394b, 0x301f, 0x3a76, 0x387e, 0x3a7d, 0x347e, 0x21c8, 0x397c, 0x301a, 0x3a2d, 0x3710, 0x399a, 0x359b, 0x3756, 0x3679, 0x37eb, 0x38e6, 0x2a71, 0x35f9, 0x37eb, 0x3afc, 0x370d, 0x3bce, 0x3884, 0x3211, -0x3a18, 0x3a44, 0x2fcd, 0x3b65, 0x3788, 0x2a46, 0x322a, 0x3538, 0x3bc2, 0x33f4, 0x3932, 0x3835, 0x2fa9, 0x3b95, 0x3756, 0x399d, 0x36b6, 0x3186, 0x389d, 0x346c, 0x3abb, 0x3be4, 0x3919, 0x3993, 0x2ffc, 0x39db, 0x3bce, 0x3b0e, 0x336e, 0x36af, 0x3192, 0x38b7, 0x37ba, 0x3ae4, 0x3116, 0x2c45, 0x3494, 0x3aea, 0x302c, 0x3816, 0x3686, 0x34f2, 0x2fa4, 0x3aa1, 0x222f, 0x370f, 0x341a, 0x3aae, 0x380d, 0x3863, 0x36ca, 0x3a60, 0x3695, 0x387d, 0x391c, 0x2c8b, 0x2d94, 0x369e, 0x399e, 0x36fd, 0x38fc, 0x3b6c, 0x36a8, 0x3a73, 0x33fb, 0x36d0, 0x3720, 0x36d7, 0x37be, 0x2a8f, 0x3180, 0x3ad3, 0x2a1f, 0x3737, 0x3920, 0x2b67, 0x3abf, 0x395e, 0x322b, 0x3ace, 0x39b1, 0x3bdf, 0x2e0b, 0x3018, 0x3278, 0x393a, 0x3a8c, 0x39d0, 0x39cd, 0x308f, 0x3776, 0x38b7, 0x3527, 0x388b, 0x3901, 0x3b8b, -0x237d, 0x38f9, 0x3431, 0x3b1f, 0x3a12, 0x33ac, 0x3a3d, 0x3943, 0x348d, 0x363f, 0x3a2a, 0x2420, 0x3081, 0x3815, 0x382e, 0x38e5, 0x3238, 0x284e, 0x2ec3, 0x3af5, 0x3191, 0x32d6, 0x31c8, 0x39bc, 0x3a2a, 0x340d, 0x3bd9, 0x33dc, 0x3066, 0x39df, 0x30e2, 0x350a, 0x37fc, 0x341d, 0x3828, 0x3a1b, 0x3010, 0x2992, 0x32fd, 0x3bb3, 0x368c, 0x2af2, 0x3af4, 0x3a8f, 0x3793, 0x3620, 0x3b85, 0x3557, 0x316b, 0x288d, 0x3408, 0x3ae8, 0x3af0, 0x3420, 0x3bbd, 0x3a80, 0x309a, 0x3a5d, 0x3a57, 0x3987, 0x3a47, 0x377f, 0x3a01, 0x3a72, 0x3b37, 0x3594, 0x3bfd, 0x36ae, 0x3b99, 0x3bd4, 0x3920, 0x3b8d, 0x37ae, 0x3a46, 0x3184, 0x38ba, 0x1ff8, 0x3b9c, 0x3b68, 0x3621, 0x37f4, 0x2fb7, 0x3010, 0x3b58, 0x33d3, 0x3bbb, 0x291f, 0x3945, 0x3be1, 0x30c6, 0x3bc3, 0x35c6, 0x3bdf, 0x2a15, 0x2e3f, 0x2b1a, -0x3847, 0x3671, 0x34cf, 0x35e0, 0x3b80, 0x34e1, 0x3b3b, 0x305a, 0x327f, 0x3a9e, 0x3803, 0x2a3a, 0x3969, 0x3765, 0x3891, 0x3acc, 0x397d, 0x3549, 0x356e, 0x34c8, 0x2632, 0x30ca, 0x36ba, 0x3a56, 0x37ca, 0x344d, 0x39bc, 0x32f3, 0x3be2, 0x3b24, 0x353f, 0x3ab8, 0x373e, 0x3906, 0x318e, 0x3993, 0x27e3, 0x255c, 0x3afa, 0x33a3, 0x3819, 0x333b, 0x3bb6, 0x3179, 0x3414, 0x35d6, 0x30b1, 0x386b, 0x3b8e, 0x3942, 0x386c, 0x3b39, 0x32d2, 0x37f6, 0x2503, 0x3b14, 0x385c, 0x3a12, 0x3895, 0x39d7, 0x377f, 0x2c2d, 0x3066, 0x3855, 0x35a4, 0x3aeb, 0x3a9c, 0x35a4, 0x2eb7, 0x3b6b, 0x3bfd, 0x38fa, 0x1fd4, 0x3583, 0x3bc9, 0x35d2, 0x3913, 0x34b8, 0x271f, 0x3453, 0x3833, 0x3bb2, 0x3a7f, 0x1c15, 0x1b01, 0x39f1, 0x3bdd, 0x3988, 0x3ac8, 0x397f, 0x3bb4, 0x36d5, 0x37bf, 0x34b4, 0x30f5, 0x39c7, -0x391e, 0x3b4f, 0x2eb2, 0x3b31, 0x3073, 0x39d0, 0x2cd1, 0x2f3b, 0x36cc, 0x3739, 0x222d, 0x3a71, 0x3ba4, 0x3b60, 0x2bb5, 0x3885, 0x3b90, 0x2cea, 0x3ab6, 0x37b0, 0x3813, 0x31a7, 0x3545, 0x3392, 0x39f4, 0x34ae, 0x36c2, 0x3177, 0x3902, 0x39b5, 0x2f98, 0x36c1, 0x36d5, 0x32e8, 0x39ed, 0x30c3, 0x39a8, 0x30f1, 0x39a1, 0x36ec, 0x3bea, 0x34b1, 0x3260, 0x343e, 0x3929, 0x31d9, 0x33d7, 0x3bee, 0x379c, 0x2395, 0x3983, 0x38ce, 0x3297, 0x35fc, 0x3776, 0x3b0a, 0x3ae2, 0x3991, 0x2c03, 0x3712, 0x3b68, 0x2e82, 0x2e43, 0x3705, 0x39d1, 0x3b64, 0x2ff0, 0x3a4a, 0x2f9e, 0x2f32, 0x3ba6, 0x3559, 0x3aa5, 0x39cb, 0x3671, 0x39d2, 0x3aaf, 0x3385, 0x3a0a, 0x3a03, 0x396d, 0x391d, 0x2685, 0x3802, 0x39d5, 0x2af3, 0x39e4, 0x3ace, 0x313a, 0x2d88, 0x2999, 0x39a4, 0x3302, 0x390b, 0x3847, 0x3b87, -0x3813, 0x30fa, 0x3986, 0x3bc2, 0x3bc2, 0x3bf1, 0x3251, 0x391a, 0x2445, 0x3884, 0x3649, 0x320f, 0x305c, 0x3418, 0x337f, 0x38fa, 0x39ac, 0x3a4d, 0x346d, 0x33ca, 0x32da, 0x335c, 0x37ff, 0x389e, 0x39b3, 0x364e, 0x328a, 0x3690, 0x36cb, 0x3126, 0x374a, 0x3ba4, 0x37fe, 0x3233, 0x2afb, 0x3335, 0x3095, 0x38c9, 0x3a8b, 0x39c4, 0x3505, 0x32f2, 0x3a53, 0x388e, 0x34b9, 0x39d7, 0x34e7, 0x3a78, 0x3b19, 0x34e0, 0x35e9, 0x375f, 0x3a89, 0x38c6, 0x3764, 0x383c, 0x266a, 0x3672, 0x31fc, 0x3b60, 0x3a99, 0x3917, 0x3b92, 0x3759, 0x3acd, 0x39ad, 0x31fe, 0x3bcc, 0x3bec, 0x31a6, 0x33fa, 0x36f4, 0x2295, 0x3b2b, 0x3625, 0x3882, 0x3a88, 0x369a, 0x3b81, 0x399f, 0x34a9, 0x381c, 0x2db8, 0x365d, 0x3741, 0x382c, 0x3b87, 0x3b1c, 0x300b, 0x2ef6, 0x2e99, 0x3975, 0x24d7, 0x387e, 0x344a, 0x3503, -0x3b1e, 0x3900, 0x2bf3, 0x3170, 0x39bd, 0x3a2e, 0x37ad, 0x38b6, 0x38bf, 0x31c3, 0x3ae8, 0x368d, 0x36ac, 0x35e2, 0x3497, 0x2dec, 0x39c9, 0x389b, 0x3156, 0x3a86, 0x3892, 0x3976, 0x394b, 0x3b82, 0x3907, 0x392e, 0x2538, 0x3871, 0x348e, 0x3a0d, 0x347f, 0x316b, 0x378b, 0x3aa4, 0x38f5, 0x3595, 0x2d85, 0x2d42, 0x3aca, 0x3688, 0x3085, 0x3694, 0x399c, 0x3b6c, 0x3bb8, 0x3bac, 0x3a69, 0x35bf, 0x316c, 0x335f, 0x2e66, 0x2f7e, 0x360e, 0x3b28, 0x3254, 0x347f, 0x3687, 0x3018, 0x37b7, 0x3ba9, 0x3814, 0x3bd2, 0x22ed, 0x3735, 0x39a7, 0x3a17, 0x3a9c, 0x3264, 0x35f9, 0x38e9, 0x3610, 0x3ad7, 0x39ab, 0x304c, 0x3734, 0x3a58, 0x30be, 0x394f, 0x2f1c, 0x33be, 0x3818, 0x38b7, 0x3845, 0x3a9d, 0x3721, 0x324f, 0x34e0, 0x3a0e, 0x3b77, 0x3b14, 0x3884, 0x3a5a, 0x3aed, 0x3349, 0x39d0, 0x3ba6, -0x3345, 0x3494, 0x396e, 0x33e0, 0x3a01, 0x26be, 0x3a27, 0x3a66, 0x3a48, 0x3bc4, 0x3a0e, 0x39ac, 0x3758, 0x32d8, 0x3570, 0x2add, 0x2f32, 0x3856, 0x3814, 0x39a6, 0x3418, 0x3919, 0x2faf, 0x3a0f, 0x3816, 0x3366, 0x388c, 0x3471, 0x2993, 0x395d, 0x32cc, 0x3b00, 0x3a82, 0x3b5a, 0x2edd, 0x30f7, 0x3bba, 0x2a65, 0x368e, 0x311e, 0x35ff, 0x3734, 0x2931, 0x34db, 0x3734, 0x3b8a, 0x2441, 0x33bc, 0x3aed, 0x3793, 0x31ee, 0x37fe, 0x31f4, 0x36f4, 0x390e, 0x3b97, 0x3963, 0x3510, 0x30f9, 0x3a6e, 0x35d3, 0x34ba, 0x3a05, 0x39de, 0x3646, 0x3b0f, 0x3b2e, 0x3698, 0x3bbd, 0x3306, 0x3990, 0x3984, 0x2e28, 0x3880, 0x3b82, 0x350c, 0x3a3e, 0x3b00, 0x3735, 0x3944, 0x39a1, 0x34ea, 0x3812, 0x3a9c, 0x2270, 0x3b9b, 0x383d, 0x34b9, 0x33ff, 0x314b, 0x35e9, 0x3a76, 0x3b80, 0x3922, 0x3767, 0x3119, -0x39f0, 0x391b, 0x37d6, 0x37d9, 0x3b86, 0x3923, 0x2434, 0x3be9, 0x3918, 0x36cb, 0x3b4a, 0x296e, 0x3bcf, 0x38d5, 0x3342, 0x3482, 0x3995, 0x3958, 0x33a0, 0x38a7, 0x3be6, 0x3b68, 0x3168, 0x398d, 0x3ab4, 0x325a, 0x3bd2, 0x3915, 0x1a9f, 0x356c, 0x303d, 0x3b50, 0x32c5, 0x3a1c, 0x3a0e, 0x392c, 0x3b24, 0x3b8b, 0x322b, 0x2661, 0x3bba, 0x35e3, 0x3be0, 0x38f5, 0x39ab, 0x316b, 0x3b05, 0x3a05, 0x3969, 0x370c, 0x3851, 0x3a7c, 0x3801, 0x3b8b, 0x38db, 0x3aef, 0x354a, 0x2845, 0x3ac7, 0x3547, 0x35c2, 0x3564, 0x30d5, 0x3bf1, 0x301b, 0x3434, 0x3583, 0x3a9c, 0x1c52, 0x2e1e, 0x3522, 0x3993, 0x3bfe, 0x3524, 0x370c, 0x33ed, 0x3981, 0x2bfe, 0x2ca4, 0x3b56, 0x3b03, 0x3450, 0x3768, 0x3baf, 0x3760, 0x3a8f, 0x2d31, 0x2c4e, 0x3167, 0x35e6, 0x396d, 0x3b31, 0x309b, 0x347e, 0x39ea, 0x3bb8, -0x3164, 0x2bac, 0x368e, 0x3bd4, 0x3427, 0x38b4, 0x3a4d, 0x39ba, 0x3a0d, 0x301a, 0x2fec, 0x2ce1, 0x3985, 0x2acc, 0x386d, 0x3808, 0x346b, 0x383b, 0x3b1b, 0x3406, 0x3bc5, 0x3b86, 0x3860, 0x35ae, 0x2e1c, 0x35d4, 0x350b, 0x35f5, 0x2a73, 0x3a6b, 0x364b, 0x3526, 0x278a, 0x375e, 0x299f, 0x39b0, 0x394e, 0x345d, 0x3760, 0x31ba, 0x3400, 0x3566, 0x3b36, 0x3a48, 0x34e3, 0x3b24, 0x347c, 0x32a3, 0x2da7, 0x364a, 0x33de, 0x33c5, 0x324f, 0x38f7, 0x3bfb, 0x3a94, 0x3312, 0x3924, 0x3831, 0x2ee6, 0x3b4a, 0x338b, 0x2bb3, 0x33ee, 0x3bf2, 0x3aa3, 0x376d, 0x1512, 0x37b5, 0x2e44, 0x39ad, 0x3b2f, 0x39a7, 0x3aa1, 0x2e75, 0x3955, 0x3663, 0x39a6, 0x296f, 0x34c6, 0x2ef3, 0x2fe3, 0x3647, 0x3bc2, 0x3b91, 0x376a, 0x39e5, 0x3466, 0x38b9, 0x3a80, 0x3861, 0x36ca, 0x3a2c, 0x3145, 0x3102, 0x33bc, -0x2ba4, 0x2eb9, 0x39ab, 0x33cf, 0x2c9f, 0x372c, 0x3973, 0x2ff9, 0x36a5, 0x3641, 0x3b93, 0x3bc9, 0x3ba9, 0x36cd, 0x3a8d, 0x3bd2, 0x399e, 0x34ed, 0x3b4c, 0x2c2b, 0x38f7, 0x3824, 0x2edd, 0x32fc, 0x30cc, 0x2b90, 0x2628, 0x3a65, 0x39de, 0x3800, 0x3a8c, 0x3a88, 0x1e84, 0x3890, 0x33b4, 0x37e8, 0x3aab, 0x342c, 0x3697, 0x379a, 0x2472, 0x38bb, 0x38d0, 0x3a8e, 0x393a, 0x34e7, 0x3baf, 0x37ce, 0x28c7, 0x32a5, 0x3a68, 0x3925, 0x3a49, 0x3944, 0x3976, 0x3866, 0x363a, 0x35e2, 0x296d, 0x29f3, 0x39a8, 0x3831, 0x3682, 0x3898, 0x2bca, 0x13aa, 0x37b8, 0x35fe, 0x3a5d, 0x3362, 0x34bd, 0x38c1, 0x3b66, 0x3801, 0x391b, 0x307b, 0x3936, 0x3ae2, 0x3899, 0x390a, 0x384b, 0x3af4, 0x3ae2, 0x35d2, 0x271a, 0x37ad, 0x3102, 0x38e5, 0x30b8, 0x2419, 0x30ee, 0x3437, 0x39b9, 0x3a44, 0x374e, 0x3551, -0x39a4, 0x35f6, 0x385e, 0x3864, 0x3977, 0x3159, 0x3625, 0x379a, 0x3b94, 0x3a2a, 0x2ea6, 0x38a1, 0x3ad9, 0x31cd, 0x3be9, 0x34ac, 0x38be, 0x3925, 0x36ae, 0x3bd3, 0x2e3b, 0x39d0, 0x3a89, 0x336b, 0x2d09, 0x3533, 0x382c, 0x2f0c, 0x385e, 0x3ba1, 0x3436, 0x39e4, 0x3a6b, 0x39b1, 0x3622, 0x334e, 0x38cd, 0x3740, 0x30d6, 0x391d, 0x3a70, 0x3390, 0x2c34, 0x3bf0, 0x3566, 0x3864, 0x2aaa, 0x2df7, 0x20cf, 0x3621, 0x39f8, 0x3ab0, 0x3a54, 0x39fb, 0x389e, 0x3724, 0x3755, 0x369d, 0x3944, 0x2843, 0x13b6, 0x316f, 0x3860, 0x3848, 0x3816, 0x315b, 0x3b72, 0x35e9, 0x396a, 0x399c, 0x3a7b, 0x315c, 0x3667, 0x37ae, 0x39f0, 0x386f, 0x3875, 0x3b25, 0x38ba, 0x3a14, 0x3abc, 0x36e1, 0x352d, 0x3904, 0x385d, 0x3b24, 0x32c9, 0x3afb, 0x3bd8, 0x3520, 0x145c, 0x378f, 0x3821, 0x2801, 0x3496, 0x3b18, -0x3716, 0x3bfe, 0x3591, 0x3b7d, 0x3a85, 0x3af1, 0x3abf, 0x38ae, 0x30cb, 0x3457, 0x3b9f, 0x32bc, 0x39e0, 0x33d6, 0x3acd, 0x38e4, 0x39bf, 0x39ce, 0x2c1a, 0x36c2, 0x3a5e, 0x3ba5, 0x3a2d, 0x3629, 0x3b8d, 0x36ce, 0x3997, 0x384a, 0x3acb, 0x36d2, 0x3b60, 0x3a38, 0x347d, 0x35b3, 0x286f, 0x2bf4, 0x3795, 0x2d33, 0x20c0, 0x3857, 0x3aac, 0x3766, 0x38c1, 0x3628, 0x2e3a, 0x3a93, 0x3ac6, 0x35ca, 0x3366, 0x3b05, 0x3a4c, 0x3be7, 0x37a8, 0x38c4, 0x36ae, 0x39b0, 0x34e1, 0x2dfc, 0x3b41, 0x385a, 0x306b, 0x3bfa, 0x39ab, 0x3ade, 0x3a80, 0x3574, 0x397e, 0x3792, 0x342e, 0x373c, 0x3918, 0x3275, 0x3827, 0x397e, 0x3889, 0x35b5, 0x30d7, 0x1d25, 0x30b4, 0x3580, 0x2ae1, 0x2bba, 0x38ea, 0x3a03, 0x3b44, 0x3539, 0x2de4, 0x3b56, 0x3949, 0x2792, 0x39ac, 0x31af, 0x3514, 0x3ac1, 0x34a6, 0x2c44, -0x330d, 0x36f5, 0x374e, 0x3bf7, 0x33ea, 0x3770, 0x2733, 0x30ef, 0x3b72, 0x2d2a, 0x392d, 0x36fb, 0x3a83, 0x34a1, 0x334c, 0x30b3, 0x2987, 0x3584, 0x3ab0, 0x3a9d, 0x2b67, 0x3a56, 0x35ba, 0x325f, 0x39b7, 0x2abd, 0x3a40, 0x38bf, 0x37b9, 0x3a67, 0x204a, 0x328d, 0x3403, 0x3adc, 0x2c0f, 0x3923, 0x39bc, 0x366a, 0x3082, 0x39d1, 0x3ad5, 0x3a4f, 0x3207, 0x3631, 0x381e, 0x3961, 0x358d, 0x3664, 0x3363, 0x3bf9, 0x372c, 0x3a5d, 0x3878, 0x335a, 0x35a2, 0x3532, 0x3809, 0x2ecb, 0x32e3, 0x3996, 0x36cf, 0x362f, 0x38d5, 0x39c7, 0x2ccd, 0x37c7, 0x2ba2, 0x3b59, 0x26c9, 0x38fa, 0x3b8a, 0x3bed, 0x3868, 0x3942, 0x393a, 0x3999, 0x363f, 0x3375, 0x3bc6, 0x3098, 0x384c, 0x381e, 0x39c6, 0x39be, 0x3204, 0x2023, 0x3acf, 0x3b55, 0x3850, 0x3ae7, 0x37ac, 0x388a, 0x3b11, 0x36e1, 0x2f03, 0x3a6d, -0x2f6f, 0x39b2, 0x308a, 0x3253, 0x3976, 0x38bd, 0x3bfa, 0x3b6d, 0x3816, 0x287b, 0x3588, 0x392b, 0x30bc, 0x3b83, 0x3a9b, 0x300d, 0x3ba4, 0x2d26, 0x372a, 0x3914, 0x36ee, 0x2f72, 0x3ad3, 0x323b, 0x32b6, 0x3a71, 0x3a92, 0x2416, 0x3ab2, 0x39c8, 0x313c, 0x3a5e, 0x3ab9, 0x30ed, 0x3ac3, 0x3339, 0x291e, 0x3847, 0x3bb9, 0x3b7c, 0x3369, 0x3aa1, 0x3b93, 0x380a, 0x33fd, 0x3545, 0x399a, 0x25a4, 0x36c6, 0x37fe, 0x3ae8, 0x3ad7, 0x3be3, 0x3589, 0x370e, 0x3299, 0x3358, 0x3960, 0x36e2, 0x3af9, 0x3676, 0x3b75, 0x39df, 0x32bf, 0x387f, 0x2764, 0x39ae, 0x32b4, 0x36bf, 0x3161, 0x3a40, 0x3bcb, 0x3447, 0x3a0d, 0x2baa, 0x38c7, 0x333a, 0x3a4b, 0x394f, 0x381d, 0x38bd, 0x2b6b, 0x388d, 0x3a37, 0x384e, 0x3b19, 0x31dc, 0x3236, 0x33aa, 0x32f2, 0x32b0, 0x3b95, 0x3bd2, 0x1db0, 0x36d4, 0x38ae, -0x3161, 0x30b6, 0x3784, 0x3701, 0x387e, 0x36ef, 0x2ad7, 0x3ab4, 0x3897, 0x397d, 0x355d, 0x34e3, 0x351d, 0x3b95, 0x3b12, 0x1c76, 0x3b71, 0x3b9a, 0x37e5, 0x3bc6, 0x2576, 0x33c0, 0x398e, 0x39d1, 0x37b9, 0x3a9f, 0x234c, 0x3979, 0x36a2, 0x3aad, 0x355c, 0x3479, 0x2d97, 0x2d54, 0x2ecb, 0x3481, 0x38ba, 0x32e2, 0x380c, 0x2f81, 0x3b87, 0x3a01, 0x35b6, 0x35f6, 0x389a, 0x341e, 0x3180, 0x35d7, 0x31af, 0x3983, 0x38ec, 0x298c, 0x3bea, 0x38d3, 0x2ba1, 0x32b9, 0x2f3e, 0x3b84, 0x3003, 0x34ff, 0x3bd9, 0x323b, 0x375a, 0x3462, 0x3824, 0x303d, 0x381a, 0x385e, 0x3bfd, 0x3993, 0x39c6, 0x3a0f, 0x3b8c, 0x3353, 0x3295, 0x39b6, 0x28dd, 0x3a8e, 0x3043, 0x2d8e, 0x3b67, 0x3504, 0x3b32, 0x30b6, 0x3a4c, 0x3239, 0x3443, 0x3031, 0x3afb, 0x3b11, 0x30f8, 0x3299, 0x3be6, 0x3476, 0x3a49, 0x3441, -0x31e8, 0x3992, 0x3509, 0x3313, 0x3635, 0x35cc, 0x3963, 0x3545, 0x3ba3, 0x2443, 0x35c5, 0x3bb8, 0x3a2e, 0x3642, 0x3ae7, 0x3832, 0x333e, 0x34d3, 0x37f5, 0x38a6, 0x39a9, 0x3850, 0x3ad9, 0x2a1f, 0x271c, 0x3878, 0x3586, 0x362d, 0x3922, 0x3ab8, 0x310e, 0x369c, 0x2efb, 0x3bde, 0x38c2, 0x3af3, 0x393a, 0x3401, 0x315e, 0x305f, 0x38f5, 0x39bf, 0x36c6, 0x3544, 0x3213, 0x386f, 0x378f, 0x3214, 0x3900, 0x35a4, 0x3bbd, 0x2f98, 0x3a9d, 0x3b3d, 0x395a, 0x3932, 0x3515, 0x2ef8, 0x3af6, 0x2d82, 0x2845, 0x39f8, 0x2b6d, 0x38eb, 0x3300, 0x2e15, 0x3788, 0x3962, 0x2e88, 0x356d, 0x3a36, 0x3bd3, 0x2485, 0x38fc, 0x3843, 0x38c0, 0x1351, 0x3aea, 0x2c6d, 0x3ad0, 0x337d, 0x394e, 0x3823, 0x34f9, 0x342e, 0x3203, 0x3b9a, 0x3ade, 0x357a, 0x3734, 0x398f, 0x3302, 0x3b51, 0x3607, 0x35c9, 0x2be4, -0x38d7, 0x3450, 0x359a, 0x2a01, 0x3a33, 0x3536, 0x3a66, 0x360d, 0x3b2f, 0x3a0f, 0x3a84, 0x36b5, 0x3920, 0x389e, 0x3622, 0x3175, 0x370e, 0x32d1, 0x3a64, 0x3a2d, 0x3afc, 0x36f1, 0x3b64, 0x3268, 0x36b8, 0x3b0e, 0x34f4, 0x3b5d, 0x38ac, 0x3153, 0x3128, 0x3670, 0x3b70, 0x39be, 0x3989, 0x35ae, 0x333a, 0x2bfb, 0x3ad9, 0x344c, 0x3ba9, 0x3b6c, 0x335e, 0x3a80, 0x2451, 0x3823, 0x385e, 0x30e0, 0x38e3, 0x30ad, 0x36a0, 0x3a1e, 0x37db, 0x193d, 0x3675, 0x3110, 0x394c, 0x2f96, 0x2c1f, 0x3982, 0x388d, 0x2ccc, 0x343e, 0x3a8c, 0x3710, 0x2da8, 0x384f, 0x35d2, 0x3174, 0x3267, 0x349c, 0x345a, 0x37f3, 0x380a, 0x3814, 0x380c, 0x3acc, 0x325e, 0x3738, 0x32ef, 0x3223, 0x3488, 0x36d9, 0x394d, 0x3450, 0x378c, 0x328e, 0x332a, 0x3b8e, 0x381d, 0x314a, 0x3530, 0x3378, 0x3a88, 0x3bf8, 0x30e7, -0x3860, 0x38b5, 0x3bc1, 0x2da6, 0x3b83, 0x3a43, 0x372a, 0x392c, 0x3404, 0x3449, 0x3972, 0x3bc5, 0x2dc0, 0x39dc, 0x354c, 0x24f9, 0x3617, 0x3bc1, 0x3960, 0x3762, 0x3962, 0x39e3, 0x3afe, 0x3a21, 0x3834, 0x3856, 0x3ad1, 0x36a8, 0x3b2b, 0x36eb, 0x2f4f, 0x3801, 0x3b42, 0x3af3, 0x380f, 0x326c, 0x351a, 0x3914, 0x38b2, 0x3a84, 0x369e, 0x3925, 0x3213, 0x3b80, 0x3763, 0x3af9, 0x2e55, 0x30ba, 0x3a12, 0x347f, 0x39d7, 0x3a46, 0x2ec5, 0x3b6a, 0x3b7f, 0x3a3f, 0x2eea, 0x38db, 0x33be, 0x356a, 0x3a21, 0x3623, 0x3822, 0x3a63, 0x34ef, 0x373b, 0x2d60, 0x3428, 0x3121, 0x3b9a, 0x3948, 0x3687, 0x382b, 0x2144, 0x3254, 0x387f, 0x3512, 0x357c, 0x3891, 0x2e61, 0x368a, 0x33a8, 0x3b26, 0x2e33, 0x282a, 0x2c3a, 0x365c, 0x35c7, 0x3b90, 0x3866, 0x3a86, 0x35cc, 0x3689, 0x3212, 0x3a1e, 0x3555, -0x2f7e, 0x3b2e, 0x3204, 0x3b95, 0x38c5, 0x394d, 0x3908, 0x3b28, 0x388d, 0x36c6, 0x3ac3, 0x3bc6, 0x305d, 0x3a21, 0x3477, 0x39c1, 0x34e7, 0x3ba1, 0x3850, 0x3276, 0x3513, 0x3576, 0x3407, 0x37e4, 0x2dde, 0x3113, 0x389b, 0x34cc, 0x3736, 0x34de, 0x3348, 0x3942, 0x3044, 0x365f, 0x3a40, 0x3a33, 0x34fb, 0x389a, 0x3983, 0x382e, 0x381d, 0x3293, 0x34a2, 0x330d, 0x31f1, 0x3b44, 0x3861, 0x35e1, 0x331a, 0x3839, 0x39d0, 0x3b0a, 0x34d0, 0x37dd, 0x332b, 0x38f4, 0x3ad1, 0x25b4, 0x3bee, 0x31ee, 0x31fc, 0x382d, 0x3889, 0x352b, 0x38a5, 0x21c1, 0x2e21, 0x3425, 0x2d5e, 0x28f2, 0x3ad7, 0x3945, 0x3282, 0x3844, 0x39d9, 0x2e75, 0x3adb, 0x3703, 0x3966, 0x383a, 0x2d09, 0x3008, 0x3b9f, 0x3b0f, 0x304a, 0x373e, 0x3a84, 0x3739, 0x39cd, 0x3678, 0x3a04, 0x2fe1, 0x3572, 0x3853, 0x38f6, 0x3abc, -0x3b09, 0x3b5a, 0x3be6, 0x2424, 0x345a, 0x3992, 0x3738, 0x35a8, 0x3379, 0x3949, 0x3a93, 0x37d9, 0x2fe8, 0x3a1c, 0x322a, 0x26b8, 0x3af8, 0x327a, 0x34f0, 0x3632, 0x3485, 0x385f, 0x3b33, 0x3396, 0x3ad8, 0x379a, 0x384e, 0x35e6, 0x331e, 0x3b6d, 0x34ca, 0x3997, 0x39c8, 0x3a97, 0x387d, 0x1854, 0x35d1, 0x3bd9, 0x389e, 0x365a, 0x396e, 0x2f7d, 0x3910, 0x388f, 0x39e6, 0x3a8e, 0x3a9e, 0x39b2, 0x2ff2, 0x39fc, 0x346f, 0x39bf, 0x3711, 0x3951, 0x3856, 0x39ea, 0x318e, 0x3778, 0x393c, 0x37ba, 0x3781, 0x3ad5, 0x3638, 0x3b18, 0x286d, 0x314b, 0x3b67, 0x3186, 0x37c4, 0x39f7, 0x376f, 0x3b12, 0x3882, 0x36b6, 0x3a84, 0x329a, 0x24a9, 0x38e3, 0x35ca, 0x3b5b, 0x333f, 0x3994, 0x3369, 0x385b, 0x3871, 0x3aac, 0x3649, 0x3953, 0x31d4, 0x3b45, 0x3808, 0x36e0, 0x35c6, 0x2bd8, 0x39b7, 0x3bd9, -0x3aa5, 0x340f, 0x3721, 0x35e0, 0x3a8f, 0x3ac1, 0x3b3f, 0x1e07, 0x342a, 0x36a2, 0x3830, 0x2dff, 0x35c4, 0x3441, 0x3ac6, 0x383f, 0x3bb1, 0x32d5, 0x3870, 0x3757, 0x36a5, 0x38c3, 0x3158, 0x377d, 0x363d, 0x2ede, 0x3698, 0x2f0b, 0x3860, 0x1a39, 0x39b4, 0x39c3, 0x35e2, 0x3529, 0x35e4, 0x38d3, 0x358a, 0x2cc9, 0x3665, 0x3479, 0x3917, 0x36f9, 0x34d3, 0x39f7, 0x3688, 0x3950, 0x36d5, 0x3a15, 0x35fd, 0x3556, 0x3751, 0x30b6, 0x3906, 0x3b32, 0x387f, 0x2d69, 0x3628, 0x3b4c, 0x3b17, 0x38ff, 0x3852, 0x38c4, 0x37e0, 0x368d, 0x38f6, 0x3885, 0x398e, 0x37dd, 0x3867, 0x35e7, 0x3bd1, 0x38a1, 0x3882, 0x2d3d, 0x3b21, 0x3443, 0x3381, 0x36df, 0x38ba, 0x3a7c, 0x3a03, 0x3881, 0x352b, 0x3914, 0x3b69, 0x3564, 0x3141, 0x3940, 0x327b, 0x390b, 0x3710, 0x3952, 0x3a3e, 0x3825, 0x3ae8, 0x39f8, -0x3950, 0x3a9d, 0x3a2c, 0x35d5, 0x34b7, 0x3a46, 0x3a47, 0x344e, 0x3a08, 0x3362, 0x3285, 0x33e8, 0x3618, 0x39fb, 0x2c3c, 0x39b0, 0x1336, 0x36bd, 0x358c, 0x3bc0, 0x354d, 0x38be, 0x3a08, 0x34e9, 0x3801, 0x3be9, 0x35fa, 0x3015, 0x26bc, 0x399e, 0x36d1, 0x3218, 0x3a92, 0x2ad4, 0x3114, 0x364e, 0x3aa5, 0x35cb, 0x354a, 0x2da0, 0x2fc1, 0x36a2, 0x2fde, 0x3b28, 0x367f, 0x32eb, 0x3b7e, 0x3912, 0x3894, 0x323f, 0x3807, 0x3971, 0x3b61, 0x2381, 0x3ac6, 0x3868, 0x3980, 0x3a49, 0x3183, 0x3657, 0x3851, 0x3956, 0x37be, 0x38ea, 0x38b3, 0x37e2, 0x38ca, 0x3b3b, 0x3543, 0x38af, 0x247b, 0x3716, 0x3b75, 0x3667, 0x3801, 0x2a16, 0x3b46, 0x2bb3, 0x3832, 0x3b8e, 0x3a02, 0x37e2, 0x38b7, 0x2a58, 0x3b4b, 0x3b3c, 0x3914, 0x27f4, 0x3512, 0x3934, 0x3a17, 0x3a1b, 0x3bab, 0x3ae0, 0x3ab8, 0x3454, -0x32bc, 0x35d5, 0x3b7f, 0x388c, 0x3740, 0x3290, 0x2d2a, 0x2bf5, 0x304b, 0x3a10, 0x388e, 0x2e4e, 0x3126, 0x3477, 0x386d, 0x3bc5, 0x3643, 0x3589, 0x3665, 0x39c5, 0x315d, 0x3375, 0x3b3d, 0x38bb, 0x320a, 0x371d, 0x3873, 0x31df, 0x3534, 0x3b7a, 0x3809, 0x3b1f, 0x3868, 0x35ec, 0x397c, 0x3535, 0x3be5, 0x3857, 0x3ae4, 0x338c, 0x3ace, 0x3931, 0x3bcc, 0x30d9, 0x3bb2, 0x38d5, 0x3840, 0x3aef, 0x385c, 0x3974, 0x3b1b, 0x369c, 0x3b54, 0x3074, 0x39bb, 0x3a1d, 0x2e7d, 0x34f9, 0x3a6c, 0x3505, 0x3ae2, 0x30df, 0x3ac9, 0x3460, 0x3517, 0x3b85, 0x3488, 0x3440, 0x3aab, 0x3089, 0x3879, 0x3343, 0x3395, 0x329f, 0x3753, 0x3a08, 0x388b, 0x3ac1, 0x3478, 0x33f5, 0x3a65, 0x343f, 0x307e, 0x38f3, 0x37a0, 0x3259, 0x3210, 0x385a, 0x3bff, 0x297f, 0x2e3b, 0x2e41, 0x3921, 0x3654, 0x34c2, 0x3bf6, -0x2dca, 0x391f, 0x399f, 0x2fae, 0x38c6, 0x2fea, 0x36a0, 0x31d7, 0x3a0a, 0x2adb, 0x31c7, 0x3bf1, 0x313c, 0x3a0f, 0x36d3, 0x3854, 0x355f, 0x3991, 0x3b44, 0x3b0c, 0x3aa8, 0x37f0, 0x38cf, 0x3394, 0x373a, 0x38ee, 0x3871, 0x3977, 0x29ef, 0x23f6, 0x3b79, 0x2430, 0x31ea, 0x2f51, 0x3b09, 0x39fa, 0x34c0, 0x2a71, 0x3186, 0x3869, 0x2c9d, 0x3995, 0x3a89, 0x3a6a, 0x308a, 0x32f2, 0x39e9, 0x3902, 0x3970, 0x3986, 0x3931, 0x3918, 0x36ab, 0x3a86, 0x38c2, 0x39f0, 0x2ca6, 0x3bac, 0x36b8, 0x34d2, 0x383e, 0x304a, 0x299b, 0x3172, 0x3b3b, 0x38e3, 0x39a0, 0x3b28, 0x3822, 0x3548, 0x35d3, 0x3a14, 0x282b, 0x39e4, 0x2d29, 0x3a68, 0x2dc2, 0x32c2, 0x3aa2, 0x3625, 0x3553, 0x3809, 0x3993, 0x3811, 0x3456, 0x2f37, 0x3210, 0x393f, 0x323c, 0x30eb, 0x361c, 0x3276, 0x3097, 0x34ee, 0x34f8, 0x31cd, -0x3ba8, 0x2a42, 0x31b2, 0x38e3, 0x3951, 0x29e1, 0x2e0a, 0x3a69, 0x2f3f, 0x3b90, 0x3634, 0x3b61, 0x35ef, 0x34c4, 0x386f, 0x2aae, 0x38a6, 0x1edc, 0x38f0, 0x37e7, 0x3ac3, 0x32fe, 0x3645, 0x31ef, 0x33e8, 0x3447, 0x3ad8, 0x3b4e, 0x193e, 0x2514, 0x36ad, 0x3b4c, 0x39d8, 0x3285, 0x31c9, 0x3a64, 0x2c2d, 0x3994, 0x302a, 0x3a31, 0x3adb, 0x2bfa, 0x3554, 0x399f, 0x32a0, 0x393b, 0x3831, 0x3a94, 0x2f96, 0x38bb, 0x3b49, 0x2168, 0x396c, 0x3425, 0x3b8d, 0x2634, 0x38fd, 0x3894, 0x3ac8, 0x3b82, 0x3891, 0x39a0, 0x3422, 0x36e1, 0x3727, 0x3802, 0x388e, 0x392d, 0x37ec, 0x340f, 0x2424, 0x3812, 0x3af6, 0x3352, 0x36e2, 0x385e, 0x3ba8, 0x38ca, 0x3986, 0x3b9e, 0x3319, 0x3be8, 0x389f, 0x29ea, 0x35c2, 0x394f, 0x33b7, 0x388b, 0x388d, 0x3bb5, 0x34f9, 0x35ff, 0x3842, 0x3181, 0x3889, 0x38ec, -0x34b9, 0x3818, 0x3af1, 0x35b7, 0x3462, 0x39bf, 0x3641, 0x367d, 0x3560, 0x2c3b, 0x3b63, 0x2cdc, 0x33be, 0x3a92, 0x2cf5, 0x3216, 0x315f, 0x39dc, 0x3b1a, 0x37e4, 0x3446, 0x37dc, 0x3934, 0x3835, 0x3916, 0x37d0, 0x384e, 0x2d75, 0x3268, 0x3570, 0x3506, 0x38e0, 0x38c0, 0x395f, 0x38bd, 0x3022, 0x3b3e, 0x393b, 0x3479, 0x3726, 0x3432, 0x3699, 0x38dc, 0x2def, 0x2ab6, 0x2fad, 0x3a35, 0x35b5, 0x30a8, 0x3968, 0x38ab, 0x3a6e, 0x346e, 0x3988, 0x3434, 0x35b6, 0x36dc, 0x2e2e, 0x2b5c, 0x3300, 0x32f9, 0x382a, 0x3bc2, 0x3b6f, 0x2ca0, 0x2d85, 0x397c, 0x38a1, 0x36e4, 0x37f0, 0x39ec, 0x30fb, 0x3bfb, 0x3a04, 0x301a, 0x3b8c, 0x39eb, 0x3a96, 0x39bc, 0x3921, 0x319b, 0x3805, 0x3b5f, 0x39ad, 0x316b, 0x3b91, 0x2c1d, 0x3b87, 0x35d3, 0x3b01, 0x36ad, 0x393f, 0x3674, 0x3603, 0x3af9, 0x2fa1, -0x3a49, 0x34d3, 0x3af0, 0x28b4, 0x3afb, 0x3684, 0x3640, 0x37ae, 0x38d3, 0x3916, 0x3699, 0x3b36, 0x38e7, 0x3ad9, 0x39af, 0x376a, 0x388f, 0x35c7, 0x3664, 0x3840, 0x3506, 0x3b62, 0x3347, 0x3a30, 0x347c, 0x3ae5, 0x3542, 0x35d6, 0x32f6, 0x38e3, 0x2091, 0x3a7f, 0x3b5a, 0x3610, 0x38c9, 0x348b, 0x37bf, 0x346a, 0x38a2, 0x3939, 0x3842, 0x3a03, 0x3afe, 0x1ec8, 0x3158, 0x3afc, 0x39e9, 0x3b79, 0x351a, 0x314e, 0x242c, 0x34b5, 0x3bc6, 0x25a0, 0x3b95, 0x29e3, 0x3517, 0x3bff, 0x3a4b, 0x3a79, 0x355f, 0x33cd, 0x35df, 0x3ab8, 0x39d4, 0x3afe, 0x35f7, 0x38aa, 0x2fc1, 0x3342, 0x394c, 0x3603, 0x3811, 0x3a0b, 0x34eb, 0x2ca7, 0x3192, 0x3a89, 0x396e, 0x3731, 0x3af0, 0x2cca, 0x3843, 0x36e3, 0x39f5, 0x2d99, 0x2a6b, 0x33bf, 0x2609, 0x32f0, 0x32ce, 0x35dd, 0x380d, 0x32e2, 0x3b6a, 0x3a8e, -0x2ced, 0x32da, 0x3a21, 0x367d, 0x36cd, 0x3631, 0x2b0d, 0x31fd, 0x3b89, 0x2e45, 0x3916, 0x362b, 0x3852, 0x2c73, 0x32a6, 0x3013, 0x396f, 0x3984, 0x3104, 0x3a93, 0x39de, 0x3807, 0x3464, 0x36bb, 0x36e7, 0x3aa3, 0x372a, 0x38ce, 0x3a85, 0x3bae, 0x27b1, 0x34c7, 0x37e5, 0x2be5, 0x3a8c, 0x2e62, 0x3b13, 0x2ee8, 0x3782, 0x3a40, 0x31b0, 0x37fd, 0x3759, 0x3382, 0x3bcc, 0x32fd, 0x3bdc, 0x39eb, 0x3a01, 0x380e, 0x31a6, 0x39f6, 0x38fc, 0x37c5, 0x3be0, 0x347a, 0x3524, 0x2da5, 0x23ed, 0x25e0, 0x3af4, 0x27f6, 0x39cd, 0x3575, 0x3827, 0x3b1d, 0x3bf3, 0x3bd8, 0x3697, 0x3b52, 0x2ec3, 0x33c0, 0x3b26, 0x3ab5, 0x34f6, 0x30f2, 0x38ff, 0x39ae, 0x3620, 0x32a6, 0x365a, 0x3a13, 0x2a9a, 0x28a9, 0x3198, 0x3819, 0x38bb, 0x3731, 0x3b3d, 0x37db, 0x3abb, 0x3be6, 0x34c7, 0x3709, 0x3959, 0x3556, -0x3b82, 0x36c8, 0x352e, 0x3a99, 0x3942, 0x37e9, 0x39c9, 0x3900, 0x123c, 0x3b9a, 0x3b46, 0x3a9a, 0x3a06, 0x36e3, 0x38bd, 0x3622, 0x396c, 0x3a7d, 0x361f, 0x3b83, 0x297b, 0x3a4b, 0x323f, 0x3b61, 0x3ac5, 0x24e9, 0x3138, 0x359a, 0x2931, 0x3b63, 0x3a8d, 0x3aa0, 0x384f, 0x3a36, 0x3641, 0x3af0, 0x3ada, 0x3526, 0x3a5c, 0x39cc, 0x3803, 0x3572, 0x3994, 0x3b9e, 0x3a64, 0x36ae, 0x37ec, 0x3ad2, 0x312b, 0x3434, 0x3b89, 0x38d1, 0x3309, 0x3573, 0x38e2, 0x2c51, 0x3b19, 0x3a0b, 0x3a49, 0x392a, 0x3ae7, 0x341f, 0x3701, 0x3577, 0x3a6b, 0x3864, 0x356f, 0x3a73, 0x3bdd, 0x39e1, 0x3397, 0x31c9, 0x3618, 0x3973, 0x3848, 0x2e85, 0x3adb, 0x30d0, 0x349e, 0x3121, 0x397e, 0x3ae2, 0x351f, 0x3137, 0x3903, 0x3b71, 0x3a3e, 0x3189, 0x3a1a, 0x39a5, 0x38b6, 0x35ee, 0x2c56, 0x3a09, 0x33a1, 0x294a, -0x382b, 0x39a6, 0x335a, 0x3687, 0x30cf, 0x38cc, 0x32d6, 0x2181, 0x3a52, 0x2cfb, 0x3991, 0x39bc, 0x3706, 0x3a02, 0x386e, 0x3b54, 0x3781, 0x381c, 0x38eb, 0x3b5d, 0x39c2, 0x38f2, 0x3b4c, 0x3bd7, 0x292a, 0x37c1, 0x3bfa, 0x29b6, 0x381e, 0x32ca, 0x3a70, 0x3a3a, 0x3ad7, 0x3042, 0x2ecb, 0x3bb6, 0x3703, 0x38fe, 0x3866, 0x3a69, 0x3bc7, 0x3b34, 0x2cfd, 0x2220, 0x3ba7, 0x3849, 0x39b3, 0x284b, 0x3a18, 0x39d9, 0x3aaf, 0x3809, 0x3be3, 0x3749, 0x2b7b, 0x382c, 0x356c, 0x37ac, 0x2a66, 0x3abb, 0x23d2, 0x3912, 0x3085, 0x2a21, 0x3b7a, 0x3616, 0x35f1, 0x3595, 0x3bd3, 0x356b, 0x3929, 0x3b99, 0x3a5f, 0x30f4, 0x3866, 0x3a8e, 0x2ca2, 0x3904, 0x3735, 0x373a, 0x3a5f, 0x3ba5, 0x2001, 0x39dc, 0x3a26, 0x3987, 0x3163, 0x3816, 0x2b55, 0x369c, 0x3aab, 0x3508, 0x3b86, 0x340d, 0x34d6, 0x3766, -0x3691, 0x3723, 0x2e9f, 0x38a2, 0x3a6a, 0x3645, 0x2e83, 0x2f93, 0x3947, 0x3744, 0x352b, 0x365c, 0x3a34, 0x3a63, 0x3bae, 0x3977, 0x281c, 0x377c, 0x3584, 0x3bf9, 0x2f97, 0x34c8, 0x3af7, 0x38e7, 0x3acf, 0x384d, 0x3bdd, 0x387d, 0x3a8f, 0x399e, 0x34e0, 0x3a84, 0x31b5, 0x291d, 0x394d, 0x3967, 0x3a1f, 0x378e, 0x3618, 0x386e, 0x345c, 0x3916, 0x353a, 0x3176, 0x396f, 0x2bc1, 0x3b5c, 0x3b8a, 0x2d3c, 0x354b, 0x2c50, 0x3539, 0x2c35, 0x320f, 0x3914, 0x2a96, 0x3bcf, 0x3a20, 0x3a5b, 0x372e, 0x35f5, 0x3992, 0x3b39, 0x39b8, 0x3aea, 0x3bb5, 0x3a65, 0x3884, 0x2b7a, 0x3b7d, 0x3455, 0x3039, 0x36b1, 0x31c8, 0x391b, 0x3942, 0x3b4b, 0x365c, 0x3a2c, 0x39b6, 0x3b02, 0x3901, 0x33b8, 0x3ad1, 0x2c3d, 0x3955, 0x3857, 0x33bb, 0x2ef2, 0x3446, 0x3917, 0x3ad2, 0x34be, 0x3939, 0x35ab, 0x370f, -0x32c0, 0x2fdc, 0x3b63, 0x2a85, 0x3a47, 0x34c2, 0x3651, 0x31c5, 0x2b72, 0x3b43, 0x3ba3, 0x2c85, 0x3958, 0x3bc2, 0x3818, 0x35d3, 0x3bec, 0x32c4, 0x301a, 0x351a, 0x3706, 0x348e, 0x2194, 0x3830, 0x324f, 0x3a6d, 0x3b87, 0x2a73, 0x3ba9, 0x3ad9, 0x39cd, 0x3af6, 0x1d41, 0x31e5, 0x3abb, 0x3184, 0x3911, 0x318e, 0x39a7, 0x3295, 0x39fd, 0x342a, 0x3822, 0x3be0, 0x3a97, 0x386d, 0x35cf, 0x39bd, 0x29b2, 0x320f, 0x2fe7, 0x2f1e, 0x2c19, 0x3054, 0x3907, 0x3a78, 0x2093, 0x3901, 0x2e53, 0x3981, 0x3713, 0x3b18, 0x3b76, 0x3bee, 0x39f2, 0x2c64, 0x3680, 0x3b35, 0x39db, 0x34a2, 0x3963, 0x3a3c, 0x3b52, 0x34a1, 0x3951, 0x3aad, 0x2870, 0x35fc, 0x3a47, 0x3955, 0x37e9, 0x36c2, 0x3a4c, 0x2bd8, 0x34ee, 0x3751, 0x3ae0, 0x3b51, 0x2861, 0x3391, 0x2fa9, 0x3837, 0x35cb, 0x304b, 0x3b0f, 0x358b, -0x2f61, 0x3096, 0x3a54, 0x3059, 0x39af, 0x3b95, 0x2c6d, 0x2faf, 0x38f6, 0x3427, 0x3af3, 0x343d, 0x3b5a, 0x341e, 0x32d7, 0x224f, 0x3af7, 0x3159, 0x346d, 0x3535, 0x34c2, 0x371f, 0x39d4, 0x380b, 0x310c, 0x206a, 0x3a65, 0x3976, 0x3af2, 0x39ab, 0x39df, 0x327f, 0x399c, 0x2d96, 0x38a4, 0x357c, 0x2f8f, 0x3046, 0x38ae, 0x3ac4, 0x38b8, 0x2c03, 0x34c0, 0x3171, 0x39c1, 0x3802, 0x366d, 0x341f, 0x3286, 0x36f0, 0x397f, 0x2176, 0x3aac, 0x3b7a, 0x3a3a, 0x3919, 0x3585, 0x2cc4, 0x39ed, 0x2833, 0x3b9e, 0x36e3, 0x3a31, 0x3a48, 0x38a8, 0x3401, 0x3b8e, 0x38a0, 0x3a07, 0x378d, 0x3512, 0x33a7, 0x3977, 0x3862, 0x357d, 0x3922, 0x371f, 0x318d, 0x3b57, 0x3667, 0x313b, 0x3bf3, 0x35e0, 0x3ae6, 0x3668, 0x2940, 0x2d29, 0x30f4, 0x3a66, 0x3b0d, 0x3b12, 0x35dd, 0x390b, 0x3990, 0x3011, 0x2b64, -0x334f, 0x3b09, 0x398f, 0x34e0, 0x28d3, 0x3385, 0x39e4, 0x357c, 0x3a45, 0x2df3, 0x2c61, 0x3569, 0x355e, 0x3b14, 0x3012, 0x1c32, 0x3a0e, 0x39d3, 0x20f2, 0x38f4, 0x398b, 0x3b9c, 0x374a, 0x3916, 0x3a5a, 0x3892, 0x3720, 0x38de, 0x3809, 0x3173, 0x38a4, 0x3698, 0x3815, 0x30a5, 0x3a18, 0x3534, 0x2e89, 0x3657, 0x2fc1, 0x39c5, 0x3b59, 0x337f, 0x383b, 0x3ba1, 0x2d4d, 0x2d7a, 0x3b8e, 0x39c9, 0x2b4a, 0x2d1b, 0x3af3, 0x375a, 0x360a, 0x3977, 0x398f, 0x3bb2, 0x358c, 0x369e, 0x390f, 0x35ed, 0x392c, 0x33d4, 0x3a6b, 0x3ade, 0x38b2, 0x3424, 0x2d4f, 0x3aeb, 0x3802, 0x33fa, 0x31c4, 0x35ef, 0x3b51, 0x2d27, 0x3912, 0x351a, 0x36ea, 0x3869, 0x2c73, 0x264b, 0x371d, 0x3a9e, 0x3159, 0x3a54, 0x3849, 0x394e, 0x3921, 0x3435, 0x38aa, 0x33ae, 0x3950, 0x3adf, 0x3b9b, 0x3a1d, 0x3706, 0x3b43, -0x3541, 0x3b8a, 0x3528, 0x39da, 0x36fa, 0x392e, 0x3195, 0x38e7, 0x392a, 0x366f, 0x308f, 0x29d5, 0x3be5, 0x345a, 0x35b5, 0x395b, 0x3a76, 0x3224, 0x1958, 0x39e1, 0x3b98, 0x3b80, 0x30a5, 0x3461, 0x3471, 0x365a, 0x3af0, 0x30ac, 0x38dd, 0x38ca, 0x2d58, 0x3bf4, 0x35bc, 0x3478, 0x235b, 0x3b92, 0x391f, 0x39e3, 0x3b11, 0x3afb, 0x2ea4, 0x2c61, 0x3756, 0x3821, 0x38d6, 0x3938, 0x3478, 0x3813, 0x3740, 0x31ea, 0x3b6d, 0x3be6, 0x2a58, 0x36c6, 0x31ee, 0x3642, 0x3b29, 0x37df, 0x337d, 0x336b, 0x3afa, 0x352b, 0x3aa6, 0x3898, 0x37cc, 0x33f2, 0x3b20, 0x3a61, 0x380e, 0x3b37, 0x38e6, 0x3b79, 0x365a, 0x387a, 0x24c7, 0x3301, 0x3b10, 0x3afb, 0x3819, 0x3aa3, 0x38cd, 0x384d, 0x3661, 0x383e, 0x3a34, 0x3b1a, 0x2d83, 0x36a8, 0x3b75, 0x3b0e, 0x363d, 0x3a67, 0x392e, 0x389c, 0x35a3, 0x2e39, -0x3ae7, 0x3849, 0x3bc7, 0x2a99, 0x31b2, 0x3535, 0x32dc, 0x2ab5, 0x3b34, 0x398c, 0x2b94, 0x36b5, 0x39fe, 0x376a, 0x39ee, 0x34f9, 0x31ce, 0x3968, 0x3809, 0x3261, 0x38f8, 0x3b62, 0x3807, 0x3992, 0x3b8e, 0x39e0, 0x3614, 0x3b23, 0x36d0, 0x38da, 0x3a8c, 0x3b55, 0x316c, 0x3b5d, 0x3531, 0x39a5, 0x24db, 0x293c, 0x3822, 0x38dc, 0x316f, 0x3750, 0x3601, 0x30bf, 0x3a74, 0x24af, 0x258b, 0x3bec, 0x293c, 0x3868, 0x360e, 0x310d, 0x36b3, 0x344c, 0x2cf0, 0x3476, 0x3a3a, 0x2e52, 0x3939, 0x3a69, 0x34df, 0x3a5b, 0x39c0, 0x347c, 0x371d, 0x391d, 0x3913, 0x306f, 0x3bfe, 0x380f, 0x3959, 0x39bd, 0x3619, 0x34e2, 0x36c6, 0x39bc, 0x3a2c, 0x3bc3, 0x3a29, 0x2c45, 0x3ac4, 0x3b46, 0x3a5c, 0x3be6, 0x2c2c, 0x3757, 0x39cb, 0x30f0, 0x38c8, 0x3154, 0x38b5, 0x3480, 0x3835, 0x3b8c, 0x311d, 0x3570, -0x38c4, 0x3400, 0x2d91, 0x3a09, 0x312a, 0x39e9, 0x3b4e, 0x320d, 0x372d, 0x33f0, 0x3b4c, 0x2253, 0x37dd, 0x39a8, 0x3a18, 0x3aeb, 0x3b0a, 0x35eb, 0x3a4c, 0x39ff, 0x3a97, 0x2b96, 0x37c0, 0x3169, 0x3727, 0x3859, 0x3874, 0x3a11, 0x356e, 0x39e4, 0x3849, 0x38ab, 0x292b, 0x38a8, 0x2e0b, 0x1e53, 0x3814, 0x367d, 0x3962, 0x39ff, 0x3a0e, 0x38a1, 0x3249, 0x2d7c, 0x31df, 0x3924, 0x3ae4, 0x3978, 0x38c9, 0x3808, 0x288b, 0x3004, 0x3983, 0x3427, 0x3aa2, 0x3bb9, 0x38bc, 0x380d, 0x3ba3, 0x3522, 0x3607, 0x38c1, 0x35d4, 0x3a19, 0x38d6, 0x3aef, 0x3682, 0x3b5c, 0x2de4, 0x35bb, 0x363b, 0x36df, 0x3803, 0x39e5, 0x2e9f, 0x3a36, 0x3a9c, 0x36dc, 0x3908, 0x3ada, 0x3978, 0x382c, 0x3ba7, 0x398e, 0x3800, 0x3ad7, 0x387e, 0x3429, 0x2d19, 0x3971, 0x37f1, 0x3af3, 0x3986, 0x3a07, 0x382f, 0x359b, -0x2f4d, 0x3a0f, 0x3890, 0x386e, 0x3229, 0x2fb8, 0x390a, 0x390e, 0x3b53, 0x3812, 0x2961, 0x3017, 0x39d5, 0x3958, 0x2d80, 0x2fad, 0x3730, 0x3853, 0x2882, 0x3bb9, 0x3939, 0x3bab, 0x2ffa, 0x28ff, 0x3a54, 0x38d5, 0x3456, 0x3bd4, 0x3a38, 0x30a8, 0x3a38, 0x32ab, 0x3788, 0x3a1d, 0x3bec, 0x325c, 0x3981, 0x3a5a, 0x2941, 0x3925, 0x353a, 0x360a, 0x38cf, 0x374d, 0x30a4, 0x2819, 0x3021, 0x3143, 0x3684, 0x3af2, 0x3a61, 0x3a31, 0x3625, 0x38a6, 0x3a5d, 0x3963, 0x3997, 0x391a, 0x3767, 0x3b35, 0x383c, 0x37bf, 0x3753, 0x357a, 0x3993, 0x382b, 0x3128, 0x3a93, 0x3b03, 0x38e2, 0x37e9, 0x3b05, 0x3789, 0x3be9, 0x3068, 0x36f4, 0x19c7, 0x3523, 0x28f3, 0x3746, 0x324c, 0x31cc, 0x377e, 0x35b4, 0x3127, 0x3a24, 0x351a, 0x3b16, 0x3801, 0x398d, 0x39a8, 0x3b6f, 0x3933, 0x3535, 0x30e3, 0x3b25, -0x353f, 0x306c, 0x3bd1, 0x380e, 0x3b05, 0x3859, 0x2e39, 0x37b4, 0x38fb, 0x392e, 0x32c0, 0x3adb, 0x29c4, 0x3b0e, 0x28a6, 0x341f, 0x371a, 0x39bc, 0x30a1, 0x3790, 0x3439, 0x3102, 0x3bcc, 0x2f3d, 0x39ad, 0x3b38, 0x390e, 0x391f, 0x39a7, 0x3099, 0x3a5b, 0x3894, 0x3674, 0x3948, 0x3895, 0x3458, 0x3bc6, 0x3a36, 0x381e, 0x3069, 0x39fc, 0x3a3f, 0x39f5, 0x3a9d, 0x3169, 0x39a9, 0x3b16, 0x362d, 0x3951, 0x3881, 0x3ac4, 0x2ecf, 0x3b79, 0x3abe, 0x3841, 0x2c1a, 0x3b7a, 0x3083, 0x3ad1, 0x3a90, 0x3974, 0x2e92, 0x3b5f, 0x3003, 0x39c1, 0x2ff2, 0x39dc, 0x3bbf, 0x3972, 0x3997, 0x3667, 0x3409, 0x3239, 0x3aaf, 0x358e, 0x33b8, 0x397a, 0x3b54, 0x399d, 0x351d, 0x35c8, 0x3362, 0x2964, 0x3102, 0x3bc4, 0x22b3, 0x3b29, 0x3925, 0x37f0, 0x23fc, 0x3bc8, 0x39f0, 0x30cd, 0x3569, 0x3a27, 0x3b0b, -0x392e, 0x38e0, 0x3436, 0x3aa6, 0x395a, 0x397e, 0x38f6, 0x3b45, 0x3050, 0x34b0, 0x3b1d, 0x3932, 0x3a3a, 0x3915, 0x3816, 0x3b23, 0x3342, 0x2c1e, 0x3bfa, 0x3978, 0x304c, 0x2cd7, 0x3a11, 0x37d8, 0x3ad2, 0x37cb, 0x3bf8, 0x37d3, 0x3589, 0x37aa, 0x399a, 0x3661, 0x3965, 0x328a, 0x3969, 0x3100, 0x2dc4, 0x34a0, 0x30a4, 0x3950, 0x2f40, 0x32ab, 0x3904, 0x398d, 0x3293, 0x34a7, 0x33a4, 0x38b6, 0x3834, 0x3add, 0x3a08, 0x38cf, 0x3a13, 0x3a6f, 0x382e, 0x3682, 0x3b4b, 0x323e, 0x38e0, 0x38dc, 0x3854, 0x3b9d, 0x3b13, 0x3940, 0x38d4, 0x30ac, 0x3061, 0x3906, 0x3b2d, 0x38f9, 0x3ab0, 0x3a5a, 0x34fd, 0x3b15, 0x3472, 0x3985, 0x3634, 0x3940, 0x35da, 0x38ba, 0x395b, 0x3488, 0x39ca, 0x3a14, 0x2b22, 0x3829, 0x3479, 0x30a6, 0x3910, 0x34e2, 0x3506, 0x3663, 0x23b2, 0x3812, 0x3416, 0x3455, -0x3bc0, 0x3487, 0x3853, 0x3738, 0x3a19, 0x38a3, 0x339a, 0x3906, 0x3a98, 0x3a4c, 0x32bb, 0x3460, 0x2031, 0x36a4, 0x387a, 0x3141, 0x2f39, 0x2efd, 0x394e, 0x2e35, 0x3528, 0x3c00, 0x3b44, 0x342b, 0x3b4d, 0x3bdb, 0x3185, 0x39cb, 0x358a, 0x39ce, 0x2060, 0x3baa, 0x3bc4, 0x30eb, 0x3aed, 0x3734, 0x3a1f, 0x15f9, 0x3a5c, 0x372e, 0x33f9, 0x3b71, 0x3715, 0x37e3, 0x3384, 0x38ff, 0x36e6, 0x28a1, 0x2d9e, 0x280b, 0x3853, 0x3b42, 0x2eda, 0x3a63, 0x2328, 0x3830, 0x35a6, 0x39e9, 0x33df, 0x3be1, 0x220a, 0x39b4, 0x3ade, 0x2e17, 0x3831, 0x2cfe, 0x3752, 0x38fb, 0x39ce, 0x350b, 0x3600, 0x2ffd, 0x363a, 0x358b, 0x2582, 0x3510, 0x36db, 0x2e28, 0x38e0, 0x3a49, 0x277a, 0x301e, 0x39ca, 0x3861, 0x31a7, 0x3550, 0x3862, 0x3476, 0x3a8d, 0x38c2, 0x394b, 0x3156, 0x39ea, 0x3bdf, 0x3880, 0x389a, -0x3a75, 0x35a7, 0x37b1, 0x3b17, 0x24de, 0x32cd, 0x2c9b, 0x3968, 0x3a36, 0x2e6f, 0x3549, 0x3971, 0x34cb, 0x34ac, 0x3bf7, 0x34b8, 0x3841, 0x3527, 0x3a22, 0x3955, 0x3454, 0x380d, 0x38cd, 0x39b3, 0x39c4, 0x3777, 0x3737, 0x2ead, 0x39ef, 0x3420, 0x3a95, 0x35f0, 0x347f, 0x2c76, 0x2cfd, 0x33de, 0x3363, 0x3bf0, 0x3afc, 0x3ab1, 0x3b88, 0x3bcb, 0x23ba, 0x3353, 0x2169, 0x33a7, 0x3484, 0x307b, 0x20b7, 0x384d, 0x302a, 0x3448, 0x39b1, 0x39ab, 0x3be0, 0x3430, 0x3a05, 0x3715, 0x35fe, 0x1e5c, 0x3b84, 0x3b3a, 0x3b0a, 0x320e, 0x2e29, 0x2f00, 0x37c3, 0x3865, 0x37ae, 0x3959, 0x3ba0, 0x3b56, 0x3b4a, 0x3934, 0x35bf, 0x3aa7, 0x3814, 0x320c, 0x3b4a, 0x2499, 0x34bd, 0x3a25, 0x39b8, 0x318b, 0x3b42, 0x3a28, 0x3912, 0x3be5, 0x37af, 0x2cb7, 0x3799, 0x37eb, 0x3981, 0x3033, 0x2f89, 0x3471, -0x3a59, 0x3ab8, 0x3a8d, 0x3bd7, 0x3ba2, 0x39d4, 0x3a8b, 0x278d, 0x32e2, 0x2ced, 0x397f, 0x39f2, 0x3b27, 0x3798, 0x35bf, 0x3597, 0x374e, 0x3ac6, 0x3728, 0x3673, 0x252b, 0x30c8, 0x3b7b, 0x39fb, 0x38db, 0x3ac7, 0x3728, 0x3420, 0x3749, 0x3749, 0x37f3, 0x3977, 0x3181, 0x2d5c, 0x37f8, 0x3966, 0x3b9f, 0x3901, 0x369f, 0x36fa, 0x2468, 0x38f7, 0x3900, 0x37f1, 0x39d6, 0x342d, 0x35d0, 0x359f, 0x3b0b, 0x3a28, 0x34b4, 0x3979, 0x3346, 0x3b9a, 0x391f, 0x3823, 0x350e, 0x3b34, 0x3202, 0x3a2b, 0x313e, 0x355b, 0x37fb, 0x3ac1, 0x36ac, 0x2452, 0x2711, 0x360d, 0x34b7, 0x3af8, 0x2b80, 0x3621, 0x3950, 0x3824, 0x3578, 0x3900, 0x2ac0, 0x38c6, 0x39e1, 0x3565, 0x348f, 0x32d5, 0x388c, 0x38c0, 0x30e3, 0x3738, 0x3bbb, 0x3b46, 0x3b6e, 0x3bd1, 0x3b3d, 0x2d5b, 0x3acd, 0x3a67, 0x35f0, 0x3956, -0x39dd, 0x3be7, 0x3468, 0x2fb1, 0x3b73, 0x348b, 0x37a8, 0x2c37, 0x3b32, 0x375a, 0x3a14, 0x353d, 0x371f, 0x3b1b, 0x3b62, 0x3aaa, 0x39e8, 0x32d1, 0x3b3e, 0x3b74, 0x337c, 0x383e, 0x2d50, 0x3bc2, 0x33f5, 0x330f, 0x3b93, 0x3552, 0x3842, 0x37b5, 0x3918, 0x3654, 0x38a6, 0x2863, 0x3b0c, 0x38e8, 0x3b18, 0x28d3, 0x3b95, 0x3ad8, 0x38d1, 0x39ac, 0x31fb, 0x396b, 0x3b8f, 0x3818, 0x2d54, 0x3bd6, 0x340f, 0x3a89, 0x3192, 0x2cff, 0x3a00, 0x3680, 0x3843, 0x353a, 0x3591, 0x320f, 0x380e, 0x3709, 0xca6, 0x3783, 0x2f2b, 0x2ca1, 0x3885, 0x3391, 0x2c3b, 0x3933, 0x3812, 0x363e, 0x39b5, 0x39d8, 0x3a4b, 0x3951, 0x38b6, 0x399a, 0x318f, 0x2c20, 0x3925, 0x37cc, 0x3795, 0x38b8, 0x3184, 0x3961, 0x376a, 0x302b, 0x319e, 0x3b7d, 0x29a8, 0x3ae9, 0x313d, 0x3b7c, 0x3b7a, 0x3729, 0x3455, 0x2da3, -0x355c, 0x351e, 0x39d5, 0x3bf8, 0x3b11, 0x338f, 0x3990, 0x34cd, 0x3378, 0x2cbc, 0x3948, 0x39ab, 0x3be7, 0x3b59, 0x38e2, 0x2d9f, 0x378b, 0x385b, 0x31e4, 0x35ed, 0x3b0e, 0x3915, 0x3984, 0x3a44, 0x3869, 0x39f7, 0x3239, 0x3a8b, 0x36fb, 0x3081, 0x3ac3, 0x3b0e, 0x3104, 0x2078, 0x3962, 0x29bc, 0x3bb8, 0x3985, 0x3a56, 0x3648, 0x3a7d, 0x3ad3, 0x34d9, 0x3bb5, 0x38d9, 0x39b6, 0x3a2f, 0x3767, 0x3a56, 0x3620, 0x394d, 0x2d7c, 0x322a, 0x3899, 0x3a53, 0x3353, 0x383e, 0x316e, 0x348d, 0x3af5, 0x3a16, 0x3804, 0x3418, 0x3b1a, 0x3be6, 0x3166, 0x2911, 0x3656, 0x3acd, 0x392e, 0x3112, 0x3968, 0x37b7, 0x3af6, 0x38dd, 0x36b4, 0x3444, 0x3be7, 0x3991, 0x375f, 0x38da, 0x315a, 0x3684, 0x21a4, 0x38f4, 0x3860, 0x3935, 0x3b0f, 0x3b40, 0x37b6, 0x35b3, 0x3476, 0x35e9, 0x38ad, 0x3b82, 0x2964, -0x3880, 0x3844, 0x3615, 0x39d0, 0x3310, 0x306b, 0x329d, 0x338a, 0x2f84, 0x3a43, 0x300b, 0x3a47, 0x3821, 0x3b60, 0x387a, 0x3301, 0x3046, 0x351a, 0x3711, 0x38ec, 0x33a1, 0x376e, 0x39da, 0x3aae, 0x3877, 0x3960, 0x38ef, 0x3412, 0x3bbd, 0x3b24, 0x39e5, 0x355d, 0x3ab6, 0x2de8, 0x3ab5, 0x34a8, 0x3856, 0x32b4, 0x3673, 0x3a8b, 0x2e18, 0x3035, 0x3823, 0x38e7, 0x398e, 0x3743, 0x36e4, 0x381c, 0x3893, 0x3ae2, 0x331f, 0x3bdb, 0x34ae, 0x3a85, 0x277f, 0x342f, 0x38da, 0x3b62, 0x393a, 0x26bc, 0x3563, 0x39ce, 0x38e1, 0x395a, 0x3698, 0x3907, 0x30ed, 0x3536, 0x3925, 0x3bc8, 0x30ee, 0x38c2, 0x351d, 0x306e, 0x3952, 0x327f, 0x3a90, 0x3875, 0x337f, 0x3ab1, 0x342c, 0x39e7, 0x3be5, 0x33a6, 0x39af, 0x36ab, 0x2bca, 0x3984, 0x3a01, 0x319e, 0x3904, 0x3b78, 0x3785, 0x3a75, 0x3ace, 0x39c2, -0x3a6e, 0x39c8, 0x3b65, 0x342b, 0x3491, 0x320a, 0x3a81, 0x1f58, 0x3af6, 0x3881, 0x35d6, 0x389c, 0x3a23, 0x336f, 0x36ad, 0x39ab, 0x3062, 0x37fc, 0x317b, 0x3870, 0x3add, 0x3a7f, 0x37fe, 0x340b, 0x3211, 0x3944, 0x3714, 0x3806, 0x3bce, 0x3441, 0x3781, 0x397e, 0x391c, 0x3182, 0x31ac, 0x3456, 0x38f3, 0x3b15, 0x3b76, 0x3bf1, 0x3971, 0x3601, 0x318d, 0x34f2, 0x3a78, 0x35f5, 0x35c7, 0x354f, 0x3570, 0x36c5, 0x39fc, 0x35cd, 0x380e, 0x3606, 0x39c0, 0x352c, 0x3112, 0x3b6b, 0x355c, 0x3977, 0x328f, 0x2d34, 0x3abb, 0x3942, 0x1cba, 0x367a, 0x3aa6, 0x341f, 0x383f, 0x3a9a, 0x3960, 0x358f, 0x2dce, 0x21ac, 0x3bef, 0x3bca, 0x3bdb, 0x3967, 0x38aa, 0x39c1, 0x3b5b, 0x3185, 0x352c, 0x388a, 0x3893, 0x3a70, 0x34e4, 0x38e2, 0x31ba, 0x34d8, 0x32b5, 0x3aed, 0x3802, 0x2f06, 0x36d9, 0x3493, -0x3a09, 0x2994, 0x2e77, 0x3ae8, 0x3bc6, 0x3ace, 0x3926, 0x35b6, 0x326a, 0x3079, 0x3769, 0x28d1, 0x3b41, 0x357b, 0x3aed, 0x34cd, 0x3361, 0x2b6a, 0x3bc8, 0x2115, 0x3b73, 0x371f, 0x3b10, 0x2d39, 0x3092, 0x3264, 0x39df, 0x34c1, 0x2a04, 0x3a86, 0x306c, 0x33bf, 0x37dd, 0x3b17, 0x2f12, 0x3676, 0x3991, 0x3a7a, 0x3bb9, 0x3a80, 0x3441, 0x3592, 0x358d, 0x39dc, 0x31d3, 0x3887, 0x30f5, 0x3855, 0x3be6, 0x3b49, 0x3a7f, 0x3a6c, 0x2de5, 0x269d, 0x37e8, 0x3b49, 0x3026, 0x318b, 0x35e1, 0x39ba, 0x3a34, 0x3a43, 0x35a4, 0x34dd, 0x3918, 0x3a6a, 0x3780, 0x38d0, 0x3b78, 0x3b3e, 0x23b9, 0x37d9, 0x2b95, 0x3619, 0x3377, 0x2df7, 0x3b1e, 0x36de, 0x368b, 0x3bc4, 0x22d2, 0x3730, 0x30cf, 0x379d, 0x3824, 0x37fe, 0x39ba, 0x28c6, 0x36d3, 0x3587, 0x3aaa, 0x3155, 0x3a2d, 0x26ff, 0x2ffb, 0x3a19, -0x31b1, 0x302e, 0x2eba, 0x31f0, 0x3ba8, 0x3510, 0x243a, 0x30a4, 0x3638, 0x3b45, 0x2954, 0x3530, 0x39bc, 0x3944, 0x3951, 0x3026, 0x368f, 0x38e4, 0x36ce, 0x3b31, 0x38e5, 0x3471, 0x3af0, 0x3acf, 0x3842, 0x3be1, 0x319c, 0x2f2d, 0x3490, 0x3bec, 0x3b40, 0x3837, 0x3b38, 0x37fb, 0x3887, 0x383e, 0x382e, 0x31bd, 0x3ae1, 0x3a96, 0x3814, 0x37e0, 0x279d, 0x3363, 0x2ba9, 0x312b, 0x3a46, 0x3617, 0x3a0d, 0x2817, 0x3a37, 0x3981, 0x2d54, 0x3437, 0x3959, 0x3151, 0x3bc2, 0x39c9, 0x3aa3, 0x2d25, 0x3976, 0x3a2b, 0x3acd, 0x3a43, 0x3a9e, 0x39a1, 0x3914, 0x37ac, 0x3702, 0x382c, 0x38d9, 0x318c, 0x210a, 0x2c14, 0x34e2, 0x3a22, 0x2861, 0x3bc6, 0x1265, 0x3b43, 0x332e, 0x3992, 0x3330, 0x3a50, 0x3b38, 0x3aad, 0x33ce, 0x39a9, 0x33be, 0x387d, 0x3ade, 0x3a94, 0x3a56, 0x3ae4, 0x38a9, 0x1ace, -0x3551, 0x3ad8, 0x37c2, 0x3b00, 0x3b8d, 0x36d9, 0x3baa, 0x38bb, 0x34df, 0x3710, 0x3599, 0x3b7b, 0x2fea, 0x385e, 0x2dd8, 0x2e4e, 0x394d, 0x208a, 0x350b, 0x3876, 0x2df7, 0x34f4, 0x3b4c, 0x386d, 0x3260, 0x3b9d, 0x3343, 0x383f, 0x3bf4, 0x333b, 0x3bde, 0x3bd3, 0x392f, 0x3a2d, 0x3bdd, 0x341e, 0x3b13, 0x2b1c, 0x3b34, 0x2bb7, 0x2a93, 0x39c2, 0x3634, 0x358c, 0x3ba9, 0x3231, 0x3a0d, 0x3bc7, 0x3813, 0x2814, 0x3a1b, 0x3b03, 0x2e0e, 0x3616, 0x383a, 0x3578, 0x3a1f, 0x3685, 0x303c, 0x34a7, 0x3bad, 0x3548, 0x2380, 0x364f, 0x36ac, 0x28f8, 0x3a74, 0x34e2, 0x392e, 0x3409, 0x30e5, 0x340f, 0x3581, 0x36a3, 0x3366, 0x35f1, 0x30c4, 0x374f, 0x3921, 0x3aec, 0x3881, 0x2b48, 0x38e7, 0x31ce, 0x3626, 0x3b4b, 0x3b9f, 0x34cd, 0x313e, 0x379e, 0x39a6, 0x38cf, 0x38e3, 0x3031, 0x398f, 0x3bbc, -0x3a15, 0x3737, 0x361a, 0x3b25, 0x3992, 0x350a, 0x3698, 0x37de, 0x3a78, 0x37f5, 0x36d2, 0x3a12, 0x348e, 0x3923, 0x352f, 0x3b28, 0x3989, 0x39d8, 0x3b7b, 0x37cf, 0x3bfd, 0x3143, 0x31f5, 0x36a2, 0x3ae8, 0x3b3d, 0x3aab, 0x320e, 0x2ecc, 0x368f, 0x29c4, 0x36d0, 0x3a8c, 0x35c1, 0x2daa, 0x3128, 0x3b96, 0x388c, 0x3786, 0x349a, 0x390b, 0x2843, 0x381f, 0x2d05, 0x31ee, 0x3976, 0x3722, 0x368a, 0x3899, 0x3b64, 0x3b84, 0x3ae4, 0x3135, 0x3838, 0x387c, 0x2636, 0x2cd7, 0x3bcd, 0x39a6, 0x3ac6, 0x34c3, 0x364d, 0x384b, 0x2c55, 0x34b6, 0x201f, 0x38de, 0x2fc0, 0x389c, 0x381b, 0x36a8, 0x372f, 0x2b5c, 0x3491, 0x30d7, 0x38d2, 0x3893, 0x33a0, 0x33c8, 0x3405, 0x3490, 0x387d, 0x3411, 0x3907, 0x3bc0, 0x3aa9, 0x3023, 0x395c, 0x3b10, 0x3b8e, 0x3791, 0x3b17, 0x3980, 0x3b13, 0x336a, 0x354d, -0x39d9, 0x35f5, 0x3034, 0x300f, 0x38e5, 0x395c, 0x3394, 0x392f, 0x390a, 0x2567, 0x3151, 0x3861, 0x3a84, 0x3759, 0x382b, 0x3185, 0x359b, 0x3a6b, 0x3927, 0x3b6c, 0x39ed, 0x2cc3, 0x34bc, 0x389f, 0x3617, 0x335f, 0x3a9e, 0x35c0, 0x378c, 0x38e7, 0x2d21, 0x2ec0, 0x3874, 0x3af1, 0x36c6, 0x3b7e, 0x364f, 0x386e, 0x34f3, 0x2761, 0x386e, 0x3ac9, 0x308e, 0x3ad6, 0x3194, 0x35f7, 0x31d0, 0x3a36, 0x34d6, 0x36b0, 0x34bf, 0x38cb, 0x2f2c, 0x3945, 0x325c, 0x39d0, 0x1fce, 0x3a04, 0x3118, 0x3a0c, 0x3a56, 0x3794, 0x3744, 0x3ad3, 0x36c3, 0x2700, 0x392c, 0x34fa, 0x3b4d, 0x2649, 0x393c, 0x3967, 0x37f7, 0x369e, 0x3ac1, 0x39b3, 0x39a1, 0x36a4, 0x3645, 0x39cc, 0x3af9, 0x31e3, 0x237a, 0x35d3, 0x35fa, 0x3b53, 0x3872, 0x3bcc, 0x3a9c, 0x3ba9, 0x34e9, 0x34ec, 0x3b31, 0x3b09, 0x31d7, 0x3a45, -0x33ab, 0x38b0, 0x384c, 0x3a48, 0x3340, 0x390f, 0x340e, 0x3937, 0x2ceb, 0x3b0d, 0x3b15, 0x3979, 0x3884, 0x376b, 0x3b79, 0x39d2, 0x36fb, 0x3442, 0x3994, 0x35c1, 0x3b6f, 0x3918, 0x3bea, 0x37f1, 0x3b25, 0x3bd5, 0x3ab4, 0x3604, 0x3593, 0x39fc, 0x3893, 0x37f7, 0x3a56, 0x3118, 0x3444, 0x36ac, 0x315a, 0x2eaa, 0x3a55, 0x3bea, 0x372f, 0x3b79, 0x38fa, 0x32a9, 0x2a8d, 0x326b, 0x39dd, 0x2c6e, 0x3a63, 0x39a8, 0x34dd, 0x2fa8, 0x3afa, 0x3ab1, 0x3854, 0x2e58, 0x3a7b, 0x39e6, 0x3489, 0x3631, 0x3826, 0x3ad2, 0x384d, 0x3565, 0x3a21, 0x3beb, 0x334d, 0x3603, 0x2de5, 0x31fa, 0x3111, 0x3455, 0x390c, 0x38aa, 0x3822, 0x2e75, 0x36cb, 0x3bb0, 0x38d7, 0x386a, 0x336f, 0x3150, 0x395a, 0x3219, 0x39f2, 0x3675, 0x2b46, 0x39d6, 0x2e2f, 0x3752, 0x3b23, 0x3670, 0x3b64, 0x39f4, 0x3bec, 0x3848, -0x389e, 0x3214, 0x3618, 0x32ca, 0x333b, 0x2fe6, 0x2cf6, 0x36f3, 0x3748, 0x380b, 0x3b5f, 0x3b4e, 0x2dce, 0x2474, 0x3a17, 0x320e, 0x38ac, 0x3b44, 0x3595, 0x3bd7, 0x3896, 0x32ea, 0x37d0, 0x34a8, 0x31f2, 0x3a51, 0x3b6c, 0x3753, 0x3abd, 0x3b26, 0x24a0, 0x32fb, 0x3a3a, 0x3bf9, 0x2fc5, 0x390d, 0x3a42, 0x331d, 0x3b2e, 0x370e, 0x32d3, 0x3b26, 0x3b7f, 0x2d64, 0x39ca, 0x3405, 0x3962, 0x36c0, 0x2ffe, 0x3b76, 0x3811, 0x3287, 0x34d7, 0x3beb, 0x3a37, 0x3756, 0x390e, 0x398b, 0x3160, 0x3bf9, 0x3a09, 0x38ee, 0x382a, 0x366e, 0x3836, 0x3b95, 0x3b30, 0x3bd4, 0x1c94, 0x33c6, 0x3391, 0x3b2c, 0x3b07, 0x37b6, 0x3499, 0x3942, 0x2dc7, 0x357d, 0x380f, 0x32e5, 0x3628, 0x386a, 0x3b66, 0x395b, 0x3611, 0x3bef, 0x3935, 0x34c3, 0x3354, 0x39ab, 0x3b9e, 0x34f5, 0x358b, 0x326f, 0x3952, 0x359f, -0x39c7, 0x399f, 0x2d59, 0x379e, 0x33fd, 0x3b7a, 0x327e, 0x392d, 0x3b6c, 0x34b5, 0x3a50, 0x365b, 0x392f, 0x3b31, 0x3a20, 0x3131, 0x3a43, 0x292e, 0x3a0c, 0x3bb1, 0x3bf6, 0x29e8, 0x32d4, 0x3b07, 0x3189, 0x32d5, 0x3689, 0x3a3e, 0x3857, 0x281c, 0x2b7b, 0x3545, 0x35a9, 0x3aa0, 0x2cf4, 0x3356, 0x3b2f, 0x3845, 0x3a9d, 0x38fa, 0x285c, 0x3aef, 0x387a, 0x2121, 0x376d, 0x30bb, 0x38b8, 0x3ad4, 0x3bf3, 0x3219, 0x398e, 0x2dc8, 0x31ae, 0x38b2, 0x34f9, 0x3846, 0x3bb0, 0x3bc9, 0x2fd2, 0x3403, 0x34c1, 0x3043, 0x3823, 0x38f1, 0x384a, 0x396a, 0x37c2, 0x3839, 0x3441, 0x3821, 0x2774, 0x380f, 0x39e4, 0x3832, 0x375b, 0x3a10, 0x3894, 0x2f6b, 0x3586, 0x34fe, 0x3bad, 0x3856, 0x35c6, 0x38ad, 0x3835, 0x368d, 0x39a1, 0x3736, 0x349e, 0x32c2, 0x2df5, 0x34c5, 0x3ba0, 0x349b, 0x35af, 0x35aa, -0x3a17, 0x3696, 0x3169, 0x3433, 0x3800, 0x38f3, 0x37f8, 0x376a, 0x2ec7, 0x3bad, 0x373f, 0x281c, 0x3968, 0x3403, 0x2c9e, 0x3b1f, 0x3003, 0x35cc, 0x3810, 0x367c, 0x3a68, 0x26e9, 0x34e2, 0x3902, 0x2edb, 0x3478, 0x2a6a, 0x3a45, 0x3867, 0x38c5, 0x3a61, 0x388c, 0x3738, 0x34be, 0x35e6, 0x36b3, 0x325c, 0x35c6, 0x384e, 0x358d, 0x3894, 0x31c8, 0x3820, 0x363b, 0x380e, 0x385f, 0x38ac, 0x36a3, 0x31da, 0x3b46, 0x3715, 0x37ec, 0x386b, 0x35c7, 0x3100, 0x3a7a, 0x3504, 0x3810, 0x3a22, 0x36a9, 0x3995, 0x3b0c, 0x37f0, 0x2d4e, 0x36c4, 0x347e, 0x39dc, 0x3a2a, 0x3951, 0x3bca, 0x3bf5, 0x3bb3, 0x3b46, 0x3afa, 0x311c, 0x3929, 0x3291, 0x372f, 0x306d, 0x2843, 0x391a, 0x30c4, 0x3a5b, 0x3be7, 0x3924, 0x38ae, 0x3734, 0x32bd, 0x3b39, 0x39f6, 0x3aaa, 0x327a, 0x3045, 0x383c, 0x3303, 0x352c, -0x3bcd, 0x3baa, 0x3116, 0x3ad3, 0x39bc, 0x3aee, 0x36b3, 0x3a06, 0x3408, 0x3971, 0x3545, 0x38aa, 0x3a21, 0x3743, 0x367e, 0x3ac3, 0x3a54, 0x2cad, 0x3820, 0x39eb, 0x398a, 0x34a9, 0x3b95, 0x3a34, 0x32bb, 0x3bda, 0x3704, 0x3aa2, 0x39a3, 0x3953, 0x38ed, 0x3821, 0x39eb, 0x36b4, 0x38b5, 0x382e, 0x3753, 0x3203, 0x3796, 0x2e26, 0x303a, 0x3895, 0x39a3, 0x3a1f, 0x3ad6, 0x302f, 0x376d, 0x347f, 0x32fc, 0x382d, 0x39fa, 0x2d39, 0x32b2, 0x2fef, 0x3044, 0x3497, 0x39a9, 0x3994, 0x346d, 0x38a8, 0x3487, 0x3431, 0x39a7, 0x375a, 0x3935, 0x2eaf, 0x2ff3, 0x3467, 0x35cf, 0x3738, 0x2df4, 0x3b14, 0x3978, 0x36a8, 0x3406, 0x3aad, 0x3169, 0x355a, 0x3a49, 0x2e40, 0x34a4, 0x34ac, 0x308a, 0x3546, 0x3b34, 0x3514, 0x3aaf, 0x3707, 0x3999, 0x3a99, 0x2cc7, 0x326d, 0x3a95, 0x3bb1, 0x315b, 0x3989, -0x39d7, 0x3684, 0x39f7, 0x3963, 0x31e0, 0x3a96, 0x3492, 0x3b63, 0x37fd, 0x3b38, 0x37ba, 0x34fd, 0x365b, 0x3496, 0x3a38, 0x3906, 0x3bed, 0x39d9, 0x389b, 0x34eb, 0x3332, 0x2b11, 0x31c8, 0x3889, 0x3810, 0x30b7, 0x28b6, 0x29d1, 0x3420, 0x3222, 0x387e, 0x3a70, 0x2cf8, 0x3b07, 0x304f, 0x3998, 0x360b, 0x3b8b, 0x3434, 0x38ee, 0x304f, 0x39e7, 0x3685, 0x3981, 0x3a46, 0x39af, 0x387a, 0x36e7, 0x3a5e, 0x33ef, 0x3a38, 0x32d1, 0x39f0, 0x345c, 0x36af, 0x3416, 0x3be9, 0x23fa, 0x3b3a, 0x3b59, 0x3732, 0x3578, 0x3bd8, 0x3a83, 0x387d, 0x3ad8, 0x394e, 0x3431, 0x3748, 0x3809, 0x3ac3, 0x3a1a, 0x38e0, 0x37ca, 0x2e29, 0x386d, 0x2e50, 0x360f, 0x31e4, 0x3715, 0x3986, 0x35a7, 0x3bd1, 0x3ae4, 0x3432, 0x3750, 0x38e8, 0x3926, 0x3b12, 0x3460, 0x358f, 0x3aab, 0x3906, 0x355a, 0x27fc, 0x3a2f, -0x386f, 0x3b47, 0x309b, 0x3098, 0x3b47, 0x35a2, 0x3677, 0x39a2, 0x35a4, 0x389e, 0x3b5f, 0x37e9, 0x32d3, 0x30cb, 0x2cc7, 0x2f1d, 0x392f, 0x3bfb, 0x392b, 0x3909, 0x3a3a, 0x38f8, 0x2e08, 0x3962, 0x358f, 0x37ea, 0x34db, 0x3bc8, 0x38ca, 0x3ba2, 0x3a0b, 0x39ba, 0x369c, 0x2cce, 0x3988, 0x3a39, 0x3be5, 0x2a39, 0x35c1, 0x3643, 0x37c9, 0x35bf, 0x352f, 0x3a7f, 0x350f, 0x330f, 0x3a34, 0x36aa, 0x38da, 0x2fc0, 0x387b, 0x37b7, 0x34a8, 0x396b, 0x39f3, 0x37f4, 0x3649, 0x3959, 0x3024, 0x373f, 0x38fd, 0x38c3, 0x39d3, 0x340b, 0x38cb, 0x30c4, 0x3877, 0x3af4, 0x28ef, 0x3a81, 0x2ff9, 0x3992, 0x2902, 0x3b16, 0x3590, 0x3a95, 0x3708, 0x3a63, 0x1ba7, 0x347d, 0x3a3e, 0x3bd4, 0x3946, 0x2da1, 0x38df, 0x396d, 0x39c9, 0x3810, 0x39de, 0x3b69, 0x30ad, 0x3748, 0x3678, 0x3a92, 0x39b8, 0x30c9, -0x3990, 0x2cd8, 0x303c, 0x2c03, 0x35c0, 0x3b10, 0x39b6, 0x35f6, 0x3bb8, 0x3733, 0x320f, 0x3a45, 0x3457, 0x392e, 0x3462, 0x36f3, 0x32d4, 0x3025, 0x24ba, 0x3826, 0x37a7, 0x3714, 0x38d7, 0x3630, 0x3a29, 0x3582, 0x3af6, 0x2639, 0x3b0e, 0x3872, 0x39c2, 0x2e2e, 0x396d, 0x3b99, 0x34b3, 0x3551, 0x3162, 0x3a7d, 0x35f0, 0x351b, 0x3661, 0x3ad0, 0x39cf, 0x25f1, 0x3987, 0x3296, 0x365f, 0x3902, 0x38fd, 0x3745, 0x3990, 0x3972, 0x3317, 0x3a87, 0x3985, 0x392d, 0x36a3, 0x34f1, 0x396f, 0x3a7a, 0x3465, 0x3362, 0x3b0b, 0x208d, 0x37e0, 0x3ade, 0x31dc, 0x3854, 0x34cc, 0x3874, 0x311e, 0x38ec, 0x35e2, 0x2de6, 0x3219, 0x38b0, 0x3be3, 0x3381, 0x3b39, 0x38e6, 0x3b20, 0x3bea, 0x38e2, 0x38d6, 0x39e6, 0x2db4, 0x3884, 0x1cb8, 0x176a, 0x2eba, 0x3bb1, 0x37fe, 0x371a, 0x3b1c, 0x3402, 0x3462, -0x3632, 0x2a7c, 0x3897, 0x32c6, 0x34d7, 0x3ad2, 0x3b38, 0x3aa2, 0x2c56, 0x392e, 0x376a, 0x3356, 0x36b3, 0x3b8d, 0x2fc0, 0x3b16, 0x38dd, 0x2f21, 0x3852, 0x3aeb, 0x3aad, 0x379e, 0x32c9, 0x324b, 0x3b1f, 0x382a, 0x3929, 0x2cbe, 0x3867, 0x3651, 0x389b, 0x2fd3, 0x3809, 0x3ade, 0x38ba, 0x3a92, 0x398d, 0x38c2, 0x3061, 0x37f4, 0x3ab9, 0x3a17, 0x2d4b, 0x3255, 0x3656, 0x3884, 0x3b75, 0x3b1a, 0x3a56, 0x353d, 0x2fab, 0x3a0d, 0x3180, 0x3bd5, 0x3ac0, 0x3298, 0x3a5f, 0x3009, 0x39d4, 0x3b69, 0x39ad, 0x3b16, 0x36b3, 0x2c5b, 0x3ab1, 0x39d1, 0x30bc, 0x36ba, 0x2f6d, 0x3817, 0x3b4c, 0x3b31, 0x39d1, 0x348b, 0x3b82, 0x3032, 0x2586, 0x3bbf, 0x2dea, 0x2f5f, 0x383a, 0x3bb8, 0x3a4c, 0x3421, 0x33f7, 0x3ab6, 0x398e, 0x3335, 0x3a1c, 0x37dd, 0x2fc9, 0x3824, 0x3463, 0x3bed, 0x3b6c, 0x313b, -0x3b2d, 0x3426, 0x335b, 0x3952, 0x347e, 0x3ba0, 0x3bbb, 0x39ec, 0x3b16, 0x3561, 0x3a65, 0x3196, 0x3bd4, 0x30b6, 0x3891, 0x3749, 0x3a0b, 0x3a40, 0x3485, 0x3b5d, 0x3b0d, 0x33b5, 0x3812, 0x37be, 0x3a0a, 0x38c9, 0x38d2, 0x398f, 0x3235, 0x3a91, 0x2b81, 0x26f6, 0x2d3a, 0x1cd9, 0x2ea1, 0x3970, 0x3a5b, 0x30e8, 0x2a5f, 0x390b, 0x38f4, 0x396c, 0x3b50, 0x3b24, 0x35dd, 0x396c, 0x33c7, 0x2c40, 0x397b, 0x390b, 0x348f, 0x38df, 0x38fb, 0x3be2, 0x3122, 0x3bb5, 0x2c56, 0x322f, 0x3836, 0x1ee5, 0x3b35, 0x359e, 0x3966, 0x39b3, 0x3163, 0x2902, 0x38b4, 0x3ace, 0x34ed, 0x3add, 0x3428, 0x369b, 0x3116, 0x3a77, 0x34f6, 0x39c9, 0x3263, 0x359d, 0x352c, 0x3b0b, 0x38c9, 0x31dc, 0x373d, 0x2ad4, 0x3452, 0x3156, 0x360d, 0x2d93, 0x38d0, 0x3978, 0x3901, 0x36f4, 0x3b26, 0x2e42, 0x3983, 0x3bce, -0x3990, 0x37f3, 0x2645, 0x3938, 0x3868, 0x3a22, 0x3a6a, 0x3b78, 0x3b4e, 0x371f, 0x39fb, 0x2e11, 0x38b8, 0x36d2, 0x3468, 0x34f2, 0x39bf, 0x3b8e, 0x3710, 0x348b, 0x38d6, 0x3aae, 0x35f0, 0x3ae0, 0x3ba8, 0x3857, 0x39c1, 0x3a03, 0x35b3, 0x3a2c, 0x3a7b, 0x350c, 0x30f8, 0x3830, 0x25aa, 0x24b3, 0x380b, 0x3879, 0x3929, 0x354d, 0x38b4, 0x2fea, 0x34bc, 0x3ba6, 0x3832, 0x3a2a, 0x387b, 0x343f, 0x3114, 0x2edb, 0x36ec, 0x3a24, 0x32ea, 0x2f80, 0x3675, 0x2df4, 0x39ce, 0x37ea, 0x3091, 0x3766, 0x38e3, 0x37d4, 0x39bc, 0x3425, 0x3336, 0x38aa, 0x34b9, 0x3bce, 0x37dc, 0x3af9, 0x39a9, 0x3b3e, 0x386a, 0x392b, 0x3942, 0x338a, 0x36f9, 0x36f3, 0x3b56, 0x33e2, 0x3bd1, 0x38aa, 0x3337, 0x3a61, 0x3ac5, 0x377c, 0x3819, 0x2ff3, 0x3870, 0x3b2c, 0x3925, 0x38cd, 0x3b0e, 0x3719, 0x3a2a, 0x326d, -0x32b3, 0x35f8, 0x3b6e, 0x3bde, 0x3baf, 0x3027, 0x3433, 0x3819, 0x2eab, 0x3b4f, 0x34a1, 0x34f8, 0x393a, 0x3a09, 0x38f7, 0x3489, 0x37ae, 0x3bfa, 0x2dc1, 0x3468, 0x26f5, 0x343f, 0x3b4e, 0x39b2, 0x339a, 0x3441, 0x3b51, 0x38dc, 0x3914, 0x2699, 0x3339, 0x2f3a, 0x38f1, 0x3a57, 0x2e7e, 0x36a4, 0x2cf6, 0x31e6, 0x3802, 0x3a75, 0x39f5, 0x38f5, 0x3327, 0x38d5, 0x36b4, 0x3b6c, 0x2279, 0x3b08, 0x39e9, 0x380f, 0x3b8c, 0x3432, 0x39c9, 0x343d, 0x38ad, 0x3be5, 0x3602, 0x3bc4, 0x3952, 0x350a, 0xc4c, 0x267d, 0x35e1, 0x3bdb, 0x3937, 0x348d, 0x3768, 0x3a78, 0x3717, 0x3342, 0x34f0, 0x36db, 0x2788, 0x3b52, 0x2acf, 0x3bef, 0x3899, 0x3279, 0x38e4, 0x3bc5, 0x38ed, 0x3369, 0x3652, 0x34b4, 0x378a, 0x3bf9, 0x3a9d, 0x3841, 0x3a01, 0x3065, 0x35a4, 0x3b47, 0x376f, 0x35e0, 0x34f0, 0x396c, -0x3a1e, 0x354b, 0x390b, 0x3165, 0x3435, 0x329e, 0x386e, 0x36ba, 0x2046, 0x385b, 0x3493, 0x3537, 0x2e29, 0x3bda, 0x3b0c, 0x35e0, 0x34b8, 0x25c1, 0x3698, 0x2ef1, 0x3516, 0x330e, 0x387a, 0x37eb, 0x3011, 0x2658, 0x350a, 0x393c, 0x2c1c, 0x2dbc, 0x25f3, 0x376f, 0x3a1c, 0x3112, 0x2c6d, 0x2e2a, 0x3a3d, 0x3ba0, 0x391a, 0x36ac, 0x3876, 0x32b9, 0x3ad9, 0x36f8, 0x39aa, 0x3095, 0x348d, 0x39a6, 0x35be, 0x3747, 0x31e9, 0x33b9, 0x31c0, 0x3926, 0x2d3f, 0x3b32, 0x3412, 0x3b52, 0x29eb, 0x333e, 0x3af4, 0x3974, 0x36ab, 0x3ba6, 0x3aed, 0x3807, 0x2b53, 0x33b0, 0x35d7, 0x37aa, 0x3838, 0x3478, 0x2f9d, 0x3b1b, 0x3b31, 0x30fb, 0x30fa, 0x38d7, 0x329f, 0x372b, 0x31b1, 0x38a9, 0x3932, 0x315d, 0x2d85, 0x374b, 0x3aa3, 0x3621, 0x2da1, 0x373a, 0x386d, 0x38ba, 0x3a4e, 0x1eea, 0x3887, 0x3438 +uint16_t x_inp_2D [24][32] = { +0x2153, 0x3bb5, 0x3896, 0x365f, 0x2483, 0x3518, 0x2dd1, 0x3bca, 0x397b, 0x29b1, 0x3705, 0x36c8, 0x398b, 0x3661, 0x2f05, 0x365a, 0x3bf9, 0x34df, 0x363b, 0x38d9, 0x39c6, 0x3abb, 0x3952, 0x38f2, 0x392d, 0x3b3e, 0x2afb, 0x3a9d, 0x353b, 0x3b73, 0x3a01, 0x3679, +0x3934, 0x397d, 0x2904, 0x3822, 0x3462, 0x3b44, 0x39e9, 0x28be, 0x331e, 0x3a1d, 0x39e5, 0x34da, 0x3a19, 0x3906, 0x1d35, 0x3871, 0x31e7, 0x3b29, 0x325d, 0x3797, 0x2b2f, 0x38b4, 0x232f, 0x38aa, 0x3aca, 0x316f, 0x3811, 0x3950, 0x32ea, 0x3bc7, 0x382c, 0x38a2, +0x29ce, 0x3afa, 0x3a39, 0x2ccc, 0x39fd, 0x3b3d, 0x384a, 0x3a35, 0x3802, 0x366a, 0x37ec, 0x3598, 0x3bf8, 0x3a85, 0x3a1b, 0x386e, 0x3b4c, 0x39de, 0x38c2, 0x2f93, 0x3b4c, 0x39c4, 0x3b9e, 0x3844, 0x346d, 0x3bff, 0x32ce, 0x296d, 0x3130, 0x3b3d, 0x3b44, 0x369d, +0x3b13, 0x31ed, 0x330a, 0x3831, 0x34e7, 0x37b3, 0x331a, 0x3918, 0x32d3, 0x3995, 0x3991, 0x3919, 0x3a26, 0x385b, 0x2b76, 0x3a3b, 0x37f2, 0x26a7, 0x3225, 0x3b64, 0x28f0, 0x3456, 0x3822, 0x341e, 0x381a, 0x38d8, 0x2c11, 0x33be, 0x33ac, 0x353f, 0x3476, 0x3abc, +0x36ec, 0x3a1d, 0x39d3, 0x3821, 0x36ac, 0x3bce, 0x3ad2, 0x3616, 0x36a1, 0x2cb3, 0x38d2, 0x314f, 0x385c, 0x3b63, 0x3bb6, 0x2951, 0x372d, 0x2c42, 0x3823, 0x3883, 0x3872, 0x31ee, 0x36c5, 0x399a, 0x31b0, 0x3887, 0x3884, 0x3865, 0x3896, 0x36c3, 0x32e3, 0x346c, +0x3935, 0x3b50, 0x2b6d, 0x38cd, 0x388f, 0x3389, 0x395d, 0x31cd, 0x2efd, 0x3154, 0x2f35, 0x3444, 0x3293, 0x3b6b, 0x1bec, 0x3b69, 0x3bf3, 0x3611, 0x3508, 0x3742, 0x3a50, 0x3ab7, 0x3457, 0x38d3, 0x3344, 0x38e8, 0x33c0, 0x3668, 0x3bee, 0x3b21, 0x3727, 0x3121, +0x316c, 0x3288, 0x2d50, 0x2e74, 0x35d5, 0x37e2, 0x303d, 0x36af, 0x341f, 0x3436, 0x2df7, 0x399d, 0x30f4, 0x3aaf, 0x34e4, 0x2c2a, 0x3116, 0x34d3, 0x36ac, 0x35e3, 0x3760, 0x36e1, 0x3ad2, 0x3547, 0x38f4, 0x369c, 0x3ba9, 0x34f0, 0x3a39, 0x3b19, 0x36e6, 0x395d, +0x3be8, 0x3293, 0x3bfc, 0x3435, 0x2eb3, 0x3360, 0x3919, 0x3bed, 0x396a, 0x37fc, 0x3242, 0x384b, 0x38cb, 0x3b2c, 0x3b28, 0x28cf, 0x3828, 0x3855, 0x3ba9, 0x2fa7, 0x340b, 0x32f1, 0x3ada, 0x36fa, 0x31f5, 0x3436, 0x29d0, 0x33e6, 0x3232, 0x3bec, 0x3904, 0x2797, +0x3b81, 0x3bac, 0x38d2, 0x343d, 0x31af, 0x3b1e, 0x33fc, 0x3864, 0x3624, 0x3905, 0x2945, 0x3b52, 0x2d08, 0x3a17, 0x3b84, 0x3804, 0x3a24, 0x38a3, 0x3562, 0x3ae6, 0x3bba, 0x3a45, 0x3679, 0x31fa, 0x3994, 0x2c3d, 0x383f, 0x399d, 0x34f7, 0x360e, 0x35f3, 0x38f0, +0x38d4, 0x399a, 0x3a48, 0x3987, 0x3b54, 0x382c, 0x3210, 0x35ef, 0x36ca, 0x31b4, 0x3625, 0x371f, 0x37bd, 0x3680, 0x3a3a, 0x3ac0, 0x3bbf, 0x3bf5, 0x39f2, 0x29c2, 0x363e, 0x3a4e, 0x3596, 0x3b1b, 0x3459, 0x3669, 0x3aa1, 0x39c3, 0x3376, 0x390d, 0x2456, 0x39b5, +0x3a66, 0x3ad8, 0x3b51, 0x36aa, 0x32be, 0x3ac8, 0x392b, 0x3740, 0x3a48, 0x38f5, 0x3b2d, 0x3a5f, 0x2ff3, 0x366f, 0x39d3, 0x35e5, 0x3822, 0x38db, 0x3b8a, 0x34be, 0x2d33, 0x36dd, 0x3578, 0x3bdf, 0x2c7e, 0x39cf, 0x32ff, 0x35c9, 0x3970, 0x3bcb, 0x351e, 0x3956, +0x2c42, 0x3308, 0x377a, 0x361c, 0x39a0, 0x36c9, 0x2dcb, 0x3bf2, 0x3b5f, 0x33ee, 0x24c1, 0x2ce9, 0x3927, 0x305d, 0x3702, 0x3119, 0x35f9, 0x3855, 0x3374, 0x349b, 0x3bcf, 0x2dea, 0x34f0, 0x363f, 0x37da, 0x3a74, 0x35fc, 0x35fa, 0x316b, 0x3804, 0x37a7, 0x3986, +0x3073, 0x3aed, 0x31c7, 0x3844, 0x34a4, 0x387d, 0x3a20, 0x3037, 0x3a00, 0x3b70, 0x377f, 0x3686, 0x3b7e, 0x38b3, 0x32e3, 0x3323, 0x391e, 0x3228, 0x3930, 0x3997, 0x3a5e, 0x398b, 0x3512, 0x35b0, 0x365c, 0x325d, 0x3b61, 0x38b8, 0x39a4, 0x3423, 0x3bd7, 0x38af, +0x2d3d, 0x382d, 0x38ac, 0x26ca, 0x395e, 0x21a8, 0x3520, 0x386f, 0x3b95, 0x32c0, 0x3b84, 0x3a51, 0x3b4b, 0x31d2, 0x3747, 0x3b96, 0x3b40, 0x3535, 0x38d1, 0x3899, 0x3b00, 0x3827, 0x3ae3, 0x38c8, 0x3a07, 0x338d, 0x2e96, 0x3a46, 0x394a, 0x39de, 0x2951, 0x3a02, +0x3838, 0x2d45, 0x28c0, 0x3958, 0x3070, 0x2aa2, 0x3510, 0x38ce, 0x271c, 0x3440, 0x3954, 0x30bc, 0x3b35, 0x2f1d, 0x3afb, 0x2dae, 0x356f, 0x2e13, 0x3981, 0x326d, 0x3a28, 0x3a36, 0x3a95, 0x38cb, 0x38db, 0x3150, 0x2c9e, 0x34c5, 0x3adb, 0x3bdf, 0x38f2, 0x3994, +0x36f8, 0x31c0, 0x3a4f, 0x3825, 0x394b, 0x3a8b, 0x38ac, 0x3167, 0x2e2d, 0x3a93, 0x34f3, 0x37bd, 0x3b63, 0x2f2f, 0x3ae0, 0x3ad8, 0x34a8, 0x2e1c, 0x3890, 0x3705, 0x3b69, 0x3bc1, 0x28af, 0x3b36, 0x348b, 0x3111, 0x3a8d, 0x389c, 0x3916, 0x36dc, 0x3bae, 0x3874, +0x3593, 0x3638, 0x3018, 0x3a56, 0x38a3, 0x2ad4, 0x3a25, 0x38d7, 0x3864, 0x31c1, 0x28d1, 0x39c8, 0x37d6, 0x2c7f, 0x3ba5, 0x34b8, 0x3bef, 0x3b83, 0x3ab5, 0x3062, 0x38bc, 0x399c, 0x2ce4, 0x2f2c, 0x39bf, 0x2ed1, 0x385f, 0x37e0, 0x35ee, 0x397d, 0x3b0c, 0x3049, +0x39d5, 0x322e, 0x3936, 0x3747, 0x2e15, 0x3b41, 0x3874, 0x3bd0, 0x2c04, 0x3800, 0x375b, 0x3b2d, 0x38d8, 0x3a51, 0x3406, 0x38da, 0x38ba, 0x3497, 0x382e, 0x35fc, 0x39d4, 0x3775, 0x3b1e, 0x3813, 0x3649, 0x31af, 0x37bb, 0x334a, 0x3a6e, 0x3284, 0x26e0, 0x2e01, +0x2ebb, 0x344b, 0x3821, 0x381a, 0x385a, 0x2534, 0x3635, 0x2a92, 0x3b8c, 0x31f0, 0x3947, 0x3ac7, 0x3743, 0x3924, 0x39e4, 0x358f, 0x2b62, 0x392c, 0x3955, 0x3341, 0x3676, 0x38ac, 0x3957, 0x335b, 0x2ca2, 0x39ff, 0x37cb, 0x341f, 0x3ac9, 0x3b6c, 0x2f14, 0x34c3, +0x3018, 0x3169, 0x355b, 0x3624, 0x31ed, 0x379e, 0x3268, 0x309b, 0x35db, 0x3872, 0x3bdb, 0x34c7, 0x3408, 0x3359, 0x3920, 0x331f, 0x3866, 0x3af0, 0x2a1a, 0x39e0, 0x3b14, 0x34fa, 0x2d18, 0x3963, 0x35e8, 0x2539, 0x38f5, 0x37b3, 0x378f, 0x31b5, 0x3a6c, 0x3685, +0x3a06, 0x318a, 0x2934, 0x33c1, 0x3be8, 0x375b, 0x3860, 0x3543, 0x3702, 0x3951, 0x3677, 0x37ff, 0x2e27, 0x2e3a, 0x340f, 0x3817, 0x2f04, 0x357e, 0x3a1d, 0x2dd6, 0x252a, 0x3945, 0x162a, 0x3b19, 0x3a53, 0x35d2, 0x3a5d, 0x3474, 0x38e9, 0x374b, 0x387c, 0x1f1a, +0x38ac, 0x3291, 0x3393, 0x3b53, 0x3169, 0x3bca, 0x2f1a, 0x3551, 0x38a3, 0x28e3, 0x369d, 0x34a1, 0x38a8, 0x34c3, 0x3841, 0x390d, 0x3b13, 0x3282, 0x3a29, 0x3a78, 0x2df3, 0x3a37, 0x35f4, 0x35a6, 0x38e8, 0x3328, 0x3beb, 0x390b, 0x32dc, 0x34dc, 0x396d, 0x3a78, +0x39ba, 0x3a06, 0x2cdd, 0x3bc3, 0x2d43, 0x2992, 0x3663, 0x3a68, 0x2c3e, 0x394e, 0x2c9f, 0x380e, 0x37f5, 0x3557, 0x2873, 0x390f, 0x39e7, 0x3939, 0x3669, 0x385c, 0x3a68, 0x32c4, 0x2b04, 0x2d6d, 0x39d3, 0x3895, 0x331d, 0x3b59, 0x3463, 0x2b6a, 0x31de, 0x3296, +0x3aae, 0x3bcd, 0x345a, 0x3897, 0x374b, 0x3bd4, 0x38a2, 0x357f, 0x3402, 0x3a0c, 0x3507, 0x3865, 0x3a54, 0x3878, 0x3859, 0x383e, 0x32b5, 0x34ea, 0x328d, 0x38b6, 0x3464, 0x2f5b, 0x35ff, 0x3817, 0x2f24, 0x3533, 0x3b21, 0x37ba, 0x3837, 0x2e34, 0x3bad, 0x34bc }; \ No newline at end of file diff --git a/hwpe/redmule/inc/x_input.h b/hwpe/redmule/inc/x_input.h index 6295303..1e38d23 100644 --- a/hwpe/redmule/inc/x_input.h +++ b/hwpe/redmule/inc/x_input.h @@ -1,99 +1,27 @@ /* Header file generated by RedMulE Golden Model */ -uint16_t x_inp [9216] = { -0x3122, 0x369c, 0x39bd, 0x3b58, 0x3be0, 0x3a5a, 0x3416, 0x386c, 0x3a11, 0x350e, 0x38ab, 0x35ad, 0x35d9, 0x390f, 0x3565, 0x36b0, 0x3aad, 0x3a64, 0x3797, 0x368d, 0x35a6, 0x396f, 0x2a5e, 0x3a29, 0x38a7, 0x33a8, 0x3409, 0x3621, 0x3b02, 0x34a7, 0x3a94, 0x3819, 0x3695, 0x380a, 0x3acd, 0x396a, 0x395a, 0x3663, 0x3bbe, 0x3306, 0x3a4d, 0x3b0d, 0x3bc3, 0x30fa, 0x32ab, 0x31fd, 0x3bc9, 0x38ce, 0x3180, 0x3980, 0x34ec, 0x3a84, 0x3bc9, 0x3719, 0x3a76, 0x38ab, 0x3707, 0x3904, 0x33d9, 0x34d6, 0x3053, 0x3bd4, 0x2f03, 0x1dbf, 0x2e5f, 0x36fa, 0x191d, 0x3187, 0x223f, 0x384b, 0x36dc, 0x3549, 0x343f, 0x36d8, 0x36de, 0x31ff, 0x174e, 0x30d3, 0x3452, 0x3258, 0x30b1, 0x3127, 0x3840, 0x3991, 0x3b1b, 0x3a7c, 0x36ec, 0x2304, 0x3946, 0x3876, 0x3a5d, 0x3a76, 0x2f78, 0x3b01, 0x3934, 0x3bc4, -0x2b27, 0x3669, 0x38ce, 0x2cde, 0x38e1, 0x3abd, 0x2c4f, 0x3971, 0x3964, 0x3a9d, 0x38b9, 0x390f, 0x3475, 0x3b16, 0x38f0, 0x397e, 0x3996, 0x3223, 0x36c6, 0x3bfd, 0x3161, 0x3a70, 0x3961, 0x38e1, 0x2b2b, 0x32c1, 0x3683, 0x36bb, 0x381a, 0x3b92, 0x356a, 0x38c4, 0x38df, 0x3a7b, 0x3b3a, 0x35a2, 0x27d3, 0x3af2, 0x3489, 0x38c7, 0x3985, 0x3a03, 0x30f6, 0x3a92, 0x38d5, 0x39a0, 0x3749, 0x3784, 0x1c70, 0x356b, 0x2d5f, 0x39db, 0x37ab, 0x39fb, 0x3b2c, 0x2ef8, 0x3336, 0x3afd, 0x38f0, 0x358f, 0x3ac4, 0x293d, 0x3328, 0x3741, 0x3993, 0x3463, 0x3918, 0x332e, 0x356d, 0x36ee, 0x34e7, 0x3757, 0x34b5, 0x3b7c, 0x3a63, 0x3b6c, 0x34a6, 0x34f3, 0x346a, 0x2bcf, 0x363d, 0x3081, 0x3abc, 0x35a5, 0x36ff, 0x2cb7, 0x2a53, 0x37a3, 0x3a98, 0x3b92, 0x3a9a, 0x38ff, 0x39dc, 0x3289, 0x3357, 0x39f6, -0x3b74, 0x3a5e, 0x3ba9, 0x365e, 0x3aa5, 0x3b42, 0x39b5, 0x2fb7, 0x39e5, 0x263d, 0x3405, 0x259f, 0x381d, 0x38dc, 0x3152, 0x37f5, 0x38b6, 0x3bfd, 0x3a4e, 0x3804, 0x370f, 0x382f, 0x395d, 0x38a5, 0x2edd, 0x3ac9, 0x34dc, 0x2a2a, 0x2aba, 0x35d0, 0x36b4, 0x3ae1, 0x3b35, 0x3a49, 0x3b5e, 0x38e8, 0x30ed, 0x3ab4, 0x3a92, 0x3bd9, 0x3437, 0x36d0, 0x3aad, 0x36d6, 0x35ed, 0x3635, 0x3bf7, 0x345a, 0x300a, 0x31d2, 0x340c, 0x38fd, 0x39ad, 0x39ac, 0x38bf, 0x38f6, 0x2f7e, 0x3685, 0x3be9, 0x3af0, 0x35d1, 0x35fb, 0x35ad, 0x3a6d, 0x3a78, 0x3813, 0x36a8, 0x3a6e, 0x39fc, 0x3918, 0x2179, 0x38a2, 0x37f9, 0x38dc, 0x24a9, 0x3647, 0x386a, 0x2890, 0x2d0f, 0x31e3, 0x394a, 0x36b2, 0x3071, 0x292d, 0x3568, 0x3adb, 0x394a, 0x2ff6, 0x3142, 0x322b, 0x2696, 0x3954, 0x229d, 0x383a, 0x2f3d, 0x3b4e, -0x3b1c, 0xd7b, 0x379c, 0x3421, 0x39a0, 0x3557, 0x2e38, 0x3b3a, 0x270e, 0x250b, 0x3b0a, 0x3aa1, 0x2d72, 0x351c, 0x3a11, 0x382b, 0x37f8, 0x3a82, 0x39e8, 0x3a1d, 0x3a45, 0x2fb7, 0x341b, 0x39ea, 0x3646, 0x3b27, 0x3abd, 0x350b, 0x3a3a, 0x3557, 0x37db, 0x315b, 0x305a, 0x3bd7, 0x3b33, 0x32b9, 0x3503, 0x2749, 0x3532, 0x37f2, 0x348e, 0x3422, 0x32a4, 0x37bf, 0x3b7b, 0x378f, 0x3476, 0x3a1a, 0x39a2, 0x35d9, 0x3b4d, 0x39f0, 0x34a7, 0x36c6, 0x3ab4, 0x39c2, 0x385b, 0x3add, 0x34cf, 0x3604, 0x39e1, 0x3872, 0x3751, 0x32db, 0x38df, 0x3602, 0x3509, 0x37d5, 0x342e, 0x39ef, 0x2f59, 0x2505, 0x314d, 0x35ff, 0x3bae, 0x3b38, 0x32af, 0x3b9b, 0x3b03, 0x2c5e, 0x3940, 0x38ef, 0x324c, 0x399a, 0x3a14, 0x39c6, 0x3a33, 0x382a, 0x3b36, 0x3ae7, 0x3b71, 0x3020, 0x3a14, 0x33d2, 0x3b1d, 0x2660, -0x2ace, 0x3a36, 0x39d6, 0x398d, 0x3ae2, 0x39dc, 0x3bb3, 0x26d5, 0x3a4a, 0x36ad, 0x3b31, 0x2b7e, 0x3baf, 0x3314, 0x2e0b, 0x31c1, 0x25a9, 0x378c, 0x3b45, 0x3ae9, 0x3586, 0x39fe, 0x3b5b, 0x3b18, 0x3a1b, 0x399b, 0x3aad, 0x30e1, 0x3b3b, 0x2d9f, 0x2614, 0x354e, 0x3806, 0x393e, 0x3564, 0x2346, 0x3b5e, 0x382f, 0x31c9, 0x3be1, 0x2e41, 0x394e, 0x346a, 0x3976, 0x38e7, 0x3503, 0x387f, 0x3025, 0x3232, 0x283b, 0x37d2, 0x32aa, 0x36e0, 0x3b92, 0x3a41, 0x2f32, 0x34cc, 0x3a30, 0x3a69, 0x3671, 0x3894, 0x3b3d, 0x3468, 0x3836, 0x2303, 0x2e8f, 0x3186, 0x37d1, 0x371f, 0x381a, 0x3af8, 0x2ca8, 0x31ba, 0x3a59, 0x3971, 0x3bdb, 0x3add, 0x35af, 0x3b81, 0x2f19, 0x3963, 0x3b58, 0x3aa4, 0x3b98, 0x3808, 0x33b7, 0x3833, 0x3506, 0x3467, 0x2f27, 0x35be, 0x346e, 0x39c9, 0x3677, 0x31b5, 0x3bf4, -0x3506, 0x30a7, 0x370d, 0x367e, 0x3264, 0x2fb7, 0x30d5, 0x3814, 0x3152, 0x38aa, 0x3a77, 0x2dde, 0x3077, 0x38df, 0x3744, 0x2af8, 0x37f8, 0x3aa2, 0x39e3, 0x3ada, 0x3931, 0x3bc0, 0x34b2, 0x35de, 0x33c8, 0x34d4, 0x395a, 0x36a1, 0x3a3a, 0x33e3, 0x38d7, 0x3476, 0x3b6f, 0x3506, 0x3448, 0x3b2c, 0x3766, 0x382b, 0x2efd, 0x33ec, 0x242c, 0x3976, 0x3027, 0x2c5f, 0x37df, 0x3b1a, 0x3641, 0x352d, 0x39ab, 0x3b49, 0x3a91, 0x35ba, 0x382f, 0x2b4c, 0x366f, 0x2f0b, 0x33e3, 0x2ccd, 0x3530, 0x33d0, 0x264e, 0x39b4, 0x3968, 0x29f5, 0x3a2c, 0x299a, 0x39c4, 0x380d, 0x3be2, 0x34b2, 0x3879, 0x3532, 0x34ac, 0x3685, 0x3b5e, 0x3426, 0x3b4d, 0x34ec, 0x32e0, 0x3767, 0x39d7, 0x3119, 0x39db, 0x36e1, 0x39ec, 0x388d, 0x3731, 0x314a, 0x39c5, 0x3325, 0x3284, 0x38c5, 0x2cf4, 0x2180, 0x3614, 0x382e, -0x2afc, 0x3562, 0x365c, 0x32dd, 0x3a1d, 0x39c0, 0x3510, 0x3ae7, 0x22b7, 0x3538, 0x3604, 0x3bb0, 0x3a8e, 0x38ca, 0x379d, 0x36f1, 0x3947, 0x317f, 0x2bfa, 0x3bc0, 0x3ad4, 0x3a19, 0x308b, 0x390b, 0x353d, 0x3599, 0x344e, 0x3159, 0x39fc, 0x362e, 0x3bf5, 0x3246, 0x38e9, 0x3551, 0x3981, 0x3776, 0x3964, 0x3966, 0x335b, 0x3361, 0x3abc, 0x39d1, 0x3b96, 0x3a40, 0x3bfc, 0x30f6, 0x2fc2, 0x350a, 0x3857, 0x3175, 0x3929, 0x383e, 0x38c1, 0x3b21, 0x3025, 0x3a20, 0x3b6f, 0x3600, 0x3b06, 0x30d2, 0x30c3, 0x3550, 0x3025, 0x33c7, 0x3724, 0x3819, 0x38e3, 0x33fe, 0x3ad1, 0x2f0b, 0x38fe, 0x3458, 0x3bca, 0x391e, 0x345a, 0x36da, 0x38d7, 0x2dbd, 0x2c4e, 0x38b4, 0x35ea, 0x2970, 0x2ec0, 0x2519, 0x3552, 0x37cd, 0x3893, 0x3150, 0x38d6, 0x360d, 0x3986, 0x38e3, 0x3847, 0x36dc, 0x3a12, 0x3a3b, -0x34ea, 0x3a8b, 0x31db, 0x3a10, 0x34ca, 0x3b7e, 0x324e, 0x393b, 0x3a38, 0x3791, 0x2727, 0x31a9, 0x3beb, 0x3a43, 0x3ad3, 0x2c46, 0x3bc4, 0x38a9, 0x3918, 0x3b1c, 0x381d, 0x32aa, 0x367b, 0x3a80, 0x3a59, 0x37f6, 0x37ac, 0x36aa, 0x3072, 0x3960, 0x388c, 0x3a91, 0x3908, 0x34ab, 0x2f14, 0x3b72, 0x38f9, 0x359f, 0x38e2, 0x2938, 0x39ba, 0x2aa7, 0x3276, 0x3a66, 0x394d, 0x2de4, 0x39b0, 0x3835, 0x3b49, 0x2d77, 0x3ba2, 0x348b, 0x39f0, 0x381d, 0x382c, 0x384d, 0x3798, 0x3a0f, 0x38c3, 0x2ecb, 0x3472, 0x308f, 0x350c, 0x3014, 0x38e7, 0x2aff, 0x30ec, 0x3928, 0x36f5, 0x3909, 0x3b46, 0x2a93, 0x37cb, 0x3bb6, 0x2fbc, 0x3a3a, 0x3a47, 0x343e, 0x3bf1, 0x3b8f, 0x3bcb, 0x376d, 0x3669, 0x3892, 0x35c2, 0x3512, 0x370f, 0x35dc, 0x3923, 0x39e8, 0x3880, 0x288b, 0x36e7, 0x359e, 0x346f, 0x3b64, -0x3b1c, 0x340e, 0x25ab, 0x3b4e, 0x3897, 0x3bdb, 0x2da4, 0x389c, 0x36fd, 0x3a3c, 0x2f2d, 0x38fb, 0x395c, 0x2ea7, 0x3949, 0x368b, 0x35a3, 0x377c, 0x32de, 0x35b1, 0x3529, 0x301d, 0x3771, 0x393f, 0x3993, 0x3ae0, 0x3bda, 0x375b, 0x31ff, 0x3989, 0x3ad0, 0x3bb6, 0x3814, 0x3999, 0x3854, 0x39e7, 0x37fa, 0x3afc, 0x185f, 0x2e32, 0x3697, 0x3942, 0x3aa0, 0x3b75, 0x3ad3, 0x3aa8, 0x39b8, 0x38c2, 0x38fb, 0x39a4, 0x3b8f, 0x3b2e, 0x334d, 0x3a0c, 0x361b, 0x3a46, 0x3337, 0x388d, 0x321b, 0x38bc, 0x3005, 0x35a4, 0x3bf5, 0x3bcf, 0x3a44, 0x3ac7, 0x3a7d, 0x3b2c, 0x39c5, 0x2001, 0x3594, 0x3a29, 0x3131, 0x3ab9, 0x39d9, 0x38c4, 0x3666, 0x37a8, 0x3a75, 0x3a10, 0x3441, 0x3b7e, 0x23f5, 0x3ab2, 0x306f, 0x3bc0, 0x3989, 0x3361, 0x36ea, 0x2eb9, 0x360f, 0x351c, 0x2a16, 0x3bfe, 0x372b, 0x3b97, -0x3bbf, 0x2cf5, 0x3922, 0x316e, 0x37ad, 0x3a7f, 0x3863, 0x3a4c, 0x37a4, 0x35c1, 0x3b77, 0x3549, 0x3a83, 0x37c4, 0x3b84, 0x38c6, 0x3a7f, 0x2f24, 0x2fc0, 0x3475, 0x3a6a, 0x3bc4, 0x3a21, 0x3b96, 0x365c, 0x38b7, 0x31ce, 0x3bcc, 0x3b80, 0x3a31, 0x3523, 0x2d9d, 0x359e, 0x3afe, 0x371d, 0x2d94, 0x3a2a, 0x3ace, 0x3bed, 0x3726, 0x2fa1, 0x3abe, 0x3624, 0x2be4, 0x2b70, 0x394e, 0x3640, 0x391d, 0x3892, 0x38e2, 0x333c, 0x3080, 0x2ac2, 0x326c, 0x2f8b, 0x38ac, 0x3097, 0x3b80, 0x3ae4, 0x39d4, 0x3676, 0x3969, 0x34c8, 0x3906, 0x2930, 0x3acb, 0x3bb3, 0x3bba, 0x3646, 0x2ba1, 0x30bf, 0x38f2, 0x3bbc, 0x3a3f, 0x34c2, 0x3832, 0x3938, 0x3a79, 0x3546, 0x3bd5, 0x3ae5, 0x329a, 0x342c, 0x2c42, 0x35c1, 0x2616, 0x3ad4, 0x38c6, 0x38b6, 0x3b0d, 0x38dd, 0x2e8d, 0x3891, 0x2f1c, 0x3b9d, 0x3a8f, -0x30e4, 0x2c4f, 0x2fb6, 0x31da, 0x3784, 0x3043, 0x2d5c, 0x3bc0, 0x3998, 0x3b84, 0x387f, 0x3b93, 0x3898, 0x337c, 0x32b4, 0x28c3, 0x334f, 0x389c, 0x3865, 0x360b, 0x3a70, 0x3201, 0x324c, 0x3583, 0x381a, 0x3a58, 0x33e9, 0x3b02, 0x3093, 0x33c0, 0x375c, 0x305d, 0x1f9a, 0x38e4, 0x3bc7, 0x35bb, 0x2d39, 0x3299, 0x3753, 0x3b37, 0x3af5, 0x36d7, 0x3324, 0x3716, 0x3b60, 0x3202, 0x3949, 0x3b79, 0x36c3, 0x3901, 0x39f5, 0x2b55, 0x3996, 0x38e1, 0x3836, 0x3b5a, 0x3790, 0x39f6, 0x3532, 0x37ac, 0x2bc5, 0x3948, 0x3b8f, 0x37b8, 0x3999, 0x3413, 0x3a8f, 0x2b74, 0x2839, 0x3870, 0x369f, 0x38b9, 0x3819, 0x3aef, 0x37f9, 0x368b, 0x3bf4, 0x30a6, 0x2e58, 0x3b6e, 0x3b59, 0x3a5d, 0x2e63, 0x2a40, 0x34b3, 0x377d, 0x3991, 0x3542, 0x3300, 0x396d, 0x3bf4, 0x371b, 0x2c09, 0x3020, 0x3a1e, 0x32c5, -0x3b59, 0x3bb5, 0x3a14, 0x384f, 0x3534, 0x3bb6, 0x3aef, 0x3b51, 0x357e, 0x3760, 0x3395, 0x3046, 0x3977, 0x380e, 0x3b85, 0x39ed, 0x3038, 0x2bdc, 0x3aec, 0x3aa6, 0x3ace, 0x38b5, 0x308b, 0x39e2, 0x3271, 0x3b31, 0x3693, 0x397e, 0x39a9, 0x396f, 0x3021, 0x3b12, 0x350e, 0x38ea, 0x38ef, 0x3aae, 0x37b3, 0x2e83, 0x32f6, 0x3818, 0x3702, 0x332d, 0x3bfc, 0x3b15, 0x3ae6, 0x337f, 0x29f9, 0x3ba8, 0x38b1, 0x381a, 0x3bd6, 0x3a40, 0x3027, 0x3b8b, 0x38b2, 0x35d1, 0x39b7, 0x3adf, 0x2b70, 0x1a44, 0x3470, 0x3b21, 0x3774, 0x3b7a, 0x38b8, 0x304d, 0x3bd6, 0x2a2a, 0x3a95, 0x34bc, 0x2835, 0x3b03, 0x35bd, 0x3bc2, 0x30fe, 0x3a5d, 0x3829, 0x34be, 0x3398, 0x32f7, 0x3b1c, 0x34a5, 0x3511, 0x3802, 0x383e, 0x3176, 0x3241, 0x359f, 0x36f9, 0x380a, 0x310c, 0x3b1f, 0x375d, 0x365a, 0x35d0, 0x3302, -0x3459, 0x35e1, 0x3514, 0x3ba6, 0x381e, 0x30d8, 0x320a, 0x3b8a, 0x39b8, 0x3873, 0x3982, 0x3ae7, 0x3a5b, 0x380d, 0x3bf6, 0x396d, 0x3126, 0x1cf5, 0x37f7, 0x3b43, 0x37a7, 0x3b91, 0x357b, 0x216d, 0x3336, 0x3885, 0x26d5, 0x38f1, 0x369e, 0x3b62, 0x30d5, 0x3a41, 0x31b1, 0x3b8d, 0x3983, 0x2cfb, 0x3857, 0x3239, 0x2ecf, 0x2e22, 0x3889, 0x31a0, 0x3432, 0x3957, 0x2aad, 0x3b93, 0x38e5, 0x3a32, 0x3bf6, 0x2a9e, 0x3a57, 0x34b8, 0x2e9b, 0x3a83, 0x3b86, 0x314e, 0x3738, 0x3954, 0x36bb, 0x3a82, 0x361e, 0x380a, 0x3bc7, 0x39ea, 0x37f9, 0x3a9f, 0x38fa, 0x3916, 0x3b87, 0x389c, 0x375f, 0x30b5, 0x381d, 0x39f9, 0x3969, 0x3b91, 0x31b3, 0x3968, 0x3baf, 0x3395, 0x38a5, 0x3ae2, 0x3b91, 0x3a31, 0x3a75, 0x3667, 0x346f, 0x31b1, 0x3921, 0x38a1, 0x3981, 0x3ab5, 0x34c5, 0x324b, 0x3b5f, 0x3b66, -0x35e0, 0x3b4e, 0x34ef, 0x1c7e, 0x3b6e, 0x3724, 0x3858, 0x381c, 0x3bc1, 0x3475, 0x3a93, 0x38a0, 0x3489, 0x3951, 0x3918, 0x304f, 0x314f, 0x3ad7, 0x382d, 0x38ef, 0x3818, 0x33a3, 0x392d, 0x3079, 0x39b8, 0x3b2f, 0x3ad7, 0x3a4a, 0x383b, 0x295b, 0x380a, 0x3895, 0x3a0a, 0x3b28, 0x36ef, 0x3617, 0x3668, 0x3b95, 0x38e3, 0x3b69, 0x3448, 0x38bc, 0x34b1, 0x34d7, 0x3146, 0x269b, 0x2b3b, 0x371a, 0x3a3e, 0x3a71, 0x3791, 0x3b89, 0x3a76, 0x3bfd, 0x354e, 0x3bc8, 0x3937, 0x302e, 0x38e3, 0x2c2c, 0x20e6, 0x3880, 0x2c5e, 0x2506, 0x38b6, 0x3b42, 0x3be1, 0x3ab4, 0x3a0d, 0x3573, 0x31a6, 0x366c, 0x37c2, 0x34b2, 0x3856, 0x3bd4, 0x3150, 0x2adb, 0x3779, 0x3694, 0x2a1e, 0x3763, 0x39cd, 0x39a5, 0x3470, 0x348e, 0x399f, 0x3326, 0x2d96, 0x363a, 0x3610, 0x38fd, 0x24f0, 0x34bd, 0x32c9, 0x3869, -0x361b, 0x3307, 0x3bfc, 0x36bd, 0x2784, 0x37f1, 0x3a2e, 0x3579, 0x35ab, 0x39c9, 0x39b4, 0x2e9a, 0x3869, 0x24bf, 0x2c45, 0x3a0b, 0x369d, 0x391f, 0x3789, 0x2d9b, 0x37ac, 0x3829, 0x3177, 0x3286, 0x312b, 0x3153, 0x2ff3, 0x375c, 0x2afb, 0x290a, 0x3aaf, 0x3b17, 0x39f6, 0x3a53, 0x3888, 0x3ab6, 0x37e8, 0x3442, 0x3523, 0x3a72, 0x2d0a, 0x3551, 0x3923, 0x3538, 0x3abc, 0x3a29, 0x358a, 0x2ec5, 0x3a32, 0x3371, 0x3438, 0x301a, 0x3877, 0x36f7, 0x39e0, 0x372f, 0x3b39, 0x399c, 0x38b5, 0x3488, 0x392b, 0x312e, 0x3bd2, 0x3b34, 0x35d7, 0x3193, 0x38a5, 0x3a75, 0x3768, 0x3660, 0x3add, 0x38c6, 0x3944, 0x353a, 0x398e, 0x3627, 0x361a, 0x32ca, 0x38dd, 0x3293, 0x37f1, 0x2b97, 0x2465, 0x3a2e, 0x39c5, 0x3bef, 0x3879, 0x3a91, 0x3873, 0x39ae, 0x3994, 0x35aa, 0x3648, 0x376e, 0x371e, 0x3a8c, -0x359b, 0x381d, 0x3506, 0x382e, 0x39b0, 0x2f4c, 0x3022, 0x3af3, 0x3828, 0x3407, 0x3244, 0x306d, 0x3c00, 0x3019, 0x39b3, 0x357e, 0x36bd, 0x3979, 0x369a, 0x2025, 0x3ab5, 0x3509, 0x3969, 0x3b5f, 0x38b3, 0x3a55, 0x3899, 0x3a8d, 0x348a, 0x3010, 0x3b00, 0x374c, 0x37e7, 0x35f2, 0x36bc, 0x31ec, 0x3b49, 0x3960, 0x27a1, 0x3984, 0x3824, 0x3a95, 0x39e4, 0x3901, 0x34a8, 0x354a, 0x3929, 0x38ef, 0x399c, 0x381a, 0x34ea, 0x247b, 0x3113, 0x37ff, 0x3923, 0x3a12, 0x398a, 0x3135, 0x374c, 0x345b, 0x3aae, 0x33ad, 0x3834, 0x3426, 0x32a3, 0x3854, 0x31cd, 0x3a78, 0x32ea, 0x288e, 0x38a9, 0x2d3a, 0x31ce, 0x2ed6, 0x393d, 0x197a, 0x3880, 0x39cd, 0x3884, 0x3af0, 0x312d, 0x3711, 0x32be, 0x3193, 0x323d, 0x3222, 0x28b9, 0x3bcc, 0x3626, 0x3836, 0x36bf, 0x3393, 0x32d3, 0x39f3, 0x3b91, 0x3719, -0x38ac, 0x1036, 0x3759, 0x3547, 0x365e, 0x3a68, 0x37eb, 0x353b, 0x3931, 0x294d, 0x35c8, 0x3aad, 0x387c, 0x3ac5, 0x3a08, 0x3a0d, 0x34b8, 0x3747, 0x3a10, 0x3908, 0x3825, 0x3509, 0x379f, 0x2ebe, 0x3a30, 0x353f, 0x3ab6, 0x35d3, 0x3ae3, 0x39a0, 0x272d, 0x2da5, 0x3a07, 0x323e, 0x3865, 0x3700, 0x2c37, 0x2fb3, 0x36e3, 0x279c, 0x364d, 0x38b9, 0x39b5, 0x35d8, 0x376b, 0x37f2, 0x3421, 0x3a83, 0x3562, 0x2cad, 0x382f, 0x3703, 0x38bf, 0x3afc, 0x3800, 0x3793, 0x3ae7, 0x39f6, 0x2d8f, 0x365d, 0x380f, 0x39cf, 0x3609, 0x2da9, 0x2cc7, 0x361c, 0x3682, 0x2762, 0x3611, 0x3954, 0x21e5, 0x29bd, 0x3b94, 0x32e9, 0x36fc, 0x3b3c, 0x3bec, 0x3bde, 0x35b2, 0x3640, 0x3824, 0x2dba, 0x35da, 0x3853, 0x3b62, 0x3b56, 0x373f, 0x324d, 0x395f, 0x2a6b, 0x3b59, 0x392f, 0x3953, 0x3bbe, 0x3a44, 0x38fc, -0x38aa, 0x3987, 0x24c1, 0x3a51, 0x3b03, 0x3770, 0x381d, 0x3847, 0x394a, 0x35fe, 0x3b59, 0x34d4, 0x380f, 0x3985, 0x2719, 0x3811, 0x3a63, 0x387d, 0x370b, 0x36e2, 0x38f4, 0x3af2, 0x364c, 0x30e7, 0x3816, 0x2afe, 0x339b, 0x380d, 0x304e, 0x3b55, 0x3a4e, 0x2ebb, 0x377a, 0x396d, 0x31bf, 0x3914, 0x372b, 0x38a5, 0x39a9, 0x24f1, 0x39ad, 0x348a, 0x3b26, 0x3ab0, 0x35f3, 0x38ac, 0x34a5, 0x39b2, 0x3a88, 0x364d, 0x36a3, 0x33eb, 0x39f7, 0x3ad7, 0x37c1, 0x3805, 0x357a, 0x3949, 0x28ee, 0x3b2e, 0x3ba7, 0x381c, 0x35bf, 0x323a, 0x39dd, 0x3b40, 0x3908, 0x32c0, 0x3a12, 0x3419, 0x388e, 0x3890, 0x3b59, 0x2ea4, 0x363b, 0x3790, 0x3a00, 0x3b36, 0x2a03, 0x3875, 0x3932, 0x3513, 0x3755, 0x2d73, 0x19b7, 0x352b, 0x309e, 0x2842, 0x38cc, 0x38a0, 0x3423, 0x380e, 0x3b76, 0x39ad, 0x3a11, 0x3a5b, -0x3bd8, 0x3b5c, 0x30ee, 0x3b97, 0x32ee, 0x3a5d, 0x3bfb, 0x3706, 0x2e45, 0x2f4f, 0x3281, 0x39ec, 0x3705, 0x369c, 0x3022, 0x3b27, 0x3a91, 0x3a6d, 0x3438, 0x3461, 0x3846, 0x394f, 0x3772, 0x36f3, 0x34d2, 0x39ee, 0x3578, 0x3959, 0x3282, 0x1b2c, 0x39be, 0x37f0, 0x3909, 0x34aa, 0x3ad6, 0x3ad8, 0x392b, 0x39b5, 0x3391, 0x3aa3, 0x3854, 0x3a72, 0x31bc, 0x23fa, 0x331a, 0x38aa, 0x3a73, 0x2a74, 0x3956, 0x30fd, 0x36bd, 0x312d, 0x38b3, 0x3b26, 0x1e7f, 0x310a, 0x235b, 0x367b, 0x383e, 0x3b57, 0x39b0, 0x3785, 0x2ddc, 0x38de, 0x2c79, 0x386b, 0x3ace, 0x32e5, 0x2c3a, 0x3bc5, 0x3a95, 0x317b, 0x3a54, 0x3ba1, 0x38ff, 0x3b54, 0x39dd, 0x344c, 0x38d0, 0x3984, 0x32d7, 0x35c3, 0x319e, 0x3881, 0x3b80, 0x3923, 0x396f, 0x343d, 0x378e, 0x39e0, 0x3434, 0x38ab, 0x3a55, 0x3905, 0x2a86, 0x3aa6, -0x2c3b, 0x33da, 0x2eb0, 0x3aa4, 0x2871, 0x31a0, 0x35ba, 0x35ed, 0x3a48, 0x3968, 0x35f8, 0x2810, 0x3ab8, 0x395a, 0x369e, 0x3664, 0x3bef, 0x30b9, 0x33f3, 0x366d, 0x3961, 0x377d, 0x3367, 0x3aa2, 0x39de, 0x3bdc, 0x37f3, 0x3618, 0x394c, 0x39c6, 0x3867, 0x34c3, 0x358b, 0x3256, 0x3aac, 0x3623, 0x39ee, 0x3723, 0x3b2a, 0x3a63, 0x3855, 0x38a1, 0x2cb1, 0x3b80, 0x38d6, 0x3045, 0x3bc3, 0x3bdf, 0x378b, 0x3af4, 0x2411, 0x3863, 0x3869, 0x353b, 0x24cc, 0x396a, 0x3a09, 0x3aab, 0x32cd, 0x3970, 0x3178, 0x3a61, 0x2faa, 0x3a82, 0x3487, 0x3af5, 0x36ee, 0x39f0, 0x2a25, 0x3006, 0x3bc0, 0x3151, 0x31b0, 0x36e6, 0x351c, 0x2a55, 0x3846, 0x38b7, 0x37e3, 0x3a7c, 0x293b, 0x327d, 0x3680, 0x390a, 0x3ad5, 0x2e0c, 0x3bb9, 0x1ddf, 0x35fa, 0x3995, 0x380c, 0x3923, 0x3a4f, 0x3ad5, 0x3a80, 0x3113, -0x324a, 0x39c6, 0x353b, 0x2d16, 0x346a, 0x321f, 0x3703, 0x2f6c, 0x2c37, 0x3ada, 0x3be4, 0x3b3e, 0x3aac, 0x3a7f, 0x36d4, 0x3606, 0x3343, 0x393a, 0x382b, 0x3424, 0x38d4, 0x39ed, 0x3013, 0x31ff, 0x3794, 0x3b1c, 0x3919, 0x3bb5, 0x3769, 0x39a1, 0x3be5, 0x3b1a, 0x35fd, 0x3ba8, 0x2af5, 0x38ea, 0x3b19, 0x3814, 0x39ea, 0x3b1e, 0x37c0, 0x34f3, 0x395a, 0x38b6, 0x392a, 0x38a5, 0x3121, 0x2d9b, 0x3799, 0x304c, 0x349d, 0x3153, 0x398a, 0x3a70, 0x3a3d, 0x34bd, 0x39d7, 0x37b6, 0x3817, 0x34a8, 0x3ae2, 0x350d, 0x3ad0, 0x3a0e, 0x3496, 0x3b73, 0x3879, 0x3841, 0x3316, 0x3671, 0x36a4, 0x30bf, 0x3a5e, 0x3594, 0x3bde, 0x3b55, 0x3982, 0x395b, 0x364c, 0x3a6c, 0x32b0, 0x39cd, 0x3900, 0x38dc, 0x390a, 0x2d48, 0x376e, 0x3473, 0x2c65, 0x3934, 0x30cd, 0x3518, 0x3ba4, 0x3423, 0x2f57, 0x3682, -0x3979, 0x37b1, 0x3926, 0x343b, 0x360a, 0x234e, 0x3895, 0x3a09, 0x3810, 0x39d4, 0x3529, 0x3a28, 0x331a, 0x385f, 0x2576, 0x3973, 0x3a0e, 0x33b0, 0x21da, 0x3925, 0x32c8, 0x2fbe, 0x32e7, 0x3b38, 0x3a9a, 0x2ab2, 0x320d, 0x3be9, 0x3720, 0x351d, 0x311b, 0x38f2, 0x3952, 0x3985, 0x3b4b, 0x3634, 0x38af, 0x398b, 0x278f, 0x3460, 0x2f0d, 0x28e1, 0x3412, 0x3978, 0x372c, 0x3a02, 0x2e72, 0x10dc, 0x36c6, 0x3883, 0x3b5a, 0x38e8, 0x3b97, 0x394e, 0x2d07, 0x39b1, 0x3754, 0x2c54, 0x3577, 0x3ab3, 0x3a2a, 0x376a, 0x39b4, 0x396a, 0x3222, 0x396c, 0x39dc, 0x34d5, 0x3903, 0x3841, 0x3912, 0x3bdb, 0x3ba8, 0x364c, 0x39b0, 0x38a9, 0x3acd, 0x3015, 0x368d, 0x3b46, 0x351a, 0x38e2, 0x36f2, 0x37c7, 0x3bdb, 0x3b60, 0x3ba0, 0x3bc3, 0x363f, 0x28c1, 0x2add, 0x3aaa, 0x397b, 0x390f, 0x2f8f, 0x3836, -0x380f, 0x35e9, 0x35ee, 0x3386, 0x388f, 0x3bca, 0x3782, 0x37f2, 0x308e, 0x3a28, 0x3738, 0x31f6, 0x36a4, 0x39eb, 0x2b1f, 0x3ba6, 0x3322, 0x3ad6, 0x386f, 0x3b19, 0x3aa5, 0x2dd8, 0x3a6a, 0x380b, 0x39e3, 0x3225, 0x3bb2, 0x39e9, 0x30e5, 0x39df, 0x3ae8, 0x3075, 0x3025, 0x2f80, 0x30c1, 0x3854, 0x3914, 0x24e1, 0x3b4c, 0x32f6, 0x2e0e, 0x38a8, 0x3572, 0x2e9b, 0x38c3, 0x31f1, 0x3357, 0x3770, 0x3575, 0x317f, 0x345d, 0x3162, 0x38cd, 0x3111, 0x3543, 0x36c2, 0x36d6, 0x3754, 0x3b6e, 0x3900, 0x3996, 0x38b5, 0x352e, 0x3a32, 0x3881, 0x2487, 0x3795, 0x3814, 0x38f9, 0x388b, 0x366d, 0x3b8a, 0x3751, 0x3a1b, 0x380d, 0x39da, 0x3a56, 0x306c, 0x3295, 0x3992, 0x345c, 0x3a88, 0x370a, 0x357e, 0x31bc, 0x3af0, 0x2f33, 0x2c05, 0x3255, 0x595, 0x3acd, 0x3615, 0x26d4, 0x31b8, 0x3860, 0x3839, -0x30a4, 0x2aed, 0x381b, 0x3438, 0x3519, 0x3a7d, 0x39e4, 0x3704, 0x376f, 0x31d2, 0x3643, 0x29d2, 0x3101, 0x34cc, 0x39c1, 0x333f, 0x3a92, 0x2b34, 0x2d97, 0x334d, 0x3b85, 0x3b74, 0x37f2, 0x38e0, 0x3092, 0x34d3, 0x38af, 0x3489, 0x365c, 0x3bab, 0x3abc, 0x3b90, 0x3251, 0x3397, 0x399d, 0x32a2, 0x3545, 0x29ac, 0x3405, 0x37dd, 0x3899, 0x312c, 0x3500, 0x3983, 0x3bd4, 0x3bfc, 0x33a7, 0x2df1, 0x2c94, 0x374e, 0x351c, 0x3a18, 0x3984, 0x3b46, 0x2d2c, 0x2997, 0x365e, 0x3461, 0x3654, 0x2530, 0x3945, 0x1e1e, 0x3374, 0x2fb7, 0x31de, 0x3bff, 0x387b, 0x3701, 0x284f, 0x3b59, 0x3a7d, 0x3866, 0x3958, 0x3a6c, 0x358a, 0x3132, 0x35be, 0x3819, 0x386a, 0x369d, 0x3b3b, 0x3549, 0x3b06, 0x3173, 0x31f2, 0x39fb, 0x35a6, 0x3525, 0x3737, 0x3abb, 0x3b5e, 0x3122, 0x39e5, 0x3538, 0x3817, 0x3727, -0x3979, 0x39fe, 0x3487, 0x3a8e, 0x3407, 0x3140, 0x3afa, 0x39b7, 0x374e, 0x3b66, 0x3b0f, 0x39c9, 0x3266, 0x34dc, 0x396a, 0x38db, 0x35bd, 0x31c8, 0x37ed, 0x3667, 0x357e, 0x3518, 0x3139, 0x3bd5, 0x3157, 0x3960, 0x39d2, 0x3a38, 0x366c, 0x3876, 0x39b9, 0x2cf0, 0x3825, 0x3a80, 0x3bbf, 0x3a2d, 0x2fd3, 0x35e2, 0x35c6, 0x3a07, 0x368f, 0x391e, 0x3be7, 0x39be, 0x3533, 0x39c7, 0x3137, 0x2d6e, 0x3905, 0x3b95, 0x38f8, 0x39f5, 0x3bc1, 0x38a7, 0x38e5, 0x2c58, 0x343c, 0x3656, 0x2c1c, 0x3b1d, 0x39c9, 0x3801, 0x39c1, 0x3bed, 0x26be, 0x362a, 0x3655, 0x31b4, 0x2ad7, 0x3810, 0x3afd, 0x1edc, 0x35e8, 0x2d9f, 0x32fb, 0x316e, 0x38ed, 0x3839, 0x390b, 0x3b97, 0x38e2, 0x3746, 0x3b3b, 0x3b03, 0x395e, 0x353e, 0x375a, 0x3824, 0x25bf, 0x357f, 0x31a9, 0x3aa5, 0x35d6, 0x2a95, 0x1b91, 0x318c, -0x3650, 0x38de, 0x32bf, 0x287b, 0x305d, 0x393e, 0x3bb2, 0x352d, 0x2593, 0x386f, 0x3814, 0x38bd, 0x3532, 0x3084, 0x2880, 0x3bdb, 0x37da, 0x3073, 0x3850, 0x3026, 0x337f, 0x3b64, 0x37e5, 0x33ad, 0x3624, 0x319f, 0x36d7, 0x3939, 0x3553, 0x359d, 0x392d, 0x385f, 0x394f, 0x3aca, 0x34b8, 0x3138, 0x367a, 0x38a4, 0x3a8e, 0x369e, 0x34ef, 0x3b01, 0x3ad8, 0x3875, 0x3bd5, 0x39c4, 0x3b56, 0x394d, 0x38ba, 0x3a48, 0x3ade, 0x3bd6, 0x395f, 0x3737, 0x2dee, 0x3891, 0x35ed, 0x39b2, 0x2fe6, 0x3130, 0x346e, 0x3886, 0x2fb6, 0x3183, 0x3ae1, 0x3301, 0x38f9, 0x3470, 0x3701, 0x3845, 0x327d, 0x33b3, 0x3b06, 0x358e, 0x35eb, 0x38a2, 0x34d1, 0x317c, 0x3b0f, 0x395e, 0x36dc, 0x3511, 0x3a8b, 0x3997, 0x380b, 0x38cb, 0x3b3c, 0x3b54, 0x3330, 0x33d7, 0x357d, 0x3439, 0x2bd4, 0x3678, 0x3891, 0x39cc, -0x3bdb, 0x3af1, 0x3828, 0x3a2b, 0x39b6, 0x36f5, 0x374a, 0x3752, 0x3b11, 0x3306, 0x3bac, 0x3799, 0x39fe, 0x38f5, 0x3219, 0x36df, 0x3ade, 0x3ab0, 0x2fa1, 0x3472, 0x3a33, 0x34d9, 0x390e, 0x37c0, 0x2d6b, 0x38e1, 0x3bdc, 0x3887, 0x3644, 0x319b, 0x32a7, 0x2876, 0x337a, 0x3b38, 0x3904, 0x354b, 0x24b5, 0x1699, 0x3b55, 0x39b7, 0x278d, 0x3784, 0x388d, 0x389f, 0x34ac, 0x30bc, 0x3180, 0x37e5, 0x3462, 0x3641, 0x363a, 0x3805, 0x2fa2, 0x260f, 0x3a51, 0x38c4, 0x30e4, 0x3836, 0x3478, 0x3a31, 0x36ae, 0x3294, 0x3b82, 0x3321, 0x3877, 0x3209, 0x38ad, 0x31af, 0x35b4, 0x28af, 0x3699, 0x3490, 0x3974, 0x3272, 0x391c, 0x3864, 0x31fe, 0x3780, 0x39d9, 0x3607, 0x35a1, 0x339e, 0x3047, 0x33c0, 0x3506, 0x2f45, 0x3b6e, 0x3875, 0x383b, 0x3b4b, 0x3859, 0x35c7, 0x2afe, 0x34f1, 0x363f, 0x2ccc, -0x2888, 0x3101, 0x397a, 0x3715, 0x35b1, 0x369b, 0x3a0c, 0x3839, 0x3514, 0x3189, 0x3be6, 0x3214, 0x3b29, 0x312e, 0x3879, 0x33a8, 0x3a6f, 0x3998, 0x3959, 0x3b41, 0x348b, 0x3acb, 0x391f, 0x39b5, 0x353b, 0x3513, 0x395b, 0x3a72, 0x329c, 0x3a2e, 0x2c1b, 0x376e, 0x3857, 0x35ce, 0x34d3, 0x3952, 0x3b6f, 0x3978, 0x3942, 0x3741, 0x35a2, 0x3201, 0x3806, 0x397a, 0x393f, 0x2f4e, 0x3a07, 0x3b5b, 0x33aa, 0x3686, 0x394b, 0x3b64, 0x3a53, 0x385a, 0x390a, 0x3965, 0x34b6, 0x2f08, 0x39b3, 0x3808, 0x3631, 0x35af, 0x3628, 0x31a2, 0x3b7f, 0x3a04, 0x2951, 0x3a91, 0x39a9, 0x3877, 0x3acc, 0x3aff, 0x3bae, 0x2aa4, 0x3bbe, 0x3b0c, 0x3462, 0x3842, 0x3902, 0x3a55, 0x30e8, 0x3520, 0x30bd, 0x3147, 0x3ba1, 0x3945, 0x37b9, 0x30b4, 0x3573, 0x3b4f, 0x3a1b, 0x3a4a, 0x2d52, 0x345c, 0x366c, 0x3451, -0x34b3, 0x2d91, 0x3564, 0x3803, 0x3b06, 0x3bf5, 0x36b0, 0x356e, 0x341d, 0x39fe, 0x3b9e, 0x2d69, 0x3329, 0x3b30, 0x300d, 0x34e8, 0x3823, 0x3ab8, 0x38ce, 0x3b3c, 0x2983, 0x3680, 0x2841, 0x39ed, 0x393e, 0x30cc, 0x3828, 0x3af3, 0x2d8e, 0x381c, 0x382b, 0x3b29, 0x3b58, 0x380a, 0x2c56, 0x36b0, 0x3b53, 0x2f0b, 0x357b, 0x38de, 0x374e, 0x3aef, 0x3a95, 0x3a7a, 0x3a23, 0x2f2b, 0x3903, 0x3b97, 0x39e3, 0x2e50, 0x35fd, 0x3bf5, 0x3ae9, 0x3bb6, 0x3ab7, 0x391f, 0x326f, 0x3264, 0x3453, 0x37b3, 0x2d1b, 0x3a55, 0x3921, 0x36d7, 0x2b01, 0x388e, 0x3969, 0x2f04, 0x31b9, 0x3bd2, 0x3a16, 0x362a, 0x31d7, 0x3ae1, 0x3735, 0x2e5f, 0x3b56, 0x38a8, 0x3b30, 0x3a77, 0x35e2, 0x3aa6, 0x3222, 0x38f3, 0x399b, 0x330b, 0x350f, 0x2b19, 0x3b45, 0x38b4, 0x3ba8, 0x3a8f, 0x3abe, 0x2760, 0x341e, 0x323d, -0x2eab, 0x3514, 0x3b83, 0x39bd, 0x331e, 0x2bfc, 0x389d, 0x381c, 0x36b5, 0x35e9, 0x392e, 0x2b7a, 0x2fcf, 0x3523, 0x3b37, 0x3129, 0x3a56, 0x3861, 0x3b75, 0x38cd, 0x3604, 0x3286, 0x3ac4, 0x3926, 0x3495, 0x3bfc, 0x351b, 0x3696, 0x34e1, 0x2f4e, 0x26e3, 0x39ce, 0x34db, 0x2e38, 0x393c, 0x371c, 0x3843, 0x3a1b, 0x272b, 0x3a27, 0x376c, 0x393f, 0x39cc, 0x39be, 0x39f7, 0x2c76, 0x3bd3, 0x3a3b, 0x3970, 0x3ab5, 0x3915, 0x35c3, 0x36d0, 0x3957, 0x3aa5, 0x25d6, 0x3b79, 0x2217, 0x39c7, 0x3b15, 0x3aa1, 0x3901, 0x378e, 0x3ada, 0x3a6f, 0x384d, 0x372d, 0x39d9, 0x3819, 0x37e8, 0x3527, 0x30ee, 0x3867, 0x3229, 0x3126, 0x3290, 0x3a62, 0x3b2f, 0x32f3, 0x39e0, 0x36e6, 0x3981, 0x305a, 0x2fd0, 0x3724, 0x3822, 0x3359, 0x3869, 0x3bcc, 0x37f1, 0x357c, 0x39df, 0x2e31, 0x3b10, 0x3601, 0x37b1, -0x3aa3, 0x385a, 0x392b, 0x3909, 0x3774, 0x3aab, 0x38a2, 0x3801, 0x2882, 0x38a7, 0x3621, 0x373e, 0x34b4, 0x2e13, 0x3999, 0x381c, 0x369f, 0x2633, 0x3acd, 0x386d, 0x3b94, 0x32a0, 0x1bdc, 0x3873, 0x3249, 0x3692, 0x3be9, 0x325a, 0x32c2, 0x3ad9, 0x1de3, 0x308f, 0x3971, 0x34e6, 0x212b, 0x3bd3, 0x3790, 0x3814, 0x3346, 0x3358, 0x3115, 0x3914, 0x35c7, 0x3287, 0x3b0b, 0x388f, 0x35ac, 0x3002, 0x3a5e, 0x2ede, 0x38cd, 0x374f, 0x3b4c, 0x3578, 0x394c, 0x3951, 0x353c, 0x2e59, 0x3877, 0x31f5, 0x3912, 0x394b, 0x37e7, 0x3667, 0x38c9, 0x3641, 0x343c, 0x37ee, 0x3aa8, 0x3440, 0x34d3, 0x394b, 0x301f, 0x3a76, 0x387e, 0x3a7d, 0x347e, 0x21c8, 0x397c, 0x301a, 0x3a2d, 0x3710, 0x399a, 0x359b, 0x3756, 0x3679, 0x37eb, 0x38e6, 0x2a71, 0x35f9, 0x37eb, 0x3afc, 0x370d, 0x3bce, 0x3884, 0x3211, -0x3a18, 0x3a44, 0x2fcd, 0x3b65, 0x3788, 0x2a46, 0x322a, 0x3538, 0x3bc2, 0x33f4, 0x3932, 0x3835, 0x2fa9, 0x3b95, 0x3756, 0x399d, 0x36b6, 0x3186, 0x389d, 0x346c, 0x3abb, 0x3be4, 0x3919, 0x3993, 0x2ffc, 0x39db, 0x3bce, 0x3b0e, 0x336e, 0x36af, 0x3192, 0x38b7, 0x37ba, 0x3ae4, 0x3116, 0x2c45, 0x3494, 0x3aea, 0x302c, 0x3816, 0x3686, 0x34f2, 0x2fa4, 0x3aa1, 0x222f, 0x370f, 0x341a, 0x3aae, 0x380d, 0x3863, 0x36ca, 0x3a60, 0x3695, 0x387d, 0x391c, 0x2c8b, 0x2d94, 0x369e, 0x399e, 0x36fd, 0x38fc, 0x3b6c, 0x36a8, 0x3a73, 0x33fb, 0x36d0, 0x3720, 0x36d7, 0x37be, 0x2a8f, 0x3180, 0x3ad3, 0x2a1f, 0x3737, 0x3920, 0x2b67, 0x3abf, 0x395e, 0x322b, 0x3ace, 0x39b1, 0x3bdf, 0x2e0b, 0x3018, 0x3278, 0x393a, 0x3a8c, 0x39d0, 0x39cd, 0x308f, 0x3776, 0x38b7, 0x3527, 0x388b, 0x3901, 0x3b8b, -0x237d, 0x38f9, 0x3431, 0x3b1f, 0x3a12, 0x33ac, 0x3a3d, 0x3943, 0x348d, 0x363f, 0x3a2a, 0x2420, 0x3081, 0x3815, 0x382e, 0x38e5, 0x3238, 0x284e, 0x2ec3, 0x3af5, 0x3191, 0x32d6, 0x31c8, 0x39bc, 0x3a2a, 0x340d, 0x3bd9, 0x33dc, 0x3066, 0x39df, 0x30e2, 0x350a, 0x37fc, 0x341d, 0x3828, 0x3a1b, 0x3010, 0x2992, 0x32fd, 0x3bb3, 0x368c, 0x2af2, 0x3af4, 0x3a8f, 0x3793, 0x3620, 0x3b85, 0x3557, 0x316b, 0x288d, 0x3408, 0x3ae8, 0x3af0, 0x3420, 0x3bbd, 0x3a80, 0x309a, 0x3a5d, 0x3a57, 0x3987, 0x3a47, 0x377f, 0x3a01, 0x3a72, 0x3b37, 0x3594, 0x3bfd, 0x36ae, 0x3b99, 0x3bd4, 0x3920, 0x3b8d, 0x37ae, 0x3a46, 0x3184, 0x38ba, 0x1ff8, 0x3b9c, 0x3b68, 0x3621, 0x37f4, 0x2fb7, 0x3010, 0x3b58, 0x33d3, 0x3bbb, 0x291f, 0x3945, 0x3be1, 0x30c6, 0x3bc3, 0x35c6, 0x3bdf, 0x2a15, 0x2e3f, 0x2b1a, -0x3847, 0x3671, 0x34cf, 0x35e0, 0x3b80, 0x34e1, 0x3b3b, 0x305a, 0x327f, 0x3a9e, 0x3803, 0x2a3a, 0x3969, 0x3765, 0x3891, 0x3acc, 0x397d, 0x3549, 0x356e, 0x34c8, 0x2632, 0x30ca, 0x36ba, 0x3a56, 0x37ca, 0x344d, 0x39bc, 0x32f3, 0x3be2, 0x3b24, 0x353f, 0x3ab8, 0x373e, 0x3906, 0x318e, 0x3993, 0x27e3, 0x255c, 0x3afa, 0x33a3, 0x3819, 0x333b, 0x3bb6, 0x3179, 0x3414, 0x35d6, 0x30b1, 0x386b, 0x3b8e, 0x3942, 0x386c, 0x3b39, 0x32d2, 0x37f6, 0x2503, 0x3b14, 0x385c, 0x3a12, 0x3895, 0x39d7, 0x377f, 0x2c2d, 0x3066, 0x3855, 0x35a4, 0x3aeb, 0x3a9c, 0x35a4, 0x2eb7, 0x3b6b, 0x3bfd, 0x38fa, 0x1fd4, 0x3583, 0x3bc9, 0x35d2, 0x3913, 0x34b8, 0x271f, 0x3453, 0x3833, 0x3bb2, 0x3a7f, 0x1c15, 0x1b01, 0x39f1, 0x3bdd, 0x3988, 0x3ac8, 0x397f, 0x3bb4, 0x36d5, 0x37bf, 0x34b4, 0x30f5, 0x39c7, -0x391e, 0x3b4f, 0x2eb2, 0x3b31, 0x3073, 0x39d0, 0x2cd1, 0x2f3b, 0x36cc, 0x3739, 0x222d, 0x3a71, 0x3ba4, 0x3b60, 0x2bb5, 0x3885, 0x3b90, 0x2cea, 0x3ab6, 0x37b0, 0x3813, 0x31a7, 0x3545, 0x3392, 0x39f4, 0x34ae, 0x36c2, 0x3177, 0x3902, 0x39b5, 0x2f98, 0x36c1, 0x36d5, 0x32e8, 0x39ed, 0x30c3, 0x39a8, 0x30f1, 0x39a1, 0x36ec, 0x3bea, 0x34b1, 0x3260, 0x343e, 0x3929, 0x31d9, 0x33d7, 0x3bee, 0x379c, 0x2395, 0x3983, 0x38ce, 0x3297, 0x35fc, 0x3776, 0x3b0a, 0x3ae2, 0x3991, 0x2c03, 0x3712, 0x3b68, 0x2e82, 0x2e43, 0x3705, 0x39d1, 0x3b64, 0x2ff0, 0x3a4a, 0x2f9e, 0x2f32, 0x3ba6, 0x3559, 0x3aa5, 0x39cb, 0x3671, 0x39d2, 0x3aaf, 0x3385, 0x3a0a, 0x3a03, 0x396d, 0x391d, 0x2685, 0x3802, 0x39d5, 0x2af3, 0x39e4, 0x3ace, 0x313a, 0x2d88, 0x2999, 0x39a4, 0x3302, 0x390b, 0x3847, 0x3b87, -0x3813, 0x30fa, 0x3986, 0x3bc2, 0x3bc2, 0x3bf1, 0x3251, 0x391a, 0x2445, 0x3884, 0x3649, 0x320f, 0x305c, 0x3418, 0x337f, 0x38fa, 0x39ac, 0x3a4d, 0x346d, 0x33ca, 0x32da, 0x335c, 0x37ff, 0x389e, 0x39b3, 0x364e, 0x328a, 0x3690, 0x36cb, 0x3126, 0x374a, 0x3ba4, 0x37fe, 0x3233, 0x2afb, 0x3335, 0x3095, 0x38c9, 0x3a8b, 0x39c4, 0x3505, 0x32f2, 0x3a53, 0x388e, 0x34b9, 0x39d7, 0x34e7, 0x3a78, 0x3b19, 0x34e0, 0x35e9, 0x375f, 0x3a89, 0x38c6, 0x3764, 0x383c, 0x266a, 0x3672, 0x31fc, 0x3b60, 0x3a99, 0x3917, 0x3b92, 0x3759, 0x3acd, 0x39ad, 0x31fe, 0x3bcc, 0x3bec, 0x31a6, 0x33fa, 0x36f4, 0x2295, 0x3b2b, 0x3625, 0x3882, 0x3a88, 0x369a, 0x3b81, 0x399f, 0x34a9, 0x381c, 0x2db8, 0x365d, 0x3741, 0x382c, 0x3b87, 0x3b1c, 0x300b, 0x2ef6, 0x2e99, 0x3975, 0x24d7, 0x387e, 0x344a, 0x3503, -0x3b1e, 0x3900, 0x2bf3, 0x3170, 0x39bd, 0x3a2e, 0x37ad, 0x38b6, 0x38bf, 0x31c3, 0x3ae8, 0x368d, 0x36ac, 0x35e2, 0x3497, 0x2dec, 0x39c9, 0x389b, 0x3156, 0x3a86, 0x3892, 0x3976, 0x394b, 0x3b82, 0x3907, 0x392e, 0x2538, 0x3871, 0x348e, 0x3a0d, 0x347f, 0x316b, 0x378b, 0x3aa4, 0x38f5, 0x3595, 0x2d85, 0x2d42, 0x3aca, 0x3688, 0x3085, 0x3694, 0x399c, 0x3b6c, 0x3bb8, 0x3bac, 0x3a69, 0x35bf, 0x316c, 0x335f, 0x2e66, 0x2f7e, 0x360e, 0x3b28, 0x3254, 0x347f, 0x3687, 0x3018, 0x37b7, 0x3ba9, 0x3814, 0x3bd2, 0x22ed, 0x3735, 0x39a7, 0x3a17, 0x3a9c, 0x3264, 0x35f9, 0x38e9, 0x3610, 0x3ad7, 0x39ab, 0x304c, 0x3734, 0x3a58, 0x30be, 0x394f, 0x2f1c, 0x33be, 0x3818, 0x38b7, 0x3845, 0x3a9d, 0x3721, 0x324f, 0x34e0, 0x3a0e, 0x3b77, 0x3b14, 0x3884, 0x3a5a, 0x3aed, 0x3349, 0x39d0, 0x3ba6, -0x3345, 0x3494, 0x396e, 0x33e0, 0x3a01, 0x26be, 0x3a27, 0x3a66, 0x3a48, 0x3bc4, 0x3a0e, 0x39ac, 0x3758, 0x32d8, 0x3570, 0x2add, 0x2f32, 0x3856, 0x3814, 0x39a6, 0x3418, 0x3919, 0x2faf, 0x3a0f, 0x3816, 0x3366, 0x388c, 0x3471, 0x2993, 0x395d, 0x32cc, 0x3b00, 0x3a82, 0x3b5a, 0x2edd, 0x30f7, 0x3bba, 0x2a65, 0x368e, 0x311e, 0x35ff, 0x3734, 0x2931, 0x34db, 0x3734, 0x3b8a, 0x2441, 0x33bc, 0x3aed, 0x3793, 0x31ee, 0x37fe, 0x31f4, 0x36f4, 0x390e, 0x3b97, 0x3963, 0x3510, 0x30f9, 0x3a6e, 0x35d3, 0x34ba, 0x3a05, 0x39de, 0x3646, 0x3b0f, 0x3b2e, 0x3698, 0x3bbd, 0x3306, 0x3990, 0x3984, 0x2e28, 0x3880, 0x3b82, 0x350c, 0x3a3e, 0x3b00, 0x3735, 0x3944, 0x39a1, 0x34ea, 0x3812, 0x3a9c, 0x2270, 0x3b9b, 0x383d, 0x34b9, 0x33ff, 0x314b, 0x35e9, 0x3a76, 0x3b80, 0x3922, 0x3767, 0x3119, -0x39f0, 0x391b, 0x37d6, 0x37d9, 0x3b86, 0x3923, 0x2434, 0x3be9, 0x3918, 0x36cb, 0x3b4a, 0x296e, 0x3bcf, 0x38d5, 0x3342, 0x3482, 0x3995, 0x3958, 0x33a0, 0x38a7, 0x3be6, 0x3b68, 0x3168, 0x398d, 0x3ab4, 0x325a, 0x3bd2, 0x3915, 0x1a9f, 0x356c, 0x303d, 0x3b50, 0x32c5, 0x3a1c, 0x3a0e, 0x392c, 0x3b24, 0x3b8b, 0x322b, 0x2661, 0x3bba, 0x35e3, 0x3be0, 0x38f5, 0x39ab, 0x316b, 0x3b05, 0x3a05, 0x3969, 0x370c, 0x3851, 0x3a7c, 0x3801, 0x3b8b, 0x38db, 0x3aef, 0x354a, 0x2845, 0x3ac7, 0x3547, 0x35c2, 0x3564, 0x30d5, 0x3bf1, 0x301b, 0x3434, 0x3583, 0x3a9c, 0x1c52, 0x2e1e, 0x3522, 0x3993, 0x3bfe, 0x3524, 0x370c, 0x33ed, 0x3981, 0x2bfe, 0x2ca4, 0x3b56, 0x3b03, 0x3450, 0x3768, 0x3baf, 0x3760, 0x3a8f, 0x2d31, 0x2c4e, 0x3167, 0x35e6, 0x396d, 0x3b31, 0x309b, 0x347e, 0x39ea, 0x3bb8, -0x3164, 0x2bac, 0x368e, 0x3bd4, 0x3427, 0x38b4, 0x3a4d, 0x39ba, 0x3a0d, 0x301a, 0x2fec, 0x2ce1, 0x3985, 0x2acc, 0x386d, 0x3808, 0x346b, 0x383b, 0x3b1b, 0x3406, 0x3bc5, 0x3b86, 0x3860, 0x35ae, 0x2e1c, 0x35d4, 0x350b, 0x35f5, 0x2a73, 0x3a6b, 0x364b, 0x3526, 0x278a, 0x375e, 0x299f, 0x39b0, 0x394e, 0x345d, 0x3760, 0x31ba, 0x3400, 0x3566, 0x3b36, 0x3a48, 0x34e3, 0x3b24, 0x347c, 0x32a3, 0x2da7, 0x364a, 0x33de, 0x33c5, 0x324f, 0x38f7, 0x3bfb, 0x3a94, 0x3312, 0x3924, 0x3831, 0x2ee6, 0x3b4a, 0x338b, 0x2bb3, 0x33ee, 0x3bf2, 0x3aa3, 0x376d, 0x1512, 0x37b5, 0x2e44, 0x39ad, 0x3b2f, 0x39a7, 0x3aa1, 0x2e75, 0x3955, 0x3663, 0x39a6, 0x296f, 0x34c6, 0x2ef3, 0x2fe3, 0x3647, 0x3bc2, 0x3b91, 0x376a, 0x39e5, 0x3466, 0x38b9, 0x3a80, 0x3861, 0x36ca, 0x3a2c, 0x3145, 0x3102, 0x33bc, -0x2ba4, 0x2eb9, 0x39ab, 0x33cf, 0x2c9f, 0x372c, 0x3973, 0x2ff9, 0x36a5, 0x3641, 0x3b93, 0x3bc9, 0x3ba9, 0x36cd, 0x3a8d, 0x3bd2, 0x399e, 0x34ed, 0x3b4c, 0x2c2b, 0x38f7, 0x3824, 0x2edd, 0x32fc, 0x30cc, 0x2b90, 0x2628, 0x3a65, 0x39de, 0x3800, 0x3a8c, 0x3a88, 0x1e84, 0x3890, 0x33b4, 0x37e8, 0x3aab, 0x342c, 0x3697, 0x379a, 0x2472, 0x38bb, 0x38d0, 0x3a8e, 0x393a, 0x34e7, 0x3baf, 0x37ce, 0x28c7, 0x32a5, 0x3a68, 0x3925, 0x3a49, 0x3944, 0x3976, 0x3866, 0x363a, 0x35e2, 0x296d, 0x29f3, 0x39a8, 0x3831, 0x3682, 0x3898, 0x2bca, 0x13aa, 0x37b8, 0x35fe, 0x3a5d, 0x3362, 0x34bd, 0x38c1, 0x3b66, 0x3801, 0x391b, 0x307b, 0x3936, 0x3ae2, 0x3899, 0x390a, 0x384b, 0x3af4, 0x3ae2, 0x35d2, 0x271a, 0x37ad, 0x3102, 0x38e5, 0x30b8, 0x2419, 0x30ee, 0x3437, 0x39b9, 0x3a44, 0x374e, 0x3551, -0x39a4, 0x35f6, 0x385e, 0x3864, 0x3977, 0x3159, 0x3625, 0x379a, 0x3b94, 0x3a2a, 0x2ea6, 0x38a1, 0x3ad9, 0x31cd, 0x3be9, 0x34ac, 0x38be, 0x3925, 0x36ae, 0x3bd3, 0x2e3b, 0x39d0, 0x3a89, 0x336b, 0x2d09, 0x3533, 0x382c, 0x2f0c, 0x385e, 0x3ba1, 0x3436, 0x39e4, 0x3a6b, 0x39b1, 0x3622, 0x334e, 0x38cd, 0x3740, 0x30d6, 0x391d, 0x3a70, 0x3390, 0x2c34, 0x3bf0, 0x3566, 0x3864, 0x2aaa, 0x2df7, 0x20cf, 0x3621, 0x39f8, 0x3ab0, 0x3a54, 0x39fb, 0x389e, 0x3724, 0x3755, 0x369d, 0x3944, 0x2843, 0x13b6, 0x316f, 0x3860, 0x3848, 0x3816, 0x315b, 0x3b72, 0x35e9, 0x396a, 0x399c, 0x3a7b, 0x315c, 0x3667, 0x37ae, 0x39f0, 0x386f, 0x3875, 0x3b25, 0x38ba, 0x3a14, 0x3abc, 0x36e1, 0x352d, 0x3904, 0x385d, 0x3b24, 0x32c9, 0x3afb, 0x3bd8, 0x3520, 0x145c, 0x378f, 0x3821, 0x2801, 0x3496, 0x3b18, -0x3716, 0x3bfe, 0x3591, 0x3b7d, 0x3a85, 0x3af1, 0x3abf, 0x38ae, 0x30cb, 0x3457, 0x3b9f, 0x32bc, 0x39e0, 0x33d6, 0x3acd, 0x38e4, 0x39bf, 0x39ce, 0x2c1a, 0x36c2, 0x3a5e, 0x3ba5, 0x3a2d, 0x3629, 0x3b8d, 0x36ce, 0x3997, 0x384a, 0x3acb, 0x36d2, 0x3b60, 0x3a38, 0x347d, 0x35b3, 0x286f, 0x2bf4, 0x3795, 0x2d33, 0x20c0, 0x3857, 0x3aac, 0x3766, 0x38c1, 0x3628, 0x2e3a, 0x3a93, 0x3ac6, 0x35ca, 0x3366, 0x3b05, 0x3a4c, 0x3be7, 0x37a8, 0x38c4, 0x36ae, 0x39b0, 0x34e1, 0x2dfc, 0x3b41, 0x385a, 0x306b, 0x3bfa, 0x39ab, 0x3ade, 0x3a80, 0x3574, 0x397e, 0x3792, 0x342e, 0x373c, 0x3918, 0x3275, 0x3827, 0x397e, 0x3889, 0x35b5, 0x30d7, 0x1d25, 0x30b4, 0x3580, 0x2ae1, 0x2bba, 0x38ea, 0x3a03, 0x3b44, 0x3539, 0x2de4, 0x3b56, 0x3949, 0x2792, 0x39ac, 0x31af, 0x3514, 0x3ac1, 0x34a6, 0x2c44, -0x330d, 0x36f5, 0x374e, 0x3bf7, 0x33ea, 0x3770, 0x2733, 0x30ef, 0x3b72, 0x2d2a, 0x392d, 0x36fb, 0x3a83, 0x34a1, 0x334c, 0x30b3, 0x2987, 0x3584, 0x3ab0, 0x3a9d, 0x2b67, 0x3a56, 0x35ba, 0x325f, 0x39b7, 0x2abd, 0x3a40, 0x38bf, 0x37b9, 0x3a67, 0x204a, 0x328d, 0x3403, 0x3adc, 0x2c0f, 0x3923, 0x39bc, 0x366a, 0x3082, 0x39d1, 0x3ad5, 0x3a4f, 0x3207, 0x3631, 0x381e, 0x3961, 0x358d, 0x3664, 0x3363, 0x3bf9, 0x372c, 0x3a5d, 0x3878, 0x335a, 0x35a2, 0x3532, 0x3809, 0x2ecb, 0x32e3, 0x3996, 0x36cf, 0x362f, 0x38d5, 0x39c7, 0x2ccd, 0x37c7, 0x2ba2, 0x3b59, 0x26c9, 0x38fa, 0x3b8a, 0x3bed, 0x3868, 0x3942, 0x393a, 0x3999, 0x363f, 0x3375, 0x3bc6, 0x3098, 0x384c, 0x381e, 0x39c6, 0x39be, 0x3204, 0x2023, 0x3acf, 0x3b55, 0x3850, 0x3ae7, 0x37ac, 0x388a, 0x3b11, 0x36e1, 0x2f03, 0x3a6d, -0x2f6f, 0x39b2, 0x308a, 0x3253, 0x3976, 0x38bd, 0x3bfa, 0x3b6d, 0x3816, 0x287b, 0x3588, 0x392b, 0x30bc, 0x3b83, 0x3a9b, 0x300d, 0x3ba4, 0x2d26, 0x372a, 0x3914, 0x36ee, 0x2f72, 0x3ad3, 0x323b, 0x32b6, 0x3a71, 0x3a92, 0x2416, 0x3ab2, 0x39c8, 0x313c, 0x3a5e, 0x3ab9, 0x30ed, 0x3ac3, 0x3339, 0x291e, 0x3847, 0x3bb9, 0x3b7c, 0x3369, 0x3aa1, 0x3b93, 0x380a, 0x33fd, 0x3545, 0x399a, 0x25a4, 0x36c6, 0x37fe, 0x3ae8, 0x3ad7, 0x3be3, 0x3589, 0x370e, 0x3299, 0x3358, 0x3960, 0x36e2, 0x3af9, 0x3676, 0x3b75, 0x39df, 0x32bf, 0x387f, 0x2764, 0x39ae, 0x32b4, 0x36bf, 0x3161, 0x3a40, 0x3bcb, 0x3447, 0x3a0d, 0x2baa, 0x38c7, 0x333a, 0x3a4b, 0x394f, 0x381d, 0x38bd, 0x2b6b, 0x388d, 0x3a37, 0x384e, 0x3b19, 0x31dc, 0x3236, 0x33aa, 0x32f2, 0x32b0, 0x3b95, 0x3bd2, 0x1db0, 0x36d4, 0x38ae, -0x3161, 0x30b6, 0x3784, 0x3701, 0x387e, 0x36ef, 0x2ad7, 0x3ab4, 0x3897, 0x397d, 0x355d, 0x34e3, 0x351d, 0x3b95, 0x3b12, 0x1c76, 0x3b71, 0x3b9a, 0x37e5, 0x3bc6, 0x2576, 0x33c0, 0x398e, 0x39d1, 0x37b9, 0x3a9f, 0x234c, 0x3979, 0x36a2, 0x3aad, 0x355c, 0x3479, 0x2d97, 0x2d54, 0x2ecb, 0x3481, 0x38ba, 0x32e2, 0x380c, 0x2f81, 0x3b87, 0x3a01, 0x35b6, 0x35f6, 0x389a, 0x341e, 0x3180, 0x35d7, 0x31af, 0x3983, 0x38ec, 0x298c, 0x3bea, 0x38d3, 0x2ba1, 0x32b9, 0x2f3e, 0x3b84, 0x3003, 0x34ff, 0x3bd9, 0x323b, 0x375a, 0x3462, 0x3824, 0x303d, 0x381a, 0x385e, 0x3bfd, 0x3993, 0x39c6, 0x3a0f, 0x3b8c, 0x3353, 0x3295, 0x39b6, 0x28dd, 0x3a8e, 0x3043, 0x2d8e, 0x3b67, 0x3504, 0x3b32, 0x30b6, 0x3a4c, 0x3239, 0x3443, 0x3031, 0x3afb, 0x3b11, 0x30f8, 0x3299, 0x3be6, 0x3476, 0x3a49, 0x3441, -0x31e8, 0x3992, 0x3509, 0x3313, 0x3635, 0x35cc, 0x3963, 0x3545, 0x3ba3, 0x2443, 0x35c5, 0x3bb8, 0x3a2e, 0x3642, 0x3ae7, 0x3832, 0x333e, 0x34d3, 0x37f5, 0x38a6, 0x39a9, 0x3850, 0x3ad9, 0x2a1f, 0x271c, 0x3878, 0x3586, 0x362d, 0x3922, 0x3ab8, 0x310e, 0x369c, 0x2efb, 0x3bde, 0x38c2, 0x3af3, 0x393a, 0x3401, 0x315e, 0x305f, 0x38f5, 0x39bf, 0x36c6, 0x3544, 0x3213, 0x386f, 0x378f, 0x3214, 0x3900, 0x35a4, 0x3bbd, 0x2f98, 0x3a9d, 0x3b3d, 0x395a, 0x3932, 0x3515, 0x2ef8, 0x3af6, 0x2d82, 0x2845, 0x39f8, 0x2b6d, 0x38eb, 0x3300, 0x2e15, 0x3788, 0x3962, 0x2e88, 0x356d, 0x3a36, 0x3bd3, 0x2485, 0x38fc, 0x3843, 0x38c0, 0x1351, 0x3aea, 0x2c6d, 0x3ad0, 0x337d, 0x394e, 0x3823, 0x34f9, 0x342e, 0x3203, 0x3b9a, 0x3ade, 0x357a, 0x3734, 0x398f, 0x3302, 0x3b51, 0x3607, 0x35c9, 0x2be4, -0x38d7, 0x3450, 0x359a, 0x2a01, 0x3a33, 0x3536, 0x3a66, 0x360d, 0x3b2f, 0x3a0f, 0x3a84, 0x36b5, 0x3920, 0x389e, 0x3622, 0x3175, 0x370e, 0x32d1, 0x3a64, 0x3a2d, 0x3afc, 0x36f1, 0x3b64, 0x3268, 0x36b8, 0x3b0e, 0x34f4, 0x3b5d, 0x38ac, 0x3153, 0x3128, 0x3670, 0x3b70, 0x39be, 0x3989, 0x35ae, 0x333a, 0x2bfb, 0x3ad9, 0x344c, 0x3ba9, 0x3b6c, 0x335e, 0x3a80, 0x2451, 0x3823, 0x385e, 0x30e0, 0x38e3, 0x30ad, 0x36a0, 0x3a1e, 0x37db, 0x193d, 0x3675, 0x3110, 0x394c, 0x2f96, 0x2c1f, 0x3982, 0x388d, 0x2ccc, 0x343e, 0x3a8c, 0x3710, 0x2da8, 0x384f, 0x35d2, 0x3174, 0x3267, 0x349c, 0x345a, 0x37f3, 0x380a, 0x3814, 0x380c, 0x3acc, 0x325e, 0x3738, 0x32ef, 0x3223, 0x3488, 0x36d9, 0x394d, 0x3450, 0x378c, 0x328e, 0x332a, 0x3b8e, 0x381d, 0x314a, 0x3530, 0x3378, 0x3a88, 0x3bf8, 0x30e7, -0x3860, 0x38b5, 0x3bc1, 0x2da6, 0x3b83, 0x3a43, 0x372a, 0x392c, 0x3404, 0x3449, 0x3972, 0x3bc5, 0x2dc0, 0x39dc, 0x354c, 0x24f9, 0x3617, 0x3bc1, 0x3960, 0x3762, 0x3962, 0x39e3, 0x3afe, 0x3a21, 0x3834, 0x3856, 0x3ad1, 0x36a8, 0x3b2b, 0x36eb, 0x2f4f, 0x3801, 0x3b42, 0x3af3, 0x380f, 0x326c, 0x351a, 0x3914, 0x38b2, 0x3a84, 0x369e, 0x3925, 0x3213, 0x3b80, 0x3763, 0x3af9, 0x2e55, 0x30ba, 0x3a12, 0x347f, 0x39d7, 0x3a46, 0x2ec5, 0x3b6a, 0x3b7f, 0x3a3f, 0x2eea, 0x38db, 0x33be, 0x356a, 0x3a21, 0x3623, 0x3822, 0x3a63, 0x34ef, 0x373b, 0x2d60, 0x3428, 0x3121, 0x3b9a, 0x3948, 0x3687, 0x382b, 0x2144, 0x3254, 0x387f, 0x3512, 0x357c, 0x3891, 0x2e61, 0x368a, 0x33a8, 0x3b26, 0x2e33, 0x282a, 0x2c3a, 0x365c, 0x35c7, 0x3b90, 0x3866, 0x3a86, 0x35cc, 0x3689, 0x3212, 0x3a1e, 0x3555, -0x2f7e, 0x3b2e, 0x3204, 0x3b95, 0x38c5, 0x394d, 0x3908, 0x3b28, 0x388d, 0x36c6, 0x3ac3, 0x3bc6, 0x305d, 0x3a21, 0x3477, 0x39c1, 0x34e7, 0x3ba1, 0x3850, 0x3276, 0x3513, 0x3576, 0x3407, 0x37e4, 0x2dde, 0x3113, 0x389b, 0x34cc, 0x3736, 0x34de, 0x3348, 0x3942, 0x3044, 0x365f, 0x3a40, 0x3a33, 0x34fb, 0x389a, 0x3983, 0x382e, 0x381d, 0x3293, 0x34a2, 0x330d, 0x31f1, 0x3b44, 0x3861, 0x35e1, 0x331a, 0x3839, 0x39d0, 0x3b0a, 0x34d0, 0x37dd, 0x332b, 0x38f4, 0x3ad1, 0x25b4, 0x3bee, 0x31ee, 0x31fc, 0x382d, 0x3889, 0x352b, 0x38a5, 0x21c1, 0x2e21, 0x3425, 0x2d5e, 0x28f2, 0x3ad7, 0x3945, 0x3282, 0x3844, 0x39d9, 0x2e75, 0x3adb, 0x3703, 0x3966, 0x383a, 0x2d09, 0x3008, 0x3b9f, 0x3b0f, 0x304a, 0x373e, 0x3a84, 0x3739, 0x39cd, 0x3678, 0x3a04, 0x2fe1, 0x3572, 0x3853, 0x38f6, 0x3abc, -0x3b09, 0x3b5a, 0x3be6, 0x2424, 0x345a, 0x3992, 0x3738, 0x35a8, 0x3379, 0x3949, 0x3a93, 0x37d9, 0x2fe8, 0x3a1c, 0x322a, 0x26b8, 0x3af8, 0x327a, 0x34f0, 0x3632, 0x3485, 0x385f, 0x3b33, 0x3396, 0x3ad8, 0x379a, 0x384e, 0x35e6, 0x331e, 0x3b6d, 0x34ca, 0x3997, 0x39c8, 0x3a97, 0x387d, 0x1854, 0x35d1, 0x3bd9, 0x389e, 0x365a, 0x396e, 0x2f7d, 0x3910, 0x388f, 0x39e6, 0x3a8e, 0x3a9e, 0x39b2, 0x2ff2, 0x39fc, 0x346f, 0x39bf, 0x3711, 0x3951, 0x3856, 0x39ea, 0x318e, 0x3778, 0x393c, 0x37ba, 0x3781, 0x3ad5, 0x3638, 0x3b18, 0x286d, 0x314b, 0x3b67, 0x3186, 0x37c4, 0x39f7, 0x376f, 0x3b12, 0x3882, 0x36b6, 0x3a84, 0x329a, 0x24a9, 0x38e3, 0x35ca, 0x3b5b, 0x333f, 0x3994, 0x3369, 0x385b, 0x3871, 0x3aac, 0x3649, 0x3953, 0x31d4, 0x3b45, 0x3808, 0x36e0, 0x35c6, 0x2bd8, 0x39b7, 0x3bd9, -0x3aa5, 0x340f, 0x3721, 0x35e0, 0x3a8f, 0x3ac1, 0x3b3f, 0x1e07, 0x342a, 0x36a2, 0x3830, 0x2dff, 0x35c4, 0x3441, 0x3ac6, 0x383f, 0x3bb1, 0x32d5, 0x3870, 0x3757, 0x36a5, 0x38c3, 0x3158, 0x377d, 0x363d, 0x2ede, 0x3698, 0x2f0b, 0x3860, 0x1a39, 0x39b4, 0x39c3, 0x35e2, 0x3529, 0x35e4, 0x38d3, 0x358a, 0x2cc9, 0x3665, 0x3479, 0x3917, 0x36f9, 0x34d3, 0x39f7, 0x3688, 0x3950, 0x36d5, 0x3a15, 0x35fd, 0x3556, 0x3751, 0x30b6, 0x3906, 0x3b32, 0x387f, 0x2d69, 0x3628, 0x3b4c, 0x3b17, 0x38ff, 0x3852, 0x38c4, 0x37e0, 0x368d, 0x38f6, 0x3885, 0x398e, 0x37dd, 0x3867, 0x35e7, 0x3bd1, 0x38a1, 0x3882, 0x2d3d, 0x3b21, 0x3443, 0x3381, 0x36df, 0x38ba, 0x3a7c, 0x3a03, 0x3881, 0x352b, 0x3914, 0x3b69, 0x3564, 0x3141, 0x3940, 0x327b, 0x390b, 0x3710, 0x3952, 0x3a3e, 0x3825, 0x3ae8, 0x39f8, -0x3950, 0x3a9d, 0x3a2c, 0x35d5, 0x34b7, 0x3a46, 0x3a47, 0x344e, 0x3a08, 0x3362, 0x3285, 0x33e8, 0x3618, 0x39fb, 0x2c3c, 0x39b0, 0x1336, 0x36bd, 0x358c, 0x3bc0, 0x354d, 0x38be, 0x3a08, 0x34e9, 0x3801, 0x3be9, 0x35fa, 0x3015, 0x26bc, 0x399e, 0x36d1, 0x3218, 0x3a92, 0x2ad4, 0x3114, 0x364e, 0x3aa5, 0x35cb, 0x354a, 0x2da0, 0x2fc1, 0x36a2, 0x2fde, 0x3b28, 0x367f, 0x32eb, 0x3b7e, 0x3912, 0x3894, 0x323f, 0x3807, 0x3971, 0x3b61, 0x2381, 0x3ac6, 0x3868, 0x3980, 0x3a49, 0x3183, 0x3657, 0x3851, 0x3956, 0x37be, 0x38ea, 0x38b3, 0x37e2, 0x38ca, 0x3b3b, 0x3543, 0x38af, 0x247b, 0x3716, 0x3b75, 0x3667, 0x3801, 0x2a16, 0x3b46, 0x2bb3, 0x3832, 0x3b8e, 0x3a02, 0x37e2, 0x38b7, 0x2a58, 0x3b4b, 0x3b3c, 0x3914, 0x27f4, 0x3512, 0x3934, 0x3a17, 0x3a1b, 0x3bab, 0x3ae0, 0x3ab8, 0x3454, -0x32bc, 0x35d5, 0x3b7f, 0x388c, 0x3740, 0x3290, 0x2d2a, 0x2bf5, 0x304b, 0x3a10, 0x388e, 0x2e4e, 0x3126, 0x3477, 0x386d, 0x3bc5, 0x3643, 0x3589, 0x3665, 0x39c5, 0x315d, 0x3375, 0x3b3d, 0x38bb, 0x320a, 0x371d, 0x3873, 0x31df, 0x3534, 0x3b7a, 0x3809, 0x3b1f, 0x3868, 0x35ec, 0x397c, 0x3535, 0x3be5, 0x3857, 0x3ae4, 0x338c, 0x3ace, 0x3931, 0x3bcc, 0x30d9, 0x3bb2, 0x38d5, 0x3840, 0x3aef, 0x385c, 0x3974, 0x3b1b, 0x369c, 0x3b54, 0x3074, 0x39bb, 0x3a1d, 0x2e7d, 0x34f9, 0x3a6c, 0x3505, 0x3ae2, 0x30df, 0x3ac9, 0x3460, 0x3517, 0x3b85, 0x3488, 0x3440, 0x3aab, 0x3089, 0x3879, 0x3343, 0x3395, 0x329f, 0x3753, 0x3a08, 0x388b, 0x3ac1, 0x3478, 0x33f5, 0x3a65, 0x343f, 0x307e, 0x38f3, 0x37a0, 0x3259, 0x3210, 0x385a, 0x3bff, 0x297f, 0x2e3b, 0x2e41, 0x3921, 0x3654, 0x34c2, 0x3bf6, -0x2dca, 0x391f, 0x399f, 0x2fae, 0x38c6, 0x2fea, 0x36a0, 0x31d7, 0x3a0a, 0x2adb, 0x31c7, 0x3bf1, 0x313c, 0x3a0f, 0x36d3, 0x3854, 0x355f, 0x3991, 0x3b44, 0x3b0c, 0x3aa8, 0x37f0, 0x38cf, 0x3394, 0x373a, 0x38ee, 0x3871, 0x3977, 0x29ef, 0x23f6, 0x3b79, 0x2430, 0x31ea, 0x2f51, 0x3b09, 0x39fa, 0x34c0, 0x2a71, 0x3186, 0x3869, 0x2c9d, 0x3995, 0x3a89, 0x3a6a, 0x308a, 0x32f2, 0x39e9, 0x3902, 0x3970, 0x3986, 0x3931, 0x3918, 0x36ab, 0x3a86, 0x38c2, 0x39f0, 0x2ca6, 0x3bac, 0x36b8, 0x34d2, 0x383e, 0x304a, 0x299b, 0x3172, 0x3b3b, 0x38e3, 0x39a0, 0x3b28, 0x3822, 0x3548, 0x35d3, 0x3a14, 0x282b, 0x39e4, 0x2d29, 0x3a68, 0x2dc2, 0x32c2, 0x3aa2, 0x3625, 0x3553, 0x3809, 0x3993, 0x3811, 0x3456, 0x2f37, 0x3210, 0x393f, 0x323c, 0x30eb, 0x361c, 0x3276, 0x3097, 0x34ee, 0x34f8, 0x31cd, -0x3ba8, 0x2a42, 0x31b2, 0x38e3, 0x3951, 0x29e1, 0x2e0a, 0x3a69, 0x2f3f, 0x3b90, 0x3634, 0x3b61, 0x35ef, 0x34c4, 0x386f, 0x2aae, 0x38a6, 0x1edc, 0x38f0, 0x37e7, 0x3ac3, 0x32fe, 0x3645, 0x31ef, 0x33e8, 0x3447, 0x3ad8, 0x3b4e, 0x193e, 0x2514, 0x36ad, 0x3b4c, 0x39d8, 0x3285, 0x31c9, 0x3a64, 0x2c2d, 0x3994, 0x302a, 0x3a31, 0x3adb, 0x2bfa, 0x3554, 0x399f, 0x32a0, 0x393b, 0x3831, 0x3a94, 0x2f96, 0x38bb, 0x3b49, 0x2168, 0x396c, 0x3425, 0x3b8d, 0x2634, 0x38fd, 0x3894, 0x3ac8, 0x3b82, 0x3891, 0x39a0, 0x3422, 0x36e1, 0x3727, 0x3802, 0x388e, 0x392d, 0x37ec, 0x340f, 0x2424, 0x3812, 0x3af6, 0x3352, 0x36e2, 0x385e, 0x3ba8, 0x38ca, 0x3986, 0x3b9e, 0x3319, 0x3be8, 0x389f, 0x29ea, 0x35c2, 0x394f, 0x33b7, 0x388b, 0x388d, 0x3bb5, 0x34f9, 0x35ff, 0x3842, 0x3181, 0x3889, 0x38ec, -0x34b9, 0x3818, 0x3af1, 0x35b7, 0x3462, 0x39bf, 0x3641, 0x367d, 0x3560, 0x2c3b, 0x3b63, 0x2cdc, 0x33be, 0x3a92, 0x2cf5, 0x3216, 0x315f, 0x39dc, 0x3b1a, 0x37e4, 0x3446, 0x37dc, 0x3934, 0x3835, 0x3916, 0x37d0, 0x384e, 0x2d75, 0x3268, 0x3570, 0x3506, 0x38e0, 0x38c0, 0x395f, 0x38bd, 0x3022, 0x3b3e, 0x393b, 0x3479, 0x3726, 0x3432, 0x3699, 0x38dc, 0x2def, 0x2ab6, 0x2fad, 0x3a35, 0x35b5, 0x30a8, 0x3968, 0x38ab, 0x3a6e, 0x346e, 0x3988, 0x3434, 0x35b6, 0x36dc, 0x2e2e, 0x2b5c, 0x3300, 0x32f9, 0x382a, 0x3bc2, 0x3b6f, 0x2ca0, 0x2d85, 0x397c, 0x38a1, 0x36e4, 0x37f0, 0x39ec, 0x30fb, 0x3bfb, 0x3a04, 0x301a, 0x3b8c, 0x39eb, 0x3a96, 0x39bc, 0x3921, 0x319b, 0x3805, 0x3b5f, 0x39ad, 0x316b, 0x3b91, 0x2c1d, 0x3b87, 0x35d3, 0x3b01, 0x36ad, 0x393f, 0x3674, 0x3603, 0x3af9, 0x2fa1, -0x3a49, 0x34d3, 0x3af0, 0x28b4, 0x3afb, 0x3684, 0x3640, 0x37ae, 0x38d3, 0x3916, 0x3699, 0x3b36, 0x38e7, 0x3ad9, 0x39af, 0x376a, 0x388f, 0x35c7, 0x3664, 0x3840, 0x3506, 0x3b62, 0x3347, 0x3a30, 0x347c, 0x3ae5, 0x3542, 0x35d6, 0x32f6, 0x38e3, 0x2091, 0x3a7f, 0x3b5a, 0x3610, 0x38c9, 0x348b, 0x37bf, 0x346a, 0x38a2, 0x3939, 0x3842, 0x3a03, 0x3afe, 0x1ec8, 0x3158, 0x3afc, 0x39e9, 0x3b79, 0x351a, 0x314e, 0x242c, 0x34b5, 0x3bc6, 0x25a0, 0x3b95, 0x29e3, 0x3517, 0x3bff, 0x3a4b, 0x3a79, 0x355f, 0x33cd, 0x35df, 0x3ab8, 0x39d4, 0x3afe, 0x35f7, 0x38aa, 0x2fc1, 0x3342, 0x394c, 0x3603, 0x3811, 0x3a0b, 0x34eb, 0x2ca7, 0x3192, 0x3a89, 0x396e, 0x3731, 0x3af0, 0x2cca, 0x3843, 0x36e3, 0x39f5, 0x2d99, 0x2a6b, 0x33bf, 0x2609, 0x32f0, 0x32ce, 0x35dd, 0x380d, 0x32e2, 0x3b6a, 0x3a8e, -0x2ced, 0x32da, 0x3a21, 0x367d, 0x36cd, 0x3631, 0x2b0d, 0x31fd, 0x3b89, 0x2e45, 0x3916, 0x362b, 0x3852, 0x2c73, 0x32a6, 0x3013, 0x396f, 0x3984, 0x3104, 0x3a93, 0x39de, 0x3807, 0x3464, 0x36bb, 0x36e7, 0x3aa3, 0x372a, 0x38ce, 0x3a85, 0x3bae, 0x27b1, 0x34c7, 0x37e5, 0x2be5, 0x3a8c, 0x2e62, 0x3b13, 0x2ee8, 0x3782, 0x3a40, 0x31b0, 0x37fd, 0x3759, 0x3382, 0x3bcc, 0x32fd, 0x3bdc, 0x39eb, 0x3a01, 0x380e, 0x31a6, 0x39f6, 0x38fc, 0x37c5, 0x3be0, 0x347a, 0x3524, 0x2da5, 0x23ed, 0x25e0, 0x3af4, 0x27f6, 0x39cd, 0x3575, 0x3827, 0x3b1d, 0x3bf3, 0x3bd8, 0x3697, 0x3b52, 0x2ec3, 0x33c0, 0x3b26, 0x3ab5, 0x34f6, 0x30f2, 0x38ff, 0x39ae, 0x3620, 0x32a6, 0x365a, 0x3a13, 0x2a9a, 0x28a9, 0x3198, 0x3819, 0x38bb, 0x3731, 0x3b3d, 0x37db, 0x3abb, 0x3be6, 0x34c7, 0x3709, 0x3959, 0x3556, -0x3b82, 0x36c8, 0x352e, 0x3a99, 0x3942, 0x37e9, 0x39c9, 0x3900, 0x123c, 0x3b9a, 0x3b46, 0x3a9a, 0x3a06, 0x36e3, 0x38bd, 0x3622, 0x396c, 0x3a7d, 0x361f, 0x3b83, 0x297b, 0x3a4b, 0x323f, 0x3b61, 0x3ac5, 0x24e9, 0x3138, 0x359a, 0x2931, 0x3b63, 0x3a8d, 0x3aa0, 0x384f, 0x3a36, 0x3641, 0x3af0, 0x3ada, 0x3526, 0x3a5c, 0x39cc, 0x3803, 0x3572, 0x3994, 0x3b9e, 0x3a64, 0x36ae, 0x37ec, 0x3ad2, 0x312b, 0x3434, 0x3b89, 0x38d1, 0x3309, 0x3573, 0x38e2, 0x2c51, 0x3b19, 0x3a0b, 0x3a49, 0x392a, 0x3ae7, 0x341f, 0x3701, 0x3577, 0x3a6b, 0x3864, 0x356f, 0x3a73, 0x3bdd, 0x39e1, 0x3397, 0x31c9, 0x3618, 0x3973, 0x3848, 0x2e85, 0x3adb, 0x30d0, 0x349e, 0x3121, 0x397e, 0x3ae2, 0x351f, 0x3137, 0x3903, 0x3b71, 0x3a3e, 0x3189, 0x3a1a, 0x39a5, 0x38b6, 0x35ee, 0x2c56, 0x3a09, 0x33a1, 0x294a, -0x382b, 0x39a6, 0x335a, 0x3687, 0x30cf, 0x38cc, 0x32d6, 0x2181, 0x3a52, 0x2cfb, 0x3991, 0x39bc, 0x3706, 0x3a02, 0x386e, 0x3b54, 0x3781, 0x381c, 0x38eb, 0x3b5d, 0x39c2, 0x38f2, 0x3b4c, 0x3bd7, 0x292a, 0x37c1, 0x3bfa, 0x29b6, 0x381e, 0x32ca, 0x3a70, 0x3a3a, 0x3ad7, 0x3042, 0x2ecb, 0x3bb6, 0x3703, 0x38fe, 0x3866, 0x3a69, 0x3bc7, 0x3b34, 0x2cfd, 0x2220, 0x3ba7, 0x3849, 0x39b3, 0x284b, 0x3a18, 0x39d9, 0x3aaf, 0x3809, 0x3be3, 0x3749, 0x2b7b, 0x382c, 0x356c, 0x37ac, 0x2a66, 0x3abb, 0x23d2, 0x3912, 0x3085, 0x2a21, 0x3b7a, 0x3616, 0x35f1, 0x3595, 0x3bd3, 0x356b, 0x3929, 0x3b99, 0x3a5f, 0x30f4, 0x3866, 0x3a8e, 0x2ca2, 0x3904, 0x3735, 0x373a, 0x3a5f, 0x3ba5, 0x2001, 0x39dc, 0x3a26, 0x3987, 0x3163, 0x3816, 0x2b55, 0x369c, 0x3aab, 0x3508, 0x3b86, 0x340d, 0x34d6, 0x3766, -0x3691, 0x3723, 0x2e9f, 0x38a2, 0x3a6a, 0x3645, 0x2e83, 0x2f93, 0x3947, 0x3744, 0x352b, 0x365c, 0x3a34, 0x3a63, 0x3bae, 0x3977, 0x281c, 0x377c, 0x3584, 0x3bf9, 0x2f97, 0x34c8, 0x3af7, 0x38e7, 0x3acf, 0x384d, 0x3bdd, 0x387d, 0x3a8f, 0x399e, 0x34e0, 0x3a84, 0x31b5, 0x291d, 0x394d, 0x3967, 0x3a1f, 0x378e, 0x3618, 0x386e, 0x345c, 0x3916, 0x353a, 0x3176, 0x396f, 0x2bc1, 0x3b5c, 0x3b8a, 0x2d3c, 0x354b, 0x2c50, 0x3539, 0x2c35, 0x320f, 0x3914, 0x2a96, 0x3bcf, 0x3a20, 0x3a5b, 0x372e, 0x35f5, 0x3992, 0x3b39, 0x39b8, 0x3aea, 0x3bb5, 0x3a65, 0x3884, 0x2b7a, 0x3b7d, 0x3455, 0x3039, 0x36b1, 0x31c8, 0x391b, 0x3942, 0x3b4b, 0x365c, 0x3a2c, 0x39b6, 0x3b02, 0x3901, 0x33b8, 0x3ad1, 0x2c3d, 0x3955, 0x3857, 0x33bb, 0x2ef2, 0x3446, 0x3917, 0x3ad2, 0x34be, 0x3939, 0x35ab, 0x370f, -0x32c0, 0x2fdc, 0x3b63, 0x2a85, 0x3a47, 0x34c2, 0x3651, 0x31c5, 0x2b72, 0x3b43, 0x3ba3, 0x2c85, 0x3958, 0x3bc2, 0x3818, 0x35d3, 0x3bec, 0x32c4, 0x301a, 0x351a, 0x3706, 0x348e, 0x2194, 0x3830, 0x324f, 0x3a6d, 0x3b87, 0x2a73, 0x3ba9, 0x3ad9, 0x39cd, 0x3af6, 0x1d41, 0x31e5, 0x3abb, 0x3184, 0x3911, 0x318e, 0x39a7, 0x3295, 0x39fd, 0x342a, 0x3822, 0x3be0, 0x3a97, 0x386d, 0x35cf, 0x39bd, 0x29b2, 0x320f, 0x2fe7, 0x2f1e, 0x2c19, 0x3054, 0x3907, 0x3a78, 0x2093, 0x3901, 0x2e53, 0x3981, 0x3713, 0x3b18, 0x3b76, 0x3bee, 0x39f2, 0x2c64, 0x3680, 0x3b35, 0x39db, 0x34a2, 0x3963, 0x3a3c, 0x3b52, 0x34a1, 0x3951, 0x3aad, 0x2870, 0x35fc, 0x3a47, 0x3955, 0x37e9, 0x36c2, 0x3a4c, 0x2bd8, 0x34ee, 0x3751, 0x3ae0, 0x3b51, 0x2861, 0x3391, 0x2fa9, 0x3837, 0x35cb, 0x304b, 0x3b0f, 0x358b, -0x2f61, 0x3096, 0x3a54, 0x3059, 0x39af, 0x3b95, 0x2c6d, 0x2faf, 0x38f6, 0x3427, 0x3af3, 0x343d, 0x3b5a, 0x341e, 0x32d7, 0x224f, 0x3af7, 0x3159, 0x346d, 0x3535, 0x34c2, 0x371f, 0x39d4, 0x380b, 0x310c, 0x206a, 0x3a65, 0x3976, 0x3af2, 0x39ab, 0x39df, 0x327f, 0x399c, 0x2d96, 0x38a4, 0x357c, 0x2f8f, 0x3046, 0x38ae, 0x3ac4, 0x38b8, 0x2c03, 0x34c0, 0x3171, 0x39c1, 0x3802, 0x366d, 0x341f, 0x3286, 0x36f0, 0x397f, 0x2176, 0x3aac, 0x3b7a, 0x3a3a, 0x3919, 0x3585, 0x2cc4, 0x39ed, 0x2833, 0x3b9e, 0x36e3, 0x3a31, 0x3a48, 0x38a8, 0x3401, 0x3b8e, 0x38a0, 0x3a07, 0x378d, 0x3512, 0x33a7, 0x3977, 0x3862, 0x357d, 0x3922, 0x371f, 0x318d, 0x3b57, 0x3667, 0x313b, 0x3bf3, 0x35e0, 0x3ae6, 0x3668, 0x2940, 0x2d29, 0x30f4, 0x3a66, 0x3b0d, 0x3b12, 0x35dd, 0x390b, 0x3990, 0x3011, 0x2b64, -0x334f, 0x3b09, 0x398f, 0x34e0, 0x28d3, 0x3385, 0x39e4, 0x357c, 0x3a45, 0x2df3, 0x2c61, 0x3569, 0x355e, 0x3b14, 0x3012, 0x1c32, 0x3a0e, 0x39d3, 0x20f2, 0x38f4, 0x398b, 0x3b9c, 0x374a, 0x3916, 0x3a5a, 0x3892, 0x3720, 0x38de, 0x3809, 0x3173, 0x38a4, 0x3698, 0x3815, 0x30a5, 0x3a18, 0x3534, 0x2e89, 0x3657, 0x2fc1, 0x39c5, 0x3b59, 0x337f, 0x383b, 0x3ba1, 0x2d4d, 0x2d7a, 0x3b8e, 0x39c9, 0x2b4a, 0x2d1b, 0x3af3, 0x375a, 0x360a, 0x3977, 0x398f, 0x3bb2, 0x358c, 0x369e, 0x390f, 0x35ed, 0x392c, 0x33d4, 0x3a6b, 0x3ade, 0x38b2, 0x3424, 0x2d4f, 0x3aeb, 0x3802, 0x33fa, 0x31c4, 0x35ef, 0x3b51, 0x2d27, 0x3912, 0x351a, 0x36ea, 0x3869, 0x2c73, 0x264b, 0x371d, 0x3a9e, 0x3159, 0x3a54, 0x3849, 0x394e, 0x3921, 0x3435, 0x38aa, 0x33ae, 0x3950, 0x3adf, 0x3b9b, 0x3a1d, 0x3706, 0x3b43, -0x3541, 0x3b8a, 0x3528, 0x39da, 0x36fa, 0x392e, 0x3195, 0x38e7, 0x392a, 0x366f, 0x308f, 0x29d5, 0x3be5, 0x345a, 0x35b5, 0x395b, 0x3a76, 0x3224, 0x1958, 0x39e1, 0x3b98, 0x3b80, 0x30a5, 0x3461, 0x3471, 0x365a, 0x3af0, 0x30ac, 0x38dd, 0x38ca, 0x2d58, 0x3bf4, 0x35bc, 0x3478, 0x235b, 0x3b92, 0x391f, 0x39e3, 0x3b11, 0x3afb, 0x2ea4, 0x2c61, 0x3756, 0x3821, 0x38d6, 0x3938, 0x3478, 0x3813, 0x3740, 0x31ea, 0x3b6d, 0x3be6, 0x2a58, 0x36c6, 0x31ee, 0x3642, 0x3b29, 0x37df, 0x337d, 0x336b, 0x3afa, 0x352b, 0x3aa6, 0x3898, 0x37cc, 0x33f2, 0x3b20, 0x3a61, 0x380e, 0x3b37, 0x38e6, 0x3b79, 0x365a, 0x387a, 0x24c7, 0x3301, 0x3b10, 0x3afb, 0x3819, 0x3aa3, 0x38cd, 0x384d, 0x3661, 0x383e, 0x3a34, 0x3b1a, 0x2d83, 0x36a8, 0x3b75, 0x3b0e, 0x363d, 0x3a67, 0x392e, 0x389c, 0x35a3, 0x2e39, -0x3ae7, 0x3849, 0x3bc7, 0x2a99, 0x31b2, 0x3535, 0x32dc, 0x2ab5, 0x3b34, 0x398c, 0x2b94, 0x36b5, 0x39fe, 0x376a, 0x39ee, 0x34f9, 0x31ce, 0x3968, 0x3809, 0x3261, 0x38f8, 0x3b62, 0x3807, 0x3992, 0x3b8e, 0x39e0, 0x3614, 0x3b23, 0x36d0, 0x38da, 0x3a8c, 0x3b55, 0x316c, 0x3b5d, 0x3531, 0x39a5, 0x24db, 0x293c, 0x3822, 0x38dc, 0x316f, 0x3750, 0x3601, 0x30bf, 0x3a74, 0x24af, 0x258b, 0x3bec, 0x293c, 0x3868, 0x360e, 0x310d, 0x36b3, 0x344c, 0x2cf0, 0x3476, 0x3a3a, 0x2e52, 0x3939, 0x3a69, 0x34df, 0x3a5b, 0x39c0, 0x347c, 0x371d, 0x391d, 0x3913, 0x306f, 0x3bfe, 0x380f, 0x3959, 0x39bd, 0x3619, 0x34e2, 0x36c6, 0x39bc, 0x3a2c, 0x3bc3, 0x3a29, 0x2c45, 0x3ac4, 0x3b46, 0x3a5c, 0x3be6, 0x2c2c, 0x3757, 0x39cb, 0x30f0, 0x38c8, 0x3154, 0x38b5, 0x3480, 0x3835, 0x3b8c, 0x311d, 0x3570, -0x38c4, 0x3400, 0x2d91, 0x3a09, 0x312a, 0x39e9, 0x3b4e, 0x320d, 0x372d, 0x33f0, 0x3b4c, 0x2253, 0x37dd, 0x39a8, 0x3a18, 0x3aeb, 0x3b0a, 0x35eb, 0x3a4c, 0x39ff, 0x3a97, 0x2b96, 0x37c0, 0x3169, 0x3727, 0x3859, 0x3874, 0x3a11, 0x356e, 0x39e4, 0x3849, 0x38ab, 0x292b, 0x38a8, 0x2e0b, 0x1e53, 0x3814, 0x367d, 0x3962, 0x39ff, 0x3a0e, 0x38a1, 0x3249, 0x2d7c, 0x31df, 0x3924, 0x3ae4, 0x3978, 0x38c9, 0x3808, 0x288b, 0x3004, 0x3983, 0x3427, 0x3aa2, 0x3bb9, 0x38bc, 0x380d, 0x3ba3, 0x3522, 0x3607, 0x38c1, 0x35d4, 0x3a19, 0x38d6, 0x3aef, 0x3682, 0x3b5c, 0x2de4, 0x35bb, 0x363b, 0x36df, 0x3803, 0x39e5, 0x2e9f, 0x3a36, 0x3a9c, 0x36dc, 0x3908, 0x3ada, 0x3978, 0x382c, 0x3ba7, 0x398e, 0x3800, 0x3ad7, 0x387e, 0x3429, 0x2d19, 0x3971, 0x37f1, 0x3af3, 0x3986, 0x3a07, 0x382f, 0x359b, -0x2f4d, 0x3a0f, 0x3890, 0x386e, 0x3229, 0x2fb8, 0x390a, 0x390e, 0x3b53, 0x3812, 0x2961, 0x3017, 0x39d5, 0x3958, 0x2d80, 0x2fad, 0x3730, 0x3853, 0x2882, 0x3bb9, 0x3939, 0x3bab, 0x2ffa, 0x28ff, 0x3a54, 0x38d5, 0x3456, 0x3bd4, 0x3a38, 0x30a8, 0x3a38, 0x32ab, 0x3788, 0x3a1d, 0x3bec, 0x325c, 0x3981, 0x3a5a, 0x2941, 0x3925, 0x353a, 0x360a, 0x38cf, 0x374d, 0x30a4, 0x2819, 0x3021, 0x3143, 0x3684, 0x3af2, 0x3a61, 0x3a31, 0x3625, 0x38a6, 0x3a5d, 0x3963, 0x3997, 0x391a, 0x3767, 0x3b35, 0x383c, 0x37bf, 0x3753, 0x357a, 0x3993, 0x382b, 0x3128, 0x3a93, 0x3b03, 0x38e2, 0x37e9, 0x3b05, 0x3789, 0x3be9, 0x3068, 0x36f4, 0x19c7, 0x3523, 0x28f3, 0x3746, 0x324c, 0x31cc, 0x377e, 0x35b4, 0x3127, 0x3a24, 0x351a, 0x3b16, 0x3801, 0x398d, 0x39a8, 0x3b6f, 0x3933, 0x3535, 0x30e3, 0x3b25, -0x353f, 0x306c, 0x3bd1, 0x380e, 0x3b05, 0x3859, 0x2e39, 0x37b4, 0x38fb, 0x392e, 0x32c0, 0x3adb, 0x29c4, 0x3b0e, 0x28a6, 0x341f, 0x371a, 0x39bc, 0x30a1, 0x3790, 0x3439, 0x3102, 0x3bcc, 0x2f3d, 0x39ad, 0x3b38, 0x390e, 0x391f, 0x39a7, 0x3099, 0x3a5b, 0x3894, 0x3674, 0x3948, 0x3895, 0x3458, 0x3bc6, 0x3a36, 0x381e, 0x3069, 0x39fc, 0x3a3f, 0x39f5, 0x3a9d, 0x3169, 0x39a9, 0x3b16, 0x362d, 0x3951, 0x3881, 0x3ac4, 0x2ecf, 0x3b79, 0x3abe, 0x3841, 0x2c1a, 0x3b7a, 0x3083, 0x3ad1, 0x3a90, 0x3974, 0x2e92, 0x3b5f, 0x3003, 0x39c1, 0x2ff2, 0x39dc, 0x3bbf, 0x3972, 0x3997, 0x3667, 0x3409, 0x3239, 0x3aaf, 0x358e, 0x33b8, 0x397a, 0x3b54, 0x399d, 0x351d, 0x35c8, 0x3362, 0x2964, 0x3102, 0x3bc4, 0x22b3, 0x3b29, 0x3925, 0x37f0, 0x23fc, 0x3bc8, 0x39f0, 0x30cd, 0x3569, 0x3a27, 0x3b0b, -0x392e, 0x38e0, 0x3436, 0x3aa6, 0x395a, 0x397e, 0x38f6, 0x3b45, 0x3050, 0x34b0, 0x3b1d, 0x3932, 0x3a3a, 0x3915, 0x3816, 0x3b23, 0x3342, 0x2c1e, 0x3bfa, 0x3978, 0x304c, 0x2cd7, 0x3a11, 0x37d8, 0x3ad2, 0x37cb, 0x3bf8, 0x37d3, 0x3589, 0x37aa, 0x399a, 0x3661, 0x3965, 0x328a, 0x3969, 0x3100, 0x2dc4, 0x34a0, 0x30a4, 0x3950, 0x2f40, 0x32ab, 0x3904, 0x398d, 0x3293, 0x34a7, 0x33a4, 0x38b6, 0x3834, 0x3add, 0x3a08, 0x38cf, 0x3a13, 0x3a6f, 0x382e, 0x3682, 0x3b4b, 0x323e, 0x38e0, 0x38dc, 0x3854, 0x3b9d, 0x3b13, 0x3940, 0x38d4, 0x30ac, 0x3061, 0x3906, 0x3b2d, 0x38f9, 0x3ab0, 0x3a5a, 0x34fd, 0x3b15, 0x3472, 0x3985, 0x3634, 0x3940, 0x35da, 0x38ba, 0x395b, 0x3488, 0x39ca, 0x3a14, 0x2b22, 0x3829, 0x3479, 0x30a6, 0x3910, 0x34e2, 0x3506, 0x3663, 0x23b2, 0x3812, 0x3416, 0x3455, -0x3bc0, 0x3487, 0x3853, 0x3738, 0x3a19, 0x38a3, 0x339a, 0x3906, 0x3a98, 0x3a4c, 0x32bb, 0x3460, 0x2031, 0x36a4, 0x387a, 0x3141, 0x2f39, 0x2efd, 0x394e, 0x2e35, 0x3528, 0x3c00, 0x3b44, 0x342b, 0x3b4d, 0x3bdb, 0x3185, 0x39cb, 0x358a, 0x39ce, 0x2060, 0x3baa, 0x3bc4, 0x30eb, 0x3aed, 0x3734, 0x3a1f, 0x15f9, 0x3a5c, 0x372e, 0x33f9, 0x3b71, 0x3715, 0x37e3, 0x3384, 0x38ff, 0x36e6, 0x28a1, 0x2d9e, 0x280b, 0x3853, 0x3b42, 0x2eda, 0x3a63, 0x2328, 0x3830, 0x35a6, 0x39e9, 0x33df, 0x3be1, 0x220a, 0x39b4, 0x3ade, 0x2e17, 0x3831, 0x2cfe, 0x3752, 0x38fb, 0x39ce, 0x350b, 0x3600, 0x2ffd, 0x363a, 0x358b, 0x2582, 0x3510, 0x36db, 0x2e28, 0x38e0, 0x3a49, 0x277a, 0x301e, 0x39ca, 0x3861, 0x31a7, 0x3550, 0x3862, 0x3476, 0x3a8d, 0x38c2, 0x394b, 0x3156, 0x39ea, 0x3bdf, 0x3880, 0x389a, -0x3a75, 0x35a7, 0x37b1, 0x3b17, 0x24de, 0x32cd, 0x2c9b, 0x3968, 0x3a36, 0x2e6f, 0x3549, 0x3971, 0x34cb, 0x34ac, 0x3bf7, 0x34b8, 0x3841, 0x3527, 0x3a22, 0x3955, 0x3454, 0x380d, 0x38cd, 0x39b3, 0x39c4, 0x3777, 0x3737, 0x2ead, 0x39ef, 0x3420, 0x3a95, 0x35f0, 0x347f, 0x2c76, 0x2cfd, 0x33de, 0x3363, 0x3bf0, 0x3afc, 0x3ab1, 0x3b88, 0x3bcb, 0x23ba, 0x3353, 0x2169, 0x33a7, 0x3484, 0x307b, 0x20b7, 0x384d, 0x302a, 0x3448, 0x39b1, 0x39ab, 0x3be0, 0x3430, 0x3a05, 0x3715, 0x35fe, 0x1e5c, 0x3b84, 0x3b3a, 0x3b0a, 0x320e, 0x2e29, 0x2f00, 0x37c3, 0x3865, 0x37ae, 0x3959, 0x3ba0, 0x3b56, 0x3b4a, 0x3934, 0x35bf, 0x3aa7, 0x3814, 0x320c, 0x3b4a, 0x2499, 0x34bd, 0x3a25, 0x39b8, 0x318b, 0x3b42, 0x3a28, 0x3912, 0x3be5, 0x37af, 0x2cb7, 0x3799, 0x37eb, 0x3981, 0x3033, 0x2f89, 0x3471, -0x3a59, 0x3ab8, 0x3a8d, 0x3bd7, 0x3ba2, 0x39d4, 0x3a8b, 0x278d, 0x32e2, 0x2ced, 0x397f, 0x39f2, 0x3b27, 0x3798, 0x35bf, 0x3597, 0x374e, 0x3ac6, 0x3728, 0x3673, 0x252b, 0x30c8, 0x3b7b, 0x39fb, 0x38db, 0x3ac7, 0x3728, 0x3420, 0x3749, 0x3749, 0x37f3, 0x3977, 0x3181, 0x2d5c, 0x37f8, 0x3966, 0x3b9f, 0x3901, 0x369f, 0x36fa, 0x2468, 0x38f7, 0x3900, 0x37f1, 0x39d6, 0x342d, 0x35d0, 0x359f, 0x3b0b, 0x3a28, 0x34b4, 0x3979, 0x3346, 0x3b9a, 0x391f, 0x3823, 0x350e, 0x3b34, 0x3202, 0x3a2b, 0x313e, 0x355b, 0x37fb, 0x3ac1, 0x36ac, 0x2452, 0x2711, 0x360d, 0x34b7, 0x3af8, 0x2b80, 0x3621, 0x3950, 0x3824, 0x3578, 0x3900, 0x2ac0, 0x38c6, 0x39e1, 0x3565, 0x348f, 0x32d5, 0x388c, 0x38c0, 0x30e3, 0x3738, 0x3bbb, 0x3b46, 0x3b6e, 0x3bd1, 0x3b3d, 0x2d5b, 0x3acd, 0x3a67, 0x35f0, 0x3956, -0x39dd, 0x3be7, 0x3468, 0x2fb1, 0x3b73, 0x348b, 0x37a8, 0x2c37, 0x3b32, 0x375a, 0x3a14, 0x353d, 0x371f, 0x3b1b, 0x3b62, 0x3aaa, 0x39e8, 0x32d1, 0x3b3e, 0x3b74, 0x337c, 0x383e, 0x2d50, 0x3bc2, 0x33f5, 0x330f, 0x3b93, 0x3552, 0x3842, 0x37b5, 0x3918, 0x3654, 0x38a6, 0x2863, 0x3b0c, 0x38e8, 0x3b18, 0x28d3, 0x3b95, 0x3ad8, 0x38d1, 0x39ac, 0x31fb, 0x396b, 0x3b8f, 0x3818, 0x2d54, 0x3bd6, 0x340f, 0x3a89, 0x3192, 0x2cff, 0x3a00, 0x3680, 0x3843, 0x353a, 0x3591, 0x320f, 0x380e, 0x3709, 0xca6, 0x3783, 0x2f2b, 0x2ca1, 0x3885, 0x3391, 0x2c3b, 0x3933, 0x3812, 0x363e, 0x39b5, 0x39d8, 0x3a4b, 0x3951, 0x38b6, 0x399a, 0x318f, 0x2c20, 0x3925, 0x37cc, 0x3795, 0x38b8, 0x3184, 0x3961, 0x376a, 0x302b, 0x319e, 0x3b7d, 0x29a8, 0x3ae9, 0x313d, 0x3b7c, 0x3b7a, 0x3729, 0x3455, 0x2da3, -0x355c, 0x351e, 0x39d5, 0x3bf8, 0x3b11, 0x338f, 0x3990, 0x34cd, 0x3378, 0x2cbc, 0x3948, 0x39ab, 0x3be7, 0x3b59, 0x38e2, 0x2d9f, 0x378b, 0x385b, 0x31e4, 0x35ed, 0x3b0e, 0x3915, 0x3984, 0x3a44, 0x3869, 0x39f7, 0x3239, 0x3a8b, 0x36fb, 0x3081, 0x3ac3, 0x3b0e, 0x3104, 0x2078, 0x3962, 0x29bc, 0x3bb8, 0x3985, 0x3a56, 0x3648, 0x3a7d, 0x3ad3, 0x34d9, 0x3bb5, 0x38d9, 0x39b6, 0x3a2f, 0x3767, 0x3a56, 0x3620, 0x394d, 0x2d7c, 0x322a, 0x3899, 0x3a53, 0x3353, 0x383e, 0x316e, 0x348d, 0x3af5, 0x3a16, 0x3804, 0x3418, 0x3b1a, 0x3be6, 0x3166, 0x2911, 0x3656, 0x3acd, 0x392e, 0x3112, 0x3968, 0x37b7, 0x3af6, 0x38dd, 0x36b4, 0x3444, 0x3be7, 0x3991, 0x375f, 0x38da, 0x315a, 0x3684, 0x21a4, 0x38f4, 0x3860, 0x3935, 0x3b0f, 0x3b40, 0x37b6, 0x35b3, 0x3476, 0x35e9, 0x38ad, 0x3b82, 0x2964, -0x3880, 0x3844, 0x3615, 0x39d0, 0x3310, 0x306b, 0x329d, 0x338a, 0x2f84, 0x3a43, 0x300b, 0x3a47, 0x3821, 0x3b60, 0x387a, 0x3301, 0x3046, 0x351a, 0x3711, 0x38ec, 0x33a1, 0x376e, 0x39da, 0x3aae, 0x3877, 0x3960, 0x38ef, 0x3412, 0x3bbd, 0x3b24, 0x39e5, 0x355d, 0x3ab6, 0x2de8, 0x3ab5, 0x34a8, 0x3856, 0x32b4, 0x3673, 0x3a8b, 0x2e18, 0x3035, 0x3823, 0x38e7, 0x398e, 0x3743, 0x36e4, 0x381c, 0x3893, 0x3ae2, 0x331f, 0x3bdb, 0x34ae, 0x3a85, 0x277f, 0x342f, 0x38da, 0x3b62, 0x393a, 0x26bc, 0x3563, 0x39ce, 0x38e1, 0x395a, 0x3698, 0x3907, 0x30ed, 0x3536, 0x3925, 0x3bc8, 0x30ee, 0x38c2, 0x351d, 0x306e, 0x3952, 0x327f, 0x3a90, 0x3875, 0x337f, 0x3ab1, 0x342c, 0x39e7, 0x3be5, 0x33a6, 0x39af, 0x36ab, 0x2bca, 0x3984, 0x3a01, 0x319e, 0x3904, 0x3b78, 0x3785, 0x3a75, 0x3ace, 0x39c2, -0x3a6e, 0x39c8, 0x3b65, 0x342b, 0x3491, 0x320a, 0x3a81, 0x1f58, 0x3af6, 0x3881, 0x35d6, 0x389c, 0x3a23, 0x336f, 0x36ad, 0x39ab, 0x3062, 0x37fc, 0x317b, 0x3870, 0x3add, 0x3a7f, 0x37fe, 0x340b, 0x3211, 0x3944, 0x3714, 0x3806, 0x3bce, 0x3441, 0x3781, 0x397e, 0x391c, 0x3182, 0x31ac, 0x3456, 0x38f3, 0x3b15, 0x3b76, 0x3bf1, 0x3971, 0x3601, 0x318d, 0x34f2, 0x3a78, 0x35f5, 0x35c7, 0x354f, 0x3570, 0x36c5, 0x39fc, 0x35cd, 0x380e, 0x3606, 0x39c0, 0x352c, 0x3112, 0x3b6b, 0x355c, 0x3977, 0x328f, 0x2d34, 0x3abb, 0x3942, 0x1cba, 0x367a, 0x3aa6, 0x341f, 0x383f, 0x3a9a, 0x3960, 0x358f, 0x2dce, 0x21ac, 0x3bef, 0x3bca, 0x3bdb, 0x3967, 0x38aa, 0x39c1, 0x3b5b, 0x3185, 0x352c, 0x388a, 0x3893, 0x3a70, 0x34e4, 0x38e2, 0x31ba, 0x34d8, 0x32b5, 0x3aed, 0x3802, 0x2f06, 0x36d9, 0x3493, -0x3a09, 0x2994, 0x2e77, 0x3ae8, 0x3bc6, 0x3ace, 0x3926, 0x35b6, 0x326a, 0x3079, 0x3769, 0x28d1, 0x3b41, 0x357b, 0x3aed, 0x34cd, 0x3361, 0x2b6a, 0x3bc8, 0x2115, 0x3b73, 0x371f, 0x3b10, 0x2d39, 0x3092, 0x3264, 0x39df, 0x34c1, 0x2a04, 0x3a86, 0x306c, 0x33bf, 0x37dd, 0x3b17, 0x2f12, 0x3676, 0x3991, 0x3a7a, 0x3bb9, 0x3a80, 0x3441, 0x3592, 0x358d, 0x39dc, 0x31d3, 0x3887, 0x30f5, 0x3855, 0x3be6, 0x3b49, 0x3a7f, 0x3a6c, 0x2de5, 0x269d, 0x37e8, 0x3b49, 0x3026, 0x318b, 0x35e1, 0x39ba, 0x3a34, 0x3a43, 0x35a4, 0x34dd, 0x3918, 0x3a6a, 0x3780, 0x38d0, 0x3b78, 0x3b3e, 0x23b9, 0x37d9, 0x2b95, 0x3619, 0x3377, 0x2df7, 0x3b1e, 0x36de, 0x368b, 0x3bc4, 0x22d2, 0x3730, 0x30cf, 0x379d, 0x3824, 0x37fe, 0x39ba, 0x28c6, 0x36d3, 0x3587, 0x3aaa, 0x3155, 0x3a2d, 0x26ff, 0x2ffb, 0x3a19, -0x31b1, 0x302e, 0x2eba, 0x31f0, 0x3ba8, 0x3510, 0x243a, 0x30a4, 0x3638, 0x3b45, 0x2954, 0x3530, 0x39bc, 0x3944, 0x3951, 0x3026, 0x368f, 0x38e4, 0x36ce, 0x3b31, 0x38e5, 0x3471, 0x3af0, 0x3acf, 0x3842, 0x3be1, 0x319c, 0x2f2d, 0x3490, 0x3bec, 0x3b40, 0x3837, 0x3b38, 0x37fb, 0x3887, 0x383e, 0x382e, 0x31bd, 0x3ae1, 0x3a96, 0x3814, 0x37e0, 0x279d, 0x3363, 0x2ba9, 0x312b, 0x3a46, 0x3617, 0x3a0d, 0x2817, 0x3a37, 0x3981, 0x2d54, 0x3437, 0x3959, 0x3151, 0x3bc2, 0x39c9, 0x3aa3, 0x2d25, 0x3976, 0x3a2b, 0x3acd, 0x3a43, 0x3a9e, 0x39a1, 0x3914, 0x37ac, 0x3702, 0x382c, 0x38d9, 0x318c, 0x210a, 0x2c14, 0x34e2, 0x3a22, 0x2861, 0x3bc6, 0x1265, 0x3b43, 0x332e, 0x3992, 0x3330, 0x3a50, 0x3b38, 0x3aad, 0x33ce, 0x39a9, 0x33be, 0x387d, 0x3ade, 0x3a94, 0x3a56, 0x3ae4, 0x38a9, 0x1ace, -0x3551, 0x3ad8, 0x37c2, 0x3b00, 0x3b8d, 0x36d9, 0x3baa, 0x38bb, 0x34df, 0x3710, 0x3599, 0x3b7b, 0x2fea, 0x385e, 0x2dd8, 0x2e4e, 0x394d, 0x208a, 0x350b, 0x3876, 0x2df7, 0x34f4, 0x3b4c, 0x386d, 0x3260, 0x3b9d, 0x3343, 0x383f, 0x3bf4, 0x333b, 0x3bde, 0x3bd3, 0x392f, 0x3a2d, 0x3bdd, 0x341e, 0x3b13, 0x2b1c, 0x3b34, 0x2bb7, 0x2a93, 0x39c2, 0x3634, 0x358c, 0x3ba9, 0x3231, 0x3a0d, 0x3bc7, 0x3813, 0x2814, 0x3a1b, 0x3b03, 0x2e0e, 0x3616, 0x383a, 0x3578, 0x3a1f, 0x3685, 0x303c, 0x34a7, 0x3bad, 0x3548, 0x2380, 0x364f, 0x36ac, 0x28f8, 0x3a74, 0x34e2, 0x392e, 0x3409, 0x30e5, 0x340f, 0x3581, 0x36a3, 0x3366, 0x35f1, 0x30c4, 0x374f, 0x3921, 0x3aec, 0x3881, 0x2b48, 0x38e7, 0x31ce, 0x3626, 0x3b4b, 0x3b9f, 0x34cd, 0x313e, 0x379e, 0x39a6, 0x38cf, 0x38e3, 0x3031, 0x398f, 0x3bbc, -0x3a15, 0x3737, 0x361a, 0x3b25, 0x3992, 0x350a, 0x3698, 0x37de, 0x3a78, 0x37f5, 0x36d2, 0x3a12, 0x348e, 0x3923, 0x352f, 0x3b28, 0x3989, 0x39d8, 0x3b7b, 0x37cf, 0x3bfd, 0x3143, 0x31f5, 0x36a2, 0x3ae8, 0x3b3d, 0x3aab, 0x320e, 0x2ecc, 0x368f, 0x29c4, 0x36d0, 0x3a8c, 0x35c1, 0x2daa, 0x3128, 0x3b96, 0x388c, 0x3786, 0x349a, 0x390b, 0x2843, 0x381f, 0x2d05, 0x31ee, 0x3976, 0x3722, 0x368a, 0x3899, 0x3b64, 0x3b84, 0x3ae4, 0x3135, 0x3838, 0x387c, 0x2636, 0x2cd7, 0x3bcd, 0x39a6, 0x3ac6, 0x34c3, 0x364d, 0x384b, 0x2c55, 0x34b6, 0x201f, 0x38de, 0x2fc0, 0x389c, 0x381b, 0x36a8, 0x372f, 0x2b5c, 0x3491, 0x30d7, 0x38d2, 0x3893, 0x33a0, 0x33c8, 0x3405, 0x3490, 0x387d, 0x3411, 0x3907, 0x3bc0, 0x3aa9, 0x3023, 0x395c, 0x3b10, 0x3b8e, 0x3791, 0x3b17, 0x3980, 0x3b13, 0x336a, 0x354d, -0x39d9, 0x35f5, 0x3034, 0x300f, 0x38e5, 0x395c, 0x3394, 0x392f, 0x390a, 0x2567, 0x3151, 0x3861, 0x3a84, 0x3759, 0x382b, 0x3185, 0x359b, 0x3a6b, 0x3927, 0x3b6c, 0x39ed, 0x2cc3, 0x34bc, 0x389f, 0x3617, 0x335f, 0x3a9e, 0x35c0, 0x378c, 0x38e7, 0x2d21, 0x2ec0, 0x3874, 0x3af1, 0x36c6, 0x3b7e, 0x364f, 0x386e, 0x34f3, 0x2761, 0x386e, 0x3ac9, 0x308e, 0x3ad6, 0x3194, 0x35f7, 0x31d0, 0x3a36, 0x34d6, 0x36b0, 0x34bf, 0x38cb, 0x2f2c, 0x3945, 0x325c, 0x39d0, 0x1fce, 0x3a04, 0x3118, 0x3a0c, 0x3a56, 0x3794, 0x3744, 0x3ad3, 0x36c3, 0x2700, 0x392c, 0x34fa, 0x3b4d, 0x2649, 0x393c, 0x3967, 0x37f7, 0x369e, 0x3ac1, 0x39b3, 0x39a1, 0x36a4, 0x3645, 0x39cc, 0x3af9, 0x31e3, 0x237a, 0x35d3, 0x35fa, 0x3b53, 0x3872, 0x3bcc, 0x3a9c, 0x3ba9, 0x34e9, 0x34ec, 0x3b31, 0x3b09, 0x31d7, 0x3a45, -0x33ab, 0x38b0, 0x384c, 0x3a48, 0x3340, 0x390f, 0x340e, 0x3937, 0x2ceb, 0x3b0d, 0x3b15, 0x3979, 0x3884, 0x376b, 0x3b79, 0x39d2, 0x36fb, 0x3442, 0x3994, 0x35c1, 0x3b6f, 0x3918, 0x3bea, 0x37f1, 0x3b25, 0x3bd5, 0x3ab4, 0x3604, 0x3593, 0x39fc, 0x3893, 0x37f7, 0x3a56, 0x3118, 0x3444, 0x36ac, 0x315a, 0x2eaa, 0x3a55, 0x3bea, 0x372f, 0x3b79, 0x38fa, 0x32a9, 0x2a8d, 0x326b, 0x39dd, 0x2c6e, 0x3a63, 0x39a8, 0x34dd, 0x2fa8, 0x3afa, 0x3ab1, 0x3854, 0x2e58, 0x3a7b, 0x39e6, 0x3489, 0x3631, 0x3826, 0x3ad2, 0x384d, 0x3565, 0x3a21, 0x3beb, 0x334d, 0x3603, 0x2de5, 0x31fa, 0x3111, 0x3455, 0x390c, 0x38aa, 0x3822, 0x2e75, 0x36cb, 0x3bb0, 0x38d7, 0x386a, 0x336f, 0x3150, 0x395a, 0x3219, 0x39f2, 0x3675, 0x2b46, 0x39d6, 0x2e2f, 0x3752, 0x3b23, 0x3670, 0x3b64, 0x39f4, 0x3bec, 0x3848, -0x389e, 0x3214, 0x3618, 0x32ca, 0x333b, 0x2fe6, 0x2cf6, 0x36f3, 0x3748, 0x380b, 0x3b5f, 0x3b4e, 0x2dce, 0x2474, 0x3a17, 0x320e, 0x38ac, 0x3b44, 0x3595, 0x3bd7, 0x3896, 0x32ea, 0x37d0, 0x34a8, 0x31f2, 0x3a51, 0x3b6c, 0x3753, 0x3abd, 0x3b26, 0x24a0, 0x32fb, 0x3a3a, 0x3bf9, 0x2fc5, 0x390d, 0x3a42, 0x331d, 0x3b2e, 0x370e, 0x32d3, 0x3b26, 0x3b7f, 0x2d64, 0x39ca, 0x3405, 0x3962, 0x36c0, 0x2ffe, 0x3b76, 0x3811, 0x3287, 0x34d7, 0x3beb, 0x3a37, 0x3756, 0x390e, 0x398b, 0x3160, 0x3bf9, 0x3a09, 0x38ee, 0x382a, 0x366e, 0x3836, 0x3b95, 0x3b30, 0x3bd4, 0x1c94, 0x33c6, 0x3391, 0x3b2c, 0x3b07, 0x37b6, 0x3499, 0x3942, 0x2dc7, 0x357d, 0x380f, 0x32e5, 0x3628, 0x386a, 0x3b66, 0x395b, 0x3611, 0x3bef, 0x3935, 0x34c3, 0x3354, 0x39ab, 0x3b9e, 0x34f5, 0x358b, 0x326f, 0x3952, 0x359f, -0x39c7, 0x399f, 0x2d59, 0x379e, 0x33fd, 0x3b7a, 0x327e, 0x392d, 0x3b6c, 0x34b5, 0x3a50, 0x365b, 0x392f, 0x3b31, 0x3a20, 0x3131, 0x3a43, 0x292e, 0x3a0c, 0x3bb1, 0x3bf6, 0x29e8, 0x32d4, 0x3b07, 0x3189, 0x32d5, 0x3689, 0x3a3e, 0x3857, 0x281c, 0x2b7b, 0x3545, 0x35a9, 0x3aa0, 0x2cf4, 0x3356, 0x3b2f, 0x3845, 0x3a9d, 0x38fa, 0x285c, 0x3aef, 0x387a, 0x2121, 0x376d, 0x30bb, 0x38b8, 0x3ad4, 0x3bf3, 0x3219, 0x398e, 0x2dc8, 0x31ae, 0x38b2, 0x34f9, 0x3846, 0x3bb0, 0x3bc9, 0x2fd2, 0x3403, 0x34c1, 0x3043, 0x3823, 0x38f1, 0x384a, 0x396a, 0x37c2, 0x3839, 0x3441, 0x3821, 0x2774, 0x380f, 0x39e4, 0x3832, 0x375b, 0x3a10, 0x3894, 0x2f6b, 0x3586, 0x34fe, 0x3bad, 0x3856, 0x35c6, 0x38ad, 0x3835, 0x368d, 0x39a1, 0x3736, 0x349e, 0x32c2, 0x2df5, 0x34c5, 0x3ba0, 0x349b, 0x35af, 0x35aa, -0x3a17, 0x3696, 0x3169, 0x3433, 0x3800, 0x38f3, 0x37f8, 0x376a, 0x2ec7, 0x3bad, 0x373f, 0x281c, 0x3968, 0x3403, 0x2c9e, 0x3b1f, 0x3003, 0x35cc, 0x3810, 0x367c, 0x3a68, 0x26e9, 0x34e2, 0x3902, 0x2edb, 0x3478, 0x2a6a, 0x3a45, 0x3867, 0x38c5, 0x3a61, 0x388c, 0x3738, 0x34be, 0x35e6, 0x36b3, 0x325c, 0x35c6, 0x384e, 0x358d, 0x3894, 0x31c8, 0x3820, 0x363b, 0x380e, 0x385f, 0x38ac, 0x36a3, 0x31da, 0x3b46, 0x3715, 0x37ec, 0x386b, 0x35c7, 0x3100, 0x3a7a, 0x3504, 0x3810, 0x3a22, 0x36a9, 0x3995, 0x3b0c, 0x37f0, 0x2d4e, 0x36c4, 0x347e, 0x39dc, 0x3a2a, 0x3951, 0x3bca, 0x3bf5, 0x3bb3, 0x3b46, 0x3afa, 0x311c, 0x3929, 0x3291, 0x372f, 0x306d, 0x2843, 0x391a, 0x30c4, 0x3a5b, 0x3be7, 0x3924, 0x38ae, 0x3734, 0x32bd, 0x3b39, 0x39f6, 0x3aaa, 0x327a, 0x3045, 0x383c, 0x3303, 0x352c, -0x3bcd, 0x3baa, 0x3116, 0x3ad3, 0x39bc, 0x3aee, 0x36b3, 0x3a06, 0x3408, 0x3971, 0x3545, 0x38aa, 0x3a21, 0x3743, 0x367e, 0x3ac3, 0x3a54, 0x2cad, 0x3820, 0x39eb, 0x398a, 0x34a9, 0x3b95, 0x3a34, 0x32bb, 0x3bda, 0x3704, 0x3aa2, 0x39a3, 0x3953, 0x38ed, 0x3821, 0x39eb, 0x36b4, 0x38b5, 0x382e, 0x3753, 0x3203, 0x3796, 0x2e26, 0x303a, 0x3895, 0x39a3, 0x3a1f, 0x3ad6, 0x302f, 0x376d, 0x347f, 0x32fc, 0x382d, 0x39fa, 0x2d39, 0x32b2, 0x2fef, 0x3044, 0x3497, 0x39a9, 0x3994, 0x346d, 0x38a8, 0x3487, 0x3431, 0x39a7, 0x375a, 0x3935, 0x2eaf, 0x2ff3, 0x3467, 0x35cf, 0x3738, 0x2df4, 0x3b14, 0x3978, 0x36a8, 0x3406, 0x3aad, 0x3169, 0x355a, 0x3a49, 0x2e40, 0x34a4, 0x34ac, 0x308a, 0x3546, 0x3b34, 0x3514, 0x3aaf, 0x3707, 0x3999, 0x3a99, 0x2cc7, 0x326d, 0x3a95, 0x3bb1, 0x315b, 0x3989, -0x39d7, 0x3684, 0x39f7, 0x3963, 0x31e0, 0x3a96, 0x3492, 0x3b63, 0x37fd, 0x3b38, 0x37ba, 0x34fd, 0x365b, 0x3496, 0x3a38, 0x3906, 0x3bed, 0x39d9, 0x389b, 0x34eb, 0x3332, 0x2b11, 0x31c8, 0x3889, 0x3810, 0x30b7, 0x28b6, 0x29d1, 0x3420, 0x3222, 0x387e, 0x3a70, 0x2cf8, 0x3b07, 0x304f, 0x3998, 0x360b, 0x3b8b, 0x3434, 0x38ee, 0x304f, 0x39e7, 0x3685, 0x3981, 0x3a46, 0x39af, 0x387a, 0x36e7, 0x3a5e, 0x33ef, 0x3a38, 0x32d1, 0x39f0, 0x345c, 0x36af, 0x3416, 0x3be9, 0x23fa, 0x3b3a, 0x3b59, 0x3732, 0x3578, 0x3bd8, 0x3a83, 0x387d, 0x3ad8, 0x394e, 0x3431, 0x3748, 0x3809, 0x3ac3, 0x3a1a, 0x38e0, 0x37ca, 0x2e29, 0x386d, 0x2e50, 0x360f, 0x31e4, 0x3715, 0x3986, 0x35a7, 0x3bd1, 0x3ae4, 0x3432, 0x3750, 0x38e8, 0x3926, 0x3b12, 0x3460, 0x358f, 0x3aab, 0x3906, 0x355a, 0x27fc, 0x3a2f, -0x386f, 0x3b47, 0x309b, 0x3098, 0x3b47, 0x35a2, 0x3677, 0x39a2, 0x35a4, 0x389e, 0x3b5f, 0x37e9, 0x32d3, 0x30cb, 0x2cc7, 0x2f1d, 0x392f, 0x3bfb, 0x392b, 0x3909, 0x3a3a, 0x38f8, 0x2e08, 0x3962, 0x358f, 0x37ea, 0x34db, 0x3bc8, 0x38ca, 0x3ba2, 0x3a0b, 0x39ba, 0x369c, 0x2cce, 0x3988, 0x3a39, 0x3be5, 0x2a39, 0x35c1, 0x3643, 0x37c9, 0x35bf, 0x352f, 0x3a7f, 0x350f, 0x330f, 0x3a34, 0x36aa, 0x38da, 0x2fc0, 0x387b, 0x37b7, 0x34a8, 0x396b, 0x39f3, 0x37f4, 0x3649, 0x3959, 0x3024, 0x373f, 0x38fd, 0x38c3, 0x39d3, 0x340b, 0x38cb, 0x30c4, 0x3877, 0x3af4, 0x28ef, 0x3a81, 0x2ff9, 0x3992, 0x2902, 0x3b16, 0x3590, 0x3a95, 0x3708, 0x3a63, 0x1ba7, 0x347d, 0x3a3e, 0x3bd4, 0x3946, 0x2da1, 0x38df, 0x396d, 0x39c9, 0x3810, 0x39de, 0x3b69, 0x30ad, 0x3748, 0x3678, 0x3a92, 0x39b8, 0x30c9, -0x3990, 0x2cd8, 0x303c, 0x2c03, 0x35c0, 0x3b10, 0x39b6, 0x35f6, 0x3bb8, 0x3733, 0x320f, 0x3a45, 0x3457, 0x392e, 0x3462, 0x36f3, 0x32d4, 0x3025, 0x24ba, 0x3826, 0x37a7, 0x3714, 0x38d7, 0x3630, 0x3a29, 0x3582, 0x3af6, 0x2639, 0x3b0e, 0x3872, 0x39c2, 0x2e2e, 0x396d, 0x3b99, 0x34b3, 0x3551, 0x3162, 0x3a7d, 0x35f0, 0x351b, 0x3661, 0x3ad0, 0x39cf, 0x25f1, 0x3987, 0x3296, 0x365f, 0x3902, 0x38fd, 0x3745, 0x3990, 0x3972, 0x3317, 0x3a87, 0x3985, 0x392d, 0x36a3, 0x34f1, 0x396f, 0x3a7a, 0x3465, 0x3362, 0x3b0b, 0x208d, 0x37e0, 0x3ade, 0x31dc, 0x3854, 0x34cc, 0x3874, 0x311e, 0x38ec, 0x35e2, 0x2de6, 0x3219, 0x38b0, 0x3be3, 0x3381, 0x3b39, 0x38e6, 0x3b20, 0x3bea, 0x38e2, 0x38d6, 0x39e6, 0x2db4, 0x3884, 0x1cb8, 0x176a, 0x2eba, 0x3bb1, 0x37fe, 0x371a, 0x3b1c, 0x3402, 0x3462, -0x3632, 0x2a7c, 0x3897, 0x32c6, 0x34d7, 0x3ad2, 0x3b38, 0x3aa2, 0x2c56, 0x392e, 0x376a, 0x3356, 0x36b3, 0x3b8d, 0x2fc0, 0x3b16, 0x38dd, 0x2f21, 0x3852, 0x3aeb, 0x3aad, 0x379e, 0x32c9, 0x324b, 0x3b1f, 0x382a, 0x3929, 0x2cbe, 0x3867, 0x3651, 0x389b, 0x2fd3, 0x3809, 0x3ade, 0x38ba, 0x3a92, 0x398d, 0x38c2, 0x3061, 0x37f4, 0x3ab9, 0x3a17, 0x2d4b, 0x3255, 0x3656, 0x3884, 0x3b75, 0x3b1a, 0x3a56, 0x353d, 0x2fab, 0x3a0d, 0x3180, 0x3bd5, 0x3ac0, 0x3298, 0x3a5f, 0x3009, 0x39d4, 0x3b69, 0x39ad, 0x3b16, 0x36b3, 0x2c5b, 0x3ab1, 0x39d1, 0x30bc, 0x36ba, 0x2f6d, 0x3817, 0x3b4c, 0x3b31, 0x39d1, 0x348b, 0x3b82, 0x3032, 0x2586, 0x3bbf, 0x2dea, 0x2f5f, 0x383a, 0x3bb8, 0x3a4c, 0x3421, 0x33f7, 0x3ab6, 0x398e, 0x3335, 0x3a1c, 0x37dd, 0x2fc9, 0x3824, 0x3463, 0x3bed, 0x3b6c, 0x313b, -0x3b2d, 0x3426, 0x335b, 0x3952, 0x347e, 0x3ba0, 0x3bbb, 0x39ec, 0x3b16, 0x3561, 0x3a65, 0x3196, 0x3bd4, 0x30b6, 0x3891, 0x3749, 0x3a0b, 0x3a40, 0x3485, 0x3b5d, 0x3b0d, 0x33b5, 0x3812, 0x37be, 0x3a0a, 0x38c9, 0x38d2, 0x398f, 0x3235, 0x3a91, 0x2b81, 0x26f6, 0x2d3a, 0x1cd9, 0x2ea1, 0x3970, 0x3a5b, 0x30e8, 0x2a5f, 0x390b, 0x38f4, 0x396c, 0x3b50, 0x3b24, 0x35dd, 0x396c, 0x33c7, 0x2c40, 0x397b, 0x390b, 0x348f, 0x38df, 0x38fb, 0x3be2, 0x3122, 0x3bb5, 0x2c56, 0x322f, 0x3836, 0x1ee5, 0x3b35, 0x359e, 0x3966, 0x39b3, 0x3163, 0x2902, 0x38b4, 0x3ace, 0x34ed, 0x3add, 0x3428, 0x369b, 0x3116, 0x3a77, 0x34f6, 0x39c9, 0x3263, 0x359d, 0x352c, 0x3b0b, 0x38c9, 0x31dc, 0x373d, 0x2ad4, 0x3452, 0x3156, 0x360d, 0x2d93, 0x38d0, 0x3978, 0x3901, 0x36f4, 0x3b26, 0x2e42, 0x3983, 0x3bce, -0x3990, 0x37f3, 0x2645, 0x3938, 0x3868, 0x3a22, 0x3a6a, 0x3b78, 0x3b4e, 0x371f, 0x39fb, 0x2e11, 0x38b8, 0x36d2, 0x3468, 0x34f2, 0x39bf, 0x3b8e, 0x3710, 0x348b, 0x38d6, 0x3aae, 0x35f0, 0x3ae0, 0x3ba8, 0x3857, 0x39c1, 0x3a03, 0x35b3, 0x3a2c, 0x3a7b, 0x350c, 0x30f8, 0x3830, 0x25aa, 0x24b3, 0x380b, 0x3879, 0x3929, 0x354d, 0x38b4, 0x2fea, 0x34bc, 0x3ba6, 0x3832, 0x3a2a, 0x387b, 0x343f, 0x3114, 0x2edb, 0x36ec, 0x3a24, 0x32ea, 0x2f80, 0x3675, 0x2df4, 0x39ce, 0x37ea, 0x3091, 0x3766, 0x38e3, 0x37d4, 0x39bc, 0x3425, 0x3336, 0x38aa, 0x34b9, 0x3bce, 0x37dc, 0x3af9, 0x39a9, 0x3b3e, 0x386a, 0x392b, 0x3942, 0x338a, 0x36f9, 0x36f3, 0x3b56, 0x33e2, 0x3bd1, 0x38aa, 0x3337, 0x3a61, 0x3ac5, 0x377c, 0x3819, 0x2ff3, 0x3870, 0x3b2c, 0x3925, 0x38cd, 0x3b0e, 0x3719, 0x3a2a, 0x326d, -0x32b3, 0x35f8, 0x3b6e, 0x3bde, 0x3baf, 0x3027, 0x3433, 0x3819, 0x2eab, 0x3b4f, 0x34a1, 0x34f8, 0x393a, 0x3a09, 0x38f7, 0x3489, 0x37ae, 0x3bfa, 0x2dc1, 0x3468, 0x26f5, 0x343f, 0x3b4e, 0x39b2, 0x339a, 0x3441, 0x3b51, 0x38dc, 0x3914, 0x2699, 0x3339, 0x2f3a, 0x38f1, 0x3a57, 0x2e7e, 0x36a4, 0x2cf6, 0x31e6, 0x3802, 0x3a75, 0x39f5, 0x38f5, 0x3327, 0x38d5, 0x36b4, 0x3b6c, 0x2279, 0x3b08, 0x39e9, 0x380f, 0x3b8c, 0x3432, 0x39c9, 0x343d, 0x38ad, 0x3be5, 0x3602, 0x3bc4, 0x3952, 0x350a, 0xc4c, 0x267d, 0x35e1, 0x3bdb, 0x3937, 0x348d, 0x3768, 0x3a78, 0x3717, 0x3342, 0x34f0, 0x36db, 0x2788, 0x3b52, 0x2acf, 0x3bef, 0x3899, 0x3279, 0x38e4, 0x3bc5, 0x38ed, 0x3369, 0x3652, 0x34b4, 0x378a, 0x3bf9, 0x3a9d, 0x3841, 0x3a01, 0x3065, 0x35a4, 0x3b47, 0x376f, 0x35e0, 0x34f0, 0x396c, -0x3a1e, 0x354b, 0x390b, 0x3165, 0x3435, 0x329e, 0x386e, 0x36ba, 0x2046, 0x385b, 0x3493, 0x3537, 0x2e29, 0x3bda, 0x3b0c, 0x35e0, 0x34b8, 0x25c1, 0x3698, 0x2ef1, 0x3516, 0x330e, 0x387a, 0x37eb, 0x3011, 0x2658, 0x350a, 0x393c, 0x2c1c, 0x2dbc, 0x25f3, 0x376f, 0x3a1c, 0x3112, 0x2c6d, 0x2e2a, 0x3a3d, 0x3ba0, 0x391a, 0x36ac, 0x3876, 0x32b9, 0x3ad9, 0x36f8, 0x39aa, 0x3095, 0x348d, 0x39a6, 0x35be, 0x3747, 0x31e9, 0x33b9, 0x31c0, 0x3926, 0x2d3f, 0x3b32, 0x3412, 0x3b52, 0x29eb, 0x333e, 0x3af4, 0x3974, 0x36ab, 0x3ba6, 0x3aed, 0x3807, 0x2b53, 0x33b0, 0x35d7, 0x37aa, 0x3838, 0x3478, 0x2f9d, 0x3b1b, 0x3b31, 0x30fb, 0x30fa, 0x38d7, 0x329f, 0x372b, 0x31b1, 0x38a9, 0x3932, 0x315d, 0x2d85, 0x374b, 0x3aa3, 0x3621, 0x2da1, 0x373a, 0x386d, 0x38ba, 0x3a4e, 0x1eea, 0x3887, 0x3438 +uint16_t x_inp [768] = { +0x2153, 0x3bb5, 0x3896, 0x365f, 0x2483, 0x3518, 0x2dd1, 0x3bca, 0x397b, 0x29b1, 0x3705, 0x36c8, 0x398b, 0x3661, 0x2f05, 0x365a, 0x3bf9, 0x34df, 0x363b, 0x38d9, 0x39c6, 0x3abb, 0x3952, 0x38f2, 0x392d, 0x3b3e, 0x2afb, 0x3a9d, 0x353b, 0x3b73, 0x3a01, 0x3679, +0x3934, 0x397d, 0x2904, 0x3822, 0x3462, 0x3b44, 0x39e9, 0x28be, 0x331e, 0x3a1d, 0x39e5, 0x34da, 0x3a19, 0x3906, 0x1d35, 0x3871, 0x31e7, 0x3b29, 0x325d, 0x3797, 0x2b2f, 0x38b4, 0x232f, 0x38aa, 0x3aca, 0x316f, 0x3811, 0x3950, 0x32ea, 0x3bc7, 0x382c, 0x38a2, +0x29ce, 0x3afa, 0x3a39, 0x2ccc, 0x39fd, 0x3b3d, 0x384a, 0x3a35, 0x3802, 0x366a, 0x37ec, 0x3598, 0x3bf8, 0x3a85, 0x3a1b, 0x386e, 0x3b4c, 0x39de, 0x38c2, 0x2f93, 0x3b4c, 0x39c4, 0x3b9e, 0x3844, 0x346d, 0x3bff, 0x32ce, 0x296d, 0x3130, 0x3b3d, 0x3b44, 0x369d, +0x3b13, 0x31ed, 0x330a, 0x3831, 0x34e7, 0x37b3, 0x331a, 0x3918, 0x32d3, 0x3995, 0x3991, 0x3919, 0x3a26, 0x385b, 0x2b76, 0x3a3b, 0x37f2, 0x26a7, 0x3225, 0x3b64, 0x28f0, 0x3456, 0x3822, 0x341e, 0x381a, 0x38d8, 0x2c11, 0x33be, 0x33ac, 0x353f, 0x3476, 0x3abc, +0x36ec, 0x3a1d, 0x39d3, 0x3821, 0x36ac, 0x3bce, 0x3ad2, 0x3616, 0x36a1, 0x2cb3, 0x38d2, 0x314f, 0x385c, 0x3b63, 0x3bb6, 0x2951, 0x372d, 0x2c42, 0x3823, 0x3883, 0x3872, 0x31ee, 0x36c5, 0x399a, 0x31b0, 0x3887, 0x3884, 0x3865, 0x3896, 0x36c3, 0x32e3, 0x346c, +0x3935, 0x3b50, 0x2b6d, 0x38cd, 0x388f, 0x3389, 0x395d, 0x31cd, 0x2efd, 0x3154, 0x2f35, 0x3444, 0x3293, 0x3b6b, 0x1bec, 0x3b69, 0x3bf3, 0x3611, 0x3508, 0x3742, 0x3a50, 0x3ab7, 0x3457, 0x38d3, 0x3344, 0x38e8, 0x33c0, 0x3668, 0x3bee, 0x3b21, 0x3727, 0x3121, +0x316c, 0x3288, 0x2d50, 0x2e74, 0x35d5, 0x37e2, 0x303d, 0x36af, 0x341f, 0x3436, 0x2df7, 0x399d, 0x30f4, 0x3aaf, 0x34e4, 0x2c2a, 0x3116, 0x34d3, 0x36ac, 0x35e3, 0x3760, 0x36e1, 0x3ad2, 0x3547, 0x38f4, 0x369c, 0x3ba9, 0x34f0, 0x3a39, 0x3b19, 0x36e6, 0x395d, +0x3be8, 0x3293, 0x3bfc, 0x3435, 0x2eb3, 0x3360, 0x3919, 0x3bed, 0x396a, 0x37fc, 0x3242, 0x384b, 0x38cb, 0x3b2c, 0x3b28, 0x28cf, 0x3828, 0x3855, 0x3ba9, 0x2fa7, 0x340b, 0x32f1, 0x3ada, 0x36fa, 0x31f5, 0x3436, 0x29d0, 0x33e6, 0x3232, 0x3bec, 0x3904, 0x2797, +0x3b81, 0x3bac, 0x38d2, 0x343d, 0x31af, 0x3b1e, 0x33fc, 0x3864, 0x3624, 0x3905, 0x2945, 0x3b52, 0x2d08, 0x3a17, 0x3b84, 0x3804, 0x3a24, 0x38a3, 0x3562, 0x3ae6, 0x3bba, 0x3a45, 0x3679, 0x31fa, 0x3994, 0x2c3d, 0x383f, 0x399d, 0x34f7, 0x360e, 0x35f3, 0x38f0, +0x38d4, 0x399a, 0x3a48, 0x3987, 0x3b54, 0x382c, 0x3210, 0x35ef, 0x36ca, 0x31b4, 0x3625, 0x371f, 0x37bd, 0x3680, 0x3a3a, 0x3ac0, 0x3bbf, 0x3bf5, 0x39f2, 0x29c2, 0x363e, 0x3a4e, 0x3596, 0x3b1b, 0x3459, 0x3669, 0x3aa1, 0x39c3, 0x3376, 0x390d, 0x2456, 0x39b5, +0x3a66, 0x3ad8, 0x3b51, 0x36aa, 0x32be, 0x3ac8, 0x392b, 0x3740, 0x3a48, 0x38f5, 0x3b2d, 0x3a5f, 0x2ff3, 0x366f, 0x39d3, 0x35e5, 0x3822, 0x38db, 0x3b8a, 0x34be, 0x2d33, 0x36dd, 0x3578, 0x3bdf, 0x2c7e, 0x39cf, 0x32ff, 0x35c9, 0x3970, 0x3bcb, 0x351e, 0x3956, +0x2c42, 0x3308, 0x377a, 0x361c, 0x39a0, 0x36c9, 0x2dcb, 0x3bf2, 0x3b5f, 0x33ee, 0x24c1, 0x2ce9, 0x3927, 0x305d, 0x3702, 0x3119, 0x35f9, 0x3855, 0x3374, 0x349b, 0x3bcf, 0x2dea, 0x34f0, 0x363f, 0x37da, 0x3a74, 0x35fc, 0x35fa, 0x316b, 0x3804, 0x37a7, 0x3986, +0x3073, 0x3aed, 0x31c7, 0x3844, 0x34a4, 0x387d, 0x3a20, 0x3037, 0x3a00, 0x3b70, 0x377f, 0x3686, 0x3b7e, 0x38b3, 0x32e3, 0x3323, 0x391e, 0x3228, 0x3930, 0x3997, 0x3a5e, 0x398b, 0x3512, 0x35b0, 0x365c, 0x325d, 0x3b61, 0x38b8, 0x39a4, 0x3423, 0x3bd7, 0x38af, +0x2d3d, 0x382d, 0x38ac, 0x26ca, 0x395e, 0x21a8, 0x3520, 0x386f, 0x3b95, 0x32c0, 0x3b84, 0x3a51, 0x3b4b, 0x31d2, 0x3747, 0x3b96, 0x3b40, 0x3535, 0x38d1, 0x3899, 0x3b00, 0x3827, 0x3ae3, 0x38c8, 0x3a07, 0x338d, 0x2e96, 0x3a46, 0x394a, 0x39de, 0x2951, 0x3a02, +0x3838, 0x2d45, 0x28c0, 0x3958, 0x3070, 0x2aa2, 0x3510, 0x38ce, 0x271c, 0x3440, 0x3954, 0x30bc, 0x3b35, 0x2f1d, 0x3afb, 0x2dae, 0x356f, 0x2e13, 0x3981, 0x326d, 0x3a28, 0x3a36, 0x3a95, 0x38cb, 0x38db, 0x3150, 0x2c9e, 0x34c5, 0x3adb, 0x3bdf, 0x38f2, 0x3994, +0x36f8, 0x31c0, 0x3a4f, 0x3825, 0x394b, 0x3a8b, 0x38ac, 0x3167, 0x2e2d, 0x3a93, 0x34f3, 0x37bd, 0x3b63, 0x2f2f, 0x3ae0, 0x3ad8, 0x34a8, 0x2e1c, 0x3890, 0x3705, 0x3b69, 0x3bc1, 0x28af, 0x3b36, 0x348b, 0x3111, 0x3a8d, 0x389c, 0x3916, 0x36dc, 0x3bae, 0x3874, +0x3593, 0x3638, 0x3018, 0x3a56, 0x38a3, 0x2ad4, 0x3a25, 0x38d7, 0x3864, 0x31c1, 0x28d1, 0x39c8, 0x37d6, 0x2c7f, 0x3ba5, 0x34b8, 0x3bef, 0x3b83, 0x3ab5, 0x3062, 0x38bc, 0x399c, 0x2ce4, 0x2f2c, 0x39bf, 0x2ed1, 0x385f, 0x37e0, 0x35ee, 0x397d, 0x3b0c, 0x3049, +0x39d5, 0x322e, 0x3936, 0x3747, 0x2e15, 0x3b41, 0x3874, 0x3bd0, 0x2c04, 0x3800, 0x375b, 0x3b2d, 0x38d8, 0x3a51, 0x3406, 0x38da, 0x38ba, 0x3497, 0x382e, 0x35fc, 0x39d4, 0x3775, 0x3b1e, 0x3813, 0x3649, 0x31af, 0x37bb, 0x334a, 0x3a6e, 0x3284, 0x26e0, 0x2e01, +0x2ebb, 0x344b, 0x3821, 0x381a, 0x385a, 0x2534, 0x3635, 0x2a92, 0x3b8c, 0x31f0, 0x3947, 0x3ac7, 0x3743, 0x3924, 0x39e4, 0x358f, 0x2b62, 0x392c, 0x3955, 0x3341, 0x3676, 0x38ac, 0x3957, 0x335b, 0x2ca2, 0x39ff, 0x37cb, 0x341f, 0x3ac9, 0x3b6c, 0x2f14, 0x34c3, +0x3018, 0x3169, 0x355b, 0x3624, 0x31ed, 0x379e, 0x3268, 0x309b, 0x35db, 0x3872, 0x3bdb, 0x34c7, 0x3408, 0x3359, 0x3920, 0x331f, 0x3866, 0x3af0, 0x2a1a, 0x39e0, 0x3b14, 0x34fa, 0x2d18, 0x3963, 0x35e8, 0x2539, 0x38f5, 0x37b3, 0x378f, 0x31b5, 0x3a6c, 0x3685, +0x3a06, 0x318a, 0x2934, 0x33c1, 0x3be8, 0x375b, 0x3860, 0x3543, 0x3702, 0x3951, 0x3677, 0x37ff, 0x2e27, 0x2e3a, 0x340f, 0x3817, 0x2f04, 0x357e, 0x3a1d, 0x2dd6, 0x252a, 0x3945, 0x162a, 0x3b19, 0x3a53, 0x35d2, 0x3a5d, 0x3474, 0x38e9, 0x374b, 0x387c, 0x1f1a, +0x38ac, 0x3291, 0x3393, 0x3b53, 0x3169, 0x3bca, 0x2f1a, 0x3551, 0x38a3, 0x28e3, 0x369d, 0x34a1, 0x38a8, 0x34c3, 0x3841, 0x390d, 0x3b13, 0x3282, 0x3a29, 0x3a78, 0x2df3, 0x3a37, 0x35f4, 0x35a6, 0x38e8, 0x3328, 0x3beb, 0x390b, 0x32dc, 0x34dc, 0x396d, 0x3a78, +0x39ba, 0x3a06, 0x2cdd, 0x3bc3, 0x2d43, 0x2992, 0x3663, 0x3a68, 0x2c3e, 0x394e, 0x2c9f, 0x380e, 0x37f5, 0x3557, 0x2873, 0x390f, 0x39e7, 0x3939, 0x3669, 0x385c, 0x3a68, 0x32c4, 0x2b04, 0x2d6d, 0x39d3, 0x3895, 0x331d, 0x3b59, 0x3463, 0x2b6a, 0x31de, 0x3296, +0x3aae, 0x3bcd, 0x345a, 0x3897, 0x374b, 0x3bd4, 0x38a2, 0x357f, 0x3402, 0x3a0c, 0x3507, 0x3865, 0x3a54, 0x3878, 0x3859, 0x383e, 0x32b5, 0x34ea, 0x328d, 0x38b6, 0x3464, 0x2f5b, 0x35ff, 0x3817, 0x2f24, 0x3533, 0x3b21, 0x37ba, 0x3837, 0x2e34, 0x3bad, 0x34bc }; \ No newline at end of file diff --git a/hwpe/redmule/inc/y_2D.h b/hwpe/redmule/inc/y_2D.h index 9ea877d..9484a10 100644 --- a/hwpe/redmule/inc/y_2D.h +++ b/hwpe/redmule/inc/y_2D.h @@ -1,99 +1,27 @@ /* Header file generated by RedMulE Golden Model */ -uint16_t y_inp_2D [96][96] = { -0x39fc, 0x3a87, 0x3a35, 0x2bf4, 0x34f8, 0x2c8c, 0x3822, 0x38a2, 0x3bf8, 0x3b3a, 0x37d8, 0x3041, 0x28b2, 0x38d2, 0x1822, 0x3044, 0x38dc, 0x308d, 0x3a14, 0x3952, 0x38be, 0x32ef, 0x351e, 0x38ab, 0x2eb4, 0x3689, 0x33ca, 0x3a1f, 0x3bbc, 0x37ed, 0x38d5, 0x35c8, 0x341b, 0x3b74, 0x3627, 0x3a34, 0x3220, 0x3b85, 0x3a43, 0x2eca, 0x3550, 0x3958, 0x3813, 0x2cca, 0x3869, 0x391e, 0x3260, 0x2e42, 0x3493, 0x39ed, 0x3b7b, 0x3699, 0x3863, 0x3a7e, 0x3ab4, 0x3bcb, 0x3920, 0x3502, 0x28df, 0x38c5, 0x35e5, 0x282d, 0x3645, 0x3a29, 0x2fbb, 0x338d, 0x3ba0, 0x320d, 0x2830, 0x3bb4, 0x390a, 0x367f, 0x3335, 0x3b1a, 0x38c0, 0x3781, 0x3773, 0x39b0, 0x3b74, 0x38ba, 0x3383, 0x3550, 0x357a, 0x3ba7, 0x30e6, 0x39f4, 0x3b11, 0x282b, 0x334f, 0x3644, 0x367c, 0x3ac3, 0x38f3, 0x39f9, 0x3b1d, 0x35cf, -0x3433, 0x2eea, 0x38c1, 0x362a, 0x35e6, 0x3070, 0x1c1d, 0x308e, 0x381d, 0x39e5, 0x3a51, 0x2fb2, 0x3723, 0x3b58, 0x293e, 0x337a, 0x3a39, 0x349c, 0x3766, 0x3a73, 0x39bd, 0x3a0c, 0x3843, 0x21b9, 0x39a5, 0x2fd6, 0x2cf4, 0x3112, 0x3a1a, 0x3bb6, 0x3a83, 0x398e, 0x3b92, 0x2a3f, 0x37f1, 0x3664, 0x35f0, 0x39be, 0x3279, 0x39e0, 0x3241, 0x3bc7, 0x3bae, 0x36bd, 0x1bf5, 0x3806, 0x37d3, 0x247c, 0x3789, 0x36b9, 0x3b84, 0x3093, 0x3a5d, 0x2863, 0x2fe0, 0x2c4b, 0x3bd5, 0x38b6, 0x3b0e, 0x3ad1, 0x3ba2, 0x3914, 0x3947, 0x3984, 0x397a, 0x35ed, 0x3891, 0x3b7f, 0x3b32, 0x3857, 0x3717, 0x2b73, 0x38c1, 0x3bc6, 0x3330, 0x35c8, 0x34ff, 0x3924, 0x387b, 0x3a27, 0x3b92, 0x22d9, 0x29be, 0x3b39, 0x361c, 0x34e6, 0x2b7e, 0x34d8, 0x38c2, 0x3a4c, 0x3a2f, 0x381f, 0x38f6, 0x3a9a, 0x394f, 0x382d, -0x3939, 0x397a, 0x3926, 0x3a59, 0x34e3, 0x3077, 0x3190, 0x3a6b, 0x2c3f, 0x3a51, 0x35d9, 0x3866, 0x2f73, 0x38f2, 0x3766, 0x3aa1, 0x3b55, 0x2f8f, 0x3993, 0x354a, 0x3650, 0x340d, 0x2f01, 0x3731, 0x394d, 0x3b15, 0x3806, 0x39b9, 0x3aa7, 0x387c, 0x3beb, 0x2e2f, 0x38e8, 0x353a, 0x36ba, 0x3b2e, 0x3b5c, 0x2d4b, 0x357e, 0x3bd8, 0x3be0, 0x38b0, 0x2a3b, 0x2ff0, 0x3268, 0x38f3, 0x31fc, 0x318c, 0x35b5, 0x3980, 0x3a4d, 0x33cc, 0x365b, 0x397e, 0x3809, 0x39af, 0x3537, 0x2ba6, 0x30f1, 0x38b2, 0x39fe, 0x39f3, 0x373b, 0x3bff, 0x36ce, 0x3b5d, 0x3b5a, 0x2f1d, 0x3be3, 0x395d, 0x34d0, 0x36a3, 0x3937, 0x33b3, 0x3b91, 0x3ab5, 0x3215, 0x396b, 0x3bed, 0x302d, 0x3862, 0x3b05, 0x2ba1, 0x2fa6, 0x35d2, 0x3806, 0x3b84, 0x3233, 0x2664, 0x3a63, 0x3bdb, 0x375f, 0x3b0b, 0x34ff, 0x3020, 0x375d, -0x3931, 0x2d6c, 0x31c3, 0x3a24, 0x34b8, 0x3865, 0x366e, 0x3aaf, 0x3530, 0x20d6, 0x35ac, 0x33e8, 0x3b37, 0x32d8, 0x333c, 0x3349, 0x30cd, 0x392f, 0x2c30, 0x3b0a, 0x390a, 0x3703, 0x3b5f, 0x39ac, 0x31ba, 0x32a4, 0x3b8f, 0x3a5e, 0x3ad1, 0x38bf, 0x38bb, 0x369f, 0x3b75, 0x32c6, 0x31d2, 0x280f, 0x3891, 0x3b09, 0x3531, 0x3899, 0x3a55, 0x37fe, 0x3b5e, 0x364a, 0x3ada, 0x386f, 0x38bb, 0x3a7b, 0x313f, 0x3592, 0x2ca6, 0x2eeb, 0x38b1, 0x35df, 0x326f, 0x3bf5, 0x3848, 0x2fbd, 0x3268, 0x3922, 0x376b, 0x3a5e, 0x3826, 0x3207, 0x33f3, 0x3302, 0x3a80, 0x3bf1, 0x35dd, 0x2a83, 0x3460, 0x3296, 0x3ada, 0x3484, 0x3989, 0x3680, 0x3969, 0x3ab4, 0x2fb1, 0x3b50, 0x38bd, 0x3ad1, 0x34ac, 0x3718, 0x2ed7, 0x3b53, 0x3114, 0x248a, 0x3960, 0x3ab6, 0x39ef, 0x21dd, 0x33b9, 0x3a05, 0x2fbe, 0x37a2, -0x3a70, 0x37f8, 0x37f1, 0x3591, 0x382f, 0x3276, 0x33ed, 0x3935, 0x275e, 0x353c, 0x3b24, 0x3b42, 0x38db, 0x33ca, 0x3bd7, 0x3694, 0x365f, 0x3997, 0x39b7, 0x3bcb, 0x3b6a, 0x269a, 0x3956, 0x3b4e, 0x3ba1, 0x3bee, 0x2aaf, 0x3530, 0x3ad7, 0x3bce, 0x3bd2, 0x397c, 0x3aee, 0x3b62, 0x3bfc, 0x3ba1, 0x3b44, 0x38e6, 0x3747, 0x3855, 0x3baf, 0x3b16, 0x3b35, 0x34e7, 0x3858, 0x3bdb, 0x39c3, 0x3898, 0x381e, 0x3899, 0x36be, 0x363c, 0x3a70, 0x1518, 0x334e, 0x38cd, 0x3a74, 0x3420, 0x35a7, 0x3a00, 0x3282, 0x32db, 0x3656, 0x2dd8, 0x2e5b, 0x399e, 0x3bd7, 0x3366, 0x34cd, 0x257c, 0x3a2e, 0x375b, 0x3971, 0x3472, 0x269f, 0x39ac, 0x39e6, 0x396b, 0x335b, 0x38cc, 0x3b3d, 0x38ee, 0x3895, 0x2e3b, 0x3ba0, 0x3bb7, 0x3401, 0x35df, 0x3b06, 0x3adf, 0x37af, 0x3948, 0x33a6, 0x3aa7, 0x36b2, 0x373c, -0x3872, 0x3674, 0x34d5, 0x3918, 0x37cd, 0x369a, 0x3a26, 0x3bc3, 0x380c, 0x35ba, 0x36eb, 0x3b54, 0x37a9, 0x3405, 0x397d, 0x351f, 0x2f10, 0x34fd, 0x333c, 0x36c9, 0x3584, 0x3998, 0x3b22, 0x3aff, 0x3931, 0x31b7, 0x39ae, 0x31e7, 0x3847, 0x392a, 0x3bff, 0x3a24, 0x15c5, 0x3905, 0x36e8, 0x3356, 0x2f46, 0x38a9, 0x3bd8, 0x3bfc, 0x2fbf, 0x3a7d, 0x3989, 0x3a6c, 0x3a8b, 0x32c9, 0x37da, 0x3b16, 0x394a, 0x3aa5, 0x2c30, 0x3968, 0x3119, 0x3af2, 0x2f8f, 0x34ef, 0x3ab3, 0x2445, 0x38d9, 0x3856, 0x3592, 0x389d, 0x2932, 0x31f8, 0x3775, 0x3947, 0x3893, 0x3b50, 0x3465, 0x355c, 0x3547, 0x3925, 0x32c2, 0x3a0e, 0x39f9, 0x39f0, 0x2a1c, 0x34a0, 0x3b51, 0x3bb8, 0x38af, 0x36c7, 0x361f, 0x397b, 0x3a7f, 0x39e2, 0x3a7e, 0x3a67, 0x304c, 0x34d8, 0x3921, 0x3287, 0x2d90, 0x3b36, 0x30cc, 0x1958, -0x36ea, 0x3419, 0x39f3, 0x3bf1, 0x3271, 0x3763, 0x3643, 0x337f, 0x3161, 0x3944, 0x33b1, 0x30c7, 0x3687, 0x342b, 0x2402, 0x394a, 0x3480, 0x3052, 0x2a6e, 0x376a, 0x3236, 0x381e, 0x3596, 0x3939, 0x373e, 0x34b4, 0x201a, 0x3245, 0x3169, 0x26c8, 0x3a1c, 0x389b, 0x3351, 0x3bac, 0x3261, 0x37ab, 0x39bb, 0x350f, 0x3b5d, 0x3b86, 0x34e8, 0x3104, 0x3969, 0x31f4, 0x399a, 0x370e, 0x34a3, 0x3064, 0x3519, 0x3542, 0x3a72, 0x3be0, 0x3ba2, 0x3a5b, 0x3455, 0x3ae5, 0x38ef, 0x358a, 0x3908, 0x38eb, 0x3572, 0x3b41, 0x39cb, 0x39f4, 0x3bb6, 0x2f51, 0x3345, 0x3475, 0x3b20, 0x3b7c, 0x385d, 0x36a4, 0x35b8, 0x3368, 0x3867, 0x37cb, 0x3b8c, 0x32e9, 0x366b, 0x3a3f, 0x3147, 0x3534, 0x25bc, 0x3828, 0x38f8, 0x27cd, 0x35c8, 0x2a95, 0x39cf, 0x328b, 0x3a6d, 0x34f4, 0x38ae, 0x2b5f, 0x3845, 0x3b30, -0x3719, 0x37fc, 0x3adc, 0x2273, 0x385f, 0x39d1, 0x2f2c, 0x2df2, 0x36a6, 0x3523, 0x234d, 0x3a3f, 0x2817, 0x355d, 0x399f, 0x3924, 0x3bd4, 0x35ca, 0x3319, 0x301a, 0x353f, 0x34d2, 0x3bfd, 0x373e, 0x3a2a, 0x320b, 0x2e90, 0x38e8, 0x2f48, 0x3873, 0x3b61, 0x39d5, 0x3af7, 0x3885, 0x3be2, 0x3963, 0x36cc, 0x331b, 0x31ad, 0x3668, 0x39a2, 0x36f9, 0x3b52, 0x3985, 0x395d, 0x2e15, 0x30c2, 0x37ed, 0x32d1, 0x3a04, 0x3bef, 0x2fd7, 0x301d, 0x3a39, 0x3999, 0x342d, 0x34e3, 0x3bde, 0x3825, 0x3ac0, 0x3495, 0x3505, 0x3820, 0x30df, 0x37fd, 0x386c, 0x37c5, 0x3bab, 0x3b3d, 0x37f1, 0x3b42, 0x3825, 0x3bb4, 0x38a0, 0x383b, 0x3a92, 0x3a5c, 0x24c7, 0x38c8, 0x3492, 0x30af, 0x3b63, 0x35bb, 0x3046, 0x3aec, 0x357f, 0x3bb6, 0x3886, 0x37c6, 0x3315, 0x39cd, 0x32ae, 0x3b6d, 0x2d8c, 0x3607, 0x3420, -0x385d, 0x3782, 0x38ad, 0x34af, 0x3aad, 0x3bf3, 0x34bc, 0x3bfc, 0x33f0, 0x34ab, 0x37b6, 0x308d, 0x3ac8, 0x3935, 0x3b3a, 0x3517, 0x2579, 0x3b26, 0x36f6, 0x381f, 0x3b3c, 0x3a9f, 0x3667, 0x1c3e, 0x3b29, 0x2344, 0x3010, 0x36f7, 0x3470, 0x3834, 0x33bc, 0x306f, 0x392b, 0x37bc, 0x357a, 0x38a5, 0x3a09, 0x38f3, 0x34c6, 0x304b, 0x3bb7, 0x36c3, 0x3435, 0x3984, 0x357c, 0x345b, 0x39b5, 0x3286, 0x3a6b, 0x2e0e, 0x3613, 0x33e9, 0x379f, 0x3a14, 0x3a3a, 0x2e0e, 0x38f6, 0x3589, 0x3807, 0x3a49, 0x3818, 0x39dd, 0x31b0, 0x3a67, 0x39de, 0x175e, 0x394b, 0x34de, 0x394a, 0x3853, 0x371b, 0x3b5d, 0x39bb, 0x3029, 0x3091, 0x37b8, 0x33f0, 0x3517, 0x391e, 0x35ce, 0x3bc7, 0x2c6e, 0x2d9c, 0x36c1, 0x3143, 0x35c5, 0x39c6, 0x3a05, 0x3b1f, 0x3941, 0x3adc, 0x393a, 0x3993, 0x3bac, 0x2781, 0x3912, -0x36b8, 0x3a59, 0x397c, 0x25c3, 0x3b19, 0x3304, 0x399d, 0x3bde, 0x2e7c, 0x341e, 0x3172, 0x3bfd, 0x3b45, 0x3186, 0x37fe, 0x3b92, 0x390e, 0x2d85, 0x34fa, 0x2c58, 0x3ac5, 0x398f, 0x386a, 0x3ae3, 0x2f53, 0x3b4d, 0x3602, 0x3042, 0x353d, 0x3811, 0x3928, 0x2414, 0x3bb8, 0x3841, 0x3990, 0x388a, 0x25d4, 0x3787, 0x39a9, 0x3963, 0x3554, 0x3b41, 0x3921, 0x2938, 0x39cc, 0x34d1, 0x38ec, 0x31ac, 0x3aed, 0x36ca, 0x3a41, 0x3754, 0x3ab4, 0x39ac, 0x387a, 0x3851, 0x3097, 0x3885, 0x2ef9, 0x2530, 0x3a9d, 0x39ec, 0x38ca, 0x3ad4, 0x39ea, 0x37ce, 0x3ac0, 0x2879, 0x3bda, 0x3af5, 0x2eaa, 0x35e9, 0x3a11, 0x3a48, 0x2782, 0x3a7f, 0x3662, 0x3a99, 0x2194, 0x3628, 0x3668, 0x36e5, 0x38ab, 0x3833, 0x30b4, 0x3237, 0x39df, 0x3a63, 0x370d, 0x2c4a, 0x3ae0, 0x3b29, 0x3bba, 0x3b64, 0x260a, 0x38f8, -0x2679, 0x3412, 0x395a, 0x3054, 0x3ac9, 0x3bb3, 0x31a7, 0x38f7, 0x1d33, 0x3aeb, 0x38f5, 0x3649, 0x3aab, 0x3894, 0x353b, 0x3bbf, 0x37e2, 0x3b2d, 0x3a05, 0x3b7f, 0x318f, 0x2487, 0x3a3b, 0x36e8, 0x35d0, 0x2e1b, 0x3a03, 0x3bb9, 0x2d71, 0x32e5, 0x31c0, 0x2a74, 0x3898, 0x3ae0, 0x381b, 0x308d, 0x3afa, 0x2e44, 0x3aa2, 0x39cb, 0x3a19, 0x321f, 0x3975, 0x3a94, 0x20b7, 0x3843, 0x3942, 0x38c2, 0x3587, 0x3ba0, 0x3b5b, 0x3981, 0x3ba0, 0x3988, 0x2fc0, 0x34d2, 0x30ad, 0x3102, 0x394d, 0x38ef, 0x353c, 0x39d3, 0x3b57, 0x36c4, 0x3619, 0x3a4d, 0x382f, 0x35e7, 0x26ce, 0x33c6, 0x25a6, 0x36b8, 0x3b5f, 0x3a6d, 0x34cb, 0x2bb8, 0x368b, 0x3368, 0x312a, 0x3869, 0x37a7, 0x3804, 0x34af, 0x39ff, 0x350d, 0x358e, 0x3a40, 0x349c, 0x3ac3, 0x39fa, 0x3153, 0x38da, 0x390b, 0x30ea, 0x3205, 0x3915, -0x3a69, 0x385c, 0x34dc, 0x2e57, 0x2dff, 0x2a23, 0x2f74, 0x2efc, 0x397f, 0x367e, 0x2932, 0x3565, 0x38f6, 0x3bae, 0x3abe, 0x34cf, 0x39f9, 0x3995, 0x3844, 0x3846, 0x3674, 0x39ab, 0x382b, 0x3aa9, 0x36eb, 0x3a6f, 0x37d9, 0x3804, 0x2c69, 0x3883, 0x367d, 0x3b09, 0x25e5, 0x34d7, 0x3848, 0x310c, 0x3bdf, 0x3890, 0x3623, 0x3951, 0x3a1e, 0x385c, 0x3a27, 0x2747, 0x37f7, 0x344d, 0x2903, 0x3b96, 0x396d, 0x3868, 0x3766, 0x3689, 0x3705, 0x2dc4, 0x39f1, 0x389b, 0x39b0, 0x31b3, 0x3a14, 0x309a, 0x3ba3, 0x32a9, 0x3652, 0x390d, 0x316f, 0x3812, 0x38dd, 0x3473, 0x396a, 0x3b35, 0x3a31, 0x2cb3, 0x1c90, 0x3794, 0x372c, 0x3238, 0x3b57, 0x3516, 0x3b9c, 0x3a83, 0x386e, 0x3747, 0x353b, 0x31d2, 0x3b04, 0x338e, 0x3802, 0x373c, 0x373c, 0x380f, 0x28c7, 0x3936, 0x37eb, 0x32a6, 0x30cc, 0x3be5, -0x3428, 0x3592, 0x3226, 0x38dd, 0x3823, 0x374e, 0x3ac7, 0x38cb, 0x32a9, 0x354b, 0x3517, 0x2f43, 0x3812, 0x3a7a, 0x3627, 0x3b87, 0x3849, 0x377a, 0x2fae, 0x3bf8, 0x38e2, 0x387d, 0x3bab, 0x3a95, 0x31c0, 0x2be8, 0x30fb, 0x3bd8, 0x3828, 0x2ac0, 0x39ef, 0x3927, 0x2417, 0x34a8, 0x3626, 0x3751, 0x3b5b, 0x3a42, 0x2c4c, 0x3806, 0x358e, 0x34c1, 0x2d4f, 0x3bda, 0x3990, 0x3651, 0x3431, 0x31a2, 0x3379, 0x339a, 0x37cf, 0x3bf3, 0x3ada, 0x384a, 0x373d, 0x38a4, 0x2d47, 0x390a, 0x312a, 0x3adb, 0x3bee, 0x3463, 0x3857, 0x3950, 0x349f, 0x3a8a, 0x3767, 0x3552, 0x2d8a, 0x2cc8, 0x36cd, 0x3510, 0x3a04, 0x35ac, 0x3b20, 0x3076, 0x3a93, 0x36d0, 0x315a, 0x3af1, 0x355d, 0x3b34, 0x3b5c, 0x2247, 0x37c7, 0x3b02, 0x3a5d, 0x3669, 0x282c, 0x3b81, 0x319c, 0x3700, 0x3a0d, 0x33c0, 0x3985, 0x335e, -0x3af9, 0x3733, 0x2f0c, 0x392a, 0x2528, 0x34c8, 0x39e5, 0x3409, 0x3424, 0x389e, 0x358a, 0x3664, 0x3541, 0x38fa, 0x1d31, 0x2d02, 0x3889, 0x3690, 0x3a15, 0x3a4b, 0x364a, 0x3791, 0x3a6f, 0x3aa1, 0x3ab0, 0x39ed, 0x37da, 0x3abc, 0x3b09, 0x376d, 0x2c63, 0x314f, 0x34b9, 0x3142, 0x39cf, 0x3242, 0x384f, 0x3bf9, 0x36a1, 0x358d, 0x3ade, 0x3bc9, 0x347d, 0x3a5a, 0x3b4e, 0x3aa3, 0x39bf, 0x318d, 0x3a37, 0x3833, 0x333b, 0x3bb9, 0x39f4, 0x2ff2, 0x38b3, 0x3508, 0x3817, 0x3bd8, 0x35a8, 0x38b0, 0x3aac, 0x3984, 0x3bff, 0x29ea, 0x34ca, 0x38c6, 0x3885, 0x3bd8, 0x38df, 0x38fa, 0x358e, 0x3528, 0x39e8, 0x2d40, 0x3464, 0x3bac, 0x3ad1, 0x399b, 0x3a77, 0x3bfe, 0x3b52, 0x3934, 0x35ca, 0x3bf7, 0x3852, 0x3858, 0x35a1, 0x3a72, 0x34d7, 0x39e3, 0x2fe5, 0x3b1c, 0x3aee, 0x3bf7, 0x25f0, 0x3881, -0x376e, 0x3833, 0x3ab2, 0x3b59, 0x3b7f, 0x3ac3, 0x3954, 0x302d, 0x3a5d, 0x38f9, 0x3a41, 0x3a0f, 0x33a5, 0x3150, 0x29b7, 0x39aa, 0x35d5, 0x31db, 0x389b, 0x3aa1, 0x3529, 0x3bf1, 0x38de, 0x39a9, 0x321d, 0x35d6, 0x3423, 0x3be2, 0x34b2, 0x3b42, 0x31d8, 0x345b, 0x3a2d, 0x3b72, 0x3a10, 0x338a, 0x3b84, 0x3be8, 0x3810, 0x38a5, 0x3ba8, 0x3921, 0x3ac0, 0x3329, 0x3bca, 0x3bbb, 0x389a, 0x35f3, 0x3908, 0x3927, 0x3534, 0x381b, 0x2d5f, 0x3bef, 0x35f6, 0x3b13, 0x3834, 0x25d5, 0x30f9, 0x397c, 0x31af, 0x3867, 0x2cc7, 0x28ea, 0x3afe, 0x3014, 0x3806, 0x31c4, 0x39fa, 0x3bb6, 0x250c, 0x391b, 0x39a4, 0x37e3, 0x38d9, 0x3747, 0x2b7e, 0x3939, 0x32d2, 0x3a48, 0x38c3, 0x312d, 0x3a2d, 0x3afd, 0x3101, 0x3b28, 0x370d, 0x2fce, 0x32fc, 0x3840, 0x39f5, 0x37b6, 0x39df, 0x1d49, 0x3b9b, 0x3694, -0x3580, 0x392f, 0x3953, 0x3ac8, 0x3af3, 0x33cd, 0x39a0, 0x3672, 0x373d, 0x236a, 0x3935, 0x39fa, 0x348e, 0x3759, 0x348d, 0x36e7, 0x391b, 0x3b46, 0x386c, 0x3515, 0x389f, 0x3b21, 0x3aef, 0x3bf5, 0x3a2d, 0x3428, 0x39d1, 0x3931, 0x39af, 0x38ba, 0x2cbf, 0x3bf4, 0x31be, 0x2dd5, 0x350d, 0x3af6, 0x2044, 0x36ae, 0x3810, 0x3690, 0x31f8, 0x2ed1, 0x3a21, 0x3b7b, 0x3a96, 0x355c, 0x3704, 0x34e4, 0x38d3, 0x2f90, 0x3902, 0x37b1, 0x3b2a, 0x3a69, 0x3792, 0x338b, 0x3006, 0x345e, 0x3530, 0x3b40, 0x3733, 0x2c59, 0x3bf1, 0x39e6, 0x3b20, 0x3bc1, 0x3b71, 0x37fc, 0x363f, 0x36f9, 0x3b39, 0x380a, 0x3516, 0x3814, 0x34b8, 0x3493, 0x3bbe, 0x328b, 0x3709, 0x393b, 0x373e, 0x3929, 0x37c0, 0x3464, 0x39f8, 0x35d1, 0x364e, 0x39ed, 0x3806, 0x398c, 0x39e1, 0x3be5, 0x3317, 0x3482, 0x3b35, 0x3bc5, -0x2be7, 0x3026, 0x3b12, 0x3476, 0x3967, 0x3767, 0x3a01, 0x385a, 0x30f5, 0x2ccc, 0x349d, 0x2811, 0x399c, 0x3afe, 0x39ee, 0x3903, 0x3490, 0x2d4b, 0x367c, 0x361f, 0x3add, 0x312b, 0x3502, 0x3a4b, 0x3b74, 0x38b0, 0x31bd, 0x3327, 0x3a68, 0x3078, 0x3811, 0x3bce, 0x3867, 0x362d, 0x39f7, 0x2c93, 0x325f, 0x3370, 0x3bcf, 0x3b0c, 0x3656, 0x3644, 0x3130, 0x34f1, 0x326f, 0x3ab4, 0x38b5, 0x2e0b, 0x38ec, 0x3b21, 0x3be6, 0x3a39, 0x38f2, 0x3621, 0x3bf7, 0x390d, 0x39ef, 0x2b80, 0x394b, 0x3b3c, 0x31c4, 0x1a0a, 0x354e, 0x3655, 0x3564, 0x2b0e, 0x3072, 0x3838, 0x3190, 0x3b46, 0x3909, 0x31d8, 0x3b8d, 0x3b39, 0x3773, 0x35a3, 0x394f, 0x3971, 0x3919, 0x3848, 0x3a7d, 0x3b3d, 0x357e, 0x2755, 0x3a56, 0x3488, 0x3ac6, 0x3a25, 0x3991, 0x347e, 0x3472, 0x3b22, 0x38c8, 0x3b54, 0x384c, 0x28a2, -0x3b41, 0x3ab1, 0x3a5d, 0x35d6, 0x36e5, 0x3a33, 0x3a55, 0x3457, 0x35b4, 0x34d5, 0x389b, 0x3928, 0x3be7, 0x32d5, 0x3b26, 0x3790, 0x3203, 0x3296, 0x3b45, 0x3bc4, 0x38d4, 0x34f7, 0x3b50, 0x3ab1, 0x36eb, 0x3120, 0x35af, 0x396d, 0x28f5, 0x37f3, 0x3b0b, 0x31a6, 0x3a46, 0x1ce8, 0x38f3, 0x39c2, 0x3970, 0x3bb5, 0x28d7, 0x3b21, 0x39b4, 0x355e, 0x35a6, 0x3bb9, 0x2cc3, 0x38c2, 0x376c, 0x2e88, 0x34b2, 0x3967, 0x3325, 0x3bda, 0x37c6, 0x39dc, 0x3135, 0x3966, 0x22f4, 0x3433, 0x37e1, 0x34dd, 0x3900, 0x3ae7, 0x38ee, 0x3926, 0x2a4a, 0x3a16, 0x3ba9, 0x38de, 0x343a, 0x3a6f, 0x315c, 0x392b, 0x38ce, 0x35c3, 0x3810, 0x3ae9, 0x3627, 0x29b7, 0x2816, 0x289e, 0x3bb0, 0x39d1, 0x335c, 0x39b1, 0x3b48, 0x3614, 0x3581, 0x33df, 0x332b, 0x3750, 0x3438, 0x3309, 0x3854, 0x3830, 0x32e3, 0x3a27, -0x38f4, 0x3074, 0x351c, 0x2b8d, 0x35c2, 0x33dc, 0x3972, 0x39f2, 0x3af7, 0x3b12, 0x3b1a, 0x352d, 0x335e, 0x357a, 0x32e1, 0x3a63, 0x3426, 0x316d, 0x3903, 0x36e4, 0x36cc, 0x35fd, 0x3b29, 0x3304, 0x387e, 0x347d, 0x3af3, 0x33b5, 0x3859, 0x3800, 0x39b1, 0x3ae4, 0x2839, 0x38e6, 0x3341, 0x3346, 0x3ad4, 0x38b2, 0x392b, 0x3bfa, 0x3090, 0x36f1, 0x29b5, 0x2fa6, 0x3bb5, 0x36bc, 0x30c4, 0x38f4, 0x1e3b, 0x34fd, 0x2c4c, 0x3a6b, 0x393c, 0x3aba, 0x3866, 0x356a, 0x3441, 0x3802, 0x367d, 0x3546, 0x380f, 0x38f2, 0x354b, 0x30af, 0x2e2f, 0x37cb, 0x3994, 0x36e3, 0x37a7, 0x3a8c, 0x395c, 0x3aa2, 0x2c2f, 0x35b4, 0x3180, 0x3ad0, 0x3237, 0x3ac6, 0x31f5, 0x3637, 0x398c, 0x3443, 0x3bd6, 0x3b63, 0x35d0, 0x3351, 0x3336, 0x3aa8, 0x3b66, 0x39df, 0x36fe, 0x3477, 0x3823, 0x38ef, 0x399e, 0x394b, -0x3a85, 0x2d22, 0x39b4, 0x3a4e, 0x3334, 0x1c3b, 0x3466, 0x3469, 0x3820, 0x3a70, 0x2d5e, 0x37d9, 0x37bb, 0x3bd8, 0x25ea, 0x3292, 0x3a58, 0x3847, 0x3aea, 0x389d, 0x386e, 0x3870, 0x3bc4, 0x3a95, 0x307f, 0x3928, 0x31c2, 0x38e5, 0x3994, 0x3b83, 0x297a, 0x33c0, 0x3a55, 0x390d, 0x3550, 0x3447, 0x3b6d, 0x2809, 0x3993, 0x2944, 0x3ae1, 0x3845, 0x3703, 0x38fb, 0x3880, 0x3b1b, 0x3312, 0x2d51, 0x2e33, 0x3ba5, 0x3805, 0x3359, 0x3b3c, 0x3663, 0x354f, 0x3904, 0x3787, 0x39ac, 0x3bc4, 0x2f65, 0x3778, 0x3ba8, 0x3100, 0x3840, 0x3b67, 0x3abe, 0x2d5b, 0x391f, 0x3670, 0x39b3, 0x3a4e, 0x3947, 0x2e35, 0x3755, 0x3bb9, 0x31bf, 0x3ba6, 0x3a10, 0x39d1, 0x3aae, 0x3b88, 0x380a, 0x345f, 0x3aeb, 0x3660, 0x373a, 0x2d6f, 0x33b0, 0x3518, 0x3b25, 0x3872, 0x3aab, 0x2ed0, 0x347d, 0x2fd0, 0x38c5, -0x2cda, 0x353c, 0x3866, 0x2332, 0x3bde, 0x3912, 0x3762, 0x3ae3, 0x3a55, 0x39df, 0x32e0, 0x3b63, 0x3ac3, 0x3a85, 0x34e8, 0x38d7, 0x3543, 0x3a1e, 0x36e7, 0x3008, 0x359e, 0x298b, 0x3b6c, 0x3b51, 0x38d1, 0x3444, 0x39ec, 0x391e, 0x3a6d, 0x39e9, 0x3b7c, 0x36bb, 0x21f7, 0x2896, 0x3308, 0x3afc, 0x3879, 0x2cac, 0x2699, 0x3475, 0x331b, 0x340f, 0x373b, 0x3814, 0x3b6d, 0x39bb, 0x2e09, 0x3284, 0x286f, 0x371d, 0x3966, 0x27c2, 0x3ac4, 0x3b92, 0x3ba4, 0x3acb, 0x30b0, 0x3a11, 0x3721, 0x34cc, 0x3b84, 0x3002, 0x38bc, 0x341e, 0x36c3, 0x3bd2, 0x39fe, 0x380f, 0x38c3, 0x3a9c, 0x373a, 0x3a79, 0x3bfa, 0x31c7, 0x340d, 0x3602, 0x38e4, 0x1ddd, 0x38b2, 0x3985, 0x2574, 0x339e, 0x3b39, 0x3765, 0x3369, 0x39b6, 0x3974, 0x3a25, 0x362c, 0x3aeb, 0x3935, 0x3271, 0x2de2, 0x35d5, 0x3b93, 0x32f0, -0x3425, 0x3871, 0x2d6d, 0x3070, 0x319d, 0x33b5, 0x333e, 0x397e, 0x2a76, 0x39eb, 0x3b34, 0x3988, 0x3b40, 0x36de, 0x39a6, 0x38d9, 0x398b, 0x3623, 0x325e, 0x37d1, 0x3406, 0x377f, 0x3a58, 0x3486, 0x3855, 0x3acc, 0x378c, 0x3b1b, 0x3bed, 0x3aae, 0x3998, 0x39dc, 0x38a0, 0x3b74, 0x38a1, 0x2a79, 0x2e26, 0x39fd, 0x377c, 0x39bb, 0x3ad6, 0x1a6c, 0x2e6b, 0x377b, 0x3b5c, 0x39bd, 0x32f6, 0x371a, 0x348d, 0x348b, 0x359c, 0x38c7, 0x3022, 0x389f, 0x3a5b, 0x328d, 0x3158, 0x3206, 0x364d, 0x3a90, 0x36df, 0x3934, 0x3a5e, 0x39e4, 0x3a42, 0x3afe, 0x38d5, 0x36c5, 0x3050, 0x2acf, 0x3a39, 0x29da, 0x365c, 0x364e, 0x2bc, 0x3850, 0x381b, 0x39b2, 0x3643, 0x390a, 0x30da, 0x3243, 0x2dd9, 0x3b6c, 0x38cc, 0x309c, 0x27f0, 0x3b84, 0x3979, 0x3b3e, 0x3b08, 0x376a, 0x390d, 0x2d9e, 0x3527, 0x3a25, -0x33e2, 0x3840, 0x3afd, 0x385b, 0x350a, 0x3b04, 0x377a, 0x38ad, 0x3aec, 0x39d7, 0x38ad, 0x3b9d, 0x37d6, 0x36f1, 0x3586, 0x325c, 0x2cf4, 0x3b30, 0x387d, 0x3a1d, 0x3a29, 0x3048, 0x3bdc, 0x30d7, 0x359a, 0x30c4, 0x3a22, 0x3148, 0x3bd3, 0x3699, 0x353e, 0x398f, 0x36f2, 0x3115, 0x3505, 0x39bc, 0x39b1, 0x37ec, 0x353f, 0x379f, 0x36df, 0x3479, 0x3815, 0x3503, 0x30dd, 0x39c5, 0x3a1e, 0x30a0, 0x385d, 0x3a44, 0x3819, 0x3599, 0x3994, 0x394a, 0x316a, 0x39ab, 0x2c23, 0x3985, 0x3bbe, 0x3bdd, 0x3486, 0x36f7, 0x3559, 0x391b, 0x2642, 0x3a96, 0x3bac, 0x367c, 0x3b59, 0x38f0, 0x268a, 0x3a03, 0x3106, 0x3bd1, 0x3279, 0x36c9, 0x3b40, 0x3750, 0x2e02, 0x3965, 0x3636, 0x3afb, 0x3960, 0x38d6, 0x3a62, 0x2910, 0x3a84, 0x359d, 0x3ad9, 0x33f7, 0x3b5d, 0x26e1, 0x376b, 0x3824, 0x2852, 0x3982, -0x3797, 0x36e3, 0x3924, 0x3947, 0x3b36, 0x361e, 0x376b, 0x365b, 0x37e8, 0x329f, 0x3970, 0x3126, 0x3562, 0x3b17, 0x3aca, 0x3602, 0x3b9d, 0x394a, 0x2388, 0x2b85, 0x3a24, 0x3a66, 0x3648, 0x28d2, 0x3b67, 0x38b8, 0x3b15, 0x352c, 0x3b39, 0x3838, 0x388e, 0x3576, 0x39f5, 0x31f9, 0x35a0, 0x3a41, 0x3afa, 0x3513, 0x3688, 0x3b2b, 0x32b6, 0x32de, 0x3949, 0x3b1e, 0x3a1e, 0x280d, 0x38da, 0x388e, 0x316f, 0x38d4, 0x29c5, 0x3637, 0x34af, 0x2d8c, 0x3872, 0x30ac, 0x396e, 0x38bd, 0x39ab, 0x3b69, 0x3120, 0x355f, 0x2e7f, 0x35ab, 0x3821, 0x2b37, 0x3bc5, 0x3a0a, 0x3572, 0x30b5, 0x399e, 0x2a66, 0x31b8, 0x3abc, 0x3754, 0x36a7, 0x3b8b, 0x347d, 0x3b36, 0x3924, 0x2f95, 0x3ba9, 0x2224, 0x34cd, 0x3aaf, 0x3608, 0x34ce, 0x344b, 0x34b5, 0x3bd8, 0x37d3, 0x3757, 0x2c21, 0x3b8f, 0x38d3, 0x3aa4, -0x39c6, 0x381d, 0x3842, 0x3bd1, 0x3092, 0x35d5, 0x251f, 0x2529, 0x3133, 0x3862, 0x3444, 0x3519, 0x3b60, 0x2fb5, 0x38c7, 0x387e, 0x3138, 0x36a9, 0x353c, 0x3411, 0x3bd3, 0x2a07, 0x3a5c, 0x3826, 0x3228, 0x334d, 0x2f07, 0x2c6a, 0x3b43, 0x3425, 0x3568, 0x382a, 0x348c, 0x3b5f, 0x3745, 0x2ae7, 0x3772, 0x302b, 0x336a, 0x383a, 0x3361, 0x3110, 0x3684, 0x39d1, 0x3151, 0x34f1, 0x295b, 0x26ba, 0x3b1b, 0x38d5, 0x36b1, 0x3069, 0x3bfa, 0x385f, 0x3695, 0x3b50, 0x3be0, 0x3741, 0x3af4, 0x2cd1, 0x3862, 0x352d, 0x3b8d, 0x3800, 0x3868, 0x3931, 0x37f8, 0x3ad0, 0x341d, 0x3507, 0x3602, 0x3831, 0x393b, 0x3695, 0x380e, 0x383f, 0x38de, 0x3954, 0x38b3, 0x20be, 0x2428, 0x2e52, 0x3b5b, 0x20ea, 0x3aa9, 0x3430, 0x3aac, 0x393b, 0x32e7, 0x2d58, 0x366e, 0x32f5, 0x3990, 0x3b9d, 0x2f4c, 0x3420, -0x38d5, 0x31e4, 0x2c0e, 0x3742, 0x3bc0, 0x30f9, 0x3656, 0x3aaa, 0x385e, 0x3908, 0x3584, 0x2814, 0x3891, 0x3553, 0x391c, 0x3330, 0x38e5, 0x1aaf, 0x3be5, 0x3ac7, 0x3936, 0x3bf5, 0x361f, 0x39b3, 0x38c1, 0x394a, 0x39e1, 0x2b67, 0x3585, 0x380e, 0x3344, 0x3001, 0x3983, 0x31ec, 0x3ac2, 0x380a, 0x32c2, 0x34aa, 0x393d, 0x364d, 0x239a, 0x3727, 0x3b5c, 0x3265, 0x2d1f, 0x32dd, 0x3ae3, 0x36a0, 0x3600, 0x38f3, 0x378a, 0x357c, 0x34dd, 0x39a9, 0x3846, 0x2431, 0x3abe, 0x36fa, 0x38bd, 0x3696, 0x2c2e, 0x229d, 0x386f, 0x3a8b, 0x3aa4, 0x34f4, 0x35af, 0x34c1, 0x2222, 0x1820, 0x3a30, 0x38ec, 0x3855, 0x3952, 0x3873, 0x384b, 0x3bb1, 0x35aa, 0x363a, 0x380e, 0x3b3d, 0x397a, 0x38ca, 0x3a88, 0x35de, 0x3bac, 0x3ab4, 0x3654, 0x38f3, 0x2076, 0x3585, 0x300a, 0x3a71, 0x3b90, 0x3a83, 0x3a86, -0x3ab7, 0x3bee, 0x37bd, 0x3b2c, 0x39fb, 0x274a, 0x3a7d, 0x38df, 0x2a8d, 0x3611, 0x34b4, 0x38e4, 0x36f8, 0x3b2a, 0x364b, 0x3ac3, 0x2d73, 0x38e3, 0x2fcd, 0x3af3, 0x359e, 0x3afd, 0x3b13, 0x3a89, 0x379e, 0x35d5, 0x30bc, 0x34ae, 0x3a6a, 0x312e, 0x293a, 0x39df, 0x3a97, 0x39db, 0x3b98, 0x3818, 0x344f, 0x26c9, 0x3a30, 0x3505, 0x3885, 0x3206, 0x38e4, 0x3940, 0x3a5d, 0x3aab, 0x35e7, 0x3458, 0x381d, 0x3959, 0x3930, 0x3476, 0x348f, 0x3469, 0x2e03, 0x3889, 0x3ba1, 0x35ac, 0x3ac1, 0x3bcb, 0x3acc, 0x34d7, 0x38bd, 0x2b4c, 0x21ff, 0x3802, 0x34a4, 0x36f9, 0x352f, 0x394e, 0x3796, 0x2456, 0x38c8, 0x302d, 0x2de8, 0x3539, 0x39e8, 0x3560, 0x3913, 0x3bbf, 0x331a, 0x3969, 0x3a9e, 0x3972, 0x3a32, 0x3a15, 0x386f, 0x3a17, 0x3956, 0x39c3, 0x3762, 0x3b51, 0x32af, 0x3b58, 0x34ff, 0x319d, -0x3431, 0x34fc, 0x3a81, 0x3ada, 0x39e6, 0x3a49, 0x33ad, 0x38c8, 0x33cb, 0x3576, 0x3aaf, 0x34ee, 0x2e14, 0x38d0, 0x39c1, 0x29cb, 0x3112, 0x3593, 0x2f07, 0x2fa0, 0x34c0, 0x366e, 0x3998, 0x3540, 0x37c6, 0x39b7, 0x396d, 0x3319, 0x341e, 0x354a, 0x3773, 0x2c1c, 0x3bfc, 0x381b, 0x3529, 0x37f8, 0x3bbd, 0x37a2, 0x36f1, 0x3870, 0x3a69, 0x3494, 0x3169, 0x3455, 0x356f, 0x32e7, 0x35c0, 0x398e, 0x2c2f, 0x2ffe, 0x3140, 0x39ff, 0x3aae, 0x3bb7, 0x35b8, 0x39b2, 0x3303, 0x3948, 0x3a7f, 0x25f7, 0x3750, 0x357e, 0x3785, 0x3817, 0x3b05, 0x3a90, 0x38ad, 0x376f, 0x3ac5, 0x3a07, 0x3311, 0x3b9b, 0x24d1, 0x3451, 0x32a6, 0x342c, 0x3a8c, 0x360a, 0x36ad, 0x3abf, 0x2116, 0x3bb1, 0x328b, 0x37a9, 0x3aab, 0x39c9, 0x345e, 0x36b0, 0x384c, 0x3bfb, 0x2d31, 0x3a05, 0x3427, 0x3726, 0x3743, 0x3398, -0x3b0a, 0x3b85, 0x33ed, 0x32b0, 0x3a95, 0x2135, 0x3712, 0x2f34, 0x378e, 0x390f, 0x39b1, 0x2ad2, 0x300a, 0x34ec, 0x3a00, 0x20f8, 0x3b47, 0x3861, 0x341d, 0x3015, 0x3959, 0x37c9, 0x2f6c, 0x3758, 0x37e5, 0x353b, 0x38da, 0x39ae, 0x3947, 0x36d7, 0x3284, 0x3bb9, 0x357f, 0x3999, 0x39c2, 0x3889, 0x38b7, 0x3684, 0x355e, 0x390d, 0x3b96, 0x385c, 0x3ba5, 0x36c0, 0x3bbc, 0x37fc, 0x391c, 0x3a42, 0x39ca, 0x34ae, 0x394c, 0x3271, 0x2cd6, 0x343b, 0x2d7b, 0x2eea, 0x38a3, 0x2ca6, 0x3549, 0x3847, 0x3bcb, 0x3adc, 0x2e68, 0x3809, 0x3930, 0x357b, 0x3b89, 0x3b94, 0x3875, 0x3640, 0x387c, 0x376c, 0x33b9, 0x3b7e, 0x384c, 0x3906, 0x3b91, 0x209d, 0x2c43, 0x32cf, 0x3686, 0x310c, 0x3a7a, 0x38ef, 0x3645, 0x354a, 0x3670, 0x3732, 0x37b9, 0x3928, 0x358d, 0x3893, 0x3602, 0x2e3d, 0x2a22, 0x2f70, -0x34c9, 0x38f4, 0x374e, 0x3828, 0x37ff, 0x3723, 0x35b4, 0x34b7, 0x3b94, 0x265a, 0x3658, 0x3938, 0x38f5, 0x3bb9, 0x3960, 0x3b5c, 0x38d3, 0x31ea, 0x3412, 0x3be3, 0x3b95, 0x3a20, 0x353b, 0x39c5, 0x3291, 0x387d, 0x3af8, 0x3915, 0x3af7, 0x3be4, 0x399c, 0x34e5, 0x324b, 0x3838, 0x3914, 0x385e, 0x38cd, 0x39fd, 0x39a0, 0x3495, 0x38a1, 0x382c, 0x2ed2, 0x3866, 0x33d8, 0x3396, 0x3b0c, 0x39c8, 0x314f, 0x346f, 0x3aee, 0x313e, 0x39b8, 0x34fe, 0x3882, 0x36d2, 0x3a8b, 0x3a8e, 0x3ae4, 0x3b31, 0x30da, 0x34e8, 0x38ce, 0x3643, 0x39b6, 0x34fb, 0x38d7, 0x3bde, 0x3ac9, 0x3af2, 0x38fe, 0x275f, 0x3748, 0x30ee, 0x3010, 0x3b23, 0x3a55, 0x3a43, 0x3a23, 0x37eb, 0x38fa, 0x3335, 0x3996, 0x39a0, 0x360f, 0x2630, 0x39f3, 0x3870, 0x383c, 0x384c, 0x3392, 0x3754, 0x3b4f, 0x3bc1, 0x382f, 0x3802, -0x3bb0, 0x36ad, 0x3a3f, 0x389e, 0x2d0c, 0x34b1, 0x3592, 0x3933, 0x25f1, 0x3ac7, 0x308e, 0x36b7, 0x3ab0, 0x2994, 0x38e4, 0x3689, 0x3c00, 0x3441, 0x30f6, 0x3a71, 0x3b19, 0x394e, 0x3826, 0x19a6, 0x3b2a, 0x3594, 0x3893, 0x34af, 0x3b34, 0x3ab3, 0x37e9, 0x3ba1, 0x3b01, 0x29ca, 0x3715, 0x3643, 0x312e, 0x3289, 0x311d, 0x383e, 0x38dc, 0x33a1, 0x384d, 0x3ba6, 0x3982, 0x34a7, 0x3b20, 0x3728, 0x3add, 0x2f89, 0x377b, 0x3a2d, 0x342e, 0x36e5, 0x3aa2, 0x3864, 0x38fe, 0x2d84, 0x3bef, 0x3bcd, 0x3553, 0x3953, 0x37be, 0x394a, 0x3a5f, 0x1d30, 0x3bfb, 0x3737, 0x3aa1, 0x3b6e, 0x3809, 0x3b5f, 0x389b, 0x3905, 0x3b29, 0x387d, 0x3afc, 0x3807, 0x3881, 0x3a2c, 0x37d5, 0x3a76, 0x35c4, 0x39ec, 0x3abf, 0x36ed, 0x3135, 0x381e, 0x3593, 0x3968, 0x2d97, 0x350c, 0x3a61, 0x3550, 0x2bde, 0x3400, -0x35ed, 0x34e7, 0x3846, 0x2e9e, 0x3afd, 0x3658, 0x36c2, 0x3863, 0x30b9, 0x350a, 0x3a30, 0x34cd, 0x3b2c, 0x3061, 0x3bc4, 0x2e78, 0x3475, 0x388a, 0x3678, 0x30c5, 0x38f2, 0x3807, 0x311d, 0x3aad, 0x3804, 0x3a1b, 0x38bf, 0x2c7f, 0x3be8, 0x3523, 0x32d3, 0x3a33, 0x38f1, 0x34af, 0x3797, 0x32e6, 0x3886, 0x33e8, 0x3a63, 0x34d3, 0x3618, 0x3571, 0x3abb, 0x3a0d, 0x39d4, 0x361c, 0x3b81, 0x3598, 0x301d, 0x390a, 0x2876, 0x39db, 0x344c, 0x3518, 0x3825, 0x33a5, 0x392b, 0x3671, 0x39a6, 0x3320, 0x3a67, 0x3447, 0x3a75, 0x34c7, 0x3ba8, 0x3108, 0x394f, 0x3986, 0x2c4d, 0x3856, 0x3b1c, 0x3343, 0x399d, 0x3a25, 0x2f68, 0x3be3, 0x3131, 0x349d, 0x39b0, 0x32d3, 0x305c, 0x3b49, 0x2e61, 0x36e1, 0x3a0c, 0x36cb, 0x3b96, 0x3648, 0x36a2, 0x3879, 0x387f, 0x3aa3, 0x2ac5, 0x30d8, 0x3424, 0x2bc4, -0x39b8, 0x38d0, 0x3bd2, 0x311b, 0x2cff, 0x2e9c, 0x3908, 0x39d9, 0x3628, 0x3c00, 0x39b7, 0x3a20, 0x3a6d, 0x3909, 0x37c2, 0x2c06, 0x3a29, 0x374d, 0x30c7, 0x3204, 0x392c, 0x3af6, 0x30de, 0x35ec, 0x3b48, 0x3b34, 0x38ec, 0x3b9f, 0x3625, 0x1a62, 0x3681, 0x2cbc, 0x39e6, 0x348b, 0x3726, 0x38d1, 0x35df, 0x382b, 0x3bc9, 0x39e9, 0x3a7b, 0x32df, 0x22ec, 0x35fa, 0x3a1d, 0x3b56, 0x37d2, 0x35af, 0x3bb3, 0x35bf, 0x38f2, 0x3090, 0x3163, 0x2ce6, 0x39a1, 0x3aa2, 0x38d3, 0x398d, 0x3a80, 0x35ff, 0x33e6, 0x3a00, 0x35a3, 0x3a52, 0x3175, 0x337b, 0x39c7, 0x399c, 0x3873, 0x390a, 0x39f9, 0x3766, 0x33d1, 0x38fe, 0x3a2b, 0x37ec, 0x39f9, 0x3980, 0x3ac0, 0x309f, 0x3313, 0x3897, 0x34a5, 0x36fb, 0x3725, 0x3a71, 0x3553, 0x3b09, 0x36ad, 0x3923, 0x3bdd, 0x3b9e, 0x2960, 0x3a59, 0x3a20, 0x375d, -0x39b6, 0x31e6, 0x34bc, 0x391e, 0x38cd, 0xca5, 0x360c, 0x35e6, 0x35b5, 0x3be9, 0x3be4, 0x3bea, 0x3741, 0x302e, 0x3557, 0x3bb1, 0x3be4, 0x342c, 0x350c, 0x352b, 0x3825, 0x3b05, 0x309d, 0x38f8, 0x3be3, 0x2d5d, 0x399a, 0x36b9, 0x3924, 0x3936, 0x3a45, 0x3a8f, 0x3853, 0x38a9, 0x381b, 0x3a9a, 0x393e, 0x31df, 0x3855, 0x38da, 0x37c6, 0x3bd8, 0x34fb, 0x2e5f, 0x3450, 0x304e, 0x3990, 0x29e1, 0x373c, 0x39a5, 0x3a5e, 0x3356, 0x2c13, 0x34a0, 0x3185, 0x3a8a, 0x3672, 0x2ee4, 0x2dbc, 0x22ae, 0x3a88, 0x388c, 0x30ce, 0x384d, 0x3453, 0x3ad0, 0x2e7f, 0x367a, 0x34c5, 0x39d6, 0x35de, 0x39fc, 0x3aa8, 0x3667, 0x3bb9, 0x35e7, 0x38c7, 0x2c83, 0x35a3, 0x35d7, 0x1a7c, 0x393e, 0x3588, 0x39dd, 0x3af3, 0x3965, 0x365b, 0x3a7e, 0x38ed, 0x3990, 0x3786, 0x3b07, 0x350e, 0x38b7, 0x357f, 0x3bb6, -0x2de9, 0x2ef1, 0x2cc9, 0x38a5, 0x347b, 0x310a, 0x351d, 0x3a9b, 0x3a68, 0x2228, 0x35d3, 0x338d, 0x3a3a, 0x24ec, 0x3ad0, 0x385a, 0x1c64, 0x39f9, 0x335e, 0x348c, 0x211e, 0x37d4, 0x353b, 0x3290, 0x3b68, 0x2f75, 0x2ff5, 0x3579, 0x3967, 0x3b5a, 0x3982, 0x3950, 0x35e9, 0x3a85, 0x3be5, 0x3252, 0x359b, 0x3799, 0x38ec, 0x3a0e, 0x3a45, 0x2d8e, 0x389d, 0x34d6, 0x3726, 0x3320, 0x3acd, 0x3642, 0x2574, 0x314a, 0x32a5, 0x3898, 0x370a, 0x3941, 0x340a, 0x2e05, 0x28b8, 0x39ad, 0x392e, 0x3821, 0x38d7, 0x3b07, 0x3485, 0x34d1, 0x399c, 0x1844, 0x2c8f, 0x3964, 0x3b56, 0x2dde, 0x2ede, 0x317b, 0x3a44, 0x3901, 0x3844, 0x382e, 0x29e6, 0x35ad, 0x3913, 0x3430, 0x3604, 0x3a5f, 0x3080, 0x3628, 0x3383, 0x3b3d, 0x385a, 0x38e8, 0x3ade, 0x3af3, 0x3a56, 0x3889, 0x2cf5, 0x3a61, 0x3b6a, 0x3b38, -0x2e45, 0x3736, 0x3743, 0x3680, 0x328f, 0x3a88, 0x39bb, 0x36a0, 0x3957, 0x2f27, 0x3a33, 0x3a9e, 0x3a9e, 0x2e09, 0x3154, 0x37b7, 0x3807, 0x3937, 0x390b, 0x3041, 0x3758, 0x39cf, 0x2e66, 0x2bc5, 0x3461, 0x3897, 0x39fd, 0x3b92, 0x36e3, 0x3a20, 0x3a8d, 0x335b, 0x3be1, 0x383d, 0x38ab, 0x3665, 0x3588, 0x3a4b, 0x33d5, 0x341b, 0x3806, 0x38fd, 0x382e, 0x32c1, 0x38d9, 0x2ccb, 0x292d, 0x380f, 0x35a2, 0x3b6e, 0x34af, 0x3889, 0x3109, 0x3480, 0x34bf, 0x3a56, 0x3163, 0x33fa, 0x345a, 0x39bb, 0x3b6e, 0x3a80, 0x36f6, 0x33c8, 0x3b98, 0x3663, 0x3aaf, 0x3926, 0x3a2d, 0x3a11, 0x33ac, 0x37a0, 0x3986, 0x3374, 0x3667, 0x3482, 0x378a, 0x2a39, 0x3535, 0x34f3, 0x3783, 0x36a7, 0x3606, 0x3843, 0x3acb, 0x2dcc, 0x3961, 0x34ed, 0x3890, 0x38e5, 0x3a7c, 0x384c, 0x39bf, 0x3a6b, 0x34a0, 0x361b, -0x2e5e, 0x3650, 0x3417, 0x36e5, 0x3b4c, 0x3892, 0x38ba, 0x32f3, 0x3b80, 0x39ea, 0x3357, 0x3212, 0x3b42, 0x3622, 0x3c00, 0x34c0, 0x38e0, 0x360c, 0x36bc, 0x34b0, 0x3b53, 0x2587, 0x387e, 0x3966, 0x3800, 0x35e2, 0x3917, 0x3be4, 0x378f, 0x2d21, 0x3415, 0x2ea8, 0x34d0, 0x36ac, 0x3a51, 0x3ba5, 0x3b7e, 0x2d48, 0x39c1, 0x30d5, 0x3244, 0x3894, 0x3aaa, 0x3451, 0x3a9f, 0x2e40, 0x3832, 0x35f6, 0x3429, 0x253c, 0x2c2e, 0x3bd6, 0x3a5c, 0x3622, 0x3155, 0x3a50, 0x313f, 0x31dc, 0x3b9d, 0x2d67, 0x3914, 0x38f5, 0x3ab6, 0x3bd3, 0x3754, 0x3683, 0x32b0, 0x31dd, 0x3911, 0x37c2, 0x2b09, 0x33b7, 0x3b7c, 0x344a, 0x2a7c, 0x3350, 0x3792, 0x36ea, 0x3463, 0x3a87, 0x29be, 0x3a23, 0x390d, 0x3b10, 0x381d, 0x3227, 0x38f4, 0x39bc, 0x3a71, 0x375d, 0x349d, 0x271c, 0x3921, 0x2e0a, 0x3b08, 0x3ba3, -0x3a92, 0x3923, 0x3012, 0x3527, 0x2ba3, 0x3aa1, 0x3ba3, 0x349a, 0x3729, 0x393a, 0x2ea9, 0x398a, 0x38a5, 0x3ad5, 0x38e6, 0x3a7b, 0x3783, 0x3822, 0x371a, 0x3247, 0x3af0, 0x3ac9, 0x35f6, 0x39d5, 0x39c3, 0x39bc, 0x3a9e, 0x39a8, 0x3af5, 0x3a01, 0x39ab, 0x35f6, 0x392e, 0x3bca, 0x2f53, 0x3595, 0x34c6, 0x3a96, 0x396f, 0x3515, 0x39c5, 0x37b3, 0x37c4, 0x2f64, 0x37ed, 0x3013, 0x3939, 0x3be7, 0x3a5e, 0x3526, 0x3a32, 0x3a8c, 0x334e, 0x39d6, 0x3b45, 0x395d, 0x3500, 0x375f, 0x2498, 0x3ad9, 0x3a04, 0x3961, 0x3a1e, 0x38cb, 0x383d, 0x35c3, 0x37ec, 0x38ab, 0x3aca, 0x29aa, 0x3480, 0x374c, 0x35d1, 0x33cc, 0x387a, 0x3544, 0x367d, 0x3259, 0x306b, 0x39c9, 0x323b, 0x3a58, 0x3156, 0x353d, 0x323a, 0x2987, 0x31ff, 0x3998, 0x311c, 0x38d0, 0x3a03, 0x38cc, 0x35b5, 0x398b, 0x3a0c, 0x3a96, -0x3ab6, 0x3a1c, 0x3a48, 0x3974, 0x3815, 0x368a, 0x36d5, 0x37aa, 0x345b, 0x3bd3, 0x3b1f, 0x3167, 0x2ecf, 0x3a80, 0x3636, 0x3a8e, 0x39d3, 0x3a1a, 0x3087, 0x3823, 0x3b9c, 0x3969, 0x2fb9, 0x3bb8, 0x39c5, 0x3991, 0x3392, 0x38f2, 0x3939, 0x2c68, 0x3b0a, 0x383a, 0x3bd7, 0x3a74, 0x3956, 0x3465, 0x39f3, 0x3880, 0x39bc, 0x39c5, 0x35e4, 0x3738, 0x3856, 0x399b, 0x3bda, 0x3366, 0x31a0, 0x3868, 0x3aa3, 0x38bd, 0x305a, 0x3743, 0x3a85, 0x2336, 0x39eb, 0x2d06, 0x37df, 0x3852, 0x3b46, 0x302c, 0x3a1e, 0x3b46, 0x3068, 0x3bd6, 0x381d, 0x31f6, 0x3491, 0x3848, 0x3315, 0x38c7, 0x3600, 0x3b9d, 0x38b2, 0x3977, 0x388c, 0x3ac2, 0x37ee, 0x35c4, 0x3b45, 0x374a, 0x3355, 0x1dbb, 0x38ec, 0x3003, 0x3a97, 0x311f, 0x3749, 0x2b59, 0x3842, 0x34a9, 0x3561, 0x3b07, 0x3a4a, 0x292f, 0x3961, 0x3546, -0x35dd, 0x3966, 0x2c7d, 0x3833, 0x285f, 0x20f2, 0x3a12, 0x392b, 0x2bae, 0x2fa6, 0x3a36, 0x303c, 0x3303, 0x2bc6, 0x3b94, 0x3a0e, 0x3ae2, 0x3a3c, 0x315c, 0x37bb, 0x3452, 0x3267, 0x2731, 0x3985, 0x3bcf, 0x397e, 0x2fae, 0x28b1, 0x39cc, 0x3536, 0x37a1, 0x3aa3, 0x396b, 0x2c59, 0x3bbf, 0x303c, 0x3bcf, 0x3a8e, 0x3afc, 0x3ab1, 0x2943, 0x3a17, 0x3552, 0x2f57, 0x3353, 0x3512, 0x2e78, 0x3b53, 0x388e, 0x399c, 0x336e, 0x38d4, 0x3849, 0x32b1, 0x316a, 0x2877, 0x2feb, 0x35b9, 0x375d, 0x29fa, 0x3ad2, 0x3569, 0x3981, 0x3455, 0x3847, 0x3a81, 0x3514, 0x29d0, 0x3137, 0x39ba, 0x3b1a, 0x2dd4, 0x383f, 0x39f7, 0x37f6, 0x3964, 0x371c, 0x39e4, 0x3136, 0x35da, 0x3b2f, 0x3946, 0x36dd, 0x3801, 0x3927, 0x2614, 0x2ca7, 0x39ae, 0x3401, 0x3242, 0x3a91, 0x3a1d, 0x3790, 0x333f, 0x3bb9, 0x3a1d, -0x3be5, 0x39e1, 0x35f3, 0x38fd, 0x3726, 0x3946, 0x3baf, 0x3a2f, 0x15e0, 0x318b, 0x359c, 0x2fbf, 0x3060, 0x3a09, 0x35c9, 0x39e2, 0x317e, 0x25ec, 0x3546, 0x3254, 0x36e9, 0x374c, 0x35c0, 0x3787, 0x3b82, 0x3727, 0x34a8, 0x3820, 0x3aee, 0x3814, 0x33da, 0x357f, 0x2f56, 0x3231, 0x3ba0, 0x35e4, 0x3998, 0x3609, 0x3979, 0x3311, 0x33e8, 0x39bd, 0x39f0, 0x3a32, 0x31dc, 0x3aee, 0x310e, 0x3843, 0x38c1, 0x382a, 0x382f, 0x3b24, 0x335c, 0x383b, 0x24f4, 0x371c, 0x3162, 0x2dce, 0x3ae6, 0x2d1e, 0x3a20, 0x39e9, 0x39c5, 0x219a, 0x37d4, 0x34fe, 0x14f6, 0x2e13, 0x3949, 0x3b98, 0x3a42, 0x3aee, 0x298f, 0x3740, 0x28e0, 0x3854, 0x3925, 0x3951, 0x3426, 0x3b4a, 0x3043, 0x345d, 0x3aec, 0x3b89, 0x378c, 0x355a, 0x3287, 0x340c, 0x35fb, 0x2f7d, 0x3839, 0x383a, 0x3a66, 0x388c, 0x36b3, 0x3908, -0x3323, 0x35b2, 0x3823, 0x3ad3, 0x3b52, 0x3634, 0x3a70, 0x3b37, 0x2d59, 0x3893, 0x3978, 0x3515, 0x2733, 0x399b, 0x3a86, 0x3b9c, 0x3582, 0x38e0, 0x389d, 0x3b34, 0x2d41, 0x31d7, 0x2db9, 0x3474, 0x35f6, 0x38fa, 0x3296, 0x3a85, 0x3102, 0x3129, 0x38e1, 0x39d4, 0x36ec, 0x2fea, 0x3a44, 0x3393, 0x39e0, 0x3613, 0x3bc1, 0x3145, 0x23d7, 0x3a17, 0x3515, 0x3845, 0x38f7, 0x33ee, 0x3b6f, 0x38f9, 0x38c7, 0x3489, 0x352b, 0x3b74, 0x39ab, 0x32e2, 0x37be, 0x38e6, 0x34e1, 0x31a5, 0x3be8, 0x2b0f, 0x3b16, 0x3a43, 0x3ae7, 0x39a2, 0x36a2, 0x33a5, 0x3160, 0x33c8, 0x30de, 0x38d9, 0x33f6, 0x35b0, 0x2982, 0x38e6, 0x3ae7, 0x3bca, 0x3911, 0x397b, 0x3596, 0x3790, 0x38eb, 0x3aa2, 0x38f6, 0x381f, 0x398e, 0x343b, 0x39ef, 0x39a3, 0x35f2, 0x2c2c, 0x39e2, 0x3b7f, 0x3858, 0x3b83, 0x3b02, 0x33df, -0x379c, 0x3ae9, 0x340b, 0x368f, 0x3a50, 0x38a6, 0x3aa2, 0x3bd6, 0x3855, 0x3841, 0x3410, 0x348d, 0x3625, 0x38a0, 0x3bdc, 0x34e3, 0x38f6, 0x3274, 0x3a03, 0x3adc, 0x35df, 0x39f5, 0x38b4, 0x38cc, 0x384d, 0x394f, 0x3597, 0x3a9c, 0x3767, 0x3b65, 0x39f5, 0x3857, 0x38c2, 0x3b12, 0x3580, 0x32b0, 0x3595, 0x3723, 0x3b92, 0x347f, 0x3526, 0x377d, 0x35c3, 0x354b, 0x3651, 0x3ae9, 0x38c7, 0x3bc0, 0x30d2, 0x395a, 0x34f2, 0x370d, 0x3748, 0x35fb, 0x3401, 0x34e8, 0x3931, 0x3a34, 0x381e, 0x3886, 0x3afc, 0x3bbc, 0x3af0, 0x3a9c, 0x3a5b, 0x34ef, 0x3979, 0x3ab0, 0x31f2, 0x34f8, 0x1c09, 0x3a9c, 0x36a0, 0x3af7, 0x3b87, 0x3745, 0x39b8, 0x3582, 0x3be2, 0x3bd6, 0x373f, 0x3552, 0x31c1, 0x3a29, 0x2f37, 0x363b, 0x3a9d, 0x39ee, 0x3aa7, 0x3a03, 0x3551, 0x39ce, 0x3a95, 0x3894, 0x32d1, 0x36f2, -0x385b, 0x342c, 0x3643, 0x3be4, 0x3b88, 0x3b64, 0x3975, 0x3142, 0x3583, 0x2f10, 0x34bb, 0x3b4d, 0x3924, 0x2609, 0x3929, 0x274b, 0x3476, 0x3bfd, 0x3abd, 0x3874, 0x33cf, 0x3756, 0x3820, 0x31a3, 0x35dd, 0x39a3, 0x3359, 0x397e, 0x3a12, 0x3ad6, 0x3a25, 0x38ab, 0x392c, 0x3bca, 0x38a9, 0x2f91, 0x381c, 0x29fb, 0x390e, 0x34f7, 0x3a14, 0x39fa, 0x3104, 0x3488, 0x326e, 0x3593, 0x3b50, 0x2e3d, 0x3423, 0x3919, 0x38db, 0x308b, 0x3883, 0x3ba9, 0x38e2, 0x3b74, 0x2b9d, 0x303d, 0x35ef, 0x29a3, 0x364d, 0x2fb5, 0x3991, 0x3a6a, 0x3bf5, 0x391f, 0x373f, 0x3a0a, 0x3a6f, 0x3ad6, 0x35ba, 0x3889, 0x3982, 0x3b8b, 0x3a43, 0x3bfb, 0x3355, 0x3591, 0x39de, 0x34b8, 0x3b76, 0x2a30, 0x30cc, 0x33d3, 0x2f46, 0x380e, 0x3b6e, 0x3576, 0x388b, 0x3b42, 0x35de, 0x39ab, 0x32f3, 0x35dc, 0x3594, 0x3184, -0x3b0c, 0x3478, 0x3b70, 0x389e, 0x3a28, 0x3bf3, 0x3350, 0x35fc, 0x396f, 0x3a40, 0x3242, 0x3a86, 0x3bd1, 0x314b, 0x2e15, 0x394f, 0x391b, 0x3763, 0x31e4, 0x3908, 0x3b48, 0x39e5, 0x3aca, 0x3a5b, 0x3626, 0x37fa, 0x381c, 0x3867, 0x342c, 0x3842, 0x3b77, 0x3ad7, 0x39a8, 0x3867, 0x3b9c, 0x3938, 0x3969, 0x2f52, 0x3a11, 0x3982, 0x3963, 0x3873, 0x3278, 0x3193, 0x369e, 0x3848, 0x3a63, 0x399a, 0x3ba0, 0x39c1, 0x3987, 0x3595, 0x2993, 0x3517, 0x31f2, 0x35a9, 0x3628, 0x3a6b, 0x3bf2, 0x3a75, 0x3129, 0x3460, 0x38d0, 0x370e, 0x3a52, 0x381a, 0x3b57, 0x388c, 0x3a87, 0x2c5a, 0x3ac9, 0x3686, 0x2023, 0x2fcb, 0x2845, 0x36f2, 0x3ac6, 0x2f91, 0x2a3b, 0x37bc, 0x3865, 0x3b91, 0x3887, 0x3b8b, 0x2edc, 0x38e1, 0x3465, 0x348f, 0x3bfb, 0x393a, 0x3b42, 0x394e, 0x2f39, 0x364b, 0x37a7, 0x3b51, -0x3810, 0x35e7, 0x388f, 0x38fc, 0x3740, 0x322e, 0x2f12, 0x39d5, 0x3834, 0x366f, 0x2c74, 0x35da, 0x3901, 0x39c1, 0x39f1, 0x381a, 0xc05, 0x3541, 0x39d3, 0x326a, 0x3993, 0x3ba8, 0x3bc9, 0x3b2b, 0x390d, 0x3a4b, 0x38db, 0x39a7, 0x3043, 0x345e, 0x2e17, 0x2cd7, 0x38ba, 0x3a26, 0x3a7d, 0x385b, 0x3a40, 0x25b0, 0x3ba4, 0x3b75, 0x30f9, 0x3508, 0x3885, 0x375d, 0x3acf, 0x36fb, 0x334b, 0x3a92, 0x3bbd, 0x3b15, 0x392e, 0x3b14, 0x33b3, 0x3ac3, 0x39f8, 0x35ae, 0x391d, 0x3b24, 0x316a, 0x30e9, 0x3813, 0x3736, 0x3b34, 0x2db4, 0x395a, 0x37ac, 0x3a01, 0x3671, 0x37af, 0x368a, 0x2de1, 0x3a69, 0x3416, 0x3294, 0x344d, 0x393e, 0x399f, 0x1d48, 0x38db, 0x3b08, 0x3944, 0x3a99, 0x39d5, 0x35fb, 0x2828, 0x3a19, 0x38b3, 0x3209, 0x3660, 0x38fa, 0x3a01, 0x3ba5, 0x322e, 0x3048, 0x3bb1, 0x3be6, -0x3b6f, 0x327c, 0x3932, 0x3721, 0x39b5, 0x28b8, 0x3b6d, 0x3a9e, 0x393c, 0x35e6, 0x3b4d, 0x2515, 0x2921, 0x395a, 0x3762, 0x34c7, 0x38ed, 0x3b61, 0x35ab, 0x2d3c, 0x3132, 0x35ef, 0x37e1, 0x37cf, 0x383c, 0x3b5e, 0x3a9d, 0x39af, 0x362e, 0x3b02, 0x3a85, 0x3ad0, 0x3739, 0x38f9, 0x3a16, 0x30e5, 0x3b92, 0x39b6, 0x39c4, 0x3b4d, 0x30c6, 0x35c6, 0x3513, 0x2e7a, 0x32a9, 0x346a, 0x359a, 0x3ae2, 0x3a27, 0x3b87, 0x3934, 0x358e, 0x33cd, 0x37a7, 0x3bbb, 0x383f, 0x357d, 0x3714, 0x35c1, 0x3540, 0x35ff, 0x39a6, 0x3686, 0x39bd, 0x3906, 0x357b, 0x3b22, 0x3be6, 0x38e3, 0x3876, 0x3954, 0x2c83, 0x3acf, 0x3aef, 0x3a67, 0x3548, 0x38d1, 0x359f, 0x3b59, 0x3b61, 0x39c8, 0x392e, 0x39a6, 0x3a3a, 0x3ad5, 0x3831, 0x39ae, 0x3b0e, 0x3b00, 0x3acf, 0x30e1, 0x3751, 0x2f93, 0x39e5, 0x39c3, 0x3928, -0x2df5, 0x36e5, 0x2605, 0x3827, 0x3566, 0x38b3, 0x3345, 0x3869, 0x38e2, 0x31a5, 0x37cf, 0x3b01, 0x3add, 0x2e7e, 0x3573, 0x2f1a, 0x2d92, 0x3a72, 0x3821, 0x313b, 0x3970, 0x3943, 0x3af1, 0x3aeb, 0x37d8, 0x35c7, 0x38a8, 0x3abb, 0x3893, 0x33a0, 0x3a05, 0x3830, 0x37d5, 0x2708, 0x3685, 0x3907, 0x3a07, 0x39f9, 0x3889, 0x2fd1, 0x38c8, 0x3091, 0x3b6a, 0x3332, 0x35f0, 0x36f0, 0x35ce, 0x3b5e, 0x3927, 0x3bf3, 0x392e, 0x39e6, 0x3703, 0x38c6, 0x37db, 0x364c, 0x3984, 0x2bd1, 0x34b3, 0x3873, 0x332b, 0x38a5, 0x2b51, 0x3a1c, 0x3446, 0x2f6a, 0x3975, 0x2f99, 0x38f4, 0x3849, 0x35f2, 0x3734, 0x38da, 0x38b9, 0x39cb, 0x3a6d, 0x39ea, 0x3160, 0x2fde, 0x3acb, 0x2d2d, 0x325b, 0x3a86, 0x3b66, 0x3a07, 0x361c, 0x394a, 0x2b5d, 0x3a45, 0x2dfa, 0x3505, 0x3263, 0x39e5, 0x3655, 0x32de, 0x3295, -0x38c9, 0x2f7b, 0x2f9e, 0x2d42, 0x3b0c, 0x378c, 0x2dac, 0x22ef, 0x3603, 0x396c, 0x3460, 0x3a7a, 0x3b62, 0x3177, 0x3703, 0x2936, 0x39a0, 0x38e7, 0x3b0d, 0x331e, 0x34cb, 0x39f3, 0x3138, 0x3a4d, 0x35d5, 0x399f, 0x3229, 0x39d3, 0x385c, 0x28ea, 0x3895, 0x3653, 0x3561, 0x3927, 0x35b6, 0x34b7, 0x3983, 0x2d4f, 0x2ad7, 0x3562, 0x324b, 0x29e0, 0x3928, 0x3a3d, 0x3aa2, 0x3128, 0x357a, 0x3a20, 0x3b17, 0x2919, 0x3702, 0x35bd, 0x3578, 0x3a6c, 0x3a68, 0x38e2, 0x3888, 0x38cd, 0x36f9, 0x3164, 0x351b, 0x39c4, 0x219b, 0x301f, 0x31fb, 0x343d, 0x38d5, 0x3900, 0x1dad, 0x3a61, 0x385e, 0x385b, 0x388e, 0x38b1, 0x351e, 0x34dc, 0x35c8, 0x316e, 0x36b7, 0x3beb, 0x3646, 0x2d3d, 0x35ff, 0x33bb, 0x36bf, 0x3adf, 0x3a75, 0x3b1f, 0x3a07, 0x38f1, 0x390a, 0x2e57, 0x27c6, 0x3afa, 0x396a, 0x2d0d, -0x3173, 0x3b83, 0x3ace, 0x3631, 0x3aa6, 0x38b6, 0x37c5, 0x365e, 0x2f2a, 0x3528, 0x3be0, 0x3af3, 0x37e7, 0x3947, 0x292e, 0x3b1b, 0x3959, 0x3082, 0x279b, 0x3a83, 0x3052, 0x3b4e, 0x3948, 0x39e1, 0x3566, 0x38c3, 0x3738, 0x30ee, 0x2731, 0x2ce3, 0x39a0, 0x3b90, 0x36c8, 0x3980, 0x357c, 0x34cf, 0x3a92, 0x3ac1, 0x1fc8, 0x3b89, 0x399c, 0x380f, 0x366e, 0x3767, 0x3650, 0x399b, 0x3413, 0x357b, 0x3610, 0x3a32, 0x3b9e, 0x3ae2, 0x3a84, 0x399b, 0x3ad1, 0x38a6, 0x3a6e, 0x36d4, 0x3bcc, 0x3043, 0x30ad, 0x35c2, 0x3b07, 0x2a03, 0x3658, 0x39ba, 0x3bf3, 0x3b92, 0x38ad, 0x36dc, 0x398e, 0x35ed, 0x3409, 0x3b31, 0x36d5, 0x3221, 0x3b12, 0x3887, 0x38e0, 0x3550, 0x31fa, 0x2f61, 0x3bd0, 0x34b8, 0x3860, 0x30db, 0x3415, 0x3b42, 0x31cb, 0x39c3, 0x3125, 0x3b66, 0x2468, 0x3a27, 0x3b63, 0x3ae5, -0x3809, 0x37a7, 0x39a2, 0x35c1, 0x3baf, 0x3798, 0x3518, 0x3583, 0x3bfc, 0x3bab, 0x3ab0, 0x3822, 0x3589, 0x33b1, 0x33e7, 0x3899, 0x3b93, 0x36bd, 0x3a87, 0x343c, 0x39a1, 0x3a0a, 0x38c6, 0x3b47, 0x3b64, 0x2d7e, 0x3bfd, 0x2d2d, 0x3a8a, 0x306c, 0x3766, 0x340d, 0x38e7, 0x3617, 0x3bd3, 0x398c, 0x3819, 0x3171, 0x36e6, 0x391f, 0x30d4, 0x39d5, 0x31bb, 0x3833, 0x3012, 0x2db1, 0x3aab, 0x3903, 0x3749, 0x379e, 0x3089, 0x2d69, 0x251b, 0x3448, 0x3418, 0x3b4e, 0x37de, 0x38c6, 0x373b, 0x38aa, 0x3968, 0x3b36, 0x3bfe, 0x38c9, 0x3ada, 0x38ba, 0x354e, 0x3a6e, 0x373d, 0x380c, 0x374b, 0x34d2, 0x35fd, 0x3a5d, 0x3a8d, 0x3a14, 0x3abd, 0x346c, 0x3766, 0x3908, 0x3ad3, 0x3a52, 0x341b, 0x2ad8, 0x3abb, 0x3083, 0x2933, 0x3b56, 0x3a33, 0x3753, 0x3529, 0x3bfd, 0x34a1, 0x3229, 0x3be1, 0x3b71, -0x3a9e, 0x3764, 0x35e7, 0x3831, 0x398a, 0x3877, 0x3aec, 0x39f0, 0x3159, 0x389f, 0x38bc, 0x3878, 0x3bc7, 0x3a01, 0x2896, 0x39af, 0x3784, 0x3260, 0x38d9, 0x3bcf, 0x3bfa, 0x3bc3, 0x2b23, 0x387d, 0x2e5b, 0x35a6, 0x3468, 0x3933, 0x2783, 0x37e8, 0x3af2, 0x332e, 0x3b77, 0x3ac3, 0x3514, 0x3bcd, 0x3bd8, 0x372f, 0x3979, 0x3b30, 0x3993, 0x3888, 0x38d5, 0x3a18, 0x3be4, 0x2b5c, 0x2518, 0x3b55, 0x3bbc, 0x3ba0, 0x2f21, 0x33b6, 0x352c, 0x39b3, 0x3bc7, 0x3a59, 0x38ea, 0x3432, 0x3b9b, 0x3b74, 0x3baf, 0x34a2, 0x3457, 0x3593, 0x3967, 0x3879, 0x3b79, 0x3806, 0x30ca, 0x384c, 0x394c, 0x37a7, 0x21ce, 0x3bbc, 0x305c, 0x3b11, 0x3a1a, 0x3a64, 0x2e80, 0x27ac, 0x3635, 0x361d, 0x2d4c, 0x2264, 0x37ba, 0x165c, 0x2ec8, 0x386b, 0x1b60, 0x3992, 0x357f, 0x2b6b, 0x37da, 0x3942, 0x2d77, 0x2f25, -0x34e0, 0x3809, 0x395b, 0x33dd, 0x38af, 0x3546, 0x2f78, 0x3469, 0x3832, 0x34b7, 0x3839, 0x32c0, 0x3676, 0x3b1f, 0x3872, 0x317b, 0x3403, 0x3444, 0x3438, 0x39cb, 0x3102, 0x3a90, 0x381a, 0x2db5, 0x3b1f, 0x3a44, 0x3aff, 0x354f, 0x3578, 0x3921, 0x38b0, 0x301f, 0x2da3, 0x3062, 0x3596, 0x3a07, 0x382a, 0x37bd, 0x3634, 0x34b1, 0x31a5, 0x353f, 0x33ec, 0x3986, 0x37a7, 0x332d, 0x3874, 0x3046, 0x3b5b, 0x3bf8, 0x37a0, 0x3822, 0x36c4, 0x385c, 0x3868, 0x39ec, 0x3959, 0x39cc, 0x382e, 0x2505, 0x3471, 0x358c, 0x3905, 0x395b, 0x312b, 0x3706, 0x2eec, 0x3a2a, 0x3be9, 0x3a96, 0x2932, 0x3a84, 0x38b2, 0x3884, 0x3655, 0x341f, 0x30b6, 0x363a, 0x3a7d, 0x389b, 0x348c, 0x3b98, 0x38cc, 0x3699, 0x373b, 0x3ad9, 0x377b, 0x33b4, 0x8ef, 0x3a4c, 0x39a2, 0x3bbc, 0x3b01, 0x3a46, 0x3b56, 0x38db, -0x29ab, 0x29e8, 0x3830, 0x39d7, 0x38ff, 0x33a2, 0x2ed0, 0x38e9, 0x3bd2, 0x380b, 0x3940, 0x3b79, 0x3477, 0x36f4, 0x38b8, 0x382d, 0x3838, 0x37f7, 0x219f, 0x34ec, 0x3af5, 0x347d, 0x3a0e, 0x352e, 0x39f3, 0x39ae, 0x3624, 0x1a5a, 0x329c, 0x3a57, 0x254a, 0x361b, 0x3554, 0x3a17, 0x3888, 0x34c7, 0x3628, 0x3321, 0x39de, 0x34f1, 0x386f, 0x37ae, 0x3709, 0x3909, 0x3ae3, 0x3a0e, 0x3495, 0x3bb8, 0x363c, 0x3039, 0x37e4, 0x30ff, 0x164f, 0x37aa, 0x3b7d, 0x2c60, 0x3828, 0x36b8, 0x235d, 0x29b9, 0x3917, 0x24db, 0x3946, 0x2e75, 0x359c, 0x35c3, 0x3b91, 0x35b5, 0x341f, 0x3873, 0x343a, 0x326a, 0x215c, 0x34f3, 0x35a9, 0x2efa, 0x29dd, 0x3b37, 0x3594, 0x305f, 0x3b48, 0x3bc9, 0x3957, 0x3bac, 0x3638, 0x369e, 0x3a45, 0x3173, 0x3bad, 0x354c, 0x32d9, 0x38d2, 0x3b97, 0x3409, 0x3871, 0x3ac2, -0x3739, 0x2c5b, 0x3480, 0x3206, 0x2ede, 0x345e, 0x3806, 0x354c, 0x38ac, 0x3404, 0x35b5, 0x2250, 0x3957, 0x3831, 0x37c2, 0x331a, 0x36c9, 0x3b7c, 0x2a94, 0x3b00, 0x3722, 0x38c4, 0x35b9, 0x3b30, 0x3af4, 0x3758, 0x3290, 0x33a6, 0x31fe, 0x3937, 0x3b74, 0x3010, 0x3076, 0x344d, 0x3773, 0x22d7, 0x25f7, 0x2cde, 0x3999, 0x3859, 0x32b9, 0x3985, 0x3a7e, 0x39eb, 0x35f1, 0x3a36, 0x3735, 0x3337, 0x34da, 0x30ca, 0x3a16, 0x3523, 0x3802, 0x3a05, 0x3609, 0x310b, 0x3770, 0x389c, 0x2d46, 0x382e, 0x332f, 0x2d06, 0x39d5, 0x3b65, 0x3a48, 0x3b45, 0x2d13, 0x389d, 0x27e8, 0x34e9, 0x3a4d, 0x2802, 0x3903, 0x3ac4, 0x3bb7, 0x38ab, 0x3a80, 0x3725, 0x2f22, 0x358e, 0x3b17, 0x3a80, 0x39b0, 0x3bdd, 0x3aa6, 0x326d, 0x34d4, 0x2f73, 0x39c3, 0x297f, 0x210c, 0x2713, 0x3887, 0x3aec, 0x3a48, 0x3a58, -0x35dc, 0x2ea9, 0x3576, 0x3b80, 0x34c8, 0x3bfb, 0x3268, 0x336c, 0x3574, 0x3712, 0x349c, 0x3bb4, 0x3875, 0x3be8, 0x3b9f, 0x3436, 0x31e8, 0x3a22, 0x2d06, 0x3222, 0x3b99, 0x37ef, 0x3511, 0x3a6f, 0x36dc, 0x3b58, 0x353a, 0x3985, 0x3938, 0x3b64, 0x2753, 0x21b5, 0x2bb1, 0x3291, 0x3af9, 0x30eb, 0x3819, 0x376e, 0x357f, 0x2d58, 0x398d, 0x3966, 0x3a12, 0x32f5, 0x3b9e, 0x3bac, 0x38e8, 0x37bc, 0x3106, 0x3750, 0x39f4, 0x3bf3, 0x38d4, 0x3b41, 0x3b4e, 0x3722, 0x3536, 0x35b1, 0x3a85, 0x34f8, 0x3bcf, 0x351f, 0x3953, 0x39d4, 0x3abc, 0x3521, 0x389f, 0x2386, 0x350b, 0x3b1d, 0x35a3, 0x359c, 0x3607, 0x3b0a, 0x385b, 0x3927, 0x39f9, 0x3a58, 0x36c7, 0x3030, 0x3ba8, 0x348e, 0x2f3d, 0x3973, 0x3b3c, 0x3a02, 0x3abd, 0x3a2e, 0x28f3, 0x3b9b, 0x348e, 0x396b, 0x3963, 0x39dc, 0x3a38, 0x3b12, -0x3a7c, 0x378c, 0x3a31, 0x3068, 0x3790, 0x24a7, 0x39b5, 0x3629, 0x34a4, 0x3bd4, 0x357b, 0x3bc8, 0x356b, 0x3a00, 0x3776, 0x32ad, 0x3327, 0x2da5, 0x2f3a, 0x366c, 0x25f9, 0x34e3, 0x3b50, 0x25c1, 0x33c4, 0x3822, 0x34d7, 0x3bed, 0x3a05, 0x3bab, 0x37e9, 0x37fe, 0x3a3c, 0x380d, 0x369f, 0x3b86, 0x2460, 0x39aa, 0x38e7, 0x388b, 0x1e16, 0x2f0c, 0x39a6, 0x3a99, 0x39b7, 0x35b2, 0x3221, 0x3618, 0x3a08, 0x37fc, 0x3481, 0x3ba6, 0x3408, 0x3415, 0x3adf, 0x3b77, 0x19f6, 0x328c, 0x3830, 0x3996, 0x3afb, 0x3528, 0x37e6, 0x39e1, 0x380b, 0x35bc, 0x3b6c, 0x3a1f, 0x385b, 0x34c9, 0x3b7c, 0x35f5, 0x258c, 0x39ec, 0x30f8, 0x322d, 0x3b8a, 0x3159, 0x399f, 0x2f24, 0x346a, 0x3738, 0x39cb, 0x3949, 0x3a2e, 0x3b54, 0x3adf, 0x3b62, 0x3ab1, 0x316d, 0x3aa6, 0x2ec2, 0x38f8, 0x2b3b, 0x2861, 0x3026, -0x2a43, 0x3b6a, 0x3a73, 0x31d4, 0x352e, 0x3461, 0x345c, 0x34f2, 0x2c0e, 0x38b3, 0x2e79, 0x3ba2, 0x2c1e, 0x3314, 0x371a, 0x3973, 0x2f6f, 0x3a7b, 0x3031, 0x39f1, 0x3b78, 0x381b, 0x2d2b, 0x38a6, 0x3864, 0x3a6b, 0x3045, 0x3731, 0x2d60, 0x382b, 0x31e4, 0x3985, 0x3bce, 0x34fe, 0x39f0, 0x381d, 0x35d3, 0x38a2, 0x2eeb, 0x3278, 0x3ace, 0x344a, 0x37a5, 0x341b, 0x3a62, 0x3549, 0x365d, 0x3a82, 0x3842, 0x37de, 0x3b1f, 0x32d3, 0x3b8e, 0x3a44, 0x2cfd, 0x3885, 0x3b2e, 0x34b1, 0x3674, 0x37d8, 0x3bff, 0x3535, 0x3487, 0x2fbe, 0x3abe, 0x3266, 0x31ad, 0x340a, 0x3be2, 0x21a8, 0x3924, 0x39ea, 0x381b, 0x3351, 0x3aa6, 0x3903, 0x38b5, 0x3284, 0x3937, 0x3a34, 0x344a, 0x3a26, 0x312f, 0x39a8, 0x3b8d, 0x373e, 0x3b66, 0x2764, 0x386d, 0x20a8, 0x381c, 0x395e, 0x2ee0, 0x3820, 0x37f5, 0x3bc2, -0x3bd7, 0x37b6, 0x39dd, 0x3b50, 0x3621, 0x3726, 0x3484, 0x360f, 0x39fa, 0x3b62, 0x2318, 0x1a60, 0x35b8, 0x340b, 0x2d49, 0x35ec, 0x3783, 0x3b02, 0x3654, 0x3b4f, 0x337c, 0x3bff, 0x36aa, 0x34cc, 0x38cd, 0x3555, 0x39a0, 0x34da, 0x2840, 0x3897, 0x3bcc, 0x30ff, 0x347f, 0x3acf, 0x39ac, 0x2544, 0x352e, 0x36d2, 0x3643, 0x33f1, 0x3bd2, 0x30b1, 0x38f3, 0x3a47, 0x3863, 0x37e5, 0x2048, 0x388c, 0x2c07, 0x3abc, 0x342a, 0x3986, 0x38ee, 0x39ff, 0x3485, 0x3947, 0x386c, 0x39e0, 0x3a96, 0x3bdc, 0x3158, 0x3ba6, 0x28fc, 0x29dd, 0x3b4e, 0x3a74, 0x3834, 0x3b8d, 0x1c2f, 0x390f, 0x3009, 0x39db, 0x2dc1, 0x3802, 0x3bb2, 0x3428, 0x2dff, 0x3a33, 0x355f, 0x3122, 0x3152, 0x3615, 0x38d7, 0x38f6, 0x3624, 0x3ac4, 0x1527, 0x3a83, 0x2db8, 0x3847, 0x3afe, 0x3a7e, 0x307e, 0x3711, 0x3726, 0x3a68, -0x2b4b, 0x3b91, 0x360b, 0x3b18, 0x375e, 0x2be2, 0x3a8d, 0x2bbb, 0x2f24, 0x3271, 0x2e97, 0x3734, 0x3a56, 0x35d8, 0x355c, 0x1578, 0x33d1, 0x3b60, 0x2793, 0x350b, 0x34c6, 0x38d3, 0x387f, 0x3a3f, 0x3928, 0x3021, 0x384d, 0x36f8, 0x3413, 0x3be3, 0x3817, 0x2280, 0x36ef, 0x3795, 0x385b, 0x3be6, 0x323d, 0x3880, 0x35d7, 0x3201, 0x3329, 0x3a49, 0x36bf, 0x3585, 0x2df9, 0x3897, 0x338c, 0x313c, 0x343c, 0x3ab6, 0x3927, 0x3514, 0x3944, 0x3bfa, 0x347e, 0x32a5, 0x357f, 0x3b96, 0x375b, 0x38cc, 0x3bc9, 0x384c, 0x39ec, 0x35f4, 0x36a6, 0x3bf9, 0x2aa9, 0x3b18, 0x3172, 0x3bc9, 0x3b41, 0x2e94, 0x39cd, 0x368f, 0x3903, 0x2d54, 0x3a45, 0x3378, 0x3a00, 0x392f, 0x39f1, 0x38c5, 0x2b64, 0x390d, 0x3b77, 0x391d, 0x343c, 0x3627, 0x3826, 0x344a, 0x3a0a, 0x37cb, 0x3b06, 0x3b16, 0x3656, 0x3a47, -0x3be3, 0x35b8, 0x37af, 0x3765, 0x38e8, 0x3bf3, 0x344e, 0x39f7, 0x3320, 0x3590, 0x30b6, 0x395c, 0x3abf, 0x34fe, 0x359a, 0x3a55, 0x39fd, 0x3a41, 0x3a8c, 0x382b, 0x3741, 0x36bb, 0x387f, 0x358a, 0x36f9, 0x3bc8, 0x33f7, 0x34bd, 0x3460, 0x3aa3, 0x39dc, 0x31f7, 0x38e1, 0x3b21, 0x384d, 0x38bb, 0x38ce, 0x381d, 0x38d7, 0x349a, 0x2d43, 0x3251, 0x3917, 0x39aa, 0x3871, 0x3a59, 0x3a1c, 0x382c, 0x37c1, 0x3a9e, 0x2f8f, 0x32a5, 0x1583, 0x319d, 0x38ff, 0x393c, 0x38e8, 0x2da0, 0x396a, 0x3987, 0x3887, 0x339d, 0x360c, 0x37d5, 0x3ad6, 0x3986, 0x3559, 0x3a60, 0x392b, 0x2e25, 0x2878, 0x3184, 0x309b, 0x35c8, 0x38cf, 0x358b, 0x3804, 0x3943, 0x312d, 0x3a2a, 0x29ab, 0x3b0d, 0x3959, 0x33c5, 0x3bfe, 0x33f0, 0x3a98, 0x29f1, 0x39ee, 0x37da, 0x3a1c, 0x3896, 0x387b, 0x3a07, 0x2e45, 0x3932, -0x3556, 0x38f6, 0x3826, 0x3299, 0x2e6c, 0x3957, 0x3687, 0x35e5, 0x34ea, 0x34ab, 0x2b4e, 0x3a50, 0x365f, 0x39d6, 0x3968, 0x3ad5, 0x3966, 0x305e, 0x2ef6, 0x3471, 0x343d, 0x3bab, 0x2e4b, 0x3853, 0x3a96, 0x3be5, 0x2a10, 0x3790, 0x34c6, 0x3aa6, 0x3864, 0x3b07, 0x31b7, 0x3b38, 0x25f8, 0x2f15, 0x34dc, 0x3bbd, 0x379f, 0x363d, 0x3b1a, 0x3862, 0x37c5, 0x32a9, 0x3590, 0x3074, 0x31de, 0x30f6, 0x37ed, 0x3722, 0x34fd, 0x3a1f, 0x3580, 0x37c5, 0x3b84, 0x3be4, 0x357c, 0x36ed, 0x30d5, 0x38cd, 0x343e, 0x3831, 0x397f, 0x36db, 0x383a, 0x24e2, 0x3a9d, 0x39dd, 0x36f7, 0x360a, 0x2be4, 0x2dca, 0x321c, 0x361b, 0x378e, 0xe22, 0x2486, 0x3550, 0x3900, 0x34a9, 0x3b2f, 0x3829, 0x1f15, 0x3906, 0x3220, 0x25b1, 0x38b1, 0x398d, 0x382e, 0x298d, 0x39a5, 0x3bb2, 0x31fd, 0x3964, 0x36f6, 0x3835, -0x3907, 0x3b4f, 0x3b17, 0x390d, 0x2b5c, 0x3533, 0x3a28, 0x345e, 0x3954, 0x386e, 0x3b0f, 0x321c, 0x3bce, 0x326d, 0x3a39, 0x3a70, 0x38b1, 0x38c6, 0x3aa4, 0x3aa1, 0x38b6, 0x3a65, 0x3b54, 0x3230, 0x397a, 0x3b63, 0x3869, 0x3003, 0x368e, 0x3a48, 0x3a19, 0x38be, 0x3bb0, 0x2e6e, 0x3ad2, 0x2a53, 0x35d9, 0x39d2, 0x2dd0, 0x32b2, 0x3180, 0x229f, 0x3bcc, 0x38d6, 0x3b74, 0x3bd1, 0x37f7, 0x380d, 0x3928, 0x3b54, 0x35ff, 0x3457, 0x3470, 0x3155, 0x3a41, 0x342c, 0x3af8, 0x2de0, 0x3608, 0x36ab, 0x3bdd, 0x35e3, 0x2aa9, 0x37d0, 0x3a4c, 0x35dc, 0x2e36, 0x37a3, 0x39b3, 0x2e4b, 0x3b11, 0x323a, 0x38de, 0x3ba3, 0x38ff, 0x3823, 0x310d, 0x3b05, 0x39f8, 0x3abf, 0x3bcf, 0x36c4, 0x3ae2, 0x36cd, 0x3a8f, 0x3a91, 0x368f, 0x37aa, 0x3969, 0x39aa, 0x3bff, 0x3422, 0x37c5, 0x35f0, 0x3b46, 0x3a21, -0x384a, 0x3984, 0x3349, 0x2014, 0x38ea, 0x28c4, 0x3520, 0x3a22, 0x3bec, 0x32e8, 0x275e, 0x3b5a, 0x3a2d, 0x3a3f, 0x3690, 0x321c, 0x3b62, 0x392f, 0x3a2c, 0x36b7, 0x38a2, 0x3205, 0x3520, 0x3b6f, 0x3378, 0x3911, 0x3833, 0x3991, 0x380b, 0x3a4a, 0x38a6, 0x3865, 0x3aa6, 0x38e7, 0x397a, 0x38fa, 0x3b10, 0x3440, 0x39a2, 0x3566, 0x365d, 0x307a, 0x2d18, 0x3978, 0x389c, 0x39f5, 0x38df, 0x29c3, 0x3a62, 0x3b75, 0x39b5, 0x2015, 0x307b, 0x39e1, 0x288f, 0x3936, 0x31ee, 0x3be2, 0x35e1, 0x391f, 0x345d, 0x39ff, 0x390c, 0x32cb, 0x38ce, 0x3441, 0x3a3a, 0x3713, 0x2fce, 0x321b, 0x2deb, 0x34e3, 0x3ade, 0x2a6e, 0x3bff, 0x3882, 0x3bec, 0x3ad9, 0x3abc, 0x3bb4, 0x36d8, 0x3617, 0x3015, 0x3a62, 0x3115, 0x384d, 0x3a19, 0x35cf, 0x3468, 0x300f, 0x371e, 0x34ba, 0x378b, 0x37fb, 0x3af8, 0x2fad, -0x2bed, 0x3854, 0x38ab, 0x3879, 0x2ff5, 0x3808, 0x38d5, 0x3ba2, 0x390c, 0x3ba1, 0x3343, 0x373d, 0x34b8, 0x37b5, 0x3653, 0x2db9, 0x3433, 0x318b, 0x39c9, 0x333d, 0x2ca0, 0x3b89, 0x3002, 0x34f2, 0x3969, 0x3a48, 0x1df8, 0x2421, 0x3b9d, 0x3b5a, 0x398a, 0x394b, 0x2fea, 0x296d, 0x3b39, 0x3696, 0x3b4d, 0x340d, 0x3b7e, 0x39ba, 0x2f44, 0x37af, 0x38e4, 0x3a86, 0x3b2d, 0x3954, 0x2bed, 0x3506, 0x2501, 0x3bc9, 0x3a58, 0x3abb, 0x384d, 0x33d6, 0x34d0, 0x3468, 0x3bbf, 0x3a17, 0x3534, 0x3b31, 0x3a7a, 0x3644, 0x36e3, 0x3a50, 0x2284, 0x3b1e, 0x37ed, 0x3ba9, 0x3919, 0x39d3, 0x3235, 0x3bc0, 0x3938, 0x32ea, 0x32fc, 0x3bc0, 0x3a91, 0x3af2, 0x3410, 0x38b5, 0x2ca8, 0x3097, 0x2b7c, 0x3528, 0x3b69, 0x3602, 0x3637, 0x383d, 0x34a3, 0x3ac4, 0x2c6b, 0x302e, 0x3b38, 0x34a3, 0x3519, 0x3674, -0x2f15, 0x2cb7, 0x3a46, 0x3663, 0x3b63, 0x38b4, 0x3b34, 0x3ba3, 0x2d14, 0x3422, 0x3701, 0x38e1, 0x39fe, 0x3112, 0x38dd, 0x357c, 0x2e9f, 0x35d1, 0x36ec, 0x306e, 0x38ea, 0x36c8, 0x34c7, 0x38e4, 0x3aee, 0x3ab5, 0x355e, 0x395c, 0x242b, 0x3197, 0x3832, 0x3987, 0x3682, 0x38f9, 0x3aaa, 0x209e, 0x35d4, 0x36a0, 0x3779, 0x39ff, 0x33e5, 0x3138, 0x35a6, 0x362f, 0x3b4e, 0x3417, 0x27c8, 0x39db, 0x3004, 0x3b6b, 0x30bd, 0x31e3, 0x3988, 0x32f4, 0x3ac7, 0x305a, 0x248b, 0x2dae, 0x21bf, 0x34c6, 0x2993, 0x3b6b, 0x3530, 0x3acc, 0x3563, 0x2e8c, 0x3492, 0x3954, 0x388b, 0x3b35, 0x3880, 0x38c4, 0x34c6, 0x3bb8, 0x360d, 0x28f6, 0x390a, 0x39e5, 0x2f09, 0x38e5, 0x34ca, 0x3634, 0x38b2, 0x39b7, 0x2d73, 0x396d, 0x3490, 0x39fd, 0x38dd, 0x39b9, 0x3adb, 0x326e, 0x3afc, 0x3bf5, 0x3bfc, 0x2b6a, -0x3440, 0x36eb, 0x32c4, 0x3be7, 0x3215, 0x3a10, 0x2dd5, 0x3999, 0x3bcd, 0x39a9, 0x351a, 0x36ad, 0x3732, 0x28a4, 0x205e, 0x30a4, 0x3a0b, 0x399e, 0x356a, 0x2c98, 0x3912, 0x3471, 0x3b45, 0x38df, 0x3b91, 0x303f, 0x3bf6, 0x374a, 0x3813, 0x3739, 0x30a9, 0x3155, 0x385b, 0x3952, 0x3229, 0x3639, 0x39c8, 0x3827, 0x333c, 0x3978, 0x38be, 0x3a90, 0x35b5, 0x3655, 0x33be, 0x39df, 0x3b24, 0x392a, 0x2bda, 0x3895, 0x3ac0, 0x352c, 0x2c77, 0x3893, 0x3ac3, 0x3305, 0x3699, 0x2a79, 0x3bf9, 0x3821, 0x39fa, 0x38b3, 0x3428, 0x3564, 0x3073, 0x37ba, 0x2877, 0x3b5f, 0x2c54, 0x35da, 0x3a33, 0x37d7, 0x396b, 0x3408, 0x36a3, 0x2d1b, 0x3860, 0x3bf5, 0x36cc, 0x3b43, 0x3846, 0x34ce, 0x3b1d, 0x34ca, 0x351d, 0x323d, 0x37ce, 0x3ac1, 0x35e5, 0x3b80, 0x3b7e, 0x3a78, 0x38e5, 0x3106, 0x3892, 0x35a5, -0x38f9, 0x3ac7, 0x3886, 0x3a8d, 0x3a5c, 0x39f0, 0x2c1e, 0x3ad7, 0x37bf, 0x366d, 0x3715, 0x290c, 0x320b, 0x3639, 0x3442, 0x33eb, 0x3602, 0x2b7b, 0x344e, 0x3906, 0x3780, 0x372b, 0x39f5, 0x39d7, 0x3742, 0x35d3, 0x3672, 0x2d25, 0x397c, 0x3953, 0x3970, 0x37d2, 0x38f2, 0x3790, 0x30c7, 0x3417, 0x31e2, 0x3b53, 0x3587, 0x3ad8, 0x3875, 0x3908, 0x2c27, 0x33b7, 0x3ad5, 0x3641, 0x3bcb, 0x3b70, 0x3b87, 0x346d, 0x397f, 0x25be, 0x3137, 0x3946, 0x36c4, 0x3b67, 0x3a20, 0x36e7, 0x31b1, 0x3948, 0x3bf5, 0x2b26, 0x34fe, 0x3522, 0x30e8, 0x2630, 0x37ff, 0x368f, 0x389e, 0x2d92, 0x37b4, 0x39b1, 0x3532, 0x39cf, 0x39ae, 0x3a2f, 0x3862, 0x3656, 0x39cb, 0x3a84, 0x37e3, 0x3b06, 0x3901, 0x2ccb, 0x2b4e, 0x348b, 0x3abf, 0x3a1f, 0x2e1e, 0x2d75, 0x39e5, 0x3143, 0x39ff, 0x38c2, 0x3ba0, 0x3a64, -0x3969, 0x2ffd, 0x39fd, 0x399d, 0x3863, 0x3896, 0x3ab1, 0x3815, 0x3bd8, 0x34fb, 0x3419, 0x3bf7, 0x38cc, 0x3659, 0x2bbc, 0x3bb0, 0x3abb, 0x3554, 0x394a, 0x3ad8, 0x2ea5, 0x3bf6, 0x37bb, 0x2363, 0x3aef, 0x36dc, 0x2dfb, 0x3721, 0x3558, 0x390c, 0x36df, 0x2ff3, 0x3b70, 0x266e, 0x3b66, 0x3957, 0x2884, 0x34e4, 0x3589, 0x3864, 0x3a4b, 0x30d7, 0x3611, 0x34ec, 0x36d2, 0x37f9, 0x3abe, 0x2be6, 0x39ed, 0x336a, 0x3aba, 0x396c, 0x3838, 0x23cb, 0x3bbb, 0x3944, 0x2f70, 0x2d41, 0x3b28, 0x3b81, 0x305c, 0x3a88, 0x38a6, 0x3829, 0x33c9, 0x34e0, 0x3a41, 0x346a, 0x3b1b, 0x378f, 0x3a1a, 0x395f, 0x3ba3, 0x3072, 0x3918, 0x302d, 0x3949, 0x3a56, 0x37ac, 0x3807, 0x3b7f, 0x3461, 0x3a65, 0x349a, 0x3b40, 0x2c4d, 0x39d3, 0x3b6e, 0x2f82, 0x3797, 0x3bdb, 0x3b73, 0x30ee, 0x3b5a, 0x2fa1, 0x3be4, -0x3b02, 0x38ec, 0x3b86, 0x3569, 0x3bef, 0x3029, 0x3368, 0x3ad9, 0x2e8e, 0x3bd8, 0x34cb, 0x2db1, 0x3aa2, 0x38da, 0x2ca5, 0x3ad4, 0x3842, 0x3a34, 0x3777, 0x3a3d, 0x3b37, 0x3bc7, 0x32ef, 0x3bd1, 0x3bd9, 0x34b4, 0x301f, 0x38af, 0x235f, 0x3595, 0x3a7d, 0x3a9a, 0x3b4b, 0x2801, 0x318e, 0x2ce5, 0x39ab, 0x39d5, 0x3986, 0x3823, 0x2b17, 0x395e, 0x35e3, 0x3740, 0x39e9, 0x3882, 0x384c, 0x36b7, 0x3426, 0x396b, 0x3b1d, 0x2c8e, 0x3bb6, 0x30a8, 0x37b3, 0x35f6, 0x3a37, 0x367f, 0x3877, 0x342f, 0x3939, 0x317c, 0x38b9, 0x3b47, 0x3437, 0x3533, 0x3ba2, 0x3b25, 0x3b39, 0x36d3, 0x34b1, 0x39b0, 0x30f6, 0x349a, 0x1e90, 0x3a7f, 0x3559, 0x37ed, 0x3aa9, 0x360f, 0x3445, 0x3256, 0x3925, 0x3974, 0x3897, 0x3ab0, 0x3410, 0x36d2, 0x367d, 0x2f29, 0x3917, 0x34d4, 0x3996, 0x3450, 0x3486, 0x3b67, -0x2c33, 0x3407, 0x3708, 0x321b, 0x39aa, 0x388f, 0x3427, 0x39c1, 0x3990, 0x3a24, 0x3970, 0x3bb4, 0x34be, 0x366e, 0x3bfc, 0x3748, 0x3bcc, 0x2d09, 0x394d, 0x398c, 0x3b19, 0x3855, 0x3954, 0x3268, 0x32ae, 0x3a02, 0x39e1, 0x3122, 0x3a60, 0x3b17, 0x3be2, 0x3b90, 0x36a0, 0x3962, 0x3b1d, 0x3871, 0x3368, 0x3114, 0x355d, 0x39ea, 0x3a34, 0x35dd, 0x3976, 0x3b29, 0x239b, 0x3576, 0x2bf6, 0x35f5, 0x314f, 0x3af9, 0x3535, 0x3a04, 0x3b55, 0x3a1c, 0x1f50, 0x348a, 0x3ab2, 0x39d1, 0x3bad, 0x255b, 0x344f, 0x24a5, 0x29c8, 0x38aa, 0x3a5f, 0x34b3, 0x395e, 0x35b9, 0x3a6b, 0x3ad1, 0x357f, 0x38c1, 0x37c8, 0x3b16, 0x31cb, 0x3464, 0x3a8b, 0x39ce, 0x3592, 0x3a6c, 0x39a6, 0x303b, 0x34eb, 0x3019, 0x3a0a, 0x3996, 0x3a65, 0x3bb8, 0x3804, 0x2a64, 0x3481, 0x3452, 0x39e7, 0x3be7, 0x34e4, 0x39ae, -0x3a52, 0x3a35, 0x3365, 0x35c6, 0x1e02, 0x2e5d, 0x399f, 0x375a, 0x3b3f, 0x3a1d, 0x34a7, 0x37fd, 0x34f5, 0x3a0f, 0x2909, 0x2ece, 0x350b, 0x38e1, 0x3a4e, 0x2c7f, 0x384d, 0x3aab, 0x2fc3, 0x3852, 0x3473, 0x3936, 0x359c, 0x3750, 0x3602, 0x36c7, 0x3815, 0x3790, 0x3980, 0x3544, 0x39b9, 0x3bcd, 0x3c00, 0x3560, 0x3aaa, 0x3b5a, 0x3301, 0x2c5a, 0x3a33, 0x2ccf, 0x3a7e, 0x364c, 0x393c, 0x34a1, 0x2da5, 0x372d, 0x350b, 0x3977, 0x37f4, 0x37d6, 0x3536, 0x3861, 0x360a, 0x3abb, 0x3871, 0x389e, 0x383e, 0x3b3e, 0x2744, 0x33d3, 0x3b94, 0x3028, 0x3bb7, 0x3736, 0x2da7, 0x2b10, 0x3a43, 0x345c, 0x38ac, 0x3574, 0x3689, 0x350d, 0x3bb1, 0x3acc, 0x38eb, 0x345f, 0x39f8, 0x325c, 0x36d3, 0x30a4, 0x3b49, 0x2b46, 0x3692, 0x3a37, 0x3788, 0x358d, 0x391b, 0x3872, 0x3632, 0x3ae4, 0x3b05, 0x35e4, -0x39ac, 0x34fc, 0x37e4, 0x3b1b, 0x380e, 0x2d0a, 0x38e3, 0x394b, 0x2c45, 0x3bcf, 0x3b0f, 0x38a0, 0x3456, 0x3668, 0x38ce, 0x3992, 0x38c0, 0x35fa, 0x320a, 0x38d9, 0x3bb9, 0x3334, 0x396b, 0x398f, 0x3854, 0x3bbf, 0x34c2, 0x2ae6, 0x3808, 0x3625, 0x29bb, 0x3aec, 0x246c, 0x3573, 0x3ae7, 0x3879, 0x3bdf, 0x2c64, 0x33f4, 0x3a63, 0x39c0, 0x3a35, 0x38f8, 0x38c6, 0x3b30, 0x3a3b, 0x2ec2, 0x32da, 0x316d, 0x2136, 0x3be5, 0x332b, 0x36c6, 0x38db, 0x3058, 0x2d9e, 0x37f9, 0x3733, 0x3ba2, 0x1d40, 0x339d, 0x2d02, 0x39e3, 0x3952, 0x380f, 0x3a19, 0x3795, 0x3799, 0x3547, 0x3b2a, 0x37c2, 0x3958, 0x39d1, 0x3303, 0x3612, 0x3aa8, 0x3ac2, 0x38f3, 0x2d4a, 0x37e8, 0x37e4, 0x39c1, 0x3bab, 0x36da, 0x3809, 0x2fe2, 0x3bd9, 0x3328, 0x397b, 0x3456, 0x324e, 0x34c7, 0x37d2, 0x3017, 0x3a40, 0x2c48, -0x39cc, 0x2c1f, 0x3a56, 0x3a9b, 0x3987, 0x2d9c, 0x38db, 0x39c4, 0x3a54, 0x373c, 0x367c, 0x3b9d, 0x38af, 0x3649, 0x38bc, 0x382e, 0x2f5f, 0x34b9, 0x2d83, 0x3720, 0x3b84, 0x39f7, 0x38b1, 0x3600, 0x3ba5, 0x3880, 0x39d6, 0x33af, 0x3bcd, 0x3bc0, 0x38aa, 0x277a, 0x3548, 0x2f9b, 0x3521, 0x3a8d, 0x3622, 0x2fd5, 0x35ca, 0x3405, 0x3399, 0x3428, 0x3ac0, 0x34e7, 0x3866, 0x3454, 0x3631, 0x2247, 0x34a1, 0x398b, 0x388d, 0x39cb, 0x3461, 0x3937, 0x351e, 0x3b71, 0x36a4, 0x3a61, 0x3ac2, 0x3b05, 0x39b4, 0x3b1c, 0x3bdf, 0x3835, 0x3398, 0x3931, 0x38c3, 0x3922, 0x292f, 0x39a7, 0x3688, 0x3817, 0x32d1, 0x37e9, 0x382b, 0x355c, 0x39a1, 0x38cc, 0x36ee, 0x35c6, 0x395f, 0x2c4a, 0x39db, 0x29f5, 0x3886, 0x3b23, 0x38db, 0x3bc0, 0x345a, 0x39da, 0x3ac1, 0x3b5f, 0x3ae9, 0x368f, 0x397e, 0x3b89, -0x3805, 0x3adf, 0x3610, 0x3a37, 0x3947, 0x3618, 0x31d9, 0x3b3a, 0x3a13, 0x376f, 0x3141, 0x3b63, 0x39ce, 0x3ad7, 0x28dc, 0x340b, 0x30e4, 0x35e0, 0x354f, 0x387c, 0x37fa, 0x3455, 0x38b9, 0x3726, 0x2d54, 0x3338, 0x343a, 0x3a7c, 0x24e3, 0x3892, 0x3a8e, 0x3a8f, 0x37a8, 0x39e6, 0x398a, 0x3b42, 0x3360, 0x3a57, 0x38e5, 0x3afb, 0x3719, 0x36cf, 0x387c, 0x3a4e, 0x2edd, 0x3a36, 0x25b5, 0x3135, 0x346b, 0x3b0e, 0x2f3a, 0x2ee6, 0x384b, 0x3aab, 0x3b0b, 0x34e7, 0x30ea, 0x34e8, 0x38ef, 0x3899, 0x387a, 0x3786, 0x2456, 0x2ccb, 0x3af0, 0x3699, 0x35d2, 0x379d, 0x39bd, 0x36f8, 0x27a8, 0x397a, 0x2511, 0x35a2, 0x3a21, 0x3848, 0x27c8, 0x20df, 0x3a83, 0x3bb3, 0x2044, 0x38ec, 0x3095, 0x39cf, 0x2f28, 0x3bd6, 0x3939, 0x360c, 0x2d7b, 0x389c, 0x3585, 0x3bcc, 0x11d9, 0x3a41, 0x3591, 0x3813, -0x38ae, 0x3998, 0x3a8d, 0x31c7, 0x3af7, 0x3392, 0x3586, 0x3881, 0x3a64, 0x3b82, 0x3a29, 0x3497, 0x3b46, 0x3083, 0x3523, 0x3685, 0x3bb9, 0x3575, 0x317b, 0x38da, 0x3b2a, 0x38cc, 0x3764, 0x3103, 0x396e, 0x3bad, 0x35e5, 0x3a46, 0x3b72, 0x37d0, 0x3359, 0x3b8e, 0x3845, 0x2fc1, 0x2b03, 0x3837, 0x3186, 0x366f, 0x185a, 0x2ceb, 0x36be, 0x390a, 0x3513, 0x31d2, 0x357a, 0x3769, 0x392e, 0x39cb, 0x31a1, 0x3197, 0x3283, 0x39f2, 0x37d5, 0x2d92, 0x3599, 0x31f7, 0x30d1, 0x3b0b, 0x39b9, 0x3434, 0x324f, 0x3627, 0x321a, 0x30b3, 0x39f5, 0x387d, 0x32e6, 0x3a6c, 0x3597, 0x34ad, 0x2fd5, 0x3a5e, 0x2cbd, 0x34c2, 0x3a9c, 0x369e, 0x3192, 0x321c, 0x2600, 0x37af, 0x3841, 0x3a09, 0x3348, 0x309c, 0x3396, 0x1439, 0x34de, 0x3978, 0x3938, 0x3600, 0x28e3, 0x2d7e, 0x3296, 0x36ac, 0x35d4, 0x265a, -0x318c, 0x383d, 0x3955, 0x3473, 0x3ad5, 0x3949, 0x3923, 0x2f75, 0x31e1, 0x36ba, 0x3b86, 0x393c, 0x3563, 0x38a8, 0x37ee, 0x378a, 0x38d6, 0x38e6, 0x3922, 0x2c66, 0x33fc, 0x3875, 0x388d, 0x3b8b, 0x295c, 0x3ac3, 0x3432, 0x2d94, 0x37f3, 0x2a0b, 0x38c1, 0x3bbb, 0x3735, 0x3b36, 0x3a8b, 0x3291, 0x3908, 0x39d7, 0x375a, 0x2f3a, 0x330d, 0x398d, 0x3890, 0x3bf0, 0x38ba, 0x3ac0, 0x21f8, 0x3b00, 0x396c, 0x34d9, 0x3409, 0x3463, 0x3187, 0x3522, 0x2bb8, 0x358a, 0x30e2, 0x33bd, 0x38db, 0x36f9, 0x2f32, 0x3a39, 0x3884, 0x3be5, 0x3879, 0x3126, 0x3878, 0x3775, 0x397e, 0x3a5f, 0x3974, 0x3a58, 0x3ada, 0x3b0a, 0x3917, 0x3b63, 0x3176, 0x384b, 0x3a52, 0x3b01, 0x3ace, 0x3b86, 0x336a, 0x3647, 0x3877, 0x37b3, 0x2a41, 0x2db4, 0x189d, 0x39e4, 0x3470, 0x2d16, 0x2c98, 0x3a47, 0x3495, 0x38fd, -0x3bae, 0x322f, 0x39ff, 0x3075, 0x20be, 0x3583, 0x3b80, 0x39b5, 0x34a9, 0x3a4b, 0x362a, 0x3a70, 0x3964, 0x3925, 0x37ec, 0x3b19, 0x30e9, 0x38a7, 0x3688, 0x386d, 0x3a48, 0x2faa, 0x3b5f, 0x3693, 0x367a, 0x374c, 0x3b97, 0x3beb, 0x36ce, 0x37fc, 0x38fe, 0x39c9, 0x38d5, 0x25d5, 0x36e3, 0x3a77, 0x3987, 0x3bad, 0x3a48, 0x3871, 0x318d, 0x371f, 0x3614, 0x3a6e, 0x3662, 0x3bae, 0x3a41, 0x2973, 0x3aa6, 0x29d1, 0x3910, 0x3bca, 0x34d4, 0x24ea, 0x3611, 0x37c5, 0x32cc, 0x3a93, 0x3a4c, 0x3b10, 0x3790, 0x3181, 0x346f, 0x39b8, 0x3720, 0x3a7e, 0x39c7, 0x2d80, 0x324f, 0x3bf8, 0x373f, 0x3039, 0x3872, 0x2ad3, 0x2b33, 0x3803, 0x39d1, 0x38c2, 0x2ce6, 0x3943, 0x375f, 0x37ca, 0x37a5, 0x3a00, 0x20f2, 0x3449, 0x2fc9, 0x39bb, 0x3775, 0x364c, 0x3926, 0x39ae, 0x3b18, 0x38ad, 0x3803, 0x3032, -0x2d61, 0x322b, 0x383d, 0x3a27, 0x3437, 0x290e, 0x3314, 0x3222, 0x3862, 0x3712, 0x310c, 0x3984, 0x3b97, 0x35b6, 0x39dd, 0x305e, 0x3986, 0x3a78, 0x2e12, 0x3091, 0x3ae9, 0x3b2a, 0x3887, 0x3a31, 0x2fd3, 0x381c, 0x3082, 0x3934, 0x37a5, 0x3b6a, 0x35a3, 0x320e, 0x39f1, 0x2ad6, 0x3295, 0x388a, 0x3baa, 0x372c, 0x3345, 0x3985, 0x3b40, 0x2caa, 0x3264, 0x30ad, 0x3965, 0x3bcd, 0x3830, 0x3921, 0x3ae3, 0x3bdd, 0x3b55, 0x3804, 0x38c9, 0x3430, 0x3995, 0x3b93, 0x37b7, 0x398e, 0x348e, 0x3a2b, 0x3ad6, 0x336c, 0x35c2, 0x3a01, 0x3284, 0x3a0f, 0x306c, 0x37e3, 0x3836, 0x3aea, 0x3490, 0x30bd, 0x3bb3, 0x3495, 0x3b7a, 0x3908, 0x3905, 0x34ff, 0x3a18, 0x2c6d, 0x31f6, 0x393b, 0x2b1c, 0x3b05, 0x3367, 0x383c, 0x3a5c, 0x34d2, 0x37dd, 0x364e, 0x38a6, 0x30ac, 0x36ab, 0x3272, 0x3a96, 0x34e8, -0x3705, 0x2f61, 0x3879, 0x3ae0, 0x2bec, 0x3a46, 0x39fc, 0x3b64, 0x3964, 0x390a, 0x3827, 0x30c6, 0x38c4, 0x3897, 0x3855, 0x38cf, 0x3074, 0x39fe, 0x3513, 0x38b8, 0x3a90, 0x3506, 0x3a0b, 0x39bf, 0x3ba3, 0x35b1, 0x3942, 0x30dc, 0x3a64, 0x3624, 0x39bd, 0x3725, 0x1c9a, 0x34cb, 0x335a, 0x3b3b, 0x3329, 0x2bda, 0x3368, 0x3b70, 0x3096, 0x3754, 0x2fd4, 0x35de, 0x2d13, 0x3618, 0x3025, 0x3684, 0x35b2, 0x3732, 0x384a, 0x2dbe, 0x317b, 0x3a1e, 0x388c, 0x3729, 0x393b, 0x377d, 0x3be1, 0x3a7b, 0x2776, 0x38c5, 0x3afb, 0x3334, 0x33d8, 0x3b7e, 0x369a, 0x39be, 0x3aa4, 0x3afb, 0x3a6c, 0x38c3, 0x3a6a, 0x3911, 0x2a60, 0x3543, 0x3249, 0x3592, 0x2bd4, 0x3a76, 0x3ab9, 0x38a3, 0x399a, 0x3b60, 0x3a47, 0x31ec, 0x385b, 0x3677, 0x3909, 0x3915, 0x30fb, 0x3ae8, 0x3a23, 0x38e7, 0x2364, 0x38f0, -0x3bb5, 0x31e2, 0x2bb9, 0x3443, 0x3631, 0x392e, 0x389f, 0x3447, 0x3ba3, 0x3a47, 0x3673, 0x3ab7, 0x3acf, 0x3871, 0x3770, 0x3865, 0x3139, 0x2830, 0x3b65, 0x38ab, 0x35d1, 0x38c0, 0x3684, 0x2fa5, 0x36ba, 0x38cb, 0x3a9d, 0x34b8, 0x3b1a, 0x3bcb, 0x3830, 0x3ab6, 0x2eec, 0x3832, 0x3b33, 0x3678, 0x38a2, 0x31ff, 0x3a7d, 0x3bd3, 0x34e8, 0x3819, 0x392f, 0x3704, 0x3b01, 0x25fd, 0x3729, 0x3557, 0x3bc3, 0x2e36, 0x3323, 0x3aed, 0x357a, 0x3b4b, 0x3412, 0x3637, 0x3b92, 0x3360, 0x39c2, 0x3776, 0x32a8, 0x3896, 0x2f5b, 0x328a, 0x31d9, 0x3bb4, 0x3ba2, 0x3a2c, 0x3a12, 0x305a, 0x31f9, 0x3523, 0x32b6, 0x3822, 0x2624, 0x3491, 0x3811, 0x3238, 0x3acb, 0x3a6f, 0x3662, 0x38b9, 0x3b68, 0x3a24, 0x35fb, 0x3be2, 0x37d9, 0x347b, 0x33b2, 0x3a36, 0x3816, 0x39cf, 0x377e, 0x2cee, 0x300a, 0x330d, -0x359c, 0x3826, 0x2baa, 0x3b80, 0x3b04, 0x380d, 0x3a4e, 0x2f7c, 0x3667, 0x3be5, 0x3b0a, 0x380a, 0x360d, 0x3be3, 0x3b83, 0x39c0, 0x391b, 0x285a, 0x3b4b, 0x38cb, 0x3a85, 0x3aeb, 0x3853, 0x355f, 0x3ab5, 0x33be, 0x38ff, 0x382f, 0x3be6, 0x3916, 0x36ff, 0x3a3e, 0x3b88, 0x3812, 0x3687, 0x2c26, 0x3921, 0x394b, 0x2e6f, 0x3aa9, 0x3b77, 0x3848, 0x3b3e, 0x38b4, 0x3811, 0x3659, 0x31d5, 0x3977, 0x3b06, 0x39b4, 0x34bf, 0x31cc, 0x3b30, 0x3a6e, 0x3712, 0x3b52, 0x3b7a, 0x37bd, 0x3484, 0x3bdd, 0x343d, 0x3bb5, 0x3952, 0x2f41, 0x3a12, 0x3b3e, 0x27fe, 0x39d2, 0x39f4, 0x2ca1, 0x3485, 0x36ba, 0x3156, 0x3905, 0x3ba8, 0x39cd, 0x3b64, 0x3ba5, 0x3c00, 0x3ae8, 0x3452, 0x3a39, 0x3861, 0x3b8e, 0x37b1, 0x3bcd, 0x350e, 0x379d, 0x3b83, 0x34cb, 0x3205, 0x39fc, 0x3669, 0x3508, 0x2a1c, 0x39f9, -0x3876, 0x3602, 0x2b8f, 0x36be, 0x3885, 0x2caa, 0x3532, 0x31a8, 0x3956, 0x3139, 0x3709, 0x2fce, 0x3987, 0x3ab4, 0x3406, 0x3727, 0x32dd, 0x3ac9, 0x356b, 0x30c9, 0x2cbb, 0x3552, 0x2c69, 0x39ce, 0x3ad5, 0x3753, 0x290e, 0x36c4, 0x3a7c, 0x3b32, 0x2e36, 0x37db, 0x38b0, 0x3912, 0x34f7, 0x228b, 0x391f, 0x2fbd, 0x3850, 0x3a5e, 0x3a5b, 0x3b82, 0x3a6e, 0x349c, 0x38ce, 0x3bcb, 0x3b4f, 0x31e8, 0x38bd, 0x34ad, 0x3451, 0x3318, 0x34d5, 0x388f, 0x39cf, 0x3844, 0x38d4, 0x3421, 0x38fa, 0x269e, 0x293c, 0x34f0, 0x3438, 0x372c, 0x34b0, 0x36d5, 0x2aa6, 0x3805, 0x3821, 0x31db, 0x39fc, 0x3aa9, 0x26e4, 0x34b9, 0x3215, 0x214a, 0x39e6, 0x3278, 0x39b1, 0x2e97, 0x34e4, 0x3ae7, 0x3bb6, 0x3b79, 0x388d, 0x3b2d, 0x3642, 0x32fe, 0x3b36, 0x39b3, 0x3957, 0x2d0f, 0x34e9, 0x3aef, 0x381d, 0x3b22, -0x2fcf, 0x38e8, 0x3648, 0x2d35, 0x3773, 0x3936, 0x38f7, 0x242a, 0x3bef, 0x3bfa, 0x389a, 0x34e9, 0x328b, 0x3392, 0x3753, 0x3a4c, 0x3ada, 0x2937, 0x38c5, 0x3a6a, 0x2fae, 0x2d27, 0x349e, 0x3be1, 0x34fe, 0x3604, 0x3a69, 0x3b92, 0x384b, 0x387b, 0x28ae, 0x347e, 0x3b9f, 0x3a73, 0x384d, 0x3a08, 0x3961, 0x35a6, 0x38fe, 0x36cc, 0x3962, 0x3456, 0x3ae6, 0x2782, 0x38f8, 0x3bc1, 0x3639, 0x301e, 0x38cf, 0x3873, 0x32d4, 0x3a2c, 0x3aba, 0x3a42, 0x204d, 0x37ae, 0x3adb, 0x3b1a, 0x29ed, 0x30ba, 0x381f, 0x36c0, 0x3602, 0x2dde, 0x3735, 0x3701, 0x3bae, 0x3645, 0x3412, 0x3601, 0x37d5, 0x3aee, 0x39b3, 0x3a06, 0x3ac6, 0x3822, 0x363e, 0x3af8, 0x32f9, 0x39c9, 0x2c2d, 0x3672, 0x29bf, 0x3a06, 0x3875, 0x3758, 0x35cc, 0x3b92, 0x3a44, 0x35ac, 0x3b23, 0x2c6f, 0x3aa4, 0x3676, 0x3be5, 0x3137, -0x38fb, 0x371e, 0x38ad, 0x39cf, 0x347c, 0x3a24, 0x3887, 0x3811, 0x396e, 0x39d1, 0x33cc, 0x3bb5, 0x34e3, 0x39dd, 0x35c5, 0x38be, 0x37cf, 0x372a, 0x3ada, 0x3acd, 0x332c, 0x38c5, 0x35fe, 0x2e0c, 0x388e, 0x3480, 0x3bac, 0x39ad, 0x3770, 0x3aec, 0x3ba5, 0x38eb, 0x3b10, 0x33fd, 0x26db, 0x319c, 0x3aa4, 0x3895, 0x379b, 0x349c, 0x3ab3, 0x3840, 0x3b70, 0x3b4e, 0x2e46, 0x3aff, 0x2f7f, 0x3732, 0x3991, 0x346c, 0x39ff, 0x2be5, 0x36cb, 0x3bb1, 0x35d4, 0x3883, 0x3ba4, 0x3362, 0x3866, 0x394c, 0x38c4, 0x3b6f, 0x378d, 0x2bdf, 0x3443, 0x3959, 0x30ae, 0x3a18, 0x2472, 0x2f6a, 0x3111, 0x3a6d, 0x394e, 0x35c4, 0x3834, 0x3bc5, 0x3afc, 0x3291, 0x34b3, 0x3863, 0x3778, 0x3a6c, 0x3903, 0x2d65, 0x372e, 0x2dfb, 0x32ff, 0x3586, 0x34d2, 0x2d32, 0x3a7f, 0x3002, 0x1d54, 0x34a5, 0x3b4b, 0x3455, -0x3975, 0x27ae, 0x37e0, 0x34c3, 0x31f6, 0x3896, 0x3993, 0x29df, 0x31c1, 0x2e25, 0x2cae, 0x3889, 0x3826, 0x33cd, 0x3bc4, 0x2400, 0x38a7, 0x313d, 0x3826, 0x3670, 0x3922, 0x25bf, 0x390e, 0x3b99, 0x358a, 0x344d, 0x3926, 0x3b4d, 0x239f, 0x3576, 0x3576, 0x356b, 0x3b40, 0x2ebc, 0x34ff, 0x2e6c, 0x3817, 0x35bf, 0x35fc, 0x285e, 0x3b5d, 0x3908, 0x3848, 0x3441, 0x321f, 0x28a5, 0x3a73, 0x342f, 0x37db, 0x39ff, 0x3ac1, 0x3409, 0x3808, 0x34aa, 0x3aee, 0x3590, 0x2ea7, 0x2db9, 0x3b2f, 0x3845, 0x3a0d, 0x34d7, 0x3902, 0x3b44, 0x37b4, 0x3737, 0x3174, 0x394a, 0x3769, 0x3b0a, 0x370f, 0x31a6, 0x3b3d, 0x3a37, 0x3bc7, 0x2d68, 0x363a, 0x31cc, 0x3289, 0x3983, 0x3825, 0x3bf4, 0x34b9, 0x37fe, 0x2de5, 0x3975, 0x3ac9, 0x3083, 0x2c4d, 0x37a2, 0x3544, 0x36ac, 0x387c, 0x30a6, 0x321c, 0x37cc, -0x3a9e, 0x3310, 0x3bf9, 0x36c9, 0x3845, 0x3877, 0x3b5c, 0x3b20, 0x392f, 0x398c, 0x3b42, 0x2c1e, 0x3229, 0x395f, 0x3749, 0x377f, 0x3390, 0x3a80, 0x35b4, 0x2ed5, 0x3795, 0x3067, 0x3998, 0x3a51, 0x3b44, 0x3a52, 0x397d, 0x37fc, 0x298f, 0x2d3d, 0x344b, 0x363e, 0x39bd, 0x3590, 0x3b40, 0x37f3, 0x2d81, 0x3295, 0x35ff, 0x3b02, 0x37f2, 0x37e0, 0x1de3, 0x375e, 0x2fd9, 0x3271, 0x3548, 0x363e, 0x39bb, 0x3817, 0x327a, 0x2bb1, 0x3bbf, 0x3bf3, 0x38e9, 0x39be, 0x392b, 0x2f02, 0x34c5, 0x39c3, 0x38ab, 0x393b, 0x1e1d, 0x3bc3, 0x3972, 0x3be2, 0x3391, 0x3a3f, 0x3b68, 0x33a1, 0x384a, 0x3503, 0x3353, 0x343d, 0x3ac3, 0x2e04, 0x2f98, 0x3020, 0x38f3, 0x3814, 0x3a21, 0x3b92, 0x3083, 0x35fe, 0x3993, 0x32cb, 0x3b67, 0x2f42, 0x3070, 0x32a5, 0x2d98, 0x3b98, 0x31b4, 0x306f, 0x2dc2, 0x3ad5, -0x38d9, 0x38e4, 0x31e3, 0x38d7, 0x3b05, 0x3645, 0x388a, 0x3964, 0x3ab3, 0x39d3, 0x35f4, 0x2777, 0x34e4, 0x3874, 0x3bf6, 0x3b51, 0x3b2e, 0x3887, 0x3bf3, 0x3b3a, 0x348d, 0x35f3, 0x3a72, 0x3bd9, 0x31ec, 0x2d30, 0x34e5, 0x36c2, 0x3907, 0x33da, 0x2e75, 0x2fa8, 0x2fbf, 0x342e, 0x385d, 0x3421, 0x3897, 0x3841, 0x195c, 0x322b, 0x315d, 0x3325, 0x306d, 0x394b, 0x2f4e, 0x3896, 0x3a65, 0x3bf9, 0x30dd, 0x3957, 0x39a5, 0x2f7f, 0x3a29, 0x38c9, 0x35d6, 0x3248, 0x371d, 0x3412, 0x3660, 0x3609, 0x3944, 0x3b17, 0x3af3, 0x3b89, 0x39da, 0x3764, 0x344d, 0x3462, 0x3907, 0x388a, 0x38f0, 0x2960, 0x393b, 0x32f0, 0x3956, 0x31d3, 0x3328, 0x33fd, 0x3256, 0x2913, 0x3665, 0x397f, 0x36ad, 0x31db, 0x3aa5, 0x39db, 0x329b, 0x38f0, 0x32a5, 0x3051, 0x3855, 0x3a9c, 0x3870, 0x3a27, 0x3b93, 0x3942, -0x34e3, 0x37d4, 0x36b0, 0x384f, 0x2eef, 0x2e05, 0x35bc, 0x3bee, 0x34c7, 0x374f, 0x3811, 0x39c4, 0x2de0, 0x3bda, 0x3700, 0x2dc6, 0x349f, 0x29cf, 0x3b8b, 0x39b9, 0x2e31, 0x39f9, 0x3815, 0x3076, 0x38cc, 0x39c1, 0x398c, 0x3a20, 0x3865, 0x34d3, 0x3ba8, 0x3b16, 0x2057, 0x248a, 0x3859, 0x2e3f, 0x30e1, 0x3842, 0x3627, 0x383d, 0x3bb8, 0x34c8, 0x3ad0, 0x3b23, 0x388b, 0x3014, 0x3235, 0x357c, 0x3ba7, 0x3977, 0x3a32, 0x3aba, 0x30f5, 0x31d2, 0x3857, 0x393a, 0x3894, 0x351a, 0x3805, 0x35ee, 0x3967, 0x3862, 0x2a1b, 0x3afc, 0x3a4a, 0x38a0, 0x2f0d, 0x38d3, 0x393c, 0x3a13, 0x3973, 0x3831, 0x3a43, 0x3865, 0x3b80, 0x395a, 0x3275, 0x3874, 0x3735, 0x399c, 0x395e, 0x3abb, 0x2fd8, 0x381a, 0x3834, 0x2ae7, 0x3b2f, 0x39f3, 0x38be, 0x3ade, 0x351f, 0x3900, 0x34e5, 0x389a, 0x31d6, 0x3be4, -0x394f, 0x3a3d, 0x3b26, 0x3a2f, 0x399e, 0x2e0a, 0x3bc9, 0x38d2, 0x3920, 0x343d, 0x3a0b, 0x2c78, 0x38aa, 0x3b54, 0x3639, 0x37b3, 0x377b, 0x3b67, 0x3836, 0x2d52, 0x3b65, 0x38fb, 0x3836, 0x32cf, 0x3a40, 0x367e, 0x3a47, 0x3b47, 0x2d4d, 0x36fc, 0x398a, 0x3b7c, 0x3290, 0x3b4f, 0x3bf6, 0x25de, 0x3937, 0x3798, 0x3b0f, 0x3a95, 0x3bbc, 0x3beb, 0x34cf, 0x269a, 0x3b63, 0x3543, 0x366f, 0x344f, 0x361b, 0x3518, 0x35fb, 0x39aa, 0x3922, 0x3969, 0x3024, 0x2965, 0x2f2d, 0x2e6c, 0x385e, 0x3ab9, 0x34af, 0x3aec, 0x3af1, 0x348b, 0x2f86, 0x3bda, 0x3888, 0x3909, 0x3ba0, 0x3743, 0x3b40, 0x3306, 0x3999, 0x36c0, 0x35f8, 0x3531, 0x3457, 0x397a, 0x3a86, 0x37b8, 0x3bf2, 0x3bb3, 0x378e, 0x3bc7, 0x38f8, 0x3515, 0x3be1, 0x26dd, 0x28e4, 0x3a19, 0x3a28, 0x289c, 0x38ed, 0x3a77, 0x32b0, 0x392e, -0x2fcb, 0x3b43, 0x357f, 0x3987, 0x3056, 0x39dc, 0x3bc7, 0x34c0, 0x3a41, 0x3b4a, 0x3317, 0x2230, 0x3b8c, 0x363d, 0x25bf, 0x3b25, 0x39e3, 0x39d5, 0x37bd, 0x3a52, 0x3a14, 0x1aec, 0x3756, 0x353a, 0x3826, 0x331e, 0x34f7, 0x3690, 0x3973, 0x3269, 0x2c1c, 0x1bea, 0x32da, 0x2d21, 0x346d, 0x351f, 0x2df0, 0x3be0, 0x3bee, 0x3bb2, 0x3b6f, 0x3596, 0x38a2, 0x3408, 0x2281, 0x3864, 0x3516, 0x3b24, 0x3a8d, 0x3a63, 0x3806, 0x36e1, 0x3b6b, 0x3656, 0x3b8f, 0x31d3, 0x3a70, 0x39f8, 0x3953, 0x31eb, 0x3a05, 0x3a58, 0x2f81, 0x395b, 0x3721, 0x3353, 0x35db, 0x2d72, 0x3786, 0x3ab5, 0x3b4b, 0x3bd0, 0x3607, 0x35b4, 0x3a79, 0x32e2, 0x3299, 0x36a2, 0x381c, 0x2fb4, 0x2b3f, 0x3a01, 0x390c, 0x29d1, 0x2b63, 0x3a4b, 0x3309, 0x34f5, 0x3b7b, 0x348d, 0x3a7e, 0x30ca, 0x3269, 0x363a, 0x35a4, 0x3735, -0x36c4, 0x396c, 0x377a, 0x2fac, 0x3bba, 0x3511, 0x38fd, 0x3be0, 0x392d, 0x3864, 0x3bef, 0x3ae7, 0x2cd2, 0x37e5, 0x31c9, 0x332d, 0x3be0, 0x326a, 0x309a, 0x387e, 0x39f2, 0x3302, 0x39ee, 0x3956, 0x3b30, 0x3829, 0x2894, 0x368f, 0x361d, 0x35cd, 0x3b8c, 0x3677, 0x3a95, 0x3a41, 0x382f, 0x3457, 0x3194, 0x31bc, 0x3abd, 0x392a, 0x387b, 0x3912, 0x388a, 0x3051, 0x3a9b, 0x2fc4, 0x3468, 0x33f7, 0x20fe, 0x3489, 0x1d98, 0x39f4, 0x2f82, 0x2c37, 0x391e, 0x37ef, 0x3bb0, 0x3538, 0x1e8b, 0x3985, 0x3805, 0x3823, 0x32eb, 0x36e7, 0x3569, 0x387d, 0x30f2, 0x38d2, 0x39b5, 0x3544, 0x3009, 0x377c, 0x3a65, 0x342a, 0x2cc6, 0x3983, 0x2720, 0x2760, 0x3443, 0x3856, 0x3949, 0x37b5, 0x3944, 0x33e1, 0x320c, 0x3a83, 0x39be, 0x36f2, 0x3bf3, 0x384d, 0x35dd, 0x3150, 0x36ee, 0x2f4b, 0x3bd4, 0x2816, -0x3bb4, 0x3590, 0x3bf3, 0x38dd, 0x3472, 0x37f9, 0x38ec, 0x25b3, 0x3aac, 0x394d, 0x2e48, 0x387c, 0x39ed, 0x350a, 0x36e1, 0x3ad8, 0x3580, 0x3a08, 0x38d7, 0x390f, 0x370e, 0x30ed, 0x2fb2, 0x37f2, 0x35a8, 0x38bb, 0x389a, 0x3960, 0x35e1, 0x35d1, 0x3799, 0x3356, 0x375c, 0x3889, 0x38e7, 0x385e, 0x30f1, 0x3032, 0x3006, 0x3356, 0x36b1, 0x3af5, 0x342c, 0x3a9f, 0x386d, 0x3a8d, 0x2670, 0x3ba5, 0x3907, 0x39cb, 0x389b, 0x2914, 0x2db1, 0x2f6f, 0x3aa3, 0x346a, 0x3716, 0x303d, 0x3991, 0x3a21, 0x3b53, 0x3589, 0x3a6b, 0x34f7, 0x2d99, 0x380b, 0x392f, 0x36d9, 0x2e31, 0x30a2, 0x3569, 0x2657, 0x36dd, 0x306d, 0x36b5, 0x3ac4, 0x3a7a, 0x36f7, 0x38d6, 0x3b02, 0x355e, 0x3a19, 0x3bc4, 0x365c, 0x3b77, 0x3660, 0x3bc9, 0x380a, 0x3673, 0x3a4a, 0x3b19, 0x3843, 0x328c, 0x1a13, 0x3bd6, 0x3be2, -0x388d, 0x30c3, 0x3998, 0x389e, 0x3354, 0x3174, 0x3922, 0x3970, 0x2962, 0x3bc2, 0x3b1e, 0x3bd7, 0x2d84, 0x3573, 0x3846, 0x3703, 0x31ec, 0x3a5a, 0x3459, 0x2674, 0x291f, 0x3b76, 0x364f, 0x316f, 0x3a52, 0x3866, 0x34de, 0x33fc, 0x37fc, 0x3a20, 0x3ac2, 0x3893, 0x3208, 0x38d0, 0x3b1c, 0x39cd, 0x36f6, 0x301f, 0x3965, 0x3971, 0x3afa, 0x34d9, 0x2e34, 0x35a3, 0x390d, 0x2e83, 0x3b5a, 0x3acb, 0x377e, 0x2416, 0x38b8, 0x3a2e, 0x3a04, 0x3062, 0x2ef1, 0x3584, 0x2afb, 0x382a, 0x3a74, 0x37da, 0x3730, 0x32a6, 0x3866, 0x389e, 0x3850, 0x3551, 0x3939, 0x3a0e, 0x2deb, 0x3b97, 0x38e9, 0x39b6, 0x35b5, 0x3999, 0x38fe, 0x1918, 0x326d, 0x3477, 0x34e5, 0x3855, 0x38f8, 0x3307, 0x385d, 0x3b17, 0x36d8, 0x3020, 0x3a66, 0x3bf9, 0x3b17, 0x28cf, 0x3abb, 0x38b3, 0x3bc0, 0x31e4, 0x30d8, 0x3090, -0x393f, 0x350a, 0x2171, 0x31dd, 0x3aa3, 0x3962, 0x2a30, 0x3a0c, 0x3983, 0x3474, 0x38a4, 0x30fc, 0x348a, 0x3afd, 0x3ab0, 0x2fca, 0x3bb3, 0x3be9, 0x3984, 0x3a8d, 0x3119, 0x3b78, 0x3bd6, 0x2ef6, 0x31ef, 0x27c9, 0x39be, 0x32fb, 0x2ce0, 0x368b, 0x3612, 0x32b6, 0x2d58, 0x3787, 0x3811, 0x3745, 0x3b86, 0x32f4, 0x3941, 0x3936, 0x2ab3, 0x39cd, 0x3851, 0x395d, 0x355e, 0x383e, 0x380a, 0x3b5d, 0x34d8, 0x3292, 0x3124, 0x31af, 0x3942, 0x2d54, 0x3b54, 0x3b1b, 0x3bbd, 0x3507, 0x324e, 0x3364, 0x2514, 0x3af6, 0x3236, 0x361c, 0x3721, 0x39b4, 0x3b86, 0x3907, 0x3316, 0x2c3b, 0x3bf4, 0x3abb, 0x38b8, 0x38e5, 0x38e4, 0x3941, 0x318e, 0x3563, 0x318a, 0x3953, 0x328a, 0x2ed0, 0x3782, 0x38b3, 0x3632, 0x35f0, 0x3a31, 0x3112, 0x3b49, 0x3b8e, 0x31f8, 0x3a70, 0x3bf1, 0x375e, 0x381c, 0x3791, -0x38f7, 0x2f6a, 0x3b74, 0x3198, 0x3815, 0x3184, 0x39cc, 0x37c1, 0x3b16, 0x39dd, 0x3690, 0x36ee, 0x3ba5, 0x383d, 0x3bee, 0x37f9, 0x3617, 0x399a, 0x3597, 0x3703, 0x3281, 0x3047, 0x35b6, 0x3835, 0x3708, 0x3634, 0x3965, 0x39b8, 0x3a00, 0x3996, 0x2bd0, 0x2ced, 0x36de, 0x35e6, 0x3b4d, 0x3888, 0x3bc5, 0x290f, 0x3baf, 0x388e, 0x3721, 0x3896, 0x3565, 0x33f9, 0x312b, 0x37c8, 0x3889, 0x376b, 0x3bb6, 0x375e, 0x35bf, 0x2f6b, 0x39f6, 0x34ba, 0x3936, 0x3969, 0x39de, 0x3ad4, 0x39eb, 0x3a5c, 0x33e3, 0x3367, 0x3297, 0x3bea, 0x3bcf, 0x3806, 0x39b7, 0x3b63, 0x37d2, 0x385b, 0x3a88, 0x3a6a, 0x3447, 0x385b, 0x3078, 0x347b, 0x3790, 0x32c5, 0x30f3, 0x33d2, 0x3864, 0x35a7, 0x359b, 0x32c2, 0x3bf7, 0x379d, 0x39ed, 0x3964, 0x367e, 0x2f3e, 0x3b0a, 0x3a32, 0x3b2b, 0x287e, 0x2ee6, 0x3ba2 +uint16_t y_inp_2D [32][32] = { +0x3150, 0x2dc1, 0x3033, 0x31f5, 0x3bb6, 0x3bff, 0x39f9, 0x3662, 0x3720, 0x351d, 0x384b, 0x3093, 0x3b9d, 0x35ad, 0x3695, 0x3466, 0x2300, 0x3445, 0x33ae, 0x3586, 0x38a3, 0x3bdb, 0x33a2, 0x379b, 0x3a0e, 0x38b0, 0x39ba, 0x379b, 0x39d3, 0x3a51, 0x3b30, 0x3794, +0x3b76, 0x3042, 0x38cc, 0x2dfc, 0x3b1a, 0x37fb, 0x38f7, 0x3824, 0x386f, 0x38c7, 0x36ee, 0x3a9c, 0x38d3, 0x2c67, 0x3a80, 0x2f30, 0x3328, 0x3721, 0x3790, 0x34e5, 0x3a6c, 0x3643, 0x3934, 0x3034, 0x38d4, 0x362e, 0x3b4b, 0x3408, 0x30c2, 0x370e, 0x3b31, 0x3b16, +0x3b6b, 0x39d4, 0x339c, 0x381e, 0x313e, 0x3671, 0x3ae2, 0x3479, 0x3940, 0x342d, 0x3925, 0x370a, 0x35d8, 0x2dad, 0x3888, 0x24b9, 0x375d, 0x34bd, 0x3243, 0x2ebb, 0x3970, 0x3a21, 0x3a07, 0x3877, 0x3888, 0x3569, 0x372d, 0x2ac1, 0x331e, 0x384d, 0x3996, 0x34a4, +0x35c1, 0x33a9, 0x21ed, 0x3a42, 0x388d, 0x34e4, 0x33c3, 0x34f9, 0x3a7b, 0x33fb, 0x2cdd, 0x3b0e, 0x333b, 0x3973, 0x34fc, 0x3771, 0x32ea, 0x2de4, 0x31a8, 0x3946, 0x3657, 0x3a4e, 0x36f6, 0x2829, 0x3ba2, 0x3bdc, 0x3bb3, 0x306c, 0x398d, 0x3a1f, 0x3991, 0x3846, +0x3547, 0x3292, 0x2e85, 0x31ed, 0x3979, 0x3a90, 0x28a4, 0x3bed, 0x36d8, 0x340e, 0x3b6a, 0x3ab6, 0x3824, 0x382b, 0x3ac3, 0x3811, 0x36d7, 0x3519, 0x3a92, 0x3a42, 0x29d1, 0x383a, 0x3a9b, 0x300e, 0x2cd3, 0x39cd, 0x3874, 0x3a07, 0x2eb1, 0x3b86, 0x3ad8, 0x3a5d, +0x3712, 0x284a, 0x38c1, 0x3bec, 0x39c0, 0x32cd, 0x3ad8, 0x3bce, 0x3817, 0x3896, 0x3aa7, 0x3870, 0x3996, 0x32cc, 0x3a4c, 0x3757, 0x3814, 0x3b65, 0x3acb, 0x376e, 0x34c0, 0x3609, 0x3bf0, 0x3b24, 0x3b29, 0x3848, 0x34b7, 0x398a, 0x220c, 0x3498, 0x3a8c, 0x3883, +0x38c4, 0x3af6, 0x3a42, 0x2dd6, 0x3147, 0x3717, 0x3a8e, 0x3af9, 0x3296, 0x38ef, 0x34fa, 0x3555, 0x3b29, 0x38de, 0x315e, 0x3773, 0x3b67, 0x3116, 0x38ec, 0x357c, 0x35d0, 0x2518, 0x3958, 0x2a03, 0x37d9, 0x3699, 0x3a1e, 0x3230, 0x3b13, 0x36d4, 0x3b2a, 0x39ad, +0x3b10, 0x351a, 0x3b97, 0x3326, 0x2b54, 0x3b7d, 0x386f, 0x373e, 0x37fa, 0x389b, 0x3b90, 0x3292, 0x3975, 0x38f3, 0x37f1, 0x3590, 0x3810, 0x2fd7, 0x3bf7, 0x3a5a, 0x3a1c, 0x34dd, 0x354c, 0x32f8, 0x3095, 0x321e, 0x39e0, 0x395c, 0x3717, 0x357f, 0x394a, 0x34b1, +0x3ba4, 0x380c, 0x3604, 0x2f50, 0x348d, 0x3828, 0x3a9f, 0x39ce, 0x32ca, 0x3906, 0x3ab2, 0x2ca5, 0x38c9, 0x362a, 0x34b2, 0x29dc, 0x3a36, 0x3052, 0x31b7, 0x3589, 0x387c, 0x3401, 0x3b22, 0x3ad6, 0x3ae8, 0x3238, 0x3494, 0x3502, 0x3717, 0x3a6c, 0x3229, 0x368c, +0x3056, 0x3a56, 0x3498, 0x39eb, 0x2864, 0x342d, 0x39e0, 0x34a1, 0x2b99, 0x3a04, 0x38ff, 0x328c, 0x34d9, 0x387d, 0x3a3c, 0x32e5, 0x39eb, 0x3984, 0x34dd, 0x38a7, 0x373f, 0x39b4, 0x3235, 0x2f58, 0x2f39, 0x3800, 0x3758, 0x3939, 0x39fc, 0x3a4b, 0x38bf, 0x30ee, +0x345e, 0x39c8, 0x3a6d, 0x3262, 0x3b81, 0x31dc, 0x3a15, 0x3bd0, 0x36af, 0x36de, 0x37d5, 0x39d7, 0x3ad3, 0x3ac1, 0x3109, 0x35ea, 0x31c6, 0x398d, 0x3987, 0x3a4a, 0x34d2, 0x2ed2, 0x35e6, 0x352c, 0x39eb, 0x3bd6, 0x3a5b, 0x39d1, 0x34aa, 0x3ade, 0x394b, 0x38a1, +0x2bed, 0x38de, 0x3811, 0x3813, 0x391a, 0x374b, 0x3829, 0x3725, 0x38f0, 0x3583, 0x3966, 0x3a7d, 0x375a, 0x38fe, 0x3696, 0x361c, 0x39a8, 0x35f0, 0x38e1, 0x3003, 0x3595, 0x316e, 0x3862, 0x3af8, 0x3af2, 0x34c8, 0x381d, 0x37d8, 0x3893, 0x3a9c, 0x3989, 0x308c, +0x30cc, 0x2538, 0x399d, 0x3919, 0x399e, 0x21cc, 0x38e9, 0x30f8, 0x3a20, 0x3b3c, 0x3990, 0x259c, 0x3143, 0x3080, 0x3967, 0x3afb, 0x3a1b, 0x3779, 0x2eeb, 0x39f3, 0x379a, 0x369c, 0x3985, 0x3a1b, 0x3ba6, 0x3a53, 0x28d5, 0x3881, 0x31d9, 0x3a34, 0x3bd9, 0x393a, +0x3601, 0x2c6e, 0x3636, 0x3298, 0x39bb, 0x3a08, 0x38db, 0x35ad, 0x3a09, 0x36a6, 0x3bc7, 0x3bac, 0x34ae, 0x3291, 0x290b, 0x3250, 0x2648, 0x333d, 0x2bf3, 0x34b1, 0x30e0, 0x351f, 0x3a74, 0x38dc, 0x3883, 0x2841, 0x35e1, 0x390d, 0x3a50, 0x3abd, 0x386d, 0x3bb7, +0x3b94, 0x36b7, 0x3a49, 0x332f, 0x3a1d, 0x354b, 0x3bab, 0x3346, 0x3417, 0x351e, 0x3b6d, 0x391a, 0x2db3, 0x3b1c, 0x3a4a, 0x37b7, 0x36cf, 0x3a56, 0x39c4, 0x3be9, 0x34f0, 0x39be, 0x3691, 0x1ba5, 0x3888, 0x3040, 0x3ae1, 0x3b9b, 0x398f, 0x3a49, 0x3a16, 0x38c0, +0x386c, 0x39ab, 0x37fa, 0x382c, 0x3a6f, 0x393f, 0x340d, 0x38ef, 0x39d1, 0x3845, 0x398f, 0x363e, 0x3687, 0x3052, 0x3a2b, 0x392c, 0x2f5c, 0x3412, 0x3a1f, 0x3b2f, 0x3bcc, 0x3a63, 0x3a89, 0x36e9, 0x3921, 0x3b80, 0x2dc0, 0x3a03, 0x3beb, 0x38d3, 0x36cb, 0x39a3, +0x3978, 0x3a88, 0x3ba4, 0x3561, 0x28c5, 0x33a0, 0x37be, 0x2c39, 0x30ee, 0x3782, 0x2c07, 0x354e, 0x3491, 0x3a92, 0x331a, 0x3b15, 0x32e1, 0x3839, 0x3afb, 0x36c2, 0x2fd0, 0x29ad, 0x3b2e, 0x39c1, 0x2a8c, 0x341a, 0x2f90, 0x395a, 0x3969, 0x37ea, 0x3a5c, 0x3b6d, +0x3971, 0x3a93, 0x304e, 0x3623, 0x3a22, 0x31ee, 0x29df, 0x2c93, 0x3a01, 0x3a62, 0x366c, 0x371d, 0x3af3, 0x2e08, 0x3ac0, 0x3642, 0x3a28, 0x368d, 0x2d3d, 0x36d9, 0x32c3, 0x373f, 0x36fe, 0x3487, 0x2c81, 0x3623, 0x3b59, 0x3a91, 0x350a, 0x34f4, 0x3b09, 0x2c25, +0x3b13, 0x325a, 0x379e, 0x3a7d, 0x34b1, 0x39d5, 0x2ba8, 0x322b, 0x3b5e, 0x37ab, 0x2e24, 0x3ba9, 0x3a3d, 0x34f7, 0x3ba1, 0x3877, 0x3071, 0x39fb, 0x3bbd, 0x3633, 0x3b36, 0x2daa, 0x3b9b, 0x3aa0, 0x395c, 0x3b8f, 0x38d5, 0x3ab0, 0x3a8f, 0x36c2, 0x3b1f, 0x3489, +0x2acc, 0x3845, 0x3715, 0x37d8, 0x3992, 0x3bff, 0x350e, 0x3ad7, 0x39b0, 0x35ac, 0x3287, 0x385f, 0x3bd4, 0x37a3, 0x3438, 0x39a5, 0x3bcf, 0x38c3, 0x34f6, 0x3ae3, 0x3b57, 0x39af, 0x35eb, 0x3bed, 0x34d4, 0x2a95, 0x3b13, 0x384e, 0x3a3b, 0x33da, 0x3bce, 0x3b99, +0x3559, 0x3335, 0x3a2e, 0x3123, 0x38db, 0x33d0, 0x3638, 0x3b17, 0x3a72, 0x3afc, 0x3936, 0x3838, 0x2b69, 0x3895, 0x3a1a, 0x3192, 0x39d5, 0x37a5, 0x2eb0, 0x2e8b, 0x329a, 0x3b90, 0x390a, 0x3a1e, 0x3847, 0x375d, 0x3873, 0x35e2, 0x3771, 0x30f5, 0x3231, 0x3bd7, +0x2bbc, 0x3ace, 0x31ad, 0x3a6b, 0x28a4, 0x3b48, 0x3ba3, 0x3a84, 0x3353, 0x39f6, 0x381f, 0x2dd6, 0x314c, 0x34af, 0x3929, 0x3921, 0x383b, 0x34b0, 0x3923, 0x32c9, 0x3ae7, 0x318f, 0x3480, 0x2ad8, 0x3042, 0x3a4c, 0x349d, 0x2c12, 0x3abb, 0x3a57, 0x3b0d, 0x3111, +0x3359, 0x3a84, 0x38f2, 0x368d, 0x2f4b, 0x3ba0, 0x395c, 0x3026, 0x3a15, 0x2a04, 0x326e, 0x3522, 0x31a2, 0x382f, 0x2ada, 0x3b7c, 0x2f80, 0x3af5, 0x2d35, 0x38fa, 0x39ab, 0x2c6d, 0x2e7a, 0x39f6, 0x31a4, 0x3a53, 0x358c, 0x3951, 0x3a4e, 0x3916, 0x2a3f, 0x3ae9, +0x3b03, 0x39f8, 0x39fe, 0x3a61, 0x39fb, 0x3704, 0x360d, 0x39a7, 0x37a9, 0x348f, 0x3a30, 0x3af5, 0x366f, 0x3b29, 0x3a6a, 0x33d5, 0x370a, 0x39cd, 0x3444, 0x3bea, 0x3b2b, 0x312e, 0x3b8e, 0x32cf, 0x3b79, 0x3302, 0x3bba, 0x3962, 0x3413, 0x37a1, 0x39e0, 0x3805 }; \ No newline at end of file diff --git a/hwpe/redmule/inc/y_input.h b/hwpe/redmule/inc/y_input.h index 19b8197..45a2375 100644 --- a/hwpe/redmule/inc/y_input.h +++ b/hwpe/redmule/inc/y_input.h @@ -1,99 +1,27 @@ /* Header file generated by RedMulE Golden Model */ -uint16_t y_inp [9216] = { -0x39fc, 0x3a87, 0x3a35, 0x2bf4, 0x34f8, 0x2c8c, 0x3822, 0x38a2, 0x3bf8, 0x3b3a, 0x37d8, 0x3041, 0x28b2, 0x38d2, 0x1822, 0x3044, 0x38dc, 0x308d, 0x3a14, 0x3952, 0x38be, 0x32ef, 0x351e, 0x38ab, 0x2eb4, 0x3689, 0x33ca, 0x3a1f, 0x3bbc, 0x37ed, 0x38d5, 0x35c8, 0x341b, 0x3b74, 0x3627, 0x3a34, 0x3220, 0x3b85, 0x3a43, 0x2eca, 0x3550, 0x3958, 0x3813, 0x2cca, 0x3869, 0x391e, 0x3260, 0x2e42, 0x3493, 0x39ed, 0x3b7b, 0x3699, 0x3863, 0x3a7e, 0x3ab4, 0x3bcb, 0x3920, 0x3502, 0x28df, 0x38c5, 0x35e5, 0x282d, 0x3645, 0x3a29, 0x2fbb, 0x338d, 0x3ba0, 0x320d, 0x2830, 0x3bb4, 0x390a, 0x367f, 0x3335, 0x3b1a, 0x38c0, 0x3781, 0x3773, 0x39b0, 0x3b74, 0x38ba, 0x3383, 0x3550, 0x357a, 0x3ba7, 0x30e6, 0x39f4, 0x3b11, 0x282b, 0x334f, 0x3644, 0x367c, 0x3ac3, 0x38f3, 0x39f9, 0x3b1d, 0x35cf, -0x3433, 0x2eea, 0x38c1, 0x362a, 0x35e6, 0x3070, 0x1c1d, 0x308e, 0x381d, 0x39e5, 0x3a51, 0x2fb2, 0x3723, 0x3b58, 0x293e, 0x337a, 0x3a39, 0x349c, 0x3766, 0x3a73, 0x39bd, 0x3a0c, 0x3843, 0x21b9, 0x39a5, 0x2fd6, 0x2cf4, 0x3112, 0x3a1a, 0x3bb6, 0x3a83, 0x398e, 0x3b92, 0x2a3f, 0x37f1, 0x3664, 0x35f0, 0x39be, 0x3279, 0x39e0, 0x3241, 0x3bc7, 0x3bae, 0x36bd, 0x1bf5, 0x3806, 0x37d3, 0x247c, 0x3789, 0x36b9, 0x3b84, 0x3093, 0x3a5d, 0x2863, 0x2fe0, 0x2c4b, 0x3bd5, 0x38b6, 0x3b0e, 0x3ad1, 0x3ba2, 0x3914, 0x3947, 0x3984, 0x397a, 0x35ed, 0x3891, 0x3b7f, 0x3b32, 0x3857, 0x3717, 0x2b73, 0x38c1, 0x3bc6, 0x3330, 0x35c8, 0x34ff, 0x3924, 0x387b, 0x3a27, 0x3b92, 0x22d9, 0x29be, 0x3b39, 0x361c, 0x34e6, 0x2b7e, 0x34d8, 0x38c2, 0x3a4c, 0x3a2f, 0x381f, 0x38f6, 0x3a9a, 0x394f, 0x382d, -0x3939, 0x397a, 0x3926, 0x3a59, 0x34e3, 0x3077, 0x3190, 0x3a6b, 0x2c3f, 0x3a51, 0x35d9, 0x3866, 0x2f73, 0x38f2, 0x3766, 0x3aa1, 0x3b55, 0x2f8f, 0x3993, 0x354a, 0x3650, 0x340d, 0x2f01, 0x3731, 0x394d, 0x3b15, 0x3806, 0x39b9, 0x3aa7, 0x387c, 0x3beb, 0x2e2f, 0x38e8, 0x353a, 0x36ba, 0x3b2e, 0x3b5c, 0x2d4b, 0x357e, 0x3bd8, 0x3be0, 0x38b0, 0x2a3b, 0x2ff0, 0x3268, 0x38f3, 0x31fc, 0x318c, 0x35b5, 0x3980, 0x3a4d, 0x33cc, 0x365b, 0x397e, 0x3809, 0x39af, 0x3537, 0x2ba6, 0x30f1, 0x38b2, 0x39fe, 0x39f3, 0x373b, 0x3bff, 0x36ce, 0x3b5d, 0x3b5a, 0x2f1d, 0x3be3, 0x395d, 0x34d0, 0x36a3, 0x3937, 0x33b3, 0x3b91, 0x3ab5, 0x3215, 0x396b, 0x3bed, 0x302d, 0x3862, 0x3b05, 0x2ba1, 0x2fa6, 0x35d2, 0x3806, 0x3b84, 0x3233, 0x2664, 0x3a63, 0x3bdb, 0x375f, 0x3b0b, 0x34ff, 0x3020, 0x375d, -0x3931, 0x2d6c, 0x31c3, 0x3a24, 0x34b8, 0x3865, 0x366e, 0x3aaf, 0x3530, 0x20d6, 0x35ac, 0x33e8, 0x3b37, 0x32d8, 0x333c, 0x3349, 0x30cd, 0x392f, 0x2c30, 0x3b0a, 0x390a, 0x3703, 0x3b5f, 0x39ac, 0x31ba, 0x32a4, 0x3b8f, 0x3a5e, 0x3ad1, 0x38bf, 0x38bb, 0x369f, 0x3b75, 0x32c6, 0x31d2, 0x280f, 0x3891, 0x3b09, 0x3531, 0x3899, 0x3a55, 0x37fe, 0x3b5e, 0x364a, 0x3ada, 0x386f, 0x38bb, 0x3a7b, 0x313f, 0x3592, 0x2ca6, 0x2eeb, 0x38b1, 0x35df, 0x326f, 0x3bf5, 0x3848, 0x2fbd, 0x3268, 0x3922, 0x376b, 0x3a5e, 0x3826, 0x3207, 0x33f3, 0x3302, 0x3a80, 0x3bf1, 0x35dd, 0x2a83, 0x3460, 0x3296, 0x3ada, 0x3484, 0x3989, 0x3680, 0x3969, 0x3ab4, 0x2fb1, 0x3b50, 0x38bd, 0x3ad1, 0x34ac, 0x3718, 0x2ed7, 0x3b53, 0x3114, 0x248a, 0x3960, 0x3ab6, 0x39ef, 0x21dd, 0x33b9, 0x3a05, 0x2fbe, 0x37a2, -0x3a70, 0x37f8, 0x37f1, 0x3591, 0x382f, 0x3276, 0x33ed, 0x3935, 0x275e, 0x353c, 0x3b24, 0x3b42, 0x38db, 0x33ca, 0x3bd7, 0x3694, 0x365f, 0x3997, 0x39b7, 0x3bcb, 0x3b6a, 0x269a, 0x3956, 0x3b4e, 0x3ba1, 0x3bee, 0x2aaf, 0x3530, 0x3ad7, 0x3bce, 0x3bd2, 0x397c, 0x3aee, 0x3b62, 0x3bfc, 0x3ba1, 0x3b44, 0x38e6, 0x3747, 0x3855, 0x3baf, 0x3b16, 0x3b35, 0x34e7, 0x3858, 0x3bdb, 0x39c3, 0x3898, 0x381e, 0x3899, 0x36be, 0x363c, 0x3a70, 0x1518, 0x334e, 0x38cd, 0x3a74, 0x3420, 0x35a7, 0x3a00, 0x3282, 0x32db, 0x3656, 0x2dd8, 0x2e5b, 0x399e, 0x3bd7, 0x3366, 0x34cd, 0x257c, 0x3a2e, 0x375b, 0x3971, 0x3472, 0x269f, 0x39ac, 0x39e6, 0x396b, 0x335b, 0x38cc, 0x3b3d, 0x38ee, 0x3895, 0x2e3b, 0x3ba0, 0x3bb7, 0x3401, 0x35df, 0x3b06, 0x3adf, 0x37af, 0x3948, 0x33a6, 0x3aa7, 0x36b2, 0x373c, -0x3872, 0x3674, 0x34d5, 0x3918, 0x37cd, 0x369a, 0x3a26, 0x3bc3, 0x380c, 0x35ba, 0x36eb, 0x3b54, 0x37a9, 0x3405, 0x397d, 0x351f, 0x2f10, 0x34fd, 0x333c, 0x36c9, 0x3584, 0x3998, 0x3b22, 0x3aff, 0x3931, 0x31b7, 0x39ae, 0x31e7, 0x3847, 0x392a, 0x3bff, 0x3a24, 0x15c5, 0x3905, 0x36e8, 0x3356, 0x2f46, 0x38a9, 0x3bd8, 0x3bfc, 0x2fbf, 0x3a7d, 0x3989, 0x3a6c, 0x3a8b, 0x32c9, 0x37da, 0x3b16, 0x394a, 0x3aa5, 0x2c30, 0x3968, 0x3119, 0x3af2, 0x2f8f, 0x34ef, 0x3ab3, 0x2445, 0x38d9, 0x3856, 0x3592, 0x389d, 0x2932, 0x31f8, 0x3775, 0x3947, 0x3893, 0x3b50, 0x3465, 0x355c, 0x3547, 0x3925, 0x32c2, 0x3a0e, 0x39f9, 0x39f0, 0x2a1c, 0x34a0, 0x3b51, 0x3bb8, 0x38af, 0x36c7, 0x361f, 0x397b, 0x3a7f, 0x39e2, 0x3a7e, 0x3a67, 0x304c, 0x34d8, 0x3921, 0x3287, 0x2d90, 0x3b36, 0x30cc, 0x1958, -0x36ea, 0x3419, 0x39f3, 0x3bf1, 0x3271, 0x3763, 0x3643, 0x337f, 0x3161, 0x3944, 0x33b1, 0x30c7, 0x3687, 0x342b, 0x2402, 0x394a, 0x3480, 0x3052, 0x2a6e, 0x376a, 0x3236, 0x381e, 0x3596, 0x3939, 0x373e, 0x34b4, 0x201a, 0x3245, 0x3169, 0x26c8, 0x3a1c, 0x389b, 0x3351, 0x3bac, 0x3261, 0x37ab, 0x39bb, 0x350f, 0x3b5d, 0x3b86, 0x34e8, 0x3104, 0x3969, 0x31f4, 0x399a, 0x370e, 0x34a3, 0x3064, 0x3519, 0x3542, 0x3a72, 0x3be0, 0x3ba2, 0x3a5b, 0x3455, 0x3ae5, 0x38ef, 0x358a, 0x3908, 0x38eb, 0x3572, 0x3b41, 0x39cb, 0x39f4, 0x3bb6, 0x2f51, 0x3345, 0x3475, 0x3b20, 0x3b7c, 0x385d, 0x36a4, 0x35b8, 0x3368, 0x3867, 0x37cb, 0x3b8c, 0x32e9, 0x366b, 0x3a3f, 0x3147, 0x3534, 0x25bc, 0x3828, 0x38f8, 0x27cd, 0x35c8, 0x2a95, 0x39cf, 0x328b, 0x3a6d, 0x34f4, 0x38ae, 0x2b5f, 0x3845, 0x3b30, -0x3719, 0x37fc, 0x3adc, 0x2273, 0x385f, 0x39d1, 0x2f2c, 0x2df2, 0x36a6, 0x3523, 0x234d, 0x3a3f, 0x2817, 0x355d, 0x399f, 0x3924, 0x3bd4, 0x35ca, 0x3319, 0x301a, 0x353f, 0x34d2, 0x3bfd, 0x373e, 0x3a2a, 0x320b, 0x2e90, 0x38e8, 0x2f48, 0x3873, 0x3b61, 0x39d5, 0x3af7, 0x3885, 0x3be2, 0x3963, 0x36cc, 0x331b, 0x31ad, 0x3668, 0x39a2, 0x36f9, 0x3b52, 0x3985, 0x395d, 0x2e15, 0x30c2, 0x37ed, 0x32d1, 0x3a04, 0x3bef, 0x2fd7, 0x301d, 0x3a39, 0x3999, 0x342d, 0x34e3, 0x3bde, 0x3825, 0x3ac0, 0x3495, 0x3505, 0x3820, 0x30df, 0x37fd, 0x386c, 0x37c5, 0x3bab, 0x3b3d, 0x37f1, 0x3b42, 0x3825, 0x3bb4, 0x38a0, 0x383b, 0x3a92, 0x3a5c, 0x24c7, 0x38c8, 0x3492, 0x30af, 0x3b63, 0x35bb, 0x3046, 0x3aec, 0x357f, 0x3bb6, 0x3886, 0x37c6, 0x3315, 0x39cd, 0x32ae, 0x3b6d, 0x2d8c, 0x3607, 0x3420, -0x385d, 0x3782, 0x38ad, 0x34af, 0x3aad, 0x3bf3, 0x34bc, 0x3bfc, 0x33f0, 0x34ab, 0x37b6, 0x308d, 0x3ac8, 0x3935, 0x3b3a, 0x3517, 0x2579, 0x3b26, 0x36f6, 0x381f, 0x3b3c, 0x3a9f, 0x3667, 0x1c3e, 0x3b29, 0x2344, 0x3010, 0x36f7, 0x3470, 0x3834, 0x33bc, 0x306f, 0x392b, 0x37bc, 0x357a, 0x38a5, 0x3a09, 0x38f3, 0x34c6, 0x304b, 0x3bb7, 0x36c3, 0x3435, 0x3984, 0x357c, 0x345b, 0x39b5, 0x3286, 0x3a6b, 0x2e0e, 0x3613, 0x33e9, 0x379f, 0x3a14, 0x3a3a, 0x2e0e, 0x38f6, 0x3589, 0x3807, 0x3a49, 0x3818, 0x39dd, 0x31b0, 0x3a67, 0x39de, 0x175e, 0x394b, 0x34de, 0x394a, 0x3853, 0x371b, 0x3b5d, 0x39bb, 0x3029, 0x3091, 0x37b8, 0x33f0, 0x3517, 0x391e, 0x35ce, 0x3bc7, 0x2c6e, 0x2d9c, 0x36c1, 0x3143, 0x35c5, 0x39c6, 0x3a05, 0x3b1f, 0x3941, 0x3adc, 0x393a, 0x3993, 0x3bac, 0x2781, 0x3912, -0x36b8, 0x3a59, 0x397c, 0x25c3, 0x3b19, 0x3304, 0x399d, 0x3bde, 0x2e7c, 0x341e, 0x3172, 0x3bfd, 0x3b45, 0x3186, 0x37fe, 0x3b92, 0x390e, 0x2d85, 0x34fa, 0x2c58, 0x3ac5, 0x398f, 0x386a, 0x3ae3, 0x2f53, 0x3b4d, 0x3602, 0x3042, 0x353d, 0x3811, 0x3928, 0x2414, 0x3bb8, 0x3841, 0x3990, 0x388a, 0x25d4, 0x3787, 0x39a9, 0x3963, 0x3554, 0x3b41, 0x3921, 0x2938, 0x39cc, 0x34d1, 0x38ec, 0x31ac, 0x3aed, 0x36ca, 0x3a41, 0x3754, 0x3ab4, 0x39ac, 0x387a, 0x3851, 0x3097, 0x3885, 0x2ef9, 0x2530, 0x3a9d, 0x39ec, 0x38ca, 0x3ad4, 0x39ea, 0x37ce, 0x3ac0, 0x2879, 0x3bda, 0x3af5, 0x2eaa, 0x35e9, 0x3a11, 0x3a48, 0x2782, 0x3a7f, 0x3662, 0x3a99, 0x2194, 0x3628, 0x3668, 0x36e5, 0x38ab, 0x3833, 0x30b4, 0x3237, 0x39df, 0x3a63, 0x370d, 0x2c4a, 0x3ae0, 0x3b29, 0x3bba, 0x3b64, 0x260a, 0x38f8, -0x2679, 0x3412, 0x395a, 0x3054, 0x3ac9, 0x3bb3, 0x31a7, 0x38f7, 0x1d33, 0x3aeb, 0x38f5, 0x3649, 0x3aab, 0x3894, 0x353b, 0x3bbf, 0x37e2, 0x3b2d, 0x3a05, 0x3b7f, 0x318f, 0x2487, 0x3a3b, 0x36e8, 0x35d0, 0x2e1b, 0x3a03, 0x3bb9, 0x2d71, 0x32e5, 0x31c0, 0x2a74, 0x3898, 0x3ae0, 0x381b, 0x308d, 0x3afa, 0x2e44, 0x3aa2, 0x39cb, 0x3a19, 0x321f, 0x3975, 0x3a94, 0x20b7, 0x3843, 0x3942, 0x38c2, 0x3587, 0x3ba0, 0x3b5b, 0x3981, 0x3ba0, 0x3988, 0x2fc0, 0x34d2, 0x30ad, 0x3102, 0x394d, 0x38ef, 0x353c, 0x39d3, 0x3b57, 0x36c4, 0x3619, 0x3a4d, 0x382f, 0x35e7, 0x26ce, 0x33c6, 0x25a6, 0x36b8, 0x3b5f, 0x3a6d, 0x34cb, 0x2bb8, 0x368b, 0x3368, 0x312a, 0x3869, 0x37a7, 0x3804, 0x34af, 0x39ff, 0x350d, 0x358e, 0x3a40, 0x349c, 0x3ac3, 0x39fa, 0x3153, 0x38da, 0x390b, 0x30ea, 0x3205, 0x3915, -0x3a69, 0x385c, 0x34dc, 0x2e57, 0x2dff, 0x2a23, 0x2f74, 0x2efc, 0x397f, 0x367e, 0x2932, 0x3565, 0x38f6, 0x3bae, 0x3abe, 0x34cf, 0x39f9, 0x3995, 0x3844, 0x3846, 0x3674, 0x39ab, 0x382b, 0x3aa9, 0x36eb, 0x3a6f, 0x37d9, 0x3804, 0x2c69, 0x3883, 0x367d, 0x3b09, 0x25e5, 0x34d7, 0x3848, 0x310c, 0x3bdf, 0x3890, 0x3623, 0x3951, 0x3a1e, 0x385c, 0x3a27, 0x2747, 0x37f7, 0x344d, 0x2903, 0x3b96, 0x396d, 0x3868, 0x3766, 0x3689, 0x3705, 0x2dc4, 0x39f1, 0x389b, 0x39b0, 0x31b3, 0x3a14, 0x309a, 0x3ba3, 0x32a9, 0x3652, 0x390d, 0x316f, 0x3812, 0x38dd, 0x3473, 0x396a, 0x3b35, 0x3a31, 0x2cb3, 0x1c90, 0x3794, 0x372c, 0x3238, 0x3b57, 0x3516, 0x3b9c, 0x3a83, 0x386e, 0x3747, 0x353b, 0x31d2, 0x3b04, 0x338e, 0x3802, 0x373c, 0x373c, 0x380f, 0x28c7, 0x3936, 0x37eb, 0x32a6, 0x30cc, 0x3be5, -0x3428, 0x3592, 0x3226, 0x38dd, 0x3823, 0x374e, 0x3ac7, 0x38cb, 0x32a9, 0x354b, 0x3517, 0x2f43, 0x3812, 0x3a7a, 0x3627, 0x3b87, 0x3849, 0x377a, 0x2fae, 0x3bf8, 0x38e2, 0x387d, 0x3bab, 0x3a95, 0x31c0, 0x2be8, 0x30fb, 0x3bd8, 0x3828, 0x2ac0, 0x39ef, 0x3927, 0x2417, 0x34a8, 0x3626, 0x3751, 0x3b5b, 0x3a42, 0x2c4c, 0x3806, 0x358e, 0x34c1, 0x2d4f, 0x3bda, 0x3990, 0x3651, 0x3431, 0x31a2, 0x3379, 0x339a, 0x37cf, 0x3bf3, 0x3ada, 0x384a, 0x373d, 0x38a4, 0x2d47, 0x390a, 0x312a, 0x3adb, 0x3bee, 0x3463, 0x3857, 0x3950, 0x349f, 0x3a8a, 0x3767, 0x3552, 0x2d8a, 0x2cc8, 0x36cd, 0x3510, 0x3a04, 0x35ac, 0x3b20, 0x3076, 0x3a93, 0x36d0, 0x315a, 0x3af1, 0x355d, 0x3b34, 0x3b5c, 0x2247, 0x37c7, 0x3b02, 0x3a5d, 0x3669, 0x282c, 0x3b81, 0x319c, 0x3700, 0x3a0d, 0x33c0, 0x3985, 0x335e, -0x3af9, 0x3733, 0x2f0c, 0x392a, 0x2528, 0x34c8, 0x39e5, 0x3409, 0x3424, 0x389e, 0x358a, 0x3664, 0x3541, 0x38fa, 0x1d31, 0x2d02, 0x3889, 0x3690, 0x3a15, 0x3a4b, 0x364a, 0x3791, 0x3a6f, 0x3aa1, 0x3ab0, 0x39ed, 0x37da, 0x3abc, 0x3b09, 0x376d, 0x2c63, 0x314f, 0x34b9, 0x3142, 0x39cf, 0x3242, 0x384f, 0x3bf9, 0x36a1, 0x358d, 0x3ade, 0x3bc9, 0x347d, 0x3a5a, 0x3b4e, 0x3aa3, 0x39bf, 0x318d, 0x3a37, 0x3833, 0x333b, 0x3bb9, 0x39f4, 0x2ff2, 0x38b3, 0x3508, 0x3817, 0x3bd8, 0x35a8, 0x38b0, 0x3aac, 0x3984, 0x3bff, 0x29ea, 0x34ca, 0x38c6, 0x3885, 0x3bd8, 0x38df, 0x38fa, 0x358e, 0x3528, 0x39e8, 0x2d40, 0x3464, 0x3bac, 0x3ad1, 0x399b, 0x3a77, 0x3bfe, 0x3b52, 0x3934, 0x35ca, 0x3bf7, 0x3852, 0x3858, 0x35a1, 0x3a72, 0x34d7, 0x39e3, 0x2fe5, 0x3b1c, 0x3aee, 0x3bf7, 0x25f0, 0x3881, -0x376e, 0x3833, 0x3ab2, 0x3b59, 0x3b7f, 0x3ac3, 0x3954, 0x302d, 0x3a5d, 0x38f9, 0x3a41, 0x3a0f, 0x33a5, 0x3150, 0x29b7, 0x39aa, 0x35d5, 0x31db, 0x389b, 0x3aa1, 0x3529, 0x3bf1, 0x38de, 0x39a9, 0x321d, 0x35d6, 0x3423, 0x3be2, 0x34b2, 0x3b42, 0x31d8, 0x345b, 0x3a2d, 0x3b72, 0x3a10, 0x338a, 0x3b84, 0x3be8, 0x3810, 0x38a5, 0x3ba8, 0x3921, 0x3ac0, 0x3329, 0x3bca, 0x3bbb, 0x389a, 0x35f3, 0x3908, 0x3927, 0x3534, 0x381b, 0x2d5f, 0x3bef, 0x35f6, 0x3b13, 0x3834, 0x25d5, 0x30f9, 0x397c, 0x31af, 0x3867, 0x2cc7, 0x28ea, 0x3afe, 0x3014, 0x3806, 0x31c4, 0x39fa, 0x3bb6, 0x250c, 0x391b, 0x39a4, 0x37e3, 0x38d9, 0x3747, 0x2b7e, 0x3939, 0x32d2, 0x3a48, 0x38c3, 0x312d, 0x3a2d, 0x3afd, 0x3101, 0x3b28, 0x370d, 0x2fce, 0x32fc, 0x3840, 0x39f5, 0x37b6, 0x39df, 0x1d49, 0x3b9b, 0x3694, -0x3580, 0x392f, 0x3953, 0x3ac8, 0x3af3, 0x33cd, 0x39a0, 0x3672, 0x373d, 0x236a, 0x3935, 0x39fa, 0x348e, 0x3759, 0x348d, 0x36e7, 0x391b, 0x3b46, 0x386c, 0x3515, 0x389f, 0x3b21, 0x3aef, 0x3bf5, 0x3a2d, 0x3428, 0x39d1, 0x3931, 0x39af, 0x38ba, 0x2cbf, 0x3bf4, 0x31be, 0x2dd5, 0x350d, 0x3af6, 0x2044, 0x36ae, 0x3810, 0x3690, 0x31f8, 0x2ed1, 0x3a21, 0x3b7b, 0x3a96, 0x355c, 0x3704, 0x34e4, 0x38d3, 0x2f90, 0x3902, 0x37b1, 0x3b2a, 0x3a69, 0x3792, 0x338b, 0x3006, 0x345e, 0x3530, 0x3b40, 0x3733, 0x2c59, 0x3bf1, 0x39e6, 0x3b20, 0x3bc1, 0x3b71, 0x37fc, 0x363f, 0x36f9, 0x3b39, 0x380a, 0x3516, 0x3814, 0x34b8, 0x3493, 0x3bbe, 0x328b, 0x3709, 0x393b, 0x373e, 0x3929, 0x37c0, 0x3464, 0x39f8, 0x35d1, 0x364e, 0x39ed, 0x3806, 0x398c, 0x39e1, 0x3be5, 0x3317, 0x3482, 0x3b35, 0x3bc5, -0x2be7, 0x3026, 0x3b12, 0x3476, 0x3967, 0x3767, 0x3a01, 0x385a, 0x30f5, 0x2ccc, 0x349d, 0x2811, 0x399c, 0x3afe, 0x39ee, 0x3903, 0x3490, 0x2d4b, 0x367c, 0x361f, 0x3add, 0x312b, 0x3502, 0x3a4b, 0x3b74, 0x38b0, 0x31bd, 0x3327, 0x3a68, 0x3078, 0x3811, 0x3bce, 0x3867, 0x362d, 0x39f7, 0x2c93, 0x325f, 0x3370, 0x3bcf, 0x3b0c, 0x3656, 0x3644, 0x3130, 0x34f1, 0x326f, 0x3ab4, 0x38b5, 0x2e0b, 0x38ec, 0x3b21, 0x3be6, 0x3a39, 0x38f2, 0x3621, 0x3bf7, 0x390d, 0x39ef, 0x2b80, 0x394b, 0x3b3c, 0x31c4, 0x1a0a, 0x354e, 0x3655, 0x3564, 0x2b0e, 0x3072, 0x3838, 0x3190, 0x3b46, 0x3909, 0x31d8, 0x3b8d, 0x3b39, 0x3773, 0x35a3, 0x394f, 0x3971, 0x3919, 0x3848, 0x3a7d, 0x3b3d, 0x357e, 0x2755, 0x3a56, 0x3488, 0x3ac6, 0x3a25, 0x3991, 0x347e, 0x3472, 0x3b22, 0x38c8, 0x3b54, 0x384c, 0x28a2, -0x3b41, 0x3ab1, 0x3a5d, 0x35d6, 0x36e5, 0x3a33, 0x3a55, 0x3457, 0x35b4, 0x34d5, 0x389b, 0x3928, 0x3be7, 0x32d5, 0x3b26, 0x3790, 0x3203, 0x3296, 0x3b45, 0x3bc4, 0x38d4, 0x34f7, 0x3b50, 0x3ab1, 0x36eb, 0x3120, 0x35af, 0x396d, 0x28f5, 0x37f3, 0x3b0b, 0x31a6, 0x3a46, 0x1ce8, 0x38f3, 0x39c2, 0x3970, 0x3bb5, 0x28d7, 0x3b21, 0x39b4, 0x355e, 0x35a6, 0x3bb9, 0x2cc3, 0x38c2, 0x376c, 0x2e88, 0x34b2, 0x3967, 0x3325, 0x3bda, 0x37c6, 0x39dc, 0x3135, 0x3966, 0x22f4, 0x3433, 0x37e1, 0x34dd, 0x3900, 0x3ae7, 0x38ee, 0x3926, 0x2a4a, 0x3a16, 0x3ba9, 0x38de, 0x343a, 0x3a6f, 0x315c, 0x392b, 0x38ce, 0x35c3, 0x3810, 0x3ae9, 0x3627, 0x29b7, 0x2816, 0x289e, 0x3bb0, 0x39d1, 0x335c, 0x39b1, 0x3b48, 0x3614, 0x3581, 0x33df, 0x332b, 0x3750, 0x3438, 0x3309, 0x3854, 0x3830, 0x32e3, 0x3a27, -0x38f4, 0x3074, 0x351c, 0x2b8d, 0x35c2, 0x33dc, 0x3972, 0x39f2, 0x3af7, 0x3b12, 0x3b1a, 0x352d, 0x335e, 0x357a, 0x32e1, 0x3a63, 0x3426, 0x316d, 0x3903, 0x36e4, 0x36cc, 0x35fd, 0x3b29, 0x3304, 0x387e, 0x347d, 0x3af3, 0x33b5, 0x3859, 0x3800, 0x39b1, 0x3ae4, 0x2839, 0x38e6, 0x3341, 0x3346, 0x3ad4, 0x38b2, 0x392b, 0x3bfa, 0x3090, 0x36f1, 0x29b5, 0x2fa6, 0x3bb5, 0x36bc, 0x30c4, 0x38f4, 0x1e3b, 0x34fd, 0x2c4c, 0x3a6b, 0x393c, 0x3aba, 0x3866, 0x356a, 0x3441, 0x3802, 0x367d, 0x3546, 0x380f, 0x38f2, 0x354b, 0x30af, 0x2e2f, 0x37cb, 0x3994, 0x36e3, 0x37a7, 0x3a8c, 0x395c, 0x3aa2, 0x2c2f, 0x35b4, 0x3180, 0x3ad0, 0x3237, 0x3ac6, 0x31f5, 0x3637, 0x398c, 0x3443, 0x3bd6, 0x3b63, 0x35d0, 0x3351, 0x3336, 0x3aa8, 0x3b66, 0x39df, 0x36fe, 0x3477, 0x3823, 0x38ef, 0x399e, 0x394b, -0x3a85, 0x2d22, 0x39b4, 0x3a4e, 0x3334, 0x1c3b, 0x3466, 0x3469, 0x3820, 0x3a70, 0x2d5e, 0x37d9, 0x37bb, 0x3bd8, 0x25ea, 0x3292, 0x3a58, 0x3847, 0x3aea, 0x389d, 0x386e, 0x3870, 0x3bc4, 0x3a95, 0x307f, 0x3928, 0x31c2, 0x38e5, 0x3994, 0x3b83, 0x297a, 0x33c0, 0x3a55, 0x390d, 0x3550, 0x3447, 0x3b6d, 0x2809, 0x3993, 0x2944, 0x3ae1, 0x3845, 0x3703, 0x38fb, 0x3880, 0x3b1b, 0x3312, 0x2d51, 0x2e33, 0x3ba5, 0x3805, 0x3359, 0x3b3c, 0x3663, 0x354f, 0x3904, 0x3787, 0x39ac, 0x3bc4, 0x2f65, 0x3778, 0x3ba8, 0x3100, 0x3840, 0x3b67, 0x3abe, 0x2d5b, 0x391f, 0x3670, 0x39b3, 0x3a4e, 0x3947, 0x2e35, 0x3755, 0x3bb9, 0x31bf, 0x3ba6, 0x3a10, 0x39d1, 0x3aae, 0x3b88, 0x380a, 0x345f, 0x3aeb, 0x3660, 0x373a, 0x2d6f, 0x33b0, 0x3518, 0x3b25, 0x3872, 0x3aab, 0x2ed0, 0x347d, 0x2fd0, 0x38c5, -0x2cda, 0x353c, 0x3866, 0x2332, 0x3bde, 0x3912, 0x3762, 0x3ae3, 0x3a55, 0x39df, 0x32e0, 0x3b63, 0x3ac3, 0x3a85, 0x34e8, 0x38d7, 0x3543, 0x3a1e, 0x36e7, 0x3008, 0x359e, 0x298b, 0x3b6c, 0x3b51, 0x38d1, 0x3444, 0x39ec, 0x391e, 0x3a6d, 0x39e9, 0x3b7c, 0x36bb, 0x21f7, 0x2896, 0x3308, 0x3afc, 0x3879, 0x2cac, 0x2699, 0x3475, 0x331b, 0x340f, 0x373b, 0x3814, 0x3b6d, 0x39bb, 0x2e09, 0x3284, 0x286f, 0x371d, 0x3966, 0x27c2, 0x3ac4, 0x3b92, 0x3ba4, 0x3acb, 0x30b0, 0x3a11, 0x3721, 0x34cc, 0x3b84, 0x3002, 0x38bc, 0x341e, 0x36c3, 0x3bd2, 0x39fe, 0x380f, 0x38c3, 0x3a9c, 0x373a, 0x3a79, 0x3bfa, 0x31c7, 0x340d, 0x3602, 0x38e4, 0x1ddd, 0x38b2, 0x3985, 0x2574, 0x339e, 0x3b39, 0x3765, 0x3369, 0x39b6, 0x3974, 0x3a25, 0x362c, 0x3aeb, 0x3935, 0x3271, 0x2de2, 0x35d5, 0x3b93, 0x32f0, -0x3425, 0x3871, 0x2d6d, 0x3070, 0x319d, 0x33b5, 0x333e, 0x397e, 0x2a76, 0x39eb, 0x3b34, 0x3988, 0x3b40, 0x36de, 0x39a6, 0x38d9, 0x398b, 0x3623, 0x325e, 0x37d1, 0x3406, 0x377f, 0x3a58, 0x3486, 0x3855, 0x3acc, 0x378c, 0x3b1b, 0x3bed, 0x3aae, 0x3998, 0x39dc, 0x38a0, 0x3b74, 0x38a1, 0x2a79, 0x2e26, 0x39fd, 0x377c, 0x39bb, 0x3ad6, 0x1a6c, 0x2e6b, 0x377b, 0x3b5c, 0x39bd, 0x32f6, 0x371a, 0x348d, 0x348b, 0x359c, 0x38c7, 0x3022, 0x389f, 0x3a5b, 0x328d, 0x3158, 0x3206, 0x364d, 0x3a90, 0x36df, 0x3934, 0x3a5e, 0x39e4, 0x3a42, 0x3afe, 0x38d5, 0x36c5, 0x3050, 0x2acf, 0x3a39, 0x29da, 0x365c, 0x364e, 0x2bc, 0x3850, 0x381b, 0x39b2, 0x3643, 0x390a, 0x30da, 0x3243, 0x2dd9, 0x3b6c, 0x38cc, 0x309c, 0x27f0, 0x3b84, 0x3979, 0x3b3e, 0x3b08, 0x376a, 0x390d, 0x2d9e, 0x3527, 0x3a25, -0x33e2, 0x3840, 0x3afd, 0x385b, 0x350a, 0x3b04, 0x377a, 0x38ad, 0x3aec, 0x39d7, 0x38ad, 0x3b9d, 0x37d6, 0x36f1, 0x3586, 0x325c, 0x2cf4, 0x3b30, 0x387d, 0x3a1d, 0x3a29, 0x3048, 0x3bdc, 0x30d7, 0x359a, 0x30c4, 0x3a22, 0x3148, 0x3bd3, 0x3699, 0x353e, 0x398f, 0x36f2, 0x3115, 0x3505, 0x39bc, 0x39b1, 0x37ec, 0x353f, 0x379f, 0x36df, 0x3479, 0x3815, 0x3503, 0x30dd, 0x39c5, 0x3a1e, 0x30a0, 0x385d, 0x3a44, 0x3819, 0x3599, 0x3994, 0x394a, 0x316a, 0x39ab, 0x2c23, 0x3985, 0x3bbe, 0x3bdd, 0x3486, 0x36f7, 0x3559, 0x391b, 0x2642, 0x3a96, 0x3bac, 0x367c, 0x3b59, 0x38f0, 0x268a, 0x3a03, 0x3106, 0x3bd1, 0x3279, 0x36c9, 0x3b40, 0x3750, 0x2e02, 0x3965, 0x3636, 0x3afb, 0x3960, 0x38d6, 0x3a62, 0x2910, 0x3a84, 0x359d, 0x3ad9, 0x33f7, 0x3b5d, 0x26e1, 0x376b, 0x3824, 0x2852, 0x3982, -0x3797, 0x36e3, 0x3924, 0x3947, 0x3b36, 0x361e, 0x376b, 0x365b, 0x37e8, 0x329f, 0x3970, 0x3126, 0x3562, 0x3b17, 0x3aca, 0x3602, 0x3b9d, 0x394a, 0x2388, 0x2b85, 0x3a24, 0x3a66, 0x3648, 0x28d2, 0x3b67, 0x38b8, 0x3b15, 0x352c, 0x3b39, 0x3838, 0x388e, 0x3576, 0x39f5, 0x31f9, 0x35a0, 0x3a41, 0x3afa, 0x3513, 0x3688, 0x3b2b, 0x32b6, 0x32de, 0x3949, 0x3b1e, 0x3a1e, 0x280d, 0x38da, 0x388e, 0x316f, 0x38d4, 0x29c5, 0x3637, 0x34af, 0x2d8c, 0x3872, 0x30ac, 0x396e, 0x38bd, 0x39ab, 0x3b69, 0x3120, 0x355f, 0x2e7f, 0x35ab, 0x3821, 0x2b37, 0x3bc5, 0x3a0a, 0x3572, 0x30b5, 0x399e, 0x2a66, 0x31b8, 0x3abc, 0x3754, 0x36a7, 0x3b8b, 0x347d, 0x3b36, 0x3924, 0x2f95, 0x3ba9, 0x2224, 0x34cd, 0x3aaf, 0x3608, 0x34ce, 0x344b, 0x34b5, 0x3bd8, 0x37d3, 0x3757, 0x2c21, 0x3b8f, 0x38d3, 0x3aa4, -0x39c6, 0x381d, 0x3842, 0x3bd1, 0x3092, 0x35d5, 0x251f, 0x2529, 0x3133, 0x3862, 0x3444, 0x3519, 0x3b60, 0x2fb5, 0x38c7, 0x387e, 0x3138, 0x36a9, 0x353c, 0x3411, 0x3bd3, 0x2a07, 0x3a5c, 0x3826, 0x3228, 0x334d, 0x2f07, 0x2c6a, 0x3b43, 0x3425, 0x3568, 0x382a, 0x348c, 0x3b5f, 0x3745, 0x2ae7, 0x3772, 0x302b, 0x336a, 0x383a, 0x3361, 0x3110, 0x3684, 0x39d1, 0x3151, 0x34f1, 0x295b, 0x26ba, 0x3b1b, 0x38d5, 0x36b1, 0x3069, 0x3bfa, 0x385f, 0x3695, 0x3b50, 0x3be0, 0x3741, 0x3af4, 0x2cd1, 0x3862, 0x352d, 0x3b8d, 0x3800, 0x3868, 0x3931, 0x37f8, 0x3ad0, 0x341d, 0x3507, 0x3602, 0x3831, 0x393b, 0x3695, 0x380e, 0x383f, 0x38de, 0x3954, 0x38b3, 0x20be, 0x2428, 0x2e52, 0x3b5b, 0x20ea, 0x3aa9, 0x3430, 0x3aac, 0x393b, 0x32e7, 0x2d58, 0x366e, 0x32f5, 0x3990, 0x3b9d, 0x2f4c, 0x3420, -0x38d5, 0x31e4, 0x2c0e, 0x3742, 0x3bc0, 0x30f9, 0x3656, 0x3aaa, 0x385e, 0x3908, 0x3584, 0x2814, 0x3891, 0x3553, 0x391c, 0x3330, 0x38e5, 0x1aaf, 0x3be5, 0x3ac7, 0x3936, 0x3bf5, 0x361f, 0x39b3, 0x38c1, 0x394a, 0x39e1, 0x2b67, 0x3585, 0x380e, 0x3344, 0x3001, 0x3983, 0x31ec, 0x3ac2, 0x380a, 0x32c2, 0x34aa, 0x393d, 0x364d, 0x239a, 0x3727, 0x3b5c, 0x3265, 0x2d1f, 0x32dd, 0x3ae3, 0x36a0, 0x3600, 0x38f3, 0x378a, 0x357c, 0x34dd, 0x39a9, 0x3846, 0x2431, 0x3abe, 0x36fa, 0x38bd, 0x3696, 0x2c2e, 0x229d, 0x386f, 0x3a8b, 0x3aa4, 0x34f4, 0x35af, 0x34c1, 0x2222, 0x1820, 0x3a30, 0x38ec, 0x3855, 0x3952, 0x3873, 0x384b, 0x3bb1, 0x35aa, 0x363a, 0x380e, 0x3b3d, 0x397a, 0x38ca, 0x3a88, 0x35de, 0x3bac, 0x3ab4, 0x3654, 0x38f3, 0x2076, 0x3585, 0x300a, 0x3a71, 0x3b90, 0x3a83, 0x3a86, -0x3ab7, 0x3bee, 0x37bd, 0x3b2c, 0x39fb, 0x274a, 0x3a7d, 0x38df, 0x2a8d, 0x3611, 0x34b4, 0x38e4, 0x36f8, 0x3b2a, 0x364b, 0x3ac3, 0x2d73, 0x38e3, 0x2fcd, 0x3af3, 0x359e, 0x3afd, 0x3b13, 0x3a89, 0x379e, 0x35d5, 0x30bc, 0x34ae, 0x3a6a, 0x312e, 0x293a, 0x39df, 0x3a97, 0x39db, 0x3b98, 0x3818, 0x344f, 0x26c9, 0x3a30, 0x3505, 0x3885, 0x3206, 0x38e4, 0x3940, 0x3a5d, 0x3aab, 0x35e7, 0x3458, 0x381d, 0x3959, 0x3930, 0x3476, 0x348f, 0x3469, 0x2e03, 0x3889, 0x3ba1, 0x35ac, 0x3ac1, 0x3bcb, 0x3acc, 0x34d7, 0x38bd, 0x2b4c, 0x21ff, 0x3802, 0x34a4, 0x36f9, 0x352f, 0x394e, 0x3796, 0x2456, 0x38c8, 0x302d, 0x2de8, 0x3539, 0x39e8, 0x3560, 0x3913, 0x3bbf, 0x331a, 0x3969, 0x3a9e, 0x3972, 0x3a32, 0x3a15, 0x386f, 0x3a17, 0x3956, 0x39c3, 0x3762, 0x3b51, 0x32af, 0x3b58, 0x34ff, 0x319d, -0x3431, 0x34fc, 0x3a81, 0x3ada, 0x39e6, 0x3a49, 0x33ad, 0x38c8, 0x33cb, 0x3576, 0x3aaf, 0x34ee, 0x2e14, 0x38d0, 0x39c1, 0x29cb, 0x3112, 0x3593, 0x2f07, 0x2fa0, 0x34c0, 0x366e, 0x3998, 0x3540, 0x37c6, 0x39b7, 0x396d, 0x3319, 0x341e, 0x354a, 0x3773, 0x2c1c, 0x3bfc, 0x381b, 0x3529, 0x37f8, 0x3bbd, 0x37a2, 0x36f1, 0x3870, 0x3a69, 0x3494, 0x3169, 0x3455, 0x356f, 0x32e7, 0x35c0, 0x398e, 0x2c2f, 0x2ffe, 0x3140, 0x39ff, 0x3aae, 0x3bb7, 0x35b8, 0x39b2, 0x3303, 0x3948, 0x3a7f, 0x25f7, 0x3750, 0x357e, 0x3785, 0x3817, 0x3b05, 0x3a90, 0x38ad, 0x376f, 0x3ac5, 0x3a07, 0x3311, 0x3b9b, 0x24d1, 0x3451, 0x32a6, 0x342c, 0x3a8c, 0x360a, 0x36ad, 0x3abf, 0x2116, 0x3bb1, 0x328b, 0x37a9, 0x3aab, 0x39c9, 0x345e, 0x36b0, 0x384c, 0x3bfb, 0x2d31, 0x3a05, 0x3427, 0x3726, 0x3743, 0x3398, -0x3b0a, 0x3b85, 0x33ed, 0x32b0, 0x3a95, 0x2135, 0x3712, 0x2f34, 0x378e, 0x390f, 0x39b1, 0x2ad2, 0x300a, 0x34ec, 0x3a00, 0x20f8, 0x3b47, 0x3861, 0x341d, 0x3015, 0x3959, 0x37c9, 0x2f6c, 0x3758, 0x37e5, 0x353b, 0x38da, 0x39ae, 0x3947, 0x36d7, 0x3284, 0x3bb9, 0x357f, 0x3999, 0x39c2, 0x3889, 0x38b7, 0x3684, 0x355e, 0x390d, 0x3b96, 0x385c, 0x3ba5, 0x36c0, 0x3bbc, 0x37fc, 0x391c, 0x3a42, 0x39ca, 0x34ae, 0x394c, 0x3271, 0x2cd6, 0x343b, 0x2d7b, 0x2eea, 0x38a3, 0x2ca6, 0x3549, 0x3847, 0x3bcb, 0x3adc, 0x2e68, 0x3809, 0x3930, 0x357b, 0x3b89, 0x3b94, 0x3875, 0x3640, 0x387c, 0x376c, 0x33b9, 0x3b7e, 0x384c, 0x3906, 0x3b91, 0x209d, 0x2c43, 0x32cf, 0x3686, 0x310c, 0x3a7a, 0x38ef, 0x3645, 0x354a, 0x3670, 0x3732, 0x37b9, 0x3928, 0x358d, 0x3893, 0x3602, 0x2e3d, 0x2a22, 0x2f70, -0x34c9, 0x38f4, 0x374e, 0x3828, 0x37ff, 0x3723, 0x35b4, 0x34b7, 0x3b94, 0x265a, 0x3658, 0x3938, 0x38f5, 0x3bb9, 0x3960, 0x3b5c, 0x38d3, 0x31ea, 0x3412, 0x3be3, 0x3b95, 0x3a20, 0x353b, 0x39c5, 0x3291, 0x387d, 0x3af8, 0x3915, 0x3af7, 0x3be4, 0x399c, 0x34e5, 0x324b, 0x3838, 0x3914, 0x385e, 0x38cd, 0x39fd, 0x39a0, 0x3495, 0x38a1, 0x382c, 0x2ed2, 0x3866, 0x33d8, 0x3396, 0x3b0c, 0x39c8, 0x314f, 0x346f, 0x3aee, 0x313e, 0x39b8, 0x34fe, 0x3882, 0x36d2, 0x3a8b, 0x3a8e, 0x3ae4, 0x3b31, 0x30da, 0x34e8, 0x38ce, 0x3643, 0x39b6, 0x34fb, 0x38d7, 0x3bde, 0x3ac9, 0x3af2, 0x38fe, 0x275f, 0x3748, 0x30ee, 0x3010, 0x3b23, 0x3a55, 0x3a43, 0x3a23, 0x37eb, 0x38fa, 0x3335, 0x3996, 0x39a0, 0x360f, 0x2630, 0x39f3, 0x3870, 0x383c, 0x384c, 0x3392, 0x3754, 0x3b4f, 0x3bc1, 0x382f, 0x3802, -0x3bb0, 0x36ad, 0x3a3f, 0x389e, 0x2d0c, 0x34b1, 0x3592, 0x3933, 0x25f1, 0x3ac7, 0x308e, 0x36b7, 0x3ab0, 0x2994, 0x38e4, 0x3689, 0x3c00, 0x3441, 0x30f6, 0x3a71, 0x3b19, 0x394e, 0x3826, 0x19a6, 0x3b2a, 0x3594, 0x3893, 0x34af, 0x3b34, 0x3ab3, 0x37e9, 0x3ba1, 0x3b01, 0x29ca, 0x3715, 0x3643, 0x312e, 0x3289, 0x311d, 0x383e, 0x38dc, 0x33a1, 0x384d, 0x3ba6, 0x3982, 0x34a7, 0x3b20, 0x3728, 0x3add, 0x2f89, 0x377b, 0x3a2d, 0x342e, 0x36e5, 0x3aa2, 0x3864, 0x38fe, 0x2d84, 0x3bef, 0x3bcd, 0x3553, 0x3953, 0x37be, 0x394a, 0x3a5f, 0x1d30, 0x3bfb, 0x3737, 0x3aa1, 0x3b6e, 0x3809, 0x3b5f, 0x389b, 0x3905, 0x3b29, 0x387d, 0x3afc, 0x3807, 0x3881, 0x3a2c, 0x37d5, 0x3a76, 0x35c4, 0x39ec, 0x3abf, 0x36ed, 0x3135, 0x381e, 0x3593, 0x3968, 0x2d97, 0x350c, 0x3a61, 0x3550, 0x2bde, 0x3400, -0x35ed, 0x34e7, 0x3846, 0x2e9e, 0x3afd, 0x3658, 0x36c2, 0x3863, 0x30b9, 0x350a, 0x3a30, 0x34cd, 0x3b2c, 0x3061, 0x3bc4, 0x2e78, 0x3475, 0x388a, 0x3678, 0x30c5, 0x38f2, 0x3807, 0x311d, 0x3aad, 0x3804, 0x3a1b, 0x38bf, 0x2c7f, 0x3be8, 0x3523, 0x32d3, 0x3a33, 0x38f1, 0x34af, 0x3797, 0x32e6, 0x3886, 0x33e8, 0x3a63, 0x34d3, 0x3618, 0x3571, 0x3abb, 0x3a0d, 0x39d4, 0x361c, 0x3b81, 0x3598, 0x301d, 0x390a, 0x2876, 0x39db, 0x344c, 0x3518, 0x3825, 0x33a5, 0x392b, 0x3671, 0x39a6, 0x3320, 0x3a67, 0x3447, 0x3a75, 0x34c7, 0x3ba8, 0x3108, 0x394f, 0x3986, 0x2c4d, 0x3856, 0x3b1c, 0x3343, 0x399d, 0x3a25, 0x2f68, 0x3be3, 0x3131, 0x349d, 0x39b0, 0x32d3, 0x305c, 0x3b49, 0x2e61, 0x36e1, 0x3a0c, 0x36cb, 0x3b96, 0x3648, 0x36a2, 0x3879, 0x387f, 0x3aa3, 0x2ac5, 0x30d8, 0x3424, 0x2bc4, -0x39b8, 0x38d0, 0x3bd2, 0x311b, 0x2cff, 0x2e9c, 0x3908, 0x39d9, 0x3628, 0x3c00, 0x39b7, 0x3a20, 0x3a6d, 0x3909, 0x37c2, 0x2c06, 0x3a29, 0x374d, 0x30c7, 0x3204, 0x392c, 0x3af6, 0x30de, 0x35ec, 0x3b48, 0x3b34, 0x38ec, 0x3b9f, 0x3625, 0x1a62, 0x3681, 0x2cbc, 0x39e6, 0x348b, 0x3726, 0x38d1, 0x35df, 0x382b, 0x3bc9, 0x39e9, 0x3a7b, 0x32df, 0x22ec, 0x35fa, 0x3a1d, 0x3b56, 0x37d2, 0x35af, 0x3bb3, 0x35bf, 0x38f2, 0x3090, 0x3163, 0x2ce6, 0x39a1, 0x3aa2, 0x38d3, 0x398d, 0x3a80, 0x35ff, 0x33e6, 0x3a00, 0x35a3, 0x3a52, 0x3175, 0x337b, 0x39c7, 0x399c, 0x3873, 0x390a, 0x39f9, 0x3766, 0x33d1, 0x38fe, 0x3a2b, 0x37ec, 0x39f9, 0x3980, 0x3ac0, 0x309f, 0x3313, 0x3897, 0x34a5, 0x36fb, 0x3725, 0x3a71, 0x3553, 0x3b09, 0x36ad, 0x3923, 0x3bdd, 0x3b9e, 0x2960, 0x3a59, 0x3a20, 0x375d, -0x39b6, 0x31e6, 0x34bc, 0x391e, 0x38cd, 0xca5, 0x360c, 0x35e6, 0x35b5, 0x3be9, 0x3be4, 0x3bea, 0x3741, 0x302e, 0x3557, 0x3bb1, 0x3be4, 0x342c, 0x350c, 0x352b, 0x3825, 0x3b05, 0x309d, 0x38f8, 0x3be3, 0x2d5d, 0x399a, 0x36b9, 0x3924, 0x3936, 0x3a45, 0x3a8f, 0x3853, 0x38a9, 0x381b, 0x3a9a, 0x393e, 0x31df, 0x3855, 0x38da, 0x37c6, 0x3bd8, 0x34fb, 0x2e5f, 0x3450, 0x304e, 0x3990, 0x29e1, 0x373c, 0x39a5, 0x3a5e, 0x3356, 0x2c13, 0x34a0, 0x3185, 0x3a8a, 0x3672, 0x2ee4, 0x2dbc, 0x22ae, 0x3a88, 0x388c, 0x30ce, 0x384d, 0x3453, 0x3ad0, 0x2e7f, 0x367a, 0x34c5, 0x39d6, 0x35de, 0x39fc, 0x3aa8, 0x3667, 0x3bb9, 0x35e7, 0x38c7, 0x2c83, 0x35a3, 0x35d7, 0x1a7c, 0x393e, 0x3588, 0x39dd, 0x3af3, 0x3965, 0x365b, 0x3a7e, 0x38ed, 0x3990, 0x3786, 0x3b07, 0x350e, 0x38b7, 0x357f, 0x3bb6, -0x2de9, 0x2ef1, 0x2cc9, 0x38a5, 0x347b, 0x310a, 0x351d, 0x3a9b, 0x3a68, 0x2228, 0x35d3, 0x338d, 0x3a3a, 0x24ec, 0x3ad0, 0x385a, 0x1c64, 0x39f9, 0x335e, 0x348c, 0x211e, 0x37d4, 0x353b, 0x3290, 0x3b68, 0x2f75, 0x2ff5, 0x3579, 0x3967, 0x3b5a, 0x3982, 0x3950, 0x35e9, 0x3a85, 0x3be5, 0x3252, 0x359b, 0x3799, 0x38ec, 0x3a0e, 0x3a45, 0x2d8e, 0x389d, 0x34d6, 0x3726, 0x3320, 0x3acd, 0x3642, 0x2574, 0x314a, 0x32a5, 0x3898, 0x370a, 0x3941, 0x340a, 0x2e05, 0x28b8, 0x39ad, 0x392e, 0x3821, 0x38d7, 0x3b07, 0x3485, 0x34d1, 0x399c, 0x1844, 0x2c8f, 0x3964, 0x3b56, 0x2dde, 0x2ede, 0x317b, 0x3a44, 0x3901, 0x3844, 0x382e, 0x29e6, 0x35ad, 0x3913, 0x3430, 0x3604, 0x3a5f, 0x3080, 0x3628, 0x3383, 0x3b3d, 0x385a, 0x38e8, 0x3ade, 0x3af3, 0x3a56, 0x3889, 0x2cf5, 0x3a61, 0x3b6a, 0x3b38, -0x2e45, 0x3736, 0x3743, 0x3680, 0x328f, 0x3a88, 0x39bb, 0x36a0, 0x3957, 0x2f27, 0x3a33, 0x3a9e, 0x3a9e, 0x2e09, 0x3154, 0x37b7, 0x3807, 0x3937, 0x390b, 0x3041, 0x3758, 0x39cf, 0x2e66, 0x2bc5, 0x3461, 0x3897, 0x39fd, 0x3b92, 0x36e3, 0x3a20, 0x3a8d, 0x335b, 0x3be1, 0x383d, 0x38ab, 0x3665, 0x3588, 0x3a4b, 0x33d5, 0x341b, 0x3806, 0x38fd, 0x382e, 0x32c1, 0x38d9, 0x2ccb, 0x292d, 0x380f, 0x35a2, 0x3b6e, 0x34af, 0x3889, 0x3109, 0x3480, 0x34bf, 0x3a56, 0x3163, 0x33fa, 0x345a, 0x39bb, 0x3b6e, 0x3a80, 0x36f6, 0x33c8, 0x3b98, 0x3663, 0x3aaf, 0x3926, 0x3a2d, 0x3a11, 0x33ac, 0x37a0, 0x3986, 0x3374, 0x3667, 0x3482, 0x378a, 0x2a39, 0x3535, 0x34f3, 0x3783, 0x36a7, 0x3606, 0x3843, 0x3acb, 0x2dcc, 0x3961, 0x34ed, 0x3890, 0x38e5, 0x3a7c, 0x384c, 0x39bf, 0x3a6b, 0x34a0, 0x361b, -0x2e5e, 0x3650, 0x3417, 0x36e5, 0x3b4c, 0x3892, 0x38ba, 0x32f3, 0x3b80, 0x39ea, 0x3357, 0x3212, 0x3b42, 0x3622, 0x3c00, 0x34c0, 0x38e0, 0x360c, 0x36bc, 0x34b0, 0x3b53, 0x2587, 0x387e, 0x3966, 0x3800, 0x35e2, 0x3917, 0x3be4, 0x378f, 0x2d21, 0x3415, 0x2ea8, 0x34d0, 0x36ac, 0x3a51, 0x3ba5, 0x3b7e, 0x2d48, 0x39c1, 0x30d5, 0x3244, 0x3894, 0x3aaa, 0x3451, 0x3a9f, 0x2e40, 0x3832, 0x35f6, 0x3429, 0x253c, 0x2c2e, 0x3bd6, 0x3a5c, 0x3622, 0x3155, 0x3a50, 0x313f, 0x31dc, 0x3b9d, 0x2d67, 0x3914, 0x38f5, 0x3ab6, 0x3bd3, 0x3754, 0x3683, 0x32b0, 0x31dd, 0x3911, 0x37c2, 0x2b09, 0x33b7, 0x3b7c, 0x344a, 0x2a7c, 0x3350, 0x3792, 0x36ea, 0x3463, 0x3a87, 0x29be, 0x3a23, 0x390d, 0x3b10, 0x381d, 0x3227, 0x38f4, 0x39bc, 0x3a71, 0x375d, 0x349d, 0x271c, 0x3921, 0x2e0a, 0x3b08, 0x3ba3, -0x3a92, 0x3923, 0x3012, 0x3527, 0x2ba3, 0x3aa1, 0x3ba3, 0x349a, 0x3729, 0x393a, 0x2ea9, 0x398a, 0x38a5, 0x3ad5, 0x38e6, 0x3a7b, 0x3783, 0x3822, 0x371a, 0x3247, 0x3af0, 0x3ac9, 0x35f6, 0x39d5, 0x39c3, 0x39bc, 0x3a9e, 0x39a8, 0x3af5, 0x3a01, 0x39ab, 0x35f6, 0x392e, 0x3bca, 0x2f53, 0x3595, 0x34c6, 0x3a96, 0x396f, 0x3515, 0x39c5, 0x37b3, 0x37c4, 0x2f64, 0x37ed, 0x3013, 0x3939, 0x3be7, 0x3a5e, 0x3526, 0x3a32, 0x3a8c, 0x334e, 0x39d6, 0x3b45, 0x395d, 0x3500, 0x375f, 0x2498, 0x3ad9, 0x3a04, 0x3961, 0x3a1e, 0x38cb, 0x383d, 0x35c3, 0x37ec, 0x38ab, 0x3aca, 0x29aa, 0x3480, 0x374c, 0x35d1, 0x33cc, 0x387a, 0x3544, 0x367d, 0x3259, 0x306b, 0x39c9, 0x323b, 0x3a58, 0x3156, 0x353d, 0x323a, 0x2987, 0x31ff, 0x3998, 0x311c, 0x38d0, 0x3a03, 0x38cc, 0x35b5, 0x398b, 0x3a0c, 0x3a96, -0x3ab6, 0x3a1c, 0x3a48, 0x3974, 0x3815, 0x368a, 0x36d5, 0x37aa, 0x345b, 0x3bd3, 0x3b1f, 0x3167, 0x2ecf, 0x3a80, 0x3636, 0x3a8e, 0x39d3, 0x3a1a, 0x3087, 0x3823, 0x3b9c, 0x3969, 0x2fb9, 0x3bb8, 0x39c5, 0x3991, 0x3392, 0x38f2, 0x3939, 0x2c68, 0x3b0a, 0x383a, 0x3bd7, 0x3a74, 0x3956, 0x3465, 0x39f3, 0x3880, 0x39bc, 0x39c5, 0x35e4, 0x3738, 0x3856, 0x399b, 0x3bda, 0x3366, 0x31a0, 0x3868, 0x3aa3, 0x38bd, 0x305a, 0x3743, 0x3a85, 0x2336, 0x39eb, 0x2d06, 0x37df, 0x3852, 0x3b46, 0x302c, 0x3a1e, 0x3b46, 0x3068, 0x3bd6, 0x381d, 0x31f6, 0x3491, 0x3848, 0x3315, 0x38c7, 0x3600, 0x3b9d, 0x38b2, 0x3977, 0x388c, 0x3ac2, 0x37ee, 0x35c4, 0x3b45, 0x374a, 0x3355, 0x1dbb, 0x38ec, 0x3003, 0x3a97, 0x311f, 0x3749, 0x2b59, 0x3842, 0x34a9, 0x3561, 0x3b07, 0x3a4a, 0x292f, 0x3961, 0x3546, -0x35dd, 0x3966, 0x2c7d, 0x3833, 0x285f, 0x20f2, 0x3a12, 0x392b, 0x2bae, 0x2fa6, 0x3a36, 0x303c, 0x3303, 0x2bc6, 0x3b94, 0x3a0e, 0x3ae2, 0x3a3c, 0x315c, 0x37bb, 0x3452, 0x3267, 0x2731, 0x3985, 0x3bcf, 0x397e, 0x2fae, 0x28b1, 0x39cc, 0x3536, 0x37a1, 0x3aa3, 0x396b, 0x2c59, 0x3bbf, 0x303c, 0x3bcf, 0x3a8e, 0x3afc, 0x3ab1, 0x2943, 0x3a17, 0x3552, 0x2f57, 0x3353, 0x3512, 0x2e78, 0x3b53, 0x388e, 0x399c, 0x336e, 0x38d4, 0x3849, 0x32b1, 0x316a, 0x2877, 0x2feb, 0x35b9, 0x375d, 0x29fa, 0x3ad2, 0x3569, 0x3981, 0x3455, 0x3847, 0x3a81, 0x3514, 0x29d0, 0x3137, 0x39ba, 0x3b1a, 0x2dd4, 0x383f, 0x39f7, 0x37f6, 0x3964, 0x371c, 0x39e4, 0x3136, 0x35da, 0x3b2f, 0x3946, 0x36dd, 0x3801, 0x3927, 0x2614, 0x2ca7, 0x39ae, 0x3401, 0x3242, 0x3a91, 0x3a1d, 0x3790, 0x333f, 0x3bb9, 0x3a1d, -0x3be5, 0x39e1, 0x35f3, 0x38fd, 0x3726, 0x3946, 0x3baf, 0x3a2f, 0x15e0, 0x318b, 0x359c, 0x2fbf, 0x3060, 0x3a09, 0x35c9, 0x39e2, 0x317e, 0x25ec, 0x3546, 0x3254, 0x36e9, 0x374c, 0x35c0, 0x3787, 0x3b82, 0x3727, 0x34a8, 0x3820, 0x3aee, 0x3814, 0x33da, 0x357f, 0x2f56, 0x3231, 0x3ba0, 0x35e4, 0x3998, 0x3609, 0x3979, 0x3311, 0x33e8, 0x39bd, 0x39f0, 0x3a32, 0x31dc, 0x3aee, 0x310e, 0x3843, 0x38c1, 0x382a, 0x382f, 0x3b24, 0x335c, 0x383b, 0x24f4, 0x371c, 0x3162, 0x2dce, 0x3ae6, 0x2d1e, 0x3a20, 0x39e9, 0x39c5, 0x219a, 0x37d4, 0x34fe, 0x14f6, 0x2e13, 0x3949, 0x3b98, 0x3a42, 0x3aee, 0x298f, 0x3740, 0x28e0, 0x3854, 0x3925, 0x3951, 0x3426, 0x3b4a, 0x3043, 0x345d, 0x3aec, 0x3b89, 0x378c, 0x355a, 0x3287, 0x340c, 0x35fb, 0x2f7d, 0x3839, 0x383a, 0x3a66, 0x388c, 0x36b3, 0x3908, -0x3323, 0x35b2, 0x3823, 0x3ad3, 0x3b52, 0x3634, 0x3a70, 0x3b37, 0x2d59, 0x3893, 0x3978, 0x3515, 0x2733, 0x399b, 0x3a86, 0x3b9c, 0x3582, 0x38e0, 0x389d, 0x3b34, 0x2d41, 0x31d7, 0x2db9, 0x3474, 0x35f6, 0x38fa, 0x3296, 0x3a85, 0x3102, 0x3129, 0x38e1, 0x39d4, 0x36ec, 0x2fea, 0x3a44, 0x3393, 0x39e0, 0x3613, 0x3bc1, 0x3145, 0x23d7, 0x3a17, 0x3515, 0x3845, 0x38f7, 0x33ee, 0x3b6f, 0x38f9, 0x38c7, 0x3489, 0x352b, 0x3b74, 0x39ab, 0x32e2, 0x37be, 0x38e6, 0x34e1, 0x31a5, 0x3be8, 0x2b0f, 0x3b16, 0x3a43, 0x3ae7, 0x39a2, 0x36a2, 0x33a5, 0x3160, 0x33c8, 0x30de, 0x38d9, 0x33f6, 0x35b0, 0x2982, 0x38e6, 0x3ae7, 0x3bca, 0x3911, 0x397b, 0x3596, 0x3790, 0x38eb, 0x3aa2, 0x38f6, 0x381f, 0x398e, 0x343b, 0x39ef, 0x39a3, 0x35f2, 0x2c2c, 0x39e2, 0x3b7f, 0x3858, 0x3b83, 0x3b02, 0x33df, -0x379c, 0x3ae9, 0x340b, 0x368f, 0x3a50, 0x38a6, 0x3aa2, 0x3bd6, 0x3855, 0x3841, 0x3410, 0x348d, 0x3625, 0x38a0, 0x3bdc, 0x34e3, 0x38f6, 0x3274, 0x3a03, 0x3adc, 0x35df, 0x39f5, 0x38b4, 0x38cc, 0x384d, 0x394f, 0x3597, 0x3a9c, 0x3767, 0x3b65, 0x39f5, 0x3857, 0x38c2, 0x3b12, 0x3580, 0x32b0, 0x3595, 0x3723, 0x3b92, 0x347f, 0x3526, 0x377d, 0x35c3, 0x354b, 0x3651, 0x3ae9, 0x38c7, 0x3bc0, 0x30d2, 0x395a, 0x34f2, 0x370d, 0x3748, 0x35fb, 0x3401, 0x34e8, 0x3931, 0x3a34, 0x381e, 0x3886, 0x3afc, 0x3bbc, 0x3af0, 0x3a9c, 0x3a5b, 0x34ef, 0x3979, 0x3ab0, 0x31f2, 0x34f8, 0x1c09, 0x3a9c, 0x36a0, 0x3af7, 0x3b87, 0x3745, 0x39b8, 0x3582, 0x3be2, 0x3bd6, 0x373f, 0x3552, 0x31c1, 0x3a29, 0x2f37, 0x363b, 0x3a9d, 0x39ee, 0x3aa7, 0x3a03, 0x3551, 0x39ce, 0x3a95, 0x3894, 0x32d1, 0x36f2, -0x385b, 0x342c, 0x3643, 0x3be4, 0x3b88, 0x3b64, 0x3975, 0x3142, 0x3583, 0x2f10, 0x34bb, 0x3b4d, 0x3924, 0x2609, 0x3929, 0x274b, 0x3476, 0x3bfd, 0x3abd, 0x3874, 0x33cf, 0x3756, 0x3820, 0x31a3, 0x35dd, 0x39a3, 0x3359, 0x397e, 0x3a12, 0x3ad6, 0x3a25, 0x38ab, 0x392c, 0x3bca, 0x38a9, 0x2f91, 0x381c, 0x29fb, 0x390e, 0x34f7, 0x3a14, 0x39fa, 0x3104, 0x3488, 0x326e, 0x3593, 0x3b50, 0x2e3d, 0x3423, 0x3919, 0x38db, 0x308b, 0x3883, 0x3ba9, 0x38e2, 0x3b74, 0x2b9d, 0x303d, 0x35ef, 0x29a3, 0x364d, 0x2fb5, 0x3991, 0x3a6a, 0x3bf5, 0x391f, 0x373f, 0x3a0a, 0x3a6f, 0x3ad6, 0x35ba, 0x3889, 0x3982, 0x3b8b, 0x3a43, 0x3bfb, 0x3355, 0x3591, 0x39de, 0x34b8, 0x3b76, 0x2a30, 0x30cc, 0x33d3, 0x2f46, 0x380e, 0x3b6e, 0x3576, 0x388b, 0x3b42, 0x35de, 0x39ab, 0x32f3, 0x35dc, 0x3594, 0x3184, -0x3b0c, 0x3478, 0x3b70, 0x389e, 0x3a28, 0x3bf3, 0x3350, 0x35fc, 0x396f, 0x3a40, 0x3242, 0x3a86, 0x3bd1, 0x314b, 0x2e15, 0x394f, 0x391b, 0x3763, 0x31e4, 0x3908, 0x3b48, 0x39e5, 0x3aca, 0x3a5b, 0x3626, 0x37fa, 0x381c, 0x3867, 0x342c, 0x3842, 0x3b77, 0x3ad7, 0x39a8, 0x3867, 0x3b9c, 0x3938, 0x3969, 0x2f52, 0x3a11, 0x3982, 0x3963, 0x3873, 0x3278, 0x3193, 0x369e, 0x3848, 0x3a63, 0x399a, 0x3ba0, 0x39c1, 0x3987, 0x3595, 0x2993, 0x3517, 0x31f2, 0x35a9, 0x3628, 0x3a6b, 0x3bf2, 0x3a75, 0x3129, 0x3460, 0x38d0, 0x370e, 0x3a52, 0x381a, 0x3b57, 0x388c, 0x3a87, 0x2c5a, 0x3ac9, 0x3686, 0x2023, 0x2fcb, 0x2845, 0x36f2, 0x3ac6, 0x2f91, 0x2a3b, 0x37bc, 0x3865, 0x3b91, 0x3887, 0x3b8b, 0x2edc, 0x38e1, 0x3465, 0x348f, 0x3bfb, 0x393a, 0x3b42, 0x394e, 0x2f39, 0x364b, 0x37a7, 0x3b51, -0x3810, 0x35e7, 0x388f, 0x38fc, 0x3740, 0x322e, 0x2f12, 0x39d5, 0x3834, 0x366f, 0x2c74, 0x35da, 0x3901, 0x39c1, 0x39f1, 0x381a, 0xc05, 0x3541, 0x39d3, 0x326a, 0x3993, 0x3ba8, 0x3bc9, 0x3b2b, 0x390d, 0x3a4b, 0x38db, 0x39a7, 0x3043, 0x345e, 0x2e17, 0x2cd7, 0x38ba, 0x3a26, 0x3a7d, 0x385b, 0x3a40, 0x25b0, 0x3ba4, 0x3b75, 0x30f9, 0x3508, 0x3885, 0x375d, 0x3acf, 0x36fb, 0x334b, 0x3a92, 0x3bbd, 0x3b15, 0x392e, 0x3b14, 0x33b3, 0x3ac3, 0x39f8, 0x35ae, 0x391d, 0x3b24, 0x316a, 0x30e9, 0x3813, 0x3736, 0x3b34, 0x2db4, 0x395a, 0x37ac, 0x3a01, 0x3671, 0x37af, 0x368a, 0x2de1, 0x3a69, 0x3416, 0x3294, 0x344d, 0x393e, 0x399f, 0x1d48, 0x38db, 0x3b08, 0x3944, 0x3a99, 0x39d5, 0x35fb, 0x2828, 0x3a19, 0x38b3, 0x3209, 0x3660, 0x38fa, 0x3a01, 0x3ba5, 0x322e, 0x3048, 0x3bb1, 0x3be6, -0x3b6f, 0x327c, 0x3932, 0x3721, 0x39b5, 0x28b8, 0x3b6d, 0x3a9e, 0x393c, 0x35e6, 0x3b4d, 0x2515, 0x2921, 0x395a, 0x3762, 0x34c7, 0x38ed, 0x3b61, 0x35ab, 0x2d3c, 0x3132, 0x35ef, 0x37e1, 0x37cf, 0x383c, 0x3b5e, 0x3a9d, 0x39af, 0x362e, 0x3b02, 0x3a85, 0x3ad0, 0x3739, 0x38f9, 0x3a16, 0x30e5, 0x3b92, 0x39b6, 0x39c4, 0x3b4d, 0x30c6, 0x35c6, 0x3513, 0x2e7a, 0x32a9, 0x346a, 0x359a, 0x3ae2, 0x3a27, 0x3b87, 0x3934, 0x358e, 0x33cd, 0x37a7, 0x3bbb, 0x383f, 0x357d, 0x3714, 0x35c1, 0x3540, 0x35ff, 0x39a6, 0x3686, 0x39bd, 0x3906, 0x357b, 0x3b22, 0x3be6, 0x38e3, 0x3876, 0x3954, 0x2c83, 0x3acf, 0x3aef, 0x3a67, 0x3548, 0x38d1, 0x359f, 0x3b59, 0x3b61, 0x39c8, 0x392e, 0x39a6, 0x3a3a, 0x3ad5, 0x3831, 0x39ae, 0x3b0e, 0x3b00, 0x3acf, 0x30e1, 0x3751, 0x2f93, 0x39e5, 0x39c3, 0x3928, -0x2df5, 0x36e5, 0x2605, 0x3827, 0x3566, 0x38b3, 0x3345, 0x3869, 0x38e2, 0x31a5, 0x37cf, 0x3b01, 0x3add, 0x2e7e, 0x3573, 0x2f1a, 0x2d92, 0x3a72, 0x3821, 0x313b, 0x3970, 0x3943, 0x3af1, 0x3aeb, 0x37d8, 0x35c7, 0x38a8, 0x3abb, 0x3893, 0x33a0, 0x3a05, 0x3830, 0x37d5, 0x2708, 0x3685, 0x3907, 0x3a07, 0x39f9, 0x3889, 0x2fd1, 0x38c8, 0x3091, 0x3b6a, 0x3332, 0x35f0, 0x36f0, 0x35ce, 0x3b5e, 0x3927, 0x3bf3, 0x392e, 0x39e6, 0x3703, 0x38c6, 0x37db, 0x364c, 0x3984, 0x2bd1, 0x34b3, 0x3873, 0x332b, 0x38a5, 0x2b51, 0x3a1c, 0x3446, 0x2f6a, 0x3975, 0x2f99, 0x38f4, 0x3849, 0x35f2, 0x3734, 0x38da, 0x38b9, 0x39cb, 0x3a6d, 0x39ea, 0x3160, 0x2fde, 0x3acb, 0x2d2d, 0x325b, 0x3a86, 0x3b66, 0x3a07, 0x361c, 0x394a, 0x2b5d, 0x3a45, 0x2dfa, 0x3505, 0x3263, 0x39e5, 0x3655, 0x32de, 0x3295, -0x38c9, 0x2f7b, 0x2f9e, 0x2d42, 0x3b0c, 0x378c, 0x2dac, 0x22ef, 0x3603, 0x396c, 0x3460, 0x3a7a, 0x3b62, 0x3177, 0x3703, 0x2936, 0x39a0, 0x38e7, 0x3b0d, 0x331e, 0x34cb, 0x39f3, 0x3138, 0x3a4d, 0x35d5, 0x399f, 0x3229, 0x39d3, 0x385c, 0x28ea, 0x3895, 0x3653, 0x3561, 0x3927, 0x35b6, 0x34b7, 0x3983, 0x2d4f, 0x2ad7, 0x3562, 0x324b, 0x29e0, 0x3928, 0x3a3d, 0x3aa2, 0x3128, 0x357a, 0x3a20, 0x3b17, 0x2919, 0x3702, 0x35bd, 0x3578, 0x3a6c, 0x3a68, 0x38e2, 0x3888, 0x38cd, 0x36f9, 0x3164, 0x351b, 0x39c4, 0x219b, 0x301f, 0x31fb, 0x343d, 0x38d5, 0x3900, 0x1dad, 0x3a61, 0x385e, 0x385b, 0x388e, 0x38b1, 0x351e, 0x34dc, 0x35c8, 0x316e, 0x36b7, 0x3beb, 0x3646, 0x2d3d, 0x35ff, 0x33bb, 0x36bf, 0x3adf, 0x3a75, 0x3b1f, 0x3a07, 0x38f1, 0x390a, 0x2e57, 0x27c6, 0x3afa, 0x396a, 0x2d0d, -0x3173, 0x3b83, 0x3ace, 0x3631, 0x3aa6, 0x38b6, 0x37c5, 0x365e, 0x2f2a, 0x3528, 0x3be0, 0x3af3, 0x37e7, 0x3947, 0x292e, 0x3b1b, 0x3959, 0x3082, 0x279b, 0x3a83, 0x3052, 0x3b4e, 0x3948, 0x39e1, 0x3566, 0x38c3, 0x3738, 0x30ee, 0x2731, 0x2ce3, 0x39a0, 0x3b90, 0x36c8, 0x3980, 0x357c, 0x34cf, 0x3a92, 0x3ac1, 0x1fc8, 0x3b89, 0x399c, 0x380f, 0x366e, 0x3767, 0x3650, 0x399b, 0x3413, 0x357b, 0x3610, 0x3a32, 0x3b9e, 0x3ae2, 0x3a84, 0x399b, 0x3ad1, 0x38a6, 0x3a6e, 0x36d4, 0x3bcc, 0x3043, 0x30ad, 0x35c2, 0x3b07, 0x2a03, 0x3658, 0x39ba, 0x3bf3, 0x3b92, 0x38ad, 0x36dc, 0x398e, 0x35ed, 0x3409, 0x3b31, 0x36d5, 0x3221, 0x3b12, 0x3887, 0x38e0, 0x3550, 0x31fa, 0x2f61, 0x3bd0, 0x34b8, 0x3860, 0x30db, 0x3415, 0x3b42, 0x31cb, 0x39c3, 0x3125, 0x3b66, 0x2468, 0x3a27, 0x3b63, 0x3ae5, -0x3809, 0x37a7, 0x39a2, 0x35c1, 0x3baf, 0x3798, 0x3518, 0x3583, 0x3bfc, 0x3bab, 0x3ab0, 0x3822, 0x3589, 0x33b1, 0x33e7, 0x3899, 0x3b93, 0x36bd, 0x3a87, 0x343c, 0x39a1, 0x3a0a, 0x38c6, 0x3b47, 0x3b64, 0x2d7e, 0x3bfd, 0x2d2d, 0x3a8a, 0x306c, 0x3766, 0x340d, 0x38e7, 0x3617, 0x3bd3, 0x398c, 0x3819, 0x3171, 0x36e6, 0x391f, 0x30d4, 0x39d5, 0x31bb, 0x3833, 0x3012, 0x2db1, 0x3aab, 0x3903, 0x3749, 0x379e, 0x3089, 0x2d69, 0x251b, 0x3448, 0x3418, 0x3b4e, 0x37de, 0x38c6, 0x373b, 0x38aa, 0x3968, 0x3b36, 0x3bfe, 0x38c9, 0x3ada, 0x38ba, 0x354e, 0x3a6e, 0x373d, 0x380c, 0x374b, 0x34d2, 0x35fd, 0x3a5d, 0x3a8d, 0x3a14, 0x3abd, 0x346c, 0x3766, 0x3908, 0x3ad3, 0x3a52, 0x341b, 0x2ad8, 0x3abb, 0x3083, 0x2933, 0x3b56, 0x3a33, 0x3753, 0x3529, 0x3bfd, 0x34a1, 0x3229, 0x3be1, 0x3b71, -0x3a9e, 0x3764, 0x35e7, 0x3831, 0x398a, 0x3877, 0x3aec, 0x39f0, 0x3159, 0x389f, 0x38bc, 0x3878, 0x3bc7, 0x3a01, 0x2896, 0x39af, 0x3784, 0x3260, 0x38d9, 0x3bcf, 0x3bfa, 0x3bc3, 0x2b23, 0x387d, 0x2e5b, 0x35a6, 0x3468, 0x3933, 0x2783, 0x37e8, 0x3af2, 0x332e, 0x3b77, 0x3ac3, 0x3514, 0x3bcd, 0x3bd8, 0x372f, 0x3979, 0x3b30, 0x3993, 0x3888, 0x38d5, 0x3a18, 0x3be4, 0x2b5c, 0x2518, 0x3b55, 0x3bbc, 0x3ba0, 0x2f21, 0x33b6, 0x352c, 0x39b3, 0x3bc7, 0x3a59, 0x38ea, 0x3432, 0x3b9b, 0x3b74, 0x3baf, 0x34a2, 0x3457, 0x3593, 0x3967, 0x3879, 0x3b79, 0x3806, 0x30ca, 0x384c, 0x394c, 0x37a7, 0x21ce, 0x3bbc, 0x305c, 0x3b11, 0x3a1a, 0x3a64, 0x2e80, 0x27ac, 0x3635, 0x361d, 0x2d4c, 0x2264, 0x37ba, 0x165c, 0x2ec8, 0x386b, 0x1b60, 0x3992, 0x357f, 0x2b6b, 0x37da, 0x3942, 0x2d77, 0x2f25, -0x34e0, 0x3809, 0x395b, 0x33dd, 0x38af, 0x3546, 0x2f78, 0x3469, 0x3832, 0x34b7, 0x3839, 0x32c0, 0x3676, 0x3b1f, 0x3872, 0x317b, 0x3403, 0x3444, 0x3438, 0x39cb, 0x3102, 0x3a90, 0x381a, 0x2db5, 0x3b1f, 0x3a44, 0x3aff, 0x354f, 0x3578, 0x3921, 0x38b0, 0x301f, 0x2da3, 0x3062, 0x3596, 0x3a07, 0x382a, 0x37bd, 0x3634, 0x34b1, 0x31a5, 0x353f, 0x33ec, 0x3986, 0x37a7, 0x332d, 0x3874, 0x3046, 0x3b5b, 0x3bf8, 0x37a0, 0x3822, 0x36c4, 0x385c, 0x3868, 0x39ec, 0x3959, 0x39cc, 0x382e, 0x2505, 0x3471, 0x358c, 0x3905, 0x395b, 0x312b, 0x3706, 0x2eec, 0x3a2a, 0x3be9, 0x3a96, 0x2932, 0x3a84, 0x38b2, 0x3884, 0x3655, 0x341f, 0x30b6, 0x363a, 0x3a7d, 0x389b, 0x348c, 0x3b98, 0x38cc, 0x3699, 0x373b, 0x3ad9, 0x377b, 0x33b4, 0x8ef, 0x3a4c, 0x39a2, 0x3bbc, 0x3b01, 0x3a46, 0x3b56, 0x38db, -0x29ab, 0x29e8, 0x3830, 0x39d7, 0x38ff, 0x33a2, 0x2ed0, 0x38e9, 0x3bd2, 0x380b, 0x3940, 0x3b79, 0x3477, 0x36f4, 0x38b8, 0x382d, 0x3838, 0x37f7, 0x219f, 0x34ec, 0x3af5, 0x347d, 0x3a0e, 0x352e, 0x39f3, 0x39ae, 0x3624, 0x1a5a, 0x329c, 0x3a57, 0x254a, 0x361b, 0x3554, 0x3a17, 0x3888, 0x34c7, 0x3628, 0x3321, 0x39de, 0x34f1, 0x386f, 0x37ae, 0x3709, 0x3909, 0x3ae3, 0x3a0e, 0x3495, 0x3bb8, 0x363c, 0x3039, 0x37e4, 0x30ff, 0x164f, 0x37aa, 0x3b7d, 0x2c60, 0x3828, 0x36b8, 0x235d, 0x29b9, 0x3917, 0x24db, 0x3946, 0x2e75, 0x359c, 0x35c3, 0x3b91, 0x35b5, 0x341f, 0x3873, 0x343a, 0x326a, 0x215c, 0x34f3, 0x35a9, 0x2efa, 0x29dd, 0x3b37, 0x3594, 0x305f, 0x3b48, 0x3bc9, 0x3957, 0x3bac, 0x3638, 0x369e, 0x3a45, 0x3173, 0x3bad, 0x354c, 0x32d9, 0x38d2, 0x3b97, 0x3409, 0x3871, 0x3ac2, -0x3739, 0x2c5b, 0x3480, 0x3206, 0x2ede, 0x345e, 0x3806, 0x354c, 0x38ac, 0x3404, 0x35b5, 0x2250, 0x3957, 0x3831, 0x37c2, 0x331a, 0x36c9, 0x3b7c, 0x2a94, 0x3b00, 0x3722, 0x38c4, 0x35b9, 0x3b30, 0x3af4, 0x3758, 0x3290, 0x33a6, 0x31fe, 0x3937, 0x3b74, 0x3010, 0x3076, 0x344d, 0x3773, 0x22d7, 0x25f7, 0x2cde, 0x3999, 0x3859, 0x32b9, 0x3985, 0x3a7e, 0x39eb, 0x35f1, 0x3a36, 0x3735, 0x3337, 0x34da, 0x30ca, 0x3a16, 0x3523, 0x3802, 0x3a05, 0x3609, 0x310b, 0x3770, 0x389c, 0x2d46, 0x382e, 0x332f, 0x2d06, 0x39d5, 0x3b65, 0x3a48, 0x3b45, 0x2d13, 0x389d, 0x27e8, 0x34e9, 0x3a4d, 0x2802, 0x3903, 0x3ac4, 0x3bb7, 0x38ab, 0x3a80, 0x3725, 0x2f22, 0x358e, 0x3b17, 0x3a80, 0x39b0, 0x3bdd, 0x3aa6, 0x326d, 0x34d4, 0x2f73, 0x39c3, 0x297f, 0x210c, 0x2713, 0x3887, 0x3aec, 0x3a48, 0x3a58, -0x35dc, 0x2ea9, 0x3576, 0x3b80, 0x34c8, 0x3bfb, 0x3268, 0x336c, 0x3574, 0x3712, 0x349c, 0x3bb4, 0x3875, 0x3be8, 0x3b9f, 0x3436, 0x31e8, 0x3a22, 0x2d06, 0x3222, 0x3b99, 0x37ef, 0x3511, 0x3a6f, 0x36dc, 0x3b58, 0x353a, 0x3985, 0x3938, 0x3b64, 0x2753, 0x21b5, 0x2bb1, 0x3291, 0x3af9, 0x30eb, 0x3819, 0x376e, 0x357f, 0x2d58, 0x398d, 0x3966, 0x3a12, 0x32f5, 0x3b9e, 0x3bac, 0x38e8, 0x37bc, 0x3106, 0x3750, 0x39f4, 0x3bf3, 0x38d4, 0x3b41, 0x3b4e, 0x3722, 0x3536, 0x35b1, 0x3a85, 0x34f8, 0x3bcf, 0x351f, 0x3953, 0x39d4, 0x3abc, 0x3521, 0x389f, 0x2386, 0x350b, 0x3b1d, 0x35a3, 0x359c, 0x3607, 0x3b0a, 0x385b, 0x3927, 0x39f9, 0x3a58, 0x36c7, 0x3030, 0x3ba8, 0x348e, 0x2f3d, 0x3973, 0x3b3c, 0x3a02, 0x3abd, 0x3a2e, 0x28f3, 0x3b9b, 0x348e, 0x396b, 0x3963, 0x39dc, 0x3a38, 0x3b12, -0x3a7c, 0x378c, 0x3a31, 0x3068, 0x3790, 0x24a7, 0x39b5, 0x3629, 0x34a4, 0x3bd4, 0x357b, 0x3bc8, 0x356b, 0x3a00, 0x3776, 0x32ad, 0x3327, 0x2da5, 0x2f3a, 0x366c, 0x25f9, 0x34e3, 0x3b50, 0x25c1, 0x33c4, 0x3822, 0x34d7, 0x3bed, 0x3a05, 0x3bab, 0x37e9, 0x37fe, 0x3a3c, 0x380d, 0x369f, 0x3b86, 0x2460, 0x39aa, 0x38e7, 0x388b, 0x1e16, 0x2f0c, 0x39a6, 0x3a99, 0x39b7, 0x35b2, 0x3221, 0x3618, 0x3a08, 0x37fc, 0x3481, 0x3ba6, 0x3408, 0x3415, 0x3adf, 0x3b77, 0x19f6, 0x328c, 0x3830, 0x3996, 0x3afb, 0x3528, 0x37e6, 0x39e1, 0x380b, 0x35bc, 0x3b6c, 0x3a1f, 0x385b, 0x34c9, 0x3b7c, 0x35f5, 0x258c, 0x39ec, 0x30f8, 0x322d, 0x3b8a, 0x3159, 0x399f, 0x2f24, 0x346a, 0x3738, 0x39cb, 0x3949, 0x3a2e, 0x3b54, 0x3adf, 0x3b62, 0x3ab1, 0x316d, 0x3aa6, 0x2ec2, 0x38f8, 0x2b3b, 0x2861, 0x3026, -0x2a43, 0x3b6a, 0x3a73, 0x31d4, 0x352e, 0x3461, 0x345c, 0x34f2, 0x2c0e, 0x38b3, 0x2e79, 0x3ba2, 0x2c1e, 0x3314, 0x371a, 0x3973, 0x2f6f, 0x3a7b, 0x3031, 0x39f1, 0x3b78, 0x381b, 0x2d2b, 0x38a6, 0x3864, 0x3a6b, 0x3045, 0x3731, 0x2d60, 0x382b, 0x31e4, 0x3985, 0x3bce, 0x34fe, 0x39f0, 0x381d, 0x35d3, 0x38a2, 0x2eeb, 0x3278, 0x3ace, 0x344a, 0x37a5, 0x341b, 0x3a62, 0x3549, 0x365d, 0x3a82, 0x3842, 0x37de, 0x3b1f, 0x32d3, 0x3b8e, 0x3a44, 0x2cfd, 0x3885, 0x3b2e, 0x34b1, 0x3674, 0x37d8, 0x3bff, 0x3535, 0x3487, 0x2fbe, 0x3abe, 0x3266, 0x31ad, 0x340a, 0x3be2, 0x21a8, 0x3924, 0x39ea, 0x381b, 0x3351, 0x3aa6, 0x3903, 0x38b5, 0x3284, 0x3937, 0x3a34, 0x344a, 0x3a26, 0x312f, 0x39a8, 0x3b8d, 0x373e, 0x3b66, 0x2764, 0x386d, 0x20a8, 0x381c, 0x395e, 0x2ee0, 0x3820, 0x37f5, 0x3bc2, -0x3bd7, 0x37b6, 0x39dd, 0x3b50, 0x3621, 0x3726, 0x3484, 0x360f, 0x39fa, 0x3b62, 0x2318, 0x1a60, 0x35b8, 0x340b, 0x2d49, 0x35ec, 0x3783, 0x3b02, 0x3654, 0x3b4f, 0x337c, 0x3bff, 0x36aa, 0x34cc, 0x38cd, 0x3555, 0x39a0, 0x34da, 0x2840, 0x3897, 0x3bcc, 0x30ff, 0x347f, 0x3acf, 0x39ac, 0x2544, 0x352e, 0x36d2, 0x3643, 0x33f1, 0x3bd2, 0x30b1, 0x38f3, 0x3a47, 0x3863, 0x37e5, 0x2048, 0x388c, 0x2c07, 0x3abc, 0x342a, 0x3986, 0x38ee, 0x39ff, 0x3485, 0x3947, 0x386c, 0x39e0, 0x3a96, 0x3bdc, 0x3158, 0x3ba6, 0x28fc, 0x29dd, 0x3b4e, 0x3a74, 0x3834, 0x3b8d, 0x1c2f, 0x390f, 0x3009, 0x39db, 0x2dc1, 0x3802, 0x3bb2, 0x3428, 0x2dff, 0x3a33, 0x355f, 0x3122, 0x3152, 0x3615, 0x38d7, 0x38f6, 0x3624, 0x3ac4, 0x1527, 0x3a83, 0x2db8, 0x3847, 0x3afe, 0x3a7e, 0x307e, 0x3711, 0x3726, 0x3a68, -0x2b4b, 0x3b91, 0x360b, 0x3b18, 0x375e, 0x2be2, 0x3a8d, 0x2bbb, 0x2f24, 0x3271, 0x2e97, 0x3734, 0x3a56, 0x35d8, 0x355c, 0x1578, 0x33d1, 0x3b60, 0x2793, 0x350b, 0x34c6, 0x38d3, 0x387f, 0x3a3f, 0x3928, 0x3021, 0x384d, 0x36f8, 0x3413, 0x3be3, 0x3817, 0x2280, 0x36ef, 0x3795, 0x385b, 0x3be6, 0x323d, 0x3880, 0x35d7, 0x3201, 0x3329, 0x3a49, 0x36bf, 0x3585, 0x2df9, 0x3897, 0x338c, 0x313c, 0x343c, 0x3ab6, 0x3927, 0x3514, 0x3944, 0x3bfa, 0x347e, 0x32a5, 0x357f, 0x3b96, 0x375b, 0x38cc, 0x3bc9, 0x384c, 0x39ec, 0x35f4, 0x36a6, 0x3bf9, 0x2aa9, 0x3b18, 0x3172, 0x3bc9, 0x3b41, 0x2e94, 0x39cd, 0x368f, 0x3903, 0x2d54, 0x3a45, 0x3378, 0x3a00, 0x392f, 0x39f1, 0x38c5, 0x2b64, 0x390d, 0x3b77, 0x391d, 0x343c, 0x3627, 0x3826, 0x344a, 0x3a0a, 0x37cb, 0x3b06, 0x3b16, 0x3656, 0x3a47, -0x3be3, 0x35b8, 0x37af, 0x3765, 0x38e8, 0x3bf3, 0x344e, 0x39f7, 0x3320, 0x3590, 0x30b6, 0x395c, 0x3abf, 0x34fe, 0x359a, 0x3a55, 0x39fd, 0x3a41, 0x3a8c, 0x382b, 0x3741, 0x36bb, 0x387f, 0x358a, 0x36f9, 0x3bc8, 0x33f7, 0x34bd, 0x3460, 0x3aa3, 0x39dc, 0x31f7, 0x38e1, 0x3b21, 0x384d, 0x38bb, 0x38ce, 0x381d, 0x38d7, 0x349a, 0x2d43, 0x3251, 0x3917, 0x39aa, 0x3871, 0x3a59, 0x3a1c, 0x382c, 0x37c1, 0x3a9e, 0x2f8f, 0x32a5, 0x1583, 0x319d, 0x38ff, 0x393c, 0x38e8, 0x2da0, 0x396a, 0x3987, 0x3887, 0x339d, 0x360c, 0x37d5, 0x3ad6, 0x3986, 0x3559, 0x3a60, 0x392b, 0x2e25, 0x2878, 0x3184, 0x309b, 0x35c8, 0x38cf, 0x358b, 0x3804, 0x3943, 0x312d, 0x3a2a, 0x29ab, 0x3b0d, 0x3959, 0x33c5, 0x3bfe, 0x33f0, 0x3a98, 0x29f1, 0x39ee, 0x37da, 0x3a1c, 0x3896, 0x387b, 0x3a07, 0x2e45, 0x3932, -0x3556, 0x38f6, 0x3826, 0x3299, 0x2e6c, 0x3957, 0x3687, 0x35e5, 0x34ea, 0x34ab, 0x2b4e, 0x3a50, 0x365f, 0x39d6, 0x3968, 0x3ad5, 0x3966, 0x305e, 0x2ef6, 0x3471, 0x343d, 0x3bab, 0x2e4b, 0x3853, 0x3a96, 0x3be5, 0x2a10, 0x3790, 0x34c6, 0x3aa6, 0x3864, 0x3b07, 0x31b7, 0x3b38, 0x25f8, 0x2f15, 0x34dc, 0x3bbd, 0x379f, 0x363d, 0x3b1a, 0x3862, 0x37c5, 0x32a9, 0x3590, 0x3074, 0x31de, 0x30f6, 0x37ed, 0x3722, 0x34fd, 0x3a1f, 0x3580, 0x37c5, 0x3b84, 0x3be4, 0x357c, 0x36ed, 0x30d5, 0x38cd, 0x343e, 0x3831, 0x397f, 0x36db, 0x383a, 0x24e2, 0x3a9d, 0x39dd, 0x36f7, 0x360a, 0x2be4, 0x2dca, 0x321c, 0x361b, 0x378e, 0xe22, 0x2486, 0x3550, 0x3900, 0x34a9, 0x3b2f, 0x3829, 0x1f15, 0x3906, 0x3220, 0x25b1, 0x38b1, 0x398d, 0x382e, 0x298d, 0x39a5, 0x3bb2, 0x31fd, 0x3964, 0x36f6, 0x3835, -0x3907, 0x3b4f, 0x3b17, 0x390d, 0x2b5c, 0x3533, 0x3a28, 0x345e, 0x3954, 0x386e, 0x3b0f, 0x321c, 0x3bce, 0x326d, 0x3a39, 0x3a70, 0x38b1, 0x38c6, 0x3aa4, 0x3aa1, 0x38b6, 0x3a65, 0x3b54, 0x3230, 0x397a, 0x3b63, 0x3869, 0x3003, 0x368e, 0x3a48, 0x3a19, 0x38be, 0x3bb0, 0x2e6e, 0x3ad2, 0x2a53, 0x35d9, 0x39d2, 0x2dd0, 0x32b2, 0x3180, 0x229f, 0x3bcc, 0x38d6, 0x3b74, 0x3bd1, 0x37f7, 0x380d, 0x3928, 0x3b54, 0x35ff, 0x3457, 0x3470, 0x3155, 0x3a41, 0x342c, 0x3af8, 0x2de0, 0x3608, 0x36ab, 0x3bdd, 0x35e3, 0x2aa9, 0x37d0, 0x3a4c, 0x35dc, 0x2e36, 0x37a3, 0x39b3, 0x2e4b, 0x3b11, 0x323a, 0x38de, 0x3ba3, 0x38ff, 0x3823, 0x310d, 0x3b05, 0x39f8, 0x3abf, 0x3bcf, 0x36c4, 0x3ae2, 0x36cd, 0x3a8f, 0x3a91, 0x368f, 0x37aa, 0x3969, 0x39aa, 0x3bff, 0x3422, 0x37c5, 0x35f0, 0x3b46, 0x3a21, -0x384a, 0x3984, 0x3349, 0x2014, 0x38ea, 0x28c4, 0x3520, 0x3a22, 0x3bec, 0x32e8, 0x275e, 0x3b5a, 0x3a2d, 0x3a3f, 0x3690, 0x321c, 0x3b62, 0x392f, 0x3a2c, 0x36b7, 0x38a2, 0x3205, 0x3520, 0x3b6f, 0x3378, 0x3911, 0x3833, 0x3991, 0x380b, 0x3a4a, 0x38a6, 0x3865, 0x3aa6, 0x38e7, 0x397a, 0x38fa, 0x3b10, 0x3440, 0x39a2, 0x3566, 0x365d, 0x307a, 0x2d18, 0x3978, 0x389c, 0x39f5, 0x38df, 0x29c3, 0x3a62, 0x3b75, 0x39b5, 0x2015, 0x307b, 0x39e1, 0x288f, 0x3936, 0x31ee, 0x3be2, 0x35e1, 0x391f, 0x345d, 0x39ff, 0x390c, 0x32cb, 0x38ce, 0x3441, 0x3a3a, 0x3713, 0x2fce, 0x321b, 0x2deb, 0x34e3, 0x3ade, 0x2a6e, 0x3bff, 0x3882, 0x3bec, 0x3ad9, 0x3abc, 0x3bb4, 0x36d8, 0x3617, 0x3015, 0x3a62, 0x3115, 0x384d, 0x3a19, 0x35cf, 0x3468, 0x300f, 0x371e, 0x34ba, 0x378b, 0x37fb, 0x3af8, 0x2fad, -0x2bed, 0x3854, 0x38ab, 0x3879, 0x2ff5, 0x3808, 0x38d5, 0x3ba2, 0x390c, 0x3ba1, 0x3343, 0x373d, 0x34b8, 0x37b5, 0x3653, 0x2db9, 0x3433, 0x318b, 0x39c9, 0x333d, 0x2ca0, 0x3b89, 0x3002, 0x34f2, 0x3969, 0x3a48, 0x1df8, 0x2421, 0x3b9d, 0x3b5a, 0x398a, 0x394b, 0x2fea, 0x296d, 0x3b39, 0x3696, 0x3b4d, 0x340d, 0x3b7e, 0x39ba, 0x2f44, 0x37af, 0x38e4, 0x3a86, 0x3b2d, 0x3954, 0x2bed, 0x3506, 0x2501, 0x3bc9, 0x3a58, 0x3abb, 0x384d, 0x33d6, 0x34d0, 0x3468, 0x3bbf, 0x3a17, 0x3534, 0x3b31, 0x3a7a, 0x3644, 0x36e3, 0x3a50, 0x2284, 0x3b1e, 0x37ed, 0x3ba9, 0x3919, 0x39d3, 0x3235, 0x3bc0, 0x3938, 0x32ea, 0x32fc, 0x3bc0, 0x3a91, 0x3af2, 0x3410, 0x38b5, 0x2ca8, 0x3097, 0x2b7c, 0x3528, 0x3b69, 0x3602, 0x3637, 0x383d, 0x34a3, 0x3ac4, 0x2c6b, 0x302e, 0x3b38, 0x34a3, 0x3519, 0x3674, -0x2f15, 0x2cb7, 0x3a46, 0x3663, 0x3b63, 0x38b4, 0x3b34, 0x3ba3, 0x2d14, 0x3422, 0x3701, 0x38e1, 0x39fe, 0x3112, 0x38dd, 0x357c, 0x2e9f, 0x35d1, 0x36ec, 0x306e, 0x38ea, 0x36c8, 0x34c7, 0x38e4, 0x3aee, 0x3ab5, 0x355e, 0x395c, 0x242b, 0x3197, 0x3832, 0x3987, 0x3682, 0x38f9, 0x3aaa, 0x209e, 0x35d4, 0x36a0, 0x3779, 0x39ff, 0x33e5, 0x3138, 0x35a6, 0x362f, 0x3b4e, 0x3417, 0x27c8, 0x39db, 0x3004, 0x3b6b, 0x30bd, 0x31e3, 0x3988, 0x32f4, 0x3ac7, 0x305a, 0x248b, 0x2dae, 0x21bf, 0x34c6, 0x2993, 0x3b6b, 0x3530, 0x3acc, 0x3563, 0x2e8c, 0x3492, 0x3954, 0x388b, 0x3b35, 0x3880, 0x38c4, 0x34c6, 0x3bb8, 0x360d, 0x28f6, 0x390a, 0x39e5, 0x2f09, 0x38e5, 0x34ca, 0x3634, 0x38b2, 0x39b7, 0x2d73, 0x396d, 0x3490, 0x39fd, 0x38dd, 0x39b9, 0x3adb, 0x326e, 0x3afc, 0x3bf5, 0x3bfc, 0x2b6a, -0x3440, 0x36eb, 0x32c4, 0x3be7, 0x3215, 0x3a10, 0x2dd5, 0x3999, 0x3bcd, 0x39a9, 0x351a, 0x36ad, 0x3732, 0x28a4, 0x205e, 0x30a4, 0x3a0b, 0x399e, 0x356a, 0x2c98, 0x3912, 0x3471, 0x3b45, 0x38df, 0x3b91, 0x303f, 0x3bf6, 0x374a, 0x3813, 0x3739, 0x30a9, 0x3155, 0x385b, 0x3952, 0x3229, 0x3639, 0x39c8, 0x3827, 0x333c, 0x3978, 0x38be, 0x3a90, 0x35b5, 0x3655, 0x33be, 0x39df, 0x3b24, 0x392a, 0x2bda, 0x3895, 0x3ac0, 0x352c, 0x2c77, 0x3893, 0x3ac3, 0x3305, 0x3699, 0x2a79, 0x3bf9, 0x3821, 0x39fa, 0x38b3, 0x3428, 0x3564, 0x3073, 0x37ba, 0x2877, 0x3b5f, 0x2c54, 0x35da, 0x3a33, 0x37d7, 0x396b, 0x3408, 0x36a3, 0x2d1b, 0x3860, 0x3bf5, 0x36cc, 0x3b43, 0x3846, 0x34ce, 0x3b1d, 0x34ca, 0x351d, 0x323d, 0x37ce, 0x3ac1, 0x35e5, 0x3b80, 0x3b7e, 0x3a78, 0x38e5, 0x3106, 0x3892, 0x35a5, -0x38f9, 0x3ac7, 0x3886, 0x3a8d, 0x3a5c, 0x39f0, 0x2c1e, 0x3ad7, 0x37bf, 0x366d, 0x3715, 0x290c, 0x320b, 0x3639, 0x3442, 0x33eb, 0x3602, 0x2b7b, 0x344e, 0x3906, 0x3780, 0x372b, 0x39f5, 0x39d7, 0x3742, 0x35d3, 0x3672, 0x2d25, 0x397c, 0x3953, 0x3970, 0x37d2, 0x38f2, 0x3790, 0x30c7, 0x3417, 0x31e2, 0x3b53, 0x3587, 0x3ad8, 0x3875, 0x3908, 0x2c27, 0x33b7, 0x3ad5, 0x3641, 0x3bcb, 0x3b70, 0x3b87, 0x346d, 0x397f, 0x25be, 0x3137, 0x3946, 0x36c4, 0x3b67, 0x3a20, 0x36e7, 0x31b1, 0x3948, 0x3bf5, 0x2b26, 0x34fe, 0x3522, 0x30e8, 0x2630, 0x37ff, 0x368f, 0x389e, 0x2d92, 0x37b4, 0x39b1, 0x3532, 0x39cf, 0x39ae, 0x3a2f, 0x3862, 0x3656, 0x39cb, 0x3a84, 0x37e3, 0x3b06, 0x3901, 0x2ccb, 0x2b4e, 0x348b, 0x3abf, 0x3a1f, 0x2e1e, 0x2d75, 0x39e5, 0x3143, 0x39ff, 0x38c2, 0x3ba0, 0x3a64, -0x3969, 0x2ffd, 0x39fd, 0x399d, 0x3863, 0x3896, 0x3ab1, 0x3815, 0x3bd8, 0x34fb, 0x3419, 0x3bf7, 0x38cc, 0x3659, 0x2bbc, 0x3bb0, 0x3abb, 0x3554, 0x394a, 0x3ad8, 0x2ea5, 0x3bf6, 0x37bb, 0x2363, 0x3aef, 0x36dc, 0x2dfb, 0x3721, 0x3558, 0x390c, 0x36df, 0x2ff3, 0x3b70, 0x266e, 0x3b66, 0x3957, 0x2884, 0x34e4, 0x3589, 0x3864, 0x3a4b, 0x30d7, 0x3611, 0x34ec, 0x36d2, 0x37f9, 0x3abe, 0x2be6, 0x39ed, 0x336a, 0x3aba, 0x396c, 0x3838, 0x23cb, 0x3bbb, 0x3944, 0x2f70, 0x2d41, 0x3b28, 0x3b81, 0x305c, 0x3a88, 0x38a6, 0x3829, 0x33c9, 0x34e0, 0x3a41, 0x346a, 0x3b1b, 0x378f, 0x3a1a, 0x395f, 0x3ba3, 0x3072, 0x3918, 0x302d, 0x3949, 0x3a56, 0x37ac, 0x3807, 0x3b7f, 0x3461, 0x3a65, 0x349a, 0x3b40, 0x2c4d, 0x39d3, 0x3b6e, 0x2f82, 0x3797, 0x3bdb, 0x3b73, 0x30ee, 0x3b5a, 0x2fa1, 0x3be4, -0x3b02, 0x38ec, 0x3b86, 0x3569, 0x3bef, 0x3029, 0x3368, 0x3ad9, 0x2e8e, 0x3bd8, 0x34cb, 0x2db1, 0x3aa2, 0x38da, 0x2ca5, 0x3ad4, 0x3842, 0x3a34, 0x3777, 0x3a3d, 0x3b37, 0x3bc7, 0x32ef, 0x3bd1, 0x3bd9, 0x34b4, 0x301f, 0x38af, 0x235f, 0x3595, 0x3a7d, 0x3a9a, 0x3b4b, 0x2801, 0x318e, 0x2ce5, 0x39ab, 0x39d5, 0x3986, 0x3823, 0x2b17, 0x395e, 0x35e3, 0x3740, 0x39e9, 0x3882, 0x384c, 0x36b7, 0x3426, 0x396b, 0x3b1d, 0x2c8e, 0x3bb6, 0x30a8, 0x37b3, 0x35f6, 0x3a37, 0x367f, 0x3877, 0x342f, 0x3939, 0x317c, 0x38b9, 0x3b47, 0x3437, 0x3533, 0x3ba2, 0x3b25, 0x3b39, 0x36d3, 0x34b1, 0x39b0, 0x30f6, 0x349a, 0x1e90, 0x3a7f, 0x3559, 0x37ed, 0x3aa9, 0x360f, 0x3445, 0x3256, 0x3925, 0x3974, 0x3897, 0x3ab0, 0x3410, 0x36d2, 0x367d, 0x2f29, 0x3917, 0x34d4, 0x3996, 0x3450, 0x3486, 0x3b67, -0x2c33, 0x3407, 0x3708, 0x321b, 0x39aa, 0x388f, 0x3427, 0x39c1, 0x3990, 0x3a24, 0x3970, 0x3bb4, 0x34be, 0x366e, 0x3bfc, 0x3748, 0x3bcc, 0x2d09, 0x394d, 0x398c, 0x3b19, 0x3855, 0x3954, 0x3268, 0x32ae, 0x3a02, 0x39e1, 0x3122, 0x3a60, 0x3b17, 0x3be2, 0x3b90, 0x36a0, 0x3962, 0x3b1d, 0x3871, 0x3368, 0x3114, 0x355d, 0x39ea, 0x3a34, 0x35dd, 0x3976, 0x3b29, 0x239b, 0x3576, 0x2bf6, 0x35f5, 0x314f, 0x3af9, 0x3535, 0x3a04, 0x3b55, 0x3a1c, 0x1f50, 0x348a, 0x3ab2, 0x39d1, 0x3bad, 0x255b, 0x344f, 0x24a5, 0x29c8, 0x38aa, 0x3a5f, 0x34b3, 0x395e, 0x35b9, 0x3a6b, 0x3ad1, 0x357f, 0x38c1, 0x37c8, 0x3b16, 0x31cb, 0x3464, 0x3a8b, 0x39ce, 0x3592, 0x3a6c, 0x39a6, 0x303b, 0x34eb, 0x3019, 0x3a0a, 0x3996, 0x3a65, 0x3bb8, 0x3804, 0x2a64, 0x3481, 0x3452, 0x39e7, 0x3be7, 0x34e4, 0x39ae, -0x3a52, 0x3a35, 0x3365, 0x35c6, 0x1e02, 0x2e5d, 0x399f, 0x375a, 0x3b3f, 0x3a1d, 0x34a7, 0x37fd, 0x34f5, 0x3a0f, 0x2909, 0x2ece, 0x350b, 0x38e1, 0x3a4e, 0x2c7f, 0x384d, 0x3aab, 0x2fc3, 0x3852, 0x3473, 0x3936, 0x359c, 0x3750, 0x3602, 0x36c7, 0x3815, 0x3790, 0x3980, 0x3544, 0x39b9, 0x3bcd, 0x3c00, 0x3560, 0x3aaa, 0x3b5a, 0x3301, 0x2c5a, 0x3a33, 0x2ccf, 0x3a7e, 0x364c, 0x393c, 0x34a1, 0x2da5, 0x372d, 0x350b, 0x3977, 0x37f4, 0x37d6, 0x3536, 0x3861, 0x360a, 0x3abb, 0x3871, 0x389e, 0x383e, 0x3b3e, 0x2744, 0x33d3, 0x3b94, 0x3028, 0x3bb7, 0x3736, 0x2da7, 0x2b10, 0x3a43, 0x345c, 0x38ac, 0x3574, 0x3689, 0x350d, 0x3bb1, 0x3acc, 0x38eb, 0x345f, 0x39f8, 0x325c, 0x36d3, 0x30a4, 0x3b49, 0x2b46, 0x3692, 0x3a37, 0x3788, 0x358d, 0x391b, 0x3872, 0x3632, 0x3ae4, 0x3b05, 0x35e4, -0x39ac, 0x34fc, 0x37e4, 0x3b1b, 0x380e, 0x2d0a, 0x38e3, 0x394b, 0x2c45, 0x3bcf, 0x3b0f, 0x38a0, 0x3456, 0x3668, 0x38ce, 0x3992, 0x38c0, 0x35fa, 0x320a, 0x38d9, 0x3bb9, 0x3334, 0x396b, 0x398f, 0x3854, 0x3bbf, 0x34c2, 0x2ae6, 0x3808, 0x3625, 0x29bb, 0x3aec, 0x246c, 0x3573, 0x3ae7, 0x3879, 0x3bdf, 0x2c64, 0x33f4, 0x3a63, 0x39c0, 0x3a35, 0x38f8, 0x38c6, 0x3b30, 0x3a3b, 0x2ec2, 0x32da, 0x316d, 0x2136, 0x3be5, 0x332b, 0x36c6, 0x38db, 0x3058, 0x2d9e, 0x37f9, 0x3733, 0x3ba2, 0x1d40, 0x339d, 0x2d02, 0x39e3, 0x3952, 0x380f, 0x3a19, 0x3795, 0x3799, 0x3547, 0x3b2a, 0x37c2, 0x3958, 0x39d1, 0x3303, 0x3612, 0x3aa8, 0x3ac2, 0x38f3, 0x2d4a, 0x37e8, 0x37e4, 0x39c1, 0x3bab, 0x36da, 0x3809, 0x2fe2, 0x3bd9, 0x3328, 0x397b, 0x3456, 0x324e, 0x34c7, 0x37d2, 0x3017, 0x3a40, 0x2c48, -0x39cc, 0x2c1f, 0x3a56, 0x3a9b, 0x3987, 0x2d9c, 0x38db, 0x39c4, 0x3a54, 0x373c, 0x367c, 0x3b9d, 0x38af, 0x3649, 0x38bc, 0x382e, 0x2f5f, 0x34b9, 0x2d83, 0x3720, 0x3b84, 0x39f7, 0x38b1, 0x3600, 0x3ba5, 0x3880, 0x39d6, 0x33af, 0x3bcd, 0x3bc0, 0x38aa, 0x277a, 0x3548, 0x2f9b, 0x3521, 0x3a8d, 0x3622, 0x2fd5, 0x35ca, 0x3405, 0x3399, 0x3428, 0x3ac0, 0x34e7, 0x3866, 0x3454, 0x3631, 0x2247, 0x34a1, 0x398b, 0x388d, 0x39cb, 0x3461, 0x3937, 0x351e, 0x3b71, 0x36a4, 0x3a61, 0x3ac2, 0x3b05, 0x39b4, 0x3b1c, 0x3bdf, 0x3835, 0x3398, 0x3931, 0x38c3, 0x3922, 0x292f, 0x39a7, 0x3688, 0x3817, 0x32d1, 0x37e9, 0x382b, 0x355c, 0x39a1, 0x38cc, 0x36ee, 0x35c6, 0x395f, 0x2c4a, 0x39db, 0x29f5, 0x3886, 0x3b23, 0x38db, 0x3bc0, 0x345a, 0x39da, 0x3ac1, 0x3b5f, 0x3ae9, 0x368f, 0x397e, 0x3b89, -0x3805, 0x3adf, 0x3610, 0x3a37, 0x3947, 0x3618, 0x31d9, 0x3b3a, 0x3a13, 0x376f, 0x3141, 0x3b63, 0x39ce, 0x3ad7, 0x28dc, 0x340b, 0x30e4, 0x35e0, 0x354f, 0x387c, 0x37fa, 0x3455, 0x38b9, 0x3726, 0x2d54, 0x3338, 0x343a, 0x3a7c, 0x24e3, 0x3892, 0x3a8e, 0x3a8f, 0x37a8, 0x39e6, 0x398a, 0x3b42, 0x3360, 0x3a57, 0x38e5, 0x3afb, 0x3719, 0x36cf, 0x387c, 0x3a4e, 0x2edd, 0x3a36, 0x25b5, 0x3135, 0x346b, 0x3b0e, 0x2f3a, 0x2ee6, 0x384b, 0x3aab, 0x3b0b, 0x34e7, 0x30ea, 0x34e8, 0x38ef, 0x3899, 0x387a, 0x3786, 0x2456, 0x2ccb, 0x3af0, 0x3699, 0x35d2, 0x379d, 0x39bd, 0x36f8, 0x27a8, 0x397a, 0x2511, 0x35a2, 0x3a21, 0x3848, 0x27c8, 0x20df, 0x3a83, 0x3bb3, 0x2044, 0x38ec, 0x3095, 0x39cf, 0x2f28, 0x3bd6, 0x3939, 0x360c, 0x2d7b, 0x389c, 0x3585, 0x3bcc, 0x11d9, 0x3a41, 0x3591, 0x3813, -0x38ae, 0x3998, 0x3a8d, 0x31c7, 0x3af7, 0x3392, 0x3586, 0x3881, 0x3a64, 0x3b82, 0x3a29, 0x3497, 0x3b46, 0x3083, 0x3523, 0x3685, 0x3bb9, 0x3575, 0x317b, 0x38da, 0x3b2a, 0x38cc, 0x3764, 0x3103, 0x396e, 0x3bad, 0x35e5, 0x3a46, 0x3b72, 0x37d0, 0x3359, 0x3b8e, 0x3845, 0x2fc1, 0x2b03, 0x3837, 0x3186, 0x366f, 0x185a, 0x2ceb, 0x36be, 0x390a, 0x3513, 0x31d2, 0x357a, 0x3769, 0x392e, 0x39cb, 0x31a1, 0x3197, 0x3283, 0x39f2, 0x37d5, 0x2d92, 0x3599, 0x31f7, 0x30d1, 0x3b0b, 0x39b9, 0x3434, 0x324f, 0x3627, 0x321a, 0x30b3, 0x39f5, 0x387d, 0x32e6, 0x3a6c, 0x3597, 0x34ad, 0x2fd5, 0x3a5e, 0x2cbd, 0x34c2, 0x3a9c, 0x369e, 0x3192, 0x321c, 0x2600, 0x37af, 0x3841, 0x3a09, 0x3348, 0x309c, 0x3396, 0x1439, 0x34de, 0x3978, 0x3938, 0x3600, 0x28e3, 0x2d7e, 0x3296, 0x36ac, 0x35d4, 0x265a, -0x318c, 0x383d, 0x3955, 0x3473, 0x3ad5, 0x3949, 0x3923, 0x2f75, 0x31e1, 0x36ba, 0x3b86, 0x393c, 0x3563, 0x38a8, 0x37ee, 0x378a, 0x38d6, 0x38e6, 0x3922, 0x2c66, 0x33fc, 0x3875, 0x388d, 0x3b8b, 0x295c, 0x3ac3, 0x3432, 0x2d94, 0x37f3, 0x2a0b, 0x38c1, 0x3bbb, 0x3735, 0x3b36, 0x3a8b, 0x3291, 0x3908, 0x39d7, 0x375a, 0x2f3a, 0x330d, 0x398d, 0x3890, 0x3bf0, 0x38ba, 0x3ac0, 0x21f8, 0x3b00, 0x396c, 0x34d9, 0x3409, 0x3463, 0x3187, 0x3522, 0x2bb8, 0x358a, 0x30e2, 0x33bd, 0x38db, 0x36f9, 0x2f32, 0x3a39, 0x3884, 0x3be5, 0x3879, 0x3126, 0x3878, 0x3775, 0x397e, 0x3a5f, 0x3974, 0x3a58, 0x3ada, 0x3b0a, 0x3917, 0x3b63, 0x3176, 0x384b, 0x3a52, 0x3b01, 0x3ace, 0x3b86, 0x336a, 0x3647, 0x3877, 0x37b3, 0x2a41, 0x2db4, 0x189d, 0x39e4, 0x3470, 0x2d16, 0x2c98, 0x3a47, 0x3495, 0x38fd, -0x3bae, 0x322f, 0x39ff, 0x3075, 0x20be, 0x3583, 0x3b80, 0x39b5, 0x34a9, 0x3a4b, 0x362a, 0x3a70, 0x3964, 0x3925, 0x37ec, 0x3b19, 0x30e9, 0x38a7, 0x3688, 0x386d, 0x3a48, 0x2faa, 0x3b5f, 0x3693, 0x367a, 0x374c, 0x3b97, 0x3beb, 0x36ce, 0x37fc, 0x38fe, 0x39c9, 0x38d5, 0x25d5, 0x36e3, 0x3a77, 0x3987, 0x3bad, 0x3a48, 0x3871, 0x318d, 0x371f, 0x3614, 0x3a6e, 0x3662, 0x3bae, 0x3a41, 0x2973, 0x3aa6, 0x29d1, 0x3910, 0x3bca, 0x34d4, 0x24ea, 0x3611, 0x37c5, 0x32cc, 0x3a93, 0x3a4c, 0x3b10, 0x3790, 0x3181, 0x346f, 0x39b8, 0x3720, 0x3a7e, 0x39c7, 0x2d80, 0x324f, 0x3bf8, 0x373f, 0x3039, 0x3872, 0x2ad3, 0x2b33, 0x3803, 0x39d1, 0x38c2, 0x2ce6, 0x3943, 0x375f, 0x37ca, 0x37a5, 0x3a00, 0x20f2, 0x3449, 0x2fc9, 0x39bb, 0x3775, 0x364c, 0x3926, 0x39ae, 0x3b18, 0x38ad, 0x3803, 0x3032, -0x2d61, 0x322b, 0x383d, 0x3a27, 0x3437, 0x290e, 0x3314, 0x3222, 0x3862, 0x3712, 0x310c, 0x3984, 0x3b97, 0x35b6, 0x39dd, 0x305e, 0x3986, 0x3a78, 0x2e12, 0x3091, 0x3ae9, 0x3b2a, 0x3887, 0x3a31, 0x2fd3, 0x381c, 0x3082, 0x3934, 0x37a5, 0x3b6a, 0x35a3, 0x320e, 0x39f1, 0x2ad6, 0x3295, 0x388a, 0x3baa, 0x372c, 0x3345, 0x3985, 0x3b40, 0x2caa, 0x3264, 0x30ad, 0x3965, 0x3bcd, 0x3830, 0x3921, 0x3ae3, 0x3bdd, 0x3b55, 0x3804, 0x38c9, 0x3430, 0x3995, 0x3b93, 0x37b7, 0x398e, 0x348e, 0x3a2b, 0x3ad6, 0x336c, 0x35c2, 0x3a01, 0x3284, 0x3a0f, 0x306c, 0x37e3, 0x3836, 0x3aea, 0x3490, 0x30bd, 0x3bb3, 0x3495, 0x3b7a, 0x3908, 0x3905, 0x34ff, 0x3a18, 0x2c6d, 0x31f6, 0x393b, 0x2b1c, 0x3b05, 0x3367, 0x383c, 0x3a5c, 0x34d2, 0x37dd, 0x364e, 0x38a6, 0x30ac, 0x36ab, 0x3272, 0x3a96, 0x34e8, -0x3705, 0x2f61, 0x3879, 0x3ae0, 0x2bec, 0x3a46, 0x39fc, 0x3b64, 0x3964, 0x390a, 0x3827, 0x30c6, 0x38c4, 0x3897, 0x3855, 0x38cf, 0x3074, 0x39fe, 0x3513, 0x38b8, 0x3a90, 0x3506, 0x3a0b, 0x39bf, 0x3ba3, 0x35b1, 0x3942, 0x30dc, 0x3a64, 0x3624, 0x39bd, 0x3725, 0x1c9a, 0x34cb, 0x335a, 0x3b3b, 0x3329, 0x2bda, 0x3368, 0x3b70, 0x3096, 0x3754, 0x2fd4, 0x35de, 0x2d13, 0x3618, 0x3025, 0x3684, 0x35b2, 0x3732, 0x384a, 0x2dbe, 0x317b, 0x3a1e, 0x388c, 0x3729, 0x393b, 0x377d, 0x3be1, 0x3a7b, 0x2776, 0x38c5, 0x3afb, 0x3334, 0x33d8, 0x3b7e, 0x369a, 0x39be, 0x3aa4, 0x3afb, 0x3a6c, 0x38c3, 0x3a6a, 0x3911, 0x2a60, 0x3543, 0x3249, 0x3592, 0x2bd4, 0x3a76, 0x3ab9, 0x38a3, 0x399a, 0x3b60, 0x3a47, 0x31ec, 0x385b, 0x3677, 0x3909, 0x3915, 0x30fb, 0x3ae8, 0x3a23, 0x38e7, 0x2364, 0x38f0, -0x3bb5, 0x31e2, 0x2bb9, 0x3443, 0x3631, 0x392e, 0x389f, 0x3447, 0x3ba3, 0x3a47, 0x3673, 0x3ab7, 0x3acf, 0x3871, 0x3770, 0x3865, 0x3139, 0x2830, 0x3b65, 0x38ab, 0x35d1, 0x38c0, 0x3684, 0x2fa5, 0x36ba, 0x38cb, 0x3a9d, 0x34b8, 0x3b1a, 0x3bcb, 0x3830, 0x3ab6, 0x2eec, 0x3832, 0x3b33, 0x3678, 0x38a2, 0x31ff, 0x3a7d, 0x3bd3, 0x34e8, 0x3819, 0x392f, 0x3704, 0x3b01, 0x25fd, 0x3729, 0x3557, 0x3bc3, 0x2e36, 0x3323, 0x3aed, 0x357a, 0x3b4b, 0x3412, 0x3637, 0x3b92, 0x3360, 0x39c2, 0x3776, 0x32a8, 0x3896, 0x2f5b, 0x328a, 0x31d9, 0x3bb4, 0x3ba2, 0x3a2c, 0x3a12, 0x305a, 0x31f9, 0x3523, 0x32b6, 0x3822, 0x2624, 0x3491, 0x3811, 0x3238, 0x3acb, 0x3a6f, 0x3662, 0x38b9, 0x3b68, 0x3a24, 0x35fb, 0x3be2, 0x37d9, 0x347b, 0x33b2, 0x3a36, 0x3816, 0x39cf, 0x377e, 0x2cee, 0x300a, 0x330d, -0x359c, 0x3826, 0x2baa, 0x3b80, 0x3b04, 0x380d, 0x3a4e, 0x2f7c, 0x3667, 0x3be5, 0x3b0a, 0x380a, 0x360d, 0x3be3, 0x3b83, 0x39c0, 0x391b, 0x285a, 0x3b4b, 0x38cb, 0x3a85, 0x3aeb, 0x3853, 0x355f, 0x3ab5, 0x33be, 0x38ff, 0x382f, 0x3be6, 0x3916, 0x36ff, 0x3a3e, 0x3b88, 0x3812, 0x3687, 0x2c26, 0x3921, 0x394b, 0x2e6f, 0x3aa9, 0x3b77, 0x3848, 0x3b3e, 0x38b4, 0x3811, 0x3659, 0x31d5, 0x3977, 0x3b06, 0x39b4, 0x34bf, 0x31cc, 0x3b30, 0x3a6e, 0x3712, 0x3b52, 0x3b7a, 0x37bd, 0x3484, 0x3bdd, 0x343d, 0x3bb5, 0x3952, 0x2f41, 0x3a12, 0x3b3e, 0x27fe, 0x39d2, 0x39f4, 0x2ca1, 0x3485, 0x36ba, 0x3156, 0x3905, 0x3ba8, 0x39cd, 0x3b64, 0x3ba5, 0x3c00, 0x3ae8, 0x3452, 0x3a39, 0x3861, 0x3b8e, 0x37b1, 0x3bcd, 0x350e, 0x379d, 0x3b83, 0x34cb, 0x3205, 0x39fc, 0x3669, 0x3508, 0x2a1c, 0x39f9, -0x3876, 0x3602, 0x2b8f, 0x36be, 0x3885, 0x2caa, 0x3532, 0x31a8, 0x3956, 0x3139, 0x3709, 0x2fce, 0x3987, 0x3ab4, 0x3406, 0x3727, 0x32dd, 0x3ac9, 0x356b, 0x30c9, 0x2cbb, 0x3552, 0x2c69, 0x39ce, 0x3ad5, 0x3753, 0x290e, 0x36c4, 0x3a7c, 0x3b32, 0x2e36, 0x37db, 0x38b0, 0x3912, 0x34f7, 0x228b, 0x391f, 0x2fbd, 0x3850, 0x3a5e, 0x3a5b, 0x3b82, 0x3a6e, 0x349c, 0x38ce, 0x3bcb, 0x3b4f, 0x31e8, 0x38bd, 0x34ad, 0x3451, 0x3318, 0x34d5, 0x388f, 0x39cf, 0x3844, 0x38d4, 0x3421, 0x38fa, 0x269e, 0x293c, 0x34f0, 0x3438, 0x372c, 0x34b0, 0x36d5, 0x2aa6, 0x3805, 0x3821, 0x31db, 0x39fc, 0x3aa9, 0x26e4, 0x34b9, 0x3215, 0x214a, 0x39e6, 0x3278, 0x39b1, 0x2e97, 0x34e4, 0x3ae7, 0x3bb6, 0x3b79, 0x388d, 0x3b2d, 0x3642, 0x32fe, 0x3b36, 0x39b3, 0x3957, 0x2d0f, 0x34e9, 0x3aef, 0x381d, 0x3b22, -0x2fcf, 0x38e8, 0x3648, 0x2d35, 0x3773, 0x3936, 0x38f7, 0x242a, 0x3bef, 0x3bfa, 0x389a, 0x34e9, 0x328b, 0x3392, 0x3753, 0x3a4c, 0x3ada, 0x2937, 0x38c5, 0x3a6a, 0x2fae, 0x2d27, 0x349e, 0x3be1, 0x34fe, 0x3604, 0x3a69, 0x3b92, 0x384b, 0x387b, 0x28ae, 0x347e, 0x3b9f, 0x3a73, 0x384d, 0x3a08, 0x3961, 0x35a6, 0x38fe, 0x36cc, 0x3962, 0x3456, 0x3ae6, 0x2782, 0x38f8, 0x3bc1, 0x3639, 0x301e, 0x38cf, 0x3873, 0x32d4, 0x3a2c, 0x3aba, 0x3a42, 0x204d, 0x37ae, 0x3adb, 0x3b1a, 0x29ed, 0x30ba, 0x381f, 0x36c0, 0x3602, 0x2dde, 0x3735, 0x3701, 0x3bae, 0x3645, 0x3412, 0x3601, 0x37d5, 0x3aee, 0x39b3, 0x3a06, 0x3ac6, 0x3822, 0x363e, 0x3af8, 0x32f9, 0x39c9, 0x2c2d, 0x3672, 0x29bf, 0x3a06, 0x3875, 0x3758, 0x35cc, 0x3b92, 0x3a44, 0x35ac, 0x3b23, 0x2c6f, 0x3aa4, 0x3676, 0x3be5, 0x3137, -0x38fb, 0x371e, 0x38ad, 0x39cf, 0x347c, 0x3a24, 0x3887, 0x3811, 0x396e, 0x39d1, 0x33cc, 0x3bb5, 0x34e3, 0x39dd, 0x35c5, 0x38be, 0x37cf, 0x372a, 0x3ada, 0x3acd, 0x332c, 0x38c5, 0x35fe, 0x2e0c, 0x388e, 0x3480, 0x3bac, 0x39ad, 0x3770, 0x3aec, 0x3ba5, 0x38eb, 0x3b10, 0x33fd, 0x26db, 0x319c, 0x3aa4, 0x3895, 0x379b, 0x349c, 0x3ab3, 0x3840, 0x3b70, 0x3b4e, 0x2e46, 0x3aff, 0x2f7f, 0x3732, 0x3991, 0x346c, 0x39ff, 0x2be5, 0x36cb, 0x3bb1, 0x35d4, 0x3883, 0x3ba4, 0x3362, 0x3866, 0x394c, 0x38c4, 0x3b6f, 0x378d, 0x2bdf, 0x3443, 0x3959, 0x30ae, 0x3a18, 0x2472, 0x2f6a, 0x3111, 0x3a6d, 0x394e, 0x35c4, 0x3834, 0x3bc5, 0x3afc, 0x3291, 0x34b3, 0x3863, 0x3778, 0x3a6c, 0x3903, 0x2d65, 0x372e, 0x2dfb, 0x32ff, 0x3586, 0x34d2, 0x2d32, 0x3a7f, 0x3002, 0x1d54, 0x34a5, 0x3b4b, 0x3455, -0x3975, 0x27ae, 0x37e0, 0x34c3, 0x31f6, 0x3896, 0x3993, 0x29df, 0x31c1, 0x2e25, 0x2cae, 0x3889, 0x3826, 0x33cd, 0x3bc4, 0x2400, 0x38a7, 0x313d, 0x3826, 0x3670, 0x3922, 0x25bf, 0x390e, 0x3b99, 0x358a, 0x344d, 0x3926, 0x3b4d, 0x239f, 0x3576, 0x3576, 0x356b, 0x3b40, 0x2ebc, 0x34ff, 0x2e6c, 0x3817, 0x35bf, 0x35fc, 0x285e, 0x3b5d, 0x3908, 0x3848, 0x3441, 0x321f, 0x28a5, 0x3a73, 0x342f, 0x37db, 0x39ff, 0x3ac1, 0x3409, 0x3808, 0x34aa, 0x3aee, 0x3590, 0x2ea7, 0x2db9, 0x3b2f, 0x3845, 0x3a0d, 0x34d7, 0x3902, 0x3b44, 0x37b4, 0x3737, 0x3174, 0x394a, 0x3769, 0x3b0a, 0x370f, 0x31a6, 0x3b3d, 0x3a37, 0x3bc7, 0x2d68, 0x363a, 0x31cc, 0x3289, 0x3983, 0x3825, 0x3bf4, 0x34b9, 0x37fe, 0x2de5, 0x3975, 0x3ac9, 0x3083, 0x2c4d, 0x37a2, 0x3544, 0x36ac, 0x387c, 0x30a6, 0x321c, 0x37cc, -0x3a9e, 0x3310, 0x3bf9, 0x36c9, 0x3845, 0x3877, 0x3b5c, 0x3b20, 0x392f, 0x398c, 0x3b42, 0x2c1e, 0x3229, 0x395f, 0x3749, 0x377f, 0x3390, 0x3a80, 0x35b4, 0x2ed5, 0x3795, 0x3067, 0x3998, 0x3a51, 0x3b44, 0x3a52, 0x397d, 0x37fc, 0x298f, 0x2d3d, 0x344b, 0x363e, 0x39bd, 0x3590, 0x3b40, 0x37f3, 0x2d81, 0x3295, 0x35ff, 0x3b02, 0x37f2, 0x37e0, 0x1de3, 0x375e, 0x2fd9, 0x3271, 0x3548, 0x363e, 0x39bb, 0x3817, 0x327a, 0x2bb1, 0x3bbf, 0x3bf3, 0x38e9, 0x39be, 0x392b, 0x2f02, 0x34c5, 0x39c3, 0x38ab, 0x393b, 0x1e1d, 0x3bc3, 0x3972, 0x3be2, 0x3391, 0x3a3f, 0x3b68, 0x33a1, 0x384a, 0x3503, 0x3353, 0x343d, 0x3ac3, 0x2e04, 0x2f98, 0x3020, 0x38f3, 0x3814, 0x3a21, 0x3b92, 0x3083, 0x35fe, 0x3993, 0x32cb, 0x3b67, 0x2f42, 0x3070, 0x32a5, 0x2d98, 0x3b98, 0x31b4, 0x306f, 0x2dc2, 0x3ad5, -0x38d9, 0x38e4, 0x31e3, 0x38d7, 0x3b05, 0x3645, 0x388a, 0x3964, 0x3ab3, 0x39d3, 0x35f4, 0x2777, 0x34e4, 0x3874, 0x3bf6, 0x3b51, 0x3b2e, 0x3887, 0x3bf3, 0x3b3a, 0x348d, 0x35f3, 0x3a72, 0x3bd9, 0x31ec, 0x2d30, 0x34e5, 0x36c2, 0x3907, 0x33da, 0x2e75, 0x2fa8, 0x2fbf, 0x342e, 0x385d, 0x3421, 0x3897, 0x3841, 0x195c, 0x322b, 0x315d, 0x3325, 0x306d, 0x394b, 0x2f4e, 0x3896, 0x3a65, 0x3bf9, 0x30dd, 0x3957, 0x39a5, 0x2f7f, 0x3a29, 0x38c9, 0x35d6, 0x3248, 0x371d, 0x3412, 0x3660, 0x3609, 0x3944, 0x3b17, 0x3af3, 0x3b89, 0x39da, 0x3764, 0x344d, 0x3462, 0x3907, 0x388a, 0x38f0, 0x2960, 0x393b, 0x32f0, 0x3956, 0x31d3, 0x3328, 0x33fd, 0x3256, 0x2913, 0x3665, 0x397f, 0x36ad, 0x31db, 0x3aa5, 0x39db, 0x329b, 0x38f0, 0x32a5, 0x3051, 0x3855, 0x3a9c, 0x3870, 0x3a27, 0x3b93, 0x3942, -0x34e3, 0x37d4, 0x36b0, 0x384f, 0x2eef, 0x2e05, 0x35bc, 0x3bee, 0x34c7, 0x374f, 0x3811, 0x39c4, 0x2de0, 0x3bda, 0x3700, 0x2dc6, 0x349f, 0x29cf, 0x3b8b, 0x39b9, 0x2e31, 0x39f9, 0x3815, 0x3076, 0x38cc, 0x39c1, 0x398c, 0x3a20, 0x3865, 0x34d3, 0x3ba8, 0x3b16, 0x2057, 0x248a, 0x3859, 0x2e3f, 0x30e1, 0x3842, 0x3627, 0x383d, 0x3bb8, 0x34c8, 0x3ad0, 0x3b23, 0x388b, 0x3014, 0x3235, 0x357c, 0x3ba7, 0x3977, 0x3a32, 0x3aba, 0x30f5, 0x31d2, 0x3857, 0x393a, 0x3894, 0x351a, 0x3805, 0x35ee, 0x3967, 0x3862, 0x2a1b, 0x3afc, 0x3a4a, 0x38a0, 0x2f0d, 0x38d3, 0x393c, 0x3a13, 0x3973, 0x3831, 0x3a43, 0x3865, 0x3b80, 0x395a, 0x3275, 0x3874, 0x3735, 0x399c, 0x395e, 0x3abb, 0x2fd8, 0x381a, 0x3834, 0x2ae7, 0x3b2f, 0x39f3, 0x38be, 0x3ade, 0x351f, 0x3900, 0x34e5, 0x389a, 0x31d6, 0x3be4, -0x394f, 0x3a3d, 0x3b26, 0x3a2f, 0x399e, 0x2e0a, 0x3bc9, 0x38d2, 0x3920, 0x343d, 0x3a0b, 0x2c78, 0x38aa, 0x3b54, 0x3639, 0x37b3, 0x377b, 0x3b67, 0x3836, 0x2d52, 0x3b65, 0x38fb, 0x3836, 0x32cf, 0x3a40, 0x367e, 0x3a47, 0x3b47, 0x2d4d, 0x36fc, 0x398a, 0x3b7c, 0x3290, 0x3b4f, 0x3bf6, 0x25de, 0x3937, 0x3798, 0x3b0f, 0x3a95, 0x3bbc, 0x3beb, 0x34cf, 0x269a, 0x3b63, 0x3543, 0x366f, 0x344f, 0x361b, 0x3518, 0x35fb, 0x39aa, 0x3922, 0x3969, 0x3024, 0x2965, 0x2f2d, 0x2e6c, 0x385e, 0x3ab9, 0x34af, 0x3aec, 0x3af1, 0x348b, 0x2f86, 0x3bda, 0x3888, 0x3909, 0x3ba0, 0x3743, 0x3b40, 0x3306, 0x3999, 0x36c0, 0x35f8, 0x3531, 0x3457, 0x397a, 0x3a86, 0x37b8, 0x3bf2, 0x3bb3, 0x378e, 0x3bc7, 0x38f8, 0x3515, 0x3be1, 0x26dd, 0x28e4, 0x3a19, 0x3a28, 0x289c, 0x38ed, 0x3a77, 0x32b0, 0x392e, -0x2fcb, 0x3b43, 0x357f, 0x3987, 0x3056, 0x39dc, 0x3bc7, 0x34c0, 0x3a41, 0x3b4a, 0x3317, 0x2230, 0x3b8c, 0x363d, 0x25bf, 0x3b25, 0x39e3, 0x39d5, 0x37bd, 0x3a52, 0x3a14, 0x1aec, 0x3756, 0x353a, 0x3826, 0x331e, 0x34f7, 0x3690, 0x3973, 0x3269, 0x2c1c, 0x1bea, 0x32da, 0x2d21, 0x346d, 0x351f, 0x2df0, 0x3be0, 0x3bee, 0x3bb2, 0x3b6f, 0x3596, 0x38a2, 0x3408, 0x2281, 0x3864, 0x3516, 0x3b24, 0x3a8d, 0x3a63, 0x3806, 0x36e1, 0x3b6b, 0x3656, 0x3b8f, 0x31d3, 0x3a70, 0x39f8, 0x3953, 0x31eb, 0x3a05, 0x3a58, 0x2f81, 0x395b, 0x3721, 0x3353, 0x35db, 0x2d72, 0x3786, 0x3ab5, 0x3b4b, 0x3bd0, 0x3607, 0x35b4, 0x3a79, 0x32e2, 0x3299, 0x36a2, 0x381c, 0x2fb4, 0x2b3f, 0x3a01, 0x390c, 0x29d1, 0x2b63, 0x3a4b, 0x3309, 0x34f5, 0x3b7b, 0x348d, 0x3a7e, 0x30ca, 0x3269, 0x363a, 0x35a4, 0x3735, -0x36c4, 0x396c, 0x377a, 0x2fac, 0x3bba, 0x3511, 0x38fd, 0x3be0, 0x392d, 0x3864, 0x3bef, 0x3ae7, 0x2cd2, 0x37e5, 0x31c9, 0x332d, 0x3be0, 0x326a, 0x309a, 0x387e, 0x39f2, 0x3302, 0x39ee, 0x3956, 0x3b30, 0x3829, 0x2894, 0x368f, 0x361d, 0x35cd, 0x3b8c, 0x3677, 0x3a95, 0x3a41, 0x382f, 0x3457, 0x3194, 0x31bc, 0x3abd, 0x392a, 0x387b, 0x3912, 0x388a, 0x3051, 0x3a9b, 0x2fc4, 0x3468, 0x33f7, 0x20fe, 0x3489, 0x1d98, 0x39f4, 0x2f82, 0x2c37, 0x391e, 0x37ef, 0x3bb0, 0x3538, 0x1e8b, 0x3985, 0x3805, 0x3823, 0x32eb, 0x36e7, 0x3569, 0x387d, 0x30f2, 0x38d2, 0x39b5, 0x3544, 0x3009, 0x377c, 0x3a65, 0x342a, 0x2cc6, 0x3983, 0x2720, 0x2760, 0x3443, 0x3856, 0x3949, 0x37b5, 0x3944, 0x33e1, 0x320c, 0x3a83, 0x39be, 0x36f2, 0x3bf3, 0x384d, 0x35dd, 0x3150, 0x36ee, 0x2f4b, 0x3bd4, 0x2816, -0x3bb4, 0x3590, 0x3bf3, 0x38dd, 0x3472, 0x37f9, 0x38ec, 0x25b3, 0x3aac, 0x394d, 0x2e48, 0x387c, 0x39ed, 0x350a, 0x36e1, 0x3ad8, 0x3580, 0x3a08, 0x38d7, 0x390f, 0x370e, 0x30ed, 0x2fb2, 0x37f2, 0x35a8, 0x38bb, 0x389a, 0x3960, 0x35e1, 0x35d1, 0x3799, 0x3356, 0x375c, 0x3889, 0x38e7, 0x385e, 0x30f1, 0x3032, 0x3006, 0x3356, 0x36b1, 0x3af5, 0x342c, 0x3a9f, 0x386d, 0x3a8d, 0x2670, 0x3ba5, 0x3907, 0x39cb, 0x389b, 0x2914, 0x2db1, 0x2f6f, 0x3aa3, 0x346a, 0x3716, 0x303d, 0x3991, 0x3a21, 0x3b53, 0x3589, 0x3a6b, 0x34f7, 0x2d99, 0x380b, 0x392f, 0x36d9, 0x2e31, 0x30a2, 0x3569, 0x2657, 0x36dd, 0x306d, 0x36b5, 0x3ac4, 0x3a7a, 0x36f7, 0x38d6, 0x3b02, 0x355e, 0x3a19, 0x3bc4, 0x365c, 0x3b77, 0x3660, 0x3bc9, 0x380a, 0x3673, 0x3a4a, 0x3b19, 0x3843, 0x328c, 0x1a13, 0x3bd6, 0x3be2, -0x388d, 0x30c3, 0x3998, 0x389e, 0x3354, 0x3174, 0x3922, 0x3970, 0x2962, 0x3bc2, 0x3b1e, 0x3bd7, 0x2d84, 0x3573, 0x3846, 0x3703, 0x31ec, 0x3a5a, 0x3459, 0x2674, 0x291f, 0x3b76, 0x364f, 0x316f, 0x3a52, 0x3866, 0x34de, 0x33fc, 0x37fc, 0x3a20, 0x3ac2, 0x3893, 0x3208, 0x38d0, 0x3b1c, 0x39cd, 0x36f6, 0x301f, 0x3965, 0x3971, 0x3afa, 0x34d9, 0x2e34, 0x35a3, 0x390d, 0x2e83, 0x3b5a, 0x3acb, 0x377e, 0x2416, 0x38b8, 0x3a2e, 0x3a04, 0x3062, 0x2ef1, 0x3584, 0x2afb, 0x382a, 0x3a74, 0x37da, 0x3730, 0x32a6, 0x3866, 0x389e, 0x3850, 0x3551, 0x3939, 0x3a0e, 0x2deb, 0x3b97, 0x38e9, 0x39b6, 0x35b5, 0x3999, 0x38fe, 0x1918, 0x326d, 0x3477, 0x34e5, 0x3855, 0x38f8, 0x3307, 0x385d, 0x3b17, 0x36d8, 0x3020, 0x3a66, 0x3bf9, 0x3b17, 0x28cf, 0x3abb, 0x38b3, 0x3bc0, 0x31e4, 0x30d8, 0x3090, -0x393f, 0x350a, 0x2171, 0x31dd, 0x3aa3, 0x3962, 0x2a30, 0x3a0c, 0x3983, 0x3474, 0x38a4, 0x30fc, 0x348a, 0x3afd, 0x3ab0, 0x2fca, 0x3bb3, 0x3be9, 0x3984, 0x3a8d, 0x3119, 0x3b78, 0x3bd6, 0x2ef6, 0x31ef, 0x27c9, 0x39be, 0x32fb, 0x2ce0, 0x368b, 0x3612, 0x32b6, 0x2d58, 0x3787, 0x3811, 0x3745, 0x3b86, 0x32f4, 0x3941, 0x3936, 0x2ab3, 0x39cd, 0x3851, 0x395d, 0x355e, 0x383e, 0x380a, 0x3b5d, 0x34d8, 0x3292, 0x3124, 0x31af, 0x3942, 0x2d54, 0x3b54, 0x3b1b, 0x3bbd, 0x3507, 0x324e, 0x3364, 0x2514, 0x3af6, 0x3236, 0x361c, 0x3721, 0x39b4, 0x3b86, 0x3907, 0x3316, 0x2c3b, 0x3bf4, 0x3abb, 0x38b8, 0x38e5, 0x38e4, 0x3941, 0x318e, 0x3563, 0x318a, 0x3953, 0x328a, 0x2ed0, 0x3782, 0x38b3, 0x3632, 0x35f0, 0x3a31, 0x3112, 0x3b49, 0x3b8e, 0x31f8, 0x3a70, 0x3bf1, 0x375e, 0x381c, 0x3791, -0x38f7, 0x2f6a, 0x3b74, 0x3198, 0x3815, 0x3184, 0x39cc, 0x37c1, 0x3b16, 0x39dd, 0x3690, 0x36ee, 0x3ba5, 0x383d, 0x3bee, 0x37f9, 0x3617, 0x399a, 0x3597, 0x3703, 0x3281, 0x3047, 0x35b6, 0x3835, 0x3708, 0x3634, 0x3965, 0x39b8, 0x3a00, 0x3996, 0x2bd0, 0x2ced, 0x36de, 0x35e6, 0x3b4d, 0x3888, 0x3bc5, 0x290f, 0x3baf, 0x388e, 0x3721, 0x3896, 0x3565, 0x33f9, 0x312b, 0x37c8, 0x3889, 0x376b, 0x3bb6, 0x375e, 0x35bf, 0x2f6b, 0x39f6, 0x34ba, 0x3936, 0x3969, 0x39de, 0x3ad4, 0x39eb, 0x3a5c, 0x33e3, 0x3367, 0x3297, 0x3bea, 0x3bcf, 0x3806, 0x39b7, 0x3b63, 0x37d2, 0x385b, 0x3a88, 0x3a6a, 0x3447, 0x385b, 0x3078, 0x347b, 0x3790, 0x32c5, 0x30f3, 0x33d2, 0x3864, 0x35a7, 0x359b, 0x32c2, 0x3bf7, 0x379d, 0x39ed, 0x3964, 0x367e, 0x2f3e, 0x3b0a, 0x3a32, 0x3b2b, 0x287e, 0x2ee6, 0x3ba2 +uint16_t y_inp [768] = { +0x3150, 0x2dc1, 0x3033, 0x31f5, 0x3bb6, 0x3bff, 0x39f9, 0x3662, 0x3720, 0x351d, 0x384b, 0x3093, 0x3b9d, 0x35ad, 0x3695, 0x3466, 0x2300, 0x3445, 0x33ae, 0x3586, 0x38a3, 0x3bdb, 0x33a2, 0x379b, 0x3a0e, 0x38b0, 0x39ba, 0x379b, 0x39d3, 0x3a51, 0x3b30, 0x3794, +0x3b76, 0x3042, 0x38cc, 0x2dfc, 0x3b1a, 0x37fb, 0x38f7, 0x3824, 0x386f, 0x38c7, 0x36ee, 0x3a9c, 0x38d3, 0x2c67, 0x3a80, 0x2f30, 0x3328, 0x3721, 0x3790, 0x34e5, 0x3a6c, 0x3643, 0x3934, 0x3034, 0x38d4, 0x362e, 0x3b4b, 0x3408, 0x30c2, 0x370e, 0x3b31, 0x3b16, +0x3b6b, 0x39d4, 0x339c, 0x381e, 0x313e, 0x3671, 0x3ae2, 0x3479, 0x3940, 0x342d, 0x3925, 0x370a, 0x35d8, 0x2dad, 0x3888, 0x24b9, 0x375d, 0x34bd, 0x3243, 0x2ebb, 0x3970, 0x3a21, 0x3a07, 0x3877, 0x3888, 0x3569, 0x372d, 0x2ac1, 0x331e, 0x384d, 0x3996, 0x34a4, +0x35c1, 0x33a9, 0x21ed, 0x3a42, 0x388d, 0x34e4, 0x33c3, 0x34f9, 0x3a7b, 0x33fb, 0x2cdd, 0x3b0e, 0x333b, 0x3973, 0x34fc, 0x3771, 0x32ea, 0x2de4, 0x31a8, 0x3946, 0x3657, 0x3a4e, 0x36f6, 0x2829, 0x3ba2, 0x3bdc, 0x3bb3, 0x306c, 0x398d, 0x3a1f, 0x3991, 0x3846, +0x3547, 0x3292, 0x2e85, 0x31ed, 0x3979, 0x3a90, 0x28a4, 0x3bed, 0x36d8, 0x340e, 0x3b6a, 0x3ab6, 0x3824, 0x382b, 0x3ac3, 0x3811, 0x36d7, 0x3519, 0x3a92, 0x3a42, 0x29d1, 0x383a, 0x3a9b, 0x300e, 0x2cd3, 0x39cd, 0x3874, 0x3a07, 0x2eb1, 0x3b86, 0x3ad8, 0x3a5d, +0x3712, 0x284a, 0x38c1, 0x3bec, 0x39c0, 0x32cd, 0x3ad8, 0x3bce, 0x3817, 0x3896, 0x3aa7, 0x3870, 0x3996, 0x32cc, 0x3a4c, 0x3757, 0x3814, 0x3b65, 0x3acb, 0x376e, 0x34c0, 0x3609, 0x3bf0, 0x3b24, 0x3b29, 0x3848, 0x34b7, 0x398a, 0x220c, 0x3498, 0x3a8c, 0x3883, +0x38c4, 0x3af6, 0x3a42, 0x2dd6, 0x3147, 0x3717, 0x3a8e, 0x3af9, 0x3296, 0x38ef, 0x34fa, 0x3555, 0x3b29, 0x38de, 0x315e, 0x3773, 0x3b67, 0x3116, 0x38ec, 0x357c, 0x35d0, 0x2518, 0x3958, 0x2a03, 0x37d9, 0x3699, 0x3a1e, 0x3230, 0x3b13, 0x36d4, 0x3b2a, 0x39ad, +0x3b10, 0x351a, 0x3b97, 0x3326, 0x2b54, 0x3b7d, 0x386f, 0x373e, 0x37fa, 0x389b, 0x3b90, 0x3292, 0x3975, 0x38f3, 0x37f1, 0x3590, 0x3810, 0x2fd7, 0x3bf7, 0x3a5a, 0x3a1c, 0x34dd, 0x354c, 0x32f8, 0x3095, 0x321e, 0x39e0, 0x395c, 0x3717, 0x357f, 0x394a, 0x34b1, +0x3ba4, 0x380c, 0x3604, 0x2f50, 0x348d, 0x3828, 0x3a9f, 0x39ce, 0x32ca, 0x3906, 0x3ab2, 0x2ca5, 0x38c9, 0x362a, 0x34b2, 0x29dc, 0x3a36, 0x3052, 0x31b7, 0x3589, 0x387c, 0x3401, 0x3b22, 0x3ad6, 0x3ae8, 0x3238, 0x3494, 0x3502, 0x3717, 0x3a6c, 0x3229, 0x368c, +0x3056, 0x3a56, 0x3498, 0x39eb, 0x2864, 0x342d, 0x39e0, 0x34a1, 0x2b99, 0x3a04, 0x38ff, 0x328c, 0x34d9, 0x387d, 0x3a3c, 0x32e5, 0x39eb, 0x3984, 0x34dd, 0x38a7, 0x373f, 0x39b4, 0x3235, 0x2f58, 0x2f39, 0x3800, 0x3758, 0x3939, 0x39fc, 0x3a4b, 0x38bf, 0x30ee, +0x345e, 0x39c8, 0x3a6d, 0x3262, 0x3b81, 0x31dc, 0x3a15, 0x3bd0, 0x36af, 0x36de, 0x37d5, 0x39d7, 0x3ad3, 0x3ac1, 0x3109, 0x35ea, 0x31c6, 0x398d, 0x3987, 0x3a4a, 0x34d2, 0x2ed2, 0x35e6, 0x352c, 0x39eb, 0x3bd6, 0x3a5b, 0x39d1, 0x34aa, 0x3ade, 0x394b, 0x38a1, +0x2bed, 0x38de, 0x3811, 0x3813, 0x391a, 0x374b, 0x3829, 0x3725, 0x38f0, 0x3583, 0x3966, 0x3a7d, 0x375a, 0x38fe, 0x3696, 0x361c, 0x39a8, 0x35f0, 0x38e1, 0x3003, 0x3595, 0x316e, 0x3862, 0x3af8, 0x3af2, 0x34c8, 0x381d, 0x37d8, 0x3893, 0x3a9c, 0x3989, 0x308c, +0x30cc, 0x2538, 0x399d, 0x3919, 0x399e, 0x21cc, 0x38e9, 0x30f8, 0x3a20, 0x3b3c, 0x3990, 0x259c, 0x3143, 0x3080, 0x3967, 0x3afb, 0x3a1b, 0x3779, 0x2eeb, 0x39f3, 0x379a, 0x369c, 0x3985, 0x3a1b, 0x3ba6, 0x3a53, 0x28d5, 0x3881, 0x31d9, 0x3a34, 0x3bd9, 0x393a, +0x3601, 0x2c6e, 0x3636, 0x3298, 0x39bb, 0x3a08, 0x38db, 0x35ad, 0x3a09, 0x36a6, 0x3bc7, 0x3bac, 0x34ae, 0x3291, 0x290b, 0x3250, 0x2648, 0x333d, 0x2bf3, 0x34b1, 0x30e0, 0x351f, 0x3a74, 0x38dc, 0x3883, 0x2841, 0x35e1, 0x390d, 0x3a50, 0x3abd, 0x386d, 0x3bb7, +0x3b94, 0x36b7, 0x3a49, 0x332f, 0x3a1d, 0x354b, 0x3bab, 0x3346, 0x3417, 0x351e, 0x3b6d, 0x391a, 0x2db3, 0x3b1c, 0x3a4a, 0x37b7, 0x36cf, 0x3a56, 0x39c4, 0x3be9, 0x34f0, 0x39be, 0x3691, 0x1ba5, 0x3888, 0x3040, 0x3ae1, 0x3b9b, 0x398f, 0x3a49, 0x3a16, 0x38c0, +0x386c, 0x39ab, 0x37fa, 0x382c, 0x3a6f, 0x393f, 0x340d, 0x38ef, 0x39d1, 0x3845, 0x398f, 0x363e, 0x3687, 0x3052, 0x3a2b, 0x392c, 0x2f5c, 0x3412, 0x3a1f, 0x3b2f, 0x3bcc, 0x3a63, 0x3a89, 0x36e9, 0x3921, 0x3b80, 0x2dc0, 0x3a03, 0x3beb, 0x38d3, 0x36cb, 0x39a3, +0x3978, 0x3a88, 0x3ba4, 0x3561, 0x28c5, 0x33a0, 0x37be, 0x2c39, 0x30ee, 0x3782, 0x2c07, 0x354e, 0x3491, 0x3a92, 0x331a, 0x3b15, 0x32e1, 0x3839, 0x3afb, 0x36c2, 0x2fd0, 0x29ad, 0x3b2e, 0x39c1, 0x2a8c, 0x341a, 0x2f90, 0x395a, 0x3969, 0x37ea, 0x3a5c, 0x3b6d, +0x3971, 0x3a93, 0x304e, 0x3623, 0x3a22, 0x31ee, 0x29df, 0x2c93, 0x3a01, 0x3a62, 0x366c, 0x371d, 0x3af3, 0x2e08, 0x3ac0, 0x3642, 0x3a28, 0x368d, 0x2d3d, 0x36d9, 0x32c3, 0x373f, 0x36fe, 0x3487, 0x2c81, 0x3623, 0x3b59, 0x3a91, 0x350a, 0x34f4, 0x3b09, 0x2c25, +0x3b13, 0x325a, 0x379e, 0x3a7d, 0x34b1, 0x39d5, 0x2ba8, 0x322b, 0x3b5e, 0x37ab, 0x2e24, 0x3ba9, 0x3a3d, 0x34f7, 0x3ba1, 0x3877, 0x3071, 0x39fb, 0x3bbd, 0x3633, 0x3b36, 0x2daa, 0x3b9b, 0x3aa0, 0x395c, 0x3b8f, 0x38d5, 0x3ab0, 0x3a8f, 0x36c2, 0x3b1f, 0x3489, +0x2acc, 0x3845, 0x3715, 0x37d8, 0x3992, 0x3bff, 0x350e, 0x3ad7, 0x39b0, 0x35ac, 0x3287, 0x385f, 0x3bd4, 0x37a3, 0x3438, 0x39a5, 0x3bcf, 0x38c3, 0x34f6, 0x3ae3, 0x3b57, 0x39af, 0x35eb, 0x3bed, 0x34d4, 0x2a95, 0x3b13, 0x384e, 0x3a3b, 0x33da, 0x3bce, 0x3b99, +0x3559, 0x3335, 0x3a2e, 0x3123, 0x38db, 0x33d0, 0x3638, 0x3b17, 0x3a72, 0x3afc, 0x3936, 0x3838, 0x2b69, 0x3895, 0x3a1a, 0x3192, 0x39d5, 0x37a5, 0x2eb0, 0x2e8b, 0x329a, 0x3b90, 0x390a, 0x3a1e, 0x3847, 0x375d, 0x3873, 0x35e2, 0x3771, 0x30f5, 0x3231, 0x3bd7, +0x2bbc, 0x3ace, 0x31ad, 0x3a6b, 0x28a4, 0x3b48, 0x3ba3, 0x3a84, 0x3353, 0x39f6, 0x381f, 0x2dd6, 0x314c, 0x34af, 0x3929, 0x3921, 0x383b, 0x34b0, 0x3923, 0x32c9, 0x3ae7, 0x318f, 0x3480, 0x2ad8, 0x3042, 0x3a4c, 0x349d, 0x2c12, 0x3abb, 0x3a57, 0x3b0d, 0x3111, +0x3359, 0x3a84, 0x38f2, 0x368d, 0x2f4b, 0x3ba0, 0x395c, 0x3026, 0x3a15, 0x2a04, 0x326e, 0x3522, 0x31a2, 0x382f, 0x2ada, 0x3b7c, 0x2f80, 0x3af5, 0x2d35, 0x38fa, 0x39ab, 0x2c6d, 0x2e7a, 0x39f6, 0x31a4, 0x3a53, 0x358c, 0x3951, 0x3a4e, 0x3916, 0x2a3f, 0x3ae9, +0x3b03, 0x39f8, 0x39fe, 0x3a61, 0x39fb, 0x3704, 0x360d, 0x39a7, 0x37a9, 0x348f, 0x3a30, 0x3af5, 0x366f, 0x3b29, 0x3a6a, 0x33d5, 0x370a, 0x39cd, 0x3444, 0x3bea, 0x3b2b, 0x312e, 0x3b8e, 0x32cf, 0x3b79, 0x3302, 0x3bba, 0x3962, 0x3413, 0x37a1, 0x39e0, 0x3805 }; \ No newline at end of file diff --git a/hwpe/redmule/inc/z_2D.h b/hwpe/redmule/inc/z_2D.h index 047fe23..aff808a 100644 --- a/hwpe/redmule/inc/z_2D.h +++ b/hwpe/redmule/inc/z_2D.h @@ -1,99 +1,27 @@ /* Header file generated by RedMulE Golden Model */ -uint16_t z_oup_2D [96][96] = { -0x4e2d, 0x4e0e, 0x4dda, 0x4de5, 0x4e0e, 0x4dbc, 0x4e3f, 0x4ed6, 0x4dce, 0x4eef, 0x4dfc, 0x4e55, 0x4e2f, 0x4d96, 0x4ddd, 0x4d8a, 0x4e4c, 0x4dc2, 0x4d63, 0x4daa, 0x4e0a, 0x4d89, 0x4dff, 0x4d7d, 0x4d9e, 0x4e07, 0x4ded, 0x4d68, 0x4e69, 0x4ea9, 0x4e7b, 0x4e13, 0x4e22, 0x4e13, 0x4e34, 0x4dd6, 0x4db5, 0x4db6, 0x4d9c, 0x4dfd, 0x4e51, 0x4e0f, 0x4d92, 0x4e46, 0x4db8, 0x4e97, 0x4d14, 0x4dcb, 0x4e6a, 0x4d8e, 0x4eb5, 0x4dee, 0x4d95, 0x4e1c, 0x4dcb, 0x4e1e, 0x4dff, 0x4d5d, 0x4d53, 0x4dde, 0x4dda, 0x4ea4, 0x4d1c, 0x4e1d, 0x4d30, 0x4dad, 0x4e27, 0x4e04, 0x4e55, 0x4ebb, 0x4e47, 0x4daa, 0x4ddf, 0x4dd8, 0x4e3a, 0x4db0, 0x4dc0, 0x4e1c, 0x4dc1, 0x4e33, 0x4e2b, 0x4dcd, 0x4da2, 0x4ebe, 0x4d64, 0x4da9, 0x4e7f, 0x4d80, 0x4e14, 0x4e9b, 0x4d7e, 0x4e85, 0x4e6d, 0x4e6e, 0x4e1e, 0x4def, -0x4def, 0x4d5f, 0x4e1d, 0x4daa, 0x4e29, 0x4dc0, 0x4e5f, 0x4f01, 0x4dcf, 0x4f33, 0x4dcf, 0x4e86, 0x4ecf, 0x4dfd, 0x4deb, 0x4d92, 0x4eda, 0x4e29, 0x4dae, 0x4e35, 0x4e49, 0x4da9, 0x4e33, 0x4d7d, 0x4e23, 0x4e28, 0x4dc0, 0x4e12, 0x4e62, 0x4eda, 0x4e71, 0x4e43, 0x4e2d, 0x4df3, 0x4e69, 0x4e0d, 0x4df7, 0x4dbd, 0x4dbc, 0x4da3, 0x4d9d, 0x4e3c, 0x4e01, 0x4ebb, 0x4dd5, 0x4e35, 0x4d3f, 0x4de4, 0x4efa, 0x4dc4, 0x4ee3, 0x4dac, 0x4d93, 0x4da3, 0x4da1, 0x4dee, 0x4e9a, 0x4db0, 0x4db0, 0x4e99, 0x4dfe, 0x4eaf, 0x4d59, 0x4e35, 0x4dee, 0x4de7, 0x4e60, 0x4e5d, 0x4ec7, 0x4eb1, 0x4e59, 0x4de0, 0x4e35, 0x4df5, 0x4df4, 0x4df1, 0x4df4, 0x4e27, 0x4dd5, 0x4e4b, 0x4e87, 0x4da1, 0x4dbc, 0x4eb6, 0x4d77, 0x4e4f, 0x4e04, 0x4d77, 0x4e43, 0x4ede, 0x4df7, 0x4e38, 0x4e81, 0x4e43, 0x4e43, 0x4e01, -0x4d9d, 0x4dbc, 0x4e1d, 0x4e2f, 0x4e69, 0x4ddf, 0x4e62, 0x4f1f, 0x4dbd, 0x4f0c, 0x4d88, 0x4da7, 0x4f23, 0x4dfa, 0x4e2e, 0x4de9, 0x4e67, 0x4de4, 0x4da6, 0x4ded, 0x4e28, 0x4d1b, 0x4e1d, 0x4dbb, 0x4dea, 0x4e1c, 0x4e67, 0x4ddc, 0x4de6, 0x4e7d, 0x4e2c, 0x4e1c, 0x4e41, 0x4def, 0x4e14, 0x4ddc, 0x4dc3, 0x4cfa, 0x4dac, 0x4db0, 0x4e84, 0x4df6, 0x4d77, 0x4e5a, 0x4dd5, 0x4ea7, 0x4d34, 0x4da6, 0x4eb7, 0x4dca, 0x4e9c, 0x4dcb, 0x4d04, 0x4dd7, 0x4dcd, 0x4e29, 0x4df3, 0x4d80, 0x4dc5, 0x4e3d, 0x4dd1, 0x4e42, 0x4d76, 0x4e54, 0x4d5a, 0x4db3, 0x4e0a, 0x4de8, 0x4ea2, 0x4e8e, 0x4dd8, 0x4e43, 0x4e16, 0x4d9b, 0x4e8b, 0x4e39, 0x4e02, 0x4dfa, 0x4de8, 0x4e07, 0x4ddd, 0x4dd4, 0x4d3f, 0x4e05, 0x4dac, 0x4e33, 0x4e61, 0x4d4c, 0x4e0b, 0x4e63, 0x4ddd, 0x4e37, 0x4e7d, 0x4e47, 0x4dbd, 0x4db9, -0x4db6, 0x4e32, 0x4e87, 0x4e33, 0x4e43, 0x4e2b, 0x4e79, 0x4f28, 0x4de8, 0x4edc, 0x4e5e, 0x4e94, 0x4f32, 0x4e18, 0x4dbc, 0x4e77, 0x4ea9, 0x4e8c, 0x4daa, 0x4ea9, 0x4e43, 0x4e20, 0x4e3c, 0x4da8, 0x4eb0, 0x4e1b, 0x4e7a, 0x4e32, 0x4eb8, 0x4eb2, 0x4ea5, 0x4e8b, 0x4e7f, 0x4de9, 0x4ee2, 0x4df5, 0x4e01, 0x4e5c, 0x4dbb, 0x4dee, 0x4e41, 0x4e65, 0x4e2d, 0x4ef5, 0x4e84, 0x4e78, 0x4de8, 0x4e32, 0x4ee1, 0x4dea, 0x4ef6, 0x4def, 0x4da8, 0x4e4f, 0x4dd0, 0x4e76, 0x4e84, 0x4def, 0x4d88, 0x4e53, 0x4e34, 0x4f79, 0x4db4, 0x4ea1, 0x4dc1, 0x4dee, 0x4e44, 0x4ec4, 0x4ed6, 0x4e82, 0x4e5e, 0x4df4, 0x4ec3, 0x4e45, 0x4ea1, 0x4e16, 0x4e00, 0x4e6f, 0x4e50, 0x4e80, 0x4e9c, 0x4df7, 0x4e1c, 0x4edf, 0x4dcb, 0x4e27, 0x4e39, 0x4d78, 0x4e1c, 0x4ec7, 0x4e37, 0x4e81, 0x4e8f, 0x4e4b, 0x4e45, 0x4dfa, -0x4e2a, 0x4e3d, 0x4e3d, 0x4df5, 0x4e3a, 0x4def, 0x4e2f, 0x4ed6, 0x4db3, 0x4ef3, 0x4e5a, 0x4e8e, 0x4f50, 0x4db6, 0x4e46, 0x4e34, 0x4ec9, 0x4e1b, 0x4dd6, 0x4e80, 0x4e1f, 0x4d99, 0x4e76, 0x4e52, 0x4e8a, 0x4e8d, 0x4e5b, 0x4dc1, 0x4eaf, 0x4efc, 0x4ebb, 0x4e52, 0x4e78, 0x4df4, 0x4e78, 0x4df1, 0x4dfa, 0x4dd4, 0x4d47, 0x4e48, 0x4e04, 0x4e20, 0x4ddd, 0x4ebb, 0x4e44, 0x4eca, 0x4d9b, 0x4dec, 0x4e9c, 0x4e12, 0x4ec7, 0x4dfd, 0x4d6c, 0x4e46, 0x4dc0, 0x4e37, 0x4e59, 0x4dbc, 0x4d8b, 0x4e40, 0x4e31, 0x4ef8, 0x4de1, 0x4de8, 0x4d97, 0x4dd2, 0x4ea0, 0x4e1c, 0x4e3a, 0x4eb4, 0x4dd5, 0x4e41, 0x4e5d, 0x4dbc, 0x4e1d, 0x4e55, 0x4e77, 0x4dfc, 0x4e4b, 0x4e22, 0x4ebe, 0x4d6d, 0x4dad, 0x4e2a, 0x4dd3, 0x4e56, 0x4e3a, 0x4d2e, 0x4e42, 0x4e95, 0x4dce, 0x4e3b, 0x4eef, 0x4e46, 0x4ded, 0x4df8, -0x4d39, 0x4d7b, 0x4da0, 0x4cfa, 0x4d82, 0x4d16, 0x4d98, 0x4e32, 0x4ce2, 0x4e4a, 0x4d6a, 0x4d64, 0x4e27, 0x4d47, 0x4d4c, 0x4d16, 0x4d7c, 0x4d49, 0x4d0d, 0x4d3e, 0x4d83, 0x4d12, 0x4d19, 0x4cbe, 0x4d0f, 0x4d83, 0x4d65, 0x4cdb, 0x4d3d, 0x4ded, 0x4dff, 0x4d5b, 0x4d74, 0x4d70, 0x4df1, 0x4ccd, 0x4d49, 0x4d16, 0x4cc3, 0x4d2f, 0x4d25, 0x4d85, 0x4d31, 0x4dc3, 0x4d5b, 0x4dcb, 0x4cb3, 0x4d51, 0x4d98, 0x4d29, 0x4dc9, 0x4cc1, 0x4cd1, 0x4d90, 0x4cd3, 0x4d59, 0x4d5e, 0x4cf7, 0x4cda, 0x4dae, 0x4d8f, 0x4e13, 0x4cee, 0x4d6a, 0x4d0f, 0x4d33, 0x4d00, 0x4d56, 0x4d88, 0x4dae, 0x4d78, 0x4d40, 0x4d9c, 0x4d7c, 0x4d58, 0x4d2c, 0x4d47, 0x4d28, 0x4db4, 0x4dfc, 0x4d97, 0x4cec, 0x4cf7, 0x4dc0, 0x4d0c, 0x4d81, 0x4d58, 0x4d28, 0x4d63, 0x4dad, 0x4d12, 0x4d75, 0x4d77, 0x4d51, 0x4ceb, 0x4d0b, -0x4d6b, 0x4d5e, 0x4e5d, 0x4da9, 0x4e1f, 0x4d97, 0x4df3, 0x4ec4, 0x4d90, 0x4ee0, 0x4da1, 0x4e24, 0x4e3b, 0x4d68, 0x4da9, 0x4ddf, 0x4dfd, 0x4d99, 0x4d6c, 0x4dba, 0x4e07, 0x4daa, 0x4df3, 0x4dd8, 0x4d51, 0x4dc7, 0x4ddb, 0x4d6e, 0x4dd9, 0x4df2, 0x4e39, 0x4e15, 0x4e04, 0x4e02, 0x4e05, 0x4dbf, 0x4de1, 0x4d43, 0x4d73, 0x4d9e, 0x4dd5, 0x4daf, 0x4daf, 0x4e51, 0x4dcc, 0x4e5c, 0x4d8f, 0x4d5d, 0x4e2f, 0x4d7c, 0x4e80, 0x4dd7, 0x4dbd, 0x4dc2, 0x4d5f, 0x4e11, 0x4de6, 0x4d6b, 0x4d1a, 0x4db4, 0x4dcb, 0x4eba, 0x4d24, 0x4ded, 0x4dc5, 0x4d51, 0x4dfe, 0x4dfd, 0x4e44, 0x4e33, 0x4e59, 0x4d99, 0x4ddf, 0x4d99, 0x4dd4, 0x4d66, 0x4df2, 0x4de9, 0x4d80, 0x4e30, 0x4e0a, 0x4daf, 0x4dc3, 0x4e3d, 0x4d79, 0x4d72, 0x4de1, 0x4d42, 0x4e4e, 0x4ea1, 0x4d84, 0x4e13, 0x4e0c, 0x4dc9, 0x4ddf, 0x4df4, -0x4db8, 0x4e02, 0x4e6b, 0x4d8a, 0x4e8f, 0x4e49, 0x4e5b, 0x4eb6, 0x4e1d, 0x4ef9, 0x4e2f, 0x4e65, 0x4ef9, 0x4db4, 0x4e86, 0x4e5c, 0x4eae, 0x4e23, 0x4d8f, 0x4e5a, 0x4e1e, 0x4de0, 0x4e5c, 0x4dbd, 0x4e38, 0x4e37, 0x4ec8, 0x4ded, 0x4ecd, 0x4ec5, 0x4f06, 0x4e9b, 0x4e8a, 0x4ea2, 0x4e41, 0x4dea, 0x4e04, 0x4d70, 0x4d5a, 0x4e34, 0x4e01, 0x4e51, 0x4e0f, 0x4ef0, 0x4dfe, 0x4edd, 0x4d8b, 0x4dd0, 0x4e6d, 0x4e69, 0x4f18, 0x4de4, 0x4d8f, 0x4e21, 0x4de2, 0x4e07, 0x4e56, 0x4ded, 0x4d8d, 0x4e39, 0x4e50, 0x4f37, 0x4dd6, 0x4e27, 0x4e04, 0x4df0, 0x4e92, 0x4e5b, 0x4e99, 0x4eeb, 0x4e66, 0x4e60, 0x4ebc, 0x4df6, 0x4e57, 0x4e40, 0x4eaf, 0x4e5c, 0x4e3f, 0x4e44, 0x4e23, 0x4de8, 0x4e56, 0x4e7e, 0x4e01, 0x4e52, 0x4e5b, 0x4dc5, 0x4e94, 0x4ee0, 0x4e48, 0x4e48, 0x4e63, 0x4e79, 0x4e21, 0x4e3c, -0x4e6a, 0x4e58, 0x4f33, 0x4e57, 0x4ef5, 0x4ee8, 0x4f08, 0x4fd1, 0x4e62, 0x4fc6, 0x4f04, 0x4eab, 0x4fda, 0x4e9b, 0x4eec, 0x4f27, 0x4f04, 0x4eaf, 0x4e19, 0x4f17, 0x4f28, 0x4e59, 0x4ea0, 0x4e0d, 0x4eec, 0x4e73, 0x4f0c, 0x4e6a, 0x4ead, 0x4f95, 0x4edf, 0x4e8f, 0x4eca, 0x4ecd, 0x4edd, 0x4ea5, 0x4edf, 0x4dff, 0x4e28, 0x4e64, 0x4f27, 0x4ed2, 0x4e25, 0x4f29, 0x4e6c, 0x4f95, 0x4e35, 0x4e5b, 0x4f4d, 0x4ea8, 0x4f3b, 0x4eb4, 0x4e2b, 0x4ec0, 0x4e61, 0x4e91, 0x4ee7, 0x4e8c, 0x4e76, 0x4f05, 0x4ed3, 0x4f5e, 0x4e81, 0x4f16, 0x4dfd, 0x4e55, 0x4e9d, 0x4ed1, 0x4ec6, 0x4fa5, 0x4ef2, 0x4ee3, 0x4f1d, 0x4e51, 0x4ebf, 0x4ed8, 0x4ee9, 0x4ef1, 0x4ee2, 0x4f02, 0x4fae, 0x4e7b, 0x4ee4, 0x4f3c, 0x4e59, 0x4ec7, 0x4e97, 0x4e36, 0x4efb, 0x4f02, 0x4ecb, 0x4f03, 0x4f13, 0x4eb2, 0x4e94, 0x4e77, -0x4e1b, 0x4e38, 0x4edf, 0x4dc6, 0x4ee0, 0x4e35, 0x4efd, 0x4f97, 0x4e50, 0x4f9b, 0x4ddc, 0x4e39, 0x4f6b, 0x4e55, 0x4eb4, 0x4e63, 0x4ea0, 0x4e3b, 0x4e17, 0x4e2a, 0x4ed9, 0x4e23, 0x4ee7, 0x4e56, 0x4e34, 0x4e9b, 0x4eda, 0x4e0b, 0x4e82, 0x4ef2, 0x4e95, 0x4ec3, 0x4f05, 0x4e55, 0x4efc, 0x4e8f, 0x4e7c, 0x4e01, 0x4e0a, 0x4e45, 0x4e28, 0x4e65, 0x4e20, 0x4e78, 0x4ebd, 0x4ea1, 0x4e22, 0x4e2b, 0x4f6f, 0x4dcf, 0x4f35, 0x4e0f, 0x4dcb, 0x4e76, 0x4e08, 0x4e7f, 0x4f05, 0x4e5b, 0x4dd7, 0x4e83, 0x4ebd, 0x4f4c, 0x4d7b, 0x4eef, 0x4e01, 0x4e78, 0x4ee6, 0x4ea6, 0x4f28, 0x4f00, 0x4e4e, 0x4e31, 0x4ed7, 0x4e4e, 0x4e6f, 0x4e7a, 0x4e9f, 0x4ee6, 0x4e74, 0x4e91, 0x4eba, 0x4e1f, 0x4e1f, 0x4f5d, 0x4e22, 0x4e84, 0x4e2c, 0x4da3, 0x4e82, 0x4ec5, 0x4ec8, 0x4f13, 0x4ef4, 0x4e9a, 0x4eb6, 0x4e5a, -0x4d6b, 0x4db6, 0x4e0b, 0x4d3b, 0x4df7, 0x4d88, 0x4e15, 0x4e81, 0x4d5f, 0x4ef0, 0x4e2f, 0x4da2, 0x4e6a, 0x4da1, 0x4d9c, 0x4e6c, 0x4e0b, 0x4db1, 0x4d3c, 0x4dfc, 0x4d97, 0x4d63, 0x4e39, 0x4d4d, 0x4da9, 0x4d99, 0x4e40, 0x4da0, 0x4de3, 0x4e28, 0x4e04, 0x4ddc, 0x4dcb, 0x4de6, 0x4e6b, 0x4d91, 0x4dd5, 0x4d84, 0x4d44, 0x4d36, 0x4d75, 0x4de6, 0x4dba, 0x4ed7, 0x4d6f, 0x4e5a, 0x4d88, 0x4d6d, 0x4e03, 0x4d64, 0x4e96, 0x4d8a, 0x4d5c, 0x4dca, 0x4d7c, 0x4e1b, 0x4dfc, 0x4d86, 0x4d66, 0x4dd9, 0x4df3, 0x4e53, 0x4d4b, 0x4e2a, 0x4d9b, 0x4d43, 0x4ddb, 0x4e5a, 0x4de7, 0x4e56, 0x4dee, 0x4d8c, 0x4dcc, 0x4dc7, 0x4daa, 0x4d80, 0x4d97, 0x4e56, 0x4d5f, 0x4e77, 0x4d98, 0x4d51, 0x4d8d, 0x4e89, 0x4d38, 0x4d6b, 0x4dc8, 0x4d8e, 0x4df9, 0x4e13, 0x4d2f, 0x4e07, 0x4e0f, 0x4da0, 0x4d95, 0x4d6a, -0x4e54, 0x4deb, 0x4ea3, 0x4d9d, 0x4e6c, 0x4e3c, 0x4e8d, 0x4f56, 0x4de7, 0x4fa9, 0x4e3a, 0x4eb4, 0x4f3d, 0x4e5d, 0x4ea7, 0x4ead, 0x4f1d, 0x4ea7, 0x4deb, 0x4ea7, 0x4e17, 0x4e36, 0x4e45, 0x4e27, 0x4e42, 0x4e3a, 0x4f1a, 0x4e11, 0x4eb4, 0x4ee0, 0x4e33, 0x4ed2, 0x4e16, 0x4e07, 0x4ea9, 0x4df2, 0x4e4c, 0x4dda, 0x4e31, 0x4e0e, 0x4e32, 0x4e56, 0x4e0c, 0x4efb, 0x4e64, 0x4ebb, 0x4dbf, 0x4e3b, 0x4f0c, 0x4e63, 0x4f04, 0x4e4f, 0x4d9c, 0x4e3a, 0x4e16, 0x4e7c, 0x4e46, 0x4de2, 0x4df4, 0x4e91, 0x4eb6, 0x4f27, 0x4d8a, 0x4ecc, 0x4e0d, 0x4db3, 0x4e8e, 0x4e8a, 0x4ef0, 0x4f1f, 0x4eab, 0x4ea3, 0x4e4a, 0x4df3, 0x4ec1, 0x4e6a, 0x4e6c, 0x4eff, 0x4e45, 0x4ed3, 0x4ec6, 0x4e6f, 0x4e4a, 0x4ebf, 0x4de4, 0x4e40, 0x4e27, 0x4d9e, 0x4e79, 0x4ecb, 0x4e61, 0x4ed6, 0x4e9a, 0x4e4b, 0x4e55, 0x4e73, -0x4e5e, 0x4e1e, 0x4ea1, 0x4df7, 0x4e66, 0x4e71, 0x4f2d, 0x4fbf, 0x4ea4, 0x4fe2, 0x4eab, 0x4eb4, 0x4f9c, 0x4e8b, 0x4e41, 0x4e79, 0x4f69, 0x4e96, 0x4e07, 0x4e86, 0x4ec0, 0x4e14, 0x4e95, 0x4df4, 0x4e9e, 0x4e78, 0x4eea, 0x4df9, 0x4f28, 0x4f40, 0x4f87, 0x4e93, 0x4e29, 0x4ec5, 0x4ec1, 0x4eb6, 0x4e8f, 0x4e9f, 0x4def, 0x4e75, 0x4e75, 0x4e9b, 0x4e29, 0x4f68, 0x4eac, 0x4ed8, 0x4da6, 0x4e52, 0x4f2e, 0x4ea6, 0x4f46, 0x4ea9, 0x4e5b, 0x4e52, 0x4e4d, 0x4e99, 0x4ea2, 0x4e9e, 0x4ded, 0x4ed3, 0x4f10, 0x4fe3, 0x4df6, 0x4ee2, 0x4e13, 0x4f05, 0x4ed1, 0x4ef3, 0x4ef8, 0x4ef2, 0x4eb6, 0x4e1f, 0x4ecc, 0x4e25, 0x4ea1, 0x4ea3, 0x4ef8, 0x4e98, 0x4e43, 0x4ee0, 0x4f0e, 0x4e38, 0x4e74, 0x4f7b, 0x4df6, 0x4ee6, 0x4eba, 0x4de8, 0x4e70, 0x4f1a, 0x4e91, 0x4ed2, 0x4f2a, 0x4e84, 0x4ed3, 0x4ea0, -0x4e1c, 0x4e04, 0x4dfd, 0x4e12, 0x4de2, 0x4e0b, 0x4e45, 0x4ecf, 0x4d91, 0x4edb, 0x4e15, 0x4de1, 0x4ee1, 0x4e07, 0x4da5, 0x4dc1, 0x4e24, 0x4e0f, 0x4d89, 0x4e26, 0x4da5, 0x4d97, 0x4e39, 0x4ddb, 0x4e48, 0x4e3b, 0x4e20, 0x4d9f, 0x4e65, 0x4e82, 0x4e0b, 0x4d9e, 0x4de7, 0x4dbd, 0x4e42, 0x4da5, 0x4dc9, 0x4da4, 0x4dc0, 0x4da9, 0x4e74, 0x4e5c, 0x4de2, 0x4ee1, 0x4e10, 0x4eb1, 0x4d66, 0x4da6, 0x4eba, 0x4e1f, 0x4e9c, 0x4e61, 0x4d43, 0x4dcb, 0x4d98, 0x4e08, 0x4e22, 0x4dea, 0x4ddd, 0x4e76, 0x4e4e, 0x4e86, 0x4d7b, 0x4dfe, 0x4d4c, 0x4e37, 0x4d97, 0x4e31, 0x4e4f, 0x4ebe, 0x4e34, 0x4da1, 0x4e64, 0x4d9e, 0x4df2, 0x4e04, 0x4dd1, 0x4e3a, 0x4dd7, 0x4ea4, 0x4e09, 0x4db9, 0x4d96, 0x4e9a, 0x4d95, 0x4dd5, 0x4e1d, 0x4d54, 0x4de8, 0x4e4a, 0x4dd0, 0x4e6e, 0x4e53, 0x4e49, 0x4d86, 0x4d68, -0x4da0, 0x4dee, 0x4e81, 0x4df4, 0x4de0, 0x4dcd, 0x4ddd, 0x4eae, 0x4dce, 0x4f09, 0x4e0f, 0x4df0, 0x4ecc, 0x4df5, 0x4ddf, 0x4dca, 0x4dd6, 0x4d7f, 0x4dc1, 0x4e0d, 0x4dff, 0x4d9f, 0x4dd5, 0x4d55, 0x4daa, 0x4d84, 0x4e57, 0x4da9, 0x4e39, 0x4eb3, 0x4e60, 0x4dea, 0x4dd4, 0x4e18, 0x4e4a, 0x4dbf, 0x4d8b, 0x4d9f, 0x4d54, 0x4d9f, 0x4e12, 0x4de5, 0x4d9b, 0x4e24, 0x4db4, 0x4e48, 0x4dba, 0x4d88, 0x4e72, 0x4d39, 0x4e4e, 0x4d65, 0x4cef, 0x4e05, 0x4da6, 0x4dbe, 0x4e07, 0x4d71, 0x4d4a, 0x4deb, 0x4e37, 0x4e5e, 0x4dc0, 0x4e20, 0x4d3a, 0x4d5a, 0x4dbd, 0x4e31, 0x4e64, 0x4e77, 0x4e40, 0x4da2, 0x4e46, 0x4da5, 0x4db6, 0x4db4, 0x4db0, 0x4e17, 0x4dc7, 0x4e14, 0x4e24, 0x4dc0, 0x4d5b, 0x4e25, 0x4d91, 0x4e08, 0x4e39, 0x4db0, 0x4ddc, 0x4e55, 0x4d39, 0x4e17, 0x4e75, 0x4dd5, 0x4de9, 0x4e2c, -0x4d74, 0x4d5a, 0x4dde, 0x4d5b, 0x4dc3, 0x4d09, 0x4d93, 0x4e08, 0x4da7, 0x4e79, 0x4d85, 0x4dea, 0x4e38, 0x4d6f, 0x4d63, 0x4d92, 0x4df3, 0x4d6a, 0x4cd6, 0x4d9c, 0x4d83, 0x4d56, 0x4dd5, 0x4d8e, 0x4d84, 0x4da6, 0x4e24, 0x4d2a, 0x4dbb, 0x4e22, 0x4da3, 0x4de8, 0x4d30, 0x4dcc, 0x4db8, 0x4d87, 0x4d63, 0x4d3b, 0x4d3a, 0x4d78, 0x4d6c, 0x4d6c, 0x4d72, 0x4df4, 0x4d6a, 0x4e25, 0x4d3a, 0x4d20, 0x4e25, 0x4d00, 0x4dfc, 0x4d64, 0x4cf9, 0x4d95, 0x4d05, 0x4d3b, 0x4db6, 0x4d0e, 0x4d12, 0x4dd1, 0x4d95, 0x4e0b, 0x4d6a, 0x4de4, 0x4d38, 0x4d87, 0x4e22, 0x4df4, 0x4dc1, 0x4e09, 0x4d9d, 0x4dca, 0x4dd9, 0x4d6a, 0x4d8f, 0x4d3e, 0x4dba, 0x4dbb, 0x4d84, 0x4d7b, 0x4e1e, 0x4d4d, 0x4d67, 0x4e00, 0x4d27, 0x4d54, 0x4db9, 0x4cda, 0x4db1, 0x4e29, 0x4d71, 0x4e22, 0x4df2, 0x4d61, 0x4df0, 0x4d52, -0x4d31, 0x4d90, 0x4e17, 0x4db3, 0x4e1b, 0x4dac, 0x4e08, 0x4ec6, 0x4da8, 0x4eea, 0x4dcb, 0x4e2c, 0x4ee0, 0x4df0, 0x4dda, 0x4dcc, 0x4ea1, 0x4d9a, 0x4dac, 0x4d91, 0x4e2b, 0x4daf, 0x4d8d, 0x4dc6, 0x4e1f, 0x4e0e, 0x4e23, 0x4d57, 0x4e3b, 0x4e3d, 0x4e32, 0x4e66, 0x4e1f, 0x4da7, 0x4e4d, 0x4d47, 0x4da1, 0x4d69, 0x4d6f, 0x4df5, 0x4e0b, 0x4e09, 0x4d7c, 0x4e41, 0x4e09, 0x4e4f, 0x4db3, 0x4df9, 0x4e6a, 0x4de9, 0x4f3e, 0x4e2d, 0x4da0, 0x4e44, 0x4e1a, 0x4df6, 0x4dfc, 0x4d91, 0x4d48, 0x4dcf, 0x4e23, 0x4eb4, 0x4ce1, 0x4e40, 0x4d7d, 0x4da5, 0x4e55, 0x4e34, 0x4e67, 0x4ea2, 0x4e48, 0x4db5, 0x4e25, 0x4e0b, 0x4e1a, 0x4dc4, 0x4e27, 0x4df3, 0x4de6, 0x4e31, 0x4e6f, 0x4de8, 0x4d85, 0x4e70, 0x4d69, 0x4dd9, 0x4de8, 0x4d18, 0x4da7, 0x4e04, 0x4dd3, 0x4e2c, 0x4e3d, 0x4e23, 0x4dd6, 0x4dd2, -0x4e0b, 0x4de2, 0x4e76, 0x4dc3, 0x4e4c, 0x4da5, 0x4e8f, 0x4ec5, 0x4e4d, 0x4f7d, 0x4df4, 0x4e19, 0x4efc, 0x4dc4, 0x4de0, 0x4dd8, 0x4ec5, 0x4dc9, 0x4dd7, 0x4e2b, 0x4e79, 0x4d8d, 0x4e5a, 0x4daa, 0x4e09, 0x4e3f, 0x4e7d, 0x4d99, 0x4e50, 0x4ed9, 0x4ec7, 0x4e5b, 0x4e31, 0x4e6d, 0x4ea8, 0x4e52, 0x4e4a, 0x4dfa, 0x4d61, 0x4e28, 0x4dfa, 0x4e30, 0x4dbd, 0x4ebd, 0x4e1c, 0x4f17, 0x4dad, 0x4e34, 0x4e90, 0x4dd8, 0x4f2e, 0x4e40, 0x4d4b, 0x4e2a, 0x4d89, 0x4deb, 0x4e42, 0x4de8, 0x4d63, 0x4e29, 0x4e46, 0x4f35, 0x4dd4, 0x4e25, 0x4d5f, 0x4e3a, 0x4ee4, 0x4e5b, 0x4e97, 0x4ea5, 0x4e51, 0x4e34, 0x4e6b, 0x4e53, 0x4e7a, 0x4e14, 0x4e12, 0x4e0e, 0x4df0, 0x4e0d, 0x4ebc, 0x4de5, 0x4dbb, 0x4ead, 0x4df9, 0x4e62, 0x4e34, 0x4d91, 0x4e53, 0x4ec3, 0x4e2a, 0x4e18, 0x4e5c, 0x4eac, 0x4e3c, 0x4e1a, -0x4db4, 0x4ded, 0x4e56, 0x4dd8, 0x4dd5, 0x4e20, 0x4f02, 0x4f27, 0x4e56, 0x4f17, 0x4e18, 0x4e35, 0x4f47, 0x4e28, 0x4e4c, 0x4e26, 0x4e8c, 0x4db7, 0x4dab, 0x4e2b, 0x4e62, 0x4de7, 0x4e47, 0x4d76, 0x4dd3, 0x4e32, 0x4e41, 0x4d9b, 0x4e36, 0x4ee1, 0x4eda, 0x4e4e, 0x4e46, 0x4e28, 0x4e76, 0x4e65, 0x4df2, 0x4dd6, 0x4dc5, 0x4e0c, 0x4e02, 0x4da9, 0x4da7, 0x4eb1, 0x4e0c, 0x4e9c, 0x4db8, 0x4e4b, 0x4ea5, 0x4dca, 0x4ea0, 0x4e03, 0x4d89, 0x4e30, 0x4da8, 0x4e2f, 0x4e4f, 0x4e24, 0x4dce, 0x4e2a, 0x4e77, 0x4f06, 0x4d80, 0x4e7e, 0x4d88, 0x4df1, 0x4e6b, 0x4e12, 0x4e4f, 0x4eed, 0x4e20, 0x4e44, 0x4df4, 0x4e38, 0x4e62, 0x4e44, 0x4e3a, 0x4e7d, 0x4e02, 0x4eac, 0x4e74, 0x4e07, 0x4df2, 0x4e84, 0x4dfe, 0x4e3a, 0x4e0c, 0x4d86, 0x4e4d, 0x4e72, 0x4dfb, 0x4e39, 0x4e61, 0x4e46, 0x4dfd, 0x4e42, -0x4de9, 0x4dbb, 0x4e30, 0x4d6f, 0x4dfa, 0x4d82, 0x4e70, 0x4ec5, 0x4da1, 0x4f06, 0x4e5b, 0x4e47, 0x4e79, 0x4dad, 0x4dd5, 0x4e61, 0x4e44, 0x4dae, 0x4dee, 0x4e4f, 0x4e40, 0x4d9e, 0x4e3e, 0x4ddf, 0x4dab, 0x4e84, 0x4e5e, 0x4da7, 0x4e58, 0x4f0e, 0x4e10, 0x4e42, 0x4e18, 0x4e24, 0x4e7c, 0x4e08, 0x4e14, 0x4db7, 0x4db8, 0x4e22, 0x4df6, 0x4e07, 0x4d8b, 0x4ebc, 0x4db7, 0x4eb3, 0x4d91, 0x4d9e, 0x4e45, 0x4db8, 0x4ed5, 0x4dc6, 0x4db4, 0x4da1, 0x4d70, 0x4e4c, 0x4e72, 0x4d8a, 0x4dc9, 0x4d7f, 0x4e1d, 0x4f30, 0x4d7c, 0x4e93, 0x4dd2, 0x4de4, 0x4e93, 0x4e72, 0x4e34, 0x4f3d, 0x4e42, 0x4de7, 0x4e76, 0x4df4, 0x4eae, 0x4df6, 0x4e2b, 0x4e50, 0x4e4b, 0x4e66, 0x4e63, 0x4de2, 0x4de1, 0x4e80, 0x4d96, 0x4dd7, 0x4dee, 0x4ce7, 0x4d9a, 0x4e60, 0x4dc3, 0x4e68, 0x4e4f, 0x4e2d, 0x4e06, 0x4e31, -0x4e00, 0x4e5b, 0x4e77, 0x4dda, 0x4e1a, 0x4dee, 0x4e83, 0x4f15, 0x4e59, 0x4f9a, 0x4e31, 0x4e60, 0x4f31, 0x4e94, 0x4df9, 0x4e36, 0x4eaf, 0x4e48, 0x4dd9, 0x4e49, 0x4e2c, 0x4e35, 0x4ec4, 0x4e48, 0x4e46, 0x4e24, 0x4e95, 0x4dbc, 0x4edf, 0x4f2e, 0x4eeb, 0x4e2f, 0x4e0d, 0x4e31, 0x4ef6, 0x4e75, 0x4dd4, 0x4dd9, 0x4d8f, 0x4e1f, 0x4e09, 0x4dc8, 0x4dfd, 0x4ef2, 0x4e8f, 0x4ed0, 0x4de5, 0x4e12, 0x4ebd, 0x4df4, 0x4ece, 0x4dda, 0x4d36, 0x4e4e, 0x4e0d, 0x4e28, 0x4ead, 0x4e24, 0x4df9, 0x4e79, 0x4eae, 0x4f04, 0x4deb, 0x4e71, 0x4d7e, 0x4e7b, 0x4e6d, 0x4ee2, 0x4e66, 0x4f2b, 0x4e6f, 0x4df6, 0x4ec0, 0x4e28, 0x4e7a, 0x4e28, 0x4e28, 0x4e4e, 0x4e66, 0x4ef7, 0x4ed3, 0x4deb, 0x4e05, 0x4eb3, 0x4dd9, 0x4e88, 0x4e61, 0x4dfd, 0x4e3b, 0x4e89, 0x4e3a, 0x4e50, 0x4ec6, 0x4e51, 0x4e3f, 0x4de0, -0x4dcf, 0x4e18, 0x4e1c, 0x4db7, 0x4e2e, 0x4e1f, 0x4e65, 0x4f10, 0x4dc9, 0x4fb4, 0x4e91, 0x4e63, 0x4f7c, 0x4e56, 0x4e23, 0x4e0d, 0x4e8d, 0x4dea, 0x4db7, 0x4e18, 0x4e14, 0x4da8, 0x4e1e, 0x4d71, 0x4df0, 0x4e35, 0x4e39, 0x4dec, 0x4e2a, 0x4f10, 0x4e78, 0x4e50, 0x4e31, 0x4e77, 0x4f16, 0x4dca, 0x4d9c, 0x4e1c, 0x4da1, 0x4e11, 0x4e25, 0x4e03, 0x4d87, 0x4ecf, 0x4e2a, 0x4ec7, 0x4d9b, 0x4e44, 0x4e78, 0x4dc2, 0x4f13, 0x4e08, 0x4d85, 0x4ddc, 0x4dd4, 0x4db3, 0x4e2e, 0x4e26, 0x4df4, 0x4e2e, 0x4e60, 0x4f22, 0x4d9d, 0x4ebb, 0x4d96, 0x4e65, 0x4e39, 0x4e4b, 0x4e0f, 0x4ee2, 0x4e96, 0x4dd0, 0x4e47, 0x4e26, 0x4e9e, 0x4e32, 0x4dfa, 0x4e81, 0x4e39, 0x4e73, 0x4ec3, 0x4d8e, 0x4dfe, 0x4e9d, 0x4ded, 0x4e43, 0x4ddb, 0x4d85, 0x4e00, 0x4e59, 0x4def, 0x4e65, 0x4e9c, 0x4e31, 0x4df9, 0x4dd1, -0x4d16, 0x4d87, 0x4e0a, 0x4d67, 0x4dfb, 0x4d49, 0x4daa, 0x4e26, 0x4d51, 0x4e60, 0x4d6f, 0x4d77, 0x4eb9, 0x4da7, 0x4d87, 0x4d9f, 0x4ddd, 0x4d9e, 0x4d4e, 0x4dc1, 0x4dc3, 0x4d44, 0x4d6b, 0x4d53, 0x4d48, 0x4d3f, 0x4ddb, 0x4d6f, 0x4db5, 0x4de9, 0x4dfc, 0x4ddb, 0x4de2, 0x4d7e, 0x4e02, 0x4d6f, 0x4d80, 0x4d13, 0x4d1b, 0x4d08, 0x4dc7, 0x4d52, 0x4d7f, 0x4d8b, 0x4db3, 0x4dfe, 0x4d24, 0x4d12, 0x4dd6, 0x4d8c, 0x4e24, 0x4d61, 0x4d12, 0x4dcd, 0x4d2d, 0x4d83, 0x4db3, 0x4dc8, 0x4d3f, 0x4dd5, 0x4d9e, 0x4e44, 0x4d09, 0x4dbc, 0x4d01, 0x4d29, 0x4d96, 0x4d7d, 0x4dd3, 0x4e10, 0x4d50, 0x4dd2, 0x4d5d, 0x4da8, 0x4dac, 0x4d98, 0x4d92, 0x4d5f, 0x4d9a, 0x4de5, 0x4dcd, 0x4da5, 0x4d6a, 0x4dd6, 0x4d0c, 0x4d65, 0x4d4c, 0x4d42, 0x4dd3, 0x4dbd, 0x4db7, 0x4d89, 0x4dcd, 0x4de3, 0x4d99, 0x4d64, -0x4cf5, 0x4d4a, 0x4dd3, 0x4d03, 0x4d77, 0x4d6c, 0x4db3, 0x4e28, 0x4d32, 0x4e34, 0x4d68, 0x4d9a, 0x4dad, 0x4db7, 0x4dad, 0x4d6d, 0x4e1e, 0x4d30, 0x4d3d, 0x4d9d, 0x4df3, 0x4d29, 0x4d33, 0x4ce2, 0x4d74, 0x4d67, 0x4d9d, 0x4d11, 0x4dca, 0x4e34, 0x4d92, 0x4dca, 0x4d8c, 0x4d33, 0x4da0, 0x4db5, 0x4d3b, 0x4d32, 0x4d0f, 0x4d4f, 0x4cf7, 0x4da4, 0x4d97, 0x4e28, 0x4d40, 0x4d7d, 0x4d00, 0x4d56, 0x4e0a, 0x4cc8, 0x4e0d, 0x4d08, 0x4d21, 0x4d52, 0x4cce, 0x4d5a, 0x4de3, 0x4ced, 0x4ced, 0x4db9, 0x4dbd, 0x4e16, 0x4cf5, 0x4da1, 0x4d57, 0x4d4f, 0x4ddc, 0x4daf, 0x4dfa, 0x4db2, 0x4e26, 0x4d1c, 0x4d8a, 0x4d31, 0x4d88, 0x4cd3, 0x4da8, 0x4dac, 0x4d50, 0x4d91, 0x4d76, 0x4d56, 0x4d5b, 0x4dab, 0x4d56, 0x4d93, 0x4d6f, 0x4cef, 0x4d8e, 0x4ddb, 0x4d6a, 0x4dd8, 0x4db3, 0x4dff, 0x4d77, 0x4d73, -0x4e14, 0x4df9, 0x4e48, 0x4dc5, 0x4dbd, 0x4dcc, 0x4e10, 0x4ec3, 0x4df1, 0x4f5c, 0x4e1c, 0x4e5d, 0x4edc, 0x4df1, 0x4dc0, 0x4e2d, 0x4e62, 0x4de3, 0x4d61, 0x4e39, 0x4e3b, 0x4d79, 0x4e3f, 0x4d76, 0x4daf, 0x4dc8, 0x4e42, 0x4d8d, 0x4e79, 0x4f05, 0x4e44, 0x4e3d, 0x4dce, 0x4e92, 0x4eb7, 0x4df7, 0x4dc4, 0x4db0, 0x4da3, 0x4df3, 0x4db6, 0x4dd6, 0x4dc5, 0x4ea3, 0x4d9e, 0x4ec8, 0x4d7c, 0x4e22, 0x4ee2, 0x4d92, 0x4f08, 0x4db2, 0x4dc3, 0x4df6, 0x4d31, 0x4e50, 0x4e8f, 0x4dd7, 0x4d6e, 0x4e1a, 0x4e86, 0x4f14, 0x4d99, 0x4e85, 0x4d54, 0x4e46, 0x4e26, 0x4e60, 0x4e4b, 0x4f02, 0x4e22, 0x4e04, 0x4e08, 0x4e0e, 0x4e68, 0x4e4a, 0x4de0, 0x4e5a, 0x4e36, 0x4e3d, 0x4e54, 0x4de2, 0x4df7, 0x4e14, 0x4dc6, 0x4e2f, 0x4e56, 0x4d70, 0x4dd2, 0x4e2a, 0x4e35, 0x4e7f, 0x4e7c, 0x4e20, 0x4db4, 0x4d7e, -0x4dc6, 0x4dc2, 0x4e0e, 0x4d9c, 0x4df6, 0x4df8, 0x4dfa, 0x4eb0, 0x4dbc, 0x4ee4, 0x4df7, 0x4da7, 0x4e6e, 0x4d80, 0x4dd3, 0x4dcf, 0x4e02, 0x4d96, 0x4df7, 0x4e57, 0x4e54, 0x4db1, 0x4e11, 0x4d54, 0x4e15, 0x4de1, 0x4e29, 0x4d6c, 0x4dfd, 0x4e7b, 0x4e56, 0x4dfb, 0x4e05, 0x4db1, 0x4e80, 0x4dde, 0x4db5, 0x4d95, 0x4d5e, 0x4de3, 0x4e10, 0x4dea, 0x4d4f, 0x4e65, 0x4dbc, 0x4e8c, 0x4d8d, 0x4ddc, 0x4e2d, 0x4daf, 0x4eb2, 0x4d7d, 0x4d12, 0x4dfc, 0x4d73, 0x4dcf, 0x4e1f, 0x4ddf, 0x4da2, 0x4e58, 0x4e2c, 0x4e98, 0x4d5b, 0x4dec, 0x4d85, 0x4d9f, 0x4de6, 0x4e43, 0x4dca, 0x4e3e, 0x4e6e, 0x4db7, 0x4e2e, 0x4dc1, 0x4dc9, 0x4da4, 0x4dc9, 0x4e02, 0x4df8, 0x4e2f, 0x4e59, 0x4dfe, 0x4d43, 0x4e64, 0x4d80, 0x4ddd, 0x4e15, 0x4d57, 0x4e48, 0x4df3, 0x4dad, 0x4e2f, 0x4e47, 0x4e28, 0x4d94, 0x4db7, -0x4d5f, 0x4d44, 0x4de2, 0x4d6d, 0x4d9b, 0x4d02, 0x4dbe, 0x4e08, 0x4d52, 0x4e16, 0x4d7f, 0x4d66, 0x4e4e, 0x4d55, 0x4d0f, 0x4d7f, 0x4d95, 0x4d6e, 0x4ce8, 0x4dad, 0x4d69, 0x4d42, 0x4dd8, 0x4d33, 0x4d9f, 0x4d61, 0x4dcb, 0x4d43, 0x4dbe, 0x4e12, 0x4dd1, 0x4da1, 0x4d81, 0x4da9, 0x4dff, 0x4d57, 0x4d5b, 0x4cef, 0x4d36, 0x4ccd, 0x4d6a, 0x4d20, 0x4d73, 0x4e30, 0x4d5c, 0x4e02, 0x4d09, 0x4d13, 0x4dee, 0x4d08, 0x4e28, 0x4ce2, 0x4ca5, 0x4d53, 0x4ce4, 0x4d25, 0x4dec, 0x4d44, 0x4d3a, 0x4dc9, 0x4da0, 0x4e0f, 0x4d36, 0x4d80, 0x4c83, 0x4d4c, 0x4d64, 0x4da2, 0x4e08, 0x4e17, 0x4d3f, 0x4d3b, 0x4db3, 0x4d82, 0x4d60, 0x4d87, 0x4d58, 0x4d7a, 0x4d47, 0x4da7, 0x4d24, 0x4d1c, 0x4d2b, 0x4e06, 0x4d16, 0x4dc6, 0x4d87, 0x4cdf, 0x4d70, 0x4db9, 0x4d27, 0x4dc9, 0x4dbb, 0x4d8f, 0x4d3f, 0x4d16, -0x4e12, 0x4e6c, 0x4e94, 0x4e81, 0x4ec0, 0x4e60, 0x4e3b, 0x4f8e, 0x4df8, 0x4f5a, 0x4e88, 0x4e88, 0x4f1c, 0x4e40, 0x4dea, 0x4ddf, 0x4ecb, 0x4e4e, 0x4e15, 0x4e32, 0x4ec9, 0x4dc5, 0x4e88, 0x4dd2, 0x4e51, 0x4e38, 0x4e88, 0x4e03, 0x4e75, 0x4ef6, 0x4eda, 0x4e88, 0x4ea8, 0x4e77, 0x4ec2, 0x4df3, 0x4e12, 0x4e23, 0x4df5, 0x4e0a, 0x4e86, 0x4e65, 0x4df8, 0x4ede, 0x4e52, 0x4ea9, 0x4da0, 0x4e3d, 0x4f16, 0x4e37, 0x4ee0, 0x4df5, 0x4def, 0x4e7a, 0x4dc7, 0x4e6b, 0x4ea5, 0x4e02, 0x4e52, 0x4e35, 0x4e6f, 0x4f2c, 0x4dd0, 0x4e5d, 0x4e27, 0x4e36, 0x4e9b, 0x4e77, 0x4eaa, 0x4f73, 0x4e60, 0x4dfc, 0x4f07, 0x4e60, 0x4e77, 0x4dfd, 0x4e39, 0x4e7a, 0x4e32, 0x4e65, 0x4e35, 0x4e28, 0x4dfe, 0x4eb3, 0x4e20, 0x4e8f, 0x4e7a, 0x4e05, 0x4e5b, 0x4eca, 0x4dcf, 0x4ec3, 0x4eee, 0x4ea4, 0x4e05, 0x4ded, -0x4e2a, 0x4e81, 0x4e68, 0x4de3, 0x4e93, 0x4dc5, 0x4e6a, 0x4f2a, 0x4df5, 0x4fa3, 0x4e54, 0x4e50, 0x4edf, 0x4e46, 0x4e9a, 0x4e35, 0x4ef8, 0x4e70, 0x4da1, 0x4e3d, 0x4e71, 0x4dfb, 0x4e64, 0x4d8e, 0x4e2f, 0x4e3d, 0x4e51, 0x4dd6, 0x4ecd, 0x4ea0, 0x4ecf, 0x4eba, 0x4e64, 0x4e65, 0x4ed8, 0x4dfd, 0x4e11, 0x4e1a, 0x4dc1, 0x4e5c, 0x4e66, 0x4e31, 0x4e6d, 0x4efa, 0x4dfe, 0x4f06, 0x4dd9, 0x4e0a, 0x4eed, 0x4df1, 0x4ef5, 0x4e12, 0x4dc6, 0x4e56, 0x4e31, 0x4dec, 0x4e66, 0x4db6, 0x4d8c, 0x4e40, 0x4e38, 0x4f37, 0x4dc4, 0x4ebe, 0x4e42, 0x4de6, 0x4e8b, 0x4eab, 0x4e84, 0x4eee, 0x4ec7, 0x4e13, 0x4e45, 0x4e7c, 0x4ea5, 0x4e72, 0x4e7f, 0x4e91, 0x4e53, 0x4e74, 0x4e5f, 0x4e41, 0x4e9c, 0x4ea3, 0x4da1, 0x4e06, 0x4e0b, 0x4dce, 0x4e5a, 0x4ed8, 0x4deb, 0x4e5c, 0x4ecd, 0x4eaf, 0x4e17, 0x4dc0, -0x4de1, 0x4df5, 0x4e47, 0x4de4, 0x4e55, 0x4de7, 0x4e23, 0x4f36, 0x4e02, 0x4f54, 0x4e1d, 0x4e77, 0x4ef4, 0x4e3a, 0x4e11, 0x4e2f, 0x4ef2, 0x4dd7, 0x4d78, 0x4e6f, 0x4e4b, 0x4da1, 0x4dc0, 0x4df2, 0x4de6, 0x4e31, 0x4ed7, 0x4e12, 0x4e15, 0x4eba, 0x4e06, 0x4e6e, 0x4e1e, 0x4e11, 0x4e69, 0x4dc7, 0x4df4, 0x4d9a, 0x4dbb, 0x4e16, 0x4dd8, 0x4e22, 0x4dad, 0x4e5c, 0x4df8, 0x4ea6, 0x4d9d, 0x4e12, 0x4ec1, 0x4dd9, 0x4f1a, 0x4ded, 0x4d6c, 0x4de3, 0x4dc5, 0x4e41, 0x4e66, 0x4d96, 0x4def, 0x4e15, 0x4e17, 0x4ec8, 0x4da2, 0x4e8e, 0x4de3, 0x4de2, 0x4ead, 0x4e9c, 0x4e8d, 0x4f0e, 0x4e35, 0x4e42, 0x4ebd, 0x4e0f, 0x4e8e, 0x4e1b, 0x4e29, 0x4e37, 0x4e5f, 0x4e33, 0x4e74, 0x4e10, 0x4dc6, 0x4e6f, 0x4dd4, 0x4e07, 0x4e8f, 0x4d7c, 0x4da2, 0x4ea6, 0x4ddd, 0x4ea0, 0x4edc, 0x4e44, 0x4e3f, 0x4dcf, -0x4d64, 0x4dbc, 0x4e2a, 0x4d7b, 0x4e0c, 0x4d70, 0x4d5c, 0x4e7f, 0x4d22, 0x4e82, 0x4dc7, 0x4e34, 0x4eb8, 0x4d43, 0x4d93, 0x4db4, 0x4e62, 0x4d6c, 0x4d5d, 0x4df9, 0x4daf, 0x4d4c, 0x4d4d, 0x4d5e, 0x4dc0, 0x4d68, 0x4e15, 0x4d39, 0x4e00, 0x4e8d, 0x4df5, 0x4e3d, 0x4dbd, 0x4d3d, 0x4ddc, 0x4d68, 0x4d55, 0x4d32, 0x4cec, 0x4d58, 0x4d8d, 0x4dcc, 0x4d55, 0x4ded, 0x4dfd, 0x4e14, 0x4d4e, 0x4d69, 0x4e63, 0x4d60, 0x4e56, 0x4db8, 0x4d40, 0x4daf, 0x4d4b, 0x4db7, 0x4d88, 0x4d57, 0x4d78, 0x4df0, 0x4ddf, 0x4ea7, 0x4d74, 0x4ddf, 0x4d1f, 0x4d45, 0x4dda, 0x4dc0, 0x4e11, 0x4e5e, 0x4de0, 0x4dfb, 0x4db1, 0x4dbe, 0x4df9, 0x4df0, 0x4db3, 0x4de6, 0x4d9c, 0x4e03, 0x4e08, 0x4d73, 0x4d70, 0x4df1, 0x4dca, 0x4dc5, 0x4d97, 0x4d15, 0x4db0, 0x4e61, 0x4d67, 0x4dc5, 0x4e20, 0x4d85, 0x4d6b, 0x4d62, -0x4d80, 0x4df6, 0x4e6f, 0x4d6a, 0x4e44, 0x4dc4, 0x4e6c, 0x4e7a, 0x4dd6, 0x4f7d, 0x4dda, 0x4dc4, 0x4f2e, 0x4db6, 0x4e17, 0x4ddb, 0x4e6f, 0x4dae, 0x4d64, 0x4dd7, 0x4e04, 0x4dba, 0x4dc3, 0x4de4, 0x4e27, 0x4e3a, 0x4e65, 0x4d7c, 0x4e06, 0x4ead, 0x4dfa, 0x4e4d, 0x4df1, 0x4e0d, 0x4eb9, 0x4dd6, 0x4e4e, 0x4d75, 0x4dca, 0x4df0, 0x4dde, 0x4e13, 0x4de3, 0x4ef2, 0x4dfe, 0x4e7e, 0x4d4a, 0x4dd2, 0x4e5c, 0x4dac, 0x4e79, 0x4dce, 0x4d0a, 0x4e15, 0x4dfc, 0x4df1, 0x4e77, 0x4db2, 0x4d70, 0x4e5c, 0x4e18, 0x4ee6, 0x4db1, 0x4e6b, 0x4d81, 0x4e15, 0x4e18, 0x4e15, 0x4dff, 0x4e9d, 0x4e3a, 0x4e0b, 0x4e75, 0x4dee, 0x4e31, 0x4e0e, 0x4de0, 0x4e45, 0x4e2c, 0x4e78, 0x4e7c, 0x4da5, 0x4dad, 0x4edc, 0x4df9, 0x4e0d, 0x4e39, 0x4d71, 0x4d8a, 0x4e50, 0x4dd8, 0x4e38, 0x4e5e, 0x4ddd, 0x4e18, 0x4d7e, -0x4dd4, 0x4df2, 0x4e8f, 0x4dd6, 0x4e08, 0x4dc1, 0x4e1b, 0x4f76, 0x4dea, 0x4f19, 0x4e8a, 0x4eb4, 0x4f5a, 0x4de2, 0x4df5, 0x4e7d, 0x4e87, 0x4e40, 0x4db8, 0x4ea9, 0x4e79, 0x4da2, 0x4e33, 0x4d4a, 0x4e4b, 0x4e18, 0x4e44, 0x4e00, 0x4e51, 0x4e9f, 0x4e5d, 0x4e73, 0x4e09, 0x4e51, 0x4e4f, 0x4e52, 0x4ddf, 0x4dc7, 0x4dd6, 0x4e21, 0x4e2f, 0x4e62, 0x4ddb, 0x4ea4, 0x4e07, 0x4eb9, 0x4ded, 0x4dcc, 0x4ed5, 0x4dcd, 0x4ebf, 0x4dce, 0x4d8e, 0x4dd4, 0x4d90, 0x4e36, 0x4e69, 0x4de2, 0x4d98, 0x4e4c, 0x4e10, 0x4ecc, 0x4d5d, 0x4ebc, 0x4dd7, 0x4e00, 0x4e78, 0x4e8f, 0x4ea8, 0x4ee1, 0x4e82, 0x4e2e, 0x4e0b, 0x4e1d, 0x4e94, 0x4e36, 0x4dff, 0x4e1d, 0x4e2d, 0x4dd3, 0x4e2e, 0x4e02, 0x4def, 0x4e83, 0x4dc1, 0x4e30, 0x4e18, 0x4dc8, 0x4dcc, 0x4e7b, 0x4deb, 0x4e91, 0x4e53, 0x4ead, 0x4e39, 0x4de7, -0x4db6, 0x4dde, 0x4e7e, 0x4d9c, 0x4e4d, 0x4d7f, 0x4dd3, 0x4e1d, 0x4dee, 0x4efe, 0x4e96, 0x4e29, 0x4e9f, 0x4e12, 0x4dfb, 0x4e03, 0x4e55, 0x4e4d, 0x4d8e, 0x4df4, 0x4e23, 0x4dd3, 0x4dbf, 0x4dd2, 0x4e6f, 0x4dab, 0x4e07, 0x4e0d, 0x4e82, 0x4e89, 0x4e4c, 0x4e3f, 0x4e3b, 0x4e64, 0x4e44, 0x4e2d, 0x4db1, 0x4dc5, 0x4db7, 0x4dcf, 0x4e33, 0x4e54, 0x4e27, 0x4e12, 0x4e13, 0x4e28, 0x4d7e, 0x4df7, 0x4eb3, 0x4df0, 0x4eda, 0x4df1, 0x4d04, 0x4df4, 0x4d89, 0x4dfb, 0x4e5b, 0x4dd4, 0x4d9e, 0x4e56, 0x4e47, 0x4ec2, 0x4d55, 0x4e0c, 0x4d56, 0x4e2c, 0x4d9b, 0x4e3c, 0x4e5b, 0x4ed3, 0x4e76, 0x4de1, 0x4e24, 0x4e31, 0x4e21, 0x4dec, 0x4dfe, 0x4e35, 0x4e3a, 0x4e7f, 0x4e71, 0x4dc9, 0x4e07, 0x4ea7, 0x4dbf, 0x4e4d, 0x4e21, 0x4d4e, 0x4dff, 0x4e44, 0x4dbc, 0x4e34, 0x4e63, 0x4e9d, 0x4ddd, 0x4e09, -0x4d5f, 0x4d52, 0x4e04, 0x4d4d, 0x4dc9, 0x4d7b, 0x4e22, 0x4e97, 0x4dc6, 0x4ec4, 0x4e0e, 0x4e14, 0x4ea4, 0x4d64, 0x4dbc, 0x4df1, 0x4e04, 0x4d9f, 0x4db5, 0x4dcb, 0x4dbc, 0x4d69, 0x4dc0, 0x4da8, 0x4e3e, 0x4e16, 0x4e73, 0x4d5d, 0x4e6c, 0x4eb7, 0x4e6f, 0x4de6, 0x4dc8, 0x4e02, 0x4e9e, 0x4d83, 0x4d8c, 0x4d6f, 0x4d25, 0x4dfd, 0x4e12, 0x4d9a, 0x4d58, 0x4e95, 0x4de8, 0x4e74, 0x4d50, 0x4df8, 0x4ddf, 0x4e0e, 0x4eb7, 0x4de1, 0x4d5f, 0x4d95, 0x4d8a, 0x4dcf, 0x4e35, 0x4dc7, 0x4d95, 0x4db6, 0x4db7, 0x4f00, 0x4d61, 0x4dc9, 0x4daa, 0x4daf, 0x4e2e, 0x4e12, 0x4e12, 0x4ed4, 0x4e2f, 0x4db5, 0x4e30, 0x4dfc, 0x4e4e, 0x4e39, 0x4e06, 0x4e30, 0x4ddd, 0x4e11, 0x4e6b, 0x4dc2, 0x4d96, 0x4e6a, 0x4d42, 0x4e30, 0x4e1f, 0x4d21, 0x4de8, 0x4e8c, 0x4dbc, 0x4dcc, 0x4e03, 0x4e61, 0x4df3, 0x4e23, -0x4d73, 0x4d6b, 0x4e65, 0x4d83, 0x4e07, 0x4de4, 0x4e20, 0x4ecc, 0x4d8e, 0x4eca, 0x4ddf, 0x4dc7, 0x4ead, 0x4d93, 0x4d81, 0x4df7, 0x4e5a, 0x4dac, 0x4d5e, 0x4dd7, 0x4e0c, 0x4d53, 0x4db1, 0x4cc3, 0x4e09, 0x4dac, 0x4e44, 0x4d97, 0x4df3, 0x4e6c, 0x4e2d, 0x4da1, 0x4df0, 0x4df1, 0x4e35, 0x4d86, 0x4d8f, 0x4da9, 0x4ce6, 0x4d92, 0x4e33, 0x4e02, 0x4d57, 0x4e1e, 0x4d6f, 0x4e9b, 0x4cf6, 0x4db4, 0x4df2, 0x4e0a, 0x4e79, 0x4db6, 0x4d5e, 0x4d87, 0x4d94, 0x4d98, 0x4dd8, 0x4d9f, 0x4d9b, 0x4e07, 0x4db5, 0x4e90, 0x4d8f, 0x4e04, 0x4d37, 0x4df3, 0x4dbb, 0x4e0b, 0x4e46, 0x4e72, 0x4e38, 0x4d88, 0x4de0, 0x4dd0, 0x4e34, 0x4e1c, 0x4ddc, 0x4de9, 0x4df7, 0x4dc5, 0x4e26, 0x4dcb, 0x4dc6, 0x4e10, 0x4db4, 0x4dda, 0x4e2c, 0x4d42, 0x4dda, 0x4e34, 0x4df9, 0x4df6, 0x4e4c, 0x4e60, 0x4dce, 0x4da1, -0x4dfb, 0x4ddc, 0x4dfc, 0x4df6, 0x4e60, 0x4e79, 0x4ee5, 0x4f0d, 0x4e50, 0x4f64, 0x4e51, 0x4e14, 0x4f68, 0x4e42, 0x4e0e, 0x4dea, 0x4e93, 0x4e28, 0x4dd7, 0x4e3a, 0x4e8b, 0x4d3a, 0x4e6a, 0x4dd7, 0x4e04, 0x4e77, 0x4e54, 0x4de5, 0x4e6e, 0x4ead, 0x4e4d, 0x4ed8, 0x4e36, 0x4e13, 0x4ef5, 0x4e57, 0x4e79, 0x4df7, 0x4dca, 0x4dd7, 0x4dc8, 0x4e46, 0x4df8, 0x4ea0, 0x4e57, 0x4eab, 0x4dbd, 0x4de8, 0x4ebc, 0x4ddd, 0x4f0b, 0x4e75, 0x4d8e, 0x4e2c, 0x4d68, 0x4e38, 0x4e5d, 0x4de2, 0x4e27, 0x4e44, 0x4e80, 0x4f24, 0x4db1, 0x4e59, 0x4dcb, 0x4df5, 0x4e8c, 0x4e7c, 0x4ec9, 0x4eca, 0x4e37, 0x4e6b, 0x4e74, 0x4e1e, 0x4ebb, 0x4e4e, 0x4e39, 0x4e60, 0x4e2e, 0x4e6a, 0x4ebd, 0x4ddd, 0x4dd9, 0x4e88, 0x4db2, 0x4e21, 0x4de8, 0x4daf, 0x4e9e, 0x4e7e, 0x4e1d, 0x4e78, 0x4e9e, 0x4e69, 0x4e48, 0x4df0, -0x4e18, 0x4e15, 0x4e0d, 0x4d9d, 0x4de2, 0x4db6, 0x4e03, 0x4e90, 0x4db2, 0x4f64, 0x4e3c, 0x4e44, 0x4f07, 0x4e61, 0x4e19, 0x4e2a, 0x4e27, 0x4dea, 0x4dda, 0x4e0d, 0x4e2a, 0x4d6f, 0x4df2, 0x4dae, 0x4e27, 0x4e12, 0x4e69, 0x4d56, 0x4e61, 0x4ec9, 0x4e75, 0x4dfb, 0x4df1, 0x4e4b, 0x4e66, 0x4e00, 0x4df6, 0x4dd5, 0x4d9c, 0x4dd9, 0x4dc1, 0x4e0f, 0x4dff, 0x4e66, 0x4e12, 0x4e5e, 0x4dc5, 0x4e06, 0x4ea9, 0x4d9a, 0x4edd, 0x4d9c, 0x4d79, 0x4dfa, 0x4dec, 0x4de7, 0x4e23, 0x4dde, 0x4d74, 0x4e25, 0x4e5e, 0x4ed2, 0x4dbe, 0x4eb2, 0x4d68, 0x4df8, 0x4e4e, 0x4e5f, 0x4e72, 0x4eae, 0x4e68, 0x4d79, 0x4e1b, 0x4df4, 0x4e5c, 0x4e0b, 0x4e38, 0x4e14, 0x4e30, 0x4e1e, 0x4e6e, 0x4da5, 0x4e15, 0x4e83, 0x4d85, 0x4e05, 0x4dc2, 0x4d58, 0x4dfe, 0x4e6a, 0x4dbd, 0x4df2, 0x4e78, 0x4e34, 0x4e58, 0x4de8, -0x4ed2, 0x4e61, 0x4e8f, 0x4ebf, 0x4ef5, 0x4e4a, 0x4ed0, 0x4f75, 0x4dcc, 0x500b, 0x4e3a, 0x4ed7, 0x4f6a, 0x4e6b, 0x4e3d, 0x4e69, 0x4ee1, 0x4ef6, 0x4de0, 0x4e8a, 0x4ea9, 0x4dd9, 0x4e98, 0x4e63, 0x4e1a, 0x4eb5, 0x4f27, 0x4dfb, 0x4eec, 0x4f05, 0x4ee4, 0x4ec3, 0x4ede, 0x4ed6, 0x4eee, 0x4e11, 0x4e56, 0x4dc8, 0x4e3e, 0x4e6d, 0x4ebb, 0x4e82, 0x4e5e, 0x4f27, 0x4ec1, 0x4f29, 0x4dc5, 0x4e07, 0x4f4b, 0x4e3a, 0x4f06, 0x4e9b, 0x4e12, 0x4e68, 0x4e1b, 0x4e6c, 0x4ec0, 0x4e53, 0x4dd4, 0x4e71, 0x4ea6, 0x4f59, 0x4d84, 0x4ed9, 0x4dd2, 0x4e56, 0x4ecf, 0x4e41, 0x4e5b, 0x4f78, 0x4eaa, 0x4ee4, 0x4ec2, 0x4e0f, 0x4ea8, 0x4e99, 0x4e0f, 0x4ed0, 0x4e36, 0x4e7e, 0x4ea4, 0x4e09, 0x4ea2, 0x4ed1, 0x4e45, 0x4e2d, 0x4e7f, 0x4dfe, 0x4ea7, 0x4f08, 0x4e5b, 0x4f1e, 0x4f1b, 0x4e8d, 0x4e63, 0x4e1f, -0x4d50, 0x4d58, 0x4dc6, 0x4d63, 0x4d51, 0x4cf4, 0x4dea, 0x4e93, 0x4d63, 0x4e41, 0x4d61, 0x4dd5, 0x4e3a, 0x4d60, 0x4dd1, 0x4d9f, 0x4e21, 0x4d1d, 0x4d52, 0x4d9e, 0x4df7, 0x4d53, 0x4d8c, 0x4d57, 0x4dad, 0x4d52, 0x4ddb, 0x4ccb, 0x4e0b, 0x4e33, 0x4e0d, 0x4e17, 0x4d8e, 0x4d64, 0x4e15, 0x4d7d, 0x4db1, 0x4d3c, 0x4d35, 0x4d81, 0x4d5b, 0x4ddf, 0x4d29, 0x4e15, 0x4d2c, 0x4dbe, 0x4ca5, 0x4d96, 0x4dd8, 0x4d8b, 0x4deb, 0x4d1f, 0x4d1e, 0x4d79, 0x4ce2, 0x4d9c, 0x4de9, 0x4d13, 0x4d46, 0x4d99, 0x4ddf, 0x4e32, 0x4d14, 0x4dae, 0x4d49, 0x4d7d, 0x4dd3, 0x4dc0, 0x4e07, 0x4e17, 0x4de2, 0x4d3c, 0x4dcc, 0x4dd0, 0x4dff, 0x4d24, 0x4d49, 0x4dc4, 0x4d5e, 0x4d94, 0x4e1d, 0x4d76, 0x4d29, 0x4dce, 0x4d50, 0x4d84, 0x4d8a, 0x4d39, 0x4dcc, 0x4dd3, 0x4d6b, 0x4de9, 0x4e08, 0x4d81, 0x4d94, 0x4d8a, -0x4d9f, 0x4e04, 0x4e12, 0x4d91, 0x4df5, 0x4d8b, 0x4dbb, 0x4ea8, 0x4da5, 0x4edd, 0x4da2, 0x4da1, 0x4e67, 0x4dae, 0x4db6, 0x4df3, 0x4e3c, 0x4d05, 0x4d7d, 0x4dcd, 0x4dbd, 0x4d86, 0x4da9, 0x4d85, 0x4dc9, 0x4daa, 0x4e3d, 0x4d34, 0x4dfa, 0x4e65, 0x4e16, 0x4ddf, 0x4dae, 0x4d7e, 0x4e6f, 0x4d42, 0x4d8c, 0x4d5c, 0x4d39, 0x4e04, 0x4d90, 0x4da6, 0x4d72, 0x4e42, 0x4e03, 0x4e15, 0x4d9b, 0x4dc6, 0x4e18, 0x4d68, 0x4e3e, 0x4da7, 0x4cfb, 0x4db9, 0x4db4, 0x4d47, 0x4dac, 0x4d0d, 0x4d91, 0x4de7, 0x4dcc, 0x4ece, 0x4d39, 0x4ddb, 0x4d3f, 0x4d17, 0x4e3d, 0x4e87, 0x4da9, 0x4e9d, 0x4df6, 0x4dba, 0x4de3, 0x4d73, 0x4ddf, 0x4d6c, 0x4df5, 0x4dc4, 0x4d89, 0x4dac, 0x4e55, 0x4d8d, 0x4d29, 0x4e7c, 0x4d3e, 0x4dc3, 0x4dc6, 0x4d16, 0x4db1, 0x4db6, 0x4d2e, 0x4e10, 0x4e8f, 0x4e53, 0x4def, 0x4d93, -0x4d7c, 0x4dc3, 0x4e09, 0x4e1d, 0x4e57, 0x4dfd, 0x4ea6, 0x4f29, 0x4e11, 0x4f37, 0x4e26, 0x4e3f, 0x4f1f, 0x4e26, 0x4e37, 0x4e0b, 0x4ea0, 0x4e58, 0x4d9f, 0x4df1, 0x4e40, 0x4d80, 0x4e42, 0x4da5, 0x4e6b, 0x4e59, 0x4e1a, 0x4dc2, 0x4e18, 0x4eae, 0x4eb2, 0x4e4e, 0x4e46, 0x4e70, 0x4e78, 0x4de5, 0x4dfb, 0x4d66, 0x4ddb, 0x4dcf, 0x4de8, 0x4e80, 0x4e25, 0x4efd, 0x4e0a, 0x4e74, 0x4d9c, 0x4e3a, 0x4ec3, 0x4e2a, 0x4ea9, 0x4db9, 0x4d98, 0x4e32, 0x4dfd, 0x4e29, 0x4e8b, 0x4da4, 0x4dda, 0x4e59, 0x4e6d, 0x4f14, 0x4da8, 0x4e73, 0x4e03, 0x4e0e, 0x4e3f, 0x4e4f, 0x4e67, 0x4ece, 0x4e6d, 0x4db3, 0x4e71, 0x4e03, 0x4e4d, 0x4e1d, 0x4e9e, 0x4deb, 0x4dd6, 0x4de6, 0x4ebf, 0x4da2, 0x4e25, 0x4eb3, 0x4dbd, 0x4e42, 0x4e33, 0x4dfa, 0x4e18, 0x4e34, 0x4db7, 0x4e62, 0x4e91, 0x4e55, 0x4e39, 0x4e0e, -0x4e1c, 0x4e0e, 0x4ea5, 0x4dfe, 0x4e42, 0x4e24, 0x4ee6, 0x4f64, 0x4e07, 0x4f49, 0x4e23, 0x4e79, 0x4f00, 0x4e39, 0x4e49, 0x4e64, 0x4efa, 0x4e6b, 0x4dcb, 0x4ebb, 0x4dec, 0x4e02, 0x4e6b, 0x4dad, 0x4e53, 0x4e8d, 0x4e1b, 0x4dbe, 0x4e5f, 0x4f4a, 0x4ea3, 0x4e1b, 0x4e26, 0x4e29, 0x4e9b, 0x4e22, 0x4e06, 0x4e0a, 0x4e12, 0x4dd4, 0x4e83, 0x4e6b, 0x4e03, 0x4ebb, 0x4e0e, 0x4eef, 0x4db8, 0x4de8, 0x4ef8, 0x4dfa, 0x4e70, 0x4dfe, 0x4db4, 0x4e48, 0x4db3, 0x4dd6, 0x4e90, 0x4e0f, 0x4e43, 0x4eb7, 0x4eb4, 0x4f39, 0x4db4, 0x4eea, 0x4dc9, 0x4e4f, 0x4e79, 0x4e82, 0x4e4d, 0x4ebe, 0x4ea0, 0x4e1d, 0x4e88, 0x4e2a, 0x4ea2, 0x4dff, 0x4e4a, 0x4e1e, 0x4e56, 0x4e42, 0x4eee, 0x4e13, 0x4e05, 0x4e8d, 0x4d84, 0x4e5f, 0x4e72, 0x4da9, 0x4e65, 0x4e82, 0x4dd0, 0x4eec, 0x4ebf, 0x4e6d, 0x4e05, 0x4e34, -0x4df7, 0x4df8, 0x4e19, 0x4dc2, 0x4e08, 0x4d96, 0x4e15, 0x4e8b, 0x4dd6, 0x4ee6, 0x4e2a, 0x4e81, 0x4eb0, 0x4dbc, 0x4db3, 0x4dc1, 0x4e4a, 0x4e07, 0x4de6, 0x4e38, 0x4e01, 0x4d73, 0x4de0, 0x4d6b, 0x4e18, 0x4e38, 0x4e4c, 0x4d81, 0x4e65, 0x4efa, 0x4e48, 0x4e20, 0x4e19, 0x4dc1, 0x4e7b, 0x4dd9, 0x4e18, 0x4dd3, 0x4d4c, 0x4ddd, 0x4dc0, 0x4e14, 0x4d8a, 0x4e9f, 0x4dbf, 0x4e45, 0x4d36, 0x4e03, 0x4e7c, 0x4d8b, 0x4e7a, 0x4dc3, 0x4d4d, 0x4dff, 0x4d84, 0x4ddd, 0x4e76, 0x4d7d, 0x4d74, 0x4e02, 0x4e10, 0x4e5f, 0x4d8c, 0x4e26, 0x4d8b, 0x4dd5, 0x4e33, 0x4e0a, 0x4df0, 0x4ee1, 0x4e21, 0x4d9d, 0x4e45, 0x4e22, 0x4e2a, 0x4de6, 0x4e22, 0x4e4c, 0x4de5, 0x4e0e, 0x4e9d, 0x4d29, 0x4d9c, 0x4e5e, 0x4d53, 0x4e15, 0x4e02, 0x4d64, 0x4dd4, 0x4e46, 0x4d64, 0x4e19, 0x4e5f, 0x4e3a, 0x4d78, 0x4db6, -0x4dec, 0x4ddb, 0x4e68, 0x4d9e, 0x4e3c, 0x4e3e, 0x4e41, 0x4f6c, 0x4e24, 0x4f2a, 0x4e2e, 0x4e7c, 0x4f37, 0x4dde, 0x4dd5, 0x4e75, 0x4eb7, 0x4dc9, 0x4dcb, 0x4e36, 0x4e72, 0x4df6, 0x4e52, 0x4db5, 0x4dfa, 0x4e34, 0x4ebf, 0x4dcd, 0x4e14, 0x4edf, 0x4e6b, 0x4e8b, 0x4e41, 0x4e5f, 0x4e82, 0x4dd6, 0x4e0a, 0x4db8, 0x4dc6, 0x4e34, 0x4e16, 0x4eb4, 0x4e02, 0x4ed2, 0x4e2d, 0x4ef5, 0x4dc5, 0x4e36, 0x4eb4, 0x4df0, 0x4f4d, 0x4de8, 0x4dac, 0x4e0a, 0x4d9c, 0x4e45, 0x4e79, 0x4dd1, 0x4db0, 0x4ec1, 0x4dfb, 0x4ee0, 0x4d70, 0x4e88, 0x4df2, 0x4df6, 0x4e3f, 0x4e33, 0x4ef4, 0x4f0b, 0x4e75, 0x4e45, 0x4e05, 0x4d91, 0x4e72, 0x4e1b, 0x4e66, 0x4e32, 0x4dd1, 0x4e14, 0x4e63, 0x4e10, 0x4df1, 0x4ebf, 0x4d89, 0x4e6a, 0x4e7b, 0x4d91, 0x4e3f, 0x4e61, 0x4e31, 0x4e7f, 0x4ddd, 0x4e16, 0x4e2b, 0x4de8, -0x4d4a, 0x4d3f, 0x4d6a, 0x4d6a, 0x4e2b, 0x4d74, 0x4de3, 0x4eb1, 0x4dd9, 0x4e75, 0x4da3, 0x4dde, 0x4e51, 0x4ded, 0x4e0a, 0x4d83, 0x4e72, 0x4dd7, 0x4d43, 0x4d74, 0x4e0c, 0x4da8, 0x4df0, 0x4d54, 0x4df0, 0x4e0a, 0x4e25, 0x4d74, 0x4e0f, 0x4e13, 0x4e18, 0x4e0e, 0x4e0c, 0x4dfa, 0x4e2f, 0x4d82, 0x4dbe, 0x4d6a, 0x4d42, 0x4d8b, 0x4ce1, 0x4dc9, 0x4d63, 0x4e1f, 0x4db1, 0x4e11, 0x4d22, 0x4df3, 0x4e58, 0x4d7d, 0x4ec2, 0x4d84, 0x4d46, 0x4d6e, 0x4d20, 0x4d68, 0x4dfe, 0x4d39, 0x4d23, 0x4d87, 0x4d7e, 0x4ec7, 0x4d2a, 0x4dbf, 0x4d44, 0x4d8f, 0x4e0a, 0x4dff, 0x4e30, 0x4e2e, 0x4d94, 0x4d89, 0x4e04, 0x4d72, 0x4dee, 0x4d41, 0x4dd4, 0x4d58, 0x4dba, 0x4d8f, 0x4e19, 0x4dac, 0x4db5, 0x4dea, 0x4ce2, 0x4e1a, 0x4d87, 0x4d54, 0x4d86, 0x4e3e, 0x4e04, 0x4e41, 0x4dd4, 0x4df5, 0x4e28, 0x4d92, -0x4d5e, 0x4dba, 0x4df8, 0x4d94, 0x4df0, 0x4d7d, 0x4dfc, 0x4e83, 0x4df1, 0x4e98, 0x4dd4, 0x4dc6, 0x4e84, 0x4daa, 0x4d97, 0x4d98, 0x4dfd, 0x4d9e, 0x4d4a, 0x4dd7, 0x4d7e, 0x4da5, 0x4dbf, 0x4dd1, 0x4de8, 0x4db7, 0x4dfd, 0x4d45, 0x4dba, 0x4e6c, 0x4df2, 0x4dfc, 0x4dc2, 0x4dad, 0x4e19, 0x4d4d, 0x4df1, 0x4dab, 0x4d76, 0x4da8, 0x4d60, 0x4e55, 0x4dab, 0x4e58, 0x4d6a, 0x4e07, 0x4d48, 0x4d82, 0x4e78, 0x4d73, 0x4e49, 0x4dbe, 0x4d0c, 0x4d80, 0x4dbb, 0x4d67, 0x4e27, 0x4d34, 0x4d72, 0x4de1, 0x4e1d, 0x4e81, 0x4cf1, 0x4e18, 0x4d84, 0x4d8d, 0x4e1b, 0x4e4d, 0x4dd0, 0x4e69, 0x4dc1, 0x4da0, 0x4e4a, 0x4d7b, 0x4dc0, 0x4d4f, 0x4de4, 0x4e1b, 0x4da1, 0x4e14, 0x4e2c, 0x4d53, 0x4d67, 0x4ecd, 0x4d98, 0x4dc2, 0x4dff, 0x4d37, 0x4deb, 0x4dcb, 0x4cff, 0x4de8, 0x4e0a, 0x4d80, 0x4dba, 0x4d6a, -0x4d78, 0x4d5c, 0x4dbd, 0x4d18, 0x4d9d, 0x4d98, 0x4d95, 0x4e53, 0x4d96, 0x4e9f, 0x4db1, 0x4dea, 0x4ea8, 0x4d7f, 0x4d8b, 0x4d7a, 0x4de6, 0x4d5d, 0x4d91, 0x4da5, 0x4da8, 0x4d38, 0x4ddd, 0x4d87, 0x4d57, 0x4dfd, 0x4e38, 0x4d7b, 0x4d9a, 0x4e34, 0x4e26, 0x4da2, 0x4dc3, 0x4d63, 0x4de6, 0x4d54, 0x4dec, 0x4cfb, 0x4d33, 0x4d01, 0x4d50, 0x4da9, 0x4da2, 0x4e13, 0x4dbf, 0x4dff, 0x4d20, 0x4de2, 0x4e2b, 0x4d73, 0x4e87, 0x4d96, 0x4ce3, 0x4d66, 0x4d63, 0x4d8a, 0x4e2e, 0x4d32, 0x4d64, 0x4da9, 0x4da7, 0x4e99, 0x4cff, 0x4e26, 0x4d53, 0x4d79, 0x4df7, 0x4daf, 0x4e47, 0x4e48, 0x4d6a, 0x4dc0, 0x4ddd, 0x4d4d, 0x4dfb, 0x4d9b, 0x4db0, 0x4d67, 0x4ddb, 0x4dfc, 0x4d88, 0x4d4f, 0x4cfd, 0x4e65, 0x4d56, 0x4dca, 0x4dcb, 0x4cdd, 0x4d73, 0x4db6, 0x4d42, 0x4dae, 0x4e26, 0x4d76, 0x4d67, 0x4d82, -0x4dbf, 0x4df6, 0x4e63, 0x4dbc, 0x4edf, 0x4e0f, 0x4dfc, 0x4ecc, 0x4e07, 0x4f24, 0x4e00, 0x4e3b, 0x4f2d, 0x4e76, 0x4e0c, 0x4d9b, 0x4ecf, 0x4e60, 0x4df9, 0x4e4e, 0x4e0e, 0x4dd0, 0x4e7d, 0x4dfb, 0x4e65, 0x4eab, 0x4e78, 0x4e0c, 0x4e44, 0x4e4c, 0x4e70, 0x4e9f, 0x4e78, 0x4e01, 0x4e8d, 0x4e02, 0x4e1e, 0x4dcd, 0x4dce, 0x4dac, 0x4e25, 0x4e11, 0x4df9, 0x4ee4, 0x4e60, 0x4eb6, 0x4dc2, 0x4e32, 0x4f0f, 0x4dad, 0x4f16, 0x4dac, 0x4d37, 0x4e75, 0x4daf, 0x4df5, 0x4e91, 0x4db6, 0x4dc3, 0x4e51, 0x4e1a, 0x4f04, 0x4dd3, 0x4e22, 0x4dcd, 0x4dd4, 0x4e5a, 0x4e38, 0x4e9f, 0x4e7a, 0x4ea4, 0x4e59, 0x4e63, 0x4e09, 0x4e3f, 0x4dff, 0x4e0b, 0x4e1b, 0x4e1b, 0x4e7a, 0x4e5f, 0x4d96, 0x4dc5, 0x4e7d, 0x4d96, 0x4e22, 0x4e39, 0x4d5a, 0x4e54, 0x4eb5, 0x4e10, 0x4e66, 0x4e83, 0x4e2c, 0x4e34, 0x4d5a, -0x4d71, 0x4dd1, 0x4e56, 0x4d84, 0x4dcc, 0x4d86, 0x4e2f, 0x4e5a, 0x4dc0, 0x4ea7, 0x4e1e, 0x4e25, 0x4ea5, 0x4d59, 0x4d96, 0x4e00, 0x4e1c, 0x4d7f, 0x4d79, 0x4e33, 0x4d81, 0x4d99, 0x4d92, 0x4d4f, 0x4d9b, 0x4dec, 0x4e45, 0x4d44, 0x4dcf, 0x4e43, 0x4e26, 0x4dfe, 0x4dd8, 0x4e01, 0x4e6b, 0x4dd2, 0x4ddd, 0x4db8, 0x4d2e, 0x4dec, 0x4de0, 0x4e0f, 0x4da8, 0x4ed9, 0x4da5, 0x4e7f, 0x4cfb, 0x4d7b, 0x4e07, 0x4da2, 0x4e9f, 0x4d95, 0x4d3b, 0x4db7, 0x4da1, 0x4dc7, 0x4dfb, 0x4d73, 0x4d74, 0x4dfb, 0x4df9, 0x4ed7, 0x4d61, 0x4de7, 0x4d74, 0x4db0, 0x4da0, 0x4e05, 0x4e52, 0x4e67, 0x4e3b, 0x4d86, 0x4dca, 0x4ded, 0x4d7e, 0x4d87, 0x4dee, 0x4dec, 0x4dd8, 0x4df7, 0x4e19, 0x4d39, 0x4da2, 0x4e7b, 0x4d5f, 0x4de3, 0x4de7, 0x4d6e, 0x4dad, 0x4e39, 0x4d1b, 0x4e13, 0x4dfe, 0x4de6, 0x4dad, 0x4dd7, -0x4e08, 0x4de7, 0x4e3b, 0x4e57, 0x4ec6, 0x4e89, 0x4eae, 0x4f6b, 0x4e5a, 0x4fbb, 0x4e68, 0x4e30, 0x4f54, 0x4e46, 0x4e31, 0x4e01, 0x4f2d, 0x4e6e, 0x4e0a, 0x4e3e, 0x4ead, 0x4dd6, 0x4e96, 0x4e12, 0x4e62, 0x4e8d, 0x4ec0, 0x4e03, 0x4e58, 0x4eec, 0x4ea5, 0x4eac, 0x4e98, 0x4e68, 0x4efa, 0x4e20, 0x4e2d, 0x4e0a, 0x4e29, 0x4e36, 0x4e62, 0x4e6e, 0x4dc5, 0x4ee7, 0x4e9f, 0x4ef0, 0x4e06, 0x4e0e, 0x4f08, 0x4df4, 0x4f16, 0x4dc9, 0x4d49, 0x4e98, 0x4dcd, 0x4e73, 0x4ecb, 0x4e7e, 0x4e22, 0x4e87, 0x4e90, 0x4f22, 0x4dd9, 0x4ed8, 0x4e21, 0x4e27, 0x4e54, 0x4e73, 0x4e8d, 0x4f3b, 0x4e98, 0x4dfe, 0x4ec4, 0x4e22, 0x4e8b, 0x4e79, 0x4e10, 0x4e68, 0x4e06, 0x4e7a, 0x4ef9, 0x4e1c, 0x4e11, 0x4e9c, 0x4dc7, 0x4e2a, 0x4dec, 0x4e0c, 0x4e55, 0x4e89, 0x4e5f, 0x4f06, 0x4eaf, 0x4e44, 0x4ea0, 0x4e10, -0x4dbc, 0x4dc0, 0x4e13, 0x4da8, 0x4e6c, 0x4e0f, 0x4e94, 0x4ee8, 0x4df0, 0x4f1d, 0x4e41, 0x4e33, 0x4f18, 0x4dbd, 0x4df9, 0x4e19, 0x4e6e, 0x4d98, 0x4d78, 0x4ddf, 0x4e5e, 0x4dad, 0x4dbf, 0x4d88, 0x4e07, 0x4e26, 0x4e1c, 0x4dd3, 0x4e6d, 0x4ef3, 0x4e99, 0x4e3d, 0x4e3c, 0x4e6b, 0x4e6f, 0x4e0e, 0x4df7, 0x4dab, 0x4dd2, 0x4e20, 0x4e18, 0x4dfe, 0x4da4, 0x4e68, 0x4e1e, 0x4e3d, 0x4d7f, 0x4df2, 0x4eb9, 0x4dda, 0x4ec6, 0x4ddb, 0x4d6c, 0x4e1c, 0x4d9e, 0x4e23, 0x4e36, 0x4d74, 0x4dd5, 0x4e31, 0x4e36, 0x4f13, 0x4d62, 0x4e07, 0x4d70, 0x4df5, 0x4e70, 0x4e46, 0x4e5d, 0x4eb4, 0x4e6d, 0x4de1, 0x4e64, 0x4e17, 0x4e36, 0x4e2f, 0x4e29, 0x4e32, 0x4dde, 0x4dc9, 0x4e74, 0x4de5, 0x4de6, 0x4e52, 0x4da3, 0x4e0e, 0x4e4b, 0x4daf, 0x4dec, 0x4ebe, 0x4dc5, 0x4e10, 0x4e83, 0x4e8d, 0x4e13, 0x4e0d, -0x4de6, 0x4e03, 0x4e4f, 0x4d8b, 0x4e9b, 0x4e0f, 0x4ea4, 0x4ed6, 0x4dca, 0x4f1d, 0x4e28, 0x4e48, 0x4eff, 0x4e00, 0x4e96, 0x4e11, 0x4eb8, 0x4dae, 0x4df2, 0x4e6d, 0x4e65, 0x4e1a, 0x4e33, 0x4e04, 0x4e00, 0x4e74, 0x4eca, 0x4df9, 0x4e32, 0x4e8c, 0x4eac, 0x4e81, 0x4e27, 0x4e2a, 0x4e53, 0x4de1, 0x4df1, 0x4d9c, 0x4dd9, 0x4e37, 0x4e26, 0x4e2f, 0x4d63, 0x4edb, 0x4e62, 0x4ebd, 0x4dd5, 0x4e05, 0x4eb9, 0x4dd1, 0x4f1c, 0x4dee, 0x4d5f, 0x4e2c, 0x4e1e, 0x4e07, 0x4e03, 0x4ddf, 0x4dc5, 0x4dd1, 0x4e05, 0x4edb, 0x4dca, 0x4e5a, 0x4d80, 0x4dd5, 0x4e75, 0x4e6a, 0x4e69, 0x4eb3, 0x4e49, 0x4e88, 0x4ea2, 0x4e28, 0x4ea6, 0x4e21, 0x4e0a, 0x4e2f, 0x4e39, 0x4e43, 0x4e3b, 0x4e07, 0x4d9a, 0x4e97, 0x4d98, 0x4e81, 0x4dd9, 0x4d1d, 0x4e15, 0x4e7c, 0x4e15, 0x4e48, 0x4ec0, 0x4e99, 0x4e31, 0x4e50, -0x4d4e, 0x4dcf, 0x4e16, 0x4e0f, 0x4e3d, 0x4d5b, 0x4dd0, 0x4ed8, 0x4dfa, 0x4f4d, 0x4dbd, 0x4e5d, 0x4e9b, 0x4d9b, 0x4e37, 0x4dcd, 0x4e8e, 0x4e45, 0x4d87, 0x4dfa, 0x4e43, 0x4dd6, 0x4e1c, 0x4d8a, 0x4e32, 0x4ddb, 0x4e30, 0x4d75, 0x4db6, 0x4eca, 0x4dcd, 0x4e08, 0x4e13, 0x4e61, 0x4e35, 0x4dd9, 0x4dbc, 0x4d9e, 0x4d85, 0x4dfe, 0x4e2a, 0x4e31, 0x4d76, 0x4e50, 0x4dcc, 0x4e8e, 0x4d2d, 0x4de9, 0x4eaf, 0x4d8a, 0x4ebd, 0x4db0, 0x4d28, 0x4def, 0x4da2, 0x4db8, 0x4e71, 0x4dc0, 0x4d07, 0x4dd9, 0x4e0d, 0x4eec, 0x4dd4, 0x4dff, 0x4d97, 0x4ded, 0x4e33, 0x4e55, 0x4e1f, 0x4e88, 0x4e25, 0x4da1, 0x4e0d, 0x4de9, 0x4e00, 0x4dc7, 0x4de5, 0x4dc9, 0x4e36, 0x4dd4, 0x4eae, 0x4df1, 0x4e29, 0x4ecc, 0x4d81, 0x4e1d, 0x4e1a, 0x4d93, 0x4dd0, 0x4e67, 0x4ddf, 0x4e49, 0x4e29, 0x4dfc, 0x4e4e, 0x4e15, -0x4d53, 0x4d54, 0x4dcb, 0x4d20, 0x4d9f, 0x4d7b, 0x4db1, 0x4e61, 0x4d86, 0x4e2b, 0x4d85, 0x4dca, 0x4e88, 0x4d8f, 0x4d7c, 0x4dbd, 0x4dd1, 0x4d53, 0x4cf8, 0x4e33, 0x4daa, 0x4d52, 0x4d77, 0x4d28, 0x4db3, 0x4db7, 0x4da2, 0x4d5f, 0x4d8b, 0x4e40, 0x4e0a, 0x4d4e, 0x4d44, 0x4d89, 0x4dd4, 0x4ced, 0x4d7e, 0x4d23, 0x4d3b, 0x4d33, 0x4d97, 0x4dbe, 0x4d4e, 0x4e18, 0x4d25, 0x4e37, 0x4cec, 0x4d58, 0x4dd8, 0x4d79, 0x4e3c, 0x4d8d, 0x4d0e, 0x4d56, 0x4ce2, 0x4d47, 0x4dec, 0x4d34, 0x4d24, 0x4df8, 0x4d54, 0x4dc0, 0x4ce1, 0x4db2, 0x4d4d, 0x4d59, 0x4d7b, 0x4db2, 0x4db9, 0x4e11, 0x4d44, 0x4daa, 0x4dc6, 0x4d61, 0x4db8, 0x4d7d, 0x4d94, 0x4dc4, 0x4d64, 0x4da8, 0x4db3, 0x4d5b, 0x4d48, 0x4e4c, 0x4d38, 0x4cf7, 0x4dda, 0x4ce7, 0x4de8, 0x4de0, 0x4d34, 0x4dc4, 0x4e01, 0x4db9, 0x4d72, 0x4d31, -0x4d50, 0x4d8a, 0x4e4e, 0x4d70, 0x4e36, 0x4db3, 0x4e2c, 0x4ec3, 0x4de3, 0x4f03, 0x4e28, 0x4e59, 0x4ec1, 0x4dee, 0x4db6, 0x4dfa, 0x4e6c, 0x4de5, 0x4d40, 0x4dc9, 0x4e59, 0x4d89, 0x4dc7, 0x4da5, 0x4d83, 0x4e48, 0x4e69, 0x4df2, 0x4e0e, 0x4ebb, 0x4e4c, 0x4e39, 0x4e07, 0x4e1c, 0x4e5c, 0x4db9, 0x4e05, 0x4d7f, 0x4d54, 0x4de6, 0x4dca, 0x4df7, 0x4d7c, 0x4e50, 0x4e43, 0x4e69, 0x4da0, 0x4e1d, 0x4e57, 0x4db8, 0x4eb1, 0x4e23, 0x4d6d, 0x4e1c, 0x4d74, 0x4e16, 0x4e3b, 0x4dcc, 0x4d94, 0x4e5b, 0x4e25, 0x4ec5, 0x4d65, 0x4e1c, 0x4d5b, 0x4ded, 0x4e12, 0x4e06, 0x4e1a, 0x4eb6, 0x4de4, 0x4dbf, 0x4e1a, 0x4e3b, 0x4e57, 0x4dff, 0x4dd6, 0x4e6a, 0x4dc5, 0x4e4f, 0x4e81, 0x4d7e, 0x4dc1, 0x4e84, 0x4dd8, 0x4dff, 0x4e2f, 0x4dc2, 0x4db1, 0x4e70, 0x4de1, 0x4de9, 0x4e31, 0x4e11, 0x4e46, 0x4dbf, -0x4daa, 0x4da3, 0x4dcd, 0x4dce, 0x4d97, 0x4d78, 0x4e0a, 0x4eeb, 0x4ddb, 0x4f2f, 0x4dbe, 0x4e55, 0x4eca, 0x4e37, 0x4deb, 0x4d90, 0x4e6f, 0x4dbd, 0x4d88, 0x4e24, 0x4d99, 0x4d4a, 0x4dd8, 0x4ceb, 0x4d9c, 0x4e53, 0x4e45, 0x4d8f, 0x4dc8, 0x4e40, 0x4e47, 0x4dff, 0x4e47, 0x4dba, 0x4e4b, 0x4d96, 0x4dc2, 0x4db6, 0x4d80, 0x4dbc, 0x4d66, 0x4dec, 0x4d6b, 0x4e8e, 0x4e05, 0x4e1c, 0x4d0c, 0x4da3, 0x4e61, 0x4d3a, 0x4e7c, 0x4d5f, 0x4d0d, 0x4db2, 0x4db0, 0x4dec, 0x4dbd, 0x4d72, 0x4d40, 0x4db3, 0x4e06, 0x4e52, 0x4d18, 0x4e65, 0x4d80, 0x4d43, 0x4e0b, 0x4dc6, 0x4e60, 0x4e71, 0x4e0e, 0x4d92, 0x4e0a, 0x4d7c, 0x4dbb, 0x4d6b, 0x4df5, 0x4d64, 0x4d99, 0x4d9a, 0x4de1, 0x4d52, 0x4d93, 0x4de8, 0x4d70, 0x4e12, 0x4db2, 0x4d20, 0x4de8, 0x4df9, 0x4dcb, 0x4e62, 0x4e5e, 0x4dd3, 0x4d3f, 0x4d5a, -0x4d97, 0x4db8, 0x4e07, 0x4d81, 0x4e2e, 0x4db2, 0x4e2a, 0x4f25, 0x4ddf, 0x4f35, 0x4d9b, 0x4e84, 0x4ecf, 0x4df4, 0x4e15, 0x4e10, 0x4e45, 0x4e11, 0x4d9c, 0x4dda, 0x4e85, 0x4d3e, 0x4e4e, 0x4d9c, 0x4de0, 0x4e49, 0x4e53, 0x4d84, 0x4e03, 0x4eb8, 0x4e40, 0x4e82, 0x4e10, 0x4e2e, 0x4e7c, 0x4dd6, 0x4de8, 0x4d6f, 0x4db7, 0x4de3, 0x4e01, 0x4db7, 0x4da6, 0x4e61, 0x4e0a, 0x4e53, 0x4dc8, 0x4df9, 0x4ed6, 0x4d8b, 0x4ef9, 0x4da4, 0x4dd6, 0x4dc9, 0x4db2, 0x4dee, 0x4e8c, 0x4d86, 0x4d9c, 0x4e36, 0x4e13, 0x4ebd, 0x4d11, 0x4e28, 0x4d81, 0x4e22, 0x4e2f, 0x4e4f, 0x4ed6, 0x4e82, 0x4e2f, 0x4e17, 0x4e48, 0x4d87, 0x4e49, 0x4e4e, 0x4e39, 0x4e45, 0x4ddc, 0x4df7, 0x4e29, 0x4df2, 0x4dc2, 0x4eef, 0x4d9b, 0x4df4, 0x4e4a, 0x4d73, 0x4e0f, 0x4e7e, 0x4de6, 0x4e4c, 0x4e43, 0x4e12, 0x4e38, 0x4de6, -0x4dca, 0x4e05, 0x4e41, 0x4da4, 0x4e08, 0x4dc1, 0x4dfa, 0x4ed4, 0x4d4c, 0x4ee9, 0x4dfb, 0x4dd2, 0x4e70, 0x4ddc, 0x4d8e, 0x4dc3, 0x4e7b, 0x4dec, 0x4d8f, 0x4e28, 0x4e1d, 0x4d79, 0x4dde, 0x4db1, 0x4df1, 0x4dd5, 0x4e31, 0x4d3a, 0x4ddd, 0x4e3b, 0x4e47, 0x4df8, 0x4dec, 0x4d7f, 0x4e3c, 0x4d7f, 0x4d7f, 0x4d62, 0x4d46, 0x4dc9, 0x4df7, 0x4de7, 0x4ddf, 0x4e5c, 0x4dc1, 0x4e44, 0x4d43, 0x4db3, 0x4e4d, 0x4dae, 0x4e60, 0x4dbf, 0x4d71, 0x4de0, 0x4dba, 0x4dc1, 0x4e2a, 0x4d6d, 0x4dab, 0x4df8, 0x4de5, 0x4e56, 0x4d64, 0x4dcc, 0x4e01, 0x4dce, 0x4e3a, 0x4e88, 0x4dff, 0x4e6b, 0x4e35, 0x4e05, 0x4de3, 0x4dc4, 0x4e69, 0x4dc4, 0x4de5, 0x4df8, 0x4da5, 0x4e0e, 0x4d96, 0x4dc7, 0x4d53, 0x4ec2, 0x4d82, 0x4ddf, 0x4dac, 0x4d33, 0x4d9b, 0x4e30, 0x4d97, 0x4e3b, 0x4e89, 0x4e5c, 0x4db9, 0x4d9d, -0x4e27, 0x4e5c, 0x4f2b, 0x4e51, 0x4ee2, 0x4e60, 0x4f10, 0x4f9b, 0x4e52, 0x4f9e, 0x4e9d, 0x4e87, 0x4f8a, 0x4e8b, 0x4e8b, 0x4e96, 0x4f19, 0x4f34, 0x4e0a, 0x4ece, 0x4eec, 0x4e27, 0x4ea4, 0x4e3e, 0x4eb1, 0x4e34, 0x4ed1, 0x4ea7, 0x4f40, 0x4f9a, 0x4f51, 0x4e8e, 0x4f25, 0x4ec4, 0x4f12, 0x4ea6, 0x4e7c, 0x4e17, 0x4de8, 0x4e73, 0x4ebf, 0x4e45, 0x4e3c, 0x4f00, 0x4e94, 0x4f3d, 0x4e02, 0x4ea7, 0x4f5b, 0x4eab, 0x4f40, 0x4e4d, 0x4e05, 0x4e79, 0x4e13, 0x4e81, 0x4f20, 0x4e9d, 0x4e6d, 0x4eda, 0x4ec8, 0x4f9e, 0x4e39, 0x4ebb, 0x4de4, 0x4e67, 0x4ed6, 0x4f43, 0x4eef, 0x4f8e, 0x4edd, 0x4e5d, 0x4ebe, 0x4f3b, 0x4f37, 0x4e7a, 0x4ec0, 0x4ecc, 0x4f01, 0x4ef6, 0x4f29, 0x4e9d, 0x4e7a, 0x4ed0, 0x4e93, 0x4ef1, 0x4eb9, 0x4e43, 0x4eca, 0x4f54, 0x4e4a, 0x4e98, 0x4f5d, 0x4f33, 0x4e9e, 0x4e9f, -0x4dd7, 0x4ebb, 0x4e87, 0x4e2d, 0x4ed6, 0x4ed8, 0x4e71, 0x4f2b, 0x4e32, 0x4f42, 0x4eb7, 0x4e64, 0x4f8f, 0x4e1a, 0x4e53, 0x4ec8, 0x4e44, 0x4e5b, 0x4e7e, 0x4e80, 0x4ec2, 0x4e18, 0x4e55, 0x4e2e, 0x4e9e, 0x4ec8, 0x4e5f, 0x4dfb, 0x4e68, 0x4f3b, 0x4e83, 0x4e36, 0x4ec6, 0x4e3e, 0x4ee6, 0x4e26, 0x4e82, 0x4e57, 0x4e3b, 0x4e3d, 0x4e2f, 0x4e84, 0x4e1f, 0x4f3a, 0x4e2c, 0x4ebc, 0x4e1e, 0x4e4b, 0x4f06, 0x4e2a, 0x4f35, 0x4e4a, 0x4dc1, 0x4e5e, 0x4e0d, 0x4e33, 0x4e6b, 0x4daa, 0x4ddc, 0x4e74, 0x4e61, 0x4f4e, 0x4e23, 0x4e9d, 0x4dc1, 0x4df8, 0x4e6c, 0x4ed2, 0x4ea7, 0x4f25, 0x4e7b, 0x4e3e, 0x4e69, 0x4e17, 0x4ed4, 0x4e04, 0x4e81, 0x4e74, 0x4e3a, 0x4edf, 0x4e87, 0x4e5a, 0x4e63, 0x4ea2, 0x4ddd, 0x4eaf, 0x4eac, 0x4db0, 0x4ea1, 0x4efd, 0x4e60, 0x4e88, 0x4df4, 0x4f25, 0x4e13, 0x4e34, -0x4e0d, 0x4dd9, 0x4e1e, 0x4dbd, 0x4e05, 0x4e05, 0x4e9b, 0x4ef7, 0x4e05, 0x4ee9, 0x4e79, 0x4e50, 0x4f3d, 0x4e4d, 0x4e45, 0x4ec1, 0x4eaa, 0x4e11, 0x4da2, 0x4e41, 0x4e50, 0x4df9, 0x4e0e, 0x4dff, 0x4e54, 0x4e44, 0x4e2b, 0x4e1e, 0x4e8f, 0x4ef0, 0x4e44, 0x4e5a, 0x4e65, 0x4e53, 0x4e7c, 0x4e31, 0x4e00, 0x4d7c, 0x4e09, 0x4e2d, 0x4e8c, 0x4e18, 0x4def, 0x4e73, 0x4e1e, 0x4eb6, 0x4d9e, 0x4e23, 0x4eaa, 0x4e62, 0x4ee7, 0x4e4f, 0x4d89, 0x4e3c, 0x4e0f, 0x4e80, 0x4e2e, 0x4e16, 0x4df6, 0x4e79, 0x4e9e, 0x4ef9, 0x4d5f, 0x4e39, 0x4d87, 0x4e04, 0x4eda, 0x4e99, 0x4e75, 0x4f32, 0x4e55, 0x4e47, 0x4e23, 0x4e5a, 0x4eb0, 0x4e39, 0x4e6d, 0x4e3b, 0x4e5c, 0x4e89, 0x4ec6, 0x4e16, 0x4e36, 0x4f0b, 0x4d76, 0x4e1a, 0x4e5b, 0x4dc4, 0x4dfb, 0x4e5b, 0x4e5f, 0x4e8c, 0x4e8b, 0x4e7d, 0x4e14, 0x4df3, -0x4db1, 0x4da2, 0x4e28, 0x4dc6, 0x4e3d, 0x4e08, 0x4df4, 0x4e7e, 0x4db8, 0x4ee4, 0x4e5c, 0x4df9, 0x4eee, 0x4db3, 0x4daf, 0x4e26, 0x4e20, 0x4dee, 0x4df8, 0x4e2e, 0x4e2a, 0x4d7e, 0x4e32, 0x4d94, 0x4e1b, 0x4e49, 0x4e84, 0x4dc4, 0x4dff, 0x4ead, 0x4e55, 0x4e4a, 0x4e04, 0x4e07, 0x4ebb, 0x4dac, 0x4daf, 0x4ded, 0x4d53, 0x4d9a, 0x4dd7, 0x4de6, 0x4d5b, 0x4e3d, 0x4dff, 0x4ea8, 0x4d9d, 0x4da4, 0x4e1e, 0x4d92, 0x4e7a, 0x4d3e, 0x4d57, 0x4db5, 0x4d77, 0x4d96, 0x4e1a, 0x4d7a, 0x4d74, 0x4de0, 0x4dba, 0x4eb6, 0x4d49, 0x4e27, 0x4d55, 0x4dca, 0x4e02, 0x4e83, 0x4e6b, 0x4eaf, 0x4e2b, 0x4de9, 0x4e53, 0x4db5, 0x4e0b, 0x4dd7, 0x4dbe, 0x4df5, 0x4dd0, 0x4dc9, 0x4e66, 0x4d69, 0x4e0e, 0x4e3b, 0x4d50, 0x4dff, 0x4de3, 0x4d65, 0x4dd4, 0x4e0e, 0x4df0, 0x4e52, 0x4ee9, 0x4e3e, 0x4e53, 0x4dbd, -0x4d94, 0x4d90, 0x4e41, 0x4d3c, 0x4de7, 0x4d6d, 0x4dfa, 0x4e97, 0x4de8, 0x4e5c, 0x4dde, 0x4dfe, 0x4e81, 0x4d8a, 0x4d99, 0x4dce, 0x4e82, 0x4de2, 0x4dba, 0x4dab, 0x4dc5, 0x4d4e, 0x4d64, 0x4db5, 0x4d8c, 0x4dcb, 0x4dc9, 0x4d74, 0x4dfa, 0x4e2f, 0x4e29, 0x4db3, 0x4deb, 0x4d7e, 0x4ddd, 0x4d9a, 0x4d6e, 0x4da2, 0x4cdf, 0x4d82, 0x4da5, 0x4dd1, 0x4da7, 0x4e45, 0x4dba, 0x4df1, 0x4d49, 0x4d32, 0x4e97, 0x4d3f, 0x4e88, 0x4d72, 0x4cfe, 0x4dd3, 0x4d33, 0x4d53, 0x4db0, 0x4d6b, 0x4d5f, 0x4e02, 0x4dcb, 0x4e93, 0x4d95, 0x4dc5, 0x4da2, 0x4d86, 0x4ddf, 0x4df4, 0x4dac, 0x4e0d, 0x4dd1, 0x4d3f, 0x4df6, 0x4d42, 0x4e24, 0x4dac, 0x4e2e, 0x4da2, 0x4db6, 0x4df0, 0x4dd6, 0x4d6f, 0x4d6b, 0x4e2f, 0x4d51, 0x4e39, 0x4dfd, 0x4d12, 0x4d9a, 0x4ded, 0x4d3a, 0x4dec, 0x4e1b, 0x4e0d, 0x4dbc, 0x4dad, -0x4d87, 0x4dd5, 0x4e10, 0x4dd0, 0x4e3f, 0x4ddf, 0x4ea2, 0x4ec6, 0x4ddd, 0x4f15, 0x4df0, 0x4e47, 0x4ed0, 0x4dcc, 0x4dfa, 0x4de6, 0x4e44, 0x4dd7, 0x4da0, 0x4e0c, 0x4db8, 0x4d9c, 0x4dde, 0x4dcf, 0x4dfe, 0x4e85, 0x4e7b, 0x4da6, 0x4e87, 0x4e73, 0x4e85, 0x4e39, 0x4de2, 0x4e46, 0x4e55, 0x4dc6, 0x4d80, 0x4d68, 0x4d9e, 0x4e35, 0x4e1c, 0x4e41, 0x4d37, 0x4eab, 0x4e25, 0x4ea0, 0x4dab, 0x4dd5, 0x4e40, 0x4dc4, 0x4ea6, 0x4e0b, 0x4d35, 0x4ddd, 0x4d6f, 0x4dec, 0x4e3e, 0x4d86, 0x4dc7, 0x4e1b, 0x4dd1, 0x4e7d, 0x4d5b, 0x4e56, 0x4d3e, 0x4dc6, 0x4e47, 0x4e41, 0x4deb, 0x4ea3, 0x4e0b, 0x4e1e, 0x4e4f, 0x4d7d, 0x4e69, 0x4e05, 0x4e07, 0x4de1, 0x4dd4, 0x4df4, 0x4e23, 0x4daa, 0x4d5c, 0x4e50, 0x4d8c, 0x4e56, 0x4df2, 0x4d1b, 0x4db1, 0x4e56, 0x4d5c, 0x4e3b, 0x4ea7, 0x4e3d, 0x4dc1, 0x4dce, -0x4dd5, 0x4e1b, 0x4f0a, 0x4d93, 0x4e7e, 0x4e1d, 0x4e8c, 0x4f7b, 0x4df4, 0x4f3f, 0x4e9f, 0x4e5e, 0x4f33, 0x4e21, 0x4e55, 0x4e7b, 0x4ec6, 0x4e75, 0x4e2f, 0x4e95, 0x4ead, 0x4df1, 0x4e00, 0x4e1b, 0x4e6a, 0x4e69, 0x4f05, 0x4dce, 0x4e65, 0x4ecc, 0x4e72, 0x4e86, 0x4ea7, 0x4e4c, 0x4ef1, 0x4e36, 0x4e28, 0x4dd8, 0x4dca, 0x4e83, 0x4e23, 0x4e65, 0x4e7f, 0x4f31, 0x4ebf, 0x4e83, 0x4d66, 0x4e3d, 0x4e9e, 0x4e64, 0x4eba, 0x4e12, 0x4d90, 0x4e34, 0x4e11, 0x4e31, 0x4e89, 0x4de1, 0x4dca, 0x4e9f, 0x4e43, 0x4f58, 0x4dc9, 0x4e96, 0x4e38, 0x4dfa, 0x4e94, 0x4eb1, 0x4ed4, 0x4f1b, 0x4ee2, 0x4e92, 0x4e30, 0x4e86, 0x4eb1, 0x4e4e, 0x4ea0, 0x4e74, 0x4e52, 0x4ebc, 0x4edd, 0x4dd8, 0x4e1d, 0x4ee2, 0x4df0, 0x4eb0, 0x4e12, 0x4dd4, 0x4e3d, 0x4e9e, 0x4e31, 0x4e44, 0x4ecb, 0x4ebb, 0x4e2c, 0x4e6d, -0x4dc2, 0x4e12, 0x4e1c, 0x4de3, 0x4dfc, 0x4df2, 0x4e09, 0x4ed4, 0x4e52, 0x4f49, 0x4e69, 0x4dc9, 0x4f08, 0x4e73, 0x4e21, 0x4e51, 0x4e85, 0x4e2d, 0x4da5, 0x4e0c, 0x4e09, 0x4d7b, 0x4de6, 0x4dec, 0x4e9e, 0x4e06, 0x4ea8, 0x4da2, 0x4e74, 0x4eac, 0x4e13, 0x4e45, 0x4e43, 0x4dea, 0x4e85, 0x4dbb, 0x4df5, 0x4dc4, 0x4d87, 0x4e18, 0x4de4, 0x4e20, 0x4dd5, 0x4ebd, 0x4e32, 0x4e40, 0x4de9, 0x4e07, 0x4e5a, 0x4de1, 0x4f32, 0x4e22, 0x4d57, 0x4e23, 0x4ded, 0x4dd4, 0x4e11, 0x4dd4, 0x4dfd, 0x4e5d, 0x4e9f, 0x4ed0, 0x4d86, 0x4ea8, 0x4d69, 0x4de3, 0x4e2b, 0x4ec8, 0x4e3c, 0x4eca, 0x4e2f, 0x4de7, 0x4e3e, 0x4e01, 0x4e59, 0x4df2, 0x4e82, 0x4e3a, 0x4e45, 0x4e91, 0x4e9a, 0x4dc0, 0x4e61, 0x4e8d, 0x4d51, 0x4e31, 0x4dc1, 0x4d96, 0x4dad, 0x4e37, 0x4e2b, 0x4e8d, 0x4e69, 0x4dfe, 0x4e37, 0x4ddd, -0x4e19, 0x4e6d, 0x4ec5, 0x4e2a, 0x4e9c, 0x4e04, 0x4ec6, 0x4f61, 0x4e1f, 0x4f72, 0x4e4d, 0x4e51, 0x4f2c, 0x4e6a, 0x4e48, 0x4e99, 0x4edc, 0x4dd0, 0x4e2e, 0x4eb1, 0x4e52, 0x4de8, 0x4e5b, 0x4e0a, 0x4e2c, 0x4e35, 0x4ef2, 0x4dd0, 0x4eff, 0x4f6d, 0x4ef2, 0x4eca, 0x4e90, 0x4e6e, 0x4ece, 0x4e89, 0x4dfc, 0x4e16, 0x4dcd, 0x4eb7, 0x4e79, 0x4ee7, 0x4e2e, 0x4ec0, 0x4e93, 0x4ec0, 0x4dc4, 0x4e5a, 0x4f28, 0x4e17, 0x4efc, 0x4e44, 0x4dbc, 0x4e77, 0x4df3, 0x4eda, 0x4ec2, 0x4e34, 0x4e15, 0x4e78, 0x4eb2, 0x4f87, 0x4da1, 0x4f1e, 0x4dcb, 0x4e72, 0x4eea, 0x4e8c, 0x4edb, 0x4f22, 0x4ecd, 0x4e54, 0x4eb8, 0x4e87, 0x4ef0, 0x4ea3, 0x4e57, 0x4e79, 0x4e85, 0x4e82, 0x4ebb, 0x4e3c, 0x4e29, 0x4ec4, 0x4e06, 0x4ea8, 0x4eb7, 0x4dc5, 0x4e31, 0x4e8a, 0x4e72, 0x4eac, 0x4ed9, 0x4f1d, 0x4e7e, 0x4e68, -0x4e35, 0x4dd4, 0x4e38, 0x4dda, 0x4e05, 0x4db1, 0x4e5a, 0x4f1a, 0x4e2b, 0x4f39, 0x4e30, 0x4e96, 0x4ecf, 0x4df6, 0x4dd0, 0x4ddc, 0x4e5e, 0x4ddc, 0x4d6c, 0x4e50, 0x4dd5, 0x4dc0, 0x4e05, 0x4d65, 0x4e16, 0x4e46, 0x4e57, 0x4dc0, 0x4e5c, 0x4ed2, 0x4e79, 0x4e11, 0x4e1a, 0x4e14, 0x4e85, 0x4e2f, 0x4dc9, 0x4dd8, 0x4d4c, 0x4ddb, 0x4e37, 0x4e35, 0x4dba, 0x4eb9, 0x4dee, 0x4ed1, 0x4d7c, 0x4dfc, 0x4e86, 0x4d78, 0x4e88, 0x4e1e, 0x4d54, 0x4dc0, 0x4da2, 0x4e0f, 0x4e83, 0x4db6, 0x4dc1, 0x4e78, 0x4e0a, 0x4e34, 0x4d73, 0x4e83, 0x4d8c, 0x4dce, 0x4e55, 0x4e11, 0x4e83, 0x4e43, 0x4e7c, 0x4e05, 0x4e93, 0x4ddf, 0x4e3f, 0x4dc4, 0x4e19, 0x4e6c, 0x4db9, 0x4e54, 0x4e9e, 0x4da3, 0x4dbe, 0x4e6a, 0x4db0, 0x4e1a, 0x4e57, 0x4d7b, 0x4e6e, 0x4eac, 0x4da4, 0x4e9a, 0x4e6c, 0x4e7f, 0x4de6, 0x4e0c, -0x4e70, 0x4e5d, 0x4ea9, 0x4e2c, 0x4ee1, 0x4e13, 0x4e9d, 0x4f97, 0x4e21, 0x4ff6, 0x4e48, 0x4e57, 0x4f7e, 0x4e75, 0x4e56, 0x4e79, 0x4f65, 0x4e3f, 0x4da0, 0x4e90, 0x4edc, 0x4e8e, 0x4e4d, 0x4e51, 0x4e9c, 0x4e2a, 0x4e9e, 0x4e30, 0x4e4c, 0x4edf, 0x4ef8, 0x4e91, 0x4eb6, 0x4e71, 0x4ead, 0x4e48, 0x4e87, 0x4de3, 0x4df8, 0x4e29, 0x4e76, 0x4ebb, 0x4e35, 0x4ef6, 0x4e9e, 0x4fa9, 0x4dd5, 0x4e21, 0x4ec4, 0x4e4a, 0x4f80, 0x4e0d, 0x4e07, 0x4e07, 0x4e45, 0x4e40, 0x4ef9, 0x4e38, 0x4dd3, 0x4e67, 0x4e85, 0x4ecf, 0x4dde, 0x4eaf, 0x4e1a, 0x4e83, 0x4e6d, 0x4f2c, 0x4ee4, 0x4eab, 0x4e78, 0x4e42, 0x4e9f, 0x4e30, 0x4e70, 0x4e27, 0x4eee, 0x4e55, 0x4e96, 0x4e9f, 0x4e9c, 0x4e3e, 0x4e46, 0x4f72, 0x4e1a, 0x4e80, 0x4eb9, 0x4e04, 0x4e5e, 0x4ee7, 0x4e43, 0x4ec0, 0x4f4b, 0x4e59, 0x4e76, 0x4e27, -0x4dd1, 0x4dbf, 0x4ec4, 0x4df3, 0x4e12, 0x4e04, 0x4e47, 0x4f88, 0x4e3e, 0x4f9c, 0x4e70, 0x4eb7, 0x4f21, 0x4e20, 0x4e02, 0x4ec1, 0x4f47, 0x4e07, 0x4e00, 0x4e95, 0x4e30, 0x4dd6, 0x4dee, 0x4d9d, 0x4e09, 0x4e05, 0x4ec7, 0x4ddb, 0x4e57, 0x4f16, 0x4e8d, 0x4e60, 0x4e58, 0x4e2e, 0x4ed0, 0x4df3, 0x4e32, 0x4df6, 0x4d99, 0x4def, 0x4e67, 0x4e3d, 0x4e21, 0x4f1d, 0x4e24, 0x4ef2, 0x4da9, 0x4e02, 0x4eea, 0x4e2d, 0x4f3d, 0x4e61, 0x4de9, 0x4e51, 0x4db4, 0x4e1e, 0x4e8c, 0x4e23, 0x4dc5, 0x4e4f, 0x4e56, 0x4f11, 0x4d7f, 0x4eda, 0x4de8, 0x4e06, 0x4e52, 0x4e14, 0x4e97, 0x4f22, 0x4e29, 0x4e43, 0x4e97, 0x4e37, 0x4e58, 0x4e4c, 0x4e7f, 0x4e69, 0x4e35, 0x4e48, 0x4efe, 0x4de6, 0x4e23, 0x4e4f, 0x4df0, 0x4e55, 0x4e59, 0x4daf, 0x4e32, 0x4e56, 0x4dea, 0x4ea4, 0x4e72, 0x4e7f, 0x4e22, 0x4e13, -0x4d97, 0x4d55, 0x4d67, 0x4d11, 0x4d7c, 0x4d95, 0x4e13, 0x4ea2, 0x4e15, 0x4ef3, 0x4db7, 0x4db6, 0x4eb7, 0x4d99, 0x4e38, 0x4d63, 0x4df6, 0x4da1, 0x4d6d, 0x4d9c, 0x4dda, 0x4d83, 0x4db0, 0x4d74, 0x4db4, 0x4e71, 0x4e1a, 0x4d50, 0x4dec, 0x4e26, 0x4df3, 0x4dd0, 0x4ddf, 0x4d85, 0x4dfb, 0x4da2, 0x4ddc, 0x4d82, 0x4d45, 0x4d6e, 0x4d55, 0x4d8f, 0x4d1e, 0x4de2, 0x4d78, 0x4e5d, 0x4d4b, 0x4da0, 0x4e24, 0x4d4a, 0x4e82, 0x4dc8, 0x4d13, 0x4d73, 0x4d4e, 0x4d5c, 0x4de9, 0x4d89, 0x4d71, 0x4db5, 0x4e0d, 0x4e4b, 0x4d15, 0x4e2f, 0x4d88, 0x4da4, 0x4de9, 0x4ded, 0x4e35, 0x4e27, 0x4dcb, 0x4d4c, 0x4dc5, 0x4d59, 0x4de3, 0x4da6, 0x4e7e, 0x4dfa, 0x4ddc, 0x4dfc, 0x4e23, 0x4d71, 0x4d5d, 0x4e2a, 0x4d4c, 0x4daa, 0x4d9c, 0x4cff, 0x4ddd, 0x4df5, 0x4d8f, 0x4dd1, 0x4de1, 0x4d5f, 0x4e4c, 0x4d88, -0x4d87, 0x4dde, 0x4e24, 0x4dd2, 0x4e20, 0x4e17, 0x4e1d, 0x4f2c, 0x4d91, 0x4f09, 0x4e23, 0x4e27, 0x4ec8, 0x4e1a, 0x4dcd, 0x4e00, 0x4e75, 0x4d91, 0x4d53, 0x4db2, 0x4e16, 0x4dac, 0x4e22, 0x4dfb, 0x4e20, 0x4dee, 0x4e47, 0x4d7a, 0x4e7b, 0x4e9e, 0x4dff, 0x4e26, 0x4e2e, 0x4dc3, 0x4ec2, 0x4da2, 0x4dca, 0x4d87, 0x4da3, 0x4e18, 0x4dd7, 0x4e50, 0x4d98, 0x4e92, 0x4e26, 0x4e14, 0x4d10, 0x4e33, 0x4e59, 0x4db0, 0x4e95, 0x4da1, 0x4d9b, 0x4df6, 0x4d2d, 0x4deb, 0x4e1b, 0x4d76, 0x4da5, 0x4df7, 0x4dd6, 0x4ea5, 0x4d40, 0x4e65, 0x4d83, 0x4e04, 0x4df1, 0x4e6e, 0x4e48, 0x4ee2, 0x4e35, 0x4da7, 0x4da9, 0x4dd4, 0x4e79, 0x4db5, 0x4e37, 0x4dc8, 0x4d68, 0x4e17, 0x4e90, 0x4d82, 0x4dec, 0x4dfe, 0x4d30, 0x4d85, 0x4e2a, 0x4d6d, 0x4de9, 0x4e64, 0x4da7, 0x4e1c, 0x4e59, 0x4e02, 0x4e09, 0x4d96, -0x4df9, 0x4e01, 0x4e8b, 0x4e85, 0x4ed5, 0x4e7a, 0x4e85, 0x4eed, 0x4e77, 0x4f1c, 0x4e7f, 0x4eb9, 0x4f54, 0x4e45, 0x4eaa, 0x4e35, 0x4ec6, 0x4e41, 0x4d94, 0x4ec8, 0x4e7b, 0x4e37, 0x4e55, 0x4df2, 0x4e9f, 0x4e53, 0x4ef9, 0x4e48, 0x4ebc, 0x4ee7, 0x4eb1, 0x4e74, 0x4ea0, 0x4ddc, 0x4e90, 0x4e52, 0x4e1c, 0x4de6, 0x4dbe, 0x4e24, 0x4e5c, 0x4e12, 0x4dc0, 0x4ebd, 0x4e07, 0x4f14, 0x4e16, 0x4e15, 0x4f3c, 0x4e16, 0x4f0c, 0x4e40, 0x4d4d, 0x4e9d, 0x4dff, 0x4dbc, 0x4e61, 0x4e0d, 0x4e13, 0x4e52, 0x4e85, 0x4f06, 0x4e05, 0x4e79, 0x4d69, 0x4dcf, 0x4ed8, 0x4e6b, 0x4e76, 0x4f03, 0x4e57, 0x4e66, 0x4edb, 0x4e8f, 0x4e75, 0x4e3c, 0x4e88, 0x4e9f, 0x4e6d, 0x4e35, 0x4ef2, 0x4e30, 0x4e50, 0x4e68, 0x4df4, 0x4e6b, 0x4e3d, 0x4da2, 0x4e5d, 0x4ed7, 0x4e33, 0x4ec0, 0x4f16, 0x4eb7, 0x4e7a, 0x4e3a, -0x4db5, 0x4dff, 0x4e06, 0x4e03, 0x4e6e, 0x4e3e, 0x4e52, 0x4edb, 0x4e09, 0x4f15, 0x4e4b, 0x4e9c, 0x4f54, 0x4d9e, 0x4dbe, 0x4e42, 0x4e0c, 0x4e1e, 0x4dd6, 0x4e41, 0x4e17, 0x4d7b, 0x4de5, 0x4deb, 0x4df3, 0x4e40, 0x4e41, 0x4e02, 0x4e89, 0x4f23, 0x4e46, 0x4e53, 0x4e20, 0x4e27, 0x4ee9, 0x4df9, 0x4e15, 0x4e38, 0x4df4, 0x4e14, 0x4e1a, 0x4e01, 0x4db3, 0x4ebc, 0x4d8c, 0x4e77, 0x4d53, 0x4dbd, 0x4ed1, 0x4dde, 0x4eb1, 0x4dd4, 0x4db1, 0x4e08, 0x4d6e, 0x4da6, 0x4e43, 0x4d66, 0x4dbe, 0x4e1d, 0x4e10, 0x4f3f, 0x4d2a, 0x4e1f, 0x4da6, 0x4dca, 0x4e6b, 0x4e59, 0x4e81, 0x4f21, 0x4dfd, 0x4e23, 0x4e33, 0x4e48, 0x4eb9, 0x4e08, 0x4dd9, 0x4e5c, 0x4df8, 0x4e6e, 0x4e16, 0x4dca, 0x4e50, 0x4e5c, 0x4d71, 0x4e32, 0x4e43, 0x4d64, 0x4dfe, 0x4ee3, 0x4d83, 0x4e66, 0x4e3d, 0x4eeb, 0x4e28, 0x4ddf, -0x4e3e, 0x4e49, 0x4ee3, 0x4e3f, 0x4ef6, 0x4eac, 0x4ea8, 0x4f54, 0x4ea4, 0x4fdf, 0x4e91, 0x4eb4, 0x4f8a, 0x4e75, 0x4e81, 0x4e8e, 0x4f45, 0x4e2f, 0x4e26, 0x4edd, 0x4ed4, 0x4e5b, 0x4e64, 0x4de7, 0x4e6b, 0x4e8b, 0x4f22, 0x4e3b, 0x4e8e, 0x4f34, 0x4ed1, 0x4edd, 0x4eaf, 0x4e27, 0x4ef4, 0x4e73, 0x4ea4, 0x4e3b, 0x4da0, 0x4e2d, 0x4e7c, 0x4e81, 0x4e2e, 0x4f31, 0x4e48, 0x4f48, 0x4e39, 0x4e7c, 0x4f0f, 0x4df3, 0x4f12, 0x4e19, 0x4dcb, 0x4e4f, 0x4e16, 0x4dea, 0x4eb6, 0x4e0b, 0x4e3c, 0x4ea1, 0x4e48, 0x4f80, 0x4dd3, 0x4ed8, 0x4e21, 0x4e47, 0x4f42, 0x4f09, 0x4eec, 0x4ef0, 0x4e6e, 0x4ec3, 0x4ed3, 0x4e99, 0x4ee3, 0x4e24, 0x4ebc, 0x4eb2, 0x4e78, 0x4e8a, 0x4f01, 0x4e89, 0x4e67, 0x4ed7, 0x4e1d, 0x4e37, 0x4e9f, 0x4e03, 0x4e95, 0x4f02, 0x4df4, 0x4efe, 0x4f55, 0x4ee1, 0x4eb7, 0x4e4f, -0x4d92, 0x4dde, 0x4e21, 0x4d5d, 0x4e90, 0x4e15, 0x4e89, 0x4ea3, 0x4deb, 0x4f4c, 0x4ec4, 0x4e70, 0x4eda, 0x4e2f, 0x4e38, 0x4e19, 0x4ecf, 0x4e55, 0x4dbc, 0x4e20, 0x4e52, 0x4de4, 0x4de0, 0x4e1e, 0x4db4, 0x4e72, 0x4e1b, 0x4dd5, 0x4e30, 0x4ea3, 0x4e57, 0x4ea3, 0x4e27, 0x4e31, 0x4ede, 0x4dd0, 0x4df6, 0x4e00, 0x4dca, 0x4e1c, 0x4e49, 0x4e2b, 0x4ddc, 0x4eb6, 0x4e62, 0x4ed8, 0x4d69, 0x4e49, 0x4eb5, 0x4de9, 0x4eeb, 0x4df2, 0x4d4c, 0x4e79, 0x4dba, 0x4e24, 0x4e5b, 0x4dd0, 0x4e06, 0x4e3e, 0x4e41, 0x4f2c, 0x4dbb, 0x4e7a, 0x4dff, 0x4d9f, 0x4e54, 0x4e51, 0x4e3a, 0x4f00, 0x4e88, 0x4e3d, 0x4eaa, 0x4e47, 0x4eb3, 0x4e57, 0x4e32, 0x4e26, 0x4e80, 0x4efc, 0x4f49, 0x4e0b, 0x4dfb, 0x4e9b, 0x4d69, 0x4e31, 0x4deb, 0x4d4e, 0x4de8, 0x4e9a, 0x4e12, 0x4e74, 0x4e6a, 0x4e94, 0x4e34, 0x4de3, -0x4de1, 0x4e39, 0x4e47, 0x4de2, 0x4e53, 0x4e02, 0x4e7e, 0x4ec5, 0x4e01, 0x4f33, 0x4e30, 0x4dfc, 0x4f1f, 0x4e5c, 0x4e28, 0x4e30, 0x4ea0, 0x4e23, 0x4dd5, 0x4e19, 0x4e43, 0x4dc9, 0x4e8f, 0x4dd0, 0x4e3e, 0x4e3e, 0x4e9a, 0x4dd4, 0x4e31, 0x4f06, 0x4e76, 0x4e21, 0x4e7f, 0x4e1f, 0x4eb7, 0x4e0c, 0x4dde, 0x4dc8, 0x4de7, 0x4dfe, 0x4e10, 0x4e2b, 0x4ded, 0x4edf, 0x4e37, 0x4e72, 0x4dec, 0x4e3a, 0x4ebb, 0x4ddf, 0x4ec0, 0x4dbe, 0x4d1e, 0x4e87, 0x4dc6, 0x4e0b, 0x4e5a, 0x4de7, 0x4dcd, 0x4e96, 0x4e66, 0x4eda, 0x4d77, 0x4e4a, 0x4da4, 0x4df5, 0x4e8d, 0x4e4c, 0x4e68, 0x4ede, 0x4e5d, 0x4dd1, 0x4e06, 0x4e2d, 0x4e0c, 0x4e46, 0x4e5e, 0x4e15, 0x4de8, 0x4e6c, 0x4e54, 0x4daa, 0x4df4, 0x4ed0, 0x4d80, 0x4e1a, 0x4df9, 0x4dcb, 0x4dee, 0x4e1c, 0x4e17, 0x4e5c, 0x4e8c, 0x4e33, 0x4dd3, 0x4e27, -0x4d34, 0x4dbb, 0x4e7d, 0x4d47, 0x4dfd, 0x4d0b, 0x4ddc, 0x4e68, 0x4dc6, 0x4ecd, 0x4d9c, 0x4d7d, 0x4ee0, 0x4d69, 0x4ded, 0x4dca, 0x4e3c, 0x4dcd, 0x4d5e, 0x4dbf, 0x4e4c, 0x4db0, 0x4db2, 0x4d97, 0x4da9, 0x4d9f, 0x4e43, 0x4d2a, 0x4dab, 0x4e3d, 0x4e06, 0x4dd4, 0x4daa, 0x4d79, 0x4de6, 0x4de1, 0x4e01, 0x4d62, 0x4d05, 0x4dc7, 0x4ea2, 0x4db4, 0x4d8b, 0x4e6e, 0x4ddd, 0x4e74, 0x4d00, 0x4d9a, 0x4e77, 0x4ddc, 0x4e8b, 0x4dd1, 0x4ccc, 0x4e3f, 0x4d93, 0x4e15, 0x4e91, 0x4de6, 0x4d2c, 0x4e2d, 0x4e02, 0x4ea1, 0x4daf, 0x4e3f, 0x4d8b, 0x4db9, 0x4dde, 0x4e0e, 0x4de3, 0x4e50, 0x4e05, 0x4d89, 0x4e03, 0x4e13, 0x4e4e, 0x4d9c, 0x4df4, 0x4e2d, 0x4df6, 0x4e00, 0x4df1, 0x4ddd, 0x4d7e, 0x4e68, 0x4d6c, 0x4e07, 0x4dca, 0x4d0b, 0x4dba, 0x4dde, 0x4e18, 0x4db6, 0x4dc8, 0x4e2b, 0x4dfa, 0x4d96, -0x4d85, 0x4dc7, 0x4e03, 0x4dc7, 0x4ddd, 0x4dce, 0x4e82, 0x4f1b, 0x4e5b, 0x4f6b, 0x4ec1, 0x4e3e, 0x4f42, 0x4e4a, 0x4e5e, 0x4e3c, 0x4e55, 0x4e43, 0x4dbe, 0x4e0d, 0x4e30, 0x4d9f, 0x4e29, 0x4df5, 0x4e4f, 0x4e49, 0x4e01, 0x4dc1, 0x4e7c, 0x4e7f, 0x4e9d, 0x4e1b, 0x4e00, 0x4e55, 0x4e85, 0x4e25, 0x4e0b, 0x4da9, 0x4da2, 0x4e0e, 0x4e49, 0x4e9b, 0x4ded, 0x4e7f, 0x4df3, 0x4ea5, 0x4d68, 0x4dd6, 0x4ec1, 0x4db5, 0x4ed0, 0x4e11, 0x4d68, 0x4e0c, 0x4e37, 0x4e5f, 0x4e8a, 0x4d98, 0x4e15, 0x4e34, 0x4e33, 0x4ef1, 0x4dc1, 0x4e90, 0x4dd5, 0x4dfb, 0x4e50, 0x4eb3, 0x4ebf, 0x4f41, 0x4e9b, 0x4e12, 0x4e83, 0x4df5, 0x4e9e, 0x4e2f, 0x4e5c, 0x4dfd, 0x4e64, 0x4ea9, 0x4ec7, 0x4e31, 0x4e1b, 0x4eb6, 0x4ddc, 0x4e68, 0x4e72, 0x4d96, 0x4e27, 0x4e93, 0x4dd6, 0x4e70, 0x4e8a, 0x4e37, 0x4e0b, 0x4e0e, -0x4e2a, 0x4db0, 0x4e2a, 0x4d72, 0x4dbf, 0x4e19, 0x4e05, 0x4ea8, 0x4dfa, 0x4eed, 0x4e02, 0x4e06, 0x4e93, 0x4de1, 0x4e4e, 0x4da8, 0x4e27, 0x4d5d, 0x4dc5, 0x4e0c, 0x4e4f, 0x4e0a, 0x4dc2, 0x4da0, 0x4db7, 0x4ddf, 0x4e72, 0x4dc6, 0x4e8d, 0x4e41, 0x4e66, 0x4e35, 0x4dc7, 0x4e21, 0x4e2d, 0x4df3, 0x4df3, 0x4d7e, 0x4da9, 0x4e2e, 0x4e07, 0x4ded, 0x4d9d, 0x4e6c, 0x4e27, 0x4ec2, 0x4d98, 0x4e01, 0x4e73, 0x4d6e, 0x4ed1, 0x4d9e, 0x4d36, 0x4de8, 0x4da2, 0x4e1c, 0x4dcb, 0x4de2, 0x4d8c, 0x4e31, 0x4e44, 0x4eee, 0x4d69, 0x4dd4, 0x4d7e, 0x4de5, 0x4e35, 0x4e4f, 0x4e55, 0x4e9c, 0x4e58, 0x4da4, 0x4e09, 0x4dd2, 0x4e27, 0x4dec, 0x4e42, 0x4e28, 0x4e50, 0x4e66, 0x4e37, 0x4e51, 0x4dd0, 0x4ebe, 0x4d62, 0x4e19, 0x4e4e, 0x4d5a, 0x4e12, 0x4e5d, 0x4ddc, 0x4e4c, 0x4e8f, 0x4e44, 0x4e84, 0x4dbe, -0x4d61, 0x4dfd, 0x4ded, 0x4ddc, 0x4e50, 0x4d9c, 0x4e71, 0x4e90, 0x4e16, 0x4f8b, 0x4e5d, 0x4e68, 0x4f60, 0x4e08, 0x4e2a, 0x4e27, 0x4f17, 0x4e21, 0x4d68, 0x4e1d, 0x4dea, 0x4de6, 0x4dd9, 0x4d88, 0x4e27, 0x4e43, 0x4e60, 0x4da5, 0x4e57, 0x4f23, 0x4e7d, 0x4e5f, 0x4e69, 0x4dfe, 0x4ebf, 0x4d9b, 0x4e4f, 0x4de4, 0x4d8e, 0x4dfa, 0x4e03, 0x4e22, 0x4df2, 0x4e90, 0x4e18, 0x4e72, 0x4cf7, 0x4dfe, 0x4e7e, 0x4dfa, 0x4e98, 0x4dd4, 0x4d98, 0x4e42, 0x4de0, 0x4e02, 0x4ec0, 0x4dcb, 0x4d4f, 0x4e5a, 0x4df3, 0x4f15, 0x4d77, 0x4e51, 0x4da6, 0x4e02, 0x4de0, 0x4e2d, 0x4ea4, 0x4e88, 0x4dec, 0x4df1, 0x4e0a, 0x4e5a, 0x4e9c, 0x4e02, 0x4df8, 0x4e2c, 0x4e4a, 0x4e9a, 0x4e7b, 0x4d92, 0x4e1c, 0x4e88, 0x4ddb, 0x4e52, 0x4e18, 0x4d6c, 0x4dde, 0x4eb1, 0x4dc8, 0x4e2d, 0x4e24, 0x4df0, 0x4dea, 0x4e1e, -0x4daf, 0x4da3, 0x4e3a, 0x4dec, 0x4e70, 0x4d93, 0x4e3a, 0x4e83, 0x4df9, 0x4efd, 0x4e07, 0x4e51, 0x4f5d, 0x4dde, 0x4e0b, 0x4dfc, 0x4e45, 0x4ddc, 0x4d75, 0x4dc9, 0x4df3, 0x4d8d, 0x4de0, 0x4da4, 0x4e37, 0x4e7a, 0x4e46, 0x4dc8, 0x4e2e, 0x4ebd, 0x4e27, 0x4e67, 0x4e3e, 0x4e2f, 0x4e5f, 0x4d98, 0x4e5f, 0x4d6e, 0x4da8, 0x4dc7, 0x4dd5, 0x4e31, 0x4ddb, 0x4e89, 0x4de0, 0x4e73, 0x4d87, 0x4dd9, 0x4ea2, 0x4dae, 0x4e92, 0x4dc9, 0x4d4f, 0x4df1, 0x4e02, 0x4df1, 0x4e69, 0x4de0, 0x4d7f, 0x4e39, 0x4dc3, 0x4e99, 0x4d2f, 0x4e69, 0x4d99, 0x4d5a, 0x4e3d, 0x4e3b, 0x4e74, 0x4eac, 0x4e2d, 0x4e43, 0x4e44, 0x4e36, 0x4e2d, 0x4dc2, 0x4e43, 0x4e3a, 0x4e22, 0x4de6, 0x4e76, 0x4d64, 0x4e25, 0x4e7c, 0x4dc2, 0x4e51, 0x4daa, 0x4d57, 0x4e4f, 0x4e55, 0x4db5, 0x4df2, 0x4e66, 0x4e42, 0x4e18, 0x4e30, -0x4df6, 0x4e52, 0x4e8b, 0x4da7, 0x4e2b, 0x4e27, 0x4e8a, 0x4f5e, 0x4e20, 0x4fd0, 0x4e78, 0x4ed1, 0x4ef4, 0x4e3b, 0x4e31, 0x4e7c, 0x4ec6, 0x4de8, 0x4e00, 0x4e9b, 0x4e95, 0x4df6, 0x4e8f, 0x4e58, 0x4e3b, 0x4e7a, 0x4ea5, 0x4e09, 0x4ea0, 0x4f19, 0x4e5c, 0x4e85, 0x4e5f, 0x4e71, 0x4e94, 0x4e66, 0x4e34, 0x4dfd, 0x4ddc, 0x4e1d, 0x4e27, 0x4e64, 0x4e43, 0x4eb2, 0x4e7d, 0x4f30, 0x4e1a, 0x4e05, 0x4f21, 0x4dde, 0x4f53, 0x4e6f, 0x4e0a, 0x4e5e, 0x4dd2, 0x4e50, 0x4ee9, 0x4e05, 0x4dab, 0x4e4b, 0x4eb3, 0x4f2d, 0x4e0a, 0x4ec8, 0x4dbf, 0x4e3f, 0x4eca, 0x4ec0, 0x4ed5, 0x4f2c, 0x4e9c, 0x4e3d, 0x4ebc, 0x4e31, 0x4e9c, 0x4e33, 0x4e4e, 0x4e9c, 0x4e15, 0x4edc, 0x4ee4, 0x4e68, 0x4dd4, 0x4ef6, 0x4de9, 0x4e52, 0x4ebb, 0x4d9b, 0x4e7b, 0x4f28, 0x4e7d, 0x4e9c, 0x4e77, 0x4e80, 0x4e9f, 0x4e17, -0x4e60, 0x4e53, 0x4e8b, 0x4e28, 0x4e69, 0x4e47, 0x4e69, 0x4f88, 0x4dfc, 0x4f2c, 0x4e91, 0x4e75, 0x4f10, 0x4ecc, 0x4deb, 0x4dfa, 0x4e6d, 0x4e37, 0x4e21, 0x4e5c, 0x4ebd, 0x4dc5, 0x4e7f, 0x4e47, 0x4e82, 0x4e61, 0x4ea7, 0x4df0, 0x4eb8, 0x4f35, 0x4eac, 0x4ea1, 0x4f06, 0x4e15, 0x4ea4, 0x4df5, 0x4e63, 0x4de8, 0x4dd8, 0x4e0d, 0x4e25, 0x4e7f, 0x4e50, 0x4e90, 0x4e3d, 0x4ecd, 0x4dad, 0x4e6c, 0x4f1a, 0x4dd8, 0x4f33, 0x4e40, 0x4dfb, 0x4e3e, 0x4db5, 0x4e5f, 0x4eeb, 0x4e34, 0x4dda, 0x4e80, 0x4ecc, 0x4ed4, 0x4db3, 0x4e12, 0x4d87, 0x4e52, 0x4e2f, 0x4ed6, 0x4e9c, 0x4f17, 0x4e5e, 0x4e12, 0x4e48, 0x4e31, 0x4e88, 0x4e64, 0x4e44, 0x4e23, 0x4e16, 0x4ea3, 0x4e98, 0x4e0a, 0x4de2, 0x4ebc, 0x4dfc, 0x4e22, 0x4e5b, 0x4dd5, 0x4e85, 0x4ea4, 0x4e42, 0x4e4f, 0x4ea1, 0x4e2d, 0x4e44, 0x4d7d, -0x4db5, 0x4dad, 0x4e2a, 0x4d31, 0x4e06, 0x4dbc, 0x4e4e, 0x4e78, 0x4d7e, 0x4ea3, 0x4dc2, 0x4db8, 0x4ec4, 0x4daa, 0x4e42, 0x4de2, 0x4e01, 0x4dac, 0x4dbc, 0x4e00, 0x4da6, 0x4d71, 0x4e01, 0x4dd2, 0x4d92, 0x4db6, 0x4ec5, 0x4d54, 0x4e7b, 0x4e3f, 0x4e0b, 0x4dfc, 0x4e05, 0x4d6c, 0x4e96, 0x4d90, 0x4dae, 0x4d2d, 0x4d7c, 0x4dc9, 0x4d91, 0x4dcc, 0x4dab, 0x4e48, 0x4df2, 0x4e26, 0x4da6, 0x4dd1, 0x4e7d, 0x4dc3, 0x4eab, 0x4e04, 0x4d1f, 0x4dcb, 0x4db2, 0x4da9, 0x4dd1, 0x4d8c, 0x4d8d, 0x4df2, 0x4e1c, 0x4ef9, 0x4d3c, 0x4e0a, 0x4d23, 0x4d8f, 0x4e02, 0x4e27, 0x4e29, 0x4ea2, 0x4e10, 0x4dc6, 0x4de3, 0x4db2, 0x4e61, 0x4df7, 0x4df5, 0x4e25, 0x4de6, 0x4e46, 0x4e0f, 0x4dc8, 0x4d8f, 0x4e3c, 0x4d4e, 0x4ddd, 0x4df1, 0x4cfa, 0x4e06, 0x4e72, 0x4de3, 0x4dda, 0x4df9, 0x4e24, 0x4da8, 0x4d7f, -0x4d8f, 0x4d95, 0x4e5a, 0x4dbc, 0x4ded, 0x4daf, 0x4e1c, 0x4eea, 0x4db3, 0x4ee9, 0x4e7d, 0x4dd2, 0x4e60, 0x4df6, 0x4dfd, 0x4e2d, 0x4e5d, 0x4df0, 0x4db2, 0x4dde, 0x4de1, 0x4d4e, 0x4dd9, 0x4db6, 0x4de8, 0x4dcd, 0x4dff, 0x4d63, 0x4dee, 0x4e75, 0x4e5d, 0x4dfd, 0x4e30, 0x4d88, 0x4e6f, 0x4dc4, 0x4d8b, 0x4d90, 0x4d4e, 0x4dc2, 0x4e07, 0x4e3e, 0x4d82, 0x4e79, 0x4da7, 0x4de0, 0x4d1a, 0x4d8a, 0x4e91, 0x4da7, 0x4e5c, 0x4dcc, 0x4d9d, 0x4df7, 0x4d69, 0x4dee, 0x4e05, 0x4da3, 0x4d41, 0x4e2d, 0x4e13, 0x4ec4, 0x4cf6, 0x4e41, 0x4dc4, 0x4dad, 0x4d96, 0x4e74, 0x4e66, 0x4e4b, 0x4df8, 0x4da1, 0x4dbe, 0x4ddd, 0x4e12, 0x4d81, 0x4da9, 0x4dba, 0x4df4, 0x4dfb, 0x4e53, 0x4dbb, 0x4d79, 0x4e13, 0x4d93, 0x4dfc, 0x4da8, 0x4d6e, 0x4ddb, 0x4dee, 0x4db2, 0x4e71, 0x4e06, 0x4e15, 0x4dad, 0x4e10, -0x4dbe, 0x4d9a, 0x4e47, 0x4d82, 0x4e18, 0x4e0e, 0x4e70, 0x4ebd, 0x4e2f, 0x4eee, 0x4e47, 0x4e16, 0x4ed6, 0x4dee, 0x4e5a, 0x4e64, 0x4e99, 0x4dfa, 0x4dd7, 0x4e82, 0x4e32, 0x4dd0, 0x4e4a, 0x4e31, 0x4db7, 0x4dab, 0x4e6f, 0x4df7, 0x4e5e, 0x4ea5, 0x4e2f, 0x4e3d, 0x4e1b, 0x4dee, 0x4e6e, 0x4df6, 0x4e07, 0x4d94, 0x4d52, 0x4d9d, 0x4d9a, 0x4dc1, 0x4d68, 0x4e8a, 0x4de5, 0x4ed0, 0x4dbc, 0x4e0e, 0x4e82, 0x4df1, 0x4eda, 0x4deb, 0x4d7d, 0x4e03, 0x4d79, 0x4d9c, 0x4e18, 0x4df0, 0x4dc0, 0x4e04, 0x4e3c, 0x4f3c, 0x4dcf, 0x4e53, 0x4d88, 0x4dad, 0x4e2e, 0x4e30, 0x4e7a, 0x4ea5, 0x4dca, 0x4df9, 0x4e4a, 0x4e05, 0x4e9c, 0x4dca, 0x4e18, 0x4e1c, 0x4e4d, 0x4e3a, 0x4ed8, 0x4dd7, 0x4dd2, 0x4e56, 0x4da1, 0x4e5c, 0x4dec, 0x4d66, 0x4e07, 0x4e62, 0x4e15, 0x4e5e, 0x4e30, 0x4e1d, 0x4e47, 0x4e0e, -0x4dec, 0x4e01, 0x4e70, 0x4dfa, 0x4e67, 0x4db4, 0x4e83, 0x4f89, 0x4e1b, 0x4f76, 0x4e4b, 0x4e2b, 0x4f33, 0x4e79, 0x4e5f, 0x4e1d, 0x4e90, 0x4df1, 0x4df9, 0x4e53, 0x4deb, 0x4d95, 0x4e23, 0x4d81, 0x4e0a, 0x4e1e, 0x4efc, 0x4df0, 0x4e8d, 0x4ee7, 0x4e99, 0x4ecb, 0x4e37, 0x4e41, 0x4ece, 0x4e28, 0x4deb, 0x4dba, 0x4dd7, 0x4e1d, 0x4e40, 0x4e1e, 0x4e08, 0x4eab, 0x4e61, 0x4e9e, 0x4db5, 0x4e32, 0x4ed9, 0x4df4, 0x4f2d, 0x4e58, 0x4d91, 0x4dd9, 0x4dd4, 0x4e32, 0x4e5e, 0x4db8, 0x4dfb, 0x4e4d, 0x4e87, 0x4f3e, 0x4dcc, 0x4ea3, 0x4d85, 0x4e3b, 0x4e3a, 0x4e95, 0x4ea9, 0x4efa, 0x4f03, 0x4e56, 0x4e70, 0x4e59, 0x4e85, 0x4e7b, 0x4e0a, 0x4e5e, 0x4e33, 0x4e61, 0x4edb, 0x4e24, 0x4e24, 0x4e4e, 0x4ddc, 0x4e35, 0x4e52, 0x4dc2, 0x4e58, 0x4ecb, 0x4dea, 0x4e93, 0x4e7a, 0x4e7a, 0x4e24, 0x4e24, -0x4e1a, 0x4e76, 0x4e5f, 0x4dcb, 0x4e4c, 0x4e37, 0x4ed6, 0x4ec9, 0x4de4, 0x4f1e, 0x4e8e, 0x4e22, 0x4eef, 0x4e5e, 0x4e26, 0x4e5b, 0x4ed3, 0x4e7a, 0x4dbf, 0x4e76, 0x4e06, 0x4de0, 0x4e59, 0x4de5, 0x4e66, 0x4e1f, 0x4e76, 0x4dd8, 0x4e8d, 0x4ef8, 0x4ed3, 0x4e45, 0x4e84, 0x4e3d, 0x4ef2, 0x4df1, 0x4df6, 0x4e09, 0x4d77, 0x4e22, 0x4dc6, 0x4e8a, 0x4dcd, 0x4e8f, 0x4e57, 0x4eef, 0x4dbc, 0x4e40, 0x4f00, 0x4deb, 0x4e93, 0x4e33, 0x4d66, 0x4e1a, 0x4dc6, 0x4dee, 0x4e42, 0x4dd8, 0x4e23, 0x4e83, 0x4e0b, 0x4ee3, 0x4da3, 0x4e63, 0x4dbf, 0x4e1a, 0x4e7a, 0x4e8f, 0x4ede, 0x4eed, 0x4e27, 0x4e5a, 0x4e42, 0x4e2f, 0x4ea2, 0x4e1d, 0x4e16, 0x4e7e, 0x4eab, 0x4e64, 0x4ec7, 0x4dc2, 0x4d9a, 0x4eca, 0x4e4a, 0x4e22, 0x4e54, 0x4dd1, 0x4e67, 0x4e81, 0x4de7, 0x4e32, 0x4f41, 0x4e70, 0x4e0d, 0x4ddc, -0x4da1, 0x4deb, 0x4e14, 0x4d79, 0x4e1c, 0x4db9, 0x4e1a, 0x4e73, 0x4dd2, 0x4ee5, 0x4dd8, 0x4dbd, 0x4e94, 0x4dd3, 0x4da2, 0x4e2d, 0x4e62, 0x4dda, 0x4d75, 0x4e2d, 0x4e01, 0x4d3e, 0x4ddf, 0x4ddb, 0x4e1e, 0x4d91, 0x4e09, 0x4da9, 0x4e74, 0x4e7a, 0x4dba, 0x4dd4, 0x4e30, 0x4da4, 0x4e3e, 0x4d81, 0x4d95, 0x4d95, 0x4d81, 0x4e30, 0x4e23, 0x4e35, 0x4dbd, 0x4e34, 0x4e0a, 0x4e89, 0x4d2f, 0x4df7, 0x4e72, 0x4dbe, 0x4ef1, 0x4e28, 0x4d7e, 0x4dd9, 0x4dc9, 0x4dd5, 0x4e30, 0x4de8, 0x4da4, 0x4e00, 0x4e0a, 0x4e66, 0x4d32, 0x4e04, 0x4d5e, 0x4db9, 0x4e11, 0x4e3e, 0x4de4, 0x4e6c, 0x4e38, 0x4e10, 0x4db9, 0x4df4, 0x4e63, 0x4dec, 0x4deb, 0x4dd5, 0x4e2c, 0x4e28, 0x4e22, 0x4d86, 0x4dd8, 0x4e3e, 0x4d27, 0x4e7e, 0x4dc5, 0x4cf5, 0x4e04, 0x4e4e, 0x4e1c, 0x4df2, 0x4e10, 0x4de0, 0x4d6b, 0x4d53, -0x4de7, 0x4e37, 0x4e87, 0x4e27, 0x4e9b, 0x4e07, 0x4e87, 0x4f9e, 0x4e14, 0x4faf, 0x4edd, 0x4f04, 0x4f20, 0x4e28, 0x4d9f, 0x4e6d, 0x4f14, 0x4df2, 0x4e1b, 0x4e74, 0x4e77, 0x4d6f, 0x4e33, 0x4dff, 0x4e7c, 0x4e75, 0x4e6e, 0x4e2c, 0x4e68, 0x4f3a, 0x4ec2, 0x4e8f, 0x4eda, 0x4e35, 0x4f59, 0x4e42, 0x4e34, 0x4dfe, 0x4e42, 0x4e5b, 0x4e3a, 0x4e91, 0x4e20, 0x4e71, 0x4eec, 0x4eba, 0x4e03, 0x4e1f, 0x4eac, 0x4dd8, 0x4f57, 0x4ead, 0x4de8, 0x4de5, 0x4e17, 0x4e96, 0x4e7c, 0x4db7, 0x4ddb, 0x4e47, 0x4e6a, 0x4f17, 0x4d7d, 0x4e98, 0x4e04, 0x4e32, 0x4e82, 0x4ecf, 0x4ed7, 0x4f05, 0x4e77, 0x4ec6, 0x4ee5, 0x4e3f, 0x4e8f, 0x4e83, 0x4dcd, 0x4e0e, 0x4e9d, 0x4e58, 0x4eea, 0x4df3, 0x4de0, 0x4ecb, 0x4e06, 0x4e8a, 0x4e68, 0x4d67, 0x4e5a, 0x4eef, 0x4e05, 0x4e8b, 0x4eff, 0x4e46, 0x4e60, 0x4dd7, -0x4dcc, 0x4dee, 0x4e78, 0x4db4, 0x4e61, 0x4db1, 0x4e3e, 0x4edd, 0x4db1, 0x4ede, 0x4d68, 0x4e5a, 0x4efb, 0x4dd2, 0x4dfe, 0x4e28, 0x4ec4, 0x4e16, 0x4d85, 0x4e55, 0x4dff, 0x4dc4, 0x4e27, 0x4dc9, 0x4dc7, 0x4dd2, 0x4e79, 0x4d94, 0x4e4e, 0x4e8b, 0x4e6a, 0x4e52, 0x4dfc, 0x4e08, 0x4e1e, 0x4dff, 0x4daf, 0x4d7b, 0x4d51, 0x4da5, 0x4deb, 0x4e25, 0x4e00, 0x4e7a, 0x4de4, 0x4ea6, 0x4d64, 0x4ddc, 0x4ea0, 0x4ddb, 0x4e73, 0x4dfa, 0x4d1b, 0x4e17, 0x4d78, 0x4de8, 0x4eb9, 0x4dc4, 0x4dc0, 0x4e2e, 0x4e61, 0x4eb6, 0x4dac, 0x4e6a, 0x4d86, 0x4dd0, 0x4e92, 0x4e20, 0x4e2b, 0x4e5f, 0x4df0, 0x4e2d, 0x4e1b, 0x4dd7, 0x4e1d, 0x4e1f, 0x4e45, 0x4e6e, 0x4dc8, 0x4de8, 0x4e5f, 0x4dea, 0x4dd3, 0x4e5e, 0x4dda, 0x4dee, 0x4dac, 0x4d7d, 0x4e39, 0x4e3c, 0x4e22, 0x4e6e, 0x4e77, 0x4e45, 0x4e0b, 0x4dd3, -0x4e35, 0x4e33, 0x4e9c, 0x4de7, 0x4e4c, 0x4e54, 0x4eeb, 0x4f2a, 0x4e39, 0x4f67, 0x4e9e, 0x4e61, 0x4f2b, 0x4e50, 0x4e45, 0x4eab, 0x4f08, 0x4e4f, 0x4e01, 0x4e7a, 0x4e73, 0x4df9, 0x4e88, 0x4dd9, 0x4ea5, 0x4e6d, 0x4ef7, 0x4dcf, 0x4f2f, 0x4f58, 0x4ef7, 0x4eca, 0x4e71, 0x4e82, 0x4f22, 0x4e73, 0x4e35, 0x4e09, 0x4de6, 0x4e4a, 0x4e4c, 0x4e58, 0x4e07, 0x4f1c, 0x4ea0, 0x4f1d, 0x4de4, 0x4e88, 0x4ec8, 0x4e27, 0x4f13, 0x4df9, 0x4dc0, 0x4e55, 0x4da9, 0x4e3b, 0x4eb5, 0x4df2, 0x4e28, 0x4ea0, 0x4e45, 0x4f56, 0x4dfe, 0x4ebe, 0x4db8, 0x4e2b, 0x4ea1, 0x4ebc, 0x4ec6, 0x4f16, 0x4e85, 0x4e5a, 0x4e8c, 0x4e67, 0x4efc, 0x4e11, 0x4e3e, 0x4e7c, 0x4e7b, 0x4e66, 0x4ecf, 0x4df3, 0x4e39, 0x4e97, 0x4dd1, 0x4eb3, 0x4e47, 0x4e05, 0x4e7d, 0x4eb7, 0x4e7b, 0x4eca, 0x4f2b, 0x4ea0, 0x4e2b, 0x4e51, -0x4db9, 0x4dbf, 0x4e60, 0x4db6, 0x4ec2, 0x4da9, 0x4e40, 0x4eb2, 0x4dd0, 0x4ee8, 0x4df1, 0x4e3d, 0x4eef, 0x4e3a, 0x4e4c, 0x4dfe, 0x4e5e, 0x4e52, 0x4df0, 0x4e28, 0x4e65, 0x4de5, 0x4e47, 0x4d6d, 0x4e02, 0x4dd1, 0x4e7c, 0x4dde, 0x4e2f, 0x4e87, 0x4e9e, 0x4e58, 0x4e0a, 0x4e91, 0x4e0c, 0x4e05, 0x4e1d, 0x4d89, 0x4d53, 0x4da9, 0x4e6b, 0x4e71, 0x4df8, 0x4e8a, 0x4dcd, 0x4ed8, 0x4d7f, 0x4e1d, 0x4e77, 0x4d97, 0x4ea3, 0x4d6f, 0x4d9d, 0x4e0f, 0x4dcb, 0x4e2b, 0x4e8e, 0x4dbd, 0x4d96, 0x4e28, 0x4e09, 0x4f0c, 0x4d95, 0x4e53, 0x4d66, 0x4e32, 0x4e1c, 0x4dfb, 0x4e2a, 0x4e91, 0x4ed8, 0x4dd0, 0x4e94, 0x4e1e, 0x4dd3, 0x4e4a, 0x4dcd, 0x4e56, 0x4e2f, 0x4e7e, 0x4e22, 0x4dd2, 0x4e42, 0x4e9a, 0x4ddc, 0x4e3c, 0x4e8a, 0x4d97, 0x4e00, 0x4e7e, 0x4d80, 0x4e5c, 0x4eba, 0x4e5e, 0x4e47, 0x4e02, -0x4c99, 0x4c81, 0x4d53, 0x4cb2, 0x4d3f, 0x4ca4, 0x4d31, 0x4dab, 0x4d46, 0x4dae, 0x4ce7, 0x4d3d, 0x4da8, 0x4d00, 0x4d6a, 0x4d0d, 0x4d75, 0x4d0c, 0x4cc1, 0x4cf5, 0x4d2e, 0x4cc4, 0x4ccf, 0x4cac, 0x4cfc, 0x4cfa, 0x4d7f, 0x4ccd, 0x4d41, 0x4d62, 0x4d43, 0x4d2f, 0x4cf8, 0x4cfc, 0x4db4, 0x4d00, 0x4cfa, 0x4cad, 0x4cf2, 0x4cf7, 0x4d04, 0x4cf2, 0x4caf, 0x4d56, 0x4cda, 0x4d5b, 0x4cef, 0x4d37, 0x4d81, 0x4cca, 0x4ddd, 0x4ca3, 0x4c50, 0x4d2d, 0x4c81, 0x4cf7, 0x4d46, 0x4ce2, 0x4ce5, 0x4d38, 0x4cf5, 0x4de8, 0x4c6a, 0x4d4f, 0x4c86, 0x4cc3, 0x4d31, 0x4d5b, 0x4d55, 0x4d82, 0x4d74, 0x4cc0, 0x4d08, 0x4d27, 0x4d0a, 0x4cd9, 0x4cf2, 0x4d38, 0x4c9b, 0x4d29, 0x4d67, 0x4d1a, 0x4d25, 0x4d1d, 0x4cdd, 0x4cd0, 0x4ced, 0x4c6d, 0x4d0d, 0x4d72, 0x4d3f, 0x4d94, 0x4d5a, 0x4d2d, 0x4d00, 0x4cb8 +uint16_t z_oup_2D [24][32] = { +0x4845, 0x4897, 0x4608, 0x4838, 0x4855, 0x487b, 0x4869, 0x4880, 0x46d1, 0x48b0, 0x48db, 0x483f, 0x48c9, 0x485f, 0x4881, 0x483a, 0x484b, 0x472c, 0x4762, 0x492b, 0x4822, 0x48fd, 0x488e, 0x492e, 0x483e, 0x484f, 0x49e8, 0x46d7, 0x484b, 0x489d, 0x490b, 0x47e9, +0x484f, 0x47d2, 0x44be, 0x4747, 0x47c7, 0x46c0, 0x4727, 0x48af, 0x46c5, 0x482d, 0x483d, 0x482e, 0x4897, 0x479f, 0x488b, 0x4749, 0x489a, 0x46a8, 0x46f2, 0x488b, 0x4891, 0x47e8, 0x4872, 0x483d, 0x4716, 0x46fd, 0x49b5, 0x46a0, 0x46e7, 0x47a4, 0x48a1, 0x4767, +0x4939, 0x4935, 0x4703, 0x48c1, 0x4863, 0x48bd, 0x4913, 0x48cf, 0x48b6, 0x48b8, 0x4946, 0x4920, 0x495e, 0x48e1, 0x4938, 0x48b2, 0x493a, 0x4882, 0x483b, 0x49d5, 0x4911, 0x4972, 0x496b, 0x49df, 0x48f2, 0x4888, 0x4a46, 0x4821, 0x48c1, 0x490c, 0x49b2, 0x48a3, +0x463a, 0x47b0, 0x44cb, 0x4762, 0x4765, 0x46b9, 0x466a, 0x4814, 0x4631, 0x4796, 0x4666, 0x474b, 0x4798, 0x4704, 0x4838, 0x4761, 0x47d3, 0x4590, 0x45ea, 0x48a2, 0x47f1, 0x4844, 0x484b, 0x4776, 0x47d6, 0x46d8, 0x48f3, 0x44d3, 0x46fa, 0x478d, 0x481e, 0x466e, +0x4827, 0x481e, 0x45a2, 0x4794, 0x4727, 0x4806, 0x475d, 0x48d5, 0x4708, 0x4828, 0x4862, 0x480d, 0x4895, 0x4832, 0x48bd, 0x47f1, 0x482a, 0x46a7, 0x47b1, 0x492d, 0x484d, 0x4884, 0x48dc, 0x485f, 0x476d, 0x480c, 0x48e9, 0x46d3, 0x4728, 0x4884, 0x48a0, 0x480e, +0x4862, 0x4813, 0x4675, 0x485a, 0x47e8, 0x4738, 0x4836, 0x4823, 0x46e7, 0x4821, 0x4822, 0x47b3, 0x4846, 0x4855, 0x4863, 0x4717, 0x4872, 0x47c1, 0x46d5, 0x488e, 0x47e2, 0x485f, 0x487c, 0x48b8, 0x481e, 0x4788, 0x48bd, 0x4677, 0x46c9, 0x47f8, 0x48fe, 0x47fc, +0x47a0, 0x47b2, 0x4588, 0x467e, 0x4662, 0x46c7, 0x46e8, 0x4812, 0x4536, 0x474e, 0x46c0, 0x468f, 0x481f, 0x4679, 0x46a1, 0x46e2, 0x4809, 0x4560, 0x4630, 0x47eb, 0x46b5, 0x4757, 0x4848, 0x477f, 0x46a6, 0x46d8, 0x4870, 0x459a, 0x4670, 0x4678, 0x47d2, 0x468c, +0x4762, 0x48c4, 0x46e3, 0x4791, 0x46b1, 0x486d, 0x47d0, 0x4867, 0x468d, 0x47f6, 0x48a5, 0x4756, 0x4857, 0x4854, 0x4866, 0x4838, 0x484d, 0x46ec, 0x47d2, 0x48f6, 0x484a, 0x4879, 0x4848, 0x483c, 0x471d, 0x4806, 0x48fa, 0x4730, 0x4768, 0x47b8, 0x4865, 0x46f9, +0x48a8, 0x4918, 0x46ca, 0x4867, 0x4800, 0x4862, 0x48d3, 0x4910, 0x474e, 0x4849, 0x48eb, 0x486b, 0x4966, 0x48c5, 0x48f4, 0x4830, 0x48f9, 0x4778, 0x481e, 0x499e, 0x48cf, 0x48f1, 0x4982, 0x4923, 0x487c, 0x47cf, 0x49ea, 0x4649, 0x4773, 0x495e, 0x48b2, 0x483f, +0x48a7, 0x4975, 0x4616, 0x481e, 0x481f, 0x4866, 0x48b6, 0x4864, 0x47dc, 0x4873, 0x485c, 0x487f, 0x4938, 0x491f, 0x490d, 0x48b6, 0x48f8, 0x48a1, 0x4859, 0x492d, 0x489c, 0x4915, 0x4899, 0x4887, 0x486c, 0x4859, 0x49ca, 0x471e, 0x4867, 0x4918, 0x48d3, 0x4827, +0x488b, 0x4998, 0x4704, 0x481d, 0x48b8, 0x4880, 0x4876, 0x4944, 0x470c, 0x48f2, 0x48b9, 0x489b, 0x4956, 0x48e5, 0x48d6, 0x48a5, 0x48dc, 0x4856, 0x484e, 0x49ab, 0x48e0, 0x490e, 0x48dd, 0x4945, 0x488b, 0x48dd, 0x4a32, 0x47ea, 0x4835, 0x4911, 0x4965, 0x4819, +0x460e, 0x481e, 0x452c, 0x4673, 0x475c, 0x4717, 0x46f6, 0x46d0, 0x4696, 0x46bc, 0x4726, 0x481e, 0x4763, 0x46ea, 0x46fe, 0x4758, 0x478b, 0x4627, 0x4704, 0x483f, 0x46ad, 0x47b1, 0x4792, 0x4816, 0x46f2, 0x4684, 0x4827, 0x45a8, 0x472f, 0x47a4, 0x4797, 0x462b, +0x483f, 0x48ab, 0x468f, 0x4863, 0x485a, 0x4766, 0x481d, 0x48cb, 0x47dc, 0x4903, 0x48fc, 0x4830, 0x48cc, 0x483e, 0x48ab, 0x4864, 0x4966, 0x4763, 0x4794, 0x499d, 0x488e, 0x488b, 0x48dc, 0x4960, 0x4854, 0x484c, 0x499c, 0x474c, 0x4826, 0x48bc, 0x4949, 0x4883, +0x489d, 0x4905, 0x4718, 0x481e, 0x48e3, 0x48f4, 0x48c1, 0x4904, 0x47e8, 0x48b3, 0x4892, 0x48d4, 0x48ff, 0x4894, 0x48d5, 0x4886, 0x48fa, 0x4803, 0x47d2, 0x492e, 0x4870, 0x48b2, 0x48e5, 0x492b, 0x487b, 0x4785, 0x49e3, 0x471d, 0x4837, 0x48bf, 0x489b, 0x48c4, +0x475c, 0x4871, 0x464a, 0x4811, 0x47af, 0x471c, 0x4817, 0x4817, 0x463b, 0x484e, 0x477f, 0x464f, 0x4704, 0x487c, 0x47a3, 0x4725, 0x4853, 0x462a, 0x465a, 0x4860, 0x4736, 0x4880, 0x47e1, 0x482b, 0x4811, 0x46c0, 0x48dc, 0x475d, 0x4668, 0x4806, 0x4893, 0x46f4, +0x4858, 0x4959, 0x463d, 0x487b, 0x480f, 0x484e, 0x48c0, 0x48a6, 0x4847, 0x4894, 0x48a0, 0x484a, 0x491e, 0x48f4, 0x48fc, 0x48b5, 0x48ce, 0x47d2, 0x47db, 0x497f, 0x4955, 0x4939, 0x48a7, 0x48ce, 0x4890, 0x4884, 0x49d6, 0x4763, 0x486e, 0x4922, 0x48f4, 0x48c3, +0x47ec, 0x491c, 0x4698, 0x4783, 0x4715, 0x4754, 0x4745, 0x4752, 0x472f, 0x4832, 0x4817, 0x4809, 0x47f8, 0x48c3, 0x47e6, 0x4800, 0x48b6, 0x4730, 0x480a, 0x48cb, 0x479e, 0x488e, 0x47c2, 0x488e, 0x472f, 0x47ee, 0x489d, 0x4744, 0x4755, 0x4851, 0x4846, 0x47d3, +0x4838, 0x48a0, 0x4634, 0x4762, 0x4786, 0x4806, 0x47e3, 0x482d, 0x4726, 0x486c, 0x47b7, 0x4803, 0x48ac, 0x4814, 0x48e0, 0x4839, 0x4827, 0x4750, 0x46f2, 0x48c5, 0x483f, 0x4886, 0x48ad, 0x4856, 0x47e8, 0x47a9, 0x4937, 0x4743, 0x46d0, 0x481f, 0x484c, 0x4804, +0x47fd, 0x481f, 0x456d, 0x4813, 0x474d, 0x4807, 0x4688, 0x480e, 0x46e8, 0x4810, 0x469f, 0x4799, 0x4853, 0x478f, 0x47f2, 0x4824, 0x47d0, 0x471f, 0x46da, 0x485f, 0x4813, 0x481c, 0x482e, 0x4863, 0x4786, 0x480b, 0x48c9, 0x46b8, 0x475a, 0x46e2, 0x4852, 0x46c5, +0x45af, 0x4802, 0x4466, 0x46c2, 0x465d, 0x4743, 0x46b7, 0x47ba, 0x4636, 0x46c3, 0x4677, 0x4784, 0x485a, 0x47c2, 0x46dc, 0x46ac, 0x47de, 0x460e, 0x465f, 0x4834, 0x47f4, 0x4769, 0x46fc, 0x4810, 0x45fd, 0x45ea, 0x48d0, 0x45b5, 0x4704, 0x4783, 0x4830, 0x46c4, +0x4759, 0x47c7, 0x453d, 0x45b0, 0x4741, 0x4702, 0x4736, 0x4793, 0x461b, 0x47ba, 0x470b, 0x46dd, 0x4657, 0x470b, 0x470d, 0x4710, 0x486c, 0x468f, 0x45c3, 0x46ba, 0x479d, 0x483b, 0x46c9, 0x4774, 0x46a9, 0x46a7, 0x4833, 0x4606, 0x4690, 0x46a9, 0x46f5, 0x46a7, +0x47ac, 0x48bb, 0x452c, 0x4803, 0x470f, 0x4824, 0x47d5, 0x48cb, 0x4707, 0x484a, 0x4832, 0x4797, 0x4851, 0x482c, 0x487a, 0x4877, 0x4891, 0x465d, 0x47f4, 0x48ce, 0x4898, 0x4899, 0x484e, 0x486a, 0x47ac, 0x47f0, 0x493e, 0x4611, 0x47e2, 0x489e, 0x488c, 0x46af, +0x4665, 0x4836, 0x45e4, 0x46b6, 0x46a1, 0x46b9, 0x46c8, 0x46dd, 0x4658, 0x474b, 0x467b, 0x4777, 0x4769, 0x4798, 0x4785, 0x475e, 0x472a, 0x4656, 0x45fb, 0x4881, 0x46fc, 0x472d, 0x476e, 0x47a3, 0x465d, 0x46ca, 0x4855, 0x4500, 0x464f, 0x479a, 0x46c3, 0x4738, +0x481e, 0x486c, 0x4659, 0x4801, 0x4756, 0x477a, 0x47d5, 0x487b, 0x4706, 0x4808, 0x484f, 0x4838, 0x4870, 0x4863, 0x48d3, 0x4806, 0x4865, 0x4771, 0x46be, 0x494c, 0x4915, 0x484c, 0x4900, 0x4862, 0x481a, 0x46e8, 0x4974, 0x46a0, 0x4775, 0x483d, 0x487c, 0x480e }; \ No newline at end of file diff --git a/hwpe/redmule/inc/z_output.h b/hwpe/redmule/inc/z_output.h index 9cc0610..96c7e5f 100644 --- a/hwpe/redmule/inc/z_output.h +++ b/hwpe/redmule/inc/z_output.h @@ -1,99 +1,27 @@ /* Header file generated by RedMulE Golden Model */ -uint16_t z_oup [9216] = { -0x4e2d, 0x4e0e, 0x4dda, 0x4de5, 0x4e0e, 0x4dbc, 0x4e3f, 0x4ed6, 0x4dce, 0x4eef, 0x4dfc, 0x4e55, 0x4e2f, 0x4d96, 0x4ddd, 0x4d8a, 0x4e4c, 0x4dc2, 0x4d63, 0x4daa, 0x4e0a, 0x4d89, 0x4dff, 0x4d7d, 0x4d9e, 0x4e07, 0x4ded, 0x4d68, 0x4e69, 0x4ea9, 0x4e7b, 0x4e13, 0x4e22, 0x4e13, 0x4e34, 0x4dd6, 0x4db5, 0x4db6, 0x4d9c, 0x4dfd, 0x4e51, 0x4e0f, 0x4d92, 0x4e46, 0x4db8, 0x4e97, 0x4d14, 0x4dcb, 0x4e6a, 0x4d8e, 0x4eb5, 0x4dee, 0x4d95, 0x4e1c, 0x4dcb, 0x4e1e, 0x4dff, 0x4d5d, 0x4d53, 0x4dde, 0x4dda, 0x4ea4, 0x4d1c, 0x4e1d, 0x4d30, 0x4dad, 0x4e27, 0x4e04, 0x4e55, 0x4ebb, 0x4e47, 0x4daa, 0x4ddf, 0x4dd8, 0x4e3a, 0x4db0, 0x4dc0, 0x4e1c, 0x4dc1, 0x4e33, 0x4e2b, 0x4dcd, 0x4da2, 0x4ebe, 0x4d64, 0x4da9, 0x4e7f, 0x4d80, 0x4e14, 0x4e9b, 0x4d7e, 0x4e85, 0x4e6d, 0x4e6e, 0x4e1e, 0x4def, -0x4def, 0x4d5f, 0x4e1d, 0x4daa, 0x4e29, 0x4dc0, 0x4e5f, 0x4f01, 0x4dcf, 0x4f33, 0x4dcf, 0x4e86, 0x4ecf, 0x4dfd, 0x4deb, 0x4d92, 0x4eda, 0x4e29, 0x4dae, 0x4e35, 0x4e49, 0x4da9, 0x4e33, 0x4d7d, 0x4e23, 0x4e28, 0x4dc0, 0x4e12, 0x4e62, 0x4eda, 0x4e71, 0x4e43, 0x4e2d, 0x4df3, 0x4e69, 0x4e0d, 0x4df7, 0x4dbd, 0x4dbc, 0x4da3, 0x4d9d, 0x4e3c, 0x4e01, 0x4ebb, 0x4dd5, 0x4e35, 0x4d3f, 0x4de4, 0x4efa, 0x4dc4, 0x4ee3, 0x4dac, 0x4d93, 0x4da3, 0x4da1, 0x4dee, 0x4e9a, 0x4db0, 0x4db0, 0x4e99, 0x4dfe, 0x4eaf, 0x4d59, 0x4e35, 0x4dee, 0x4de7, 0x4e60, 0x4e5d, 0x4ec7, 0x4eb1, 0x4e59, 0x4de0, 0x4e35, 0x4df5, 0x4df4, 0x4df1, 0x4df4, 0x4e27, 0x4dd5, 0x4e4b, 0x4e87, 0x4da1, 0x4dbc, 0x4eb6, 0x4d77, 0x4e4f, 0x4e04, 0x4d77, 0x4e43, 0x4ede, 0x4df7, 0x4e38, 0x4e81, 0x4e43, 0x4e43, 0x4e01, -0x4d9d, 0x4dbc, 0x4e1d, 0x4e2f, 0x4e69, 0x4ddf, 0x4e62, 0x4f1f, 0x4dbd, 0x4f0c, 0x4d88, 0x4da7, 0x4f23, 0x4dfa, 0x4e2e, 0x4de9, 0x4e67, 0x4de4, 0x4da6, 0x4ded, 0x4e28, 0x4d1b, 0x4e1d, 0x4dbb, 0x4dea, 0x4e1c, 0x4e67, 0x4ddc, 0x4de6, 0x4e7d, 0x4e2c, 0x4e1c, 0x4e41, 0x4def, 0x4e14, 0x4ddc, 0x4dc3, 0x4cfa, 0x4dac, 0x4db0, 0x4e84, 0x4df6, 0x4d77, 0x4e5a, 0x4dd5, 0x4ea7, 0x4d34, 0x4da6, 0x4eb7, 0x4dca, 0x4e9c, 0x4dcb, 0x4d04, 0x4dd7, 0x4dcd, 0x4e29, 0x4df3, 0x4d80, 0x4dc5, 0x4e3d, 0x4dd1, 0x4e42, 0x4d76, 0x4e54, 0x4d5a, 0x4db3, 0x4e0a, 0x4de8, 0x4ea2, 0x4e8e, 0x4dd8, 0x4e43, 0x4e16, 0x4d9b, 0x4e8b, 0x4e39, 0x4e02, 0x4dfa, 0x4de8, 0x4e07, 0x4ddd, 0x4dd4, 0x4d3f, 0x4e05, 0x4dac, 0x4e33, 0x4e61, 0x4d4c, 0x4e0b, 0x4e63, 0x4ddd, 0x4e37, 0x4e7d, 0x4e47, 0x4dbd, 0x4db9, -0x4db6, 0x4e32, 0x4e87, 0x4e33, 0x4e43, 0x4e2b, 0x4e79, 0x4f28, 0x4de8, 0x4edc, 0x4e5e, 0x4e94, 0x4f32, 0x4e18, 0x4dbc, 0x4e77, 0x4ea9, 0x4e8c, 0x4daa, 0x4ea9, 0x4e43, 0x4e20, 0x4e3c, 0x4da8, 0x4eb0, 0x4e1b, 0x4e7a, 0x4e32, 0x4eb8, 0x4eb2, 0x4ea5, 0x4e8b, 0x4e7f, 0x4de9, 0x4ee2, 0x4df5, 0x4e01, 0x4e5c, 0x4dbb, 0x4dee, 0x4e41, 0x4e65, 0x4e2d, 0x4ef5, 0x4e84, 0x4e78, 0x4de8, 0x4e32, 0x4ee1, 0x4dea, 0x4ef6, 0x4def, 0x4da8, 0x4e4f, 0x4dd0, 0x4e76, 0x4e84, 0x4def, 0x4d88, 0x4e53, 0x4e34, 0x4f79, 0x4db4, 0x4ea1, 0x4dc1, 0x4dee, 0x4e44, 0x4ec4, 0x4ed6, 0x4e82, 0x4e5e, 0x4df4, 0x4ec3, 0x4e45, 0x4ea1, 0x4e16, 0x4e00, 0x4e6f, 0x4e50, 0x4e80, 0x4e9c, 0x4df7, 0x4e1c, 0x4edf, 0x4dcb, 0x4e27, 0x4e39, 0x4d78, 0x4e1c, 0x4ec7, 0x4e37, 0x4e81, 0x4e8f, 0x4e4b, 0x4e45, 0x4dfa, -0x4e2a, 0x4e3d, 0x4e3d, 0x4df5, 0x4e3a, 0x4def, 0x4e2f, 0x4ed6, 0x4db3, 0x4ef3, 0x4e5a, 0x4e8e, 0x4f50, 0x4db6, 0x4e46, 0x4e34, 0x4ec9, 0x4e1b, 0x4dd6, 0x4e80, 0x4e1f, 0x4d99, 0x4e76, 0x4e52, 0x4e8a, 0x4e8d, 0x4e5b, 0x4dc1, 0x4eaf, 0x4efc, 0x4ebb, 0x4e52, 0x4e78, 0x4df4, 0x4e78, 0x4df1, 0x4dfa, 0x4dd4, 0x4d47, 0x4e48, 0x4e04, 0x4e20, 0x4ddd, 0x4ebb, 0x4e44, 0x4eca, 0x4d9b, 0x4dec, 0x4e9c, 0x4e12, 0x4ec7, 0x4dfd, 0x4d6c, 0x4e46, 0x4dc0, 0x4e37, 0x4e59, 0x4dbc, 0x4d8b, 0x4e40, 0x4e31, 0x4ef8, 0x4de1, 0x4de8, 0x4d97, 0x4dd2, 0x4ea0, 0x4e1c, 0x4e3a, 0x4eb4, 0x4dd5, 0x4e41, 0x4e5d, 0x4dbc, 0x4e1d, 0x4e55, 0x4e77, 0x4dfc, 0x4e4b, 0x4e22, 0x4ebe, 0x4d6d, 0x4dad, 0x4e2a, 0x4dd3, 0x4e56, 0x4e3a, 0x4d2e, 0x4e42, 0x4e95, 0x4dce, 0x4e3b, 0x4eef, 0x4e46, 0x4ded, 0x4df8, -0x4d39, 0x4d7b, 0x4da0, 0x4cfa, 0x4d82, 0x4d16, 0x4d98, 0x4e32, 0x4ce2, 0x4e4a, 0x4d6a, 0x4d64, 0x4e27, 0x4d47, 0x4d4c, 0x4d16, 0x4d7c, 0x4d49, 0x4d0d, 0x4d3e, 0x4d83, 0x4d12, 0x4d19, 0x4cbe, 0x4d0f, 0x4d83, 0x4d65, 0x4cdb, 0x4d3d, 0x4ded, 0x4dff, 0x4d5b, 0x4d74, 0x4d70, 0x4df1, 0x4ccd, 0x4d49, 0x4d16, 0x4cc3, 0x4d2f, 0x4d25, 0x4d85, 0x4d31, 0x4dc3, 0x4d5b, 0x4dcb, 0x4cb3, 0x4d51, 0x4d98, 0x4d29, 0x4dc9, 0x4cc1, 0x4cd1, 0x4d90, 0x4cd3, 0x4d59, 0x4d5e, 0x4cf7, 0x4cda, 0x4dae, 0x4d8f, 0x4e13, 0x4cee, 0x4d6a, 0x4d0f, 0x4d33, 0x4d00, 0x4d56, 0x4d88, 0x4dae, 0x4d78, 0x4d40, 0x4d9c, 0x4d7c, 0x4d58, 0x4d2c, 0x4d47, 0x4d28, 0x4db4, 0x4dfc, 0x4d97, 0x4cec, 0x4cf7, 0x4dc0, 0x4d0c, 0x4d81, 0x4d58, 0x4d28, 0x4d63, 0x4dad, 0x4d12, 0x4d75, 0x4d77, 0x4d51, 0x4ceb, 0x4d0b, -0x4d6b, 0x4d5e, 0x4e5d, 0x4da9, 0x4e1f, 0x4d97, 0x4df3, 0x4ec4, 0x4d90, 0x4ee0, 0x4da1, 0x4e24, 0x4e3b, 0x4d68, 0x4da9, 0x4ddf, 0x4dfd, 0x4d99, 0x4d6c, 0x4dba, 0x4e07, 0x4daa, 0x4df3, 0x4dd8, 0x4d51, 0x4dc7, 0x4ddb, 0x4d6e, 0x4dd9, 0x4df2, 0x4e39, 0x4e15, 0x4e04, 0x4e02, 0x4e05, 0x4dbf, 0x4de1, 0x4d43, 0x4d73, 0x4d9e, 0x4dd5, 0x4daf, 0x4daf, 0x4e51, 0x4dcc, 0x4e5c, 0x4d8f, 0x4d5d, 0x4e2f, 0x4d7c, 0x4e80, 0x4dd7, 0x4dbd, 0x4dc2, 0x4d5f, 0x4e11, 0x4de6, 0x4d6b, 0x4d1a, 0x4db4, 0x4dcb, 0x4eba, 0x4d24, 0x4ded, 0x4dc5, 0x4d51, 0x4dfe, 0x4dfd, 0x4e44, 0x4e33, 0x4e59, 0x4d99, 0x4ddf, 0x4d99, 0x4dd4, 0x4d66, 0x4df2, 0x4de9, 0x4d80, 0x4e30, 0x4e0a, 0x4daf, 0x4dc3, 0x4e3d, 0x4d79, 0x4d72, 0x4de1, 0x4d42, 0x4e4e, 0x4ea1, 0x4d84, 0x4e13, 0x4e0c, 0x4dc9, 0x4ddf, 0x4df4, -0x4db8, 0x4e02, 0x4e6b, 0x4d8a, 0x4e8f, 0x4e49, 0x4e5b, 0x4eb6, 0x4e1d, 0x4ef9, 0x4e2f, 0x4e65, 0x4ef9, 0x4db4, 0x4e86, 0x4e5c, 0x4eae, 0x4e23, 0x4d8f, 0x4e5a, 0x4e1e, 0x4de0, 0x4e5c, 0x4dbd, 0x4e38, 0x4e37, 0x4ec8, 0x4ded, 0x4ecd, 0x4ec5, 0x4f06, 0x4e9b, 0x4e8a, 0x4ea2, 0x4e41, 0x4dea, 0x4e04, 0x4d70, 0x4d5a, 0x4e34, 0x4e01, 0x4e51, 0x4e0f, 0x4ef0, 0x4dfe, 0x4edd, 0x4d8b, 0x4dd0, 0x4e6d, 0x4e69, 0x4f18, 0x4de4, 0x4d8f, 0x4e21, 0x4de2, 0x4e07, 0x4e56, 0x4ded, 0x4d8d, 0x4e39, 0x4e50, 0x4f37, 0x4dd6, 0x4e27, 0x4e04, 0x4df0, 0x4e92, 0x4e5b, 0x4e99, 0x4eeb, 0x4e66, 0x4e60, 0x4ebc, 0x4df6, 0x4e57, 0x4e40, 0x4eaf, 0x4e5c, 0x4e3f, 0x4e44, 0x4e23, 0x4de8, 0x4e56, 0x4e7e, 0x4e01, 0x4e52, 0x4e5b, 0x4dc5, 0x4e94, 0x4ee0, 0x4e48, 0x4e48, 0x4e63, 0x4e79, 0x4e21, 0x4e3c, -0x4e6a, 0x4e58, 0x4f33, 0x4e57, 0x4ef5, 0x4ee8, 0x4f08, 0x4fd1, 0x4e62, 0x4fc6, 0x4f04, 0x4eab, 0x4fda, 0x4e9b, 0x4eec, 0x4f27, 0x4f04, 0x4eaf, 0x4e19, 0x4f17, 0x4f28, 0x4e59, 0x4ea0, 0x4e0d, 0x4eec, 0x4e73, 0x4f0c, 0x4e6a, 0x4ead, 0x4f95, 0x4edf, 0x4e8f, 0x4eca, 0x4ecd, 0x4edd, 0x4ea5, 0x4edf, 0x4dff, 0x4e28, 0x4e64, 0x4f27, 0x4ed2, 0x4e25, 0x4f29, 0x4e6c, 0x4f95, 0x4e35, 0x4e5b, 0x4f4d, 0x4ea8, 0x4f3b, 0x4eb4, 0x4e2b, 0x4ec0, 0x4e61, 0x4e91, 0x4ee7, 0x4e8c, 0x4e76, 0x4f05, 0x4ed3, 0x4f5e, 0x4e81, 0x4f16, 0x4dfd, 0x4e55, 0x4e9d, 0x4ed1, 0x4ec6, 0x4fa5, 0x4ef2, 0x4ee3, 0x4f1d, 0x4e51, 0x4ebf, 0x4ed8, 0x4ee9, 0x4ef1, 0x4ee2, 0x4f02, 0x4fae, 0x4e7b, 0x4ee4, 0x4f3c, 0x4e59, 0x4ec7, 0x4e97, 0x4e36, 0x4efb, 0x4f02, 0x4ecb, 0x4f03, 0x4f13, 0x4eb2, 0x4e94, 0x4e77, -0x4e1b, 0x4e38, 0x4edf, 0x4dc6, 0x4ee0, 0x4e35, 0x4efd, 0x4f97, 0x4e50, 0x4f9b, 0x4ddc, 0x4e39, 0x4f6b, 0x4e55, 0x4eb4, 0x4e63, 0x4ea0, 0x4e3b, 0x4e17, 0x4e2a, 0x4ed9, 0x4e23, 0x4ee7, 0x4e56, 0x4e34, 0x4e9b, 0x4eda, 0x4e0b, 0x4e82, 0x4ef2, 0x4e95, 0x4ec3, 0x4f05, 0x4e55, 0x4efc, 0x4e8f, 0x4e7c, 0x4e01, 0x4e0a, 0x4e45, 0x4e28, 0x4e65, 0x4e20, 0x4e78, 0x4ebd, 0x4ea1, 0x4e22, 0x4e2b, 0x4f6f, 0x4dcf, 0x4f35, 0x4e0f, 0x4dcb, 0x4e76, 0x4e08, 0x4e7f, 0x4f05, 0x4e5b, 0x4dd7, 0x4e83, 0x4ebd, 0x4f4c, 0x4d7b, 0x4eef, 0x4e01, 0x4e78, 0x4ee6, 0x4ea6, 0x4f28, 0x4f00, 0x4e4e, 0x4e31, 0x4ed7, 0x4e4e, 0x4e6f, 0x4e7a, 0x4e9f, 0x4ee6, 0x4e74, 0x4e91, 0x4eba, 0x4e1f, 0x4e1f, 0x4f5d, 0x4e22, 0x4e84, 0x4e2c, 0x4da3, 0x4e82, 0x4ec5, 0x4ec8, 0x4f13, 0x4ef4, 0x4e9a, 0x4eb6, 0x4e5a, -0x4d6b, 0x4db6, 0x4e0b, 0x4d3b, 0x4df7, 0x4d88, 0x4e15, 0x4e81, 0x4d5f, 0x4ef0, 0x4e2f, 0x4da2, 0x4e6a, 0x4da1, 0x4d9c, 0x4e6c, 0x4e0b, 0x4db1, 0x4d3c, 0x4dfc, 0x4d97, 0x4d63, 0x4e39, 0x4d4d, 0x4da9, 0x4d99, 0x4e40, 0x4da0, 0x4de3, 0x4e28, 0x4e04, 0x4ddc, 0x4dcb, 0x4de6, 0x4e6b, 0x4d91, 0x4dd5, 0x4d84, 0x4d44, 0x4d36, 0x4d75, 0x4de6, 0x4dba, 0x4ed7, 0x4d6f, 0x4e5a, 0x4d88, 0x4d6d, 0x4e03, 0x4d64, 0x4e96, 0x4d8a, 0x4d5c, 0x4dca, 0x4d7c, 0x4e1b, 0x4dfc, 0x4d86, 0x4d66, 0x4dd9, 0x4df3, 0x4e53, 0x4d4b, 0x4e2a, 0x4d9b, 0x4d43, 0x4ddb, 0x4e5a, 0x4de7, 0x4e56, 0x4dee, 0x4d8c, 0x4dcc, 0x4dc7, 0x4daa, 0x4d80, 0x4d97, 0x4e56, 0x4d5f, 0x4e77, 0x4d98, 0x4d51, 0x4d8d, 0x4e89, 0x4d38, 0x4d6b, 0x4dc8, 0x4d8e, 0x4df9, 0x4e13, 0x4d2f, 0x4e07, 0x4e0f, 0x4da0, 0x4d95, 0x4d6a, -0x4e54, 0x4deb, 0x4ea3, 0x4d9d, 0x4e6c, 0x4e3c, 0x4e8d, 0x4f56, 0x4de7, 0x4fa9, 0x4e3a, 0x4eb4, 0x4f3d, 0x4e5d, 0x4ea7, 0x4ead, 0x4f1d, 0x4ea7, 0x4deb, 0x4ea7, 0x4e17, 0x4e36, 0x4e45, 0x4e27, 0x4e42, 0x4e3a, 0x4f1a, 0x4e11, 0x4eb4, 0x4ee0, 0x4e33, 0x4ed2, 0x4e16, 0x4e07, 0x4ea9, 0x4df2, 0x4e4c, 0x4dda, 0x4e31, 0x4e0e, 0x4e32, 0x4e56, 0x4e0c, 0x4efb, 0x4e64, 0x4ebb, 0x4dbf, 0x4e3b, 0x4f0c, 0x4e63, 0x4f04, 0x4e4f, 0x4d9c, 0x4e3a, 0x4e16, 0x4e7c, 0x4e46, 0x4de2, 0x4df4, 0x4e91, 0x4eb6, 0x4f27, 0x4d8a, 0x4ecc, 0x4e0d, 0x4db3, 0x4e8e, 0x4e8a, 0x4ef0, 0x4f1f, 0x4eab, 0x4ea3, 0x4e4a, 0x4df3, 0x4ec1, 0x4e6a, 0x4e6c, 0x4eff, 0x4e45, 0x4ed3, 0x4ec6, 0x4e6f, 0x4e4a, 0x4ebf, 0x4de4, 0x4e40, 0x4e27, 0x4d9e, 0x4e79, 0x4ecb, 0x4e61, 0x4ed6, 0x4e9a, 0x4e4b, 0x4e55, 0x4e73, -0x4e5e, 0x4e1e, 0x4ea1, 0x4df7, 0x4e66, 0x4e71, 0x4f2d, 0x4fbf, 0x4ea4, 0x4fe2, 0x4eab, 0x4eb4, 0x4f9c, 0x4e8b, 0x4e41, 0x4e79, 0x4f69, 0x4e96, 0x4e07, 0x4e86, 0x4ec0, 0x4e14, 0x4e95, 0x4df4, 0x4e9e, 0x4e78, 0x4eea, 0x4df9, 0x4f28, 0x4f40, 0x4f87, 0x4e93, 0x4e29, 0x4ec5, 0x4ec1, 0x4eb6, 0x4e8f, 0x4e9f, 0x4def, 0x4e75, 0x4e75, 0x4e9b, 0x4e29, 0x4f68, 0x4eac, 0x4ed8, 0x4da6, 0x4e52, 0x4f2e, 0x4ea6, 0x4f46, 0x4ea9, 0x4e5b, 0x4e52, 0x4e4d, 0x4e99, 0x4ea2, 0x4e9e, 0x4ded, 0x4ed3, 0x4f10, 0x4fe3, 0x4df6, 0x4ee2, 0x4e13, 0x4f05, 0x4ed1, 0x4ef3, 0x4ef8, 0x4ef2, 0x4eb6, 0x4e1f, 0x4ecc, 0x4e25, 0x4ea1, 0x4ea3, 0x4ef8, 0x4e98, 0x4e43, 0x4ee0, 0x4f0e, 0x4e38, 0x4e74, 0x4f7b, 0x4df6, 0x4ee6, 0x4eba, 0x4de8, 0x4e70, 0x4f1a, 0x4e91, 0x4ed2, 0x4f2a, 0x4e84, 0x4ed3, 0x4ea0, -0x4e1c, 0x4e04, 0x4dfd, 0x4e12, 0x4de2, 0x4e0b, 0x4e45, 0x4ecf, 0x4d91, 0x4edb, 0x4e15, 0x4de1, 0x4ee1, 0x4e07, 0x4da5, 0x4dc1, 0x4e24, 0x4e0f, 0x4d89, 0x4e26, 0x4da5, 0x4d97, 0x4e39, 0x4ddb, 0x4e48, 0x4e3b, 0x4e20, 0x4d9f, 0x4e65, 0x4e82, 0x4e0b, 0x4d9e, 0x4de7, 0x4dbd, 0x4e42, 0x4da5, 0x4dc9, 0x4da4, 0x4dc0, 0x4da9, 0x4e74, 0x4e5c, 0x4de2, 0x4ee1, 0x4e10, 0x4eb1, 0x4d66, 0x4da6, 0x4eba, 0x4e1f, 0x4e9c, 0x4e61, 0x4d43, 0x4dcb, 0x4d98, 0x4e08, 0x4e22, 0x4dea, 0x4ddd, 0x4e76, 0x4e4e, 0x4e86, 0x4d7b, 0x4dfe, 0x4d4c, 0x4e37, 0x4d97, 0x4e31, 0x4e4f, 0x4ebe, 0x4e34, 0x4da1, 0x4e64, 0x4d9e, 0x4df2, 0x4e04, 0x4dd1, 0x4e3a, 0x4dd7, 0x4ea4, 0x4e09, 0x4db9, 0x4d96, 0x4e9a, 0x4d95, 0x4dd5, 0x4e1d, 0x4d54, 0x4de8, 0x4e4a, 0x4dd0, 0x4e6e, 0x4e53, 0x4e49, 0x4d86, 0x4d68, -0x4da0, 0x4dee, 0x4e81, 0x4df4, 0x4de0, 0x4dcd, 0x4ddd, 0x4eae, 0x4dce, 0x4f09, 0x4e0f, 0x4df0, 0x4ecc, 0x4df5, 0x4ddf, 0x4dca, 0x4dd6, 0x4d7f, 0x4dc1, 0x4e0d, 0x4dff, 0x4d9f, 0x4dd5, 0x4d55, 0x4daa, 0x4d84, 0x4e57, 0x4da9, 0x4e39, 0x4eb3, 0x4e60, 0x4dea, 0x4dd4, 0x4e18, 0x4e4a, 0x4dbf, 0x4d8b, 0x4d9f, 0x4d54, 0x4d9f, 0x4e12, 0x4de5, 0x4d9b, 0x4e24, 0x4db4, 0x4e48, 0x4dba, 0x4d88, 0x4e72, 0x4d39, 0x4e4e, 0x4d65, 0x4cef, 0x4e05, 0x4da6, 0x4dbe, 0x4e07, 0x4d71, 0x4d4a, 0x4deb, 0x4e37, 0x4e5e, 0x4dc0, 0x4e20, 0x4d3a, 0x4d5a, 0x4dbd, 0x4e31, 0x4e64, 0x4e77, 0x4e40, 0x4da2, 0x4e46, 0x4da5, 0x4db6, 0x4db4, 0x4db0, 0x4e17, 0x4dc7, 0x4e14, 0x4e24, 0x4dc0, 0x4d5b, 0x4e25, 0x4d91, 0x4e08, 0x4e39, 0x4db0, 0x4ddc, 0x4e55, 0x4d39, 0x4e17, 0x4e75, 0x4dd5, 0x4de9, 0x4e2c, -0x4d74, 0x4d5a, 0x4dde, 0x4d5b, 0x4dc3, 0x4d09, 0x4d93, 0x4e08, 0x4da7, 0x4e79, 0x4d85, 0x4dea, 0x4e38, 0x4d6f, 0x4d63, 0x4d92, 0x4df3, 0x4d6a, 0x4cd6, 0x4d9c, 0x4d83, 0x4d56, 0x4dd5, 0x4d8e, 0x4d84, 0x4da6, 0x4e24, 0x4d2a, 0x4dbb, 0x4e22, 0x4da3, 0x4de8, 0x4d30, 0x4dcc, 0x4db8, 0x4d87, 0x4d63, 0x4d3b, 0x4d3a, 0x4d78, 0x4d6c, 0x4d6c, 0x4d72, 0x4df4, 0x4d6a, 0x4e25, 0x4d3a, 0x4d20, 0x4e25, 0x4d00, 0x4dfc, 0x4d64, 0x4cf9, 0x4d95, 0x4d05, 0x4d3b, 0x4db6, 0x4d0e, 0x4d12, 0x4dd1, 0x4d95, 0x4e0b, 0x4d6a, 0x4de4, 0x4d38, 0x4d87, 0x4e22, 0x4df4, 0x4dc1, 0x4e09, 0x4d9d, 0x4dca, 0x4dd9, 0x4d6a, 0x4d8f, 0x4d3e, 0x4dba, 0x4dbb, 0x4d84, 0x4d7b, 0x4e1e, 0x4d4d, 0x4d67, 0x4e00, 0x4d27, 0x4d54, 0x4db9, 0x4cda, 0x4db1, 0x4e29, 0x4d71, 0x4e22, 0x4df2, 0x4d61, 0x4df0, 0x4d52, -0x4d31, 0x4d90, 0x4e17, 0x4db3, 0x4e1b, 0x4dac, 0x4e08, 0x4ec6, 0x4da8, 0x4eea, 0x4dcb, 0x4e2c, 0x4ee0, 0x4df0, 0x4dda, 0x4dcc, 0x4ea1, 0x4d9a, 0x4dac, 0x4d91, 0x4e2b, 0x4daf, 0x4d8d, 0x4dc6, 0x4e1f, 0x4e0e, 0x4e23, 0x4d57, 0x4e3b, 0x4e3d, 0x4e32, 0x4e66, 0x4e1f, 0x4da7, 0x4e4d, 0x4d47, 0x4da1, 0x4d69, 0x4d6f, 0x4df5, 0x4e0b, 0x4e09, 0x4d7c, 0x4e41, 0x4e09, 0x4e4f, 0x4db3, 0x4df9, 0x4e6a, 0x4de9, 0x4f3e, 0x4e2d, 0x4da0, 0x4e44, 0x4e1a, 0x4df6, 0x4dfc, 0x4d91, 0x4d48, 0x4dcf, 0x4e23, 0x4eb4, 0x4ce1, 0x4e40, 0x4d7d, 0x4da5, 0x4e55, 0x4e34, 0x4e67, 0x4ea2, 0x4e48, 0x4db5, 0x4e25, 0x4e0b, 0x4e1a, 0x4dc4, 0x4e27, 0x4df3, 0x4de6, 0x4e31, 0x4e6f, 0x4de8, 0x4d85, 0x4e70, 0x4d69, 0x4dd9, 0x4de8, 0x4d18, 0x4da7, 0x4e04, 0x4dd3, 0x4e2c, 0x4e3d, 0x4e23, 0x4dd6, 0x4dd2, -0x4e0b, 0x4de2, 0x4e76, 0x4dc3, 0x4e4c, 0x4da5, 0x4e8f, 0x4ec5, 0x4e4d, 0x4f7d, 0x4df4, 0x4e19, 0x4efc, 0x4dc4, 0x4de0, 0x4dd8, 0x4ec5, 0x4dc9, 0x4dd7, 0x4e2b, 0x4e79, 0x4d8d, 0x4e5a, 0x4daa, 0x4e09, 0x4e3f, 0x4e7d, 0x4d99, 0x4e50, 0x4ed9, 0x4ec7, 0x4e5b, 0x4e31, 0x4e6d, 0x4ea8, 0x4e52, 0x4e4a, 0x4dfa, 0x4d61, 0x4e28, 0x4dfa, 0x4e30, 0x4dbd, 0x4ebd, 0x4e1c, 0x4f17, 0x4dad, 0x4e34, 0x4e90, 0x4dd8, 0x4f2e, 0x4e40, 0x4d4b, 0x4e2a, 0x4d89, 0x4deb, 0x4e42, 0x4de8, 0x4d63, 0x4e29, 0x4e46, 0x4f35, 0x4dd4, 0x4e25, 0x4d5f, 0x4e3a, 0x4ee4, 0x4e5b, 0x4e97, 0x4ea5, 0x4e51, 0x4e34, 0x4e6b, 0x4e53, 0x4e7a, 0x4e14, 0x4e12, 0x4e0e, 0x4df0, 0x4e0d, 0x4ebc, 0x4de5, 0x4dbb, 0x4ead, 0x4df9, 0x4e62, 0x4e34, 0x4d91, 0x4e53, 0x4ec3, 0x4e2a, 0x4e18, 0x4e5c, 0x4eac, 0x4e3c, 0x4e1a, -0x4db4, 0x4ded, 0x4e56, 0x4dd8, 0x4dd5, 0x4e20, 0x4f02, 0x4f27, 0x4e56, 0x4f17, 0x4e18, 0x4e35, 0x4f47, 0x4e28, 0x4e4c, 0x4e26, 0x4e8c, 0x4db7, 0x4dab, 0x4e2b, 0x4e62, 0x4de7, 0x4e47, 0x4d76, 0x4dd3, 0x4e32, 0x4e41, 0x4d9b, 0x4e36, 0x4ee1, 0x4eda, 0x4e4e, 0x4e46, 0x4e28, 0x4e76, 0x4e65, 0x4df2, 0x4dd6, 0x4dc5, 0x4e0c, 0x4e02, 0x4da9, 0x4da7, 0x4eb1, 0x4e0c, 0x4e9c, 0x4db8, 0x4e4b, 0x4ea5, 0x4dca, 0x4ea0, 0x4e03, 0x4d89, 0x4e30, 0x4da8, 0x4e2f, 0x4e4f, 0x4e24, 0x4dce, 0x4e2a, 0x4e77, 0x4f06, 0x4d80, 0x4e7e, 0x4d88, 0x4df1, 0x4e6b, 0x4e12, 0x4e4f, 0x4eed, 0x4e20, 0x4e44, 0x4df4, 0x4e38, 0x4e62, 0x4e44, 0x4e3a, 0x4e7d, 0x4e02, 0x4eac, 0x4e74, 0x4e07, 0x4df2, 0x4e84, 0x4dfe, 0x4e3a, 0x4e0c, 0x4d86, 0x4e4d, 0x4e72, 0x4dfb, 0x4e39, 0x4e61, 0x4e46, 0x4dfd, 0x4e42, -0x4de9, 0x4dbb, 0x4e30, 0x4d6f, 0x4dfa, 0x4d82, 0x4e70, 0x4ec5, 0x4da1, 0x4f06, 0x4e5b, 0x4e47, 0x4e79, 0x4dad, 0x4dd5, 0x4e61, 0x4e44, 0x4dae, 0x4dee, 0x4e4f, 0x4e40, 0x4d9e, 0x4e3e, 0x4ddf, 0x4dab, 0x4e84, 0x4e5e, 0x4da7, 0x4e58, 0x4f0e, 0x4e10, 0x4e42, 0x4e18, 0x4e24, 0x4e7c, 0x4e08, 0x4e14, 0x4db7, 0x4db8, 0x4e22, 0x4df6, 0x4e07, 0x4d8b, 0x4ebc, 0x4db7, 0x4eb3, 0x4d91, 0x4d9e, 0x4e45, 0x4db8, 0x4ed5, 0x4dc6, 0x4db4, 0x4da1, 0x4d70, 0x4e4c, 0x4e72, 0x4d8a, 0x4dc9, 0x4d7f, 0x4e1d, 0x4f30, 0x4d7c, 0x4e93, 0x4dd2, 0x4de4, 0x4e93, 0x4e72, 0x4e34, 0x4f3d, 0x4e42, 0x4de7, 0x4e76, 0x4df4, 0x4eae, 0x4df6, 0x4e2b, 0x4e50, 0x4e4b, 0x4e66, 0x4e63, 0x4de2, 0x4de1, 0x4e80, 0x4d96, 0x4dd7, 0x4dee, 0x4ce7, 0x4d9a, 0x4e60, 0x4dc3, 0x4e68, 0x4e4f, 0x4e2d, 0x4e06, 0x4e31, -0x4e00, 0x4e5b, 0x4e77, 0x4dda, 0x4e1a, 0x4dee, 0x4e83, 0x4f15, 0x4e59, 0x4f9a, 0x4e31, 0x4e60, 0x4f31, 0x4e94, 0x4df9, 0x4e36, 0x4eaf, 0x4e48, 0x4dd9, 0x4e49, 0x4e2c, 0x4e35, 0x4ec4, 0x4e48, 0x4e46, 0x4e24, 0x4e95, 0x4dbc, 0x4edf, 0x4f2e, 0x4eeb, 0x4e2f, 0x4e0d, 0x4e31, 0x4ef6, 0x4e75, 0x4dd4, 0x4dd9, 0x4d8f, 0x4e1f, 0x4e09, 0x4dc8, 0x4dfd, 0x4ef2, 0x4e8f, 0x4ed0, 0x4de5, 0x4e12, 0x4ebd, 0x4df4, 0x4ece, 0x4dda, 0x4d36, 0x4e4e, 0x4e0d, 0x4e28, 0x4ead, 0x4e24, 0x4df9, 0x4e79, 0x4eae, 0x4f04, 0x4deb, 0x4e71, 0x4d7e, 0x4e7b, 0x4e6d, 0x4ee2, 0x4e66, 0x4f2b, 0x4e6f, 0x4df6, 0x4ec0, 0x4e28, 0x4e7a, 0x4e28, 0x4e28, 0x4e4e, 0x4e66, 0x4ef7, 0x4ed3, 0x4deb, 0x4e05, 0x4eb3, 0x4dd9, 0x4e88, 0x4e61, 0x4dfd, 0x4e3b, 0x4e89, 0x4e3a, 0x4e50, 0x4ec6, 0x4e51, 0x4e3f, 0x4de0, -0x4dcf, 0x4e18, 0x4e1c, 0x4db7, 0x4e2e, 0x4e1f, 0x4e65, 0x4f10, 0x4dc9, 0x4fb4, 0x4e91, 0x4e63, 0x4f7c, 0x4e56, 0x4e23, 0x4e0d, 0x4e8d, 0x4dea, 0x4db7, 0x4e18, 0x4e14, 0x4da8, 0x4e1e, 0x4d71, 0x4df0, 0x4e35, 0x4e39, 0x4dec, 0x4e2a, 0x4f10, 0x4e78, 0x4e50, 0x4e31, 0x4e77, 0x4f16, 0x4dca, 0x4d9c, 0x4e1c, 0x4da1, 0x4e11, 0x4e25, 0x4e03, 0x4d87, 0x4ecf, 0x4e2a, 0x4ec7, 0x4d9b, 0x4e44, 0x4e78, 0x4dc2, 0x4f13, 0x4e08, 0x4d85, 0x4ddc, 0x4dd4, 0x4db3, 0x4e2e, 0x4e26, 0x4df4, 0x4e2e, 0x4e60, 0x4f22, 0x4d9d, 0x4ebb, 0x4d96, 0x4e65, 0x4e39, 0x4e4b, 0x4e0f, 0x4ee2, 0x4e96, 0x4dd0, 0x4e47, 0x4e26, 0x4e9e, 0x4e32, 0x4dfa, 0x4e81, 0x4e39, 0x4e73, 0x4ec3, 0x4d8e, 0x4dfe, 0x4e9d, 0x4ded, 0x4e43, 0x4ddb, 0x4d85, 0x4e00, 0x4e59, 0x4def, 0x4e65, 0x4e9c, 0x4e31, 0x4df9, 0x4dd1, -0x4d16, 0x4d87, 0x4e0a, 0x4d67, 0x4dfb, 0x4d49, 0x4daa, 0x4e26, 0x4d51, 0x4e60, 0x4d6f, 0x4d77, 0x4eb9, 0x4da7, 0x4d87, 0x4d9f, 0x4ddd, 0x4d9e, 0x4d4e, 0x4dc1, 0x4dc3, 0x4d44, 0x4d6b, 0x4d53, 0x4d48, 0x4d3f, 0x4ddb, 0x4d6f, 0x4db5, 0x4de9, 0x4dfc, 0x4ddb, 0x4de2, 0x4d7e, 0x4e02, 0x4d6f, 0x4d80, 0x4d13, 0x4d1b, 0x4d08, 0x4dc7, 0x4d52, 0x4d7f, 0x4d8b, 0x4db3, 0x4dfe, 0x4d24, 0x4d12, 0x4dd6, 0x4d8c, 0x4e24, 0x4d61, 0x4d12, 0x4dcd, 0x4d2d, 0x4d83, 0x4db3, 0x4dc8, 0x4d3f, 0x4dd5, 0x4d9e, 0x4e44, 0x4d09, 0x4dbc, 0x4d01, 0x4d29, 0x4d96, 0x4d7d, 0x4dd3, 0x4e10, 0x4d50, 0x4dd2, 0x4d5d, 0x4da8, 0x4dac, 0x4d98, 0x4d92, 0x4d5f, 0x4d9a, 0x4de5, 0x4dcd, 0x4da5, 0x4d6a, 0x4dd6, 0x4d0c, 0x4d65, 0x4d4c, 0x4d42, 0x4dd3, 0x4dbd, 0x4db7, 0x4d89, 0x4dcd, 0x4de3, 0x4d99, 0x4d64, -0x4cf5, 0x4d4a, 0x4dd3, 0x4d03, 0x4d77, 0x4d6c, 0x4db3, 0x4e28, 0x4d32, 0x4e34, 0x4d68, 0x4d9a, 0x4dad, 0x4db7, 0x4dad, 0x4d6d, 0x4e1e, 0x4d30, 0x4d3d, 0x4d9d, 0x4df3, 0x4d29, 0x4d33, 0x4ce2, 0x4d74, 0x4d67, 0x4d9d, 0x4d11, 0x4dca, 0x4e34, 0x4d92, 0x4dca, 0x4d8c, 0x4d33, 0x4da0, 0x4db5, 0x4d3b, 0x4d32, 0x4d0f, 0x4d4f, 0x4cf7, 0x4da4, 0x4d97, 0x4e28, 0x4d40, 0x4d7d, 0x4d00, 0x4d56, 0x4e0a, 0x4cc8, 0x4e0d, 0x4d08, 0x4d21, 0x4d52, 0x4cce, 0x4d5a, 0x4de3, 0x4ced, 0x4ced, 0x4db9, 0x4dbd, 0x4e16, 0x4cf5, 0x4da1, 0x4d57, 0x4d4f, 0x4ddc, 0x4daf, 0x4dfa, 0x4db2, 0x4e26, 0x4d1c, 0x4d8a, 0x4d31, 0x4d88, 0x4cd3, 0x4da8, 0x4dac, 0x4d50, 0x4d91, 0x4d76, 0x4d56, 0x4d5b, 0x4dab, 0x4d56, 0x4d93, 0x4d6f, 0x4cef, 0x4d8e, 0x4ddb, 0x4d6a, 0x4dd8, 0x4db3, 0x4dff, 0x4d77, 0x4d73, -0x4e14, 0x4df9, 0x4e48, 0x4dc5, 0x4dbd, 0x4dcc, 0x4e10, 0x4ec3, 0x4df1, 0x4f5c, 0x4e1c, 0x4e5d, 0x4edc, 0x4df1, 0x4dc0, 0x4e2d, 0x4e62, 0x4de3, 0x4d61, 0x4e39, 0x4e3b, 0x4d79, 0x4e3f, 0x4d76, 0x4daf, 0x4dc8, 0x4e42, 0x4d8d, 0x4e79, 0x4f05, 0x4e44, 0x4e3d, 0x4dce, 0x4e92, 0x4eb7, 0x4df7, 0x4dc4, 0x4db0, 0x4da3, 0x4df3, 0x4db6, 0x4dd6, 0x4dc5, 0x4ea3, 0x4d9e, 0x4ec8, 0x4d7c, 0x4e22, 0x4ee2, 0x4d92, 0x4f08, 0x4db2, 0x4dc3, 0x4df6, 0x4d31, 0x4e50, 0x4e8f, 0x4dd7, 0x4d6e, 0x4e1a, 0x4e86, 0x4f14, 0x4d99, 0x4e85, 0x4d54, 0x4e46, 0x4e26, 0x4e60, 0x4e4b, 0x4f02, 0x4e22, 0x4e04, 0x4e08, 0x4e0e, 0x4e68, 0x4e4a, 0x4de0, 0x4e5a, 0x4e36, 0x4e3d, 0x4e54, 0x4de2, 0x4df7, 0x4e14, 0x4dc6, 0x4e2f, 0x4e56, 0x4d70, 0x4dd2, 0x4e2a, 0x4e35, 0x4e7f, 0x4e7c, 0x4e20, 0x4db4, 0x4d7e, -0x4dc6, 0x4dc2, 0x4e0e, 0x4d9c, 0x4df6, 0x4df8, 0x4dfa, 0x4eb0, 0x4dbc, 0x4ee4, 0x4df7, 0x4da7, 0x4e6e, 0x4d80, 0x4dd3, 0x4dcf, 0x4e02, 0x4d96, 0x4df7, 0x4e57, 0x4e54, 0x4db1, 0x4e11, 0x4d54, 0x4e15, 0x4de1, 0x4e29, 0x4d6c, 0x4dfd, 0x4e7b, 0x4e56, 0x4dfb, 0x4e05, 0x4db1, 0x4e80, 0x4dde, 0x4db5, 0x4d95, 0x4d5e, 0x4de3, 0x4e10, 0x4dea, 0x4d4f, 0x4e65, 0x4dbc, 0x4e8c, 0x4d8d, 0x4ddc, 0x4e2d, 0x4daf, 0x4eb2, 0x4d7d, 0x4d12, 0x4dfc, 0x4d73, 0x4dcf, 0x4e1f, 0x4ddf, 0x4da2, 0x4e58, 0x4e2c, 0x4e98, 0x4d5b, 0x4dec, 0x4d85, 0x4d9f, 0x4de6, 0x4e43, 0x4dca, 0x4e3e, 0x4e6e, 0x4db7, 0x4e2e, 0x4dc1, 0x4dc9, 0x4da4, 0x4dc9, 0x4e02, 0x4df8, 0x4e2f, 0x4e59, 0x4dfe, 0x4d43, 0x4e64, 0x4d80, 0x4ddd, 0x4e15, 0x4d57, 0x4e48, 0x4df3, 0x4dad, 0x4e2f, 0x4e47, 0x4e28, 0x4d94, 0x4db7, -0x4d5f, 0x4d44, 0x4de2, 0x4d6d, 0x4d9b, 0x4d02, 0x4dbe, 0x4e08, 0x4d52, 0x4e16, 0x4d7f, 0x4d66, 0x4e4e, 0x4d55, 0x4d0f, 0x4d7f, 0x4d95, 0x4d6e, 0x4ce8, 0x4dad, 0x4d69, 0x4d42, 0x4dd8, 0x4d33, 0x4d9f, 0x4d61, 0x4dcb, 0x4d43, 0x4dbe, 0x4e12, 0x4dd1, 0x4da1, 0x4d81, 0x4da9, 0x4dff, 0x4d57, 0x4d5b, 0x4cef, 0x4d36, 0x4ccd, 0x4d6a, 0x4d20, 0x4d73, 0x4e30, 0x4d5c, 0x4e02, 0x4d09, 0x4d13, 0x4dee, 0x4d08, 0x4e28, 0x4ce2, 0x4ca5, 0x4d53, 0x4ce4, 0x4d25, 0x4dec, 0x4d44, 0x4d3a, 0x4dc9, 0x4da0, 0x4e0f, 0x4d36, 0x4d80, 0x4c83, 0x4d4c, 0x4d64, 0x4da2, 0x4e08, 0x4e17, 0x4d3f, 0x4d3b, 0x4db3, 0x4d82, 0x4d60, 0x4d87, 0x4d58, 0x4d7a, 0x4d47, 0x4da7, 0x4d24, 0x4d1c, 0x4d2b, 0x4e06, 0x4d16, 0x4dc6, 0x4d87, 0x4cdf, 0x4d70, 0x4db9, 0x4d27, 0x4dc9, 0x4dbb, 0x4d8f, 0x4d3f, 0x4d16, -0x4e12, 0x4e6c, 0x4e94, 0x4e81, 0x4ec0, 0x4e60, 0x4e3b, 0x4f8e, 0x4df8, 0x4f5a, 0x4e88, 0x4e88, 0x4f1c, 0x4e40, 0x4dea, 0x4ddf, 0x4ecb, 0x4e4e, 0x4e15, 0x4e32, 0x4ec9, 0x4dc5, 0x4e88, 0x4dd2, 0x4e51, 0x4e38, 0x4e88, 0x4e03, 0x4e75, 0x4ef6, 0x4eda, 0x4e88, 0x4ea8, 0x4e77, 0x4ec2, 0x4df3, 0x4e12, 0x4e23, 0x4df5, 0x4e0a, 0x4e86, 0x4e65, 0x4df8, 0x4ede, 0x4e52, 0x4ea9, 0x4da0, 0x4e3d, 0x4f16, 0x4e37, 0x4ee0, 0x4df5, 0x4def, 0x4e7a, 0x4dc7, 0x4e6b, 0x4ea5, 0x4e02, 0x4e52, 0x4e35, 0x4e6f, 0x4f2c, 0x4dd0, 0x4e5d, 0x4e27, 0x4e36, 0x4e9b, 0x4e77, 0x4eaa, 0x4f73, 0x4e60, 0x4dfc, 0x4f07, 0x4e60, 0x4e77, 0x4dfd, 0x4e39, 0x4e7a, 0x4e32, 0x4e65, 0x4e35, 0x4e28, 0x4dfe, 0x4eb3, 0x4e20, 0x4e8f, 0x4e7a, 0x4e05, 0x4e5b, 0x4eca, 0x4dcf, 0x4ec3, 0x4eee, 0x4ea4, 0x4e05, 0x4ded, -0x4e2a, 0x4e81, 0x4e68, 0x4de3, 0x4e93, 0x4dc5, 0x4e6a, 0x4f2a, 0x4df5, 0x4fa3, 0x4e54, 0x4e50, 0x4edf, 0x4e46, 0x4e9a, 0x4e35, 0x4ef8, 0x4e70, 0x4da1, 0x4e3d, 0x4e71, 0x4dfb, 0x4e64, 0x4d8e, 0x4e2f, 0x4e3d, 0x4e51, 0x4dd6, 0x4ecd, 0x4ea0, 0x4ecf, 0x4eba, 0x4e64, 0x4e65, 0x4ed8, 0x4dfd, 0x4e11, 0x4e1a, 0x4dc1, 0x4e5c, 0x4e66, 0x4e31, 0x4e6d, 0x4efa, 0x4dfe, 0x4f06, 0x4dd9, 0x4e0a, 0x4eed, 0x4df1, 0x4ef5, 0x4e12, 0x4dc6, 0x4e56, 0x4e31, 0x4dec, 0x4e66, 0x4db6, 0x4d8c, 0x4e40, 0x4e38, 0x4f37, 0x4dc4, 0x4ebe, 0x4e42, 0x4de6, 0x4e8b, 0x4eab, 0x4e84, 0x4eee, 0x4ec7, 0x4e13, 0x4e45, 0x4e7c, 0x4ea5, 0x4e72, 0x4e7f, 0x4e91, 0x4e53, 0x4e74, 0x4e5f, 0x4e41, 0x4e9c, 0x4ea3, 0x4da1, 0x4e06, 0x4e0b, 0x4dce, 0x4e5a, 0x4ed8, 0x4deb, 0x4e5c, 0x4ecd, 0x4eaf, 0x4e17, 0x4dc0, -0x4de1, 0x4df5, 0x4e47, 0x4de4, 0x4e55, 0x4de7, 0x4e23, 0x4f36, 0x4e02, 0x4f54, 0x4e1d, 0x4e77, 0x4ef4, 0x4e3a, 0x4e11, 0x4e2f, 0x4ef2, 0x4dd7, 0x4d78, 0x4e6f, 0x4e4b, 0x4da1, 0x4dc0, 0x4df2, 0x4de6, 0x4e31, 0x4ed7, 0x4e12, 0x4e15, 0x4eba, 0x4e06, 0x4e6e, 0x4e1e, 0x4e11, 0x4e69, 0x4dc7, 0x4df4, 0x4d9a, 0x4dbb, 0x4e16, 0x4dd8, 0x4e22, 0x4dad, 0x4e5c, 0x4df8, 0x4ea6, 0x4d9d, 0x4e12, 0x4ec1, 0x4dd9, 0x4f1a, 0x4ded, 0x4d6c, 0x4de3, 0x4dc5, 0x4e41, 0x4e66, 0x4d96, 0x4def, 0x4e15, 0x4e17, 0x4ec8, 0x4da2, 0x4e8e, 0x4de3, 0x4de2, 0x4ead, 0x4e9c, 0x4e8d, 0x4f0e, 0x4e35, 0x4e42, 0x4ebd, 0x4e0f, 0x4e8e, 0x4e1b, 0x4e29, 0x4e37, 0x4e5f, 0x4e33, 0x4e74, 0x4e10, 0x4dc6, 0x4e6f, 0x4dd4, 0x4e07, 0x4e8f, 0x4d7c, 0x4da2, 0x4ea6, 0x4ddd, 0x4ea0, 0x4edc, 0x4e44, 0x4e3f, 0x4dcf, -0x4d64, 0x4dbc, 0x4e2a, 0x4d7b, 0x4e0c, 0x4d70, 0x4d5c, 0x4e7f, 0x4d22, 0x4e82, 0x4dc7, 0x4e34, 0x4eb8, 0x4d43, 0x4d93, 0x4db4, 0x4e62, 0x4d6c, 0x4d5d, 0x4df9, 0x4daf, 0x4d4c, 0x4d4d, 0x4d5e, 0x4dc0, 0x4d68, 0x4e15, 0x4d39, 0x4e00, 0x4e8d, 0x4df5, 0x4e3d, 0x4dbd, 0x4d3d, 0x4ddc, 0x4d68, 0x4d55, 0x4d32, 0x4cec, 0x4d58, 0x4d8d, 0x4dcc, 0x4d55, 0x4ded, 0x4dfd, 0x4e14, 0x4d4e, 0x4d69, 0x4e63, 0x4d60, 0x4e56, 0x4db8, 0x4d40, 0x4daf, 0x4d4b, 0x4db7, 0x4d88, 0x4d57, 0x4d78, 0x4df0, 0x4ddf, 0x4ea7, 0x4d74, 0x4ddf, 0x4d1f, 0x4d45, 0x4dda, 0x4dc0, 0x4e11, 0x4e5e, 0x4de0, 0x4dfb, 0x4db1, 0x4dbe, 0x4df9, 0x4df0, 0x4db3, 0x4de6, 0x4d9c, 0x4e03, 0x4e08, 0x4d73, 0x4d70, 0x4df1, 0x4dca, 0x4dc5, 0x4d97, 0x4d15, 0x4db0, 0x4e61, 0x4d67, 0x4dc5, 0x4e20, 0x4d85, 0x4d6b, 0x4d62, -0x4d80, 0x4df6, 0x4e6f, 0x4d6a, 0x4e44, 0x4dc4, 0x4e6c, 0x4e7a, 0x4dd6, 0x4f7d, 0x4dda, 0x4dc4, 0x4f2e, 0x4db6, 0x4e17, 0x4ddb, 0x4e6f, 0x4dae, 0x4d64, 0x4dd7, 0x4e04, 0x4dba, 0x4dc3, 0x4de4, 0x4e27, 0x4e3a, 0x4e65, 0x4d7c, 0x4e06, 0x4ead, 0x4dfa, 0x4e4d, 0x4df1, 0x4e0d, 0x4eb9, 0x4dd6, 0x4e4e, 0x4d75, 0x4dca, 0x4df0, 0x4dde, 0x4e13, 0x4de3, 0x4ef2, 0x4dfe, 0x4e7e, 0x4d4a, 0x4dd2, 0x4e5c, 0x4dac, 0x4e79, 0x4dce, 0x4d0a, 0x4e15, 0x4dfc, 0x4df1, 0x4e77, 0x4db2, 0x4d70, 0x4e5c, 0x4e18, 0x4ee6, 0x4db1, 0x4e6b, 0x4d81, 0x4e15, 0x4e18, 0x4e15, 0x4dff, 0x4e9d, 0x4e3a, 0x4e0b, 0x4e75, 0x4dee, 0x4e31, 0x4e0e, 0x4de0, 0x4e45, 0x4e2c, 0x4e78, 0x4e7c, 0x4da5, 0x4dad, 0x4edc, 0x4df9, 0x4e0d, 0x4e39, 0x4d71, 0x4d8a, 0x4e50, 0x4dd8, 0x4e38, 0x4e5e, 0x4ddd, 0x4e18, 0x4d7e, -0x4dd4, 0x4df2, 0x4e8f, 0x4dd6, 0x4e08, 0x4dc1, 0x4e1b, 0x4f76, 0x4dea, 0x4f19, 0x4e8a, 0x4eb4, 0x4f5a, 0x4de2, 0x4df5, 0x4e7d, 0x4e87, 0x4e40, 0x4db8, 0x4ea9, 0x4e79, 0x4da2, 0x4e33, 0x4d4a, 0x4e4b, 0x4e18, 0x4e44, 0x4e00, 0x4e51, 0x4e9f, 0x4e5d, 0x4e73, 0x4e09, 0x4e51, 0x4e4f, 0x4e52, 0x4ddf, 0x4dc7, 0x4dd6, 0x4e21, 0x4e2f, 0x4e62, 0x4ddb, 0x4ea4, 0x4e07, 0x4eb9, 0x4ded, 0x4dcc, 0x4ed5, 0x4dcd, 0x4ebf, 0x4dce, 0x4d8e, 0x4dd4, 0x4d90, 0x4e36, 0x4e69, 0x4de2, 0x4d98, 0x4e4c, 0x4e10, 0x4ecc, 0x4d5d, 0x4ebc, 0x4dd7, 0x4e00, 0x4e78, 0x4e8f, 0x4ea8, 0x4ee1, 0x4e82, 0x4e2e, 0x4e0b, 0x4e1d, 0x4e94, 0x4e36, 0x4dff, 0x4e1d, 0x4e2d, 0x4dd3, 0x4e2e, 0x4e02, 0x4def, 0x4e83, 0x4dc1, 0x4e30, 0x4e18, 0x4dc8, 0x4dcc, 0x4e7b, 0x4deb, 0x4e91, 0x4e53, 0x4ead, 0x4e39, 0x4de7, -0x4db6, 0x4dde, 0x4e7e, 0x4d9c, 0x4e4d, 0x4d7f, 0x4dd3, 0x4e1d, 0x4dee, 0x4efe, 0x4e96, 0x4e29, 0x4e9f, 0x4e12, 0x4dfb, 0x4e03, 0x4e55, 0x4e4d, 0x4d8e, 0x4df4, 0x4e23, 0x4dd3, 0x4dbf, 0x4dd2, 0x4e6f, 0x4dab, 0x4e07, 0x4e0d, 0x4e82, 0x4e89, 0x4e4c, 0x4e3f, 0x4e3b, 0x4e64, 0x4e44, 0x4e2d, 0x4db1, 0x4dc5, 0x4db7, 0x4dcf, 0x4e33, 0x4e54, 0x4e27, 0x4e12, 0x4e13, 0x4e28, 0x4d7e, 0x4df7, 0x4eb3, 0x4df0, 0x4eda, 0x4df1, 0x4d04, 0x4df4, 0x4d89, 0x4dfb, 0x4e5b, 0x4dd4, 0x4d9e, 0x4e56, 0x4e47, 0x4ec2, 0x4d55, 0x4e0c, 0x4d56, 0x4e2c, 0x4d9b, 0x4e3c, 0x4e5b, 0x4ed3, 0x4e76, 0x4de1, 0x4e24, 0x4e31, 0x4e21, 0x4dec, 0x4dfe, 0x4e35, 0x4e3a, 0x4e7f, 0x4e71, 0x4dc9, 0x4e07, 0x4ea7, 0x4dbf, 0x4e4d, 0x4e21, 0x4d4e, 0x4dff, 0x4e44, 0x4dbc, 0x4e34, 0x4e63, 0x4e9d, 0x4ddd, 0x4e09, -0x4d5f, 0x4d52, 0x4e04, 0x4d4d, 0x4dc9, 0x4d7b, 0x4e22, 0x4e97, 0x4dc6, 0x4ec4, 0x4e0e, 0x4e14, 0x4ea4, 0x4d64, 0x4dbc, 0x4df1, 0x4e04, 0x4d9f, 0x4db5, 0x4dcb, 0x4dbc, 0x4d69, 0x4dc0, 0x4da8, 0x4e3e, 0x4e16, 0x4e73, 0x4d5d, 0x4e6c, 0x4eb7, 0x4e6f, 0x4de6, 0x4dc8, 0x4e02, 0x4e9e, 0x4d83, 0x4d8c, 0x4d6f, 0x4d25, 0x4dfd, 0x4e12, 0x4d9a, 0x4d58, 0x4e95, 0x4de8, 0x4e74, 0x4d50, 0x4df8, 0x4ddf, 0x4e0e, 0x4eb7, 0x4de1, 0x4d5f, 0x4d95, 0x4d8a, 0x4dcf, 0x4e35, 0x4dc7, 0x4d95, 0x4db6, 0x4db7, 0x4f00, 0x4d61, 0x4dc9, 0x4daa, 0x4daf, 0x4e2e, 0x4e12, 0x4e12, 0x4ed4, 0x4e2f, 0x4db5, 0x4e30, 0x4dfc, 0x4e4e, 0x4e39, 0x4e06, 0x4e30, 0x4ddd, 0x4e11, 0x4e6b, 0x4dc2, 0x4d96, 0x4e6a, 0x4d42, 0x4e30, 0x4e1f, 0x4d21, 0x4de8, 0x4e8c, 0x4dbc, 0x4dcc, 0x4e03, 0x4e61, 0x4df3, 0x4e23, -0x4d73, 0x4d6b, 0x4e65, 0x4d83, 0x4e07, 0x4de4, 0x4e20, 0x4ecc, 0x4d8e, 0x4eca, 0x4ddf, 0x4dc7, 0x4ead, 0x4d93, 0x4d81, 0x4df7, 0x4e5a, 0x4dac, 0x4d5e, 0x4dd7, 0x4e0c, 0x4d53, 0x4db1, 0x4cc3, 0x4e09, 0x4dac, 0x4e44, 0x4d97, 0x4df3, 0x4e6c, 0x4e2d, 0x4da1, 0x4df0, 0x4df1, 0x4e35, 0x4d86, 0x4d8f, 0x4da9, 0x4ce6, 0x4d92, 0x4e33, 0x4e02, 0x4d57, 0x4e1e, 0x4d6f, 0x4e9b, 0x4cf6, 0x4db4, 0x4df2, 0x4e0a, 0x4e79, 0x4db6, 0x4d5e, 0x4d87, 0x4d94, 0x4d98, 0x4dd8, 0x4d9f, 0x4d9b, 0x4e07, 0x4db5, 0x4e90, 0x4d8f, 0x4e04, 0x4d37, 0x4df3, 0x4dbb, 0x4e0b, 0x4e46, 0x4e72, 0x4e38, 0x4d88, 0x4de0, 0x4dd0, 0x4e34, 0x4e1c, 0x4ddc, 0x4de9, 0x4df7, 0x4dc5, 0x4e26, 0x4dcb, 0x4dc6, 0x4e10, 0x4db4, 0x4dda, 0x4e2c, 0x4d42, 0x4dda, 0x4e34, 0x4df9, 0x4df6, 0x4e4c, 0x4e60, 0x4dce, 0x4da1, -0x4dfb, 0x4ddc, 0x4dfc, 0x4df6, 0x4e60, 0x4e79, 0x4ee5, 0x4f0d, 0x4e50, 0x4f64, 0x4e51, 0x4e14, 0x4f68, 0x4e42, 0x4e0e, 0x4dea, 0x4e93, 0x4e28, 0x4dd7, 0x4e3a, 0x4e8b, 0x4d3a, 0x4e6a, 0x4dd7, 0x4e04, 0x4e77, 0x4e54, 0x4de5, 0x4e6e, 0x4ead, 0x4e4d, 0x4ed8, 0x4e36, 0x4e13, 0x4ef5, 0x4e57, 0x4e79, 0x4df7, 0x4dca, 0x4dd7, 0x4dc8, 0x4e46, 0x4df8, 0x4ea0, 0x4e57, 0x4eab, 0x4dbd, 0x4de8, 0x4ebc, 0x4ddd, 0x4f0b, 0x4e75, 0x4d8e, 0x4e2c, 0x4d68, 0x4e38, 0x4e5d, 0x4de2, 0x4e27, 0x4e44, 0x4e80, 0x4f24, 0x4db1, 0x4e59, 0x4dcb, 0x4df5, 0x4e8c, 0x4e7c, 0x4ec9, 0x4eca, 0x4e37, 0x4e6b, 0x4e74, 0x4e1e, 0x4ebb, 0x4e4e, 0x4e39, 0x4e60, 0x4e2e, 0x4e6a, 0x4ebd, 0x4ddd, 0x4dd9, 0x4e88, 0x4db2, 0x4e21, 0x4de8, 0x4daf, 0x4e9e, 0x4e7e, 0x4e1d, 0x4e78, 0x4e9e, 0x4e69, 0x4e48, 0x4df0, -0x4e18, 0x4e15, 0x4e0d, 0x4d9d, 0x4de2, 0x4db6, 0x4e03, 0x4e90, 0x4db2, 0x4f64, 0x4e3c, 0x4e44, 0x4f07, 0x4e61, 0x4e19, 0x4e2a, 0x4e27, 0x4dea, 0x4dda, 0x4e0d, 0x4e2a, 0x4d6f, 0x4df2, 0x4dae, 0x4e27, 0x4e12, 0x4e69, 0x4d56, 0x4e61, 0x4ec9, 0x4e75, 0x4dfb, 0x4df1, 0x4e4b, 0x4e66, 0x4e00, 0x4df6, 0x4dd5, 0x4d9c, 0x4dd9, 0x4dc1, 0x4e0f, 0x4dff, 0x4e66, 0x4e12, 0x4e5e, 0x4dc5, 0x4e06, 0x4ea9, 0x4d9a, 0x4edd, 0x4d9c, 0x4d79, 0x4dfa, 0x4dec, 0x4de7, 0x4e23, 0x4dde, 0x4d74, 0x4e25, 0x4e5e, 0x4ed2, 0x4dbe, 0x4eb2, 0x4d68, 0x4df8, 0x4e4e, 0x4e5f, 0x4e72, 0x4eae, 0x4e68, 0x4d79, 0x4e1b, 0x4df4, 0x4e5c, 0x4e0b, 0x4e38, 0x4e14, 0x4e30, 0x4e1e, 0x4e6e, 0x4da5, 0x4e15, 0x4e83, 0x4d85, 0x4e05, 0x4dc2, 0x4d58, 0x4dfe, 0x4e6a, 0x4dbd, 0x4df2, 0x4e78, 0x4e34, 0x4e58, 0x4de8, -0x4ed2, 0x4e61, 0x4e8f, 0x4ebf, 0x4ef5, 0x4e4a, 0x4ed0, 0x4f75, 0x4dcc, 0x500b, 0x4e3a, 0x4ed7, 0x4f6a, 0x4e6b, 0x4e3d, 0x4e69, 0x4ee1, 0x4ef6, 0x4de0, 0x4e8a, 0x4ea9, 0x4dd9, 0x4e98, 0x4e63, 0x4e1a, 0x4eb5, 0x4f27, 0x4dfb, 0x4eec, 0x4f05, 0x4ee4, 0x4ec3, 0x4ede, 0x4ed6, 0x4eee, 0x4e11, 0x4e56, 0x4dc8, 0x4e3e, 0x4e6d, 0x4ebb, 0x4e82, 0x4e5e, 0x4f27, 0x4ec1, 0x4f29, 0x4dc5, 0x4e07, 0x4f4b, 0x4e3a, 0x4f06, 0x4e9b, 0x4e12, 0x4e68, 0x4e1b, 0x4e6c, 0x4ec0, 0x4e53, 0x4dd4, 0x4e71, 0x4ea6, 0x4f59, 0x4d84, 0x4ed9, 0x4dd2, 0x4e56, 0x4ecf, 0x4e41, 0x4e5b, 0x4f78, 0x4eaa, 0x4ee4, 0x4ec2, 0x4e0f, 0x4ea8, 0x4e99, 0x4e0f, 0x4ed0, 0x4e36, 0x4e7e, 0x4ea4, 0x4e09, 0x4ea2, 0x4ed1, 0x4e45, 0x4e2d, 0x4e7f, 0x4dfe, 0x4ea7, 0x4f08, 0x4e5b, 0x4f1e, 0x4f1b, 0x4e8d, 0x4e63, 0x4e1f, -0x4d50, 0x4d58, 0x4dc6, 0x4d63, 0x4d51, 0x4cf4, 0x4dea, 0x4e93, 0x4d63, 0x4e41, 0x4d61, 0x4dd5, 0x4e3a, 0x4d60, 0x4dd1, 0x4d9f, 0x4e21, 0x4d1d, 0x4d52, 0x4d9e, 0x4df7, 0x4d53, 0x4d8c, 0x4d57, 0x4dad, 0x4d52, 0x4ddb, 0x4ccb, 0x4e0b, 0x4e33, 0x4e0d, 0x4e17, 0x4d8e, 0x4d64, 0x4e15, 0x4d7d, 0x4db1, 0x4d3c, 0x4d35, 0x4d81, 0x4d5b, 0x4ddf, 0x4d29, 0x4e15, 0x4d2c, 0x4dbe, 0x4ca5, 0x4d96, 0x4dd8, 0x4d8b, 0x4deb, 0x4d1f, 0x4d1e, 0x4d79, 0x4ce2, 0x4d9c, 0x4de9, 0x4d13, 0x4d46, 0x4d99, 0x4ddf, 0x4e32, 0x4d14, 0x4dae, 0x4d49, 0x4d7d, 0x4dd3, 0x4dc0, 0x4e07, 0x4e17, 0x4de2, 0x4d3c, 0x4dcc, 0x4dd0, 0x4dff, 0x4d24, 0x4d49, 0x4dc4, 0x4d5e, 0x4d94, 0x4e1d, 0x4d76, 0x4d29, 0x4dce, 0x4d50, 0x4d84, 0x4d8a, 0x4d39, 0x4dcc, 0x4dd3, 0x4d6b, 0x4de9, 0x4e08, 0x4d81, 0x4d94, 0x4d8a, -0x4d9f, 0x4e04, 0x4e12, 0x4d91, 0x4df5, 0x4d8b, 0x4dbb, 0x4ea8, 0x4da5, 0x4edd, 0x4da2, 0x4da1, 0x4e67, 0x4dae, 0x4db6, 0x4df3, 0x4e3c, 0x4d05, 0x4d7d, 0x4dcd, 0x4dbd, 0x4d86, 0x4da9, 0x4d85, 0x4dc9, 0x4daa, 0x4e3d, 0x4d34, 0x4dfa, 0x4e65, 0x4e16, 0x4ddf, 0x4dae, 0x4d7e, 0x4e6f, 0x4d42, 0x4d8c, 0x4d5c, 0x4d39, 0x4e04, 0x4d90, 0x4da6, 0x4d72, 0x4e42, 0x4e03, 0x4e15, 0x4d9b, 0x4dc6, 0x4e18, 0x4d68, 0x4e3e, 0x4da7, 0x4cfb, 0x4db9, 0x4db4, 0x4d47, 0x4dac, 0x4d0d, 0x4d91, 0x4de7, 0x4dcc, 0x4ece, 0x4d39, 0x4ddb, 0x4d3f, 0x4d17, 0x4e3d, 0x4e87, 0x4da9, 0x4e9d, 0x4df6, 0x4dba, 0x4de3, 0x4d73, 0x4ddf, 0x4d6c, 0x4df5, 0x4dc4, 0x4d89, 0x4dac, 0x4e55, 0x4d8d, 0x4d29, 0x4e7c, 0x4d3e, 0x4dc3, 0x4dc6, 0x4d16, 0x4db1, 0x4db6, 0x4d2e, 0x4e10, 0x4e8f, 0x4e53, 0x4def, 0x4d93, -0x4d7c, 0x4dc3, 0x4e09, 0x4e1d, 0x4e57, 0x4dfd, 0x4ea6, 0x4f29, 0x4e11, 0x4f37, 0x4e26, 0x4e3f, 0x4f1f, 0x4e26, 0x4e37, 0x4e0b, 0x4ea0, 0x4e58, 0x4d9f, 0x4df1, 0x4e40, 0x4d80, 0x4e42, 0x4da5, 0x4e6b, 0x4e59, 0x4e1a, 0x4dc2, 0x4e18, 0x4eae, 0x4eb2, 0x4e4e, 0x4e46, 0x4e70, 0x4e78, 0x4de5, 0x4dfb, 0x4d66, 0x4ddb, 0x4dcf, 0x4de8, 0x4e80, 0x4e25, 0x4efd, 0x4e0a, 0x4e74, 0x4d9c, 0x4e3a, 0x4ec3, 0x4e2a, 0x4ea9, 0x4db9, 0x4d98, 0x4e32, 0x4dfd, 0x4e29, 0x4e8b, 0x4da4, 0x4dda, 0x4e59, 0x4e6d, 0x4f14, 0x4da8, 0x4e73, 0x4e03, 0x4e0e, 0x4e3f, 0x4e4f, 0x4e67, 0x4ece, 0x4e6d, 0x4db3, 0x4e71, 0x4e03, 0x4e4d, 0x4e1d, 0x4e9e, 0x4deb, 0x4dd6, 0x4de6, 0x4ebf, 0x4da2, 0x4e25, 0x4eb3, 0x4dbd, 0x4e42, 0x4e33, 0x4dfa, 0x4e18, 0x4e34, 0x4db7, 0x4e62, 0x4e91, 0x4e55, 0x4e39, 0x4e0e, -0x4e1c, 0x4e0e, 0x4ea5, 0x4dfe, 0x4e42, 0x4e24, 0x4ee6, 0x4f64, 0x4e07, 0x4f49, 0x4e23, 0x4e79, 0x4f00, 0x4e39, 0x4e49, 0x4e64, 0x4efa, 0x4e6b, 0x4dcb, 0x4ebb, 0x4dec, 0x4e02, 0x4e6b, 0x4dad, 0x4e53, 0x4e8d, 0x4e1b, 0x4dbe, 0x4e5f, 0x4f4a, 0x4ea3, 0x4e1b, 0x4e26, 0x4e29, 0x4e9b, 0x4e22, 0x4e06, 0x4e0a, 0x4e12, 0x4dd4, 0x4e83, 0x4e6b, 0x4e03, 0x4ebb, 0x4e0e, 0x4eef, 0x4db8, 0x4de8, 0x4ef8, 0x4dfa, 0x4e70, 0x4dfe, 0x4db4, 0x4e48, 0x4db3, 0x4dd6, 0x4e90, 0x4e0f, 0x4e43, 0x4eb7, 0x4eb4, 0x4f39, 0x4db4, 0x4eea, 0x4dc9, 0x4e4f, 0x4e79, 0x4e82, 0x4e4d, 0x4ebe, 0x4ea0, 0x4e1d, 0x4e88, 0x4e2a, 0x4ea2, 0x4dff, 0x4e4a, 0x4e1e, 0x4e56, 0x4e42, 0x4eee, 0x4e13, 0x4e05, 0x4e8d, 0x4d84, 0x4e5f, 0x4e72, 0x4da9, 0x4e65, 0x4e82, 0x4dd0, 0x4eec, 0x4ebf, 0x4e6d, 0x4e05, 0x4e34, -0x4df7, 0x4df8, 0x4e19, 0x4dc2, 0x4e08, 0x4d96, 0x4e15, 0x4e8b, 0x4dd6, 0x4ee6, 0x4e2a, 0x4e81, 0x4eb0, 0x4dbc, 0x4db3, 0x4dc1, 0x4e4a, 0x4e07, 0x4de6, 0x4e38, 0x4e01, 0x4d73, 0x4de0, 0x4d6b, 0x4e18, 0x4e38, 0x4e4c, 0x4d81, 0x4e65, 0x4efa, 0x4e48, 0x4e20, 0x4e19, 0x4dc1, 0x4e7b, 0x4dd9, 0x4e18, 0x4dd3, 0x4d4c, 0x4ddd, 0x4dc0, 0x4e14, 0x4d8a, 0x4e9f, 0x4dbf, 0x4e45, 0x4d36, 0x4e03, 0x4e7c, 0x4d8b, 0x4e7a, 0x4dc3, 0x4d4d, 0x4dff, 0x4d84, 0x4ddd, 0x4e76, 0x4d7d, 0x4d74, 0x4e02, 0x4e10, 0x4e5f, 0x4d8c, 0x4e26, 0x4d8b, 0x4dd5, 0x4e33, 0x4e0a, 0x4df0, 0x4ee1, 0x4e21, 0x4d9d, 0x4e45, 0x4e22, 0x4e2a, 0x4de6, 0x4e22, 0x4e4c, 0x4de5, 0x4e0e, 0x4e9d, 0x4d29, 0x4d9c, 0x4e5e, 0x4d53, 0x4e15, 0x4e02, 0x4d64, 0x4dd4, 0x4e46, 0x4d64, 0x4e19, 0x4e5f, 0x4e3a, 0x4d78, 0x4db6, -0x4dec, 0x4ddb, 0x4e68, 0x4d9e, 0x4e3c, 0x4e3e, 0x4e41, 0x4f6c, 0x4e24, 0x4f2a, 0x4e2e, 0x4e7c, 0x4f37, 0x4dde, 0x4dd5, 0x4e75, 0x4eb7, 0x4dc9, 0x4dcb, 0x4e36, 0x4e72, 0x4df6, 0x4e52, 0x4db5, 0x4dfa, 0x4e34, 0x4ebf, 0x4dcd, 0x4e14, 0x4edf, 0x4e6b, 0x4e8b, 0x4e41, 0x4e5f, 0x4e82, 0x4dd6, 0x4e0a, 0x4db8, 0x4dc6, 0x4e34, 0x4e16, 0x4eb4, 0x4e02, 0x4ed2, 0x4e2d, 0x4ef5, 0x4dc5, 0x4e36, 0x4eb4, 0x4df0, 0x4f4d, 0x4de8, 0x4dac, 0x4e0a, 0x4d9c, 0x4e45, 0x4e79, 0x4dd1, 0x4db0, 0x4ec1, 0x4dfb, 0x4ee0, 0x4d70, 0x4e88, 0x4df2, 0x4df6, 0x4e3f, 0x4e33, 0x4ef4, 0x4f0b, 0x4e75, 0x4e45, 0x4e05, 0x4d91, 0x4e72, 0x4e1b, 0x4e66, 0x4e32, 0x4dd1, 0x4e14, 0x4e63, 0x4e10, 0x4df1, 0x4ebf, 0x4d89, 0x4e6a, 0x4e7b, 0x4d91, 0x4e3f, 0x4e61, 0x4e31, 0x4e7f, 0x4ddd, 0x4e16, 0x4e2b, 0x4de8, -0x4d4a, 0x4d3f, 0x4d6a, 0x4d6a, 0x4e2b, 0x4d74, 0x4de3, 0x4eb1, 0x4dd9, 0x4e75, 0x4da3, 0x4dde, 0x4e51, 0x4ded, 0x4e0a, 0x4d83, 0x4e72, 0x4dd7, 0x4d43, 0x4d74, 0x4e0c, 0x4da8, 0x4df0, 0x4d54, 0x4df0, 0x4e0a, 0x4e25, 0x4d74, 0x4e0f, 0x4e13, 0x4e18, 0x4e0e, 0x4e0c, 0x4dfa, 0x4e2f, 0x4d82, 0x4dbe, 0x4d6a, 0x4d42, 0x4d8b, 0x4ce1, 0x4dc9, 0x4d63, 0x4e1f, 0x4db1, 0x4e11, 0x4d22, 0x4df3, 0x4e58, 0x4d7d, 0x4ec2, 0x4d84, 0x4d46, 0x4d6e, 0x4d20, 0x4d68, 0x4dfe, 0x4d39, 0x4d23, 0x4d87, 0x4d7e, 0x4ec7, 0x4d2a, 0x4dbf, 0x4d44, 0x4d8f, 0x4e0a, 0x4dff, 0x4e30, 0x4e2e, 0x4d94, 0x4d89, 0x4e04, 0x4d72, 0x4dee, 0x4d41, 0x4dd4, 0x4d58, 0x4dba, 0x4d8f, 0x4e19, 0x4dac, 0x4db5, 0x4dea, 0x4ce2, 0x4e1a, 0x4d87, 0x4d54, 0x4d86, 0x4e3e, 0x4e04, 0x4e41, 0x4dd4, 0x4df5, 0x4e28, 0x4d92, -0x4d5e, 0x4dba, 0x4df8, 0x4d94, 0x4df0, 0x4d7d, 0x4dfc, 0x4e83, 0x4df1, 0x4e98, 0x4dd4, 0x4dc6, 0x4e84, 0x4daa, 0x4d97, 0x4d98, 0x4dfd, 0x4d9e, 0x4d4a, 0x4dd7, 0x4d7e, 0x4da5, 0x4dbf, 0x4dd1, 0x4de8, 0x4db7, 0x4dfd, 0x4d45, 0x4dba, 0x4e6c, 0x4df2, 0x4dfc, 0x4dc2, 0x4dad, 0x4e19, 0x4d4d, 0x4df1, 0x4dab, 0x4d76, 0x4da8, 0x4d60, 0x4e55, 0x4dab, 0x4e58, 0x4d6a, 0x4e07, 0x4d48, 0x4d82, 0x4e78, 0x4d73, 0x4e49, 0x4dbe, 0x4d0c, 0x4d80, 0x4dbb, 0x4d67, 0x4e27, 0x4d34, 0x4d72, 0x4de1, 0x4e1d, 0x4e81, 0x4cf1, 0x4e18, 0x4d84, 0x4d8d, 0x4e1b, 0x4e4d, 0x4dd0, 0x4e69, 0x4dc1, 0x4da0, 0x4e4a, 0x4d7b, 0x4dc0, 0x4d4f, 0x4de4, 0x4e1b, 0x4da1, 0x4e14, 0x4e2c, 0x4d53, 0x4d67, 0x4ecd, 0x4d98, 0x4dc2, 0x4dff, 0x4d37, 0x4deb, 0x4dcb, 0x4cff, 0x4de8, 0x4e0a, 0x4d80, 0x4dba, 0x4d6a, -0x4d78, 0x4d5c, 0x4dbd, 0x4d18, 0x4d9d, 0x4d98, 0x4d95, 0x4e53, 0x4d96, 0x4e9f, 0x4db1, 0x4dea, 0x4ea8, 0x4d7f, 0x4d8b, 0x4d7a, 0x4de6, 0x4d5d, 0x4d91, 0x4da5, 0x4da8, 0x4d38, 0x4ddd, 0x4d87, 0x4d57, 0x4dfd, 0x4e38, 0x4d7b, 0x4d9a, 0x4e34, 0x4e26, 0x4da2, 0x4dc3, 0x4d63, 0x4de6, 0x4d54, 0x4dec, 0x4cfb, 0x4d33, 0x4d01, 0x4d50, 0x4da9, 0x4da2, 0x4e13, 0x4dbf, 0x4dff, 0x4d20, 0x4de2, 0x4e2b, 0x4d73, 0x4e87, 0x4d96, 0x4ce3, 0x4d66, 0x4d63, 0x4d8a, 0x4e2e, 0x4d32, 0x4d64, 0x4da9, 0x4da7, 0x4e99, 0x4cff, 0x4e26, 0x4d53, 0x4d79, 0x4df7, 0x4daf, 0x4e47, 0x4e48, 0x4d6a, 0x4dc0, 0x4ddd, 0x4d4d, 0x4dfb, 0x4d9b, 0x4db0, 0x4d67, 0x4ddb, 0x4dfc, 0x4d88, 0x4d4f, 0x4cfd, 0x4e65, 0x4d56, 0x4dca, 0x4dcb, 0x4cdd, 0x4d73, 0x4db6, 0x4d42, 0x4dae, 0x4e26, 0x4d76, 0x4d67, 0x4d82, -0x4dbf, 0x4df6, 0x4e63, 0x4dbc, 0x4edf, 0x4e0f, 0x4dfc, 0x4ecc, 0x4e07, 0x4f24, 0x4e00, 0x4e3b, 0x4f2d, 0x4e76, 0x4e0c, 0x4d9b, 0x4ecf, 0x4e60, 0x4df9, 0x4e4e, 0x4e0e, 0x4dd0, 0x4e7d, 0x4dfb, 0x4e65, 0x4eab, 0x4e78, 0x4e0c, 0x4e44, 0x4e4c, 0x4e70, 0x4e9f, 0x4e78, 0x4e01, 0x4e8d, 0x4e02, 0x4e1e, 0x4dcd, 0x4dce, 0x4dac, 0x4e25, 0x4e11, 0x4df9, 0x4ee4, 0x4e60, 0x4eb6, 0x4dc2, 0x4e32, 0x4f0f, 0x4dad, 0x4f16, 0x4dac, 0x4d37, 0x4e75, 0x4daf, 0x4df5, 0x4e91, 0x4db6, 0x4dc3, 0x4e51, 0x4e1a, 0x4f04, 0x4dd3, 0x4e22, 0x4dcd, 0x4dd4, 0x4e5a, 0x4e38, 0x4e9f, 0x4e7a, 0x4ea4, 0x4e59, 0x4e63, 0x4e09, 0x4e3f, 0x4dff, 0x4e0b, 0x4e1b, 0x4e1b, 0x4e7a, 0x4e5f, 0x4d96, 0x4dc5, 0x4e7d, 0x4d96, 0x4e22, 0x4e39, 0x4d5a, 0x4e54, 0x4eb5, 0x4e10, 0x4e66, 0x4e83, 0x4e2c, 0x4e34, 0x4d5a, -0x4d71, 0x4dd1, 0x4e56, 0x4d84, 0x4dcc, 0x4d86, 0x4e2f, 0x4e5a, 0x4dc0, 0x4ea7, 0x4e1e, 0x4e25, 0x4ea5, 0x4d59, 0x4d96, 0x4e00, 0x4e1c, 0x4d7f, 0x4d79, 0x4e33, 0x4d81, 0x4d99, 0x4d92, 0x4d4f, 0x4d9b, 0x4dec, 0x4e45, 0x4d44, 0x4dcf, 0x4e43, 0x4e26, 0x4dfe, 0x4dd8, 0x4e01, 0x4e6b, 0x4dd2, 0x4ddd, 0x4db8, 0x4d2e, 0x4dec, 0x4de0, 0x4e0f, 0x4da8, 0x4ed9, 0x4da5, 0x4e7f, 0x4cfb, 0x4d7b, 0x4e07, 0x4da2, 0x4e9f, 0x4d95, 0x4d3b, 0x4db7, 0x4da1, 0x4dc7, 0x4dfb, 0x4d73, 0x4d74, 0x4dfb, 0x4df9, 0x4ed7, 0x4d61, 0x4de7, 0x4d74, 0x4db0, 0x4da0, 0x4e05, 0x4e52, 0x4e67, 0x4e3b, 0x4d86, 0x4dca, 0x4ded, 0x4d7e, 0x4d87, 0x4dee, 0x4dec, 0x4dd8, 0x4df7, 0x4e19, 0x4d39, 0x4da2, 0x4e7b, 0x4d5f, 0x4de3, 0x4de7, 0x4d6e, 0x4dad, 0x4e39, 0x4d1b, 0x4e13, 0x4dfe, 0x4de6, 0x4dad, 0x4dd7, -0x4e08, 0x4de7, 0x4e3b, 0x4e57, 0x4ec6, 0x4e89, 0x4eae, 0x4f6b, 0x4e5a, 0x4fbb, 0x4e68, 0x4e30, 0x4f54, 0x4e46, 0x4e31, 0x4e01, 0x4f2d, 0x4e6e, 0x4e0a, 0x4e3e, 0x4ead, 0x4dd6, 0x4e96, 0x4e12, 0x4e62, 0x4e8d, 0x4ec0, 0x4e03, 0x4e58, 0x4eec, 0x4ea5, 0x4eac, 0x4e98, 0x4e68, 0x4efa, 0x4e20, 0x4e2d, 0x4e0a, 0x4e29, 0x4e36, 0x4e62, 0x4e6e, 0x4dc5, 0x4ee7, 0x4e9f, 0x4ef0, 0x4e06, 0x4e0e, 0x4f08, 0x4df4, 0x4f16, 0x4dc9, 0x4d49, 0x4e98, 0x4dcd, 0x4e73, 0x4ecb, 0x4e7e, 0x4e22, 0x4e87, 0x4e90, 0x4f22, 0x4dd9, 0x4ed8, 0x4e21, 0x4e27, 0x4e54, 0x4e73, 0x4e8d, 0x4f3b, 0x4e98, 0x4dfe, 0x4ec4, 0x4e22, 0x4e8b, 0x4e79, 0x4e10, 0x4e68, 0x4e06, 0x4e7a, 0x4ef9, 0x4e1c, 0x4e11, 0x4e9c, 0x4dc7, 0x4e2a, 0x4dec, 0x4e0c, 0x4e55, 0x4e89, 0x4e5f, 0x4f06, 0x4eaf, 0x4e44, 0x4ea0, 0x4e10, -0x4dbc, 0x4dc0, 0x4e13, 0x4da8, 0x4e6c, 0x4e0f, 0x4e94, 0x4ee8, 0x4df0, 0x4f1d, 0x4e41, 0x4e33, 0x4f18, 0x4dbd, 0x4df9, 0x4e19, 0x4e6e, 0x4d98, 0x4d78, 0x4ddf, 0x4e5e, 0x4dad, 0x4dbf, 0x4d88, 0x4e07, 0x4e26, 0x4e1c, 0x4dd3, 0x4e6d, 0x4ef3, 0x4e99, 0x4e3d, 0x4e3c, 0x4e6b, 0x4e6f, 0x4e0e, 0x4df7, 0x4dab, 0x4dd2, 0x4e20, 0x4e18, 0x4dfe, 0x4da4, 0x4e68, 0x4e1e, 0x4e3d, 0x4d7f, 0x4df2, 0x4eb9, 0x4dda, 0x4ec6, 0x4ddb, 0x4d6c, 0x4e1c, 0x4d9e, 0x4e23, 0x4e36, 0x4d74, 0x4dd5, 0x4e31, 0x4e36, 0x4f13, 0x4d62, 0x4e07, 0x4d70, 0x4df5, 0x4e70, 0x4e46, 0x4e5d, 0x4eb4, 0x4e6d, 0x4de1, 0x4e64, 0x4e17, 0x4e36, 0x4e2f, 0x4e29, 0x4e32, 0x4dde, 0x4dc9, 0x4e74, 0x4de5, 0x4de6, 0x4e52, 0x4da3, 0x4e0e, 0x4e4b, 0x4daf, 0x4dec, 0x4ebe, 0x4dc5, 0x4e10, 0x4e83, 0x4e8d, 0x4e13, 0x4e0d, -0x4de6, 0x4e03, 0x4e4f, 0x4d8b, 0x4e9b, 0x4e0f, 0x4ea4, 0x4ed6, 0x4dca, 0x4f1d, 0x4e28, 0x4e48, 0x4eff, 0x4e00, 0x4e96, 0x4e11, 0x4eb8, 0x4dae, 0x4df2, 0x4e6d, 0x4e65, 0x4e1a, 0x4e33, 0x4e04, 0x4e00, 0x4e74, 0x4eca, 0x4df9, 0x4e32, 0x4e8c, 0x4eac, 0x4e81, 0x4e27, 0x4e2a, 0x4e53, 0x4de1, 0x4df1, 0x4d9c, 0x4dd9, 0x4e37, 0x4e26, 0x4e2f, 0x4d63, 0x4edb, 0x4e62, 0x4ebd, 0x4dd5, 0x4e05, 0x4eb9, 0x4dd1, 0x4f1c, 0x4dee, 0x4d5f, 0x4e2c, 0x4e1e, 0x4e07, 0x4e03, 0x4ddf, 0x4dc5, 0x4dd1, 0x4e05, 0x4edb, 0x4dca, 0x4e5a, 0x4d80, 0x4dd5, 0x4e75, 0x4e6a, 0x4e69, 0x4eb3, 0x4e49, 0x4e88, 0x4ea2, 0x4e28, 0x4ea6, 0x4e21, 0x4e0a, 0x4e2f, 0x4e39, 0x4e43, 0x4e3b, 0x4e07, 0x4d9a, 0x4e97, 0x4d98, 0x4e81, 0x4dd9, 0x4d1d, 0x4e15, 0x4e7c, 0x4e15, 0x4e48, 0x4ec0, 0x4e99, 0x4e31, 0x4e50, -0x4d4e, 0x4dcf, 0x4e16, 0x4e0f, 0x4e3d, 0x4d5b, 0x4dd0, 0x4ed8, 0x4dfa, 0x4f4d, 0x4dbd, 0x4e5d, 0x4e9b, 0x4d9b, 0x4e37, 0x4dcd, 0x4e8e, 0x4e45, 0x4d87, 0x4dfa, 0x4e43, 0x4dd6, 0x4e1c, 0x4d8a, 0x4e32, 0x4ddb, 0x4e30, 0x4d75, 0x4db6, 0x4eca, 0x4dcd, 0x4e08, 0x4e13, 0x4e61, 0x4e35, 0x4dd9, 0x4dbc, 0x4d9e, 0x4d85, 0x4dfe, 0x4e2a, 0x4e31, 0x4d76, 0x4e50, 0x4dcc, 0x4e8e, 0x4d2d, 0x4de9, 0x4eaf, 0x4d8a, 0x4ebd, 0x4db0, 0x4d28, 0x4def, 0x4da2, 0x4db8, 0x4e71, 0x4dc0, 0x4d07, 0x4dd9, 0x4e0d, 0x4eec, 0x4dd4, 0x4dff, 0x4d97, 0x4ded, 0x4e33, 0x4e55, 0x4e1f, 0x4e88, 0x4e25, 0x4da1, 0x4e0d, 0x4de9, 0x4e00, 0x4dc7, 0x4de5, 0x4dc9, 0x4e36, 0x4dd4, 0x4eae, 0x4df1, 0x4e29, 0x4ecc, 0x4d81, 0x4e1d, 0x4e1a, 0x4d93, 0x4dd0, 0x4e67, 0x4ddf, 0x4e49, 0x4e29, 0x4dfc, 0x4e4e, 0x4e15, -0x4d53, 0x4d54, 0x4dcb, 0x4d20, 0x4d9f, 0x4d7b, 0x4db1, 0x4e61, 0x4d86, 0x4e2b, 0x4d85, 0x4dca, 0x4e88, 0x4d8f, 0x4d7c, 0x4dbd, 0x4dd1, 0x4d53, 0x4cf8, 0x4e33, 0x4daa, 0x4d52, 0x4d77, 0x4d28, 0x4db3, 0x4db7, 0x4da2, 0x4d5f, 0x4d8b, 0x4e40, 0x4e0a, 0x4d4e, 0x4d44, 0x4d89, 0x4dd4, 0x4ced, 0x4d7e, 0x4d23, 0x4d3b, 0x4d33, 0x4d97, 0x4dbe, 0x4d4e, 0x4e18, 0x4d25, 0x4e37, 0x4cec, 0x4d58, 0x4dd8, 0x4d79, 0x4e3c, 0x4d8d, 0x4d0e, 0x4d56, 0x4ce2, 0x4d47, 0x4dec, 0x4d34, 0x4d24, 0x4df8, 0x4d54, 0x4dc0, 0x4ce1, 0x4db2, 0x4d4d, 0x4d59, 0x4d7b, 0x4db2, 0x4db9, 0x4e11, 0x4d44, 0x4daa, 0x4dc6, 0x4d61, 0x4db8, 0x4d7d, 0x4d94, 0x4dc4, 0x4d64, 0x4da8, 0x4db3, 0x4d5b, 0x4d48, 0x4e4c, 0x4d38, 0x4cf7, 0x4dda, 0x4ce7, 0x4de8, 0x4de0, 0x4d34, 0x4dc4, 0x4e01, 0x4db9, 0x4d72, 0x4d31, -0x4d50, 0x4d8a, 0x4e4e, 0x4d70, 0x4e36, 0x4db3, 0x4e2c, 0x4ec3, 0x4de3, 0x4f03, 0x4e28, 0x4e59, 0x4ec1, 0x4dee, 0x4db6, 0x4dfa, 0x4e6c, 0x4de5, 0x4d40, 0x4dc9, 0x4e59, 0x4d89, 0x4dc7, 0x4da5, 0x4d83, 0x4e48, 0x4e69, 0x4df2, 0x4e0e, 0x4ebb, 0x4e4c, 0x4e39, 0x4e07, 0x4e1c, 0x4e5c, 0x4db9, 0x4e05, 0x4d7f, 0x4d54, 0x4de6, 0x4dca, 0x4df7, 0x4d7c, 0x4e50, 0x4e43, 0x4e69, 0x4da0, 0x4e1d, 0x4e57, 0x4db8, 0x4eb1, 0x4e23, 0x4d6d, 0x4e1c, 0x4d74, 0x4e16, 0x4e3b, 0x4dcc, 0x4d94, 0x4e5b, 0x4e25, 0x4ec5, 0x4d65, 0x4e1c, 0x4d5b, 0x4ded, 0x4e12, 0x4e06, 0x4e1a, 0x4eb6, 0x4de4, 0x4dbf, 0x4e1a, 0x4e3b, 0x4e57, 0x4dff, 0x4dd6, 0x4e6a, 0x4dc5, 0x4e4f, 0x4e81, 0x4d7e, 0x4dc1, 0x4e84, 0x4dd8, 0x4dff, 0x4e2f, 0x4dc2, 0x4db1, 0x4e70, 0x4de1, 0x4de9, 0x4e31, 0x4e11, 0x4e46, 0x4dbf, -0x4daa, 0x4da3, 0x4dcd, 0x4dce, 0x4d97, 0x4d78, 0x4e0a, 0x4eeb, 0x4ddb, 0x4f2f, 0x4dbe, 0x4e55, 0x4eca, 0x4e37, 0x4deb, 0x4d90, 0x4e6f, 0x4dbd, 0x4d88, 0x4e24, 0x4d99, 0x4d4a, 0x4dd8, 0x4ceb, 0x4d9c, 0x4e53, 0x4e45, 0x4d8f, 0x4dc8, 0x4e40, 0x4e47, 0x4dff, 0x4e47, 0x4dba, 0x4e4b, 0x4d96, 0x4dc2, 0x4db6, 0x4d80, 0x4dbc, 0x4d66, 0x4dec, 0x4d6b, 0x4e8e, 0x4e05, 0x4e1c, 0x4d0c, 0x4da3, 0x4e61, 0x4d3a, 0x4e7c, 0x4d5f, 0x4d0d, 0x4db2, 0x4db0, 0x4dec, 0x4dbd, 0x4d72, 0x4d40, 0x4db3, 0x4e06, 0x4e52, 0x4d18, 0x4e65, 0x4d80, 0x4d43, 0x4e0b, 0x4dc6, 0x4e60, 0x4e71, 0x4e0e, 0x4d92, 0x4e0a, 0x4d7c, 0x4dbb, 0x4d6b, 0x4df5, 0x4d64, 0x4d99, 0x4d9a, 0x4de1, 0x4d52, 0x4d93, 0x4de8, 0x4d70, 0x4e12, 0x4db2, 0x4d20, 0x4de8, 0x4df9, 0x4dcb, 0x4e62, 0x4e5e, 0x4dd3, 0x4d3f, 0x4d5a, -0x4d97, 0x4db8, 0x4e07, 0x4d81, 0x4e2e, 0x4db2, 0x4e2a, 0x4f25, 0x4ddf, 0x4f35, 0x4d9b, 0x4e84, 0x4ecf, 0x4df4, 0x4e15, 0x4e10, 0x4e45, 0x4e11, 0x4d9c, 0x4dda, 0x4e85, 0x4d3e, 0x4e4e, 0x4d9c, 0x4de0, 0x4e49, 0x4e53, 0x4d84, 0x4e03, 0x4eb8, 0x4e40, 0x4e82, 0x4e10, 0x4e2e, 0x4e7c, 0x4dd6, 0x4de8, 0x4d6f, 0x4db7, 0x4de3, 0x4e01, 0x4db7, 0x4da6, 0x4e61, 0x4e0a, 0x4e53, 0x4dc8, 0x4df9, 0x4ed6, 0x4d8b, 0x4ef9, 0x4da4, 0x4dd6, 0x4dc9, 0x4db2, 0x4dee, 0x4e8c, 0x4d86, 0x4d9c, 0x4e36, 0x4e13, 0x4ebd, 0x4d11, 0x4e28, 0x4d81, 0x4e22, 0x4e2f, 0x4e4f, 0x4ed6, 0x4e82, 0x4e2f, 0x4e17, 0x4e48, 0x4d87, 0x4e49, 0x4e4e, 0x4e39, 0x4e45, 0x4ddc, 0x4df7, 0x4e29, 0x4df2, 0x4dc2, 0x4eef, 0x4d9b, 0x4df4, 0x4e4a, 0x4d73, 0x4e0f, 0x4e7e, 0x4de6, 0x4e4c, 0x4e43, 0x4e12, 0x4e38, 0x4de6, -0x4dca, 0x4e05, 0x4e41, 0x4da4, 0x4e08, 0x4dc1, 0x4dfa, 0x4ed4, 0x4d4c, 0x4ee9, 0x4dfb, 0x4dd2, 0x4e70, 0x4ddc, 0x4d8e, 0x4dc3, 0x4e7b, 0x4dec, 0x4d8f, 0x4e28, 0x4e1d, 0x4d79, 0x4dde, 0x4db1, 0x4df1, 0x4dd5, 0x4e31, 0x4d3a, 0x4ddd, 0x4e3b, 0x4e47, 0x4df8, 0x4dec, 0x4d7f, 0x4e3c, 0x4d7f, 0x4d7f, 0x4d62, 0x4d46, 0x4dc9, 0x4df7, 0x4de7, 0x4ddf, 0x4e5c, 0x4dc1, 0x4e44, 0x4d43, 0x4db3, 0x4e4d, 0x4dae, 0x4e60, 0x4dbf, 0x4d71, 0x4de0, 0x4dba, 0x4dc1, 0x4e2a, 0x4d6d, 0x4dab, 0x4df8, 0x4de5, 0x4e56, 0x4d64, 0x4dcc, 0x4e01, 0x4dce, 0x4e3a, 0x4e88, 0x4dff, 0x4e6b, 0x4e35, 0x4e05, 0x4de3, 0x4dc4, 0x4e69, 0x4dc4, 0x4de5, 0x4df8, 0x4da5, 0x4e0e, 0x4d96, 0x4dc7, 0x4d53, 0x4ec2, 0x4d82, 0x4ddf, 0x4dac, 0x4d33, 0x4d9b, 0x4e30, 0x4d97, 0x4e3b, 0x4e89, 0x4e5c, 0x4db9, 0x4d9d, -0x4e27, 0x4e5c, 0x4f2b, 0x4e51, 0x4ee2, 0x4e60, 0x4f10, 0x4f9b, 0x4e52, 0x4f9e, 0x4e9d, 0x4e87, 0x4f8a, 0x4e8b, 0x4e8b, 0x4e96, 0x4f19, 0x4f34, 0x4e0a, 0x4ece, 0x4eec, 0x4e27, 0x4ea4, 0x4e3e, 0x4eb1, 0x4e34, 0x4ed1, 0x4ea7, 0x4f40, 0x4f9a, 0x4f51, 0x4e8e, 0x4f25, 0x4ec4, 0x4f12, 0x4ea6, 0x4e7c, 0x4e17, 0x4de8, 0x4e73, 0x4ebf, 0x4e45, 0x4e3c, 0x4f00, 0x4e94, 0x4f3d, 0x4e02, 0x4ea7, 0x4f5b, 0x4eab, 0x4f40, 0x4e4d, 0x4e05, 0x4e79, 0x4e13, 0x4e81, 0x4f20, 0x4e9d, 0x4e6d, 0x4eda, 0x4ec8, 0x4f9e, 0x4e39, 0x4ebb, 0x4de4, 0x4e67, 0x4ed6, 0x4f43, 0x4eef, 0x4f8e, 0x4edd, 0x4e5d, 0x4ebe, 0x4f3b, 0x4f37, 0x4e7a, 0x4ec0, 0x4ecc, 0x4f01, 0x4ef6, 0x4f29, 0x4e9d, 0x4e7a, 0x4ed0, 0x4e93, 0x4ef1, 0x4eb9, 0x4e43, 0x4eca, 0x4f54, 0x4e4a, 0x4e98, 0x4f5d, 0x4f33, 0x4e9e, 0x4e9f, -0x4dd7, 0x4ebb, 0x4e87, 0x4e2d, 0x4ed6, 0x4ed8, 0x4e71, 0x4f2b, 0x4e32, 0x4f42, 0x4eb7, 0x4e64, 0x4f8f, 0x4e1a, 0x4e53, 0x4ec8, 0x4e44, 0x4e5b, 0x4e7e, 0x4e80, 0x4ec2, 0x4e18, 0x4e55, 0x4e2e, 0x4e9e, 0x4ec8, 0x4e5f, 0x4dfb, 0x4e68, 0x4f3b, 0x4e83, 0x4e36, 0x4ec6, 0x4e3e, 0x4ee6, 0x4e26, 0x4e82, 0x4e57, 0x4e3b, 0x4e3d, 0x4e2f, 0x4e84, 0x4e1f, 0x4f3a, 0x4e2c, 0x4ebc, 0x4e1e, 0x4e4b, 0x4f06, 0x4e2a, 0x4f35, 0x4e4a, 0x4dc1, 0x4e5e, 0x4e0d, 0x4e33, 0x4e6b, 0x4daa, 0x4ddc, 0x4e74, 0x4e61, 0x4f4e, 0x4e23, 0x4e9d, 0x4dc1, 0x4df8, 0x4e6c, 0x4ed2, 0x4ea7, 0x4f25, 0x4e7b, 0x4e3e, 0x4e69, 0x4e17, 0x4ed4, 0x4e04, 0x4e81, 0x4e74, 0x4e3a, 0x4edf, 0x4e87, 0x4e5a, 0x4e63, 0x4ea2, 0x4ddd, 0x4eaf, 0x4eac, 0x4db0, 0x4ea1, 0x4efd, 0x4e60, 0x4e88, 0x4df4, 0x4f25, 0x4e13, 0x4e34, -0x4e0d, 0x4dd9, 0x4e1e, 0x4dbd, 0x4e05, 0x4e05, 0x4e9b, 0x4ef7, 0x4e05, 0x4ee9, 0x4e79, 0x4e50, 0x4f3d, 0x4e4d, 0x4e45, 0x4ec1, 0x4eaa, 0x4e11, 0x4da2, 0x4e41, 0x4e50, 0x4df9, 0x4e0e, 0x4dff, 0x4e54, 0x4e44, 0x4e2b, 0x4e1e, 0x4e8f, 0x4ef0, 0x4e44, 0x4e5a, 0x4e65, 0x4e53, 0x4e7c, 0x4e31, 0x4e00, 0x4d7c, 0x4e09, 0x4e2d, 0x4e8c, 0x4e18, 0x4def, 0x4e73, 0x4e1e, 0x4eb6, 0x4d9e, 0x4e23, 0x4eaa, 0x4e62, 0x4ee7, 0x4e4f, 0x4d89, 0x4e3c, 0x4e0f, 0x4e80, 0x4e2e, 0x4e16, 0x4df6, 0x4e79, 0x4e9e, 0x4ef9, 0x4d5f, 0x4e39, 0x4d87, 0x4e04, 0x4eda, 0x4e99, 0x4e75, 0x4f32, 0x4e55, 0x4e47, 0x4e23, 0x4e5a, 0x4eb0, 0x4e39, 0x4e6d, 0x4e3b, 0x4e5c, 0x4e89, 0x4ec6, 0x4e16, 0x4e36, 0x4f0b, 0x4d76, 0x4e1a, 0x4e5b, 0x4dc4, 0x4dfb, 0x4e5b, 0x4e5f, 0x4e8c, 0x4e8b, 0x4e7d, 0x4e14, 0x4df3, -0x4db1, 0x4da2, 0x4e28, 0x4dc6, 0x4e3d, 0x4e08, 0x4df4, 0x4e7e, 0x4db8, 0x4ee4, 0x4e5c, 0x4df9, 0x4eee, 0x4db3, 0x4daf, 0x4e26, 0x4e20, 0x4dee, 0x4df8, 0x4e2e, 0x4e2a, 0x4d7e, 0x4e32, 0x4d94, 0x4e1b, 0x4e49, 0x4e84, 0x4dc4, 0x4dff, 0x4ead, 0x4e55, 0x4e4a, 0x4e04, 0x4e07, 0x4ebb, 0x4dac, 0x4daf, 0x4ded, 0x4d53, 0x4d9a, 0x4dd7, 0x4de6, 0x4d5b, 0x4e3d, 0x4dff, 0x4ea8, 0x4d9d, 0x4da4, 0x4e1e, 0x4d92, 0x4e7a, 0x4d3e, 0x4d57, 0x4db5, 0x4d77, 0x4d96, 0x4e1a, 0x4d7a, 0x4d74, 0x4de0, 0x4dba, 0x4eb6, 0x4d49, 0x4e27, 0x4d55, 0x4dca, 0x4e02, 0x4e83, 0x4e6b, 0x4eaf, 0x4e2b, 0x4de9, 0x4e53, 0x4db5, 0x4e0b, 0x4dd7, 0x4dbe, 0x4df5, 0x4dd0, 0x4dc9, 0x4e66, 0x4d69, 0x4e0e, 0x4e3b, 0x4d50, 0x4dff, 0x4de3, 0x4d65, 0x4dd4, 0x4e0e, 0x4df0, 0x4e52, 0x4ee9, 0x4e3e, 0x4e53, 0x4dbd, -0x4d94, 0x4d90, 0x4e41, 0x4d3c, 0x4de7, 0x4d6d, 0x4dfa, 0x4e97, 0x4de8, 0x4e5c, 0x4dde, 0x4dfe, 0x4e81, 0x4d8a, 0x4d99, 0x4dce, 0x4e82, 0x4de2, 0x4dba, 0x4dab, 0x4dc5, 0x4d4e, 0x4d64, 0x4db5, 0x4d8c, 0x4dcb, 0x4dc9, 0x4d74, 0x4dfa, 0x4e2f, 0x4e29, 0x4db3, 0x4deb, 0x4d7e, 0x4ddd, 0x4d9a, 0x4d6e, 0x4da2, 0x4cdf, 0x4d82, 0x4da5, 0x4dd1, 0x4da7, 0x4e45, 0x4dba, 0x4df1, 0x4d49, 0x4d32, 0x4e97, 0x4d3f, 0x4e88, 0x4d72, 0x4cfe, 0x4dd3, 0x4d33, 0x4d53, 0x4db0, 0x4d6b, 0x4d5f, 0x4e02, 0x4dcb, 0x4e93, 0x4d95, 0x4dc5, 0x4da2, 0x4d86, 0x4ddf, 0x4df4, 0x4dac, 0x4e0d, 0x4dd1, 0x4d3f, 0x4df6, 0x4d42, 0x4e24, 0x4dac, 0x4e2e, 0x4da2, 0x4db6, 0x4df0, 0x4dd6, 0x4d6f, 0x4d6b, 0x4e2f, 0x4d51, 0x4e39, 0x4dfd, 0x4d12, 0x4d9a, 0x4ded, 0x4d3a, 0x4dec, 0x4e1b, 0x4e0d, 0x4dbc, 0x4dad, -0x4d87, 0x4dd5, 0x4e10, 0x4dd0, 0x4e3f, 0x4ddf, 0x4ea2, 0x4ec6, 0x4ddd, 0x4f15, 0x4df0, 0x4e47, 0x4ed0, 0x4dcc, 0x4dfa, 0x4de6, 0x4e44, 0x4dd7, 0x4da0, 0x4e0c, 0x4db8, 0x4d9c, 0x4dde, 0x4dcf, 0x4dfe, 0x4e85, 0x4e7b, 0x4da6, 0x4e87, 0x4e73, 0x4e85, 0x4e39, 0x4de2, 0x4e46, 0x4e55, 0x4dc6, 0x4d80, 0x4d68, 0x4d9e, 0x4e35, 0x4e1c, 0x4e41, 0x4d37, 0x4eab, 0x4e25, 0x4ea0, 0x4dab, 0x4dd5, 0x4e40, 0x4dc4, 0x4ea6, 0x4e0b, 0x4d35, 0x4ddd, 0x4d6f, 0x4dec, 0x4e3e, 0x4d86, 0x4dc7, 0x4e1b, 0x4dd1, 0x4e7d, 0x4d5b, 0x4e56, 0x4d3e, 0x4dc6, 0x4e47, 0x4e41, 0x4deb, 0x4ea3, 0x4e0b, 0x4e1e, 0x4e4f, 0x4d7d, 0x4e69, 0x4e05, 0x4e07, 0x4de1, 0x4dd4, 0x4df4, 0x4e23, 0x4daa, 0x4d5c, 0x4e50, 0x4d8c, 0x4e56, 0x4df2, 0x4d1b, 0x4db1, 0x4e56, 0x4d5c, 0x4e3b, 0x4ea7, 0x4e3d, 0x4dc1, 0x4dce, -0x4dd5, 0x4e1b, 0x4f0a, 0x4d93, 0x4e7e, 0x4e1d, 0x4e8c, 0x4f7b, 0x4df4, 0x4f3f, 0x4e9f, 0x4e5e, 0x4f33, 0x4e21, 0x4e55, 0x4e7b, 0x4ec6, 0x4e75, 0x4e2f, 0x4e95, 0x4ead, 0x4df1, 0x4e00, 0x4e1b, 0x4e6a, 0x4e69, 0x4f05, 0x4dce, 0x4e65, 0x4ecc, 0x4e72, 0x4e86, 0x4ea7, 0x4e4c, 0x4ef1, 0x4e36, 0x4e28, 0x4dd8, 0x4dca, 0x4e83, 0x4e23, 0x4e65, 0x4e7f, 0x4f31, 0x4ebf, 0x4e83, 0x4d66, 0x4e3d, 0x4e9e, 0x4e64, 0x4eba, 0x4e12, 0x4d90, 0x4e34, 0x4e11, 0x4e31, 0x4e89, 0x4de1, 0x4dca, 0x4e9f, 0x4e43, 0x4f58, 0x4dc9, 0x4e96, 0x4e38, 0x4dfa, 0x4e94, 0x4eb1, 0x4ed4, 0x4f1b, 0x4ee2, 0x4e92, 0x4e30, 0x4e86, 0x4eb1, 0x4e4e, 0x4ea0, 0x4e74, 0x4e52, 0x4ebc, 0x4edd, 0x4dd8, 0x4e1d, 0x4ee2, 0x4df0, 0x4eb0, 0x4e12, 0x4dd4, 0x4e3d, 0x4e9e, 0x4e31, 0x4e44, 0x4ecb, 0x4ebb, 0x4e2c, 0x4e6d, -0x4dc2, 0x4e12, 0x4e1c, 0x4de3, 0x4dfc, 0x4df2, 0x4e09, 0x4ed4, 0x4e52, 0x4f49, 0x4e69, 0x4dc9, 0x4f08, 0x4e73, 0x4e21, 0x4e51, 0x4e85, 0x4e2d, 0x4da5, 0x4e0c, 0x4e09, 0x4d7b, 0x4de6, 0x4dec, 0x4e9e, 0x4e06, 0x4ea8, 0x4da2, 0x4e74, 0x4eac, 0x4e13, 0x4e45, 0x4e43, 0x4dea, 0x4e85, 0x4dbb, 0x4df5, 0x4dc4, 0x4d87, 0x4e18, 0x4de4, 0x4e20, 0x4dd5, 0x4ebd, 0x4e32, 0x4e40, 0x4de9, 0x4e07, 0x4e5a, 0x4de1, 0x4f32, 0x4e22, 0x4d57, 0x4e23, 0x4ded, 0x4dd4, 0x4e11, 0x4dd4, 0x4dfd, 0x4e5d, 0x4e9f, 0x4ed0, 0x4d86, 0x4ea8, 0x4d69, 0x4de3, 0x4e2b, 0x4ec8, 0x4e3c, 0x4eca, 0x4e2f, 0x4de7, 0x4e3e, 0x4e01, 0x4e59, 0x4df2, 0x4e82, 0x4e3a, 0x4e45, 0x4e91, 0x4e9a, 0x4dc0, 0x4e61, 0x4e8d, 0x4d51, 0x4e31, 0x4dc1, 0x4d96, 0x4dad, 0x4e37, 0x4e2b, 0x4e8d, 0x4e69, 0x4dfe, 0x4e37, 0x4ddd, -0x4e19, 0x4e6d, 0x4ec5, 0x4e2a, 0x4e9c, 0x4e04, 0x4ec6, 0x4f61, 0x4e1f, 0x4f72, 0x4e4d, 0x4e51, 0x4f2c, 0x4e6a, 0x4e48, 0x4e99, 0x4edc, 0x4dd0, 0x4e2e, 0x4eb1, 0x4e52, 0x4de8, 0x4e5b, 0x4e0a, 0x4e2c, 0x4e35, 0x4ef2, 0x4dd0, 0x4eff, 0x4f6d, 0x4ef2, 0x4eca, 0x4e90, 0x4e6e, 0x4ece, 0x4e89, 0x4dfc, 0x4e16, 0x4dcd, 0x4eb7, 0x4e79, 0x4ee7, 0x4e2e, 0x4ec0, 0x4e93, 0x4ec0, 0x4dc4, 0x4e5a, 0x4f28, 0x4e17, 0x4efc, 0x4e44, 0x4dbc, 0x4e77, 0x4df3, 0x4eda, 0x4ec2, 0x4e34, 0x4e15, 0x4e78, 0x4eb2, 0x4f87, 0x4da1, 0x4f1e, 0x4dcb, 0x4e72, 0x4eea, 0x4e8c, 0x4edb, 0x4f22, 0x4ecd, 0x4e54, 0x4eb8, 0x4e87, 0x4ef0, 0x4ea3, 0x4e57, 0x4e79, 0x4e85, 0x4e82, 0x4ebb, 0x4e3c, 0x4e29, 0x4ec4, 0x4e06, 0x4ea8, 0x4eb7, 0x4dc5, 0x4e31, 0x4e8a, 0x4e72, 0x4eac, 0x4ed9, 0x4f1d, 0x4e7e, 0x4e68, -0x4e35, 0x4dd4, 0x4e38, 0x4dda, 0x4e05, 0x4db1, 0x4e5a, 0x4f1a, 0x4e2b, 0x4f39, 0x4e30, 0x4e96, 0x4ecf, 0x4df6, 0x4dd0, 0x4ddc, 0x4e5e, 0x4ddc, 0x4d6c, 0x4e50, 0x4dd5, 0x4dc0, 0x4e05, 0x4d65, 0x4e16, 0x4e46, 0x4e57, 0x4dc0, 0x4e5c, 0x4ed2, 0x4e79, 0x4e11, 0x4e1a, 0x4e14, 0x4e85, 0x4e2f, 0x4dc9, 0x4dd8, 0x4d4c, 0x4ddb, 0x4e37, 0x4e35, 0x4dba, 0x4eb9, 0x4dee, 0x4ed1, 0x4d7c, 0x4dfc, 0x4e86, 0x4d78, 0x4e88, 0x4e1e, 0x4d54, 0x4dc0, 0x4da2, 0x4e0f, 0x4e83, 0x4db6, 0x4dc1, 0x4e78, 0x4e0a, 0x4e34, 0x4d73, 0x4e83, 0x4d8c, 0x4dce, 0x4e55, 0x4e11, 0x4e83, 0x4e43, 0x4e7c, 0x4e05, 0x4e93, 0x4ddf, 0x4e3f, 0x4dc4, 0x4e19, 0x4e6c, 0x4db9, 0x4e54, 0x4e9e, 0x4da3, 0x4dbe, 0x4e6a, 0x4db0, 0x4e1a, 0x4e57, 0x4d7b, 0x4e6e, 0x4eac, 0x4da4, 0x4e9a, 0x4e6c, 0x4e7f, 0x4de6, 0x4e0c, -0x4e70, 0x4e5d, 0x4ea9, 0x4e2c, 0x4ee1, 0x4e13, 0x4e9d, 0x4f97, 0x4e21, 0x4ff6, 0x4e48, 0x4e57, 0x4f7e, 0x4e75, 0x4e56, 0x4e79, 0x4f65, 0x4e3f, 0x4da0, 0x4e90, 0x4edc, 0x4e8e, 0x4e4d, 0x4e51, 0x4e9c, 0x4e2a, 0x4e9e, 0x4e30, 0x4e4c, 0x4edf, 0x4ef8, 0x4e91, 0x4eb6, 0x4e71, 0x4ead, 0x4e48, 0x4e87, 0x4de3, 0x4df8, 0x4e29, 0x4e76, 0x4ebb, 0x4e35, 0x4ef6, 0x4e9e, 0x4fa9, 0x4dd5, 0x4e21, 0x4ec4, 0x4e4a, 0x4f80, 0x4e0d, 0x4e07, 0x4e07, 0x4e45, 0x4e40, 0x4ef9, 0x4e38, 0x4dd3, 0x4e67, 0x4e85, 0x4ecf, 0x4dde, 0x4eaf, 0x4e1a, 0x4e83, 0x4e6d, 0x4f2c, 0x4ee4, 0x4eab, 0x4e78, 0x4e42, 0x4e9f, 0x4e30, 0x4e70, 0x4e27, 0x4eee, 0x4e55, 0x4e96, 0x4e9f, 0x4e9c, 0x4e3e, 0x4e46, 0x4f72, 0x4e1a, 0x4e80, 0x4eb9, 0x4e04, 0x4e5e, 0x4ee7, 0x4e43, 0x4ec0, 0x4f4b, 0x4e59, 0x4e76, 0x4e27, -0x4dd1, 0x4dbf, 0x4ec4, 0x4df3, 0x4e12, 0x4e04, 0x4e47, 0x4f88, 0x4e3e, 0x4f9c, 0x4e70, 0x4eb7, 0x4f21, 0x4e20, 0x4e02, 0x4ec1, 0x4f47, 0x4e07, 0x4e00, 0x4e95, 0x4e30, 0x4dd6, 0x4dee, 0x4d9d, 0x4e09, 0x4e05, 0x4ec7, 0x4ddb, 0x4e57, 0x4f16, 0x4e8d, 0x4e60, 0x4e58, 0x4e2e, 0x4ed0, 0x4df3, 0x4e32, 0x4df6, 0x4d99, 0x4def, 0x4e67, 0x4e3d, 0x4e21, 0x4f1d, 0x4e24, 0x4ef2, 0x4da9, 0x4e02, 0x4eea, 0x4e2d, 0x4f3d, 0x4e61, 0x4de9, 0x4e51, 0x4db4, 0x4e1e, 0x4e8c, 0x4e23, 0x4dc5, 0x4e4f, 0x4e56, 0x4f11, 0x4d7f, 0x4eda, 0x4de8, 0x4e06, 0x4e52, 0x4e14, 0x4e97, 0x4f22, 0x4e29, 0x4e43, 0x4e97, 0x4e37, 0x4e58, 0x4e4c, 0x4e7f, 0x4e69, 0x4e35, 0x4e48, 0x4efe, 0x4de6, 0x4e23, 0x4e4f, 0x4df0, 0x4e55, 0x4e59, 0x4daf, 0x4e32, 0x4e56, 0x4dea, 0x4ea4, 0x4e72, 0x4e7f, 0x4e22, 0x4e13, -0x4d97, 0x4d55, 0x4d67, 0x4d11, 0x4d7c, 0x4d95, 0x4e13, 0x4ea2, 0x4e15, 0x4ef3, 0x4db7, 0x4db6, 0x4eb7, 0x4d99, 0x4e38, 0x4d63, 0x4df6, 0x4da1, 0x4d6d, 0x4d9c, 0x4dda, 0x4d83, 0x4db0, 0x4d74, 0x4db4, 0x4e71, 0x4e1a, 0x4d50, 0x4dec, 0x4e26, 0x4df3, 0x4dd0, 0x4ddf, 0x4d85, 0x4dfb, 0x4da2, 0x4ddc, 0x4d82, 0x4d45, 0x4d6e, 0x4d55, 0x4d8f, 0x4d1e, 0x4de2, 0x4d78, 0x4e5d, 0x4d4b, 0x4da0, 0x4e24, 0x4d4a, 0x4e82, 0x4dc8, 0x4d13, 0x4d73, 0x4d4e, 0x4d5c, 0x4de9, 0x4d89, 0x4d71, 0x4db5, 0x4e0d, 0x4e4b, 0x4d15, 0x4e2f, 0x4d88, 0x4da4, 0x4de9, 0x4ded, 0x4e35, 0x4e27, 0x4dcb, 0x4d4c, 0x4dc5, 0x4d59, 0x4de3, 0x4da6, 0x4e7e, 0x4dfa, 0x4ddc, 0x4dfc, 0x4e23, 0x4d71, 0x4d5d, 0x4e2a, 0x4d4c, 0x4daa, 0x4d9c, 0x4cff, 0x4ddd, 0x4df5, 0x4d8f, 0x4dd1, 0x4de1, 0x4d5f, 0x4e4c, 0x4d88, -0x4d87, 0x4dde, 0x4e24, 0x4dd2, 0x4e20, 0x4e17, 0x4e1d, 0x4f2c, 0x4d91, 0x4f09, 0x4e23, 0x4e27, 0x4ec8, 0x4e1a, 0x4dcd, 0x4e00, 0x4e75, 0x4d91, 0x4d53, 0x4db2, 0x4e16, 0x4dac, 0x4e22, 0x4dfb, 0x4e20, 0x4dee, 0x4e47, 0x4d7a, 0x4e7b, 0x4e9e, 0x4dff, 0x4e26, 0x4e2e, 0x4dc3, 0x4ec2, 0x4da2, 0x4dca, 0x4d87, 0x4da3, 0x4e18, 0x4dd7, 0x4e50, 0x4d98, 0x4e92, 0x4e26, 0x4e14, 0x4d10, 0x4e33, 0x4e59, 0x4db0, 0x4e95, 0x4da1, 0x4d9b, 0x4df6, 0x4d2d, 0x4deb, 0x4e1b, 0x4d76, 0x4da5, 0x4df7, 0x4dd6, 0x4ea5, 0x4d40, 0x4e65, 0x4d83, 0x4e04, 0x4df1, 0x4e6e, 0x4e48, 0x4ee2, 0x4e35, 0x4da7, 0x4da9, 0x4dd4, 0x4e79, 0x4db5, 0x4e37, 0x4dc8, 0x4d68, 0x4e17, 0x4e90, 0x4d82, 0x4dec, 0x4dfe, 0x4d30, 0x4d85, 0x4e2a, 0x4d6d, 0x4de9, 0x4e64, 0x4da7, 0x4e1c, 0x4e59, 0x4e02, 0x4e09, 0x4d96, -0x4df9, 0x4e01, 0x4e8b, 0x4e85, 0x4ed5, 0x4e7a, 0x4e85, 0x4eed, 0x4e77, 0x4f1c, 0x4e7f, 0x4eb9, 0x4f54, 0x4e45, 0x4eaa, 0x4e35, 0x4ec6, 0x4e41, 0x4d94, 0x4ec8, 0x4e7b, 0x4e37, 0x4e55, 0x4df2, 0x4e9f, 0x4e53, 0x4ef9, 0x4e48, 0x4ebc, 0x4ee7, 0x4eb1, 0x4e74, 0x4ea0, 0x4ddc, 0x4e90, 0x4e52, 0x4e1c, 0x4de6, 0x4dbe, 0x4e24, 0x4e5c, 0x4e12, 0x4dc0, 0x4ebd, 0x4e07, 0x4f14, 0x4e16, 0x4e15, 0x4f3c, 0x4e16, 0x4f0c, 0x4e40, 0x4d4d, 0x4e9d, 0x4dff, 0x4dbc, 0x4e61, 0x4e0d, 0x4e13, 0x4e52, 0x4e85, 0x4f06, 0x4e05, 0x4e79, 0x4d69, 0x4dcf, 0x4ed8, 0x4e6b, 0x4e76, 0x4f03, 0x4e57, 0x4e66, 0x4edb, 0x4e8f, 0x4e75, 0x4e3c, 0x4e88, 0x4e9f, 0x4e6d, 0x4e35, 0x4ef2, 0x4e30, 0x4e50, 0x4e68, 0x4df4, 0x4e6b, 0x4e3d, 0x4da2, 0x4e5d, 0x4ed7, 0x4e33, 0x4ec0, 0x4f16, 0x4eb7, 0x4e7a, 0x4e3a, -0x4db5, 0x4dff, 0x4e06, 0x4e03, 0x4e6e, 0x4e3e, 0x4e52, 0x4edb, 0x4e09, 0x4f15, 0x4e4b, 0x4e9c, 0x4f54, 0x4d9e, 0x4dbe, 0x4e42, 0x4e0c, 0x4e1e, 0x4dd6, 0x4e41, 0x4e17, 0x4d7b, 0x4de5, 0x4deb, 0x4df3, 0x4e40, 0x4e41, 0x4e02, 0x4e89, 0x4f23, 0x4e46, 0x4e53, 0x4e20, 0x4e27, 0x4ee9, 0x4df9, 0x4e15, 0x4e38, 0x4df4, 0x4e14, 0x4e1a, 0x4e01, 0x4db3, 0x4ebc, 0x4d8c, 0x4e77, 0x4d53, 0x4dbd, 0x4ed1, 0x4dde, 0x4eb1, 0x4dd4, 0x4db1, 0x4e08, 0x4d6e, 0x4da6, 0x4e43, 0x4d66, 0x4dbe, 0x4e1d, 0x4e10, 0x4f3f, 0x4d2a, 0x4e1f, 0x4da6, 0x4dca, 0x4e6b, 0x4e59, 0x4e81, 0x4f21, 0x4dfd, 0x4e23, 0x4e33, 0x4e48, 0x4eb9, 0x4e08, 0x4dd9, 0x4e5c, 0x4df8, 0x4e6e, 0x4e16, 0x4dca, 0x4e50, 0x4e5c, 0x4d71, 0x4e32, 0x4e43, 0x4d64, 0x4dfe, 0x4ee3, 0x4d83, 0x4e66, 0x4e3d, 0x4eeb, 0x4e28, 0x4ddf, -0x4e3e, 0x4e49, 0x4ee3, 0x4e3f, 0x4ef6, 0x4eac, 0x4ea8, 0x4f54, 0x4ea4, 0x4fdf, 0x4e91, 0x4eb4, 0x4f8a, 0x4e75, 0x4e81, 0x4e8e, 0x4f45, 0x4e2f, 0x4e26, 0x4edd, 0x4ed4, 0x4e5b, 0x4e64, 0x4de7, 0x4e6b, 0x4e8b, 0x4f22, 0x4e3b, 0x4e8e, 0x4f34, 0x4ed1, 0x4edd, 0x4eaf, 0x4e27, 0x4ef4, 0x4e73, 0x4ea4, 0x4e3b, 0x4da0, 0x4e2d, 0x4e7c, 0x4e81, 0x4e2e, 0x4f31, 0x4e48, 0x4f48, 0x4e39, 0x4e7c, 0x4f0f, 0x4df3, 0x4f12, 0x4e19, 0x4dcb, 0x4e4f, 0x4e16, 0x4dea, 0x4eb6, 0x4e0b, 0x4e3c, 0x4ea1, 0x4e48, 0x4f80, 0x4dd3, 0x4ed8, 0x4e21, 0x4e47, 0x4f42, 0x4f09, 0x4eec, 0x4ef0, 0x4e6e, 0x4ec3, 0x4ed3, 0x4e99, 0x4ee3, 0x4e24, 0x4ebc, 0x4eb2, 0x4e78, 0x4e8a, 0x4f01, 0x4e89, 0x4e67, 0x4ed7, 0x4e1d, 0x4e37, 0x4e9f, 0x4e03, 0x4e95, 0x4f02, 0x4df4, 0x4efe, 0x4f55, 0x4ee1, 0x4eb7, 0x4e4f, -0x4d92, 0x4dde, 0x4e21, 0x4d5d, 0x4e90, 0x4e15, 0x4e89, 0x4ea3, 0x4deb, 0x4f4c, 0x4ec4, 0x4e70, 0x4eda, 0x4e2f, 0x4e38, 0x4e19, 0x4ecf, 0x4e55, 0x4dbc, 0x4e20, 0x4e52, 0x4de4, 0x4de0, 0x4e1e, 0x4db4, 0x4e72, 0x4e1b, 0x4dd5, 0x4e30, 0x4ea3, 0x4e57, 0x4ea3, 0x4e27, 0x4e31, 0x4ede, 0x4dd0, 0x4df6, 0x4e00, 0x4dca, 0x4e1c, 0x4e49, 0x4e2b, 0x4ddc, 0x4eb6, 0x4e62, 0x4ed8, 0x4d69, 0x4e49, 0x4eb5, 0x4de9, 0x4eeb, 0x4df2, 0x4d4c, 0x4e79, 0x4dba, 0x4e24, 0x4e5b, 0x4dd0, 0x4e06, 0x4e3e, 0x4e41, 0x4f2c, 0x4dbb, 0x4e7a, 0x4dff, 0x4d9f, 0x4e54, 0x4e51, 0x4e3a, 0x4f00, 0x4e88, 0x4e3d, 0x4eaa, 0x4e47, 0x4eb3, 0x4e57, 0x4e32, 0x4e26, 0x4e80, 0x4efc, 0x4f49, 0x4e0b, 0x4dfb, 0x4e9b, 0x4d69, 0x4e31, 0x4deb, 0x4d4e, 0x4de8, 0x4e9a, 0x4e12, 0x4e74, 0x4e6a, 0x4e94, 0x4e34, 0x4de3, -0x4de1, 0x4e39, 0x4e47, 0x4de2, 0x4e53, 0x4e02, 0x4e7e, 0x4ec5, 0x4e01, 0x4f33, 0x4e30, 0x4dfc, 0x4f1f, 0x4e5c, 0x4e28, 0x4e30, 0x4ea0, 0x4e23, 0x4dd5, 0x4e19, 0x4e43, 0x4dc9, 0x4e8f, 0x4dd0, 0x4e3e, 0x4e3e, 0x4e9a, 0x4dd4, 0x4e31, 0x4f06, 0x4e76, 0x4e21, 0x4e7f, 0x4e1f, 0x4eb7, 0x4e0c, 0x4dde, 0x4dc8, 0x4de7, 0x4dfe, 0x4e10, 0x4e2b, 0x4ded, 0x4edf, 0x4e37, 0x4e72, 0x4dec, 0x4e3a, 0x4ebb, 0x4ddf, 0x4ec0, 0x4dbe, 0x4d1e, 0x4e87, 0x4dc6, 0x4e0b, 0x4e5a, 0x4de7, 0x4dcd, 0x4e96, 0x4e66, 0x4eda, 0x4d77, 0x4e4a, 0x4da4, 0x4df5, 0x4e8d, 0x4e4c, 0x4e68, 0x4ede, 0x4e5d, 0x4dd1, 0x4e06, 0x4e2d, 0x4e0c, 0x4e46, 0x4e5e, 0x4e15, 0x4de8, 0x4e6c, 0x4e54, 0x4daa, 0x4df4, 0x4ed0, 0x4d80, 0x4e1a, 0x4df9, 0x4dcb, 0x4dee, 0x4e1c, 0x4e17, 0x4e5c, 0x4e8c, 0x4e33, 0x4dd3, 0x4e27, -0x4d34, 0x4dbb, 0x4e7d, 0x4d47, 0x4dfd, 0x4d0b, 0x4ddc, 0x4e68, 0x4dc6, 0x4ecd, 0x4d9c, 0x4d7d, 0x4ee0, 0x4d69, 0x4ded, 0x4dca, 0x4e3c, 0x4dcd, 0x4d5e, 0x4dbf, 0x4e4c, 0x4db0, 0x4db2, 0x4d97, 0x4da9, 0x4d9f, 0x4e43, 0x4d2a, 0x4dab, 0x4e3d, 0x4e06, 0x4dd4, 0x4daa, 0x4d79, 0x4de6, 0x4de1, 0x4e01, 0x4d62, 0x4d05, 0x4dc7, 0x4ea2, 0x4db4, 0x4d8b, 0x4e6e, 0x4ddd, 0x4e74, 0x4d00, 0x4d9a, 0x4e77, 0x4ddc, 0x4e8b, 0x4dd1, 0x4ccc, 0x4e3f, 0x4d93, 0x4e15, 0x4e91, 0x4de6, 0x4d2c, 0x4e2d, 0x4e02, 0x4ea1, 0x4daf, 0x4e3f, 0x4d8b, 0x4db9, 0x4dde, 0x4e0e, 0x4de3, 0x4e50, 0x4e05, 0x4d89, 0x4e03, 0x4e13, 0x4e4e, 0x4d9c, 0x4df4, 0x4e2d, 0x4df6, 0x4e00, 0x4df1, 0x4ddd, 0x4d7e, 0x4e68, 0x4d6c, 0x4e07, 0x4dca, 0x4d0b, 0x4dba, 0x4dde, 0x4e18, 0x4db6, 0x4dc8, 0x4e2b, 0x4dfa, 0x4d96, -0x4d85, 0x4dc7, 0x4e03, 0x4dc7, 0x4ddd, 0x4dce, 0x4e82, 0x4f1b, 0x4e5b, 0x4f6b, 0x4ec1, 0x4e3e, 0x4f42, 0x4e4a, 0x4e5e, 0x4e3c, 0x4e55, 0x4e43, 0x4dbe, 0x4e0d, 0x4e30, 0x4d9f, 0x4e29, 0x4df5, 0x4e4f, 0x4e49, 0x4e01, 0x4dc1, 0x4e7c, 0x4e7f, 0x4e9d, 0x4e1b, 0x4e00, 0x4e55, 0x4e85, 0x4e25, 0x4e0b, 0x4da9, 0x4da2, 0x4e0e, 0x4e49, 0x4e9b, 0x4ded, 0x4e7f, 0x4df3, 0x4ea5, 0x4d68, 0x4dd6, 0x4ec1, 0x4db5, 0x4ed0, 0x4e11, 0x4d68, 0x4e0c, 0x4e37, 0x4e5f, 0x4e8a, 0x4d98, 0x4e15, 0x4e34, 0x4e33, 0x4ef1, 0x4dc1, 0x4e90, 0x4dd5, 0x4dfb, 0x4e50, 0x4eb3, 0x4ebf, 0x4f41, 0x4e9b, 0x4e12, 0x4e83, 0x4df5, 0x4e9e, 0x4e2f, 0x4e5c, 0x4dfd, 0x4e64, 0x4ea9, 0x4ec7, 0x4e31, 0x4e1b, 0x4eb6, 0x4ddc, 0x4e68, 0x4e72, 0x4d96, 0x4e27, 0x4e93, 0x4dd6, 0x4e70, 0x4e8a, 0x4e37, 0x4e0b, 0x4e0e, -0x4e2a, 0x4db0, 0x4e2a, 0x4d72, 0x4dbf, 0x4e19, 0x4e05, 0x4ea8, 0x4dfa, 0x4eed, 0x4e02, 0x4e06, 0x4e93, 0x4de1, 0x4e4e, 0x4da8, 0x4e27, 0x4d5d, 0x4dc5, 0x4e0c, 0x4e4f, 0x4e0a, 0x4dc2, 0x4da0, 0x4db7, 0x4ddf, 0x4e72, 0x4dc6, 0x4e8d, 0x4e41, 0x4e66, 0x4e35, 0x4dc7, 0x4e21, 0x4e2d, 0x4df3, 0x4df3, 0x4d7e, 0x4da9, 0x4e2e, 0x4e07, 0x4ded, 0x4d9d, 0x4e6c, 0x4e27, 0x4ec2, 0x4d98, 0x4e01, 0x4e73, 0x4d6e, 0x4ed1, 0x4d9e, 0x4d36, 0x4de8, 0x4da2, 0x4e1c, 0x4dcb, 0x4de2, 0x4d8c, 0x4e31, 0x4e44, 0x4eee, 0x4d69, 0x4dd4, 0x4d7e, 0x4de5, 0x4e35, 0x4e4f, 0x4e55, 0x4e9c, 0x4e58, 0x4da4, 0x4e09, 0x4dd2, 0x4e27, 0x4dec, 0x4e42, 0x4e28, 0x4e50, 0x4e66, 0x4e37, 0x4e51, 0x4dd0, 0x4ebe, 0x4d62, 0x4e19, 0x4e4e, 0x4d5a, 0x4e12, 0x4e5d, 0x4ddc, 0x4e4c, 0x4e8f, 0x4e44, 0x4e84, 0x4dbe, -0x4d61, 0x4dfd, 0x4ded, 0x4ddc, 0x4e50, 0x4d9c, 0x4e71, 0x4e90, 0x4e16, 0x4f8b, 0x4e5d, 0x4e68, 0x4f60, 0x4e08, 0x4e2a, 0x4e27, 0x4f17, 0x4e21, 0x4d68, 0x4e1d, 0x4dea, 0x4de6, 0x4dd9, 0x4d88, 0x4e27, 0x4e43, 0x4e60, 0x4da5, 0x4e57, 0x4f23, 0x4e7d, 0x4e5f, 0x4e69, 0x4dfe, 0x4ebf, 0x4d9b, 0x4e4f, 0x4de4, 0x4d8e, 0x4dfa, 0x4e03, 0x4e22, 0x4df2, 0x4e90, 0x4e18, 0x4e72, 0x4cf7, 0x4dfe, 0x4e7e, 0x4dfa, 0x4e98, 0x4dd4, 0x4d98, 0x4e42, 0x4de0, 0x4e02, 0x4ec0, 0x4dcb, 0x4d4f, 0x4e5a, 0x4df3, 0x4f15, 0x4d77, 0x4e51, 0x4da6, 0x4e02, 0x4de0, 0x4e2d, 0x4ea4, 0x4e88, 0x4dec, 0x4df1, 0x4e0a, 0x4e5a, 0x4e9c, 0x4e02, 0x4df8, 0x4e2c, 0x4e4a, 0x4e9a, 0x4e7b, 0x4d92, 0x4e1c, 0x4e88, 0x4ddb, 0x4e52, 0x4e18, 0x4d6c, 0x4dde, 0x4eb1, 0x4dc8, 0x4e2d, 0x4e24, 0x4df0, 0x4dea, 0x4e1e, -0x4daf, 0x4da3, 0x4e3a, 0x4dec, 0x4e70, 0x4d93, 0x4e3a, 0x4e83, 0x4df9, 0x4efd, 0x4e07, 0x4e51, 0x4f5d, 0x4dde, 0x4e0b, 0x4dfc, 0x4e45, 0x4ddc, 0x4d75, 0x4dc9, 0x4df3, 0x4d8d, 0x4de0, 0x4da4, 0x4e37, 0x4e7a, 0x4e46, 0x4dc8, 0x4e2e, 0x4ebd, 0x4e27, 0x4e67, 0x4e3e, 0x4e2f, 0x4e5f, 0x4d98, 0x4e5f, 0x4d6e, 0x4da8, 0x4dc7, 0x4dd5, 0x4e31, 0x4ddb, 0x4e89, 0x4de0, 0x4e73, 0x4d87, 0x4dd9, 0x4ea2, 0x4dae, 0x4e92, 0x4dc9, 0x4d4f, 0x4df1, 0x4e02, 0x4df1, 0x4e69, 0x4de0, 0x4d7f, 0x4e39, 0x4dc3, 0x4e99, 0x4d2f, 0x4e69, 0x4d99, 0x4d5a, 0x4e3d, 0x4e3b, 0x4e74, 0x4eac, 0x4e2d, 0x4e43, 0x4e44, 0x4e36, 0x4e2d, 0x4dc2, 0x4e43, 0x4e3a, 0x4e22, 0x4de6, 0x4e76, 0x4d64, 0x4e25, 0x4e7c, 0x4dc2, 0x4e51, 0x4daa, 0x4d57, 0x4e4f, 0x4e55, 0x4db5, 0x4df2, 0x4e66, 0x4e42, 0x4e18, 0x4e30, -0x4df6, 0x4e52, 0x4e8b, 0x4da7, 0x4e2b, 0x4e27, 0x4e8a, 0x4f5e, 0x4e20, 0x4fd0, 0x4e78, 0x4ed1, 0x4ef4, 0x4e3b, 0x4e31, 0x4e7c, 0x4ec6, 0x4de8, 0x4e00, 0x4e9b, 0x4e95, 0x4df6, 0x4e8f, 0x4e58, 0x4e3b, 0x4e7a, 0x4ea5, 0x4e09, 0x4ea0, 0x4f19, 0x4e5c, 0x4e85, 0x4e5f, 0x4e71, 0x4e94, 0x4e66, 0x4e34, 0x4dfd, 0x4ddc, 0x4e1d, 0x4e27, 0x4e64, 0x4e43, 0x4eb2, 0x4e7d, 0x4f30, 0x4e1a, 0x4e05, 0x4f21, 0x4dde, 0x4f53, 0x4e6f, 0x4e0a, 0x4e5e, 0x4dd2, 0x4e50, 0x4ee9, 0x4e05, 0x4dab, 0x4e4b, 0x4eb3, 0x4f2d, 0x4e0a, 0x4ec8, 0x4dbf, 0x4e3f, 0x4eca, 0x4ec0, 0x4ed5, 0x4f2c, 0x4e9c, 0x4e3d, 0x4ebc, 0x4e31, 0x4e9c, 0x4e33, 0x4e4e, 0x4e9c, 0x4e15, 0x4edc, 0x4ee4, 0x4e68, 0x4dd4, 0x4ef6, 0x4de9, 0x4e52, 0x4ebb, 0x4d9b, 0x4e7b, 0x4f28, 0x4e7d, 0x4e9c, 0x4e77, 0x4e80, 0x4e9f, 0x4e17, -0x4e60, 0x4e53, 0x4e8b, 0x4e28, 0x4e69, 0x4e47, 0x4e69, 0x4f88, 0x4dfc, 0x4f2c, 0x4e91, 0x4e75, 0x4f10, 0x4ecc, 0x4deb, 0x4dfa, 0x4e6d, 0x4e37, 0x4e21, 0x4e5c, 0x4ebd, 0x4dc5, 0x4e7f, 0x4e47, 0x4e82, 0x4e61, 0x4ea7, 0x4df0, 0x4eb8, 0x4f35, 0x4eac, 0x4ea1, 0x4f06, 0x4e15, 0x4ea4, 0x4df5, 0x4e63, 0x4de8, 0x4dd8, 0x4e0d, 0x4e25, 0x4e7f, 0x4e50, 0x4e90, 0x4e3d, 0x4ecd, 0x4dad, 0x4e6c, 0x4f1a, 0x4dd8, 0x4f33, 0x4e40, 0x4dfb, 0x4e3e, 0x4db5, 0x4e5f, 0x4eeb, 0x4e34, 0x4dda, 0x4e80, 0x4ecc, 0x4ed4, 0x4db3, 0x4e12, 0x4d87, 0x4e52, 0x4e2f, 0x4ed6, 0x4e9c, 0x4f17, 0x4e5e, 0x4e12, 0x4e48, 0x4e31, 0x4e88, 0x4e64, 0x4e44, 0x4e23, 0x4e16, 0x4ea3, 0x4e98, 0x4e0a, 0x4de2, 0x4ebc, 0x4dfc, 0x4e22, 0x4e5b, 0x4dd5, 0x4e85, 0x4ea4, 0x4e42, 0x4e4f, 0x4ea1, 0x4e2d, 0x4e44, 0x4d7d, -0x4db5, 0x4dad, 0x4e2a, 0x4d31, 0x4e06, 0x4dbc, 0x4e4e, 0x4e78, 0x4d7e, 0x4ea3, 0x4dc2, 0x4db8, 0x4ec4, 0x4daa, 0x4e42, 0x4de2, 0x4e01, 0x4dac, 0x4dbc, 0x4e00, 0x4da6, 0x4d71, 0x4e01, 0x4dd2, 0x4d92, 0x4db6, 0x4ec5, 0x4d54, 0x4e7b, 0x4e3f, 0x4e0b, 0x4dfc, 0x4e05, 0x4d6c, 0x4e96, 0x4d90, 0x4dae, 0x4d2d, 0x4d7c, 0x4dc9, 0x4d91, 0x4dcc, 0x4dab, 0x4e48, 0x4df2, 0x4e26, 0x4da6, 0x4dd1, 0x4e7d, 0x4dc3, 0x4eab, 0x4e04, 0x4d1f, 0x4dcb, 0x4db2, 0x4da9, 0x4dd1, 0x4d8c, 0x4d8d, 0x4df2, 0x4e1c, 0x4ef9, 0x4d3c, 0x4e0a, 0x4d23, 0x4d8f, 0x4e02, 0x4e27, 0x4e29, 0x4ea2, 0x4e10, 0x4dc6, 0x4de3, 0x4db2, 0x4e61, 0x4df7, 0x4df5, 0x4e25, 0x4de6, 0x4e46, 0x4e0f, 0x4dc8, 0x4d8f, 0x4e3c, 0x4d4e, 0x4ddd, 0x4df1, 0x4cfa, 0x4e06, 0x4e72, 0x4de3, 0x4dda, 0x4df9, 0x4e24, 0x4da8, 0x4d7f, -0x4d8f, 0x4d95, 0x4e5a, 0x4dbc, 0x4ded, 0x4daf, 0x4e1c, 0x4eea, 0x4db3, 0x4ee9, 0x4e7d, 0x4dd2, 0x4e60, 0x4df6, 0x4dfd, 0x4e2d, 0x4e5d, 0x4df0, 0x4db2, 0x4dde, 0x4de1, 0x4d4e, 0x4dd9, 0x4db6, 0x4de8, 0x4dcd, 0x4dff, 0x4d63, 0x4dee, 0x4e75, 0x4e5d, 0x4dfd, 0x4e30, 0x4d88, 0x4e6f, 0x4dc4, 0x4d8b, 0x4d90, 0x4d4e, 0x4dc2, 0x4e07, 0x4e3e, 0x4d82, 0x4e79, 0x4da7, 0x4de0, 0x4d1a, 0x4d8a, 0x4e91, 0x4da7, 0x4e5c, 0x4dcc, 0x4d9d, 0x4df7, 0x4d69, 0x4dee, 0x4e05, 0x4da3, 0x4d41, 0x4e2d, 0x4e13, 0x4ec4, 0x4cf6, 0x4e41, 0x4dc4, 0x4dad, 0x4d96, 0x4e74, 0x4e66, 0x4e4b, 0x4df8, 0x4da1, 0x4dbe, 0x4ddd, 0x4e12, 0x4d81, 0x4da9, 0x4dba, 0x4df4, 0x4dfb, 0x4e53, 0x4dbb, 0x4d79, 0x4e13, 0x4d93, 0x4dfc, 0x4da8, 0x4d6e, 0x4ddb, 0x4dee, 0x4db2, 0x4e71, 0x4e06, 0x4e15, 0x4dad, 0x4e10, -0x4dbe, 0x4d9a, 0x4e47, 0x4d82, 0x4e18, 0x4e0e, 0x4e70, 0x4ebd, 0x4e2f, 0x4eee, 0x4e47, 0x4e16, 0x4ed6, 0x4dee, 0x4e5a, 0x4e64, 0x4e99, 0x4dfa, 0x4dd7, 0x4e82, 0x4e32, 0x4dd0, 0x4e4a, 0x4e31, 0x4db7, 0x4dab, 0x4e6f, 0x4df7, 0x4e5e, 0x4ea5, 0x4e2f, 0x4e3d, 0x4e1b, 0x4dee, 0x4e6e, 0x4df6, 0x4e07, 0x4d94, 0x4d52, 0x4d9d, 0x4d9a, 0x4dc1, 0x4d68, 0x4e8a, 0x4de5, 0x4ed0, 0x4dbc, 0x4e0e, 0x4e82, 0x4df1, 0x4eda, 0x4deb, 0x4d7d, 0x4e03, 0x4d79, 0x4d9c, 0x4e18, 0x4df0, 0x4dc0, 0x4e04, 0x4e3c, 0x4f3c, 0x4dcf, 0x4e53, 0x4d88, 0x4dad, 0x4e2e, 0x4e30, 0x4e7a, 0x4ea5, 0x4dca, 0x4df9, 0x4e4a, 0x4e05, 0x4e9c, 0x4dca, 0x4e18, 0x4e1c, 0x4e4d, 0x4e3a, 0x4ed8, 0x4dd7, 0x4dd2, 0x4e56, 0x4da1, 0x4e5c, 0x4dec, 0x4d66, 0x4e07, 0x4e62, 0x4e15, 0x4e5e, 0x4e30, 0x4e1d, 0x4e47, 0x4e0e, -0x4dec, 0x4e01, 0x4e70, 0x4dfa, 0x4e67, 0x4db4, 0x4e83, 0x4f89, 0x4e1b, 0x4f76, 0x4e4b, 0x4e2b, 0x4f33, 0x4e79, 0x4e5f, 0x4e1d, 0x4e90, 0x4df1, 0x4df9, 0x4e53, 0x4deb, 0x4d95, 0x4e23, 0x4d81, 0x4e0a, 0x4e1e, 0x4efc, 0x4df0, 0x4e8d, 0x4ee7, 0x4e99, 0x4ecb, 0x4e37, 0x4e41, 0x4ece, 0x4e28, 0x4deb, 0x4dba, 0x4dd7, 0x4e1d, 0x4e40, 0x4e1e, 0x4e08, 0x4eab, 0x4e61, 0x4e9e, 0x4db5, 0x4e32, 0x4ed9, 0x4df4, 0x4f2d, 0x4e58, 0x4d91, 0x4dd9, 0x4dd4, 0x4e32, 0x4e5e, 0x4db8, 0x4dfb, 0x4e4d, 0x4e87, 0x4f3e, 0x4dcc, 0x4ea3, 0x4d85, 0x4e3b, 0x4e3a, 0x4e95, 0x4ea9, 0x4efa, 0x4f03, 0x4e56, 0x4e70, 0x4e59, 0x4e85, 0x4e7b, 0x4e0a, 0x4e5e, 0x4e33, 0x4e61, 0x4edb, 0x4e24, 0x4e24, 0x4e4e, 0x4ddc, 0x4e35, 0x4e52, 0x4dc2, 0x4e58, 0x4ecb, 0x4dea, 0x4e93, 0x4e7a, 0x4e7a, 0x4e24, 0x4e24, -0x4e1a, 0x4e76, 0x4e5f, 0x4dcb, 0x4e4c, 0x4e37, 0x4ed6, 0x4ec9, 0x4de4, 0x4f1e, 0x4e8e, 0x4e22, 0x4eef, 0x4e5e, 0x4e26, 0x4e5b, 0x4ed3, 0x4e7a, 0x4dbf, 0x4e76, 0x4e06, 0x4de0, 0x4e59, 0x4de5, 0x4e66, 0x4e1f, 0x4e76, 0x4dd8, 0x4e8d, 0x4ef8, 0x4ed3, 0x4e45, 0x4e84, 0x4e3d, 0x4ef2, 0x4df1, 0x4df6, 0x4e09, 0x4d77, 0x4e22, 0x4dc6, 0x4e8a, 0x4dcd, 0x4e8f, 0x4e57, 0x4eef, 0x4dbc, 0x4e40, 0x4f00, 0x4deb, 0x4e93, 0x4e33, 0x4d66, 0x4e1a, 0x4dc6, 0x4dee, 0x4e42, 0x4dd8, 0x4e23, 0x4e83, 0x4e0b, 0x4ee3, 0x4da3, 0x4e63, 0x4dbf, 0x4e1a, 0x4e7a, 0x4e8f, 0x4ede, 0x4eed, 0x4e27, 0x4e5a, 0x4e42, 0x4e2f, 0x4ea2, 0x4e1d, 0x4e16, 0x4e7e, 0x4eab, 0x4e64, 0x4ec7, 0x4dc2, 0x4d9a, 0x4eca, 0x4e4a, 0x4e22, 0x4e54, 0x4dd1, 0x4e67, 0x4e81, 0x4de7, 0x4e32, 0x4f41, 0x4e70, 0x4e0d, 0x4ddc, -0x4da1, 0x4deb, 0x4e14, 0x4d79, 0x4e1c, 0x4db9, 0x4e1a, 0x4e73, 0x4dd2, 0x4ee5, 0x4dd8, 0x4dbd, 0x4e94, 0x4dd3, 0x4da2, 0x4e2d, 0x4e62, 0x4dda, 0x4d75, 0x4e2d, 0x4e01, 0x4d3e, 0x4ddf, 0x4ddb, 0x4e1e, 0x4d91, 0x4e09, 0x4da9, 0x4e74, 0x4e7a, 0x4dba, 0x4dd4, 0x4e30, 0x4da4, 0x4e3e, 0x4d81, 0x4d95, 0x4d95, 0x4d81, 0x4e30, 0x4e23, 0x4e35, 0x4dbd, 0x4e34, 0x4e0a, 0x4e89, 0x4d2f, 0x4df7, 0x4e72, 0x4dbe, 0x4ef1, 0x4e28, 0x4d7e, 0x4dd9, 0x4dc9, 0x4dd5, 0x4e30, 0x4de8, 0x4da4, 0x4e00, 0x4e0a, 0x4e66, 0x4d32, 0x4e04, 0x4d5e, 0x4db9, 0x4e11, 0x4e3e, 0x4de4, 0x4e6c, 0x4e38, 0x4e10, 0x4db9, 0x4df4, 0x4e63, 0x4dec, 0x4deb, 0x4dd5, 0x4e2c, 0x4e28, 0x4e22, 0x4d86, 0x4dd8, 0x4e3e, 0x4d27, 0x4e7e, 0x4dc5, 0x4cf5, 0x4e04, 0x4e4e, 0x4e1c, 0x4df2, 0x4e10, 0x4de0, 0x4d6b, 0x4d53, -0x4de7, 0x4e37, 0x4e87, 0x4e27, 0x4e9b, 0x4e07, 0x4e87, 0x4f9e, 0x4e14, 0x4faf, 0x4edd, 0x4f04, 0x4f20, 0x4e28, 0x4d9f, 0x4e6d, 0x4f14, 0x4df2, 0x4e1b, 0x4e74, 0x4e77, 0x4d6f, 0x4e33, 0x4dff, 0x4e7c, 0x4e75, 0x4e6e, 0x4e2c, 0x4e68, 0x4f3a, 0x4ec2, 0x4e8f, 0x4eda, 0x4e35, 0x4f59, 0x4e42, 0x4e34, 0x4dfe, 0x4e42, 0x4e5b, 0x4e3a, 0x4e91, 0x4e20, 0x4e71, 0x4eec, 0x4eba, 0x4e03, 0x4e1f, 0x4eac, 0x4dd8, 0x4f57, 0x4ead, 0x4de8, 0x4de5, 0x4e17, 0x4e96, 0x4e7c, 0x4db7, 0x4ddb, 0x4e47, 0x4e6a, 0x4f17, 0x4d7d, 0x4e98, 0x4e04, 0x4e32, 0x4e82, 0x4ecf, 0x4ed7, 0x4f05, 0x4e77, 0x4ec6, 0x4ee5, 0x4e3f, 0x4e8f, 0x4e83, 0x4dcd, 0x4e0e, 0x4e9d, 0x4e58, 0x4eea, 0x4df3, 0x4de0, 0x4ecb, 0x4e06, 0x4e8a, 0x4e68, 0x4d67, 0x4e5a, 0x4eef, 0x4e05, 0x4e8b, 0x4eff, 0x4e46, 0x4e60, 0x4dd7, -0x4dcc, 0x4dee, 0x4e78, 0x4db4, 0x4e61, 0x4db1, 0x4e3e, 0x4edd, 0x4db1, 0x4ede, 0x4d68, 0x4e5a, 0x4efb, 0x4dd2, 0x4dfe, 0x4e28, 0x4ec4, 0x4e16, 0x4d85, 0x4e55, 0x4dff, 0x4dc4, 0x4e27, 0x4dc9, 0x4dc7, 0x4dd2, 0x4e79, 0x4d94, 0x4e4e, 0x4e8b, 0x4e6a, 0x4e52, 0x4dfc, 0x4e08, 0x4e1e, 0x4dff, 0x4daf, 0x4d7b, 0x4d51, 0x4da5, 0x4deb, 0x4e25, 0x4e00, 0x4e7a, 0x4de4, 0x4ea6, 0x4d64, 0x4ddc, 0x4ea0, 0x4ddb, 0x4e73, 0x4dfa, 0x4d1b, 0x4e17, 0x4d78, 0x4de8, 0x4eb9, 0x4dc4, 0x4dc0, 0x4e2e, 0x4e61, 0x4eb6, 0x4dac, 0x4e6a, 0x4d86, 0x4dd0, 0x4e92, 0x4e20, 0x4e2b, 0x4e5f, 0x4df0, 0x4e2d, 0x4e1b, 0x4dd7, 0x4e1d, 0x4e1f, 0x4e45, 0x4e6e, 0x4dc8, 0x4de8, 0x4e5f, 0x4dea, 0x4dd3, 0x4e5e, 0x4dda, 0x4dee, 0x4dac, 0x4d7d, 0x4e39, 0x4e3c, 0x4e22, 0x4e6e, 0x4e77, 0x4e45, 0x4e0b, 0x4dd3, -0x4e35, 0x4e33, 0x4e9c, 0x4de7, 0x4e4c, 0x4e54, 0x4eeb, 0x4f2a, 0x4e39, 0x4f67, 0x4e9e, 0x4e61, 0x4f2b, 0x4e50, 0x4e45, 0x4eab, 0x4f08, 0x4e4f, 0x4e01, 0x4e7a, 0x4e73, 0x4df9, 0x4e88, 0x4dd9, 0x4ea5, 0x4e6d, 0x4ef7, 0x4dcf, 0x4f2f, 0x4f58, 0x4ef7, 0x4eca, 0x4e71, 0x4e82, 0x4f22, 0x4e73, 0x4e35, 0x4e09, 0x4de6, 0x4e4a, 0x4e4c, 0x4e58, 0x4e07, 0x4f1c, 0x4ea0, 0x4f1d, 0x4de4, 0x4e88, 0x4ec8, 0x4e27, 0x4f13, 0x4df9, 0x4dc0, 0x4e55, 0x4da9, 0x4e3b, 0x4eb5, 0x4df2, 0x4e28, 0x4ea0, 0x4e45, 0x4f56, 0x4dfe, 0x4ebe, 0x4db8, 0x4e2b, 0x4ea1, 0x4ebc, 0x4ec6, 0x4f16, 0x4e85, 0x4e5a, 0x4e8c, 0x4e67, 0x4efc, 0x4e11, 0x4e3e, 0x4e7c, 0x4e7b, 0x4e66, 0x4ecf, 0x4df3, 0x4e39, 0x4e97, 0x4dd1, 0x4eb3, 0x4e47, 0x4e05, 0x4e7d, 0x4eb7, 0x4e7b, 0x4eca, 0x4f2b, 0x4ea0, 0x4e2b, 0x4e51, -0x4db9, 0x4dbf, 0x4e60, 0x4db6, 0x4ec2, 0x4da9, 0x4e40, 0x4eb2, 0x4dd0, 0x4ee8, 0x4df1, 0x4e3d, 0x4eef, 0x4e3a, 0x4e4c, 0x4dfe, 0x4e5e, 0x4e52, 0x4df0, 0x4e28, 0x4e65, 0x4de5, 0x4e47, 0x4d6d, 0x4e02, 0x4dd1, 0x4e7c, 0x4dde, 0x4e2f, 0x4e87, 0x4e9e, 0x4e58, 0x4e0a, 0x4e91, 0x4e0c, 0x4e05, 0x4e1d, 0x4d89, 0x4d53, 0x4da9, 0x4e6b, 0x4e71, 0x4df8, 0x4e8a, 0x4dcd, 0x4ed8, 0x4d7f, 0x4e1d, 0x4e77, 0x4d97, 0x4ea3, 0x4d6f, 0x4d9d, 0x4e0f, 0x4dcb, 0x4e2b, 0x4e8e, 0x4dbd, 0x4d96, 0x4e28, 0x4e09, 0x4f0c, 0x4d95, 0x4e53, 0x4d66, 0x4e32, 0x4e1c, 0x4dfb, 0x4e2a, 0x4e91, 0x4ed8, 0x4dd0, 0x4e94, 0x4e1e, 0x4dd3, 0x4e4a, 0x4dcd, 0x4e56, 0x4e2f, 0x4e7e, 0x4e22, 0x4dd2, 0x4e42, 0x4e9a, 0x4ddc, 0x4e3c, 0x4e8a, 0x4d97, 0x4e00, 0x4e7e, 0x4d80, 0x4e5c, 0x4eba, 0x4e5e, 0x4e47, 0x4e02, -0x4c99, 0x4c81, 0x4d53, 0x4cb2, 0x4d3f, 0x4ca4, 0x4d31, 0x4dab, 0x4d46, 0x4dae, 0x4ce7, 0x4d3d, 0x4da8, 0x4d00, 0x4d6a, 0x4d0d, 0x4d75, 0x4d0c, 0x4cc1, 0x4cf5, 0x4d2e, 0x4cc4, 0x4ccf, 0x4cac, 0x4cfc, 0x4cfa, 0x4d7f, 0x4ccd, 0x4d41, 0x4d62, 0x4d43, 0x4d2f, 0x4cf8, 0x4cfc, 0x4db4, 0x4d00, 0x4cfa, 0x4cad, 0x4cf2, 0x4cf7, 0x4d04, 0x4cf2, 0x4caf, 0x4d56, 0x4cda, 0x4d5b, 0x4cef, 0x4d37, 0x4d81, 0x4cca, 0x4ddd, 0x4ca3, 0x4c50, 0x4d2d, 0x4c81, 0x4cf7, 0x4d46, 0x4ce2, 0x4ce5, 0x4d38, 0x4cf5, 0x4de8, 0x4c6a, 0x4d4f, 0x4c86, 0x4cc3, 0x4d31, 0x4d5b, 0x4d55, 0x4d82, 0x4d74, 0x4cc0, 0x4d08, 0x4d27, 0x4d0a, 0x4cd9, 0x4cf2, 0x4d38, 0x4c9b, 0x4d29, 0x4d67, 0x4d1a, 0x4d25, 0x4d1d, 0x4cdd, 0x4cd0, 0x4ced, 0x4c6d, 0x4d0d, 0x4d72, 0x4d3f, 0x4d94, 0x4d5a, 0x4d2d, 0x4d00, 0x4cb8 +uint16_t z_oup [768] = { +0x4845, 0x4897, 0x4608, 0x4838, 0x4855, 0x487b, 0x4869, 0x4880, 0x46d1, 0x48b0, 0x48db, 0x483f, 0x48c9, 0x485f, 0x4881, 0x483a, 0x484b, 0x472c, 0x4762, 0x492b, 0x4822, 0x48fd, 0x488e, 0x492e, 0x483e, 0x484f, 0x49e8, 0x46d7, 0x484b, 0x489d, 0x490b, 0x47e9, +0x484f, 0x47d2, 0x44be, 0x4747, 0x47c7, 0x46c0, 0x4727, 0x48af, 0x46c5, 0x482d, 0x483d, 0x482e, 0x4897, 0x479f, 0x488b, 0x4749, 0x489a, 0x46a8, 0x46f2, 0x488b, 0x4891, 0x47e8, 0x4872, 0x483d, 0x4716, 0x46fd, 0x49b5, 0x46a0, 0x46e7, 0x47a4, 0x48a1, 0x4767, +0x4939, 0x4935, 0x4703, 0x48c1, 0x4863, 0x48bd, 0x4913, 0x48cf, 0x48b6, 0x48b8, 0x4946, 0x4920, 0x495e, 0x48e1, 0x4938, 0x48b2, 0x493a, 0x4882, 0x483b, 0x49d5, 0x4911, 0x4972, 0x496b, 0x49df, 0x48f2, 0x4888, 0x4a46, 0x4821, 0x48c1, 0x490c, 0x49b2, 0x48a3, +0x463a, 0x47b0, 0x44cb, 0x4762, 0x4765, 0x46b9, 0x466a, 0x4814, 0x4631, 0x4796, 0x4666, 0x474b, 0x4798, 0x4704, 0x4838, 0x4761, 0x47d3, 0x4590, 0x45ea, 0x48a2, 0x47f1, 0x4844, 0x484b, 0x4776, 0x47d6, 0x46d8, 0x48f3, 0x44d3, 0x46fa, 0x478d, 0x481e, 0x466e, +0x4827, 0x481e, 0x45a2, 0x4794, 0x4727, 0x4806, 0x475d, 0x48d5, 0x4708, 0x4828, 0x4862, 0x480d, 0x4895, 0x4832, 0x48bd, 0x47f1, 0x482a, 0x46a7, 0x47b1, 0x492d, 0x484d, 0x4884, 0x48dc, 0x485f, 0x476d, 0x480c, 0x48e9, 0x46d3, 0x4728, 0x4884, 0x48a0, 0x480e, +0x4862, 0x4813, 0x4675, 0x485a, 0x47e8, 0x4738, 0x4836, 0x4823, 0x46e7, 0x4821, 0x4822, 0x47b3, 0x4846, 0x4855, 0x4863, 0x4717, 0x4872, 0x47c1, 0x46d5, 0x488e, 0x47e2, 0x485f, 0x487c, 0x48b8, 0x481e, 0x4788, 0x48bd, 0x4677, 0x46c9, 0x47f8, 0x48fe, 0x47fc, +0x47a0, 0x47b2, 0x4588, 0x467e, 0x4662, 0x46c7, 0x46e8, 0x4812, 0x4536, 0x474e, 0x46c0, 0x468f, 0x481f, 0x4679, 0x46a1, 0x46e2, 0x4809, 0x4560, 0x4630, 0x47eb, 0x46b5, 0x4757, 0x4848, 0x477f, 0x46a6, 0x46d8, 0x4870, 0x459a, 0x4670, 0x4678, 0x47d2, 0x468c, +0x4762, 0x48c4, 0x46e3, 0x4791, 0x46b1, 0x486d, 0x47d0, 0x4867, 0x468d, 0x47f6, 0x48a5, 0x4756, 0x4857, 0x4854, 0x4866, 0x4838, 0x484d, 0x46ec, 0x47d2, 0x48f6, 0x484a, 0x4879, 0x4848, 0x483c, 0x471d, 0x4806, 0x48fa, 0x4730, 0x4768, 0x47b8, 0x4865, 0x46f9, +0x48a8, 0x4918, 0x46ca, 0x4867, 0x4800, 0x4862, 0x48d3, 0x4910, 0x474e, 0x4849, 0x48eb, 0x486b, 0x4966, 0x48c5, 0x48f4, 0x4830, 0x48f9, 0x4778, 0x481e, 0x499e, 0x48cf, 0x48f1, 0x4982, 0x4923, 0x487c, 0x47cf, 0x49ea, 0x4649, 0x4773, 0x495e, 0x48b2, 0x483f, +0x48a7, 0x4975, 0x4616, 0x481e, 0x481f, 0x4866, 0x48b6, 0x4864, 0x47dc, 0x4873, 0x485c, 0x487f, 0x4938, 0x491f, 0x490d, 0x48b6, 0x48f8, 0x48a1, 0x4859, 0x492d, 0x489c, 0x4915, 0x4899, 0x4887, 0x486c, 0x4859, 0x49ca, 0x471e, 0x4867, 0x4918, 0x48d3, 0x4827, +0x488b, 0x4998, 0x4704, 0x481d, 0x48b8, 0x4880, 0x4876, 0x4944, 0x470c, 0x48f2, 0x48b9, 0x489b, 0x4956, 0x48e5, 0x48d6, 0x48a5, 0x48dc, 0x4856, 0x484e, 0x49ab, 0x48e0, 0x490e, 0x48dd, 0x4945, 0x488b, 0x48dd, 0x4a32, 0x47ea, 0x4835, 0x4911, 0x4965, 0x4819, +0x460e, 0x481e, 0x452c, 0x4673, 0x475c, 0x4717, 0x46f6, 0x46d0, 0x4696, 0x46bc, 0x4726, 0x481e, 0x4763, 0x46ea, 0x46fe, 0x4758, 0x478b, 0x4627, 0x4704, 0x483f, 0x46ad, 0x47b1, 0x4792, 0x4816, 0x46f2, 0x4684, 0x4827, 0x45a8, 0x472f, 0x47a4, 0x4797, 0x462b, +0x483f, 0x48ab, 0x468f, 0x4863, 0x485a, 0x4766, 0x481d, 0x48cb, 0x47dc, 0x4903, 0x48fc, 0x4830, 0x48cc, 0x483e, 0x48ab, 0x4864, 0x4966, 0x4763, 0x4794, 0x499d, 0x488e, 0x488b, 0x48dc, 0x4960, 0x4854, 0x484c, 0x499c, 0x474c, 0x4826, 0x48bc, 0x4949, 0x4883, +0x489d, 0x4905, 0x4718, 0x481e, 0x48e3, 0x48f4, 0x48c1, 0x4904, 0x47e8, 0x48b3, 0x4892, 0x48d4, 0x48ff, 0x4894, 0x48d5, 0x4886, 0x48fa, 0x4803, 0x47d2, 0x492e, 0x4870, 0x48b2, 0x48e5, 0x492b, 0x487b, 0x4785, 0x49e3, 0x471d, 0x4837, 0x48bf, 0x489b, 0x48c4, +0x475c, 0x4871, 0x464a, 0x4811, 0x47af, 0x471c, 0x4817, 0x4817, 0x463b, 0x484e, 0x477f, 0x464f, 0x4704, 0x487c, 0x47a3, 0x4725, 0x4853, 0x462a, 0x465a, 0x4860, 0x4736, 0x4880, 0x47e1, 0x482b, 0x4811, 0x46c0, 0x48dc, 0x475d, 0x4668, 0x4806, 0x4893, 0x46f4, +0x4858, 0x4959, 0x463d, 0x487b, 0x480f, 0x484e, 0x48c0, 0x48a6, 0x4847, 0x4894, 0x48a0, 0x484a, 0x491e, 0x48f4, 0x48fc, 0x48b5, 0x48ce, 0x47d2, 0x47db, 0x497f, 0x4955, 0x4939, 0x48a7, 0x48ce, 0x4890, 0x4884, 0x49d6, 0x4763, 0x486e, 0x4922, 0x48f4, 0x48c3, +0x47ec, 0x491c, 0x4698, 0x4783, 0x4715, 0x4754, 0x4745, 0x4752, 0x472f, 0x4832, 0x4817, 0x4809, 0x47f8, 0x48c3, 0x47e6, 0x4800, 0x48b6, 0x4730, 0x480a, 0x48cb, 0x479e, 0x488e, 0x47c2, 0x488e, 0x472f, 0x47ee, 0x489d, 0x4744, 0x4755, 0x4851, 0x4846, 0x47d3, +0x4838, 0x48a0, 0x4634, 0x4762, 0x4786, 0x4806, 0x47e3, 0x482d, 0x4726, 0x486c, 0x47b7, 0x4803, 0x48ac, 0x4814, 0x48e0, 0x4839, 0x4827, 0x4750, 0x46f2, 0x48c5, 0x483f, 0x4886, 0x48ad, 0x4856, 0x47e8, 0x47a9, 0x4937, 0x4743, 0x46d0, 0x481f, 0x484c, 0x4804, +0x47fd, 0x481f, 0x456d, 0x4813, 0x474d, 0x4807, 0x4688, 0x480e, 0x46e8, 0x4810, 0x469f, 0x4799, 0x4853, 0x478f, 0x47f2, 0x4824, 0x47d0, 0x471f, 0x46da, 0x485f, 0x4813, 0x481c, 0x482e, 0x4863, 0x4786, 0x480b, 0x48c9, 0x46b8, 0x475a, 0x46e2, 0x4852, 0x46c5, +0x45af, 0x4802, 0x4466, 0x46c2, 0x465d, 0x4743, 0x46b7, 0x47ba, 0x4636, 0x46c3, 0x4677, 0x4784, 0x485a, 0x47c2, 0x46dc, 0x46ac, 0x47de, 0x460e, 0x465f, 0x4834, 0x47f4, 0x4769, 0x46fc, 0x4810, 0x45fd, 0x45ea, 0x48d0, 0x45b5, 0x4704, 0x4783, 0x4830, 0x46c4, +0x4759, 0x47c7, 0x453d, 0x45b0, 0x4741, 0x4702, 0x4736, 0x4793, 0x461b, 0x47ba, 0x470b, 0x46dd, 0x4657, 0x470b, 0x470d, 0x4710, 0x486c, 0x468f, 0x45c3, 0x46ba, 0x479d, 0x483b, 0x46c9, 0x4774, 0x46a9, 0x46a7, 0x4833, 0x4606, 0x4690, 0x46a9, 0x46f5, 0x46a7, +0x47ac, 0x48bb, 0x452c, 0x4803, 0x470f, 0x4824, 0x47d5, 0x48cb, 0x4707, 0x484a, 0x4832, 0x4797, 0x4851, 0x482c, 0x487a, 0x4877, 0x4891, 0x465d, 0x47f4, 0x48ce, 0x4898, 0x4899, 0x484e, 0x486a, 0x47ac, 0x47f0, 0x493e, 0x4611, 0x47e2, 0x489e, 0x488c, 0x46af, +0x4665, 0x4836, 0x45e4, 0x46b6, 0x46a1, 0x46b9, 0x46c8, 0x46dd, 0x4658, 0x474b, 0x467b, 0x4777, 0x4769, 0x4798, 0x4785, 0x475e, 0x472a, 0x4656, 0x45fb, 0x4881, 0x46fc, 0x472d, 0x476e, 0x47a3, 0x465d, 0x46ca, 0x4855, 0x4500, 0x464f, 0x479a, 0x46c3, 0x4738, +0x481e, 0x486c, 0x4659, 0x4801, 0x4756, 0x477a, 0x47d5, 0x487b, 0x4706, 0x4808, 0x484f, 0x4838, 0x4870, 0x4863, 0x48d3, 0x4806, 0x4865, 0x4771, 0x46be, 0x494c, 0x4915, 0x484c, 0x4900, 0x4862, 0x481a, 0x46e8, 0x4974, 0x46a0, 0x4775, 0x483d, 0x487c, 0x480e }; \ No newline at end of file diff --git a/hwpe/redmule/redmule.c b/hwpe/redmule/redmule.c index 9e361b1..db549e2 100644 --- a/hwpe/redmule/redmule.c +++ b/hwpe/redmule/redmule.c @@ -23,6 +23,7 @@ #include "stdio.h" #include "archi_redmule.h" #include "hal_redmule.h" +#include "pulp.h" int main() { diff --git a/pulp_cluster-mchan-tests.yaml b/pulp_cluster-mchan-tests.yaml index 88d5610..ab54a94 100644 --- a/pulp_cluster-mchan-tests.yaml +++ b/pulp_cluster-mchan-tests.yaml @@ -1,13 +1,13 @@ mchan_tests: testMCHAN_2D_ext_tcdm: path: ./mchan_tests/testMCHAN_2D_ext_tcdm - command: + command: make clean all run testMCHAN_basic: path: ./mchan_tests/testMCHAN_basic command: make clean all run testMCHAN_multi_trans: path: ./mchan_tests/testMCHAN_multi_trans - command: + command: make clean all run testMCHAN_pe_basic: path: ./mchan_tests/testMCHAN_pe_basic command: make clean all run @@ -16,10 +16,10 @@ mchan_tests: command: make clean all run testMCHAN_4k_crossing: path: ./mchan_tests/testMCHAN_4k_crossing - command: + command: make clean all run testMCHAN_basic_FC_TCDM: path: ./mchan_tests/testMCHAN_basic_FC_TCDM - command: + command: make clean all run testMCHAN_not_incremental: path: ./mchan_tests/testMCHAN_not_incremental command: make clean all run @@ -28,4 +28,4 @@ mchan_tests: command: make clean all run testMCHAN_basic_8cores: path: ./mchan_tests/testMCHAN_basic_8cores - command: make clean all run + command: make clean all run \ No newline at end of file From 605458934da8af84d5fdafd27d49de030765eae5 Mon Sep 17 00:00:00 2001 From: Yvan Tortorella Date: Tue, 24 Oct 2023 15:59:06 +0200 Subject: [PATCH 10/71] Added carfield-related regressions. --- carfield/hello/Makefile | 5 + carfield/hello/hello.c | 24 + carfield/parMatrixMul16/Makefile | 8 + carfield/parMatrixMul16/gen_stimuli.py | 54 + carfield/parMatrixMul16/matrixMul.c | 177 + .../parMatrixMul16/parMatrixMul16_stimuli.h | 3105 +++++++++++++++++ carfield/parMatrixMul32/Makefile | 8 + carfield/parMatrixMul32/gen_stimuli.py | 54 + carfield/parMatrixMul32/matrixMul.c | 177 + .../parMatrixMul32/parMatrixMul32_stimuli.h | 1742 +++++++++ carfield/parMatrixMul8/Makefile | 8 + carfield/parMatrixMul8/gen_stimuli.py | 54 + carfield/parMatrixMul8/matrixMul.c | 177 + .../parMatrixMul8/parMatrixMul8_stimuli.h | 3105 +++++++++++++++++ carfield/redmule/Makefile | 9 + carfield/redmule/archi_redmule.h | 164 + carfield/redmule/hal_redmule.h | 527 +++ carfield/redmule/inc/golden.h | 387 ++ carfield/redmule/inc/tensor_dim.h | 13 + carfield/redmule/inc/w_2D.h | 35 + carfield/redmule/inc/w_input.h | 35 + carfield/redmule/inc/x_2D.h | 27 + carfield/redmule/inc/x_input.h | 27 + carfield/redmule/inc/y_2D.h | 27 + carfield/redmule/inc/y_input.h | 27 + carfield/redmule/inc/z_2D.h | 27 + carfield/redmule/inc/z_output.h | 27 + carfield/redmule/redmule.c | 112 + 28 files changed, 10142 insertions(+) create mode 100644 carfield/hello/Makefile create mode 100644 carfield/hello/hello.c create mode 100755 carfield/parMatrixMul16/Makefile create mode 100755 carfield/parMatrixMul16/gen_stimuli.py create mode 100644 carfield/parMatrixMul16/matrixMul.c create mode 100644 carfield/parMatrixMul16/parMatrixMul16_stimuli.h create mode 100755 carfield/parMatrixMul32/Makefile create mode 100755 carfield/parMatrixMul32/gen_stimuli.py create mode 100644 carfield/parMatrixMul32/matrixMul.c create mode 100644 carfield/parMatrixMul32/parMatrixMul32_stimuli.h create mode 100755 carfield/parMatrixMul8/Makefile create mode 100755 carfield/parMatrixMul8/gen_stimuli.py create mode 100644 carfield/parMatrixMul8/matrixMul.c create mode 100644 carfield/parMatrixMul8/parMatrixMul8_stimuli.h create mode 100644 carfield/redmule/Makefile create mode 100644 carfield/redmule/archi_redmule.h create mode 100644 carfield/redmule/hal_redmule.h create mode 100644 carfield/redmule/inc/golden.h create mode 100644 carfield/redmule/inc/tensor_dim.h create mode 100644 carfield/redmule/inc/w_2D.h create mode 100644 carfield/redmule/inc/w_input.h create mode 100644 carfield/redmule/inc/x_2D.h create mode 100644 carfield/redmule/inc/x_input.h create mode 100644 carfield/redmule/inc/y_2D.h create mode 100644 carfield/redmule/inc/y_input.h create mode 100644 carfield/redmule/inc/z_2D.h create mode 100644 carfield/redmule/inc/z_output.h create mode 100644 carfield/redmule/redmule.c diff --git a/carfield/hello/Makefile b/carfield/hello/Makefile new file mode 100644 index 0000000..d145a0f --- /dev/null +++ b/carfield/hello/Makefile @@ -0,0 +1,5 @@ +PULP_APP = test +PULP_APP_SRCS = hello.c +PULP_CFLAGS = -O3 + +include $(PULP_SDK_HOME)/install/rules/pulp.mk diff --git a/carfield/hello/hello.c b/carfield/hello/hello.c new file mode 100644 index 0000000..8741206 --- /dev/null +++ b/carfield/hello/hello.c @@ -0,0 +1,24 @@ +/* + * Copyright (C) 2018 ETH Zurich and University of Bologna + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include + +int main() +{ + printf("Hello !\n"); + + return 0; +} diff --git a/carfield/parMatrixMul16/Makefile b/carfield/parMatrixMul16/Makefile new file mode 100755 index 0000000..0fade4a --- /dev/null +++ b/carfield/parMatrixMul16/Makefile @@ -0,0 +1,8 @@ +PULP_APP = test +PULP_APP_SRCS = matrixMul.c + +PULP_CFLAGS = -O3 + +include $(PULP_SDK_HOME)/install/rules/pulp.mk + +#pulp-bench-reg --name=parMatrixMul16.cycles --module=pulp_rtl_testset --pipeline=$(PIPELINE) --artefact=pulp_rtl_testset --cmd="make run -f Makefile.sdk" --probe-regexp='matrixMul -> success, nr. of errors: 0, execution time: (\d+)' --params="platform($(platformName)),compiler($(OR1K_TOOLCHAIN_TYPE)),nbCores(4),elemSize(16)" --probe-regexp='matrixMulTranspose -> success, nr. of errors: 0, execution time: (\d+)' --params="platform($(platformName)),compiler($(OR1K_TOOLCHAIN_TYPE)),nbCores(4),elemSize(16),transposed" diff --git a/carfield/parMatrixMul16/gen_stimuli.py b/carfield/parMatrixMul16/gen_stimuli.py new file mode 100755 index 0000000..2084a7d --- /dev/null +++ b/carfield/parMatrixMul16/gen_stimuli.py @@ -0,0 +1,54 @@ +#!/usr/bin/env python + +import sys +import random + + +def write_arr(f, name, arr): + f.write('const short %s[] = {\n' % name) + for v in arr: + f.write('%d,\n' % (v)) + f.write('};\n\n') + return + +################################################################################ +f = open('parMatrixMul16_stimuli.h', 'w') + + +SIZE = 32 +RANGE = 2**7/SIZE + +m_a = [] +m_b = [] +m_exp = [] + +for i in range(0,SIZE): + for j in range(0,SIZE): + a = random.randint(-RANGE, RANGE-1) + b = random.randint(-RANGE, RANGE-1) + + m_a.append(a) + m_b.append(b) + +for i in range(0,SIZE): + for j in range(0,SIZE): + r = 0 + + for k in range (0,SIZE): + r = r + m_a[i * SIZE + k] * m_b[k * SIZE + j] + + m_exp.append(r) + + +write_arr(f, 'm_a', m_a) +write_arr(f, 'm_b', m_b) +write_arr(f, 'm_exp', m_exp) + +f.write('#define SIZE %d\n' % SIZE) + + +f.write('__attribute__ ((section(".heapsram"))) short g_mA[SIZE][SIZE];\n') +f.write('__attribute__ ((section(".heapsram"))) short g_mB[SIZE][SIZE];\n') +f.write('__attribute__ ((section(".heapsram"))) short g_mC[SIZE][SIZE];\n') +f.write('__attribute__ ((section(".heapsram"))) short g_mB_tmp[SIZE][SIZE];\n') + diff --git a/carfield/parMatrixMul16/matrixMul.c b/carfield/parMatrixMul16/matrixMul.c new file mode 100644 index 0000000..5cbe65f --- /dev/null +++ b/carfield/parMatrixMul16/matrixMul.c @@ -0,0 +1,177 @@ +/* + * Copyright (C) 2018 ETH Zurich and University of Bologna + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/* + * Mantainer: Luca Valente, luca.valente2@unibo.it + */ + +#include "pulp.h" + +#include "parMatrixMul16_stimuli.h" + +void check_matrix_mul(testresult_t *result, void (*start)(), void (*stop)()); +void check_matrix_mul_transpose(testresult_t *result, void (*start)(), void (*stop)()); + +testcase_t testcases[] = { + { .name = "matrixMul", .test = check_matrix_mul }, + { .name = "matrixMulTranspose", .test = check_matrix_mul_transpose }, + {0, 0} +}; + +unsigned int num_cores; + +int main() +{ + if (rt_cluster_id() != 0) + return bench_cluster_forward(0); + + num_cores = get_core_num(); + + if(rt_core_id() < num_cores) { + run_suite(testcases); + } + + synch_barrier(); + + return 0; +} + +void matrix_init(); +unsigned int matrix_check(); + +void check_matrix_mul(testresult_t *result, void (*start)(), void (*stop)()) { + int core_id; + unsigned int i, j, k; + unsigned int chunk; + unsigned int lb, ub; + + core_id = get_core_id(); + + // number of rows each core has to multiply + chunk = SIZE / num_cores; + // lower bound + lb = core_id * chunk; + // upper bound + ub = lb + chunk; + + if(core_id == 0) { + matrix_init(); + } + + if(num_cores != 1) synch_barrier(); + + // start benchmark + start(); + + for(i = lb; i < ub; i++) { + for(j = 0; j < SIZE; j++) { + g_mC[i][j] = 0; + + for(k = 0; k < SIZE; k++) { + g_mC[i][j] += g_mA[i][k] * g_mB[k][j]; + } + } + } + + if(num_cores != 1) synch_barrier(); + + stop(); + + if(core_id == 0) { + result->errors = matrix_check(); + } +} + +void check_matrix_mul_transpose(testresult_t *result, void (*start)(), void (*stop)()) { + int core_id; + unsigned int i, j, k; + unsigned int chunk; + unsigned int lb, ub; + + core_id = get_core_id(); + + // number of rows each core has to multiply + chunk = SIZE / num_cores; + // lower bound + lb = core_id * chunk; + // upper bound + ub = lb + chunk; + + if(core_id == 0) { + matrix_init(); + } + + if(num_cores != 1) synch_barrier(); + + // start benchmark + start(); + + // transpose array before using it + for(i = lb; i < ub; i++) { + for(j = 0; j < SIZE; j++) { + g_mB_tmp[i][j] = g_mB[j][i]; + } + } + + if(num_cores != 1) synch_barrier(); + + for(i = lb; i < ub; i++) { + for(j = 0; j < SIZE; j++) { + g_mC[i][j] = 0; + + for(k = 0; k < SIZE; k++) { + g_mC[i][j] += g_mA[i][k] * g_mB_tmp[j][k]; + } + } + } + + if(num_cores != 1) synch_barrier(); + + stop(); + + if(core_id == 0) { + result->errors = matrix_check(); + } +} + +void matrix_init() { + unsigned int i, j; + + // init, copy to TCDM + for(i = 0; i < SIZE; i++) { + for(j = 0; j < SIZE; j++) { + g_mA[i][j] = m_a[i * SIZE + j]; + g_mB[i][j] = m_b[i * SIZE + j]; + g_mC[i][j] = 0; + } + } +} + +unsigned int matrix_check() { + unsigned int errors = 0; + unsigned int i, j; + // check + for(i = 0; i < SIZE; i++) { + for(j = 0; j < SIZE; j++) { + if(g_mC[i][j] != m_exp[i * SIZE + j]) { + printf("At index %d, %d\n", i, j, 0, 0); + errors++; + } + } + } + + return errors; +} diff --git a/carfield/parMatrixMul16/parMatrixMul16_stimuli.h b/carfield/parMatrixMul16/parMatrixMul16_stimuli.h new file mode 100644 index 0000000..9b0f9bb --- /dev/null +++ b/carfield/parMatrixMul16/parMatrixMul16_stimuli.h @@ -0,0 +1,3105 @@ +/* + * Copyright (C) 2018 ETH Zurich and University of Bologna + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/* + * Mantainer: Luca Valente, luca.valente2@unibo.it + */ +const short m_a[] = { +3, +-2, +-1, +3, +0, +-2, +2, +1, +2, +2, +-1, +-4, +1, +-4, +-2, +-1, +0, +2, +1, +3, +-2, +-2, +1, +-1, +3, +-4, +-2, +1, +-1, +0, +-1, +0, +1, +1, +1, +2, +-4, +-4, +2, +0, +-2, +3, +1, +0, +1, +-3, +3, +1, +-4, +3, +-3, +-2, +-3, +-1, +3, +-3, +1, +-4, +0, +-3, +0, +-1, +-2, +0, +-4, +1, +1, +0, +-4, +-4, +2, +2, +-1, +0, +-3, +1, +2, +1, +2, +1, +-1, +3, +0, +3, +-3, +-3, +2, +1, +2, +-2, +1, +-2, +-1, +-4, +3, +-4, +-4, +-3, +-4, +2, +3, +-2, +0, +-2, +1, +2, +0, +2, +3, +3, +3, +-4, +-1, +-4, +2, +-3, +3, +-4, +-3, +1, +3, +-4, +-4, +-1, +-2, +-1, +0, +1, +-2, +3, +-2, +1, +-4, +2, +3, +-1, +-3, +-2, +1, +-1, +3, +-3, +3, +-4, +0, +-3, +-1, +1, +1, +-1, +3, +2, +-1, +3, +-1, +3, +-2, +1, +-1, +-3, +3, +3, +-3, +-4, +-4, +-4, +2, +-3, +-3, +2, +3, +-4, +-4, +2, +-4, +-3, +1, +-1, +-1, +-4, +0, +-2, +2, +-2, +1, +-1, +0, +0, +-2, +-4, +-2, +-2, +-2, +-2, +2, +1, +-3, +-4, +0, +2, +0, +-3, +1, +0, +0, +-1, +1, +-2, +-3, +-2, +1, +-2, +-2, +1, +-2, +-4, +3, +-4, +3, +-2, +-2, +1, +-2, +1, +-2, +0, +-1, +-4, +1, +-3, +1, +0, +2, +3, +-4, +3, +0, +2, +-2, +-2, +-4, +-1, +-1, +2, +1, +-2, +2, +0, +-4, +-3, +-1, +-3, +-3, +-4, +-4, +3, +-1, +3, +3, +2, +3, +0, +3, +3, +2, +-4, +0, +-1, +0, +-4, +0, +2, +-2, +-2, +2, +-1, +-1, +3, +0, +0, +-2, +-3, +-2, +-3, +0, +0, +-3, +0, +-4, +-2, +3, +-1, +2, +0, +-3, +0, +-4, +-1, +1, +-1, +-2, +-1, +-1, +0, +2, +1, +3, +-3, +-2, +1, +-3, +-3, +1, +2, +-3, +2, +-1, +0, +-2, +3, +2, +-1, +0, +-1, +0, +-2, +-1, +0, +1, +3, +3, +2, +-4, +0, +2, +3, +-2, +3, +1, +-3, +1, +1, +-2, +2, +1, +2, +-2, +0, +0, +2, +-3, +-2, +1, +0, +-3, +0, +0, +-4, +1, +2, +-3, +1, +1, +2, +-3, +0, +-4, +0, +-4, +2, +0, +2, +-3, +0, +3, +-4, +3, +0, +1, +2, +0, +0, +-3, +-3, +-4, +-4, +0, +-1, +2, +-1, +0, +-4, +-1, +1, +-2, +2, +0, +3, +2, +-4, +-2, +3, +-4, +-1, +3, +-3, +-3, +-3, +-4, +-2, +-3, +-1, +-2, +-1, +-1, +-2, +2, +-4, +-2, +0, +3, +-1, +1, +-3, +2, +-3, +2, +2, +3, +2, +-3, +-1, +2, +-4, +-1, +-2, +0, +2, +-4, +0, +2, +-4, +2, +3, +-2, +-3, +2, +-1, +3, +1, +3, +-1, +1, +1, +-2, +-4, +2, +-1, +-1, +-2, +2, +-3, +-1, +-1, +2, +-4, +-1, +1, +1, +-3, +2, +2, +0, +-2, +1, +-4, +-3, +-3, +-3, +0, +3, +-1, +-4, +3, +0, +0, +-3, +3, +-2, +2, +0, +2, +-2, +0, +-3, +3, +1, +-2, +-2, +-2, +1, +0, +1, +2, +-2, +-1, +-3, +0, +3, +3, +-2, +-4, +0, +2, +-1, +-1, +-1, +-3, +-4, +0, +1, +-4, +-1, +-4, +-1, +-4, +-4, +-3, +-1, +-4, +-3, +-1, +-3, +0, +3, +2, +-4, +-3, +-3, +-4, +-1, +-1, +-2, +3, +-1, +-3, +3, +-1, +3, +2, +-1, +1, +0, +3, +-3, +-4, +1, +-2, +1, +-3, +-3, +0, +3, +-3, +-4, +-3, +0, +-4, +0, +3, +-4, +3, +2, +-4, +-1, +-1, +-3, +-3, +2, +1, +2, +-3, +0, +2, +1, +-4, +-3, +-2, +2, +0, +1, +2, +0, +-1, +-3, +1, +-2, +-1, +-3, +1, +3, +1, +3, +-3, +-4, +1, +0, +-1, +0, +-3, +-2, +-1, +2, +2, +-4, +2, +2, +1, +-1, +-2, +3, +2, +1, +0, +-4, +1, +-1, +-1, +-1, +-2, +-4, +1, +2, +-4, +2, +-4, +2, +-2, +2, +-2, +1, +0, +0, +2, +3, +0, +2, +-4, +1, +2, +3, +-2, +2, +-4, +0, +1, +-4, +-1, +-2, +-4, +1, +-1, +-3, +1, +-3, +0, +0, +-1, +0, +2, +-1, +-4, +1, +-1, +3, +-4, +2, +2, +1, +-1, +-4, +-3, +1, +2, +2, +3, +3, +3, +1, +-2, +-1, +-4, +-1, +-3, +-4, +3, +0, +2, +-4, +3, +-4, +-4, +1, +1, +-4, +-1, +-1, +-3, +0, +0, +-2, +-3, +-4, +1, +-1, +-1, +3, +1, +2, +-1, +-1, +2, +-1, +-2, +2, +-1, +-3, +1, +1, +0, +1, +3, +2, +0, +3, +0, +3, +0, +-2, +0, +-4, +0, +-3, +1, +3, +-2, +3, +0, +3, +-1, +1, +2, +3, +0, +-4, +1, +1, +0, +-3, +0, +-2, +3, +-1, +3, +-4, +3, +2, +-3, +-2, +-2, +-1, +1, +-2, +-2, +-3, +-2, +-1, +1, +0, +2, +1, +0, +0, +1, +-3, +-2, +-1, +-3, +3, +-2, +0, +-3, +1, +-4, +2, +0, +-1, +-3, +1, +2, +-2, +-3, +-2, +-4, +-3, +1, +-4, +-3, +-2, +2, +1, +-3, +0, +3, +-1, +-4, +-1, +-2, +0, +1, +2, +1, +-3, +-4, +1, +3, +3, +-3, +2, +-1, +-4, +-1, +0, +1, +-2, +-2, +2, +0, +-4, +-4, +-4, +-3, +2, +3, +0, +2, +2, +-1, +-1, +-2, +-1, +3, +2, +0, +-1, +-1, +1, +0, +-4, +0, +2, +-3, +0, +-2, +3, +-4, +-3, +3, +-2, +3, +-3, +-2, +-1, +-4, +1, +2, +-2, +-4, +0, +-4, +-1, +-3, +0, +1, +2, +0, +2, +2, +1, +2, +-3, +1, +-3, +-4, +0, +3, +-4, +-1, +1, +-1, +0, +-3, +0, +2, +-1, +2, +-4, +3, +-3, +0, +-2, +1, +-4, +2, +-1, +2, +-3, +-3, +-1, +-3, +0, +-2, +-1, +-1, +-4, +-1, +2, +-4, +3, +-4, +-2, +2, +2, +-3, +2, +0, +3, +0, +-2, +-2, +-1, +-4, +3, +3, +2, +1, +-4, +-2, +-3, +1, +-2, +1, +0, +-3, +-4, +-4, +1, +1, +-3, +-2, +1, +-2, +2, +-4, +0, +1, +-4, +-4, +0, +-4, +0, +2, +3, +2, +0, +-3, +-2, +-2, +-1, +-2, +1, +-3, +-2, +1, +-1, +3, +2, +3, +0, +-1, +-3, +-3, +2, +3, +2, +3, +-3, +-1, +-1, +-4, +1, +-4, +-3, +-4, +-4, +-3, +2, +3, +-2, +2, +-3, +-4, +-2, +3, +3, +3, +1, +-4, +-4, +1, +-3, +1, +2, +1, +}; + +const short m_b[] = { +0, +3, +3, +2, +2, +0, +3, +0, +2, +-3, +-2, +-1, +-3, +0, +-4, +0, +-2, +-3, +0, +0, +-3, +0, +0, +-1, +1, +1, +-1, +-1, +0, +0, +-1, +3, +-1, +-2, +1, +2, +3, +-4, +3, +-4, +3, +0, +2, +-2, +-3, +2, +-1, +-4, +-1, +-4, +0, +-2, +0, +0, +-2, +0, +-2, +-4, +-3, +0, +-3, +-2, +0, +-3, +-3, +3, +3, +2, +0, +-4, +-1, +2, +1, +-1, +1, +2, +0, +-4, +3, +-1, +-3, +-1, +-4, +-1, +0, +-1, +3, +1, +-2, +-1, +2, +2, +-4, +3, +-4, +0, +-1, +-4, +1, +-3, +3, +-2, +3, +-2, +-2, +-2, +-4, +-2, +-3, +2, +3, +-4, +-1, +2, +3, +0, +1, +-3, +2, +0, +-2, +-1, +-3, +3, +-1, +0, +-2, +3, +0, +-1, +-1, +2, +-1, +3, +-4, +-2, +-3, +1, +-3, +2, +-2, +-4, +-4, +-4, +-2, +2, +-4, +3, +3, +-1, +0, +1, +-4, +-3, +2, +-2, +-3, +-3, +3, +0, +3, +-4, +1, +-1, +-1, +2, +3, +3, +-4, +0, +-1, +-1, +-2, +-1, +2, +-3, +-4, +2, +-1, +1, +2, +-2, +2, +-3, +-4, +1, +-4, +-3, +0, +3, +-3, +0, +-3, +0, +-3, +3, +-2, +-1, +3, +-2, +-3, +3, +2, +3, +-2, +0, +-1, +-3, +2, +2, +-2, +0, +-1, +-4, +3, +2, +-2, +1, +-3, +2, +-2, +0, +-1, +0, +-4, +0, +-2, +1, +3, +3, +3, +3, +3, +1, +2, +0, +-4, +-3, +2, +-1, +-2, +2, +-2, +-2, +-1, +2, +-3, +3, +-3, +1, +1, +-4, +-1, +2, +-3, +2, +-2, +3, +-2, +-3, +-1, +-3, +3, +1, +-2, +3, +0, +-2, +0, +2, +3, +-4, +3, +1, +-3, +2, +0, +-2, +2, +2, +1, +-1, +0, +1, +-2, +-3, +-3, +-3, +-2, +-1, +-3, +-1, +-1, +1, +0, +-2, +-2, +3, +-1, +-4, +0, +-4, +-3, +-3, +1, +1, +1, +-2, +-1, +-1, +-4, +-1, +-1, +1, +2, +-4, +-3, +0, +2, +-1, +2, +-1, +2, +2, +-3, +0, +-3, +-3, +-4, +3, +-3, +3, +1, +3, +1, +-1, +2, +-3, +-3, +-4, +-2, +-3, +1, +3, +0, +0, +3, +2, +3, +1, +0, +-3, +-4, +1, +0, +-4, +-3, +1, +-1, +1, +-1, +-4, +0, +-1, +-2, +1, +2, +-1, +3, +0, +-3, +1, +1, +-1, +1, +-4, +1, +3, +-3, +-3, +0, +3, +1, +-4, +0, +-4, +0, +1, +3, +-1, +-1, +-2, +0, +-1, +2, +0, +0, +2, +1, +1, +-1, +-3, +1, +-1, +3, +2, +2, +0, +-3, +2, +2, +-2, +1, +-4, +0, +0, +1, +0, +-1, +1, +1, +0, +-2, +-2, +-4, +-3, +1, +0, +2, +0, +1, +2, +-1, +-2, +0, +-1, +-1, +-3, +3, +3, +-1, +-1, +0, +3, +0, +2, +2, +1, +0, +0, +1, +3, +-2, +1, +-2, +0, +2, +-4, +0, +-2, +2, +0, +1, +-4, +-1, +2, +1, +1, +3, +1, +-1, +-1, +-2, +-2, +-2, +0, +-4, +-3, +3, +1, +3, +-2, +1, +2, +2, +0, +3, +0, +-2, +-4, +0, +-2, +3, +1, +0, +-3, +-3, +-2, +1, +0, +-3, +-4, +0, +3, +-3, +2, +3, +-3, +0, +-3, +-2, +-2, +0, +-3, +0, +2, +1, +-2, +1, +2, +-3, +1, +-2, +-4, +-4, +-4, +-3, +-1, +-1, +0, +-3, +-4, +-3, +-1, +-2, +2, +1, +2, +0, +1, +0, +0, +3, +2, +0, +-4, +2, +-1, +0, +1, +2, +2, +-2, +-3, +0, +1, +-4, +2, +-2, +0, +-4, +0, +-1, +3, +1, +-2, +-4, +2, +1, +-2, +-1, +3, +3, +0, +1, +-3, +3, +-1, +3, +-2, +-3, +-2, +-4, +-2, +-4, +0, +0, +3, +1, +2, +3, +2, +2, +-2, +-4, +2, +1, +2, +-3, +0, +-2, +-2, +-2, +0, +-2, +-1, +1, +1, +2, +2, +3, +-2, +-3, +0, +-2, +0, +-2, +-2, +-1, +-3, +-2, +-1, +-2, +-2, +-3, +0, +-3, +-1, +1, +0, +-2, +3, +2, +1, +-4, +0, +3, +-4, +2, +2, +1, +1, +-1, +-2, +0, +2, +2, +1, +-3, +-1, +1, +0, +0, +-1, +1, +0, +0, +-1, +-1, +1, +-2, +-1, +-3, +-3, +2, +-1, +-3, +3, +2, +1, +1, +-1, +2, +1, +0, +2, +2, +2, +-2, +2, +-3, +-4, +3, +-4, +2, +-1, +0, +2, +3, +3, +-1, +3, +-1, +-2, +2, +-2, +-4, +-1, +-1, +-2, +-3, +0, +-1, +1, +-3, +1, +-3, +1, +1, +3, +-3, +-2, +-2, +3, +2, +3, +-2, +3, +1, +0, +2, +-2, +-3, +3, +-4, +-3, +-3, +-3, +2, +3, +1, +-3, +0, +-1, +1, +-4, +0, +0, +3, +3, +-3, +-4, +-3, +2, +-1, +-2, +2, +-2, +3, +3, +2, +-2, +3, +2, +2, +-2, +1, +0, +-1, +0, +-3, +3, +0, +1, +-2, +-1, +-2, +-3, +0, +-1, +-3, +-1, +-4, +-3, +0, +-4, +0, +-1, +3, +0, +3, +1, +1, +0, +2, +-3, +-2, +-3, +-2, +1, +-2, +-2, +3, +-3, +-2, +-4, +3, +3, +1, +1, +-2, +-2, +0, +-3, +-1, +1, +-2, +-4, +1, +2, +2, +2, +-4, +-3, +2, +2, +0, +3, +2, +-3, +-2, +2, +3, +3, +-1, +0, +1, +2, +-1, +-3, +-3, +-4, +-2, +-1, +-3, +0, +-2, +1, +1, +2, +-1, +-2, +-2, +1, +-2, +-1, +-4, +-2, +2, +-3, +-1, +-2, +-4, +3, +-2, +-2, +3, +1, +-4, +1, +-2, +0, +-4, +-2, +-3, +-3, +-3, +-3, +2, +3, +-4, +0, +0, +-3, +2, +0, +-3, +-2, +-4, +-3, +3, +-1, +3, +2, +-4, +-2, +3, +2, +0, +3, +-1, +1, +1, +-4, +1, +-3, +0, +-3, +-1, +-1, +-3, +1, +3, +-1, +-2, +-1, +3, +3, +0, +-2, +3, +1, +3, +-3, +-1, +2, +-1, +1, +-1, +3, +0, +1, +2, +0, +2, +-1, +-4, +3, +1, +-2, +-1, +2, +-3, +-1, +0, +-3, +-3, +2, +0, +-3, +-1, +0, +-3, +-3, +3, +0, +-3, +-3, +-3, +1, +-2, +1, +3, +-3, +1, +1, +2, +2, +1, +1, +2, +-4, +-4, +3, +-4, +0, +-2, +0, +3, +-1, +-1, +3, +0, +2, +-3, +3, +1, +2, +2, +0, +1, +0, +0, +0, +2, +-2, +-1, +3, +-1, +-4, +3, +1, +-4, +-2, +-1, +3, +3, +-2, +-2, +-1, +-3, +1, +1, +2, +2, +2, +-3, +-1, +-4, +-3, +-2, +3, +-4, +-1, +-3, +-1, +2, +-1, +1, +0, +3, +-4, +0, +2, +}; + +const short m_exp[] = { +-8, +10, +-3, +-13, +15, +-22, +32, +-11, +6, +36, +-22, +-11, +-20, +17, +-33, +-26, +-13, +-7, +-8, +11, +0, +-6, +-38, +16, +28, +0, +0, +-21, +32, +-18, +15, +49, +-39, +24, +-2, +25, +33, +-8, +52, +-19, +58, +5, +1, +8, +21, +49, +6, +-9, +-11, +-33, +25, +8, +5, +-9, +-33, +-28, +21, +-1, +24, +-31, +2, +27, +-4, +2, +-17, +7, +-11, +-2, +-21, +-27, +8, +11, +71, +-31, +28, +13, +10, +40, +35, +25, +-4, +1, +27, +-19, +50, +18, +-23, +15, +12, +16, +-24, +0, +-16, +-8, +19, +-16, +10, +3, +-32, +-23, +-31, +-20, +-52, +-42, +-17, +26, +-20, +3, +85, +33, +37, +5, +38, +16, +21, +8, +80, +13, +5, +-42, +1, +-29, +4, +0, +7, +11, +91, +33, +-9, +-20, +2, +-6, +0, +3, +-22, +-31, +37, +29, +30, +-4, +-35, +26, +25, +-13, +40, +22, +50, +-39, +13, +19, +30, +-24, +-10, +31, +-47, +19, +-3, +-15, +7, +-36, +2, +55, +-20, +15, +31, +-5, +14, +-37, +47, +70, +1, +36, +16, +17, +-43, +73, +35, +-58, +41, +-40, +-58, +-2, +-13, +-12, +62, +7, +21, +23, +24, +53, +34, +-19, +-18, +52, +-10, +2, +7, +-26, +6, +7, +42, +5, +-1, +22, +55, +26, +30, +31, +25, +-24, +-18, +-9, +3, +43, +7, +-25, +38, +-35, +1, +-3, +7, +61, +-19, +45, +-54, +101, +-9, +-22, +36, +13, +-14, +23, +12, +39, +13, +3, +32, +9, +3, +14, +-19, +2, +-14, +56, +37, +0, +-23, +-38, +13, +27, +11, +-34, +-12, +0, +27, +-28, +-3, +37, +40, +39, +40, +-30, +38, +13, +2, +20, +8, +7, +9, +14, +57, +-44, +-15, +18, +-49, +37, +40, +-16, +21, +7, +-80, +-28, +10, +-25, +-56, +5, +-54, +20, +10, +-28, +24, +-7, +21, +5, +-59, +-2, +-7, +14, +-1, +31, +19, +-48, +4, +41, +-36, +10, +-13, +8, +2, +14, +9, +19, +-21, +-32, +54, +-1, +16, +25, +18, +19, +8, +25, +31, +-13, +-31, +5, +2, +-11, +-17, +-18, +1, +-24, +26, +-2, +20, +-19, +30, +12, +-1, +-9, +-17, +-19, +-14, +15, +-13, +-14, +33, +-6, +-9, +36, +-6, +-45, +-26, +29, +-27, +-52, +0, +53, +-2, +-42, +18, +8, +7, +26, +-35, +3, +-27, +23, +35, +-28, +-7, +2, +-39, +0, +-22, +9, +44, +12, +-1, +-44, +44, +38, +11, +-21, +7, +33, +-1, +-38, +-3, +43, +-14, +30, +12, +2, +-33, +7, +20, +-25, +-2, +31, +-30, +54, +36, +42, +89, +-7, +35, +-19, +19, +-15, +10, +54, +15, +37, +71, +-1, +22, +14, +-30, +0, +-4, +-2, +-31, +20, +-19, +-31, +-34, +4, +38, +9, +-35, +25, +50, +-10, +9, +4, +7, +-15, +82, +-18, +7, +24, +-8, +10, +10, +1, +24, +21, +7, +70, +48, +17, +21, +-56, +11, +19, +24, +35, +-33, +-15, +21, +9, +8, +-12, +-36, +-32, +-18, +-15, +21, +19, +-1, +-51, +12, +17, +3, +-17, +-20, +3, +-13, +1, +19, +-4, +7, +-21, +28, +42, +50, +8, +-4, +-7, +-18, +-56, +-19, +-16, +13, +-6, +29, +15, +35, +-19, +-23, +-14, +-15, +3, +-15, +47, +38, +-44, +20, +48, +-11, +15, +-4, +76, +33, +38, +76, +-34, +3, +25, +78, +76, +-2, +4, +39, +48, +14, +49, +-9, +-3, +23, +20, +17, +35, +-10, +-22, +23, +6, +64, +-9, +13, +-5, +-19, +25, +-23, +-7, +-11, +-44, +18, +36, +-30, +-13, +52, +54, +12, +68, +-11, +-66, +34, +31, +-32, +35, +28, +50, +58, +36, +35, +19, +-51, +-9, +58, +-34, +-35, +-17, +-11, +22, +-3, +21, +-6, +23, +0, +-33, +3, +19, +47, +-12, +-8, +-13, +29, +-13, +6, +-3, +-29, +37, +10, +-42, +31, +40, +28, +25, +0, +-21, +13, +8, +-16, +-1, +-18, +23, +50, +-4, +-6, +0, +-26, +10, +31, +36, +29, +-25, +-22, +2, +61, +12, +22, +23, +-25, +2, +28, +7, +78, +47, +-13, +-7, +-14, +-21, +19, +-32, +5, +15, +-12, +43, +28, +-1, +16, +9, +-11, +-4, +30, +-25, +7, +36, +-42, +3, +16, +7, +0, +-40, +28, +25, +44, +-8, +43, +-7, +49, +-2, +-40, +-13, +37, +23, +-33, +-2, +-28, +-26, +6, +-7, +37, +53, +17, +-11, +-59, +12, +42, +-46, +10, +31, +43, +-14, +6, +16, +-55, +10, +44, +-18, +36, +-14, +85, +12, +-69, +25, +35, +4, +-22, +-5, +26, +-22, +28, +-63, +-28, +2, +-30, +22, +-46, +-1, +17, +-37, +25, +22, +42, +-9, +-28, +40, +11, +-8, +59, +3, +26, +36, +-7, +-11, +12, +-10, +10, +26, +26, +-22, +41, +-9, +26, +-14, +19, +-8, +27, +0, +23, +20, +42, +-22, +-23, +-71, +-36, +11, +-23, +-10, +-2, +17, +51, +-65, +-19, +3, +42, +37, +19, +24, +6, +33, +29, +-30, +3, +-28, +-5, +12, +-36, +-29, +20, +15, +-1, +8, +25, +-18, +-17, +22, +64, +35, +7, +33, +8, +-41, +40, +26, +0, +8, +-10, +-65, +48, +7, +6, +-10, +28, +16, +20, +0, +52, +31, +2, +-53, +-23, +32, +-12, +-6, +-10, +27, +2, +3, +49, +-46, +17, +92, +9, +-21, +17, +-32, +-1, +67, +-1, +-17, +46, +-11, +10, +6, +46, +52, +-4, +28, +61, +18, +43, +-22, +-25, +29, +-56, +-22, +17, +-52, +-3, +7, +38, +6, +19, +49, +-8, +-20, +17, +13, +52, +10, +22, +-19, +5, +-7, +-7, +-4, +42, +-2, +64, +8, +5, +31, +35, +-51, +4, +17, +-42, +23, +19, +-5, +-23, +14, +7, +47, +35, +40, +-1, +31, +36, +34, +9, +6, +22, +-77, +32, +36, +-43, +-2, +47, +2, +6, +8, +-14, +45, +-20, +-43, +-14, +19, +5, +23, +74, +2, +-14, +2, +1, +-12, +-5, +23, +-17, +45, +20, +6, +56, +13, +-5, +2, +23, +-8, +1, +-21, +-11, +37, +35, +-15, +14, +39, +22, +37, +19, +-13, +73, +29, +22, +7, +-29, +-60, +28, +-6, +-1, +-34, +-9, +59, +18, +16, +36, +-16, +5, +22, +-22, +2, +52, +-27, +-15, +4, +-2, +56, +4, +36, +30, +-48, +-13, +11, +-47, +16, +37, +-27, +8, +31, +15, +-15, +29, +47, +21, +-26, +31, +-8, +24, +52, +76, +-19, +15, +29, +11, +28, +13, +21, +-22, +-45, +18, +19, +27, +61, +57, +-56, +26, +20, +61, +-40, +16, +-31, +53, +83, +-2, +-16, +-10, +13, +62, +52, +-6, +-49, +13, +-37, +2, +-36, +2, +25, +-22, +-10, +-4, +-2, +}; + +#define SIZE 32 +__attribute__ ((section(".heapsram"))) short g_mA[SIZE][SIZE]; +__attribute__ ((section(".heapsram"))) short g_mB[SIZE][SIZE]; +__attribute__ ((section(".heapsram"))) short g_mC[SIZE][SIZE]; +__attribute__ ((section(".heapsram"))) short g_mB_tmp[SIZE][SIZE]; diff --git a/carfield/parMatrixMul32/Makefile b/carfield/parMatrixMul32/Makefile new file mode 100755 index 0000000..bd55e15 --- /dev/null +++ b/carfield/parMatrixMul32/Makefile @@ -0,0 +1,8 @@ +PULP_APP = test +PULP_APP_SRCS = matrixMul.c + +PULP_CFLAGS = -O3 + +include $(PULP_SDK_HOME)/install/rules/pulp.mk + +#pulp-bench-reg --name=parMatrixMul32.cycles --module=pulp_rtl_testset --pipeline=$(PIPELINE) --artefact=pulp_rtl_testset --cmd="make run -f Makefile.sdk" --probe-regexp='matrixMul -> success, nr. of errors: 0, execution time: (\d+)' --params="platform($(platformName)),compiler($(OR1K_TOOLCHAIN_TYPE)),nbCores(4),elemSize(32)" --probe-regexp='matrixMulTranspose -> success, nr. of errors: 0, execution time: (\d+)' --params="platform($(platformName)),compiler($(OR1K_TOOLCHAIN_TYPE)),nbCores(4),elemSize(32),transposed" diff --git a/carfield/parMatrixMul32/gen_stimuli.py b/carfield/parMatrixMul32/gen_stimuli.py new file mode 100755 index 0000000..75eef86 --- /dev/null +++ b/carfield/parMatrixMul32/gen_stimuli.py @@ -0,0 +1,54 @@ +#!/usr/bin/env python + +import sys +import random + + +def write_arr(f, name, arr): + f.write('const int %s[] = {\n' % name) + for v in arr: + f.write('%d,\n' % (v)) + f.write('};\n\n') + return + +################################################################################ +f = open('parMatrixMul32_stimuli.h', 'w') + + +SIZE = 24 +RANGE = 2**15/SIZE + +m_a = [] +m_b = [] +m_exp = [] + +for i in range(0,SIZE): + for j in range(0,SIZE): + a = random.randint(-RANGE, RANGE-1) + b = random.randint(-RANGE, RANGE-1) + + m_a.append(a) + m_b.append(b) + +for i in range(0,SIZE): + for j in range(0,SIZE): + r = 0 + + for k in range (0,SIZE): + r = r + m_a[i * SIZE + k] * m_b[k * SIZE + j] + + m_exp.append(r) + + +write_arr(f, 'm_a', m_a) +write_arr(f, 'm_b', m_b) +write_arr(f, 'm_exp', m_exp) + +f.write('#define SIZE %d\n' % SIZE) + + +f.write('__attribute__ ((section(".heapsram"))) int g_mA[SIZE][SIZE];\n') +f.write('__attribute__ ((section(".heapsram"))) int g_mB[SIZE][SIZE];\n') +f.write('__attribute__ ((section(".heapsram"))) int g_mC[SIZE][SIZE];\n') +f.write('__attribute__ ((section(".heapsram"))) int g_mB_tmp[SIZE][SIZE];\n') + diff --git a/carfield/parMatrixMul32/matrixMul.c b/carfield/parMatrixMul32/matrixMul.c new file mode 100644 index 0000000..990d411 --- /dev/null +++ b/carfield/parMatrixMul32/matrixMul.c @@ -0,0 +1,177 @@ +/* + * Copyright (C) 2018 ETH Zurich and University of Bologna + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/* + * Mantainer: Luca Valente, luca.valente2@unibo.it + */ + +#include "pulp.h" + +#include "parMatrixMul32_stimuli.h" + +void check_matrix_mul(testresult_t *result, void (*start)(), void (*stop)()); +void check_matrix_mul_transpose(testresult_t *result, void (*start)(), void (*stop)()); + +testcase_t testcases[] = { + { .name = "matrixMul", .test = check_matrix_mul }, + { .name = "matrixMulTranspose", .test = check_matrix_mul_transpose }, + {0, 0} +}; + +unsigned int num_cores; + +int main() +{ + if (rt_cluster_id() != 0) + return bench_cluster_forward(0); + + num_cores = get_core_num(); + + if(rt_core_id() < num_cores) { + run_suite(testcases); + } + + synch_barrier(); + + return 0; +} + +void matrix_init(); +unsigned int matrix_check(); + +void check_matrix_mul(testresult_t *result, void (*start)(), void (*stop)()) { + int core_id; + unsigned int i, j, k; + unsigned int chunk; + unsigned int lb, ub; + + core_id = get_core_id(); + + // number of rows each core has to multiply + chunk = SIZE / num_cores; + // lower bound + lb = core_id * chunk; + // upper bound + ub = lb + chunk; + + if(core_id == 0) { + matrix_init(); + } + + if(num_cores != 1) synch_barrier(); + + // start benchmark + start(); + + for(i = lb; i < ub; i++) { + for(j = 0; j < SIZE; j++) { + g_mC[i][j] = 0; + + for(k = 0; k < SIZE; k++) { + g_mC[i][j] += g_mA[i][k] * g_mB[k][j]; + } + } + } + + if(num_cores != 1) synch_barrier(); + + stop(); + + if(core_id == 0) { + result->errors = matrix_check(); + } +} + +void check_matrix_mul_transpose(testresult_t *result, void (*start)(), void (*stop)()) { + int core_id; + unsigned int i, j, k; + unsigned int chunk; + unsigned int lb, ub; + + core_id = get_core_id(); + + // number of rows each core has to multiply + chunk = SIZE / num_cores; + // lower bound + lb = core_id * chunk; + // upper bound + ub = lb + chunk; + + if(core_id == 0) { + matrix_init(); + } + + if(num_cores != 1) synch_barrier(); + + // start benchmark + start(); + + // transpose array before using it + for(i = lb; i < ub; i++) { + for(j = 0; j < SIZE; j++) { + g_mB_tmp[i][j] = g_mB[j][i]; + } + } + + if(num_cores != 1) synch_barrier(); + + for(i = lb; i < ub; i++) { + for(j = 0; j < SIZE; j++) { + g_mC[i][j] = 0; + + for(k = 0; k < SIZE; k++) { + g_mC[i][j] += g_mA[i][k] * g_mB_tmp[j][k]; + } + } + } + + if(num_cores != 1) synch_barrier(); + + stop(); + + if(core_id == 0) { + result->errors = matrix_check(); + } +} + +void matrix_init() { + unsigned int i, j; + + // init, copy to TCDM + for(i = 0; i < SIZE; i++) { + for(j = 0; j < SIZE; j++) { + g_mA[i][j] = m_a[i * SIZE + j]; + g_mB[i][j] = m_b[i * SIZE + j]; + g_mC[i][j] = 0; + } + } +} + +unsigned int matrix_check() { + unsigned int errors = 0; + unsigned int i, j; + // check + for(i = 0; i < SIZE; i++) { + for(j = 0; j < SIZE; j++) { + if(g_mC[i][j] != m_exp[i * SIZE + j]) { + printf("At index %d, %d\n", i, j, 0, 0); + errors++; + } + } + } + + return errors; +} diff --git a/carfield/parMatrixMul32/parMatrixMul32_stimuli.h b/carfield/parMatrixMul32/parMatrixMul32_stimuli.h new file mode 100644 index 0000000..d5c1af0 --- /dev/null +++ b/carfield/parMatrixMul32/parMatrixMul32_stimuli.h @@ -0,0 +1,1742 @@ +const int m_a[] = { +-1344, +-778, +-350, +1240, +950, +940, +1262, +285, +738, +-37, +257, +704, +87, +-1135, +1175, +960, +984, +611, +-1170, +1243, +-729, +-1235, +-1229, +8, +52, +1156, +-804, +-129, +-112, +-307, +1045, +-954, +-944, +477, +1104, +-600, +-31, +1364, +-950, +-153, +967, +-446, +235, +-197, +763, +-660, +-1289, +116, +-458, +994, +1086, +156, +-549, +102, +-532, +943, +299, +340, +516, +1117, +515, +1335, +708, +-306, +-589, +517, +655, +-279, +-595, +-255, +-1104, +-16, +507, +199, +-297, +-905, +-1084, +982, +20, +-1364, +407, +333, +-798, +-711, +1301, +175, +490, +-165, +-1097, +1251, +1203, +-884, +419, +-1262, +-950, +-1200, +759, +-205, +-1365, +-870, +109, +-1135, +36, +796, +-1233, +-1117, +-826, +241, +588, +-513, +-353, +791, +1071, +-1073, +220, +-1094, +1096, +-723, +280, +-505, +151, +399, +319, +-1120, +-213, +-966, +679, +497, +-290, +-300, +-290, +-599, +243, +-752, +604, +1196, +-715, +-177, +-329, +1337, +596, +1027, +509, +-301, +-1211, +-936, +-281, +446, +-356, +841, +-1123, +-1343, +-140, +-1300, +-828, +-237, +1206, +1274, +-1092, +-922, +913, +1201, +-422, +782, +-230, +633, +-1055, +-1160, +329, +1255, +1038, +770, +123, +934, +670, +-492, +-24, +-779, +-1129, +47, +555, +1214, +-232, +-716, +-322, +-126, +178, +827, +710, +-1057, +-313, +996, +1149, +-532, +570, +1171, +899, +-313, +-790, +1071, +154, +-303, +492, +-918, +-1139, +292, +129, +1347, +-309, +751, +1262, +142, +-1062, +-1305, +250, +657, +238, +-141, +1308, +-37, +-514, +-591, +-611, +852, +-653, +-640, +91, +254, +-1145, +-1263, +-838, +-10, +266, +-444, +1129, +762, +-713, +-326, +-88, +1063, +-442, +-177, +365, +-740, +-1219, +1085, +783, +-725, +-1112, +426, +660, +6, +-440, +513, +687, +1078, +212, +-434, +-953, +1337, +160, +622, +-950, +-943, +288, +-136, +-1103, +-223, +1271, +211, +251, +-271, +-26, +704, +1177, +544, +699, +-885, +-864, +-1280, +877, +-461, +995, +-623, +-121, +-146, +-484, +-225, +-978, +163, +-278, +-502, +-505, +-567, +-771, +1279, +699, +-1337, +544, +1145, +1271, +640, +277, +-164, +458, +-1280, +-602, +-2, +1136, +1203, +-699, +-195, +659, +-472, +1230, +1151, +-97, +-77, +-772, +-381, +-295, +636, +-1341, +-445, +-806, +531, +-1186, +-1313, +-274, +835, +-446, +558, +-1307, +-235, +43, +-254, +-109, +911, +-1189, +559, +-854, +-218, +149, +580, +1158, +-14, +181, +-1120, +-947, +-542, +1142, +631, +-893, +-614, +-257, +-365, +-951, +1, +-762, +268, +382, +-131, +808, +-234, +839, +346, +-733, +1251, +496, +-566, +-751, +581, +-1292, +1068, +-932, +-855, +1336, +-280, +523, +1294, +-1251, +1284, +-1276, +87, +1264, +-274, +-922, +-289, +-458, +-117, +196, +-79, +-707, +1233, +-385, +-620, +-617, +703, +-995, +-374, +660, +145, +821, +1289, +582, +-201, +447, +116, +759, +-615, +834, +268, +-1114, +-1016, +-227, +-589, +-910, +-244, +-660, +764, +219, +1165, +506, +-673, +799, +-1355, +-872, +491, +689, +176, +-285, +1151, +1080, +-319, +286, +833, +217, +-621, +478, +539, +-109, +-1273, +-564, +-240, +504, +518, +256, +-124, +74, +949, +-912, +-1341, +965, +-774, +634, +1009, +1304, +200, +-1041, +-1262, +-865, +-1065, +-635, +-357, +-928, +806, +1148, +-411, +56, +686, +-644, +1241, +-430, +297, +127, +457, +-1313, +741, +861, +220, +-540, +772, +265, +1066, +679, +177, +-734, +29, +-149, +181, +-1042, +-1139, +271, +-326, +-29, +1298, +643, +-890, +-136, +-1015, +-565, +-964, +894, +-312, +698, +159, +-222, +-1322, +578, +945, +1124, +1278, +54, +-389, +1101, +362, +-543, +380, +959, +-399, +-1105, +1308, +338, +-198, +-1111, +-278, +-752, +668, +1156, +-1226, +579, +184, +-1084, +-917, +-498, +-466, +316, +-788, +-718, +468, +367, +-1333, +-1146, +828, +1329, +311, +-1346, +54, +-976, +854, +-658, +-198, +-979, +156, +385, +-659, +1326, +1351, +-1173, +-648, +720, +-40, +313, +729, +-416, +351, +452, +-413, +-4, +-1113, +-612, +-28, +-721, +400, +1072, +-1010, +}; + +const int m_b[] = { +-1316, +319, +963, +-608, +519, +-783, +-676, +181, +172, +203, +-1351, +-935, +-12, +758, +-746, +1226, +127, +-1346, +1251, +-377, +889, +-23, +-417, +-122, +680, +1363, +729, +-907, +-1263, +-431, +363, +1355, +-566, +-517, +-1186, +1318, +-1104, +-1245, +950, +687, +252, +-270, +1081, +-1290, +656, +8, +60, +1171, +915, +-500, +678, +-953, +307, +-35, +-1334, +-888, +598, +1160, +722, +850, +-268, +988, +635, +-340, +252, +1208, +420, +82, +1283, +-319, +-666, +172, +583, +174, +471, +-1063, +452, +-191, +-1188, +116, +-927, +1086, +119, +-245, +-717, +-657, +417, +319, +1133, +1338, +141, +-546, +567, +-1089, +-191, +-1138, +-201, +-1286, +-820, +-1356, +1177, +-317, +191, +67, +164, +-306, +-1015, +1147, +-482, +1229, +-259, +-207, +1309, +847, +-399, +-1005, +-995, +140, +-567, +-1220, +-427, +180, +-571, +997, +-783, +-316, +-1360, +736, +75, +-1251, +-307, +-902, +1181, +1057, +-141, +-1098, +776, +1096, +-923, +914, +1049, +-28, +-742, +-804, +-467, +567, +329, +-309, +-161, +-157, +-430, +-639, +1138, +-165, +292, +-20, +777, +-715, +60, +-1359, +35, +307, +-1092, +271, +548, +822, +-50, +-475, +-103, +784, +537, +152, +-517, +-1097, +117, +-619, +538, +941, +172, +-223, +1161, +-1004, +-1145, +-455, +255, +363, +859, +403, +-861, +-657, +-537, +-1084, +-1042, +541, +1283, +-356, +1298, +-1254, +-303, +203, +104, +1123, +-72, +-171, +-1122, +-533, +440, +275, +613, +-846, +-189, +884, +704, +-570, +-440, +-1157, +-200, +-80, +616, +799, +757, +-264, +-1256, +-690, +152, +184, +-810, +-221, +-821, +-243, +508, +-709, +574, +-693, +315, +-952, +952, +697, +875, +-480, +-691, +422, +-413, +-1199, +441, +-751, +821, +1303, +-410, +416, +566, +-131, +-551, +46, +978, +-228, +1117, +-251, +-537, +874, +-882, +260, +-213, +248, +-1296, +1343, +-626, +-812, +629, +-601, +-378, +-1314, +-889, +774, +-307, +692, +-1125, +-692, +923, +947, +1158, +-939, +1284, +35, +1299, +369, +-8, +43, +768, +524, +137, +659, +285, +-1315, +-457, +871, +-768, +1107, +-695, +488, +-527, +-161, +414, +-526, +-1164, +1059, +-1108, +560, +-622, +898, +-50, +-286, +-170, +513, +952, +433, +237, +584, +-665, +-960, +585, +-434, +1223, +-130, +1035, +430, +202, +1312, +1152, +1059, +-1082, +-1295, +805, +-18, +613, +-94, +557, +548, +1354, +116, +289, +-1358, +-1234, +1237, +451, +820, +-102, +974, +832, +-1019, +914, +-512, +-267, +1329, +-910, +-1341, +862, +-381, +-23, +-658, +40, +-71, +-782, +1240, +-956, +1241, +-291, +-884, +1250, +699, +834, +190, +960, +-1260, +177, +464, +155, +-1105, +768, +424, +621, +740, +-1357, +1186, +-594, +1329, +829, +126, +1101, +1146, +-95, +605, +-673, +1334, +440, +-10, +12, +-745, +20, +19, +-793, +999, +1083, +487, +-657, +-356, +654, +-326, +-250, +-718, +-947, +-235, +558, +974, +-981, +637, +-861, +-768, +1045, +-583, +-910, +128, +734, +896, +-1156, +223, +284, +272, +634, +-473, +363, +359, +-1185, +14, +-33, +-1122, +140, +900, +439, +-944, +-770, +663, +865, +1056, +-238, +86, +-1294, +-44, +-603, +602, +20, +397, +-423, +-703, +-209, +-906, +-1236, +945, +-737, +578, +904, +645, +1225, +-877, +-425, +-493, +-1326, +424, +965, +1300, +-1210, +823, +1345, +626, +-427, +592, +-869, +-1055, +-938, +-427, +1066, +472, +-1055, +48, +-1200, +-349, +313, +-1227, +-228, +783, +839, +187, +1021, +-1355, +1284, +68, +-1321, +-997, +1286, +-887, +772, +-156, +-105, +1329, +1141, +-377, +-881, +-341, +1316, +-391, +-1249, +-205, +53, +-266, +-540, +-289, +-1011, +602, +-1032, +-1097, +-202, +-467, +-1047, +-867, +-340, +-109, +-496, +967, +1147, +108, +384, +-12, +1216, +137, +1318, +151, +219, +-543, +391, +668, +-1348, +-1244, +-810, +-676, +321, +-1258, +1343, +1214, +791, +35, +1219, +1278, +1037, +-1282, +661, +585, +921, +-880, +-989, +-1192, +-207, +273, +-382, +690, +165, +271, +-212, +739, +-343, +-42, +226, +40, +859, +-153, +622, +-1059, +}; + +const int m_exp[] = { +-4942391, +2289133, +-1363225, +1978230, +1580032, +-625813, +-3230128, +2236653, +19494, +3242695, +-1080745, +-34154, +4086860, +-1370876, +3997221, +-1812380, +4705498, +7690207, +-4068140, +3595067, +-1103308, +-939857, +-4249710, +-8650816, +-2013119, +2933624, +235162, +-453807, +-4447391, +3527041, +2046492, +411956, +-994117, +-1411344, +1333704, +-519761, +3026373, +-564969, +3749147, +2447173, +-557628, +1138674, +-1426096, +-4033488, +-1829685, +2815607, +2382958, +1714081, +-1470484, +3379876, +3660759, +-2439960, +-1180478, +-3300785, +-5104533, +-309753, +-1667400, +3258850, +1805449, +2481948, +-944985, +-363123, +4227063, +3022289, +2763211, +5114077, +-1534394, +-2957168, +3401637, +-1195822, +-747480, +-2915318, +-2505013, +-174927, +276733, +2899369, +-6702856, +923396, +-2741169, +4270685, +-1020657, +-2562887, +2074098, +-2382784, +1366504, +691209, +4127820, +400356, +-7415505, +823772, +-3848400, +-158560, +3759990, +2298445, +323394, +873625, +474364, +2617120, +-1382444, +1735284, +-5799715, +1915577, +7016057, +-1212904, +919286, +2949768, +1228832, +572192, +4145710, +-6809520, +-2199597, +677764, +-7169579, +-4904277, +6902014, +231123, +-4797299, +3093608, +989455, +4324476, +3121268, +810907, +-2457323, +2299211, +-1625774, +-141013, +3343022, +-2044657, +4089375, +-291323, +-1950307, +2480885, +2846731, +-2139146, +-2718414, +-1997531, +-2399245, +-4060224, +423228, +-205276, +-1602384, +910872, +-3535114, +6008729, +-559984, +-301205, +-5407307, +2981269, +1079061, +6602535, +-857708, +2756391, +-5304566, +-3769267, +2620777, +-4409088, +502077, +7568647, +-37918, +2315061, +-2540065, +8296540, +-7465282, +1553910, +-4736227, +-2139045, +95614, +342546, +1309722, +1777391, +2981296, +-736899, +-2572111, +-972463, +-2793724, +-2893912, +-1230264, +-871649, +-1439985, +3074445, +3339004, +2423842, +1751086, +4064832, +1550243, +6225792, +-503750, +-2567772, +5671219, +-2054796, +-551487, +-2787790, +-3835027, +-4272806, +2725813, +-2982521, +1803437, +3024675, +-201092, +-1626608, +1548043, +2303810, +3032912, +398283, +1704371, +1860306, +-4101665, +5187913, +4233418, +2054883, +3603470, +1935132, +-17548, +-4362444, +-2806918, +-5651039, +-1853372, +-1707208, +-153048, +-2791834, +402265, +2815962, +3391662, +-4833520, +-1190520, +2302448, +80738, +2089586, +174096, +2837490, +-5514606, +2138871, +336249, +-378675, +5833977, +4367000, +-2445147, +-3652299, +-1794451, +-1471577, +-1263012, +3719274, +-3404819, +5765304, +-4256415, +3558206, +-1884441, +-475244, +3659623, +-2914867, +689238, +-2576754, +7739914, +1823902, +2077002, +-2365242, +2023481, +1663749, +-4973435, +-694558, +1118078, +2260786, +-3256285, +4596746, +-5421599, +594942, +-1730692, +-4626077, +3077882, +-2232009, +2672161, +3135747, +-4602601, +859784, +-3530668, +21600, +-4690786, +2023164, +-496745, +-2728919, +281474, +-108745, +-809613, +1445687, +-5781458, +2097169, +1594266, +-4504019, +2460482, +6259537, +-700848, +413263, +-1212884, +-5695130, +2094147, +-750529, +-1379008, +6029072, +722889, +1719449, +1682336, +-4219755, +1971162, +66575, +-1195119, +141466, +-1083536, +-718558, +-4039954, +-168429, +-2026861, +2025800, +-761083, +-4194692, +2013337, +-1156936, +3823019, +4081732, +-3145845, +-1733615, +-1371947, +-3811245, +-1584663, +-3547009, +-3267886, +8255291, +-3232160, +3404636, +3248369, +3233853, +671601, +-1009897, +1821121, +-3517645, +2005444, +-2768741, +115998, +533867, +4717709, +1315923, +-3510545, +-3539595, +-538461, +4529529, +2792584, +-107486, +-1840413, +-1474849, +1579605, +-4197602, +-34825, +-462678, +1294881, +-1730927, +-2549709, +-1531672, +-271859, +-1181904, +-1680154, +-2321723, +-6641222, +1127764, +893535, +-2804646, +5653509, +2657606, +-1751466, +-4669812, +-827592, +-126901, +-2599752, +-845148, +1390838, +8975481, +-7663778, +3572438, +5920790, +5233883, +-613590, +-881500, +-3974422, +-5523348, +-3243204, +-6405765, +-4376438, +1352634, +-105650, +2650174, +1442151, +5088231, +2974595, +-4501663, +-841006, +-3101819, +-1265401, +-2756903, +2579743, +2045040, +-5328835, +2801176, +-386694, +-3068782, +3147225, +-248211, +-662659, +-1112717, +2733193, +336344, +3107302, +2244003, +4285762, +1998904, +1888720, +-1174981, +-2567532, +-5588952, +-101948, +4004848, +-610048, +793760, +3345423, +716318, +1033698, +4011882, +-965219, +1258434, +1579522, +-4249500, +3233648, +-424838, +2640541, +1020028, +4933599, +-1964947, +3237309, +-1251962, +-437406, +-2749192, +-2943112, +-117113, +778507, +2757711, +3478291, +-661571, +1077087, +-3821174, +2731860, +3035264, +-4424379, +295413, +3873542, +-1272809, +4145370, +-363272, +2240544, +88954, +-2016552, +-862779, +-844808, +3142493, +2019692, +3648148, +3857820, +593190, +1285134, +-4257140, +-1476035, +-1951773, +-2334649, +1355368, +-4390456, +3666652, +562848, +-8226958, +1134896, +1136697, +-2132899, +3300228, +1855661, +6476864, +5097743, +-1373818, +3287769, +1709294, +-2926119, +2463141, +400199, +3051372, +1815531, +1746372, +398117, +2333959, +-708565, +-4241370, +51697, +-1626217, +26865, +2248300, +3357859, +-325912, +194201, +612298, +388227, +256018, +-5630155, +-1085451, +653494, +-1966315, +-273079, +-4296295, +-2813232, +2079672, +2378463, +-3869089, +-438799, +-725265, +3152791, +3461913, +-777750, +47521, +2588203, +1888001, +-4445421, +654349, +811737, +418334, +-1854075, +-5194402, +-1571674, +-622026, +-1091628, +1787463, +3439585, +2923276, +-1997884, +-193963, +-731696, +3686658, +-1311796, +-5219031, +-2906251, +2140229, +-1846978, +2541247, +-3677377, +-3935140, +3605308, +4807232, +-1633864, +344286, +-2051894, +2498349, +-3085, +379207, +-701595, +-1080351, +3161365, +-1606976, +1640595, +3757649, +798095, +-3167055, +-2288739, +2301831, +-3324819, +3219538, +516049, +-3153835, +7342606, +1098913, +-2522436, +376783, +47367, +530901, +-395499, +304200, +}; + +#define SIZE 24 +__attribute__ ((section(".heapsram"))) int g_mA[SIZE][SIZE]; +__attribute__ ((section(".heapsram"))) int g_mB[SIZE][SIZE]; +__attribute__ ((section(".heapsram"))) int g_mC[SIZE][SIZE]; +__attribute__ ((section(".heapsram"))) int g_mB_tmp[SIZE][SIZE]; diff --git a/carfield/parMatrixMul8/Makefile b/carfield/parMatrixMul8/Makefile new file mode 100755 index 0000000..7c755b8 --- /dev/null +++ b/carfield/parMatrixMul8/Makefile @@ -0,0 +1,8 @@ +PULP_APP = test +PULP_APP_SRCS = matrixMul.c + +PULP_CFLAGS = -O3 + +include $(PULP_SDK_HOME)/install/rules/pulp.mk + +#pulp-bench-reg --name=parMatrixMul8.cycles --module=pulp_rtl_testset --pipeline=$(PIPELINE) --artefact=pulp_rtl_testset --cmd="make run -f Makefile.sdk" --probe-regexp='matrixMul -> success, nr. of errors: 0, execution time: (\d+)' --params="platform($(platformName)),compiler($(OR1K_TOOLCHAIN_TYPE)),nbCores(4),elemSize(8)" --probe-regexp='matrixMulTranspose -> success, nr. of errors: 0, execution time: (\d+)' --params="platform($(platformName)),compiler($(OR1K_TOOLCHAIN_TYPE)),nbCores(4),elemSize(8),transposed" diff --git a/carfield/parMatrixMul8/gen_stimuli.py b/carfield/parMatrixMul8/gen_stimuli.py new file mode 100755 index 0000000..5fd3e84 --- /dev/null +++ b/carfield/parMatrixMul8/gen_stimuli.py @@ -0,0 +1,54 @@ +#!/usr/bin/env python + +import sys +import random + + +def write_arr(f, name, arr): + f.write('const char %s[] = {\n' % name) + for v in arr: + f.write('%d,\n' % (v)) + f.write('};\n\n') + return + +################################################################################ +f = open('parMatrixMul8_stimuli.h', 'w') + + +SIZE = 32 +RANGE = 4 + +m_a = [] +m_b = [] +m_exp = [] + +for i in range(0,SIZE): + for j in range(0,SIZE): + a = random.randint(-RANGE, RANGE-1) + b = random.randint(-RANGE, RANGE-1) + + m_a.append(a) + m_b.append(b) + +for i in range(0,SIZE): + for j in range(0,SIZE): + r = 0 + + for k in range (0,SIZE): + r = r + m_a[i * SIZE + k] * m_b[k * SIZE + j] + + m_exp.append(r) + + +write_arr(f, 'm_a', m_a) +write_arr(f, 'm_b', m_b) +write_arr(f, 'm_exp', m_exp) + +f.write('#define SIZE %d\n' % SIZE) + + +f.write('__attribute__ ((section(".heapsram"))) char g_mA[SIZE][SIZE];\n') +f.write('__attribute__ ((section(".heapsram"))) char g_mB[SIZE][SIZE];\n') +f.write('__attribute__ ((section(".heapsram"))) char g_mC[SIZE][SIZE];\n') +f.write('__attribute__ ((section(".heapsram"))) char g_mB_tmp[SIZE][SIZE];\n') + diff --git a/carfield/parMatrixMul8/matrixMul.c b/carfield/parMatrixMul8/matrixMul.c new file mode 100644 index 0000000..357fdf0 --- /dev/null +++ b/carfield/parMatrixMul8/matrixMul.c @@ -0,0 +1,177 @@ +/* + * Copyright (C) 2018 ETH Zurich and University of Bologna + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/* + * Mantainer: Luca Valente, luca.valente2@unibo.it + */ + +#include "pulp.h" + +#include "parMatrixMul8_stimuli.h" + +void check_matrix_mul(testresult_t *result, void (*start)(), void (*stop)()); +void check_matrix_mul_transpose(testresult_t *result, void (*start)(), void (*stop)()); + +testcase_t testcases[] = { + { .name = "matrixMul", .test = check_matrix_mul }, + { .name = "matrixMulTranspose", .test = check_matrix_mul_transpose }, + {0, 0} +}; + +unsigned int num_cores; + +int main() +{ + if (rt_cluster_id() != 0) + return bench_cluster_forward(0); + + num_cores = get_core_num(); + + if(rt_core_id() < num_cores) { + run_suite(testcases); + } + + synch_barrier(); + + return 0; +} + +void matrix_init(); +unsigned int matrix_check(); + +void check_matrix_mul(testresult_t *result, void (*start)(), void (*stop)()) { + int core_id; + unsigned int i, j, k; + unsigned int chunk; + unsigned int lb, ub; + + core_id = get_core_id(); + + // number of rows each core has to multiply + chunk = SIZE / num_cores; + // lower bound + lb = core_id * chunk; + // upper bound + ub = lb + chunk; + + if(core_id == 0) { + matrix_init(); + } + + if(num_cores != 1) synch_barrier(); + + // start benchmark + start(); + + for(i = lb; i < ub; i++) { + for(j = 0; j < SIZE; j++) { + g_mC[i][j] = 0; + + for(k = 0; k < SIZE; k++) { + g_mC[i][j] += g_mA[i][k] * g_mB[k][j]; + } + } + } + + if(num_cores != 1) synch_barrier(); + + stop(); + + if(core_id == 0) { + result->errors = matrix_check(); + } +} + +void check_matrix_mul_transpose(testresult_t *result, void (*start)(), void (*stop)()) { + int core_id; + unsigned int i, j, k; + unsigned int chunk; + unsigned int lb, ub; + + core_id = get_core_id(); + + // number of rows each core has to multiply + chunk = SIZE / num_cores; + // lower bound + lb = core_id * chunk; + // upper bound + ub = lb + chunk; + + if(core_id == 0) { + matrix_init(); + } + + if(num_cores != 1) synch_barrier(); + + // start benchmark + start(); + + // transpose array before using it + for(i = lb; i < ub; i++) { + for(j = 0; j < SIZE; j++) { + g_mB_tmp[i][j] = g_mB[j][i]; + } + } + + if(num_cores != 1) synch_barrier(); + + for(i = lb; i < ub; i++) { + for(j = 0; j < SIZE; j++) { + g_mC[i][j] = 0; + + for(k = 0; k < SIZE; k++) { + g_mC[i][j] += g_mA[i][k] * g_mB_tmp[j][k]; + } + } + } + + if(num_cores != 1) synch_barrier(); + + stop(); + + if(core_id == 0) { + result->errors = matrix_check(); + } +} + +void matrix_init() { + unsigned int i, j; + + // init, copy to TCDM + for(i = 0; i < SIZE; i++) { + for(j = 0; j < SIZE; j++) { + g_mA[i][j] = m_a[i * SIZE + j]; + g_mB[i][j] = m_b[i * SIZE + j]; + g_mC[i][j] = 0; + } + } +} + +unsigned int matrix_check() { + unsigned int errors = 0; + unsigned int i, j; + // check + for(i = 0; i < SIZE; i++) { + for(j = 0; j < SIZE; j++) { + if(g_mC[i][j] != m_exp[i * SIZE + j]) { + printf("At index %d, %d\n", i, j, 0, 0); + errors++; + } + } + } + + return errors; +} diff --git a/carfield/parMatrixMul8/parMatrixMul8_stimuli.h b/carfield/parMatrixMul8/parMatrixMul8_stimuli.h new file mode 100644 index 0000000..e5a79da --- /dev/null +++ b/carfield/parMatrixMul8/parMatrixMul8_stimuli.h @@ -0,0 +1,3105 @@ +/* + * Copyright (C) 2018 ETH Zurich and University of Bologna + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/* + * Mantainer: Luca Valente, luca.valente2@unibo.it + */ +const char m_a[] = { +-2, +3, +2, +2, +-1, +-2, +3, +0, +0, +-3, +-3, +-4, +-3, +2, +1, +3, +-3, +-2, +3, +-1, +0, +-2, +-1, +1, +-3, +-3, +-1, +1, +-3, +1, +-1, +3, +0, +0, +1, +0, +3, +-1, +-3, +0, +0, +3, +3, +0, +3, +-1, +-2, +3, +-1, +-2, +-2, +2, +-2, +-3, +-1, +-2, +2, +2, +0, +2, +-1, +-2, +1, +-3, +2, +-4, +3, +0, +2, +-3, +2, +1, +-1, +-4, +3, +-2, +-4, +2, +0, +1, +-2, +-2, +-3, +2, +-4, +-3, +2, +2, +1, +-2, +3, +2, +3, +-4, +0, +1, +-3, +3, +1, +1, +0, +0, +2, +-1, +0, +3, +-3, +2, +3, +0, +1, +-4, +1, +1, +-1, +-4, +-3, +2, +2, +2, +-2, +-2, +2, +3, +0, +-2, +-1, +-4, +0, +2, +-4, +3, +-2, +-3, +-4, +-3, +3, +3, +-4, +-2, +3, +0, +3, +0, +2, +0, +-2, +3, +-4, +0, +3, +-1, +1, +3, +-3, +3, +1, +-4, +-2, +-2, +2, +1, +3, +-4, +0, +-1, +0, +0, +-2, +-4, +-1, +0, +3, +3, +1, +-3, +0, +-4, +-3, +-3, +2, +0, +-4, +0, +-3, +1, +-4, +-2, +0, +2, +-1, +1, +1, +0, +-3, +1, +-1, +1, +-1, +3, +2, +2, +2, +-2, +-1, +2, +1, +0, +-3, +-1, +-2, +2, +-1, +-3, +-2, +-4, +0, +3, +2, +-1, +1, +-1, +-3, +-2, +3, +0, +3, +0, +-1, +-4, +-1, +0, +2, +0, +3, +-3, +-2, +3, +1, +-3, +-4, +3, +1, +-4, +3, +3, +3, +-2, +-2, +0, +1, +2, +-2, +-4, +-2, +1, +1, +-4, +-1, +3, +-3, +2, +3, +0, +1, +-3, +1, +0, +2, +-4, +-4, +-4, +-3, +2, +-4, +2, +1, +1, +0, +-1, +0, +-3, +3, +-4, +-2, +-2, +-1, +1, +-1, +-1, +1, +0, +0, +1, +-3, +-1, +3, +2, +1, +2, +1, +-1, +3, +3, +-2, +2, +0, +0, +-1, +-4, +-4, +-3, +1, +-4, +-2, +-1, +1, +1, +-2, +-4, +-3, +-4, +0, +-4, +0, +-4, +-4, +3, +-4, +3, +0, +2, +-3, +0, +-2, +3, +1, +-1, +2, +3, +0, +-1, +-3, +-1, +1, +3, +3, +-3, +0, +0, +-4, +-2, +2, +-2, +-2, +-3, +-2, +-4, +2, +-2, +2, +2, +-2, +0, +-2, +2, +3, +0, +2, +0, +-3, +-1, +2, +-3, +-4, +1, +-4, +-3, +-2, +2, +2, +1, +-1, +-4, +2, +1, +2, +0, +0, +-3, +2, +-1, +0, +0, +-4, +1, +-3, +-3, +0, +-1, +1, +3, +2, +-2, +-4, +-2, +2, +-4, +0, +-2, +-4, +-1, +3, +1, +0, +1, +3, +3, +1, +2, +-4, +2, +-2, +-3, +2, +-3, +2, +-1, +-3, +-1, +-1, +-2, +1, +2, +-2, +-4, +1, +-3, +3, +-3, +-3, +0, +1, +3, +1, +-3, +0, +-2, +0, +-4, +0, +1, +2, +-4, +0, +0, +-4, +-1, +0, +-2, +-2, +-4, +-2, +-1, +3, +-1, +3, +2, +-3, +-4, +-2, +3, +-1, +1, +-3, +2, +-2, +3, +0, +3, +-3, +-4, +-1, +0, +1, +-2, +2, +3, +1, +3, +-2, +-3, +-1, +-1, +1, +-1, +-1, +1, +0, +-4, +-1, +-1, +-3, +0, +3, +-3, +-4, +-1, +1, +-4, +3, +1, +1, +0, +-3, +1, +-3, +2, +-2, +-2, +0, +-4, +3, +-2, +3, +-2, +1, +1, +-3, +0, +0, +-3, +1, +1, +0, +-1, +1, +0, +-1, +-3, +-3, +-2, +-4, +2, +-2, +3, +0, +-3, +3, +3, +-3, +-2, +3, +-2, +-2, +0, +1, +-3, +-2, +3, +2, +1, +-2, +-2, +0, +-1, +2, +3, +1, +-1, +0, +-2, +2, +-3, +-2, +2, +3, +-2, +1, +1, +-4, +-2, +2, +-1, +3, +-3, +-3, +2, +1, +1, +0, +-3, +0, +-2, +2, +0, +1, +-1, +-4, +1, +0, +0, +1, +2, +-3, +3, +-3, +2, +-4, +0, +1, +-2, +2, +-3, +3, +0, +0, +0, +-3, +-1, +2, +-3, +-1, +1, +3, +0, +-1, +-4, +3, +0, +-3, +2, +3, +-4, +2, +0, +-1, +2, +-4, +-1, +1, +-2, +-4, +-4, +3, +1, +2, +-2, +-3, +-3, +-2, +3, +3, +2, +-2, +-1, +3, +-3, +-4, +2, +3, +3, +-2, +2, +-1, +-3, +0, +3, +-2, +-3, +0, +-3, +-1, +-3, +-4, +3, +-2, +-2, +-1, +3, +2, +-1, +-1, +-1, +2, +-1, +1, +2, +-1, +-3, +3, +-2, +-3, +-1, +0, +-3, +-2, +1, +3, +-2, +2, +1, +-3, +-1, +0, +-1, +-3, +1, +3, +-4, +-3, +1, +1, +2, +-4, +2, +-2, +0, +3, +0, +-2, +-1, +-1, +1, +-2, +-2, +2, +-3, +0, +-4, +-1, +3, +-4, +3, +-1, +-2, +0, +1, +3, +-4, +0, +-4, +-4, +-2, +1, +-2, +3, +-3, +-2, +-1, +-4, +-2, +-3, +-4, +2, +-2, +0, +2, +0, +-4, +-4, +-4, +-3, +3, +3, +-1, +0, +0, +-3, +3, +-4, +-2, +3, +-3, +2, +1, +-2, +3, +-2, +-1, +3, +-3, +2, +0, +-1, +-3, +0, +0, +-3, +0, +3, +2, +3, +-2, +-3, +2, +-1, +0, +-3, +-2, +1, +2, +0, +-3, +-4, +-3, +0, +0, +-3, +-1, +0, +1, +0, +-2, +0, +2, +-1, +3, +-4, +3, +-4, +0, +-3, +1, +3, +2, +-3, +-4, +-1, +-1, +-3, +0, +-3, +-2, +-1, +-3, +-1, +1, +-2, +-3, +2, +-2, +-4, +-1, +0, +2, +-2, +1, +0, +1, +0, +3, +-4, +2, +0, +3, +0, +-3, +1, +0, +-2, +3, +1, +1, +-1, +-1, +-2, +-3, +-4, +-3, +1, +2, +-2, +2, +-1, +1, +-3, +-3, +-4, +-2, +-3, +-1, +1, +0, +-1, +-3, +-2, +-3, +-2, +2, +-4, +-3, +0, +2, +-1, +-4, +-3, +3, +1, +3, +3, +-1, +-1, +-3, +3, +-4, +-3, +3, +-1, +3, +-4, +1, +1, +-4, +-2, +-3, +3, +1, +-1, +-4, +-2, +-4, +2, +2, +1, +-3, +2, +-3, +1, +0, +3, +0, +-2, +-2, +-1, +3, +2, +0, +3, +1, +-4, +-1, +-3, +-1, +-4, +0, +1, +-1, +-2, +2, +2, +-4, +-1, +2, +-4, +0, +-2, +2, +2, +1, +-3, +-2, +-1, +3, +-2, +3, +1, +2, +-2, +-4, +0, +3, +0, +-1, +1, +-3, +-4, +0, +-4, +0, +-1, +-4, +2, +-3, +1, +-1, +2, +-3, +0, +0, +-2, +3, +-4, +0, +-3, +-3, +-2, +-1, +-3, +-4, +-2, +-4, +-4, +-1, +-4, +0, +3, +3, +-4, +-3, +-1, +-1, +2, +-4, +1, +-2, +-3, +-3, +-1, +3, +0, +-4, +0, +3, +}; + +const char m_b[] = { +0, +1, +-4, +0, +3, +-1, +-4, +2, +-1, +3, +-1, +1, +-2, +-1, +-4, +-3, +2, +-3, +-3, +-1, +1, +-2, +2, +-1, +-2, +3, +-2, +-3, +0, +1, +2, +3, +3, +-2, +1, +-2, +2, +-1, +1, +-4, +3, +0, +-1, +2, +-1, +-1, +-4, +1, +1, +-2, +-4, +3, +-2, +-2, +2, +0, +-2, +3, +-4, +0, +3, +2, +-3, +-2, +-2, +2, +2, +-4, +-4, +1, +-3, +-4, +1, +-3, +-4, +0, +-2, +0, +-2, +-3, +-1, +0, +-2, +3, +-4, +-1, +-2, +-3, +-1, +-2, +-4, +0, +-2, +0, +3, +0, +-3, +3, +-1, +-2, +-4, +2, +0, +-1, +-2, +3, +-2, +3, +-4, +-4, +-1, +-2, +3, +2, +1, +1, +3, +-1, +-2, +0, +1, +-4, +-3, +3, +1, +1, +2, +2, +-3, +-2, +3, +3, +-3, +-4, +1, +-1, +-1, +0, +-2, +-3, +1, +-3, +-1, +-2, +1, +-1, +3, +-1, +2, +3, +1, +-2, +-3, +-2, +-2, +0, +0, +2, +1, +0, +2, +-4, +-4, +-1, +0, +0, +1, +-1, +0, +0, +2, +0, +-4, +2, +0, +1, +-3, +0, +1, +-1, +1, +2, +1, +-3, +-1, +-3, +-3, +-1, +0, +3, +3, +1, +-2, +2, +-2, +-4, +-4, +1, +-4, +3, +-3, +-4, +2, +-3, +-1, +-3, +-1, +-2, +3, +2, +-1, +1, +3, +-1, +2, +3, +-3, +-1, +-1, +1, +3, +-1, +-4, +0, +0, +3, +1, +-4, +0, +0, +-1, +1, +2, +2, +-1, +1, +2, +-4, +-1, +1, +3, +0, +-1, +3, +-4, +1, +1, +1, +-2, +1, +-1, +-3, +0, +-3, +0, +-1, +0, +-1, +1, +-1, +-2, +-3, +1, +-1, +3, +3, +2, +3, +2, +-1, +-4, +1, +2, +-3, +-3, +-3, +3, +1, +3, +3, +3, +-3, +-1, +1, +0, +-3, +2, +2, +-3, +-4, +2, +2, +-4, +-2, +-2, +2, +1, +2, +0, +-3, +3, +-4, +-3, +3, +-1, +-1, +-2, +1, +-1, +-3, +-4, +-1, +3, +-1, +2, +1, +3, +-2, +2, +1, +1, +-4, +-2, +-1, +0, +2, +3, +-3, +2, +2, +-4, +1, +3, +1, +2, +2, +-2, +-2, +3, +-3, +-4, +2, +-3, +-1, +-1, +-1, +-2, +-2, +1, +3, +0, +1, +0, +-2, +-2, +-1, +-3, +-4, +-2, +0, +-1, +1, +-3, +-3, +-4, +3, +-3, +-4, +3, +-3, +3, +-2, +0, +-2, +1, +-1, +3, +-1, +3, +1, +-3, +0, +0, +2, +1, +-3, +-4, +1, +-1, +-2, +2, +2, +-4, +-2, +2, +-3, +-1, +-3, +3, +0, +-3, +2, +-4, +2, +3, +-3, +2, +2, +3, +-3, +-1, +-2, +-4, +-2, +1, +-1, +-1, +-2, +-2, +-2, +-1, +-2, +-1, +1, +0, +-1, +-3, +2, +-4, +-4, +2, +0, +3, +-3, +-3, +3, +1, +1, +0, +3, +-3, +-4, +2, +-2, +-4, +1, +2, +0, +2, +2, +1, +0, +-3, +-1, +3, +1, +-3, +1, +2, +-4, +1, +1, +3, +-2, +3, +-4, +1, +-1, +-4, +-1, +3, +3, +-1, +-4, +-4, +0, +-4, +0, +1, +-3, +-3, +1, +-2, +0, +3, +-3, +-4, +-4, +0, +-3, +1, +-2, +-1, +1, +-4, +-3, +-1, +2, +0, +-3, +0, +-1, +3, +2, +2, +0, +0, +-4, +-4, +1, +-3, +3, +0, +3, +-3, +-1, +2, +2, +2, +-2, +-3, +-2, +-3, +3, +-2, +3, +3, +1, +0, +-2, +-1, +0, +-2, +3, +-4, +-1, +2, +0, +-3, +-4, +2, +-3, +-1, +-1, +0, +2, +-4, +2, +-3, +-1, +0, +2, +1, +2, +-2, +2, +0, +1, +0, +0, +-3, +0, +0, +0, +-1, +-4, +-2, +-3, +0, +3, +0, +1, +-1, +3, +0, +3, +-1, +3, +-1, +-4, +-2, +-4, +2, +-4, +3, +3, +1, +2, +-2, +2, +3, +-2, +1, +3, +-1, +3, +2, +-4, +-1, +0, +0, +0, +-3, +-3, +1, +-3, +-3, +-1, +2, +-1, +-4, +-4, +-2, +-4, +2, +-3, +-3, +-4, +2, +2, +-4, +3, +-1, +-1, +0, +1, +0, +2, +0, +0, +3, +3, +0, +-2, +2, +0, +-3, +1, +2, +-2, +0, +-3, +3, +-3, +-4, +1, +-1, +-4, +3, +-2, +2, +0, +-2, +-4, +0, +-3, +2, +-3, +0, +3, +2, +-4, +-4, +0, +1, +3, +-3, +-3, +0, +-3, +3, +-1, +-4, +3, +1, +2, +3, +-2, +2, +3, +0, +-3, +-4, +3, +-4, +-1, +2, +1, +3, +-3, +-4, +3, +1, +0, +0, +-3, +-4, +-3, +2, +0, +1, +-4, +3, +-4, +-2, +-1, +-4, +2, +-4, +2, +0, +1, +0, +-4, +-4, +0, +-4, +0, +-4, +-1, +2, +0, +0, +-2, +-1, +-2, +0, +3, +-1, +3, +1, +-4, +-1, +1, +-1, +2, +0, +3, +-4, +-4, +-2, +-3, +-2, +1, +0, +-4, +3, +0, +-4, +-1, +0, +3, +-4, +2, +-4, +-1, +2, +-2, +0, +1, +1, +-3, +-2, +3, +-4, +-4, +0, +3, +-4, +-2, +0, +1, +-4, +-4, +2, +-2, +-3, +-4, +-4, +3, +-1, +-4, +2, +0, +2, +3, +2, +0, +3, +-1, +3, +2, +-4, +-1, +-2, +-1, +1, +3, +-1, +-2, +2, +3, +-4, +-3, +-1, +2, +-2, +2, +-2, +2, +-1, +0, +-1, +-4, +-4, +1, +-3, +2, +3, +-2, +0, +0, +-2, +-4, +1, +0, +3, +2, +-2, +0, +1, +-3, +-3, +3, +1, +-2, +0, +-1, +3, +-1, +-4, +-1, +3, +-3, +2, +-4, +-1, +2, +-1, +-2, +2, +-3, +0, +3, +-2, +2, +2, +-3, +3, +-1, +-4, +-1, +-4, +-2, +-2, +1, +-4, +-2, +3, +1, +-1, +3, +2, +3, +-4, +1, +-4, +-4, +0, +1, +3, +2, +-1, +-2, +-2, +1, +-1, +-1, +0, +-1, +0, +-4, +0, +0, +2, +-4, +2, +2, +-1, +2, +1, +2, +1, +2, +-2, +1, +-1, +-4, +-1, +1, +3, +-4, +-1, +1, +-1, +3, +-3, +-3, +2, +-2, +1, +1, +3, +3, +-3, +0, +0, +2, +2, +3, +0, +-3, +1, +1, +2, +-4, +0, +0, +2, +-1, +-2, +2, +0, +-1, +1, +2, +-4, +-2, +3, +2, +3, +-3, +-2, +1, +-2, +3, +1, +-2, +-2, +2, +1, +-4, +-3, +-2, +-4, +1, +-1, +0, +3, +-1, +2, +-1, +-1, +0, +1, +0, +-4, +3, +-2, +1, +3, +0, +2, +-2, +0, +-3, +0, +0, +0, +2, +-4, +3, +0, +1, +-4, +-4, +3, +-1, +-4, +0, +-2, +2, +-3, +-3, +-3, +-2, +-4, +-4, +3, +-3, +1, +-4, +-2, +-1, +-4, +1, +0, +3, +-4, +1, +1, +2, +-3, +0, +}; + +const char m_exp[] = { +-7, +54, +40, +-69, +27, +6, +-46, +-45, +42, +-3, +39, +8, +-11, +-7, +-25, +-28, +50, +20, +-34, +14, +6, +-2, +11, +53, +-28, +14, +-64, +5, +21, +-7, +-49, +-4, +-15, +-72, +5, +35, +-9, +-19, +5, +-19, +-2, +8, +-17, +-9, +49, +-28, +-23, +27, +-47, +35, +36, +-19, +-9, +24, +12, +-4, +30, +-28, +30, +-27, +-17, +41, +21, +-5, +-36, +33, +-18, +-8, +6, +19, +-33, +26, +-38, +-29, +-40, +-21, +13, +-15, +-6, +-22, +13, +10, +51, +-38, +-53, +48, +17, +53, +-35, +-21, +28, +-10, +-54, +54, +-17, +19, +-27, +8, +20, +42, +-31, +8, +22, +73, +-6, +-9, +-11, +-17, +-2, +-29, +20, +52, +0, +-5, +-44, +31, +-6, +-12, +-11, +-1, +19, +-46, +24, +19, +6, +-40, +11, +-23, +8, +-2, +-36, +77, +15, +-9, +31, +66, +-39, +24, +-19, +40, +-6, +-12, +-12, +37, +8, +9, +-18, +-1, +-8, +-26, +25, +45, +50, +-15, +49, +3, +-16, +2, +48, +-37, +67, +-6, +40, +-13, +60, +38, +-27, +11, +1, +-8, +12, +-27, +5, +12, +33, +-24, +4, +-40, +-41, +39, +-13, +17, +13, +-25, +-29, +21, +-28, +18, +-8, +-23, +32, +-22, +26, +-22, +29, +13, +16, +11, +21, +12, +-11, +64, +27, +3, +75, +-37, +-21, +30, +6, +-18, +43, +-10, +-26, +32, +16, +27, +8, +-6, +47, +7, +-8, +28, +29, +-18, +-40, +10, +40, +16, +-7, +29, +-19, +38, +65, +53, +-71, +42, +28, +-69, +-22, +4, +52, +-74, +-9, +12, +-46, +-32, +-72, +5, +-33, +34, +-6, +-38, +14, +0, +47, +-23, +-4, +-14, +-2, +14, +-17, +29, +7, +32, +-39, +-21, +40, +14, +21, +4, +-3, +9, +-15, +-2, +35, +-13, +47, +9, +-11, +22, +10, +5, +23, +39, +20, +14, +13, +26, +19, +-49, +60, +57, +-18, +-35, +33, +-43, +20, +46, +35, +-17, +72, +62, +25, +-13, +-18, +-2, +20, +-6, +-13, +-9, +49, +6, +41, +-20, +-7, +14, +-20, +26, +32, +37, +-16, +34, +66, +10, +23, +-32, +11, +-37, +-18, +-9, +7, +-15, +69, +28, +14, +19, +-27, +11, +71, +5, +-47, +22, +-41, +-8, +35, +25, +92, +-7, +-34, +-33, +-9, +-33, +33, +9, +45, +28, +28, +24, +-24, +43, +16, +23, +63, +-28, +53, +32, +33, +5, +12, +-34, +-40, +6, +-10, +0, +16, +23, +38, +12, +33, +16, +-5, +-49, +22, +23, +4, +45, +16, +43, +1, +24, +-32, +16, +8, +37, +-38, +-7, +15, +65, +-23, +-61, +34, +18, +-4, +12, +-24, +-38, +22, +-23, +-13, +80, +-10, +29, +58, +26, +-40, +40, +33, +-13, +-14, +26, +37, +97, +-1, +4, +51, +65, +-33, +47, +10, +25, +-30, +10, +-11, +-34, +18, +-28, +-47, +5, +-42, +-27, +24, +55, +-10, +-26, +28, +50, +17, +24, +9, +72, +-27, +-41, +29, +23, +-24, +-15, +-14, +22, +3, +3, +3, +42, +17, +-5, +-21, +77, +29, +-33, +-1, +27, +-38, +-26, +7, +36, +-30, +24, +39, +-10, +-39, +8, +-32, +-14, +63, +48, +-41, +2, +-24, +58, +24, +21, +11, +-15, +82, +-33, +53, +14, +-1, +34, +12, +31, +7, +-14, +-4, +16, +-6, +-9, +-7, +28, +50, +-6, +-10, +15, +20, +-19, +2, +40, +54, +12, +24, +-5, +-6, +19, +14, +22, +27, +15, +14, +7, +-8, +-19, +34, +-36, +12, +-11, +-5, +23, +-1, +30, +-34, +-11, +8, +27, +9, +-8, +8, +-26, +-1, +51, +30, +-29, +3, +-26, +0, +-37, +3, +-12, +3, +33, +-36, +2, +-48, +-15, +9, +-38, +-6, +-2, +10, +2, +33, +32, +-22, +-2, +-19, +16, +-12, +28, +8, +63, +-6, +-77, +23, +-13, +-23, +0, +-20, +28, +33, +23, +-34, +-12, +-3, +-22, +59, +-10, +-33, +-13, +48, +0, +3, +28, +14, +-9, +-25, +18, +-2, +-57, +9, +-21, +-46, +36, +91, +18, +2, +-14, +13, +-24, +-20, +-61, +31, +-24, +47, +-27, +40, +12, +12, +13, +-16, +10, +28, +7, +-11, +20, +8, +13, +-34, +4, +28, +-66, +-32, +-25, +-8, +-51, +-13, +34, +43, +-26, +3, +51, +-37, +-80, +20, +-10, +-43, +3, +57, +17, +8, +-25, +-5, +16, +49, +41, +20, +19, +-8, +-31, +47, +-46, +-23, +-28, +34, +-39, +0, +64, +32, +20, +43, +15, +36, +15, +-31, +59, +49, +-21, +60, +0, +18, +0, +21, +21, +22, +-19, +7, +19, +22, +42, +44, +-9, +43, +5, +-19, +-43, +-30, +-4, +-24, +-11, +65, +55, +-5, +-33, +17, +8, +14, +38, +3, +-5, +33, +8, +-23, +-2, +78, +-11, +14, +-30, +10, +27, +46, +42, +-1, +6, +24, +-7, +13, +2, +9, +-4, +16, +-29, +87, +49, +97, +50, +14, +-17, +101, +45, +-42, +23, +53, +52, +28, +-4, +10, +-16, +-23, +31, +-54, +17, +-19, +-34, +-14, +62, +19, +-19, +53, +-3, +17, +-16, +-19, +-17, +34, +59, +-3, +-36, +27, +36, +-20, +-42, +8, +-30, +31, +-20, +15, +36, +27, +43, +-14, +9, +6, +-13, +55, +55, +-21, +10, +3, +-4, +33, +-22, +-26, +-43, +38, +19, +-12, +28, +47, +-17, +-23, +15, +-39, +-35, +-4, +14, +34, +56, +-16, +13, +-38, +14, +13, +-1, +-37, +-21, +38, +5, +-10, +51, +34, +44, +-9, +36, +-14, +-3, +-1, +14, +-25, +7, +38, +-49, +24, +-3, +-7, +-55, +42, +23, +-35, +61, +21, +33, +-30, +26, +-44, +-24, +50, +37, +43, +22, +3, +-34, +36, +24, +-32, +-14, +-20, +12, +53, +-3, +67, +24, +23, +48, +-21, +14, +49, +40, +49, +2, +89, +62, +-3, +24, +-27, +51, +22, +30, +-5, +-8, +7, +-29, +17, +85, +78, +49, +66, +-18, +-19, +14, +-35, +-45, +85, +31, +16, +13, +8, +-35, +38, +-11, +-19, +19, +-14, +-15, +1, +-25, +47, +-32, +3, +31, +39, +42, +5, +7, +19, +-31, +25, +-17, +7, +1, +7, +-6, +2, +-2, +19, +-15, +8, +34, +-35, +-8, +84, +57, +-65, +47, +18, +17, +-60, +-7, +29, +3, +1, +-5, +-28, +4, +-6, +-46, +-34, +47, +12, +9, +59, +19, +6, +18, +29, +-14, +5, +3, +-24, +43, +10, +13, +-53, +8, +9, +-41, +14, +12, +-8, +-28, +21, +-2, +92, +-36, +-16, +23, +10, +34, +-2, +13, +14, +45, +-15, +64, +-16, +11, +34, +-29, +48, +40, +71, +30, +-21, +0, +34, +8, +46, +-45, +24, +54, +3, +-29, +17, +-9, +61, +-36, +-38, +5, +6, +56, +28, +55, +28, +-13, +-21, +44, +-31, +-20, +}; + +#define SIZE 32 +__attribute__ ((section(".heapsram"))) char g_mA[SIZE][SIZE]; +__attribute__ ((section(".heapsram"))) char g_mB[SIZE][SIZE]; +__attribute__ ((section(".heapsram"))) char g_mC[SIZE][SIZE]; +__attribute__ ((section(".heapsram"))) char g_mB_tmp[SIZE][SIZE]; diff --git a/carfield/redmule/Makefile b/carfield/redmule/Makefile new file mode 100644 index 0000000..c498417 --- /dev/null +++ b/carfield/redmule/Makefile @@ -0,0 +1,9 @@ +PULP_APP = test +PULP_APP_SRCS = redmule.c +PULP_CFLAGS = -O3 + +ifeq ($(use_no_dma),1) + PULP_CFLAGS += -DUSE_NO_DMA +endif + +include $(PULP_SDK_HOME)/install/rules/pulp.mk diff --git a/carfield/redmule/archi_redmule.h b/carfield/redmule/archi_redmule.h new file mode 100644 index 0000000..9222d63 --- /dev/null +++ b/carfield/redmule/archi_redmule.h @@ -0,0 +1,164 @@ +/* + * Copyright (C) 2022-2023 ETH Zurich and University of Bologna + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * SPDX-License-Identifier: Apache-2.0 + * + * Author: Yvan Tortorella + * + * High-level architecture of RedMulE + * + */ + +#ifndef __ARCHI_REDMULE_H__ +#define __ARCHI_REDMULE_H__ + +/* + * |========================================================================| + * || || + * ||Control and generic configuration register layout || + * |========================================================================| + * || # reg | offset | bits | bitmask || content || + * ||-------+----------+---------+--------------++-------------------------|| + * || 0 | 0x0000 | 31: 0 | 0xFFFFFFFF || TRIGGER || + * || 1 | 0x0004 | 31: 0 | 0xFFFFFFFF || ACQUIRE || + * || 2 | 0x0008 | 31: 0 | 0xFFFFFFFF || EVT_ENABLE || + * || 3 | 0x000c | 31: 0 | 0xFFFFFFFF || STATUS || + * || 4 | 0x0010 | 31: 0 | 0xFFFFFFFF || RUNNING_JOB || + * || 5 | 0x0014 | 31: 0 | 0xFFFFFFFF || SOFT_CLEAR || + * |========================================================================| + * || || + * ||Job-dependent registers layout || + * |========================================================================| + * || # reg | offset | bits | bitmask || content || + * ||-------+----------+---------+--------------++-------------------------|| + * || 0 | 0x0040 | 31: 0 | 0xFFFFFFFF || X_ADDR || + * ||-------+----------+---------+--------------++-------------------------|| + * || 1 | 0x0044 | 31: 0 | 0xFFFFFFFF || W_ADDR || + * ||-------+----------+---------+--------------++-------------------------|| + * || 2 | 0x0048 | 31: 0 | 0xFFFFFFFF || Z_ADDR || + * ||-------+----------+---------+--------------++-------------------------|| + * || 3 | 0x004C | | || Matrix Config 0 Reg || + * || | | 31:16 | 0xFFFF0000 || K Size (W Columns) || + * || | | 15: 0 | 0x0000FFFF || M Size (X Rows) || + * ||-------+----------+---------+--------------++-------------------------|| + * || 4 | 0x0050 | | || Matrix Config 1 Reg || + * || | | 31:16 | 0xFFFFFFFF || N Size (X Cols/W Rows) || + * ||-------+----------+---------+--------------++-------------------------|| + * || 5 | 0x0054 | | || Matrix Arithmetic Reg || + * || | | 12:10 | 0x00001C00 || Operation selection || + * || | | 9: 7 | 0x00000380 || Input/Output format || + * |========================================================================| + * + */ + +/* PULP Cluster Archi defines */ +#define ARCHI_CLUST_CTRL_BASE 0x50200000 +#define ARCHI_CLUST_HWPE_BASE 0x50201000 +#define DMA_COMMAND_QUEUE 0x50204400 +#define DMA_STATUS_REGISTER 0x50204404 +#define ARCHI_CL_HWPE_EVT0 12 +#define ARCHI_CL_HWPE_EVT1 13 +#define FC_DMA_EVENT 8 +#define CL_DMA_EVENT 22 +#define CLUST_CTRL_HWPE_EN 0x18 +#define CLUST_CTRL_HWPE_EN_MASK 0x800 +#define __builtin_bitinsert(a,b,c,d) (a | (((b << (32-c)) >> (32-c)) << d)) + +// RedMulE architecture +#define ADDR_WIDTH 32 +#define DATA_WIDTH 256 +#define REDMULE_FMT 16 +#define ARRAY_HEIGHT 4 +#define PIPE_REGS 3 +#define ARRAY_WIDTH 12 /* Superior limit is ARRAY_HEIGHT*PIPE_REGS */ + +// Commands +#define REDMULE_TRIGGER 0x00 +#define REDMULE_ACQUIRE 0x04 +#define REDMULE_FINISHED 0x08 +#define REDMULE_STATUS 0x0C +#define REDMULE_RUNNING_JOB 0x10 +#define REDMULE_SOFT_CLEAR 0x14 + +// Registers +#define REDMULE_REG_OFFS 0x40 +// #define REDMULE_REG_X_PTR 0x00 +// #define REDMULE_REG_W_PTR 0x04 +// #define REDMULE_REG_Z_PTR 0x08 +// #define REDMULE_MCFG0_PTR 0x0C +// #define REDMULE_MCFG1_PTR 0x10 +// #define REDMULE_ARITH_PTR 0x14 +#define REDMULE_REG_X_PTR 0x00 +#define REDMULE_REG_W_PTR 0x04 +#define REDMULE_REG_Y_PTR 0x08 +#define REDMULE_REG_Z_PTR 0x0C +#define REDMULE_REG_X_ITER_PTR 0x10 +#define REDMULE_REG_W_ITER_PTR 0x14 +#define REDMULE_REG_LEFTOVERS_PTR 0x18 +#define REDMULE_REG_LEFT_PARAMS_PTR 0x1C +#define REDMULE_REG_X_D1_STRIDE_PTR 0x20 +#define REDMULE_REG_W_TOT_LEN_PTR 0x24 +#define REDMULE_REG_TOT_X_READ_PTR 0x28 +#define REDMULE_REG_W_D0_STRIDE_PTR 0x2C +#define REDMULE_REG_YZ_TOT_LEN_PTR 0x30 +#define REDMULE_REG_YZ_D0_STRIDE_PTR 0x34 +#define REDMULE_REG_YZ_D2_STRIDE_PTR 0x38 +#define REDMULE_REG_X_ROWS_OFFS_PTR 0x3C +#define REDMULE_REG_X_BUFFER_SLOTS_PTR 0x40 +#define REDMULE_REG_X_TOT_LEN_PTR 0x44 +#define REDMULE_REG_OP_SELECTION 0x48 + +// OPs definition +#define MATMUL 0x0 +#define GEMM 0x1 +#define ADDMAX 0x2 +#define ADDMIN 0x3 +#define MULMAX 0x4 +#define MULMIN 0x5 +#define MAXMIN 0x6 +#define MINMAX 0x7 + +// GEMM formats +#define Float8 0x0 +#define Float16 0x1 +#define Float8Alt 0x2 +#define Float16Alt 0x3 + +#define RNE 0x0 +#define RTZ 0x1 +#define OP_FMADD 0x0 +#define OP_ADD 0x2 +#define OP_MUL 0x3 +#define OP_MINMAX 0x7 + +// FP Formats encoding +#define FP16 0x2 +#define FP8 0x3 +#define FP16ALT 0x4 +#define FP8ALT 0x5 + +/* DMA Archi */ +#define DMA_TX 0 +#define DMA_RX 1 +#define DMA_INC 1 + +#define PLP_DMA_TYPE_BIT 0x00000011 +#define PLP_DMA_INCR_BIT 0x00000012 +#define PLP_DMA_2D_BIT 0x00000013 +#define PLP_DMA_ELE_BIT 0x00000014 +#define PLP_DMA_ILE_BIT 0x00000015 +#define PLP_DMA_BLE_BIT 0x00000016 +#define PLP_DMA_2D_TCDM_BIT 0x0000017 + +#endif diff --git a/carfield/redmule/hal_redmule.h b/carfield/redmule/hal_redmule.h new file mode 100644 index 0000000..c5a0c32 --- /dev/null +++ b/carfield/redmule/hal_redmule.h @@ -0,0 +1,527 @@ +/* + * Copyright (C) 2022-2023 ETH Zurich and University of Bologna + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * SPDX-License-Identifier: Apache-2.0 + * + * Author: Yvan Tortorella + * + * RedMulE Hardware Abstraction Layer (HAL) + */ + +#ifndef __HAL_REDMULE_H__ +#define __HAL_REDMULE_H__ + +#include +#include "inc/x_input.h" +#include "inc/w_input.h" +#include "inc/y_input.h" +#include "inc/z_output.h" +#include "inc/golden.h" +#include "inc/tensor_dim.h" + +/* + * + * For control, generic configuration register layout, + * and job-dependent register map, look at redmule_archi.h + * + */ + +// For all the following functions we use __builtin_pulp_OffsetedWrite and __builtin_pulp_OffsetedRead +// instead of classic load/store because otherwise the compiler is not able to correctly factorize +// the HWPE base in case several accesses are done, ending up with twice more code + +#define HWPE_WRITE(value, offset) *(int *)(ARCHI_CLUST_HWPE_BASE + offset) = value +#define HWPE_READ(offset) *(int *)(ARCHI_CLUST_HWPE_BASE + offset) + +static inline void redmule_x_add_set (unsigned int value) { + HWPE_WRITE(value, REDMULE_REG_OFFS + REDMULE_REG_X_PTR); +} + +static inline void redmule_w_add_set (unsigned int value) { + HWPE_WRITE(value, REDMULE_REG_OFFS + REDMULE_REG_W_PTR); +} + +static inline void redmule_y_add_set (unsigned int value) { + HWPE_WRITE(value, REDMULE_REG_OFFS + REDMULE_REG_Y_PTR); +} + +static inline void redmule_z_add_set (unsigned int value) { + HWPE_WRITE(value, REDMULE_REG_OFFS + REDMULE_REG_Z_PTR); +} + +// static inline void redmule_mcfg_set (uint32_t mcfg0, uint32_t mcfg1) { +// HWPE_WRITE(mcfg0, REDMULE_REG_OFFS + REDMULE_MCFG0_PTR); +// HWPE_WRITE(mcfg1, REDMULE_REG_OFFS + REDMULE_MCFG1_PTR); +// } +// +// static inline void redmule_arith_set (uint32_t arith) { +// HWPE_WRITE(arith, REDMULE_REG_OFFS + REDMULE_ARITH_PTR); +// } + +static inline void hwpe_trigger_job() { + HWPE_WRITE(0, REDMULE_TRIGGER); +} + +static inline int hwpe_acquire_job() { + return HWPE_READ(REDMULE_ACQUIRE); +} + +static inline unsigned int hwpe_get_status() { + return HWPE_READ(REDMULE_STATUS); +} + +static inline void hwpe_soft_clear() { + HWPE_WRITE(1, REDMULE_SOFT_CLEAR); +} + +static inline void hwpe_cg_enable() { + *(volatile int*) (ARCHI_CLUST_CTRL_BASE + CLUST_CTRL_HWPE_EN) |= CLUST_CTRL_HWPE_EN_MASK; +} + +static inline void hwpe_cg_disable() { + *(volatile int*) (ARCHI_CLUST_CTRL_BASE + CLUST_CTRL_HWPE_EN) &= ~CLUST_CTRL_HWPE_EN_MASK; +} + +static inline void redmule_evt_wait() { + do { + eu_evt_maskWaitAndClr (1 << ARCHI_CL_HWPE_EVT0); + } while((*(int volatile *)(ARCHI_CLUST_HWPE_BASE + REDMULE_STATUS)) != 0); +} + +/* DMA APIs */ +static inline int mchan_alloc(){ + return *(volatile int*) DMA_COMMAND_QUEUE; +} + +static inline void mchan_transfer(unsigned int len, + unsigned int ext_addr, + unsigned int tcdm_addr) { + + *(volatile int*) DMA_COMMAND_QUEUE = len | + (DMA_RX << PLP_DMA_TYPE_BIT) | + (DMA_INC << PLP_DMA_INCR_BIT) | + (0 << PLP_DMA_2D_BIT) | + (1 << PLP_DMA_ELE_BIT) | + (1 << PLP_DMA_ILE_BIT) | + (0 << PLP_DMA_BLE_BIT) | + (0 << PLP_DMA_2D_TCDM_BIT); + *(volatile int*) DMA_COMMAND_QUEUE = tcdm_addr; + *(volatile int*) DMA_COMMAND_QUEUE = ext_addr; +} + +static inline void mchan_barrier(int id) { + while(((*(volatile int*)(DMA_STATUS_REGISTER)) >> id ) & 0x1 ) { + eu_evt_maskWaitAndClr(1 << FC_DMA_EVENT); + } +} + +static inline void mchan_free(int id) { + *(volatile int*) DMA_STATUS_REGISTER = 0x1 << id; +} + +// void redmule_cfg (unsigned int x, unsigned int w, unsigned int z, +// uint16_t m_size, uint16_t n_size, uint16_t k_size, +// uint8_t gemm_op, uint8_t gemm_fmt){ +// +// uint32_t mcfg_reg0 = 0; +// uint32_t mcfg_reg1 = 0; +// uint32_t arith_reg = 0; +// +// mcfg_reg0 = (k_size << 16) | +// (m_size << 0); +// mcfg_reg1 = n_size << 0; +// +// arith_reg = (gemm_op << 10) | +// (gemm_fmt << 7); +// +// redmule_x_add_set ((unsigned int) x); +// redmule_w_add_set ((unsigned int) w); +// redmule_z_add_set ((unsigned int) z); +// redmule_mcfg_set ((unsigned int) mcfg_reg0, +// (unsigned int) mcfg_reg1); +// redmule_arith_set ((unsigned int) arith_reg); +// +// } + +void redmule_cfg (uint16_t m_size, uint16_t n_size, uint16_t k_size, uint8_t gemm_ops){ + uint32_t x_iters = 0; + uint32_t w_iters = 0; + uint32_t leftovers = 0; + uint32_t left_params = 0; + uint32_t x_d1_stride = 0; + uint32_t x_rows_offs = 0; + uint32_t w_tot_len = 0; + uint32_t w_d1_len = 0; + uint32_t w_d0_stride = 0; + uint32_t yz_tot_len = 0; + uint32_t yz_d0_stride = 0; + uint32_t yz_d2_stride = 0; + uint32_t tot_x_read = 0; + uint32_t x_buffer_slots = 0; + uint32_t op_selection = 0; + uint16_t tot_stores = 0; + uint16_t w_rows = n_size; + uint16_t depth = DATA_WIDTH/(ARRAY_HEIGHT*FPFORMAT); + uint8_t tile = ARRAY_HEIGHT*(PIPE_REGS + 1); + _Bool x_rows_sub = 0; + _Bool x_cols_sub = 0; + _Bool w_cols_sub = 0; + uint16_t x_rows_iter, + x_rows_iter_tmp, + w_rows_iter, + w_rows_iter_tmp; + uint16_t x_cols_iter, + x_cols_iter_tmp, + w_cols_iter, + w_cols_iter_tmp; + uint8_t x_rows_lftovr, + x_cols_lftovr, + w_rows_lftovr, + w_cols_lftovr, + slots; + + // Calculating the number of iterations alng the two dimensions of the X matrix + x_rows_iter_tmp = m_size/ARRAY_WIDTH; + x_cols_iter_tmp = n_size/tile; + + // Calculating the number of iterations alng the two dimensions of the W matrix + w_rows_iter_tmp = w_rows; + w_cols_iter_tmp = k_size/tile; + + // Calculating the residuals along the input dimensions + x_rows_lftovr = m_size - (x_rows_iter_tmp*ARRAY_WIDTH); + x_cols_lftovr = n_size - (x_cols_iter_tmp*tile); + + // Calculating the residuals along the weight dimensions + w_rows_lftovr = n_size - (ARRAY_HEIGHT*(w_rows/ARRAY_HEIGHT)); + w_cols_lftovr = k_size - (w_cols_iter_tmp*tile); + + if (w_cols_lftovr != 0) + w_cols_iter = w_cols_iter_tmp + 1; + else + w_cols_iter = w_cols_iter_tmp; + + if (w_rows_lftovr != 0) + w_rows_iter = w_rows_iter_tmp + ARRAY_HEIGHT - w_rows_lftovr; + else + w_rows_iter = w_rows_iter_tmp; + + if (x_cols_lftovr != 0) + x_cols_iter = x_cols_iter_tmp + 1; + else + x_cols_iter = x_cols_iter_tmp; + + if (x_rows_lftovr != 0) + x_rows_iter = x_rows_iter_tmp + 1; + else + x_rows_iter = x_rows_iter_tmp; + + if (x_cols_lftovr%depth != 0) + x_buffer_slots = x_cols_lftovr/depth + 1; + else + x_buffer_slots = x_cols_lftovr/depth; + + // Calculating the number of total stores + tot_stores = x_rows_iter*w_cols_iter; + + // Determining if input matrixes are sub-matrixes + if (m_size < ARRAY_WIDTH) + x_rows_sub = 1; + if (n_size < ARRAY_HEIGHT) + x_cols_sub = 1; + if (k_size < tile) + w_cols_sub = 1; + + // Operation selection + switch (gemm_ops) { + case MATMUL: + op_selection |= (RNE << 29 | RNE << 26 | OP_FMADD << 22 | OP_MINMAX << 18 | SRC_FMT << 15 | DST_FMT << 12) | 0; + break; + + case GEMM: + op_selection |= (RNE << 29 | RNE << 26 | OP_FMADD << 22 | OP_MINMAX << 18 | SRC_FMT << 15 | DST_FMT << 12) | 1; + break; + + case ADDMAX: + op_selection |= (RNE << 29 | RTZ << 26 | OP_ADD << 22 | OP_MINMAX << 18 | SRC_FMT << 15 | DST_FMT << 12) | 1; + break; + + case ADDMIN: + op_selection |= (RNE << 29 | RNE << 26 | OP_ADD << 22 | OP_MINMAX << 18 | SRC_FMT << 15 | DST_FMT << 12) | 1; + break; + + case MULMAX: + op_selection |= (RNE << 29 | RTZ << 26 | OP_MUL << 22 | OP_MINMAX << 18 | SRC_FMT << 15 | DST_FMT << 12) | 1; + break; + + case MULMIN: + op_selection |= (RNE << 29 | RNE << 26 | OP_MUL << 22 | OP_MINMAX << 18 | SRC_FMT << 15 | DST_FMT << 12) | 1; + break; + + case MAXMIN: + op_selection |= (RTZ << 29 | RNE << 26 | OP_MINMAX << 22 | OP_MINMAX << 18 | SRC_FMT << 15 | DST_FMT << 12) | 1; + break; + + case MINMAX: + op_selection |= (RNE << 29 | RTZ << 26 | OP_MINMAX << 22 | OP_MINMAX << 18 | SRC_FMT << 15 | DST_FMT << 12) | 1; + break; + } + + // Storing iterations and residuals in registers + x_iters |= x_rows_iter << 16 | x_cols_iter << 0; + w_iters |= w_rows_iter << 16 | w_cols_iter << 0; + leftovers |= x_rows_lftovr << 24 | x_cols_lftovr << 16 | w_rows_lftovr << 8 | w_cols_lftovr << 0; + left_params |= tot_stores << 16 | x_rows_sub << 15 | x_cols_sub << 14 | w_cols_sub << 13; + x_d1_stride = ((4*FPFORMAT)/ADDR_WIDTH)*(((DATA_WIDTH/FPFORMAT)*x_cols_iter_tmp) + x_cols_lftovr); + x_rows_offs = ARRAY_WIDTH*x_d1_stride; + w_tot_len = w_rows_iter*w_cols_iter*x_rows_iter; + w_d0_stride = ((4*FPFORMAT)/ADDR_WIDTH)*(((DATA_WIDTH/FPFORMAT)*w_cols_iter_tmp) + w_cols_lftovr); + yz_tot_len = ARRAY_WIDTH*x_rows_iter*w_cols_iter; + yz_d0_stride = w_d0_stride; + yz_d2_stride = ARRAY_WIDTH*w_d0_stride; + tot_x_read = x_rows_iter*x_cols_iter*w_cols_iter; + + // Writing the computations in configuration register + HWPE_WRITE(x_iters , REDMULE_REG_OFFS + REDMULE_REG_X_ITER_PTR ); + HWPE_WRITE(w_iters , REDMULE_REG_OFFS + REDMULE_REG_W_ITER_PTR ); + HWPE_WRITE(leftovers , REDMULE_REG_OFFS + REDMULE_REG_LEFTOVERS_PTR ); + HWPE_WRITE(left_params , REDMULE_REG_OFFS + REDMULE_REG_LEFT_PARAMS_PTR ); + HWPE_WRITE(x_d1_stride , REDMULE_REG_OFFS + REDMULE_REG_X_D1_STRIDE_PTR ); + HWPE_WRITE(x_rows_offs , REDMULE_REG_OFFS + REDMULE_REG_X_ROWS_OFFS_PTR ); + HWPE_WRITE(tot_x_read , REDMULE_REG_OFFS + REDMULE_REG_TOT_X_READ_PTR ); + HWPE_WRITE(x_buffer_slots, REDMULE_REG_OFFS + REDMULE_REG_X_BUFFER_SLOTS_PTR ); + HWPE_WRITE(w_tot_len , REDMULE_REG_OFFS + REDMULE_REG_W_TOT_LEN_PTR ); + HWPE_WRITE(w_d0_stride , REDMULE_REG_OFFS + REDMULE_REG_W_D0_STRIDE_PTR ); + HWPE_WRITE(yz_tot_len , REDMULE_REG_OFFS + REDMULE_REG_YZ_TOT_LEN_PTR ); + HWPE_WRITE(yz_d0_stride , REDMULE_REG_OFFS + REDMULE_REG_YZ_D0_STRIDE_PTR ); + HWPE_WRITE(yz_d2_stride , REDMULE_REG_OFFS + REDMULE_REG_YZ_D2_STRIDE_PTR ); + HWPE_WRITE(op_selection , REDMULE_REG_OFFS + REDMULE_REG_OP_SELECTION ); +} + +void generate_test_data16(int x_start_addr, + int w_start_addr, + int y_start_addr, + int m_size, + int n_size, + int k_size) { + + int x_addr = x_start_addr; + int w_addr = w_start_addr; + int y_addr = y_start_addr; + int x_end_addr = x_start_addr + (2*m_size*n_size); + int w_end_addr = w_start_addr + (2*n_size*k_size); + int y_end_addr = y_start_addr + (2*m_size*k_size); + + // Generating input stimuli from golden model + for (x_addr = x_start_addr; x_addr < x_end_addr; x_addr += 2) { + int x = x_addr - x_start_addr; + *(uint32_t *)(x_addr) = x_inp[x/2]; + } + + // Generating Weight stimuli from golden model + for (w_addr = w_start_addr; w_addr < w_end_addr; w_addr += 2) { + int w = w_addr - w_start_addr; + *(uint32_t *)(w_addr) = w_inp[w/2]; + } + + for (y_addr = y_start_addr; y_addr < y_end_addr; y_addr += 2) { + int y = y_addr - y_start_addr; + *(uint32_t *)(y_addr) = y_inp[y/2]; + } +} + +int redmule_compare16 (int z_start_addr, int m_size, int k_size) { + int err = 0; + int z_end_addr = z_start_addr + 2*m_size*k_size; + uint16_t z_computed; + uint16_t diff, diff_1, diff_2; + + for (int z_addr = z_start_addr; z_addr < z_end_addr; z_addr += 2) { + int z = z_addr - z_start_addr; + z_computed = *(uint32_t *)(z_addr); + + if ( z_computed != z_oup[z/2] ) { + diff_1 = z_computed - z_oup[z/2]; + if (diff_1 > 3) { + diff_2 = z_oup[z/2] - z_computed; + if (diff_2 > 3) { + err++; + } + } + } + } + + return err; + +} + +int redmule16_compare_int(uint32_t *actual_z, uint32_t *golden_z, int len) { + #define ERR 0x0011 + uint32_t actual_word = 0; + uint16_t actual_MSHWord, actual_LSHWord; + uint32_t golden_word = 0; + uint16_t golden_MSHWord, golden_LSHWord; + uint32_t actual = 0; + uint32_t golden = 0; + + int errors = 0; + int error; + + for (int i=0; i golden_LSHWord) ? (actual_LSHWord - golden_LSHWord) : 0; + diff = (actual_LSHWord < golden_LSHWord) ? (golden_LSHWord - actual_LSHWord) : 0; + + if (diff > ERR) { + error = 1; + #ifdef VERBOSE + tfp_printf ("diff: 0x%08x\n", diff); + tfp_printf ("LSW: Error!\n"); + #endif + } + + // Checking Most Significant Half-Word + actual_MSHWord = (uint16_t)((actual_word >> 16) & 0x0000FFFF); + golden_MSHWord = (uint16_t)((golden_word >> 16) & 0x0000FFFF); + + diff = (actual_MSHWord > golden_MSHWord) ? (actual_MSHWord - golden_MSHWord) : 0; + diff = (actual_MSHWord < golden_MSHWord) ? (golden_MSHWord - actual_MSHWord) : 0; + + if (diff > ERR) { + error = 1; + #ifdef VERBOSE + tfp_printf ("diff: 0x%08x\n", diff); + tfp_printf ("MSW: Error!\n"); + #endif + } + + errors += error; + + #ifdef DEBUG + tfp_printf(" Golden: 0x%08x; Actual: 0x%08x,\n", golden_word, actual_word); + #endif + + #ifdef VERBOSE + if(error) { + if(errors==1) tfp_printf(" golden <- actual @ address @ index\n"); + tfp_printf(" 0x%08x <- 0x%08x @ 0x%08x @ 0x%08x\n", golden_word, actual_word, (actual_z+i), i*4); + } + #endif + } + return errors; +} + +int redmule8_compare_int(uint32_t *actual_z, uint32_t *golden_z, int len) { + #define ERR 0x0011 + uint32_t actual_word = 0; + uint8_t actual_Byte0, + actual_Byte1, + actual_Byte2, + actual_Byte3; + uint32_t golden_word = 0; + uint8_t golden_Byte0, + golden_Byte1, + golden_Byte2, + golden_Byte3; + uint32_t actual = 0; + uint32_t golden = 0; + + int errors = 0; + int error; + + for (int i=0; i golden_Byte0) ? (actual_Byte0 - golden_Byte0) : 0; + diff = (actual_Byte0 < golden_Byte0) ? (golden_Byte0 - actual_Byte0) : 0; + + if (diff > ERR) { + error = 1; + tfp_printf ("diff: 0x%08x\n", diff); + tfp_printf ("Byte0: Error!\n"); + } + + // Cheching Byte1 + actual_Byte1 = (uint8_t)( (actual_word >> 8 ) & 0x000000FF); + golden_Byte1 = (uint8_t)( (golden_word >> 8 ) & 0x000000FF); + + diff = (actual_Byte1 > golden_Byte1) ? (actual_Byte1 - golden_Byte1) : 0; + diff = (actual_Byte1 < golden_Byte1) ? (golden_Byte1 - actual_Byte1) : 0; + + if (diff > ERR) { + error = 1; + tfp_printf ("diff: 0x%08x\n", diff); + tfp_printf ("Byte1: Error!\n"); + } + + // Cheching Byte2 + actual_Byte2 = (uint8_t)( (actual_word >> 16 ) & 0x000000FF); + golden_Byte2 = (uint8_t)( (golden_word >> 16 ) & 0x000000FF); + + diff = (actual_Byte2 > golden_Byte2) ? (actual_Byte2 - golden_Byte2) : 0; + diff = (actual_Byte2 < golden_Byte2) ? (golden_Byte2 - actual_Byte2) : 0; + + if (diff > ERR) { + error = 1; + tfp_printf ("diff: 0x%08x\n", diff); + tfp_printf ("Byte2: Error!\n"); + } + + // Cheching Byte3 + actual_Byte3 = (uint8_t)( (actual_word >> 24 ) & 0x000000FF); + golden_Byte3 = (uint8_t)( (golden_word >> 24 ) & 0x000000FF); + + diff = (actual_Byte3 > golden_Byte3) ? (actual_Byte3 - golden_Byte3) : 0; + diff = (actual_Byte3 < golden_Byte3) ? (golden_Byte3 - actual_Byte3) : 0; + + if (diff > ERR) { + error = 1; + tfp_printf ("diff: 0x%08x\n", diff); + tfp_printf ("Byte3: Error!\n"); + } + + errors += error; + + #ifdef DEBUG + tfp_printf(" Golden: 0x%08x; Actual: 0x%08x,\n", golden_word, actual_word); + #endif + + #ifdef VERBOSE + if(error) { + if(errors==1) tfp_printf(" golden <- actual @ address @ index\n"); + tfp_printf(" 0x%08x <- 0x%08x @ 0x%08x @ 0x%08x\n", golden_word, actual_word, (actual_z+i), i*4); + } + #endif + } + return errors; +} + +#endif diff --git a/carfield/redmule/inc/golden.h b/carfield/redmule/inc/golden.h new file mode 100644 index 0000000..f664e47 --- /dev/null +++ b/carfield/redmule/inc/golden.h @@ -0,0 +1,387 @@ + /* Header file generated by RedMulE Golden Model */ +uint32_t golden [384] = { +0x48974845, +0x48384608, +0x487b4855, +0x48804869, +0x48b046d1, +0x483f48db, +0x485f48c9, +0x483a4881, +0x472c484b, +0x492b4762, +0x48fd4822, +0x492e488e, +0x484f483e, +0x46d749e8, +0x489d484b, +0x47e9490b, +0x47d2484f, +0x474744be, +0x46c047c7, +0x48af4727, +0x482d46c5, +0x482e483d, +0x479f4897, +0x4749488b, +0x46a8489a, +0x488b46f2, +0x47e84891, +0x483d4872, +0x46fd4716, +0x46a049b5, +0x47a446e7, +0x476748a1, +0x49354939, +0x48c14703, +0x48bd4863, +0x48cf4913, +0x48b848b6, +0x49204946, +0x48e1495e, +0x48b24938, +0x4882493a, +0x49d5483b, +0x49724911, +0x49df496b, +0x488848f2, +0x48214a46, +0x490c48c1, +0x48a349b2, +0x47b0463a, +0x476244cb, +0x46b94765, +0x4814466a, +0x47964631, +0x474b4666, +0x47044798, +0x47614838, +0x459047d3, +0x48a245ea, +0x484447f1, +0x4776484b, +0x46d847d6, +0x44d348f3, +0x478d46fa, +0x466e481e, +0x481e4827, +0x479445a2, +0x48064727, +0x48d5475d, +0x48284708, +0x480d4862, +0x48324895, +0x47f148bd, +0x46a7482a, +0x492d47b1, +0x4884484d, +0x485f48dc, +0x480c476d, +0x46d348e9, +0x48844728, +0x480e48a0, +0x48134862, +0x485a4675, +0x473847e8, +0x48234836, +0x482146e7, +0x47b34822, +0x48554846, +0x47174863, +0x47c14872, +0x488e46d5, +0x485f47e2, +0x48b8487c, +0x4788481e, +0x467748bd, +0x47f846c9, +0x47fc48fe, +0x47b247a0, +0x467e4588, +0x46c74662, +0x481246e8, +0x474e4536, +0x468f46c0, +0x4679481f, +0x46e246a1, +0x45604809, +0x47eb4630, +0x475746b5, +0x477f4848, +0x46d846a6, +0x459a4870, +0x46784670, +0x468c47d2, +0x48c44762, +0x479146e3, +0x486d46b1, +0x486747d0, +0x47f6468d, +0x475648a5, +0x48544857, +0x48384866, +0x46ec484d, +0x48f647d2, +0x4879484a, +0x483c4848, +0x4806471d, +0x473048fa, +0x47b84768, +0x46f94865, +0x491848a8, +0x486746ca, +0x48624800, +0x491048d3, +0x4849474e, +0x486b48eb, +0x48c54966, +0x483048f4, +0x477848f9, +0x499e481e, +0x48f148cf, +0x49234982, +0x47cf487c, +0x464949ea, +0x495e4773, +0x483f48b2, +0x497548a7, +0x481e4616, +0x4866481f, +0x486448b6, +0x487347dc, +0x487f485c, +0x491f4938, +0x48b6490d, +0x48a148f8, +0x492d4859, +0x4915489c, +0x48874899, +0x4859486c, +0x471e49ca, +0x49184867, +0x482748d3, +0x4998488b, +0x481d4704, +0x488048b8, +0x49444876, +0x48f2470c, +0x489b48b9, +0x48e54956, +0x48a548d6, +0x485648dc, +0x49ab484e, +0x490e48e0, +0x494548dd, +0x48dd488b, +0x47ea4a32, +0x49114835, +0x48194965, +0x481e460e, +0x4673452c, +0x4717475c, +0x46d046f6, +0x46bc4696, +0x481e4726, +0x46ea4763, +0x475846fe, +0x4627478b, +0x483f4704, +0x47b146ad, +0x48164792, +0x468446f2, +0x45a84827, +0x47a4472f, +0x462b4797, +0x48ab483f, +0x4863468f, +0x4766485a, +0x48cb481d, +0x490347dc, +0x483048fc, +0x483e48cc, +0x486448ab, +0x47634966, +0x499d4794, +0x488b488e, +0x496048dc, +0x484c4854, +0x474c499c, +0x48bc4826, +0x48834949, +0x4905489d, +0x481e4718, +0x48f448e3, +0x490448c1, +0x48b347e8, +0x48d44892, +0x489448ff, +0x488648d5, +0x480348fa, +0x492e47d2, +0x48b24870, +0x492b48e5, +0x4785487b, +0x471d49e3, +0x48bf4837, +0x48c4489b, +0x4871475c, +0x4811464a, +0x471c47af, +0x48174817, +0x484e463b, +0x464f477f, +0x487c4704, +0x472547a3, +0x462a4853, +0x4860465a, +0x48804736, +0x482b47e1, +0x46c04811, +0x475d48dc, +0x48064668, +0x46f44893, +0x49594858, +0x487b463d, +0x484e480f, +0x48a648c0, +0x48944847, +0x484a48a0, +0x48f4491e, +0x48b548fc, +0x47d248ce, +0x497f47db, +0x49394955, +0x48ce48a7, +0x48844890, +0x476349d6, +0x4922486e, +0x48c348f4, +0x491c47ec, +0x47834698, +0x47544715, +0x47524745, +0x4832472f, +0x48094817, +0x48c347f8, +0x480047e6, +0x473048b6, +0x48cb480a, +0x488e479e, +0x488e47c2, +0x47ee472f, +0x4744489d, +0x48514755, +0x47d34846, +0x48a04838, +0x47624634, +0x48064786, +0x482d47e3, +0x486c4726, +0x480347b7, +0x481448ac, +0x483948e0, +0x47504827, +0x48c546f2, +0x4886483f, +0x485648ad, +0x47a947e8, +0x47434937, +0x481f46d0, +0x4804484c, +0x481f47fd, +0x4813456d, +0x4807474d, +0x480e4688, +0x481046e8, +0x4799469f, +0x478f4853, +0x482447f2, +0x471f47d0, +0x485f46da, +0x481c4813, +0x4863482e, +0x480b4786, +0x46b848c9, +0x46e2475a, +0x46c54852, +0x480245af, +0x46c24466, +0x4743465d, +0x47ba46b7, +0x46c34636, +0x47844677, +0x47c2485a, +0x46ac46dc, +0x460e47de, +0x4834465f, +0x476947f4, +0x481046fc, +0x45ea45fd, +0x45b548d0, +0x47834704, +0x46c44830, +0x47c74759, +0x45b0453d, +0x47024741, +0x47934736, +0x47ba461b, +0x46dd470b, +0x470b4657, +0x4710470d, +0x468f486c, +0x46ba45c3, +0x483b479d, +0x477446c9, +0x46a746a9, +0x46064833, +0x46a94690, +0x46a746f5, +0x48bb47ac, +0x4803452c, +0x4824470f, +0x48cb47d5, +0x484a4707, +0x47974832, +0x482c4851, +0x4877487a, +0x465d4891, +0x48ce47f4, +0x48994898, +0x486a484e, +0x47f047ac, +0x4611493e, +0x489e47e2, +0x46af488c, +0x48364665, +0x46b645e4, +0x46b946a1, +0x46dd46c8, +0x474b4658, +0x4777467b, +0x47984769, +0x475e4785, +0x4656472a, +0x488145fb, +0x472d46fc, +0x47a3476e, +0x46ca465d, +0x45004855, +0x479a464f, +0x473846c3, +0x486c481e, +0x48014659, +0x477a4756, +0x487b47d5, +0x48084706, +0x4838484f, +0x48634870, +0x480648d3, +0x47714865, +0x494c46be, +0x484c4915, +0x48624900, +0x46e8481a, +0x46a04974, +0x483d4775, +0x480e487c, +}; \ No newline at end of file diff --git a/carfield/redmule/inc/tensor_dim.h b/carfield/redmule/inc/tensor_dim.h new file mode 100644 index 0000000..21bd0d8 --- /dev/null +++ b/carfield/redmule/inc/tensor_dim.h @@ -0,0 +1,13 @@ + /* Header file generated by RedMulE Golden Model */ +#ifndef __TENSOR_DIM__ +#define __TENSOR_DIM__ + +#define M_SIZE 24 +#define N_SIZE 32 +#define K_SIZE 32 +#define SRC_FMT FP16 +#define DST_FMT FP16 +#define FPFORMAT 16 +uint8_t gemm_ops = GEMM; + +#endif diff --git a/carfield/redmule/inc/w_2D.h b/carfield/redmule/inc/w_2D.h new file mode 100644 index 0000000..9409c64 --- /dev/null +++ b/carfield/redmule/inc/w_2D.h @@ -0,0 +1,35 @@ + /* Header file generated by RedMulE Golden Model */ +uint16_t w_inp_2D [32][32] = { +0x311a, 0x39e0, 0x387d, 0x3a4a, 0x386f, 0x3ada, 0x392f, 0x3854, 0x3014, 0x2fd2, 0x31c9, 0x2fca, 0x2e55, 0x3bc8, 0x396d, 0x3b1d, 0x39f6, 0x333a, 0x3908, 0x3628, 0x3bab, 0x3b8b, 0x3b4a, 0x322d, 0x3925, 0x317a, 0x3725, 0x31c2, 0x3066, 0x38f3, 0x3a17, 0x3476, +0x3bda, 0x3196, 0x3922, 0x3680, 0x396a, 0x3021, 0x3761, 0x374d, 0x2fc2, 0x3967, 0x3b94, 0x33b5, 0x3797, 0x34d6, 0x3655, 0x2176, 0x39bc, 0x3999, 0x3658, 0x3904, 0x3759, 0x2ade, 0x3a5a, 0x3b78, 0x36c7, 0x2d01, 0x3b58, 0x2d9a, 0x373d, 0x3952, 0x38e8, 0x3887, +0x37b6, 0x3a88, 0x2f8a, 0x2d79, 0x3413, 0x3421, 0x3976, 0x32b2, 0x3446, 0x2d99, 0x3a56, 0x3322, 0x3b49, 0x39fa, 0x3acd, 0x3af6, 0x304c, 0x3abb, 0x3a83, 0x38b2, 0x3ab9, 0x363e, 0x389f, 0x31bb, 0x38e1, 0x3bc4, 0x3b9b, 0x2984, 0x3a43, 0x3b2f, 0x35d6, 0x3bda, +0x2df3, 0x3bf8, 0x2acc, 0x378b, 0x3555, 0x2e59, 0x31d4, 0x34ec, 0x3a46, 0x3bab, 0x3214, 0x3161, 0x3470, 0x3a03, 0x368e, 0x31ad, 0x27cb, 0x2ecb, 0x3422, 0x39f7, 0x3644, 0x3a77, 0x313f, 0x34f2, 0x39b3, 0x3bf2, 0x379a, 0x3456, 0x35fe, 0x3ae7, 0x3964, 0x385f, +0x3b16, 0x3999, 0x3833, 0x2eda, 0x3afd, 0x3a4a, 0x3ba2, 0x2bd4, 0x3b38, 0x31a2, 0x32dd, 0x353c, 0x366f, 0x375e, 0x3821, 0x367a, 0x3b44, 0x39e6, 0x3787, 0x339e, 0x39d7, 0x38c6, 0x37d5, 0x342f, 0x3984, 0x319b, 0x33b5, 0x35ab, 0x398a, 0x374e, 0x36b6, 0x3b21, +0x3bbb, 0x2ab3, 0x2ad5, 0x33bc, 0x2bef, 0x3780, 0x3738, 0x3a0b, 0x3b09, 0x30ca, 0x384e, 0x3ab3, 0x39bd, 0x3453, 0x3a6d, 0x3957, 0x2c10, 0x30e9, 0x35d4, 0x3aef, 0x3be9, 0x39ad, 0x3a74, 0x3af9, 0x3739, 0x2d4d, 0x39fe, 0x3b72, 0x2c57, 0x398c, 0x381f, 0x3930, +0x3820, 0x321b, 0x3964, 0x2964, 0x33a0, 0x2d00, 0x2490, 0x336b, 0x3465, 0x3b2e, 0x3aa0, 0x371f, 0x300e, 0x3a09, 0x3bf1, 0x25cc, 0x3b6f, 0x3384, 0x3a88, 0x3acb, 0x3814, 0x36d0, 0x3081, 0x3a2c, 0x3353, 0x39cb, 0x31ed, 0x3af6, 0x3721, 0x36c7, 0x2ce2, 0x390d, +0x3698, 0x3ab2, 0x3b3e, 0x2eb4, 0x3998, 0x39e3, 0x3a77, 0x3632, 0x2c12, 0x3bd5, 0x3ba3, 0x3bba, 0x323c, 0x367b, 0x3557, 0x39c8, 0x37db, 0x3b45, 0x3b6e, 0x3931, 0x3121, 0x3a8d, 0x3a55, 0x3b9b, 0x358a, 0x3925, 0x3491, 0x3912, 0x3b6b, 0x3584, 0x32df, 0x3120, +0x32b2, 0x3b0a, 0x2cad, 0x3465, 0x3ad3, 0x3bcd, 0x363b, 0x3afe, 0x354b, 0x3374, 0x39af, 0x3b7f, 0x308c, 0x2e72, 0x3380, 0x3b70, 0x3902, 0x38d8, 0x39f3, 0x3a4b, 0x3853, 0x397b, 0x2ebe, 0x387f, 0x2845, 0x37e2, 0x360f, 0x370b, 0x3acb, 0x35d4, 0x36e6, 0x3262, +0x2e88, 0x3a54, 0x2ee3, 0x3575, 0x3afe, 0x2aee, 0x39a0, 0x3aae, 0x3693, 0x3432, 0x3834, 0x3b9b, 0x3bcb, 0x2e3a, 0x356d, 0x374e, 0x3924, 0x383c, 0x311e, 0x3ac5, 0x352d, 0x311e, 0x38ca, 0x34d4, 0x36ca, 0x34ed, 0x3a13, 0x33eb, 0x3639, 0x3828, 0x3b3c, 0x3939, +0x3837, 0x3521, 0x2cb5, 0x3629, 0x3924, 0x384c, 0x366a, 0x3bbf, 0x2e9e, 0x3ba8, 0x33ad, 0x38c8, 0x3934, 0x3907, 0x249a, 0x3690, 0x3a09, 0x3215, 0x3898, 0x325d, 0x37d5, 0x3195, 0x361c, 0x3ae4, 0x351f, 0x3452, 0x3bc0, 0x375c, 0x39bf, 0x317a, 0x3aae, 0x283a, +0x3476, 0x3b92, 0x3472, 0x383e, 0x280f, 0x39d6, 0x2fd1, 0x31f4, 0x2ffb, 0x3b97, 0x3692, 0x36c0, 0x3989, 0x33cf, 0x3ba6, 0x3239, 0x35d7, 0x33ab, 0x31eb, 0x3b47, 0x389b, 0x3b88, 0x3580, 0x354c, 0x3802, 0x3b9a, 0x3b94, 0x2a92, 0x2db1, 0x38bd, 0x2dfb, 0x3900, +0x344f, 0x3739, 0x27a5, 0x3b2e, 0x342b, 0x34bb, 0x30c8, 0x3ae8, 0x3b26, 0x3982, 0x38c0, 0x3408, 0x38c8, 0x36ef, 0x3bf0, 0x3acf, 0x3a3c, 0x3825, 0x31a5, 0x3ada, 0x3b5b, 0x37db, 0x3a01, 0x3663, 0x3a7d, 0x327b, 0x3a1f, 0x3862, 0x38af, 0x3204, 0x372e, 0x3b19, +0x3708, 0x3622, 0x2e62, 0x39ab, 0x2d4d, 0x31b4, 0x3552, 0x3bbc, 0x36f2, 0x36eb, 0x38ef, 0x3755, 0x3bbe, 0x2c17, 0x3815, 0x2f53, 0x363f, 0x38c1, 0x3246, 0x386b, 0x34de, 0x34e4, 0x3baa, 0x349e, 0x32ce, 0x3a68, 0x373f, 0x2cce, 0x3b36, 0x28ba, 0x3b50, 0x3232, +0x1f34, 0x3928, 0x35cd, 0x3b38, 0x30ce, 0x35a1, 0x3a06, 0x3a32, 0x3a53, 0x3489, 0x3241, 0x372f, 0x390c, 0x3a1b, 0x378a, 0x3713, 0x3769, 0x37a8, 0x3418, 0x3ad4, 0x3a4e, 0x3bf7, 0x37a5, 0x34dc, 0x39b2, 0x351b, 0x3372, 0x349f, 0x2f50, 0x3ab1, 0x3795, 0x2db7, +0x3864, 0x3157, 0x3900, 0x323e, 0x389e, 0x3880, 0x3b1f, 0x37a1, 0x396c, 0x2e43, 0x2c2a, 0x3b78, 0x3988, 0x3a14, 0x39c1, 0x3b51, 0x3780, 0x3bf2, 0x2d19, 0x3815, 0x3a5f, 0x3641, 0x2f62, 0x37d5, 0x3564, 0x139a, 0x3ab8, 0x28f7, 0x3785, 0x34e1, 0x3097, 0x3768, +0x3971, 0x3ae2, 0x32ae, 0x2fd5, 0x382a, 0x346c, 0x3133, 0x3167, 0x3940, 0x2d12, 0x389a, 0x3bd0, 0x3943, 0x391c, 0x3a75, 0x2a11, 0x391e, 0x372d, 0x3a79, 0x3b72, 0x3373, 0x39b7, 0x35d7, 0x372b, 0x3a6d, 0x38a1, 0x3279, 0x3434, 0x3694, 0x3b45, 0x3abb, 0x392d, +0x34a8, 0x3757, 0x32ca, 0x345d, 0x36a5, 0x3854, 0x2dcd, 0x30af, 0x38dd, 0x3067, 0x3411, 0x3997, 0x397a, 0x3a64, 0x38b8, 0x3962, 0x3509, 0x3bb6, 0x3a66, 0x339f, 0x372a, 0x31a8, 0x37da, 0x36ff, 0x33c6, 0x31da, 0x3977, 0x3b72, 0x3841, 0x3567, 0x3433, 0x33b8, +0x39fe, 0x3a10, 0x3bf2, 0x35e7, 0x3a4a, 0x3b3e, 0x2ec7, 0x3aa4, 0x3846, 0x3af9, 0x38a9, 0x2c1f, 0x39ab, 0x349f, 0x31d6, 0x39ae, 0x3b79, 0x352d, 0x3516, 0x347c, 0x2f33, 0x35ad, 0x31c4, 0x3b52, 0x354b, 0x3786, 0x3ab7, 0x3896, 0x34ac, 0x352f, 0x37e6, 0x326a, +0x2e44, 0x34c7, 0x388d, 0x3bf4, 0x363f, 0x3b3d, 0x33b1, 0x3b8b, 0x3340, 0x37f7, 0x3b07, 0x25bf, 0x398e, 0x3505, 0x3bd7, 0x366d, 0x388a, 0x2cc0, 0x359a, 0x3b9a, 0x3b99, 0x379d, 0x3b6b, 0x39b8, 0x3223, 0x2703, 0x3ba9, 0x2ecb, 0x3759, 0x39d8, 0x37ac, 0x32cf, +0x35f2, 0x38a3, 0x399e, 0x3bd2, 0x3780, 0x3af3, 0x3b5e, 0x337b, 0x3a08, 0x35da, 0x3446, 0x3b25, 0x3ad0, 0x3bee, 0x3141, 0x32d8, 0x34ce, 0x2ac9, 0x3800, 0x3a8a, 0x2d53, 0x368a, 0x3561, 0x3998, 0x35a3, 0x3677, 0x3ab2, 0x3269, 0x3236, 0x3b3e, 0x3aba, 0x3bac, +0x395d, 0x3820, 0x1df6, 0x3bb5, 0x35b5, 0x3675, 0x3b74, 0x360f, 0x34de, 0x3a0c, 0x3aeb, 0x299d, 0x3207, 0x3bd8, 0x2178, 0x3995, 0x3948, 0x3908, 0x3843, 0x2ea5, 0x3045, 0x3989, 0x345d, 0x39c5, 0x3a89, 0x3863, 0x3be0, 0x397a, 0x38f1, 0x39e2, 0x3b08, 0x352e, +0x385f, 0x28f2, 0x3bc3, 0x35e0, 0x380c, 0x3b9c, 0x3afc, 0x390a, 0x3689, 0x34fd, 0x2cf5, 0x308e, 0x342b, 0x3921, 0x3a67, 0x3ad6, 0x2986, 0x32fc, 0x35aa, 0x3507, 0x3608, 0x33fd, 0x3bf3, 0x39e2, 0x3b0f, 0x30b7, 0x3896, 0x3ae4, 0x2145, 0x35b6, 0x2e1d, 0x3ad1, +0x333d, 0x3afb, 0x2703, 0x3413, 0x1d7d, 0x3b7f, 0x3ae1, 0x303c, 0x3004, 0x39d3, 0x3554, 0x31a4, 0x354e, 0x3662, 0x39c5, 0x2eb7, 0x2c6e, 0x397f, 0x31d8, 0x1f0c, 0x38e3, 0x35f0, 0x2714, 0x28d1, 0x375e, 0x3a75, 0x3830, 0x3578, 0x397d, 0x3b18, 0x383c, 0x3498, +0x39ad, 0x3598, 0x23c4, 0x34ea, 0x3a61, 0x2b00, 0x3707, 0x3ae1, 0x37ae, 0x389d, 0x37fa, 0x3673, 0x3278, 0xf3e, 0x3809, 0x33c6, 0x3bf5, 0x3279, 0x3816, 0x360c, 0x39c8, 0x381f, 0x3741, 0x2d66, 0x38c0, 0x37d3, 0x377a, 0x3621, 0x2faf, 0x392e, 0x2de6, 0x33c5, +0x3803, 0x2600, 0x32e9, 0x39b4, 0x38d2, 0x34e8, 0x2fe6, 0x3199, 0x3643, 0x3a77, 0x27cc, 0x39d7, 0x34c6, 0x2ea8, 0x364e, 0x3b07, 0x31c7, 0x30a1, 0x31b1, 0x3b8f, 0x3571, 0x3b75, 0x3989, 0x3805, 0x39fb, 0x3945, 0x352b, 0x31d8, 0x3904, 0x3440, 0x3a57, 0x2cf7, +0x3b39, 0x2fcd, 0x2b89, 0x2edd, 0x3682, 0x36a9, 0x32c8, 0x37ac, 0x32a5, 0x3311, 0x394b, 0x3b84, 0x3aec, 0x3601, 0x2765, 0x3b69, 0x396b, 0x3727, 0x3bfe, 0x3907, 0x376f, 0x3674, 0x3973, 0x3671, 0x3491, 0x3993, 0x383f, 0x3335, 0x3989, 0x3550, 0x3077, 0x35f5, +0x3a59, 0x3950, 0x380c, 0x37cd, 0x30bf, 0x3607, 0x3afa, 0x3b5d, 0x32b9, 0x386b, 0x35bd, 0x3aca, 0x3ba5, 0x3b2d, 0x3b19, 0x3b8b, 0x345e, 0x2845, 0x34aa, 0x372a, 0x3448, 0x34f5, 0x3ae2, 0x3637, 0x2cb5, 0x354b, 0x3b15, 0x2ca8, 0x2641, 0x3178, 0x2cfe, 0x39b4, +0x3bdd, 0x3acb, 0x3a05, 0x38a2, 0x3b4a, 0x34e5, 0x395f, 0x394b, 0x34c4, 0x3aa5, 0x29bb, 0x2d96, 0x339d, 0x387c, 0x382e, 0x385a, 0x396b, 0x3aa9, 0x2f1e, 0x33a7, 0x3b90, 0x3b7b, 0x3b5f, 0x39d3, 0x3b18, 0x354f, 0x2cdb, 0x3a6f, 0x3434, 0x34ff, 0x3a5b, 0x3b84, +0x3a33, 0x384b, 0x2e67, 0x3b85, 0x3853, 0x380c, 0x346a, 0x3aaa, 0x3492, 0x33e8, 0x3bf2, 0x38ae, 0x3a29, 0x3830, 0x3221, 0x35b1, 0x3a48, 0x2c68, 0x2ced, 0x3a7e, 0x3539, 0x3922, 0x374c, 0x3aaa, 0x2dae, 0x395d, 0x3b3d, 0x3890, 0x2cfe, 0x2dd6, 0x3bad, 0x33c5, +0x2c07, 0x3a2c, 0x37a8, 0x390f, 0x2fc8, 0x35ae, 0x388c, 0x30ee, 0x3674, 0x391d, 0x3bfc, 0x36bf, 0x322d, 0x3a78, 0x35c0, 0x3492, 0x3ac8, 0x3504, 0x3315, 0x381d, 0x3a7a, 0x3a08, 0x343c, 0x3bda, 0x341b, 0x39f0, 0x3b9e, 0x395d, 0x3c00, 0x38ab, 0x3bcf, 0x3564, +0x33c4, 0x3b0d, 0x3623, 0x33b9, 0x3b92, 0x1e71, 0x2c57, 0x36d0, 0x314b, 0x3a16, 0x3372, 0x341b, 0x3aaa, 0x3444, 0x396b, 0x2dd7, 0x3b30, 0x3559, 0x3b5b, 0x3a29, 0x2d19, 0x38b7, 0x3b01, 0x3afa, 0x398a, 0x3839, 0x3ac9, 0x2e31, 0x3924, 0x39f2, 0x3a7f, 0x3285 +}; \ No newline at end of file diff --git a/carfield/redmule/inc/w_input.h b/carfield/redmule/inc/w_input.h new file mode 100644 index 0000000..dc4d3be --- /dev/null +++ b/carfield/redmule/inc/w_input.h @@ -0,0 +1,35 @@ + /* Header file generated by RedMulE Golden Model */ +uint16_t w_inp [1024] = { +0x311a, 0x39e0, 0x387d, 0x3a4a, 0x386f, 0x3ada, 0x392f, 0x3854, 0x3014, 0x2fd2, 0x31c9, 0x2fca, 0x2e55, 0x3bc8, 0x396d, 0x3b1d, 0x39f6, 0x333a, 0x3908, 0x3628, 0x3bab, 0x3b8b, 0x3b4a, 0x322d, 0x3925, 0x317a, 0x3725, 0x31c2, 0x3066, 0x38f3, 0x3a17, 0x3476, +0x3bda, 0x3196, 0x3922, 0x3680, 0x396a, 0x3021, 0x3761, 0x374d, 0x2fc2, 0x3967, 0x3b94, 0x33b5, 0x3797, 0x34d6, 0x3655, 0x2176, 0x39bc, 0x3999, 0x3658, 0x3904, 0x3759, 0x2ade, 0x3a5a, 0x3b78, 0x36c7, 0x2d01, 0x3b58, 0x2d9a, 0x373d, 0x3952, 0x38e8, 0x3887, +0x37b6, 0x3a88, 0x2f8a, 0x2d79, 0x3413, 0x3421, 0x3976, 0x32b2, 0x3446, 0x2d99, 0x3a56, 0x3322, 0x3b49, 0x39fa, 0x3acd, 0x3af6, 0x304c, 0x3abb, 0x3a83, 0x38b2, 0x3ab9, 0x363e, 0x389f, 0x31bb, 0x38e1, 0x3bc4, 0x3b9b, 0x2984, 0x3a43, 0x3b2f, 0x35d6, 0x3bda, +0x2df3, 0x3bf8, 0x2acc, 0x378b, 0x3555, 0x2e59, 0x31d4, 0x34ec, 0x3a46, 0x3bab, 0x3214, 0x3161, 0x3470, 0x3a03, 0x368e, 0x31ad, 0x27cb, 0x2ecb, 0x3422, 0x39f7, 0x3644, 0x3a77, 0x313f, 0x34f2, 0x39b3, 0x3bf2, 0x379a, 0x3456, 0x35fe, 0x3ae7, 0x3964, 0x385f, +0x3b16, 0x3999, 0x3833, 0x2eda, 0x3afd, 0x3a4a, 0x3ba2, 0x2bd4, 0x3b38, 0x31a2, 0x32dd, 0x353c, 0x366f, 0x375e, 0x3821, 0x367a, 0x3b44, 0x39e6, 0x3787, 0x339e, 0x39d7, 0x38c6, 0x37d5, 0x342f, 0x3984, 0x319b, 0x33b5, 0x35ab, 0x398a, 0x374e, 0x36b6, 0x3b21, +0x3bbb, 0x2ab3, 0x2ad5, 0x33bc, 0x2bef, 0x3780, 0x3738, 0x3a0b, 0x3b09, 0x30ca, 0x384e, 0x3ab3, 0x39bd, 0x3453, 0x3a6d, 0x3957, 0x2c10, 0x30e9, 0x35d4, 0x3aef, 0x3be9, 0x39ad, 0x3a74, 0x3af9, 0x3739, 0x2d4d, 0x39fe, 0x3b72, 0x2c57, 0x398c, 0x381f, 0x3930, +0x3820, 0x321b, 0x3964, 0x2964, 0x33a0, 0x2d00, 0x2490, 0x336b, 0x3465, 0x3b2e, 0x3aa0, 0x371f, 0x300e, 0x3a09, 0x3bf1, 0x25cc, 0x3b6f, 0x3384, 0x3a88, 0x3acb, 0x3814, 0x36d0, 0x3081, 0x3a2c, 0x3353, 0x39cb, 0x31ed, 0x3af6, 0x3721, 0x36c7, 0x2ce2, 0x390d, +0x3698, 0x3ab2, 0x3b3e, 0x2eb4, 0x3998, 0x39e3, 0x3a77, 0x3632, 0x2c12, 0x3bd5, 0x3ba3, 0x3bba, 0x323c, 0x367b, 0x3557, 0x39c8, 0x37db, 0x3b45, 0x3b6e, 0x3931, 0x3121, 0x3a8d, 0x3a55, 0x3b9b, 0x358a, 0x3925, 0x3491, 0x3912, 0x3b6b, 0x3584, 0x32df, 0x3120, +0x32b2, 0x3b0a, 0x2cad, 0x3465, 0x3ad3, 0x3bcd, 0x363b, 0x3afe, 0x354b, 0x3374, 0x39af, 0x3b7f, 0x308c, 0x2e72, 0x3380, 0x3b70, 0x3902, 0x38d8, 0x39f3, 0x3a4b, 0x3853, 0x397b, 0x2ebe, 0x387f, 0x2845, 0x37e2, 0x360f, 0x370b, 0x3acb, 0x35d4, 0x36e6, 0x3262, +0x2e88, 0x3a54, 0x2ee3, 0x3575, 0x3afe, 0x2aee, 0x39a0, 0x3aae, 0x3693, 0x3432, 0x3834, 0x3b9b, 0x3bcb, 0x2e3a, 0x356d, 0x374e, 0x3924, 0x383c, 0x311e, 0x3ac5, 0x352d, 0x311e, 0x38ca, 0x34d4, 0x36ca, 0x34ed, 0x3a13, 0x33eb, 0x3639, 0x3828, 0x3b3c, 0x3939, +0x3837, 0x3521, 0x2cb5, 0x3629, 0x3924, 0x384c, 0x366a, 0x3bbf, 0x2e9e, 0x3ba8, 0x33ad, 0x38c8, 0x3934, 0x3907, 0x249a, 0x3690, 0x3a09, 0x3215, 0x3898, 0x325d, 0x37d5, 0x3195, 0x361c, 0x3ae4, 0x351f, 0x3452, 0x3bc0, 0x375c, 0x39bf, 0x317a, 0x3aae, 0x283a, +0x3476, 0x3b92, 0x3472, 0x383e, 0x280f, 0x39d6, 0x2fd1, 0x31f4, 0x2ffb, 0x3b97, 0x3692, 0x36c0, 0x3989, 0x33cf, 0x3ba6, 0x3239, 0x35d7, 0x33ab, 0x31eb, 0x3b47, 0x389b, 0x3b88, 0x3580, 0x354c, 0x3802, 0x3b9a, 0x3b94, 0x2a92, 0x2db1, 0x38bd, 0x2dfb, 0x3900, +0x344f, 0x3739, 0x27a5, 0x3b2e, 0x342b, 0x34bb, 0x30c8, 0x3ae8, 0x3b26, 0x3982, 0x38c0, 0x3408, 0x38c8, 0x36ef, 0x3bf0, 0x3acf, 0x3a3c, 0x3825, 0x31a5, 0x3ada, 0x3b5b, 0x37db, 0x3a01, 0x3663, 0x3a7d, 0x327b, 0x3a1f, 0x3862, 0x38af, 0x3204, 0x372e, 0x3b19, +0x3708, 0x3622, 0x2e62, 0x39ab, 0x2d4d, 0x31b4, 0x3552, 0x3bbc, 0x36f2, 0x36eb, 0x38ef, 0x3755, 0x3bbe, 0x2c17, 0x3815, 0x2f53, 0x363f, 0x38c1, 0x3246, 0x386b, 0x34de, 0x34e4, 0x3baa, 0x349e, 0x32ce, 0x3a68, 0x373f, 0x2cce, 0x3b36, 0x28ba, 0x3b50, 0x3232, +0x1f34, 0x3928, 0x35cd, 0x3b38, 0x30ce, 0x35a1, 0x3a06, 0x3a32, 0x3a53, 0x3489, 0x3241, 0x372f, 0x390c, 0x3a1b, 0x378a, 0x3713, 0x3769, 0x37a8, 0x3418, 0x3ad4, 0x3a4e, 0x3bf7, 0x37a5, 0x34dc, 0x39b2, 0x351b, 0x3372, 0x349f, 0x2f50, 0x3ab1, 0x3795, 0x2db7, +0x3864, 0x3157, 0x3900, 0x323e, 0x389e, 0x3880, 0x3b1f, 0x37a1, 0x396c, 0x2e43, 0x2c2a, 0x3b78, 0x3988, 0x3a14, 0x39c1, 0x3b51, 0x3780, 0x3bf2, 0x2d19, 0x3815, 0x3a5f, 0x3641, 0x2f62, 0x37d5, 0x3564, 0x139a, 0x3ab8, 0x28f7, 0x3785, 0x34e1, 0x3097, 0x3768, +0x3971, 0x3ae2, 0x32ae, 0x2fd5, 0x382a, 0x346c, 0x3133, 0x3167, 0x3940, 0x2d12, 0x389a, 0x3bd0, 0x3943, 0x391c, 0x3a75, 0x2a11, 0x391e, 0x372d, 0x3a79, 0x3b72, 0x3373, 0x39b7, 0x35d7, 0x372b, 0x3a6d, 0x38a1, 0x3279, 0x3434, 0x3694, 0x3b45, 0x3abb, 0x392d, +0x34a8, 0x3757, 0x32ca, 0x345d, 0x36a5, 0x3854, 0x2dcd, 0x30af, 0x38dd, 0x3067, 0x3411, 0x3997, 0x397a, 0x3a64, 0x38b8, 0x3962, 0x3509, 0x3bb6, 0x3a66, 0x339f, 0x372a, 0x31a8, 0x37da, 0x36ff, 0x33c6, 0x31da, 0x3977, 0x3b72, 0x3841, 0x3567, 0x3433, 0x33b8, +0x39fe, 0x3a10, 0x3bf2, 0x35e7, 0x3a4a, 0x3b3e, 0x2ec7, 0x3aa4, 0x3846, 0x3af9, 0x38a9, 0x2c1f, 0x39ab, 0x349f, 0x31d6, 0x39ae, 0x3b79, 0x352d, 0x3516, 0x347c, 0x2f33, 0x35ad, 0x31c4, 0x3b52, 0x354b, 0x3786, 0x3ab7, 0x3896, 0x34ac, 0x352f, 0x37e6, 0x326a, +0x2e44, 0x34c7, 0x388d, 0x3bf4, 0x363f, 0x3b3d, 0x33b1, 0x3b8b, 0x3340, 0x37f7, 0x3b07, 0x25bf, 0x398e, 0x3505, 0x3bd7, 0x366d, 0x388a, 0x2cc0, 0x359a, 0x3b9a, 0x3b99, 0x379d, 0x3b6b, 0x39b8, 0x3223, 0x2703, 0x3ba9, 0x2ecb, 0x3759, 0x39d8, 0x37ac, 0x32cf, +0x35f2, 0x38a3, 0x399e, 0x3bd2, 0x3780, 0x3af3, 0x3b5e, 0x337b, 0x3a08, 0x35da, 0x3446, 0x3b25, 0x3ad0, 0x3bee, 0x3141, 0x32d8, 0x34ce, 0x2ac9, 0x3800, 0x3a8a, 0x2d53, 0x368a, 0x3561, 0x3998, 0x35a3, 0x3677, 0x3ab2, 0x3269, 0x3236, 0x3b3e, 0x3aba, 0x3bac, +0x395d, 0x3820, 0x1df6, 0x3bb5, 0x35b5, 0x3675, 0x3b74, 0x360f, 0x34de, 0x3a0c, 0x3aeb, 0x299d, 0x3207, 0x3bd8, 0x2178, 0x3995, 0x3948, 0x3908, 0x3843, 0x2ea5, 0x3045, 0x3989, 0x345d, 0x39c5, 0x3a89, 0x3863, 0x3be0, 0x397a, 0x38f1, 0x39e2, 0x3b08, 0x352e, +0x385f, 0x28f2, 0x3bc3, 0x35e0, 0x380c, 0x3b9c, 0x3afc, 0x390a, 0x3689, 0x34fd, 0x2cf5, 0x308e, 0x342b, 0x3921, 0x3a67, 0x3ad6, 0x2986, 0x32fc, 0x35aa, 0x3507, 0x3608, 0x33fd, 0x3bf3, 0x39e2, 0x3b0f, 0x30b7, 0x3896, 0x3ae4, 0x2145, 0x35b6, 0x2e1d, 0x3ad1, +0x333d, 0x3afb, 0x2703, 0x3413, 0x1d7d, 0x3b7f, 0x3ae1, 0x303c, 0x3004, 0x39d3, 0x3554, 0x31a4, 0x354e, 0x3662, 0x39c5, 0x2eb7, 0x2c6e, 0x397f, 0x31d8, 0x1f0c, 0x38e3, 0x35f0, 0x2714, 0x28d1, 0x375e, 0x3a75, 0x3830, 0x3578, 0x397d, 0x3b18, 0x383c, 0x3498, +0x39ad, 0x3598, 0x23c4, 0x34ea, 0x3a61, 0x2b00, 0x3707, 0x3ae1, 0x37ae, 0x389d, 0x37fa, 0x3673, 0x3278, 0xf3e, 0x3809, 0x33c6, 0x3bf5, 0x3279, 0x3816, 0x360c, 0x39c8, 0x381f, 0x3741, 0x2d66, 0x38c0, 0x37d3, 0x377a, 0x3621, 0x2faf, 0x392e, 0x2de6, 0x33c5, +0x3803, 0x2600, 0x32e9, 0x39b4, 0x38d2, 0x34e8, 0x2fe6, 0x3199, 0x3643, 0x3a77, 0x27cc, 0x39d7, 0x34c6, 0x2ea8, 0x364e, 0x3b07, 0x31c7, 0x30a1, 0x31b1, 0x3b8f, 0x3571, 0x3b75, 0x3989, 0x3805, 0x39fb, 0x3945, 0x352b, 0x31d8, 0x3904, 0x3440, 0x3a57, 0x2cf7, +0x3b39, 0x2fcd, 0x2b89, 0x2edd, 0x3682, 0x36a9, 0x32c8, 0x37ac, 0x32a5, 0x3311, 0x394b, 0x3b84, 0x3aec, 0x3601, 0x2765, 0x3b69, 0x396b, 0x3727, 0x3bfe, 0x3907, 0x376f, 0x3674, 0x3973, 0x3671, 0x3491, 0x3993, 0x383f, 0x3335, 0x3989, 0x3550, 0x3077, 0x35f5, +0x3a59, 0x3950, 0x380c, 0x37cd, 0x30bf, 0x3607, 0x3afa, 0x3b5d, 0x32b9, 0x386b, 0x35bd, 0x3aca, 0x3ba5, 0x3b2d, 0x3b19, 0x3b8b, 0x345e, 0x2845, 0x34aa, 0x372a, 0x3448, 0x34f5, 0x3ae2, 0x3637, 0x2cb5, 0x354b, 0x3b15, 0x2ca8, 0x2641, 0x3178, 0x2cfe, 0x39b4, +0x3bdd, 0x3acb, 0x3a05, 0x38a2, 0x3b4a, 0x34e5, 0x395f, 0x394b, 0x34c4, 0x3aa5, 0x29bb, 0x2d96, 0x339d, 0x387c, 0x382e, 0x385a, 0x396b, 0x3aa9, 0x2f1e, 0x33a7, 0x3b90, 0x3b7b, 0x3b5f, 0x39d3, 0x3b18, 0x354f, 0x2cdb, 0x3a6f, 0x3434, 0x34ff, 0x3a5b, 0x3b84, +0x3a33, 0x384b, 0x2e67, 0x3b85, 0x3853, 0x380c, 0x346a, 0x3aaa, 0x3492, 0x33e8, 0x3bf2, 0x38ae, 0x3a29, 0x3830, 0x3221, 0x35b1, 0x3a48, 0x2c68, 0x2ced, 0x3a7e, 0x3539, 0x3922, 0x374c, 0x3aaa, 0x2dae, 0x395d, 0x3b3d, 0x3890, 0x2cfe, 0x2dd6, 0x3bad, 0x33c5, +0x2c07, 0x3a2c, 0x37a8, 0x390f, 0x2fc8, 0x35ae, 0x388c, 0x30ee, 0x3674, 0x391d, 0x3bfc, 0x36bf, 0x322d, 0x3a78, 0x35c0, 0x3492, 0x3ac8, 0x3504, 0x3315, 0x381d, 0x3a7a, 0x3a08, 0x343c, 0x3bda, 0x341b, 0x39f0, 0x3b9e, 0x395d, 0x3c00, 0x38ab, 0x3bcf, 0x3564, +0x33c4, 0x3b0d, 0x3623, 0x33b9, 0x3b92, 0x1e71, 0x2c57, 0x36d0, 0x314b, 0x3a16, 0x3372, 0x341b, 0x3aaa, 0x3444, 0x396b, 0x2dd7, 0x3b30, 0x3559, 0x3b5b, 0x3a29, 0x2d19, 0x38b7, 0x3b01, 0x3afa, 0x398a, 0x3839, 0x3ac9, 0x2e31, 0x3924, 0x39f2, 0x3a7f, 0x3285 +}; \ No newline at end of file diff --git a/carfield/redmule/inc/x_2D.h b/carfield/redmule/inc/x_2D.h new file mode 100644 index 0000000..0b589f8 --- /dev/null +++ b/carfield/redmule/inc/x_2D.h @@ -0,0 +1,27 @@ + /* Header file generated by RedMulE Golden Model */ +uint16_t x_inp_2D [24][32] = { +0x2153, 0x3bb5, 0x3896, 0x365f, 0x2483, 0x3518, 0x2dd1, 0x3bca, 0x397b, 0x29b1, 0x3705, 0x36c8, 0x398b, 0x3661, 0x2f05, 0x365a, 0x3bf9, 0x34df, 0x363b, 0x38d9, 0x39c6, 0x3abb, 0x3952, 0x38f2, 0x392d, 0x3b3e, 0x2afb, 0x3a9d, 0x353b, 0x3b73, 0x3a01, 0x3679, +0x3934, 0x397d, 0x2904, 0x3822, 0x3462, 0x3b44, 0x39e9, 0x28be, 0x331e, 0x3a1d, 0x39e5, 0x34da, 0x3a19, 0x3906, 0x1d35, 0x3871, 0x31e7, 0x3b29, 0x325d, 0x3797, 0x2b2f, 0x38b4, 0x232f, 0x38aa, 0x3aca, 0x316f, 0x3811, 0x3950, 0x32ea, 0x3bc7, 0x382c, 0x38a2, +0x29ce, 0x3afa, 0x3a39, 0x2ccc, 0x39fd, 0x3b3d, 0x384a, 0x3a35, 0x3802, 0x366a, 0x37ec, 0x3598, 0x3bf8, 0x3a85, 0x3a1b, 0x386e, 0x3b4c, 0x39de, 0x38c2, 0x2f93, 0x3b4c, 0x39c4, 0x3b9e, 0x3844, 0x346d, 0x3bff, 0x32ce, 0x296d, 0x3130, 0x3b3d, 0x3b44, 0x369d, +0x3b13, 0x31ed, 0x330a, 0x3831, 0x34e7, 0x37b3, 0x331a, 0x3918, 0x32d3, 0x3995, 0x3991, 0x3919, 0x3a26, 0x385b, 0x2b76, 0x3a3b, 0x37f2, 0x26a7, 0x3225, 0x3b64, 0x28f0, 0x3456, 0x3822, 0x341e, 0x381a, 0x38d8, 0x2c11, 0x33be, 0x33ac, 0x353f, 0x3476, 0x3abc, +0x36ec, 0x3a1d, 0x39d3, 0x3821, 0x36ac, 0x3bce, 0x3ad2, 0x3616, 0x36a1, 0x2cb3, 0x38d2, 0x314f, 0x385c, 0x3b63, 0x3bb6, 0x2951, 0x372d, 0x2c42, 0x3823, 0x3883, 0x3872, 0x31ee, 0x36c5, 0x399a, 0x31b0, 0x3887, 0x3884, 0x3865, 0x3896, 0x36c3, 0x32e3, 0x346c, +0x3935, 0x3b50, 0x2b6d, 0x38cd, 0x388f, 0x3389, 0x395d, 0x31cd, 0x2efd, 0x3154, 0x2f35, 0x3444, 0x3293, 0x3b6b, 0x1bec, 0x3b69, 0x3bf3, 0x3611, 0x3508, 0x3742, 0x3a50, 0x3ab7, 0x3457, 0x38d3, 0x3344, 0x38e8, 0x33c0, 0x3668, 0x3bee, 0x3b21, 0x3727, 0x3121, +0x316c, 0x3288, 0x2d50, 0x2e74, 0x35d5, 0x37e2, 0x303d, 0x36af, 0x341f, 0x3436, 0x2df7, 0x399d, 0x30f4, 0x3aaf, 0x34e4, 0x2c2a, 0x3116, 0x34d3, 0x36ac, 0x35e3, 0x3760, 0x36e1, 0x3ad2, 0x3547, 0x38f4, 0x369c, 0x3ba9, 0x34f0, 0x3a39, 0x3b19, 0x36e6, 0x395d, +0x3be8, 0x3293, 0x3bfc, 0x3435, 0x2eb3, 0x3360, 0x3919, 0x3bed, 0x396a, 0x37fc, 0x3242, 0x384b, 0x38cb, 0x3b2c, 0x3b28, 0x28cf, 0x3828, 0x3855, 0x3ba9, 0x2fa7, 0x340b, 0x32f1, 0x3ada, 0x36fa, 0x31f5, 0x3436, 0x29d0, 0x33e6, 0x3232, 0x3bec, 0x3904, 0x2797, +0x3b81, 0x3bac, 0x38d2, 0x343d, 0x31af, 0x3b1e, 0x33fc, 0x3864, 0x3624, 0x3905, 0x2945, 0x3b52, 0x2d08, 0x3a17, 0x3b84, 0x3804, 0x3a24, 0x38a3, 0x3562, 0x3ae6, 0x3bba, 0x3a45, 0x3679, 0x31fa, 0x3994, 0x2c3d, 0x383f, 0x399d, 0x34f7, 0x360e, 0x35f3, 0x38f0, +0x38d4, 0x399a, 0x3a48, 0x3987, 0x3b54, 0x382c, 0x3210, 0x35ef, 0x36ca, 0x31b4, 0x3625, 0x371f, 0x37bd, 0x3680, 0x3a3a, 0x3ac0, 0x3bbf, 0x3bf5, 0x39f2, 0x29c2, 0x363e, 0x3a4e, 0x3596, 0x3b1b, 0x3459, 0x3669, 0x3aa1, 0x39c3, 0x3376, 0x390d, 0x2456, 0x39b5, +0x3a66, 0x3ad8, 0x3b51, 0x36aa, 0x32be, 0x3ac8, 0x392b, 0x3740, 0x3a48, 0x38f5, 0x3b2d, 0x3a5f, 0x2ff3, 0x366f, 0x39d3, 0x35e5, 0x3822, 0x38db, 0x3b8a, 0x34be, 0x2d33, 0x36dd, 0x3578, 0x3bdf, 0x2c7e, 0x39cf, 0x32ff, 0x35c9, 0x3970, 0x3bcb, 0x351e, 0x3956, +0x2c42, 0x3308, 0x377a, 0x361c, 0x39a0, 0x36c9, 0x2dcb, 0x3bf2, 0x3b5f, 0x33ee, 0x24c1, 0x2ce9, 0x3927, 0x305d, 0x3702, 0x3119, 0x35f9, 0x3855, 0x3374, 0x349b, 0x3bcf, 0x2dea, 0x34f0, 0x363f, 0x37da, 0x3a74, 0x35fc, 0x35fa, 0x316b, 0x3804, 0x37a7, 0x3986, +0x3073, 0x3aed, 0x31c7, 0x3844, 0x34a4, 0x387d, 0x3a20, 0x3037, 0x3a00, 0x3b70, 0x377f, 0x3686, 0x3b7e, 0x38b3, 0x32e3, 0x3323, 0x391e, 0x3228, 0x3930, 0x3997, 0x3a5e, 0x398b, 0x3512, 0x35b0, 0x365c, 0x325d, 0x3b61, 0x38b8, 0x39a4, 0x3423, 0x3bd7, 0x38af, +0x2d3d, 0x382d, 0x38ac, 0x26ca, 0x395e, 0x21a8, 0x3520, 0x386f, 0x3b95, 0x32c0, 0x3b84, 0x3a51, 0x3b4b, 0x31d2, 0x3747, 0x3b96, 0x3b40, 0x3535, 0x38d1, 0x3899, 0x3b00, 0x3827, 0x3ae3, 0x38c8, 0x3a07, 0x338d, 0x2e96, 0x3a46, 0x394a, 0x39de, 0x2951, 0x3a02, +0x3838, 0x2d45, 0x28c0, 0x3958, 0x3070, 0x2aa2, 0x3510, 0x38ce, 0x271c, 0x3440, 0x3954, 0x30bc, 0x3b35, 0x2f1d, 0x3afb, 0x2dae, 0x356f, 0x2e13, 0x3981, 0x326d, 0x3a28, 0x3a36, 0x3a95, 0x38cb, 0x38db, 0x3150, 0x2c9e, 0x34c5, 0x3adb, 0x3bdf, 0x38f2, 0x3994, +0x36f8, 0x31c0, 0x3a4f, 0x3825, 0x394b, 0x3a8b, 0x38ac, 0x3167, 0x2e2d, 0x3a93, 0x34f3, 0x37bd, 0x3b63, 0x2f2f, 0x3ae0, 0x3ad8, 0x34a8, 0x2e1c, 0x3890, 0x3705, 0x3b69, 0x3bc1, 0x28af, 0x3b36, 0x348b, 0x3111, 0x3a8d, 0x389c, 0x3916, 0x36dc, 0x3bae, 0x3874, +0x3593, 0x3638, 0x3018, 0x3a56, 0x38a3, 0x2ad4, 0x3a25, 0x38d7, 0x3864, 0x31c1, 0x28d1, 0x39c8, 0x37d6, 0x2c7f, 0x3ba5, 0x34b8, 0x3bef, 0x3b83, 0x3ab5, 0x3062, 0x38bc, 0x399c, 0x2ce4, 0x2f2c, 0x39bf, 0x2ed1, 0x385f, 0x37e0, 0x35ee, 0x397d, 0x3b0c, 0x3049, +0x39d5, 0x322e, 0x3936, 0x3747, 0x2e15, 0x3b41, 0x3874, 0x3bd0, 0x2c04, 0x3800, 0x375b, 0x3b2d, 0x38d8, 0x3a51, 0x3406, 0x38da, 0x38ba, 0x3497, 0x382e, 0x35fc, 0x39d4, 0x3775, 0x3b1e, 0x3813, 0x3649, 0x31af, 0x37bb, 0x334a, 0x3a6e, 0x3284, 0x26e0, 0x2e01, +0x2ebb, 0x344b, 0x3821, 0x381a, 0x385a, 0x2534, 0x3635, 0x2a92, 0x3b8c, 0x31f0, 0x3947, 0x3ac7, 0x3743, 0x3924, 0x39e4, 0x358f, 0x2b62, 0x392c, 0x3955, 0x3341, 0x3676, 0x38ac, 0x3957, 0x335b, 0x2ca2, 0x39ff, 0x37cb, 0x341f, 0x3ac9, 0x3b6c, 0x2f14, 0x34c3, +0x3018, 0x3169, 0x355b, 0x3624, 0x31ed, 0x379e, 0x3268, 0x309b, 0x35db, 0x3872, 0x3bdb, 0x34c7, 0x3408, 0x3359, 0x3920, 0x331f, 0x3866, 0x3af0, 0x2a1a, 0x39e0, 0x3b14, 0x34fa, 0x2d18, 0x3963, 0x35e8, 0x2539, 0x38f5, 0x37b3, 0x378f, 0x31b5, 0x3a6c, 0x3685, +0x3a06, 0x318a, 0x2934, 0x33c1, 0x3be8, 0x375b, 0x3860, 0x3543, 0x3702, 0x3951, 0x3677, 0x37ff, 0x2e27, 0x2e3a, 0x340f, 0x3817, 0x2f04, 0x357e, 0x3a1d, 0x2dd6, 0x252a, 0x3945, 0x162a, 0x3b19, 0x3a53, 0x35d2, 0x3a5d, 0x3474, 0x38e9, 0x374b, 0x387c, 0x1f1a, +0x38ac, 0x3291, 0x3393, 0x3b53, 0x3169, 0x3bca, 0x2f1a, 0x3551, 0x38a3, 0x28e3, 0x369d, 0x34a1, 0x38a8, 0x34c3, 0x3841, 0x390d, 0x3b13, 0x3282, 0x3a29, 0x3a78, 0x2df3, 0x3a37, 0x35f4, 0x35a6, 0x38e8, 0x3328, 0x3beb, 0x390b, 0x32dc, 0x34dc, 0x396d, 0x3a78, +0x39ba, 0x3a06, 0x2cdd, 0x3bc3, 0x2d43, 0x2992, 0x3663, 0x3a68, 0x2c3e, 0x394e, 0x2c9f, 0x380e, 0x37f5, 0x3557, 0x2873, 0x390f, 0x39e7, 0x3939, 0x3669, 0x385c, 0x3a68, 0x32c4, 0x2b04, 0x2d6d, 0x39d3, 0x3895, 0x331d, 0x3b59, 0x3463, 0x2b6a, 0x31de, 0x3296, +0x3aae, 0x3bcd, 0x345a, 0x3897, 0x374b, 0x3bd4, 0x38a2, 0x357f, 0x3402, 0x3a0c, 0x3507, 0x3865, 0x3a54, 0x3878, 0x3859, 0x383e, 0x32b5, 0x34ea, 0x328d, 0x38b6, 0x3464, 0x2f5b, 0x35ff, 0x3817, 0x2f24, 0x3533, 0x3b21, 0x37ba, 0x3837, 0x2e34, 0x3bad, 0x34bc +}; \ No newline at end of file diff --git a/carfield/redmule/inc/x_input.h b/carfield/redmule/inc/x_input.h new file mode 100644 index 0000000..1e38d23 --- /dev/null +++ b/carfield/redmule/inc/x_input.h @@ -0,0 +1,27 @@ + /* Header file generated by RedMulE Golden Model */ +uint16_t x_inp [768] = { +0x2153, 0x3bb5, 0x3896, 0x365f, 0x2483, 0x3518, 0x2dd1, 0x3bca, 0x397b, 0x29b1, 0x3705, 0x36c8, 0x398b, 0x3661, 0x2f05, 0x365a, 0x3bf9, 0x34df, 0x363b, 0x38d9, 0x39c6, 0x3abb, 0x3952, 0x38f2, 0x392d, 0x3b3e, 0x2afb, 0x3a9d, 0x353b, 0x3b73, 0x3a01, 0x3679, +0x3934, 0x397d, 0x2904, 0x3822, 0x3462, 0x3b44, 0x39e9, 0x28be, 0x331e, 0x3a1d, 0x39e5, 0x34da, 0x3a19, 0x3906, 0x1d35, 0x3871, 0x31e7, 0x3b29, 0x325d, 0x3797, 0x2b2f, 0x38b4, 0x232f, 0x38aa, 0x3aca, 0x316f, 0x3811, 0x3950, 0x32ea, 0x3bc7, 0x382c, 0x38a2, +0x29ce, 0x3afa, 0x3a39, 0x2ccc, 0x39fd, 0x3b3d, 0x384a, 0x3a35, 0x3802, 0x366a, 0x37ec, 0x3598, 0x3bf8, 0x3a85, 0x3a1b, 0x386e, 0x3b4c, 0x39de, 0x38c2, 0x2f93, 0x3b4c, 0x39c4, 0x3b9e, 0x3844, 0x346d, 0x3bff, 0x32ce, 0x296d, 0x3130, 0x3b3d, 0x3b44, 0x369d, +0x3b13, 0x31ed, 0x330a, 0x3831, 0x34e7, 0x37b3, 0x331a, 0x3918, 0x32d3, 0x3995, 0x3991, 0x3919, 0x3a26, 0x385b, 0x2b76, 0x3a3b, 0x37f2, 0x26a7, 0x3225, 0x3b64, 0x28f0, 0x3456, 0x3822, 0x341e, 0x381a, 0x38d8, 0x2c11, 0x33be, 0x33ac, 0x353f, 0x3476, 0x3abc, +0x36ec, 0x3a1d, 0x39d3, 0x3821, 0x36ac, 0x3bce, 0x3ad2, 0x3616, 0x36a1, 0x2cb3, 0x38d2, 0x314f, 0x385c, 0x3b63, 0x3bb6, 0x2951, 0x372d, 0x2c42, 0x3823, 0x3883, 0x3872, 0x31ee, 0x36c5, 0x399a, 0x31b0, 0x3887, 0x3884, 0x3865, 0x3896, 0x36c3, 0x32e3, 0x346c, +0x3935, 0x3b50, 0x2b6d, 0x38cd, 0x388f, 0x3389, 0x395d, 0x31cd, 0x2efd, 0x3154, 0x2f35, 0x3444, 0x3293, 0x3b6b, 0x1bec, 0x3b69, 0x3bf3, 0x3611, 0x3508, 0x3742, 0x3a50, 0x3ab7, 0x3457, 0x38d3, 0x3344, 0x38e8, 0x33c0, 0x3668, 0x3bee, 0x3b21, 0x3727, 0x3121, +0x316c, 0x3288, 0x2d50, 0x2e74, 0x35d5, 0x37e2, 0x303d, 0x36af, 0x341f, 0x3436, 0x2df7, 0x399d, 0x30f4, 0x3aaf, 0x34e4, 0x2c2a, 0x3116, 0x34d3, 0x36ac, 0x35e3, 0x3760, 0x36e1, 0x3ad2, 0x3547, 0x38f4, 0x369c, 0x3ba9, 0x34f0, 0x3a39, 0x3b19, 0x36e6, 0x395d, +0x3be8, 0x3293, 0x3bfc, 0x3435, 0x2eb3, 0x3360, 0x3919, 0x3bed, 0x396a, 0x37fc, 0x3242, 0x384b, 0x38cb, 0x3b2c, 0x3b28, 0x28cf, 0x3828, 0x3855, 0x3ba9, 0x2fa7, 0x340b, 0x32f1, 0x3ada, 0x36fa, 0x31f5, 0x3436, 0x29d0, 0x33e6, 0x3232, 0x3bec, 0x3904, 0x2797, +0x3b81, 0x3bac, 0x38d2, 0x343d, 0x31af, 0x3b1e, 0x33fc, 0x3864, 0x3624, 0x3905, 0x2945, 0x3b52, 0x2d08, 0x3a17, 0x3b84, 0x3804, 0x3a24, 0x38a3, 0x3562, 0x3ae6, 0x3bba, 0x3a45, 0x3679, 0x31fa, 0x3994, 0x2c3d, 0x383f, 0x399d, 0x34f7, 0x360e, 0x35f3, 0x38f0, +0x38d4, 0x399a, 0x3a48, 0x3987, 0x3b54, 0x382c, 0x3210, 0x35ef, 0x36ca, 0x31b4, 0x3625, 0x371f, 0x37bd, 0x3680, 0x3a3a, 0x3ac0, 0x3bbf, 0x3bf5, 0x39f2, 0x29c2, 0x363e, 0x3a4e, 0x3596, 0x3b1b, 0x3459, 0x3669, 0x3aa1, 0x39c3, 0x3376, 0x390d, 0x2456, 0x39b5, +0x3a66, 0x3ad8, 0x3b51, 0x36aa, 0x32be, 0x3ac8, 0x392b, 0x3740, 0x3a48, 0x38f5, 0x3b2d, 0x3a5f, 0x2ff3, 0x366f, 0x39d3, 0x35e5, 0x3822, 0x38db, 0x3b8a, 0x34be, 0x2d33, 0x36dd, 0x3578, 0x3bdf, 0x2c7e, 0x39cf, 0x32ff, 0x35c9, 0x3970, 0x3bcb, 0x351e, 0x3956, +0x2c42, 0x3308, 0x377a, 0x361c, 0x39a0, 0x36c9, 0x2dcb, 0x3bf2, 0x3b5f, 0x33ee, 0x24c1, 0x2ce9, 0x3927, 0x305d, 0x3702, 0x3119, 0x35f9, 0x3855, 0x3374, 0x349b, 0x3bcf, 0x2dea, 0x34f0, 0x363f, 0x37da, 0x3a74, 0x35fc, 0x35fa, 0x316b, 0x3804, 0x37a7, 0x3986, +0x3073, 0x3aed, 0x31c7, 0x3844, 0x34a4, 0x387d, 0x3a20, 0x3037, 0x3a00, 0x3b70, 0x377f, 0x3686, 0x3b7e, 0x38b3, 0x32e3, 0x3323, 0x391e, 0x3228, 0x3930, 0x3997, 0x3a5e, 0x398b, 0x3512, 0x35b0, 0x365c, 0x325d, 0x3b61, 0x38b8, 0x39a4, 0x3423, 0x3bd7, 0x38af, +0x2d3d, 0x382d, 0x38ac, 0x26ca, 0x395e, 0x21a8, 0x3520, 0x386f, 0x3b95, 0x32c0, 0x3b84, 0x3a51, 0x3b4b, 0x31d2, 0x3747, 0x3b96, 0x3b40, 0x3535, 0x38d1, 0x3899, 0x3b00, 0x3827, 0x3ae3, 0x38c8, 0x3a07, 0x338d, 0x2e96, 0x3a46, 0x394a, 0x39de, 0x2951, 0x3a02, +0x3838, 0x2d45, 0x28c0, 0x3958, 0x3070, 0x2aa2, 0x3510, 0x38ce, 0x271c, 0x3440, 0x3954, 0x30bc, 0x3b35, 0x2f1d, 0x3afb, 0x2dae, 0x356f, 0x2e13, 0x3981, 0x326d, 0x3a28, 0x3a36, 0x3a95, 0x38cb, 0x38db, 0x3150, 0x2c9e, 0x34c5, 0x3adb, 0x3bdf, 0x38f2, 0x3994, +0x36f8, 0x31c0, 0x3a4f, 0x3825, 0x394b, 0x3a8b, 0x38ac, 0x3167, 0x2e2d, 0x3a93, 0x34f3, 0x37bd, 0x3b63, 0x2f2f, 0x3ae0, 0x3ad8, 0x34a8, 0x2e1c, 0x3890, 0x3705, 0x3b69, 0x3bc1, 0x28af, 0x3b36, 0x348b, 0x3111, 0x3a8d, 0x389c, 0x3916, 0x36dc, 0x3bae, 0x3874, +0x3593, 0x3638, 0x3018, 0x3a56, 0x38a3, 0x2ad4, 0x3a25, 0x38d7, 0x3864, 0x31c1, 0x28d1, 0x39c8, 0x37d6, 0x2c7f, 0x3ba5, 0x34b8, 0x3bef, 0x3b83, 0x3ab5, 0x3062, 0x38bc, 0x399c, 0x2ce4, 0x2f2c, 0x39bf, 0x2ed1, 0x385f, 0x37e0, 0x35ee, 0x397d, 0x3b0c, 0x3049, +0x39d5, 0x322e, 0x3936, 0x3747, 0x2e15, 0x3b41, 0x3874, 0x3bd0, 0x2c04, 0x3800, 0x375b, 0x3b2d, 0x38d8, 0x3a51, 0x3406, 0x38da, 0x38ba, 0x3497, 0x382e, 0x35fc, 0x39d4, 0x3775, 0x3b1e, 0x3813, 0x3649, 0x31af, 0x37bb, 0x334a, 0x3a6e, 0x3284, 0x26e0, 0x2e01, +0x2ebb, 0x344b, 0x3821, 0x381a, 0x385a, 0x2534, 0x3635, 0x2a92, 0x3b8c, 0x31f0, 0x3947, 0x3ac7, 0x3743, 0x3924, 0x39e4, 0x358f, 0x2b62, 0x392c, 0x3955, 0x3341, 0x3676, 0x38ac, 0x3957, 0x335b, 0x2ca2, 0x39ff, 0x37cb, 0x341f, 0x3ac9, 0x3b6c, 0x2f14, 0x34c3, +0x3018, 0x3169, 0x355b, 0x3624, 0x31ed, 0x379e, 0x3268, 0x309b, 0x35db, 0x3872, 0x3bdb, 0x34c7, 0x3408, 0x3359, 0x3920, 0x331f, 0x3866, 0x3af0, 0x2a1a, 0x39e0, 0x3b14, 0x34fa, 0x2d18, 0x3963, 0x35e8, 0x2539, 0x38f5, 0x37b3, 0x378f, 0x31b5, 0x3a6c, 0x3685, +0x3a06, 0x318a, 0x2934, 0x33c1, 0x3be8, 0x375b, 0x3860, 0x3543, 0x3702, 0x3951, 0x3677, 0x37ff, 0x2e27, 0x2e3a, 0x340f, 0x3817, 0x2f04, 0x357e, 0x3a1d, 0x2dd6, 0x252a, 0x3945, 0x162a, 0x3b19, 0x3a53, 0x35d2, 0x3a5d, 0x3474, 0x38e9, 0x374b, 0x387c, 0x1f1a, +0x38ac, 0x3291, 0x3393, 0x3b53, 0x3169, 0x3bca, 0x2f1a, 0x3551, 0x38a3, 0x28e3, 0x369d, 0x34a1, 0x38a8, 0x34c3, 0x3841, 0x390d, 0x3b13, 0x3282, 0x3a29, 0x3a78, 0x2df3, 0x3a37, 0x35f4, 0x35a6, 0x38e8, 0x3328, 0x3beb, 0x390b, 0x32dc, 0x34dc, 0x396d, 0x3a78, +0x39ba, 0x3a06, 0x2cdd, 0x3bc3, 0x2d43, 0x2992, 0x3663, 0x3a68, 0x2c3e, 0x394e, 0x2c9f, 0x380e, 0x37f5, 0x3557, 0x2873, 0x390f, 0x39e7, 0x3939, 0x3669, 0x385c, 0x3a68, 0x32c4, 0x2b04, 0x2d6d, 0x39d3, 0x3895, 0x331d, 0x3b59, 0x3463, 0x2b6a, 0x31de, 0x3296, +0x3aae, 0x3bcd, 0x345a, 0x3897, 0x374b, 0x3bd4, 0x38a2, 0x357f, 0x3402, 0x3a0c, 0x3507, 0x3865, 0x3a54, 0x3878, 0x3859, 0x383e, 0x32b5, 0x34ea, 0x328d, 0x38b6, 0x3464, 0x2f5b, 0x35ff, 0x3817, 0x2f24, 0x3533, 0x3b21, 0x37ba, 0x3837, 0x2e34, 0x3bad, 0x34bc +}; \ No newline at end of file diff --git a/carfield/redmule/inc/y_2D.h b/carfield/redmule/inc/y_2D.h new file mode 100644 index 0000000..9484a10 --- /dev/null +++ b/carfield/redmule/inc/y_2D.h @@ -0,0 +1,27 @@ + /* Header file generated by RedMulE Golden Model */ +uint16_t y_inp_2D [32][32] = { +0x3150, 0x2dc1, 0x3033, 0x31f5, 0x3bb6, 0x3bff, 0x39f9, 0x3662, 0x3720, 0x351d, 0x384b, 0x3093, 0x3b9d, 0x35ad, 0x3695, 0x3466, 0x2300, 0x3445, 0x33ae, 0x3586, 0x38a3, 0x3bdb, 0x33a2, 0x379b, 0x3a0e, 0x38b0, 0x39ba, 0x379b, 0x39d3, 0x3a51, 0x3b30, 0x3794, +0x3b76, 0x3042, 0x38cc, 0x2dfc, 0x3b1a, 0x37fb, 0x38f7, 0x3824, 0x386f, 0x38c7, 0x36ee, 0x3a9c, 0x38d3, 0x2c67, 0x3a80, 0x2f30, 0x3328, 0x3721, 0x3790, 0x34e5, 0x3a6c, 0x3643, 0x3934, 0x3034, 0x38d4, 0x362e, 0x3b4b, 0x3408, 0x30c2, 0x370e, 0x3b31, 0x3b16, +0x3b6b, 0x39d4, 0x339c, 0x381e, 0x313e, 0x3671, 0x3ae2, 0x3479, 0x3940, 0x342d, 0x3925, 0x370a, 0x35d8, 0x2dad, 0x3888, 0x24b9, 0x375d, 0x34bd, 0x3243, 0x2ebb, 0x3970, 0x3a21, 0x3a07, 0x3877, 0x3888, 0x3569, 0x372d, 0x2ac1, 0x331e, 0x384d, 0x3996, 0x34a4, +0x35c1, 0x33a9, 0x21ed, 0x3a42, 0x388d, 0x34e4, 0x33c3, 0x34f9, 0x3a7b, 0x33fb, 0x2cdd, 0x3b0e, 0x333b, 0x3973, 0x34fc, 0x3771, 0x32ea, 0x2de4, 0x31a8, 0x3946, 0x3657, 0x3a4e, 0x36f6, 0x2829, 0x3ba2, 0x3bdc, 0x3bb3, 0x306c, 0x398d, 0x3a1f, 0x3991, 0x3846, +0x3547, 0x3292, 0x2e85, 0x31ed, 0x3979, 0x3a90, 0x28a4, 0x3bed, 0x36d8, 0x340e, 0x3b6a, 0x3ab6, 0x3824, 0x382b, 0x3ac3, 0x3811, 0x36d7, 0x3519, 0x3a92, 0x3a42, 0x29d1, 0x383a, 0x3a9b, 0x300e, 0x2cd3, 0x39cd, 0x3874, 0x3a07, 0x2eb1, 0x3b86, 0x3ad8, 0x3a5d, +0x3712, 0x284a, 0x38c1, 0x3bec, 0x39c0, 0x32cd, 0x3ad8, 0x3bce, 0x3817, 0x3896, 0x3aa7, 0x3870, 0x3996, 0x32cc, 0x3a4c, 0x3757, 0x3814, 0x3b65, 0x3acb, 0x376e, 0x34c0, 0x3609, 0x3bf0, 0x3b24, 0x3b29, 0x3848, 0x34b7, 0x398a, 0x220c, 0x3498, 0x3a8c, 0x3883, +0x38c4, 0x3af6, 0x3a42, 0x2dd6, 0x3147, 0x3717, 0x3a8e, 0x3af9, 0x3296, 0x38ef, 0x34fa, 0x3555, 0x3b29, 0x38de, 0x315e, 0x3773, 0x3b67, 0x3116, 0x38ec, 0x357c, 0x35d0, 0x2518, 0x3958, 0x2a03, 0x37d9, 0x3699, 0x3a1e, 0x3230, 0x3b13, 0x36d4, 0x3b2a, 0x39ad, +0x3b10, 0x351a, 0x3b97, 0x3326, 0x2b54, 0x3b7d, 0x386f, 0x373e, 0x37fa, 0x389b, 0x3b90, 0x3292, 0x3975, 0x38f3, 0x37f1, 0x3590, 0x3810, 0x2fd7, 0x3bf7, 0x3a5a, 0x3a1c, 0x34dd, 0x354c, 0x32f8, 0x3095, 0x321e, 0x39e0, 0x395c, 0x3717, 0x357f, 0x394a, 0x34b1, +0x3ba4, 0x380c, 0x3604, 0x2f50, 0x348d, 0x3828, 0x3a9f, 0x39ce, 0x32ca, 0x3906, 0x3ab2, 0x2ca5, 0x38c9, 0x362a, 0x34b2, 0x29dc, 0x3a36, 0x3052, 0x31b7, 0x3589, 0x387c, 0x3401, 0x3b22, 0x3ad6, 0x3ae8, 0x3238, 0x3494, 0x3502, 0x3717, 0x3a6c, 0x3229, 0x368c, +0x3056, 0x3a56, 0x3498, 0x39eb, 0x2864, 0x342d, 0x39e0, 0x34a1, 0x2b99, 0x3a04, 0x38ff, 0x328c, 0x34d9, 0x387d, 0x3a3c, 0x32e5, 0x39eb, 0x3984, 0x34dd, 0x38a7, 0x373f, 0x39b4, 0x3235, 0x2f58, 0x2f39, 0x3800, 0x3758, 0x3939, 0x39fc, 0x3a4b, 0x38bf, 0x30ee, +0x345e, 0x39c8, 0x3a6d, 0x3262, 0x3b81, 0x31dc, 0x3a15, 0x3bd0, 0x36af, 0x36de, 0x37d5, 0x39d7, 0x3ad3, 0x3ac1, 0x3109, 0x35ea, 0x31c6, 0x398d, 0x3987, 0x3a4a, 0x34d2, 0x2ed2, 0x35e6, 0x352c, 0x39eb, 0x3bd6, 0x3a5b, 0x39d1, 0x34aa, 0x3ade, 0x394b, 0x38a1, +0x2bed, 0x38de, 0x3811, 0x3813, 0x391a, 0x374b, 0x3829, 0x3725, 0x38f0, 0x3583, 0x3966, 0x3a7d, 0x375a, 0x38fe, 0x3696, 0x361c, 0x39a8, 0x35f0, 0x38e1, 0x3003, 0x3595, 0x316e, 0x3862, 0x3af8, 0x3af2, 0x34c8, 0x381d, 0x37d8, 0x3893, 0x3a9c, 0x3989, 0x308c, +0x30cc, 0x2538, 0x399d, 0x3919, 0x399e, 0x21cc, 0x38e9, 0x30f8, 0x3a20, 0x3b3c, 0x3990, 0x259c, 0x3143, 0x3080, 0x3967, 0x3afb, 0x3a1b, 0x3779, 0x2eeb, 0x39f3, 0x379a, 0x369c, 0x3985, 0x3a1b, 0x3ba6, 0x3a53, 0x28d5, 0x3881, 0x31d9, 0x3a34, 0x3bd9, 0x393a, +0x3601, 0x2c6e, 0x3636, 0x3298, 0x39bb, 0x3a08, 0x38db, 0x35ad, 0x3a09, 0x36a6, 0x3bc7, 0x3bac, 0x34ae, 0x3291, 0x290b, 0x3250, 0x2648, 0x333d, 0x2bf3, 0x34b1, 0x30e0, 0x351f, 0x3a74, 0x38dc, 0x3883, 0x2841, 0x35e1, 0x390d, 0x3a50, 0x3abd, 0x386d, 0x3bb7, +0x3b94, 0x36b7, 0x3a49, 0x332f, 0x3a1d, 0x354b, 0x3bab, 0x3346, 0x3417, 0x351e, 0x3b6d, 0x391a, 0x2db3, 0x3b1c, 0x3a4a, 0x37b7, 0x36cf, 0x3a56, 0x39c4, 0x3be9, 0x34f0, 0x39be, 0x3691, 0x1ba5, 0x3888, 0x3040, 0x3ae1, 0x3b9b, 0x398f, 0x3a49, 0x3a16, 0x38c0, +0x386c, 0x39ab, 0x37fa, 0x382c, 0x3a6f, 0x393f, 0x340d, 0x38ef, 0x39d1, 0x3845, 0x398f, 0x363e, 0x3687, 0x3052, 0x3a2b, 0x392c, 0x2f5c, 0x3412, 0x3a1f, 0x3b2f, 0x3bcc, 0x3a63, 0x3a89, 0x36e9, 0x3921, 0x3b80, 0x2dc0, 0x3a03, 0x3beb, 0x38d3, 0x36cb, 0x39a3, +0x3978, 0x3a88, 0x3ba4, 0x3561, 0x28c5, 0x33a0, 0x37be, 0x2c39, 0x30ee, 0x3782, 0x2c07, 0x354e, 0x3491, 0x3a92, 0x331a, 0x3b15, 0x32e1, 0x3839, 0x3afb, 0x36c2, 0x2fd0, 0x29ad, 0x3b2e, 0x39c1, 0x2a8c, 0x341a, 0x2f90, 0x395a, 0x3969, 0x37ea, 0x3a5c, 0x3b6d, +0x3971, 0x3a93, 0x304e, 0x3623, 0x3a22, 0x31ee, 0x29df, 0x2c93, 0x3a01, 0x3a62, 0x366c, 0x371d, 0x3af3, 0x2e08, 0x3ac0, 0x3642, 0x3a28, 0x368d, 0x2d3d, 0x36d9, 0x32c3, 0x373f, 0x36fe, 0x3487, 0x2c81, 0x3623, 0x3b59, 0x3a91, 0x350a, 0x34f4, 0x3b09, 0x2c25, +0x3b13, 0x325a, 0x379e, 0x3a7d, 0x34b1, 0x39d5, 0x2ba8, 0x322b, 0x3b5e, 0x37ab, 0x2e24, 0x3ba9, 0x3a3d, 0x34f7, 0x3ba1, 0x3877, 0x3071, 0x39fb, 0x3bbd, 0x3633, 0x3b36, 0x2daa, 0x3b9b, 0x3aa0, 0x395c, 0x3b8f, 0x38d5, 0x3ab0, 0x3a8f, 0x36c2, 0x3b1f, 0x3489, +0x2acc, 0x3845, 0x3715, 0x37d8, 0x3992, 0x3bff, 0x350e, 0x3ad7, 0x39b0, 0x35ac, 0x3287, 0x385f, 0x3bd4, 0x37a3, 0x3438, 0x39a5, 0x3bcf, 0x38c3, 0x34f6, 0x3ae3, 0x3b57, 0x39af, 0x35eb, 0x3bed, 0x34d4, 0x2a95, 0x3b13, 0x384e, 0x3a3b, 0x33da, 0x3bce, 0x3b99, +0x3559, 0x3335, 0x3a2e, 0x3123, 0x38db, 0x33d0, 0x3638, 0x3b17, 0x3a72, 0x3afc, 0x3936, 0x3838, 0x2b69, 0x3895, 0x3a1a, 0x3192, 0x39d5, 0x37a5, 0x2eb0, 0x2e8b, 0x329a, 0x3b90, 0x390a, 0x3a1e, 0x3847, 0x375d, 0x3873, 0x35e2, 0x3771, 0x30f5, 0x3231, 0x3bd7, +0x2bbc, 0x3ace, 0x31ad, 0x3a6b, 0x28a4, 0x3b48, 0x3ba3, 0x3a84, 0x3353, 0x39f6, 0x381f, 0x2dd6, 0x314c, 0x34af, 0x3929, 0x3921, 0x383b, 0x34b0, 0x3923, 0x32c9, 0x3ae7, 0x318f, 0x3480, 0x2ad8, 0x3042, 0x3a4c, 0x349d, 0x2c12, 0x3abb, 0x3a57, 0x3b0d, 0x3111, +0x3359, 0x3a84, 0x38f2, 0x368d, 0x2f4b, 0x3ba0, 0x395c, 0x3026, 0x3a15, 0x2a04, 0x326e, 0x3522, 0x31a2, 0x382f, 0x2ada, 0x3b7c, 0x2f80, 0x3af5, 0x2d35, 0x38fa, 0x39ab, 0x2c6d, 0x2e7a, 0x39f6, 0x31a4, 0x3a53, 0x358c, 0x3951, 0x3a4e, 0x3916, 0x2a3f, 0x3ae9, +0x3b03, 0x39f8, 0x39fe, 0x3a61, 0x39fb, 0x3704, 0x360d, 0x39a7, 0x37a9, 0x348f, 0x3a30, 0x3af5, 0x366f, 0x3b29, 0x3a6a, 0x33d5, 0x370a, 0x39cd, 0x3444, 0x3bea, 0x3b2b, 0x312e, 0x3b8e, 0x32cf, 0x3b79, 0x3302, 0x3bba, 0x3962, 0x3413, 0x37a1, 0x39e0, 0x3805 +}; \ No newline at end of file diff --git a/carfield/redmule/inc/y_input.h b/carfield/redmule/inc/y_input.h new file mode 100644 index 0000000..45a2375 --- /dev/null +++ b/carfield/redmule/inc/y_input.h @@ -0,0 +1,27 @@ + /* Header file generated by RedMulE Golden Model */ +uint16_t y_inp [768] = { +0x3150, 0x2dc1, 0x3033, 0x31f5, 0x3bb6, 0x3bff, 0x39f9, 0x3662, 0x3720, 0x351d, 0x384b, 0x3093, 0x3b9d, 0x35ad, 0x3695, 0x3466, 0x2300, 0x3445, 0x33ae, 0x3586, 0x38a3, 0x3bdb, 0x33a2, 0x379b, 0x3a0e, 0x38b0, 0x39ba, 0x379b, 0x39d3, 0x3a51, 0x3b30, 0x3794, +0x3b76, 0x3042, 0x38cc, 0x2dfc, 0x3b1a, 0x37fb, 0x38f7, 0x3824, 0x386f, 0x38c7, 0x36ee, 0x3a9c, 0x38d3, 0x2c67, 0x3a80, 0x2f30, 0x3328, 0x3721, 0x3790, 0x34e5, 0x3a6c, 0x3643, 0x3934, 0x3034, 0x38d4, 0x362e, 0x3b4b, 0x3408, 0x30c2, 0x370e, 0x3b31, 0x3b16, +0x3b6b, 0x39d4, 0x339c, 0x381e, 0x313e, 0x3671, 0x3ae2, 0x3479, 0x3940, 0x342d, 0x3925, 0x370a, 0x35d8, 0x2dad, 0x3888, 0x24b9, 0x375d, 0x34bd, 0x3243, 0x2ebb, 0x3970, 0x3a21, 0x3a07, 0x3877, 0x3888, 0x3569, 0x372d, 0x2ac1, 0x331e, 0x384d, 0x3996, 0x34a4, +0x35c1, 0x33a9, 0x21ed, 0x3a42, 0x388d, 0x34e4, 0x33c3, 0x34f9, 0x3a7b, 0x33fb, 0x2cdd, 0x3b0e, 0x333b, 0x3973, 0x34fc, 0x3771, 0x32ea, 0x2de4, 0x31a8, 0x3946, 0x3657, 0x3a4e, 0x36f6, 0x2829, 0x3ba2, 0x3bdc, 0x3bb3, 0x306c, 0x398d, 0x3a1f, 0x3991, 0x3846, +0x3547, 0x3292, 0x2e85, 0x31ed, 0x3979, 0x3a90, 0x28a4, 0x3bed, 0x36d8, 0x340e, 0x3b6a, 0x3ab6, 0x3824, 0x382b, 0x3ac3, 0x3811, 0x36d7, 0x3519, 0x3a92, 0x3a42, 0x29d1, 0x383a, 0x3a9b, 0x300e, 0x2cd3, 0x39cd, 0x3874, 0x3a07, 0x2eb1, 0x3b86, 0x3ad8, 0x3a5d, +0x3712, 0x284a, 0x38c1, 0x3bec, 0x39c0, 0x32cd, 0x3ad8, 0x3bce, 0x3817, 0x3896, 0x3aa7, 0x3870, 0x3996, 0x32cc, 0x3a4c, 0x3757, 0x3814, 0x3b65, 0x3acb, 0x376e, 0x34c0, 0x3609, 0x3bf0, 0x3b24, 0x3b29, 0x3848, 0x34b7, 0x398a, 0x220c, 0x3498, 0x3a8c, 0x3883, +0x38c4, 0x3af6, 0x3a42, 0x2dd6, 0x3147, 0x3717, 0x3a8e, 0x3af9, 0x3296, 0x38ef, 0x34fa, 0x3555, 0x3b29, 0x38de, 0x315e, 0x3773, 0x3b67, 0x3116, 0x38ec, 0x357c, 0x35d0, 0x2518, 0x3958, 0x2a03, 0x37d9, 0x3699, 0x3a1e, 0x3230, 0x3b13, 0x36d4, 0x3b2a, 0x39ad, +0x3b10, 0x351a, 0x3b97, 0x3326, 0x2b54, 0x3b7d, 0x386f, 0x373e, 0x37fa, 0x389b, 0x3b90, 0x3292, 0x3975, 0x38f3, 0x37f1, 0x3590, 0x3810, 0x2fd7, 0x3bf7, 0x3a5a, 0x3a1c, 0x34dd, 0x354c, 0x32f8, 0x3095, 0x321e, 0x39e0, 0x395c, 0x3717, 0x357f, 0x394a, 0x34b1, +0x3ba4, 0x380c, 0x3604, 0x2f50, 0x348d, 0x3828, 0x3a9f, 0x39ce, 0x32ca, 0x3906, 0x3ab2, 0x2ca5, 0x38c9, 0x362a, 0x34b2, 0x29dc, 0x3a36, 0x3052, 0x31b7, 0x3589, 0x387c, 0x3401, 0x3b22, 0x3ad6, 0x3ae8, 0x3238, 0x3494, 0x3502, 0x3717, 0x3a6c, 0x3229, 0x368c, +0x3056, 0x3a56, 0x3498, 0x39eb, 0x2864, 0x342d, 0x39e0, 0x34a1, 0x2b99, 0x3a04, 0x38ff, 0x328c, 0x34d9, 0x387d, 0x3a3c, 0x32e5, 0x39eb, 0x3984, 0x34dd, 0x38a7, 0x373f, 0x39b4, 0x3235, 0x2f58, 0x2f39, 0x3800, 0x3758, 0x3939, 0x39fc, 0x3a4b, 0x38bf, 0x30ee, +0x345e, 0x39c8, 0x3a6d, 0x3262, 0x3b81, 0x31dc, 0x3a15, 0x3bd0, 0x36af, 0x36de, 0x37d5, 0x39d7, 0x3ad3, 0x3ac1, 0x3109, 0x35ea, 0x31c6, 0x398d, 0x3987, 0x3a4a, 0x34d2, 0x2ed2, 0x35e6, 0x352c, 0x39eb, 0x3bd6, 0x3a5b, 0x39d1, 0x34aa, 0x3ade, 0x394b, 0x38a1, +0x2bed, 0x38de, 0x3811, 0x3813, 0x391a, 0x374b, 0x3829, 0x3725, 0x38f0, 0x3583, 0x3966, 0x3a7d, 0x375a, 0x38fe, 0x3696, 0x361c, 0x39a8, 0x35f0, 0x38e1, 0x3003, 0x3595, 0x316e, 0x3862, 0x3af8, 0x3af2, 0x34c8, 0x381d, 0x37d8, 0x3893, 0x3a9c, 0x3989, 0x308c, +0x30cc, 0x2538, 0x399d, 0x3919, 0x399e, 0x21cc, 0x38e9, 0x30f8, 0x3a20, 0x3b3c, 0x3990, 0x259c, 0x3143, 0x3080, 0x3967, 0x3afb, 0x3a1b, 0x3779, 0x2eeb, 0x39f3, 0x379a, 0x369c, 0x3985, 0x3a1b, 0x3ba6, 0x3a53, 0x28d5, 0x3881, 0x31d9, 0x3a34, 0x3bd9, 0x393a, +0x3601, 0x2c6e, 0x3636, 0x3298, 0x39bb, 0x3a08, 0x38db, 0x35ad, 0x3a09, 0x36a6, 0x3bc7, 0x3bac, 0x34ae, 0x3291, 0x290b, 0x3250, 0x2648, 0x333d, 0x2bf3, 0x34b1, 0x30e0, 0x351f, 0x3a74, 0x38dc, 0x3883, 0x2841, 0x35e1, 0x390d, 0x3a50, 0x3abd, 0x386d, 0x3bb7, +0x3b94, 0x36b7, 0x3a49, 0x332f, 0x3a1d, 0x354b, 0x3bab, 0x3346, 0x3417, 0x351e, 0x3b6d, 0x391a, 0x2db3, 0x3b1c, 0x3a4a, 0x37b7, 0x36cf, 0x3a56, 0x39c4, 0x3be9, 0x34f0, 0x39be, 0x3691, 0x1ba5, 0x3888, 0x3040, 0x3ae1, 0x3b9b, 0x398f, 0x3a49, 0x3a16, 0x38c0, +0x386c, 0x39ab, 0x37fa, 0x382c, 0x3a6f, 0x393f, 0x340d, 0x38ef, 0x39d1, 0x3845, 0x398f, 0x363e, 0x3687, 0x3052, 0x3a2b, 0x392c, 0x2f5c, 0x3412, 0x3a1f, 0x3b2f, 0x3bcc, 0x3a63, 0x3a89, 0x36e9, 0x3921, 0x3b80, 0x2dc0, 0x3a03, 0x3beb, 0x38d3, 0x36cb, 0x39a3, +0x3978, 0x3a88, 0x3ba4, 0x3561, 0x28c5, 0x33a0, 0x37be, 0x2c39, 0x30ee, 0x3782, 0x2c07, 0x354e, 0x3491, 0x3a92, 0x331a, 0x3b15, 0x32e1, 0x3839, 0x3afb, 0x36c2, 0x2fd0, 0x29ad, 0x3b2e, 0x39c1, 0x2a8c, 0x341a, 0x2f90, 0x395a, 0x3969, 0x37ea, 0x3a5c, 0x3b6d, +0x3971, 0x3a93, 0x304e, 0x3623, 0x3a22, 0x31ee, 0x29df, 0x2c93, 0x3a01, 0x3a62, 0x366c, 0x371d, 0x3af3, 0x2e08, 0x3ac0, 0x3642, 0x3a28, 0x368d, 0x2d3d, 0x36d9, 0x32c3, 0x373f, 0x36fe, 0x3487, 0x2c81, 0x3623, 0x3b59, 0x3a91, 0x350a, 0x34f4, 0x3b09, 0x2c25, +0x3b13, 0x325a, 0x379e, 0x3a7d, 0x34b1, 0x39d5, 0x2ba8, 0x322b, 0x3b5e, 0x37ab, 0x2e24, 0x3ba9, 0x3a3d, 0x34f7, 0x3ba1, 0x3877, 0x3071, 0x39fb, 0x3bbd, 0x3633, 0x3b36, 0x2daa, 0x3b9b, 0x3aa0, 0x395c, 0x3b8f, 0x38d5, 0x3ab0, 0x3a8f, 0x36c2, 0x3b1f, 0x3489, +0x2acc, 0x3845, 0x3715, 0x37d8, 0x3992, 0x3bff, 0x350e, 0x3ad7, 0x39b0, 0x35ac, 0x3287, 0x385f, 0x3bd4, 0x37a3, 0x3438, 0x39a5, 0x3bcf, 0x38c3, 0x34f6, 0x3ae3, 0x3b57, 0x39af, 0x35eb, 0x3bed, 0x34d4, 0x2a95, 0x3b13, 0x384e, 0x3a3b, 0x33da, 0x3bce, 0x3b99, +0x3559, 0x3335, 0x3a2e, 0x3123, 0x38db, 0x33d0, 0x3638, 0x3b17, 0x3a72, 0x3afc, 0x3936, 0x3838, 0x2b69, 0x3895, 0x3a1a, 0x3192, 0x39d5, 0x37a5, 0x2eb0, 0x2e8b, 0x329a, 0x3b90, 0x390a, 0x3a1e, 0x3847, 0x375d, 0x3873, 0x35e2, 0x3771, 0x30f5, 0x3231, 0x3bd7, +0x2bbc, 0x3ace, 0x31ad, 0x3a6b, 0x28a4, 0x3b48, 0x3ba3, 0x3a84, 0x3353, 0x39f6, 0x381f, 0x2dd6, 0x314c, 0x34af, 0x3929, 0x3921, 0x383b, 0x34b0, 0x3923, 0x32c9, 0x3ae7, 0x318f, 0x3480, 0x2ad8, 0x3042, 0x3a4c, 0x349d, 0x2c12, 0x3abb, 0x3a57, 0x3b0d, 0x3111, +0x3359, 0x3a84, 0x38f2, 0x368d, 0x2f4b, 0x3ba0, 0x395c, 0x3026, 0x3a15, 0x2a04, 0x326e, 0x3522, 0x31a2, 0x382f, 0x2ada, 0x3b7c, 0x2f80, 0x3af5, 0x2d35, 0x38fa, 0x39ab, 0x2c6d, 0x2e7a, 0x39f6, 0x31a4, 0x3a53, 0x358c, 0x3951, 0x3a4e, 0x3916, 0x2a3f, 0x3ae9, +0x3b03, 0x39f8, 0x39fe, 0x3a61, 0x39fb, 0x3704, 0x360d, 0x39a7, 0x37a9, 0x348f, 0x3a30, 0x3af5, 0x366f, 0x3b29, 0x3a6a, 0x33d5, 0x370a, 0x39cd, 0x3444, 0x3bea, 0x3b2b, 0x312e, 0x3b8e, 0x32cf, 0x3b79, 0x3302, 0x3bba, 0x3962, 0x3413, 0x37a1, 0x39e0, 0x3805 +}; \ No newline at end of file diff --git a/carfield/redmule/inc/z_2D.h b/carfield/redmule/inc/z_2D.h new file mode 100644 index 0000000..aff808a --- /dev/null +++ b/carfield/redmule/inc/z_2D.h @@ -0,0 +1,27 @@ + /* Header file generated by RedMulE Golden Model */ +uint16_t z_oup_2D [24][32] = { +0x4845, 0x4897, 0x4608, 0x4838, 0x4855, 0x487b, 0x4869, 0x4880, 0x46d1, 0x48b0, 0x48db, 0x483f, 0x48c9, 0x485f, 0x4881, 0x483a, 0x484b, 0x472c, 0x4762, 0x492b, 0x4822, 0x48fd, 0x488e, 0x492e, 0x483e, 0x484f, 0x49e8, 0x46d7, 0x484b, 0x489d, 0x490b, 0x47e9, +0x484f, 0x47d2, 0x44be, 0x4747, 0x47c7, 0x46c0, 0x4727, 0x48af, 0x46c5, 0x482d, 0x483d, 0x482e, 0x4897, 0x479f, 0x488b, 0x4749, 0x489a, 0x46a8, 0x46f2, 0x488b, 0x4891, 0x47e8, 0x4872, 0x483d, 0x4716, 0x46fd, 0x49b5, 0x46a0, 0x46e7, 0x47a4, 0x48a1, 0x4767, +0x4939, 0x4935, 0x4703, 0x48c1, 0x4863, 0x48bd, 0x4913, 0x48cf, 0x48b6, 0x48b8, 0x4946, 0x4920, 0x495e, 0x48e1, 0x4938, 0x48b2, 0x493a, 0x4882, 0x483b, 0x49d5, 0x4911, 0x4972, 0x496b, 0x49df, 0x48f2, 0x4888, 0x4a46, 0x4821, 0x48c1, 0x490c, 0x49b2, 0x48a3, +0x463a, 0x47b0, 0x44cb, 0x4762, 0x4765, 0x46b9, 0x466a, 0x4814, 0x4631, 0x4796, 0x4666, 0x474b, 0x4798, 0x4704, 0x4838, 0x4761, 0x47d3, 0x4590, 0x45ea, 0x48a2, 0x47f1, 0x4844, 0x484b, 0x4776, 0x47d6, 0x46d8, 0x48f3, 0x44d3, 0x46fa, 0x478d, 0x481e, 0x466e, +0x4827, 0x481e, 0x45a2, 0x4794, 0x4727, 0x4806, 0x475d, 0x48d5, 0x4708, 0x4828, 0x4862, 0x480d, 0x4895, 0x4832, 0x48bd, 0x47f1, 0x482a, 0x46a7, 0x47b1, 0x492d, 0x484d, 0x4884, 0x48dc, 0x485f, 0x476d, 0x480c, 0x48e9, 0x46d3, 0x4728, 0x4884, 0x48a0, 0x480e, +0x4862, 0x4813, 0x4675, 0x485a, 0x47e8, 0x4738, 0x4836, 0x4823, 0x46e7, 0x4821, 0x4822, 0x47b3, 0x4846, 0x4855, 0x4863, 0x4717, 0x4872, 0x47c1, 0x46d5, 0x488e, 0x47e2, 0x485f, 0x487c, 0x48b8, 0x481e, 0x4788, 0x48bd, 0x4677, 0x46c9, 0x47f8, 0x48fe, 0x47fc, +0x47a0, 0x47b2, 0x4588, 0x467e, 0x4662, 0x46c7, 0x46e8, 0x4812, 0x4536, 0x474e, 0x46c0, 0x468f, 0x481f, 0x4679, 0x46a1, 0x46e2, 0x4809, 0x4560, 0x4630, 0x47eb, 0x46b5, 0x4757, 0x4848, 0x477f, 0x46a6, 0x46d8, 0x4870, 0x459a, 0x4670, 0x4678, 0x47d2, 0x468c, +0x4762, 0x48c4, 0x46e3, 0x4791, 0x46b1, 0x486d, 0x47d0, 0x4867, 0x468d, 0x47f6, 0x48a5, 0x4756, 0x4857, 0x4854, 0x4866, 0x4838, 0x484d, 0x46ec, 0x47d2, 0x48f6, 0x484a, 0x4879, 0x4848, 0x483c, 0x471d, 0x4806, 0x48fa, 0x4730, 0x4768, 0x47b8, 0x4865, 0x46f9, +0x48a8, 0x4918, 0x46ca, 0x4867, 0x4800, 0x4862, 0x48d3, 0x4910, 0x474e, 0x4849, 0x48eb, 0x486b, 0x4966, 0x48c5, 0x48f4, 0x4830, 0x48f9, 0x4778, 0x481e, 0x499e, 0x48cf, 0x48f1, 0x4982, 0x4923, 0x487c, 0x47cf, 0x49ea, 0x4649, 0x4773, 0x495e, 0x48b2, 0x483f, +0x48a7, 0x4975, 0x4616, 0x481e, 0x481f, 0x4866, 0x48b6, 0x4864, 0x47dc, 0x4873, 0x485c, 0x487f, 0x4938, 0x491f, 0x490d, 0x48b6, 0x48f8, 0x48a1, 0x4859, 0x492d, 0x489c, 0x4915, 0x4899, 0x4887, 0x486c, 0x4859, 0x49ca, 0x471e, 0x4867, 0x4918, 0x48d3, 0x4827, +0x488b, 0x4998, 0x4704, 0x481d, 0x48b8, 0x4880, 0x4876, 0x4944, 0x470c, 0x48f2, 0x48b9, 0x489b, 0x4956, 0x48e5, 0x48d6, 0x48a5, 0x48dc, 0x4856, 0x484e, 0x49ab, 0x48e0, 0x490e, 0x48dd, 0x4945, 0x488b, 0x48dd, 0x4a32, 0x47ea, 0x4835, 0x4911, 0x4965, 0x4819, +0x460e, 0x481e, 0x452c, 0x4673, 0x475c, 0x4717, 0x46f6, 0x46d0, 0x4696, 0x46bc, 0x4726, 0x481e, 0x4763, 0x46ea, 0x46fe, 0x4758, 0x478b, 0x4627, 0x4704, 0x483f, 0x46ad, 0x47b1, 0x4792, 0x4816, 0x46f2, 0x4684, 0x4827, 0x45a8, 0x472f, 0x47a4, 0x4797, 0x462b, +0x483f, 0x48ab, 0x468f, 0x4863, 0x485a, 0x4766, 0x481d, 0x48cb, 0x47dc, 0x4903, 0x48fc, 0x4830, 0x48cc, 0x483e, 0x48ab, 0x4864, 0x4966, 0x4763, 0x4794, 0x499d, 0x488e, 0x488b, 0x48dc, 0x4960, 0x4854, 0x484c, 0x499c, 0x474c, 0x4826, 0x48bc, 0x4949, 0x4883, +0x489d, 0x4905, 0x4718, 0x481e, 0x48e3, 0x48f4, 0x48c1, 0x4904, 0x47e8, 0x48b3, 0x4892, 0x48d4, 0x48ff, 0x4894, 0x48d5, 0x4886, 0x48fa, 0x4803, 0x47d2, 0x492e, 0x4870, 0x48b2, 0x48e5, 0x492b, 0x487b, 0x4785, 0x49e3, 0x471d, 0x4837, 0x48bf, 0x489b, 0x48c4, +0x475c, 0x4871, 0x464a, 0x4811, 0x47af, 0x471c, 0x4817, 0x4817, 0x463b, 0x484e, 0x477f, 0x464f, 0x4704, 0x487c, 0x47a3, 0x4725, 0x4853, 0x462a, 0x465a, 0x4860, 0x4736, 0x4880, 0x47e1, 0x482b, 0x4811, 0x46c0, 0x48dc, 0x475d, 0x4668, 0x4806, 0x4893, 0x46f4, +0x4858, 0x4959, 0x463d, 0x487b, 0x480f, 0x484e, 0x48c0, 0x48a6, 0x4847, 0x4894, 0x48a0, 0x484a, 0x491e, 0x48f4, 0x48fc, 0x48b5, 0x48ce, 0x47d2, 0x47db, 0x497f, 0x4955, 0x4939, 0x48a7, 0x48ce, 0x4890, 0x4884, 0x49d6, 0x4763, 0x486e, 0x4922, 0x48f4, 0x48c3, +0x47ec, 0x491c, 0x4698, 0x4783, 0x4715, 0x4754, 0x4745, 0x4752, 0x472f, 0x4832, 0x4817, 0x4809, 0x47f8, 0x48c3, 0x47e6, 0x4800, 0x48b6, 0x4730, 0x480a, 0x48cb, 0x479e, 0x488e, 0x47c2, 0x488e, 0x472f, 0x47ee, 0x489d, 0x4744, 0x4755, 0x4851, 0x4846, 0x47d3, +0x4838, 0x48a0, 0x4634, 0x4762, 0x4786, 0x4806, 0x47e3, 0x482d, 0x4726, 0x486c, 0x47b7, 0x4803, 0x48ac, 0x4814, 0x48e0, 0x4839, 0x4827, 0x4750, 0x46f2, 0x48c5, 0x483f, 0x4886, 0x48ad, 0x4856, 0x47e8, 0x47a9, 0x4937, 0x4743, 0x46d0, 0x481f, 0x484c, 0x4804, +0x47fd, 0x481f, 0x456d, 0x4813, 0x474d, 0x4807, 0x4688, 0x480e, 0x46e8, 0x4810, 0x469f, 0x4799, 0x4853, 0x478f, 0x47f2, 0x4824, 0x47d0, 0x471f, 0x46da, 0x485f, 0x4813, 0x481c, 0x482e, 0x4863, 0x4786, 0x480b, 0x48c9, 0x46b8, 0x475a, 0x46e2, 0x4852, 0x46c5, +0x45af, 0x4802, 0x4466, 0x46c2, 0x465d, 0x4743, 0x46b7, 0x47ba, 0x4636, 0x46c3, 0x4677, 0x4784, 0x485a, 0x47c2, 0x46dc, 0x46ac, 0x47de, 0x460e, 0x465f, 0x4834, 0x47f4, 0x4769, 0x46fc, 0x4810, 0x45fd, 0x45ea, 0x48d0, 0x45b5, 0x4704, 0x4783, 0x4830, 0x46c4, +0x4759, 0x47c7, 0x453d, 0x45b0, 0x4741, 0x4702, 0x4736, 0x4793, 0x461b, 0x47ba, 0x470b, 0x46dd, 0x4657, 0x470b, 0x470d, 0x4710, 0x486c, 0x468f, 0x45c3, 0x46ba, 0x479d, 0x483b, 0x46c9, 0x4774, 0x46a9, 0x46a7, 0x4833, 0x4606, 0x4690, 0x46a9, 0x46f5, 0x46a7, +0x47ac, 0x48bb, 0x452c, 0x4803, 0x470f, 0x4824, 0x47d5, 0x48cb, 0x4707, 0x484a, 0x4832, 0x4797, 0x4851, 0x482c, 0x487a, 0x4877, 0x4891, 0x465d, 0x47f4, 0x48ce, 0x4898, 0x4899, 0x484e, 0x486a, 0x47ac, 0x47f0, 0x493e, 0x4611, 0x47e2, 0x489e, 0x488c, 0x46af, +0x4665, 0x4836, 0x45e4, 0x46b6, 0x46a1, 0x46b9, 0x46c8, 0x46dd, 0x4658, 0x474b, 0x467b, 0x4777, 0x4769, 0x4798, 0x4785, 0x475e, 0x472a, 0x4656, 0x45fb, 0x4881, 0x46fc, 0x472d, 0x476e, 0x47a3, 0x465d, 0x46ca, 0x4855, 0x4500, 0x464f, 0x479a, 0x46c3, 0x4738, +0x481e, 0x486c, 0x4659, 0x4801, 0x4756, 0x477a, 0x47d5, 0x487b, 0x4706, 0x4808, 0x484f, 0x4838, 0x4870, 0x4863, 0x48d3, 0x4806, 0x4865, 0x4771, 0x46be, 0x494c, 0x4915, 0x484c, 0x4900, 0x4862, 0x481a, 0x46e8, 0x4974, 0x46a0, 0x4775, 0x483d, 0x487c, 0x480e +}; \ No newline at end of file diff --git a/carfield/redmule/inc/z_output.h b/carfield/redmule/inc/z_output.h new file mode 100644 index 0000000..96c7e5f --- /dev/null +++ b/carfield/redmule/inc/z_output.h @@ -0,0 +1,27 @@ + /* Header file generated by RedMulE Golden Model */ +uint16_t z_oup [768] = { +0x4845, 0x4897, 0x4608, 0x4838, 0x4855, 0x487b, 0x4869, 0x4880, 0x46d1, 0x48b0, 0x48db, 0x483f, 0x48c9, 0x485f, 0x4881, 0x483a, 0x484b, 0x472c, 0x4762, 0x492b, 0x4822, 0x48fd, 0x488e, 0x492e, 0x483e, 0x484f, 0x49e8, 0x46d7, 0x484b, 0x489d, 0x490b, 0x47e9, +0x484f, 0x47d2, 0x44be, 0x4747, 0x47c7, 0x46c0, 0x4727, 0x48af, 0x46c5, 0x482d, 0x483d, 0x482e, 0x4897, 0x479f, 0x488b, 0x4749, 0x489a, 0x46a8, 0x46f2, 0x488b, 0x4891, 0x47e8, 0x4872, 0x483d, 0x4716, 0x46fd, 0x49b5, 0x46a0, 0x46e7, 0x47a4, 0x48a1, 0x4767, +0x4939, 0x4935, 0x4703, 0x48c1, 0x4863, 0x48bd, 0x4913, 0x48cf, 0x48b6, 0x48b8, 0x4946, 0x4920, 0x495e, 0x48e1, 0x4938, 0x48b2, 0x493a, 0x4882, 0x483b, 0x49d5, 0x4911, 0x4972, 0x496b, 0x49df, 0x48f2, 0x4888, 0x4a46, 0x4821, 0x48c1, 0x490c, 0x49b2, 0x48a3, +0x463a, 0x47b0, 0x44cb, 0x4762, 0x4765, 0x46b9, 0x466a, 0x4814, 0x4631, 0x4796, 0x4666, 0x474b, 0x4798, 0x4704, 0x4838, 0x4761, 0x47d3, 0x4590, 0x45ea, 0x48a2, 0x47f1, 0x4844, 0x484b, 0x4776, 0x47d6, 0x46d8, 0x48f3, 0x44d3, 0x46fa, 0x478d, 0x481e, 0x466e, +0x4827, 0x481e, 0x45a2, 0x4794, 0x4727, 0x4806, 0x475d, 0x48d5, 0x4708, 0x4828, 0x4862, 0x480d, 0x4895, 0x4832, 0x48bd, 0x47f1, 0x482a, 0x46a7, 0x47b1, 0x492d, 0x484d, 0x4884, 0x48dc, 0x485f, 0x476d, 0x480c, 0x48e9, 0x46d3, 0x4728, 0x4884, 0x48a0, 0x480e, +0x4862, 0x4813, 0x4675, 0x485a, 0x47e8, 0x4738, 0x4836, 0x4823, 0x46e7, 0x4821, 0x4822, 0x47b3, 0x4846, 0x4855, 0x4863, 0x4717, 0x4872, 0x47c1, 0x46d5, 0x488e, 0x47e2, 0x485f, 0x487c, 0x48b8, 0x481e, 0x4788, 0x48bd, 0x4677, 0x46c9, 0x47f8, 0x48fe, 0x47fc, +0x47a0, 0x47b2, 0x4588, 0x467e, 0x4662, 0x46c7, 0x46e8, 0x4812, 0x4536, 0x474e, 0x46c0, 0x468f, 0x481f, 0x4679, 0x46a1, 0x46e2, 0x4809, 0x4560, 0x4630, 0x47eb, 0x46b5, 0x4757, 0x4848, 0x477f, 0x46a6, 0x46d8, 0x4870, 0x459a, 0x4670, 0x4678, 0x47d2, 0x468c, +0x4762, 0x48c4, 0x46e3, 0x4791, 0x46b1, 0x486d, 0x47d0, 0x4867, 0x468d, 0x47f6, 0x48a5, 0x4756, 0x4857, 0x4854, 0x4866, 0x4838, 0x484d, 0x46ec, 0x47d2, 0x48f6, 0x484a, 0x4879, 0x4848, 0x483c, 0x471d, 0x4806, 0x48fa, 0x4730, 0x4768, 0x47b8, 0x4865, 0x46f9, +0x48a8, 0x4918, 0x46ca, 0x4867, 0x4800, 0x4862, 0x48d3, 0x4910, 0x474e, 0x4849, 0x48eb, 0x486b, 0x4966, 0x48c5, 0x48f4, 0x4830, 0x48f9, 0x4778, 0x481e, 0x499e, 0x48cf, 0x48f1, 0x4982, 0x4923, 0x487c, 0x47cf, 0x49ea, 0x4649, 0x4773, 0x495e, 0x48b2, 0x483f, +0x48a7, 0x4975, 0x4616, 0x481e, 0x481f, 0x4866, 0x48b6, 0x4864, 0x47dc, 0x4873, 0x485c, 0x487f, 0x4938, 0x491f, 0x490d, 0x48b6, 0x48f8, 0x48a1, 0x4859, 0x492d, 0x489c, 0x4915, 0x4899, 0x4887, 0x486c, 0x4859, 0x49ca, 0x471e, 0x4867, 0x4918, 0x48d3, 0x4827, +0x488b, 0x4998, 0x4704, 0x481d, 0x48b8, 0x4880, 0x4876, 0x4944, 0x470c, 0x48f2, 0x48b9, 0x489b, 0x4956, 0x48e5, 0x48d6, 0x48a5, 0x48dc, 0x4856, 0x484e, 0x49ab, 0x48e0, 0x490e, 0x48dd, 0x4945, 0x488b, 0x48dd, 0x4a32, 0x47ea, 0x4835, 0x4911, 0x4965, 0x4819, +0x460e, 0x481e, 0x452c, 0x4673, 0x475c, 0x4717, 0x46f6, 0x46d0, 0x4696, 0x46bc, 0x4726, 0x481e, 0x4763, 0x46ea, 0x46fe, 0x4758, 0x478b, 0x4627, 0x4704, 0x483f, 0x46ad, 0x47b1, 0x4792, 0x4816, 0x46f2, 0x4684, 0x4827, 0x45a8, 0x472f, 0x47a4, 0x4797, 0x462b, +0x483f, 0x48ab, 0x468f, 0x4863, 0x485a, 0x4766, 0x481d, 0x48cb, 0x47dc, 0x4903, 0x48fc, 0x4830, 0x48cc, 0x483e, 0x48ab, 0x4864, 0x4966, 0x4763, 0x4794, 0x499d, 0x488e, 0x488b, 0x48dc, 0x4960, 0x4854, 0x484c, 0x499c, 0x474c, 0x4826, 0x48bc, 0x4949, 0x4883, +0x489d, 0x4905, 0x4718, 0x481e, 0x48e3, 0x48f4, 0x48c1, 0x4904, 0x47e8, 0x48b3, 0x4892, 0x48d4, 0x48ff, 0x4894, 0x48d5, 0x4886, 0x48fa, 0x4803, 0x47d2, 0x492e, 0x4870, 0x48b2, 0x48e5, 0x492b, 0x487b, 0x4785, 0x49e3, 0x471d, 0x4837, 0x48bf, 0x489b, 0x48c4, +0x475c, 0x4871, 0x464a, 0x4811, 0x47af, 0x471c, 0x4817, 0x4817, 0x463b, 0x484e, 0x477f, 0x464f, 0x4704, 0x487c, 0x47a3, 0x4725, 0x4853, 0x462a, 0x465a, 0x4860, 0x4736, 0x4880, 0x47e1, 0x482b, 0x4811, 0x46c0, 0x48dc, 0x475d, 0x4668, 0x4806, 0x4893, 0x46f4, +0x4858, 0x4959, 0x463d, 0x487b, 0x480f, 0x484e, 0x48c0, 0x48a6, 0x4847, 0x4894, 0x48a0, 0x484a, 0x491e, 0x48f4, 0x48fc, 0x48b5, 0x48ce, 0x47d2, 0x47db, 0x497f, 0x4955, 0x4939, 0x48a7, 0x48ce, 0x4890, 0x4884, 0x49d6, 0x4763, 0x486e, 0x4922, 0x48f4, 0x48c3, +0x47ec, 0x491c, 0x4698, 0x4783, 0x4715, 0x4754, 0x4745, 0x4752, 0x472f, 0x4832, 0x4817, 0x4809, 0x47f8, 0x48c3, 0x47e6, 0x4800, 0x48b6, 0x4730, 0x480a, 0x48cb, 0x479e, 0x488e, 0x47c2, 0x488e, 0x472f, 0x47ee, 0x489d, 0x4744, 0x4755, 0x4851, 0x4846, 0x47d3, +0x4838, 0x48a0, 0x4634, 0x4762, 0x4786, 0x4806, 0x47e3, 0x482d, 0x4726, 0x486c, 0x47b7, 0x4803, 0x48ac, 0x4814, 0x48e0, 0x4839, 0x4827, 0x4750, 0x46f2, 0x48c5, 0x483f, 0x4886, 0x48ad, 0x4856, 0x47e8, 0x47a9, 0x4937, 0x4743, 0x46d0, 0x481f, 0x484c, 0x4804, +0x47fd, 0x481f, 0x456d, 0x4813, 0x474d, 0x4807, 0x4688, 0x480e, 0x46e8, 0x4810, 0x469f, 0x4799, 0x4853, 0x478f, 0x47f2, 0x4824, 0x47d0, 0x471f, 0x46da, 0x485f, 0x4813, 0x481c, 0x482e, 0x4863, 0x4786, 0x480b, 0x48c9, 0x46b8, 0x475a, 0x46e2, 0x4852, 0x46c5, +0x45af, 0x4802, 0x4466, 0x46c2, 0x465d, 0x4743, 0x46b7, 0x47ba, 0x4636, 0x46c3, 0x4677, 0x4784, 0x485a, 0x47c2, 0x46dc, 0x46ac, 0x47de, 0x460e, 0x465f, 0x4834, 0x47f4, 0x4769, 0x46fc, 0x4810, 0x45fd, 0x45ea, 0x48d0, 0x45b5, 0x4704, 0x4783, 0x4830, 0x46c4, +0x4759, 0x47c7, 0x453d, 0x45b0, 0x4741, 0x4702, 0x4736, 0x4793, 0x461b, 0x47ba, 0x470b, 0x46dd, 0x4657, 0x470b, 0x470d, 0x4710, 0x486c, 0x468f, 0x45c3, 0x46ba, 0x479d, 0x483b, 0x46c9, 0x4774, 0x46a9, 0x46a7, 0x4833, 0x4606, 0x4690, 0x46a9, 0x46f5, 0x46a7, +0x47ac, 0x48bb, 0x452c, 0x4803, 0x470f, 0x4824, 0x47d5, 0x48cb, 0x4707, 0x484a, 0x4832, 0x4797, 0x4851, 0x482c, 0x487a, 0x4877, 0x4891, 0x465d, 0x47f4, 0x48ce, 0x4898, 0x4899, 0x484e, 0x486a, 0x47ac, 0x47f0, 0x493e, 0x4611, 0x47e2, 0x489e, 0x488c, 0x46af, +0x4665, 0x4836, 0x45e4, 0x46b6, 0x46a1, 0x46b9, 0x46c8, 0x46dd, 0x4658, 0x474b, 0x467b, 0x4777, 0x4769, 0x4798, 0x4785, 0x475e, 0x472a, 0x4656, 0x45fb, 0x4881, 0x46fc, 0x472d, 0x476e, 0x47a3, 0x465d, 0x46ca, 0x4855, 0x4500, 0x464f, 0x479a, 0x46c3, 0x4738, +0x481e, 0x486c, 0x4659, 0x4801, 0x4756, 0x477a, 0x47d5, 0x487b, 0x4706, 0x4808, 0x484f, 0x4838, 0x4870, 0x4863, 0x48d3, 0x4806, 0x4865, 0x4771, 0x46be, 0x494c, 0x4915, 0x484c, 0x4900, 0x4862, 0x481a, 0x46e8, 0x4974, 0x46a0, 0x4775, 0x483d, 0x487c, 0x480e +}; \ No newline at end of file diff --git a/carfield/redmule/redmule.c b/carfield/redmule/redmule.c new file mode 100644 index 0000000..992e223 --- /dev/null +++ b/carfield/redmule/redmule.c @@ -0,0 +1,112 @@ +/* + * Copyright (C) 2022-2023 ETH Zurich and University of Bologna + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * SPDX-License-Identifier: Apache-2.0 + * + * Author: Yvan Tortorella + * + * RedMulE SW test + */ + +#include +#include "stdio.h" +#include "archi_redmule.h" +#include "hal_redmule.h" +#include "pulp.h" + +int main() { + + volatile int errors = 0; + + if(get_core_id() == 0){ + + uint16_t m_size = M_SIZE; + uint16_t n_size = N_SIZE; + uint16_t k_size = K_SIZE; + + uint8_t *x_ext = x_inp; + uint8_t *w_ext = w_inp; + uint8_t *y_ext = y_inp; + uint8_t *z_ext = z_oup; + + uint8_t volatile *x = (uint8_t volatile *) pi_l1_malloc(0, (2*m_size*n_size)); + uint8_t volatile *w = (uint8_t volatile *) pi_l1_malloc(0, (2*n_size*k_size)); + uint8_t volatile *y = (uint8_t volatile *) pi_l1_malloc(0, (2*m_size*k_size)); + + #ifdef USE_NO_DMA + generate_test_data16((int) x, (int) w, (int) y, (int) m_size, (int) n_size, (int) k_size); + #else + volatile unsigned int dma_id = 0; + dma_id = mchan_alloc(); + mchan_transfer((unsigned int) 2*(2*m_size*n_size), + (unsigned int) x_ext, + (unsigned int) x ); + mchan_barrier(dma_id); + mchan_free(dma_id); + + dma_id = mchan_alloc(); + mchan_transfer((unsigned int) 2*(2*n_size*k_size), + (unsigned int) w_ext, + (unsigned int) w ); + mchan_barrier(dma_id); + mchan_free(dma_id); + + dma_id = mchan_alloc(); + mchan_transfer((unsigned int) 2*(2*m_size*k_size), + (unsigned int) y_ext, + (unsigned int) y ); + mchan_barrier(dma_id); + #endif + + int gold_sum = 0, check_sum = 0; + int i,j; + + int offload_id_tmp, offload_id; + + // Enable RedMulE + hwpe_cg_enable(); + + hwpe_soft_clear(); + + // redmule_cfg ((unsigned int) x, + // (unsigned int) w, + // (unsigned int) y, + // m_size, n_size, k_size, + // (uint8_t) GEMM, + // (uint8_t) Float16); + redmule_x_add_set ((unsigned int) x); + redmule_w_add_set ((unsigned int) w); + redmule_y_add_set ((unsigned int) y); + redmule_z_add_set ((unsigned int) y); + redmule_cfg (m_size, n_size, k_size, gemm_ops); + + // Start RedMulE operation + hwpe_trigger_job(); + + // Wait for end of computation + redmule_evt_wait(); + + // Disable RedMulE + hwpe_cg_disable(); + + errors = redmule_compare16((int) y, (int) m_size, (int) k_size); + + *(int *) 0x1A1040A0 = errors; + + printf ("Terminated test with %d errors. See you!\n", errors); + + } + synch_barrier(); + return errors; +} From f55e6764c613c253d375dedf9a7cfec0d3a25f64 Mon Sep 17 00:00:00 2001 From: Yvan Tortorella Date: Mon, 30 Oct 2023 22:09:50 +0100 Subject: [PATCH 11/71] Added DMR matmul to carfield regressions. --- carfield/dmr_matmul/Makefile | 7 +++ carfield/dmr_matmul/dmr_matmul.c | 100 +++++++++++++++++++++++++++++++ carfield/dmr_matmul/matmul.h | 56 +++++++++++++++++ 3 files changed, 163 insertions(+) create mode 100644 carfield/dmr_matmul/Makefile create mode 100644 carfield/dmr_matmul/dmr_matmul.c create mode 100644 carfield/dmr_matmul/matmul.h diff --git a/carfield/dmr_matmul/Makefile b/carfield/dmr_matmul/Makefile new file mode 100644 index 0000000..92be562 --- /dev/null +++ b/carfield/dmr_matmul/Makefile @@ -0,0 +1,7 @@ +PULP_APP = test +PULP_APP_SRCS = dmr_matmul.c + +PULP_CFLAGS = -O3 +PULP_LDFLAGS = -lm + +include $(PULP_SDK_HOME)/install/rules/pulp.mk diff --git a/carfield/dmr_matmul/dmr_matmul.c b/carfield/dmr_matmul/dmr_matmul.c new file mode 100644 index 0000000..953dfdf --- /dev/null +++ b/carfield/dmr_matmul/dmr_matmul.c @@ -0,0 +1,100 @@ +/* +* @Author: Michael Rogenmoser +* @Date: 2023-02-17 18:00:21 +* @Last Modified by: Michael Rogenmoser +* @Last Modified time: 2023-02-17 18:15:33 +*/ +#include +#include +#include "matmul.h" + +#define N_ITERS 1 +#define max(x,y) (x > y ? x : y) +#define min(x,y) (x < y ? x : y) + +__attribute__ ((section(".heapsram"))) int A[SIZE][SIZE]; +__attribute__ ((section(".heapsram"))) int B[SIZE][SIZE]; +__attribute__ ((section(".heapsram"))) int C[SIZE][SIZE]; + +void initialize_mat(); + +void initialize_mat() { + int i,j; + + for (i=0;i Date: Tue, 3 Oct 2023 16:47:56 +0200 Subject: [PATCH 12/71] Add test for the FPUs of the cluster cores --- fpu_tests.yaml | 11 ++ fpu_tests/matmul/FP16/Makefile | 82 ++++++++++ fpu_tests/matmul/FP16/config.h | 96 +++++++++++ fpu_tests/matmul/FP16/data.h | 7 + fpu_tests/matmul/FP16/main.c | 122 ++++++++++++++ fpu_tests/matmul/FP16/matmul.c | 103 ++++++++++++ fpu_tests/matmul/FP16/support_func.c | 15 ++ fpu_tests/matmul/FP16ALT/Makefile | 82 ++++++++++ fpu_tests/matmul/FP16ALT/config.h | 96 +++++++++++ fpu_tests/matmul/FP16ALT/data.h | 7 + fpu_tests/matmul/FP16ALT/main.c | 122 ++++++++++++++ fpu_tests/matmul/FP16ALT/matmul.c | 103 ++++++++++++ fpu_tests/matmul/FP16ALT/support_func.c | 15 ++ fpu_tests/matmul/FP32/Makefile | 82 ++++++++++ fpu_tests/matmul/FP32/config.h | 96 +++++++++++ fpu_tests/matmul/FP32/data.h | 7 + fpu_tests/matmul/FP32/main.c | 122 ++++++++++++++ fpu_tests/matmul/FP32/matmul.c | 103 ++++++++++++ fpu_tests/matmul/FP32/out.txt | 15 ++ fpu_tests/matmul/FP32/support_func.c | 15 ++ fpu_tests/matmul/README.md | 38 +++++ fpu_tests/matmul/data_generator.py | 206 ++++++++++++++++++++++++ 22 files changed, 1545 insertions(+) create mode 100644 fpu_tests.yaml create mode 100644 fpu_tests/matmul/FP16/Makefile create mode 100644 fpu_tests/matmul/FP16/config.h create mode 100644 fpu_tests/matmul/FP16/data.h create mode 100644 fpu_tests/matmul/FP16/main.c create mode 100644 fpu_tests/matmul/FP16/matmul.c create mode 100644 fpu_tests/matmul/FP16/support_func.c create mode 100644 fpu_tests/matmul/FP16ALT/Makefile create mode 100644 fpu_tests/matmul/FP16ALT/config.h create mode 100644 fpu_tests/matmul/FP16ALT/data.h create mode 100644 fpu_tests/matmul/FP16ALT/main.c create mode 100644 fpu_tests/matmul/FP16ALT/matmul.c create mode 100644 fpu_tests/matmul/FP16ALT/support_func.c create mode 100644 fpu_tests/matmul/FP32/Makefile create mode 100644 fpu_tests/matmul/FP32/config.h create mode 100644 fpu_tests/matmul/FP32/data.h create mode 100644 fpu_tests/matmul/FP32/main.c create mode 100644 fpu_tests/matmul/FP32/matmul.c create mode 100644 fpu_tests/matmul/FP32/out.txt create mode 100644 fpu_tests/matmul/FP32/support_func.c create mode 100644 fpu_tests/matmul/README.md create mode 100755 fpu_tests/matmul/data_generator.py diff --git a/fpu_tests.yaml b/fpu_tests.yaml new file mode 100644 index 0000000..963d381 --- /dev/null +++ b/fpu_tests.yaml @@ -0,0 +1,11 @@ +fpu_tests: + fp32: + path: ./fpu_tests/matmul/FP32 + command: make clean all cores=8 platform=rtl fmt_A=FP32 fmt_B=FP32 fmt_OUT=FP32 thr=0.004f check=1 run + fp16: + path: ./fpu_tests/matmul/FP16 + command: make clean all cores=8 platform=rtl fmt_A=FP16 fmt_B=FP16 fmt_OUT=FP16 thr=0.004f check=1 vect=1 run + fp16alt: + path: ./fpu_tests/matmul/FP16ALT + command: make clean all cores=8 platform=rtl fmt_A=FP16ALT fmt_B=FP16ALT fmt_OUT=FP16ALT thr=0.04f check=1 vect=1 run + \ No newline at end of file diff --git a/fpu_tests/matmul/FP16/Makefile b/fpu_tests/matmul/FP16/Makefile new file mode 100644 index 0000000..23f7695 --- /dev/null +++ b/fpu_tests/matmul/FP16/Makefile @@ -0,0 +1,82 @@ +PULP_APP = fp_matmul + +PULP_APP_FC_SRCS = main.c +PULP_APP_SRCS = support_func.c matmul.c + +PULP_CFLAGS += -O3 -g3 +PULP_CFLAGS += -mno-memcpy + +ifdef cores +PULP_CFLAGS += -DNUM_CORES=${cores} #-flto -DFABRIC=1 +else +PULP_CFLAGS += -DNUM_CORES=1 +endif + + +ifdef FABRIC +PULP_CFLAGS += -DFABRIC +endif + +ifdef cores +PULP_CFLAGS += -DUSE_INTRINSICS +endif + +ifdef thr +PULP_CFLAGS += -DTHR=${thr} +endif + +PULP_CFLAGS += -fno-tree-vectorize + + +ifdef fmt +PULP_CFLAGS += -D${fmt} -DFIXED + +else +# FP FORMAT +#INPUT DATA TYPE +ifdef fmt_A +PULP_CFLAGS += -DMA${fmt_A} +else +PULP_CFLAGS += -DMAFP32 +endif + +#FILTER DATA TYPE +ifdef fmt_B +PULP_CFLAGS += -DMB${fmt_B} +else +PULP_CFLAGS += -DMBFP32 +endif + +# OUTPUT DATA TYPE + +ifdef fmt_OUT +PULP_CFLAGS += -DOUT${fmt_OUT} +else +PULP_CFLAGS += -DOUTFP32 +endif +endif + +# VECTORIAL FORMAT for half-precision FP +ifdef vec +PULP_CFLAGS += -DVECTORIAL +endif + +# CHECK RESULTS +ifdef check +PULP_CFLAGS += -DCHECK +endif + +ifdef PRINT_RESULTS +PULP_CFLAGS += -DPRINT_RESULTS +endif + +ifdef verbose +PULP_CFLAGS += -DVERBOSE +endif + +# STATISTICS +ifdef stats +PULP_CFLAGS += -DSTATS +endif + +include $(PULP_SDK_HOME)/install/rules/pulp.mk diff --git a/fpu_tests/matmul/FP16/config.h b/fpu_tests/matmul/FP16/config.h new file mode 100644 index 0000000..9505082 --- /dev/null +++ b/fpu_tests/matmul/FP16/config.h @@ -0,0 +1,96 @@ +#ifndef _CONFIG_MATMUL_ +#define _CONFIG_MATMUL_ + +#ifdef FABRIC +#define DATA_LOCATION +#else +#define DATA_LOCATION L1_DATA +#endif + +//Define INPUT data types + +#ifdef FIXED + #ifdef FP16 + typedef signed short v2s __attribute__((vector_size (4))); + typedef float16 MA_TYPE; + typedef float16 MB_TYPE; + typedef float16 OUT_TYPE; + typedef float16 MA_VTYPE __attribute__((vector_size (4))); + typedef float16 MB_VTYPE __attribute__((vector_size (4))); + typedef float16 OUT_VTYPE __attribute__((vector_size (4))); + #undef USE_INTRINSICS + #elif defined(FP16ALT) + typedef signed short v2s __attribute__((vector_size (4))); + typedef float16alt MA_TYPE; + typedef float16alt MB_TYPE; + typedef float16alt OUT_TYPE; + typedef float16alt MA_VTYPE __attribute__((vector_size (4))); + typedef float16alt MB_VTYPE __attribute__((vector_size (4))); + typedef float16alt OUT_VTYPE __attribute__((vector_size (4))); + #undef USE_INTRINSICS + #elif defined(FP32) + typedef float MA_TYPE; + typedef float MB_TYPE; + typedef float OUT_TYPE; + #endif + +#else // MIXED + #ifdef MAFP32 + typedef float MA_TYPE; + #elif MAFP16 + typedef signed short v2s __attribute__((vector_size (4))); + typedef float16 MA_TYPE; + typedef float16 MA_VTYPE __attribute__((vector_size (4))); + #undef USE_INTRINSICS + #elif MAFP16ALT + typedef signed short v2s __attribute__((vector_size (4))); + typedef float16alt MA_TYPE; + typedef float16alt MA_VTYPE __attribute__((vector_size (4))); + #undef USE_INTRINSICS + #endif + + #ifdef MBFP32 + typedef float MB_TYPE; + #elif MBFP16 + typedef signed short v2s __attribute__((vector_size (4))); + typedef float16 MB_TYPE; + typedef float16 MB_VTYPE __attribute__((vector_size (4))); + #undef USE_INTRINSICS + #elif MBFP16ALT + typedef signed short v2s __attribute__((vector_size (4))); + typedef float16alt MB_TYPE; + typedef float16alt MB_VTYPE __attribute__((vector_size (4))); + #undef USE_INTRINSICS + #endif + // Define output data types + #ifdef OUTFP32 + typedef float OUT_TYPE; + #elif OUTFP16 + typedef signed short v2s __attribute__((vector_size (4))); + typedef float16 OUT_TYPE; + typedef float16 OUT_VTYPE __attribute__((vector_size (4))); + #elif OUTFP16ALT + typedef signed short v2s __attribute__((vector_size (4))); + typedef float16alt OUT_TYPE; + typedef float16alt OUT_VTYPE __attribute__((vector_size (4))); + #endif + +#endif + +#ifndef THR + #define THR 0.004f +#endif +#ifdef VECTORIAL + #if defined(MAFP16) && defined (MBFP16ALT) || defined (MAFP16ALT) && defined (MBFP16) + #error "Vecotrization does not work for different data types...!!!" + #endif + + #if defined (MAFP32) || defined (MBFP32) || defined (OUTFP32) + + #error "Vecotrization does not work for FP32 data type...!!!" + #endif +#endif + +void matMul(MA_TYPE * __restrict__ A, MB_TYPE * __restrict__ B, OUT_TYPE * __restrict__ C, int M, int N, int P); + +#endif diff --git a/fpu_tests/matmul/FP16/data.h b/fpu_tests/matmul/FP16/data.h new file mode 100644 index 0000000..5c74f33 --- /dev/null +++ b/fpu_tests/matmul/FP16/data.h @@ -0,0 +1,7 @@ +#define M 8 +#define N 8 +#define P 8 + +PI_L2 MA_TYPE A_mat[] = {-1.4462890625, -0.329345703125, 0.3203125, -1.083984375, 0.25146484375, 0.15234375, -1.6630859375, 0.71728515625, 0.1917724609375, 0.5859375, 2.029296875, -0.1700439453125, 0.2003173828125, -0.1534423828125, 1.2353515625, 0.73681640625, 0.38427734375, -0.6748046875, 0.60791015625, -0.253662109375, 1.62890625, 1.1982421875, -0.134521484375, -0.3447265625, -1.3662109375, 0.039459228515625, 0.1907958984375, -1.96875, -0.18115234375, -0.11669921875, -0.1326904296875, 0.281494140625, 0.70556640625, -0.58837890625, -0.7724609375, 0.07135009765625, -0.1737060546875, 0.486328125, 0.018463134765625, -0.364501953125, 0.478271484375, 0.98828125, 0.6455078125, -0.2303466796875, 0.306640625, 0.22119140625, 0.364013671875, 0.0013647079467773438, -0.43408203125, -0.59375, 0.168701171875, 0.9921875, -0.04827880859375, -0.6396484375, 0.9873046875, -0.09088134765625, -0.61376953125, 1.4345703125, 0.400634765625, 0.259033203125, 0.93115234375, 1.4326171875, -1.08984375, -1.767578125, }; +PI_L2 MB_TYPE B_mat[] = {-0.345703125, 0.41845703125, -1.3466796875, -0.826171875, 1.490234375, -0.86474609375, 1.185546875, -0.12469482421875, -0.51025390625, -0.724609375, -0.057769775390625, -1.701171875, -0.92236328125, -0.422119140625, 0.21533203125, -0.0709228515625, -0.497314453125, -0.81298828125, 1.9052734375, -0.60546875, -1.1884765625, 1.6962890625, -0.306884765625, 0.1558837890625, 0.53759765625, 0.360107421875, 0.128662109375, -1.00390625, -0.8955078125, -0.16064453125, 0.73583984375, -1.662109375, 0.64404296875, 1.5068359375, 0.03680419921875, -0.92431640625, -0.62255859375, -1.263671875, -0.92529296875, 1.1123046875, -1.1728515625, 2.85546875, 1.126953125, -1.2001953125, 1.0205078125, 1.5361328125, 1.1337890625, -1.283203125, 1.568359375, -0.95703125, -0.2474365234375, -1.115234375, -0.416748046875, 1.0478515625, 1.419921875, 1.8359375, -0.41845703125, 0.007236480712890625, -1.646484375, -0.01568603515625, 1.05078125, -0.89013671875, 0.55126953125, -1.8427734375, }; +PI_L2 OUT_TYPE ref[] = {-2.998046875, 1.3935546875, 1.8505859375, 4.07421875, 0.18408203125, -0.357421875, -4.7109375, -2.236328125, 0.471923828125, -3.369140625, 1.869140625, -3.60546875, -2.53515625, 3.203125, 1.4072265625, 1.86328125, -0.650390625, 6.06640625, 2.66015625, -2.0703125, 0.6025390625, 0.97265625, -0.591796875, 1.1796875, -1.0068359375, -1.943359375, 1.37890625, 3.375, -0.19140625, 1.46484375, -3.115234375, 2.65625, -0.0216064453125, 2.482421875, -1.240234375, 0.376220703125, 2.66015625, -0.372802734375, 1.5380859375, -0.396484375, -0.607421875, -0.378662109375, 0.66748046875, -3.19140625, -0.87548828125, 0.6337890625, 0.8974609375, 1.076171875, 3.20703125, -2.375, 0.2509765625, -0.0181121826171875, -2.318359375, 0.94677734375, 0.70751953125, 1.220703125, -2.62890625, 4.99609375, 6.3671875, -3.77734375, -3.46875, 2.01953125, -2.111328125, 0.0625, }; diff --git a/fpu_tests/matmul/FP16/main.c b/fpu_tests/matmul/FP16/main.c new file mode 100644 index 0000000..7d12782 --- /dev/null +++ b/fpu_tests/matmul/FP16/main.c @@ -0,0 +1,122 @@ +// License, Version 0.51 (the "License"); you may not use this file except in +// or agreed to in writing, software, hardware and materials distributed under +// this License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR +// CONDITIONS OF ANY KIND, either express or implied. See the License for the +// specific language governing permissions and limitations under the License. + +#include "config.h" +#include "pulp.h" + +#include +#include +#include /* for CHAR_BIT */ +#include + +#include "data.h" + +#define STACK_SIZE 2048 + +void main_fn(testresult_t *result, void (*start)(), void (*stop)()); + +testcase_t testcases[] = { + { .name = "Matrix Multiplication", .test = main_fn }, + {0, 0} +}; + +DATA_LOCATION MA_TYPE matA[M*N] __attribute__ ((aligned (4))); +DATA_LOCATION MB_TYPE matB[N*P] __attribute__ ((aligned (4))); +DATA_LOCATION OUT_TYPE matC[M*P] __attribute__ ((aligned (4))); + +// End of computation +int done = 0; + +int retval = 0; + +void __attribute__ ((noinline)) matrix_init(MA_TYPE * __restrict__ A, MB_TYPE * __restrict__ B, OUT_TYPE * __restrict__ C) { + for (int i = 0; i < M; i++) + for (int j = 0; j < N; j++){ + A[i*N+j] = A_mat[i*N+j]; + + + } + + for (int i = 0; i < N; i++) + for (int j = 0; j < P; j++){ + B[i*P+j] = B_mat[i*P+j]; + } + for (int i = 0; i < M; i++) + for (int j = 0; j < P; j++) + C[i*P+j] = 0; + +} + +int __attribute ((noinline)) check_result(OUT_TYPE * __restrict__ result) { + #ifndef FABRIC + synch_barrier(); + #endif + + if(get_core_id() == 0) { + float diff; + int err = 0; + + for (int i = 0; i < (M*P); i++) { + diff = fabs(result[i] - ref[i]); + if(diff > THR) { + err++; + #ifdef VERBOSE + + printf("Error at index %d:\t refrence %f\t output %f\t error %.4f\n", i, ref[i], result[i], diff); + #endif + + } + + #ifdef PRINT_RESULTS + + printf("index %d:\t refrence %f\t output %f\t error %f\n", i, ref[i], result[i], diff); + #endif + } + + return err; + + } +} + +void main_fn(testresult_t *result, void (*start)(), void (*stop)()){ + + if (get_core_id() == 0) + matrix_init(matA, matB, matC); + + #ifndef FABRIC + synch_barrier(); + #endif + + #ifdef STATS + start(); + #endif + matMul(matA, matB, matC, M, N, P); + + #ifdef STATS + stop(); + #endif + + #ifdef CHECK + result->errors = check_result(matC); + #endif +}; + +int main() +{ + #ifdef FABRIC + main_fn(); + #else + if (rt_cluster_id() != 0) + return bench_cluster_forward(0); + + int nbErrors = run_suite(testcases); + + synch_barrier(); + #endif + retval = nbErrors; + + return retval; +} diff --git a/fpu_tests/matmul/FP16/matmul.c b/fpu_tests/matmul/FP16/matmul.c new file mode 100644 index 0000000..0a616ca --- /dev/null +++ b/fpu_tests/matmul/FP16/matmul.c @@ -0,0 +1,103 @@ +#include "config.h" +#include "pulp.h" + +#ifdef VECTORIAL + +void __attribute__ ((noinline)) matMul(MA_TYPE * __restrict__ A, MB_TYPE * __restrict__ B, OUT_TYPE * __restrict__ C, int M, int N, int P){ + + OUT_VTYPE temp; + MA_VTYPE Av; + MB_VTYPE Bv0; + MB_VTYPE Bv1; + OUT_VTYPE *Cv; + int blockSize = (M+NUM_CORES-1)/NUM_CORES; + int start = get_core_id()*blockSize; + int end = start + blockSize < M? start + blockSize : M; + + for (int i = start; i < end; i++) { + for (int j=0; j < (P & 0xfffffffe); j+=2) { + + temp = (OUT_VTYPE) {0, 0}; + + // Manual unrolling + for (int k=0; k<(N & 0xfffffffe); k+=2){ + Av = *((MA_VTYPE *) &A[i*N+k]); + Bv0 = *((MB_VTYPE *) &B[k*P+j]); + Bv1 = *((MB_VTYPE *) &B[k*P+j+P]); + temp += (OUT_VTYPE)(__builtin_shuffle(Av, (v2s){0,0})) * Bv0; + temp += (OUT_VTYPE)(__builtin_shuffle(Av, (v2s){1,1})) * Bv1; + } + + if (N & 0x00000001) + { + temp[0] += A[i*N+N-1] * B[(N-1)*P+j]; + temp[1] += A[i*N+N-1] * B[(N-1)*P+j+1]; + } + Cv = (OUT_VTYPE *) &C[i*P+j]; + + *Cv = temp; + } + } + /// Leftover in P + if (P & 0x00000001) + { + for (int i = start; i < end; i++) { + + OUT_TYPE temp1 = 0; + + // Manual unrolling + for (int k=0; k<(N & 0xfffffffe); k+=2){ + temp1 += A[i*N+k] * B[k*P+P-1]; + temp1 += A[i*N+k+1] * B[k*P+P-1+P]; + } + if (N & 0x00000001) + { + temp1 += A[i*N+N-1] * B[(N-1)*P+P-1]; + } + C[i*P+(P-1)]=temp1; + } + } + + #if NUM_CORES > 1 + synch_barrier(); + #endif +} +#else + +void __attribute__ ((noinline)) matMul(MA_TYPE * __restrict__ A, MB_TYPE * __restrict__ B, OUT_TYPE * __restrict__ C, int M, int N, int P) { + + int blockSize = (M+NUM_CORES-1)/NUM_CORES; + int start = get_core_id()*blockSize; + int end = start + blockSize < M? start + blockSize : M; + + for (int i = start; i < end; i++) { + for (int j = 0; j < P; j++) { + OUT_TYPE temp = 0; + + //Manual unrolling + for (int k = 0; k < (N & 0xfffffffe); k+=2) { + temp += (OUT_TYPE)(A[i*N+k] * B[k*P+j]); + temp += (OUT_TYPE)(A[i*N+k+1] * B[k*P+j+P]); + + } + C[i*P+j] = (OUT_TYPE)(temp); + } + } + // Leftover on N + + if (N & 0x00000001) + { + for (int i=start; i 1 + synch_barrier(); + #endif +} +#endif diff --git a/fpu_tests/matmul/FP16/support_func.c b/fpu_tests/matmul/FP16/support_func.c new file mode 100644 index 0000000..6d24d2e --- /dev/null +++ b/fpu_tests/matmul/FP16/support_func.c @@ -0,0 +1,15 @@ +#include "config.h" +#include "pulp.h" +double __extendohfdf2(float16alt value) +{ + float result; + __asm__ __volatile__ ("fcvt.s.ah %0, %1": "=f"(result): "f"(value) :); + return (double) result; +} + +double __extendhfdf2(float16 value) +{ + float result; + __asm__ __volatile__ ("fcvt.s.h %0, %1": "=f"(result): "f"(value) :); + return (double) result; +} diff --git a/fpu_tests/matmul/FP16ALT/Makefile b/fpu_tests/matmul/FP16ALT/Makefile new file mode 100644 index 0000000..23f7695 --- /dev/null +++ b/fpu_tests/matmul/FP16ALT/Makefile @@ -0,0 +1,82 @@ +PULP_APP = fp_matmul + +PULP_APP_FC_SRCS = main.c +PULP_APP_SRCS = support_func.c matmul.c + +PULP_CFLAGS += -O3 -g3 +PULP_CFLAGS += -mno-memcpy + +ifdef cores +PULP_CFLAGS += -DNUM_CORES=${cores} #-flto -DFABRIC=1 +else +PULP_CFLAGS += -DNUM_CORES=1 +endif + + +ifdef FABRIC +PULP_CFLAGS += -DFABRIC +endif + +ifdef cores +PULP_CFLAGS += -DUSE_INTRINSICS +endif + +ifdef thr +PULP_CFLAGS += -DTHR=${thr} +endif + +PULP_CFLAGS += -fno-tree-vectorize + + +ifdef fmt +PULP_CFLAGS += -D${fmt} -DFIXED + +else +# FP FORMAT +#INPUT DATA TYPE +ifdef fmt_A +PULP_CFLAGS += -DMA${fmt_A} +else +PULP_CFLAGS += -DMAFP32 +endif + +#FILTER DATA TYPE +ifdef fmt_B +PULP_CFLAGS += -DMB${fmt_B} +else +PULP_CFLAGS += -DMBFP32 +endif + +# OUTPUT DATA TYPE + +ifdef fmt_OUT +PULP_CFLAGS += -DOUT${fmt_OUT} +else +PULP_CFLAGS += -DOUTFP32 +endif +endif + +# VECTORIAL FORMAT for half-precision FP +ifdef vec +PULP_CFLAGS += -DVECTORIAL +endif + +# CHECK RESULTS +ifdef check +PULP_CFLAGS += -DCHECK +endif + +ifdef PRINT_RESULTS +PULP_CFLAGS += -DPRINT_RESULTS +endif + +ifdef verbose +PULP_CFLAGS += -DVERBOSE +endif + +# STATISTICS +ifdef stats +PULP_CFLAGS += -DSTATS +endif + +include $(PULP_SDK_HOME)/install/rules/pulp.mk diff --git a/fpu_tests/matmul/FP16ALT/config.h b/fpu_tests/matmul/FP16ALT/config.h new file mode 100644 index 0000000..9505082 --- /dev/null +++ b/fpu_tests/matmul/FP16ALT/config.h @@ -0,0 +1,96 @@ +#ifndef _CONFIG_MATMUL_ +#define _CONFIG_MATMUL_ + +#ifdef FABRIC +#define DATA_LOCATION +#else +#define DATA_LOCATION L1_DATA +#endif + +//Define INPUT data types + +#ifdef FIXED + #ifdef FP16 + typedef signed short v2s __attribute__((vector_size (4))); + typedef float16 MA_TYPE; + typedef float16 MB_TYPE; + typedef float16 OUT_TYPE; + typedef float16 MA_VTYPE __attribute__((vector_size (4))); + typedef float16 MB_VTYPE __attribute__((vector_size (4))); + typedef float16 OUT_VTYPE __attribute__((vector_size (4))); + #undef USE_INTRINSICS + #elif defined(FP16ALT) + typedef signed short v2s __attribute__((vector_size (4))); + typedef float16alt MA_TYPE; + typedef float16alt MB_TYPE; + typedef float16alt OUT_TYPE; + typedef float16alt MA_VTYPE __attribute__((vector_size (4))); + typedef float16alt MB_VTYPE __attribute__((vector_size (4))); + typedef float16alt OUT_VTYPE __attribute__((vector_size (4))); + #undef USE_INTRINSICS + #elif defined(FP32) + typedef float MA_TYPE; + typedef float MB_TYPE; + typedef float OUT_TYPE; + #endif + +#else // MIXED + #ifdef MAFP32 + typedef float MA_TYPE; + #elif MAFP16 + typedef signed short v2s __attribute__((vector_size (4))); + typedef float16 MA_TYPE; + typedef float16 MA_VTYPE __attribute__((vector_size (4))); + #undef USE_INTRINSICS + #elif MAFP16ALT + typedef signed short v2s __attribute__((vector_size (4))); + typedef float16alt MA_TYPE; + typedef float16alt MA_VTYPE __attribute__((vector_size (4))); + #undef USE_INTRINSICS + #endif + + #ifdef MBFP32 + typedef float MB_TYPE; + #elif MBFP16 + typedef signed short v2s __attribute__((vector_size (4))); + typedef float16 MB_TYPE; + typedef float16 MB_VTYPE __attribute__((vector_size (4))); + #undef USE_INTRINSICS + #elif MBFP16ALT + typedef signed short v2s __attribute__((vector_size (4))); + typedef float16alt MB_TYPE; + typedef float16alt MB_VTYPE __attribute__((vector_size (4))); + #undef USE_INTRINSICS + #endif + // Define output data types + #ifdef OUTFP32 + typedef float OUT_TYPE; + #elif OUTFP16 + typedef signed short v2s __attribute__((vector_size (4))); + typedef float16 OUT_TYPE; + typedef float16 OUT_VTYPE __attribute__((vector_size (4))); + #elif OUTFP16ALT + typedef signed short v2s __attribute__((vector_size (4))); + typedef float16alt OUT_TYPE; + typedef float16alt OUT_VTYPE __attribute__((vector_size (4))); + #endif + +#endif + +#ifndef THR + #define THR 0.004f +#endif +#ifdef VECTORIAL + #if defined(MAFP16) && defined (MBFP16ALT) || defined (MAFP16ALT) && defined (MBFP16) + #error "Vecotrization does not work for different data types...!!!" + #endif + + #if defined (MAFP32) || defined (MBFP32) || defined (OUTFP32) + + #error "Vecotrization does not work for FP32 data type...!!!" + #endif +#endif + +void matMul(MA_TYPE * __restrict__ A, MB_TYPE * __restrict__ B, OUT_TYPE * __restrict__ C, int M, int N, int P); + +#endif diff --git a/fpu_tests/matmul/FP16ALT/data.h b/fpu_tests/matmul/FP16ALT/data.h new file mode 100644 index 0000000..f01329d --- /dev/null +++ b/fpu_tests/matmul/FP16ALT/data.h @@ -0,0 +1,7 @@ +#define M 8 +#define N 8 +#define P 8 + +PI_L2 MA_TYPE A_mat[] = {-0.1435546875, -2.203125, 0.20703125, -0.00146484375, -0.10498046875, -0.255859375, 1.3515625, -0.7109375, 1.171875, 0.283203125, 0.390625, 1.7890625, 1.4921875, 0.59375, 0.5625, -2.40625, -0.76953125, 0.83203125, 0.89453125, 0.1142578125, 0.365234375, -0.55859375, 2.15625, -0.5859375, -1.1328125, -0.55859375, -0.1259765625, 1.4921875, 0.41015625, 0.11669921875, -0.78515625, -1.0859375, -0.71484375, -0.67578125, -0.76171875, 1.2109375, 1.1484375, 0.66015625, 0.6875, -0.74609375, -0.03564453125, 0.72265625, 0.0849609375, -1.234375, 0.72265625, -2.140625, -0.97265625, -2.328125, -0.9453125, 0.09912109375, -0.00640869140625, -0.59765625, -0.5078125, -0.75, 0.04248046875, -0.431640625, -0.326171875, -0.52734375, 0.5078125, -1.0078125, -0.07275390625, 0.125, 0.055419921875, -1.09375, }; +PI_L2 MB_TYPE B_mat[] = {-3.21875, 0.76953125, -0.875, -0.44921875, 1.0078125, -1.7265625, 0.369140625, 0.287109375, 0.13671875, -0.50390625, -0.486328125, 0.71484375, 0.392578125, -0.1494140625, 0.5625, 0.451171875, -0.16796875, 0.40234375, 0.3671875, 1.4921875, -0.796875, 1.1015625, 0.388671875, 0.97265625, -0.609375, 1.3046875, -0.0189208984375, -1.328125, 0.0986328125, 0.67578125, -0.09716796875, -0.1962890625, 0.671875, 0.271484375, 0.7421875, -0.8828125, -1.0625, -2.171875, 0.30859375, 1.4453125, -1.5703125, -0.57421875, 1.1015625, 0.953125, 0.396484375, 0.77734375, 0.435546875, 1.9375, -0.0255126953125, 1.8046875, 1.3203125, 0.80078125, -2.140625, 0.5625, 0.08203125, -0.6796875, -1.6328125, -0.08544921875, -1.3046875, 0.3828125, 0.3515625, 0.333984375, -0.89453125, -0.1181640625, }; +PI_L2 OUT_TYPE ref[] = {1.59375, 3.703125, 3.609375, -0.5390625, -4.3125, 1.359375, -0.61328125, -2.3125, -0.890625, 4.53125, 4.59375, -3.34375, -2.25, -3.6875, 3.5, 3.71875, 4.40625, 3.84375, 3.859375, 2.78125, -6.59375, 2.0625, 1.09375, -0.953125, 4.5625, 0.0224609375, 2.0, -3.359375, -0.201171875, 1.3125, 0.15234375, 0.4921875, 2.53125, 2.296875, 4.09375, -3.03125, -2.953125, -0.5390625, 0.30078125, 1.0703125, 8.625, -2.109375, -0.34375, -2.0625, -0.3046875, -5.34375, 1.8359375, -1.5390625, 4.9375, -1.15625, 0.203125, 0.8828125, -0.96875, 1.609375, -0.328125, -2.296875, 3.046875, -0.9921875, 2.328125, 1.671875, -1.4140625, 0.443359375, 0.890625, 0.5859375, }; diff --git a/fpu_tests/matmul/FP16ALT/main.c b/fpu_tests/matmul/FP16ALT/main.c new file mode 100644 index 0000000..7d12782 --- /dev/null +++ b/fpu_tests/matmul/FP16ALT/main.c @@ -0,0 +1,122 @@ +// License, Version 0.51 (the "License"); you may not use this file except in +// or agreed to in writing, software, hardware and materials distributed under +// this License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR +// CONDITIONS OF ANY KIND, either express or implied. See the License for the +// specific language governing permissions and limitations under the License. + +#include "config.h" +#include "pulp.h" + +#include +#include +#include /* for CHAR_BIT */ +#include + +#include "data.h" + +#define STACK_SIZE 2048 + +void main_fn(testresult_t *result, void (*start)(), void (*stop)()); + +testcase_t testcases[] = { + { .name = "Matrix Multiplication", .test = main_fn }, + {0, 0} +}; + +DATA_LOCATION MA_TYPE matA[M*N] __attribute__ ((aligned (4))); +DATA_LOCATION MB_TYPE matB[N*P] __attribute__ ((aligned (4))); +DATA_LOCATION OUT_TYPE matC[M*P] __attribute__ ((aligned (4))); + +// End of computation +int done = 0; + +int retval = 0; + +void __attribute__ ((noinline)) matrix_init(MA_TYPE * __restrict__ A, MB_TYPE * __restrict__ B, OUT_TYPE * __restrict__ C) { + for (int i = 0; i < M; i++) + for (int j = 0; j < N; j++){ + A[i*N+j] = A_mat[i*N+j]; + + + } + + for (int i = 0; i < N; i++) + for (int j = 0; j < P; j++){ + B[i*P+j] = B_mat[i*P+j]; + } + for (int i = 0; i < M; i++) + for (int j = 0; j < P; j++) + C[i*P+j] = 0; + +} + +int __attribute ((noinline)) check_result(OUT_TYPE * __restrict__ result) { + #ifndef FABRIC + synch_barrier(); + #endif + + if(get_core_id() == 0) { + float diff; + int err = 0; + + for (int i = 0; i < (M*P); i++) { + diff = fabs(result[i] - ref[i]); + if(diff > THR) { + err++; + #ifdef VERBOSE + + printf("Error at index %d:\t refrence %f\t output %f\t error %.4f\n", i, ref[i], result[i], diff); + #endif + + } + + #ifdef PRINT_RESULTS + + printf("index %d:\t refrence %f\t output %f\t error %f\n", i, ref[i], result[i], diff); + #endif + } + + return err; + + } +} + +void main_fn(testresult_t *result, void (*start)(), void (*stop)()){ + + if (get_core_id() == 0) + matrix_init(matA, matB, matC); + + #ifndef FABRIC + synch_barrier(); + #endif + + #ifdef STATS + start(); + #endif + matMul(matA, matB, matC, M, N, P); + + #ifdef STATS + stop(); + #endif + + #ifdef CHECK + result->errors = check_result(matC); + #endif +}; + +int main() +{ + #ifdef FABRIC + main_fn(); + #else + if (rt_cluster_id() != 0) + return bench_cluster_forward(0); + + int nbErrors = run_suite(testcases); + + synch_barrier(); + #endif + retval = nbErrors; + + return retval; +} diff --git a/fpu_tests/matmul/FP16ALT/matmul.c b/fpu_tests/matmul/FP16ALT/matmul.c new file mode 100644 index 0000000..0a616ca --- /dev/null +++ b/fpu_tests/matmul/FP16ALT/matmul.c @@ -0,0 +1,103 @@ +#include "config.h" +#include "pulp.h" + +#ifdef VECTORIAL + +void __attribute__ ((noinline)) matMul(MA_TYPE * __restrict__ A, MB_TYPE * __restrict__ B, OUT_TYPE * __restrict__ C, int M, int N, int P){ + + OUT_VTYPE temp; + MA_VTYPE Av; + MB_VTYPE Bv0; + MB_VTYPE Bv1; + OUT_VTYPE *Cv; + int blockSize = (M+NUM_CORES-1)/NUM_CORES; + int start = get_core_id()*blockSize; + int end = start + blockSize < M? start + blockSize : M; + + for (int i = start; i < end; i++) { + for (int j=0; j < (P & 0xfffffffe); j+=2) { + + temp = (OUT_VTYPE) {0, 0}; + + // Manual unrolling + for (int k=0; k<(N & 0xfffffffe); k+=2){ + Av = *((MA_VTYPE *) &A[i*N+k]); + Bv0 = *((MB_VTYPE *) &B[k*P+j]); + Bv1 = *((MB_VTYPE *) &B[k*P+j+P]); + temp += (OUT_VTYPE)(__builtin_shuffle(Av, (v2s){0,0})) * Bv0; + temp += (OUT_VTYPE)(__builtin_shuffle(Av, (v2s){1,1})) * Bv1; + } + + if (N & 0x00000001) + { + temp[0] += A[i*N+N-1] * B[(N-1)*P+j]; + temp[1] += A[i*N+N-1] * B[(N-1)*P+j+1]; + } + Cv = (OUT_VTYPE *) &C[i*P+j]; + + *Cv = temp; + } + } + /// Leftover in P + if (P & 0x00000001) + { + for (int i = start; i < end; i++) { + + OUT_TYPE temp1 = 0; + + // Manual unrolling + for (int k=0; k<(N & 0xfffffffe); k+=2){ + temp1 += A[i*N+k] * B[k*P+P-1]; + temp1 += A[i*N+k+1] * B[k*P+P-1+P]; + } + if (N & 0x00000001) + { + temp1 += A[i*N+N-1] * B[(N-1)*P+P-1]; + } + C[i*P+(P-1)]=temp1; + } + } + + #if NUM_CORES > 1 + synch_barrier(); + #endif +} +#else + +void __attribute__ ((noinline)) matMul(MA_TYPE * __restrict__ A, MB_TYPE * __restrict__ B, OUT_TYPE * __restrict__ C, int M, int N, int P) { + + int blockSize = (M+NUM_CORES-1)/NUM_CORES; + int start = get_core_id()*blockSize; + int end = start + blockSize < M? start + blockSize : M; + + for (int i = start; i < end; i++) { + for (int j = 0; j < P; j++) { + OUT_TYPE temp = 0; + + //Manual unrolling + for (int k = 0; k < (N & 0xfffffffe); k+=2) { + temp += (OUT_TYPE)(A[i*N+k] * B[k*P+j]); + temp += (OUT_TYPE)(A[i*N+k+1] * B[k*P+j+P]); + + } + C[i*P+j] = (OUT_TYPE)(temp); + } + } + // Leftover on N + + if (N & 0x00000001) + { + for (int i=start; i 1 + synch_barrier(); + #endif +} +#endif diff --git a/fpu_tests/matmul/FP16ALT/support_func.c b/fpu_tests/matmul/FP16ALT/support_func.c new file mode 100644 index 0000000..6d24d2e --- /dev/null +++ b/fpu_tests/matmul/FP16ALT/support_func.c @@ -0,0 +1,15 @@ +#include "config.h" +#include "pulp.h" +double __extendohfdf2(float16alt value) +{ + float result; + __asm__ __volatile__ ("fcvt.s.ah %0, %1": "=f"(result): "f"(value) :); + return (double) result; +} + +double __extendhfdf2(float16 value) +{ + float result; + __asm__ __volatile__ ("fcvt.s.h %0, %1": "=f"(result): "f"(value) :); + return (double) result; +} diff --git a/fpu_tests/matmul/FP32/Makefile b/fpu_tests/matmul/FP32/Makefile new file mode 100644 index 0000000..23f7695 --- /dev/null +++ b/fpu_tests/matmul/FP32/Makefile @@ -0,0 +1,82 @@ +PULP_APP = fp_matmul + +PULP_APP_FC_SRCS = main.c +PULP_APP_SRCS = support_func.c matmul.c + +PULP_CFLAGS += -O3 -g3 +PULP_CFLAGS += -mno-memcpy + +ifdef cores +PULP_CFLAGS += -DNUM_CORES=${cores} #-flto -DFABRIC=1 +else +PULP_CFLAGS += -DNUM_CORES=1 +endif + + +ifdef FABRIC +PULP_CFLAGS += -DFABRIC +endif + +ifdef cores +PULP_CFLAGS += -DUSE_INTRINSICS +endif + +ifdef thr +PULP_CFLAGS += -DTHR=${thr} +endif + +PULP_CFLAGS += -fno-tree-vectorize + + +ifdef fmt +PULP_CFLAGS += -D${fmt} -DFIXED + +else +# FP FORMAT +#INPUT DATA TYPE +ifdef fmt_A +PULP_CFLAGS += -DMA${fmt_A} +else +PULP_CFLAGS += -DMAFP32 +endif + +#FILTER DATA TYPE +ifdef fmt_B +PULP_CFLAGS += -DMB${fmt_B} +else +PULP_CFLAGS += -DMBFP32 +endif + +# OUTPUT DATA TYPE + +ifdef fmt_OUT +PULP_CFLAGS += -DOUT${fmt_OUT} +else +PULP_CFLAGS += -DOUTFP32 +endif +endif + +# VECTORIAL FORMAT for half-precision FP +ifdef vec +PULP_CFLAGS += -DVECTORIAL +endif + +# CHECK RESULTS +ifdef check +PULP_CFLAGS += -DCHECK +endif + +ifdef PRINT_RESULTS +PULP_CFLAGS += -DPRINT_RESULTS +endif + +ifdef verbose +PULP_CFLAGS += -DVERBOSE +endif + +# STATISTICS +ifdef stats +PULP_CFLAGS += -DSTATS +endif + +include $(PULP_SDK_HOME)/install/rules/pulp.mk diff --git a/fpu_tests/matmul/FP32/config.h b/fpu_tests/matmul/FP32/config.h new file mode 100644 index 0000000..9505082 --- /dev/null +++ b/fpu_tests/matmul/FP32/config.h @@ -0,0 +1,96 @@ +#ifndef _CONFIG_MATMUL_ +#define _CONFIG_MATMUL_ + +#ifdef FABRIC +#define DATA_LOCATION +#else +#define DATA_LOCATION L1_DATA +#endif + +//Define INPUT data types + +#ifdef FIXED + #ifdef FP16 + typedef signed short v2s __attribute__((vector_size (4))); + typedef float16 MA_TYPE; + typedef float16 MB_TYPE; + typedef float16 OUT_TYPE; + typedef float16 MA_VTYPE __attribute__((vector_size (4))); + typedef float16 MB_VTYPE __attribute__((vector_size (4))); + typedef float16 OUT_VTYPE __attribute__((vector_size (4))); + #undef USE_INTRINSICS + #elif defined(FP16ALT) + typedef signed short v2s __attribute__((vector_size (4))); + typedef float16alt MA_TYPE; + typedef float16alt MB_TYPE; + typedef float16alt OUT_TYPE; + typedef float16alt MA_VTYPE __attribute__((vector_size (4))); + typedef float16alt MB_VTYPE __attribute__((vector_size (4))); + typedef float16alt OUT_VTYPE __attribute__((vector_size (4))); + #undef USE_INTRINSICS + #elif defined(FP32) + typedef float MA_TYPE; + typedef float MB_TYPE; + typedef float OUT_TYPE; + #endif + +#else // MIXED + #ifdef MAFP32 + typedef float MA_TYPE; + #elif MAFP16 + typedef signed short v2s __attribute__((vector_size (4))); + typedef float16 MA_TYPE; + typedef float16 MA_VTYPE __attribute__((vector_size (4))); + #undef USE_INTRINSICS + #elif MAFP16ALT + typedef signed short v2s __attribute__((vector_size (4))); + typedef float16alt MA_TYPE; + typedef float16alt MA_VTYPE __attribute__((vector_size (4))); + #undef USE_INTRINSICS + #endif + + #ifdef MBFP32 + typedef float MB_TYPE; + #elif MBFP16 + typedef signed short v2s __attribute__((vector_size (4))); + typedef float16 MB_TYPE; + typedef float16 MB_VTYPE __attribute__((vector_size (4))); + #undef USE_INTRINSICS + #elif MBFP16ALT + typedef signed short v2s __attribute__((vector_size (4))); + typedef float16alt MB_TYPE; + typedef float16alt MB_VTYPE __attribute__((vector_size (4))); + #undef USE_INTRINSICS + #endif + // Define output data types + #ifdef OUTFP32 + typedef float OUT_TYPE; + #elif OUTFP16 + typedef signed short v2s __attribute__((vector_size (4))); + typedef float16 OUT_TYPE; + typedef float16 OUT_VTYPE __attribute__((vector_size (4))); + #elif OUTFP16ALT + typedef signed short v2s __attribute__((vector_size (4))); + typedef float16alt OUT_TYPE; + typedef float16alt OUT_VTYPE __attribute__((vector_size (4))); + #endif + +#endif + +#ifndef THR + #define THR 0.004f +#endif +#ifdef VECTORIAL + #if defined(MAFP16) && defined (MBFP16ALT) || defined (MAFP16ALT) && defined (MBFP16) + #error "Vecotrization does not work for different data types...!!!" + #endif + + #if defined (MAFP32) || defined (MBFP32) || defined (OUTFP32) + + #error "Vecotrization does not work for FP32 data type...!!!" + #endif +#endif + +void matMul(MA_TYPE * __restrict__ A, MB_TYPE * __restrict__ B, OUT_TYPE * __restrict__ C, int M, int N, int P); + +#endif diff --git a/fpu_tests/matmul/FP32/data.h b/fpu_tests/matmul/FP32/data.h new file mode 100644 index 0000000..18b3c69 --- /dev/null +++ b/fpu_tests/matmul/FP32/data.h @@ -0,0 +1,7 @@ +#define M 8 +#define N 8 +#define P 8 + +PI_L2 MA_TYPE A_mat[] = {-1.321346640586853, -0.14075148105621338, -1.3874461650848389, 0.28156477212905884, -0.9179959893226624, -1.2968281507492065, 0.19895713031291962, -0.1636660248041153, 0.09745144098997116, -0.4712808132171631, -1.2986916303634644, -1.3279190063476562, -0.6729908585548401, 0.21538715064525604, 0.0033319147769361734, -0.3368145227432251, -0.4880366027355194, -1.6056562662124634, -0.06749758124351501, 0.537982702255249, -1.518497109413147, -0.14922605454921722, 1.2041049003601074, 0.08387433737516403, 1.0984026193618774, -0.27249911427497864, -0.6649801731109619, -0.6570414304733276, -0.3877118229866028, -0.819801926612854, 0.21040719747543335, 2.10652232170105, -0.1445361226797104, 0.8136182427406311, -0.6583006978034973, -0.3472365438938141, -1.0367175340652466, 1.103456974029541, -0.19918836653232574, 0.05155167728662491, 1.4965381622314453, 0.9884462356567383, 1.1312751770019531, -0.5285311341285706, -0.37252330780029297, -0.5133379697799683, 0.3439998924732208, -0.6833076477050781, -1.3308806419372559, -0.0043663098476827145, 1.0170615911483765, -0.2980661988258362, -0.6847434043884277, 0.132366344332695, 1.3589580059051514, -0.03737796097993851, -0.5342410802841187, -0.7537646293640137, -1.2974865436553955, -0.5541737079620361, -0.4874458611011505, 1.8318110704421997, 0.20764854550361633, 1.5493804216384888, }; +PI_L2 MB_TYPE B_mat[] = {-0.8827683925628662, -0.5542697310447693, 0.14389587938785553, -1.975010633468628, 0.20784620940685272, 0.013685223646461964, -0.9441406726837158, 0.2295272946357727, 0.18610191345214844, -0.022595224902033806, -2.596245288848877, 0.2539166808128357, 0.181132510304451, 0.5449540615081787, -0.025274118408560753, -0.07331778109073639, -0.7438264489173889, -0.23840615153312683, 1.428622841835022, -0.34748250246047974, -1.5984361171722412, 0.20564231276512146, -1.1283481121063232, -0.9706998467445374, 1.064945936203003, 0.5016964077949524, 1.2105423212051392, -0.5837512612342834, -0.983349084854126, 1.118739128112793, -0.43573465943336487, -0.2066168338060379, 2.088926315307617, 0.21492750942707062, 0.019352668896317482, -1.092134952545166, 2.3897173404693604, 0.4519634544849396, -1.5889497995376587, -1.6419037580490112, 0.4415695369243622, -2.7164535522460938, 0.9438610076904297, -0.4197200834751129, -0.4402216672897339, -1.895782709121704, 1.4696519374847412, -0.043221864849328995, -0.6337109208106995, 0.13316427171230316, 1.1930891275405884, -1.0255396366119385, 0.17155316472053528, 0.0703289583325386, -0.42407506704330444, 0.22795960307121277, 0.6689052581787109, 1.656773567199707, -0.28926777839660645, 0.4480336606502533, -0.4898584485054016, 0.8577049374580383, -0.40668636560440063, -1.1225101947784424, }; +PI_L2 OUT_TYPE ref[] = {-0.25370487570762634, 4.288405895233154, -2.4230763912200928, 4.161197662353516, 0.1321820169687271, 1.8521130084991455, 2.2288806438446045, 2.7880353927612305, -2.160022497177124, -1.68727707862854, -1.93358314037323, 1.4045865535736084, 1.7790610790252686, -3.0093014240264893, 3.4853577613830566, 3.0664453506469727, -3.1897361278533936, 0.9710832238197327, 5.895380020141602, 0.7893388867378235, -4.211012363433838, -0.540488064289093, 1.99186372756958, 2.640082359313965, -1.1216058731079102, 4.887918949127197, -2.019449234008789, -0.1283983588218689, 0.3265409469604492, 2.1952335834503174, -1.5282257795333862, -0.5912652015686035, -1.118781328201294, -3.1169605255126953, -2.7250733375549316, 1.8199642896652222, -1.511614203453064, -2.6127007007598877, 4.342489242553711, 2.1691524982452393, -4.221386909484863, -1.1585693359375, -1.2581945657730103, -2.8258895874023438, -1.068955421447754, 0.44341498613357544, -2.514594793319702, 0.7613731622695923, -2.158013105392456, -0.041946373879909515, 2.655857563018799, 1.7298434972763062, -3.0531845092773438, -0.6418022513389587, 0.9603833556175232, 0.23947691917419434, 1.4017069339752197, -2.1417248249053955, 0.8747122287750244, 1.8828234672546387, -0.3232908248901367, -3.6543807983398438, 4.977419853210449, 0.33591794967651367, }; diff --git a/fpu_tests/matmul/FP32/main.c b/fpu_tests/matmul/FP32/main.c new file mode 100644 index 0000000..7d12782 --- /dev/null +++ b/fpu_tests/matmul/FP32/main.c @@ -0,0 +1,122 @@ +// License, Version 0.51 (the "License"); you may not use this file except in +// or agreed to in writing, software, hardware and materials distributed under +// this License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR +// CONDITIONS OF ANY KIND, either express or implied. See the License for the +// specific language governing permissions and limitations under the License. + +#include "config.h" +#include "pulp.h" + +#include +#include +#include /* for CHAR_BIT */ +#include + +#include "data.h" + +#define STACK_SIZE 2048 + +void main_fn(testresult_t *result, void (*start)(), void (*stop)()); + +testcase_t testcases[] = { + { .name = "Matrix Multiplication", .test = main_fn }, + {0, 0} +}; + +DATA_LOCATION MA_TYPE matA[M*N] __attribute__ ((aligned (4))); +DATA_LOCATION MB_TYPE matB[N*P] __attribute__ ((aligned (4))); +DATA_LOCATION OUT_TYPE matC[M*P] __attribute__ ((aligned (4))); + +// End of computation +int done = 0; + +int retval = 0; + +void __attribute__ ((noinline)) matrix_init(MA_TYPE * __restrict__ A, MB_TYPE * __restrict__ B, OUT_TYPE * __restrict__ C) { + for (int i = 0; i < M; i++) + for (int j = 0; j < N; j++){ + A[i*N+j] = A_mat[i*N+j]; + + + } + + for (int i = 0; i < N; i++) + for (int j = 0; j < P; j++){ + B[i*P+j] = B_mat[i*P+j]; + } + for (int i = 0; i < M; i++) + for (int j = 0; j < P; j++) + C[i*P+j] = 0; + +} + +int __attribute ((noinline)) check_result(OUT_TYPE * __restrict__ result) { + #ifndef FABRIC + synch_barrier(); + #endif + + if(get_core_id() == 0) { + float diff; + int err = 0; + + for (int i = 0; i < (M*P); i++) { + diff = fabs(result[i] - ref[i]); + if(diff > THR) { + err++; + #ifdef VERBOSE + + printf("Error at index %d:\t refrence %f\t output %f\t error %.4f\n", i, ref[i], result[i], diff); + #endif + + } + + #ifdef PRINT_RESULTS + + printf("index %d:\t refrence %f\t output %f\t error %f\n", i, ref[i], result[i], diff); + #endif + } + + return err; + + } +} + +void main_fn(testresult_t *result, void (*start)(), void (*stop)()){ + + if (get_core_id() == 0) + matrix_init(matA, matB, matC); + + #ifndef FABRIC + synch_barrier(); + #endif + + #ifdef STATS + start(); + #endif + matMul(matA, matB, matC, M, N, P); + + #ifdef STATS + stop(); + #endif + + #ifdef CHECK + result->errors = check_result(matC); + #endif +}; + +int main() +{ + #ifdef FABRIC + main_fn(); + #else + if (rt_cluster_id() != 0) + return bench_cluster_forward(0); + + int nbErrors = run_suite(testcases); + + synch_barrier(); + #endif + retval = nbErrors; + + return retval; +} diff --git a/fpu_tests/matmul/FP32/matmul.c b/fpu_tests/matmul/FP32/matmul.c new file mode 100644 index 0000000..0a616ca --- /dev/null +++ b/fpu_tests/matmul/FP32/matmul.c @@ -0,0 +1,103 @@ +#include "config.h" +#include "pulp.h" + +#ifdef VECTORIAL + +void __attribute__ ((noinline)) matMul(MA_TYPE * __restrict__ A, MB_TYPE * __restrict__ B, OUT_TYPE * __restrict__ C, int M, int N, int P){ + + OUT_VTYPE temp; + MA_VTYPE Av; + MB_VTYPE Bv0; + MB_VTYPE Bv1; + OUT_VTYPE *Cv; + int blockSize = (M+NUM_CORES-1)/NUM_CORES; + int start = get_core_id()*blockSize; + int end = start + blockSize < M? start + blockSize : M; + + for (int i = start; i < end; i++) { + for (int j=0; j < (P & 0xfffffffe); j+=2) { + + temp = (OUT_VTYPE) {0, 0}; + + // Manual unrolling + for (int k=0; k<(N & 0xfffffffe); k+=2){ + Av = *((MA_VTYPE *) &A[i*N+k]); + Bv0 = *((MB_VTYPE *) &B[k*P+j]); + Bv1 = *((MB_VTYPE *) &B[k*P+j+P]); + temp += (OUT_VTYPE)(__builtin_shuffle(Av, (v2s){0,0})) * Bv0; + temp += (OUT_VTYPE)(__builtin_shuffle(Av, (v2s){1,1})) * Bv1; + } + + if (N & 0x00000001) + { + temp[0] += A[i*N+N-1] * B[(N-1)*P+j]; + temp[1] += A[i*N+N-1] * B[(N-1)*P+j+1]; + } + Cv = (OUT_VTYPE *) &C[i*P+j]; + + *Cv = temp; + } + } + /// Leftover in P + if (P & 0x00000001) + { + for (int i = start; i < end; i++) { + + OUT_TYPE temp1 = 0; + + // Manual unrolling + for (int k=0; k<(N & 0xfffffffe); k+=2){ + temp1 += A[i*N+k] * B[k*P+P-1]; + temp1 += A[i*N+k+1] * B[k*P+P-1+P]; + } + if (N & 0x00000001) + { + temp1 += A[i*N+N-1] * B[(N-1)*P+P-1]; + } + C[i*P+(P-1)]=temp1; + } + } + + #if NUM_CORES > 1 + synch_barrier(); + #endif +} +#else + +void __attribute__ ((noinline)) matMul(MA_TYPE * __restrict__ A, MB_TYPE * __restrict__ B, OUT_TYPE * __restrict__ C, int M, int N, int P) { + + int blockSize = (M+NUM_CORES-1)/NUM_CORES; + int start = get_core_id()*blockSize; + int end = start + blockSize < M? start + blockSize : M; + + for (int i = start; i < end; i++) { + for (int j = 0; j < P; j++) { + OUT_TYPE temp = 0; + + //Manual unrolling + for (int k = 0; k < (N & 0xfffffffe); k+=2) { + temp += (OUT_TYPE)(A[i*N+k] * B[k*P+j]); + temp += (OUT_TYPE)(A[i*N+k+1] * B[k*P+j+P]); + + } + C[i*P+j] = (OUT_TYPE)(temp); + } + } + // Leftover on N + + if (N & 0x00000001) + { + for (int i=start; i 1 + synch_barrier(); + #endif +} +#endif diff --git a/fpu_tests/matmul/FP32/out.txt b/fpu_tests/matmul/FP32/out.txt new file mode 100644 index 0000000..9950041 --- /dev/null +++ b/fpu_tests/matmul/FP32/out.txt @@ -0,0 +1,15 @@ +GNU Make 3.82 +Built for x86_64-redhat-linux-gnu +Copyright (C) 2010 Free Software Foundation, Inc. +License GPLv3+: GNU GPL version 3 or later +This is free software: you are free to change and redistribute it. +There is NO WARRANTY, to the extent permitted by law. +Lettura dei makefile... +/scratch2/rtedeschi/pulp_cluster/alsaqr_cluster/pulp-runtime/rules/pulpos/targets/pulp_cluster.mk:74: warning: overriding recipe for target `run' +/scratch2/rtedeschi/pulp_cluster/alsaqr_cluster/pulp-runtime/rules/pulpos/default_rules.mk:322: warning: ignoring old recipe for target `run' +Aggiornamento degli obbiettivi.... + Il file «all» non esiste. + Il file «/scratch2/rtedeschi/pulp_cluster/alsaqr_cluster/regression-tests/fpu_tests/matmul/FP32/build/fp_matmul/fp_matmul» non esiste. + Il file «/scratch2/rtedeschi/pulp_cluster/alsaqr_cluster/regression-tests/fpu_tests/matmul/FP32/build/fp_matmul/support_func.o» non esiste. + L'obiettivo «/scratch2/rtedeschi/pulp_cluster/alsaqr_cluster/regression-tests/fpu_tests/matmul/FP32/build/fp_matmul/support_func.o» deve essere rigenerato. +make: *** Nessuna regola per generare l'obiettivo «/scratch2/rtedeschi/pulp_cluster/alsaqr_cluster/regression-tests/fpu_tests/matmul/FP32/build/fp_matmul/support_func.o», necessario per «/scratch2/rtedeschi/pulp_cluster/alsaqr_cluster/regression-tests/fpu_tests/matmul/FP32/build/fp_matmul/fp_matmul». Stop. diff --git a/fpu_tests/matmul/FP32/support_func.c b/fpu_tests/matmul/FP32/support_func.c new file mode 100644 index 0000000..6d24d2e --- /dev/null +++ b/fpu_tests/matmul/FP32/support_func.c @@ -0,0 +1,15 @@ +#include "config.h" +#include "pulp.h" +double __extendohfdf2(float16alt value) +{ + float result; + __asm__ __volatile__ ("fcvt.s.ah %0, %1": "=f"(result): "f"(value) :); + return (double) result; +} + +double __extendhfdf2(float16 value) +{ + float result; + __asm__ __volatile__ ("fcvt.s.h %0, %1": "=f"(result): "f"(value) :); + return (double) result; +} diff --git a/fpu_tests/matmul/README.md b/fpu_tests/matmul/README.md new file mode 100644 index 0000000..538deba --- /dev/null +++ b/fpu_tests/matmul/README.md @@ -0,0 +1,38 @@ +# MatMul test +This test performs a matrix multiplication on FP32/FP16/FP16ALT data and can also be used to measure performances. +In this folder you can find pre-generated golden models. + +## Running a test +After the platform and the SDK setup you can run the test: + +~~~~~shell +make clean all [platform=rtl] run +~~~~~ + +If you want to run this test on RTL, remember to specify the platform which is gvsoc by default. +There are several flags useful to activate some functionalities: + +- `cores=N_CORES` set the number of cores used for the execution to `N_CORES`, by default `cores=1`. There is also the ability to run on the Fabric controller by using `FABRIC=1` instead of `cores=N_CORE`. +- `fmt=FP_FMT` specifies the floating-point format for data, by deafult it is set to `FP32` but you can also choose `FP16` or `FP16ALT` formats. **For this application you can use mixed-precision in the C code by using `fmt_A=FP_A fmt_B=FP_B fmt_OUT=FP_OUT` instead of `fmt`.** +- `vec=1` activates vectorial format **only for half-precision floating point (FP16 and FP16ALT)** +- `check=1` activates the result check +- `verbose=1` prints the wrong results +- `stats=1` activates performance measurement +- `PRINT_RESULTS=1` print outputs of C code + + +## Generating the golden model +If you want to re-generate a golden model, you can use the [data_generator.py](./data_generator.py) script with the following command: + +~~~~~shell +./data_generator.py --M=m --N=n --P=p --float_type=fmt --MAC_flag=MAC_FLAG +~~~~~ +- specifies the floating-point format for data, by deafult it is set to `FP32` but you can also choose `FP16` and `FP16ALT` formats. **Also, you can run the mixed-precision golden model by using `--float_type=FP_A,FP_B,FP_OUT`.** +- `MAC_flag` is used to emulate the multiply-and-add operator available on most DSP instruction sets for embedded devices. It can be true or false. To emulate `FP16` and `FP16ALT` behavior on PULP, true this flag. + +The script will generate three floating-point matrices fo format `fmt` (FP32/FP16/FP16ALT): +- A_mat[m,n] input matrix +- B_mat[n,p] input matrix +- ref[m,p] output matrix + +The generated header file will be written in the [references](./references) folder. diff --git a/fpu_tests/matmul/data_generator.py b/fpu_tests/matmul/data_generator.py new file mode 100755 index 0000000..26905a2 --- /dev/null +++ b/fpu_tests/matmul/data_generator.py @@ -0,0 +1,206 @@ +#!/bin/python3 + +import os +import argparse +import sys + +import torch +from torch import nn + + +def relative_absolute_error(true, pred): + true_mean = torch.mean(true) + squared_error_num = torch.sum(torch.abs(true - pred)) + squared_error_den = torch.sum(torch.abs(true - true_mean)) + rae_loss = squared_error_num / squared_error_den + return rae_loss + + +def mean_squared_error(true, pred): + squared_error = torch.square(true - pred) + sum_squared_error = torch.sum(squared_error) + size = true.size(dim=0) * true.size(dim=1) + mse_loss = sum_squared_error / size + return mse_loss + + +def matrix_init(IN, dt): + temp = torch.zeros((IN.shape[0], IN.shape[1]), dtype=dt) + # iterate through rows of IN + for i in range(IN.shape[0]): + # iterate through columns of IN + for j in range(IN.shape[1]): + temp[i][j] = IN[i][j] + return temp + + +def error_metric(ref, res): + + # calculate manually because metrics doesn't supprt bfloat16 + d = ref - res + mse_f = torch.mean(d**2) + mae_f = torch.mean(abs(d)) + rmse_f = torch.sqrt(mse_f) + r2_f = 1-(torch.sum(d**2)/torch.sum((ref-torch.mean(ref))**2)) + print("Results of metrics:") + print("MAE:",mae_f.item()) + print("MSE:", mse_f.item()) + print("RMSE:", rmse_f.item()) + print("R-Squared:", r2_f.item()) + rae = relative_absolute_error(ref, res) + print("RAE is", rae.item()) + + +def matrix_mult(Xs, Ys, dt, mac_flag, cast_flag, cast_to): + Rs = torch.zeros((Xs.shape[0], Ys.shape[1]), dtype=dt) + # iterate through rows of X + for i in range(Xs.shape[0]): + # iterate through columns of Y + for j in range(Ys.shape[1]): + temp = torch.tensor([0], dtype=dt) + # iterate through rows of Y + for k in range(Ys.shape[0]): + a = Xs[i][k] + b = Ys[k][j] + if cast_flag == "true": + if cast_to == "FP16": + a = a.type(torch.float16) + b = b.type(torch.float16) + elif cast_to == "FP16ALT": + a = a.type(torch.bfloat16) + b = b.type(torch.bfloat16) + if mac_flag == "true": + a = a.type(torch.float32) + b = b.type(torch.float32) + temp = temp.type(torch.float32) + temp += a * b + if mac_flag == "true": + temp = temp.type(dt) + + Rs[i][j] = temp + return Rs + + +def write_matrix(matrix_to_write, name, file_pointer, float_type): + matrix_string = '' + sz0 = matrix_to_write.size()[0] + sz1 = matrix_to_write.size()[1] + if 'ref' in name: + file_pointer.write("PI_L2 OUT_TYPE %s[] = {" % name) + elif 'A_mat' in name: + file_pointer.write("PI_L2 MA_TYPE %s[] = {" % name) + else: + file_pointer.write("PI_L2 MB_TYPE %s[] = {" % name) + if float_type == torch.float32: + name = ")" + elif float_type == torch.float16: + name = ", dtype=torch.float16)" + elif float_type == torch.bfloat16: + name = ", dtype=torch.bfloat16)" + for i in range(sz0): + for j in range(sz1): + matrix_string += str(matrix_to_write[i][j].item()).replace('tensor(', '').replace(name, '') + matrix_string += ', ' + file_pointer.write("%s" % matrix_string) + file_pointer.write("};\n") + + +def get_inital_config(): + # get arguments and data format + parser = argparse.ArgumentParser() + parser.add_argument('--M') + parser.add_argument('--N') + parser.add_argument('--P') + + parser.add_argument('--MAC_flag', default="true") + parser.add_argument('--float_type', default='FP32') + args = parser.parse_args() + + M = int(args.M) + N = int(args.N) + P = int(args.P) + mac_flag = str(args.MAC_flag) + bits = args.float_type.split(",") + return M, N, P, bits, mac_flag + + +def select_dtypes(user_dtypes, num_param): + types_dict = { + "FP32": torch.float32, + "FP16": torch.float16, + "FP16ALT": torch.bfloat16 + } + dtypes = [] + if len(user_dtypes) == 1: + for i in range(num_param): + dtypes.append(types_dict[user_dtypes[0]]) + elif len(user_dtypes) == num_param: + for i in range(num_param): + dtypes.append(types_dict[user_dtypes[i]]) + else: + for i in range(len(user_dtypes)): + dtypes.append(types_dict[user_dtypes[i]]) + if 'FP32' in user_dtypes: + for i in range(len(user_dtypes), num_param): + dtypes.append(types_dict["FP32"]) + elif 'FP16' in user_dtypes: + for i in range(len(user_dtypes), num_param): + dtypes.append(types_dict["FP16"]) + else: + for i in range(len(user_dtypes), num_param): + dtypes.append(types_dict["FP16ALT"]) + return dtypes + +def check_cast(datatypes): + result = len(set(datatypes)) == 1 + if result : #All Elements in List are Equal + return "false" + else: #All Elements in List are Not Equal + if torch.float32 in datatypes: + return "false" + else: + return "true" + +def save_data_into_hfile(M, N, P, A_mat, B_mat, res): + # Generate header file + f = open('data.h', 'w') + f.write('\ +#define M %s\n\ +#define N %s\n\ +#define P %s\n\n' % (M, N, P)) + write_matrix(A_mat, 'A_mat', f, A_mat.dtype) + write_matrix(B_mat, 'B_mat', f, B_mat.dtype) + write_matrix(res, 'ref', f, res.dtype) + + f.close() + + +def main(): + M, N, P, bits, mac_flag = get_inital_config() + + # Create reference matrices + A_ref = torch.randn((M, N), dtype=torch.float32) + B_ref = torch.randn((N, P), dtype=torch.float32) + + # calculate reference output + ref = matrix_mult(Xs=A_ref, Ys=B_ref, dt=torch.float32, mac_flag=mac_flag, cast_flag="false",cast_to="false") + + # set the data types based on the parser input + datatypes = select_dtypes(bits, 3) + + cast_flag = check_cast(datatypes[0:2]) + cast_to = "FP16ALT" + A_mat = matrix_init(A_ref, dt=datatypes[0]) + B_mat = matrix_init(B_ref, dt=datatypes[1]) + + res = matrix_mult(Xs=A_mat, Ys=B_mat, dt=datatypes[2], mac_flag=mac_flag, cast_flag=cast_flag, cast_to = cast_to) + + error_metric(ref, res) + save_data_into_hfile(M, N, P, A_mat, B_mat, res) + print("############################## Done! ###################################") + return None + + +if __name__ == "__main__": + main() + pass From 1b76c54acecd55bf758656ff13da0c7a31a73a0a Mon Sep 17 00:00:00 2001 From: Yvan Tortorella Date: Sat, 27 Jan 2024 00:14:16 +0100 Subject: [PATCH 13/71] Rename application in makefiles --- fpu_tests/matmul/FP16/Makefile | 2 +- fpu_tests/matmul/FP16ALT/Makefile | 2 +- fpu_tests/matmul/FP32/Makefile | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/fpu_tests/matmul/FP16/Makefile b/fpu_tests/matmul/FP16/Makefile index 23f7695..f9116c0 100644 --- a/fpu_tests/matmul/FP16/Makefile +++ b/fpu_tests/matmul/FP16/Makefile @@ -1,4 +1,4 @@ -PULP_APP = fp_matmul +PULP_APP = test PULP_APP_FC_SRCS = main.c PULP_APP_SRCS = support_func.c matmul.c diff --git a/fpu_tests/matmul/FP16ALT/Makefile b/fpu_tests/matmul/FP16ALT/Makefile index 23f7695..f9116c0 100644 --- a/fpu_tests/matmul/FP16ALT/Makefile +++ b/fpu_tests/matmul/FP16ALT/Makefile @@ -1,4 +1,4 @@ -PULP_APP = fp_matmul +PULP_APP = test PULP_APP_FC_SRCS = main.c PULP_APP_SRCS = support_func.c matmul.c diff --git a/fpu_tests/matmul/FP32/Makefile b/fpu_tests/matmul/FP32/Makefile index 23f7695..f9116c0 100644 --- a/fpu_tests/matmul/FP32/Makefile +++ b/fpu_tests/matmul/FP32/Makefile @@ -1,4 +1,4 @@ -PULP_APP = fp_matmul +PULP_APP = test PULP_APP_FC_SRCS = main.c PULP_APP_SRCS = support_func.c matmul.c From d16fe2b6c7ae679862315b7792357cb7e27d28ac Mon Sep 17 00:00:00 2001 From: Yvan Tortorella Date: Sat, 27 Jan 2024 01:08:52 +0100 Subject: [PATCH 14/71] Change matmul golden. --- .../parMatrixMul32/gen_stimuli.py | 2 +- .../parMatrixMul32/parMatrixMul32_stimuli.h | 4702 +++++++++++------ 2 files changed, 3024 insertions(+), 1680 deletions(-) diff --git a/parallel_bare_tests/parMatrixMul32/gen_stimuli.py b/parallel_bare_tests/parMatrixMul32/gen_stimuli.py index 75eef86..aac24be 100755 --- a/parallel_bare_tests/parMatrixMul32/gen_stimuli.py +++ b/parallel_bare_tests/parMatrixMul32/gen_stimuli.py @@ -15,7 +15,7 @@ def write_arr(f, name, arr): f = open('parMatrixMul32_stimuli.h', 'w') -SIZE = 24 +SIZE = 32 RANGE = 2**15/SIZE m_a = [] diff --git a/parallel_bare_tests/parMatrixMul32/parMatrixMul32_stimuli.h b/parallel_bare_tests/parMatrixMul32/parMatrixMul32_stimuli.h index d5c1af0..e313733 100644 --- a/parallel_bare_tests/parMatrixMul32/parMatrixMul32_stimuli.h +++ b/parallel_bare_tests/parMatrixMul32/parMatrixMul32_stimuli.h @@ -1,1741 +1,3085 @@ const int m_a[] = { --1344, --778, --350, -1240, -950, -940, -1262, -285, +921, +223, +-983, +-567, +100, +801, +-520, +-758, +288, +-819, +627, +-331, +-324, +154, +389, +975, +789, +542, +497, +-213, +-192, +216, +575, +-490, +-826, +-93, +161, +143, +866, +722, +-911, +-567, +-484, +907, +593, +-261, +454, +-630, +710, +-155, +210, +-388, +-207, +-82, +93, +512, +-745, +460, +-914, +1011, +310, +740, +-465, +-971, +-51, +392, +378, +846, +-75, +312, +891, +15, +165, +-238, +138, +295, +-426, +-341, +105, +117, +61, +1022, +-93, +-491, +-367, +422, +560, +698, +-271, +-917, +-537, +610, +-525, +456, +-753, +966, +112, +569, +791, +269, +486, +763, +-793, +769, +-446, +1001, +-639, +-621, +-228, +-207, +22, +-582, +-120, +963, +242, +-387, +-601, +-821, +-403, +-149, +-339, +-678, +-151, +-578, +-916, +-688, +716, +-433, +942, +662, +-767, +-175, +-470, +135, +521, +583, +719, +-200, +649, +740, +-280, +1001, +673, +668, +358, +-568, +282, +-558, +-268, +-224, +-909, +462, +-757, +-129, +-162, +116, +683, +645, +-679, +-414, +688, +526, +-247, +281, +-174, +785, +-545, +119, +-475, +-38, +697, +790, +-230, 738, --37, -257, -704, +344, +-387, +753, +132, +306, +949, +577, +-201, +198, +-1021, +-407, +465, +-34, +493, +510, +-800, +40, +354, +-793, +1014, +89, +108, +415, +428, +544, +449, +-117, +416, +-309, +246, +272, +248, +295, +-835, +941, +-453, +475, +627, +-931, +69, +429, +931, +576, +-193, +-311, +-669, +-588, +-826, +996, +-771, +-863, +-97, +-58, +-676, +-917, +218, +-514, +-85, +-964, +-831, +-280, +1015, +-891, +916, +-86, +683, +-725, +766, 87, --1135, -1175, -960, -984, -611, --1170, -1243, --729, --1235, --1229, -8, -52, -1156, --804, --129, --112, --307, -1045, --954, --944, -477, -1104, --600, --31, -1364, --950, --153, +-827, +-189, +751, +139, +-38, +-349, +534, +-523, +-938, +-251, +791, +-285, +13, +-93, +619, +-771, +487, +166, +-1008, +-858, +-722, +483, +779, +676, +-941, +758, +-234, +-7, +67, +-782, +944, +-289, +1009, +27, +-311, +-1002, +-917, +-494, +-419, +-475, +450, +-179, +-442, +126, +-244, +-613, +930, +-1012, +1016, +-1011, +432, +765, +-793, +132, +-147, +510, +-781, +334, +653, +969, +39, +268, +-748, +-162, 967, --446, -235, --197, -763, --660, --1289, -116, --458, -994, -1086, -156, +-732, +-637, +467, +14, +-320, +607, +-569, +79, +103, -549, -102, --532, -943, -299, -340, -516, -1117, +-75, +514, +850, +-401, +-804, +830, +-1013, +835, +488, +345, +-92, +-924, +468, +245, +-34, +-669, +-79, +787, 515, -1335, -708, --306, --589, -517, -655, --279, --595, --255, --1104, --16, -507, -199, +773, +418, +-163, +718, +355, +472, +730, +808, +-122, +-461, +878, +95, +-198, +373, +-385, +-688, +984, +-492, +338, +-842, +-913, +-198, +-704, +80, +693, +-659, +452, +880, +-1020, +-357, +185, +384, +-762, +312, +-182, +-627, +1020, +-393, +664, +92, +962, +516, +-239, +-38, +924, +355, +-568, +-787, +-794, +805, +-725, +668, +-55, +213, +766, +1003, +-594, +-21, +-852, +950, +250, +214, +-538, +-5, +-657, +-918, +251, +-340, +-15, +893, +806, +455, +-479, +928, +748, +134, +615, +-735, +-269, +-984, +-4, +256, +-37, +910, +12, +991, +-955, +-593, +-64, +133, +562, -297, --905, --1084, -982, -20, --1364, +-788, +-542, +-776, +534, +-1018, +40, +823, +157, +-538, +78, +-439, +-951, +581, +45, +645, +76, +-542, +101, +554, +849, +-164, +-122, +736, +226, +147, +-131, +-759, +128, +-148, +738, +-455, +590, +801, +35, +933, +30, +-369, +-653, +-268, +603, +-579, +956, +-664, +358, +92, +935, +241, +-597, +106, +561, +-819, +-627, +994, +857, +998, +-975, +-168, 407, -333, --798, --711, -1301, +524, +-713, +-104, +467, +-223, +870, +-958, +338, +-440, +688, +-786, +-799, +550, +924, +418, +-809, +1011, +-863, +451, +741, +-163, +-507, +-744, +-234, +367, +-223, +152, +107, +73, +409, +582, +-524, +-109, +522, +-205, +-163, +904, +-238, +-746, +-832, +1007, +-326, +641, +-1010, +549, +840, +-412, 175, -490, +253, +-121, +213, +877, +-708, +-501, +459, +-294, +-456, +-48, +481, +-628, +432, +-578, +-487, +-835, +322, +205, +-269, +313, +-351, +-361, +-323, +-555, +-622, +299, +393, +-710, +411, +328, +708, +167, +677, +-873, +-468, +922, +-462, +-536, +-632, +-135, +-498, +402, +-932, +-851, +-373, +-201, +924, +587, +-840, +-814, +188, +805, +528, +35, -165, --1097, -1251, -1203, --884, -419, --1262, --950, --1200, -759, --205, --1365, --870, -109, --1135, -36, -796, --1233, --1117, --826, -241, -588, --513, --353, -791, -1071, --1073, -220, --1094, -1096, --723, -280, --505, -151, -399, -319, --1120, --213, --966, -679, -497, --290, --300, --290, --599, -243, +-943, +494, +-276, +-816, +597, +967, +-997, +-595, +433, +-750, +-988, +774, +-45, +-761, +881, +-634, +-113, +977, +-457, +-235, +18, +-125, +971, +254, +57, +-520, +120, +-720, +97, -752, -604, -1196, --715, --177, --329, -1337, -596, -1027, -509, --301, --1211, --936, --281, -446, --356, -841, --1123, --1343, --140, --1300, --828, --237, -1206, -1274, --1092, --922, -913, -1201, --422, -782, --230, -633, --1055, --1160, -329, -1255, -1038, -770, -123, -934, -670, +1000, +-911, +521, +218, +-735, +-555, +196, +635, +-819, -492, --24, --779, --1129, -47, -555, -1214, --232, --716, --322, +-271, +-378, +325, +458, +-618, +-123, -126, -178, -827, -710, --1057, --313, -996, -1149, --532, -570, -1171, -899, --313, --790, -1071, -154, --303, -492, --918, --1139, -292, -129, -1347, --309, -751, -1262, -142, --1062, --1305, -250, -657, -238, --141, -1308, --37, --514, --591, --611, -852, --653, --640, -91, -254, --1145, --1263, --838, --10, -266, --444, -1129, -762, --713, +161, +-742, +-439, +-297, +737, +-30, +1001, +163, +975, +654, +-902, +-255, +578, +-593, +658, +-227, +-854, +89, -326, --88, -1063, --442, --177, -365, --740, --1219, -1085, -783, --725, --1112, -426, -660, -6, --440, +-274, 513, -687, -1078, -212, +161, +244, +129, +826, +39, +-720, +-56, +72, +883, +187, +597, +-551, +205, +134, +-792, +-267, +205, +9, +-98, +927, +822, +-906, +165, +-41, +276, +783, +-866, +-172, +815, +54, +496, +491, +-365, +-588, +-353, +-617, +123, +639, +-401, +475, +2, +-938, +777, +570, +184, +-583, +-466, +-66, +-467, +121, +792, +889, +-1017, +442, +649, +-794, +203, +456, +738, +-792, +767, +359, +-110, +1021, +227, +463, +440, +-1019, +817, +616, +266, +-826, +730, +343, +498, +874, +567, +-74, +-286, +-665, +-30, +-74, -434, --953, -1337, -160, -622, --950, --943, -288, --136, --1103, --223, -1271, -211, -251, --271, --26, -704, -1177, -544, -699, --885, --864, --1280, -877, --461, -995, --623, --121, --146, --484, --225, --978, -163, --278, --502, --505, --567, +-694, +901, +-956, +339, +483, +325, +-455, +-91, +-28, +-116, +-446, +631, +230, +538, +81, +-139, +-995, +-577, +-695, +976, +-866, +-270, +334, +334, +-756, +-859, +194, +77, +-89, +-483, +906, +26, +-507, +-196, +-195, +-929, +713, +744, +653, +533, +-531, +316, +-821, +-524, +-311, +381, +546, +-547, +-147, +815, +-792, +315, +543, +-87, +-645, +-641, +-494, +127, +-430, +50, +594, +-44, +-727, +-823, +906, +-661, +-670, +-993, +-129, +116, +639, +549, +-251, +-610, +413, +-575, +40, +976, +-50, +-553, -771, -1279, -699, --1337, -544, -1145, -1271, -640, -277, --164, -458, --1280, --602, --2, -1136, -1203, --699, +60, +-671, +-860, +803, +521, +594, +-526, -195, -659, --472, -1230, -1151, --97, --77, --772, --381, --295, +-82, +316, +934, +425, +-694, +917, +-25, +749, +139, +-428, +-445, +510, +-144, +115, +-774, +779, +-171, +-475, +208, +760, +27, +365, +442, +264, +-866, +-40, +-498, +-1019, +781, +-187, +-668, +844, +39, +-118, +340, +128, +-235, +-584, +-883, +-857, +-562, +405, +-413, +800, +-74, +542, +645, +882, +-416, +1020, +481, +461, +-108, +-309, +80, +435, +-522, +-572, +815, +-450, +612, +-648, +123, +-754, +37, +941, +-518, +980, +205, +-596, +411, +55, +167, +0, +-387, +-268, +176, +635, +-677, +-408, +-728, +691, +534, +229, +378, +-407, +-406, +833, +463, +861, +656, +221, +-247, +-791, +-152, +-934, +-548, +822, +-957, +478, +-471, +310, +-965, +-197, +269, +636, +185, +82, +-420, +-945, +949, +-221, 636, --1341, +-20, +869, +-634, +-150, +820, +-1001, +973, +594, +654, +324, +958, +363, +-804, +-244, +-278, +-863, +-927, +841, +947, +513, +-325, +-875, +-187, +-827, +-261, +-564, +367, +-496, +-427, +-167, +-411, +144, -445, --806, -531, --1186, --1313, --274, -835, +-990, +-1019, +332, +-595, +334, +-170, +718, +855, +-219, +70, +-538, +-1011, +-353, +-856, +-320, +-732, +914, +203, +121, +-111, +-336, +899, +732, -446, -558, --1307, --235, -43, --254, --109, -911, --1189, -559, --854, --218, -149, -580, -1158, --14, -181, --1120, --947, --542, -1142, -631, --893, --614, --257, --365, --951, -1, --762, -268, -382, --131, -808, --234, -839, -346, --733, -1251, -496, --566, --751, -581, --1292, -1068, --932, --855, -1336, --280, -523, -1294, --1251, -1284, --1276, -87, -1264, --274, --922, --289, --458, --117, -196, +145, +-613, +799, +-159, +54, +290, +740, +-33, +-502, +-498, +118, +962, +589, +-483, +325, +-260, +219, +919, +-699, +571, +-553, +-1020, +-541, +770, +589, +837, +-193, +378, +898, +-869, +644, +-461, +998, +-942, +}; + +const int m_b[] = { +716, +-76, +15, +81, +585, +711, +-519, +-845, +831, +-931, +-29, +-942, +645, +-480, +-77, +-969, +853, +-987, +944, +828, +-610, +66, +405, +832, +-130, +-817, +842, +549, +-47, +981, +-271, +842, +890, +510, +488, +754, +454, +-114, +-266, +-720, +-45, -79, --707, -1233, --385, --620, --617, +-114, +-394, +-538, +-229, +-873, +975, +550, +656, +-879, +881, +-582, +446, +-332, +734, +545, +349, 703, --995, --374, -660, -145, -821, -1289, -582, --201, -447, -116, -759, --615, -834, -268, --1114, --1016, --227, --589, --910, +462, +-677, +-934, +700, +298, +-978, +489, +-182, +-1014, +139, +-289, +792, +362, +605, +537, +-598, +-112, +-576, +404, +138, +659, +888, +-183, +-788, +98, +-1023, +694, +950, +-969, +637, +799, +-68, +631, +-599, +405, +591, +825, +-425, +869, +-89, +114, +-37, +373, +535, +444, +-295, +-447, +475, +-122, +-411, +665, +418, +-791, +883, +-382, +641, +418, +292, +784, +999, +-823, +304, +293, +997, +-159, +-982, +-372, +360, +469, +295, +-449, +-688, +-937, +-80, +-456, +620, +-347, +-425, +868, +-15, +470, +117, +581, -244, --660, -764, -219, -1165, -506, +210, +-70, +16, +-638, +428, +-828, +394, +-203, +957, +-289, +-647, +-210, +1000, +-820, +555, +-478, +49, +361, +-917, +458, +694, +-217, +459, +-904, +-126, +-33, +189, +762, +619, +870, +-799, +620, +-177, +-1005, +-807, +-422, +490, +795, +1013, +-641, +479, +337, +-92, +-260, +956, +-329, +864, -673, -799, --1355, --872, +-98, +-331, +425, +-878, +863, +-835, +-834, +-250, +301, +-4, +-587, +85, 491, -689, -176, --285, -1151, -1080, --319, -286, -833, -217, --621, -478, -539, --109, --1273, --564, --240, -504, -518, -256, --124, -74, -949, --912, --1341, -965, --774, -634, -1009, -1304, -200, --1041, --1262, --865, --1065, --635, --357, --928, -806, -1148, --411, -56, -686, --644, -1241, +-313, -430, -297, -127, +-54, +173, +-666, +-794, +114, +849, +24, +140, +-590, +568, +-785, +732, +843, +-73, +10, +894, +-195, +107, +482, +778, +-708, +582, +-889, +-461, +571, +918, +416, +-518, +-24, +-585, +-38, +-535, +-167, +-308, +-793, +-502, +267, +989, +-1007, +-802, +-262, +-106, +-270, +744, +461, +-683, +-12, +989, +-591, +-966, +-300, +-342, +201, +786, +481, +913, +126, +877, +864, +-622, +-265, +951, +-322, +417, +417, +-103, +-941, +-428, +-273, +-807, +-649, +266, +658, +-348, +35, +1013, +1, +968, +206, +-721, +566, +-468, +-653, +-81, +-652, +65, +-595, +329, +759, +386, +-225, +-857, +22, +-267, +895, +973, +-401, +-934, +-159, +-637, +516, +-245, +650, +440, +-245, +-325, +162, +-372, 457, --1313, -741, -861, -220, --540, -772, -265, -1066, -679, -177, --734, +-65, +122, +-851, +-481, +-960, +-409, +-35, +-701, +658, +637, +-639, +270, +274, +748, +-46, +211, +-311, +-878, +743, +453, +-625, +493, +977, +-777, +160, +-638, +759, +-624, +-973, +-681, +166, +-530, +-677, +657, +-104, +-398, +-482, +-669, +1014, +707, +238, +951, +353, +-116, +-302, +-833, +354, +-504, +758, +-157, +-260, +-714, +-594, +-906, +734, +-897, +99, +440, +-146, +-449, +584, +-1007, +368, +-508, +-870, +-551, +-361, +646, 29, --149, -181, --1042, --1139, -271, --326, --29, -1298, +486, +742, +-962, +-718, +-22, +548, +718, +-905, +922, +345, +-159, +495, +429, +525, +937, +-731, +267, +-878, +773, +835, +27, +855, 643, --890, --136, --1015, --565, --964, -894, --312, -698, -159, --222, --1322, -578, -945, -1124, -1278, -54, --389, -1101, -362, --543, -380, -959, --399, --1105, -1308, -338, --198, --1111, --278, --752, -668, -1156, --1226, -579, -184, --1084, --917, --498, --466, -316, --788, +-405, +-505, +648, +405, +535, +-268, +582, +89, +576, +-268, +-919, +280, +-216, +-77, +-476, -718, -468, -367, --1333, --1146, -828, -1329, -311, --1346, -54, --976, -854, --658, --198, --979, -156, -385, --659, -1326, -1351, --1173, --648, -720, --40, -313, -729, --416, -351, -452, --413, --4, --1113, --612, --28, --721, -400, -1072, --1010, -}; - -const int m_b[] = { --1316, -319, -963, +220, -608, -519, --783, --676, -181, -172, -203, --1351, --935, --12, -758, --746, -1226, -127, --1346, -1251, --377, -889, --23, --417, --122, -680, -1363, -729, --907, --1263, --431, -363, -1355, --566, --517, --1186, -1318, --1104, --1245, +-276, +-424, +859, +97, +256, +-880, +482, +-817, +929, +-593, +-1023, +944, +814, +-502, +200, +182, +990, +-246, +421, +419, +-867, +262, +-826, +110, +760, +-18, +5, +-232, +493, 950, +-930, +-758, +-805, +546, +-1001, +811, +-73, +-679, +92, +-245, +-447, +-326, +47, +-646, +411, +-587, +875, +853, +739, +168, +-754, +666, +124, +-943, +-214, +-441, +-739, +30, +-454, +-254, +808, +610, +-782, +-212, +381, +-668, +-1017, +-927, +-47, +990, +569, +88, +931, +865, +-366, +792, +677, +-523, +469, +-486, +-995, 687, -252, --270, -1081, --1290, -656, -8, -60, -1171, -915, --500, -678, --953, -307, --35, --1334, --888, -598, -1160, -722, -850, --268, -988, -635, --340, -252, -1208, -420, -82, -1283, +692, +908, +663, +645, +-734, +963, +1008, +-255, +494, +190, +423, +-895, +-830, -319, --666, -172, -583, -174, -471, --1063, -452, --191, --1188, -116, --927, -1086, -119, --245, --717, --657, -417, +296, +261, +-276, +-259, +244, +-82, +-1006, +-732, +-779, +873, +-144, +144, +253, 319, -1133, -1338, -141, --546, +-967, +-527, +396, +-949, 567, --1089, --191, --1138, --201, --1286, +630, +-559, +-203, +674, +738, +-286, +-1002, +967, +173, +302, +-967, +-637, +472, +-440, +-932, +-221, +-326, +-152, +474, +-830, +57, +-178, +972, +-667, +815, +538, +84, +-362, +-870, +-92, +-208, +-825, +300, +-173, +354, +604, +102, +-422, +578, +-539, +795, +714, +-671, +555, +-373, +1, +-827, +1007, +-650, +-914, +-1003, +328, +253, +-287, +-62, +-398, +-37, +289, +141, +-866, +590, +1, +-464, +789, +246, +665, +-565, +72, +-1023, +-149, +-859, +-109, +-679, +-972, +552, +-592, +81, +-621, +62, +322, +163, +-970, +112, +1009, +-189, +-54, +-924, +1001, +-218, +-211, +721, +71, +956, +818, +-719, +383, +-367, +989, +-268, +823, +-104, +386, +1010, +930, +-841, +-774, +-307, +-644, +-836, +-537, +215, +50, +-901, +869, +-441, +776, +155, +984, +933, +-618, +363, -820, --1356, -1177, +-111, +-577, +463, +-794, +-955, +-786, +-541, +728, +-827, +1003, +-787, +-310, +76, +813, +-187, +-448, +-627, +-993, +759, +339, +-426, +-464, +330, +-1006, +241, +991, +-193, +696, +-645, +-557, +-117, +-323, +896, +-120, +-562, +-569, +454, -317, -191, -67, -164, --306, --1015, -1147, --482, -1229, --259, --207, -1309, -847, --399, --1005, --995, -140, --567, --1220, --427, -180, --571, -997, --783, --316, --1360, +836, +-641, +549, +655, +643, +412, +921, +-680, 736, -75, --1251, --307, --902, -1181, -1057, --141, --1098, -776, -1096, --923, -914, -1049, --28, --742, --804, --467, -567, -329, --309, --161, --157, --430, --639, -1138, --165, -292, --20, -777, --715, -60, --1359, -35, -307, --1092, -271, -548, -822, +-296, +533, +196, +-885, +-233, +-490, -50, --475, --103, -784, -537, -152, --517, --1097, -117, --619, -538, -941, -172, --223, -1161, --1004, --1145, --455, -255, -363, -859, -403, --861, --657, --537, --1084, --1042, -541, -1283, +-470, -356, -1298, --1254, --303, -203, -104, -1123, --72, --171, --1122, --533, -440, -275, -613, --846, --189, +-232, +402, +-735, +532, +-983, +-925, +-796, +-728, +-969, +-98, +-684, +515, +172, +-736, +-912, +814, +484, +254, +-260, +230, +-1008, +128, +89, +1023, +-723, +531, +-1011, +450, +779, +21, +-100, +-554, 884, -704, --570, --440, --1157, --200, --80, -616, -799, -757, --264, --1256, --690, -152, -184, --810, --221, --821, --243, -508, --709, -574, --693, -315, --952, -952, -697, -875, +-603, +-89, +457, +560, +518, +170, +-715, +700, +811, +-37, +-893, +530, +-1010, +-973, +150, +304, +356, +378, +452, +949, +-333, +922, +-103, -480, --691, -422, --413, --1199, -441, --751, -821, -1303, --410, -416, -566, --131, --551, -46, -978, --228, -1117, --251, --537, -874, --882, -260, --213, -248, --1296, -1343, --626, --812, -629, --601, +900, +-841, +-329, +-112, +508, +-384, +730, +229, +190, +150, +982, +-1003, +37, +-211, +-924, +358, +544, +-758, +849, +410, +843, -378, --1314, --889, -774, --307, -692, --1125, --692, -923, -947, -1158, --939, -1284, -35, -1299, -369, --8, -43, -768, -524, -137, -659, -285, --1315, --457, -871, --768, -1107, --695, -488, --527, --161, -414, --526, --1164, -1059, --1108, -560, --622, 898, --50, --286, --170, -513, -952, -433, +-505, +90, +-43, +-888, +-731, +-83, +528, +-613, +-243, +1007, +981, +587, +-968, +681, 237, -584, --665, --960, -585, --434, -1223, --130, -1035, -430, -202, -1312, -1152, -1059, --1082, --1295, -805, --18, -613, --94, -557, -548, -1354, -116, -289, --1358, --1234, -1237, -451, -820, --102, -974, -832, --1019, -914, --512, --267, -1329, --910, --1341, -862, --381, --23, --658, -40, --71, --782, -1240, --956, -1241, --291, --884, -1250, -699, -834, -190, -960, --1260, -177, -464, -155, --1105, -768, -424, -621, -740, --1357, -1186, --594, -1329, -829, -126, -1101, -1146, --95, -605, --673, -1334, -440, --10, -12, --745, -20, -19, --793, -999, -1083, -487, --657, --356, -654, --326, --250, --718, --947, --235, -558, -974, --981, -637, --861, --768, -1045, +523, +893, +592, -583, --910, +384, +-352, +247, +-771, +-902, +-744, +874, +30, +134, +-63, 128, -734, -896, --1156, -223, +-530, +-55, +1016, +-863, +63, +-538, +790, +306, +-73, +-328, +-800, +729, +387, +669, +961, +-881, +-95, +544, +0, +-19, +-58, +556, +-399, +-948, +-1008, +28, +273, +803, +-742, +653, +51, +-19, +839, +892, +656, +659, +-791, +-662, +-490, +855, +-2, +-525, +-648, +-211, +788, +1013, +-126, +874, +940, +-804, +-1002, +31, +244, +-827, +-254, +-220, +-399, +201, +-369, +257, +-427, +485, +373, +-373, +-207, +393, 284, -272, -634, --473, -363, -359, --1185, -14, --33, --1122, -140, -900, -439, --944, --770, -663, -865, -1056, --238, -86, --1294, --44, --603, -602, -20, -397, --423, --703, --209, --906, --1236, +-382, +985, +-328, +76, +965, +-237, +-380, +861, +239, +-263, +-727, +-896, +-217, +-745, +-832, +-347, +-961, +-615, +-888, +-756, +337, +-795, +-275, +-123, 945, --737, -578, -904, -645, -1225, --877, --425, +365, +-483, +901, +-177, +487, +301, +338, +932, +-545, +574, +146, +10, +-610, +-424, +16, +-545, +140, +741, +389, +75, +-54, +795, +-283, +705, +-743, +320, +168, -493, --1326, -424, -965, -1300, --1210, -823, -1345, -626, --427, -592, --869, --1055, --938, +202, +708, +753, +-363, +-33, +-585, +-567, +850, +310, +-920, +-606, +-406, +-141, +-127, +-30, +905, +-29, +996, +704, +14, +831, +-502, -427, -1066, -472, --1055, -48, --1200, --349, -313, --1227, --228, -783, -839, -187, -1021, --1355, -1284, -68, --1321, --997, -1286, --887, -772, --156, --105, -1329, -1141, --377, --881, --341, -1316, --391, --1249, --205, -53, --266, --540, --289, --1011, -602, --1032, --1097, --202, --467, --1047, --867, --340, --109, --496, -967, -1147, -108, -384, --12, -1216, -137, -1318, -151, -219, +-518, -543, -391, -668, --1348, --1244, --810, --676, -321, --1258, -1343, -1214, -791, -35, -1219, -1278, -1037, --1282, -661, -585, -921, --880, --989, --1192, --207, -273, --382, -690, -165, -271, --212, -739, --343, --42, -226, -40, -859, --153, -622, --1059, +923, +-725, +-6, +724, +-613, +-820, +365, +1, +-234, +694, +452, +-597, +-812, +945, +160, +494, +-664, +218, +-714, +-913, +600, +70, +289, +-175, +-808, +241, +863, +-479, +412, +-195, +-879, +-830, +550, +-746, +-948, +233, +-515, +-32, +-664, +72, +914, +-539, +624, +-428, +121, +209, +-630, +-414, +-225, +-459, +-169, }; const int m_exp[] = { --4942391, -2289133, --1363225, -1978230, -1580032, --625813, --3230128, -2236653, -19494, -3242695, --1080745, --34154, -4086860, --1370876, -3997221, --1812380, -4705498, -7690207, --4068140, -3595067, --1103308, --939857, --4249710, --8650816, --2013119, -2933624, -235162, --453807, --4447391, -3527041, -2046492, -411956, --994117, --1411344, -1333704, --519761, -3026373, --564969, -3749147, -2447173, --557628, -1138674, --1426096, --4033488, --1829685, -2815607, -2382958, -1714081, --1470484, -3379876, -3660759, --2439960, --1180478, --3300785, --5104533, --309753, --1667400, -3258850, -1805449, -2481948, --944985, --363123, -4227063, -3022289, -2763211, -5114077, --1534394, --2957168, -3401637, --1195822, --747480, --2915318, --2505013, --174927, -276733, -2899369, --6702856, -923396, --2741169, -4270685, --1020657, --2562887, -2074098, --2382784, -1366504, -691209, -4127820, -400356, --7415505, -823772, --3848400, --158560, -3759990, -2298445, -323394, -873625, -474364, -2617120, --1382444, -1735284, --5799715, -1915577, -7016057, --1212904, -919286, -2949768, -1228832, -572192, -4145710, --6809520, --2199597, -677764, --7169579, --4904277, -6902014, -231123, --4797299, -3093608, -989455, -4324476, -3121268, -810907, --2457323, -2299211, --1625774, --141013, -3343022, --2044657, -4089375, --291323, --1950307, -2480885, -2846731, --2139146, --2718414, --1997531, --2399245, --4060224, -423228, --205276, --1602384, -910872, --3535114, -6008729, --559984, --301205, --5407307, -2981269, -1079061, -6602535, --857708, -2756391, --5304566, --3769267, -2620777, --4409088, -502077, -7568647, --37918, -2315061, --2540065, -8296540, --7465282, -1553910, --4736227, --2139045, -95614, -342546, -1309722, -1777391, -2981296, --736899, --2572111, --972463, --2793724, --2893912, --1230264, --871649, --1439985, -3074445, -3339004, -2423842, -1751086, -4064832, -1550243, -6225792, --503750, --2567772, -5671219, --2054796, --551487, --2787790, --3835027, --4272806, -2725813, --2982521, -1803437, -3024675, --201092, --1626608, -1548043, -2303810, -3032912, -398283, -1704371, -1860306, --4101665, -5187913, -4233418, -2054883, -3603470, -1935132, --17548, --4362444, --2806918, --5651039, --1853372, --1707208, --153048, --2791834, -402265, -2815962, -3391662, --4833520, --1190520, -2302448, -80738, -2089586, -174096, -2837490, --5514606, -2138871, -336249, --378675, -5833977, -4367000, --2445147, --3652299, --1794451, --1471577, --1263012, -3719274, --3404819, -5765304, --4256415, -3558206, --1884441, --475244, -3659623, --2914867, -689238, --2576754, -7739914, -1823902, -2077002, --2365242, -2023481, -1663749, --4973435, --694558, -1118078, -2260786, --3256285, -4596746, --5421599, -594942, --1730692, --4626077, -3077882, --2232009, -2672161, -3135747, --4602601, -859784, --3530668, -21600, --4690786, -2023164, --496745, --2728919, -281474, --108745, --809613, -1445687, --5781458, -2097169, -1594266, --4504019, -2460482, -6259537, --700848, -413263, --1212884, --5695130, -2094147, --750529, --1379008, -6029072, -722889, -1719449, -1682336, --4219755, -1971162, -66575, --1195119, -141466, --1083536, --718558, --4039954, --168429, --2026861, -2025800, --761083, --4194692, -2013337, --1156936, -3823019, -4081732, --3145845, --1733615, --1371947, --3811245, --1584663, --3547009, --3267886, -8255291, --3232160, -3404636, -3248369, -3233853, -671601, --1009897, -1821121, --3517645, -2005444, --2768741, -115998, -533867, -4717709, -1315923, --3510545, --3539595, --538461, -4529529, -2792584, --107486, --1840413, --1474849, -1579605, --4197602, --34825, --462678, -1294881, --1730927, --2549709, --1531672, --271859, --1181904, --1680154, --2321723, --6641222, -1127764, -893535, --2804646, -5653509, -2657606, --1751466, --4669812, --827592, --126901, --2599752, --845148, -1390838, -8975481, --7663778, -3572438, -5920790, -5233883, --613590, --881500, --3974422, --5523348, --3243204, --6405765, --4376438, -1352634, --105650, -2650174, -1442151, -5088231, -2974595, --4501663, --841006, --3101819, --1265401, --2756903, -2579743, -2045040, --5328835, -2801176, --386694, --3068782, -3147225, --248211, --662659, --1112717, -2733193, -336344, -3107302, -2244003, -4285762, -1998904, -1888720, --1174981, --2567532, --5588952, --101948, -4004848, --610048, -793760, -3345423, -716318, -1033698, -4011882, --965219, -1258434, -1579522, --4249500, -3233648, --424838, -2640541, -1020028, -4933599, --1964947, -3237309, --1251962, --437406, --2749192, --2943112, --117113, -778507, -2757711, -3478291, --661571, -1077087, --3821174, -2731860, -3035264, --4424379, -295413, -3873542, --1272809, -4145370, --363272, -2240544, -88954, --2016552, --862779, --844808, -3142493, -2019692, -3648148, -3857820, -593190, -1285134, --4257140, --1476035, --1951773, --2334649, -1355368, --4390456, -3666652, -562848, --8226958, -1134896, -1136697, --2132899, -3300228, -1855661, -6476864, -5097743, --1373818, -3287769, -1709294, --2926119, -2463141, -400199, -3051372, -1815531, -1746372, -398117, -2333959, --708565, --4241370, -51697, --1626217, -26865, -2248300, -3357859, --325912, -194201, -612298, -388227, -256018, --5630155, --1085451, -653494, --1966315, --273079, --4296295, --2813232, -2079672, -2378463, --3869089, --438799, --725265, -3152791, -3461913, --777750, -47521, -2588203, -1888001, --4445421, -654349, -811737, -418334, --1854075, --5194402, --1571674, --622026, --1091628, -1787463, -3439585, -2923276, --1997884, --193963, --731696, -3686658, --1311796, --5219031, --2906251, -2140229, --1846978, -2541247, --3677377, --3935140, -3605308, -4807232, --1633864, -344286, --2051894, -2498349, --3085, -379207, --701595, --1080351, -3161365, --1606976, -1640595, -3757649, -798095, --3167055, --2288739, -2301831, --3324819, -3219538, -516049, --3153835, -7342606, -1098913, --2522436, -376783, -47367, -530901, --395499, -304200, +4483102, +-3837116, +2010720, +1534171, +1759792, +1381371, +-3260944, +-5398276, +508357, +615916, +-595144, +-1125435, +116369, +-3983003, +622692, +-104608, +-2819471, +349802, +1320318, +-2792252, +235582, +2875734, +-2702444, +588279, +28913, +-2727311, +-2253437, +2340518, +4453365, +450661, +51465, +1552749, +278332, +-2761260, +-2945973, +-602713, +934446, +-1807317, +661383, +2595744, +938496, +355527, +-4539675, +3451768, +-3198419, +-859721, +439576, +2530247, +231425, +1196852, +-3068189, +1806918, +-1511788, +-258993, +-471602, +3028081, +184421, +1760131, +1900049, +1894075, +-2293124, +1379361, +3920518, +-104505, +-1537037, +795601, +-1678136, +1156068, +72605, +-3464777, +-3893561, +1158218, +1450934, +2863262, +522263, +1510903, +2791830, +-1889894, +-475635, +745893, +-2488967, +1253464, +-2450836, +57133, +-1007562, +-602981, +694793, +3349495, +-3611637, +3738053, +648859, +-1421083, +-2042791, +348004, +547002, +-694910, +1278153, +1258721, +-15823, +958095, +-3246096, +-1176319, +2696030, +2353825, +-851897, +-305490, +1144869, +-489083, +-771523, +1010824, +-823073, +425529, +-1866686, +-964908, +1199108, +-859023, +-1614558, +-4792185, +98458, +-607409, +551516, +-2382173, +548885, +-3491850, +-1445795, +-1088426, +-429760, +-1591568, +-229487, +-2804269, +-95359, +-680286, +2228343, +-149962, +-3782020, +1139786, +-832209, +1322977, +335698, +3772007, +550017, +-3472461, +-586406, +1670398, +30538, +-282598, +-1368441, +830018, +32500, +1604523, +-452374, +1455260, +1154312, +726318, +468334, +2820494, +-4420185, +979034, +1611313, +498563, +-13770, +851039, +-3280587, +3868879, +-103066, +1718207, +-1003760, +948733, +1821080, +226516, +153022, +-2163314, +-1801575, +1033501, +1049469, +-4055909, +2429031, +-1896082, +3772971, +1794560, +-1181046, +1784208, +1762035, +1150961, +-2353643, +-3537267, +4644670, +-350704, +-65156, +-381320, +503403, +798969, +-1050893, +2272013, +69652, +-2143175, +-2519168, +181113, +1345533, +-1526855, +-3214613, +-1569966, +1643995, +3408010, +2140174, +2881951, +-1757528, +1421885, +133420, +26271, +3763843, +164641, +2934726, +1078553, +-318986, +-1270954, +3115586, +1701686, +-110878, +835257, +-1885901, +-2510356, +-1454398, +-909358, +-1059566, +672173, +795074, +-137536, +250484, +1597909, +1086027, +1172814, +-819859, +868662, +1775692, +-1335021, +-1056456, +-1069776, +1901756, +1119316, +31858, +2500976, +-1272156, +3567659, +743992, +-434535, +-388297, +2944552, +1121393, +-211286, +1119305, +-837106, +-3291772, +-644156, +2234998, +-1812166, +-424086, +-2579182, +-4995925, +1284777, +-1104876, +1042320, +1483588, +3210383, +2799297, +-950947, +-1879848, +-1211673, +2034864, +-1792252, +1649777, +-4130898, +1649310, +-4146430, +3258963, +2573110, +-1215090, +-3430412, +-263614, +-224321, +2327869, +-5401598, +1214211, +-4033005, +-1731759, +285306, +141634, +-1576674, +-598491, +-3747626, +-2674724, +-2964686, +-970824, +638559, +2705879, +-2155436, +2188859, +739422, +-3369981, +2369939, +3084272, +-416591, +1505156, +907810, +316916, +-3130875, +2304606, +-455439, +713440, +1125996, +-233188, +-558299, +657160, +-4046801, +2829443, +2340003, +-1458632, +248823, +1757427, +-748600, +955486, +295305, +-3541031, +2524547, +-252008, +1798917, +-651016, +317232, +-166186, +-2947741, +-630069, +-57348, +-416785, +-786579, +1163624, +-2816194, +-1423888, +-949604, +1633977, +2745062, +1446168, +1744305, +-2731042, +2067611, +480904, +317713, +-7337, +-2597976, +-617019, +509827, +-1924859, +-1690807, +-2117204, +-349188, +4195303, +539892, +-729517, +266502, +-261572, +-2455571, +-1376324, +218379, +-803670, +1434548, +-2308471, +1458581, +-3021782, +4822354, +-1711275, +2483161, +-4126171, +-1416011, +2054421, +1405379, +1427968, +1111079, +415834, +2082764, +-2498692, +5230909, +3293478, +-641370, +650141, +322583, +756632, +-173745, +-3481500, +-2660545, +-11120, +-463314, +-320049, +-444431, +-230492, +268636, +-685754, +127531, +1545264, +-194991, +537373, +-4125440, +1332649, +-3250371, +744884, +552588, +-34707, +2343452, +2367038, +-97324, +639918, +3476436, +-545169, +573332, +1659803, +1633795, +813581, +4605630, +1099838, +-2822247, +-251728, +1037532, +1960620, +84911, +-1956257, +-240695, +2421524, +-63612, +-3347511, +-857378, +-1357842, +359486, +1415311, +807379, +1495270, +1761577, +1310276, +-2769105, +397395, +-1840322, +-1884252, +-255958, +-3081382, +-2124826, +1747341, +-978451, +1353749, +-1101153, +3971279, +206472, +2015201, +2594079, +-4123051, +-891957, +-29729, +858096, +-157999, +-1592225, +-342823, +358660, +1886511, +240694, +443098, +2080523, +6024770, +-3700560, +1297889, +-2332463, +4623788, +5007792, +551928, +1178476, +1577810, +-693530, +1354736, +-1505662, +-484525, +1556410, +-3354635, +3291809, +-2639983, +3200194, +-2593644, +-2366448, +-683796, +-36714, +1331052, +-1496870, +-3225114, +-296918, +1061488, +3078786, +-870052, +-471043, +-450798, +2272153, +-1273088, +335248, +1065448, +3173343, +-1399606, +-2210999, +1058461, +908236, +-1407584, +404896, +-4314166, +-1677042, +-529283, +451139, +2439430, +-1969670, +1996189, +-1579974, +905677, +606252, +-2345497, +117665, +-1449525, +192620, +-366900, +-1746077, +492086, +484400, +2604739, +-1698451, +1806720, +-87307, +1467434, +711222, +-1150222, +765562, +864307, +3684554, +2041083, +814638, +-2386832, +-1146280, +1680834, +-700110, +-1902486, +357758, +352621, +-1794699, +-1653822, +-3480866, +1426643, +1112374, +-215960, +822012, +40742, +-2923668, +-512511, +60563, +-56006, +-13177, +-983907, +511449, +1116084, +-1402263, +-3137436, +-4694304, +-1401688, +-2354587, +1718534, +-632354, +654037, +-88483, +-4299079, +-1856729, +-2314680, +1964063, +-796198, +-3474061, +820417, +-737218, +670097, +-446965, +633105, +-3892853, +3384774, +426598, +1088596, +4790552, +-2839492, +-631535, +3797532, +395418, +-264991, +-572710, +1830209, +-1663436, +1525072, +833800, +2468120, +-1823599, +2424168, +-1128471, +734423, +70049, +3244504, +-396877, +660320, +-2949195, +3406669, +5059168, +2653356, +146574, +2938392, +1549690, +-1983162, +-5055829, +-2544940, +-3117725, +469784, +861349, +1629417, +3031088, +1047359, +2584842, +-1784451, +305406, +3022787, +-1451097, +1436183, +-762256, +744395, +-2908817, +-1213801, +-386293, +-2302623, +-653467, +-982398, +4623358, +2153086, +-1134981, +1542818, +901108, +-1140854, +2472719, +1890985, +-1137157, +2055100, +427363, +-31301, +3626328, +1441498, +805798, +-987709, +-384910, +556339, +896837, +-2517725, +723811, +-1027352, +-1617258, +-2740782, +-2127484, +-492670, +-1321177, +-695931, +577228, +-1283787, +-1505847, +-1619433, +360553, +-1596086, +61969, +-288930, +-1216163, +1797143, +-742194, +600011, +-241270, +351273, +-3012471, +-308291, +-541947, +-1902029, +-621432, +-2305293, +-1348202, +1533325, +2275364, +2169230, +1916682, +1411401, +-785542, +-2382906, +4840078, +522582, +392169, +375358, +2385174, +-581586, +193744, +-345388, +2125393, +791936, +-255410, +-166805, +4406885, +305722, +2511267, +-849139, +-2348174, +3341503, +68576, +-2799415, +964959, +-1760400, +-2160747, +2514562, +-270562, +1664455, +-3942140, +-2168858, +-323717, +-947870, +163100, +-1825118, +-1130352, +-114785, +-4236782, +-1576945, +2847746, +-3145574, +1388272, +-66245, +-1423067, +2859547, +2677480, +-1185722, +2365942, +520958, +2195243, +-3450331, +1877006, +916363, +778, +-2206051, +-466361, +202139, +-601938, +51036, +3647401, +1668170, +-1185629, +166863, +-1725512, +1789148, +-788015, +978567, +-1712453, +-554712, +-3372699, +1803344, +-897854, +-3236016, +-556372, +-1457671, +460324, +1060707, +1357333, +1045365, +-1930717, +777059, +-425937, +-834420, +-1189939, +194507, +2218312, +-1094666, +-3705973, +906096, +2777722, +2231731, +-3171764, +-486828, +1078622, +861832, +-959015, +2611599, +-135350, +610641, +-711138, +3462805, +-1165215, +3647783, +1621886, +-1086517, +60868, +252964, +136173, +1301024, +-850624, +1666167, +190080, +-2965398, +625535, +234678, +857337, +1049677, +-2208563, +-1023464, +1639382, +954470, +910791, +-1502177, +423774, +3466346, +2168473, +-2370899, +-1089579, +-642893, +-2052317, +3526387, +19090, +-610922, +-1375271, +2011766, +-1847092, +-1502616, +-317094, +-351499, +-261107, +-528293, +-503966, +1436907, +127400, +-1450589, +-66531, +4939251, +874909, +-1049924, +5164310, +-1147856, +1531778, +-1614006, +-2698637, +722371, +1119194, +-3034501, +-2697062, +2495670, +-930079, +-1131546, +829346, +-1164813, +-2168788, +-1645737, +273444, +1073158, +1225225, +1448733, +-1007394, +265930, +-3175050, +218077, +1056685, +-2199129, +-3176095, +-2370525, +-3462299, +-2743628, +-360088, +-57644, +3564156, +1606706, +3244375, +-186857, +1536695, +-2418550, +53892, +-1853967, +592569, +3926891, +-1493479, +389078, +-2642271, +-44987, +-943272, +-481791, +-795250, +-672906, +2136971, +-1367609, +407249, +1883390, +157911, +777254, +787184, +1699794, +-1377880, +-467162, +288764, +-690701, +2719792, +-265032, +267114, +153648, +2766982, +-452454, +2613652, +-1277024, +-1898807, +424545, +151097, +-256482, +1146113, +2211639, +-2626339, +-625983, +281070, +-3647088, +-706152, +-143082, +1952901, +2632401, +1517832, +-1108696, +3699051, +345245, +-891000, +2471600, +607863, +1851266, +-4486490, +658378, +-3525421, +-2891857, +2602450, +-1166765, +-7675379, +802565, +2692739, +2706973, +1088197, +-6186397, +2071083, +-154701, +2900460, +1320338, +1257382, +1069736, +-1175915, +-2392666, +-342978, +572962, +-183757, +3250507, +1769902, +-1889788, +1288066, +-1338865, +2089714, +460913, +1644860, +-3713037, +1239140, +57169, +-2306307, +1193413, +-2803012, +2167117, +-3619679, +3239335, +1189800, +1966178, +1222678, +-752261, +2193804, +-1141191, +3448382, +264414, +1019178, +-75820, +77692, +364805, +1902676, +-2993417, +-2451383, +-836725, +-869437, +-1744519, +564727, +-112585, +257397, +428714, +404777, +-556998, +-964791, +2624446, +-1787540, +2258460, +-3420895, +-1616792, +-423558, +1590940, +4888957, +2445789, +-456651, +2452891, +-1108754, +-816766, +-4738775, +121791, +2463584, +4530841, +-2526737, +2192419, +1145563, +337989, +-470142, +-1691399, +27807, +1202786, +3026122, +-2617275, +-5442474, +5435819, +-305284, +2150722, +-386769, +3584133, +-105374, }; -#define SIZE 24 +#define SIZE 32 __attribute__ ((section(".heapsram"))) int g_mA[SIZE][SIZE]; __attribute__ ((section(".heapsram"))) int g_mB[SIZE][SIZE]; __attribute__ ((section(".heapsram"))) int g_mC[SIZE][SIZE]; From b85310fd9ed068a0b310b67ed7b3aa46ec30c9bb Mon Sep 17 00:00:00 2001 From: Yvan Tortorella Date: Sat, 10 Feb 2024 14:48:34 +0100 Subject: [PATCH 15/71] Add YAML script for the CI. --- carfield/parallel-bare-tests.yaml | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 carfield/parallel-bare-tests.yaml diff --git a/carfield/parallel-bare-tests.yaml b/carfield/parallel-bare-tests.yaml new file mode 100644 index 0000000..c75cb86 --- /dev/null +++ b/carfield/parallel-bare-tests.yaml @@ -0,0 +1,5 @@ + +parallel_bare_tests: + parMatrixMul32: + path: ./parMatrixMul32 #ok + command: make clean all run \ No newline at end of file From 8c9dc7e5a489cad272378c81a0058517f11d9adf Mon Sep 17 00:00:00 2001 From: Yvan Tortorella Date: Sat, 10 Feb 2024 23:03:21 +0100 Subject: [PATCH 16/71] Update headers in parallel bare tests. --- carfield/parMatrixMul16/gen_stimuli.py | 4 +- .../parMatrixMul16/parMatrixMul16_stimuli.h | 3651 ++++++----------- carfield/parMatrixMul32/gen_stimuli.py | 2 +- carfield/parMatrixMul8/gen_stimuli.py | 2 +- .../parMatrixMul8/parMatrixMul8_stimuli.h | 3425 +++++----------- carfield/parallel-bare-tests.yaml | 5 - 6 files changed, 2179 insertions(+), 4910 deletions(-) delete mode 100644 carfield/parallel-bare-tests.yaml diff --git a/carfield/parMatrixMul16/gen_stimuli.py b/carfield/parMatrixMul16/gen_stimuli.py index 2084a7d..754a8a9 100755 --- a/carfield/parMatrixMul16/gen_stimuli.py +++ b/carfield/parMatrixMul16/gen_stimuli.py @@ -15,8 +15,8 @@ def write_arr(f, name, arr): f = open('parMatrixMul16_stimuli.h', 'w') -SIZE = 32 -RANGE = 2**7/SIZE +SIZE = 24 +RANGE = int(2**7/SIZE) m_a = [] m_b = [] diff --git a/carfield/parMatrixMul16/parMatrixMul16_stimuli.h b/carfield/parMatrixMul16/parMatrixMul16_stimuli.h index 9b0f9bb..2797565 100644 --- a/carfield/parMatrixMul16/parMatrixMul16_stimuli.h +++ b/carfield/parMatrixMul16/parMatrixMul16_stimuli.h @@ -1,3104 +1,1741 @@ -/* - * Copyright (C) 2018 ETH Zurich and University of Bologna - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -/* - * Mantainer: Luca Valente, luca.valente2@unibo.it - */ const short m_a[] = { 3, --2, --1, -3, +2, +-4, 0, --2, +0, +0, +-5, +-3, 2, -1, +4, +0, 2, 2, +-3, +2, -1, --4, -1, --4, -2, -1, +1, +4, +-3, +-3, +-1, 0, -2, +4, +-2, +-1, +-4, +-1, +4, 1, 3, -2, -2, -1, --1, -3, --4, -2, -1, --1, -0, -1, +3, +-5, +2, 0, 1, -1, -1, -2, --4, +-1, -4, -2, +4, 0, -2, +4, +-5, 3, -1, -0, -1, -3, +-4, 3, -1, +-2, +2, +-2, +3, +3, +4, +0, -4, +4, +0, 3, +-5, +1, +0, +0, +2, -3, -2, -3, --1, -3, +4, -3, 1, --4, -0, +-5, +-5, +2, +-3, -3, -0, --1, -2, -0, -4, +0, +4, 1, 1, 0, --4, --4, -2, -2, --1, +4, 0, -3, -1, -2, -1, -2, -1, +-3, -1, +-2, +-5, +4, +-2, +1, 3, -0, +-1, +-1, +-4, +4, +-1, 3, -3, --3, 2, +2, +3, 1, 2, --2, 1, --2, --1, --4, -3, --4, +2, +4, -4, -3, --4, -2, -3, -2, +-3, +4, 0, --2, 1, -2, 0, -2, -3, -3, -3, --4, --1, --4, -2, -3, -3, --4, +0, +-2, -3, 1, 3, +4, +-1, +4, +4, +3, -4, +-5, +3, +2, +4, -4, +4, +1, +-2, +2, -1, +4, +2, +2, +-5, +0, -2, +-4, +2, +-3, -1, +4, 0, +4, +4, 1, --2, +4, +4, +-3, 3, +4, -2, -1, +4, -4, 2, -3, --1, --3, -2, +-3, +3, 1, --1, 3, --3, 3, --4, 0, --3, --1, -1, +-4, 1, --1, -3, +-4, +4, +2, +-2, +-5, +-4, +-4, 2, -1, +-2, +0, +4, +-3, +4, +-5, 3, -1, -3, +-5, +-4, -2, -1, --1, +-5, +4, +-2, +3, -3, +4, 3, +-4, +4, 3, -3, +4, +-1, +3, -4, --4, +-5, +1, +-3, -4, 2, --3, --3, +3, 2, +-2, +4, 3, --4, --4, 2, -4, --3, -1, --1, --1, --4, 0, -2, -2, +-5, +-3, +3, +1, +3, +-5, +3, +1, +-5, +1, -2, +-4, +1, +-5, +4, 1, --1, 0, 0, --2, -4, -2, --2, --2, --2, -2, -1, --3, --4, -0, 2, 0, -3, -1, -0, -0, +-4, -1, -1, --2, --3, --2, -1, --2, --2, -1, +-5, -2, -4, +-2, 3, +4, +-5, +0, +2, +2, +4, +0, +4, +-5, +-3, +-5, +-5, +0, +0, -4, 3, --2, --2, 1, --2, 1, +-5, +2, +-5, +2, +-4, +3, +4, +-3, +-4, +4, -2, -0, --1, -4, -1, +4, -3, -1, -0, -2, -3, +-5, -4, -3, -0, 2, -2, +3, +-2, +1, +4, +1, +4, -2, +1, -4, --1, --1, +4, 2, +-1, +1, 1, -2, +-2, +0, +-5, 2, +4, +-4, +1, +-5, 0, +4, +3, -4, +1, -3, --1, +-4, +2, -3, -3, --4, --4, -3, --1, -3, -3, +1, 2, +4, +-3, +-2, 3, -0, -3, +-3, +-5, +4, +-5, +-5, +4, +4, 3, -2, +-1, +-3, -4, +-1, +1, 0, +1, +4, -1, 0, +1, +-4, +0, -4, +-3, 0, +-4, 2, -2, -2, -2, -1, +-2, +0, +-5, -1, +-3, 3, +4, +-4, +4, +4, 0, -0, --2, --3, --2, +-4, -3, -0, -0, -3, +4, 0, --4, --2, +2, 3, -1, 2, 0, --3, -0, -4, +3, -1, -1, --1, --2, --1, --1, +-3, +-4, +4, 0, -2, -1, +4, 3, +0, -3, --2, -1, +-5, +4, -3, +3, +4, +3, +-1, +3, -3, 1, -2, --3, -2, +3, +4, +3, -1, -0, --2, 3, 2, --1, -0, --1, -0, +4, +4, -2, -1, -0, -1, -3, -3, 2, -4, +-4, +-1, 0, +-1, +4, +-4, +4, 2, -3, --2, -3, -1, --3, +0, +0, 1, +-1, +-5, 1, +-5, +2, -2, 2, 1, -2, +3, +1, +-3, +-4, -2, 0, -0, -2, --3, +4, -2, -1, 0, +-1, +-1, -3, +-2, +4, +3, +4, +2, +3, +4, +-4, +-2, +-1, +-2, 0, -0, +-1, +-1, -4, -1, +-2, 2, --3, -1, +-5, +4, +-5, +0, +4, +4, +-2, +-4, 1, -2, +-5, +-5, +4, -3, 0, +-1, +-5, +4, -4, 0, +4, +4, -4, +-2, +-4, +1, +-4, +-5, +4, +-5, +-3, 2, -0, -2, +-2, +-1, -3, 0, +-3, +-2, +4, +-5, +-5, 3, --4, +-5, +-1, 3, -0, -1, 2, +3, 0, -0, --3, +-2, -3, -4, --4, +3, 0, +3, +3, -1, -2, --1, -0, -4, --1, -1, --2, -2, 0, 3, +-5, +-3, +4, +-3, 2, --4, --2, +-1, +0, +2, +-1, 3, --4, -1, +-5, 3, --3, --3, --3, +4, +3, +3, +4, +3, +1, -4, +1, -2, +4, -3, --1, +2, +0, -2, --1, --1, +-5, +-5, -2, -2, --4, -2, 0, -3, --1, -1, --3, -2, --3, -2, -2, -3, -2, --3, --1, -2, --4, --1, --2, +4, 0, -2, -4, +-1, 0, -2, --4, -2, -3, --2, +-5, -3, -2, --1, -3, +4, +0, 1, +-3, 3, --1, -1, -1, -2, --4, +-2, 2, -1, -1, --2, -2, -3, -1, +-2, +-5, +-5, +-1, -1, -2, -4, --1, -1, -1, --3, +-4, +}; + +const short m_b[] = { +-2, +3, 2, +-5, +-3, 2, 0, --2, +-5, 1, --4, -3, +-2, -3, -3, -0, 3, --1, -4, +-2, +-4, +1, +1, +1, +4, +4, 3, -0, -0, --3, 3, +-4, +-3, -2, -2, -0, -2, -2, -0, -3, -3, -1, -2, +-1, +-5, +-4, +1, +-4, +-3, +3, +-5, +-5, +-4, -2, -2, 1, +3, +3, +3, +4, 0, 1, -2, --2, --1, --3, 0, +4, 3, +-3, 3, --2, --4, +-1, 0, 2, -1, -1, --1, --3, --4, 0, -1, +0, +3, -4, +4, +3, +3, -1, -4, -1, -4, +-2, -4, --3, --1, -4, --3, --1, --3, +3, 0, 3, +-4, 2, +0, +0, -4, --3, --3, +-5, +-4, +4, +0, -4, --1, --1, -2, +-4, 3, --1, +4, +-4, -3, +-2, +0, +-2, +2, +-5, +2, +1, +2, +0, +0, +-2, +-2, +-1, +1, +-1, +3, 3, -1, 3, -2, -1, +-2, 1, -0, -3, -3, --4, +3, +3, +3, +2, +0, 1, -2, 1, +4, +3, +-2, +-5, +0, +2, +0, +1, -3, +-1, +3, -3, -0, +-2, 3, +4, +-2, +-1, +-5, +1, +-1, +2, -3, -4, --3, 0, --4, +-1, 0, -3, --4, -3, 2, +3, +4, -4, -1, -1, --3, --3, 2, +-1, +-5, 1, -2, -3, 0, -2, -1, -4, --3, --2, -2, 0, -1, +-1, 2, -0, +-5, -1, --3, 1, -2, --1, --3, -1, -3, -1, -3, +-5, -3, --4, -1, -0, --1, -0, -3, --2, --1, 2, 2, -4, 2, -2, +-5, +-4, +4, +4, +-1, 1, +2, -1, --2, -3, +-3, +0, 2, -1, +4, +-3, +-2, +-1, +4, +-5, +4, 0, +-1, +-1, -4, -1, +-3, +-3, -1, +-2, -1, +-2, +-5, +2, +2, +-3, +1, -1, -2, --4, +0, +0, 1, -2, +0, +4, -4, -2, -4, -2, +-4, +-5, +4, +-4, +4, +-3, +4, +-5, -2, -2, +3, -2, +-4, 1, -0, -0, 2, +-5, +-2, +-5, +-3, +2, +-1, 3, +-4, +-4, +4, +-3, +-5, 0, +-3, 2, --4, -1, 2, 3, +-3, +-3, -2, -2, --4, -0, +-5, +4, 1, --4, +3, -1, --2, -4, +3, 1, --1, --3, +-2, 1, --3, +3, +4, +1, +-2, 0, 0, +-3, +-1, +1, -1, 0, -2, +-5, +-2, -1, --4, 1, --1, -3, --4, -2, +-2, +4, +-3, 2, 1, --1, +0, +0, +3, -4, --3, -1, -2, 2, +1, +0, 3, +-5, +-1, +4, 3, -3, -1, +4, -2, -1, --4, --1, -3, -4, 3, -0, -2, --4, 3, -4, --4, -1, +4, +-5, 1, --4, -1, --1, --3, 0, -0, --2, +3, +4, +3, +-3, +-5, -3, +-2, -4, 1, --1, --1, -3, -1, -2, --1, --1, -2, --1, -2, -2, --1, -3, +-2, 1, -1, -0, -1, -3, 2, +4, +4, 0, -3, -0, -3, -0, --2, +2, +4, 0, +-1, +1, -4, -0, +-1, -3, -1, -3, -2, +-5, 3, +-3, +-1, 0, +-3, +-3, +-4, +3, 3, +-5, +-2, -1, +3, +1, +1, 1, -2, 3, -0, --4, 1, 1, -0, --3, -0, +-5, -2, +2, +4, 3, --1, +-3, +-5, 3, -4, -3, +0, 2, +-4, +-5, -3, --2, --2, +-3, +-3, +2, -1, +-3, 1, --2, --2, -3, --2, -1, -1, -0, +-5, 2, 1, -0, -0, 1, -3, --2, --1, --3, +2, +4, +1, +-5, 3, --2, 0, --3, -1, +-5, -4, 2, -0, +-5, +3, -1, --3, -1, +0, 2, --2, -3, +-1, -2, +-5, -4, +0, +-5, -3, +3, 1, --4, --3, --2, -2, -1, --3, 0, -3, -1, -4, --1, --2, -0, 1, -2, -1, --3, -4, -1, +-5, +-1, 3, 3, -3, -2, -1, +4, +-1, +-5, -4, -1, 0, 1, +1, +4, +-3, -2, --2, -2, -0, --4, --4, +4, +1, -4, +-1, -3, 2, -3, -0, -2, -2, --1, --1, -2, --1, -3, +4, 2, -0, --1, -1, -1, -0, --4, -0, 2, --3, -0, --2, -3, -4, -3, -3, --2, -3, --3, --2, +4, -1, --4, 1, -2, --2, -4, 0, +1, -4, --1, +4, +-4, +-5, +-5, -3, -0, -1, -2, -0, 2, 2, +-1, +0, +-2, +-5, 1, +-1, +-5, 2, +-4, +-5, -3, 1, --3, -4, 0, -3, --4, --1, 1, --1, -0, --3, +-5, 0, -2, --1, -2, +-2, +1, -4, +-5, 3, --3, 0, --2, 1, --4, 2, --1, -2, --3, --3, --1, --3, -0, --2, --1, +4, -1, -4, --1, -2, +0, -4, +0, +-5, 3, --4, --2, +-5, +-5, 2, 2, +3, -3, +4, +4, 2, -0, 3, -0, -2, --2, --1, --4, -3, +4, 3, -2, -1, --4, --2, --3, +4, 1, --2, 1, 0, --3, --4, --4, -1, -1, --3, --2, -1, --2, 2, +2, +4, +-1, +-5, +-5, +3, +-5, +-2, -4, -0, -1, --4, --4, -0, -4, 0, -2, +4, 3, -2, 0, +4, -3, --2, --2, --1, --2, -1, --3, --2, -1, +4, +0, -1, 3, 2, -3, -0, +-4, +2, -1, -3, +-5, -3, -2, -3, -2, 3, --3, --1, --1, -4, 1, --4, --3, --4, --4, --3, -2, -3, --2, -2, -3, --4, --2, -3, -3, 3, -1, --4, -4, -1, --3, -1, -2, -1, -}; - -const short m_b[] = { 0, 3, -3, +-2, +-1, 2, +-4, 2, -0, -3, +4, 0, 2, --3, -2, --1, --3, +-5, 0, +-1, +-5, +4, -4, -0, --2, --3, -0, -0, --3, -0, -0, +3, -1, +4, 1, -1, --1, --1, -0, +4, 0, -1, -3, --1, --2, 1, -2, -3, --4, +4, 3, --4, 3, -0, +1, 2, --2, -3, -2, --1, --4, --1, --4, -0, --2, -0, -0, --2, -0, -2, --4, --3, -0, --3, +-5, -2, -0, --3, --3, -3, -3, -2, -0, --4, --1, -2, 1, --1, -1, -2, -0, --4, -3, --1, --3, --1, +-5, -4, --1, -0, --1, -3, -1, +-5, -2, --1, -2, -2, --4, -3, --4, -0, --1, --4, -1, --3, -3, --2, -3, --2, --2, --2, --4, --2, --3, -2, -3, --4, --1, -2, -3, -0, -1, --3, -2, -0, --2, --1, --3, -3, --1, -0, --2, -3, -0, --1, --1, -2, --1, -3, --4, --2, --3, -1, --3, -2, --2, --4, --4, --4, --2, -2, --4, -3, -3, --1, -0, -1, --4, --3, -2, --2, --3, --3, -3, -0, -3, --4, -1, --1, --1, -2, -3, -3, --4, -0, --1, --1, --2, --1, -2, --3, --4, -2, --1, -1, -2, --2, -2, --3, --4, -1, --4, --3, -0, -3, --3, -0, --3, -0, --3, -3, --2, --1, -3, --2, --3, -3, -2, -3, --2, -0, --1, --3, -2, -2, --2, -0, --1, --4, -3, -2, --2, -1, --3, -2, --2, -0, --1, -0, --4, -0, --2, -1, -3, -3, -3, -3, -3, -1, -2, -0, --4, --3, -2, --1, --2, -2, --2, --2, --1, -2, --3, -3, --3, -1, -1, --4, --1, -2, --3, -2, --2, -3, --2, --3, --1, --3, -3, -1, --2, -3, -0, --2, -0, -2, -3, --4, -3, -1, --3, -2, -0, --2, -2, -2, -1, --1, -0, -1, --2, --3, --3, --3, --2, --1, --3, --1, --1, -1, -0, --2, --2, -3, --1, --4, -0, --4, --3, --3, -1, -1, -1, --2, --1, --1, --4, --1, --1, -1, -2, --4, --3, -0, -2, --1, -2, --1, -2, -2, --3, -0, --3, --3, --4, -3, --3, -3, -1, -3, -1, --1, -2, --3, --3, --4, --2, --3, -1, -3, -0, -0, -3, -2, -3, -1, -0, --3, --4, -1, -0, --4, --3, -1, --1, -1, --1, --4, -0, --1, --2, -1, -2, --1, -3, -0, --3, -1, -1, --1, -1, --4, -1, -3, --3, --3, -0, -3, -1, --4, -0, --4, -0, -1, -3, --1, --1, --2, -0, --1, -2, -0, -0, -2, -1, -1, --1, --3, -1, --1, -3, -2, -2, -0, --3, -2, -2, --2, -1, --4, -0, -0, -1, -0, --1, -1, -1, -0, --2, --2, --4, --3, -1, -0, -2, -0, -1, -2, --1, --2, -0, --1, --1, --3, -3, -3, --1, --1, -0, -3, -0, -2, -2, -1, -0, -0, -1, -3, --2, -1, --2, -0, -2, --4, -0, --2, -2, -0, -1, --4, --1, -2, -1, -1, -3, -1, --1, --1, --2, --2, --2, -0, --4, --3, -3, -1, -3, --2, -1, -2, -2, -0, -3, -0, --2, --4, -0, --2, -3, -1, -0, --3, --3, --2, -1, -0, --3, --4, -0, -3, --3, -2, -3, --3, -0, --3, --2, --2, -0, --3, -0, -2, -1, --2, -1, -2, --3, -1, --2, --4, --4, --4, --3, --1, --1, -0, --3, --4, --3, --1, --2, -2, -1, -2, -0, -1, -0, -0, -3, -2, -0, --4, -2, --1, -0, -1, -2, -2, --2, --3, -0, -1, --4, -2, --2, -0, --4, -0, --1, -3, -1, --2, --4, -2, -1, --2, --1, -3, -3, -0, -1, --3, -3, --1, -3, --2, --3, --2, --4, --2, --4, -0, -0, -3, -1, -2, -3, -2, -2, --2, --4, -2, -1, -2, --3, -0, --2, --2, --2, -0, --2, --1, -1, -1, -2, -2, -3, --2, --3, -0, --2, -0, --2, --2, --1, --3, --2, --1, --2, --2, --3, -0, --3, --1, -1, -0, --2, -3, -2, -1, --4, -0, -3, --4, -2, -2, -1, -1, --1, --2, -0, -2, -2, -1, --3, --1, -1, -0, -0, --1, -1, -0, -0, --1, --1, -1, --2, --1, --3, --3, -2, --1, --3, -3, -2, -1, -1, --1, -2, -1, -0, -2, -2, -2, --2, -2, --3, --4, -3, --4, -2, --1, -0, -2, -3, -3, --1, -3, --1, --2, -2, --2, --4, --1, --1, --2, --3, -0, --1, -1, --3, -1, --3, -1, -1, -3, --3, --2, --2, -3, -2, -3, --2, -3, -1, -0, -2, --2, --3, -3, --4, --3, --3, --3, -2, -3, -1, --3, -0, --1, -1, --4, -0, -0, -3, -3, --3, --4, --3, -2, --1, --2, -2, --2, -3, -3, -2, --2, -3, -2, -2, --2, -1, -0, --1, -0, --3, -3, -0, -1, --2, --1, --2, --3, -0, --1, --3, --1, --4, --3, -0, --4, -0, --1, -3, -0, -3, -1, -1, -0, -2, --3, --2, --3, --2, -1, --2, --2, -3, --3, --2, --4, -3, -3, -1, -1, --2, --2, -0, --3, --1, -1, --2, --4, -1, -2, -2, -2, --4, --3, -2, -2, -0, -3, -2, --3, --2, -2, -3, -3, --1, -0, -1, -2, --1, --3, --3, --4, --2, --1, --3, -0, --2, -1, -1, -2, --1, --2, --2, -1, --2, --1, --4, --2, -2, --3, --1, --2, --4, -3, --2, --2, -3, -1, --4, -1, --2, -0, --4, --2, --3, --3, --3, --3, -2, -3, --4, -0, -0, --3, -2, -0, --3, --2, --4, --3, -3, --1, -3, -2, --4, --2, -3, -2, -0, -3, --1, -1, -1, --4, -1, --3, -0, --3, --1, --1, --3, -1, -3, --1, --2, --1, -3, -3, -0, --2, -3, -1, -3, --3, --1, -2, --1, -1, --1, -3, -0, -1, -2, -0, -2, --1, --4, -3, -1, --2, --1, -2, --3, --1, -0, --3, --3, -2, -0, --3, --1, -0, --3, --3, -3, -0, --3, --3, --3, -1, --2, -1, -3, --3, -1, -1, -2, -2, -1, -1, -2, --4, --4, -3, --4, -0, --2, -0, -3, --1, --1, -3, -0, -2, --3, -3, -1, -2, -2, -0, -1, -0, -0, -0, -2, --2, --1, -3, --1, --4, -3, -1, --4, --2, --1, -3, -3, --2, --2, --1, --3, -1, -1, -2, -2, -2, --3, --1, --4, --3, --2, -3, --4, --1, --3, --1, -2, --1, -1, -0, -3, --4, -0, -2, -}; - -const short m_exp[] = { --8, -10, --3, --13, -15, --22, -32, --11, -6, -36, --22, --11, --20, -17, --33, --26, --13, --7, --8, -11, -0, --6, --38, -16, -28, -0, -0, --21, -32, --18, -15, -49, --39, -24, --2, -25, -33, --8, -52, --19, -58, -5, -1, -8, -21, -49, -6, --9, --11, --33, -25, -8, -5, --9, --33, --28, -21, --1, -24, --31, -2, -27, --4, -2, --17, -7, --11, --2, --21, --27, -8, -11, -71, --31, -28, -13, -10, -40, -35, -25, --4, -1, -27, --19, -50, -18, --23, -15, -12, -16, --24, -0, --16, --8, -19, --16, -10, -3, --32, --23, --31, --20, --52, --42, --17, -26, --20, -3, -85, -33, -37, -5, -38, -16, -21, -8, -80, -13, -5, --42, -1, --29, -4, -0, -7, -11, -91, -33, --9, --20, -2, --6, -0, -3, --22, --31, -37, -29, -30, --4, --35, -26, -25, --13, -40, -22, -50, --39, -13, -19, -30, --24, --10, -31, --47, -19, --3, --15, -7, --36, -2, -55, --20, -15, -31, --5, -14, --37, -47, -70, -1, -36, -16, -17, --43, -73, -35, --58, -41, --40, --58, --2, --13, --12, -62, -7, -21, -23, -24, -53, -34, --19, --18, -52, --10, -2, -7, --26, -6, -7, -42, -5, --1, -22, -55, -26, -30, -31, -25, --24, --18, --9, -3, -43, -7, --25, -38, --35, -1, --3, -7, -61, --19, -45, --54, -101, --9, --22, -36, -13, --14, -23, -12, -39, -13, -3, -32, -9, -3, -14, --19, -2, --14, -56, -37, -0, --23, --38, -13, -27, -11, --34, --12, -0, -27, --28, --3, -37, -40, -39, -40, --30, -38, -13, -2, -20, -8, -7, -9, -14, -57, --44, --15, -18, --49, -37, -40, --16, -21, -7, --80, --28, -10, --25, --56, -5, --54, -20, -10, --28, -24, --7, -21, -5, --59, --2, --7, -14, --1, -31, -19, --48, -4, -41, --36, -10, --13, -8, -2, -14, -9, -19, --21, --32, -54, --1, -16, -25, -18, -19, -8, -25, -31, --13, --31, -5, +}; + +const short m_exp[] = { +-32, +48, 2, --11, --17, --18, -1, --24, -26, --2, -20, --19, -30, -12, --1, --9, --17, --19, --14, -15, --13, +-56, +46, +-52, +39, +-77, +41, +-50, +-50, -14, -33, --6, --9, -36, --6, -45, --26, -29, --27, +-31, +3, +-22, -52, -0, -53, --2, --42, -18, +-31, +-32, 8, -7, -26, --35, -3, +61, +97, +49, +-12, +12, +-25, +-26, +-15, +15, +45, +-29, -27, -23, -35, --28, -7, -2, --39, -0, --22, -9, -44, -12, --1, --44, -44, -38, -11, --21, -7, -33, --1, --38, --3, -43, --14, +-23, 30, -12, -2, --33, -7, -20, +-36, +-56, +27, +-59, +35, +6, +44, +72, +23, +17, +86, +-8, +5, -25, --2, -31, +41, -30, -54, -36, -42, -89, --7, -35, --19, -19, --15, -10, -54, -15, -37, -71, +-78, +120, -1, -22, -14, --30, -0, --4, --2, --31, -20, --19, --31, --34, -4, -38, -9, --35, -25, -50, --10, -9, -4, -7, --15, -82, --18, -7, -24, --8, -10, -10, -1, +69, +-20, 24, +-66, +6, +68, +-59, +2, +27, +-21, +-71, +-61, +-49, 21, +-24, +27, +-47, +29, +71, +37, +-9, +-58, +13, +13, +73, +-9, 7, -70, -48, -17, -21, --56, -11, -19, -24, +28, +23, 35, --33, --15, -21, -9, -8, --12, --36, --32, +46, +-8, +86, +-7, +25, +-65, -18, --15, -21, -19, --1, +43, +58, +22, +44, -51, -12, -17, -3, --17, --20, -3, --13, -1, -19, --4, -7, --21, -28, -42, -50, -8, --4, --7, +-33, +10, -18, --56, --19, --16, -13, --6, -29, -15, -35, --19, --23, --14, --15, -3, --15, -47, -38, --44, -20, -48, --11, -15, --4, -76, -33, -38, -76, --34, -3, -25, -78, -76, --2, +-17, +-62, +24, +18, +-68, +23, +25, +23, +-32, +23, +37, +55, +-16, +24, 4, -39, +-16, +9, +77, +44, 48, -14, -49, --9, +-36, +-81, +-100, +-18, +36, -3, -23, -20, -17, -35, --10, +-72, +-43, +38, +-2, +34, +53, +-42, +-18, +56, +19, +34, +3, +-58, +-16, +-34, +-71, +-12, +12, -22, -23, -6, -64, -9, -13, --5, --19, +57, +-46, +-70, 25, --23, --7, --11, --44, -18, -36, --30, --13, -52, -54, -12, +-62, +10, +-5, 68, --11, --66, -34, -31, --32, -35, -28, -50, -58, -36, -35, -19, --51, --9, -58, --34, --35, --17, --11, -22, --3, -21, --6, +-86, +-15, +-19, +-100, +78, 23, -0, --33, -3, -19, 47, --12, --8, --13, -29, --13, -6, --3, --29, -37, -10, --42, +5, +-64, 31, -40, +-16, +-9, +-22, +11, +30, +-74, +31, +50, +38, +-59, +24, +12, +-18, +4, +33, +-24, +-44, +-19, +2, +-47, +48, +-30, 28, -25, -0, +-38, +-29, +20, +52, -21, +-5, +49, +-41, +-17, +-2, +68, +-2, +122, +-29, 13, -8, --16, --1, --18, 23, -50, --4, --6, -0, --26, +46, +40, +-12, +-58, +59, +2, +15, +-49, +-38, +-15, +46, +-1, +-54, +-73, 10, -31, +-1, +43, +80, +-55, +119, +82, +22, +-12, +-14, +-12, +-3, 36, -29, --25, --22, -2, +27, +-3, +50, +59, 61, -12, -22, -23, --25, -2, -28, -7, -78, -47, --13, --7, +13, -14, --21, -19, --32, 5, -15, --12, -43, -28, --1, +51, +-54, +-45, +-9, +109, +10, +-28, +1, +0, +-50, +-23, +27, +49, 16, -9, --11, --4, -30, --25, -7, -36, --42, 3, -16, -7, -0, --40, -28, -25, -44, --8, +23, 43, --7, +31, +29, +-27, +-45, +9, +61, +42, +34, +30, +26, +38, +-84, +5, +98, +13, +55, +15, +56, +63, +22, +80, +10, +52, +52, 49, --2, +101, +37, +71, +-20, +-38, +-36, +-72, -40, +12, +77, +-19, +32, +9, +-15, +85, -13, -37, -23, -33, --2, --28, --26, +-8, +-20, +33, +36, +76, 6, --7, -37, -53, -17, --11, --59, -12, +67, +-51, +36, +76, +-48, +30, 42, --46, +-45, +-22, +-9, +65, +-29, +18, +89, +34, +-25, +41, +30, +26, +49, +34, +-6, +-28, 10, -31, -43, --14, +-106, 6, -16, +86, +5, +-3, +-105, +-103, +-45, -55, -10, -44, --18, +-60, +29, +41, +54, +-29, 36, --14, -85, -12, --69, -25, -35, -4, --22, --5, -26, --22, -28, --63, --28, -2, -30, -22, --46, --1, -17, --37, +-8, 25, -22, -42, --9, --28, +36, 40, -11, --8, -59, +22, +-35, +-50, +33, 3, -26, -36, --7, --11, -12, --10, -10, -26, -26, --22, -41, --9, -26, --14, -19, --8, -27, -0, -23, -20, -42, --22, --23, --71, --36, -11, --23, --10, --2, -17, -51, --65, -19, -3, -42, -37, -19, -24, -6, -33, -29, -30, 3, --28, --5, -12, --36, --29, -20, -15, --1, -8, -25, +-11, +9, +-4, -18, --17, -22, +39, +92, +-25, +0, +-40, 64, -35, -7, -33, -8, +-18, +58, +-2, +27, +-89, +32, +-2, +56, +79, +-67, +87, -41, -40, +20, +29, +4, +51, +45, 26, -0, +-54, 8, --10, --65, -48, -7, -6, --10, -28, -16, -20, -0, -52, -31, -2, --53, +-37, +-37, +-39, +-35, +-36, -23, -32, --12, --6, +-30, +11, +1, +-63, +-21, +5, +13, +35, +-15, +27, +-59, +-10, +29, +4, +-58, +-56, +3, -10, 27, +0, +29, +-4, +-17, +28, 2, -3, -49, --46, 17, -92, 9, --21, -17, --32, --1, -67, --1, --17, -46, --11, +-27, +53, +-19, +-36, +104, +25, +38, +84, +-29, +42, +-10, +-47, +-36, +1, 10, -6, -46, -52, --4, -28, -61, -18, 43, --22, --25, -29, --56, --22, -17, --52, --3, -7, +-46, +-57, 38, -6, -19, -49, --8, --20, -17, -13, -52, +44, +-9, +26, +-15, 10, -22, --19, -5, --7, --7, --4, -42, --2, -64, -8, -5, 31, -35, --51, -4, +34, +-18, 17, --42, +24, +-3, +5, +11, +4, 23, -19, --5, --23, -14, -7, -47, +5, +-19, +51, +-59, +-29, +62, +-27, 35, -40, +81, +65, +-10, +-1, -1, -31, -36, -34, -9, -6, -22, --77, -32, -36, --43, --2, -47, -2, -6, -8, --14, -45, --20, --43, --14, -19, -5, -23, -74, -2, --14, -2, -1, --12, --5, -23, --17, 45, 20, -6, -56, -13, --5, +26, +-34, +-7, +35, +-7, 2, +19, +115, +-32, +-40, +-92, +47, +-65, 23, --8, -1, --21, --11, -37, -35, --15, -14, -39, +53, +-31, 22, -37, -19, --13, -73, +20, +45, +91, +64, 29, +49, +30, +74, +-15, 22, -7, --29, --60, -28, --6, --1, --34, --9, -59, -18, +120, 16, -36, --16, -5, -22, --22, -2, -52, --27, --15, -4, +122, +-51, +51, +78, +60, +-53, +40, +-49, +73, -2, -56, -4, +14, +-17, +-86, +35, +-25, 36, -30, --48, --13, -11, --47, +2, +5, +38, +-9, 16, -37, --27, -8, -31, +-12, +-41, +-24, +-31, +-72, +-68, +-9, +5, +11, +-63, 15, --15, -29, -47, +12, 21, --26, -31, --8, -24, -52, -76, +22, +19, +62, +-28, +122, +12, +28, +-59, -19, -15, +49, +57, +-12, 29, -11, -28, -13, -21, --22, --45, -18, +-1, +-23, +126, +75, +-29, +-21, +-37, +8, +-70, +-8, +91, +-34, +-10, +31, +78, +44, +59, +23, +66, +42, +38, +6, 19, -27, -61, +10, +1, 57, --56, -26, -20, -61, --40, -16, --31, -53, -83, --2, --16, --10, -13, -62, -52, --6, --49, -13, --37, -2, --36, -2, -25, --22, +38, +71, -10, --4, --2, +-12, +-7, +-13, +-15, +6, }; -#define SIZE 32 +#define SIZE 24 __attribute__ ((section(".heapsram"))) short g_mA[SIZE][SIZE]; __attribute__ ((section(".heapsram"))) short g_mB[SIZE][SIZE]; __attribute__ ((section(".heapsram"))) short g_mC[SIZE][SIZE]; diff --git a/carfield/parMatrixMul32/gen_stimuli.py b/carfield/parMatrixMul32/gen_stimuli.py index 75eef86..32926e9 100755 --- a/carfield/parMatrixMul32/gen_stimuli.py +++ b/carfield/parMatrixMul32/gen_stimuli.py @@ -16,7 +16,7 @@ def write_arr(f, name, arr): SIZE = 24 -RANGE = 2**15/SIZE +RANGE = int(2**15/SIZE) m_a = [] m_b = [] diff --git a/carfield/parMatrixMul8/gen_stimuli.py b/carfield/parMatrixMul8/gen_stimuli.py index 5fd3e84..153d5c3 100755 --- a/carfield/parMatrixMul8/gen_stimuli.py +++ b/carfield/parMatrixMul8/gen_stimuli.py @@ -15,7 +15,7 @@ def write_arr(f, name, arr): f = open('parMatrixMul8_stimuli.h', 'w') -SIZE = 32 +SIZE = 24 RANGE = 4 m_a = [] diff --git a/carfield/parMatrixMul8/parMatrixMul8_stimuli.h b/carfield/parMatrixMul8/parMatrixMul8_stimuli.h index e5a79da..78d026c 100644 --- a/carfield/parMatrixMul8/parMatrixMul8_stimuli.h +++ b/carfield/parMatrixMul8/parMatrixMul8_stimuli.h @@ -1,3104 +1,1741 @@ -/* - * Copyright (C) 2018 ETH Zurich and University of Bologna - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -/* - * Mantainer: Luca Valente, luca.valente2@unibo.it - */ const char m_a[] = { +-1, +0, +0, +0, +-4, +-4, +-4, +1, +-1, -2, +-3, 3, 2, -2, --1, +-4, +1, -2, -3, -0, -0, -3, +0, -3, -4, -3, -2, -1, -3, +-1, +-3, -3, +2, -2, +2, 3, --1, 0, --2, +2, +0, -1, -1, --3, -3, +-2, -1, -1, -3, 1, -1, -3, -0, -0, -1, -0, -3, -1, --3, -0, -0, -3, -3, 0, -3, -1, -2, -3, -1, --2, --2, -2, +-4, -2, -3, -1, -2, +1, +1, 2, -2, +-1, 0, 2, --1, --2, 1, -3, 2, --4, -3, +-3, +0, +0, 0, 2, --3, +-2, +3, +-4, 2, +-2, +-3, +-2, +-3, +3, +-3, +0, +1, +-1, +-1, 1, +-2, -1, -4, -3, -2, +-1, +-4, -4, -2, -0, -1, -2, +-1, -2, -3, -2, -4, --3, -2, -2, +-4, 1, +0, -2, -3, +1, +-1, +1, 2, -3, +-3, -4, 0, -1, +2, +-3, -3, -3, -1, -1, 0, 0, -2, +-2, +-3, -1, -0, -3, +-2, +-1, +-4, +-1, +-4, +-3, -3, -2, -3, 0, 1, +-3, -4, 1, -1, --1, --4, --3, 2, +0, 2, +-1, +-4, +-1, +-4, 2, --2, --2, 2, +-1, 3, 0, --2, +0, -1, --4, +1, +3, 0, 2, --4, +0, 3, --2, +2, +2, +2, -3, +2, +2, -4, +0, +-3, +-1, +-1, -3, -3, -3, -4, --2, -3, -0, 3, +2, 0, 2, +1, 0, -2, +-1, 3, --4, -0, 3, --1, +0, 1, -3, -3, 3, -1, --4, --2, --2, +0, +-3, 2, +-3, 1, -3, --4, +2, 0, +3, -1, 0, -0, -2, -4, --1, 0, -3, -3, -1, -3, 0, --4, --3, +3, +0, +-1, -3, -2, 0, +-2, -4, -0, --3, -1, -4, --2, -0, -2, -1, 1, +2, +-4, 1, -0, +-4, +-4, +-3, -3, -1, --1, -1, --1, 3, +-1, +-2, +-4, 2, +1, 2, -2, --2, -1, -2, 1, +3, 0, --3, --1, --2, 2, --1, +-4, -3, +1, -2, --4, 0, +1, +1, 3, +-2, +-4, 2, -1, -1, -1, --3, +1, +2, -2, -3, +1, +1, +2, 0, 3, -0, --1, -4, +2, -1, -0, +-1, +-3, +-3, +-3, +-3, 2, +-3, +1, 0, 3, -3, --2, 3, -1, --3, --4, 3, -1, -4, -3, -3, -3, --2, --2, -0, 1, -2, --2, -4, --2, 1, +2, +-3, 1, -4, -1, -3, +-4, -3, +-2, 2, 3, 0, +-4, 1, --3, -1, +3, 0, -2, --4, --4, +3, +-1, -4, --3, +3, +-2, +-2, 2, -4, -2, -1, -1, -0, -1, -0, --3, +-1, 3, --4, --2, -2, +-4, -1, -1, -1, +2, -1, -1, +2, 0, +-2, +-4, 0, -1, --3, --1, -3, -2, -1, 2, +-4, +0, 1, --1, -3, -3, --2, +-4, 2, 0, -0, -1, --4, --4, +-1, -3, -1, --4, +2, +3, +2, -2, --1, 1, -1, --2, -4, -3, --4, -0, --4, -0, --4, --4, -3, +1, +2, +-1, -4, 3, -0, +-1, 2, +-2, -3, 0, --2, -3, -1, -1, -2, 3, -0, --1, +-4, +-3, -3, --1, -1, -3, -3, -3, 0, 0, --4, --2, -2, --2, +3, +1, -2, --3, -2, -4, 2, --2, -2, 2, --2, 0, +3, -2, -2, +1, +3, +-1, 3, +-4, +-2, 0, -2, +-4, 0, --3, -1, -2, -3, +-2, -4, -1, -4, --3, -2, -2, -2, -1, --1, -4, -2, -1, -2, -0, -0, -3, -2, --1, -0, +-3, 0, +2, -4, 1, --3, +0, -3, 0, --1, -1, +-4, +-4, +3, 3, -2, -2, +1, +3, +3, +1, +-3, -4, --2, +-4, +1, +1, 2, -4, 0, --2, --4, +3, -1, 3, 1, +-4, +-2, +1, +-1, +3, +3, +-1, +-1, 0, +-2, +2, +-2, +-2, 1, 3, +1, 3, +-1, +2, +-1, +0, 1, 2, -4, -2, --2, -3, -2, +1, -3, -2, -1, +-4, +-1, +-4, +-4, +-3, +-3, +3, +0, +3, +0, +-2, +3, -3, +3, -1, -1, --2, -1, 2, -2, --4, 1, +-4, +0, -3, 3, --3, --3, 0, -1, +-2, +-1, +3, +2, +-2, 3, -1, -3, 0, -2, +1, 0, --4, -0, +-1, 1, -2, +3, -4, +3, 0, -0, +3, -4, +3, -1, +-1, +1, +3, +1, 0, --2, --2, -4, --2, --1, 3, +-3, +-4, -1, -3, 2, -3, -4, -2, -3, --1, -1, -3, 2, --2, -3, -0, 3, --3, +-2, +-2, -4, -1, -0, 1, +-4, -2, 2, -3, +-3, 1, +-3, +-2, +2, 3, -2, --3, --1, --1, +0, 1, -1, --1, +2, +-2, 1, -0, --4, -1, --1, --3, -0, -3, +-4, -3, -4, --1, -1, +-3, +-3, +-3, -4, 3, 1, 1, -0, --3, -1, --3, -2, --2, --2, +3, +-4, 0, -4, +2, +2, 3, +2, +-4, +1, +-1, -2, -3, -2, -1, -1, +2, +-2, +2, -3, +2, 0, 0, --3, -1, -1, 0, --1, +-4, +-2, +-2, +2, 1, 0, --1, +2, +3, +2, +3, -3, +0, -3, -2, --4, 2, --2, -3, -0, +-1, +2, -3, +1, +0, +1, 3, -3, +-4, +0, -3, --2, -3, +-1, +1, -2, -2, 0, +0, 1, -3, -2, +0, +3, +2, +0, 3, +-4, 2, 1, +3, -2, -2, -0, --1, +-3, +2, +2, 2, -3, -1, -1, -0, --2, +3, 2, -3, --2, -2, +}; + +const char m_b[] = { 3, -2, -1, -1, +-3, -4, --2, +-3, 2, +-4, +-1, +-4, +-4, -1, -3, --3, -3, +3, +0, 2, 1, -1, -0, --3, +2, +-2, 0, +3, +-4, -2, 2, -0, -1, -1, --4, 1, -0, -0, +-4, +-4, +-1, 1, -2, -3, -3, +-2, +1, -3, -2, --4, -0, 1, -2, 2, --3, -3, -0, -0, -0, --3, --1, -2, +1, -3, -1, +-4, 1, -3, -0, -1, --4, -3, -0, -3, -2, 3, --4, -2, 0, --1, -2, --4, --1, -1, +0, -2, +0, -4, --4, -3, -1, -2, --2, -3, +0, -3, --2, -3, +0, 3, -2, --2, -1, -3, --3, -4, -2, -3, -3, -2, 2, +-4, -1, -3, +1, +-4, +-4, 0, +2, 3, --2, --3, +2, 0, -3, -1, --3, --4, -3, +-1, +2, +2, -2, -2, --1, +-2, +-4, 3, +-3, 2, +1, -1, --1, +1, +-3, -1, 2, -1, 1, -2, -1, --3, +0, +-4, +-2, 3, +0, +-4, -2, +3, -3, +1, +-1, -1, -0, --3, -2, 1, -3, -2, -2, -1, --3, --1, +-4, 0, --1, +0, +0, +0, +-4, -3, -1, +3, +-2, +3, +3, +2, 3, -4, --3, -1, 1, +-2, +-3, +-3, 2, +3, -4, -2, --2, -0, +-1, 3, 0, --2, +3, +2, +1, -1, -1, -1, --2, --2, -2, --3, -0, -4, -1, 3, --4, -3, +2, -1, --2, +3, 0, -1, 3, +0, +1, -4, 0, +3, +2, -4, +-2, +-2, -4, +-3, -2, 1, +0, -2, +1, 3, --3, -2, -1, --4, --2, -3, --4, -2, --2, 0, -2, +3, 0, +0, +0, +2, +3, -4, -4, --4, --3, -3, +2, +2, 3, --1, +1, 0, 0, --3, -3, +-2, +1, +-2, -4, +-3, +0, -2, +2, 3, --3, 2, +3, +3, +1, +1, 1, --2, 3, --2, --1, +1, 3, +2, -3, +1, +-1, +-2, +-2, +-2, +-1, +2, 2, 0, --1, -3, -0, -0, +-1, +2, +-4, +-2, +2, -3, -0, +-2, +-4, +3, +-1, 3, 2, 3, +-1, +-1, +-1, +-2, -2, --3, +2, 2, -1, -0, -3, --2, -1, +-1, +3, +-3, +3, +3, 2, -0, -3, --4, +2, -3, -0, -0, -3, +-2, +3, -1, 0, -1, -0, -2, -0, +-1, +-1, 2, -1, -3, --4, -3, +-2, +1, -4, -0, --3, 1, 3, 2, --3, --4, +1, +2, -1, -1, --3, +-1, +-4, 0, --3, +3, +1, -2, +0, +2, +-2, +-2, +3, -1, --3, -1, +0, +3, +3, +-1, +0, +0, +-4, 1, +-4, +-4, +0, +2, +3, +-3, -2, -3, -2, +-3, -2, +0, -4, -1, 0, -2, -2, 1, -0, -1, -0, -3, +-1, -4, +1, 2, 0, -3, +-2, 0, +2, +2, +2, +3, -3, 1, 0, -2, +2, 3, -1, -1, --1, -1, -2, +1, -3, +-1, +2, +2, +1, +3, +-2, +0, +-2, -4, --3, 1, -2, +1, +1, -2, -2, -1, +2, +0, 1, +-1, -3, +-1, +1, +-1, +-1, -3, -4, -2, --3, +-2, -1, -1, 0, --1, --3, +3, +3, +0, +-2, -2, --3, -2, -2, --4, -3, -0, 2, --1, --4, --3, -3, +2, 1, 3, +0, 3, +0, -1, -1, --3, -3, --4, --3, 3, --1, 3, -4, 1, 1, --4, -2, --3, +-4, +-4, 3, 1, +0, -1, -4, -2, --4, -2, 2, +0, +1, +-1, +0, +-3, +-2, +-1, 1, -3, +-2, 2, +-4, +-3, -3, -1, 0, -3, 0, --2, --2, --1, -3, +-3, +-3, 2, 0, -3, 1, --4, --1, +-2, -3, -1, +3, +-1, +3, +-3, +-4, -4, 0, -1, --1, --2, -2, -2, -4, -1, 2, --4, +1, +0, 0, --2, 2, 2, -1, +3, +2, +-1, +0, +-3, -3, +3, +0, +-4, +0, +-2, -2, -1, +1, 3, --2, 3, 1, -2, +-3, +1, -2, --4, +-1, +2, 0, -3, 0, +2, -1, -1, --3, -4, +-1, +-3, 0, +2, -4, +-1, 0, +-2, -1, --4, 2, --3, +-2, +-2, +3, +3, +0, +3, 1, +0, +2, +3, +2, +-2, +-4, +-1, +3, +3, -1, 2, --3, -0, 0, -2, -3, +2, -4, -0, -3, -3, --2, --1, -3, --4, --2, --4, --4, --1, --4, +-3, +-3, 0, 3, 3, --4, +3, +0, -3, -1, --1, 2, --4, -1, --2, +3, -3, -3, +-4, -1, 3, 0, -4, -0, -3, -}; - -const char m_b[] = { -0, +-2, +-3, 1, --4, -0, 3, --1, --4, -2, --1, 3, --1, -1, -2, --1, --4, --3, 2, +-4, +-2, +1, -3, -3, --1, -1, --2, -2, --1, -2, 3, --2, -3, 0, -1, -2, -3, -3, --2, -1, --2, -2, --1, -1, -4, -3, 0, --1, 2, --1, --1, -4, +0, 1, -1, --2, --4, +-1, 3, --2, --2, -2, -0, --2, 3, --4, -0, 3, -2, --3, --2, --2, -2, -2, --4, --4, -1, --3, --4, 1, --3, --4, -0, --2, -0, --2, --3, --1, -0, --2, 3, -4, +-4, -1, --2, -3, --1, --2, --4, -0, --2, -0, -3, -0, -3, -3, --1, --2, --4, -2, 0, +1, -1, --2, -3, --2, -3, --4, +-3, -4, --1, --2, -3, 2, -1, -1, 3, --1, --2, 0, -1, -4, +-2, -3, +0, 3, -1, -1, 2, -2, --3, --2, -3, -3, --3, --4, -1, --1, --1, 0, -2, +-4, -3, -1, -3, --1, --2, -1, --1, -3, --1, -2, -3, -1, --2, -3, -2, --2, -0, -0, -2, -1, -0, 2, -4, -4, --1, -0, -0, -1, --1, -0, -0, -2, -0, --4, 2, -0, -1, +3, -3, -0, -1, --1, -1, 2, -1, --3, --1, --3, --3, +-2, +-2, -1, -0, -3, -3, -1, -2, -2, -2, +-1, +3, -4, -4, -1, --4, 3, -3, --4, -2, --3, --1, -3, -1, --2, -3, -2, --1, -1, -3, -1, 2, 3, -3, -1, --1, -1, -3, --1, --4, -0, -0, -3, -1, +-3, -4, -0, -0, --1, -1, -2, +}; + +const char m_exp[] = { +27, +-26, +-19, +13, +47, +17, +-5, +14, +88, +66, 2, --1, +14, +6, +-39, +56, +35, +-19, +61, +-13, +4, +46, 1, -2, +70, +27, +-22, +-28, +-13, +-5, -4, --1, -1, -3, -0, --1, +-6, +-10, +5, +26, +14, 3, --4, -1, -1, -1, --2, -1, -1, -3, 0, +10, +43, +4, +32, -3, -0, --1, -0, --1, -1, --1, --2, --3, -1, --1, -3, -3, -2, -3, -2, --1, --4, -1, -2, --3, --3, --3, -3, -1, -3, -3, -3, --3, --1, -1, -0, --3, -2, -2, --3, --4, -2, -2, --4, --2, --2, -2, -1, -2, -0, --3, -3, --4, --3, -3, --1, --1, --2, -1, --1, --3, --4, --1, -3, --1, -2, -1, -3, --2, -2, -1, -1, --4, --2, --1, -0, -2, -3, --3, -2, -2, --4, -1, -3, -1, -2, -2, --2, --2, -3, --3, --4, -2, --3, --1, --1, --1, --2, --2, -1, -3, -0, -1, -0, --2, --2, --1, --3, --4, --2, -0, --1, -1, --3, --3, --4, -3, --3, --4, -3, --3, -3, --2, -0, --2, -1, --1, -3, --1, -3, -1, --3, -0, -0, -2, -1, --3, --4, -1, --1, --2, -2, -2, --4, --2, -2, --3, --1, --3, -3, -0, --3, -2, --4, -2, -3, --3, -2, -2, -3, --3, --1, --2, --4, --2, -1, --1, --1, --2, --2, --2, --1, --2, --1, -1, -0, --1, --3, -2, --4, --4, -2, -0, -3, --3, --3, -3, -1, -1, -0, -3, --3, --4, -2, --2, --4, -1, -2, -0, -2, -2, -1, -0, --3, --1, -3, -1, --3, -1, -2, --4, -1, -1, -3, --2, -3, --4, -1, --1, --4, --1, -3, -3, --1, --4, --4, -0, --4, -0, -1, --3, --3, -1, --2, -0, -3, --3, --4, --4, -0, --3, -1, --2, --1, -1, --4, --3, --1, -2, -0, --3, -0, --1, -3, -2, -2, -0, -0, --4, --4, -1, --3, -3, -0, -3, --3, --1, -2, -2, -2, --2, --3, --2, --3, -3, --2, -3, -3, -1, -0, --2, --1, -0, --2, -3, --4, --1, -2, -0, --3, --4, -2, --3, --1, --1, -0, -2, --4, -2, --3, --1, -0, -2, -1, -2, --2, -2, -0, -1, -0, -0, --3, -0, -0, -0, --1, --4, --2, --3, -0, -3, -0, -1, --1, -3, -0, -3, --1, -3, --1, --4, --2, --4, -2, --4, -3, -3, -1, -2, --2, -2, -3, --2, -1, -3, --1, -3, -2, --4, --1, -0, -0, -0, --3, --3, -1, --3, --3, --1, -2, --1, --4, --4, --2, --4, -2, --3, --3, --4, -2, -2, --4, -3, --1, --1, -0, -1, -0, -2, -0, -0, -3, -3, -0, --2, -2, -0, --3, -1, -2, --2, -0, --3, -3, --3, --4, -1, --1, --4, -3, --2, -2, -0, --2, --4, -0, --3, -2, --3, -0, -3, -2, --4, --4, -0, -1, -3, --3, --3, -0, --3, -3, --1, --4, -3, -1, -2, -3, --2, -2, -3, -0, --3, --4, -3, --4, --1, -2, -1, -3, --3, --4, -3, -1, -0, -0, --3, --4, --3, -2, -0, -1, --4, -3, --4, --2, --1, --4, -2, --4, -2, -0, -1, -0, --4, --4, -0, --4, -0, --4, --1, -2, -0, -0, --2, --1, --2, -0, -3, --1, -3, -1, --4, --1, -1, --1, -2, -0, -3, --4, --4, --2, --3, --2, -1, -0, --4, -3, -0, --4, --1, -0, -3, --4, -2, --4, --1, -2, --2, -0, -1, -1, --3, --2, -3, --4, --4, -0, -3, --4, --2, -0, -1, --4, --4, -2, --2, --3, --4, --4, -3, --1, --4, -2, -0, -2, -3, -2, -0, -3, --1, -3, -2, --4, --1, --2, --1, -1, -3, --1, --2, -2, -3, --4, --3, --1, -2, --2, -2, --2, -2, --1, -0, --1, --4, --4, -1, --3, -2, -3, --2, -0, -0, --2, --4, -1, -0, -3, -2, --2, -0, -1, --3, --3, -3, -1, --2, -0, --1, -3, --1, --4, --1, -3, --3, -2, --4, --1, -2, --1, --2, -2, --3, -0, -3, --2, -2, -2, --3, -3, --1, --4, --1, --4, --2, --2, -1, --4, --2, -3, -1, --1, -3, -2, -3, --4, -1, --4, --4, -0, -1, -3, -2, --1, --2, --2, -1, --1, --1, -0, --1, -0, --4, -0, -0, -2, --4, -2, -2, --1, -2, -1, -2, -1, -2, --2, -1, --1, --4, --1, -1, -3, --4, --1, -1, --1, -3, --3, --3, -2, --2, -1, -1, -3, -3, --3, -0, -0, -2, -2, -3, -0, --3, -1, -1, -2, --4, -0, -0, -2, --1, --2, -2, -0, --1, -1, -2, --4, --2, -3, -2, -3, --3, --2, -1, --2, -3, -1, --2, --2, -2, -1, --4, --3, --2, --4, -1, --1, -0, -3, --1, -2, --1, --1, -0, -1, -0, --4, -3, --2, -1, -3, -0, -2, --2, -0, --3, -0, -0, -0, -2, --4, -3, -0, -1, --4, --4, -3, --1, --4, -0, --2, -2, --3, --3, --3, --2, --4, --4, -3, --3, -1, --4, --2, --1, --4, -1, -0, -3, --4, -1, -1, -2, --3, -0, -}; - -const char m_exp[] = { --7, -54, -40, --69, -27, -6, --46, --45, -42, --3, -39, -8, --11, --7, --25, --28, -50, -20, --34, -14, -6, --2, -11, -53, --28, -14, --64, -5, -21, --7, --49, --4, --15, --72, -5, -35, --9, --19, -5, --19, --2, -8, --17, --9, -49, --28, --23, -27, --47, -35, -36, --19, --9, -24, -12, --4, -30, --28, -30, --27, --17, -41, -21, --5, --36, -33, --18, --8, -6, -19, --33, -26, --38, --29, --40, --21, -13, --15, --6, --22, -13, -10, -51, --38, --53, -48, -17, -53, --35, --21, -28, --10, --54, -54, --17, -19, --27, -8, -20, -42, --31, -8, -22, -73, --6, --9, --11, --17, --2, --29, -20, -52, -0, --5, --44, -31, --6, --12, --11, --1, -19, --46, -24, -19, -6, --40, -11, --23, -8, --2, --36, -77, -15, --9, -31, -66, --39, -24, --19, -40, --6, --12, --12, -37, -8, -9, --18, --1, --8, --26, -25, -45, -50, --15, -49, -3, --16, -2, -48, --37, -67, --6, -40, --13, -60, -38, --27, -11, -1, --8, -12, --27, -5, -12, -33, --24, -4, --40, --41, -39, --13, -17, -13, --25, --29, -21, --28, -18, --8, --23, -32, --22, -26, --22, -29, -13, -16, -11, -21, -12, --11, -64, -27, -3, -75, --37, --21, -30, -6, --18, -43, --10, --26, -32, -16, -27, -8, --6, -47, -7, --8, -28, -29, --18, --40, -10, -40, -16, --7, -29, --19, -38, -65, -53, --71, -42, -28, --69, --22, -4, -52, --74, --9, -12, --46, --32, --72, -5, --33, -34, --6, --38, -14, -0, -47, --23, --4, --14, --2, -14, --17, -29, -7, -32, --39, --21, -40, -14, -21, -4, --3, -9, --15, --2, -35, --13, -47, -9, --11, -22, -10, -5, -23, -39, -20, -14, -13, +6, +36, 26, -19, --49, -60, -57, --18, --35, -33, --43, +66, 20, -46, -35, +-20, +-10, +21, -17, -72, -62, -25, --13, --18, --2, -20, --6, --13, +-5, +36, -9, -49, -6, -41, --20, --7, -14, --20, -26, -32, -37, --16, -34, -66, +11, 10, -23, +17, -32, -11, --37, --18, --9, -7, --15, -69, -28, -14, -19, --27, -11, -71, -5, --47, -22, --41, --8, -35, -25, -92, --7, --34, --33, --9, --33, -33, -9, -45, -28, -28, -24, --24, -43, -16, -23, -63, --28, -53, -32, -33, -5, -12, --34, --40, -6, --10, -0, -16, -23, -38, 12, -33, -16, --5, --49, -22, -23, -4, -45, -16, -43, -1, -24, --32, -16, -8, -37, --38, --7, +20, +9, +-1, 15, -65, --23, --61, -34, -18, +-42, +-21, +-51, +24, +20, +26, +10, +42, -4, -12, --24, --38, +2, +-11, +41, 22, --23, --13, -80, --10, -29, -58, -26, --40, -40, -33, --13, --14, -26, -37, -97, --1, 4, -51, -65, --33, -47, +-17, 10, -25, --30, +28, +-10, +2, 10, --11, --34, +25, +32, 18, --28, --47, -5, --42, --27, +43, +-3, +-9, +-9, +-4, +25, +-5, +9, 24, -55, --10, --26, -28, +54, +43, +14, +59, +18, +36, +-7, +30, 50, -17, -24, -9, -72, --27, --41, -29, -23, --24, --15, --14, -22, -3, -3, +-30, +21, 3, -42, -17, --5, --21, -77, -29, --33, --1, 27, --38, --26, 7, -36, --30, -24, -39, --10, --39, -8, --32, --14, -63, -48, --41, -2, --24, -58, -24, 21, -11, --15, -82, --33, -53, -14, --1, -34, -12, +55, +-17, +-2, +9, +17, 31, -7, --14, --4, -16, --6, --9, --7, -28, -50, --6, --10, -15, -20, --19, -2, -40, -54, +8, 12, -24, --5, --6, -19, +29, +43, +-17, 14, -22, -27, +-55, +13, +50, +24, +-13, +-33, 15, +-45, +9, +36, +-9, +-6, 14, -7, --8, --19, -34, --36, -12, --11, --5, -23, -1, -30, --34, --11, -8, +2, +-27, +-37, +-40, +-14, +2, +-10, +6, 27, -9, -8, -8, --26, --1, +-13, +-17, +-4, +28, 51, -30, --29, -3, --26, -0, +-5, +-14, +2, +-23, +17, +35, +41, +-3, -37, -3, -12, -3, -33, --36, -2, --48, +-49, +-31, +7, +15, +36, -15, -9, --38, --6, --2, -10, +-21, +6, 2, -33, -32, --22, --2, --19, -16, +36, -12, -28, -8, -63, --6, --77, -23, --13, --23, -0, --20, -28, -33, -23, +-27, -34, --12, --3, +9, +44, +8, +57, +20, -22, -59, --10, --33, --13, -48, -0, -3, -28, -14, +-22, +-11, +-15, +-8, +-15, -9, --25, -18, --2, --57, -9, --21, --46, +49, +37, +26, +6, +30, +-17, +-43, +-3, +-31, 36, -91, -18, -2, --14, -13, --24, --20, --61, -31, --24, -47, --27, -40, -12, -12, -13, --16, -10, -28, -7, --11, -20, +49, +-15, 8, -13, --34, -4, -28, --66, --32, --25, --8, --51, --13, -34, -43, --26, -3, 51, --37, --80, -20, --10, --43, -3, -57, +-8, 17, -8, --25, --5, -16, +-51, +-16, +-21, +12, 49, +-11, 41, -20, -19, --8, --31, -47, --46, --23, --28, -34, --39, -0, -64, -32, -20, -43, -15, 36, 15, --31, -59, -49, --21, +-5, +-69, 60, +14, +-24, +-21, +23, +3, +41, +41, +-27, 0, +33, +63, +18, +1, +-36, +-20, 18, -0, -21, -21, -22, --19, 7, -19, -22, -42, -44, --9, -43, -5, --19, --43, --30, --4, --24, --11, -65, -55, --5, +-1, +37, -33, -17, -8, -14, +30, +36, +-29, 38, +57, +-8, +-21, +-26, +15, +-10, +-4, +-17, +-19, +8, +-9, +-13, +0, +10, +-30, +59, +12, +11, +51, +60, +19, +35, +6, 3, -5, +-19, +-10, +20, +6, +-12, +-5, +5, +11, 33, -8, --23, +-33, +-27, -2, -78, --11, -14, --30, -10, -27, -46, -42, +-2, +3, +53, -1, -6, -24, --7, +-15, +-10, 13, -2, -9, --4, -16, --29, -87, -49, -97, -50, -14, +-5, +24, -17, -101, -45, --42, -23, -53, -52, -28, --4, 10, --16, --23, -31, --54, -17, --19, --34, --14, -62, -19, --19, -53, +8, -3, -17, --16, --19, --17, -34, -59, +41, +-9, +9, +0, +30, +7, +7, +-10, +-28, +21, +13, +4, -3, --36, -27, -36, --20, --42, -8, --30, -31, --20, -15, -36, -27, -43, --14, +44, 9, -6, +-49, +-31, +-51, +23, +16, -13, -55, -55, --21, -10, -3, --4, -33, --22, --26, --43, -38, -19, -12, -28, -47, --17, --23, -15, --39, --35, --4, -14, +36, +23, 34, -56, +-39, +8, +20, +2, +32, +73, +24, -16, -13, --38, -14, -13, --1, --37, --21, -38, -5, +0, +-30, +17, +52, -10, -51, -34, -44, --9, -36, --14, --3, +28, +-43, -1, -14, --25, -7, -38, --49, -24, --3, --7, --55, -42, -23, --35, -61, -21, -33, --30, -26, --44, --24, -50, -37, -43, -22, -3, -34, +16, +-4, +39, +31, +5, +5, +3, 36, -24, --32, --14, --20, -12, -53, --3, -67, -24, -23, 48, --21, +5, +28, +12, +57, +25, +-28, 14, +34, 49, -40, -49, -2, -89, -62, --3, -24, --27, -51, +11, +41, +20, +-12, +-18, +-43, +-29, +58, +26, +44, +36, +-100, +-46, +-24, +0, +54, +4, +-2, +21, +5, +-12, 22, -30, +9, +-35, -5, --8, -7, --29, +-36, +-22, +-10, +-11, +-15, +34, +20, +-33, 17, -85, -78, -49, -66, --18, --19, -14, --35, --45, -85, -31, +39, +-13, +-32, +-36, +-22, +-3, +-38, +-39, +-6, +0, +15, +-6, +-15, +9, +-10, +45, 16, +17, 13, +-8, +15, +11, +-4, +59, +18, +-9, +12, +69, +27, +-30, +16, +7, +30, +41, +-30, +9, +-4, +23, +-5, 8, --35, -38, --11, --19, -19, --14, --15, -1, --25, -47, --32, 3, -31, -39, -42, +-75, +-25, 5, -7, +14, +12, +-21, +-21, +6, +-13, +15, +8, +-6, +30, +24, +41, +-12, +5, +39, +18, +-4, +-60, 19, --31, -25, +-1, +-3, +-7, +16, +-11, +-51, +2, +-10, -17, -7, +-32, +39, +-35, +-46, +10, +27, 1, -7, --6, -2, +21, +13, +78, +-12, -2, +-28, +-20, +11, +75, +85, +-18, +21, +-7, +-9, +33, 19, --15, -8, -34, --35, --8, -84, -57, --65, +71, +23, +25, +2, 47, +32, +8, +24, +46, +-22, +23, 18, -17, --60, --7, -29, -3, -1, --5, --28, -4, --6, --46, +-58, +66, +52, +22, +32, +25, -34, -47, -12, -9, -59, -19, +-26, +-21, +-69, 6, -18, -29, --14, -5, -3, --24, -43, +27, +-28, +-13, +-15, 10, -13, --53, -8, -9, --41, -14, -12, +-20, +-16, +20, +25, +7, +22, +52, +-4, -8, -28, -21, --2, -92, +-18, +-6, -36, --16, -23, -10, -34, --2, -13, -14, -45, --15, -64, --16, +6, +-26, +12, +32, +8, 11, -34, --29, -48, -40, -71, -30, --21, +16, 0, -34, -8, -46, --45, -24, -54, -3, +-18, +-33, +-10, +11, +-40, +-6, -29, -17, --9, -61, --36, +-34, +-30, +15, +15, +-27, +9, +8, +-43, +0, +-5, +4, +12, +60, +-11, +-4, +-32, +-25, -38, -5, +-37, +-17, +-1, +20, +37, +43, +7, +-2, +12, +-7, +-7, +-14, +-30, +9, +50, +-18, +-9, +-1, +-9, 6, -56, -28, -55, -28, +16, +-38, -13, --21, -44, --31, --20, +30, }; -#define SIZE 32 +#define SIZE 24 __attribute__ ((section(".heapsram"))) char g_mA[SIZE][SIZE]; __attribute__ ((section(".heapsram"))) char g_mB[SIZE][SIZE]; __attribute__ ((section(".heapsram"))) char g_mC[SIZE][SIZE]; diff --git a/carfield/parallel-bare-tests.yaml b/carfield/parallel-bare-tests.yaml deleted file mode 100644 index c75cb86..0000000 --- a/carfield/parallel-bare-tests.yaml +++ /dev/null @@ -1,5 +0,0 @@ - -parallel_bare_tests: - parMatrixMul32: - path: ./parMatrixMul32 #ok - command: make clean all run \ No newline at end of file From cf35cd0d4a77ff1779e939f10631ff5f72a1aa76 Mon Sep 17 00:00:00 2001 From: Riccardo Tedeschi Date: Mon, 12 Feb 2024 18:49:08 +0100 Subject: [PATCH 17/71] Add yaml file to automate execution of Carfield tests --- carfield.yaml | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) create mode 100644 carfield.yaml diff --git a/carfield.yaml b/carfield.yaml new file mode 100644 index 0000000..2055dcc --- /dev/null +++ b/carfield.yaml @@ -0,0 +1,16 @@ +carfield: + parMatrixMul8: + path: ./carfield/parMatrixMul8 #ok + command: make clean all run + parMatrixMul16: + path: ./carfield/parMatrixMul16 #ok + command: make clean all run + parMatrixMul32: + path: ./carfield/parMatrixMul32 #ok + command: make clean all run + dmr_matmul: + path: ./carfield/dmr_matmul #ok + command: make clean all run + redmule: + path: ./carfield/redmule #ok + command: make clean all run \ No newline at end of file From 11479f8ef91663f97101f3f1b3bf55708332e166 Mon Sep 17 00:00:00 2001 From: Yvan Tortorella Date: Tue, 27 Feb 2024 19:38:23 +0100 Subject: [PATCH 18/71] Added regression test for TCDM scrubber, --- carfield/ecc_test/Makefile | 6 ++++ carfield/ecc_test/ecc_test.c | 56 ++++++++++++++++++++++++++++++++++++ 2 files changed, 62 insertions(+) create mode 100755 carfield/ecc_test/Makefile create mode 100644 carfield/ecc_test/ecc_test.c diff --git a/carfield/ecc_test/Makefile b/carfield/ecc_test/Makefile new file mode 100755 index 0000000..a7acce4 --- /dev/null +++ b/carfield/ecc_test/Makefile @@ -0,0 +1,6 @@ +PULP_APP = test +PULP_APP_SRCS = ecc_test.c + +PULP_CFLAGS = -O3 + +include $(PULP_SDK_HOME)/install/rules/pulp.mk diff --git a/carfield/ecc_test/ecc_test.c b/carfield/ecc_test/ecc_test.c new file mode 100644 index 0000000..c1e563c --- /dev/null +++ b/carfield/ecc_test/ecc_test.c @@ -0,0 +1,56 @@ +/* + * Copyright (C) 2018 ETH Zurich and University of Bologna + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include +#include +#include +#include + +#define SIZE 0x400 +#define NUM_BANKS 16 +#define SCRUBBER_INTERVAL 2 + +int main() { + // Collecting info about the core ID and the running cluster ID + unsigned int core_id = get_core_id(); + unsigned int cluster_id = rt_cluster_id(); + + if (rt_cluster_id() != 0) return bench_cluster_forward(0); + + if (core_id != 0) synch_barrier(); + + unsigned int *test_array = pi_l1_malloc(cluster_id, SIZE); + + // Initializing the memory + for (int i = 0; i < SIZE; i++) { + pulp_write32(&test_array[i], i); + } + + // Initialize the scrubbing interval for all memory banks + for (int i = 0; i < NUM_BANKS; i++) + tcdm_scrubber_set_interval(cluster_id, i, SCRUBBER_INTERVAL); + + // Initialize the error vector + unsigned int error = 0; + for (int i = 0; i < SIZE; i++) { + error += (pulp_read32(&test_array[i]) != i); + if (error != 0) + printf("Expected 0x%x, got 0x%x\n", i, pulp_read32(&test_array[i])); + } + + return error; + +} From 460e60dc848af5eac80993f49c5a8fdbde7479a8 Mon Sep 17 00:00:00 2001 From: Yvan Tortorella Date: Wed, 28 Feb 2024 15:46:28 +0100 Subject: [PATCH 19/71] Fix error-checking function. --- carfield/ecc_test/ecc_test.c | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/carfield/ecc_test/ecc_test.c b/carfield/ecc_test/ecc_test.c index c1e563c..9972bad 100644 --- a/carfield/ecc_test/ecc_test.c +++ b/carfield/ecc_test/ecc_test.c @@ -43,12 +43,15 @@ int main() { for (int i = 0; i < NUM_BANKS; i++) tcdm_scrubber_set_interval(cluster_id, i, SCRUBBER_INTERVAL); - // Initialize the error vector + // Initialize the error-tracking variables + bool mismatch = 0; unsigned int error = 0; for (int i = 0; i < SIZE; i++) { - error += (pulp_read32(&test_array[i]) != i); - if (error != 0) + mismatch = (pulp_read32(&test_array[i]) != i); + if (mismatch) { + error ++; printf("Expected 0x%x, got 0x%x\n", i, pulp_read32(&test_array[i])); + } } return error; From 28823bcc69cfb3a994cedc5045c15844ee0a9794 Mon Sep 17 00:00:00 2001 From: Riccardo Tedeschi Date: Wed, 28 Feb 2024 17:51:13 +0100 Subject: [PATCH 20/71] Add fault injection capabilities to selected tests --- carfield/dmr_matmul/Makefile | 5 +++ carfield/dmr_matmul/pulp_inject_fault.tcl | 51 ++++++++++++++++++++++ carfield/ecc_test/Makefile | 5 +++ carfield/ecc_test/pulp_inject_fault.tcl | 53 +++++++++++++++++++++++ 4 files changed, 114 insertions(+) create mode 100644 carfield/dmr_matmul/pulp_inject_fault.tcl create mode 100644 carfield/ecc_test/pulp_inject_fault.tcl diff --git a/carfield/dmr_matmul/Makefile b/carfield/dmr_matmul/Makefile index 92be562..697ed29 100644 --- a/carfield/dmr_matmul/Makefile +++ b/carfield/dmr_matmul/Makefile @@ -4,4 +4,9 @@ PULP_APP_SRCS = dmr_matmul.c PULP_CFLAGS = -O3 PULP_LDFLAGS = -lm +ifdef fault_inject + export FAULT_INJECTION=1 + export FAULT_INJECTION_SCRIPT=pulp_inject_fault.tcl +endif + include $(PULP_SDK_HOME)/install/rules/pulp.mk diff --git a/carfield/dmr_matmul/pulp_inject_fault.tcl b/carfield/dmr_matmul/pulp_inject_fault.tcl new file mode 100644 index 0000000..857d373 --- /dev/null +++ b/carfield/dmr_matmul/pulp_inject_fault.tcl @@ -0,0 +1,51 @@ +# Copyright 2023 ETH Zurich and University of Bologna. +# Solderpad Hardware License, Version 0.51, see LICENSE for details. +# SPDX-License-Identifier: SHL-0.51 +# +# Author: Michael Rogenmoser (michaero@iis.ee.ethz.ch) + +transcript quietly +if {! [info exists ::env(VSIM_PATH)]} {error "Define VSIM_PATH"} +set utils_base_path [file join $::env(VSIM_PATH) scripts fault_injection_utils] +set script_base_path [file join $::env(VSIM_PATH) fault_injection_sim scripts] + +set verbosity 2 +set log_injections 1 +# Easy way to generate a variable seed +# set seed [clock seconds] +# Default value +set seed 12345 +set print_statistics 1 + +set inject_start_time 250856000000ps +set inject_stop_time 413000000000ps +set injection_clock "pulp_cluster_tb/cluster_i/clk_i" +set injection_clock_trigger 0 +set fault_period 250 +set rand_initial_injection_phase 0 +# max_num set to 0 means until stop_time +set max_num_fault_inject 0 +set signal_fault_duration 20ns +set register_fault_duration 0ns + +set allow_multi_bit_upset 1 +set use_bitwidth_as_weight 0 +set check_core_output_modification 0 +set check_core_next_state_modification 0 +set reg_to_sig_ratio 1 + +source [file join $utils_base_path pulp_extract_nets.tcl] + +set inject_signals_netlist [] +set inject_register_netlist [] +set output_netlist [] +set next_state_netlist [] +set assertion_disable_list [] + +for {set idx 0} {$idx < 12} {incr idx} { + set inject_signals_netlist [list {*}$inject_signals_netlist {*}[get_all_core_nets $idx]] + set output_netlist [list {*}$output_netlist {*}[get_core_output_nets $idx]] +} + +source [file join $script_base_path inject_fault.tcl] + diff --git a/carfield/ecc_test/Makefile b/carfield/ecc_test/Makefile index a7acce4..bd2720e 100755 --- a/carfield/ecc_test/Makefile +++ b/carfield/ecc_test/Makefile @@ -3,4 +3,9 @@ PULP_APP_SRCS = ecc_test.c PULP_CFLAGS = -O3 +ifdef fault_inject + export FAULT_INJECTION=1 + export FAULT_INJECTION_SCRIPT=pulp_inject_fault.tcl +endif + include $(PULP_SDK_HOME)/install/rules/pulp.mk diff --git a/carfield/ecc_test/pulp_inject_fault.tcl b/carfield/ecc_test/pulp_inject_fault.tcl new file mode 100644 index 0000000..e34e551 --- /dev/null +++ b/carfield/ecc_test/pulp_inject_fault.tcl @@ -0,0 +1,53 @@ +# Copyright 2023 ETH Zurich and University of Bologna. +# Solderpad Hardware License, Version 0.51, see LICENSE for details. +# SPDX-License-Identifier: SHL-0.51 +# +# Author: Michael Rogenmoser (michaero@iis.ee.ethz.ch) + +transcript quietly +if {! [info exists ::env(VSIM_PATH)]} {error "Define VSIM_PATH"} +set utils_base_path [file join $::env(VSIM_PATH) scripts fault_injection_config] +set script_base_path [file join $::env(VSIM_PATH) fault_injection_sim scripts] + +set verbosity 2 +set log_injections 1 +# Easy way to generate a variable seed +# set seed [clock seconds] +# Default value +set seed 12345 +set print_statistics 1 + +set inject_start_time 110584000000ps +set inject_stop_time 203880000000ps +set injection_clock "pulp_cluster_tb/cluster_i/clk_i" +set injection_clock_trigger 0 +set fault_period 100 +set rand_initial_injection_phase 0 +# max_num set to 0 means until stop_time +set max_num_fault_inject 0 +set signal_fault_duration 20ns +set register_fault_duration 0ns + +set allow_multi_bit_upset 1 +set use_bitwidth_as_weight 0 +set check_core_output_modification 0 +set check_core_next_state_modification 0 +set reg_to_sig_ratio 1 + +source [file join $utils_base_path pulp_extract_nets.tcl] + +set inject_signals_netlist [] +set inject_register_netlist [] +set output_netlist [] +set next_state_netlist [] +set assertion_disable_list [] + +# for {set idx 0} {$idx < 12} {incr idx} { +# set inject_signals_netlist [list {*}$inject_signals_netlist {*}[get_all_core_nets $idx]] +# set output_netlist [list {*}$output_netlist {*}[get_core_output_nets $idx]] +# } + +set inject_register_netlist [list {*}$inject_register_netlist {*}[get_memory_slice {0 16} {385 449}]] + +source [file join $script_base_path inject_fault.tcl] + From 8c22bb3057d3873b539a1c8a8e605d6a10a1891f Mon Sep 17 00:00:00 2001 From: Riccardo Tedeschi Date: Wed, 6 Mar 2024 16:45:52 +0100 Subject: [PATCH 21/71] Update ECC test to inject single or multiple bitflips --- carfield/ecc_test/Makefile | 6 +++++- carfield/ecc_test/ecc_test.c | 12 +++++++++++- carfield/ecc_test/pulp_inject_fault.tcl | 4 ++-- 3 files changed, 18 insertions(+), 4 deletions(-) diff --git a/carfield/ecc_test/Makefile b/carfield/ecc_test/Makefile index bd2720e..05536c6 100755 --- a/carfield/ecc_test/Makefile +++ b/carfield/ecc_test/Makefile @@ -5,7 +5,11 @@ PULP_CFLAGS = -O3 ifdef fault_inject export FAULT_INJECTION=1 - export FAULT_INJECTION_SCRIPT=pulp_inject_fault.tcl + export FAULT_INJECTION_SCRIPT=$(CURDIR)/pulp_inject_fault.tcl +endif + +ifdef multi_bit_upset + export MULTI_BIT_UPSET=1 endif include $(PULP_SDK_HOME)/install/rules/pulp.mk diff --git a/carfield/ecc_test/ecc_test.c b/carfield/ecc_test/ecc_test.c index 9972bad..bd6c276 100644 --- a/carfield/ecc_test/ecc_test.c +++ b/carfield/ecc_test/ecc_test.c @@ -54,6 +54,16 @@ int main() { } } - return error; + unsigned int mismatch_cnt = 0; + unsigned int fix_cnt = 0; + unsigned int uncorrectable_cnt = 0; + for (int i = 0; i < 16; i++) { + mismatch_cnt += tcdm_scrubber_get_mismatch_count(cluster_id, i); + fix_cnt += tcdm_scrubber_get_fix_count(cluster_id, i); + uncorrectable_cnt += tcdm_scrubber_get_uncorrectable_count(cluster_id, i); + } + + printf("mismatch_cnt: %d, fix_cnt: %d, uncorrectable_cnt: %d\n", mismatch_cnt, fix_cnt, uncorrectable_cnt); + return (error != 0) || (uncorrectable_cnt != 0); } diff --git a/carfield/ecc_test/pulp_inject_fault.tcl b/carfield/ecc_test/pulp_inject_fault.tcl index e34e551..e22ff1f 100644 --- a/carfield/ecc_test/pulp_inject_fault.tcl +++ b/carfield/ecc_test/pulp_inject_fault.tcl @@ -6,7 +6,7 @@ transcript quietly if {! [info exists ::env(VSIM_PATH)]} {error "Define VSIM_PATH"} -set utils_base_path [file join $::env(VSIM_PATH) scripts fault_injection_config] +set utils_base_path [file join $::env(VSIM_PATH) scripts fault_injection_utils] set script_base_path [file join $::env(VSIM_PATH) fault_injection_sim scripts] set verbosity 2 @@ -28,7 +28,7 @@ set max_num_fault_inject 0 set signal_fault_duration 20ns set register_fault_duration 0ns -set allow_multi_bit_upset 1 +set allow_multi_bit_upset [info exists ::env(MULTI_BIT_UPSET)] set use_bitwidth_as_weight 0 set check_core_output_modification 0 set check_core_next_state_modification 0 From 1563f0882242d30c7c6661525c917fc33ba42347 Mon Sep 17 00:00:00 2001 From: Riccardo Tedeschi Date: Wed, 6 Mar 2024 16:56:07 +0100 Subject: [PATCH 22/71] Use XOR over OR in ECC test return condition When simulating multiple bitflips, it is expected that `error != 0` --- carfield/ecc_test/ecc_test.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/carfield/ecc_test/ecc_test.c b/carfield/ecc_test/ecc_test.c index bd6c276..d3c92bd 100644 --- a/carfield/ecc_test/ecc_test.c +++ b/carfield/ecc_test/ecc_test.c @@ -65,5 +65,5 @@ int main() { printf("mismatch_cnt: %d, fix_cnt: %d, uncorrectable_cnt: %d\n", mismatch_cnt, fix_cnt, uncorrectable_cnt); - return (error != 0) || (uncorrectable_cnt != 0); + return (error != 0) ^ (uncorrectable_cnt != 0); } From ad3aeeff90e4b754805a14230a5c39157cc14f96 Mon Sep 17 00:00:00 2001 From: Riccardo Tedeschi Date: Mon, 11 Mar 2024 13:15:34 +0100 Subject: [PATCH 23/71] Fix fault injection toggle via CLI --- carfield/dmr_matmul/Makefile | 4 ++-- carfield/ecc_test/Makefile | 4 ++-- carfield/ecc_test/pulp_inject_fault.tcl | 2 +- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/carfield/dmr_matmul/Makefile b/carfield/dmr_matmul/Makefile index 697ed29..66ed60e 100644 --- a/carfield/dmr_matmul/Makefile +++ b/carfield/dmr_matmul/Makefile @@ -4,9 +4,9 @@ PULP_APP_SRCS = dmr_matmul.c PULP_CFLAGS = -O3 PULP_LDFLAGS = -lm -ifdef fault_inject +ifeq ($(fault_inject),1) export FAULT_INJECTION=1 - export FAULT_INJECTION_SCRIPT=pulp_inject_fault.tcl + export FAULT_INJECTION_SCRIPT=$(CURDIR)/pulp_inject_fault.tcl endif include $(PULP_SDK_HOME)/install/rules/pulp.mk diff --git a/carfield/ecc_test/Makefile b/carfield/ecc_test/Makefile index 05536c6..d19f286 100755 --- a/carfield/ecc_test/Makefile +++ b/carfield/ecc_test/Makefile @@ -3,12 +3,12 @@ PULP_APP_SRCS = ecc_test.c PULP_CFLAGS = -O3 -ifdef fault_inject +ifeq ($(fault_inject),1) export FAULT_INJECTION=1 export FAULT_INJECTION_SCRIPT=$(CURDIR)/pulp_inject_fault.tcl endif -ifdef multi_bit_upset +ifeq ($(multi_bit_upset),1) export MULTI_BIT_UPSET=1 endif diff --git a/carfield/ecc_test/pulp_inject_fault.tcl b/carfield/ecc_test/pulp_inject_fault.tcl index e22ff1f..45cef47 100644 --- a/carfield/ecc_test/pulp_inject_fault.tcl +++ b/carfield/ecc_test/pulp_inject_fault.tcl @@ -28,7 +28,7 @@ set max_num_fault_inject 0 set signal_fault_duration 20ns set register_fault_duration 0ns -set allow_multi_bit_upset [info exists ::env(MULTI_BIT_UPSET)] +set allow_multi_bit_upset $::env(MULTI_BIT_UPSET) set use_bitwidth_as_weight 0 set check_core_output_modification 0 set check_core_next_state_modification 0 From 126a1c56a6774d235f52b05ea1e3d5566606effd Mon Sep 17 00:00:00 2001 From: Yvan Tortorella Date: Sat, 23 Mar 2024 20:14:51 +0100 Subject: [PATCH 24/71] Add astral target. --- astral.yaml | 16 + astral/dmr_matmul/Makefile | 12 + astral/dmr_matmul/dmr_matmul.c | 100 + astral/dmr_matmul/matmul.h | 56 + astral/dmr_matmul/pulp_inject_fault.tcl | 51 + astral/ecc_test/Makefile | 15 + astral/ecc_test/ecc_test.c | 69 + astral/ecc_test/pulp_inject_fault.tcl | 53 + astral/hello/Makefile | 5 + astral/hello/hello.c | 24 + astral/parMatrixMul16/Makefile | 8 + astral/parMatrixMul16/gen_stimuli.py | 54 + astral/parMatrixMul16/matrixMul.c | 177 ++ .../parMatrixMul16/parMatrixMul16_stimuli.h | 1742 +++++++++++++++++ astral/parMatrixMul32/Makefile | 8 + astral/parMatrixMul32/gen_stimuli.py | 54 + astral/parMatrixMul32/matrixMul.c | 177 ++ .../parMatrixMul32/parMatrixMul32_stimuli.h | 1742 +++++++++++++++++ astral/parMatrixMul8/Makefile | 8 + astral/parMatrixMul8/gen_stimuli.py | 54 + astral/parMatrixMul8/matrixMul.c | 177 ++ astral/parMatrixMul8/parMatrixMul8_stimuli.h | 1742 +++++++++++++++++ astral/redmule/Makefile | 9 + astral/redmule/archi_redmule.h | 164 ++ astral/redmule/hal_redmule.h | 527 +++++ astral/redmule/inc/golden.h | 387 ++++ astral/redmule/inc/tensor_dim.h | 13 + astral/redmule/inc/w_2D.h | 35 + astral/redmule/inc/w_input.h | 35 + astral/redmule/inc/x_2D.h | 27 + astral/redmule/inc/x_input.h | 27 + astral/redmule/inc/y_2D.h | 27 + astral/redmule/inc/y_input.h | 27 + astral/redmule/inc/z_2D.h | 27 + astral/redmule/inc/z_output.h | 27 + astral/redmule/redmule.c | 112 ++ 36 files changed, 7788 insertions(+) create mode 100644 astral.yaml create mode 100644 astral/dmr_matmul/Makefile create mode 100644 astral/dmr_matmul/dmr_matmul.c create mode 100644 astral/dmr_matmul/matmul.h create mode 100644 astral/dmr_matmul/pulp_inject_fault.tcl create mode 100755 astral/ecc_test/Makefile create mode 100644 astral/ecc_test/ecc_test.c create mode 100644 astral/ecc_test/pulp_inject_fault.tcl create mode 100644 astral/hello/Makefile create mode 100644 astral/hello/hello.c create mode 100755 astral/parMatrixMul16/Makefile create mode 100755 astral/parMatrixMul16/gen_stimuli.py create mode 100644 astral/parMatrixMul16/matrixMul.c create mode 100644 astral/parMatrixMul16/parMatrixMul16_stimuli.h create mode 100755 astral/parMatrixMul32/Makefile create mode 100755 astral/parMatrixMul32/gen_stimuli.py create mode 100644 astral/parMatrixMul32/matrixMul.c create mode 100644 astral/parMatrixMul32/parMatrixMul32_stimuli.h create mode 100755 astral/parMatrixMul8/Makefile create mode 100755 astral/parMatrixMul8/gen_stimuli.py create mode 100644 astral/parMatrixMul8/matrixMul.c create mode 100644 astral/parMatrixMul8/parMatrixMul8_stimuli.h create mode 100644 astral/redmule/Makefile create mode 100644 astral/redmule/archi_redmule.h create mode 100644 astral/redmule/hal_redmule.h create mode 100644 astral/redmule/inc/golden.h create mode 100644 astral/redmule/inc/tensor_dim.h create mode 100644 astral/redmule/inc/w_2D.h create mode 100644 astral/redmule/inc/w_input.h create mode 100644 astral/redmule/inc/x_2D.h create mode 100644 astral/redmule/inc/x_input.h create mode 100644 astral/redmule/inc/y_2D.h create mode 100644 astral/redmule/inc/y_input.h create mode 100644 astral/redmule/inc/z_2D.h create mode 100644 astral/redmule/inc/z_output.h create mode 100644 astral/redmule/redmule.c diff --git a/astral.yaml b/astral.yaml new file mode 100644 index 0000000..cc65374 --- /dev/null +++ b/astral.yaml @@ -0,0 +1,16 @@ +carfield: + parMatrixMul8: + path: ./astral/parMatrixMul8 #ok + command: make clean all run + parMatrixMul16: + path: ./astral/parMatrixMul16 #ok + command: make clean all run + parMatrixMul32: + path: ./astral/parMatrixMul32 #ok + command: make clean all run + dmr_matmul: + path: ./astral/dmr_matmul #ok + command: make clean all run + redmule: + path: ./astral/redmule #ok + command: make clean all run \ No newline at end of file diff --git a/astral/dmr_matmul/Makefile b/astral/dmr_matmul/Makefile new file mode 100644 index 0000000..66ed60e --- /dev/null +++ b/astral/dmr_matmul/Makefile @@ -0,0 +1,12 @@ +PULP_APP = test +PULP_APP_SRCS = dmr_matmul.c + +PULP_CFLAGS = -O3 +PULP_LDFLAGS = -lm + +ifeq ($(fault_inject),1) + export FAULT_INJECTION=1 + export FAULT_INJECTION_SCRIPT=$(CURDIR)/pulp_inject_fault.tcl +endif + +include $(PULP_SDK_HOME)/install/rules/pulp.mk diff --git a/astral/dmr_matmul/dmr_matmul.c b/astral/dmr_matmul/dmr_matmul.c new file mode 100644 index 0000000..953dfdf --- /dev/null +++ b/astral/dmr_matmul/dmr_matmul.c @@ -0,0 +1,100 @@ +/* +* @Author: Michael Rogenmoser +* @Date: 2023-02-17 18:00:21 +* @Last Modified by: Michael Rogenmoser +* @Last Modified time: 2023-02-17 18:15:33 +*/ +#include +#include +#include "matmul.h" + +#define N_ITERS 1 +#define max(x,y) (x > y ? x : y) +#define min(x,y) (x < y ? x : y) + +__attribute__ ((section(".heapsram"))) int A[SIZE][SIZE]; +__attribute__ ((section(".heapsram"))) int B[SIZE][SIZE]; +__attribute__ ((section(".heapsram"))) int C[SIZE][SIZE]; + +void initialize_mat(); + +void initialize_mat() { + int i,j; + + for (i=0;i +#include +#include +#include + +#define SIZE 0x400 +#define NUM_BANKS 16 +#define SCRUBBER_INTERVAL 2 + +int main() { + // Collecting info about the core ID and the running cluster ID + unsigned int core_id = get_core_id(); + unsigned int cluster_id = rt_cluster_id(); + + if (rt_cluster_id() != 0) return bench_cluster_forward(0); + + if (core_id != 0) synch_barrier(); + + unsigned int *test_array = pi_l1_malloc(cluster_id, SIZE); + + // Initializing the memory + for (int i = 0; i < SIZE; i++) { + pulp_write32(&test_array[i], i); + } + + // Initialize the scrubbing interval for all memory banks + for (int i = 0; i < NUM_BANKS; i++) + tcdm_scrubber_set_interval(cluster_id, i, SCRUBBER_INTERVAL); + + // Initialize the error-tracking variables + bool mismatch = 0; + unsigned int error = 0; + for (int i = 0; i < SIZE; i++) { + mismatch = (pulp_read32(&test_array[i]) != i); + if (mismatch) { + error ++; + printf("Expected 0x%x, got 0x%x\n", i, pulp_read32(&test_array[i])); + } + } + + unsigned int mismatch_cnt = 0; + unsigned int fix_cnt = 0; + unsigned int uncorrectable_cnt = 0; + for (int i = 0; i < 16; i++) { + mismatch_cnt += tcdm_scrubber_get_mismatch_count(cluster_id, i); + fix_cnt += tcdm_scrubber_get_fix_count(cluster_id, i); + uncorrectable_cnt += tcdm_scrubber_get_uncorrectable_count(cluster_id, i); + } + + printf("mismatch_cnt: %d, fix_cnt: %d, uncorrectable_cnt: %d\n", mismatch_cnt, fix_cnt, uncorrectable_cnt); + + return (error != 0) ^ (uncorrectable_cnt != 0); +} diff --git a/astral/ecc_test/pulp_inject_fault.tcl b/astral/ecc_test/pulp_inject_fault.tcl new file mode 100644 index 0000000..45cef47 --- /dev/null +++ b/astral/ecc_test/pulp_inject_fault.tcl @@ -0,0 +1,53 @@ +# Copyright 2023 ETH Zurich and University of Bologna. +# Solderpad Hardware License, Version 0.51, see LICENSE for details. +# SPDX-License-Identifier: SHL-0.51 +# +# Author: Michael Rogenmoser (michaero@iis.ee.ethz.ch) + +transcript quietly +if {! [info exists ::env(VSIM_PATH)]} {error "Define VSIM_PATH"} +set utils_base_path [file join $::env(VSIM_PATH) scripts fault_injection_utils] +set script_base_path [file join $::env(VSIM_PATH) fault_injection_sim scripts] + +set verbosity 2 +set log_injections 1 +# Easy way to generate a variable seed +# set seed [clock seconds] +# Default value +set seed 12345 +set print_statistics 1 + +set inject_start_time 110584000000ps +set inject_stop_time 203880000000ps +set injection_clock "pulp_cluster_tb/cluster_i/clk_i" +set injection_clock_trigger 0 +set fault_period 100 +set rand_initial_injection_phase 0 +# max_num set to 0 means until stop_time +set max_num_fault_inject 0 +set signal_fault_duration 20ns +set register_fault_duration 0ns + +set allow_multi_bit_upset $::env(MULTI_BIT_UPSET) +set use_bitwidth_as_weight 0 +set check_core_output_modification 0 +set check_core_next_state_modification 0 +set reg_to_sig_ratio 1 + +source [file join $utils_base_path pulp_extract_nets.tcl] + +set inject_signals_netlist [] +set inject_register_netlist [] +set output_netlist [] +set next_state_netlist [] +set assertion_disable_list [] + +# for {set idx 0} {$idx < 12} {incr idx} { +# set inject_signals_netlist [list {*}$inject_signals_netlist {*}[get_all_core_nets $idx]] +# set output_netlist [list {*}$output_netlist {*}[get_core_output_nets $idx]] +# } + +set inject_register_netlist [list {*}$inject_register_netlist {*}[get_memory_slice {0 16} {385 449}]] + +source [file join $script_base_path inject_fault.tcl] + diff --git a/astral/hello/Makefile b/astral/hello/Makefile new file mode 100644 index 0000000..d145a0f --- /dev/null +++ b/astral/hello/Makefile @@ -0,0 +1,5 @@ +PULP_APP = test +PULP_APP_SRCS = hello.c +PULP_CFLAGS = -O3 + +include $(PULP_SDK_HOME)/install/rules/pulp.mk diff --git a/astral/hello/hello.c b/astral/hello/hello.c new file mode 100644 index 0000000..8741206 --- /dev/null +++ b/astral/hello/hello.c @@ -0,0 +1,24 @@ +/* + * Copyright (C) 2018 ETH Zurich and University of Bologna + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include + +int main() +{ + printf("Hello !\n"); + + return 0; +} diff --git a/astral/parMatrixMul16/Makefile b/astral/parMatrixMul16/Makefile new file mode 100755 index 0000000..0fade4a --- /dev/null +++ b/astral/parMatrixMul16/Makefile @@ -0,0 +1,8 @@ +PULP_APP = test +PULP_APP_SRCS = matrixMul.c + +PULP_CFLAGS = -O3 + +include $(PULP_SDK_HOME)/install/rules/pulp.mk + +#pulp-bench-reg --name=parMatrixMul16.cycles --module=pulp_rtl_testset --pipeline=$(PIPELINE) --artefact=pulp_rtl_testset --cmd="make run -f Makefile.sdk" --probe-regexp='matrixMul -> success, nr. of errors: 0, execution time: (\d+)' --params="platform($(platformName)),compiler($(OR1K_TOOLCHAIN_TYPE)),nbCores(4),elemSize(16)" --probe-regexp='matrixMulTranspose -> success, nr. of errors: 0, execution time: (\d+)' --params="platform($(platformName)),compiler($(OR1K_TOOLCHAIN_TYPE)),nbCores(4),elemSize(16),transposed" diff --git a/astral/parMatrixMul16/gen_stimuli.py b/astral/parMatrixMul16/gen_stimuli.py new file mode 100755 index 0000000..754a8a9 --- /dev/null +++ b/astral/parMatrixMul16/gen_stimuli.py @@ -0,0 +1,54 @@ +#!/usr/bin/env python + +import sys +import random + + +def write_arr(f, name, arr): + f.write('const short %s[] = {\n' % name) + for v in arr: + f.write('%d,\n' % (v)) + f.write('};\n\n') + return + +################################################################################ +f = open('parMatrixMul16_stimuli.h', 'w') + + +SIZE = 24 +RANGE = int(2**7/SIZE) + +m_a = [] +m_b = [] +m_exp = [] + +for i in range(0,SIZE): + for j in range(0,SIZE): + a = random.randint(-RANGE, RANGE-1) + b = random.randint(-RANGE, RANGE-1) + + m_a.append(a) + m_b.append(b) + +for i in range(0,SIZE): + for j in range(0,SIZE): + r = 0 + + for k in range (0,SIZE): + r = r + m_a[i * SIZE + k] * m_b[k * SIZE + j] + + m_exp.append(r) + + +write_arr(f, 'm_a', m_a) +write_arr(f, 'm_b', m_b) +write_arr(f, 'm_exp', m_exp) + +f.write('#define SIZE %d\n' % SIZE) + + +f.write('__attribute__ ((section(".heapsram"))) short g_mA[SIZE][SIZE];\n') +f.write('__attribute__ ((section(".heapsram"))) short g_mB[SIZE][SIZE];\n') +f.write('__attribute__ ((section(".heapsram"))) short g_mC[SIZE][SIZE];\n') +f.write('__attribute__ ((section(".heapsram"))) short g_mB_tmp[SIZE][SIZE];\n') + diff --git a/astral/parMatrixMul16/matrixMul.c b/astral/parMatrixMul16/matrixMul.c new file mode 100644 index 0000000..5cbe65f --- /dev/null +++ b/astral/parMatrixMul16/matrixMul.c @@ -0,0 +1,177 @@ +/* + * Copyright (C) 2018 ETH Zurich and University of Bologna + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/* + * Mantainer: Luca Valente, luca.valente2@unibo.it + */ + +#include "pulp.h" + +#include "parMatrixMul16_stimuli.h" + +void check_matrix_mul(testresult_t *result, void (*start)(), void (*stop)()); +void check_matrix_mul_transpose(testresult_t *result, void (*start)(), void (*stop)()); + +testcase_t testcases[] = { + { .name = "matrixMul", .test = check_matrix_mul }, + { .name = "matrixMulTranspose", .test = check_matrix_mul_transpose }, + {0, 0} +}; + +unsigned int num_cores; + +int main() +{ + if (rt_cluster_id() != 0) + return bench_cluster_forward(0); + + num_cores = get_core_num(); + + if(rt_core_id() < num_cores) { + run_suite(testcases); + } + + synch_barrier(); + + return 0; +} + +void matrix_init(); +unsigned int matrix_check(); + +void check_matrix_mul(testresult_t *result, void (*start)(), void (*stop)()) { + int core_id; + unsigned int i, j, k; + unsigned int chunk; + unsigned int lb, ub; + + core_id = get_core_id(); + + // number of rows each core has to multiply + chunk = SIZE / num_cores; + // lower bound + lb = core_id * chunk; + // upper bound + ub = lb + chunk; + + if(core_id == 0) { + matrix_init(); + } + + if(num_cores != 1) synch_barrier(); + + // start benchmark + start(); + + for(i = lb; i < ub; i++) { + for(j = 0; j < SIZE; j++) { + g_mC[i][j] = 0; + + for(k = 0; k < SIZE; k++) { + g_mC[i][j] += g_mA[i][k] * g_mB[k][j]; + } + } + } + + if(num_cores != 1) synch_barrier(); + + stop(); + + if(core_id == 0) { + result->errors = matrix_check(); + } +} + +void check_matrix_mul_transpose(testresult_t *result, void (*start)(), void (*stop)()) { + int core_id; + unsigned int i, j, k; + unsigned int chunk; + unsigned int lb, ub; + + core_id = get_core_id(); + + // number of rows each core has to multiply + chunk = SIZE / num_cores; + // lower bound + lb = core_id * chunk; + // upper bound + ub = lb + chunk; + + if(core_id == 0) { + matrix_init(); + } + + if(num_cores != 1) synch_barrier(); + + // start benchmark + start(); + + // transpose array before using it + for(i = lb; i < ub; i++) { + for(j = 0; j < SIZE; j++) { + g_mB_tmp[i][j] = g_mB[j][i]; + } + } + + if(num_cores != 1) synch_barrier(); + + for(i = lb; i < ub; i++) { + for(j = 0; j < SIZE; j++) { + g_mC[i][j] = 0; + + for(k = 0; k < SIZE; k++) { + g_mC[i][j] += g_mA[i][k] * g_mB_tmp[j][k]; + } + } + } + + if(num_cores != 1) synch_barrier(); + + stop(); + + if(core_id == 0) { + result->errors = matrix_check(); + } +} + +void matrix_init() { + unsigned int i, j; + + // init, copy to TCDM + for(i = 0; i < SIZE; i++) { + for(j = 0; j < SIZE; j++) { + g_mA[i][j] = m_a[i * SIZE + j]; + g_mB[i][j] = m_b[i * SIZE + j]; + g_mC[i][j] = 0; + } + } +} + +unsigned int matrix_check() { + unsigned int errors = 0; + unsigned int i, j; + // check + for(i = 0; i < SIZE; i++) { + for(j = 0; j < SIZE; j++) { + if(g_mC[i][j] != m_exp[i * SIZE + j]) { + printf("At index %d, %d\n", i, j, 0, 0); + errors++; + } + } + } + + return errors; +} diff --git a/astral/parMatrixMul16/parMatrixMul16_stimuli.h b/astral/parMatrixMul16/parMatrixMul16_stimuli.h new file mode 100644 index 0000000..2797565 --- /dev/null +++ b/astral/parMatrixMul16/parMatrixMul16_stimuli.h @@ -0,0 +1,1742 @@ +const short m_a[] = { +3, +2, +-4, +0, +0, +0, +-5, +-3, +2, +4, +0, +2, +2, +-3, +2, +-1, +-2, +-1, +1, +4, +-3, +-3, +-1, +0, +4, +-2, +-1, +-4, +-1, +4, +1, +3, +-2, +-2, +-2, +-1, +3, +-5, +2, +0, +1, +-1, +-4, +4, +0, +-2, +4, +-5, +3, +-3, +-4, +3, +-2, +2, +-2, +3, +3, +4, +0, +-4, +4, +0, +3, +-5, +1, +0, +0, +2, +-3, +-2, +-3, +4, +-3, +1, +-5, +-5, +2, +-3, +-3, +-2, +-4, +0, +4, +1, +1, +0, +4, +0, +-3, +-3, +-1, +-2, +-5, +4, +-2, +1, +3, +-1, +-1, +-4, +4, +-1, +3, +-3, +2, +2, +3, +1, +2, +1, +2, +4, +-4, +-3, +-2, +-3, +4, +0, +1, +0, +-3, +0, +-2, +-3, +1, +3, +4, +-1, +4, +4, +3, +-4, +-5, +3, +2, +4, +-4, +4, +1, +-2, +2, +-1, +4, +2, +2, +-5, +0, +-2, +-4, +2, +-3, +-1, +4, +0, +4, +4, +1, +4, +4, +-3, +3, +4, +-2, +4, +-4, +2, +-2, +-3, +3, +1, +3, +3, +0, +-4, +1, +-4, +4, +2, +-2, +-5, +-4, +-4, +2, +-1, +-2, +0, +4, +-3, +4, +-5, +3, +-1, +-5, +-4, +-2, +-5, +4, +-2, +3, +-3, +4, +3, +-4, +4, +3, +-3, +4, +-1, +3, +-4, +-5, +1, +-3, +-4, +2, +3, +2, +-2, +4, +3, +2, +-4, +0, +-2, +-5, +-3, +3, +1, +3, +-5, +3, +1, +-5, +1, +-2, +-4, +1, +-5, +4, +1, +0, +0, +-4, +-2, +2, +0, +-3, +-4, +-1, +-5, +-2, +-4, +-2, +3, +4, +-5, +0, +2, +2, +4, +0, +4, +-5, +-3, +-5, +-5, +0, +0, +-4, +3, +1, +1, +-5, +2, +-5, +2, +-4, +3, +4, +-3, +-4, +4, +-2, +-4, +4, +-3, +-5, +-4, +2, +-2, +3, +-2, +1, +4, +1, +4, +-2, +1, +-4, +4, +2, +-1, +1, +1, +-2, +-2, +0, +-5, +2, +4, +-4, +1, +-5, +0, +4, +3, +-4, +1, +-3, +-4, +2, +-3, +-3, +1, +2, +4, +-3, +-2, +3, +-3, +-5, +4, +-5, +-5, +4, +4, +3, +-1, +-3, +-4, +-1, +1, +0, +1, +4, +-1, +0, +1, +-4, +0, +-4, +-3, +0, +-4, +2, +-2, +-2, +-1, +-2, +0, +-5, +-1, +-3, +3, +4, +-4, +4, +4, +0, +-4, +-3, +-3, +4, +0, +2, +3, +-1, +2, +0, +-4, +3, +-1, +-3, +-4, +4, +0, +4, +3, +0, +-3, +-5, +4, +-3, +3, +4, +3, +-1, +3, +-3, +1, +3, +4, +3, +-1, +3, +2, +4, +4, +-2, +-1, +2, +-4, +-4, +-1, +0, +-1, +4, +-4, +4, +2, +0, +0, +1, +-1, +-5, +1, +-5, +2, +-2, +2, +1, +3, +1, +-3, +-4, +-2, +0, +4, +-2, +0, +-1, +-1, +-3, +-2, +4, +3, +4, +2, +3, +4, +-4, +-2, +-1, +-2, +0, +-1, +-1, +-4, +-2, +2, +-5, +4, +-5, +0, +4, +4, +-2, +-4, +1, +-5, +-5, +4, +-3, +0, +-1, +-5, +4, +-4, +0, +4, +4, +-4, +-2, +-4, +1, +-4, +-5, +4, +-5, +-3, +2, +-2, +-1, +-3, +0, +-3, +-2, +4, +-5, +-5, +3, +-5, +-1, +3, +2, +3, +0, +-2, +-3, +-4, +3, +0, +3, +3, +-1, +-4, +0, +3, +-5, +-3, +4, +-3, +2, +-1, +0, +2, +-1, +3, +-1, +-5, +3, +4, +3, +3, +4, +3, +1, +-4, +1, +-2, +4, +-3, +2, +0, +-2, +-5, +-5, +-2, +-2, +0, +4, +0, +-4, +-1, +0, +-5, +-3, +4, +0, +1, +-3, +3, +-2, +-2, +2, +-1, +-1, +-3, +-1, +-2, +-5, +-5, +-1, +-1, +-4, +-4, +}; + +const short m_b[] = { +-2, +3, +2, +-5, +-3, +2, +0, +-5, +1, +-3, +-2, +-3, +-3, +3, +-4, +-2, +-4, +1, +1, +1, +4, +4, +3, +3, +-4, +-3, +-2, +-2, +-3, +-2, +-1, +-5, +-4, +1, +-4, +-3, +3, +-5, +-5, +-4, +-2, +-2, +1, +3, +3, +3, +4, +0, +1, +0, +4, +3, +-3, +3, +-1, +0, +2, +-1, +-1, +0, +0, +3, +-4, +4, +3, +3, +-1, +-4, +-1, +-4, +-2, +-4, +-4, +3, +0, +3, +-4, +2, +0, +0, +-4, +-5, +-4, +4, +0, +-4, +-2, +-4, +3, +4, +-4, +-3, +-2, +0, +-2, +2, +-5, +2, +1, +2, +0, +0, +-2, +-2, +-1, +1, +-1, +3, +3, +-1, +3, +-1, +-2, +1, +-3, +3, +3, +3, +2, +0, +1, +-2, +1, +4, +3, +-2, +-5, +0, +2, +0, +1, +-3, +-1, +3, +-3, +-2, +3, +4, +-2, +-1, +-5, +1, +-1, +2, +-3, +-4, +0, +-1, +0, +2, +3, +4, +-4, +-1, +-1, +2, +-1, +-5, +1, +-3, +0, +-4, +0, +-1, +2, +-5, +-1, +1, +-2, +-5, +-3, +-3, +2, +2, +-4, +2, +-5, +-4, +4, +4, +-1, +1, +2, +-1, +-3, +0, +2, +4, +-3, +-2, +-1, +4, +-5, +4, +0, +-1, +-1, +-4, +-3, +-3, +-1, +-2, +-1, +-2, +-5, +2, +2, +-3, +1, +-1, +-2, +0, +0, +1, +0, +4, +-4, +-4, +-4, +-5, +4, +-4, +4, +-3, +4, +-5, +-2, +3, +-2, +-4, +1, +2, +-5, +-2, +-5, +-3, +2, +-1, +3, +-4, +-4, +4, +-3, +-5, +0, +-3, +2, +2, +3, +-3, +-3, +-2, +-5, +4, +1, +3, +-1, +-4, +3, +1, +-2, +1, +3, +4, +1, +-2, +0, +0, +-3, +-1, +1, +-1, +0, +-5, +-2, +-1, +1, +-2, +4, +-3, +2, +1, +0, +0, +3, +-4, +2, +1, +0, +3, +-5, +-1, +4, +3, +4, +-2, +-1, +-3, +-4, +3, +3, +-4, +4, +-5, +1, +-1, +0, +3, +4, +3, +-3, +-5, +-3, +-2, +-4, +1, +-2, +-3, +-2, +1, +2, +4, +4, +0, +2, +4, +0, +-1, +1, +-4, +-1, +-3, +-2, +-5, +3, +-3, +-1, +0, +-3, +-3, +-4, +3, +3, +-5, +-2, +-1, +3, +1, +1, +1, +3, +1, +1, +-5, +-2, +2, +4, +3, +-3, +-5, +3, +-4, +0, +2, +-4, +-5, +-3, +-3, +-3, +2, +-1, +-3, +1, +-3, +-1, +-5, +2, +1, +1, +-3, +2, +4, +1, +-5, +3, +0, +-5, +-4, +2, +-5, +3, +-1, +0, +2, +-3, +-1, +-2, +-5, +-4, +0, +-5, +-3, +3, +1, +0, +-1, +-4, +1, +-4, +-5, +-1, +3, +3, +-3, +-1, +4, +-1, +-5, +-4, +-1, +0, +1, +1, +4, +-3, +-2, +4, +1, +-4, +-1, +-3, +2, +-2, +4, +2, +-1, +2, +-4, +-3, +4, +-1, +1, +-4, +0, +1, +-4, +4, +-4, +-5, +-5, +-3, +2, +2, +-1, +0, +-2, +-5, +1, +-1, +-5, +2, +-4, +-5, +-3, +1, +-4, +0, +1, +-5, +0, +-2, +1, +-4, +-5, +3, +0, +1, +2, +4, +-1, +-4, +0, +-4, +0, +-5, +3, +-5, +-5, +2, +2, +3, +-3, +4, +4, +2, +3, +-2, +4, +3, +4, +1, +1, +0, +2, +2, +4, +-1, +-5, +-5, +3, +-5, +-2, +-4, +-4, +0, +4, +3, +0, +4, +-3, +4, +0, +-1, +3, +2, +-4, +2, +-1, +-3, +-5, +-3, +3, +-4, +1, +-3, +3, +-4, +0, +3, +-2, +-1, +2, +-4, +2, +4, +0, +2, +-2, +-5, +0, +-1, +-5, +4, +-4, +3, +-1, +4, +1, +4, +0, +-1, +1, +4, +3, +3, +1, +2, +-3, +-2, +-5, +-2, +1, +-5, +-4, +-5, +-2, +}; + +const short m_exp[] = { +-32, +48, +2, +-56, +46, +-52, +39, +-77, +41, +-50, +-50, +-14, +-45, +-31, +3, +-22, +-52, +-31, +-32, +8, +61, +97, +49, +-12, +12, +-25, +-26, +-15, +15, +45, +-29, +-27, +-7, +-23, +30, +-36, +-56, +27, +-59, +35, +6, +44, +72, +23, +17, +86, +-8, +5, +-25, +41, +-30, +-78, +120, +-1, +69, +-20, +24, +-66, +6, +68, +-59, +2, +27, +-21, +-71, +-61, +-49, +21, +-24, +27, +-47, +29, +71, +37, +-9, +-58, +13, +13, +73, +-9, +7, +28, +23, +35, +46, +-8, +86, +-7, +25, +-65, +-18, +43, +58, +22, +44, +-51, +-33, +10, +-18, +-17, +-62, +24, +18, +-68, +23, +25, +23, +-32, +23, +37, +55, +-16, +24, +4, +-16, +9, +77, +44, +48, +-36, +-81, +-100, +-18, +36, +-3, +-72, +-43, +38, +-2, +34, +53, +-42, +-18, +56, +19, +34, +3, +-58, +-16, +-34, +-71, +-12, +12, +-22, +-9, +57, +-46, +-70, +25, +-62, +10, +-5, +68, +-86, +-15, +-19, +-100, +78, +23, +47, +5, +-64, +31, +-16, +-9, +-22, +11, +30, +-74, +31, +50, +38, +-59, +24, +12, +-18, +4, +33, +-24, +-44, +-19, +2, +-47, +48, +-30, +28, +-38, +-29, +20, +52, +-21, +-5, +49, +-41, +-17, +-2, +68, +-2, +122, +-29, +13, +23, +46, +40, +-12, +-58, +59, +2, +15, +-49, +-38, +-15, +46, +-1, +-54, +-73, +10, +-1, +43, +80, +-55, +119, +82, +22, +-12, +-14, +-12, +-3, +36, +27, +-3, +50, +59, +61, +13, +-14, +5, +51, +-54, +-45, +-9, +109, +10, +-28, +1, +0, +-50, +-23, +27, +49, +16, +3, +23, +43, +31, +29, +-27, +-45, +9, +61, +42, +34, +30, +26, +38, +-84, +5, +98, +13, +55, +15, +56, +63, +22, +80, +10, +52, +52, +49, +101, +37, +71, +-20, +-38, +-36, +-72, +-40, +12, +77, +-19, +32, +9, +-15, +85, +-13, +-33, +-8, +-20, +33, +36, +76, +6, +67, +-51, +36, +76, +-48, +30, +42, +-45, +-22, +-9, +65, +-29, +18, +89, +34, +-25, +41, +30, +26, +49, +34, +-6, +-28, +10, +-106, +6, +86, +5, +-3, +-105, +-103, +-45, +-55, +-60, +29, +41, +54, +-29, +36, +-30, +-8, +25, +36, +40, +22, +-35, +-50, +33, +3, +-19, +-30, +3, +-11, +9, +-4, +-18, +39, +92, +-25, +0, +-40, +64, +-18, +58, +-2, +27, +-89, +32, +-2, +56, +79, +-67, +87, +-41, +20, +29, +4, +51, +45, +26, +-54, +8, +-37, +-37, +-39, +-35, +-36, +-23, +-30, +11, +1, +-63, +-21, +5, +13, +35, +-15, +27, +-59, +-10, +29, +4, +-58, +-56, +3, +-10, +27, +0, +29, +-4, +-17, +28, +2, +17, +9, +-27, +53, +-19, +-36, +104, +25, +38, +84, +-29, +42, +-10, +-47, +-36, +1, +10, +43, +-46, +-57, +38, +44, +-9, +26, +-15, +10, +31, +34, +-18, +17, +24, +-3, +5, +11, +4, +23, +5, +-19, +51, +-59, +-29, +62, +-27, +35, +81, +65, +-10, +-1, +-1, +45, +20, +26, +-34, +-7, +35, +-7, +2, +19, +115, +-32, +-40, +-92, +47, +-65, +23, +53, +-31, +22, +20, +45, +91, +64, +29, +49, +30, +74, +-15, +22, +120, +16, +122, +-51, +51, +78, +60, +-53, +40, +-49, +73, +-2, +14, +-17, +-86, +35, +-25, +36, +2, +5, +38, +-9, +16, +-12, +-41, +-24, +-31, +-72, +-68, +-9, +5, +11, +-63, +15, +12, +21, +22, +19, +62, +-28, +122, +12, +28, +-59, +-19, +49, +57, +-12, +29, +-1, +-23, +126, +75, +-29, +-21, +-37, +8, +-70, +-8, +91, +-34, +-10, +31, +78, +44, +59, +23, +66, +42, +38, +6, +19, +10, +1, +57, +38, +71, +-10, +-12, +-7, +-13, +-15, +6, +}; + +#define SIZE 24 +__attribute__ ((section(".heapsram"))) short g_mA[SIZE][SIZE]; +__attribute__ ((section(".heapsram"))) short g_mB[SIZE][SIZE]; +__attribute__ ((section(".heapsram"))) short g_mC[SIZE][SIZE]; +__attribute__ ((section(".heapsram"))) short g_mB_tmp[SIZE][SIZE]; diff --git a/astral/parMatrixMul32/Makefile b/astral/parMatrixMul32/Makefile new file mode 100755 index 0000000..bd55e15 --- /dev/null +++ b/astral/parMatrixMul32/Makefile @@ -0,0 +1,8 @@ +PULP_APP = test +PULP_APP_SRCS = matrixMul.c + +PULP_CFLAGS = -O3 + +include $(PULP_SDK_HOME)/install/rules/pulp.mk + +#pulp-bench-reg --name=parMatrixMul32.cycles --module=pulp_rtl_testset --pipeline=$(PIPELINE) --artefact=pulp_rtl_testset --cmd="make run -f Makefile.sdk" --probe-regexp='matrixMul -> success, nr. of errors: 0, execution time: (\d+)' --params="platform($(platformName)),compiler($(OR1K_TOOLCHAIN_TYPE)),nbCores(4),elemSize(32)" --probe-regexp='matrixMulTranspose -> success, nr. of errors: 0, execution time: (\d+)' --params="platform($(platformName)),compiler($(OR1K_TOOLCHAIN_TYPE)),nbCores(4),elemSize(32),transposed" diff --git a/astral/parMatrixMul32/gen_stimuli.py b/astral/parMatrixMul32/gen_stimuli.py new file mode 100755 index 0000000..32926e9 --- /dev/null +++ b/astral/parMatrixMul32/gen_stimuli.py @@ -0,0 +1,54 @@ +#!/usr/bin/env python + +import sys +import random + + +def write_arr(f, name, arr): + f.write('const int %s[] = {\n' % name) + for v in arr: + f.write('%d,\n' % (v)) + f.write('};\n\n') + return + +################################################################################ +f = open('parMatrixMul32_stimuli.h', 'w') + + +SIZE = 24 +RANGE = int(2**15/SIZE) + +m_a = [] +m_b = [] +m_exp = [] + +for i in range(0,SIZE): + for j in range(0,SIZE): + a = random.randint(-RANGE, RANGE-1) + b = random.randint(-RANGE, RANGE-1) + + m_a.append(a) + m_b.append(b) + +for i in range(0,SIZE): + for j in range(0,SIZE): + r = 0 + + for k in range (0,SIZE): + r = r + m_a[i * SIZE + k] * m_b[k * SIZE + j] + + m_exp.append(r) + + +write_arr(f, 'm_a', m_a) +write_arr(f, 'm_b', m_b) +write_arr(f, 'm_exp', m_exp) + +f.write('#define SIZE %d\n' % SIZE) + + +f.write('__attribute__ ((section(".heapsram"))) int g_mA[SIZE][SIZE];\n') +f.write('__attribute__ ((section(".heapsram"))) int g_mB[SIZE][SIZE];\n') +f.write('__attribute__ ((section(".heapsram"))) int g_mC[SIZE][SIZE];\n') +f.write('__attribute__ ((section(".heapsram"))) int g_mB_tmp[SIZE][SIZE];\n') + diff --git a/astral/parMatrixMul32/matrixMul.c b/astral/parMatrixMul32/matrixMul.c new file mode 100644 index 0000000..990d411 --- /dev/null +++ b/astral/parMatrixMul32/matrixMul.c @@ -0,0 +1,177 @@ +/* + * Copyright (C) 2018 ETH Zurich and University of Bologna + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/* + * Mantainer: Luca Valente, luca.valente2@unibo.it + */ + +#include "pulp.h" + +#include "parMatrixMul32_stimuli.h" + +void check_matrix_mul(testresult_t *result, void (*start)(), void (*stop)()); +void check_matrix_mul_transpose(testresult_t *result, void (*start)(), void (*stop)()); + +testcase_t testcases[] = { + { .name = "matrixMul", .test = check_matrix_mul }, + { .name = "matrixMulTranspose", .test = check_matrix_mul_transpose }, + {0, 0} +}; + +unsigned int num_cores; + +int main() +{ + if (rt_cluster_id() != 0) + return bench_cluster_forward(0); + + num_cores = get_core_num(); + + if(rt_core_id() < num_cores) { + run_suite(testcases); + } + + synch_barrier(); + + return 0; +} + +void matrix_init(); +unsigned int matrix_check(); + +void check_matrix_mul(testresult_t *result, void (*start)(), void (*stop)()) { + int core_id; + unsigned int i, j, k; + unsigned int chunk; + unsigned int lb, ub; + + core_id = get_core_id(); + + // number of rows each core has to multiply + chunk = SIZE / num_cores; + // lower bound + lb = core_id * chunk; + // upper bound + ub = lb + chunk; + + if(core_id == 0) { + matrix_init(); + } + + if(num_cores != 1) synch_barrier(); + + // start benchmark + start(); + + for(i = lb; i < ub; i++) { + for(j = 0; j < SIZE; j++) { + g_mC[i][j] = 0; + + for(k = 0; k < SIZE; k++) { + g_mC[i][j] += g_mA[i][k] * g_mB[k][j]; + } + } + } + + if(num_cores != 1) synch_barrier(); + + stop(); + + if(core_id == 0) { + result->errors = matrix_check(); + } +} + +void check_matrix_mul_transpose(testresult_t *result, void (*start)(), void (*stop)()) { + int core_id; + unsigned int i, j, k; + unsigned int chunk; + unsigned int lb, ub; + + core_id = get_core_id(); + + // number of rows each core has to multiply + chunk = SIZE / num_cores; + // lower bound + lb = core_id * chunk; + // upper bound + ub = lb + chunk; + + if(core_id == 0) { + matrix_init(); + } + + if(num_cores != 1) synch_barrier(); + + // start benchmark + start(); + + // transpose array before using it + for(i = lb; i < ub; i++) { + for(j = 0; j < SIZE; j++) { + g_mB_tmp[i][j] = g_mB[j][i]; + } + } + + if(num_cores != 1) synch_barrier(); + + for(i = lb; i < ub; i++) { + for(j = 0; j < SIZE; j++) { + g_mC[i][j] = 0; + + for(k = 0; k < SIZE; k++) { + g_mC[i][j] += g_mA[i][k] * g_mB_tmp[j][k]; + } + } + } + + if(num_cores != 1) synch_barrier(); + + stop(); + + if(core_id == 0) { + result->errors = matrix_check(); + } +} + +void matrix_init() { + unsigned int i, j; + + // init, copy to TCDM + for(i = 0; i < SIZE; i++) { + for(j = 0; j < SIZE; j++) { + g_mA[i][j] = m_a[i * SIZE + j]; + g_mB[i][j] = m_b[i * SIZE + j]; + g_mC[i][j] = 0; + } + } +} + +unsigned int matrix_check() { + unsigned int errors = 0; + unsigned int i, j; + // check + for(i = 0; i < SIZE; i++) { + for(j = 0; j < SIZE; j++) { + if(g_mC[i][j] != m_exp[i * SIZE + j]) { + printf("At index %d, %d\n", i, j, 0, 0); + errors++; + } + } + } + + return errors; +} diff --git a/astral/parMatrixMul32/parMatrixMul32_stimuli.h b/astral/parMatrixMul32/parMatrixMul32_stimuli.h new file mode 100644 index 0000000..d5c1af0 --- /dev/null +++ b/astral/parMatrixMul32/parMatrixMul32_stimuli.h @@ -0,0 +1,1742 @@ +const int m_a[] = { +-1344, +-778, +-350, +1240, +950, +940, +1262, +285, +738, +-37, +257, +704, +87, +-1135, +1175, +960, +984, +611, +-1170, +1243, +-729, +-1235, +-1229, +8, +52, +1156, +-804, +-129, +-112, +-307, +1045, +-954, +-944, +477, +1104, +-600, +-31, +1364, +-950, +-153, +967, +-446, +235, +-197, +763, +-660, +-1289, +116, +-458, +994, +1086, +156, +-549, +102, +-532, +943, +299, +340, +516, +1117, +515, +1335, +708, +-306, +-589, +517, +655, +-279, +-595, +-255, +-1104, +-16, +507, +199, +-297, +-905, +-1084, +982, +20, +-1364, +407, +333, +-798, +-711, +1301, +175, +490, +-165, +-1097, +1251, +1203, +-884, +419, +-1262, +-950, +-1200, +759, +-205, +-1365, +-870, +109, +-1135, +36, +796, +-1233, +-1117, +-826, +241, +588, +-513, +-353, +791, +1071, +-1073, +220, +-1094, +1096, +-723, +280, +-505, +151, +399, +319, +-1120, +-213, +-966, +679, +497, +-290, +-300, +-290, +-599, +243, +-752, +604, +1196, +-715, +-177, +-329, +1337, +596, +1027, +509, +-301, +-1211, +-936, +-281, +446, +-356, +841, +-1123, +-1343, +-140, +-1300, +-828, +-237, +1206, +1274, +-1092, +-922, +913, +1201, +-422, +782, +-230, +633, +-1055, +-1160, +329, +1255, +1038, +770, +123, +934, +670, +-492, +-24, +-779, +-1129, +47, +555, +1214, +-232, +-716, +-322, +-126, +178, +827, +710, +-1057, +-313, +996, +1149, +-532, +570, +1171, +899, +-313, +-790, +1071, +154, +-303, +492, +-918, +-1139, +292, +129, +1347, +-309, +751, +1262, +142, +-1062, +-1305, +250, +657, +238, +-141, +1308, +-37, +-514, +-591, +-611, +852, +-653, +-640, +91, +254, +-1145, +-1263, +-838, +-10, +266, +-444, +1129, +762, +-713, +-326, +-88, +1063, +-442, +-177, +365, +-740, +-1219, +1085, +783, +-725, +-1112, +426, +660, +6, +-440, +513, +687, +1078, +212, +-434, +-953, +1337, +160, +622, +-950, +-943, +288, +-136, +-1103, +-223, +1271, +211, +251, +-271, +-26, +704, +1177, +544, +699, +-885, +-864, +-1280, +877, +-461, +995, +-623, +-121, +-146, +-484, +-225, +-978, +163, +-278, +-502, +-505, +-567, +-771, +1279, +699, +-1337, +544, +1145, +1271, +640, +277, +-164, +458, +-1280, +-602, +-2, +1136, +1203, +-699, +-195, +659, +-472, +1230, +1151, +-97, +-77, +-772, +-381, +-295, +636, +-1341, +-445, +-806, +531, +-1186, +-1313, +-274, +835, +-446, +558, +-1307, +-235, +43, +-254, +-109, +911, +-1189, +559, +-854, +-218, +149, +580, +1158, +-14, +181, +-1120, +-947, +-542, +1142, +631, +-893, +-614, +-257, +-365, +-951, +1, +-762, +268, +382, +-131, +808, +-234, +839, +346, +-733, +1251, +496, +-566, +-751, +581, +-1292, +1068, +-932, +-855, +1336, +-280, +523, +1294, +-1251, +1284, +-1276, +87, +1264, +-274, +-922, +-289, +-458, +-117, +196, +-79, +-707, +1233, +-385, +-620, +-617, +703, +-995, +-374, +660, +145, +821, +1289, +582, +-201, +447, +116, +759, +-615, +834, +268, +-1114, +-1016, +-227, +-589, +-910, +-244, +-660, +764, +219, +1165, +506, +-673, +799, +-1355, +-872, +491, +689, +176, +-285, +1151, +1080, +-319, +286, +833, +217, +-621, +478, +539, +-109, +-1273, +-564, +-240, +504, +518, +256, +-124, +74, +949, +-912, +-1341, +965, +-774, +634, +1009, +1304, +200, +-1041, +-1262, +-865, +-1065, +-635, +-357, +-928, +806, +1148, +-411, +56, +686, +-644, +1241, +-430, +297, +127, +457, +-1313, +741, +861, +220, +-540, +772, +265, +1066, +679, +177, +-734, +29, +-149, +181, +-1042, +-1139, +271, +-326, +-29, +1298, +643, +-890, +-136, +-1015, +-565, +-964, +894, +-312, +698, +159, +-222, +-1322, +578, +945, +1124, +1278, +54, +-389, +1101, +362, +-543, +380, +959, +-399, +-1105, +1308, +338, +-198, +-1111, +-278, +-752, +668, +1156, +-1226, +579, +184, +-1084, +-917, +-498, +-466, +316, +-788, +-718, +468, +367, +-1333, +-1146, +828, +1329, +311, +-1346, +54, +-976, +854, +-658, +-198, +-979, +156, +385, +-659, +1326, +1351, +-1173, +-648, +720, +-40, +313, +729, +-416, +351, +452, +-413, +-4, +-1113, +-612, +-28, +-721, +400, +1072, +-1010, +}; + +const int m_b[] = { +-1316, +319, +963, +-608, +519, +-783, +-676, +181, +172, +203, +-1351, +-935, +-12, +758, +-746, +1226, +127, +-1346, +1251, +-377, +889, +-23, +-417, +-122, +680, +1363, +729, +-907, +-1263, +-431, +363, +1355, +-566, +-517, +-1186, +1318, +-1104, +-1245, +950, +687, +252, +-270, +1081, +-1290, +656, +8, +60, +1171, +915, +-500, +678, +-953, +307, +-35, +-1334, +-888, +598, +1160, +722, +850, +-268, +988, +635, +-340, +252, +1208, +420, +82, +1283, +-319, +-666, +172, +583, +174, +471, +-1063, +452, +-191, +-1188, +116, +-927, +1086, +119, +-245, +-717, +-657, +417, +319, +1133, +1338, +141, +-546, +567, +-1089, +-191, +-1138, +-201, +-1286, +-820, +-1356, +1177, +-317, +191, +67, +164, +-306, +-1015, +1147, +-482, +1229, +-259, +-207, +1309, +847, +-399, +-1005, +-995, +140, +-567, +-1220, +-427, +180, +-571, +997, +-783, +-316, +-1360, +736, +75, +-1251, +-307, +-902, +1181, +1057, +-141, +-1098, +776, +1096, +-923, +914, +1049, +-28, +-742, +-804, +-467, +567, +329, +-309, +-161, +-157, +-430, +-639, +1138, +-165, +292, +-20, +777, +-715, +60, +-1359, +35, +307, +-1092, +271, +548, +822, +-50, +-475, +-103, +784, +537, +152, +-517, +-1097, +117, +-619, +538, +941, +172, +-223, +1161, +-1004, +-1145, +-455, +255, +363, +859, +403, +-861, +-657, +-537, +-1084, +-1042, +541, +1283, +-356, +1298, +-1254, +-303, +203, +104, +1123, +-72, +-171, +-1122, +-533, +440, +275, +613, +-846, +-189, +884, +704, +-570, +-440, +-1157, +-200, +-80, +616, +799, +757, +-264, +-1256, +-690, +152, +184, +-810, +-221, +-821, +-243, +508, +-709, +574, +-693, +315, +-952, +952, +697, +875, +-480, +-691, +422, +-413, +-1199, +441, +-751, +821, +1303, +-410, +416, +566, +-131, +-551, +46, +978, +-228, +1117, +-251, +-537, +874, +-882, +260, +-213, +248, +-1296, +1343, +-626, +-812, +629, +-601, +-378, +-1314, +-889, +774, +-307, +692, +-1125, +-692, +923, +947, +1158, +-939, +1284, +35, +1299, +369, +-8, +43, +768, +524, +137, +659, +285, +-1315, +-457, +871, +-768, +1107, +-695, +488, +-527, +-161, +414, +-526, +-1164, +1059, +-1108, +560, +-622, +898, +-50, +-286, +-170, +513, +952, +433, +237, +584, +-665, +-960, +585, +-434, +1223, +-130, +1035, +430, +202, +1312, +1152, +1059, +-1082, +-1295, +805, +-18, +613, +-94, +557, +548, +1354, +116, +289, +-1358, +-1234, +1237, +451, +820, +-102, +974, +832, +-1019, +914, +-512, +-267, +1329, +-910, +-1341, +862, +-381, +-23, +-658, +40, +-71, +-782, +1240, +-956, +1241, +-291, +-884, +1250, +699, +834, +190, +960, +-1260, +177, +464, +155, +-1105, +768, +424, +621, +740, +-1357, +1186, +-594, +1329, +829, +126, +1101, +1146, +-95, +605, +-673, +1334, +440, +-10, +12, +-745, +20, +19, +-793, +999, +1083, +487, +-657, +-356, +654, +-326, +-250, +-718, +-947, +-235, +558, +974, +-981, +637, +-861, +-768, +1045, +-583, +-910, +128, +734, +896, +-1156, +223, +284, +272, +634, +-473, +363, +359, +-1185, +14, +-33, +-1122, +140, +900, +439, +-944, +-770, +663, +865, +1056, +-238, +86, +-1294, +-44, +-603, +602, +20, +397, +-423, +-703, +-209, +-906, +-1236, +945, +-737, +578, +904, +645, +1225, +-877, +-425, +-493, +-1326, +424, +965, +1300, +-1210, +823, +1345, +626, +-427, +592, +-869, +-1055, +-938, +-427, +1066, +472, +-1055, +48, +-1200, +-349, +313, +-1227, +-228, +783, +839, +187, +1021, +-1355, +1284, +68, +-1321, +-997, +1286, +-887, +772, +-156, +-105, +1329, +1141, +-377, +-881, +-341, +1316, +-391, +-1249, +-205, +53, +-266, +-540, +-289, +-1011, +602, +-1032, +-1097, +-202, +-467, +-1047, +-867, +-340, +-109, +-496, +967, +1147, +108, +384, +-12, +1216, +137, +1318, +151, +219, +-543, +391, +668, +-1348, +-1244, +-810, +-676, +321, +-1258, +1343, +1214, +791, +35, +1219, +1278, +1037, +-1282, +661, +585, +921, +-880, +-989, +-1192, +-207, +273, +-382, +690, +165, +271, +-212, +739, +-343, +-42, +226, +40, +859, +-153, +622, +-1059, +}; + +const int m_exp[] = { +-4942391, +2289133, +-1363225, +1978230, +1580032, +-625813, +-3230128, +2236653, +19494, +3242695, +-1080745, +-34154, +4086860, +-1370876, +3997221, +-1812380, +4705498, +7690207, +-4068140, +3595067, +-1103308, +-939857, +-4249710, +-8650816, +-2013119, +2933624, +235162, +-453807, +-4447391, +3527041, +2046492, +411956, +-994117, +-1411344, +1333704, +-519761, +3026373, +-564969, +3749147, +2447173, +-557628, +1138674, +-1426096, +-4033488, +-1829685, +2815607, +2382958, +1714081, +-1470484, +3379876, +3660759, +-2439960, +-1180478, +-3300785, +-5104533, +-309753, +-1667400, +3258850, +1805449, +2481948, +-944985, +-363123, +4227063, +3022289, +2763211, +5114077, +-1534394, +-2957168, +3401637, +-1195822, +-747480, +-2915318, +-2505013, +-174927, +276733, +2899369, +-6702856, +923396, +-2741169, +4270685, +-1020657, +-2562887, +2074098, +-2382784, +1366504, +691209, +4127820, +400356, +-7415505, +823772, +-3848400, +-158560, +3759990, +2298445, +323394, +873625, +474364, +2617120, +-1382444, +1735284, +-5799715, +1915577, +7016057, +-1212904, +919286, +2949768, +1228832, +572192, +4145710, +-6809520, +-2199597, +677764, +-7169579, +-4904277, +6902014, +231123, +-4797299, +3093608, +989455, +4324476, +3121268, +810907, +-2457323, +2299211, +-1625774, +-141013, +3343022, +-2044657, +4089375, +-291323, +-1950307, +2480885, +2846731, +-2139146, +-2718414, +-1997531, +-2399245, +-4060224, +423228, +-205276, +-1602384, +910872, +-3535114, +6008729, +-559984, +-301205, +-5407307, +2981269, +1079061, +6602535, +-857708, +2756391, +-5304566, +-3769267, +2620777, +-4409088, +502077, +7568647, +-37918, +2315061, +-2540065, +8296540, +-7465282, +1553910, +-4736227, +-2139045, +95614, +342546, +1309722, +1777391, +2981296, +-736899, +-2572111, +-972463, +-2793724, +-2893912, +-1230264, +-871649, +-1439985, +3074445, +3339004, +2423842, +1751086, +4064832, +1550243, +6225792, +-503750, +-2567772, +5671219, +-2054796, +-551487, +-2787790, +-3835027, +-4272806, +2725813, +-2982521, +1803437, +3024675, +-201092, +-1626608, +1548043, +2303810, +3032912, +398283, +1704371, +1860306, +-4101665, +5187913, +4233418, +2054883, +3603470, +1935132, +-17548, +-4362444, +-2806918, +-5651039, +-1853372, +-1707208, +-153048, +-2791834, +402265, +2815962, +3391662, +-4833520, +-1190520, +2302448, +80738, +2089586, +174096, +2837490, +-5514606, +2138871, +336249, +-378675, +5833977, +4367000, +-2445147, +-3652299, +-1794451, +-1471577, +-1263012, +3719274, +-3404819, +5765304, +-4256415, +3558206, +-1884441, +-475244, +3659623, +-2914867, +689238, +-2576754, +7739914, +1823902, +2077002, +-2365242, +2023481, +1663749, +-4973435, +-694558, +1118078, +2260786, +-3256285, +4596746, +-5421599, +594942, +-1730692, +-4626077, +3077882, +-2232009, +2672161, +3135747, +-4602601, +859784, +-3530668, +21600, +-4690786, +2023164, +-496745, +-2728919, +281474, +-108745, +-809613, +1445687, +-5781458, +2097169, +1594266, +-4504019, +2460482, +6259537, +-700848, +413263, +-1212884, +-5695130, +2094147, +-750529, +-1379008, +6029072, +722889, +1719449, +1682336, +-4219755, +1971162, +66575, +-1195119, +141466, +-1083536, +-718558, +-4039954, +-168429, +-2026861, +2025800, +-761083, +-4194692, +2013337, +-1156936, +3823019, +4081732, +-3145845, +-1733615, +-1371947, +-3811245, +-1584663, +-3547009, +-3267886, +8255291, +-3232160, +3404636, +3248369, +3233853, +671601, +-1009897, +1821121, +-3517645, +2005444, +-2768741, +115998, +533867, +4717709, +1315923, +-3510545, +-3539595, +-538461, +4529529, +2792584, +-107486, +-1840413, +-1474849, +1579605, +-4197602, +-34825, +-462678, +1294881, +-1730927, +-2549709, +-1531672, +-271859, +-1181904, +-1680154, +-2321723, +-6641222, +1127764, +893535, +-2804646, +5653509, +2657606, +-1751466, +-4669812, +-827592, +-126901, +-2599752, +-845148, +1390838, +8975481, +-7663778, +3572438, +5920790, +5233883, +-613590, +-881500, +-3974422, +-5523348, +-3243204, +-6405765, +-4376438, +1352634, +-105650, +2650174, +1442151, +5088231, +2974595, +-4501663, +-841006, +-3101819, +-1265401, +-2756903, +2579743, +2045040, +-5328835, +2801176, +-386694, +-3068782, +3147225, +-248211, +-662659, +-1112717, +2733193, +336344, +3107302, +2244003, +4285762, +1998904, +1888720, +-1174981, +-2567532, +-5588952, +-101948, +4004848, +-610048, +793760, +3345423, +716318, +1033698, +4011882, +-965219, +1258434, +1579522, +-4249500, +3233648, +-424838, +2640541, +1020028, +4933599, +-1964947, +3237309, +-1251962, +-437406, +-2749192, +-2943112, +-117113, +778507, +2757711, +3478291, +-661571, +1077087, +-3821174, +2731860, +3035264, +-4424379, +295413, +3873542, +-1272809, +4145370, +-363272, +2240544, +88954, +-2016552, +-862779, +-844808, +3142493, +2019692, +3648148, +3857820, +593190, +1285134, +-4257140, +-1476035, +-1951773, +-2334649, +1355368, +-4390456, +3666652, +562848, +-8226958, +1134896, +1136697, +-2132899, +3300228, +1855661, +6476864, +5097743, +-1373818, +3287769, +1709294, +-2926119, +2463141, +400199, +3051372, +1815531, +1746372, +398117, +2333959, +-708565, +-4241370, +51697, +-1626217, +26865, +2248300, +3357859, +-325912, +194201, +612298, +388227, +256018, +-5630155, +-1085451, +653494, +-1966315, +-273079, +-4296295, +-2813232, +2079672, +2378463, +-3869089, +-438799, +-725265, +3152791, +3461913, +-777750, +47521, +2588203, +1888001, +-4445421, +654349, +811737, +418334, +-1854075, +-5194402, +-1571674, +-622026, +-1091628, +1787463, +3439585, +2923276, +-1997884, +-193963, +-731696, +3686658, +-1311796, +-5219031, +-2906251, +2140229, +-1846978, +2541247, +-3677377, +-3935140, +3605308, +4807232, +-1633864, +344286, +-2051894, +2498349, +-3085, +379207, +-701595, +-1080351, +3161365, +-1606976, +1640595, +3757649, +798095, +-3167055, +-2288739, +2301831, +-3324819, +3219538, +516049, +-3153835, +7342606, +1098913, +-2522436, +376783, +47367, +530901, +-395499, +304200, +}; + +#define SIZE 24 +__attribute__ ((section(".heapsram"))) int g_mA[SIZE][SIZE]; +__attribute__ ((section(".heapsram"))) int g_mB[SIZE][SIZE]; +__attribute__ ((section(".heapsram"))) int g_mC[SIZE][SIZE]; +__attribute__ ((section(".heapsram"))) int g_mB_tmp[SIZE][SIZE]; diff --git a/astral/parMatrixMul8/Makefile b/astral/parMatrixMul8/Makefile new file mode 100755 index 0000000..7c755b8 --- /dev/null +++ b/astral/parMatrixMul8/Makefile @@ -0,0 +1,8 @@ +PULP_APP = test +PULP_APP_SRCS = matrixMul.c + +PULP_CFLAGS = -O3 + +include $(PULP_SDK_HOME)/install/rules/pulp.mk + +#pulp-bench-reg --name=parMatrixMul8.cycles --module=pulp_rtl_testset --pipeline=$(PIPELINE) --artefact=pulp_rtl_testset --cmd="make run -f Makefile.sdk" --probe-regexp='matrixMul -> success, nr. of errors: 0, execution time: (\d+)' --params="platform($(platformName)),compiler($(OR1K_TOOLCHAIN_TYPE)),nbCores(4),elemSize(8)" --probe-regexp='matrixMulTranspose -> success, nr. of errors: 0, execution time: (\d+)' --params="platform($(platformName)),compiler($(OR1K_TOOLCHAIN_TYPE)),nbCores(4),elemSize(8),transposed" diff --git a/astral/parMatrixMul8/gen_stimuli.py b/astral/parMatrixMul8/gen_stimuli.py new file mode 100755 index 0000000..153d5c3 --- /dev/null +++ b/astral/parMatrixMul8/gen_stimuli.py @@ -0,0 +1,54 @@ +#!/usr/bin/env python + +import sys +import random + + +def write_arr(f, name, arr): + f.write('const char %s[] = {\n' % name) + for v in arr: + f.write('%d,\n' % (v)) + f.write('};\n\n') + return + +################################################################################ +f = open('parMatrixMul8_stimuli.h', 'w') + + +SIZE = 24 +RANGE = 4 + +m_a = [] +m_b = [] +m_exp = [] + +for i in range(0,SIZE): + for j in range(0,SIZE): + a = random.randint(-RANGE, RANGE-1) + b = random.randint(-RANGE, RANGE-1) + + m_a.append(a) + m_b.append(b) + +for i in range(0,SIZE): + for j in range(0,SIZE): + r = 0 + + for k in range (0,SIZE): + r = r + m_a[i * SIZE + k] * m_b[k * SIZE + j] + + m_exp.append(r) + + +write_arr(f, 'm_a', m_a) +write_arr(f, 'm_b', m_b) +write_arr(f, 'm_exp', m_exp) + +f.write('#define SIZE %d\n' % SIZE) + + +f.write('__attribute__ ((section(".heapsram"))) char g_mA[SIZE][SIZE];\n') +f.write('__attribute__ ((section(".heapsram"))) char g_mB[SIZE][SIZE];\n') +f.write('__attribute__ ((section(".heapsram"))) char g_mC[SIZE][SIZE];\n') +f.write('__attribute__ ((section(".heapsram"))) char g_mB_tmp[SIZE][SIZE];\n') + diff --git a/astral/parMatrixMul8/matrixMul.c b/astral/parMatrixMul8/matrixMul.c new file mode 100644 index 0000000..357fdf0 --- /dev/null +++ b/astral/parMatrixMul8/matrixMul.c @@ -0,0 +1,177 @@ +/* + * Copyright (C) 2018 ETH Zurich and University of Bologna + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/* + * Mantainer: Luca Valente, luca.valente2@unibo.it + */ + +#include "pulp.h" + +#include "parMatrixMul8_stimuli.h" + +void check_matrix_mul(testresult_t *result, void (*start)(), void (*stop)()); +void check_matrix_mul_transpose(testresult_t *result, void (*start)(), void (*stop)()); + +testcase_t testcases[] = { + { .name = "matrixMul", .test = check_matrix_mul }, + { .name = "matrixMulTranspose", .test = check_matrix_mul_transpose }, + {0, 0} +}; + +unsigned int num_cores; + +int main() +{ + if (rt_cluster_id() != 0) + return bench_cluster_forward(0); + + num_cores = get_core_num(); + + if(rt_core_id() < num_cores) { + run_suite(testcases); + } + + synch_barrier(); + + return 0; +} + +void matrix_init(); +unsigned int matrix_check(); + +void check_matrix_mul(testresult_t *result, void (*start)(), void (*stop)()) { + int core_id; + unsigned int i, j, k; + unsigned int chunk; + unsigned int lb, ub; + + core_id = get_core_id(); + + // number of rows each core has to multiply + chunk = SIZE / num_cores; + // lower bound + lb = core_id * chunk; + // upper bound + ub = lb + chunk; + + if(core_id == 0) { + matrix_init(); + } + + if(num_cores != 1) synch_barrier(); + + // start benchmark + start(); + + for(i = lb; i < ub; i++) { + for(j = 0; j < SIZE; j++) { + g_mC[i][j] = 0; + + for(k = 0; k < SIZE; k++) { + g_mC[i][j] += g_mA[i][k] * g_mB[k][j]; + } + } + } + + if(num_cores != 1) synch_barrier(); + + stop(); + + if(core_id == 0) { + result->errors = matrix_check(); + } +} + +void check_matrix_mul_transpose(testresult_t *result, void (*start)(), void (*stop)()) { + int core_id; + unsigned int i, j, k; + unsigned int chunk; + unsigned int lb, ub; + + core_id = get_core_id(); + + // number of rows each core has to multiply + chunk = SIZE / num_cores; + // lower bound + lb = core_id * chunk; + // upper bound + ub = lb + chunk; + + if(core_id == 0) { + matrix_init(); + } + + if(num_cores != 1) synch_barrier(); + + // start benchmark + start(); + + // transpose array before using it + for(i = lb; i < ub; i++) { + for(j = 0; j < SIZE; j++) { + g_mB_tmp[i][j] = g_mB[j][i]; + } + } + + if(num_cores != 1) synch_barrier(); + + for(i = lb; i < ub; i++) { + for(j = 0; j < SIZE; j++) { + g_mC[i][j] = 0; + + for(k = 0; k < SIZE; k++) { + g_mC[i][j] += g_mA[i][k] * g_mB_tmp[j][k]; + } + } + } + + if(num_cores != 1) synch_barrier(); + + stop(); + + if(core_id == 0) { + result->errors = matrix_check(); + } +} + +void matrix_init() { + unsigned int i, j; + + // init, copy to TCDM + for(i = 0; i < SIZE; i++) { + for(j = 0; j < SIZE; j++) { + g_mA[i][j] = m_a[i * SIZE + j]; + g_mB[i][j] = m_b[i * SIZE + j]; + g_mC[i][j] = 0; + } + } +} + +unsigned int matrix_check() { + unsigned int errors = 0; + unsigned int i, j; + // check + for(i = 0; i < SIZE; i++) { + for(j = 0; j < SIZE; j++) { + if(g_mC[i][j] != m_exp[i * SIZE + j]) { + printf("At index %d, %d\n", i, j, 0, 0); + errors++; + } + } + } + + return errors; +} diff --git a/astral/parMatrixMul8/parMatrixMul8_stimuli.h b/astral/parMatrixMul8/parMatrixMul8_stimuli.h new file mode 100644 index 0000000..78d026c --- /dev/null +++ b/astral/parMatrixMul8/parMatrixMul8_stimuli.h @@ -0,0 +1,1742 @@ +const char m_a[] = { +-1, +0, +0, +0, +-4, +-4, +-4, +1, +-1, +-2, +-3, +3, +2, +-4, +1, +-2, +-3, +0, +-3, +-4, +-3, +-1, +-3, +-3, +2, +-2, +2, +3, +0, +2, +0, +-1, +-3, +-2, +-1, +-3, +1, +-1, +-1, +0, +-1, +-2, +-1, +-4, +-2, +-3, +-1, +-2, +1, +1, +2, +-1, +0, +2, +1, +-3, +2, +-3, +0, +0, +0, +2, +-2, +3, +-4, +2, +-2, +-3, +-2, +-3, +3, +-3, +0, +1, +-1, +-1, +1, +-2, +-1, +-4, +-2, +-1, +-4, +-4, +-2, +-1, +-2, +-3, +-4, +-4, +1, +0, +-2, +1, +-1, +1, +2, +-3, +-4, +0, +2, +-3, +-3, +0, +0, +-2, +-3, +-1, +-2, +-1, +-4, +-1, +-4, +-3, +-3, +0, +1, +-3, +-4, +1, +2, +0, +2, +-1, +-4, +-1, +-4, +2, +2, +-1, +3, +0, +0, +-1, +1, +3, +0, +2, +0, +3, +2, +2, +2, +-3, +2, +2, +-4, +0, +-3, +-1, +-1, +-3, +-4, +3, +2, +0, +2, +1, +0, +-2, +-1, +3, +3, +0, +1, +-3, +3, +0, +-3, +2, +-3, +1, +2, +0, +3, +-1, +0, +-2, +-4, +0, +-3, +0, +3, +0, +-1, +-3, +0, +-2, +-4, +-4, +-1, +1, +2, +-4, +1, +-4, +-4, +-3, +-3, +3, +-1, +-2, +-4, +2, +1, +2, +-1, +1, +3, +0, +2, +-4, +-3, +1, +-2, +0, +1, +1, +3, +-2, +-4, +2, +-1, +-1, +1, +2, +-2, +1, +1, +2, +0, +3, +-4, +2, +-1, +-1, +-3, +-3, +-3, +-3, +2, +-3, +1, +0, +3, +-3, +3, +3, +-4, +1, +-4, +1, +2, +-3, +1, +-4, +-1, +-4, +-3, +-2, +2, +3, +0, +-4, +1, +3, +0, +3, +-1, +-4, +3, +-2, +-2, +2, +-4, +-1, +-1, +3, +-2, +-4, +-1, +-1, +2, +-1, +2, +0, +-2, +-4, +0, +2, +-4, +0, +1, +-4, +2, +0, +-1, +-1, +-3, +2, +3, +2, +-2, +1, +-4, +-3, +1, +2, +-1, +-4, +3, +-1, +2, +-2, +-3, +0, +-1, +3, +-4, +-3, +-3, +-3, +0, +0, +3, +1, +-2, +-2, +-4, +2, +2, +0, +3, +-2, +1, +3, +-1, +3, +-4, +-2, +0, +-4, +0, +-1, +-3, +-2, +-4, +-4, +-2, +-4, +-3, +-3, +0, +2, +-4, +1, +0, +-3, +0, +-4, +-4, +3, +3, +-2, +1, +3, +3, +1, +-3, +-4, +-4, +1, +1, +2, +-4, +0, +3, +-1, +3, +1, +-4, +-2, +1, +-1, +3, +3, +-1, +-1, +0, +-2, +2, +-2, +-2, +1, +3, +1, +3, +-1, +2, +-1, +0, +1, +2, +-4, +-3, +1, +-3, +-1, +-4, +-1, +-4, +-4, +-3, +-3, +3, +0, +3, +0, +-2, +3, +-3, +3, +-1, +-1, +2, +-2, +1, +-4, +0, +-3, +3, +0, +-2, +-1, +3, +2, +-2, +3, +-3, +0, +-2, +1, +0, +-1, +1, +3, +-4, +3, +0, +3, +-4, +3, +-1, +-1, +1, +3, +1, +0, +-4, +3, +-3, +-4, +-1, +2, +-3, +-4, +-2, +-3, +2, +3, +-2, +-2, +-4, +-1, +1, +-4, +-2, +2, +-3, +1, +-3, +-2, +2, +3, +-2, +0, +1, +-1, +2, +-2, +1, +-1, +-4, +-3, +-4, +-3, +-3, +-3, +-4, +3, +1, +1, +3, +-4, +0, +-4, +2, +2, +3, +2, +-4, +1, +-1, +-2, +-2, +2, +-2, +2, +-3, +2, +0, +0, +0, +-4, +-2, +-2, +2, +1, +0, +2, +3, +2, +3, +-3, +0, +-3, +-2, +2, +-1, +2, +-3, +1, +0, +1, +3, +-4, +0, +-3, +-1, +1, +-2, +-2, +0, +0, +1, +-3, +-2, +0, +3, +2, +0, +3, +-4, +2, +1, +3, +-2, +-2, +-3, +2, +2, +2, +-1, +3, +2, +-3, +}; + +const char m_b[] = { +3, +-2, +-3, +-4, +-3, +2, +-4, +-1, +-4, +-4, +-1, +-3, +3, +0, +2, +1, +2, +-2, +0, +3, +-4, +-2, +2, +-1, +1, +-4, +-4, +-1, +1, +-3, +-2, +1, +-3, +1, +-2, +2, +1, +-3, +-1, +-4, +1, +-1, +-3, +3, +0, +0, +-2, +0, +-4, +-3, +0, +-3, +0, +3, +-1, +-4, +-2, +2, +-4, +-1, +-3, +1, +-4, +-4, +0, +2, +3, +2, +0, +-3, +-1, +-1, +2, +2, +-2, +-2, +-2, +-4, +3, +-3, +2, +1, +-1, +1, +-3, +-1, +2, +-1, +1, +-1, +0, +-4, +-2, +3, +0, +-4, +-2, +3, +-3, +1, +-1, +-1, +-2, +1, +-2, +-4, +0, +0, +0, +0, +-4, +-3, +3, +-2, +3, +3, +2, +3, +-4, +1, +-2, +-3, +-3, +2, +3, +-4, +-1, +3, +0, +3, +2, +1, +-1, +-1, +-4, +-1, +3, +2, +-1, +3, +0, +3, +0, +1, +-4, +0, +3, +2, +-4, +-2, +-2, +-4, +-3, +-2, +1, +0, +-2, +1, +3, +-2, +-1, +-3, +0, +3, +0, +0, +0, +2, +3, +-4, +-4, +2, +2, +3, +1, +0, +0, +-2, +1, +-2, +-4, +-3, +0, +-2, +2, +3, +2, +3, +3, +1, +1, +1, +3, +1, +3, +2, +-3, +1, +-1, +-2, +-2, +-2, +-1, +2, +2, +0, +-3, +-1, +2, +-4, +-2, +2, +-3, +-2, +-4, +3, +-1, +3, +2, +3, +-1, +-1, +-1, +-2, +-2, +2, +2, +-1, +-3, +-1, +3, +-3, +3, +3, +2, +-3, +2, +-3, +-3, +-2, +3, +-1, +0, +-2, +-1, +-1, +2, +-1, +-2, +1, +-4, +1, +3, +2, +1, +2, +-1, +-1, +-1, +-4, +0, +3, +1, +-2, +0, +2, +-2, +-2, +3, +-1, +-1, +0, +3, +3, +-1, +0, +0, +-4, +1, +-4, +-4, +0, +2, +3, +-3, +-2, +-3, +-3, +-2, +0, +-4, +-1, +0, +-2, +1, +-1, +-4, +1, +2, +0, +-2, +0, +2, +2, +2, +3, +-3, +1, +0, +-2, +2, +3, +-1, +-2, +1, +-3, +-1, +2, +2, +1, +3, +-2, +0, +-2, +-4, +1, +1, +1, +-2, +-1, +2, +0, +1, +-1, +-3, +-1, +1, +-1, +-1, +-3, +-4, +-2, +-2, +-1, +0, +3, +3, +0, +-2, +-2, +-2, +-3, +2, +2, +1, +3, +0, +3, +0, +-1, +-1, +3, +3, +-4, +1, +1, +-2, +-4, +-4, +3, +1, +0, +-1, +-4, +-2, +2, +0, +1, +-1, +0, +-3, +-2, +-1, +1, +-3, +-2, +2, +-4, +-3, +-3, +0, +0, +-3, +-3, +2, +0, +1, +-2, +-3, +-1, +3, +-1, +3, +-3, +-4, +-4, +0, +-4, +-1, +2, +1, +0, +0, +2, +2, +3, +2, +-1, +0, +-3, +-3, +3, +0, +-4, +0, +-2, +-2, +-1, +1, +3, +3, +1, +-3, +1, +-2, +-1, +2, +0, +0, +2, +-1, +-4, +-1, +-3, +0, +2, +-4, +-1, +0, +-2, +-1, +2, +-2, +-2, +3, +3, +0, +3, +1, +0, +2, +3, +2, +-2, +-4, +-1, +3, +3, +-1, +2, +0, +-2, +2, +-4, +-3, +-3, +-3, +-3, +-3, +0, +3, +3, +3, +0, +-3, +-1, +2, +3, +-3, +-3, +-4, +-1, +3, +0, +-4, +-2, +-3, +1, +3, +3, +-2, +2, +-4, +-2, +1, +-3, +-3, +-2, +3, +-3, +0, +-4, +0, +2, +-4, +0, +1, +-1, +3, +3, +3, +1, +3, +-4, +-4, +-1, +-3, +-3, +0, +1, +-1, +-3, +-4, +2, +3, +0, +-4, +-2, +-3, +0, +3, +2, +0, +-2, +-4, +-3, +-3, +-3, +-2, +2, +-4, +-4, +2, +3, +-3, +2, +-2, +-2, +-1, +-2, +-2, +-1, +3, +-4, +-4, +3, +-3, +-3, +-1, +-1, +2, +3, +-3, +-1, +-3, +-4, +}; + +const char m_exp[] = { +27, +-26, +-19, +13, +47, +17, +-5, +14, +88, +66, +2, +14, +6, +-39, +56, +35, +-19, +61, +-13, +4, +46, +1, +70, +27, +-22, +-28, +-13, +-5, +-4, +-6, +-10, +5, +26, +14, +3, +-1, +-3, +0, +10, +43, +4, +32, +-3, +6, +36, +26, +66, +20, +-20, +-10, +21, +-17, +-5, +36, +-9, +11, +10, +17, +-32, +12, +20, +9, +-1, +15, +-42, +-21, +-51, +24, +20, +26, +10, +42, +-4, +2, +-11, +41, +22, +4, +-17, +10, +28, +-10, +2, +10, +25, +32, +18, +43, +-3, +-9, +-9, +-4, +25, +-5, +9, +24, +54, +43, +14, +59, +18, +36, +-7, +30, +50, +-30, +21, +3, +27, +7, +21, +55, +-17, +-2, +9, +17, +31, +8, +12, +29, +43, +-17, +14, +-55, +13, +50, +24, +-13, +-33, +15, +-45, +9, +36, +-9, +-6, +14, +-1, +2, +-27, +-37, +-40, +-14, +2, +-10, +6, +27, +-8, +-13, +-17, +-4, +28, +51, +-5, +-14, +2, +-23, +17, +35, +41, +-3, +-37, +-12, +-49, +-31, +7, +15, +36, +-15, +-21, +6, +2, +36, +-12, +-27, +-34, +9, +44, +8, +57, +20, +-22, +-22, +-11, +-15, +-8, +-15, +-9, +49, +37, +26, +6, +30, +-17, +-43, +-3, +-31, +36, +49, +-15, +8, +51, +-8, +17, +-51, +-16, +-21, +12, +49, +-11, +41, +36, +15, +-5, +-69, +60, +14, +-24, +-21, +23, +3, +41, +41, +-27, +0, +33, +63, +18, +1, +-36, +-20, +18, +7, +-1, +37, +-33, +30, +36, +-29, +38, +57, +-8, +-21, +-26, +15, +-10, +-4, +-17, +-19, +8, +-9, +-13, +0, +10, +-30, +59, +12, +11, +51, +60, +19, +35, +6, +3, +-5, +-19, +-10, +20, +6, +-12, +-5, +5, +11, +33, +-33, +-27, +-2, +-2, +3, +53, +-1, +-15, +-10, +13, +-5, +24, +-17, +10, +8, +-3, +41, +-9, +9, +0, +30, +7, +7, +-10, +-28, +21, +13, +4, +-3, +44, +9, +-49, +-31, +-51, +23, +16, +-13, +-12, +36, +23, +34, +-39, +8, +20, +2, +32, +73, +24, +-16, +0, +-30, +17, +52, +-10, +28, +-43, +-1, +-34, +16, +-4, +39, +31, +5, +5, +3, +36, +48, +5, +28, +12, +57, +25, +-28, +14, +34, +49, +11, +41, +20, +-12, +-18, +-43, +-29, +58, +26, +44, +36, +-100, +-46, +-24, +0, +54, +4, +-2, +21, +5, +-12, +22, +9, +-35, +-5, +-36, +-22, +-10, +-11, +-15, +34, +20, +-33, +17, +39, +-13, +-32, +-36, +-22, +-3, +-38, +-39, +-6, +0, +15, +-6, +-15, +9, +-10, +45, +16, +17, +13, +-8, +15, +11, +-4, +59, +18, +-9, +12, +69, +27, +-30, +16, +7, +30, +41, +-30, +9, +-4, +23, +-5, +8, +3, +-75, +-25, +5, +14, +12, +-21, +-21, +6, +-13, +15, +8, +-6, +30, +24, +41, +-12, +5, +39, +18, +-4, +-60, +19, +-1, +-3, +-7, +16, +-11, +-51, +2, +-10, +-17, +-32, +39, +-35, +-46, +10, +27, +1, +21, +13, +78, +-12, +-2, +-28, +-20, +11, +75, +85, +-18, +21, +-7, +-9, +33, +19, +71, +23, +25, +2, +47, +32, +8, +24, +46, +-22, +23, +18, +-58, +66, +52, +22, +32, +25, +-34, +-26, +-21, +-69, +6, +27, +-28, +-13, +-15, +10, +-20, +-16, +20, +25, +7, +22, +52, +-4, +-8, +-28, +-18, +-6, +-36, +6, +-26, +12, +32, +8, +11, +16, +0, +-18, +-33, +-10, +11, +-40, +-6, +-29, +-34, +-30, +15, +15, +-27, +9, +8, +-43, +0, +-5, +4, +12, +60, +-11, +-4, +-32, +-25, +-38, +-37, +-17, +-1, +20, +37, +43, +7, +-2, +12, +-7, +-7, +-14, +-30, +9, +50, +-18, +-9, +-1, +-9, +6, +16, +-38, +-13, +30, +}; + +#define SIZE 24 +__attribute__ ((section(".heapsram"))) char g_mA[SIZE][SIZE]; +__attribute__ ((section(".heapsram"))) char g_mB[SIZE][SIZE]; +__attribute__ ((section(".heapsram"))) char g_mC[SIZE][SIZE]; +__attribute__ ((section(".heapsram"))) char g_mB_tmp[SIZE][SIZE]; diff --git a/astral/redmule/Makefile b/astral/redmule/Makefile new file mode 100644 index 0000000..c498417 --- /dev/null +++ b/astral/redmule/Makefile @@ -0,0 +1,9 @@ +PULP_APP = test +PULP_APP_SRCS = redmule.c +PULP_CFLAGS = -O3 + +ifeq ($(use_no_dma),1) + PULP_CFLAGS += -DUSE_NO_DMA +endif + +include $(PULP_SDK_HOME)/install/rules/pulp.mk diff --git a/astral/redmule/archi_redmule.h b/astral/redmule/archi_redmule.h new file mode 100644 index 0000000..9222d63 --- /dev/null +++ b/astral/redmule/archi_redmule.h @@ -0,0 +1,164 @@ +/* + * Copyright (C) 2022-2023 ETH Zurich and University of Bologna + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * SPDX-License-Identifier: Apache-2.0 + * + * Author: Yvan Tortorella + * + * High-level architecture of RedMulE + * + */ + +#ifndef __ARCHI_REDMULE_H__ +#define __ARCHI_REDMULE_H__ + +/* + * |========================================================================| + * || || + * ||Control and generic configuration register layout || + * |========================================================================| + * || # reg | offset | bits | bitmask || content || + * ||-------+----------+---------+--------------++-------------------------|| + * || 0 | 0x0000 | 31: 0 | 0xFFFFFFFF || TRIGGER || + * || 1 | 0x0004 | 31: 0 | 0xFFFFFFFF || ACQUIRE || + * || 2 | 0x0008 | 31: 0 | 0xFFFFFFFF || EVT_ENABLE || + * || 3 | 0x000c | 31: 0 | 0xFFFFFFFF || STATUS || + * || 4 | 0x0010 | 31: 0 | 0xFFFFFFFF || RUNNING_JOB || + * || 5 | 0x0014 | 31: 0 | 0xFFFFFFFF || SOFT_CLEAR || + * |========================================================================| + * || || + * ||Job-dependent registers layout || + * |========================================================================| + * || # reg | offset | bits | bitmask || content || + * ||-------+----------+---------+--------------++-------------------------|| + * || 0 | 0x0040 | 31: 0 | 0xFFFFFFFF || X_ADDR || + * ||-------+----------+---------+--------------++-------------------------|| + * || 1 | 0x0044 | 31: 0 | 0xFFFFFFFF || W_ADDR || + * ||-------+----------+---------+--------------++-------------------------|| + * || 2 | 0x0048 | 31: 0 | 0xFFFFFFFF || Z_ADDR || + * ||-------+----------+---------+--------------++-------------------------|| + * || 3 | 0x004C | | || Matrix Config 0 Reg || + * || | | 31:16 | 0xFFFF0000 || K Size (W Columns) || + * || | | 15: 0 | 0x0000FFFF || M Size (X Rows) || + * ||-------+----------+---------+--------------++-------------------------|| + * || 4 | 0x0050 | | || Matrix Config 1 Reg || + * || | | 31:16 | 0xFFFFFFFF || N Size (X Cols/W Rows) || + * ||-------+----------+---------+--------------++-------------------------|| + * || 5 | 0x0054 | | || Matrix Arithmetic Reg || + * || | | 12:10 | 0x00001C00 || Operation selection || + * || | | 9: 7 | 0x00000380 || Input/Output format || + * |========================================================================| + * + */ + +/* PULP Cluster Archi defines */ +#define ARCHI_CLUST_CTRL_BASE 0x50200000 +#define ARCHI_CLUST_HWPE_BASE 0x50201000 +#define DMA_COMMAND_QUEUE 0x50204400 +#define DMA_STATUS_REGISTER 0x50204404 +#define ARCHI_CL_HWPE_EVT0 12 +#define ARCHI_CL_HWPE_EVT1 13 +#define FC_DMA_EVENT 8 +#define CL_DMA_EVENT 22 +#define CLUST_CTRL_HWPE_EN 0x18 +#define CLUST_CTRL_HWPE_EN_MASK 0x800 +#define __builtin_bitinsert(a,b,c,d) (a | (((b << (32-c)) >> (32-c)) << d)) + +// RedMulE architecture +#define ADDR_WIDTH 32 +#define DATA_WIDTH 256 +#define REDMULE_FMT 16 +#define ARRAY_HEIGHT 4 +#define PIPE_REGS 3 +#define ARRAY_WIDTH 12 /* Superior limit is ARRAY_HEIGHT*PIPE_REGS */ + +// Commands +#define REDMULE_TRIGGER 0x00 +#define REDMULE_ACQUIRE 0x04 +#define REDMULE_FINISHED 0x08 +#define REDMULE_STATUS 0x0C +#define REDMULE_RUNNING_JOB 0x10 +#define REDMULE_SOFT_CLEAR 0x14 + +// Registers +#define REDMULE_REG_OFFS 0x40 +// #define REDMULE_REG_X_PTR 0x00 +// #define REDMULE_REG_W_PTR 0x04 +// #define REDMULE_REG_Z_PTR 0x08 +// #define REDMULE_MCFG0_PTR 0x0C +// #define REDMULE_MCFG1_PTR 0x10 +// #define REDMULE_ARITH_PTR 0x14 +#define REDMULE_REG_X_PTR 0x00 +#define REDMULE_REG_W_PTR 0x04 +#define REDMULE_REG_Y_PTR 0x08 +#define REDMULE_REG_Z_PTR 0x0C +#define REDMULE_REG_X_ITER_PTR 0x10 +#define REDMULE_REG_W_ITER_PTR 0x14 +#define REDMULE_REG_LEFTOVERS_PTR 0x18 +#define REDMULE_REG_LEFT_PARAMS_PTR 0x1C +#define REDMULE_REG_X_D1_STRIDE_PTR 0x20 +#define REDMULE_REG_W_TOT_LEN_PTR 0x24 +#define REDMULE_REG_TOT_X_READ_PTR 0x28 +#define REDMULE_REG_W_D0_STRIDE_PTR 0x2C +#define REDMULE_REG_YZ_TOT_LEN_PTR 0x30 +#define REDMULE_REG_YZ_D0_STRIDE_PTR 0x34 +#define REDMULE_REG_YZ_D2_STRIDE_PTR 0x38 +#define REDMULE_REG_X_ROWS_OFFS_PTR 0x3C +#define REDMULE_REG_X_BUFFER_SLOTS_PTR 0x40 +#define REDMULE_REG_X_TOT_LEN_PTR 0x44 +#define REDMULE_REG_OP_SELECTION 0x48 + +// OPs definition +#define MATMUL 0x0 +#define GEMM 0x1 +#define ADDMAX 0x2 +#define ADDMIN 0x3 +#define MULMAX 0x4 +#define MULMIN 0x5 +#define MAXMIN 0x6 +#define MINMAX 0x7 + +// GEMM formats +#define Float8 0x0 +#define Float16 0x1 +#define Float8Alt 0x2 +#define Float16Alt 0x3 + +#define RNE 0x0 +#define RTZ 0x1 +#define OP_FMADD 0x0 +#define OP_ADD 0x2 +#define OP_MUL 0x3 +#define OP_MINMAX 0x7 + +// FP Formats encoding +#define FP16 0x2 +#define FP8 0x3 +#define FP16ALT 0x4 +#define FP8ALT 0x5 + +/* DMA Archi */ +#define DMA_TX 0 +#define DMA_RX 1 +#define DMA_INC 1 + +#define PLP_DMA_TYPE_BIT 0x00000011 +#define PLP_DMA_INCR_BIT 0x00000012 +#define PLP_DMA_2D_BIT 0x00000013 +#define PLP_DMA_ELE_BIT 0x00000014 +#define PLP_DMA_ILE_BIT 0x00000015 +#define PLP_DMA_BLE_BIT 0x00000016 +#define PLP_DMA_2D_TCDM_BIT 0x0000017 + +#endif diff --git a/astral/redmule/hal_redmule.h b/astral/redmule/hal_redmule.h new file mode 100644 index 0000000..c5a0c32 --- /dev/null +++ b/astral/redmule/hal_redmule.h @@ -0,0 +1,527 @@ +/* + * Copyright (C) 2022-2023 ETH Zurich and University of Bologna + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * SPDX-License-Identifier: Apache-2.0 + * + * Author: Yvan Tortorella + * + * RedMulE Hardware Abstraction Layer (HAL) + */ + +#ifndef __HAL_REDMULE_H__ +#define __HAL_REDMULE_H__ + +#include +#include "inc/x_input.h" +#include "inc/w_input.h" +#include "inc/y_input.h" +#include "inc/z_output.h" +#include "inc/golden.h" +#include "inc/tensor_dim.h" + +/* + * + * For control, generic configuration register layout, + * and job-dependent register map, look at redmule_archi.h + * + */ + +// For all the following functions we use __builtin_pulp_OffsetedWrite and __builtin_pulp_OffsetedRead +// instead of classic load/store because otherwise the compiler is not able to correctly factorize +// the HWPE base in case several accesses are done, ending up with twice more code + +#define HWPE_WRITE(value, offset) *(int *)(ARCHI_CLUST_HWPE_BASE + offset) = value +#define HWPE_READ(offset) *(int *)(ARCHI_CLUST_HWPE_BASE + offset) + +static inline void redmule_x_add_set (unsigned int value) { + HWPE_WRITE(value, REDMULE_REG_OFFS + REDMULE_REG_X_PTR); +} + +static inline void redmule_w_add_set (unsigned int value) { + HWPE_WRITE(value, REDMULE_REG_OFFS + REDMULE_REG_W_PTR); +} + +static inline void redmule_y_add_set (unsigned int value) { + HWPE_WRITE(value, REDMULE_REG_OFFS + REDMULE_REG_Y_PTR); +} + +static inline void redmule_z_add_set (unsigned int value) { + HWPE_WRITE(value, REDMULE_REG_OFFS + REDMULE_REG_Z_PTR); +} + +// static inline void redmule_mcfg_set (uint32_t mcfg0, uint32_t mcfg1) { +// HWPE_WRITE(mcfg0, REDMULE_REG_OFFS + REDMULE_MCFG0_PTR); +// HWPE_WRITE(mcfg1, REDMULE_REG_OFFS + REDMULE_MCFG1_PTR); +// } +// +// static inline void redmule_arith_set (uint32_t arith) { +// HWPE_WRITE(arith, REDMULE_REG_OFFS + REDMULE_ARITH_PTR); +// } + +static inline void hwpe_trigger_job() { + HWPE_WRITE(0, REDMULE_TRIGGER); +} + +static inline int hwpe_acquire_job() { + return HWPE_READ(REDMULE_ACQUIRE); +} + +static inline unsigned int hwpe_get_status() { + return HWPE_READ(REDMULE_STATUS); +} + +static inline void hwpe_soft_clear() { + HWPE_WRITE(1, REDMULE_SOFT_CLEAR); +} + +static inline void hwpe_cg_enable() { + *(volatile int*) (ARCHI_CLUST_CTRL_BASE + CLUST_CTRL_HWPE_EN) |= CLUST_CTRL_HWPE_EN_MASK; +} + +static inline void hwpe_cg_disable() { + *(volatile int*) (ARCHI_CLUST_CTRL_BASE + CLUST_CTRL_HWPE_EN) &= ~CLUST_CTRL_HWPE_EN_MASK; +} + +static inline void redmule_evt_wait() { + do { + eu_evt_maskWaitAndClr (1 << ARCHI_CL_HWPE_EVT0); + } while((*(int volatile *)(ARCHI_CLUST_HWPE_BASE + REDMULE_STATUS)) != 0); +} + +/* DMA APIs */ +static inline int mchan_alloc(){ + return *(volatile int*) DMA_COMMAND_QUEUE; +} + +static inline void mchan_transfer(unsigned int len, + unsigned int ext_addr, + unsigned int tcdm_addr) { + + *(volatile int*) DMA_COMMAND_QUEUE = len | + (DMA_RX << PLP_DMA_TYPE_BIT) | + (DMA_INC << PLP_DMA_INCR_BIT) | + (0 << PLP_DMA_2D_BIT) | + (1 << PLP_DMA_ELE_BIT) | + (1 << PLP_DMA_ILE_BIT) | + (0 << PLP_DMA_BLE_BIT) | + (0 << PLP_DMA_2D_TCDM_BIT); + *(volatile int*) DMA_COMMAND_QUEUE = tcdm_addr; + *(volatile int*) DMA_COMMAND_QUEUE = ext_addr; +} + +static inline void mchan_barrier(int id) { + while(((*(volatile int*)(DMA_STATUS_REGISTER)) >> id ) & 0x1 ) { + eu_evt_maskWaitAndClr(1 << FC_DMA_EVENT); + } +} + +static inline void mchan_free(int id) { + *(volatile int*) DMA_STATUS_REGISTER = 0x1 << id; +} + +// void redmule_cfg (unsigned int x, unsigned int w, unsigned int z, +// uint16_t m_size, uint16_t n_size, uint16_t k_size, +// uint8_t gemm_op, uint8_t gemm_fmt){ +// +// uint32_t mcfg_reg0 = 0; +// uint32_t mcfg_reg1 = 0; +// uint32_t arith_reg = 0; +// +// mcfg_reg0 = (k_size << 16) | +// (m_size << 0); +// mcfg_reg1 = n_size << 0; +// +// arith_reg = (gemm_op << 10) | +// (gemm_fmt << 7); +// +// redmule_x_add_set ((unsigned int) x); +// redmule_w_add_set ((unsigned int) w); +// redmule_z_add_set ((unsigned int) z); +// redmule_mcfg_set ((unsigned int) mcfg_reg0, +// (unsigned int) mcfg_reg1); +// redmule_arith_set ((unsigned int) arith_reg); +// +// } + +void redmule_cfg (uint16_t m_size, uint16_t n_size, uint16_t k_size, uint8_t gemm_ops){ + uint32_t x_iters = 0; + uint32_t w_iters = 0; + uint32_t leftovers = 0; + uint32_t left_params = 0; + uint32_t x_d1_stride = 0; + uint32_t x_rows_offs = 0; + uint32_t w_tot_len = 0; + uint32_t w_d1_len = 0; + uint32_t w_d0_stride = 0; + uint32_t yz_tot_len = 0; + uint32_t yz_d0_stride = 0; + uint32_t yz_d2_stride = 0; + uint32_t tot_x_read = 0; + uint32_t x_buffer_slots = 0; + uint32_t op_selection = 0; + uint16_t tot_stores = 0; + uint16_t w_rows = n_size; + uint16_t depth = DATA_WIDTH/(ARRAY_HEIGHT*FPFORMAT); + uint8_t tile = ARRAY_HEIGHT*(PIPE_REGS + 1); + _Bool x_rows_sub = 0; + _Bool x_cols_sub = 0; + _Bool w_cols_sub = 0; + uint16_t x_rows_iter, + x_rows_iter_tmp, + w_rows_iter, + w_rows_iter_tmp; + uint16_t x_cols_iter, + x_cols_iter_tmp, + w_cols_iter, + w_cols_iter_tmp; + uint8_t x_rows_lftovr, + x_cols_lftovr, + w_rows_lftovr, + w_cols_lftovr, + slots; + + // Calculating the number of iterations alng the two dimensions of the X matrix + x_rows_iter_tmp = m_size/ARRAY_WIDTH; + x_cols_iter_tmp = n_size/tile; + + // Calculating the number of iterations alng the two dimensions of the W matrix + w_rows_iter_tmp = w_rows; + w_cols_iter_tmp = k_size/tile; + + // Calculating the residuals along the input dimensions + x_rows_lftovr = m_size - (x_rows_iter_tmp*ARRAY_WIDTH); + x_cols_lftovr = n_size - (x_cols_iter_tmp*tile); + + // Calculating the residuals along the weight dimensions + w_rows_lftovr = n_size - (ARRAY_HEIGHT*(w_rows/ARRAY_HEIGHT)); + w_cols_lftovr = k_size - (w_cols_iter_tmp*tile); + + if (w_cols_lftovr != 0) + w_cols_iter = w_cols_iter_tmp + 1; + else + w_cols_iter = w_cols_iter_tmp; + + if (w_rows_lftovr != 0) + w_rows_iter = w_rows_iter_tmp + ARRAY_HEIGHT - w_rows_lftovr; + else + w_rows_iter = w_rows_iter_tmp; + + if (x_cols_lftovr != 0) + x_cols_iter = x_cols_iter_tmp + 1; + else + x_cols_iter = x_cols_iter_tmp; + + if (x_rows_lftovr != 0) + x_rows_iter = x_rows_iter_tmp + 1; + else + x_rows_iter = x_rows_iter_tmp; + + if (x_cols_lftovr%depth != 0) + x_buffer_slots = x_cols_lftovr/depth + 1; + else + x_buffer_slots = x_cols_lftovr/depth; + + // Calculating the number of total stores + tot_stores = x_rows_iter*w_cols_iter; + + // Determining if input matrixes are sub-matrixes + if (m_size < ARRAY_WIDTH) + x_rows_sub = 1; + if (n_size < ARRAY_HEIGHT) + x_cols_sub = 1; + if (k_size < tile) + w_cols_sub = 1; + + // Operation selection + switch (gemm_ops) { + case MATMUL: + op_selection |= (RNE << 29 | RNE << 26 | OP_FMADD << 22 | OP_MINMAX << 18 | SRC_FMT << 15 | DST_FMT << 12) | 0; + break; + + case GEMM: + op_selection |= (RNE << 29 | RNE << 26 | OP_FMADD << 22 | OP_MINMAX << 18 | SRC_FMT << 15 | DST_FMT << 12) | 1; + break; + + case ADDMAX: + op_selection |= (RNE << 29 | RTZ << 26 | OP_ADD << 22 | OP_MINMAX << 18 | SRC_FMT << 15 | DST_FMT << 12) | 1; + break; + + case ADDMIN: + op_selection |= (RNE << 29 | RNE << 26 | OP_ADD << 22 | OP_MINMAX << 18 | SRC_FMT << 15 | DST_FMT << 12) | 1; + break; + + case MULMAX: + op_selection |= (RNE << 29 | RTZ << 26 | OP_MUL << 22 | OP_MINMAX << 18 | SRC_FMT << 15 | DST_FMT << 12) | 1; + break; + + case MULMIN: + op_selection |= (RNE << 29 | RNE << 26 | OP_MUL << 22 | OP_MINMAX << 18 | SRC_FMT << 15 | DST_FMT << 12) | 1; + break; + + case MAXMIN: + op_selection |= (RTZ << 29 | RNE << 26 | OP_MINMAX << 22 | OP_MINMAX << 18 | SRC_FMT << 15 | DST_FMT << 12) | 1; + break; + + case MINMAX: + op_selection |= (RNE << 29 | RTZ << 26 | OP_MINMAX << 22 | OP_MINMAX << 18 | SRC_FMT << 15 | DST_FMT << 12) | 1; + break; + } + + // Storing iterations and residuals in registers + x_iters |= x_rows_iter << 16 | x_cols_iter << 0; + w_iters |= w_rows_iter << 16 | w_cols_iter << 0; + leftovers |= x_rows_lftovr << 24 | x_cols_lftovr << 16 | w_rows_lftovr << 8 | w_cols_lftovr << 0; + left_params |= tot_stores << 16 | x_rows_sub << 15 | x_cols_sub << 14 | w_cols_sub << 13; + x_d1_stride = ((4*FPFORMAT)/ADDR_WIDTH)*(((DATA_WIDTH/FPFORMAT)*x_cols_iter_tmp) + x_cols_lftovr); + x_rows_offs = ARRAY_WIDTH*x_d1_stride; + w_tot_len = w_rows_iter*w_cols_iter*x_rows_iter; + w_d0_stride = ((4*FPFORMAT)/ADDR_WIDTH)*(((DATA_WIDTH/FPFORMAT)*w_cols_iter_tmp) + w_cols_lftovr); + yz_tot_len = ARRAY_WIDTH*x_rows_iter*w_cols_iter; + yz_d0_stride = w_d0_stride; + yz_d2_stride = ARRAY_WIDTH*w_d0_stride; + tot_x_read = x_rows_iter*x_cols_iter*w_cols_iter; + + // Writing the computations in configuration register + HWPE_WRITE(x_iters , REDMULE_REG_OFFS + REDMULE_REG_X_ITER_PTR ); + HWPE_WRITE(w_iters , REDMULE_REG_OFFS + REDMULE_REG_W_ITER_PTR ); + HWPE_WRITE(leftovers , REDMULE_REG_OFFS + REDMULE_REG_LEFTOVERS_PTR ); + HWPE_WRITE(left_params , REDMULE_REG_OFFS + REDMULE_REG_LEFT_PARAMS_PTR ); + HWPE_WRITE(x_d1_stride , REDMULE_REG_OFFS + REDMULE_REG_X_D1_STRIDE_PTR ); + HWPE_WRITE(x_rows_offs , REDMULE_REG_OFFS + REDMULE_REG_X_ROWS_OFFS_PTR ); + HWPE_WRITE(tot_x_read , REDMULE_REG_OFFS + REDMULE_REG_TOT_X_READ_PTR ); + HWPE_WRITE(x_buffer_slots, REDMULE_REG_OFFS + REDMULE_REG_X_BUFFER_SLOTS_PTR ); + HWPE_WRITE(w_tot_len , REDMULE_REG_OFFS + REDMULE_REG_W_TOT_LEN_PTR ); + HWPE_WRITE(w_d0_stride , REDMULE_REG_OFFS + REDMULE_REG_W_D0_STRIDE_PTR ); + HWPE_WRITE(yz_tot_len , REDMULE_REG_OFFS + REDMULE_REG_YZ_TOT_LEN_PTR ); + HWPE_WRITE(yz_d0_stride , REDMULE_REG_OFFS + REDMULE_REG_YZ_D0_STRIDE_PTR ); + HWPE_WRITE(yz_d2_stride , REDMULE_REG_OFFS + REDMULE_REG_YZ_D2_STRIDE_PTR ); + HWPE_WRITE(op_selection , REDMULE_REG_OFFS + REDMULE_REG_OP_SELECTION ); +} + +void generate_test_data16(int x_start_addr, + int w_start_addr, + int y_start_addr, + int m_size, + int n_size, + int k_size) { + + int x_addr = x_start_addr; + int w_addr = w_start_addr; + int y_addr = y_start_addr; + int x_end_addr = x_start_addr + (2*m_size*n_size); + int w_end_addr = w_start_addr + (2*n_size*k_size); + int y_end_addr = y_start_addr + (2*m_size*k_size); + + // Generating input stimuli from golden model + for (x_addr = x_start_addr; x_addr < x_end_addr; x_addr += 2) { + int x = x_addr - x_start_addr; + *(uint32_t *)(x_addr) = x_inp[x/2]; + } + + // Generating Weight stimuli from golden model + for (w_addr = w_start_addr; w_addr < w_end_addr; w_addr += 2) { + int w = w_addr - w_start_addr; + *(uint32_t *)(w_addr) = w_inp[w/2]; + } + + for (y_addr = y_start_addr; y_addr < y_end_addr; y_addr += 2) { + int y = y_addr - y_start_addr; + *(uint32_t *)(y_addr) = y_inp[y/2]; + } +} + +int redmule_compare16 (int z_start_addr, int m_size, int k_size) { + int err = 0; + int z_end_addr = z_start_addr + 2*m_size*k_size; + uint16_t z_computed; + uint16_t diff, diff_1, diff_2; + + for (int z_addr = z_start_addr; z_addr < z_end_addr; z_addr += 2) { + int z = z_addr - z_start_addr; + z_computed = *(uint32_t *)(z_addr); + + if ( z_computed != z_oup[z/2] ) { + diff_1 = z_computed - z_oup[z/2]; + if (diff_1 > 3) { + diff_2 = z_oup[z/2] - z_computed; + if (diff_2 > 3) { + err++; + } + } + } + } + + return err; + +} + +int redmule16_compare_int(uint32_t *actual_z, uint32_t *golden_z, int len) { + #define ERR 0x0011 + uint32_t actual_word = 0; + uint16_t actual_MSHWord, actual_LSHWord; + uint32_t golden_word = 0; + uint16_t golden_MSHWord, golden_LSHWord; + uint32_t actual = 0; + uint32_t golden = 0; + + int errors = 0; + int error; + + for (int i=0; i golden_LSHWord) ? (actual_LSHWord - golden_LSHWord) : 0; + diff = (actual_LSHWord < golden_LSHWord) ? (golden_LSHWord - actual_LSHWord) : 0; + + if (diff > ERR) { + error = 1; + #ifdef VERBOSE + tfp_printf ("diff: 0x%08x\n", diff); + tfp_printf ("LSW: Error!\n"); + #endif + } + + // Checking Most Significant Half-Word + actual_MSHWord = (uint16_t)((actual_word >> 16) & 0x0000FFFF); + golden_MSHWord = (uint16_t)((golden_word >> 16) & 0x0000FFFF); + + diff = (actual_MSHWord > golden_MSHWord) ? (actual_MSHWord - golden_MSHWord) : 0; + diff = (actual_MSHWord < golden_MSHWord) ? (golden_MSHWord - actual_MSHWord) : 0; + + if (diff > ERR) { + error = 1; + #ifdef VERBOSE + tfp_printf ("diff: 0x%08x\n", diff); + tfp_printf ("MSW: Error!\n"); + #endif + } + + errors += error; + + #ifdef DEBUG + tfp_printf(" Golden: 0x%08x; Actual: 0x%08x,\n", golden_word, actual_word); + #endif + + #ifdef VERBOSE + if(error) { + if(errors==1) tfp_printf(" golden <- actual @ address @ index\n"); + tfp_printf(" 0x%08x <- 0x%08x @ 0x%08x @ 0x%08x\n", golden_word, actual_word, (actual_z+i), i*4); + } + #endif + } + return errors; +} + +int redmule8_compare_int(uint32_t *actual_z, uint32_t *golden_z, int len) { + #define ERR 0x0011 + uint32_t actual_word = 0; + uint8_t actual_Byte0, + actual_Byte1, + actual_Byte2, + actual_Byte3; + uint32_t golden_word = 0; + uint8_t golden_Byte0, + golden_Byte1, + golden_Byte2, + golden_Byte3; + uint32_t actual = 0; + uint32_t golden = 0; + + int errors = 0; + int error; + + for (int i=0; i golden_Byte0) ? (actual_Byte0 - golden_Byte0) : 0; + diff = (actual_Byte0 < golden_Byte0) ? (golden_Byte0 - actual_Byte0) : 0; + + if (diff > ERR) { + error = 1; + tfp_printf ("diff: 0x%08x\n", diff); + tfp_printf ("Byte0: Error!\n"); + } + + // Cheching Byte1 + actual_Byte1 = (uint8_t)( (actual_word >> 8 ) & 0x000000FF); + golden_Byte1 = (uint8_t)( (golden_word >> 8 ) & 0x000000FF); + + diff = (actual_Byte1 > golden_Byte1) ? (actual_Byte1 - golden_Byte1) : 0; + diff = (actual_Byte1 < golden_Byte1) ? (golden_Byte1 - actual_Byte1) : 0; + + if (diff > ERR) { + error = 1; + tfp_printf ("diff: 0x%08x\n", diff); + tfp_printf ("Byte1: Error!\n"); + } + + // Cheching Byte2 + actual_Byte2 = (uint8_t)( (actual_word >> 16 ) & 0x000000FF); + golden_Byte2 = (uint8_t)( (golden_word >> 16 ) & 0x000000FF); + + diff = (actual_Byte2 > golden_Byte2) ? (actual_Byte2 - golden_Byte2) : 0; + diff = (actual_Byte2 < golden_Byte2) ? (golden_Byte2 - actual_Byte2) : 0; + + if (diff > ERR) { + error = 1; + tfp_printf ("diff: 0x%08x\n", diff); + tfp_printf ("Byte2: Error!\n"); + } + + // Cheching Byte3 + actual_Byte3 = (uint8_t)( (actual_word >> 24 ) & 0x000000FF); + golden_Byte3 = (uint8_t)( (golden_word >> 24 ) & 0x000000FF); + + diff = (actual_Byte3 > golden_Byte3) ? (actual_Byte3 - golden_Byte3) : 0; + diff = (actual_Byte3 < golden_Byte3) ? (golden_Byte3 - actual_Byte3) : 0; + + if (diff > ERR) { + error = 1; + tfp_printf ("diff: 0x%08x\n", diff); + tfp_printf ("Byte3: Error!\n"); + } + + errors += error; + + #ifdef DEBUG + tfp_printf(" Golden: 0x%08x; Actual: 0x%08x,\n", golden_word, actual_word); + #endif + + #ifdef VERBOSE + if(error) { + if(errors==1) tfp_printf(" golden <- actual @ address @ index\n"); + tfp_printf(" 0x%08x <- 0x%08x @ 0x%08x @ 0x%08x\n", golden_word, actual_word, (actual_z+i), i*4); + } + #endif + } + return errors; +} + +#endif diff --git a/astral/redmule/inc/golden.h b/astral/redmule/inc/golden.h new file mode 100644 index 0000000..f664e47 --- /dev/null +++ b/astral/redmule/inc/golden.h @@ -0,0 +1,387 @@ + /* Header file generated by RedMulE Golden Model */ +uint32_t golden [384] = { +0x48974845, +0x48384608, +0x487b4855, +0x48804869, +0x48b046d1, +0x483f48db, +0x485f48c9, +0x483a4881, +0x472c484b, +0x492b4762, +0x48fd4822, +0x492e488e, +0x484f483e, +0x46d749e8, +0x489d484b, +0x47e9490b, +0x47d2484f, +0x474744be, +0x46c047c7, +0x48af4727, +0x482d46c5, +0x482e483d, +0x479f4897, +0x4749488b, +0x46a8489a, +0x488b46f2, +0x47e84891, +0x483d4872, +0x46fd4716, +0x46a049b5, +0x47a446e7, +0x476748a1, +0x49354939, +0x48c14703, +0x48bd4863, +0x48cf4913, +0x48b848b6, +0x49204946, +0x48e1495e, +0x48b24938, +0x4882493a, +0x49d5483b, +0x49724911, +0x49df496b, +0x488848f2, +0x48214a46, +0x490c48c1, +0x48a349b2, +0x47b0463a, +0x476244cb, +0x46b94765, +0x4814466a, +0x47964631, +0x474b4666, +0x47044798, +0x47614838, +0x459047d3, +0x48a245ea, +0x484447f1, +0x4776484b, +0x46d847d6, +0x44d348f3, +0x478d46fa, +0x466e481e, +0x481e4827, +0x479445a2, +0x48064727, +0x48d5475d, +0x48284708, +0x480d4862, +0x48324895, +0x47f148bd, +0x46a7482a, +0x492d47b1, +0x4884484d, +0x485f48dc, +0x480c476d, +0x46d348e9, +0x48844728, +0x480e48a0, +0x48134862, +0x485a4675, +0x473847e8, +0x48234836, +0x482146e7, +0x47b34822, +0x48554846, +0x47174863, +0x47c14872, +0x488e46d5, +0x485f47e2, +0x48b8487c, +0x4788481e, +0x467748bd, +0x47f846c9, +0x47fc48fe, +0x47b247a0, +0x467e4588, +0x46c74662, +0x481246e8, +0x474e4536, +0x468f46c0, +0x4679481f, +0x46e246a1, +0x45604809, +0x47eb4630, +0x475746b5, +0x477f4848, +0x46d846a6, +0x459a4870, +0x46784670, +0x468c47d2, +0x48c44762, +0x479146e3, +0x486d46b1, +0x486747d0, +0x47f6468d, +0x475648a5, +0x48544857, +0x48384866, +0x46ec484d, +0x48f647d2, +0x4879484a, +0x483c4848, +0x4806471d, +0x473048fa, +0x47b84768, +0x46f94865, +0x491848a8, +0x486746ca, +0x48624800, +0x491048d3, +0x4849474e, +0x486b48eb, +0x48c54966, +0x483048f4, +0x477848f9, +0x499e481e, +0x48f148cf, +0x49234982, +0x47cf487c, +0x464949ea, +0x495e4773, +0x483f48b2, +0x497548a7, +0x481e4616, +0x4866481f, +0x486448b6, +0x487347dc, +0x487f485c, +0x491f4938, +0x48b6490d, +0x48a148f8, +0x492d4859, +0x4915489c, +0x48874899, +0x4859486c, +0x471e49ca, +0x49184867, +0x482748d3, +0x4998488b, +0x481d4704, +0x488048b8, +0x49444876, +0x48f2470c, +0x489b48b9, +0x48e54956, +0x48a548d6, +0x485648dc, +0x49ab484e, +0x490e48e0, +0x494548dd, +0x48dd488b, +0x47ea4a32, +0x49114835, +0x48194965, +0x481e460e, +0x4673452c, +0x4717475c, +0x46d046f6, +0x46bc4696, +0x481e4726, +0x46ea4763, +0x475846fe, +0x4627478b, +0x483f4704, +0x47b146ad, +0x48164792, +0x468446f2, +0x45a84827, +0x47a4472f, +0x462b4797, +0x48ab483f, +0x4863468f, +0x4766485a, +0x48cb481d, +0x490347dc, +0x483048fc, +0x483e48cc, +0x486448ab, +0x47634966, +0x499d4794, +0x488b488e, +0x496048dc, +0x484c4854, +0x474c499c, +0x48bc4826, +0x48834949, +0x4905489d, +0x481e4718, +0x48f448e3, +0x490448c1, +0x48b347e8, +0x48d44892, +0x489448ff, +0x488648d5, +0x480348fa, +0x492e47d2, +0x48b24870, +0x492b48e5, +0x4785487b, +0x471d49e3, +0x48bf4837, +0x48c4489b, +0x4871475c, +0x4811464a, +0x471c47af, +0x48174817, +0x484e463b, +0x464f477f, +0x487c4704, +0x472547a3, +0x462a4853, +0x4860465a, +0x48804736, +0x482b47e1, +0x46c04811, +0x475d48dc, +0x48064668, +0x46f44893, +0x49594858, +0x487b463d, +0x484e480f, +0x48a648c0, +0x48944847, +0x484a48a0, +0x48f4491e, +0x48b548fc, +0x47d248ce, +0x497f47db, +0x49394955, +0x48ce48a7, +0x48844890, +0x476349d6, +0x4922486e, +0x48c348f4, +0x491c47ec, +0x47834698, +0x47544715, +0x47524745, +0x4832472f, +0x48094817, +0x48c347f8, +0x480047e6, +0x473048b6, +0x48cb480a, +0x488e479e, +0x488e47c2, +0x47ee472f, +0x4744489d, +0x48514755, +0x47d34846, +0x48a04838, +0x47624634, +0x48064786, +0x482d47e3, +0x486c4726, +0x480347b7, +0x481448ac, +0x483948e0, +0x47504827, +0x48c546f2, +0x4886483f, +0x485648ad, +0x47a947e8, +0x47434937, +0x481f46d0, +0x4804484c, +0x481f47fd, +0x4813456d, +0x4807474d, +0x480e4688, +0x481046e8, +0x4799469f, +0x478f4853, +0x482447f2, +0x471f47d0, +0x485f46da, +0x481c4813, +0x4863482e, +0x480b4786, +0x46b848c9, +0x46e2475a, +0x46c54852, +0x480245af, +0x46c24466, +0x4743465d, +0x47ba46b7, +0x46c34636, +0x47844677, +0x47c2485a, +0x46ac46dc, +0x460e47de, +0x4834465f, +0x476947f4, +0x481046fc, +0x45ea45fd, +0x45b548d0, +0x47834704, +0x46c44830, +0x47c74759, +0x45b0453d, +0x47024741, +0x47934736, +0x47ba461b, +0x46dd470b, +0x470b4657, +0x4710470d, +0x468f486c, +0x46ba45c3, +0x483b479d, +0x477446c9, +0x46a746a9, +0x46064833, +0x46a94690, +0x46a746f5, +0x48bb47ac, +0x4803452c, +0x4824470f, +0x48cb47d5, +0x484a4707, +0x47974832, +0x482c4851, +0x4877487a, +0x465d4891, +0x48ce47f4, +0x48994898, +0x486a484e, +0x47f047ac, +0x4611493e, +0x489e47e2, +0x46af488c, +0x48364665, +0x46b645e4, +0x46b946a1, +0x46dd46c8, +0x474b4658, +0x4777467b, +0x47984769, +0x475e4785, +0x4656472a, +0x488145fb, +0x472d46fc, +0x47a3476e, +0x46ca465d, +0x45004855, +0x479a464f, +0x473846c3, +0x486c481e, +0x48014659, +0x477a4756, +0x487b47d5, +0x48084706, +0x4838484f, +0x48634870, +0x480648d3, +0x47714865, +0x494c46be, +0x484c4915, +0x48624900, +0x46e8481a, +0x46a04974, +0x483d4775, +0x480e487c, +}; \ No newline at end of file diff --git a/astral/redmule/inc/tensor_dim.h b/astral/redmule/inc/tensor_dim.h new file mode 100644 index 0000000..21bd0d8 --- /dev/null +++ b/astral/redmule/inc/tensor_dim.h @@ -0,0 +1,13 @@ + /* Header file generated by RedMulE Golden Model */ +#ifndef __TENSOR_DIM__ +#define __TENSOR_DIM__ + +#define M_SIZE 24 +#define N_SIZE 32 +#define K_SIZE 32 +#define SRC_FMT FP16 +#define DST_FMT FP16 +#define FPFORMAT 16 +uint8_t gemm_ops = GEMM; + +#endif diff --git a/astral/redmule/inc/w_2D.h b/astral/redmule/inc/w_2D.h new file mode 100644 index 0000000..9409c64 --- /dev/null +++ b/astral/redmule/inc/w_2D.h @@ -0,0 +1,35 @@ + /* Header file generated by RedMulE Golden Model */ +uint16_t w_inp_2D [32][32] = { +0x311a, 0x39e0, 0x387d, 0x3a4a, 0x386f, 0x3ada, 0x392f, 0x3854, 0x3014, 0x2fd2, 0x31c9, 0x2fca, 0x2e55, 0x3bc8, 0x396d, 0x3b1d, 0x39f6, 0x333a, 0x3908, 0x3628, 0x3bab, 0x3b8b, 0x3b4a, 0x322d, 0x3925, 0x317a, 0x3725, 0x31c2, 0x3066, 0x38f3, 0x3a17, 0x3476, +0x3bda, 0x3196, 0x3922, 0x3680, 0x396a, 0x3021, 0x3761, 0x374d, 0x2fc2, 0x3967, 0x3b94, 0x33b5, 0x3797, 0x34d6, 0x3655, 0x2176, 0x39bc, 0x3999, 0x3658, 0x3904, 0x3759, 0x2ade, 0x3a5a, 0x3b78, 0x36c7, 0x2d01, 0x3b58, 0x2d9a, 0x373d, 0x3952, 0x38e8, 0x3887, +0x37b6, 0x3a88, 0x2f8a, 0x2d79, 0x3413, 0x3421, 0x3976, 0x32b2, 0x3446, 0x2d99, 0x3a56, 0x3322, 0x3b49, 0x39fa, 0x3acd, 0x3af6, 0x304c, 0x3abb, 0x3a83, 0x38b2, 0x3ab9, 0x363e, 0x389f, 0x31bb, 0x38e1, 0x3bc4, 0x3b9b, 0x2984, 0x3a43, 0x3b2f, 0x35d6, 0x3bda, +0x2df3, 0x3bf8, 0x2acc, 0x378b, 0x3555, 0x2e59, 0x31d4, 0x34ec, 0x3a46, 0x3bab, 0x3214, 0x3161, 0x3470, 0x3a03, 0x368e, 0x31ad, 0x27cb, 0x2ecb, 0x3422, 0x39f7, 0x3644, 0x3a77, 0x313f, 0x34f2, 0x39b3, 0x3bf2, 0x379a, 0x3456, 0x35fe, 0x3ae7, 0x3964, 0x385f, +0x3b16, 0x3999, 0x3833, 0x2eda, 0x3afd, 0x3a4a, 0x3ba2, 0x2bd4, 0x3b38, 0x31a2, 0x32dd, 0x353c, 0x366f, 0x375e, 0x3821, 0x367a, 0x3b44, 0x39e6, 0x3787, 0x339e, 0x39d7, 0x38c6, 0x37d5, 0x342f, 0x3984, 0x319b, 0x33b5, 0x35ab, 0x398a, 0x374e, 0x36b6, 0x3b21, +0x3bbb, 0x2ab3, 0x2ad5, 0x33bc, 0x2bef, 0x3780, 0x3738, 0x3a0b, 0x3b09, 0x30ca, 0x384e, 0x3ab3, 0x39bd, 0x3453, 0x3a6d, 0x3957, 0x2c10, 0x30e9, 0x35d4, 0x3aef, 0x3be9, 0x39ad, 0x3a74, 0x3af9, 0x3739, 0x2d4d, 0x39fe, 0x3b72, 0x2c57, 0x398c, 0x381f, 0x3930, +0x3820, 0x321b, 0x3964, 0x2964, 0x33a0, 0x2d00, 0x2490, 0x336b, 0x3465, 0x3b2e, 0x3aa0, 0x371f, 0x300e, 0x3a09, 0x3bf1, 0x25cc, 0x3b6f, 0x3384, 0x3a88, 0x3acb, 0x3814, 0x36d0, 0x3081, 0x3a2c, 0x3353, 0x39cb, 0x31ed, 0x3af6, 0x3721, 0x36c7, 0x2ce2, 0x390d, +0x3698, 0x3ab2, 0x3b3e, 0x2eb4, 0x3998, 0x39e3, 0x3a77, 0x3632, 0x2c12, 0x3bd5, 0x3ba3, 0x3bba, 0x323c, 0x367b, 0x3557, 0x39c8, 0x37db, 0x3b45, 0x3b6e, 0x3931, 0x3121, 0x3a8d, 0x3a55, 0x3b9b, 0x358a, 0x3925, 0x3491, 0x3912, 0x3b6b, 0x3584, 0x32df, 0x3120, +0x32b2, 0x3b0a, 0x2cad, 0x3465, 0x3ad3, 0x3bcd, 0x363b, 0x3afe, 0x354b, 0x3374, 0x39af, 0x3b7f, 0x308c, 0x2e72, 0x3380, 0x3b70, 0x3902, 0x38d8, 0x39f3, 0x3a4b, 0x3853, 0x397b, 0x2ebe, 0x387f, 0x2845, 0x37e2, 0x360f, 0x370b, 0x3acb, 0x35d4, 0x36e6, 0x3262, +0x2e88, 0x3a54, 0x2ee3, 0x3575, 0x3afe, 0x2aee, 0x39a0, 0x3aae, 0x3693, 0x3432, 0x3834, 0x3b9b, 0x3bcb, 0x2e3a, 0x356d, 0x374e, 0x3924, 0x383c, 0x311e, 0x3ac5, 0x352d, 0x311e, 0x38ca, 0x34d4, 0x36ca, 0x34ed, 0x3a13, 0x33eb, 0x3639, 0x3828, 0x3b3c, 0x3939, +0x3837, 0x3521, 0x2cb5, 0x3629, 0x3924, 0x384c, 0x366a, 0x3bbf, 0x2e9e, 0x3ba8, 0x33ad, 0x38c8, 0x3934, 0x3907, 0x249a, 0x3690, 0x3a09, 0x3215, 0x3898, 0x325d, 0x37d5, 0x3195, 0x361c, 0x3ae4, 0x351f, 0x3452, 0x3bc0, 0x375c, 0x39bf, 0x317a, 0x3aae, 0x283a, +0x3476, 0x3b92, 0x3472, 0x383e, 0x280f, 0x39d6, 0x2fd1, 0x31f4, 0x2ffb, 0x3b97, 0x3692, 0x36c0, 0x3989, 0x33cf, 0x3ba6, 0x3239, 0x35d7, 0x33ab, 0x31eb, 0x3b47, 0x389b, 0x3b88, 0x3580, 0x354c, 0x3802, 0x3b9a, 0x3b94, 0x2a92, 0x2db1, 0x38bd, 0x2dfb, 0x3900, +0x344f, 0x3739, 0x27a5, 0x3b2e, 0x342b, 0x34bb, 0x30c8, 0x3ae8, 0x3b26, 0x3982, 0x38c0, 0x3408, 0x38c8, 0x36ef, 0x3bf0, 0x3acf, 0x3a3c, 0x3825, 0x31a5, 0x3ada, 0x3b5b, 0x37db, 0x3a01, 0x3663, 0x3a7d, 0x327b, 0x3a1f, 0x3862, 0x38af, 0x3204, 0x372e, 0x3b19, +0x3708, 0x3622, 0x2e62, 0x39ab, 0x2d4d, 0x31b4, 0x3552, 0x3bbc, 0x36f2, 0x36eb, 0x38ef, 0x3755, 0x3bbe, 0x2c17, 0x3815, 0x2f53, 0x363f, 0x38c1, 0x3246, 0x386b, 0x34de, 0x34e4, 0x3baa, 0x349e, 0x32ce, 0x3a68, 0x373f, 0x2cce, 0x3b36, 0x28ba, 0x3b50, 0x3232, +0x1f34, 0x3928, 0x35cd, 0x3b38, 0x30ce, 0x35a1, 0x3a06, 0x3a32, 0x3a53, 0x3489, 0x3241, 0x372f, 0x390c, 0x3a1b, 0x378a, 0x3713, 0x3769, 0x37a8, 0x3418, 0x3ad4, 0x3a4e, 0x3bf7, 0x37a5, 0x34dc, 0x39b2, 0x351b, 0x3372, 0x349f, 0x2f50, 0x3ab1, 0x3795, 0x2db7, +0x3864, 0x3157, 0x3900, 0x323e, 0x389e, 0x3880, 0x3b1f, 0x37a1, 0x396c, 0x2e43, 0x2c2a, 0x3b78, 0x3988, 0x3a14, 0x39c1, 0x3b51, 0x3780, 0x3bf2, 0x2d19, 0x3815, 0x3a5f, 0x3641, 0x2f62, 0x37d5, 0x3564, 0x139a, 0x3ab8, 0x28f7, 0x3785, 0x34e1, 0x3097, 0x3768, +0x3971, 0x3ae2, 0x32ae, 0x2fd5, 0x382a, 0x346c, 0x3133, 0x3167, 0x3940, 0x2d12, 0x389a, 0x3bd0, 0x3943, 0x391c, 0x3a75, 0x2a11, 0x391e, 0x372d, 0x3a79, 0x3b72, 0x3373, 0x39b7, 0x35d7, 0x372b, 0x3a6d, 0x38a1, 0x3279, 0x3434, 0x3694, 0x3b45, 0x3abb, 0x392d, +0x34a8, 0x3757, 0x32ca, 0x345d, 0x36a5, 0x3854, 0x2dcd, 0x30af, 0x38dd, 0x3067, 0x3411, 0x3997, 0x397a, 0x3a64, 0x38b8, 0x3962, 0x3509, 0x3bb6, 0x3a66, 0x339f, 0x372a, 0x31a8, 0x37da, 0x36ff, 0x33c6, 0x31da, 0x3977, 0x3b72, 0x3841, 0x3567, 0x3433, 0x33b8, +0x39fe, 0x3a10, 0x3bf2, 0x35e7, 0x3a4a, 0x3b3e, 0x2ec7, 0x3aa4, 0x3846, 0x3af9, 0x38a9, 0x2c1f, 0x39ab, 0x349f, 0x31d6, 0x39ae, 0x3b79, 0x352d, 0x3516, 0x347c, 0x2f33, 0x35ad, 0x31c4, 0x3b52, 0x354b, 0x3786, 0x3ab7, 0x3896, 0x34ac, 0x352f, 0x37e6, 0x326a, +0x2e44, 0x34c7, 0x388d, 0x3bf4, 0x363f, 0x3b3d, 0x33b1, 0x3b8b, 0x3340, 0x37f7, 0x3b07, 0x25bf, 0x398e, 0x3505, 0x3bd7, 0x366d, 0x388a, 0x2cc0, 0x359a, 0x3b9a, 0x3b99, 0x379d, 0x3b6b, 0x39b8, 0x3223, 0x2703, 0x3ba9, 0x2ecb, 0x3759, 0x39d8, 0x37ac, 0x32cf, +0x35f2, 0x38a3, 0x399e, 0x3bd2, 0x3780, 0x3af3, 0x3b5e, 0x337b, 0x3a08, 0x35da, 0x3446, 0x3b25, 0x3ad0, 0x3bee, 0x3141, 0x32d8, 0x34ce, 0x2ac9, 0x3800, 0x3a8a, 0x2d53, 0x368a, 0x3561, 0x3998, 0x35a3, 0x3677, 0x3ab2, 0x3269, 0x3236, 0x3b3e, 0x3aba, 0x3bac, +0x395d, 0x3820, 0x1df6, 0x3bb5, 0x35b5, 0x3675, 0x3b74, 0x360f, 0x34de, 0x3a0c, 0x3aeb, 0x299d, 0x3207, 0x3bd8, 0x2178, 0x3995, 0x3948, 0x3908, 0x3843, 0x2ea5, 0x3045, 0x3989, 0x345d, 0x39c5, 0x3a89, 0x3863, 0x3be0, 0x397a, 0x38f1, 0x39e2, 0x3b08, 0x352e, +0x385f, 0x28f2, 0x3bc3, 0x35e0, 0x380c, 0x3b9c, 0x3afc, 0x390a, 0x3689, 0x34fd, 0x2cf5, 0x308e, 0x342b, 0x3921, 0x3a67, 0x3ad6, 0x2986, 0x32fc, 0x35aa, 0x3507, 0x3608, 0x33fd, 0x3bf3, 0x39e2, 0x3b0f, 0x30b7, 0x3896, 0x3ae4, 0x2145, 0x35b6, 0x2e1d, 0x3ad1, +0x333d, 0x3afb, 0x2703, 0x3413, 0x1d7d, 0x3b7f, 0x3ae1, 0x303c, 0x3004, 0x39d3, 0x3554, 0x31a4, 0x354e, 0x3662, 0x39c5, 0x2eb7, 0x2c6e, 0x397f, 0x31d8, 0x1f0c, 0x38e3, 0x35f0, 0x2714, 0x28d1, 0x375e, 0x3a75, 0x3830, 0x3578, 0x397d, 0x3b18, 0x383c, 0x3498, +0x39ad, 0x3598, 0x23c4, 0x34ea, 0x3a61, 0x2b00, 0x3707, 0x3ae1, 0x37ae, 0x389d, 0x37fa, 0x3673, 0x3278, 0xf3e, 0x3809, 0x33c6, 0x3bf5, 0x3279, 0x3816, 0x360c, 0x39c8, 0x381f, 0x3741, 0x2d66, 0x38c0, 0x37d3, 0x377a, 0x3621, 0x2faf, 0x392e, 0x2de6, 0x33c5, +0x3803, 0x2600, 0x32e9, 0x39b4, 0x38d2, 0x34e8, 0x2fe6, 0x3199, 0x3643, 0x3a77, 0x27cc, 0x39d7, 0x34c6, 0x2ea8, 0x364e, 0x3b07, 0x31c7, 0x30a1, 0x31b1, 0x3b8f, 0x3571, 0x3b75, 0x3989, 0x3805, 0x39fb, 0x3945, 0x352b, 0x31d8, 0x3904, 0x3440, 0x3a57, 0x2cf7, +0x3b39, 0x2fcd, 0x2b89, 0x2edd, 0x3682, 0x36a9, 0x32c8, 0x37ac, 0x32a5, 0x3311, 0x394b, 0x3b84, 0x3aec, 0x3601, 0x2765, 0x3b69, 0x396b, 0x3727, 0x3bfe, 0x3907, 0x376f, 0x3674, 0x3973, 0x3671, 0x3491, 0x3993, 0x383f, 0x3335, 0x3989, 0x3550, 0x3077, 0x35f5, +0x3a59, 0x3950, 0x380c, 0x37cd, 0x30bf, 0x3607, 0x3afa, 0x3b5d, 0x32b9, 0x386b, 0x35bd, 0x3aca, 0x3ba5, 0x3b2d, 0x3b19, 0x3b8b, 0x345e, 0x2845, 0x34aa, 0x372a, 0x3448, 0x34f5, 0x3ae2, 0x3637, 0x2cb5, 0x354b, 0x3b15, 0x2ca8, 0x2641, 0x3178, 0x2cfe, 0x39b4, +0x3bdd, 0x3acb, 0x3a05, 0x38a2, 0x3b4a, 0x34e5, 0x395f, 0x394b, 0x34c4, 0x3aa5, 0x29bb, 0x2d96, 0x339d, 0x387c, 0x382e, 0x385a, 0x396b, 0x3aa9, 0x2f1e, 0x33a7, 0x3b90, 0x3b7b, 0x3b5f, 0x39d3, 0x3b18, 0x354f, 0x2cdb, 0x3a6f, 0x3434, 0x34ff, 0x3a5b, 0x3b84, +0x3a33, 0x384b, 0x2e67, 0x3b85, 0x3853, 0x380c, 0x346a, 0x3aaa, 0x3492, 0x33e8, 0x3bf2, 0x38ae, 0x3a29, 0x3830, 0x3221, 0x35b1, 0x3a48, 0x2c68, 0x2ced, 0x3a7e, 0x3539, 0x3922, 0x374c, 0x3aaa, 0x2dae, 0x395d, 0x3b3d, 0x3890, 0x2cfe, 0x2dd6, 0x3bad, 0x33c5, +0x2c07, 0x3a2c, 0x37a8, 0x390f, 0x2fc8, 0x35ae, 0x388c, 0x30ee, 0x3674, 0x391d, 0x3bfc, 0x36bf, 0x322d, 0x3a78, 0x35c0, 0x3492, 0x3ac8, 0x3504, 0x3315, 0x381d, 0x3a7a, 0x3a08, 0x343c, 0x3bda, 0x341b, 0x39f0, 0x3b9e, 0x395d, 0x3c00, 0x38ab, 0x3bcf, 0x3564, +0x33c4, 0x3b0d, 0x3623, 0x33b9, 0x3b92, 0x1e71, 0x2c57, 0x36d0, 0x314b, 0x3a16, 0x3372, 0x341b, 0x3aaa, 0x3444, 0x396b, 0x2dd7, 0x3b30, 0x3559, 0x3b5b, 0x3a29, 0x2d19, 0x38b7, 0x3b01, 0x3afa, 0x398a, 0x3839, 0x3ac9, 0x2e31, 0x3924, 0x39f2, 0x3a7f, 0x3285 +}; \ No newline at end of file diff --git a/astral/redmule/inc/w_input.h b/astral/redmule/inc/w_input.h new file mode 100644 index 0000000..dc4d3be --- /dev/null +++ b/astral/redmule/inc/w_input.h @@ -0,0 +1,35 @@ + /* Header file generated by RedMulE Golden Model */ +uint16_t w_inp [1024] = { +0x311a, 0x39e0, 0x387d, 0x3a4a, 0x386f, 0x3ada, 0x392f, 0x3854, 0x3014, 0x2fd2, 0x31c9, 0x2fca, 0x2e55, 0x3bc8, 0x396d, 0x3b1d, 0x39f6, 0x333a, 0x3908, 0x3628, 0x3bab, 0x3b8b, 0x3b4a, 0x322d, 0x3925, 0x317a, 0x3725, 0x31c2, 0x3066, 0x38f3, 0x3a17, 0x3476, +0x3bda, 0x3196, 0x3922, 0x3680, 0x396a, 0x3021, 0x3761, 0x374d, 0x2fc2, 0x3967, 0x3b94, 0x33b5, 0x3797, 0x34d6, 0x3655, 0x2176, 0x39bc, 0x3999, 0x3658, 0x3904, 0x3759, 0x2ade, 0x3a5a, 0x3b78, 0x36c7, 0x2d01, 0x3b58, 0x2d9a, 0x373d, 0x3952, 0x38e8, 0x3887, +0x37b6, 0x3a88, 0x2f8a, 0x2d79, 0x3413, 0x3421, 0x3976, 0x32b2, 0x3446, 0x2d99, 0x3a56, 0x3322, 0x3b49, 0x39fa, 0x3acd, 0x3af6, 0x304c, 0x3abb, 0x3a83, 0x38b2, 0x3ab9, 0x363e, 0x389f, 0x31bb, 0x38e1, 0x3bc4, 0x3b9b, 0x2984, 0x3a43, 0x3b2f, 0x35d6, 0x3bda, +0x2df3, 0x3bf8, 0x2acc, 0x378b, 0x3555, 0x2e59, 0x31d4, 0x34ec, 0x3a46, 0x3bab, 0x3214, 0x3161, 0x3470, 0x3a03, 0x368e, 0x31ad, 0x27cb, 0x2ecb, 0x3422, 0x39f7, 0x3644, 0x3a77, 0x313f, 0x34f2, 0x39b3, 0x3bf2, 0x379a, 0x3456, 0x35fe, 0x3ae7, 0x3964, 0x385f, +0x3b16, 0x3999, 0x3833, 0x2eda, 0x3afd, 0x3a4a, 0x3ba2, 0x2bd4, 0x3b38, 0x31a2, 0x32dd, 0x353c, 0x366f, 0x375e, 0x3821, 0x367a, 0x3b44, 0x39e6, 0x3787, 0x339e, 0x39d7, 0x38c6, 0x37d5, 0x342f, 0x3984, 0x319b, 0x33b5, 0x35ab, 0x398a, 0x374e, 0x36b6, 0x3b21, +0x3bbb, 0x2ab3, 0x2ad5, 0x33bc, 0x2bef, 0x3780, 0x3738, 0x3a0b, 0x3b09, 0x30ca, 0x384e, 0x3ab3, 0x39bd, 0x3453, 0x3a6d, 0x3957, 0x2c10, 0x30e9, 0x35d4, 0x3aef, 0x3be9, 0x39ad, 0x3a74, 0x3af9, 0x3739, 0x2d4d, 0x39fe, 0x3b72, 0x2c57, 0x398c, 0x381f, 0x3930, +0x3820, 0x321b, 0x3964, 0x2964, 0x33a0, 0x2d00, 0x2490, 0x336b, 0x3465, 0x3b2e, 0x3aa0, 0x371f, 0x300e, 0x3a09, 0x3bf1, 0x25cc, 0x3b6f, 0x3384, 0x3a88, 0x3acb, 0x3814, 0x36d0, 0x3081, 0x3a2c, 0x3353, 0x39cb, 0x31ed, 0x3af6, 0x3721, 0x36c7, 0x2ce2, 0x390d, +0x3698, 0x3ab2, 0x3b3e, 0x2eb4, 0x3998, 0x39e3, 0x3a77, 0x3632, 0x2c12, 0x3bd5, 0x3ba3, 0x3bba, 0x323c, 0x367b, 0x3557, 0x39c8, 0x37db, 0x3b45, 0x3b6e, 0x3931, 0x3121, 0x3a8d, 0x3a55, 0x3b9b, 0x358a, 0x3925, 0x3491, 0x3912, 0x3b6b, 0x3584, 0x32df, 0x3120, +0x32b2, 0x3b0a, 0x2cad, 0x3465, 0x3ad3, 0x3bcd, 0x363b, 0x3afe, 0x354b, 0x3374, 0x39af, 0x3b7f, 0x308c, 0x2e72, 0x3380, 0x3b70, 0x3902, 0x38d8, 0x39f3, 0x3a4b, 0x3853, 0x397b, 0x2ebe, 0x387f, 0x2845, 0x37e2, 0x360f, 0x370b, 0x3acb, 0x35d4, 0x36e6, 0x3262, +0x2e88, 0x3a54, 0x2ee3, 0x3575, 0x3afe, 0x2aee, 0x39a0, 0x3aae, 0x3693, 0x3432, 0x3834, 0x3b9b, 0x3bcb, 0x2e3a, 0x356d, 0x374e, 0x3924, 0x383c, 0x311e, 0x3ac5, 0x352d, 0x311e, 0x38ca, 0x34d4, 0x36ca, 0x34ed, 0x3a13, 0x33eb, 0x3639, 0x3828, 0x3b3c, 0x3939, +0x3837, 0x3521, 0x2cb5, 0x3629, 0x3924, 0x384c, 0x366a, 0x3bbf, 0x2e9e, 0x3ba8, 0x33ad, 0x38c8, 0x3934, 0x3907, 0x249a, 0x3690, 0x3a09, 0x3215, 0x3898, 0x325d, 0x37d5, 0x3195, 0x361c, 0x3ae4, 0x351f, 0x3452, 0x3bc0, 0x375c, 0x39bf, 0x317a, 0x3aae, 0x283a, +0x3476, 0x3b92, 0x3472, 0x383e, 0x280f, 0x39d6, 0x2fd1, 0x31f4, 0x2ffb, 0x3b97, 0x3692, 0x36c0, 0x3989, 0x33cf, 0x3ba6, 0x3239, 0x35d7, 0x33ab, 0x31eb, 0x3b47, 0x389b, 0x3b88, 0x3580, 0x354c, 0x3802, 0x3b9a, 0x3b94, 0x2a92, 0x2db1, 0x38bd, 0x2dfb, 0x3900, +0x344f, 0x3739, 0x27a5, 0x3b2e, 0x342b, 0x34bb, 0x30c8, 0x3ae8, 0x3b26, 0x3982, 0x38c0, 0x3408, 0x38c8, 0x36ef, 0x3bf0, 0x3acf, 0x3a3c, 0x3825, 0x31a5, 0x3ada, 0x3b5b, 0x37db, 0x3a01, 0x3663, 0x3a7d, 0x327b, 0x3a1f, 0x3862, 0x38af, 0x3204, 0x372e, 0x3b19, +0x3708, 0x3622, 0x2e62, 0x39ab, 0x2d4d, 0x31b4, 0x3552, 0x3bbc, 0x36f2, 0x36eb, 0x38ef, 0x3755, 0x3bbe, 0x2c17, 0x3815, 0x2f53, 0x363f, 0x38c1, 0x3246, 0x386b, 0x34de, 0x34e4, 0x3baa, 0x349e, 0x32ce, 0x3a68, 0x373f, 0x2cce, 0x3b36, 0x28ba, 0x3b50, 0x3232, +0x1f34, 0x3928, 0x35cd, 0x3b38, 0x30ce, 0x35a1, 0x3a06, 0x3a32, 0x3a53, 0x3489, 0x3241, 0x372f, 0x390c, 0x3a1b, 0x378a, 0x3713, 0x3769, 0x37a8, 0x3418, 0x3ad4, 0x3a4e, 0x3bf7, 0x37a5, 0x34dc, 0x39b2, 0x351b, 0x3372, 0x349f, 0x2f50, 0x3ab1, 0x3795, 0x2db7, +0x3864, 0x3157, 0x3900, 0x323e, 0x389e, 0x3880, 0x3b1f, 0x37a1, 0x396c, 0x2e43, 0x2c2a, 0x3b78, 0x3988, 0x3a14, 0x39c1, 0x3b51, 0x3780, 0x3bf2, 0x2d19, 0x3815, 0x3a5f, 0x3641, 0x2f62, 0x37d5, 0x3564, 0x139a, 0x3ab8, 0x28f7, 0x3785, 0x34e1, 0x3097, 0x3768, +0x3971, 0x3ae2, 0x32ae, 0x2fd5, 0x382a, 0x346c, 0x3133, 0x3167, 0x3940, 0x2d12, 0x389a, 0x3bd0, 0x3943, 0x391c, 0x3a75, 0x2a11, 0x391e, 0x372d, 0x3a79, 0x3b72, 0x3373, 0x39b7, 0x35d7, 0x372b, 0x3a6d, 0x38a1, 0x3279, 0x3434, 0x3694, 0x3b45, 0x3abb, 0x392d, +0x34a8, 0x3757, 0x32ca, 0x345d, 0x36a5, 0x3854, 0x2dcd, 0x30af, 0x38dd, 0x3067, 0x3411, 0x3997, 0x397a, 0x3a64, 0x38b8, 0x3962, 0x3509, 0x3bb6, 0x3a66, 0x339f, 0x372a, 0x31a8, 0x37da, 0x36ff, 0x33c6, 0x31da, 0x3977, 0x3b72, 0x3841, 0x3567, 0x3433, 0x33b8, +0x39fe, 0x3a10, 0x3bf2, 0x35e7, 0x3a4a, 0x3b3e, 0x2ec7, 0x3aa4, 0x3846, 0x3af9, 0x38a9, 0x2c1f, 0x39ab, 0x349f, 0x31d6, 0x39ae, 0x3b79, 0x352d, 0x3516, 0x347c, 0x2f33, 0x35ad, 0x31c4, 0x3b52, 0x354b, 0x3786, 0x3ab7, 0x3896, 0x34ac, 0x352f, 0x37e6, 0x326a, +0x2e44, 0x34c7, 0x388d, 0x3bf4, 0x363f, 0x3b3d, 0x33b1, 0x3b8b, 0x3340, 0x37f7, 0x3b07, 0x25bf, 0x398e, 0x3505, 0x3bd7, 0x366d, 0x388a, 0x2cc0, 0x359a, 0x3b9a, 0x3b99, 0x379d, 0x3b6b, 0x39b8, 0x3223, 0x2703, 0x3ba9, 0x2ecb, 0x3759, 0x39d8, 0x37ac, 0x32cf, +0x35f2, 0x38a3, 0x399e, 0x3bd2, 0x3780, 0x3af3, 0x3b5e, 0x337b, 0x3a08, 0x35da, 0x3446, 0x3b25, 0x3ad0, 0x3bee, 0x3141, 0x32d8, 0x34ce, 0x2ac9, 0x3800, 0x3a8a, 0x2d53, 0x368a, 0x3561, 0x3998, 0x35a3, 0x3677, 0x3ab2, 0x3269, 0x3236, 0x3b3e, 0x3aba, 0x3bac, +0x395d, 0x3820, 0x1df6, 0x3bb5, 0x35b5, 0x3675, 0x3b74, 0x360f, 0x34de, 0x3a0c, 0x3aeb, 0x299d, 0x3207, 0x3bd8, 0x2178, 0x3995, 0x3948, 0x3908, 0x3843, 0x2ea5, 0x3045, 0x3989, 0x345d, 0x39c5, 0x3a89, 0x3863, 0x3be0, 0x397a, 0x38f1, 0x39e2, 0x3b08, 0x352e, +0x385f, 0x28f2, 0x3bc3, 0x35e0, 0x380c, 0x3b9c, 0x3afc, 0x390a, 0x3689, 0x34fd, 0x2cf5, 0x308e, 0x342b, 0x3921, 0x3a67, 0x3ad6, 0x2986, 0x32fc, 0x35aa, 0x3507, 0x3608, 0x33fd, 0x3bf3, 0x39e2, 0x3b0f, 0x30b7, 0x3896, 0x3ae4, 0x2145, 0x35b6, 0x2e1d, 0x3ad1, +0x333d, 0x3afb, 0x2703, 0x3413, 0x1d7d, 0x3b7f, 0x3ae1, 0x303c, 0x3004, 0x39d3, 0x3554, 0x31a4, 0x354e, 0x3662, 0x39c5, 0x2eb7, 0x2c6e, 0x397f, 0x31d8, 0x1f0c, 0x38e3, 0x35f0, 0x2714, 0x28d1, 0x375e, 0x3a75, 0x3830, 0x3578, 0x397d, 0x3b18, 0x383c, 0x3498, +0x39ad, 0x3598, 0x23c4, 0x34ea, 0x3a61, 0x2b00, 0x3707, 0x3ae1, 0x37ae, 0x389d, 0x37fa, 0x3673, 0x3278, 0xf3e, 0x3809, 0x33c6, 0x3bf5, 0x3279, 0x3816, 0x360c, 0x39c8, 0x381f, 0x3741, 0x2d66, 0x38c0, 0x37d3, 0x377a, 0x3621, 0x2faf, 0x392e, 0x2de6, 0x33c5, +0x3803, 0x2600, 0x32e9, 0x39b4, 0x38d2, 0x34e8, 0x2fe6, 0x3199, 0x3643, 0x3a77, 0x27cc, 0x39d7, 0x34c6, 0x2ea8, 0x364e, 0x3b07, 0x31c7, 0x30a1, 0x31b1, 0x3b8f, 0x3571, 0x3b75, 0x3989, 0x3805, 0x39fb, 0x3945, 0x352b, 0x31d8, 0x3904, 0x3440, 0x3a57, 0x2cf7, +0x3b39, 0x2fcd, 0x2b89, 0x2edd, 0x3682, 0x36a9, 0x32c8, 0x37ac, 0x32a5, 0x3311, 0x394b, 0x3b84, 0x3aec, 0x3601, 0x2765, 0x3b69, 0x396b, 0x3727, 0x3bfe, 0x3907, 0x376f, 0x3674, 0x3973, 0x3671, 0x3491, 0x3993, 0x383f, 0x3335, 0x3989, 0x3550, 0x3077, 0x35f5, +0x3a59, 0x3950, 0x380c, 0x37cd, 0x30bf, 0x3607, 0x3afa, 0x3b5d, 0x32b9, 0x386b, 0x35bd, 0x3aca, 0x3ba5, 0x3b2d, 0x3b19, 0x3b8b, 0x345e, 0x2845, 0x34aa, 0x372a, 0x3448, 0x34f5, 0x3ae2, 0x3637, 0x2cb5, 0x354b, 0x3b15, 0x2ca8, 0x2641, 0x3178, 0x2cfe, 0x39b4, +0x3bdd, 0x3acb, 0x3a05, 0x38a2, 0x3b4a, 0x34e5, 0x395f, 0x394b, 0x34c4, 0x3aa5, 0x29bb, 0x2d96, 0x339d, 0x387c, 0x382e, 0x385a, 0x396b, 0x3aa9, 0x2f1e, 0x33a7, 0x3b90, 0x3b7b, 0x3b5f, 0x39d3, 0x3b18, 0x354f, 0x2cdb, 0x3a6f, 0x3434, 0x34ff, 0x3a5b, 0x3b84, +0x3a33, 0x384b, 0x2e67, 0x3b85, 0x3853, 0x380c, 0x346a, 0x3aaa, 0x3492, 0x33e8, 0x3bf2, 0x38ae, 0x3a29, 0x3830, 0x3221, 0x35b1, 0x3a48, 0x2c68, 0x2ced, 0x3a7e, 0x3539, 0x3922, 0x374c, 0x3aaa, 0x2dae, 0x395d, 0x3b3d, 0x3890, 0x2cfe, 0x2dd6, 0x3bad, 0x33c5, +0x2c07, 0x3a2c, 0x37a8, 0x390f, 0x2fc8, 0x35ae, 0x388c, 0x30ee, 0x3674, 0x391d, 0x3bfc, 0x36bf, 0x322d, 0x3a78, 0x35c0, 0x3492, 0x3ac8, 0x3504, 0x3315, 0x381d, 0x3a7a, 0x3a08, 0x343c, 0x3bda, 0x341b, 0x39f0, 0x3b9e, 0x395d, 0x3c00, 0x38ab, 0x3bcf, 0x3564, +0x33c4, 0x3b0d, 0x3623, 0x33b9, 0x3b92, 0x1e71, 0x2c57, 0x36d0, 0x314b, 0x3a16, 0x3372, 0x341b, 0x3aaa, 0x3444, 0x396b, 0x2dd7, 0x3b30, 0x3559, 0x3b5b, 0x3a29, 0x2d19, 0x38b7, 0x3b01, 0x3afa, 0x398a, 0x3839, 0x3ac9, 0x2e31, 0x3924, 0x39f2, 0x3a7f, 0x3285 +}; \ No newline at end of file diff --git a/astral/redmule/inc/x_2D.h b/astral/redmule/inc/x_2D.h new file mode 100644 index 0000000..0b589f8 --- /dev/null +++ b/astral/redmule/inc/x_2D.h @@ -0,0 +1,27 @@ + /* Header file generated by RedMulE Golden Model */ +uint16_t x_inp_2D [24][32] = { +0x2153, 0x3bb5, 0x3896, 0x365f, 0x2483, 0x3518, 0x2dd1, 0x3bca, 0x397b, 0x29b1, 0x3705, 0x36c8, 0x398b, 0x3661, 0x2f05, 0x365a, 0x3bf9, 0x34df, 0x363b, 0x38d9, 0x39c6, 0x3abb, 0x3952, 0x38f2, 0x392d, 0x3b3e, 0x2afb, 0x3a9d, 0x353b, 0x3b73, 0x3a01, 0x3679, +0x3934, 0x397d, 0x2904, 0x3822, 0x3462, 0x3b44, 0x39e9, 0x28be, 0x331e, 0x3a1d, 0x39e5, 0x34da, 0x3a19, 0x3906, 0x1d35, 0x3871, 0x31e7, 0x3b29, 0x325d, 0x3797, 0x2b2f, 0x38b4, 0x232f, 0x38aa, 0x3aca, 0x316f, 0x3811, 0x3950, 0x32ea, 0x3bc7, 0x382c, 0x38a2, +0x29ce, 0x3afa, 0x3a39, 0x2ccc, 0x39fd, 0x3b3d, 0x384a, 0x3a35, 0x3802, 0x366a, 0x37ec, 0x3598, 0x3bf8, 0x3a85, 0x3a1b, 0x386e, 0x3b4c, 0x39de, 0x38c2, 0x2f93, 0x3b4c, 0x39c4, 0x3b9e, 0x3844, 0x346d, 0x3bff, 0x32ce, 0x296d, 0x3130, 0x3b3d, 0x3b44, 0x369d, +0x3b13, 0x31ed, 0x330a, 0x3831, 0x34e7, 0x37b3, 0x331a, 0x3918, 0x32d3, 0x3995, 0x3991, 0x3919, 0x3a26, 0x385b, 0x2b76, 0x3a3b, 0x37f2, 0x26a7, 0x3225, 0x3b64, 0x28f0, 0x3456, 0x3822, 0x341e, 0x381a, 0x38d8, 0x2c11, 0x33be, 0x33ac, 0x353f, 0x3476, 0x3abc, +0x36ec, 0x3a1d, 0x39d3, 0x3821, 0x36ac, 0x3bce, 0x3ad2, 0x3616, 0x36a1, 0x2cb3, 0x38d2, 0x314f, 0x385c, 0x3b63, 0x3bb6, 0x2951, 0x372d, 0x2c42, 0x3823, 0x3883, 0x3872, 0x31ee, 0x36c5, 0x399a, 0x31b0, 0x3887, 0x3884, 0x3865, 0x3896, 0x36c3, 0x32e3, 0x346c, +0x3935, 0x3b50, 0x2b6d, 0x38cd, 0x388f, 0x3389, 0x395d, 0x31cd, 0x2efd, 0x3154, 0x2f35, 0x3444, 0x3293, 0x3b6b, 0x1bec, 0x3b69, 0x3bf3, 0x3611, 0x3508, 0x3742, 0x3a50, 0x3ab7, 0x3457, 0x38d3, 0x3344, 0x38e8, 0x33c0, 0x3668, 0x3bee, 0x3b21, 0x3727, 0x3121, +0x316c, 0x3288, 0x2d50, 0x2e74, 0x35d5, 0x37e2, 0x303d, 0x36af, 0x341f, 0x3436, 0x2df7, 0x399d, 0x30f4, 0x3aaf, 0x34e4, 0x2c2a, 0x3116, 0x34d3, 0x36ac, 0x35e3, 0x3760, 0x36e1, 0x3ad2, 0x3547, 0x38f4, 0x369c, 0x3ba9, 0x34f0, 0x3a39, 0x3b19, 0x36e6, 0x395d, +0x3be8, 0x3293, 0x3bfc, 0x3435, 0x2eb3, 0x3360, 0x3919, 0x3bed, 0x396a, 0x37fc, 0x3242, 0x384b, 0x38cb, 0x3b2c, 0x3b28, 0x28cf, 0x3828, 0x3855, 0x3ba9, 0x2fa7, 0x340b, 0x32f1, 0x3ada, 0x36fa, 0x31f5, 0x3436, 0x29d0, 0x33e6, 0x3232, 0x3bec, 0x3904, 0x2797, +0x3b81, 0x3bac, 0x38d2, 0x343d, 0x31af, 0x3b1e, 0x33fc, 0x3864, 0x3624, 0x3905, 0x2945, 0x3b52, 0x2d08, 0x3a17, 0x3b84, 0x3804, 0x3a24, 0x38a3, 0x3562, 0x3ae6, 0x3bba, 0x3a45, 0x3679, 0x31fa, 0x3994, 0x2c3d, 0x383f, 0x399d, 0x34f7, 0x360e, 0x35f3, 0x38f0, +0x38d4, 0x399a, 0x3a48, 0x3987, 0x3b54, 0x382c, 0x3210, 0x35ef, 0x36ca, 0x31b4, 0x3625, 0x371f, 0x37bd, 0x3680, 0x3a3a, 0x3ac0, 0x3bbf, 0x3bf5, 0x39f2, 0x29c2, 0x363e, 0x3a4e, 0x3596, 0x3b1b, 0x3459, 0x3669, 0x3aa1, 0x39c3, 0x3376, 0x390d, 0x2456, 0x39b5, +0x3a66, 0x3ad8, 0x3b51, 0x36aa, 0x32be, 0x3ac8, 0x392b, 0x3740, 0x3a48, 0x38f5, 0x3b2d, 0x3a5f, 0x2ff3, 0x366f, 0x39d3, 0x35e5, 0x3822, 0x38db, 0x3b8a, 0x34be, 0x2d33, 0x36dd, 0x3578, 0x3bdf, 0x2c7e, 0x39cf, 0x32ff, 0x35c9, 0x3970, 0x3bcb, 0x351e, 0x3956, +0x2c42, 0x3308, 0x377a, 0x361c, 0x39a0, 0x36c9, 0x2dcb, 0x3bf2, 0x3b5f, 0x33ee, 0x24c1, 0x2ce9, 0x3927, 0x305d, 0x3702, 0x3119, 0x35f9, 0x3855, 0x3374, 0x349b, 0x3bcf, 0x2dea, 0x34f0, 0x363f, 0x37da, 0x3a74, 0x35fc, 0x35fa, 0x316b, 0x3804, 0x37a7, 0x3986, +0x3073, 0x3aed, 0x31c7, 0x3844, 0x34a4, 0x387d, 0x3a20, 0x3037, 0x3a00, 0x3b70, 0x377f, 0x3686, 0x3b7e, 0x38b3, 0x32e3, 0x3323, 0x391e, 0x3228, 0x3930, 0x3997, 0x3a5e, 0x398b, 0x3512, 0x35b0, 0x365c, 0x325d, 0x3b61, 0x38b8, 0x39a4, 0x3423, 0x3bd7, 0x38af, +0x2d3d, 0x382d, 0x38ac, 0x26ca, 0x395e, 0x21a8, 0x3520, 0x386f, 0x3b95, 0x32c0, 0x3b84, 0x3a51, 0x3b4b, 0x31d2, 0x3747, 0x3b96, 0x3b40, 0x3535, 0x38d1, 0x3899, 0x3b00, 0x3827, 0x3ae3, 0x38c8, 0x3a07, 0x338d, 0x2e96, 0x3a46, 0x394a, 0x39de, 0x2951, 0x3a02, +0x3838, 0x2d45, 0x28c0, 0x3958, 0x3070, 0x2aa2, 0x3510, 0x38ce, 0x271c, 0x3440, 0x3954, 0x30bc, 0x3b35, 0x2f1d, 0x3afb, 0x2dae, 0x356f, 0x2e13, 0x3981, 0x326d, 0x3a28, 0x3a36, 0x3a95, 0x38cb, 0x38db, 0x3150, 0x2c9e, 0x34c5, 0x3adb, 0x3bdf, 0x38f2, 0x3994, +0x36f8, 0x31c0, 0x3a4f, 0x3825, 0x394b, 0x3a8b, 0x38ac, 0x3167, 0x2e2d, 0x3a93, 0x34f3, 0x37bd, 0x3b63, 0x2f2f, 0x3ae0, 0x3ad8, 0x34a8, 0x2e1c, 0x3890, 0x3705, 0x3b69, 0x3bc1, 0x28af, 0x3b36, 0x348b, 0x3111, 0x3a8d, 0x389c, 0x3916, 0x36dc, 0x3bae, 0x3874, +0x3593, 0x3638, 0x3018, 0x3a56, 0x38a3, 0x2ad4, 0x3a25, 0x38d7, 0x3864, 0x31c1, 0x28d1, 0x39c8, 0x37d6, 0x2c7f, 0x3ba5, 0x34b8, 0x3bef, 0x3b83, 0x3ab5, 0x3062, 0x38bc, 0x399c, 0x2ce4, 0x2f2c, 0x39bf, 0x2ed1, 0x385f, 0x37e0, 0x35ee, 0x397d, 0x3b0c, 0x3049, +0x39d5, 0x322e, 0x3936, 0x3747, 0x2e15, 0x3b41, 0x3874, 0x3bd0, 0x2c04, 0x3800, 0x375b, 0x3b2d, 0x38d8, 0x3a51, 0x3406, 0x38da, 0x38ba, 0x3497, 0x382e, 0x35fc, 0x39d4, 0x3775, 0x3b1e, 0x3813, 0x3649, 0x31af, 0x37bb, 0x334a, 0x3a6e, 0x3284, 0x26e0, 0x2e01, +0x2ebb, 0x344b, 0x3821, 0x381a, 0x385a, 0x2534, 0x3635, 0x2a92, 0x3b8c, 0x31f0, 0x3947, 0x3ac7, 0x3743, 0x3924, 0x39e4, 0x358f, 0x2b62, 0x392c, 0x3955, 0x3341, 0x3676, 0x38ac, 0x3957, 0x335b, 0x2ca2, 0x39ff, 0x37cb, 0x341f, 0x3ac9, 0x3b6c, 0x2f14, 0x34c3, +0x3018, 0x3169, 0x355b, 0x3624, 0x31ed, 0x379e, 0x3268, 0x309b, 0x35db, 0x3872, 0x3bdb, 0x34c7, 0x3408, 0x3359, 0x3920, 0x331f, 0x3866, 0x3af0, 0x2a1a, 0x39e0, 0x3b14, 0x34fa, 0x2d18, 0x3963, 0x35e8, 0x2539, 0x38f5, 0x37b3, 0x378f, 0x31b5, 0x3a6c, 0x3685, +0x3a06, 0x318a, 0x2934, 0x33c1, 0x3be8, 0x375b, 0x3860, 0x3543, 0x3702, 0x3951, 0x3677, 0x37ff, 0x2e27, 0x2e3a, 0x340f, 0x3817, 0x2f04, 0x357e, 0x3a1d, 0x2dd6, 0x252a, 0x3945, 0x162a, 0x3b19, 0x3a53, 0x35d2, 0x3a5d, 0x3474, 0x38e9, 0x374b, 0x387c, 0x1f1a, +0x38ac, 0x3291, 0x3393, 0x3b53, 0x3169, 0x3bca, 0x2f1a, 0x3551, 0x38a3, 0x28e3, 0x369d, 0x34a1, 0x38a8, 0x34c3, 0x3841, 0x390d, 0x3b13, 0x3282, 0x3a29, 0x3a78, 0x2df3, 0x3a37, 0x35f4, 0x35a6, 0x38e8, 0x3328, 0x3beb, 0x390b, 0x32dc, 0x34dc, 0x396d, 0x3a78, +0x39ba, 0x3a06, 0x2cdd, 0x3bc3, 0x2d43, 0x2992, 0x3663, 0x3a68, 0x2c3e, 0x394e, 0x2c9f, 0x380e, 0x37f5, 0x3557, 0x2873, 0x390f, 0x39e7, 0x3939, 0x3669, 0x385c, 0x3a68, 0x32c4, 0x2b04, 0x2d6d, 0x39d3, 0x3895, 0x331d, 0x3b59, 0x3463, 0x2b6a, 0x31de, 0x3296, +0x3aae, 0x3bcd, 0x345a, 0x3897, 0x374b, 0x3bd4, 0x38a2, 0x357f, 0x3402, 0x3a0c, 0x3507, 0x3865, 0x3a54, 0x3878, 0x3859, 0x383e, 0x32b5, 0x34ea, 0x328d, 0x38b6, 0x3464, 0x2f5b, 0x35ff, 0x3817, 0x2f24, 0x3533, 0x3b21, 0x37ba, 0x3837, 0x2e34, 0x3bad, 0x34bc +}; \ No newline at end of file diff --git a/astral/redmule/inc/x_input.h b/astral/redmule/inc/x_input.h new file mode 100644 index 0000000..1e38d23 --- /dev/null +++ b/astral/redmule/inc/x_input.h @@ -0,0 +1,27 @@ + /* Header file generated by RedMulE Golden Model */ +uint16_t x_inp [768] = { +0x2153, 0x3bb5, 0x3896, 0x365f, 0x2483, 0x3518, 0x2dd1, 0x3bca, 0x397b, 0x29b1, 0x3705, 0x36c8, 0x398b, 0x3661, 0x2f05, 0x365a, 0x3bf9, 0x34df, 0x363b, 0x38d9, 0x39c6, 0x3abb, 0x3952, 0x38f2, 0x392d, 0x3b3e, 0x2afb, 0x3a9d, 0x353b, 0x3b73, 0x3a01, 0x3679, +0x3934, 0x397d, 0x2904, 0x3822, 0x3462, 0x3b44, 0x39e9, 0x28be, 0x331e, 0x3a1d, 0x39e5, 0x34da, 0x3a19, 0x3906, 0x1d35, 0x3871, 0x31e7, 0x3b29, 0x325d, 0x3797, 0x2b2f, 0x38b4, 0x232f, 0x38aa, 0x3aca, 0x316f, 0x3811, 0x3950, 0x32ea, 0x3bc7, 0x382c, 0x38a2, +0x29ce, 0x3afa, 0x3a39, 0x2ccc, 0x39fd, 0x3b3d, 0x384a, 0x3a35, 0x3802, 0x366a, 0x37ec, 0x3598, 0x3bf8, 0x3a85, 0x3a1b, 0x386e, 0x3b4c, 0x39de, 0x38c2, 0x2f93, 0x3b4c, 0x39c4, 0x3b9e, 0x3844, 0x346d, 0x3bff, 0x32ce, 0x296d, 0x3130, 0x3b3d, 0x3b44, 0x369d, +0x3b13, 0x31ed, 0x330a, 0x3831, 0x34e7, 0x37b3, 0x331a, 0x3918, 0x32d3, 0x3995, 0x3991, 0x3919, 0x3a26, 0x385b, 0x2b76, 0x3a3b, 0x37f2, 0x26a7, 0x3225, 0x3b64, 0x28f0, 0x3456, 0x3822, 0x341e, 0x381a, 0x38d8, 0x2c11, 0x33be, 0x33ac, 0x353f, 0x3476, 0x3abc, +0x36ec, 0x3a1d, 0x39d3, 0x3821, 0x36ac, 0x3bce, 0x3ad2, 0x3616, 0x36a1, 0x2cb3, 0x38d2, 0x314f, 0x385c, 0x3b63, 0x3bb6, 0x2951, 0x372d, 0x2c42, 0x3823, 0x3883, 0x3872, 0x31ee, 0x36c5, 0x399a, 0x31b0, 0x3887, 0x3884, 0x3865, 0x3896, 0x36c3, 0x32e3, 0x346c, +0x3935, 0x3b50, 0x2b6d, 0x38cd, 0x388f, 0x3389, 0x395d, 0x31cd, 0x2efd, 0x3154, 0x2f35, 0x3444, 0x3293, 0x3b6b, 0x1bec, 0x3b69, 0x3bf3, 0x3611, 0x3508, 0x3742, 0x3a50, 0x3ab7, 0x3457, 0x38d3, 0x3344, 0x38e8, 0x33c0, 0x3668, 0x3bee, 0x3b21, 0x3727, 0x3121, +0x316c, 0x3288, 0x2d50, 0x2e74, 0x35d5, 0x37e2, 0x303d, 0x36af, 0x341f, 0x3436, 0x2df7, 0x399d, 0x30f4, 0x3aaf, 0x34e4, 0x2c2a, 0x3116, 0x34d3, 0x36ac, 0x35e3, 0x3760, 0x36e1, 0x3ad2, 0x3547, 0x38f4, 0x369c, 0x3ba9, 0x34f0, 0x3a39, 0x3b19, 0x36e6, 0x395d, +0x3be8, 0x3293, 0x3bfc, 0x3435, 0x2eb3, 0x3360, 0x3919, 0x3bed, 0x396a, 0x37fc, 0x3242, 0x384b, 0x38cb, 0x3b2c, 0x3b28, 0x28cf, 0x3828, 0x3855, 0x3ba9, 0x2fa7, 0x340b, 0x32f1, 0x3ada, 0x36fa, 0x31f5, 0x3436, 0x29d0, 0x33e6, 0x3232, 0x3bec, 0x3904, 0x2797, +0x3b81, 0x3bac, 0x38d2, 0x343d, 0x31af, 0x3b1e, 0x33fc, 0x3864, 0x3624, 0x3905, 0x2945, 0x3b52, 0x2d08, 0x3a17, 0x3b84, 0x3804, 0x3a24, 0x38a3, 0x3562, 0x3ae6, 0x3bba, 0x3a45, 0x3679, 0x31fa, 0x3994, 0x2c3d, 0x383f, 0x399d, 0x34f7, 0x360e, 0x35f3, 0x38f0, +0x38d4, 0x399a, 0x3a48, 0x3987, 0x3b54, 0x382c, 0x3210, 0x35ef, 0x36ca, 0x31b4, 0x3625, 0x371f, 0x37bd, 0x3680, 0x3a3a, 0x3ac0, 0x3bbf, 0x3bf5, 0x39f2, 0x29c2, 0x363e, 0x3a4e, 0x3596, 0x3b1b, 0x3459, 0x3669, 0x3aa1, 0x39c3, 0x3376, 0x390d, 0x2456, 0x39b5, +0x3a66, 0x3ad8, 0x3b51, 0x36aa, 0x32be, 0x3ac8, 0x392b, 0x3740, 0x3a48, 0x38f5, 0x3b2d, 0x3a5f, 0x2ff3, 0x366f, 0x39d3, 0x35e5, 0x3822, 0x38db, 0x3b8a, 0x34be, 0x2d33, 0x36dd, 0x3578, 0x3bdf, 0x2c7e, 0x39cf, 0x32ff, 0x35c9, 0x3970, 0x3bcb, 0x351e, 0x3956, +0x2c42, 0x3308, 0x377a, 0x361c, 0x39a0, 0x36c9, 0x2dcb, 0x3bf2, 0x3b5f, 0x33ee, 0x24c1, 0x2ce9, 0x3927, 0x305d, 0x3702, 0x3119, 0x35f9, 0x3855, 0x3374, 0x349b, 0x3bcf, 0x2dea, 0x34f0, 0x363f, 0x37da, 0x3a74, 0x35fc, 0x35fa, 0x316b, 0x3804, 0x37a7, 0x3986, +0x3073, 0x3aed, 0x31c7, 0x3844, 0x34a4, 0x387d, 0x3a20, 0x3037, 0x3a00, 0x3b70, 0x377f, 0x3686, 0x3b7e, 0x38b3, 0x32e3, 0x3323, 0x391e, 0x3228, 0x3930, 0x3997, 0x3a5e, 0x398b, 0x3512, 0x35b0, 0x365c, 0x325d, 0x3b61, 0x38b8, 0x39a4, 0x3423, 0x3bd7, 0x38af, +0x2d3d, 0x382d, 0x38ac, 0x26ca, 0x395e, 0x21a8, 0x3520, 0x386f, 0x3b95, 0x32c0, 0x3b84, 0x3a51, 0x3b4b, 0x31d2, 0x3747, 0x3b96, 0x3b40, 0x3535, 0x38d1, 0x3899, 0x3b00, 0x3827, 0x3ae3, 0x38c8, 0x3a07, 0x338d, 0x2e96, 0x3a46, 0x394a, 0x39de, 0x2951, 0x3a02, +0x3838, 0x2d45, 0x28c0, 0x3958, 0x3070, 0x2aa2, 0x3510, 0x38ce, 0x271c, 0x3440, 0x3954, 0x30bc, 0x3b35, 0x2f1d, 0x3afb, 0x2dae, 0x356f, 0x2e13, 0x3981, 0x326d, 0x3a28, 0x3a36, 0x3a95, 0x38cb, 0x38db, 0x3150, 0x2c9e, 0x34c5, 0x3adb, 0x3bdf, 0x38f2, 0x3994, +0x36f8, 0x31c0, 0x3a4f, 0x3825, 0x394b, 0x3a8b, 0x38ac, 0x3167, 0x2e2d, 0x3a93, 0x34f3, 0x37bd, 0x3b63, 0x2f2f, 0x3ae0, 0x3ad8, 0x34a8, 0x2e1c, 0x3890, 0x3705, 0x3b69, 0x3bc1, 0x28af, 0x3b36, 0x348b, 0x3111, 0x3a8d, 0x389c, 0x3916, 0x36dc, 0x3bae, 0x3874, +0x3593, 0x3638, 0x3018, 0x3a56, 0x38a3, 0x2ad4, 0x3a25, 0x38d7, 0x3864, 0x31c1, 0x28d1, 0x39c8, 0x37d6, 0x2c7f, 0x3ba5, 0x34b8, 0x3bef, 0x3b83, 0x3ab5, 0x3062, 0x38bc, 0x399c, 0x2ce4, 0x2f2c, 0x39bf, 0x2ed1, 0x385f, 0x37e0, 0x35ee, 0x397d, 0x3b0c, 0x3049, +0x39d5, 0x322e, 0x3936, 0x3747, 0x2e15, 0x3b41, 0x3874, 0x3bd0, 0x2c04, 0x3800, 0x375b, 0x3b2d, 0x38d8, 0x3a51, 0x3406, 0x38da, 0x38ba, 0x3497, 0x382e, 0x35fc, 0x39d4, 0x3775, 0x3b1e, 0x3813, 0x3649, 0x31af, 0x37bb, 0x334a, 0x3a6e, 0x3284, 0x26e0, 0x2e01, +0x2ebb, 0x344b, 0x3821, 0x381a, 0x385a, 0x2534, 0x3635, 0x2a92, 0x3b8c, 0x31f0, 0x3947, 0x3ac7, 0x3743, 0x3924, 0x39e4, 0x358f, 0x2b62, 0x392c, 0x3955, 0x3341, 0x3676, 0x38ac, 0x3957, 0x335b, 0x2ca2, 0x39ff, 0x37cb, 0x341f, 0x3ac9, 0x3b6c, 0x2f14, 0x34c3, +0x3018, 0x3169, 0x355b, 0x3624, 0x31ed, 0x379e, 0x3268, 0x309b, 0x35db, 0x3872, 0x3bdb, 0x34c7, 0x3408, 0x3359, 0x3920, 0x331f, 0x3866, 0x3af0, 0x2a1a, 0x39e0, 0x3b14, 0x34fa, 0x2d18, 0x3963, 0x35e8, 0x2539, 0x38f5, 0x37b3, 0x378f, 0x31b5, 0x3a6c, 0x3685, +0x3a06, 0x318a, 0x2934, 0x33c1, 0x3be8, 0x375b, 0x3860, 0x3543, 0x3702, 0x3951, 0x3677, 0x37ff, 0x2e27, 0x2e3a, 0x340f, 0x3817, 0x2f04, 0x357e, 0x3a1d, 0x2dd6, 0x252a, 0x3945, 0x162a, 0x3b19, 0x3a53, 0x35d2, 0x3a5d, 0x3474, 0x38e9, 0x374b, 0x387c, 0x1f1a, +0x38ac, 0x3291, 0x3393, 0x3b53, 0x3169, 0x3bca, 0x2f1a, 0x3551, 0x38a3, 0x28e3, 0x369d, 0x34a1, 0x38a8, 0x34c3, 0x3841, 0x390d, 0x3b13, 0x3282, 0x3a29, 0x3a78, 0x2df3, 0x3a37, 0x35f4, 0x35a6, 0x38e8, 0x3328, 0x3beb, 0x390b, 0x32dc, 0x34dc, 0x396d, 0x3a78, +0x39ba, 0x3a06, 0x2cdd, 0x3bc3, 0x2d43, 0x2992, 0x3663, 0x3a68, 0x2c3e, 0x394e, 0x2c9f, 0x380e, 0x37f5, 0x3557, 0x2873, 0x390f, 0x39e7, 0x3939, 0x3669, 0x385c, 0x3a68, 0x32c4, 0x2b04, 0x2d6d, 0x39d3, 0x3895, 0x331d, 0x3b59, 0x3463, 0x2b6a, 0x31de, 0x3296, +0x3aae, 0x3bcd, 0x345a, 0x3897, 0x374b, 0x3bd4, 0x38a2, 0x357f, 0x3402, 0x3a0c, 0x3507, 0x3865, 0x3a54, 0x3878, 0x3859, 0x383e, 0x32b5, 0x34ea, 0x328d, 0x38b6, 0x3464, 0x2f5b, 0x35ff, 0x3817, 0x2f24, 0x3533, 0x3b21, 0x37ba, 0x3837, 0x2e34, 0x3bad, 0x34bc +}; \ No newline at end of file diff --git a/astral/redmule/inc/y_2D.h b/astral/redmule/inc/y_2D.h new file mode 100644 index 0000000..9484a10 --- /dev/null +++ b/astral/redmule/inc/y_2D.h @@ -0,0 +1,27 @@ + /* Header file generated by RedMulE Golden Model */ +uint16_t y_inp_2D [32][32] = { +0x3150, 0x2dc1, 0x3033, 0x31f5, 0x3bb6, 0x3bff, 0x39f9, 0x3662, 0x3720, 0x351d, 0x384b, 0x3093, 0x3b9d, 0x35ad, 0x3695, 0x3466, 0x2300, 0x3445, 0x33ae, 0x3586, 0x38a3, 0x3bdb, 0x33a2, 0x379b, 0x3a0e, 0x38b0, 0x39ba, 0x379b, 0x39d3, 0x3a51, 0x3b30, 0x3794, +0x3b76, 0x3042, 0x38cc, 0x2dfc, 0x3b1a, 0x37fb, 0x38f7, 0x3824, 0x386f, 0x38c7, 0x36ee, 0x3a9c, 0x38d3, 0x2c67, 0x3a80, 0x2f30, 0x3328, 0x3721, 0x3790, 0x34e5, 0x3a6c, 0x3643, 0x3934, 0x3034, 0x38d4, 0x362e, 0x3b4b, 0x3408, 0x30c2, 0x370e, 0x3b31, 0x3b16, +0x3b6b, 0x39d4, 0x339c, 0x381e, 0x313e, 0x3671, 0x3ae2, 0x3479, 0x3940, 0x342d, 0x3925, 0x370a, 0x35d8, 0x2dad, 0x3888, 0x24b9, 0x375d, 0x34bd, 0x3243, 0x2ebb, 0x3970, 0x3a21, 0x3a07, 0x3877, 0x3888, 0x3569, 0x372d, 0x2ac1, 0x331e, 0x384d, 0x3996, 0x34a4, +0x35c1, 0x33a9, 0x21ed, 0x3a42, 0x388d, 0x34e4, 0x33c3, 0x34f9, 0x3a7b, 0x33fb, 0x2cdd, 0x3b0e, 0x333b, 0x3973, 0x34fc, 0x3771, 0x32ea, 0x2de4, 0x31a8, 0x3946, 0x3657, 0x3a4e, 0x36f6, 0x2829, 0x3ba2, 0x3bdc, 0x3bb3, 0x306c, 0x398d, 0x3a1f, 0x3991, 0x3846, +0x3547, 0x3292, 0x2e85, 0x31ed, 0x3979, 0x3a90, 0x28a4, 0x3bed, 0x36d8, 0x340e, 0x3b6a, 0x3ab6, 0x3824, 0x382b, 0x3ac3, 0x3811, 0x36d7, 0x3519, 0x3a92, 0x3a42, 0x29d1, 0x383a, 0x3a9b, 0x300e, 0x2cd3, 0x39cd, 0x3874, 0x3a07, 0x2eb1, 0x3b86, 0x3ad8, 0x3a5d, +0x3712, 0x284a, 0x38c1, 0x3bec, 0x39c0, 0x32cd, 0x3ad8, 0x3bce, 0x3817, 0x3896, 0x3aa7, 0x3870, 0x3996, 0x32cc, 0x3a4c, 0x3757, 0x3814, 0x3b65, 0x3acb, 0x376e, 0x34c0, 0x3609, 0x3bf0, 0x3b24, 0x3b29, 0x3848, 0x34b7, 0x398a, 0x220c, 0x3498, 0x3a8c, 0x3883, +0x38c4, 0x3af6, 0x3a42, 0x2dd6, 0x3147, 0x3717, 0x3a8e, 0x3af9, 0x3296, 0x38ef, 0x34fa, 0x3555, 0x3b29, 0x38de, 0x315e, 0x3773, 0x3b67, 0x3116, 0x38ec, 0x357c, 0x35d0, 0x2518, 0x3958, 0x2a03, 0x37d9, 0x3699, 0x3a1e, 0x3230, 0x3b13, 0x36d4, 0x3b2a, 0x39ad, +0x3b10, 0x351a, 0x3b97, 0x3326, 0x2b54, 0x3b7d, 0x386f, 0x373e, 0x37fa, 0x389b, 0x3b90, 0x3292, 0x3975, 0x38f3, 0x37f1, 0x3590, 0x3810, 0x2fd7, 0x3bf7, 0x3a5a, 0x3a1c, 0x34dd, 0x354c, 0x32f8, 0x3095, 0x321e, 0x39e0, 0x395c, 0x3717, 0x357f, 0x394a, 0x34b1, +0x3ba4, 0x380c, 0x3604, 0x2f50, 0x348d, 0x3828, 0x3a9f, 0x39ce, 0x32ca, 0x3906, 0x3ab2, 0x2ca5, 0x38c9, 0x362a, 0x34b2, 0x29dc, 0x3a36, 0x3052, 0x31b7, 0x3589, 0x387c, 0x3401, 0x3b22, 0x3ad6, 0x3ae8, 0x3238, 0x3494, 0x3502, 0x3717, 0x3a6c, 0x3229, 0x368c, +0x3056, 0x3a56, 0x3498, 0x39eb, 0x2864, 0x342d, 0x39e0, 0x34a1, 0x2b99, 0x3a04, 0x38ff, 0x328c, 0x34d9, 0x387d, 0x3a3c, 0x32e5, 0x39eb, 0x3984, 0x34dd, 0x38a7, 0x373f, 0x39b4, 0x3235, 0x2f58, 0x2f39, 0x3800, 0x3758, 0x3939, 0x39fc, 0x3a4b, 0x38bf, 0x30ee, +0x345e, 0x39c8, 0x3a6d, 0x3262, 0x3b81, 0x31dc, 0x3a15, 0x3bd0, 0x36af, 0x36de, 0x37d5, 0x39d7, 0x3ad3, 0x3ac1, 0x3109, 0x35ea, 0x31c6, 0x398d, 0x3987, 0x3a4a, 0x34d2, 0x2ed2, 0x35e6, 0x352c, 0x39eb, 0x3bd6, 0x3a5b, 0x39d1, 0x34aa, 0x3ade, 0x394b, 0x38a1, +0x2bed, 0x38de, 0x3811, 0x3813, 0x391a, 0x374b, 0x3829, 0x3725, 0x38f0, 0x3583, 0x3966, 0x3a7d, 0x375a, 0x38fe, 0x3696, 0x361c, 0x39a8, 0x35f0, 0x38e1, 0x3003, 0x3595, 0x316e, 0x3862, 0x3af8, 0x3af2, 0x34c8, 0x381d, 0x37d8, 0x3893, 0x3a9c, 0x3989, 0x308c, +0x30cc, 0x2538, 0x399d, 0x3919, 0x399e, 0x21cc, 0x38e9, 0x30f8, 0x3a20, 0x3b3c, 0x3990, 0x259c, 0x3143, 0x3080, 0x3967, 0x3afb, 0x3a1b, 0x3779, 0x2eeb, 0x39f3, 0x379a, 0x369c, 0x3985, 0x3a1b, 0x3ba6, 0x3a53, 0x28d5, 0x3881, 0x31d9, 0x3a34, 0x3bd9, 0x393a, +0x3601, 0x2c6e, 0x3636, 0x3298, 0x39bb, 0x3a08, 0x38db, 0x35ad, 0x3a09, 0x36a6, 0x3bc7, 0x3bac, 0x34ae, 0x3291, 0x290b, 0x3250, 0x2648, 0x333d, 0x2bf3, 0x34b1, 0x30e0, 0x351f, 0x3a74, 0x38dc, 0x3883, 0x2841, 0x35e1, 0x390d, 0x3a50, 0x3abd, 0x386d, 0x3bb7, +0x3b94, 0x36b7, 0x3a49, 0x332f, 0x3a1d, 0x354b, 0x3bab, 0x3346, 0x3417, 0x351e, 0x3b6d, 0x391a, 0x2db3, 0x3b1c, 0x3a4a, 0x37b7, 0x36cf, 0x3a56, 0x39c4, 0x3be9, 0x34f0, 0x39be, 0x3691, 0x1ba5, 0x3888, 0x3040, 0x3ae1, 0x3b9b, 0x398f, 0x3a49, 0x3a16, 0x38c0, +0x386c, 0x39ab, 0x37fa, 0x382c, 0x3a6f, 0x393f, 0x340d, 0x38ef, 0x39d1, 0x3845, 0x398f, 0x363e, 0x3687, 0x3052, 0x3a2b, 0x392c, 0x2f5c, 0x3412, 0x3a1f, 0x3b2f, 0x3bcc, 0x3a63, 0x3a89, 0x36e9, 0x3921, 0x3b80, 0x2dc0, 0x3a03, 0x3beb, 0x38d3, 0x36cb, 0x39a3, +0x3978, 0x3a88, 0x3ba4, 0x3561, 0x28c5, 0x33a0, 0x37be, 0x2c39, 0x30ee, 0x3782, 0x2c07, 0x354e, 0x3491, 0x3a92, 0x331a, 0x3b15, 0x32e1, 0x3839, 0x3afb, 0x36c2, 0x2fd0, 0x29ad, 0x3b2e, 0x39c1, 0x2a8c, 0x341a, 0x2f90, 0x395a, 0x3969, 0x37ea, 0x3a5c, 0x3b6d, +0x3971, 0x3a93, 0x304e, 0x3623, 0x3a22, 0x31ee, 0x29df, 0x2c93, 0x3a01, 0x3a62, 0x366c, 0x371d, 0x3af3, 0x2e08, 0x3ac0, 0x3642, 0x3a28, 0x368d, 0x2d3d, 0x36d9, 0x32c3, 0x373f, 0x36fe, 0x3487, 0x2c81, 0x3623, 0x3b59, 0x3a91, 0x350a, 0x34f4, 0x3b09, 0x2c25, +0x3b13, 0x325a, 0x379e, 0x3a7d, 0x34b1, 0x39d5, 0x2ba8, 0x322b, 0x3b5e, 0x37ab, 0x2e24, 0x3ba9, 0x3a3d, 0x34f7, 0x3ba1, 0x3877, 0x3071, 0x39fb, 0x3bbd, 0x3633, 0x3b36, 0x2daa, 0x3b9b, 0x3aa0, 0x395c, 0x3b8f, 0x38d5, 0x3ab0, 0x3a8f, 0x36c2, 0x3b1f, 0x3489, +0x2acc, 0x3845, 0x3715, 0x37d8, 0x3992, 0x3bff, 0x350e, 0x3ad7, 0x39b0, 0x35ac, 0x3287, 0x385f, 0x3bd4, 0x37a3, 0x3438, 0x39a5, 0x3bcf, 0x38c3, 0x34f6, 0x3ae3, 0x3b57, 0x39af, 0x35eb, 0x3bed, 0x34d4, 0x2a95, 0x3b13, 0x384e, 0x3a3b, 0x33da, 0x3bce, 0x3b99, +0x3559, 0x3335, 0x3a2e, 0x3123, 0x38db, 0x33d0, 0x3638, 0x3b17, 0x3a72, 0x3afc, 0x3936, 0x3838, 0x2b69, 0x3895, 0x3a1a, 0x3192, 0x39d5, 0x37a5, 0x2eb0, 0x2e8b, 0x329a, 0x3b90, 0x390a, 0x3a1e, 0x3847, 0x375d, 0x3873, 0x35e2, 0x3771, 0x30f5, 0x3231, 0x3bd7, +0x2bbc, 0x3ace, 0x31ad, 0x3a6b, 0x28a4, 0x3b48, 0x3ba3, 0x3a84, 0x3353, 0x39f6, 0x381f, 0x2dd6, 0x314c, 0x34af, 0x3929, 0x3921, 0x383b, 0x34b0, 0x3923, 0x32c9, 0x3ae7, 0x318f, 0x3480, 0x2ad8, 0x3042, 0x3a4c, 0x349d, 0x2c12, 0x3abb, 0x3a57, 0x3b0d, 0x3111, +0x3359, 0x3a84, 0x38f2, 0x368d, 0x2f4b, 0x3ba0, 0x395c, 0x3026, 0x3a15, 0x2a04, 0x326e, 0x3522, 0x31a2, 0x382f, 0x2ada, 0x3b7c, 0x2f80, 0x3af5, 0x2d35, 0x38fa, 0x39ab, 0x2c6d, 0x2e7a, 0x39f6, 0x31a4, 0x3a53, 0x358c, 0x3951, 0x3a4e, 0x3916, 0x2a3f, 0x3ae9, +0x3b03, 0x39f8, 0x39fe, 0x3a61, 0x39fb, 0x3704, 0x360d, 0x39a7, 0x37a9, 0x348f, 0x3a30, 0x3af5, 0x366f, 0x3b29, 0x3a6a, 0x33d5, 0x370a, 0x39cd, 0x3444, 0x3bea, 0x3b2b, 0x312e, 0x3b8e, 0x32cf, 0x3b79, 0x3302, 0x3bba, 0x3962, 0x3413, 0x37a1, 0x39e0, 0x3805 +}; \ No newline at end of file diff --git a/astral/redmule/inc/y_input.h b/astral/redmule/inc/y_input.h new file mode 100644 index 0000000..45a2375 --- /dev/null +++ b/astral/redmule/inc/y_input.h @@ -0,0 +1,27 @@ + /* Header file generated by RedMulE Golden Model */ +uint16_t y_inp [768] = { +0x3150, 0x2dc1, 0x3033, 0x31f5, 0x3bb6, 0x3bff, 0x39f9, 0x3662, 0x3720, 0x351d, 0x384b, 0x3093, 0x3b9d, 0x35ad, 0x3695, 0x3466, 0x2300, 0x3445, 0x33ae, 0x3586, 0x38a3, 0x3bdb, 0x33a2, 0x379b, 0x3a0e, 0x38b0, 0x39ba, 0x379b, 0x39d3, 0x3a51, 0x3b30, 0x3794, +0x3b76, 0x3042, 0x38cc, 0x2dfc, 0x3b1a, 0x37fb, 0x38f7, 0x3824, 0x386f, 0x38c7, 0x36ee, 0x3a9c, 0x38d3, 0x2c67, 0x3a80, 0x2f30, 0x3328, 0x3721, 0x3790, 0x34e5, 0x3a6c, 0x3643, 0x3934, 0x3034, 0x38d4, 0x362e, 0x3b4b, 0x3408, 0x30c2, 0x370e, 0x3b31, 0x3b16, +0x3b6b, 0x39d4, 0x339c, 0x381e, 0x313e, 0x3671, 0x3ae2, 0x3479, 0x3940, 0x342d, 0x3925, 0x370a, 0x35d8, 0x2dad, 0x3888, 0x24b9, 0x375d, 0x34bd, 0x3243, 0x2ebb, 0x3970, 0x3a21, 0x3a07, 0x3877, 0x3888, 0x3569, 0x372d, 0x2ac1, 0x331e, 0x384d, 0x3996, 0x34a4, +0x35c1, 0x33a9, 0x21ed, 0x3a42, 0x388d, 0x34e4, 0x33c3, 0x34f9, 0x3a7b, 0x33fb, 0x2cdd, 0x3b0e, 0x333b, 0x3973, 0x34fc, 0x3771, 0x32ea, 0x2de4, 0x31a8, 0x3946, 0x3657, 0x3a4e, 0x36f6, 0x2829, 0x3ba2, 0x3bdc, 0x3bb3, 0x306c, 0x398d, 0x3a1f, 0x3991, 0x3846, +0x3547, 0x3292, 0x2e85, 0x31ed, 0x3979, 0x3a90, 0x28a4, 0x3bed, 0x36d8, 0x340e, 0x3b6a, 0x3ab6, 0x3824, 0x382b, 0x3ac3, 0x3811, 0x36d7, 0x3519, 0x3a92, 0x3a42, 0x29d1, 0x383a, 0x3a9b, 0x300e, 0x2cd3, 0x39cd, 0x3874, 0x3a07, 0x2eb1, 0x3b86, 0x3ad8, 0x3a5d, +0x3712, 0x284a, 0x38c1, 0x3bec, 0x39c0, 0x32cd, 0x3ad8, 0x3bce, 0x3817, 0x3896, 0x3aa7, 0x3870, 0x3996, 0x32cc, 0x3a4c, 0x3757, 0x3814, 0x3b65, 0x3acb, 0x376e, 0x34c0, 0x3609, 0x3bf0, 0x3b24, 0x3b29, 0x3848, 0x34b7, 0x398a, 0x220c, 0x3498, 0x3a8c, 0x3883, +0x38c4, 0x3af6, 0x3a42, 0x2dd6, 0x3147, 0x3717, 0x3a8e, 0x3af9, 0x3296, 0x38ef, 0x34fa, 0x3555, 0x3b29, 0x38de, 0x315e, 0x3773, 0x3b67, 0x3116, 0x38ec, 0x357c, 0x35d0, 0x2518, 0x3958, 0x2a03, 0x37d9, 0x3699, 0x3a1e, 0x3230, 0x3b13, 0x36d4, 0x3b2a, 0x39ad, +0x3b10, 0x351a, 0x3b97, 0x3326, 0x2b54, 0x3b7d, 0x386f, 0x373e, 0x37fa, 0x389b, 0x3b90, 0x3292, 0x3975, 0x38f3, 0x37f1, 0x3590, 0x3810, 0x2fd7, 0x3bf7, 0x3a5a, 0x3a1c, 0x34dd, 0x354c, 0x32f8, 0x3095, 0x321e, 0x39e0, 0x395c, 0x3717, 0x357f, 0x394a, 0x34b1, +0x3ba4, 0x380c, 0x3604, 0x2f50, 0x348d, 0x3828, 0x3a9f, 0x39ce, 0x32ca, 0x3906, 0x3ab2, 0x2ca5, 0x38c9, 0x362a, 0x34b2, 0x29dc, 0x3a36, 0x3052, 0x31b7, 0x3589, 0x387c, 0x3401, 0x3b22, 0x3ad6, 0x3ae8, 0x3238, 0x3494, 0x3502, 0x3717, 0x3a6c, 0x3229, 0x368c, +0x3056, 0x3a56, 0x3498, 0x39eb, 0x2864, 0x342d, 0x39e0, 0x34a1, 0x2b99, 0x3a04, 0x38ff, 0x328c, 0x34d9, 0x387d, 0x3a3c, 0x32e5, 0x39eb, 0x3984, 0x34dd, 0x38a7, 0x373f, 0x39b4, 0x3235, 0x2f58, 0x2f39, 0x3800, 0x3758, 0x3939, 0x39fc, 0x3a4b, 0x38bf, 0x30ee, +0x345e, 0x39c8, 0x3a6d, 0x3262, 0x3b81, 0x31dc, 0x3a15, 0x3bd0, 0x36af, 0x36de, 0x37d5, 0x39d7, 0x3ad3, 0x3ac1, 0x3109, 0x35ea, 0x31c6, 0x398d, 0x3987, 0x3a4a, 0x34d2, 0x2ed2, 0x35e6, 0x352c, 0x39eb, 0x3bd6, 0x3a5b, 0x39d1, 0x34aa, 0x3ade, 0x394b, 0x38a1, +0x2bed, 0x38de, 0x3811, 0x3813, 0x391a, 0x374b, 0x3829, 0x3725, 0x38f0, 0x3583, 0x3966, 0x3a7d, 0x375a, 0x38fe, 0x3696, 0x361c, 0x39a8, 0x35f0, 0x38e1, 0x3003, 0x3595, 0x316e, 0x3862, 0x3af8, 0x3af2, 0x34c8, 0x381d, 0x37d8, 0x3893, 0x3a9c, 0x3989, 0x308c, +0x30cc, 0x2538, 0x399d, 0x3919, 0x399e, 0x21cc, 0x38e9, 0x30f8, 0x3a20, 0x3b3c, 0x3990, 0x259c, 0x3143, 0x3080, 0x3967, 0x3afb, 0x3a1b, 0x3779, 0x2eeb, 0x39f3, 0x379a, 0x369c, 0x3985, 0x3a1b, 0x3ba6, 0x3a53, 0x28d5, 0x3881, 0x31d9, 0x3a34, 0x3bd9, 0x393a, +0x3601, 0x2c6e, 0x3636, 0x3298, 0x39bb, 0x3a08, 0x38db, 0x35ad, 0x3a09, 0x36a6, 0x3bc7, 0x3bac, 0x34ae, 0x3291, 0x290b, 0x3250, 0x2648, 0x333d, 0x2bf3, 0x34b1, 0x30e0, 0x351f, 0x3a74, 0x38dc, 0x3883, 0x2841, 0x35e1, 0x390d, 0x3a50, 0x3abd, 0x386d, 0x3bb7, +0x3b94, 0x36b7, 0x3a49, 0x332f, 0x3a1d, 0x354b, 0x3bab, 0x3346, 0x3417, 0x351e, 0x3b6d, 0x391a, 0x2db3, 0x3b1c, 0x3a4a, 0x37b7, 0x36cf, 0x3a56, 0x39c4, 0x3be9, 0x34f0, 0x39be, 0x3691, 0x1ba5, 0x3888, 0x3040, 0x3ae1, 0x3b9b, 0x398f, 0x3a49, 0x3a16, 0x38c0, +0x386c, 0x39ab, 0x37fa, 0x382c, 0x3a6f, 0x393f, 0x340d, 0x38ef, 0x39d1, 0x3845, 0x398f, 0x363e, 0x3687, 0x3052, 0x3a2b, 0x392c, 0x2f5c, 0x3412, 0x3a1f, 0x3b2f, 0x3bcc, 0x3a63, 0x3a89, 0x36e9, 0x3921, 0x3b80, 0x2dc0, 0x3a03, 0x3beb, 0x38d3, 0x36cb, 0x39a3, +0x3978, 0x3a88, 0x3ba4, 0x3561, 0x28c5, 0x33a0, 0x37be, 0x2c39, 0x30ee, 0x3782, 0x2c07, 0x354e, 0x3491, 0x3a92, 0x331a, 0x3b15, 0x32e1, 0x3839, 0x3afb, 0x36c2, 0x2fd0, 0x29ad, 0x3b2e, 0x39c1, 0x2a8c, 0x341a, 0x2f90, 0x395a, 0x3969, 0x37ea, 0x3a5c, 0x3b6d, +0x3971, 0x3a93, 0x304e, 0x3623, 0x3a22, 0x31ee, 0x29df, 0x2c93, 0x3a01, 0x3a62, 0x366c, 0x371d, 0x3af3, 0x2e08, 0x3ac0, 0x3642, 0x3a28, 0x368d, 0x2d3d, 0x36d9, 0x32c3, 0x373f, 0x36fe, 0x3487, 0x2c81, 0x3623, 0x3b59, 0x3a91, 0x350a, 0x34f4, 0x3b09, 0x2c25, +0x3b13, 0x325a, 0x379e, 0x3a7d, 0x34b1, 0x39d5, 0x2ba8, 0x322b, 0x3b5e, 0x37ab, 0x2e24, 0x3ba9, 0x3a3d, 0x34f7, 0x3ba1, 0x3877, 0x3071, 0x39fb, 0x3bbd, 0x3633, 0x3b36, 0x2daa, 0x3b9b, 0x3aa0, 0x395c, 0x3b8f, 0x38d5, 0x3ab0, 0x3a8f, 0x36c2, 0x3b1f, 0x3489, +0x2acc, 0x3845, 0x3715, 0x37d8, 0x3992, 0x3bff, 0x350e, 0x3ad7, 0x39b0, 0x35ac, 0x3287, 0x385f, 0x3bd4, 0x37a3, 0x3438, 0x39a5, 0x3bcf, 0x38c3, 0x34f6, 0x3ae3, 0x3b57, 0x39af, 0x35eb, 0x3bed, 0x34d4, 0x2a95, 0x3b13, 0x384e, 0x3a3b, 0x33da, 0x3bce, 0x3b99, +0x3559, 0x3335, 0x3a2e, 0x3123, 0x38db, 0x33d0, 0x3638, 0x3b17, 0x3a72, 0x3afc, 0x3936, 0x3838, 0x2b69, 0x3895, 0x3a1a, 0x3192, 0x39d5, 0x37a5, 0x2eb0, 0x2e8b, 0x329a, 0x3b90, 0x390a, 0x3a1e, 0x3847, 0x375d, 0x3873, 0x35e2, 0x3771, 0x30f5, 0x3231, 0x3bd7, +0x2bbc, 0x3ace, 0x31ad, 0x3a6b, 0x28a4, 0x3b48, 0x3ba3, 0x3a84, 0x3353, 0x39f6, 0x381f, 0x2dd6, 0x314c, 0x34af, 0x3929, 0x3921, 0x383b, 0x34b0, 0x3923, 0x32c9, 0x3ae7, 0x318f, 0x3480, 0x2ad8, 0x3042, 0x3a4c, 0x349d, 0x2c12, 0x3abb, 0x3a57, 0x3b0d, 0x3111, +0x3359, 0x3a84, 0x38f2, 0x368d, 0x2f4b, 0x3ba0, 0x395c, 0x3026, 0x3a15, 0x2a04, 0x326e, 0x3522, 0x31a2, 0x382f, 0x2ada, 0x3b7c, 0x2f80, 0x3af5, 0x2d35, 0x38fa, 0x39ab, 0x2c6d, 0x2e7a, 0x39f6, 0x31a4, 0x3a53, 0x358c, 0x3951, 0x3a4e, 0x3916, 0x2a3f, 0x3ae9, +0x3b03, 0x39f8, 0x39fe, 0x3a61, 0x39fb, 0x3704, 0x360d, 0x39a7, 0x37a9, 0x348f, 0x3a30, 0x3af5, 0x366f, 0x3b29, 0x3a6a, 0x33d5, 0x370a, 0x39cd, 0x3444, 0x3bea, 0x3b2b, 0x312e, 0x3b8e, 0x32cf, 0x3b79, 0x3302, 0x3bba, 0x3962, 0x3413, 0x37a1, 0x39e0, 0x3805 +}; \ No newline at end of file diff --git a/astral/redmule/inc/z_2D.h b/astral/redmule/inc/z_2D.h new file mode 100644 index 0000000..aff808a --- /dev/null +++ b/astral/redmule/inc/z_2D.h @@ -0,0 +1,27 @@ + /* Header file generated by RedMulE Golden Model */ +uint16_t z_oup_2D [24][32] = { +0x4845, 0x4897, 0x4608, 0x4838, 0x4855, 0x487b, 0x4869, 0x4880, 0x46d1, 0x48b0, 0x48db, 0x483f, 0x48c9, 0x485f, 0x4881, 0x483a, 0x484b, 0x472c, 0x4762, 0x492b, 0x4822, 0x48fd, 0x488e, 0x492e, 0x483e, 0x484f, 0x49e8, 0x46d7, 0x484b, 0x489d, 0x490b, 0x47e9, +0x484f, 0x47d2, 0x44be, 0x4747, 0x47c7, 0x46c0, 0x4727, 0x48af, 0x46c5, 0x482d, 0x483d, 0x482e, 0x4897, 0x479f, 0x488b, 0x4749, 0x489a, 0x46a8, 0x46f2, 0x488b, 0x4891, 0x47e8, 0x4872, 0x483d, 0x4716, 0x46fd, 0x49b5, 0x46a0, 0x46e7, 0x47a4, 0x48a1, 0x4767, +0x4939, 0x4935, 0x4703, 0x48c1, 0x4863, 0x48bd, 0x4913, 0x48cf, 0x48b6, 0x48b8, 0x4946, 0x4920, 0x495e, 0x48e1, 0x4938, 0x48b2, 0x493a, 0x4882, 0x483b, 0x49d5, 0x4911, 0x4972, 0x496b, 0x49df, 0x48f2, 0x4888, 0x4a46, 0x4821, 0x48c1, 0x490c, 0x49b2, 0x48a3, +0x463a, 0x47b0, 0x44cb, 0x4762, 0x4765, 0x46b9, 0x466a, 0x4814, 0x4631, 0x4796, 0x4666, 0x474b, 0x4798, 0x4704, 0x4838, 0x4761, 0x47d3, 0x4590, 0x45ea, 0x48a2, 0x47f1, 0x4844, 0x484b, 0x4776, 0x47d6, 0x46d8, 0x48f3, 0x44d3, 0x46fa, 0x478d, 0x481e, 0x466e, +0x4827, 0x481e, 0x45a2, 0x4794, 0x4727, 0x4806, 0x475d, 0x48d5, 0x4708, 0x4828, 0x4862, 0x480d, 0x4895, 0x4832, 0x48bd, 0x47f1, 0x482a, 0x46a7, 0x47b1, 0x492d, 0x484d, 0x4884, 0x48dc, 0x485f, 0x476d, 0x480c, 0x48e9, 0x46d3, 0x4728, 0x4884, 0x48a0, 0x480e, +0x4862, 0x4813, 0x4675, 0x485a, 0x47e8, 0x4738, 0x4836, 0x4823, 0x46e7, 0x4821, 0x4822, 0x47b3, 0x4846, 0x4855, 0x4863, 0x4717, 0x4872, 0x47c1, 0x46d5, 0x488e, 0x47e2, 0x485f, 0x487c, 0x48b8, 0x481e, 0x4788, 0x48bd, 0x4677, 0x46c9, 0x47f8, 0x48fe, 0x47fc, +0x47a0, 0x47b2, 0x4588, 0x467e, 0x4662, 0x46c7, 0x46e8, 0x4812, 0x4536, 0x474e, 0x46c0, 0x468f, 0x481f, 0x4679, 0x46a1, 0x46e2, 0x4809, 0x4560, 0x4630, 0x47eb, 0x46b5, 0x4757, 0x4848, 0x477f, 0x46a6, 0x46d8, 0x4870, 0x459a, 0x4670, 0x4678, 0x47d2, 0x468c, +0x4762, 0x48c4, 0x46e3, 0x4791, 0x46b1, 0x486d, 0x47d0, 0x4867, 0x468d, 0x47f6, 0x48a5, 0x4756, 0x4857, 0x4854, 0x4866, 0x4838, 0x484d, 0x46ec, 0x47d2, 0x48f6, 0x484a, 0x4879, 0x4848, 0x483c, 0x471d, 0x4806, 0x48fa, 0x4730, 0x4768, 0x47b8, 0x4865, 0x46f9, +0x48a8, 0x4918, 0x46ca, 0x4867, 0x4800, 0x4862, 0x48d3, 0x4910, 0x474e, 0x4849, 0x48eb, 0x486b, 0x4966, 0x48c5, 0x48f4, 0x4830, 0x48f9, 0x4778, 0x481e, 0x499e, 0x48cf, 0x48f1, 0x4982, 0x4923, 0x487c, 0x47cf, 0x49ea, 0x4649, 0x4773, 0x495e, 0x48b2, 0x483f, +0x48a7, 0x4975, 0x4616, 0x481e, 0x481f, 0x4866, 0x48b6, 0x4864, 0x47dc, 0x4873, 0x485c, 0x487f, 0x4938, 0x491f, 0x490d, 0x48b6, 0x48f8, 0x48a1, 0x4859, 0x492d, 0x489c, 0x4915, 0x4899, 0x4887, 0x486c, 0x4859, 0x49ca, 0x471e, 0x4867, 0x4918, 0x48d3, 0x4827, +0x488b, 0x4998, 0x4704, 0x481d, 0x48b8, 0x4880, 0x4876, 0x4944, 0x470c, 0x48f2, 0x48b9, 0x489b, 0x4956, 0x48e5, 0x48d6, 0x48a5, 0x48dc, 0x4856, 0x484e, 0x49ab, 0x48e0, 0x490e, 0x48dd, 0x4945, 0x488b, 0x48dd, 0x4a32, 0x47ea, 0x4835, 0x4911, 0x4965, 0x4819, +0x460e, 0x481e, 0x452c, 0x4673, 0x475c, 0x4717, 0x46f6, 0x46d0, 0x4696, 0x46bc, 0x4726, 0x481e, 0x4763, 0x46ea, 0x46fe, 0x4758, 0x478b, 0x4627, 0x4704, 0x483f, 0x46ad, 0x47b1, 0x4792, 0x4816, 0x46f2, 0x4684, 0x4827, 0x45a8, 0x472f, 0x47a4, 0x4797, 0x462b, +0x483f, 0x48ab, 0x468f, 0x4863, 0x485a, 0x4766, 0x481d, 0x48cb, 0x47dc, 0x4903, 0x48fc, 0x4830, 0x48cc, 0x483e, 0x48ab, 0x4864, 0x4966, 0x4763, 0x4794, 0x499d, 0x488e, 0x488b, 0x48dc, 0x4960, 0x4854, 0x484c, 0x499c, 0x474c, 0x4826, 0x48bc, 0x4949, 0x4883, +0x489d, 0x4905, 0x4718, 0x481e, 0x48e3, 0x48f4, 0x48c1, 0x4904, 0x47e8, 0x48b3, 0x4892, 0x48d4, 0x48ff, 0x4894, 0x48d5, 0x4886, 0x48fa, 0x4803, 0x47d2, 0x492e, 0x4870, 0x48b2, 0x48e5, 0x492b, 0x487b, 0x4785, 0x49e3, 0x471d, 0x4837, 0x48bf, 0x489b, 0x48c4, +0x475c, 0x4871, 0x464a, 0x4811, 0x47af, 0x471c, 0x4817, 0x4817, 0x463b, 0x484e, 0x477f, 0x464f, 0x4704, 0x487c, 0x47a3, 0x4725, 0x4853, 0x462a, 0x465a, 0x4860, 0x4736, 0x4880, 0x47e1, 0x482b, 0x4811, 0x46c0, 0x48dc, 0x475d, 0x4668, 0x4806, 0x4893, 0x46f4, +0x4858, 0x4959, 0x463d, 0x487b, 0x480f, 0x484e, 0x48c0, 0x48a6, 0x4847, 0x4894, 0x48a0, 0x484a, 0x491e, 0x48f4, 0x48fc, 0x48b5, 0x48ce, 0x47d2, 0x47db, 0x497f, 0x4955, 0x4939, 0x48a7, 0x48ce, 0x4890, 0x4884, 0x49d6, 0x4763, 0x486e, 0x4922, 0x48f4, 0x48c3, +0x47ec, 0x491c, 0x4698, 0x4783, 0x4715, 0x4754, 0x4745, 0x4752, 0x472f, 0x4832, 0x4817, 0x4809, 0x47f8, 0x48c3, 0x47e6, 0x4800, 0x48b6, 0x4730, 0x480a, 0x48cb, 0x479e, 0x488e, 0x47c2, 0x488e, 0x472f, 0x47ee, 0x489d, 0x4744, 0x4755, 0x4851, 0x4846, 0x47d3, +0x4838, 0x48a0, 0x4634, 0x4762, 0x4786, 0x4806, 0x47e3, 0x482d, 0x4726, 0x486c, 0x47b7, 0x4803, 0x48ac, 0x4814, 0x48e0, 0x4839, 0x4827, 0x4750, 0x46f2, 0x48c5, 0x483f, 0x4886, 0x48ad, 0x4856, 0x47e8, 0x47a9, 0x4937, 0x4743, 0x46d0, 0x481f, 0x484c, 0x4804, +0x47fd, 0x481f, 0x456d, 0x4813, 0x474d, 0x4807, 0x4688, 0x480e, 0x46e8, 0x4810, 0x469f, 0x4799, 0x4853, 0x478f, 0x47f2, 0x4824, 0x47d0, 0x471f, 0x46da, 0x485f, 0x4813, 0x481c, 0x482e, 0x4863, 0x4786, 0x480b, 0x48c9, 0x46b8, 0x475a, 0x46e2, 0x4852, 0x46c5, +0x45af, 0x4802, 0x4466, 0x46c2, 0x465d, 0x4743, 0x46b7, 0x47ba, 0x4636, 0x46c3, 0x4677, 0x4784, 0x485a, 0x47c2, 0x46dc, 0x46ac, 0x47de, 0x460e, 0x465f, 0x4834, 0x47f4, 0x4769, 0x46fc, 0x4810, 0x45fd, 0x45ea, 0x48d0, 0x45b5, 0x4704, 0x4783, 0x4830, 0x46c4, +0x4759, 0x47c7, 0x453d, 0x45b0, 0x4741, 0x4702, 0x4736, 0x4793, 0x461b, 0x47ba, 0x470b, 0x46dd, 0x4657, 0x470b, 0x470d, 0x4710, 0x486c, 0x468f, 0x45c3, 0x46ba, 0x479d, 0x483b, 0x46c9, 0x4774, 0x46a9, 0x46a7, 0x4833, 0x4606, 0x4690, 0x46a9, 0x46f5, 0x46a7, +0x47ac, 0x48bb, 0x452c, 0x4803, 0x470f, 0x4824, 0x47d5, 0x48cb, 0x4707, 0x484a, 0x4832, 0x4797, 0x4851, 0x482c, 0x487a, 0x4877, 0x4891, 0x465d, 0x47f4, 0x48ce, 0x4898, 0x4899, 0x484e, 0x486a, 0x47ac, 0x47f0, 0x493e, 0x4611, 0x47e2, 0x489e, 0x488c, 0x46af, +0x4665, 0x4836, 0x45e4, 0x46b6, 0x46a1, 0x46b9, 0x46c8, 0x46dd, 0x4658, 0x474b, 0x467b, 0x4777, 0x4769, 0x4798, 0x4785, 0x475e, 0x472a, 0x4656, 0x45fb, 0x4881, 0x46fc, 0x472d, 0x476e, 0x47a3, 0x465d, 0x46ca, 0x4855, 0x4500, 0x464f, 0x479a, 0x46c3, 0x4738, +0x481e, 0x486c, 0x4659, 0x4801, 0x4756, 0x477a, 0x47d5, 0x487b, 0x4706, 0x4808, 0x484f, 0x4838, 0x4870, 0x4863, 0x48d3, 0x4806, 0x4865, 0x4771, 0x46be, 0x494c, 0x4915, 0x484c, 0x4900, 0x4862, 0x481a, 0x46e8, 0x4974, 0x46a0, 0x4775, 0x483d, 0x487c, 0x480e +}; \ No newline at end of file diff --git a/astral/redmule/inc/z_output.h b/astral/redmule/inc/z_output.h new file mode 100644 index 0000000..96c7e5f --- /dev/null +++ b/astral/redmule/inc/z_output.h @@ -0,0 +1,27 @@ + /* Header file generated by RedMulE Golden Model */ +uint16_t z_oup [768] = { +0x4845, 0x4897, 0x4608, 0x4838, 0x4855, 0x487b, 0x4869, 0x4880, 0x46d1, 0x48b0, 0x48db, 0x483f, 0x48c9, 0x485f, 0x4881, 0x483a, 0x484b, 0x472c, 0x4762, 0x492b, 0x4822, 0x48fd, 0x488e, 0x492e, 0x483e, 0x484f, 0x49e8, 0x46d7, 0x484b, 0x489d, 0x490b, 0x47e9, +0x484f, 0x47d2, 0x44be, 0x4747, 0x47c7, 0x46c0, 0x4727, 0x48af, 0x46c5, 0x482d, 0x483d, 0x482e, 0x4897, 0x479f, 0x488b, 0x4749, 0x489a, 0x46a8, 0x46f2, 0x488b, 0x4891, 0x47e8, 0x4872, 0x483d, 0x4716, 0x46fd, 0x49b5, 0x46a0, 0x46e7, 0x47a4, 0x48a1, 0x4767, +0x4939, 0x4935, 0x4703, 0x48c1, 0x4863, 0x48bd, 0x4913, 0x48cf, 0x48b6, 0x48b8, 0x4946, 0x4920, 0x495e, 0x48e1, 0x4938, 0x48b2, 0x493a, 0x4882, 0x483b, 0x49d5, 0x4911, 0x4972, 0x496b, 0x49df, 0x48f2, 0x4888, 0x4a46, 0x4821, 0x48c1, 0x490c, 0x49b2, 0x48a3, +0x463a, 0x47b0, 0x44cb, 0x4762, 0x4765, 0x46b9, 0x466a, 0x4814, 0x4631, 0x4796, 0x4666, 0x474b, 0x4798, 0x4704, 0x4838, 0x4761, 0x47d3, 0x4590, 0x45ea, 0x48a2, 0x47f1, 0x4844, 0x484b, 0x4776, 0x47d6, 0x46d8, 0x48f3, 0x44d3, 0x46fa, 0x478d, 0x481e, 0x466e, +0x4827, 0x481e, 0x45a2, 0x4794, 0x4727, 0x4806, 0x475d, 0x48d5, 0x4708, 0x4828, 0x4862, 0x480d, 0x4895, 0x4832, 0x48bd, 0x47f1, 0x482a, 0x46a7, 0x47b1, 0x492d, 0x484d, 0x4884, 0x48dc, 0x485f, 0x476d, 0x480c, 0x48e9, 0x46d3, 0x4728, 0x4884, 0x48a0, 0x480e, +0x4862, 0x4813, 0x4675, 0x485a, 0x47e8, 0x4738, 0x4836, 0x4823, 0x46e7, 0x4821, 0x4822, 0x47b3, 0x4846, 0x4855, 0x4863, 0x4717, 0x4872, 0x47c1, 0x46d5, 0x488e, 0x47e2, 0x485f, 0x487c, 0x48b8, 0x481e, 0x4788, 0x48bd, 0x4677, 0x46c9, 0x47f8, 0x48fe, 0x47fc, +0x47a0, 0x47b2, 0x4588, 0x467e, 0x4662, 0x46c7, 0x46e8, 0x4812, 0x4536, 0x474e, 0x46c0, 0x468f, 0x481f, 0x4679, 0x46a1, 0x46e2, 0x4809, 0x4560, 0x4630, 0x47eb, 0x46b5, 0x4757, 0x4848, 0x477f, 0x46a6, 0x46d8, 0x4870, 0x459a, 0x4670, 0x4678, 0x47d2, 0x468c, +0x4762, 0x48c4, 0x46e3, 0x4791, 0x46b1, 0x486d, 0x47d0, 0x4867, 0x468d, 0x47f6, 0x48a5, 0x4756, 0x4857, 0x4854, 0x4866, 0x4838, 0x484d, 0x46ec, 0x47d2, 0x48f6, 0x484a, 0x4879, 0x4848, 0x483c, 0x471d, 0x4806, 0x48fa, 0x4730, 0x4768, 0x47b8, 0x4865, 0x46f9, +0x48a8, 0x4918, 0x46ca, 0x4867, 0x4800, 0x4862, 0x48d3, 0x4910, 0x474e, 0x4849, 0x48eb, 0x486b, 0x4966, 0x48c5, 0x48f4, 0x4830, 0x48f9, 0x4778, 0x481e, 0x499e, 0x48cf, 0x48f1, 0x4982, 0x4923, 0x487c, 0x47cf, 0x49ea, 0x4649, 0x4773, 0x495e, 0x48b2, 0x483f, +0x48a7, 0x4975, 0x4616, 0x481e, 0x481f, 0x4866, 0x48b6, 0x4864, 0x47dc, 0x4873, 0x485c, 0x487f, 0x4938, 0x491f, 0x490d, 0x48b6, 0x48f8, 0x48a1, 0x4859, 0x492d, 0x489c, 0x4915, 0x4899, 0x4887, 0x486c, 0x4859, 0x49ca, 0x471e, 0x4867, 0x4918, 0x48d3, 0x4827, +0x488b, 0x4998, 0x4704, 0x481d, 0x48b8, 0x4880, 0x4876, 0x4944, 0x470c, 0x48f2, 0x48b9, 0x489b, 0x4956, 0x48e5, 0x48d6, 0x48a5, 0x48dc, 0x4856, 0x484e, 0x49ab, 0x48e0, 0x490e, 0x48dd, 0x4945, 0x488b, 0x48dd, 0x4a32, 0x47ea, 0x4835, 0x4911, 0x4965, 0x4819, +0x460e, 0x481e, 0x452c, 0x4673, 0x475c, 0x4717, 0x46f6, 0x46d0, 0x4696, 0x46bc, 0x4726, 0x481e, 0x4763, 0x46ea, 0x46fe, 0x4758, 0x478b, 0x4627, 0x4704, 0x483f, 0x46ad, 0x47b1, 0x4792, 0x4816, 0x46f2, 0x4684, 0x4827, 0x45a8, 0x472f, 0x47a4, 0x4797, 0x462b, +0x483f, 0x48ab, 0x468f, 0x4863, 0x485a, 0x4766, 0x481d, 0x48cb, 0x47dc, 0x4903, 0x48fc, 0x4830, 0x48cc, 0x483e, 0x48ab, 0x4864, 0x4966, 0x4763, 0x4794, 0x499d, 0x488e, 0x488b, 0x48dc, 0x4960, 0x4854, 0x484c, 0x499c, 0x474c, 0x4826, 0x48bc, 0x4949, 0x4883, +0x489d, 0x4905, 0x4718, 0x481e, 0x48e3, 0x48f4, 0x48c1, 0x4904, 0x47e8, 0x48b3, 0x4892, 0x48d4, 0x48ff, 0x4894, 0x48d5, 0x4886, 0x48fa, 0x4803, 0x47d2, 0x492e, 0x4870, 0x48b2, 0x48e5, 0x492b, 0x487b, 0x4785, 0x49e3, 0x471d, 0x4837, 0x48bf, 0x489b, 0x48c4, +0x475c, 0x4871, 0x464a, 0x4811, 0x47af, 0x471c, 0x4817, 0x4817, 0x463b, 0x484e, 0x477f, 0x464f, 0x4704, 0x487c, 0x47a3, 0x4725, 0x4853, 0x462a, 0x465a, 0x4860, 0x4736, 0x4880, 0x47e1, 0x482b, 0x4811, 0x46c0, 0x48dc, 0x475d, 0x4668, 0x4806, 0x4893, 0x46f4, +0x4858, 0x4959, 0x463d, 0x487b, 0x480f, 0x484e, 0x48c0, 0x48a6, 0x4847, 0x4894, 0x48a0, 0x484a, 0x491e, 0x48f4, 0x48fc, 0x48b5, 0x48ce, 0x47d2, 0x47db, 0x497f, 0x4955, 0x4939, 0x48a7, 0x48ce, 0x4890, 0x4884, 0x49d6, 0x4763, 0x486e, 0x4922, 0x48f4, 0x48c3, +0x47ec, 0x491c, 0x4698, 0x4783, 0x4715, 0x4754, 0x4745, 0x4752, 0x472f, 0x4832, 0x4817, 0x4809, 0x47f8, 0x48c3, 0x47e6, 0x4800, 0x48b6, 0x4730, 0x480a, 0x48cb, 0x479e, 0x488e, 0x47c2, 0x488e, 0x472f, 0x47ee, 0x489d, 0x4744, 0x4755, 0x4851, 0x4846, 0x47d3, +0x4838, 0x48a0, 0x4634, 0x4762, 0x4786, 0x4806, 0x47e3, 0x482d, 0x4726, 0x486c, 0x47b7, 0x4803, 0x48ac, 0x4814, 0x48e0, 0x4839, 0x4827, 0x4750, 0x46f2, 0x48c5, 0x483f, 0x4886, 0x48ad, 0x4856, 0x47e8, 0x47a9, 0x4937, 0x4743, 0x46d0, 0x481f, 0x484c, 0x4804, +0x47fd, 0x481f, 0x456d, 0x4813, 0x474d, 0x4807, 0x4688, 0x480e, 0x46e8, 0x4810, 0x469f, 0x4799, 0x4853, 0x478f, 0x47f2, 0x4824, 0x47d0, 0x471f, 0x46da, 0x485f, 0x4813, 0x481c, 0x482e, 0x4863, 0x4786, 0x480b, 0x48c9, 0x46b8, 0x475a, 0x46e2, 0x4852, 0x46c5, +0x45af, 0x4802, 0x4466, 0x46c2, 0x465d, 0x4743, 0x46b7, 0x47ba, 0x4636, 0x46c3, 0x4677, 0x4784, 0x485a, 0x47c2, 0x46dc, 0x46ac, 0x47de, 0x460e, 0x465f, 0x4834, 0x47f4, 0x4769, 0x46fc, 0x4810, 0x45fd, 0x45ea, 0x48d0, 0x45b5, 0x4704, 0x4783, 0x4830, 0x46c4, +0x4759, 0x47c7, 0x453d, 0x45b0, 0x4741, 0x4702, 0x4736, 0x4793, 0x461b, 0x47ba, 0x470b, 0x46dd, 0x4657, 0x470b, 0x470d, 0x4710, 0x486c, 0x468f, 0x45c3, 0x46ba, 0x479d, 0x483b, 0x46c9, 0x4774, 0x46a9, 0x46a7, 0x4833, 0x4606, 0x4690, 0x46a9, 0x46f5, 0x46a7, +0x47ac, 0x48bb, 0x452c, 0x4803, 0x470f, 0x4824, 0x47d5, 0x48cb, 0x4707, 0x484a, 0x4832, 0x4797, 0x4851, 0x482c, 0x487a, 0x4877, 0x4891, 0x465d, 0x47f4, 0x48ce, 0x4898, 0x4899, 0x484e, 0x486a, 0x47ac, 0x47f0, 0x493e, 0x4611, 0x47e2, 0x489e, 0x488c, 0x46af, +0x4665, 0x4836, 0x45e4, 0x46b6, 0x46a1, 0x46b9, 0x46c8, 0x46dd, 0x4658, 0x474b, 0x467b, 0x4777, 0x4769, 0x4798, 0x4785, 0x475e, 0x472a, 0x4656, 0x45fb, 0x4881, 0x46fc, 0x472d, 0x476e, 0x47a3, 0x465d, 0x46ca, 0x4855, 0x4500, 0x464f, 0x479a, 0x46c3, 0x4738, +0x481e, 0x486c, 0x4659, 0x4801, 0x4756, 0x477a, 0x47d5, 0x487b, 0x4706, 0x4808, 0x484f, 0x4838, 0x4870, 0x4863, 0x48d3, 0x4806, 0x4865, 0x4771, 0x46be, 0x494c, 0x4915, 0x484c, 0x4900, 0x4862, 0x481a, 0x46e8, 0x4974, 0x46a0, 0x4775, 0x483d, 0x487c, 0x480e +}; \ No newline at end of file diff --git a/astral/redmule/redmule.c b/astral/redmule/redmule.c new file mode 100644 index 0000000..992e223 --- /dev/null +++ b/astral/redmule/redmule.c @@ -0,0 +1,112 @@ +/* + * Copyright (C) 2022-2023 ETH Zurich and University of Bologna + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * SPDX-License-Identifier: Apache-2.0 + * + * Author: Yvan Tortorella + * + * RedMulE SW test + */ + +#include +#include "stdio.h" +#include "archi_redmule.h" +#include "hal_redmule.h" +#include "pulp.h" + +int main() { + + volatile int errors = 0; + + if(get_core_id() == 0){ + + uint16_t m_size = M_SIZE; + uint16_t n_size = N_SIZE; + uint16_t k_size = K_SIZE; + + uint8_t *x_ext = x_inp; + uint8_t *w_ext = w_inp; + uint8_t *y_ext = y_inp; + uint8_t *z_ext = z_oup; + + uint8_t volatile *x = (uint8_t volatile *) pi_l1_malloc(0, (2*m_size*n_size)); + uint8_t volatile *w = (uint8_t volatile *) pi_l1_malloc(0, (2*n_size*k_size)); + uint8_t volatile *y = (uint8_t volatile *) pi_l1_malloc(0, (2*m_size*k_size)); + + #ifdef USE_NO_DMA + generate_test_data16((int) x, (int) w, (int) y, (int) m_size, (int) n_size, (int) k_size); + #else + volatile unsigned int dma_id = 0; + dma_id = mchan_alloc(); + mchan_transfer((unsigned int) 2*(2*m_size*n_size), + (unsigned int) x_ext, + (unsigned int) x ); + mchan_barrier(dma_id); + mchan_free(dma_id); + + dma_id = mchan_alloc(); + mchan_transfer((unsigned int) 2*(2*n_size*k_size), + (unsigned int) w_ext, + (unsigned int) w ); + mchan_barrier(dma_id); + mchan_free(dma_id); + + dma_id = mchan_alloc(); + mchan_transfer((unsigned int) 2*(2*m_size*k_size), + (unsigned int) y_ext, + (unsigned int) y ); + mchan_barrier(dma_id); + #endif + + int gold_sum = 0, check_sum = 0; + int i,j; + + int offload_id_tmp, offload_id; + + // Enable RedMulE + hwpe_cg_enable(); + + hwpe_soft_clear(); + + // redmule_cfg ((unsigned int) x, + // (unsigned int) w, + // (unsigned int) y, + // m_size, n_size, k_size, + // (uint8_t) GEMM, + // (uint8_t) Float16); + redmule_x_add_set ((unsigned int) x); + redmule_w_add_set ((unsigned int) w); + redmule_y_add_set ((unsigned int) y); + redmule_z_add_set ((unsigned int) y); + redmule_cfg (m_size, n_size, k_size, gemm_ops); + + // Start RedMulE operation + hwpe_trigger_job(); + + // Wait for end of computation + redmule_evt_wait(); + + // Disable RedMulE + hwpe_cg_disable(); + + errors = redmule_compare16((int) y, (int) m_size, (int) k_size); + + *(int *) 0x1A1040A0 = errors; + + printf ("Terminated test with %d errors. See you!\n", errors); + + } + synch_barrier(); + return errors; +} From b7ad8bf7e5817b1f5b52212b2dc39fd95dc9139a Mon Sep 17 00:00:00 2001 From: Francesco Conti Date: Tue, 26 Mar 2024 21:43:08 +0000 Subject: [PATCH 25/71] Add N-EUREKA regression test (not fully self-checking, very minimal) This is a temporary reg-test for N-EUREKA integration. --- .gitmodules | 3 + hwpe/neureka/Makefile | 34 ++++++ hwpe/neureka/gen/inc/bias.h | 14 +++ hwpe/neureka/gen/inc/input.h | 65 ++++++++++++ hwpe/neureka/gen/inc/layer_conf.h | 42 ++++++++ hwpe/neureka/gen/inc/output.h | 10 ++ hwpe/neureka/gen/inc/scale.h | 15 +++ hwpe/neureka/gen/inc/weight.h | 115 ++++++++++++++++++++ hwpe/neureka/inc/layer_util.h | 40 +++++++ hwpe/neureka/inc/nnx_layer.h | 26 +++++ hwpe/neureka/inc/pmsis.h | 11 ++ hwpe/neureka/pulp-nnx | 1 + hwpe/neureka/src/main.c | 65 ++++++++++++ hwpe/neureka/src/nnx_layer.c | 171 ++++++++++++++++++++++++++++++ 14 files changed, 612 insertions(+) create mode 100644 .gitmodules create mode 100644 hwpe/neureka/Makefile create mode 100644 hwpe/neureka/gen/inc/bias.h create mode 100644 hwpe/neureka/gen/inc/input.h create mode 100644 hwpe/neureka/gen/inc/layer_conf.h create mode 100644 hwpe/neureka/gen/inc/output.h create mode 100644 hwpe/neureka/gen/inc/scale.h create mode 100644 hwpe/neureka/gen/inc/weight.h create mode 100644 hwpe/neureka/inc/layer_util.h create mode 100644 hwpe/neureka/inc/nnx_layer.h create mode 100644 hwpe/neureka/inc/pmsis.h create mode 160000 hwpe/neureka/pulp-nnx create mode 100644 hwpe/neureka/src/main.c create mode 100644 hwpe/neureka/src/nnx_layer.c diff --git a/.gitmodules b/.gitmodules new file mode 100644 index 0000000..36d31e4 --- /dev/null +++ b/.gitmodules @@ -0,0 +1,3 @@ +[submodule "hwpe/neureka/pulp-nnx"] + path = hwpe/neureka/pulp-nnx + url = git@github.com:pulp-platform/pulp-nnx diff --git a/hwpe/neureka/Makefile b/hwpe/neureka/Makefile new file mode 100644 index 0000000..37ace72 --- /dev/null +++ b/hwpe/neureka/Makefile @@ -0,0 +1,34 @@ +ACCELERATOR ?= neureka + +LIBDIR := $(abspath ./pulp-nnx) +ACC_DIR := $(LIBDIR)/$(ACCELERATOR) + +## Test +INC_DIRS += inc +PULP_APP_SRCS += $(wildcard src/*.c) +SRC_DIRS += src + +## Library +INC_DIRS += $(LIBDIR)/inc $(LIBDIR)/util +PULP_APP_SRCS += $(LIBDIR)/src/pulp_nnx_$(ACCELERATOR).c $(wildcard $(LIBDIR)/util/*.c) +SRC_DIRS += $(LIBDIR)/src $(LIBDIR)/util + +## Accelerator +INC_DIRS += $(ACC_DIR)/hal $(ACC_DIR)/bsp $(ACC_DIR)/bsp/astral +PULP_APP_SRCS += $(wildcard $(ACC_DIR)/hal/*.c) $(wildcard $(ACC_DIR)/bsp/astral/*.c) +SRC_DIRS += $(ACC_DIR)/hal $(ACC_DIR)/bsp/astral + +## Generated +INC_DIRS += gen/inc +SRC_DIRS += gen/src + +INC_FLAGS += $(addprefix -I,$(INC_DIRS)) + +# Flags +ACCELERATOR_UPPERCASE := $(shell echo $(ACCELERATOR) | tr [:lower:] [:upper:]) +PULP_CFLAGS += -DNNX_ACCELERATOR=\"$(ACCELERATOR)\" -DNNX_$(ACCELERATOR_UPPERCASE) -DNNX_NEUREKA_ASTRAL -DNNX_NEUREKA_PE_H=4 -DNNX_NEUREKA_PE_W=4 +PULP_CFLAGS += $(INC_FLAGS) -O3 + +PULP_APP = test + +include $(PULP_SDK_HOME)/install/rules/pulp_rt.mk diff --git a/hwpe/neureka/gen/inc/bias.h b/hwpe/neureka/gen/inc/bias.h new file mode 100644 index 0000000..30d072b --- /dev/null +++ b/hwpe/neureka/gen/inc/bias.h @@ -0,0 +1,14 @@ +#ifndef __BIAS_H__ +#define __BIAS_H__ + +#include + +#define BIAS_SIZE (32) +PI_L1 int32_t bias[BIAS_SIZE] = { + -0x65c83656, 0x79b5657f, -0x57f742d4, 0x48370263, -0x322008d7, -0x40c1a507, -0x6cb54499, -0x76a3f065, -0x13494905, -0x17d3f6d0, + -0x64732a81, 0x60b4468a, 0x1176b544, -0x1168daef, -0x40e1a4fd, -0x3746219b, 0x18afd65e, 0x6f6ff1d7, -0x61e9d6e3, 0x45b33266, + 0x79d3867b, 0x1c699c9e, 0x6ebc54cb, -0x7f508e3e, -0x1bb33223, 0x6e771d3c, -0x42009579, 0x2c809ab3, -0x3fe5e70c, -0x468955b7, + -0x4405229, -0x79a9c840 +}; + +#endif // __BIAS_H__ diff --git a/hwpe/neureka/gen/inc/input.h b/hwpe/neureka/gen/inc/input.h new file mode 100644 index 0000000..2c7c3e5 --- /dev/null +++ b/hwpe/neureka/gen/inc/input.h @@ -0,0 +1,65 @@ +#ifndef __INPUT_H__ +#define __INPUT_H__ + +#include + +#define INPUT_SIZE (512) + +PI_L1 uint8_t input[INPUT_SIZE] = { + 0xc2, 0x9c, 0xad, 0x2f, 0x37, 0xd4, 0x88, 0x59, 0x67, 0xd8, + 0x73, 0x01, 0x9c, 0x5f, 0xc4, 0x64, 0xd9, 0x74, 0xa9, 0xe7, + 0x18, 0x9a, 0x6e, 0xd7, 0x77, 0xc2, 0x71, 0xa6, 0xdc, 0x3f, + 0xab, 0x2b, 0x36, 0x6c, 0x87, 0x3d, 0x9b, 0x68, 0x64, 0x62, + 0xc4, 0x13, 0x65, 0x5c, 0x3c, 0xcf, 0xd0, 0x0a, 0x12, 0xc1, + 0x18, 0xb4, 0x82, 0x15, 0x77, 0x44, 0x92, 0xb6, 0x6d, 0x09, + 0xc7, 0x0a, 0x41, 0xc1, 0xe9, 0xfe, 0x82, 0x73, 0x1c, 0x1d, + 0xd4, 0xb8, 0x49, 0x81, 0x3e, 0x3a, 0xa7, 0x32, 0x41, 0x19, + 0xcb, 0x37, 0xc8, 0x56, 0x72, 0x34, 0x91, 0x11, 0xa4, 0x99, + 0x9d, 0xc5, 0x7a, 0x50, 0x22, 0x65, 0x87, 0xc6, 0xe1, 0x95, + 0xe8, 0x3a, 0x61, 0xdb, 0x01, 0xb3, 0x56, 0x46, 0xa9, 0xdd, + 0x21, 0xb2, 0xb9, 0xbf, 0x93, 0x3f, 0x33, 0x87, 0x86, 0x65, + 0x20, 0xef, 0xdf, 0xd3, 0xdc, 0xb6, 0xe8, 0x5e, 0xdf, 0xdd, + 0x43, 0xad, 0xbc, 0x81, 0x6e, 0x8b, 0x61, 0x28, 0xef, 0xc6, + 0x5c, 0x7f, 0x01, 0x5a, 0x66, 0x52, 0x5a, 0x14, 0x0f, 0x32, + 0x12, 0x07, 0xb9, 0x98, 0xc8, 0x81, 0x2b, 0x67, 0x07, 0x7f, + 0xcc, 0x2c, 0x68, 0x1f, 0xd9, 0xda, 0xc9, 0x5a, 0x49, 0x8b, + 0x24, 0x03, 0x16, 0xa8, 0x5b, 0xc8, 0x4b, 0x77, 0xfd, 0x50, + 0x0a, 0x3d, 0x7d, 0x1e, 0x99, 0xe4, 0x5b, 0x3b, 0xb2, 0x89, + 0xf5, 0x12, 0x43, 0xec, 0x65, 0x1a, 0x4d, 0x13, 0x3d, 0x61, + 0x95, 0x48, 0x24, 0xf9, 0x0c, 0xed, 0xba, 0xad, 0x0d, 0x93, + 0xed, 0x35, 0x51, 0x30, 0x48, 0x11, 0x04, 0x5b, 0xcd, 0xa7, + 0xc1, 0x1d, 0x5c, 0xd3, 0xa3, 0xd1, 0x67, 0xb9, 0x14, 0xdf, + 0x96, 0x54, 0x5b, 0x07, 0x27, 0x39, 0xef, 0x81, 0x75, 0x0b, + 0x2a, 0x5b, 0x78, 0x3d, 0x19, 0x5e, 0x20, 0x69, 0x38, 0xc8, + 0x68, 0x4a, 0x2d, 0x39, 0xb5, 0x93, 0x8e, 0xb3, 0x8f, 0x17, + 0xc3, 0xb8, 0x59, 0x2d, 0x9b, 0x2a, 0x4c, 0x93, 0x13, 0xe9, + 0x25, 0x52, 0xf4, 0x6d, 0x9e, 0x84, 0x9c, 0x47, 0x29, 0xdc, + 0xa5, 0x0d, 0x27, 0xf1, 0x74, 0x51, 0x0b, 0x1e, 0xf3, 0xce, + 0x7b, 0xc4, 0x19, 0x71, 0x2d, 0x58, 0x3b, 0x1f, 0x46, 0xd7, + 0xe9, 0x4e, 0xe8, 0x2a, 0x7f, 0x30, 0x06, 0xbb, 0x0a, 0x33, + 0x5e, 0xce, 0x69, 0x46, 0x08, 0x44, 0xca, 0xb2, 0x55, 0xab, + 0x65, 0x6d, 0xe2, 0xce, 0xe4, 0xbe, 0x99, 0x76, 0x3c, 0xd1, + 0x96, 0x71, 0xa5, 0x24, 0x48, 0x69, 0xee, 0xe9, 0x10, 0xf5, + 0x69, 0xbe, 0x66, 0x5e, 0x87, 0x23, 0x2f, 0xe1, 0xdc, 0x05, + 0x28, 0x2b, 0x92, 0x3b, 0x04, 0x2f, 0x56, 0xb2, 0x38, 0x70, + 0x5e, 0x6d, 0xca, 0x08, 0x5b, 0x23, 0x30, 0xf0, 0x34, 0xd1, + 0xc7, 0x7a, 0x56, 0xb8, 0x5a, 0x57, 0x01, 0xe4, 0xc8, 0x80, + 0x7a, 0x2e, 0xed, 0xee, 0x51, 0xf9, 0x10, 0x8b, 0x54, 0x61, + 0x20, 0x3a, 0x90, 0x0b, 0xaa, 0x65, 0x81, 0xc6, 0x99, 0x40, + 0x23, 0xc2, 0x24, 0xf2, 0x61, 0x8c, 0x42, 0x06, 0xb4, 0xa3, + 0x0f, 0xed, 0x6b, 0xd5, 0x2d, 0xb5, 0x09, 0x96, 0xe3, 0x5b, + 0x2e, 0x3a, 0x62, 0xd7, 0x7f, 0x29, 0x03, 0x8a, 0x26, 0x71, + 0x10, 0xae, 0x28, 0x3b, 0x1a, 0xf3, 0x9d, 0xf6, 0x37, 0x23, + 0x84, 0x3c, 0x1f, 0x13, 0xdf, 0x74, 0x63, 0xa2, 0xb2, 0x88, + 0xee, 0xf3, 0x6a, 0xcd, 0x8c, 0xa9, 0x5a, 0xf5, 0xc9, 0xc8, + 0x53, 0xc8, 0xd4, 0x58, 0x44, 0x27, 0x0e, 0x3d, 0xb0, 0x72, + 0xd2, 0x3d, 0x31, 0xf3, 0x76, 0xf2, 0x83, 0x03, 0xfc, 0xd1, + 0x29, 0xc0, 0x19, 0x81, 0xb9, 0x65, 0x8b, 0xf4, 0xe1, 0x8f, + 0xf3, 0x80, 0xc2, 0xe1, 0xb2, 0xd0, 0x27, 0x9a, 0x0d, 0xd7, + 0xf5, 0x46, 0x6d, 0x37, 0xdf, 0x16, 0xe5, 0x40, 0x63, 0xac, + 0xdd, 0xe2 +}; + + + +#endif // __INPUT_H__ diff --git a/hwpe/neureka/gen/inc/layer_conf.h b/hwpe/neureka/gen/inc/layer_conf.h new file mode 100644 index 0000000..42e2de0 --- /dev/null +++ b/hwpe/neureka/gen/inc/layer_conf.h @@ -0,0 +1,42 @@ +#ifndef __LAYER_CONF_H__ +#define __LAYER_CONF_H__ + +#define TEST_NAME "test" +#define INPUT_HEIGHT (4) +#define INPUT_WIDTH (4) +#define INPUT_CHANNEL (32) +#define INPUT_SIGNED (0) +#define INPUT_BITS (8) + +#define OUTPUT_HEIGHT (4) +#define OUTPUT_WIDTH (4) +#define OUTPUT_CHANNEL (32) +#define OUTPUT_BITS (8) + +#define WEIGHT_HEIGHT (1) +#define WEIGHT_WIDTH (1) +#define WEIGHT_CHANNEL_IN (32) +#define WEIGHT_CHANNEL_OUT (32) +#define WEIGHT_BITS (8) +#define WEIGHT_OFFSET (-128) + +#define SCALE_BITS (8) + +#define BIAS_BITS (32) + +#define PADDING_TOP (0) +#define PADDING_BOTTOM (0) +#define PADDING_LEFT (0) +#define PADDING_RIGHT (0) +#define PADDING_VALUE (0) + +#define STRIDE_HEIGHT (1) +#define STRIDE_WIDTH (1) + +#define GROUPS (1) +#define OUTSHIFT (23) +#define HAS_NORM_QUANT (1) +#define HAS_BIAS (1) +#define HAS_RELU (1) + +#endif // __LAYER_CONF_H__ diff --git a/hwpe/neureka/gen/inc/output.h b/hwpe/neureka/gen/inc/output.h new file mode 100644 index 0000000..472a3bb --- /dev/null +++ b/hwpe/neureka/gen/inc/output.h @@ -0,0 +1,10 @@ +#ifndef __OUTPUT_H__ +#define __OUTPUT_H__ + +#include + +#define OUTPUT_SIZE (512) +PI_L1 uint8_t output[OUTPUT_SIZE]; + + +#endif // __OUTPUT_H__ diff --git a/hwpe/neureka/gen/inc/scale.h b/hwpe/neureka/gen/inc/scale.h new file mode 100644 index 0000000..8ae79a5 --- /dev/null +++ b/hwpe/neureka/gen/inc/scale.h @@ -0,0 +1,15 @@ +#ifndef __SCALE_H__ +#define __SCALE_H__ + +#include + +#define SCALE_SIZE (32) +PI_L1 uint8_t scale[SCALE_SIZE] = { + 0x2c, 0xca, 0xa6, 0xb9, 0x5f, 0xfb, 0xb4, 0x1e, 0x98, 0x1b, + 0xf1, 0xdf, 0xdd, 0xcf, 0xde, 0xf4, 0x82, 0xfd, 0x38, 0x59, + 0x2b, 0xa6, 0x10, 0x67, 0xa4, 0x2a, 0xf7, 0x12, 0x89, 0xcc, + 0x53, 0x1c +}; + + +#endif // __SCALE_H__ diff --git a/hwpe/neureka/gen/inc/weight.h b/hwpe/neureka/gen/inc/weight.h new file mode 100644 index 0000000..dfa4788 --- /dev/null +++ b/hwpe/neureka/gen/inc/weight.h @@ -0,0 +1,115 @@ +#ifndef __WEIGHT_H__ +#define __WEIGHT_H__ + +#include + +#define WEIGHT_SIZE (1024) +PI_L1 uint8_t weight[WEIGHT_SIZE] = { + 0x6e, 0xe7, 0xcc, 0xf1, 0x1d, 0x56, 0xfe, 0xa4, 0xdd, 0x6c, + 0x22, 0xe7, 0x2b, 0x7d, 0x5a, 0xc1, 0x16, 0x58, 0x21, 0xc1, + 0x16, 0x95, 0x10, 0x54, 0x9c, 0xdd, 0xc9, 0x66, 0x89, 0x93, + 0xc7, 0xe1, 0x73, 0x89, 0xad, 0x4d, 0x48, 0x2e, 0xe5, 0x3e, + 0x29, 0x36, 0x3c, 0xae, 0xc3, 0xa4, 0x4a, 0x2b, 0x00, 0x54, + 0x42, 0xed, 0x55, 0x7d, 0x54, 0x94, 0x70, 0x1e, 0x3c, 0x46, + 0x86, 0x01, 0xd3, 0xa4, 0xe2, 0x52, 0x0c, 0x87, 0x0b, 0x5e, + 0x02, 0xfb, 0xcd, 0x76, 0xb6, 0x83, 0xc5, 0x9c, 0xf1, 0x6a, + 0x7f, 0x5f, 0xc0, 0x9c, 0x13, 0xde, 0xdd, 0x70, 0xb6, 0x38, + 0x98, 0x87, 0xe5, 0x71, 0xc7, 0x37, 0x9b, 0x47, 0x54, 0xfa, + 0xeb, 0xc7, 0x72, 0x0f, 0x61, 0x72, 0xff, 0x63, 0xc5, 0x59, + 0xb5, 0xeb, 0x0f, 0x38, 0xff, 0x68, 0x18, 0x4e, 0xdb, 0x0a, + 0x0e, 0xc6, 0x77, 0x17, 0xa5, 0x2e, 0x36, 0x00, 0x8e, 0xe2, + 0x41, 0x4f, 0x1e, 0x13, 0x83, 0x6a, 0x9b, 0x08, 0xc1, 0x63, + 0x4e, 0x14, 0xd8, 0xd0, 0x00, 0x8b, 0x06, 0x30, 0xcc, 0x11, + 0x44, 0x09, 0x1e, 0x9a, 0x07, 0xde, 0x4e, 0x6d, 0x45, 0x36, + 0xdd, 0x98, 0x27, 0x32, 0x60, 0xfa, 0xfb, 0x7b, 0x29, 0x73, + 0xe6, 0x6c, 0xec, 0xa1, 0x3f, 0x36, 0x9b, 0x8c, 0xa4, 0x03, + 0x08, 0x60, 0x2b, 0x06, 0xff, 0x89, 0x4d, 0x26, 0x90, 0x0e, + 0x34, 0xcf, 0xf4, 0x1a, 0xd6, 0xa6, 0x55, 0x06, 0xdf, 0x83, + 0x46, 0x0b, 0xec, 0x7a, 0x27, 0xb4, 0x88, 0x8e, 0xae, 0xa4, + 0xad, 0xcd, 0x3e, 0x2a, 0xc7, 0xba, 0xb6, 0x1b, 0x1f, 0xe3, + 0x26, 0x65, 0xc8, 0x2a, 0x0b, 0xaa, 0xfa, 0xf9, 0x5c, 0xe3, + 0x07, 0x50, 0xc9, 0x51, 0x26, 0x10, 0x83, 0xa6, 0x3e, 0x54, + 0x7b, 0xe3, 0x46, 0x79, 0x9a, 0xbe, 0x25, 0xe9, 0x83, 0x2b, + 0xbb, 0xec, 0x29, 0x7c, 0xe9, 0xc7, 0x28, 0x99, 0x1d, 0x7f, + 0xb3, 0x1b, 0x01, 0xa6, 0xe2, 0xed, 0x8b, 0xce, 0x0e, 0xe1, + 0x8a, 0x93, 0x44, 0x13, 0xae, 0xee, 0x19, 0x7d, 0x87, 0xea, + 0xd7, 0x70, 0x9f, 0x3c, 0xbf, 0x2f, 0x5c, 0x60, 0x10, 0xae, + 0x4b, 0x6b, 0x2d, 0x7e, 0xe5, 0x8a, 0xa9, 0xa0, 0xf9, 0x8e, + 0x4f, 0x98, 0x19, 0xf9, 0x3e, 0x4b, 0x0d, 0xf0, 0x81, 0xe0, + 0x52, 0xa8, 0xb5, 0x29, 0x40, 0x0d, 0x71, 0x90, 0x39, 0xe8, + 0x7d, 0x15, 0xf7, 0x21, 0x59, 0x34, 0xf3, 0xfb, 0xc2, 0x51, + 0x37, 0xee, 0x78, 0x32, 0x06, 0xdd, 0xfb, 0xf4, 0x39, 0xb7, + 0x96, 0x1f, 0x17, 0x94, 0x36, 0x2e, 0xb7, 0xd2, 0x6b, 0xa3, + 0x5d, 0x35, 0xcb, 0x76, 0xb2, 0xa9, 0x01, 0xaa, 0xd1, 0xd1, + 0x8a, 0xb7, 0x86, 0x17, 0x21, 0x18, 0xba, 0xa2, 0x38, 0xbe, + 0xc9, 0x64, 0x2d, 0xf4, 0x81, 0xc2, 0xd1, 0x97, 0xbb, 0xcd, + 0x04, 0x50, 0x20, 0xbb, 0x67, 0x20, 0xb4, 0x8a, 0x96, 0x30, + 0x8f, 0x35, 0xa4, 0xb0, 0xc2, 0x8c, 0x4e, 0x9c, 0xc7, 0x2d, + 0xbb, 0x90, 0x2d, 0x4a, 0x96, 0xbb, 0xb9, 0x71, 0x35, 0x37, + 0xe7, 0xc8, 0x54, 0x1c, 0x91, 0x15, 0xb7, 0x46, 0x28, 0x3e, + 0x90, 0x85, 0xa6, 0x09, 0xba, 0xd4, 0x5a, 0x51, 0x5d, 0x4a, + 0xb6, 0xa0, 0xb1, 0x84, 0x12, 0x9d, 0x85, 0x6d, 0xa7, 0x07, + 0x7d, 0x3b, 0x24, 0x44, 0x61, 0xb7, 0x78, 0x41, 0xba, 0x29, + 0x8b, 0xc9, 0x67, 0x2e, 0x54, 0x72, 0x79, 0x11, 0x61, 0xe9, + 0x31, 0x84, 0x21, 0x70, 0x1e, 0xcc, 0x5c, 0x03, 0x75, 0x19, + 0xab, 0x3d, 0xea, 0x1d, 0x15, 0xae, 0xba, 0xe5, 0xa2, 0x0b, + 0x73, 0xf4, 0xa3, 0x55, 0x3c, 0x81, 0x3c, 0x00, 0x30, 0xb0, + 0x2e, 0xca, 0x8f, 0xd8, 0xd3, 0x71, 0x2a, 0x9e, 0x40, 0xaf, + 0x0d, 0x20, 0xa1, 0x22, 0xf8, 0x7e, 0xa4, 0x8d, 0x5a, 0x7a, + 0xfc, 0x23, 0x05, 0x4c, 0xa3, 0xc1, 0x16, 0x95, 0x5e, 0xa9, + 0x6e, 0xbf, 0xf8, 0xaf, 0x5f, 0xe3, 0xb0, 0x22, 0x62, 0x39, + 0x45, 0xc9, 0x47, 0x84, 0x0e, 0x53, 0x79, 0xa2, 0xa8, 0x20, + 0x43, 0x65, 0x63, 0x4a, 0x6d, 0x10, 0x7c, 0x03, 0x5f, 0xd0, + 0xbe, 0x6f, 0x5a, 0x91, 0x41, 0xef, 0x9e, 0x06, 0xc9, 0x43, + 0x1b, 0xd9, 0x6f, 0xe5, 0x69, 0xac, 0xb2, 0xe4, 0x35, 0xea, + 0x8a, 0x8b, 0xb1, 0x5c, 0x20, 0x53, 0x38, 0x40, 0x29, 0xc6, + 0x0e, 0x64, 0xa3, 0xf7, 0xbf, 0x75, 0xad, 0x84, 0x6d, 0x9b, + 0xdd, 0x17, 0x10, 0x3e, 0x85, 0x6a, 0xc2, 0xc2, 0xc1, 0x22, + 0xb0, 0xf7, 0xae, 0x65, 0x43, 0x72, 0x4a, 0xbd, 0xeb, 0xe0, + 0x4e, 0xf9, 0x88, 0xa7, 0x00, 0x02, 0x8d, 0xbc, 0x05, 0x2f, + 0x6c, 0x8d, 0xa5, 0xb6, 0x02, 0x64, 0x32, 0x55, 0x1d, 0xde, + 0x76, 0xc6, 0x54, 0x95, 0xf9, 0xe7, 0xa5, 0x71, 0x66, 0xc0, + 0xe6, 0xab, 0xd7, 0xb7, 0x03, 0xa1, 0x38, 0xc4, 0x6f, 0x90, + 0x0a, 0x87, 0x25, 0x39, 0x42, 0x8f, 0xc7, 0x6b, 0x62, 0x2e, + 0x13, 0xde, 0x07, 0x1e, 0xa7, 0x00, 0xf0, 0x8d, 0xeb, 0xd6, + 0xc2, 0x9e, 0x20, 0x58, 0xe7, 0x7f, 0xc6, 0x20, 0xd6, 0xb1, + 0xfe, 0xf3, 0xee, 0x34, 0x9c, 0x14, 0x1e, 0xf7, 0xa4, 0x18, + 0x2c, 0xdd, 0xfb, 0xde, 0x4a, 0x95, 0xf8, 0xb0, 0x73, 0x14, + 0x09, 0x89, 0x75, 0x4c, 0xe8, 0xc8, 0x00, 0x73, 0xdc, 0x49, + 0x90, 0x58, 0x15, 0x53, 0x22, 0xca, 0x16, 0xc5, 0x49, 0xd5, + 0x2b, 0x98, 0x2f, 0x05, 0x2d, 0x8d, 0x6b, 0x0a, 0x0e, 0xac, + 0xfb, 0x7d, 0x42, 0x12, 0x83, 0xe8, 0x8d, 0x72, 0xa3, 0xf2, + 0xf7, 0x04, 0xc6, 0x87, 0x97, 0xa5, 0x82, 0x5b, 0x85, 0xea, + 0x8f, 0xd3, 0x68, 0x74, 0x3e, 0xf7, 0x36, 0x0c, 0xa0, 0x83, + 0x51, 0x68, 0xf9, 0xfb, 0xbe, 0x10, 0xde, 0xad, 0xec, 0x91, + 0xea, 0x12, 0x2e, 0x4a, 0xf5, 0x35, 0x03, 0x50, 0x3b, 0x5f, + 0x1e, 0xdf, 0xdc, 0x95, 0x68, 0xeb, 0x87, 0x8e, 0x24, 0xa4, + 0x70, 0x13, 0x9e, 0x09, 0x50, 0xa5, 0x15, 0x78, 0x7f, 0x18, + 0x06, 0x61, 0x49, 0x8a, 0xb4, 0x65, 0xca, 0x33, 0xe2, 0xa7, + 0x57, 0x51, 0xa1, 0xcf, 0x58, 0x82, 0xa5, 0xa0, 0xab, 0xd1, + 0x5f, 0xf5, 0x68, 0x2c, 0xad, 0x4e, 0xe5, 0xd1, 0x96, 0x4f, + 0xe0, 0x51, 0x65, 0x0c, 0x44, 0xb8, 0xc6, 0x5b, 0xc8, 0x0e, + 0xe5, 0x2a, 0x7e, 0x74, 0xd7, 0x45, 0x7b, 0xb5, 0x03, 0x4a, + 0x77, 0x7f, 0x8e, 0xda, 0x26, 0x5c, 0xe3, 0x58, 0xbc, 0x36, + 0xa5, 0x6e, 0xa3, 0x7e, 0x87, 0xb9, 0x80, 0xd6, 0x93, 0x5e, + 0xf5, 0x24, 0xd4, 0x2d, 0xbc, 0x4d, 0xc8, 0xe7, 0xdc, 0x85, + 0x44, 0x00, 0x4b, 0x8b, 0x2d, 0x05, 0x32, 0x97, 0x4c, 0x9c, + 0xb9, 0xb4, 0x97, 0x97, 0x55, 0x60, 0x0b, 0x98, 0x21, 0x4f, + 0xa2, 0x2e, 0x4d, 0xcc, 0x5b, 0x8d, 0xde, 0x25, 0xaa, 0x0a, + 0xfc, 0xca, 0xd1, 0x54, 0x90, 0xbe, 0xef, 0xe6, 0x93, 0x49, + 0xbb, 0x33, 0xaf, 0xf9, 0x5b, 0x98, 0xc4, 0xce, 0x3c, 0x22, + 0xd0, 0xed, 0x5a, 0x9e, 0x01, 0xc0, 0x6a, 0x76, 0x2a, 0x74, + 0x8f, 0x65, 0xdd, 0xec, 0x7b, 0xd8, 0xef, 0x0e, 0xc0, 0x0d, + 0xdb, 0x47, 0x8b, 0x6a, 0x0d, 0xc5, 0xe5, 0x53, 0xb2, 0x22, + 0x84, 0x71, 0xb2, 0xf6, 0x99, 0x42, 0x14, 0x43, 0x94, 0xad, + 0x61, 0xbd, 0x00, 0xef, 0xf7, 0xfd, 0x20, 0xd7, 0x0c, 0x67, + 0xf7, 0xca, 0xdf, 0x78, 0xb0, 0x28, 0x95, 0xb9, 0x0e, 0x4c, + 0x3c, 0xbb, 0x2b, 0x85, 0xa3, 0x68, 0x78, 0x6f, 0x31, 0xe7, + 0x5f, 0x7b, 0xa7, 0x5f, 0xe7, 0x17, 0x35, 0xdd, 0x20, 0x2c, + 0x10, 0x3a, 0x98, 0xe3, 0xb8, 0x7a, 0x8e, 0x6f, 0xee, 0x34, + 0x14, 0x75, 0x19, 0xf8 +}; + + + +#endif // __WEIGHT_H__ diff --git a/hwpe/neureka/inc/layer_util.h b/hwpe/neureka/inc/layer_util.h new file mode 100644 index 0000000..e44ede9 --- /dev/null +++ b/hwpe/neureka/inc/layer_util.h @@ -0,0 +1,40 @@ +/* + * Luka Macan + * + * Copyright 2023 ETH Zurich and University of Bologna + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * SPDX-License-Identifier: Apache-2.0 + */ + +#ifndef __LAYER_UTIL_H__ +#define __LAYER_UTIL_H__ + +#include "layer_conf.h" +#include + +static void layer_info() { + printf("Layer info:\n" + " - input: (%dx%dx%d)\n" + " - output: (%dx%dx%d)\n" + " - weight: (%dx%dx%dx%d)\n" + " - stride: (%dx%d)\n" + " - padding: (%dx%dx%dx%d)\n", + INPUT_HEIGHT, INPUT_WIDTH, INPUT_CHANNEL, OUTPUT_HEIGHT, OUTPUT_WIDTH, + OUTPUT_CHANNEL, WEIGHT_CHANNEL_OUT, WEIGHT_HEIGHT, WEIGHT_WIDTH, + WEIGHT_CHANNEL_IN, STRIDE_HEIGHT, STRIDE_WIDTH, PADDING_TOP, + PADDING_BOTTOM, PADDING_LEFT, PADDING_RIGHT); +} + +#endif // __LAYER_UTIL_H__ diff --git a/hwpe/neureka/inc/nnx_layer.h b/hwpe/neureka/inc/nnx_layer.h new file mode 100644 index 0000000..cbaf4b9 --- /dev/null +++ b/hwpe/neureka/inc/nnx_layer.h @@ -0,0 +1,26 @@ +/* + * Luka Macan + * + * Copyright 2023 ETH Zurich and University of Bologna + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * SPDX-License-Identifier: Apache-2.0 + */ + +#ifndef __NNX_LAYER_H__ +#define __NNX_LAYER_H__ + +void execute_nnx_layer(void *unused_args); + +#endif // __NNX_LAYER_H__ diff --git a/hwpe/neureka/inc/pmsis.h b/hwpe/neureka/inc/pmsis.h new file mode 100644 index 0000000..dbb6a91 --- /dev/null +++ b/hwpe/neureka/inc/pmsis.h @@ -0,0 +1,11 @@ +// fake pmsis.h +#include +#include +// fake data in L2, actually in L1! +#ifndef PI_L1 + #define PI_L1 __attribute__((section(".data_l1"))) +#endif +#ifndef PI_L2 + #define PI_L2 __attribute__((section(".data_l1"))) +#endif + diff --git a/hwpe/neureka/pulp-nnx b/hwpe/neureka/pulp-nnx new file mode 160000 index 0000000..9ec50f0 --- /dev/null +++ b/hwpe/neureka/pulp-nnx @@ -0,0 +1 @@ +Subproject commit 9ec50f0158637c5901ab2216d4be4862a613acdf diff --git a/hwpe/neureka/src/main.c b/hwpe/neureka/src/main.c new file mode 100644 index 0000000..4a8f24e --- /dev/null +++ b/hwpe/neureka/src/main.c @@ -0,0 +1,65 @@ +/* + * Copyright (C) 2020-2024 ETH Zurich and University of Bologna + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/* + * Authors: Francesco Conti + * Gianna Paulin + * Renzo Andri + * Arpan Suravi Prasad + * Luka Macan + * Main Test Program for N-EUREKA + */ + +#include +#include + +#include "layer_util.h" +#include "nnx_layer.h" + +#define OUTPUT_SIZE 512 + +extern int8_t output[]; + +static int check_output() { + int checksum = 0; + for (int i = 0; i < OUTPUT_SIZE; i++) { + checksum += output[i]; + } + return (checksum == 0x00007330); +} + +int errors = 0; + +int main() { + + if (get_core_id() == 0) { + + // execute NNX layer + execute_nnx_layer(NULL); + + errors = check_output(); + + *(int *) 0x1A1040A0 = errors; + if(errors) + printf ("[KO] Terminated test with errors!!!\n"); + else + printf ("[OK] Terminated test with no errors!!!\n"); + + } + synch_barrier(); + return errors; + +} diff --git a/hwpe/neureka/src/nnx_layer.c b/hwpe/neureka/src/nnx_layer.c new file mode 100644 index 0000000..cb53369 --- /dev/null +++ b/hwpe/neureka/src/nnx_layer.c @@ -0,0 +1,171 @@ +/* + * Luka Macan + * + * Copyright 2023 ETH Zurich and University of Bologna + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * SPDX-License-Identifier: Apache-2.0 + */ + +#include "nnx_layer.h" +#include + +#include "neureka.h" +#include "neureka_astral_bsp.h" +#include "neureka_task.h" +#include "pulp_nnx_neureka.h" + +#define NULL 0 + +typedef neureka_norm_mode_e nnx_norm_mode_e; +typedef neureka_quant_t nnx_quant_t; +typedef neureka_quant_function_e nnx_quant_function_e; +typedef neureka_norm_t nnx_norm_t; +typedef neureka_task_t nnx_task_t; +typedef neureka_dev_t nnx_dev_t; +typedef neureka_astral_conf_t nnx_bsp_conf_t; +typedef neureka_task_flag_e nnx_task_flag_e; + +#define nnxTaskFlagTrue neurekaTaskFlagTrue +#define nnxTaskFlagFalse neurekaTaskFlagFalse + +#define nnx_task_init neureka_task_init +#define nnx_task_set_op_to_conv neureka_task_set_op_to_conv +#define nnx_task_set_bits neureka_task_set_bits +#define nnx_task_set_norm_quant neureka_task_set_norm_quant +#define nnx_task_set_weight_offset neureka_task_set_weight_offset +#define nnx_task_set_weight_source neureka_task_set_weight_source +#define nnx_task_set_activation_prefetch neureka_task_set_activation_prefetch +#define nnx_task_set_dims neureka_task_set_dims +#define nnx_task_set_ptrs_conv neureka_task_set_ptrs_conv +#define nnx_task_set_ptrs_norm_quant neureka_task_set_ptrs_norm_quant + +#define nnx_bsp_get_dev neureka_astral_get_dev + +#define nnx_init neureka_nnx_init +#define nnx_dispatch_wait neureka_nnx_dispatch_wait +#define nnx_dispatch neureka_nnx_dispatch +#define nnx_resolve_wait neureka_nnx_resolve_wait +#define nnx_term neureka_nnx_term + +// Generated headers +#include "layer_conf.h" +#if HAS_BIAS != 0 + #include "bias.h" +#endif +#include "input.h" +#include "output.h" +#if HAS_NORM_QUANT != 0 + #include "scale.h" +#endif +#include "weight.h" + +static void task_prepare(nnx_task_t *task) { + nnx_task_init(task); + nnx_task_set_op_to_conv(task, WEIGHT_HEIGHT, GROUPS > 1); + nnx_task_set_bits(task, INPUT_BITS, OUTPUT_BITS, WEIGHT_BITS); + + nnx_task_set_weight_offset(task, weightOffsetModeLayerWise, WEIGHT_OFFSET); + +#ifdef NEUREKA_WEIGHT_SOURCE_WMEM + nnx_task_set_weight_source(task, neurekaWeightSourceWmem); + nnx_task_set_activation_prefetch(task, activationPrefetchOn); +#else + neureka_task_set_weight_source(task, neurekaWeightSourceTcdm); + nnx_task_set_activation_prefetch(task, activationPrefetchOff); +#endif +#if INPUT_SIGNED == 1 + neureka_task_set_input_signed(task); +#else + neureka_task_set_input_unsigned(task); +#endif + + const uint32_t w_in_stride = INPUT_CHANNEL * INPUT_BITS / 8; + const uint32_t h_in_stride = INPUT_WIDTH * w_in_stride; + const uint32_t w_out_stride = OUTPUT_CHANNEL * OUTPUT_BITS / 8; + const uint32_t h_out_stride = OUTPUT_WIDTH * w_out_stride; + +#if STRIDE_HEIGHT == 2 && STRIDE_WIDTH == 2 + nnx_task_set_dims_stride2x2( + task, INPUT_HEIGHT, INPUT_WIDTH, INPUT_CHANNEL, h_in_stride, w_in_stride, + OUTPUT_HEIGHT, OUTPUT_WIDTH, OUTPUT_CHANNEL, h_out_stride, w_out_stride, + WEIGHT_HEIGHT, WEIGHT_WIDTH, PADDING_TOP, PADDING_BOTTOM, PADDING_LEFT, + PADDING_RIGHT); +#else + nnx_task_set_dims(task, INPUT_WIDTH, INPUT_CHANNEL, h_in_stride, w_in_stride, + OUTPUT_HEIGHT, OUTPUT_WIDTH, OUTPUT_CHANNEL, h_out_stride, + w_out_stride, PADDING_TOP, PADDING_BOTTOM, PADDING_LEFT, + PADDING_RIGHT); +#endif + + nnx_task_set_ptrs_conv(task, (uint32_t)input, INPUT_WIDTH, w_in_stride, + PADDING_TOP, PADDING_LEFT, (uint32_t)output, + (uint32_t)weight); +#if HAS_NORM_QUANT == 1 +#if SCALE_BITS == 8 + const nnx_norm_mode_e normMode = normMode8Bit; +#elif SCALE_BITS == 32 + const nnx_norm_mode_e normMode = normMode32Bit; +#endif + + const nnx_task_flag_e flag_bias = + HAS_BIAS ? nnxTaskFlagTrue : nnxTaskFlagFalse; + const uint32_t bias_ptr = (uint32_t)(HAS_BIAS ? bias : NULL); + + nnx_quant_function_e quant_function = + HAS_RELU ? quantFunctionRelu : quantFunctionIdentity; + + nnx_task_set_norm_quant(task, + (nnx_quant_t){.shift_amount = OUTSHIFT, + .function = quant_function, + .flag_rounding = nnxTaskFlagFalse}, + (nnx_norm_t){.mode = normMode, + .flag_bias = flag_bias, + .flag_shift = nnxTaskFlagFalse}); + + nnx_task_set_ptrs_norm_quant(task, (uint32_t)scale, NULL, bias_ptr); +#endif // HAS_NORM_QUANT +} + +static void task_execute(nnx_task_t *task) { + nnx_dev_t *dev = nnx_bsp_get_dev(); + + nnx_bsp_conf_t conf = {.max_stall = 8}; + nnx_init(dev, &conf); + + nnx_dispatch_wait(dev); + + // printf("CFG:\n"); + // for (int i=0; idata)[i]); + // } +#if STRIDE_HEIGHT == 2 && STRIDE_WIDTH == 2 + nnx_dispatch_stride2x2(dev, task, INPUT_WIDTH, INPUT_CHANNEL, OUTPUT_HEIGHT, + OUTPUT_WIDTH, OUTPUT_CHANNEL, WEIGHT_HEIGHT, + WEIGHT_WIDTH); +#else + nnx_dispatch(dev, task); +#endif + + nnx_resolve_wait(dev, task); + + nnx_term(dev); + +} + +void execute_nnx_layer(void *args) { + nnx_task_t task; + task_prepare(&task); + task_execute(&task); +} From 921d02f1518f41319464ca97cba96b1643660cc8 Mon Sep 17 00:00:00 2001 From: Francesco Conti Date: Tue, 26 Mar 2024 21:53:14 +0000 Subject: [PATCH 26/71] Fix version of pulp-nnx --- hwpe/neureka/pulp-nnx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hwpe/neureka/pulp-nnx b/hwpe/neureka/pulp-nnx index 9ec50f0..37a8013 160000 --- a/hwpe/neureka/pulp-nnx +++ b/hwpe/neureka/pulp-nnx @@ -1 +1 @@ -Subproject commit 9ec50f0158637c5901ab2216d4be4862a613acdf +Subproject commit 37a80138686668c455fb07af475ee7abbb8b6fbb From aa5803ad4a0324c8aad7540c421f67a5f22cff8c Mon Sep 17 00:00:00 2001 From: Riccardo Tedeschi Date: Wed, 27 Mar 2024 12:42:15 +0100 Subject: [PATCH 27/71] Use symlinks to avoid code duplication --- carfield/neureka | 1 + carfield/redmule | 1 + carfield/redmule/Makefile | 9 - carfield/redmule/archi_redmule.h | 164 ---------- carfield/redmule/hal_redmule.h | 527 ------------------------------ carfield/redmule/inc/golden.h | 387 ---------------------- carfield/redmule/inc/tensor_dim.h | 13 - carfield/redmule/inc/w_2D.h | 35 -- carfield/redmule/inc/w_input.h | 35 -- carfield/redmule/inc/x_2D.h | 27 -- carfield/redmule/inc/x_input.h | 27 -- carfield/redmule/inc/y_2D.h | 27 -- carfield/redmule/inc/y_input.h | 27 -- carfield/redmule/inc/z_2D.h | 27 -- carfield/redmule/inc/z_output.h | 27 -- carfield/redmule/redmule.c | 112 ------- 16 files changed, 2 insertions(+), 1444 deletions(-) create mode 120000 carfield/neureka create mode 120000 carfield/redmule delete mode 100644 carfield/redmule/Makefile delete mode 100644 carfield/redmule/archi_redmule.h delete mode 100644 carfield/redmule/hal_redmule.h delete mode 100644 carfield/redmule/inc/golden.h delete mode 100644 carfield/redmule/inc/tensor_dim.h delete mode 100644 carfield/redmule/inc/w_2D.h delete mode 100644 carfield/redmule/inc/w_input.h delete mode 100644 carfield/redmule/inc/x_2D.h delete mode 100644 carfield/redmule/inc/x_input.h delete mode 100644 carfield/redmule/inc/y_2D.h delete mode 100644 carfield/redmule/inc/y_input.h delete mode 100644 carfield/redmule/inc/z_2D.h delete mode 100644 carfield/redmule/inc/z_output.h delete mode 100644 carfield/redmule/redmule.c diff --git a/carfield/neureka b/carfield/neureka new file mode 120000 index 0000000..98cb979 --- /dev/null +++ b/carfield/neureka @@ -0,0 +1 @@ +../hwpe/neureka/ \ No newline at end of file diff --git a/carfield/redmule b/carfield/redmule new file mode 120000 index 0000000..bd0da93 --- /dev/null +++ b/carfield/redmule @@ -0,0 +1 @@ +../hwpe/redmule/ \ No newline at end of file diff --git a/carfield/redmule/Makefile b/carfield/redmule/Makefile deleted file mode 100644 index c498417..0000000 --- a/carfield/redmule/Makefile +++ /dev/null @@ -1,9 +0,0 @@ -PULP_APP = test -PULP_APP_SRCS = redmule.c -PULP_CFLAGS = -O3 - -ifeq ($(use_no_dma),1) - PULP_CFLAGS += -DUSE_NO_DMA -endif - -include $(PULP_SDK_HOME)/install/rules/pulp.mk diff --git a/carfield/redmule/archi_redmule.h b/carfield/redmule/archi_redmule.h deleted file mode 100644 index 9222d63..0000000 --- a/carfield/redmule/archi_redmule.h +++ /dev/null @@ -1,164 +0,0 @@ -/* - * Copyright (C) 2022-2023 ETH Zurich and University of Bologna - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * SPDX-License-Identifier: Apache-2.0 - * - * Author: Yvan Tortorella - * - * High-level architecture of RedMulE - * - */ - -#ifndef __ARCHI_REDMULE_H__ -#define __ARCHI_REDMULE_H__ - -/* - * |========================================================================| - * || || - * ||Control and generic configuration register layout || - * |========================================================================| - * || # reg | offset | bits | bitmask || content || - * ||-------+----------+---------+--------------++-------------------------|| - * || 0 | 0x0000 | 31: 0 | 0xFFFFFFFF || TRIGGER || - * || 1 | 0x0004 | 31: 0 | 0xFFFFFFFF || ACQUIRE || - * || 2 | 0x0008 | 31: 0 | 0xFFFFFFFF || EVT_ENABLE || - * || 3 | 0x000c | 31: 0 | 0xFFFFFFFF || STATUS || - * || 4 | 0x0010 | 31: 0 | 0xFFFFFFFF || RUNNING_JOB || - * || 5 | 0x0014 | 31: 0 | 0xFFFFFFFF || SOFT_CLEAR || - * |========================================================================| - * || || - * ||Job-dependent registers layout || - * |========================================================================| - * || # reg | offset | bits | bitmask || content || - * ||-------+----------+---------+--------------++-------------------------|| - * || 0 | 0x0040 | 31: 0 | 0xFFFFFFFF || X_ADDR || - * ||-------+----------+---------+--------------++-------------------------|| - * || 1 | 0x0044 | 31: 0 | 0xFFFFFFFF || W_ADDR || - * ||-------+----------+---------+--------------++-------------------------|| - * || 2 | 0x0048 | 31: 0 | 0xFFFFFFFF || Z_ADDR || - * ||-------+----------+---------+--------------++-------------------------|| - * || 3 | 0x004C | | || Matrix Config 0 Reg || - * || | | 31:16 | 0xFFFF0000 || K Size (W Columns) || - * || | | 15: 0 | 0x0000FFFF || M Size (X Rows) || - * ||-------+----------+---------+--------------++-------------------------|| - * || 4 | 0x0050 | | || Matrix Config 1 Reg || - * || | | 31:16 | 0xFFFFFFFF || N Size (X Cols/W Rows) || - * ||-------+----------+---------+--------------++-------------------------|| - * || 5 | 0x0054 | | || Matrix Arithmetic Reg || - * || | | 12:10 | 0x00001C00 || Operation selection || - * || | | 9: 7 | 0x00000380 || Input/Output format || - * |========================================================================| - * - */ - -/* PULP Cluster Archi defines */ -#define ARCHI_CLUST_CTRL_BASE 0x50200000 -#define ARCHI_CLUST_HWPE_BASE 0x50201000 -#define DMA_COMMAND_QUEUE 0x50204400 -#define DMA_STATUS_REGISTER 0x50204404 -#define ARCHI_CL_HWPE_EVT0 12 -#define ARCHI_CL_HWPE_EVT1 13 -#define FC_DMA_EVENT 8 -#define CL_DMA_EVENT 22 -#define CLUST_CTRL_HWPE_EN 0x18 -#define CLUST_CTRL_HWPE_EN_MASK 0x800 -#define __builtin_bitinsert(a,b,c,d) (a | (((b << (32-c)) >> (32-c)) << d)) - -// RedMulE architecture -#define ADDR_WIDTH 32 -#define DATA_WIDTH 256 -#define REDMULE_FMT 16 -#define ARRAY_HEIGHT 4 -#define PIPE_REGS 3 -#define ARRAY_WIDTH 12 /* Superior limit is ARRAY_HEIGHT*PIPE_REGS */ - -// Commands -#define REDMULE_TRIGGER 0x00 -#define REDMULE_ACQUIRE 0x04 -#define REDMULE_FINISHED 0x08 -#define REDMULE_STATUS 0x0C -#define REDMULE_RUNNING_JOB 0x10 -#define REDMULE_SOFT_CLEAR 0x14 - -// Registers -#define REDMULE_REG_OFFS 0x40 -// #define REDMULE_REG_X_PTR 0x00 -// #define REDMULE_REG_W_PTR 0x04 -// #define REDMULE_REG_Z_PTR 0x08 -// #define REDMULE_MCFG0_PTR 0x0C -// #define REDMULE_MCFG1_PTR 0x10 -// #define REDMULE_ARITH_PTR 0x14 -#define REDMULE_REG_X_PTR 0x00 -#define REDMULE_REG_W_PTR 0x04 -#define REDMULE_REG_Y_PTR 0x08 -#define REDMULE_REG_Z_PTR 0x0C -#define REDMULE_REG_X_ITER_PTR 0x10 -#define REDMULE_REG_W_ITER_PTR 0x14 -#define REDMULE_REG_LEFTOVERS_PTR 0x18 -#define REDMULE_REG_LEFT_PARAMS_PTR 0x1C -#define REDMULE_REG_X_D1_STRIDE_PTR 0x20 -#define REDMULE_REG_W_TOT_LEN_PTR 0x24 -#define REDMULE_REG_TOT_X_READ_PTR 0x28 -#define REDMULE_REG_W_D0_STRIDE_PTR 0x2C -#define REDMULE_REG_YZ_TOT_LEN_PTR 0x30 -#define REDMULE_REG_YZ_D0_STRIDE_PTR 0x34 -#define REDMULE_REG_YZ_D2_STRIDE_PTR 0x38 -#define REDMULE_REG_X_ROWS_OFFS_PTR 0x3C -#define REDMULE_REG_X_BUFFER_SLOTS_PTR 0x40 -#define REDMULE_REG_X_TOT_LEN_PTR 0x44 -#define REDMULE_REG_OP_SELECTION 0x48 - -// OPs definition -#define MATMUL 0x0 -#define GEMM 0x1 -#define ADDMAX 0x2 -#define ADDMIN 0x3 -#define MULMAX 0x4 -#define MULMIN 0x5 -#define MAXMIN 0x6 -#define MINMAX 0x7 - -// GEMM formats -#define Float8 0x0 -#define Float16 0x1 -#define Float8Alt 0x2 -#define Float16Alt 0x3 - -#define RNE 0x0 -#define RTZ 0x1 -#define OP_FMADD 0x0 -#define OP_ADD 0x2 -#define OP_MUL 0x3 -#define OP_MINMAX 0x7 - -// FP Formats encoding -#define FP16 0x2 -#define FP8 0x3 -#define FP16ALT 0x4 -#define FP8ALT 0x5 - -/* DMA Archi */ -#define DMA_TX 0 -#define DMA_RX 1 -#define DMA_INC 1 - -#define PLP_DMA_TYPE_BIT 0x00000011 -#define PLP_DMA_INCR_BIT 0x00000012 -#define PLP_DMA_2D_BIT 0x00000013 -#define PLP_DMA_ELE_BIT 0x00000014 -#define PLP_DMA_ILE_BIT 0x00000015 -#define PLP_DMA_BLE_BIT 0x00000016 -#define PLP_DMA_2D_TCDM_BIT 0x0000017 - -#endif diff --git a/carfield/redmule/hal_redmule.h b/carfield/redmule/hal_redmule.h deleted file mode 100644 index c5a0c32..0000000 --- a/carfield/redmule/hal_redmule.h +++ /dev/null @@ -1,527 +0,0 @@ -/* - * Copyright (C) 2022-2023 ETH Zurich and University of Bologna - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * SPDX-License-Identifier: Apache-2.0 - * - * Author: Yvan Tortorella - * - * RedMulE Hardware Abstraction Layer (HAL) - */ - -#ifndef __HAL_REDMULE_H__ -#define __HAL_REDMULE_H__ - -#include -#include "inc/x_input.h" -#include "inc/w_input.h" -#include "inc/y_input.h" -#include "inc/z_output.h" -#include "inc/golden.h" -#include "inc/tensor_dim.h" - -/* - * - * For control, generic configuration register layout, - * and job-dependent register map, look at redmule_archi.h - * - */ - -// For all the following functions we use __builtin_pulp_OffsetedWrite and __builtin_pulp_OffsetedRead -// instead of classic load/store because otherwise the compiler is not able to correctly factorize -// the HWPE base in case several accesses are done, ending up with twice more code - -#define HWPE_WRITE(value, offset) *(int *)(ARCHI_CLUST_HWPE_BASE + offset) = value -#define HWPE_READ(offset) *(int *)(ARCHI_CLUST_HWPE_BASE + offset) - -static inline void redmule_x_add_set (unsigned int value) { - HWPE_WRITE(value, REDMULE_REG_OFFS + REDMULE_REG_X_PTR); -} - -static inline void redmule_w_add_set (unsigned int value) { - HWPE_WRITE(value, REDMULE_REG_OFFS + REDMULE_REG_W_PTR); -} - -static inline void redmule_y_add_set (unsigned int value) { - HWPE_WRITE(value, REDMULE_REG_OFFS + REDMULE_REG_Y_PTR); -} - -static inline void redmule_z_add_set (unsigned int value) { - HWPE_WRITE(value, REDMULE_REG_OFFS + REDMULE_REG_Z_PTR); -} - -// static inline void redmule_mcfg_set (uint32_t mcfg0, uint32_t mcfg1) { -// HWPE_WRITE(mcfg0, REDMULE_REG_OFFS + REDMULE_MCFG0_PTR); -// HWPE_WRITE(mcfg1, REDMULE_REG_OFFS + REDMULE_MCFG1_PTR); -// } -// -// static inline void redmule_arith_set (uint32_t arith) { -// HWPE_WRITE(arith, REDMULE_REG_OFFS + REDMULE_ARITH_PTR); -// } - -static inline void hwpe_trigger_job() { - HWPE_WRITE(0, REDMULE_TRIGGER); -} - -static inline int hwpe_acquire_job() { - return HWPE_READ(REDMULE_ACQUIRE); -} - -static inline unsigned int hwpe_get_status() { - return HWPE_READ(REDMULE_STATUS); -} - -static inline void hwpe_soft_clear() { - HWPE_WRITE(1, REDMULE_SOFT_CLEAR); -} - -static inline void hwpe_cg_enable() { - *(volatile int*) (ARCHI_CLUST_CTRL_BASE + CLUST_CTRL_HWPE_EN) |= CLUST_CTRL_HWPE_EN_MASK; -} - -static inline void hwpe_cg_disable() { - *(volatile int*) (ARCHI_CLUST_CTRL_BASE + CLUST_CTRL_HWPE_EN) &= ~CLUST_CTRL_HWPE_EN_MASK; -} - -static inline void redmule_evt_wait() { - do { - eu_evt_maskWaitAndClr (1 << ARCHI_CL_HWPE_EVT0); - } while((*(int volatile *)(ARCHI_CLUST_HWPE_BASE + REDMULE_STATUS)) != 0); -} - -/* DMA APIs */ -static inline int mchan_alloc(){ - return *(volatile int*) DMA_COMMAND_QUEUE; -} - -static inline void mchan_transfer(unsigned int len, - unsigned int ext_addr, - unsigned int tcdm_addr) { - - *(volatile int*) DMA_COMMAND_QUEUE = len | - (DMA_RX << PLP_DMA_TYPE_BIT) | - (DMA_INC << PLP_DMA_INCR_BIT) | - (0 << PLP_DMA_2D_BIT) | - (1 << PLP_DMA_ELE_BIT) | - (1 << PLP_DMA_ILE_BIT) | - (0 << PLP_DMA_BLE_BIT) | - (0 << PLP_DMA_2D_TCDM_BIT); - *(volatile int*) DMA_COMMAND_QUEUE = tcdm_addr; - *(volatile int*) DMA_COMMAND_QUEUE = ext_addr; -} - -static inline void mchan_barrier(int id) { - while(((*(volatile int*)(DMA_STATUS_REGISTER)) >> id ) & 0x1 ) { - eu_evt_maskWaitAndClr(1 << FC_DMA_EVENT); - } -} - -static inline void mchan_free(int id) { - *(volatile int*) DMA_STATUS_REGISTER = 0x1 << id; -} - -// void redmule_cfg (unsigned int x, unsigned int w, unsigned int z, -// uint16_t m_size, uint16_t n_size, uint16_t k_size, -// uint8_t gemm_op, uint8_t gemm_fmt){ -// -// uint32_t mcfg_reg0 = 0; -// uint32_t mcfg_reg1 = 0; -// uint32_t arith_reg = 0; -// -// mcfg_reg0 = (k_size << 16) | -// (m_size << 0); -// mcfg_reg1 = n_size << 0; -// -// arith_reg = (gemm_op << 10) | -// (gemm_fmt << 7); -// -// redmule_x_add_set ((unsigned int) x); -// redmule_w_add_set ((unsigned int) w); -// redmule_z_add_set ((unsigned int) z); -// redmule_mcfg_set ((unsigned int) mcfg_reg0, -// (unsigned int) mcfg_reg1); -// redmule_arith_set ((unsigned int) arith_reg); -// -// } - -void redmule_cfg (uint16_t m_size, uint16_t n_size, uint16_t k_size, uint8_t gemm_ops){ - uint32_t x_iters = 0; - uint32_t w_iters = 0; - uint32_t leftovers = 0; - uint32_t left_params = 0; - uint32_t x_d1_stride = 0; - uint32_t x_rows_offs = 0; - uint32_t w_tot_len = 0; - uint32_t w_d1_len = 0; - uint32_t w_d0_stride = 0; - uint32_t yz_tot_len = 0; - uint32_t yz_d0_stride = 0; - uint32_t yz_d2_stride = 0; - uint32_t tot_x_read = 0; - uint32_t x_buffer_slots = 0; - uint32_t op_selection = 0; - uint16_t tot_stores = 0; - uint16_t w_rows = n_size; - uint16_t depth = DATA_WIDTH/(ARRAY_HEIGHT*FPFORMAT); - uint8_t tile = ARRAY_HEIGHT*(PIPE_REGS + 1); - _Bool x_rows_sub = 0; - _Bool x_cols_sub = 0; - _Bool w_cols_sub = 0; - uint16_t x_rows_iter, - x_rows_iter_tmp, - w_rows_iter, - w_rows_iter_tmp; - uint16_t x_cols_iter, - x_cols_iter_tmp, - w_cols_iter, - w_cols_iter_tmp; - uint8_t x_rows_lftovr, - x_cols_lftovr, - w_rows_lftovr, - w_cols_lftovr, - slots; - - // Calculating the number of iterations alng the two dimensions of the X matrix - x_rows_iter_tmp = m_size/ARRAY_WIDTH; - x_cols_iter_tmp = n_size/tile; - - // Calculating the number of iterations alng the two dimensions of the W matrix - w_rows_iter_tmp = w_rows; - w_cols_iter_tmp = k_size/tile; - - // Calculating the residuals along the input dimensions - x_rows_lftovr = m_size - (x_rows_iter_tmp*ARRAY_WIDTH); - x_cols_lftovr = n_size - (x_cols_iter_tmp*tile); - - // Calculating the residuals along the weight dimensions - w_rows_lftovr = n_size - (ARRAY_HEIGHT*(w_rows/ARRAY_HEIGHT)); - w_cols_lftovr = k_size - (w_cols_iter_tmp*tile); - - if (w_cols_lftovr != 0) - w_cols_iter = w_cols_iter_tmp + 1; - else - w_cols_iter = w_cols_iter_tmp; - - if (w_rows_lftovr != 0) - w_rows_iter = w_rows_iter_tmp + ARRAY_HEIGHT - w_rows_lftovr; - else - w_rows_iter = w_rows_iter_tmp; - - if (x_cols_lftovr != 0) - x_cols_iter = x_cols_iter_tmp + 1; - else - x_cols_iter = x_cols_iter_tmp; - - if (x_rows_lftovr != 0) - x_rows_iter = x_rows_iter_tmp + 1; - else - x_rows_iter = x_rows_iter_tmp; - - if (x_cols_lftovr%depth != 0) - x_buffer_slots = x_cols_lftovr/depth + 1; - else - x_buffer_slots = x_cols_lftovr/depth; - - // Calculating the number of total stores - tot_stores = x_rows_iter*w_cols_iter; - - // Determining if input matrixes are sub-matrixes - if (m_size < ARRAY_WIDTH) - x_rows_sub = 1; - if (n_size < ARRAY_HEIGHT) - x_cols_sub = 1; - if (k_size < tile) - w_cols_sub = 1; - - // Operation selection - switch (gemm_ops) { - case MATMUL: - op_selection |= (RNE << 29 | RNE << 26 | OP_FMADD << 22 | OP_MINMAX << 18 | SRC_FMT << 15 | DST_FMT << 12) | 0; - break; - - case GEMM: - op_selection |= (RNE << 29 | RNE << 26 | OP_FMADD << 22 | OP_MINMAX << 18 | SRC_FMT << 15 | DST_FMT << 12) | 1; - break; - - case ADDMAX: - op_selection |= (RNE << 29 | RTZ << 26 | OP_ADD << 22 | OP_MINMAX << 18 | SRC_FMT << 15 | DST_FMT << 12) | 1; - break; - - case ADDMIN: - op_selection |= (RNE << 29 | RNE << 26 | OP_ADD << 22 | OP_MINMAX << 18 | SRC_FMT << 15 | DST_FMT << 12) | 1; - break; - - case MULMAX: - op_selection |= (RNE << 29 | RTZ << 26 | OP_MUL << 22 | OP_MINMAX << 18 | SRC_FMT << 15 | DST_FMT << 12) | 1; - break; - - case MULMIN: - op_selection |= (RNE << 29 | RNE << 26 | OP_MUL << 22 | OP_MINMAX << 18 | SRC_FMT << 15 | DST_FMT << 12) | 1; - break; - - case MAXMIN: - op_selection |= (RTZ << 29 | RNE << 26 | OP_MINMAX << 22 | OP_MINMAX << 18 | SRC_FMT << 15 | DST_FMT << 12) | 1; - break; - - case MINMAX: - op_selection |= (RNE << 29 | RTZ << 26 | OP_MINMAX << 22 | OP_MINMAX << 18 | SRC_FMT << 15 | DST_FMT << 12) | 1; - break; - } - - // Storing iterations and residuals in registers - x_iters |= x_rows_iter << 16 | x_cols_iter << 0; - w_iters |= w_rows_iter << 16 | w_cols_iter << 0; - leftovers |= x_rows_lftovr << 24 | x_cols_lftovr << 16 | w_rows_lftovr << 8 | w_cols_lftovr << 0; - left_params |= tot_stores << 16 | x_rows_sub << 15 | x_cols_sub << 14 | w_cols_sub << 13; - x_d1_stride = ((4*FPFORMAT)/ADDR_WIDTH)*(((DATA_WIDTH/FPFORMAT)*x_cols_iter_tmp) + x_cols_lftovr); - x_rows_offs = ARRAY_WIDTH*x_d1_stride; - w_tot_len = w_rows_iter*w_cols_iter*x_rows_iter; - w_d0_stride = ((4*FPFORMAT)/ADDR_WIDTH)*(((DATA_WIDTH/FPFORMAT)*w_cols_iter_tmp) + w_cols_lftovr); - yz_tot_len = ARRAY_WIDTH*x_rows_iter*w_cols_iter; - yz_d0_stride = w_d0_stride; - yz_d2_stride = ARRAY_WIDTH*w_d0_stride; - tot_x_read = x_rows_iter*x_cols_iter*w_cols_iter; - - // Writing the computations in configuration register - HWPE_WRITE(x_iters , REDMULE_REG_OFFS + REDMULE_REG_X_ITER_PTR ); - HWPE_WRITE(w_iters , REDMULE_REG_OFFS + REDMULE_REG_W_ITER_PTR ); - HWPE_WRITE(leftovers , REDMULE_REG_OFFS + REDMULE_REG_LEFTOVERS_PTR ); - HWPE_WRITE(left_params , REDMULE_REG_OFFS + REDMULE_REG_LEFT_PARAMS_PTR ); - HWPE_WRITE(x_d1_stride , REDMULE_REG_OFFS + REDMULE_REG_X_D1_STRIDE_PTR ); - HWPE_WRITE(x_rows_offs , REDMULE_REG_OFFS + REDMULE_REG_X_ROWS_OFFS_PTR ); - HWPE_WRITE(tot_x_read , REDMULE_REG_OFFS + REDMULE_REG_TOT_X_READ_PTR ); - HWPE_WRITE(x_buffer_slots, REDMULE_REG_OFFS + REDMULE_REG_X_BUFFER_SLOTS_PTR ); - HWPE_WRITE(w_tot_len , REDMULE_REG_OFFS + REDMULE_REG_W_TOT_LEN_PTR ); - HWPE_WRITE(w_d0_stride , REDMULE_REG_OFFS + REDMULE_REG_W_D0_STRIDE_PTR ); - HWPE_WRITE(yz_tot_len , REDMULE_REG_OFFS + REDMULE_REG_YZ_TOT_LEN_PTR ); - HWPE_WRITE(yz_d0_stride , REDMULE_REG_OFFS + REDMULE_REG_YZ_D0_STRIDE_PTR ); - HWPE_WRITE(yz_d2_stride , REDMULE_REG_OFFS + REDMULE_REG_YZ_D2_STRIDE_PTR ); - HWPE_WRITE(op_selection , REDMULE_REG_OFFS + REDMULE_REG_OP_SELECTION ); -} - -void generate_test_data16(int x_start_addr, - int w_start_addr, - int y_start_addr, - int m_size, - int n_size, - int k_size) { - - int x_addr = x_start_addr; - int w_addr = w_start_addr; - int y_addr = y_start_addr; - int x_end_addr = x_start_addr + (2*m_size*n_size); - int w_end_addr = w_start_addr + (2*n_size*k_size); - int y_end_addr = y_start_addr + (2*m_size*k_size); - - // Generating input stimuli from golden model - for (x_addr = x_start_addr; x_addr < x_end_addr; x_addr += 2) { - int x = x_addr - x_start_addr; - *(uint32_t *)(x_addr) = x_inp[x/2]; - } - - // Generating Weight stimuli from golden model - for (w_addr = w_start_addr; w_addr < w_end_addr; w_addr += 2) { - int w = w_addr - w_start_addr; - *(uint32_t *)(w_addr) = w_inp[w/2]; - } - - for (y_addr = y_start_addr; y_addr < y_end_addr; y_addr += 2) { - int y = y_addr - y_start_addr; - *(uint32_t *)(y_addr) = y_inp[y/2]; - } -} - -int redmule_compare16 (int z_start_addr, int m_size, int k_size) { - int err = 0; - int z_end_addr = z_start_addr + 2*m_size*k_size; - uint16_t z_computed; - uint16_t diff, diff_1, diff_2; - - for (int z_addr = z_start_addr; z_addr < z_end_addr; z_addr += 2) { - int z = z_addr - z_start_addr; - z_computed = *(uint32_t *)(z_addr); - - if ( z_computed != z_oup[z/2] ) { - diff_1 = z_computed - z_oup[z/2]; - if (diff_1 > 3) { - diff_2 = z_oup[z/2] - z_computed; - if (diff_2 > 3) { - err++; - } - } - } - } - - return err; - -} - -int redmule16_compare_int(uint32_t *actual_z, uint32_t *golden_z, int len) { - #define ERR 0x0011 - uint32_t actual_word = 0; - uint16_t actual_MSHWord, actual_LSHWord; - uint32_t golden_word = 0; - uint16_t golden_MSHWord, golden_LSHWord; - uint32_t actual = 0; - uint32_t golden = 0; - - int errors = 0; - int error; - - for (int i=0; i golden_LSHWord) ? (actual_LSHWord - golden_LSHWord) : 0; - diff = (actual_LSHWord < golden_LSHWord) ? (golden_LSHWord - actual_LSHWord) : 0; - - if (diff > ERR) { - error = 1; - #ifdef VERBOSE - tfp_printf ("diff: 0x%08x\n", diff); - tfp_printf ("LSW: Error!\n"); - #endif - } - - // Checking Most Significant Half-Word - actual_MSHWord = (uint16_t)((actual_word >> 16) & 0x0000FFFF); - golden_MSHWord = (uint16_t)((golden_word >> 16) & 0x0000FFFF); - - diff = (actual_MSHWord > golden_MSHWord) ? (actual_MSHWord - golden_MSHWord) : 0; - diff = (actual_MSHWord < golden_MSHWord) ? (golden_MSHWord - actual_MSHWord) : 0; - - if (diff > ERR) { - error = 1; - #ifdef VERBOSE - tfp_printf ("diff: 0x%08x\n", diff); - tfp_printf ("MSW: Error!\n"); - #endif - } - - errors += error; - - #ifdef DEBUG - tfp_printf(" Golden: 0x%08x; Actual: 0x%08x,\n", golden_word, actual_word); - #endif - - #ifdef VERBOSE - if(error) { - if(errors==1) tfp_printf(" golden <- actual @ address @ index\n"); - tfp_printf(" 0x%08x <- 0x%08x @ 0x%08x @ 0x%08x\n", golden_word, actual_word, (actual_z+i), i*4); - } - #endif - } - return errors; -} - -int redmule8_compare_int(uint32_t *actual_z, uint32_t *golden_z, int len) { - #define ERR 0x0011 - uint32_t actual_word = 0; - uint8_t actual_Byte0, - actual_Byte1, - actual_Byte2, - actual_Byte3; - uint32_t golden_word = 0; - uint8_t golden_Byte0, - golden_Byte1, - golden_Byte2, - golden_Byte3; - uint32_t actual = 0; - uint32_t golden = 0; - - int errors = 0; - int error; - - for (int i=0; i golden_Byte0) ? (actual_Byte0 - golden_Byte0) : 0; - diff = (actual_Byte0 < golden_Byte0) ? (golden_Byte0 - actual_Byte0) : 0; - - if (diff > ERR) { - error = 1; - tfp_printf ("diff: 0x%08x\n", diff); - tfp_printf ("Byte0: Error!\n"); - } - - // Cheching Byte1 - actual_Byte1 = (uint8_t)( (actual_word >> 8 ) & 0x000000FF); - golden_Byte1 = (uint8_t)( (golden_word >> 8 ) & 0x000000FF); - - diff = (actual_Byte1 > golden_Byte1) ? (actual_Byte1 - golden_Byte1) : 0; - diff = (actual_Byte1 < golden_Byte1) ? (golden_Byte1 - actual_Byte1) : 0; - - if (diff > ERR) { - error = 1; - tfp_printf ("diff: 0x%08x\n", diff); - tfp_printf ("Byte1: Error!\n"); - } - - // Cheching Byte2 - actual_Byte2 = (uint8_t)( (actual_word >> 16 ) & 0x000000FF); - golden_Byte2 = (uint8_t)( (golden_word >> 16 ) & 0x000000FF); - - diff = (actual_Byte2 > golden_Byte2) ? (actual_Byte2 - golden_Byte2) : 0; - diff = (actual_Byte2 < golden_Byte2) ? (golden_Byte2 - actual_Byte2) : 0; - - if (diff > ERR) { - error = 1; - tfp_printf ("diff: 0x%08x\n", diff); - tfp_printf ("Byte2: Error!\n"); - } - - // Cheching Byte3 - actual_Byte3 = (uint8_t)( (actual_word >> 24 ) & 0x000000FF); - golden_Byte3 = (uint8_t)( (golden_word >> 24 ) & 0x000000FF); - - diff = (actual_Byte3 > golden_Byte3) ? (actual_Byte3 - golden_Byte3) : 0; - diff = (actual_Byte3 < golden_Byte3) ? (golden_Byte3 - actual_Byte3) : 0; - - if (diff > ERR) { - error = 1; - tfp_printf ("diff: 0x%08x\n", diff); - tfp_printf ("Byte3: Error!\n"); - } - - errors += error; - - #ifdef DEBUG - tfp_printf(" Golden: 0x%08x; Actual: 0x%08x,\n", golden_word, actual_word); - #endif - - #ifdef VERBOSE - if(error) { - if(errors==1) tfp_printf(" golden <- actual @ address @ index\n"); - tfp_printf(" 0x%08x <- 0x%08x @ 0x%08x @ 0x%08x\n", golden_word, actual_word, (actual_z+i), i*4); - } - #endif - } - return errors; -} - -#endif diff --git a/carfield/redmule/inc/golden.h b/carfield/redmule/inc/golden.h deleted file mode 100644 index f664e47..0000000 --- a/carfield/redmule/inc/golden.h +++ /dev/null @@ -1,387 +0,0 @@ - /* Header file generated by RedMulE Golden Model */ -uint32_t golden [384] = { -0x48974845, -0x48384608, -0x487b4855, -0x48804869, -0x48b046d1, -0x483f48db, -0x485f48c9, -0x483a4881, -0x472c484b, -0x492b4762, -0x48fd4822, -0x492e488e, -0x484f483e, -0x46d749e8, -0x489d484b, -0x47e9490b, -0x47d2484f, -0x474744be, -0x46c047c7, -0x48af4727, -0x482d46c5, -0x482e483d, -0x479f4897, -0x4749488b, -0x46a8489a, -0x488b46f2, -0x47e84891, -0x483d4872, -0x46fd4716, -0x46a049b5, -0x47a446e7, -0x476748a1, -0x49354939, -0x48c14703, -0x48bd4863, -0x48cf4913, -0x48b848b6, -0x49204946, -0x48e1495e, -0x48b24938, -0x4882493a, -0x49d5483b, -0x49724911, -0x49df496b, -0x488848f2, -0x48214a46, -0x490c48c1, -0x48a349b2, -0x47b0463a, -0x476244cb, -0x46b94765, -0x4814466a, -0x47964631, -0x474b4666, -0x47044798, -0x47614838, -0x459047d3, -0x48a245ea, -0x484447f1, -0x4776484b, -0x46d847d6, -0x44d348f3, -0x478d46fa, -0x466e481e, -0x481e4827, -0x479445a2, -0x48064727, -0x48d5475d, -0x48284708, -0x480d4862, -0x48324895, -0x47f148bd, -0x46a7482a, -0x492d47b1, -0x4884484d, -0x485f48dc, -0x480c476d, -0x46d348e9, -0x48844728, -0x480e48a0, -0x48134862, -0x485a4675, -0x473847e8, -0x48234836, -0x482146e7, -0x47b34822, -0x48554846, -0x47174863, -0x47c14872, -0x488e46d5, -0x485f47e2, -0x48b8487c, -0x4788481e, -0x467748bd, -0x47f846c9, -0x47fc48fe, -0x47b247a0, -0x467e4588, -0x46c74662, -0x481246e8, -0x474e4536, -0x468f46c0, -0x4679481f, -0x46e246a1, -0x45604809, -0x47eb4630, -0x475746b5, -0x477f4848, -0x46d846a6, -0x459a4870, -0x46784670, -0x468c47d2, -0x48c44762, -0x479146e3, -0x486d46b1, -0x486747d0, -0x47f6468d, -0x475648a5, -0x48544857, -0x48384866, -0x46ec484d, -0x48f647d2, -0x4879484a, -0x483c4848, -0x4806471d, -0x473048fa, -0x47b84768, -0x46f94865, -0x491848a8, -0x486746ca, -0x48624800, -0x491048d3, -0x4849474e, -0x486b48eb, -0x48c54966, -0x483048f4, -0x477848f9, -0x499e481e, -0x48f148cf, -0x49234982, -0x47cf487c, -0x464949ea, -0x495e4773, -0x483f48b2, -0x497548a7, -0x481e4616, -0x4866481f, -0x486448b6, -0x487347dc, -0x487f485c, -0x491f4938, -0x48b6490d, -0x48a148f8, -0x492d4859, -0x4915489c, -0x48874899, -0x4859486c, -0x471e49ca, -0x49184867, -0x482748d3, -0x4998488b, -0x481d4704, -0x488048b8, -0x49444876, -0x48f2470c, -0x489b48b9, -0x48e54956, -0x48a548d6, -0x485648dc, -0x49ab484e, -0x490e48e0, -0x494548dd, -0x48dd488b, -0x47ea4a32, -0x49114835, -0x48194965, -0x481e460e, -0x4673452c, -0x4717475c, -0x46d046f6, -0x46bc4696, -0x481e4726, -0x46ea4763, -0x475846fe, -0x4627478b, -0x483f4704, -0x47b146ad, -0x48164792, -0x468446f2, -0x45a84827, -0x47a4472f, -0x462b4797, -0x48ab483f, -0x4863468f, -0x4766485a, -0x48cb481d, -0x490347dc, -0x483048fc, -0x483e48cc, -0x486448ab, -0x47634966, -0x499d4794, -0x488b488e, -0x496048dc, -0x484c4854, -0x474c499c, -0x48bc4826, -0x48834949, -0x4905489d, -0x481e4718, -0x48f448e3, -0x490448c1, -0x48b347e8, -0x48d44892, -0x489448ff, -0x488648d5, -0x480348fa, -0x492e47d2, -0x48b24870, -0x492b48e5, -0x4785487b, -0x471d49e3, -0x48bf4837, -0x48c4489b, -0x4871475c, -0x4811464a, -0x471c47af, -0x48174817, -0x484e463b, -0x464f477f, -0x487c4704, -0x472547a3, -0x462a4853, -0x4860465a, -0x48804736, -0x482b47e1, -0x46c04811, -0x475d48dc, -0x48064668, -0x46f44893, -0x49594858, -0x487b463d, -0x484e480f, -0x48a648c0, -0x48944847, -0x484a48a0, -0x48f4491e, -0x48b548fc, -0x47d248ce, -0x497f47db, -0x49394955, -0x48ce48a7, -0x48844890, -0x476349d6, -0x4922486e, -0x48c348f4, -0x491c47ec, -0x47834698, -0x47544715, -0x47524745, -0x4832472f, -0x48094817, -0x48c347f8, -0x480047e6, -0x473048b6, -0x48cb480a, -0x488e479e, -0x488e47c2, -0x47ee472f, -0x4744489d, -0x48514755, -0x47d34846, -0x48a04838, -0x47624634, -0x48064786, -0x482d47e3, -0x486c4726, -0x480347b7, -0x481448ac, -0x483948e0, -0x47504827, -0x48c546f2, -0x4886483f, -0x485648ad, -0x47a947e8, -0x47434937, -0x481f46d0, -0x4804484c, -0x481f47fd, -0x4813456d, -0x4807474d, -0x480e4688, -0x481046e8, -0x4799469f, -0x478f4853, -0x482447f2, -0x471f47d0, -0x485f46da, -0x481c4813, -0x4863482e, -0x480b4786, -0x46b848c9, -0x46e2475a, -0x46c54852, -0x480245af, -0x46c24466, -0x4743465d, -0x47ba46b7, -0x46c34636, -0x47844677, -0x47c2485a, -0x46ac46dc, -0x460e47de, -0x4834465f, -0x476947f4, -0x481046fc, -0x45ea45fd, -0x45b548d0, -0x47834704, -0x46c44830, -0x47c74759, -0x45b0453d, -0x47024741, -0x47934736, -0x47ba461b, -0x46dd470b, -0x470b4657, -0x4710470d, -0x468f486c, -0x46ba45c3, -0x483b479d, -0x477446c9, -0x46a746a9, -0x46064833, -0x46a94690, -0x46a746f5, -0x48bb47ac, -0x4803452c, -0x4824470f, -0x48cb47d5, -0x484a4707, -0x47974832, -0x482c4851, -0x4877487a, -0x465d4891, -0x48ce47f4, -0x48994898, -0x486a484e, -0x47f047ac, -0x4611493e, -0x489e47e2, -0x46af488c, -0x48364665, -0x46b645e4, -0x46b946a1, -0x46dd46c8, -0x474b4658, -0x4777467b, -0x47984769, -0x475e4785, -0x4656472a, -0x488145fb, -0x472d46fc, -0x47a3476e, -0x46ca465d, -0x45004855, -0x479a464f, -0x473846c3, -0x486c481e, -0x48014659, -0x477a4756, -0x487b47d5, -0x48084706, -0x4838484f, -0x48634870, -0x480648d3, -0x47714865, -0x494c46be, -0x484c4915, -0x48624900, -0x46e8481a, -0x46a04974, -0x483d4775, -0x480e487c, -}; \ No newline at end of file diff --git a/carfield/redmule/inc/tensor_dim.h b/carfield/redmule/inc/tensor_dim.h deleted file mode 100644 index 21bd0d8..0000000 --- a/carfield/redmule/inc/tensor_dim.h +++ /dev/null @@ -1,13 +0,0 @@ - /* Header file generated by RedMulE Golden Model */ -#ifndef __TENSOR_DIM__ -#define __TENSOR_DIM__ - -#define M_SIZE 24 -#define N_SIZE 32 -#define K_SIZE 32 -#define SRC_FMT FP16 -#define DST_FMT FP16 -#define FPFORMAT 16 -uint8_t gemm_ops = GEMM; - -#endif diff --git a/carfield/redmule/inc/w_2D.h b/carfield/redmule/inc/w_2D.h deleted file mode 100644 index 9409c64..0000000 --- a/carfield/redmule/inc/w_2D.h +++ /dev/null @@ -1,35 +0,0 @@ - /* Header file generated by RedMulE Golden Model */ -uint16_t w_inp_2D [32][32] = { -0x311a, 0x39e0, 0x387d, 0x3a4a, 0x386f, 0x3ada, 0x392f, 0x3854, 0x3014, 0x2fd2, 0x31c9, 0x2fca, 0x2e55, 0x3bc8, 0x396d, 0x3b1d, 0x39f6, 0x333a, 0x3908, 0x3628, 0x3bab, 0x3b8b, 0x3b4a, 0x322d, 0x3925, 0x317a, 0x3725, 0x31c2, 0x3066, 0x38f3, 0x3a17, 0x3476, -0x3bda, 0x3196, 0x3922, 0x3680, 0x396a, 0x3021, 0x3761, 0x374d, 0x2fc2, 0x3967, 0x3b94, 0x33b5, 0x3797, 0x34d6, 0x3655, 0x2176, 0x39bc, 0x3999, 0x3658, 0x3904, 0x3759, 0x2ade, 0x3a5a, 0x3b78, 0x36c7, 0x2d01, 0x3b58, 0x2d9a, 0x373d, 0x3952, 0x38e8, 0x3887, -0x37b6, 0x3a88, 0x2f8a, 0x2d79, 0x3413, 0x3421, 0x3976, 0x32b2, 0x3446, 0x2d99, 0x3a56, 0x3322, 0x3b49, 0x39fa, 0x3acd, 0x3af6, 0x304c, 0x3abb, 0x3a83, 0x38b2, 0x3ab9, 0x363e, 0x389f, 0x31bb, 0x38e1, 0x3bc4, 0x3b9b, 0x2984, 0x3a43, 0x3b2f, 0x35d6, 0x3bda, -0x2df3, 0x3bf8, 0x2acc, 0x378b, 0x3555, 0x2e59, 0x31d4, 0x34ec, 0x3a46, 0x3bab, 0x3214, 0x3161, 0x3470, 0x3a03, 0x368e, 0x31ad, 0x27cb, 0x2ecb, 0x3422, 0x39f7, 0x3644, 0x3a77, 0x313f, 0x34f2, 0x39b3, 0x3bf2, 0x379a, 0x3456, 0x35fe, 0x3ae7, 0x3964, 0x385f, -0x3b16, 0x3999, 0x3833, 0x2eda, 0x3afd, 0x3a4a, 0x3ba2, 0x2bd4, 0x3b38, 0x31a2, 0x32dd, 0x353c, 0x366f, 0x375e, 0x3821, 0x367a, 0x3b44, 0x39e6, 0x3787, 0x339e, 0x39d7, 0x38c6, 0x37d5, 0x342f, 0x3984, 0x319b, 0x33b5, 0x35ab, 0x398a, 0x374e, 0x36b6, 0x3b21, -0x3bbb, 0x2ab3, 0x2ad5, 0x33bc, 0x2bef, 0x3780, 0x3738, 0x3a0b, 0x3b09, 0x30ca, 0x384e, 0x3ab3, 0x39bd, 0x3453, 0x3a6d, 0x3957, 0x2c10, 0x30e9, 0x35d4, 0x3aef, 0x3be9, 0x39ad, 0x3a74, 0x3af9, 0x3739, 0x2d4d, 0x39fe, 0x3b72, 0x2c57, 0x398c, 0x381f, 0x3930, -0x3820, 0x321b, 0x3964, 0x2964, 0x33a0, 0x2d00, 0x2490, 0x336b, 0x3465, 0x3b2e, 0x3aa0, 0x371f, 0x300e, 0x3a09, 0x3bf1, 0x25cc, 0x3b6f, 0x3384, 0x3a88, 0x3acb, 0x3814, 0x36d0, 0x3081, 0x3a2c, 0x3353, 0x39cb, 0x31ed, 0x3af6, 0x3721, 0x36c7, 0x2ce2, 0x390d, -0x3698, 0x3ab2, 0x3b3e, 0x2eb4, 0x3998, 0x39e3, 0x3a77, 0x3632, 0x2c12, 0x3bd5, 0x3ba3, 0x3bba, 0x323c, 0x367b, 0x3557, 0x39c8, 0x37db, 0x3b45, 0x3b6e, 0x3931, 0x3121, 0x3a8d, 0x3a55, 0x3b9b, 0x358a, 0x3925, 0x3491, 0x3912, 0x3b6b, 0x3584, 0x32df, 0x3120, -0x32b2, 0x3b0a, 0x2cad, 0x3465, 0x3ad3, 0x3bcd, 0x363b, 0x3afe, 0x354b, 0x3374, 0x39af, 0x3b7f, 0x308c, 0x2e72, 0x3380, 0x3b70, 0x3902, 0x38d8, 0x39f3, 0x3a4b, 0x3853, 0x397b, 0x2ebe, 0x387f, 0x2845, 0x37e2, 0x360f, 0x370b, 0x3acb, 0x35d4, 0x36e6, 0x3262, -0x2e88, 0x3a54, 0x2ee3, 0x3575, 0x3afe, 0x2aee, 0x39a0, 0x3aae, 0x3693, 0x3432, 0x3834, 0x3b9b, 0x3bcb, 0x2e3a, 0x356d, 0x374e, 0x3924, 0x383c, 0x311e, 0x3ac5, 0x352d, 0x311e, 0x38ca, 0x34d4, 0x36ca, 0x34ed, 0x3a13, 0x33eb, 0x3639, 0x3828, 0x3b3c, 0x3939, -0x3837, 0x3521, 0x2cb5, 0x3629, 0x3924, 0x384c, 0x366a, 0x3bbf, 0x2e9e, 0x3ba8, 0x33ad, 0x38c8, 0x3934, 0x3907, 0x249a, 0x3690, 0x3a09, 0x3215, 0x3898, 0x325d, 0x37d5, 0x3195, 0x361c, 0x3ae4, 0x351f, 0x3452, 0x3bc0, 0x375c, 0x39bf, 0x317a, 0x3aae, 0x283a, -0x3476, 0x3b92, 0x3472, 0x383e, 0x280f, 0x39d6, 0x2fd1, 0x31f4, 0x2ffb, 0x3b97, 0x3692, 0x36c0, 0x3989, 0x33cf, 0x3ba6, 0x3239, 0x35d7, 0x33ab, 0x31eb, 0x3b47, 0x389b, 0x3b88, 0x3580, 0x354c, 0x3802, 0x3b9a, 0x3b94, 0x2a92, 0x2db1, 0x38bd, 0x2dfb, 0x3900, -0x344f, 0x3739, 0x27a5, 0x3b2e, 0x342b, 0x34bb, 0x30c8, 0x3ae8, 0x3b26, 0x3982, 0x38c0, 0x3408, 0x38c8, 0x36ef, 0x3bf0, 0x3acf, 0x3a3c, 0x3825, 0x31a5, 0x3ada, 0x3b5b, 0x37db, 0x3a01, 0x3663, 0x3a7d, 0x327b, 0x3a1f, 0x3862, 0x38af, 0x3204, 0x372e, 0x3b19, -0x3708, 0x3622, 0x2e62, 0x39ab, 0x2d4d, 0x31b4, 0x3552, 0x3bbc, 0x36f2, 0x36eb, 0x38ef, 0x3755, 0x3bbe, 0x2c17, 0x3815, 0x2f53, 0x363f, 0x38c1, 0x3246, 0x386b, 0x34de, 0x34e4, 0x3baa, 0x349e, 0x32ce, 0x3a68, 0x373f, 0x2cce, 0x3b36, 0x28ba, 0x3b50, 0x3232, -0x1f34, 0x3928, 0x35cd, 0x3b38, 0x30ce, 0x35a1, 0x3a06, 0x3a32, 0x3a53, 0x3489, 0x3241, 0x372f, 0x390c, 0x3a1b, 0x378a, 0x3713, 0x3769, 0x37a8, 0x3418, 0x3ad4, 0x3a4e, 0x3bf7, 0x37a5, 0x34dc, 0x39b2, 0x351b, 0x3372, 0x349f, 0x2f50, 0x3ab1, 0x3795, 0x2db7, -0x3864, 0x3157, 0x3900, 0x323e, 0x389e, 0x3880, 0x3b1f, 0x37a1, 0x396c, 0x2e43, 0x2c2a, 0x3b78, 0x3988, 0x3a14, 0x39c1, 0x3b51, 0x3780, 0x3bf2, 0x2d19, 0x3815, 0x3a5f, 0x3641, 0x2f62, 0x37d5, 0x3564, 0x139a, 0x3ab8, 0x28f7, 0x3785, 0x34e1, 0x3097, 0x3768, -0x3971, 0x3ae2, 0x32ae, 0x2fd5, 0x382a, 0x346c, 0x3133, 0x3167, 0x3940, 0x2d12, 0x389a, 0x3bd0, 0x3943, 0x391c, 0x3a75, 0x2a11, 0x391e, 0x372d, 0x3a79, 0x3b72, 0x3373, 0x39b7, 0x35d7, 0x372b, 0x3a6d, 0x38a1, 0x3279, 0x3434, 0x3694, 0x3b45, 0x3abb, 0x392d, -0x34a8, 0x3757, 0x32ca, 0x345d, 0x36a5, 0x3854, 0x2dcd, 0x30af, 0x38dd, 0x3067, 0x3411, 0x3997, 0x397a, 0x3a64, 0x38b8, 0x3962, 0x3509, 0x3bb6, 0x3a66, 0x339f, 0x372a, 0x31a8, 0x37da, 0x36ff, 0x33c6, 0x31da, 0x3977, 0x3b72, 0x3841, 0x3567, 0x3433, 0x33b8, -0x39fe, 0x3a10, 0x3bf2, 0x35e7, 0x3a4a, 0x3b3e, 0x2ec7, 0x3aa4, 0x3846, 0x3af9, 0x38a9, 0x2c1f, 0x39ab, 0x349f, 0x31d6, 0x39ae, 0x3b79, 0x352d, 0x3516, 0x347c, 0x2f33, 0x35ad, 0x31c4, 0x3b52, 0x354b, 0x3786, 0x3ab7, 0x3896, 0x34ac, 0x352f, 0x37e6, 0x326a, -0x2e44, 0x34c7, 0x388d, 0x3bf4, 0x363f, 0x3b3d, 0x33b1, 0x3b8b, 0x3340, 0x37f7, 0x3b07, 0x25bf, 0x398e, 0x3505, 0x3bd7, 0x366d, 0x388a, 0x2cc0, 0x359a, 0x3b9a, 0x3b99, 0x379d, 0x3b6b, 0x39b8, 0x3223, 0x2703, 0x3ba9, 0x2ecb, 0x3759, 0x39d8, 0x37ac, 0x32cf, -0x35f2, 0x38a3, 0x399e, 0x3bd2, 0x3780, 0x3af3, 0x3b5e, 0x337b, 0x3a08, 0x35da, 0x3446, 0x3b25, 0x3ad0, 0x3bee, 0x3141, 0x32d8, 0x34ce, 0x2ac9, 0x3800, 0x3a8a, 0x2d53, 0x368a, 0x3561, 0x3998, 0x35a3, 0x3677, 0x3ab2, 0x3269, 0x3236, 0x3b3e, 0x3aba, 0x3bac, -0x395d, 0x3820, 0x1df6, 0x3bb5, 0x35b5, 0x3675, 0x3b74, 0x360f, 0x34de, 0x3a0c, 0x3aeb, 0x299d, 0x3207, 0x3bd8, 0x2178, 0x3995, 0x3948, 0x3908, 0x3843, 0x2ea5, 0x3045, 0x3989, 0x345d, 0x39c5, 0x3a89, 0x3863, 0x3be0, 0x397a, 0x38f1, 0x39e2, 0x3b08, 0x352e, -0x385f, 0x28f2, 0x3bc3, 0x35e0, 0x380c, 0x3b9c, 0x3afc, 0x390a, 0x3689, 0x34fd, 0x2cf5, 0x308e, 0x342b, 0x3921, 0x3a67, 0x3ad6, 0x2986, 0x32fc, 0x35aa, 0x3507, 0x3608, 0x33fd, 0x3bf3, 0x39e2, 0x3b0f, 0x30b7, 0x3896, 0x3ae4, 0x2145, 0x35b6, 0x2e1d, 0x3ad1, -0x333d, 0x3afb, 0x2703, 0x3413, 0x1d7d, 0x3b7f, 0x3ae1, 0x303c, 0x3004, 0x39d3, 0x3554, 0x31a4, 0x354e, 0x3662, 0x39c5, 0x2eb7, 0x2c6e, 0x397f, 0x31d8, 0x1f0c, 0x38e3, 0x35f0, 0x2714, 0x28d1, 0x375e, 0x3a75, 0x3830, 0x3578, 0x397d, 0x3b18, 0x383c, 0x3498, -0x39ad, 0x3598, 0x23c4, 0x34ea, 0x3a61, 0x2b00, 0x3707, 0x3ae1, 0x37ae, 0x389d, 0x37fa, 0x3673, 0x3278, 0xf3e, 0x3809, 0x33c6, 0x3bf5, 0x3279, 0x3816, 0x360c, 0x39c8, 0x381f, 0x3741, 0x2d66, 0x38c0, 0x37d3, 0x377a, 0x3621, 0x2faf, 0x392e, 0x2de6, 0x33c5, -0x3803, 0x2600, 0x32e9, 0x39b4, 0x38d2, 0x34e8, 0x2fe6, 0x3199, 0x3643, 0x3a77, 0x27cc, 0x39d7, 0x34c6, 0x2ea8, 0x364e, 0x3b07, 0x31c7, 0x30a1, 0x31b1, 0x3b8f, 0x3571, 0x3b75, 0x3989, 0x3805, 0x39fb, 0x3945, 0x352b, 0x31d8, 0x3904, 0x3440, 0x3a57, 0x2cf7, -0x3b39, 0x2fcd, 0x2b89, 0x2edd, 0x3682, 0x36a9, 0x32c8, 0x37ac, 0x32a5, 0x3311, 0x394b, 0x3b84, 0x3aec, 0x3601, 0x2765, 0x3b69, 0x396b, 0x3727, 0x3bfe, 0x3907, 0x376f, 0x3674, 0x3973, 0x3671, 0x3491, 0x3993, 0x383f, 0x3335, 0x3989, 0x3550, 0x3077, 0x35f5, -0x3a59, 0x3950, 0x380c, 0x37cd, 0x30bf, 0x3607, 0x3afa, 0x3b5d, 0x32b9, 0x386b, 0x35bd, 0x3aca, 0x3ba5, 0x3b2d, 0x3b19, 0x3b8b, 0x345e, 0x2845, 0x34aa, 0x372a, 0x3448, 0x34f5, 0x3ae2, 0x3637, 0x2cb5, 0x354b, 0x3b15, 0x2ca8, 0x2641, 0x3178, 0x2cfe, 0x39b4, -0x3bdd, 0x3acb, 0x3a05, 0x38a2, 0x3b4a, 0x34e5, 0x395f, 0x394b, 0x34c4, 0x3aa5, 0x29bb, 0x2d96, 0x339d, 0x387c, 0x382e, 0x385a, 0x396b, 0x3aa9, 0x2f1e, 0x33a7, 0x3b90, 0x3b7b, 0x3b5f, 0x39d3, 0x3b18, 0x354f, 0x2cdb, 0x3a6f, 0x3434, 0x34ff, 0x3a5b, 0x3b84, -0x3a33, 0x384b, 0x2e67, 0x3b85, 0x3853, 0x380c, 0x346a, 0x3aaa, 0x3492, 0x33e8, 0x3bf2, 0x38ae, 0x3a29, 0x3830, 0x3221, 0x35b1, 0x3a48, 0x2c68, 0x2ced, 0x3a7e, 0x3539, 0x3922, 0x374c, 0x3aaa, 0x2dae, 0x395d, 0x3b3d, 0x3890, 0x2cfe, 0x2dd6, 0x3bad, 0x33c5, -0x2c07, 0x3a2c, 0x37a8, 0x390f, 0x2fc8, 0x35ae, 0x388c, 0x30ee, 0x3674, 0x391d, 0x3bfc, 0x36bf, 0x322d, 0x3a78, 0x35c0, 0x3492, 0x3ac8, 0x3504, 0x3315, 0x381d, 0x3a7a, 0x3a08, 0x343c, 0x3bda, 0x341b, 0x39f0, 0x3b9e, 0x395d, 0x3c00, 0x38ab, 0x3bcf, 0x3564, -0x33c4, 0x3b0d, 0x3623, 0x33b9, 0x3b92, 0x1e71, 0x2c57, 0x36d0, 0x314b, 0x3a16, 0x3372, 0x341b, 0x3aaa, 0x3444, 0x396b, 0x2dd7, 0x3b30, 0x3559, 0x3b5b, 0x3a29, 0x2d19, 0x38b7, 0x3b01, 0x3afa, 0x398a, 0x3839, 0x3ac9, 0x2e31, 0x3924, 0x39f2, 0x3a7f, 0x3285 -}; \ No newline at end of file diff --git a/carfield/redmule/inc/w_input.h b/carfield/redmule/inc/w_input.h deleted file mode 100644 index dc4d3be..0000000 --- a/carfield/redmule/inc/w_input.h +++ /dev/null @@ -1,35 +0,0 @@ - /* Header file generated by RedMulE Golden Model */ -uint16_t w_inp [1024] = { -0x311a, 0x39e0, 0x387d, 0x3a4a, 0x386f, 0x3ada, 0x392f, 0x3854, 0x3014, 0x2fd2, 0x31c9, 0x2fca, 0x2e55, 0x3bc8, 0x396d, 0x3b1d, 0x39f6, 0x333a, 0x3908, 0x3628, 0x3bab, 0x3b8b, 0x3b4a, 0x322d, 0x3925, 0x317a, 0x3725, 0x31c2, 0x3066, 0x38f3, 0x3a17, 0x3476, -0x3bda, 0x3196, 0x3922, 0x3680, 0x396a, 0x3021, 0x3761, 0x374d, 0x2fc2, 0x3967, 0x3b94, 0x33b5, 0x3797, 0x34d6, 0x3655, 0x2176, 0x39bc, 0x3999, 0x3658, 0x3904, 0x3759, 0x2ade, 0x3a5a, 0x3b78, 0x36c7, 0x2d01, 0x3b58, 0x2d9a, 0x373d, 0x3952, 0x38e8, 0x3887, -0x37b6, 0x3a88, 0x2f8a, 0x2d79, 0x3413, 0x3421, 0x3976, 0x32b2, 0x3446, 0x2d99, 0x3a56, 0x3322, 0x3b49, 0x39fa, 0x3acd, 0x3af6, 0x304c, 0x3abb, 0x3a83, 0x38b2, 0x3ab9, 0x363e, 0x389f, 0x31bb, 0x38e1, 0x3bc4, 0x3b9b, 0x2984, 0x3a43, 0x3b2f, 0x35d6, 0x3bda, -0x2df3, 0x3bf8, 0x2acc, 0x378b, 0x3555, 0x2e59, 0x31d4, 0x34ec, 0x3a46, 0x3bab, 0x3214, 0x3161, 0x3470, 0x3a03, 0x368e, 0x31ad, 0x27cb, 0x2ecb, 0x3422, 0x39f7, 0x3644, 0x3a77, 0x313f, 0x34f2, 0x39b3, 0x3bf2, 0x379a, 0x3456, 0x35fe, 0x3ae7, 0x3964, 0x385f, -0x3b16, 0x3999, 0x3833, 0x2eda, 0x3afd, 0x3a4a, 0x3ba2, 0x2bd4, 0x3b38, 0x31a2, 0x32dd, 0x353c, 0x366f, 0x375e, 0x3821, 0x367a, 0x3b44, 0x39e6, 0x3787, 0x339e, 0x39d7, 0x38c6, 0x37d5, 0x342f, 0x3984, 0x319b, 0x33b5, 0x35ab, 0x398a, 0x374e, 0x36b6, 0x3b21, -0x3bbb, 0x2ab3, 0x2ad5, 0x33bc, 0x2bef, 0x3780, 0x3738, 0x3a0b, 0x3b09, 0x30ca, 0x384e, 0x3ab3, 0x39bd, 0x3453, 0x3a6d, 0x3957, 0x2c10, 0x30e9, 0x35d4, 0x3aef, 0x3be9, 0x39ad, 0x3a74, 0x3af9, 0x3739, 0x2d4d, 0x39fe, 0x3b72, 0x2c57, 0x398c, 0x381f, 0x3930, -0x3820, 0x321b, 0x3964, 0x2964, 0x33a0, 0x2d00, 0x2490, 0x336b, 0x3465, 0x3b2e, 0x3aa0, 0x371f, 0x300e, 0x3a09, 0x3bf1, 0x25cc, 0x3b6f, 0x3384, 0x3a88, 0x3acb, 0x3814, 0x36d0, 0x3081, 0x3a2c, 0x3353, 0x39cb, 0x31ed, 0x3af6, 0x3721, 0x36c7, 0x2ce2, 0x390d, -0x3698, 0x3ab2, 0x3b3e, 0x2eb4, 0x3998, 0x39e3, 0x3a77, 0x3632, 0x2c12, 0x3bd5, 0x3ba3, 0x3bba, 0x323c, 0x367b, 0x3557, 0x39c8, 0x37db, 0x3b45, 0x3b6e, 0x3931, 0x3121, 0x3a8d, 0x3a55, 0x3b9b, 0x358a, 0x3925, 0x3491, 0x3912, 0x3b6b, 0x3584, 0x32df, 0x3120, -0x32b2, 0x3b0a, 0x2cad, 0x3465, 0x3ad3, 0x3bcd, 0x363b, 0x3afe, 0x354b, 0x3374, 0x39af, 0x3b7f, 0x308c, 0x2e72, 0x3380, 0x3b70, 0x3902, 0x38d8, 0x39f3, 0x3a4b, 0x3853, 0x397b, 0x2ebe, 0x387f, 0x2845, 0x37e2, 0x360f, 0x370b, 0x3acb, 0x35d4, 0x36e6, 0x3262, -0x2e88, 0x3a54, 0x2ee3, 0x3575, 0x3afe, 0x2aee, 0x39a0, 0x3aae, 0x3693, 0x3432, 0x3834, 0x3b9b, 0x3bcb, 0x2e3a, 0x356d, 0x374e, 0x3924, 0x383c, 0x311e, 0x3ac5, 0x352d, 0x311e, 0x38ca, 0x34d4, 0x36ca, 0x34ed, 0x3a13, 0x33eb, 0x3639, 0x3828, 0x3b3c, 0x3939, -0x3837, 0x3521, 0x2cb5, 0x3629, 0x3924, 0x384c, 0x366a, 0x3bbf, 0x2e9e, 0x3ba8, 0x33ad, 0x38c8, 0x3934, 0x3907, 0x249a, 0x3690, 0x3a09, 0x3215, 0x3898, 0x325d, 0x37d5, 0x3195, 0x361c, 0x3ae4, 0x351f, 0x3452, 0x3bc0, 0x375c, 0x39bf, 0x317a, 0x3aae, 0x283a, -0x3476, 0x3b92, 0x3472, 0x383e, 0x280f, 0x39d6, 0x2fd1, 0x31f4, 0x2ffb, 0x3b97, 0x3692, 0x36c0, 0x3989, 0x33cf, 0x3ba6, 0x3239, 0x35d7, 0x33ab, 0x31eb, 0x3b47, 0x389b, 0x3b88, 0x3580, 0x354c, 0x3802, 0x3b9a, 0x3b94, 0x2a92, 0x2db1, 0x38bd, 0x2dfb, 0x3900, -0x344f, 0x3739, 0x27a5, 0x3b2e, 0x342b, 0x34bb, 0x30c8, 0x3ae8, 0x3b26, 0x3982, 0x38c0, 0x3408, 0x38c8, 0x36ef, 0x3bf0, 0x3acf, 0x3a3c, 0x3825, 0x31a5, 0x3ada, 0x3b5b, 0x37db, 0x3a01, 0x3663, 0x3a7d, 0x327b, 0x3a1f, 0x3862, 0x38af, 0x3204, 0x372e, 0x3b19, -0x3708, 0x3622, 0x2e62, 0x39ab, 0x2d4d, 0x31b4, 0x3552, 0x3bbc, 0x36f2, 0x36eb, 0x38ef, 0x3755, 0x3bbe, 0x2c17, 0x3815, 0x2f53, 0x363f, 0x38c1, 0x3246, 0x386b, 0x34de, 0x34e4, 0x3baa, 0x349e, 0x32ce, 0x3a68, 0x373f, 0x2cce, 0x3b36, 0x28ba, 0x3b50, 0x3232, -0x1f34, 0x3928, 0x35cd, 0x3b38, 0x30ce, 0x35a1, 0x3a06, 0x3a32, 0x3a53, 0x3489, 0x3241, 0x372f, 0x390c, 0x3a1b, 0x378a, 0x3713, 0x3769, 0x37a8, 0x3418, 0x3ad4, 0x3a4e, 0x3bf7, 0x37a5, 0x34dc, 0x39b2, 0x351b, 0x3372, 0x349f, 0x2f50, 0x3ab1, 0x3795, 0x2db7, -0x3864, 0x3157, 0x3900, 0x323e, 0x389e, 0x3880, 0x3b1f, 0x37a1, 0x396c, 0x2e43, 0x2c2a, 0x3b78, 0x3988, 0x3a14, 0x39c1, 0x3b51, 0x3780, 0x3bf2, 0x2d19, 0x3815, 0x3a5f, 0x3641, 0x2f62, 0x37d5, 0x3564, 0x139a, 0x3ab8, 0x28f7, 0x3785, 0x34e1, 0x3097, 0x3768, -0x3971, 0x3ae2, 0x32ae, 0x2fd5, 0x382a, 0x346c, 0x3133, 0x3167, 0x3940, 0x2d12, 0x389a, 0x3bd0, 0x3943, 0x391c, 0x3a75, 0x2a11, 0x391e, 0x372d, 0x3a79, 0x3b72, 0x3373, 0x39b7, 0x35d7, 0x372b, 0x3a6d, 0x38a1, 0x3279, 0x3434, 0x3694, 0x3b45, 0x3abb, 0x392d, -0x34a8, 0x3757, 0x32ca, 0x345d, 0x36a5, 0x3854, 0x2dcd, 0x30af, 0x38dd, 0x3067, 0x3411, 0x3997, 0x397a, 0x3a64, 0x38b8, 0x3962, 0x3509, 0x3bb6, 0x3a66, 0x339f, 0x372a, 0x31a8, 0x37da, 0x36ff, 0x33c6, 0x31da, 0x3977, 0x3b72, 0x3841, 0x3567, 0x3433, 0x33b8, -0x39fe, 0x3a10, 0x3bf2, 0x35e7, 0x3a4a, 0x3b3e, 0x2ec7, 0x3aa4, 0x3846, 0x3af9, 0x38a9, 0x2c1f, 0x39ab, 0x349f, 0x31d6, 0x39ae, 0x3b79, 0x352d, 0x3516, 0x347c, 0x2f33, 0x35ad, 0x31c4, 0x3b52, 0x354b, 0x3786, 0x3ab7, 0x3896, 0x34ac, 0x352f, 0x37e6, 0x326a, -0x2e44, 0x34c7, 0x388d, 0x3bf4, 0x363f, 0x3b3d, 0x33b1, 0x3b8b, 0x3340, 0x37f7, 0x3b07, 0x25bf, 0x398e, 0x3505, 0x3bd7, 0x366d, 0x388a, 0x2cc0, 0x359a, 0x3b9a, 0x3b99, 0x379d, 0x3b6b, 0x39b8, 0x3223, 0x2703, 0x3ba9, 0x2ecb, 0x3759, 0x39d8, 0x37ac, 0x32cf, -0x35f2, 0x38a3, 0x399e, 0x3bd2, 0x3780, 0x3af3, 0x3b5e, 0x337b, 0x3a08, 0x35da, 0x3446, 0x3b25, 0x3ad0, 0x3bee, 0x3141, 0x32d8, 0x34ce, 0x2ac9, 0x3800, 0x3a8a, 0x2d53, 0x368a, 0x3561, 0x3998, 0x35a3, 0x3677, 0x3ab2, 0x3269, 0x3236, 0x3b3e, 0x3aba, 0x3bac, -0x395d, 0x3820, 0x1df6, 0x3bb5, 0x35b5, 0x3675, 0x3b74, 0x360f, 0x34de, 0x3a0c, 0x3aeb, 0x299d, 0x3207, 0x3bd8, 0x2178, 0x3995, 0x3948, 0x3908, 0x3843, 0x2ea5, 0x3045, 0x3989, 0x345d, 0x39c5, 0x3a89, 0x3863, 0x3be0, 0x397a, 0x38f1, 0x39e2, 0x3b08, 0x352e, -0x385f, 0x28f2, 0x3bc3, 0x35e0, 0x380c, 0x3b9c, 0x3afc, 0x390a, 0x3689, 0x34fd, 0x2cf5, 0x308e, 0x342b, 0x3921, 0x3a67, 0x3ad6, 0x2986, 0x32fc, 0x35aa, 0x3507, 0x3608, 0x33fd, 0x3bf3, 0x39e2, 0x3b0f, 0x30b7, 0x3896, 0x3ae4, 0x2145, 0x35b6, 0x2e1d, 0x3ad1, -0x333d, 0x3afb, 0x2703, 0x3413, 0x1d7d, 0x3b7f, 0x3ae1, 0x303c, 0x3004, 0x39d3, 0x3554, 0x31a4, 0x354e, 0x3662, 0x39c5, 0x2eb7, 0x2c6e, 0x397f, 0x31d8, 0x1f0c, 0x38e3, 0x35f0, 0x2714, 0x28d1, 0x375e, 0x3a75, 0x3830, 0x3578, 0x397d, 0x3b18, 0x383c, 0x3498, -0x39ad, 0x3598, 0x23c4, 0x34ea, 0x3a61, 0x2b00, 0x3707, 0x3ae1, 0x37ae, 0x389d, 0x37fa, 0x3673, 0x3278, 0xf3e, 0x3809, 0x33c6, 0x3bf5, 0x3279, 0x3816, 0x360c, 0x39c8, 0x381f, 0x3741, 0x2d66, 0x38c0, 0x37d3, 0x377a, 0x3621, 0x2faf, 0x392e, 0x2de6, 0x33c5, -0x3803, 0x2600, 0x32e9, 0x39b4, 0x38d2, 0x34e8, 0x2fe6, 0x3199, 0x3643, 0x3a77, 0x27cc, 0x39d7, 0x34c6, 0x2ea8, 0x364e, 0x3b07, 0x31c7, 0x30a1, 0x31b1, 0x3b8f, 0x3571, 0x3b75, 0x3989, 0x3805, 0x39fb, 0x3945, 0x352b, 0x31d8, 0x3904, 0x3440, 0x3a57, 0x2cf7, -0x3b39, 0x2fcd, 0x2b89, 0x2edd, 0x3682, 0x36a9, 0x32c8, 0x37ac, 0x32a5, 0x3311, 0x394b, 0x3b84, 0x3aec, 0x3601, 0x2765, 0x3b69, 0x396b, 0x3727, 0x3bfe, 0x3907, 0x376f, 0x3674, 0x3973, 0x3671, 0x3491, 0x3993, 0x383f, 0x3335, 0x3989, 0x3550, 0x3077, 0x35f5, -0x3a59, 0x3950, 0x380c, 0x37cd, 0x30bf, 0x3607, 0x3afa, 0x3b5d, 0x32b9, 0x386b, 0x35bd, 0x3aca, 0x3ba5, 0x3b2d, 0x3b19, 0x3b8b, 0x345e, 0x2845, 0x34aa, 0x372a, 0x3448, 0x34f5, 0x3ae2, 0x3637, 0x2cb5, 0x354b, 0x3b15, 0x2ca8, 0x2641, 0x3178, 0x2cfe, 0x39b4, -0x3bdd, 0x3acb, 0x3a05, 0x38a2, 0x3b4a, 0x34e5, 0x395f, 0x394b, 0x34c4, 0x3aa5, 0x29bb, 0x2d96, 0x339d, 0x387c, 0x382e, 0x385a, 0x396b, 0x3aa9, 0x2f1e, 0x33a7, 0x3b90, 0x3b7b, 0x3b5f, 0x39d3, 0x3b18, 0x354f, 0x2cdb, 0x3a6f, 0x3434, 0x34ff, 0x3a5b, 0x3b84, -0x3a33, 0x384b, 0x2e67, 0x3b85, 0x3853, 0x380c, 0x346a, 0x3aaa, 0x3492, 0x33e8, 0x3bf2, 0x38ae, 0x3a29, 0x3830, 0x3221, 0x35b1, 0x3a48, 0x2c68, 0x2ced, 0x3a7e, 0x3539, 0x3922, 0x374c, 0x3aaa, 0x2dae, 0x395d, 0x3b3d, 0x3890, 0x2cfe, 0x2dd6, 0x3bad, 0x33c5, -0x2c07, 0x3a2c, 0x37a8, 0x390f, 0x2fc8, 0x35ae, 0x388c, 0x30ee, 0x3674, 0x391d, 0x3bfc, 0x36bf, 0x322d, 0x3a78, 0x35c0, 0x3492, 0x3ac8, 0x3504, 0x3315, 0x381d, 0x3a7a, 0x3a08, 0x343c, 0x3bda, 0x341b, 0x39f0, 0x3b9e, 0x395d, 0x3c00, 0x38ab, 0x3bcf, 0x3564, -0x33c4, 0x3b0d, 0x3623, 0x33b9, 0x3b92, 0x1e71, 0x2c57, 0x36d0, 0x314b, 0x3a16, 0x3372, 0x341b, 0x3aaa, 0x3444, 0x396b, 0x2dd7, 0x3b30, 0x3559, 0x3b5b, 0x3a29, 0x2d19, 0x38b7, 0x3b01, 0x3afa, 0x398a, 0x3839, 0x3ac9, 0x2e31, 0x3924, 0x39f2, 0x3a7f, 0x3285 -}; \ No newline at end of file diff --git a/carfield/redmule/inc/x_2D.h b/carfield/redmule/inc/x_2D.h deleted file mode 100644 index 0b589f8..0000000 --- a/carfield/redmule/inc/x_2D.h +++ /dev/null @@ -1,27 +0,0 @@ - /* Header file generated by RedMulE Golden Model */ -uint16_t x_inp_2D [24][32] = { -0x2153, 0x3bb5, 0x3896, 0x365f, 0x2483, 0x3518, 0x2dd1, 0x3bca, 0x397b, 0x29b1, 0x3705, 0x36c8, 0x398b, 0x3661, 0x2f05, 0x365a, 0x3bf9, 0x34df, 0x363b, 0x38d9, 0x39c6, 0x3abb, 0x3952, 0x38f2, 0x392d, 0x3b3e, 0x2afb, 0x3a9d, 0x353b, 0x3b73, 0x3a01, 0x3679, -0x3934, 0x397d, 0x2904, 0x3822, 0x3462, 0x3b44, 0x39e9, 0x28be, 0x331e, 0x3a1d, 0x39e5, 0x34da, 0x3a19, 0x3906, 0x1d35, 0x3871, 0x31e7, 0x3b29, 0x325d, 0x3797, 0x2b2f, 0x38b4, 0x232f, 0x38aa, 0x3aca, 0x316f, 0x3811, 0x3950, 0x32ea, 0x3bc7, 0x382c, 0x38a2, -0x29ce, 0x3afa, 0x3a39, 0x2ccc, 0x39fd, 0x3b3d, 0x384a, 0x3a35, 0x3802, 0x366a, 0x37ec, 0x3598, 0x3bf8, 0x3a85, 0x3a1b, 0x386e, 0x3b4c, 0x39de, 0x38c2, 0x2f93, 0x3b4c, 0x39c4, 0x3b9e, 0x3844, 0x346d, 0x3bff, 0x32ce, 0x296d, 0x3130, 0x3b3d, 0x3b44, 0x369d, -0x3b13, 0x31ed, 0x330a, 0x3831, 0x34e7, 0x37b3, 0x331a, 0x3918, 0x32d3, 0x3995, 0x3991, 0x3919, 0x3a26, 0x385b, 0x2b76, 0x3a3b, 0x37f2, 0x26a7, 0x3225, 0x3b64, 0x28f0, 0x3456, 0x3822, 0x341e, 0x381a, 0x38d8, 0x2c11, 0x33be, 0x33ac, 0x353f, 0x3476, 0x3abc, -0x36ec, 0x3a1d, 0x39d3, 0x3821, 0x36ac, 0x3bce, 0x3ad2, 0x3616, 0x36a1, 0x2cb3, 0x38d2, 0x314f, 0x385c, 0x3b63, 0x3bb6, 0x2951, 0x372d, 0x2c42, 0x3823, 0x3883, 0x3872, 0x31ee, 0x36c5, 0x399a, 0x31b0, 0x3887, 0x3884, 0x3865, 0x3896, 0x36c3, 0x32e3, 0x346c, -0x3935, 0x3b50, 0x2b6d, 0x38cd, 0x388f, 0x3389, 0x395d, 0x31cd, 0x2efd, 0x3154, 0x2f35, 0x3444, 0x3293, 0x3b6b, 0x1bec, 0x3b69, 0x3bf3, 0x3611, 0x3508, 0x3742, 0x3a50, 0x3ab7, 0x3457, 0x38d3, 0x3344, 0x38e8, 0x33c0, 0x3668, 0x3bee, 0x3b21, 0x3727, 0x3121, -0x316c, 0x3288, 0x2d50, 0x2e74, 0x35d5, 0x37e2, 0x303d, 0x36af, 0x341f, 0x3436, 0x2df7, 0x399d, 0x30f4, 0x3aaf, 0x34e4, 0x2c2a, 0x3116, 0x34d3, 0x36ac, 0x35e3, 0x3760, 0x36e1, 0x3ad2, 0x3547, 0x38f4, 0x369c, 0x3ba9, 0x34f0, 0x3a39, 0x3b19, 0x36e6, 0x395d, -0x3be8, 0x3293, 0x3bfc, 0x3435, 0x2eb3, 0x3360, 0x3919, 0x3bed, 0x396a, 0x37fc, 0x3242, 0x384b, 0x38cb, 0x3b2c, 0x3b28, 0x28cf, 0x3828, 0x3855, 0x3ba9, 0x2fa7, 0x340b, 0x32f1, 0x3ada, 0x36fa, 0x31f5, 0x3436, 0x29d0, 0x33e6, 0x3232, 0x3bec, 0x3904, 0x2797, -0x3b81, 0x3bac, 0x38d2, 0x343d, 0x31af, 0x3b1e, 0x33fc, 0x3864, 0x3624, 0x3905, 0x2945, 0x3b52, 0x2d08, 0x3a17, 0x3b84, 0x3804, 0x3a24, 0x38a3, 0x3562, 0x3ae6, 0x3bba, 0x3a45, 0x3679, 0x31fa, 0x3994, 0x2c3d, 0x383f, 0x399d, 0x34f7, 0x360e, 0x35f3, 0x38f0, -0x38d4, 0x399a, 0x3a48, 0x3987, 0x3b54, 0x382c, 0x3210, 0x35ef, 0x36ca, 0x31b4, 0x3625, 0x371f, 0x37bd, 0x3680, 0x3a3a, 0x3ac0, 0x3bbf, 0x3bf5, 0x39f2, 0x29c2, 0x363e, 0x3a4e, 0x3596, 0x3b1b, 0x3459, 0x3669, 0x3aa1, 0x39c3, 0x3376, 0x390d, 0x2456, 0x39b5, -0x3a66, 0x3ad8, 0x3b51, 0x36aa, 0x32be, 0x3ac8, 0x392b, 0x3740, 0x3a48, 0x38f5, 0x3b2d, 0x3a5f, 0x2ff3, 0x366f, 0x39d3, 0x35e5, 0x3822, 0x38db, 0x3b8a, 0x34be, 0x2d33, 0x36dd, 0x3578, 0x3bdf, 0x2c7e, 0x39cf, 0x32ff, 0x35c9, 0x3970, 0x3bcb, 0x351e, 0x3956, -0x2c42, 0x3308, 0x377a, 0x361c, 0x39a0, 0x36c9, 0x2dcb, 0x3bf2, 0x3b5f, 0x33ee, 0x24c1, 0x2ce9, 0x3927, 0x305d, 0x3702, 0x3119, 0x35f9, 0x3855, 0x3374, 0x349b, 0x3bcf, 0x2dea, 0x34f0, 0x363f, 0x37da, 0x3a74, 0x35fc, 0x35fa, 0x316b, 0x3804, 0x37a7, 0x3986, -0x3073, 0x3aed, 0x31c7, 0x3844, 0x34a4, 0x387d, 0x3a20, 0x3037, 0x3a00, 0x3b70, 0x377f, 0x3686, 0x3b7e, 0x38b3, 0x32e3, 0x3323, 0x391e, 0x3228, 0x3930, 0x3997, 0x3a5e, 0x398b, 0x3512, 0x35b0, 0x365c, 0x325d, 0x3b61, 0x38b8, 0x39a4, 0x3423, 0x3bd7, 0x38af, -0x2d3d, 0x382d, 0x38ac, 0x26ca, 0x395e, 0x21a8, 0x3520, 0x386f, 0x3b95, 0x32c0, 0x3b84, 0x3a51, 0x3b4b, 0x31d2, 0x3747, 0x3b96, 0x3b40, 0x3535, 0x38d1, 0x3899, 0x3b00, 0x3827, 0x3ae3, 0x38c8, 0x3a07, 0x338d, 0x2e96, 0x3a46, 0x394a, 0x39de, 0x2951, 0x3a02, -0x3838, 0x2d45, 0x28c0, 0x3958, 0x3070, 0x2aa2, 0x3510, 0x38ce, 0x271c, 0x3440, 0x3954, 0x30bc, 0x3b35, 0x2f1d, 0x3afb, 0x2dae, 0x356f, 0x2e13, 0x3981, 0x326d, 0x3a28, 0x3a36, 0x3a95, 0x38cb, 0x38db, 0x3150, 0x2c9e, 0x34c5, 0x3adb, 0x3bdf, 0x38f2, 0x3994, -0x36f8, 0x31c0, 0x3a4f, 0x3825, 0x394b, 0x3a8b, 0x38ac, 0x3167, 0x2e2d, 0x3a93, 0x34f3, 0x37bd, 0x3b63, 0x2f2f, 0x3ae0, 0x3ad8, 0x34a8, 0x2e1c, 0x3890, 0x3705, 0x3b69, 0x3bc1, 0x28af, 0x3b36, 0x348b, 0x3111, 0x3a8d, 0x389c, 0x3916, 0x36dc, 0x3bae, 0x3874, -0x3593, 0x3638, 0x3018, 0x3a56, 0x38a3, 0x2ad4, 0x3a25, 0x38d7, 0x3864, 0x31c1, 0x28d1, 0x39c8, 0x37d6, 0x2c7f, 0x3ba5, 0x34b8, 0x3bef, 0x3b83, 0x3ab5, 0x3062, 0x38bc, 0x399c, 0x2ce4, 0x2f2c, 0x39bf, 0x2ed1, 0x385f, 0x37e0, 0x35ee, 0x397d, 0x3b0c, 0x3049, -0x39d5, 0x322e, 0x3936, 0x3747, 0x2e15, 0x3b41, 0x3874, 0x3bd0, 0x2c04, 0x3800, 0x375b, 0x3b2d, 0x38d8, 0x3a51, 0x3406, 0x38da, 0x38ba, 0x3497, 0x382e, 0x35fc, 0x39d4, 0x3775, 0x3b1e, 0x3813, 0x3649, 0x31af, 0x37bb, 0x334a, 0x3a6e, 0x3284, 0x26e0, 0x2e01, -0x2ebb, 0x344b, 0x3821, 0x381a, 0x385a, 0x2534, 0x3635, 0x2a92, 0x3b8c, 0x31f0, 0x3947, 0x3ac7, 0x3743, 0x3924, 0x39e4, 0x358f, 0x2b62, 0x392c, 0x3955, 0x3341, 0x3676, 0x38ac, 0x3957, 0x335b, 0x2ca2, 0x39ff, 0x37cb, 0x341f, 0x3ac9, 0x3b6c, 0x2f14, 0x34c3, -0x3018, 0x3169, 0x355b, 0x3624, 0x31ed, 0x379e, 0x3268, 0x309b, 0x35db, 0x3872, 0x3bdb, 0x34c7, 0x3408, 0x3359, 0x3920, 0x331f, 0x3866, 0x3af0, 0x2a1a, 0x39e0, 0x3b14, 0x34fa, 0x2d18, 0x3963, 0x35e8, 0x2539, 0x38f5, 0x37b3, 0x378f, 0x31b5, 0x3a6c, 0x3685, -0x3a06, 0x318a, 0x2934, 0x33c1, 0x3be8, 0x375b, 0x3860, 0x3543, 0x3702, 0x3951, 0x3677, 0x37ff, 0x2e27, 0x2e3a, 0x340f, 0x3817, 0x2f04, 0x357e, 0x3a1d, 0x2dd6, 0x252a, 0x3945, 0x162a, 0x3b19, 0x3a53, 0x35d2, 0x3a5d, 0x3474, 0x38e9, 0x374b, 0x387c, 0x1f1a, -0x38ac, 0x3291, 0x3393, 0x3b53, 0x3169, 0x3bca, 0x2f1a, 0x3551, 0x38a3, 0x28e3, 0x369d, 0x34a1, 0x38a8, 0x34c3, 0x3841, 0x390d, 0x3b13, 0x3282, 0x3a29, 0x3a78, 0x2df3, 0x3a37, 0x35f4, 0x35a6, 0x38e8, 0x3328, 0x3beb, 0x390b, 0x32dc, 0x34dc, 0x396d, 0x3a78, -0x39ba, 0x3a06, 0x2cdd, 0x3bc3, 0x2d43, 0x2992, 0x3663, 0x3a68, 0x2c3e, 0x394e, 0x2c9f, 0x380e, 0x37f5, 0x3557, 0x2873, 0x390f, 0x39e7, 0x3939, 0x3669, 0x385c, 0x3a68, 0x32c4, 0x2b04, 0x2d6d, 0x39d3, 0x3895, 0x331d, 0x3b59, 0x3463, 0x2b6a, 0x31de, 0x3296, -0x3aae, 0x3bcd, 0x345a, 0x3897, 0x374b, 0x3bd4, 0x38a2, 0x357f, 0x3402, 0x3a0c, 0x3507, 0x3865, 0x3a54, 0x3878, 0x3859, 0x383e, 0x32b5, 0x34ea, 0x328d, 0x38b6, 0x3464, 0x2f5b, 0x35ff, 0x3817, 0x2f24, 0x3533, 0x3b21, 0x37ba, 0x3837, 0x2e34, 0x3bad, 0x34bc -}; \ No newline at end of file diff --git a/carfield/redmule/inc/x_input.h b/carfield/redmule/inc/x_input.h deleted file mode 100644 index 1e38d23..0000000 --- a/carfield/redmule/inc/x_input.h +++ /dev/null @@ -1,27 +0,0 @@ - /* Header file generated by RedMulE Golden Model */ -uint16_t x_inp [768] = { -0x2153, 0x3bb5, 0x3896, 0x365f, 0x2483, 0x3518, 0x2dd1, 0x3bca, 0x397b, 0x29b1, 0x3705, 0x36c8, 0x398b, 0x3661, 0x2f05, 0x365a, 0x3bf9, 0x34df, 0x363b, 0x38d9, 0x39c6, 0x3abb, 0x3952, 0x38f2, 0x392d, 0x3b3e, 0x2afb, 0x3a9d, 0x353b, 0x3b73, 0x3a01, 0x3679, -0x3934, 0x397d, 0x2904, 0x3822, 0x3462, 0x3b44, 0x39e9, 0x28be, 0x331e, 0x3a1d, 0x39e5, 0x34da, 0x3a19, 0x3906, 0x1d35, 0x3871, 0x31e7, 0x3b29, 0x325d, 0x3797, 0x2b2f, 0x38b4, 0x232f, 0x38aa, 0x3aca, 0x316f, 0x3811, 0x3950, 0x32ea, 0x3bc7, 0x382c, 0x38a2, -0x29ce, 0x3afa, 0x3a39, 0x2ccc, 0x39fd, 0x3b3d, 0x384a, 0x3a35, 0x3802, 0x366a, 0x37ec, 0x3598, 0x3bf8, 0x3a85, 0x3a1b, 0x386e, 0x3b4c, 0x39de, 0x38c2, 0x2f93, 0x3b4c, 0x39c4, 0x3b9e, 0x3844, 0x346d, 0x3bff, 0x32ce, 0x296d, 0x3130, 0x3b3d, 0x3b44, 0x369d, -0x3b13, 0x31ed, 0x330a, 0x3831, 0x34e7, 0x37b3, 0x331a, 0x3918, 0x32d3, 0x3995, 0x3991, 0x3919, 0x3a26, 0x385b, 0x2b76, 0x3a3b, 0x37f2, 0x26a7, 0x3225, 0x3b64, 0x28f0, 0x3456, 0x3822, 0x341e, 0x381a, 0x38d8, 0x2c11, 0x33be, 0x33ac, 0x353f, 0x3476, 0x3abc, -0x36ec, 0x3a1d, 0x39d3, 0x3821, 0x36ac, 0x3bce, 0x3ad2, 0x3616, 0x36a1, 0x2cb3, 0x38d2, 0x314f, 0x385c, 0x3b63, 0x3bb6, 0x2951, 0x372d, 0x2c42, 0x3823, 0x3883, 0x3872, 0x31ee, 0x36c5, 0x399a, 0x31b0, 0x3887, 0x3884, 0x3865, 0x3896, 0x36c3, 0x32e3, 0x346c, -0x3935, 0x3b50, 0x2b6d, 0x38cd, 0x388f, 0x3389, 0x395d, 0x31cd, 0x2efd, 0x3154, 0x2f35, 0x3444, 0x3293, 0x3b6b, 0x1bec, 0x3b69, 0x3bf3, 0x3611, 0x3508, 0x3742, 0x3a50, 0x3ab7, 0x3457, 0x38d3, 0x3344, 0x38e8, 0x33c0, 0x3668, 0x3bee, 0x3b21, 0x3727, 0x3121, -0x316c, 0x3288, 0x2d50, 0x2e74, 0x35d5, 0x37e2, 0x303d, 0x36af, 0x341f, 0x3436, 0x2df7, 0x399d, 0x30f4, 0x3aaf, 0x34e4, 0x2c2a, 0x3116, 0x34d3, 0x36ac, 0x35e3, 0x3760, 0x36e1, 0x3ad2, 0x3547, 0x38f4, 0x369c, 0x3ba9, 0x34f0, 0x3a39, 0x3b19, 0x36e6, 0x395d, -0x3be8, 0x3293, 0x3bfc, 0x3435, 0x2eb3, 0x3360, 0x3919, 0x3bed, 0x396a, 0x37fc, 0x3242, 0x384b, 0x38cb, 0x3b2c, 0x3b28, 0x28cf, 0x3828, 0x3855, 0x3ba9, 0x2fa7, 0x340b, 0x32f1, 0x3ada, 0x36fa, 0x31f5, 0x3436, 0x29d0, 0x33e6, 0x3232, 0x3bec, 0x3904, 0x2797, -0x3b81, 0x3bac, 0x38d2, 0x343d, 0x31af, 0x3b1e, 0x33fc, 0x3864, 0x3624, 0x3905, 0x2945, 0x3b52, 0x2d08, 0x3a17, 0x3b84, 0x3804, 0x3a24, 0x38a3, 0x3562, 0x3ae6, 0x3bba, 0x3a45, 0x3679, 0x31fa, 0x3994, 0x2c3d, 0x383f, 0x399d, 0x34f7, 0x360e, 0x35f3, 0x38f0, -0x38d4, 0x399a, 0x3a48, 0x3987, 0x3b54, 0x382c, 0x3210, 0x35ef, 0x36ca, 0x31b4, 0x3625, 0x371f, 0x37bd, 0x3680, 0x3a3a, 0x3ac0, 0x3bbf, 0x3bf5, 0x39f2, 0x29c2, 0x363e, 0x3a4e, 0x3596, 0x3b1b, 0x3459, 0x3669, 0x3aa1, 0x39c3, 0x3376, 0x390d, 0x2456, 0x39b5, -0x3a66, 0x3ad8, 0x3b51, 0x36aa, 0x32be, 0x3ac8, 0x392b, 0x3740, 0x3a48, 0x38f5, 0x3b2d, 0x3a5f, 0x2ff3, 0x366f, 0x39d3, 0x35e5, 0x3822, 0x38db, 0x3b8a, 0x34be, 0x2d33, 0x36dd, 0x3578, 0x3bdf, 0x2c7e, 0x39cf, 0x32ff, 0x35c9, 0x3970, 0x3bcb, 0x351e, 0x3956, -0x2c42, 0x3308, 0x377a, 0x361c, 0x39a0, 0x36c9, 0x2dcb, 0x3bf2, 0x3b5f, 0x33ee, 0x24c1, 0x2ce9, 0x3927, 0x305d, 0x3702, 0x3119, 0x35f9, 0x3855, 0x3374, 0x349b, 0x3bcf, 0x2dea, 0x34f0, 0x363f, 0x37da, 0x3a74, 0x35fc, 0x35fa, 0x316b, 0x3804, 0x37a7, 0x3986, -0x3073, 0x3aed, 0x31c7, 0x3844, 0x34a4, 0x387d, 0x3a20, 0x3037, 0x3a00, 0x3b70, 0x377f, 0x3686, 0x3b7e, 0x38b3, 0x32e3, 0x3323, 0x391e, 0x3228, 0x3930, 0x3997, 0x3a5e, 0x398b, 0x3512, 0x35b0, 0x365c, 0x325d, 0x3b61, 0x38b8, 0x39a4, 0x3423, 0x3bd7, 0x38af, -0x2d3d, 0x382d, 0x38ac, 0x26ca, 0x395e, 0x21a8, 0x3520, 0x386f, 0x3b95, 0x32c0, 0x3b84, 0x3a51, 0x3b4b, 0x31d2, 0x3747, 0x3b96, 0x3b40, 0x3535, 0x38d1, 0x3899, 0x3b00, 0x3827, 0x3ae3, 0x38c8, 0x3a07, 0x338d, 0x2e96, 0x3a46, 0x394a, 0x39de, 0x2951, 0x3a02, -0x3838, 0x2d45, 0x28c0, 0x3958, 0x3070, 0x2aa2, 0x3510, 0x38ce, 0x271c, 0x3440, 0x3954, 0x30bc, 0x3b35, 0x2f1d, 0x3afb, 0x2dae, 0x356f, 0x2e13, 0x3981, 0x326d, 0x3a28, 0x3a36, 0x3a95, 0x38cb, 0x38db, 0x3150, 0x2c9e, 0x34c5, 0x3adb, 0x3bdf, 0x38f2, 0x3994, -0x36f8, 0x31c0, 0x3a4f, 0x3825, 0x394b, 0x3a8b, 0x38ac, 0x3167, 0x2e2d, 0x3a93, 0x34f3, 0x37bd, 0x3b63, 0x2f2f, 0x3ae0, 0x3ad8, 0x34a8, 0x2e1c, 0x3890, 0x3705, 0x3b69, 0x3bc1, 0x28af, 0x3b36, 0x348b, 0x3111, 0x3a8d, 0x389c, 0x3916, 0x36dc, 0x3bae, 0x3874, -0x3593, 0x3638, 0x3018, 0x3a56, 0x38a3, 0x2ad4, 0x3a25, 0x38d7, 0x3864, 0x31c1, 0x28d1, 0x39c8, 0x37d6, 0x2c7f, 0x3ba5, 0x34b8, 0x3bef, 0x3b83, 0x3ab5, 0x3062, 0x38bc, 0x399c, 0x2ce4, 0x2f2c, 0x39bf, 0x2ed1, 0x385f, 0x37e0, 0x35ee, 0x397d, 0x3b0c, 0x3049, -0x39d5, 0x322e, 0x3936, 0x3747, 0x2e15, 0x3b41, 0x3874, 0x3bd0, 0x2c04, 0x3800, 0x375b, 0x3b2d, 0x38d8, 0x3a51, 0x3406, 0x38da, 0x38ba, 0x3497, 0x382e, 0x35fc, 0x39d4, 0x3775, 0x3b1e, 0x3813, 0x3649, 0x31af, 0x37bb, 0x334a, 0x3a6e, 0x3284, 0x26e0, 0x2e01, -0x2ebb, 0x344b, 0x3821, 0x381a, 0x385a, 0x2534, 0x3635, 0x2a92, 0x3b8c, 0x31f0, 0x3947, 0x3ac7, 0x3743, 0x3924, 0x39e4, 0x358f, 0x2b62, 0x392c, 0x3955, 0x3341, 0x3676, 0x38ac, 0x3957, 0x335b, 0x2ca2, 0x39ff, 0x37cb, 0x341f, 0x3ac9, 0x3b6c, 0x2f14, 0x34c3, -0x3018, 0x3169, 0x355b, 0x3624, 0x31ed, 0x379e, 0x3268, 0x309b, 0x35db, 0x3872, 0x3bdb, 0x34c7, 0x3408, 0x3359, 0x3920, 0x331f, 0x3866, 0x3af0, 0x2a1a, 0x39e0, 0x3b14, 0x34fa, 0x2d18, 0x3963, 0x35e8, 0x2539, 0x38f5, 0x37b3, 0x378f, 0x31b5, 0x3a6c, 0x3685, -0x3a06, 0x318a, 0x2934, 0x33c1, 0x3be8, 0x375b, 0x3860, 0x3543, 0x3702, 0x3951, 0x3677, 0x37ff, 0x2e27, 0x2e3a, 0x340f, 0x3817, 0x2f04, 0x357e, 0x3a1d, 0x2dd6, 0x252a, 0x3945, 0x162a, 0x3b19, 0x3a53, 0x35d2, 0x3a5d, 0x3474, 0x38e9, 0x374b, 0x387c, 0x1f1a, -0x38ac, 0x3291, 0x3393, 0x3b53, 0x3169, 0x3bca, 0x2f1a, 0x3551, 0x38a3, 0x28e3, 0x369d, 0x34a1, 0x38a8, 0x34c3, 0x3841, 0x390d, 0x3b13, 0x3282, 0x3a29, 0x3a78, 0x2df3, 0x3a37, 0x35f4, 0x35a6, 0x38e8, 0x3328, 0x3beb, 0x390b, 0x32dc, 0x34dc, 0x396d, 0x3a78, -0x39ba, 0x3a06, 0x2cdd, 0x3bc3, 0x2d43, 0x2992, 0x3663, 0x3a68, 0x2c3e, 0x394e, 0x2c9f, 0x380e, 0x37f5, 0x3557, 0x2873, 0x390f, 0x39e7, 0x3939, 0x3669, 0x385c, 0x3a68, 0x32c4, 0x2b04, 0x2d6d, 0x39d3, 0x3895, 0x331d, 0x3b59, 0x3463, 0x2b6a, 0x31de, 0x3296, -0x3aae, 0x3bcd, 0x345a, 0x3897, 0x374b, 0x3bd4, 0x38a2, 0x357f, 0x3402, 0x3a0c, 0x3507, 0x3865, 0x3a54, 0x3878, 0x3859, 0x383e, 0x32b5, 0x34ea, 0x328d, 0x38b6, 0x3464, 0x2f5b, 0x35ff, 0x3817, 0x2f24, 0x3533, 0x3b21, 0x37ba, 0x3837, 0x2e34, 0x3bad, 0x34bc -}; \ No newline at end of file diff --git a/carfield/redmule/inc/y_2D.h b/carfield/redmule/inc/y_2D.h deleted file mode 100644 index 9484a10..0000000 --- a/carfield/redmule/inc/y_2D.h +++ /dev/null @@ -1,27 +0,0 @@ - /* Header file generated by RedMulE Golden Model */ -uint16_t y_inp_2D [32][32] = { -0x3150, 0x2dc1, 0x3033, 0x31f5, 0x3bb6, 0x3bff, 0x39f9, 0x3662, 0x3720, 0x351d, 0x384b, 0x3093, 0x3b9d, 0x35ad, 0x3695, 0x3466, 0x2300, 0x3445, 0x33ae, 0x3586, 0x38a3, 0x3bdb, 0x33a2, 0x379b, 0x3a0e, 0x38b0, 0x39ba, 0x379b, 0x39d3, 0x3a51, 0x3b30, 0x3794, -0x3b76, 0x3042, 0x38cc, 0x2dfc, 0x3b1a, 0x37fb, 0x38f7, 0x3824, 0x386f, 0x38c7, 0x36ee, 0x3a9c, 0x38d3, 0x2c67, 0x3a80, 0x2f30, 0x3328, 0x3721, 0x3790, 0x34e5, 0x3a6c, 0x3643, 0x3934, 0x3034, 0x38d4, 0x362e, 0x3b4b, 0x3408, 0x30c2, 0x370e, 0x3b31, 0x3b16, -0x3b6b, 0x39d4, 0x339c, 0x381e, 0x313e, 0x3671, 0x3ae2, 0x3479, 0x3940, 0x342d, 0x3925, 0x370a, 0x35d8, 0x2dad, 0x3888, 0x24b9, 0x375d, 0x34bd, 0x3243, 0x2ebb, 0x3970, 0x3a21, 0x3a07, 0x3877, 0x3888, 0x3569, 0x372d, 0x2ac1, 0x331e, 0x384d, 0x3996, 0x34a4, -0x35c1, 0x33a9, 0x21ed, 0x3a42, 0x388d, 0x34e4, 0x33c3, 0x34f9, 0x3a7b, 0x33fb, 0x2cdd, 0x3b0e, 0x333b, 0x3973, 0x34fc, 0x3771, 0x32ea, 0x2de4, 0x31a8, 0x3946, 0x3657, 0x3a4e, 0x36f6, 0x2829, 0x3ba2, 0x3bdc, 0x3bb3, 0x306c, 0x398d, 0x3a1f, 0x3991, 0x3846, -0x3547, 0x3292, 0x2e85, 0x31ed, 0x3979, 0x3a90, 0x28a4, 0x3bed, 0x36d8, 0x340e, 0x3b6a, 0x3ab6, 0x3824, 0x382b, 0x3ac3, 0x3811, 0x36d7, 0x3519, 0x3a92, 0x3a42, 0x29d1, 0x383a, 0x3a9b, 0x300e, 0x2cd3, 0x39cd, 0x3874, 0x3a07, 0x2eb1, 0x3b86, 0x3ad8, 0x3a5d, -0x3712, 0x284a, 0x38c1, 0x3bec, 0x39c0, 0x32cd, 0x3ad8, 0x3bce, 0x3817, 0x3896, 0x3aa7, 0x3870, 0x3996, 0x32cc, 0x3a4c, 0x3757, 0x3814, 0x3b65, 0x3acb, 0x376e, 0x34c0, 0x3609, 0x3bf0, 0x3b24, 0x3b29, 0x3848, 0x34b7, 0x398a, 0x220c, 0x3498, 0x3a8c, 0x3883, -0x38c4, 0x3af6, 0x3a42, 0x2dd6, 0x3147, 0x3717, 0x3a8e, 0x3af9, 0x3296, 0x38ef, 0x34fa, 0x3555, 0x3b29, 0x38de, 0x315e, 0x3773, 0x3b67, 0x3116, 0x38ec, 0x357c, 0x35d0, 0x2518, 0x3958, 0x2a03, 0x37d9, 0x3699, 0x3a1e, 0x3230, 0x3b13, 0x36d4, 0x3b2a, 0x39ad, -0x3b10, 0x351a, 0x3b97, 0x3326, 0x2b54, 0x3b7d, 0x386f, 0x373e, 0x37fa, 0x389b, 0x3b90, 0x3292, 0x3975, 0x38f3, 0x37f1, 0x3590, 0x3810, 0x2fd7, 0x3bf7, 0x3a5a, 0x3a1c, 0x34dd, 0x354c, 0x32f8, 0x3095, 0x321e, 0x39e0, 0x395c, 0x3717, 0x357f, 0x394a, 0x34b1, -0x3ba4, 0x380c, 0x3604, 0x2f50, 0x348d, 0x3828, 0x3a9f, 0x39ce, 0x32ca, 0x3906, 0x3ab2, 0x2ca5, 0x38c9, 0x362a, 0x34b2, 0x29dc, 0x3a36, 0x3052, 0x31b7, 0x3589, 0x387c, 0x3401, 0x3b22, 0x3ad6, 0x3ae8, 0x3238, 0x3494, 0x3502, 0x3717, 0x3a6c, 0x3229, 0x368c, -0x3056, 0x3a56, 0x3498, 0x39eb, 0x2864, 0x342d, 0x39e0, 0x34a1, 0x2b99, 0x3a04, 0x38ff, 0x328c, 0x34d9, 0x387d, 0x3a3c, 0x32e5, 0x39eb, 0x3984, 0x34dd, 0x38a7, 0x373f, 0x39b4, 0x3235, 0x2f58, 0x2f39, 0x3800, 0x3758, 0x3939, 0x39fc, 0x3a4b, 0x38bf, 0x30ee, -0x345e, 0x39c8, 0x3a6d, 0x3262, 0x3b81, 0x31dc, 0x3a15, 0x3bd0, 0x36af, 0x36de, 0x37d5, 0x39d7, 0x3ad3, 0x3ac1, 0x3109, 0x35ea, 0x31c6, 0x398d, 0x3987, 0x3a4a, 0x34d2, 0x2ed2, 0x35e6, 0x352c, 0x39eb, 0x3bd6, 0x3a5b, 0x39d1, 0x34aa, 0x3ade, 0x394b, 0x38a1, -0x2bed, 0x38de, 0x3811, 0x3813, 0x391a, 0x374b, 0x3829, 0x3725, 0x38f0, 0x3583, 0x3966, 0x3a7d, 0x375a, 0x38fe, 0x3696, 0x361c, 0x39a8, 0x35f0, 0x38e1, 0x3003, 0x3595, 0x316e, 0x3862, 0x3af8, 0x3af2, 0x34c8, 0x381d, 0x37d8, 0x3893, 0x3a9c, 0x3989, 0x308c, -0x30cc, 0x2538, 0x399d, 0x3919, 0x399e, 0x21cc, 0x38e9, 0x30f8, 0x3a20, 0x3b3c, 0x3990, 0x259c, 0x3143, 0x3080, 0x3967, 0x3afb, 0x3a1b, 0x3779, 0x2eeb, 0x39f3, 0x379a, 0x369c, 0x3985, 0x3a1b, 0x3ba6, 0x3a53, 0x28d5, 0x3881, 0x31d9, 0x3a34, 0x3bd9, 0x393a, -0x3601, 0x2c6e, 0x3636, 0x3298, 0x39bb, 0x3a08, 0x38db, 0x35ad, 0x3a09, 0x36a6, 0x3bc7, 0x3bac, 0x34ae, 0x3291, 0x290b, 0x3250, 0x2648, 0x333d, 0x2bf3, 0x34b1, 0x30e0, 0x351f, 0x3a74, 0x38dc, 0x3883, 0x2841, 0x35e1, 0x390d, 0x3a50, 0x3abd, 0x386d, 0x3bb7, -0x3b94, 0x36b7, 0x3a49, 0x332f, 0x3a1d, 0x354b, 0x3bab, 0x3346, 0x3417, 0x351e, 0x3b6d, 0x391a, 0x2db3, 0x3b1c, 0x3a4a, 0x37b7, 0x36cf, 0x3a56, 0x39c4, 0x3be9, 0x34f0, 0x39be, 0x3691, 0x1ba5, 0x3888, 0x3040, 0x3ae1, 0x3b9b, 0x398f, 0x3a49, 0x3a16, 0x38c0, -0x386c, 0x39ab, 0x37fa, 0x382c, 0x3a6f, 0x393f, 0x340d, 0x38ef, 0x39d1, 0x3845, 0x398f, 0x363e, 0x3687, 0x3052, 0x3a2b, 0x392c, 0x2f5c, 0x3412, 0x3a1f, 0x3b2f, 0x3bcc, 0x3a63, 0x3a89, 0x36e9, 0x3921, 0x3b80, 0x2dc0, 0x3a03, 0x3beb, 0x38d3, 0x36cb, 0x39a3, -0x3978, 0x3a88, 0x3ba4, 0x3561, 0x28c5, 0x33a0, 0x37be, 0x2c39, 0x30ee, 0x3782, 0x2c07, 0x354e, 0x3491, 0x3a92, 0x331a, 0x3b15, 0x32e1, 0x3839, 0x3afb, 0x36c2, 0x2fd0, 0x29ad, 0x3b2e, 0x39c1, 0x2a8c, 0x341a, 0x2f90, 0x395a, 0x3969, 0x37ea, 0x3a5c, 0x3b6d, -0x3971, 0x3a93, 0x304e, 0x3623, 0x3a22, 0x31ee, 0x29df, 0x2c93, 0x3a01, 0x3a62, 0x366c, 0x371d, 0x3af3, 0x2e08, 0x3ac0, 0x3642, 0x3a28, 0x368d, 0x2d3d, 0x36d9, 0x32c3, 0x373f, 0x36fe, 0x3487, 0x2c81, 0x3623, 0x3b59, 0x3a91, 0x350a, 0x34f4, 0x3b09, 0x2c25, -0x3b13, 0x325a, 0x379e, 0x3a7d, 0x34b1, 0x39d5, 0x2ba8, 0x322b, 0x3b5e, 0x37ab, 0x2e24, 0x3ba9, 0x3a3d, 0x34f7, 0x3ba1, 0x3877, 0x3071, 0x39fb, 0x3bbd, 0x3633, 0x3b36, 0x2daa, 0x3b9b, 0x3aa0, 0x395c, 0x3b8f, 0x38d5, 0x3ab0, 0x3a8f, 0x36c2, 0x3b1f, 0x3489, -0x2acc, 0x3845, 0x3715, 0x37d8, 0x3992, 0x3bff, 0x350e, 0x3ad7, 0x39b0, 0x35ac, 0x3287, 0x385f, 0x3bd4, 0x37a3, 0x3438, 0x39a5, 0x3bcf, 0x38c3, 0x34f6, 0x3ae3, 0x3b57, 0x39af, 0x35eb, 0x3bed, 0x34d4, 0x2a95, 0x3b13, 0x384e, 0x3a3b, 0x33da, 0x3bce, 0x3b99, -0x3559, 0x3335, 0x3a2e, 0x3123, 0x38db, 0x33d0, 0x3638, 0x3b17, 0x3a72, 0x3afc, 0x3936, 0x3838, 0x2b69, 0x3895, 0x3a1a, 0x3192, 0x39d5, 0x37a5, 0x2eb0, 0x2e8b, 0x329a, 0x3b90, 0x390a, 0x3a1e, 0x3847, 0x375d, 0x3873, 0x35e2, 0x3771, 0x30f5, 0x3231, 0x3bd7, -0x2bbc, 0x3ace, 0x31ad, 0x3a6b, 0x28a4, 0x3b48, 0x3ba3, 0x3a84, 0x3353, 0x39f6, 0x381f, 0x2dd6, 0x314c, 0x34af, 0x3929, 0x3921, 0x383b, 0x34b0, 0x3923, 0x32c9, 0x3ae7, 0x318f, 0x3480, 0x2ad8, 0x3042, 0x3a4c, 0x349d, 0x2c12, 0x3abb, 0x3a57, 0x3b0d, 0x3111, -0x3359, 0x3a84, 0x38f2, 0x368d, 0x2f4b, 0x3ba0, 0x395c, 0x3026, 0x3a15, 0x2a04, 0x326e, 0x3522, 0x31a2, 0x382f, 0x2ada, 0x3b7c, 0x2f80, 0x3af5, 0x2d35, 0x38fa, 0x39ab, 0x2c6d, 0x2e7a, 0x39f6, 0x31a4, 0x3a53, 0x358c, 0x3951, 0x3a4e, 0x3916, 0x2a3f, 0x3ae9, -0x3b03, 0x39f8, 0x39fe, 0x3a61, 0x39fb, 0x3704, 0x360d, 0x39a7, 0x37a9, 0x348f, 0x3a30, 0x3af5, 0x366f, 0x3b29, 0x3a6a, 0x33d5, 0x370a, 0x39cd, 0x3444, 0x3bea, 0x3b2b, 0x312e, 0x3b8e, 0x32cf, 0x3b79, 0x3302, 0x3bba, 0x3962, 0x3413, 0x37a1, 0x39e0, 0x3805 -}; \ No newline at end of file diff --git a/carfield/redmule/inc/y_input.h b/carfield/redmule/inc/y_input.h deleted file mode 100644 index 45a2375..0000000 --- a/carfield/redmule/inc/y_input.h +++ /dev/null @@ -1,27 +0,0 @@ - /* Header file generated by RedMulE Golden Model */ -uint16_t y_inp [768] = { -0x3150, 0x2dc1, 0x3033, 0x31f5, 0x3bb6, 0x3bff, 0x39f9, 0x3662, 0x3720, 0x351d, 0x384b, 0x3093, 0x3b9d, 0x35ad, 0x3695, 0x3466, 0x2300, 0x3445, 0x33ae, 0x3586, 0x38a3, 0x3bdb, 0x33a2, 0x379b, 0x3a0e, 0x38b0, 0x39ba, 0x379b, 0x39d3, 0x3a51, 0x3b30, 0x3794, -0x3b76, 0x3042, 0x38cc, 0x2dfc, 0x3b1a, 0x37fb, 0x38f7, 0x3824, 0x386f, 0x38c7, 0x36ee, 0x3a9c, 0x38d3, 0x2c67, 0x3a80, 0x2f30, 0x3328, 0x3721, 0x3790, 0x34e5, 0x3a6c, 0x3643, 0x3934, 0x3034, 0x38d4, 0x362e, 0x3b4b, 0x3408, 0x30c2, 0x370e, 0x3b31, 0x3b16, -0x3b6b, 0x39d4, 0x339c, 0x381e, 0x313e, 0x3671, 0x3ae2, 0x3479, 0x3940, 0x342d, 0x3925, 0x370a, 0x35d8, 0x2dad, 0x3888, 0x24b9, 0x375d, 0x34bd, 0x3243, 0x2ebb, 0x3970, 0x3a21, 0x3a07, 0x3877, 0x3888, 0x3569, 0x372d, 0x2ac1, 0x331e, 0x384d, 0x3996, 0x34a4, -0x35c1, 0x33a9, 0x21ed, 0x3a42, 0x388d, 0x34e4, 0x33c3, 0x34f9, 0x3a7b, 0x33fb, 0x2cdd, 0x3b0e, 0x333b, 0x3973, 0x34fc, 0x3771, 0x32ea, 0x2de4, 0x31a8, 0x3946, 0x3657, 0x3a4e, 0x36f6, 0x2829, 0x3ba2, 0x3bdc, 0x3bb3, 0x306c, 0x398d, 0x3a1f, 0x3991, 0x3846, -0x3547, 0x3292, 0x2e85, 0x31ed, 0x3979, 0x3a90, 0x28a4, 0x3bed, 0x36d8, 0x340e, 0x3b6a, 0x3ab6, 0x3824, 0x382b, 0x3ac3, 0x3811, 0x36d7, 0x3519, 0x3a92, 0x3a42, 0x29d1, 0x383a, 0x3a9b, 0x300e, 0x2cd3, 0x39cd, 0x3874, 0x3a07, 0x2eb1, 0x3b86, 0x3ad8, 0x3a5d, -0x3712, 0x284a, 0x38c1, 0x3bec, 0x39c0, 0x32cd, 0x3ad8, 0x3bce, 0x3817, 0x3896, 0x3aa7, 0x3870, 0x3996, 0x32cc, 0x3a4c, 0x3757, 0x3814, 0x3b65, 0x3acb, 0x376e, 0x34c0, 0x3609, 0x3bf0, 0x3b24, 0x3b29, 0x3848, 0x34b7, 0x398a, 0x220c, 0x3498, 0x3a8c, 0x3883, -0x38c4, 0x3af6, 0x3a42, 0x2dd6, 0x3147, 0x3717, 0x3a8e, 0x3af9, 0x3296, 0x38ef, 0x34fa, 0x3555, 0x3b29, 0x38de, 0x315e, 0x3773, 0x3b67, 0x3116, 0x38ec, 0x357c, 0x35d0, 0x2518, 0x3958, 0x2a03, 0x37d9, 0x3699, 0x3a1e, 0x3230, 0x3b13, 0x36d4, 0x3b2a, 0x39ad, -0x3b10, 0x351a, 0x3b97, 0x3326, 0x2b54, 0x3b7d, 0x386f, 0x373e, 0x37fa, 0x389b, 0x3b90, 0x3292, 0x3975, 0x38f3, 0x37f1, 0x3590, 0x3810, 0x2fd7, 0x3bf7, 0x3a5a, 0x3a1c, 0x34dd, 0x354c, 0x32f8, 0x3095, 0x321e, 0x39e0, 0x395c, 0x3717, 0x357f, 0x394a, 0x34b1, -0x3ba4, 0x380c, 0x3604, 0x2f50, 0x348d, 0x3828, 0x3a9f, 0x39ce, 0x32ca, 0x3906, 0x3ab2, 0x2ca5, 0x38c9, 0x362a, 0x34b2, 0x29dc, 0x3a36, 0x3052, 0x31b7, 0x3589, 0x387c, 0x3401, 0x3b22, 0x3ad6, 0x3ae8, 0x3238, 0x3494, 0x3502, 0x3717, 0x3a6c, 0x3229, 0x368c, -0x3056, 0x3a56, 0x3498, 0x39eb, 0x2864, 0x342d, 0x39e0, 0x34a1, 0x2b99, 0x3a04, 0x38ff, 0x328c, 0x34d9, 0x387d, 0x3a3c, 0x32e5, 0x39eb, 0x3984, 0x34dd, 0x38a7, 0x373f, 0x39b4, 0x3235, 0x2f58, 0x2f39, 0x3800, 0x3758, 0x3939, 0x39fc, 0x3a4b, 0x38bf, 0x30ee, -0x345e, 0x39c8, 0x3a6d, 0x3262, 0x3b81, 0x31dc, 0x3a15, 0x3bd0, 0x36af, 0x36de, 0x37d5, 0x39d7, 0x3ad3, 0x3ac1, 0x3109, 0x35ea, 0x31c6, 0x398d, 0x3987, 0x3a4a, 0x34d2, 0x2ed2, 0x35e6, 0x352c, 0x39eb, 0x3bd6, 0x3a5b, 0x39d1, 0x34aa, 0x3ade, 0x394b, 0x38a1, -0x2bed, 0x38de, 0x3811, 0x3813, 0x391a, 0x374b, 0x3829, 0x3725, 0x38f0, 0x3583, 0x3966, 0x3a7d, 0x375a, 0x38fe, 0x3696, 0x361c, 0x39a8, 0x35f0, 0x38e1, 0x3003, 0x3595, 0x316e, 0x3862, 0x3af8, 0x3af2, 0x34c8, 0x381d, 0x37d8, 0x3893, 0x3a9c, 0x3989, 0x308c, -0x30cc, 0x2538, 0x399d, 0x3919, 0x399e, 0x21cc, 0x38e9, 0x30f8, 0x3a20, 0x3b3c, 0x3990, 0x259c, 0x3143, 0x3080, 0x3967, 0x3afb, 0x3a1b, 0x3779, 0x2eeb, 0x39f3, 0x379a, 0x369c, 0x3985, 0x3a1b, 0x3ba6, 0x3a53, 0x28d5, 0x3881, 0x31d9, 0x3a34, 0x3bd9, 0x393a, -0x3601, 0x2c6e, 0x3636, 0x3298, 0x39bb, 0x3a08, 0x38db, 0x35ad, 0x3a09, 0x36a6, 0x3bc7, 0x3bac, 0x34ae, 0x3291, 0x290b, 0x3250, 0x2648, 0x333d, 0x2bf3, 0x34b1, 0x30e0, 0x351f, 0x3a74, 0x38dc, 0x3883, 0x2841, 0x35e1, 0x390d, 0x3a50, 0x3abd, 0x386d, 0x3bb7, -0x3b94, 0x36b7, 0x3a49, 0x332f, 0x3a1d, 0x354b, 0x3bab, 0x3346, 0x3417, 0x351e, 0x3b6d, 0x391a, 0x2db3, 0x3b1c, 0x3a4a, 0x37b7, 0x36cf, 0x3a56, 0x39c4, 0x3be9, 0x34f0, 0x39be, 0x3691, 0x1ba5, 0x3888, 0x3040, 0x3ae1, 0x3b9b, 0x398f, 0x3a49, 0x3a16, 0x38c0, -0x386c, 0x39ab, 0x37fa, 0x382c, 0x3a6f, 0x393f, 0x340d, 0x38ef, 0x39d1, 0x3845, 0x398f, 0x363e, 0x3687, 0x3052, 0x3a2b, 0x392c, 0x2f5c, 0x3412, 0x3a1f, 0x3b2f, 0x3bcc, 0x3a63, 0x3a89, 0x36e9, 0x3921, 0x3b80, 0x2dc0, 0x3a03, 0x3beb, 0x38d3, 0x36cb, 0x39a3, -0x3978, 0x3a88, 0x3ba4, 0x3561, 0x28c5, 0x33a0, 0x37be, 0x2c39, 0x30ee, 0x3782, 0x2c07, 0x354e, 0x3491, 0x3a92, 0x331a, 0x3b15, 0x32e1, 0x3839, 0x3afb, 0x36c2, 0x2fd0, 0x29ad, 0x3b2e, 0x39c1, 0x2a8c, 0x341a, 0x2f90, 0x395a, 0x3969, 0x37ea, 0x3a5c, 0x3b6d, -0x3971, 0x3a93, 0x304e, 0x3623, 0x3a22, 0x31ee, 0x29df, 0x2c93, 0x3a01, 0x3a62, 0x366c, 0x371d, 0x3af3, 0x2e08, 0x3ac0, 0x3642, 0x3a28, 0x368d, 0x2d3d, 0x36d9, 0x32c3, 0x373f, 0x36fe, 0x3487, 0x2c81, 0x3623, 0x3b59, 0x3a91, 0x350a, 0x34f4, 0x3b09, 0x2c25, -0x3b13, 0x325a, 0x379e, 0x3a7d, 0x34b1, 0x39d5, 0x2ba8, 0x322b, 0x3b5e, 0x37ab, 0x2e24, 0x3ba9, 0x3a3d, 0x34f7, 0x3ba1, 0x3877, 0x3071, 0x39fb, 0x3bbd, 0x3633, 0x3b36, 0x2daa, 0x3b9b, 0x3aa0, 0x395c, 0x3b8f, 0x38d5, 0x3ab0, 0x3a8f, 0x36c2, 0x3b1f, 0x3489, -0x2acc, 0x3845, 0x3715, 0x37d8, 0x3992, 0x3bff, 0x350e, 0x3ad7, 0x39b0, 0x35ac, 0x3287, 0x385f, 0x3bd4, 0x37a3, 0x3438, 0x39a5, 0x3bcf, 0x38c3, 0x34f6, 0x3ae3, 0x3b57, 0x39af, 0x35eb, 0x3bed, 0x34d4, 0x2a95, 0x3b13, 0x384e, 0x3a3b, 0x33da, 0x3bce, 0x3b99, -0x3559, 0x3335, 0x3a2e, 0x3123, 0x38db, 0x33d0, 0x3638, 0x3b17, 0x3a72, 0x3afc, 0x3936, 0x3838, 0x2b69, 0x3895, 0x3a1a, 0x3192, 0x39d5, 0x37a5, 0x2eb0, 0x2e8b, 0x329a, 0x3b90, 0x390a, 0x3a1e, 0x3847, 0x375d, 0x3873, 0x35e2, 0x3771, 0x30f5, 0x3231, 0x3bd7, -0x2bbc, 0x3ace, 0x31ad, 0x3a6b, 0x28a4, 0x3b48, 0x3ba3, 0x3a84, 0x3353, 0x39f6, 0x381f, 0x2dd6, 0x314c, 0x34af, 0x3929, 0x3921, 0x383b, 0x34b0, 0x3923, 0x32c9, 0x3ae7, 0x318f, 0x3480, 0x2ad8, 0x3042, 0x3a4c, 0x349d, 0x2c12, 0x3abb, 0x3a57, 0x3b0d, 0x3111, -0x3359, 0x3a84, 0x38f2, 0x368d, 0x2f4b, 0x3ba0, 0x395c, 0x3026, 0x3a15, 0x2a04, 0x326e, 0x3522, 0x31a2, 0x382f, 0x2ada, 0x3b7c, 0x2f80, 0x3af5, 0x2d35, 0x38fa, 0x39ab, 0x2c6d, 0x2e7a, 0x39f6, 0x31a4, 0x3a53, 0x358c, 0x3951, 0x3a4e, 0x3916, 0x2a3f, 0x3ae9, -0x3b03, 0x39f8, 0x39fe, 0x3a61, 0x39fb, 0x3704, 0x360d, 0x39a7, 0x37a9, 0x348f, 0x3a30, 0x3af5, 0x366f, 0x3b29, 0x3a6a, 0x33d5, 0x370a, 0x39cd, 0x3444, 0x3bea, 0x3b2b, 0x312e, 0x3b8e, 0x32cf, 0x3b79, 0x3302, 0x3bba, 0x3962, 0x3413, 0x37a1, 0x39e0, 0x3805 -}; \ No newline at end of file diff --git a/carfield/redmule/inc/z_2D.h b/carfield/redmule/inc/z_2D.h deleted file mode 100644 index aff808a..0000000 --- a/carfield/redmule/inc/z_2D.h +++ /dev/null @@ -1,27 +0,0 @@ - /* Header file generated by RedMulE Golden Model */ -uint16_t z_oup_2D [24][32] = { -0x4845, 0x4897, 0x4608, 0x4838, 0x4855, 0x487b, 0x4869, 0x4880, 0x46d1, 0x48b0, 0x48db, 0x483f, 0x48c9, 0x485f, 0x4881, 0x483a, 0x484b, 0x472c, 0x4762, 0x492b, 0x4822, 0x48fd, 0x488e, 0x492e, 0x483e, 0x484f, 0x49e8, 0x46d7, 0x484b, 0x489d, 0x490b, 0x47e9, -0x484f, 0x47d2, 0x44be, 0x4747, 0x47c7, 0x46c0, 0x4727, 0x48af, 0x46c5, 0x482d, 0x483d, 0x482e, 0x4897, 0x479f, 0x488b, 0x4749, 0x489a, 0x46a8, 0x46f2, 0x488b, 0x4891, 0x47e8, 0x4872, 0x483d, 0x4716, 0x46fd, 0x49b5, 0x46a0, 0x46e7, 0x47a4, 0x48a1, 0x4767, -0x4939, 0x4935, 0x4703, 0x48c1, 0x4863, 0x48bd, 0x4913, 0x48cf, 0x48b6, 0x48b8, 0x4946, 0x4920, 0x495e, 0x48e1, 0x4938, 0x48b2, 0x493a, 0x4882, 0x483b, 0x49d5, 0x4911, 0x4972, 0x496b, 0x49df, 0x48f2, 0x4888, 0x4a46, 0x4821, 0x48c1, 0x490c, 0x49b2, 0x48a3, -0x463a, 0x47b0, 0x44cb, 0x4762, 0x4765, 0x46b9, 0x466a, 0x4814, 0x4631, 0x4796, 0x4666, 0x474b, 0x4798, 0x4704, 0x4838, 0x4761, 0x47d3, 0x4590, 0x45ea, 0x48a2, 0x47f1, 0x4844, 0x484b, 0x4776, 0x47d6, 0x46d8, 0x48f3, 0x44d3, 0x46fa, 0x478d, 0x481e, 0x466e, -0x4827, 0x481e, 0x45a2, 0x4794, 0x4727, 0x4806, 0x475d, 0x48d5, 0x4708, 0x4828, 0x4862, 0x480d, 0x4895, 0x4832, 0x48bd, 0x47f1, 0x482a, 0x46a7, 0x47b1, 0x492d, 0x484d, 0x4884, 0x48dc, 0x485f, 0x476d, 0x480c, 0x48e9, 0x46d3, 0x4728, 0x4884, 0x48a0, 0x480e, -0x4862, 0x4813, 0x4675, 0x485a, 0x47e8, 0x4738, 0x4836, 0x4823, 0x46e7, 0x4821, 0x4822, 0x47b3, 0x4846, 0x4855, 0x4863, 0x4717, 0x4872, 0x47c1, 0x46d5, 0x488e, 0x47e2, 0x485f, 0x487c, 0x48b8, 0x481e, 0x4788, 0x48bd, 0x4677, 0x46c9, 0x47f8, 0x48fe, 0x47fc, -0x47a0, 0x47b2, 0x4588, 0x467e, 0x4662, 0x46c7, 0x46e8, 0x4812, 0x4536, 0x474e, 0x46c0, 0x468f, 0x481f, 0x4679, 0x46a1, 0x46e2, 0x4809, 0x4560, 0x4630, 0x47eb, 0x46b5, 0x4757, 0x4848, 0x477f, 0x46a6, 0x46d8, 0x4870, 0x459a, 0x4670, 0x4678, 0x47d2, 0x468c, -0x4762, 0x48c4, 0x46e3, 0x4791, 0x46b1, 0x486d, 0x47d0, 0x4867, 0x468d, 0x47f6, 0x48a5, 0x4756, 0x4857, 0x4854, 0x4866, 0x4838, 0x484d, 0x46ec, 0x47d2, 0x48f6, 0x484a, 0x4879, 0x4848, 0x483c, 0x471d, 0x4806, 0x48fa, 0x4730, 0x4768, 0x47b8, 0x4865, 0x46f9, -0x48a8, 0x4918, 0x46ca, 0x4867, 0x4800, 0x4862, 0x48d3, 0x4910, 0x474e, 0x4849, 0x48eb, 0x486b, 0x4966, 0x48c5, 0x48f4, 0x4830, 0x48f9, 0x4778, 0x481e, 0x499e, 0x48cf, 0x48f1, 0x4982, 0x4923, 0x487c, 0x47cf, 0x49ea, 0x4649, 0x4773, 0x495e, 0x48b2, 0x483f, -0x48a7, 0x4975, 0x4616, 0x481e, 0x481f, 0x4866, 0x48b6, 0x4864, 0x47dc, 0x4873, 0x485c, 0x487f, 0x4938, 0x491f, 0x490d, 0x48b6, 0x48f8, 0x48a1, 0x4859, 0x492d, 0x489c, 0x4915, 0x4899, 0x4887, 0x486c, 0x4859, 0x49ca, 0x471e, 0x4867, 0x4918, 0x48d3, 0x4827, -0x488b, 0x4998, 0x4704, 0x481d, 0x48b8, 0x4880, 0x4876, 0x4944, 0x470c, 0x48f2, 0x48b9, 0x489b, 0x4956, 0x48e5, 0x48d6, 0x48a5, 0x48dc, 0x4856, 0x484e, 0x49ab, 0x48e0, 0x490e, 0x48dd, 0x4945, 0x488b, 0x48dd, 0x4a32, 0x47ea, 0x4835, 0x4911, 0x4965, 0x4819, -0x460e, 0x481e, 0x452c, 0x4673, 0x475c, 0x4717, 0x46f6, 0x46d0, 0x4696, 0x46bc, 0x4726, 0x481e, 0x4763, 0x46ea, 0x46fe, 0x4758, 0x478b, 0x4627, 0x4704, 0x483f, 0x46ad, 0x47b1, 0x4792, 0x4816, 0x46f2, 0x4684, 0x4827, 0x45a8, 0x472f, 0x47a4, 0x4797, 0x462b, -0x483f, 0x48ab, 0x468f, 0x4863, 0x485a, 0x4766, 0x481d, 0x48cb, 0x47dc, 0x4903, 0x48fc, 0x4830, 0x48cc, 0x483e, 0x48ab, 0x4864, 0x4966, 0x4763, 0x4794, 0x499d, 0x488e, 0x488b, 0x48dc, 0x4960, 0x4854, 0x484c, 0x499c, 0x474c, 0x4826, 0x48bc, 0x4949, 0x4883, -0x489d, 0x4905, 0x4718, 0x481e, 0x48e3, 0x48f4, 0x48c1, 0x4904, 0x47e8, 0x48b3, 0x4892, 0x48d4, 0x48ff, 0x4894, 0x48d5, 0x4886, 0x48fa, 0x4803, 0x47d2, 0x492e, 0x4870, 0x48b2, 0x48e5, 0x492b, 0x487b, 0x4785, 0x49e3, 0x471d, 0x4837, 0x48bf, 0x489b, 0x48c4, -0x475c, 0x4871, 0x464a, 0x4811, 0x47af, 0x471c, 0x4817, 0x4817, 0x463b, 0x484e, 0x477f, 0x464f, 0x4704, 0x487c, 0x47a3, 0x4725, 0x4853, 0x462a, 0x465a, 0x4860, 0x4736, 0x4880, 0x47e1, 0x482b, 0x4811, 0x46c0, 0x48dc, 0x475d, 0x4668, 0x4806, 0x4893, 0x46f4, -0x4858, 0x4959, 0x463d, 0x487b, 0x480f, 0x484e, 0x48c0, 0x48a6, 0x4847, 0x4894, 0x48a0, 0x484a, 0x491e, 0x48f4, 0x48fc, 0x48b5, 0x48ce, 0x47d2, 0x47db, 0x497f, 0x4955, 0x4939, 0x48a7, 0x48ce, 0x4890, 0x4884, 0x49d6, 0x4763, 0x486e, 0x4922, 0x48f4, 0x48c3, -0x47ec, 0x491c, 0x4698, 0x4783, 0x4715, 0x4754, 0x4745, 0x4752, 0x472f, 0x4832, 0x4817, 0x4809, 0x47f8, 0x48c3, 0x47e6, 0x4800, 0x48b6, 0x4730, 0x480a, 0x48cb, 0x479e, 0x488e, 0x47c2, 0x488e, 0x472f, 0x47ee, 0x489d, 0x4744, 0x4755, 0x4851, 0x4846, 0x47d3, -0x4838, 0x48a0, 0x4634, 0x4762, 0x4786, 0x4806, 0x47e3, 0x482d, 0x4726, 0x486c, 0x47b7, 0x4803, 0x48ac, 0x4814, 0x48e0, 0x4839, 0x4827, 0x4750, 0x46f2, 0x48c5, 0x483f, 0x4886, 0x48ad, 0x4856, 0x47e8, 0x47a9, 0x4937, 0x4743, 0x46d0, 0x481f, 0x484c, 0x4804, -0x47fd, 0x481f, 0x456d, 0x4813, 0x474d, 0x4807, 0x4688, 0x480e, 0x46e8, 0x4810, 0x469f, 0x4799, 0x4853, 0x478f, 0x47f2, 0x4824, 0x47d0, 0x471f, 0x46da, 0x485f, 0x4813, 0x481c, 0x482e, 0x4863, 0x4786, 0x480b, 0x48c9, 0x46b8, 0x475a, 0x46e2, 0x4852, 0x46c5, -0x45af, 0x4802, 0x4466, 0x46c2, 0x465d, 0x4743, 0x46b7, 0x47ba, 0x4636, 0x46c3, 0x4677, 0x4784, 0x485a, 0x47c2, 0x46dc, 0x46ac, 0x47de, 0x460e, 0x465f, 0x4834, 0x47f4, 0x4769, 0x46fc, 0x4810, 0x45fd, 0x45ea, 0x48d0, 0x45b5, 0x4704, 0x4783, 0x4830, 0x46c4, -0x4759, 0x47c7, 0x453d, 0x45b0, 0x4741, 0x4702, 0x4736, 0x4793, 0x461b, 0x47ba, 0x470b, 0x46dd, 0x4657, 0x470b, 0x470d, 0x4710, 0x486c, 0x468f, 0x45c3, 0x46ba, 0x479d, 0x483b, 0x46c9, 0x4774, 0x46a9, 0x46a7, 0x4833, 0x4606, 0x4690, 0x46a9, 0x46f5, 0x46a7, -0x47ac, 0x48bb, 0x452c, 0x4803, 0x470f, 0x4824, 0x47d5, 0x48cb, 0x4707, 0x484a, 0x4832, 0x4797, 0x4851, 0x482c, 0x487a, 0x4877, 0x4891, 0x465d, 0x47f4, 0x48ce, 0x4898, 0x4899, 0x484e, 0x486a, 0x47ac, 0x47f0, 0x493e, 0x4611, 0x47e2, 0x489e, 0x488c, 0x46af, -0x4665, 0x4836, 0x45e4, 0x46b6, 0x46a1, 0x46b9, 0x46c8, 0x46dd, 0x4658, 0x474b, 0x467b, 0x4777, 0x4769, 0x4798, 0x4785, 0x475e, 0x472a, 0x4656, 0x45fb, 0x4881, 0x46fc, 0x472d, 0x476e, 0x47a3, 0x465d, 0x46ca, 0x4855, 0x4500, 0x464f, 0x479a, 0x46c3, 0x4738, -0x481e, 0x486c, 0x4659, 0x4801, 0x4756, 0x477a, 0x47d5, 0x487b, 0x4706, 0x4808, 0x484f, 0x4838, 0x4870, 0x4863, 0x48d3, 0x4806, 0x4865, 0x4771, 0x46be, 0x494c, 0x4915, 0x484c, 0x4900, 0x4862, 0x481a, 0x46e8, 0x4974, 0x46a0, 0x4775, 0x483d, 0x487c, 0x480e -}; \ No newline at end of file diff --git a/carfield/redmule/inc/z_output.h b/carfield/redmule/inc/z_output.h deleted file mode 100644 index 96c7e5f..0000000 --- a/carfield/redmule/inc/z_output.h +++ /dev/null @@ -1,27 +0,0 @@ - /* Header file generated by RedMulE Golden Model */ -uint16_t z_oup [768] = { -0x4845, 0x4897, 0x4608, 0x4838, 0x4855, 0x487b, 0x4869, 0x4880, 0x46d1, 0x48b0, 0x48db, 0x483f, 0x48c9, 0x485f, 0x4881, 0x483a, 0x484b, 0x472c, 0x4762, 0x492b, 0x4822, 0x48fd, 0x488e, 0x492e, 0x483e, 0x484f, 0x49e8, 0x46d7, 0x484b, 0x489d, 0x490b, 0x47e9, -0x484f, 0x47d2, 0x44be, 0x4747, 0x47c7, 0x46c0, 0x4727, 0x48af, 0x46c5, 0x482d, 0x483d, 0x482e, 0x4897, 0x479f, 0x488b, 0x4749, 0x489a, 0x46a8, 0x46f2, 0x488b, 0x4891, 0x47e8, 0x4872, 0x483d, 0x4716, 0x46fd, 0x49b5, 0x46a0, 0x46e7, 0x47a4, 0x48a1, 0x4767, -0x4939, 0x4935, 0x4703, 0x48c1, 0x4863, 0x48bd, 0x4913, 0x48cf, 0x48b6, 0x48b8, 0x4946, 0x4920, 0x495e, 0x48e1, 0x4938, 0x48b2, 0x493a, 0x4882, 0x483b, 0x49d5, 0x4911, 0x4972, 0x496b, 0x49df, 0x48f2, 0x4888, 0x4a46, 0x4821, 0x48c1, 0x490c, 0x49b2, 0x48a3, -0x463a, 0x47b0, 0x44cb, 0x4762, 0x4765, 0x46b9, 0x466a, 0x4814, 0x4631, 0x4796, 0x4666, 0x474b, 0x4798, 0x4704, 0x4838, 0x4761, 0x47d3, 0x4590, 0x45ea, 0x48a2, 0x47f1, 0x4844, 0x484b, 0x4776, 0x47d6, 0x46d8, 0x48f3, 0x44d3, 0x46fa, 0x478d, 0x481e, 0x466e, -0x4827, 0x481e, 0x45a2, 0x4794, 0x4727, 0x4806, 0x475d, 0x48d5, 0x4708, 0x4828, 0x4862, 0x480d, 0x4895, 0x4832, 0x48bd, 0x47f1, 0x482a, 0x46a7, 0x47b1, 0x492d, 0x484d, 0x4884, 0x48dc, 0x485f, 0x476d, 0x480c, 0x48e9, 0x46d3, 0x4728, 0x4884, 0x48a0, 0x480e, -0x4862, 0x4813, 0x4675, 0x485a, 0x47e8, 0x4738, 0x4836, 0x4823, 0x46e7, 0x4821, 0x4822, 0x47b3, 0x4846, 0x4855, 0x4863, 0x4717, 0x4872, 0x47c1, 0x46d5, 0x488e, 0x47e2, 0x485f, 0x487c, 0x48b8, 0x481e, 0x4788, 0x48bd, 0x4677, 0x46c9, 0x47f8, 0x48fe, 0x47fc, -0x47a0, 0x47b2, 0x4588, 0x467e, 0x4662, 0x46c7, 0x46e8, 0x4812, 0x4536, 0x474e, 0x46c0, 0x468f, 0x481f, 0x4679, 0x46a1, 0x46e2, 0x4809, 0x4560, 0x4630, 0x47eb, 0x46b5, 0x4757, 0x4848, 0x477f, 0x46a6, 0x46d8, 0x4870, 0x459a, 0x4670, 0x4678, 0x47d2, 0x468c, -0x4762, 0x48c4, 0x46e3, 0x4791, 0x46b1, 0x486d, 0x47d0, 0x4867, 0x468d, 0x47f6, 0x48a5, 0x4756, 0x4857, 0x4854, 0x4866, 0x4838, 0x484d, 0x46ec, 0x47d2, 0x48f6, 0x484a, 0x4879, 0x4848, 0x483c, 0x471d, 0x4806, 0x48fa, 0x4730, 0x4768, 0x47b8, 0x4865, 0x46f9, -0x48a8, 0x4918, 0x46ca, 0x4867, 0x4800, 0x4862, 0x48d3, 0x4910, 0x474e, 0x4849, 0x48eb, 0x486b, 0x4966, 0x48c5, 0x48f4, 0x4830, 0x48f9, 0x4778, 0x481e, 0x499e, 0x48cf, 0x48f1, 0x4982, 0x4923, 0x487c, 0x47cf, 0x49ea, 0x4649, 0x4773, 0x495e, 0x48b2, 0x483f, -0x48a7, 0x4975, 0x4616, 0x481e, 0x481f, 0x4866, 0x48b6, 0x4864, 0x47dc, 0x4873, 0x485c, 0x487f, 0x4938, 0x491f, 0x490d, 0x48b6, 0x48f8, 0x48a1, 0x4859, 0x492d, 0x489c, 0x4915, 0x4899, 0x4887, 0x486c, 0x4859, 0x49ca, 0x471e, 0x4867, 0x4918, 0x48d3, 0x4827, -0x488b, 0x4998, 0x4704, 0x481d, 0x48b8, 0x4880, 0x4876, 0x4944, 0x470c, 0x48f2, 0x48b9, 0x489b, 0x4956, 0x48e5, 0x48d6, 0x48a5, 0x48dc, 0x4856, 0x484e, 0x49ab, 0x48e0, 0x490e, 0x48dd, 0x4945, 0x488b, 0x48dd, 0x4a32, 0x47ea, 0x4835, 0x4911, 0x4965, 0x4819, -0x460e, 0x481e, 0x452c, 0x4673, 0x475c, 0x4717, 0x46f6, 0x46d0, 0x4696, 0x46bc, 0x4726, 0x481e, 0x4763, 0x46ea, 0x46fe, 0x4758, 0x478b, 0x4627, 0x4704, 0x483f, 0x46ad, 0x47b1, 0x4792, 0x4816, 0x46f2, 0x4684, 0x4827, 0x45a8, 0x472f, 0x47a4, 0x4797, 0x462b, -0x483f, 0x48ab, 0x468f, 0x4863, 0x485a, 0x4766, 0x481d, 0x48cb, 0x47dc, 0x4903, 0x48fc, 0x4830, 0x48cc, 0x483e, 0x48ab, 0x4864, 0x4966, 0x4763, 0x4794, 0x499d, 0x488e, 0x488b, 0x48dc, 0x4960, 0x4854, 0x484c, 0x499c, 0x474c, 0x4826, 0x48bc, 0x4949, 0x4883, -0x489d, 0x4905, 0x4718, 0x481e, 0x48e3, 0x48f4, 0x48c1, 0x4904, 0x47e8, 0x48b3, 0x4892, 0x48d4, 0x48ff, 0x4894, 0x48d5, 0x4886, 0x48fa, 0x4803, 0x47d2, 0x492e, 0x4870, 0x48b2, 0x48e5, 0x492b, 0x487b, 0x4785, 0x49e3, 0x471d, 0x4837, 0x48bf, 0x489b, 0x48c4, -0x475c, 0x4871, 0x464a, 0x4811, 0x47af, 0x471c, 0x4817, 0x4817, 0x463b, 0x484e, 0x477f, 0x464f, 0x4704, 0x487c, 0x47a3, 0x4725, 0x4853, 0x462a, 0x465a, 0x4860, 0x4736, 0x4880, 0x47e1, 0x482b, 0x4811, 0x46c0, 0x48dc, 0x475d, 0x4668, 0x4806, 0x4893, 0x46f4, -0x4858, 0x4959, 0x463d, 0x487b, 0x480f, 0x484e, 0x48c0, 0x48a6, 0x4847, 0x4894, 0x48a0, 0x484a, 0x491e, 0x48f4, 0x48fc, 0x48b5, 0x48ce, 0x47d2, 0x47db, 0x497f, 0x4955, 0x4939, 0x48a7, 0x48ce, 0x4890, 0x4884, 0x49d6, 0x4763, 0x486e, 0x4922, 0x48f4, 0x48c3, -0x47ec, 0x491c, 0x4698, 0x4783, 0x4715, 0x4754, 0x4745, 0x4752, 0x472f, 0x4832, 0x4817, 0x4809, 0x47f8, 0x48c3, 0x47e6, 0x4800, 0x48b6, 0x4730, 0x480a, 0x48cb, 0x479e, 0x488e, 0x47c2, 0x488e, 0x472f, 0x47ee, 0x489d, 0x4744, 0x4755, 0x4851, 0x4846, 0x47d3, -0x4838, 0x48a0, 0x4634, 0x4762, 0x4786, 0x4806, 0x47e3, 0x482d, 0x4726, 0x486c, 0x47b7, 0x4803, 0x48ac, 0x4814, 0x48e0, 0x4839, 0x4827, 0x4750, 0x46f2, 0x48c5, 0x483f, 0x4886, 0x48ad, 0x4856, 0x47e8, 0x47a9, 0x4937, 0x4743, 0x46d0, 0x481f, 0x484c, 0x4804, -0x47fd, 0x481f, 0x456d, 0x4813, 0x474d, 0x4807, 0x4688, 0x480e, 0x46e8, 0x4810, 0x469f, 0x4799, 0x4853, 0x478f, 0x47f2, 0x4824, 0x47d0, 0x471f, 0x46da, 0x485f, 0x4813, 0x481c, 0x482e, 0x4863, 0x4786, 0x480b, 0x48c9, 0x46b8, 0x475a, 0x46e2, 0x4852, 0x46c5, -0x45af, 0x4802, 0x4466, 0x46c2, 0x465d, 0x4743, 0x46b7, 0x47ba, 0x4636, 0x46c3, 0x4677, 0x4784, 0x485a, 0x47c2, 0x46dc, 0x46ac, 0x47de, 0x460e, 0x465f, 0x4834, 0x47f4, 0x4769, 0x46fc, 0x4810, 0x45fd, 0x45ea, 0x48d0, 0x45b5, 0x4704, 0x4783, 0x4830, 0x46c4, -0x4759, 0x47c7, 0x453d, 0x45b0, 0x4741, 0x4702, 0x4736, 0x4793, 0x461b, 0x47ba, 0x470b, 0x46dd, 0x4657, 0x470b, 0x470d, 0x4710, 0x486c, 0x468f, 0x45c3, 0x46ba, 0x479d, 0x483b, 0x46c9, 0x4774, 0x46a9, 0x46a7, 0x4833, 0x4606, 0x4690, 0x46a9, 0x46f5, 0x46a7, -0x47ac, 0x48bb, 0x452c, 0x4803, 0x470f, 0x4824, 0x47d5, 0x48cb, 0x4707, 0x484a, 0x4832, 0x4797, 0x4851, 0x482c, 0x487a, 0x4877, 0x4891, 0x465d, 0x47f4, 0x48ce, 0x4898, 0x4899, 0x484e, 0x486a, 0x47ac, 0x47f0, 0x493e, 0x4611, 0x47e2, 0x489e, 0x488c, 0x46af, -0x4665, 0x4836, 0x45e4, 0x46b6, 0x46a1, 0x46b9, 0x46c8, 0x46dd, 0x4658, 0x474b, 0x467b, 0x4777, 0x4769, 0x4798, 0x4785, 0x475e, 0x472a, 0x4656, 0x45fb, 0x4881, 0x46fc, 0x472d, 0x476e, 0x47a3, 0x465d, 0x46ca, 0x4855, 0x4500, 0x464f, 0x479a, 0x46c3, 0x4738, -0x481e, 0x486c, 0x4659, 0x4801, 0x4756, 0x477a, 0x47d5, 0x487b, 0x4706, 0x4808, 0x484f, 0x4838, 0x4870, 0x4863, 0x48d3, 0x4806, 0x4865, 0x4771, 0x46be, 0x494c, 0x4915, 0x484c, 0x4900, 0x4862, 0x481a, 0x46e8, 0x4974, 0x46a0, 0x4775, 0x483d, 0x487c, 0x480e -}; \ No newline at end of file diff --git a/carfield/redmule/redmule.c b/carfield/redmule/redmule.c deleted file mode 100644 index 992e223..0000000 --- a/carfield/redmule/redmule.c +++ /dev/null @@ -1,112 +0,0 @@ -/* - * Copyright (C) 2022-2023 ETH Zurich and University of Bologna - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * SPDX-License-Identifier: Apache-2.0 - * - * Author: Yvan Tortorella - * - * RedMulE SW test - */ - -#include -#include "stdio.h" -#include "archi_redmule.h" -#include "hal_redmule.h" -#include "pulp.h" - -int main() { - - volatile int errors = 0; - - if(get_core_id() == 0){ - - uint16_t m_size = M_SIZE; - uint16_t n_size = N_SIZE; - uint16_t k_size = K_SIZE; - - uint8_t *x_ext = x_inp; - uint8_t *w_ext = w_inp; - uint8_t *y_ext = y_inp; - uint8_t *z_ext = z_oup; - - uint8_t volatile *x = (uint8_t volatile *) pi_l1_malloc(0, (2*m_size*n_size)); - uint8_t volatile *w = (uint8_t volatile *) pi_l1_malloc(0, (2*n_size*k_size)); - uint8_t volatile *y = (uint8_t volatile *) pi_l1_malloc(0, (2*m_size*k_size)); - - #ifdef USE_NO_DMA - generate_test_data16((int) x, (int) w, (int) y, (int) m_size, (int) n_size, (int) k_size); - #else - volatile unsigned int dma_id = 0; - dma_id = mchan_alloc(); - mchan_transfer((unsigned int) 2*(2*m_size*n_size), - (unsigned int) x_ext, - (unsigned int) x ); - mchan_barrier(dma_id); - mchan_free(dma_id); - - dma_id = mchan_alloc(); - mchan_transfer((unsigned int) 2*(2*n_size*k_size), - (unsigned int) w_ext, - (unsigned int) w ); - mchan_barrier(dma_id); - mchan_free(dma_id); - - dma_id = mchan_alloc(); - mchan_transfer((unsigned int) 2*(2*m_size*k_size), - (unsigned int) y_ext, - (unsigned int) y ); - mchan_barrier(dma_id); - #endif - - int gold_sum = 0, check_sum = 0; - int i,j; - - int offload_id_tmp, offload_id; - - // Enable RedMulE - hwpe_cg_enable(); - - hwpe_soft_clear(); - - // redmule_cfg ((unsigned int) x, - // (unsigned int) w, - // (unsigned int) y, - // m_size, n_size, k_size, - // (uint8_t) GEMM, - // (uint8_t) Float16); - redmule_x_add_set ((unsigned int) x); - redmule_w_add_set ((unsigned int) w); - redmule_y_add_set ((unsigned int) y); - redmule_z_add_set ((unsigned int) y); - redmule_cfg (m_size, n_size, k_size, gemm_ops); - - // Start RedMulE operation - hwpe_trigger_job(); - - // Wait for end of computation - redmule_evt_wait(); - - // Disable RedMulE - hwpe_cg_disable(); - - errors = redmule_compare16((int) y, (int) m_size, (int) k_size); - - *(int *) 0x1A1040A0 = errors; - - printf ("Terminated test with %d errors. See you!\n", errors); - - } - synch_barrier(); - return errors; -} From 1601f5698d6255b7dfcde9e9ebf475cd259daf07 Mon Sep 17 00:00:00 2001 From: Riccardo Tedeschi Date: Wed, 27 Mar 2024 14:58:22 +0100 Subject: [PATCH 28/71] Update carfield.yaml --- carfield.yaml | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/carfield.yaml b/carfield.yaml index 2055dcc..751550e 100644 --- a/carfield.yaml +++ b/carfield.yaml @@ -1,16 +1,19 @@ carfield: parMatrixMul8: - path: ./carfield/parMatrixMul8 #ok + path: ./carfield/parMatrixMul8 command: make clean all run parMatrixMul16: - path: ./carfield/parMatrixMul16 #ok + path: ./carfield/parMatrixMul16 command: make clean all run parMatrixMul32: - path: ./carfield/parMatrixMul32 #ok + path: ./carfield/parMatrixMul32 command: make clean all run dmr_matmul: - path: ./carfield/dmr_matmul #ok + path: ./carfield/dmr_matmul command: make clean all run redmule: - path: ./carfield/redmule #ok + path: ./carfield/redmule + command: make clean all run + neureka: + path: ./carfield/neureka command: make clean all run \ No newline at end of file From 2329b5a21c229da79b79adbf1b62a2cb28b5440e Mon Sep 17 00:00:00 2001 From: Riccardo Tedeschi Date: Fri, 29 Mar 2024 10:59:35 +0100 Subject: [PATCH 29/71] Update astral target --- astral.yaml | 15 +- astral/neureka | 1 + astral/redmule | 1 + astral/redmule/Makefile | 9 - astral/redmule/archi_redmule.h | 164 ---------- astral/redmule/hal_redmule.h | 527 -------------------------------- astral/redmule/inc/golden.h | 387 ----------------------- astral/redmule/inc/tensor_dim.h | 13 - astral/redmule/inc/w_2D.h | 35 --- astral/redmule/inc/w_input.h | 35 --- astral/redmule/inc/x_2D.h | 27 -- astral/redmule/inc/x_input.h | 27 -- astral/redmule/inc/y_2D.h | 27 -- astral/redmule/inc/y_input.h | 27 -- astral/redmule/inc/z_2D.h | 27 -- astral/redmule/inc/z_output.h | 27 -- astral/redmule/redmule.c | 112 ------- 17 files changed, 11 insertions(+), 1450 deletions(-) create mode 120000 astral/neureka create mode 120000 astral/redmule delete mode 100644 astral/redmule/Makefile delete mode 100644 astral/redmule/archi_redmule.h delete mode 100644 astral/redmule/hal_redmule.h delete mode 100644 astral/redmule/inc/golden.h delete mode 100644 astral/redmule/inc/tensor_dim.h delete mode 100644 astral/redmule/inc/w_2D.h delete mode 100644 astral/redmule/inc/w_input.h delete mode 100644 astral/redmule/inc/x_2D.h delete mode 100644 astral/redmule/inc/x_input.h delete mode 100644 astral/redmule/inc/y_2D.h delete mode 100644 astral/redmule/inc/y_input.h delete mode 100644 astral/redmule/inc/z_2D.h delete mode 100644 astral/redmule/inc/z_output.h delete mode 100644 astral/redmule/redmule.c diff --git a/astral.yaml b/astral.yaml index cc65374..d8acd6c 100644 --- a/astral.yaml +++ b/astral.yaml @@ -1,16 +1,19 @@ -carfield: +astral: parMatrixMul8: - path: ./astral/parMatrixMul8 #ok + path: ./astral/parMatrixMul8 command: make clean all run parMatrixMul16: - path: ./astral/parMatrixMul16 #ok + path: ./astral/parMatrixMul16 command: make clean all run parMatrixMul32: - path: ./astral/parMatrixMul32 #ok + path: ./astral/parMatrixMul32 command: make clean all run dmr_matmul: - path: ./astral/dmr_matmul #ok + path: ./astral/dmr_matmul command: make clean all run redmule: - path: ./astral/redmule #ok + path: ./astral/redmule + command: make clean all run + neureka: + path: ./astral/neureka command: make clean all run \ No newline at end of file diff --git a/astral/neureka b/astral/neureka new file mode 120000 index 0000000..98cb979 --- /dev/null +++ b/astral/neureka @@ -0,0 +1 @@ +../hwpe/neureka/ \ No newline at end of file diff --git a/astral/redmule b/astral/redmule new file mode 120000 index 0000000..bd0da93 --- /dev/null +++ b/astral/redmule @@ -0,0 +1 @@ +../hwpe/redmule/ \ No newline at end of file diff --git a/astral/redmule/Makefile b/astral/redmule/Makefile deleted file mode 100644 index c498417..0000000 --- a/astral/redmule/Makefile +++ /dev/null @@ -1,9 +0,0 @@ -PULP_APP = test -PULP_APP_SRCS = redmule.c -PULP_CFLAGS = -O3 - -ifeq ($(use_no_dma),1) - PULP_CFLAGS += -DUSE_NO_DMA -endif - -include $(PULP_SDK_HOME)/install/rules/pulp.mk diff --git a/astral/redmule/archi_redmule.h b/astral/redmule/archi_redmule.h deleted file mode 100644 index 9222d63..0000000 --- a/astral/redmule/archi_redmule.h +++ /dev/null @@ -1,164 +0,0 @@ -/* - * Copyright (C) 2022-2023 ETH Zurich and University of Bologna - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * SPDX-License-Identifier: Apache-2.0 - * - * Author: Yvan Tortorella - * - * High-level architecture of RedMulE - * - */ - -#ifndef __ARCHI_REDMULE_H__ -#define __ARCHI_REDMULE_H__ - -/* - * |========================================================================| - * || || - * ||Control and generic configuration register layout || - * |========================================================================| - * || # reg | offset | bits | bitmask || content || - * ||-------+----------+---------+--------------++-------------------------|| - * || 0 | 0x0000 | 31: 0 | 0xFFFFFFFF || TRIGGER || - * || 1 | 0x0004 | 31: 0 | 0xFFFFFFFF || ACQUIRE || - * || 2 | 0x0008 | 31: 0 | 0xFFFFFFFF || EVT_ENABLE || - * || 3 | 0x000c | 31: 0 | 0xFFFFFFFF || STATUS || - * || 4 | 0x0010 | 31: 0 | 0xFFFFFFFF || RUNNING_JOB || - * || 5 | 0x0014 | 31: 0 | 0xFFFFFFFF || SOFT_CLEAR || - * |========================================================================| - * || || - * ||Job-dependent registers layout || - * |========================================================================| - * || # reg | offset | bits | bitmask || content || - * ||-------+----------+---------+--------------++-------------------------|| - * || 0 | 0x0040 | 31: 0 | 0xFFFFFFFF || X_ADDR || - * ||-------+----------+---------+--------------++-------------------------|| - * || 1 | 0x0044 | 31: 0 | 0xFFFFFFFF || W_ADDR || - * ||-------+----------+---------+--------------++-------------------------|| - * || 2 | 0x0048 | 31: 0 | 0xFFFFFFFF || Z_ADDR || - * ||-------+----------+---------+--------------++-------------------------|| - * || 3 | 0x004C | | || Matrix Config 0 Reg || - * || | | 31:16 | 0xFFFF0000 || K Size (W Columns) || - * || | | 15: 0 | 0x0000FFFF || M Size (X Rows) || - * ||-------+----------+---------+--------------++-------------------------|| - * || 4 | 0x0050 | | || Matrix Config 1 Reg || - * || | | 31:16 | 0xFFFFFFFF || N Size (X Cols/W Rows) || - * ||-------+----------+---------+--------------++-------------------------|| - * || 5 | 0x0054 | | || Matrix Arithmetic Reg || - * || | | 12:10 | 0x00001C00 || Operation selection || - * || | | 9: 7 | 0x00000380 || Input/Output format || - * |========================================================================| - * - */ - -/* PULP Cluster Archi defines */ -#define ARCHI_CLUST_CTRL_BASE 0x50200000 -#define ARCHI_CLUST_HWPE_BASE 0x50201000 -#define DMA_COMMAND_QUEUE 0x50204400 -#define DMA_STATUS_REGISTER 0x50204404 -#define ARCHI_CL_HWPE_EVT0 12 -#define ARCHI_CL_HWPE_EVT1 13 -#define FC_DMA_EVENT 8 -#define CL_DMA_EVENT 22 -#define CLUST_CTRL_HWPE_EN 0x18 -#define CLUST_CTRL_HWPE_EN_MASK 0x800 -#define __builtin_bitinsert(a,b,c,d) (a | (((b << (32-c)) >> (32-c)) << d)) - -// RedMulE architecture -#define ADDR_WIDTH 32 -#define DATA_WIDTH 256 -#define REDMULE_FMT 16 -#define ARRAY_HEIGHT 4 -#define PIPE_REGS 3 -#define ARRAY_WIDTH 12 /* Superior limit is ARRAY_HEIGHT*PIPE_REGS */ - -// Commands -#define REDMULE_TRIGGER 0x00 -#define REDMULE_ACQUIRE 0x04 -#define REDMULE_FINISHED 0x08 -#define REDMULE_STATUS 0x0C -#define REDMULE_RUNNING_JOB 0x10 -#define REDMULE_SOFT_CLEAR 0x14 - -// Registers -#define REDMULE_REG_OFFS 0x40 -// #define REDMULE_REG_X_PTR 0x00 -// #define REDMULE_REG_W_PTR 0x04 -// #define REDMULE_REG_Z_PTR 0x08 -// #define REDMULE_MCFG0_PTR 0x0C -// #define REDMULE_MCFG1_PTR 0x10 -// #define REDMULE_ARITH_PTR 0x14 -#define REDMULE_REG_X_PTR 0x00 -#define REDMULE_REG_W_PTR 0x04 -#define REDMULE_REG_Y_PTR 0x08 -#define REDMULE_REG_Z_PTR 0x0C -#define REDMULE_REG_X_ITER_PTR 0x10 -#define REDMULE_REG_W_ITER_PTR 0x14 -#define REDMULE_REG_LEFTOVERS_PTR 0x18 -#define REDMULE_REG_LEFT_PARAMS_PTR 0x1C -#define REDMULE_REG_X_D1_STRIDE_PTR 0x20 -#define REDMULE_REG_W_TOT_LEN_PTR 0x24 -#define REDMULE_REG_TOT_X_READ_PTR 0x28 -#define REDMULE_REG_W_D0_STRIDE_PTR 0x2C -#define REDMULE_REG_YZ_TOT_LEN_PTR 0x30 -#define REDMULE_REG_YZ_D0_STRIDE_PTR 0x34 -#define REDMULE_REG_YZ_D2_STRIDE_PTR 0x38 -#define REDMULE_REG_X_ROWS_OFFS_PTR 0x3C -#define REDMULE_REG_X_BUFFER_SLOTS_PTR 0x40 -#define REDMULE_REG_X_TOT_LEN_PTR 0x44 -#define REDMULE_REG_OP_SELECTION 0x48 - -// OPs definition -#define MATMUL 0x0 -#define GEMM 0x1 -#define ADDMAX 0x2 -#define ADDMIN 0x3 -#define MULMAX 0x4 -#define MULMIN 0x5 -#define MAXMIN 0x6 -#define MINMAX 0x7 - -// GEMM formats -#define Float8 0x0 -#define Float16 0x1 -#define Float8Alt 0x2 -#define Float16Alt 0x3 - -#define RNE 0x0 -#define RTZ 0x1 -#define OP_FMADD 0x0 -#define OP_ADD 0x2 -#define OP_MUL 0x3 -#define OP_MINMAX 0x7 - -// FP Formats encoding -#define FP16 0x2 -#define FP8 0x3 -#define FP16ALT 0x4 -#define FP8ALT 0x5 - -/* DMA Archi */ -#define DMA_TX 0 -#define DMA_RX 1 -#define DMA_INC 1 - -#define PLP_DMA_TYPE_BIT 0x00000011 -#define PLP_DMA_INCR_BIT 0x00000012 -#define PLP_DMA_2D_BIT 0x00000013 -#define PLP_DMA_ELE_BIT 0x00000014 -#define PLP_DMA_ILE_BIT 0x00000015 -#define PLP_DMA_BLE_BIT 0x00000016 -#define PLP_DMA_2D_TCDM_BIT 0x0000017 - -#endif diff --git a/astral/redmule/hal_redmule.h b/astral/redmule/hal_redmule.h deleted file mode 100644 index c5a0c32..0000000 --- a/astral/redmule/hal_redmule.h +++ /dev/null @@ -1,527 +0,0 @@ -/* - * Copyright (C) 2022-2023 ETH Zurich and University of Bologna - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * SPDX-License-Identifier: Apache-2.0 - * - * Author: Yvan Tortorella - * - * RedMulE Hardware Abstraction Layer (HAL) - */ - -#ifndef __HAL_REDMULE_H__ -#define __HAL_REDMULE_H__ - -#include -#include "inc/x_input.h" -#include "inc/w_input.h" -#include "inc/y_input.h" -#include "inc/z_output.h" -#include "inc/golden.h" -#include "inc/tensor_dim.h" - -/* - * - * For control, generic configuration register layout, - * and job-dependent register map, look at redmule_archi.h - * - */ - -// For all the following functions we use __builtin_pulp_OffsetedWrite and __builtin_pulp_OffsetedRead -// instead of classic load/store because otherwise the compiler is not able to correctly factorize -// the HWPE base in case several accesses are done, ending up with twice more code - -#define HWPE_WRITE(value, offset) *(int *)(ARCHI_CLUST_HWPE_BASE + offset) = value -#define HWPE_READ(offset) *(int *)(ARCHI_CLUST_HWPE_BASE + offset) - -static inline void redmule_x_add_set (unsigned int value) { - HWPE_WRITE(value, REDMULE_REG_OFFS + REDMULE_REG_X_PTR); -} - -static inline void redmule_w_add_set (unsigned int value) { - HWPE_WRITE(value, REDMULE_REG_OFFS + REDMULE_REG_W_PTR); -} - -static inline void redmule_y_add_set (unsigned int value) { - HWPE_WRITE(value, REDMULE_REG_OFFS + REDMULE_REG_Y_PTR); -} - -static inline void redmule_z_add_set (unsigned int value) { - HWPE_WRITE(value, REDMULE_REG_OFFS + REDMULE_REG_Z_PTR); -} - -// static inline void redmule_mcfg_set (uint32_t mcfg0, uint32_t mcfg1) { -// HWPE_WRITE(mcfg0, REDMULE_REG_OFFS + REDMULE_MCFG0_PTR); -// HWPE_WRITE(mcfg1, REDMULE_REG_OFFS + REDMULE_MCFG1_PTR); -// } -// -// static inline void redmule_arith_set (uint32_t arith) { -// HWPE_WRITE(arith, REDMULE_REG_OFFS + REDMULE_ARITH_PTR); -// } - -static inline void hwpe_trigger_job() { - HWPE_WRITE(0, REDMULE_TRIGGER); -} - -static inline int hwpe_acquire_job() { - return HWPE_READ(REDMULE_ACQUIRE); -} - -static inline unsigned int hwpe_get_status() { - return HWPE_READ(REDMULE_STATUS); -} - -static inline void hwpe_soft_clear() { - HWPE_WRITE(1, REDMULE_SOFT_CLEAR); -} - -static inline void hwpe_cg_enable() { - *(volatile int*) (ARCHI_CLUST_CTRL_BASE + CLUST_CTRL_HWPE_EN) |= CLUST_CTRL_HWPE_EN_MASK; -} - -static inline void hwpe_cg_disable() { - *(volatile int*) (ARCHI_CLUST_CTRL_BASE + CLUST_CTRL_HWPE_EN) &= ~CLUST_CTRL_HWPE_EN_MASK; -} - -static inline void redmule_evt_wait() { - do { - eu_evt_maskWaitAndClr (1 << ARCHI_CL_HWPE_EVT0); - } while((*(int volatile *)(ARCHI_CLUST_HWPE_BASE + REDMULE_STATUS)) != 0); -} - -/* DMA APIs */ -static inline int mchan_alloc(){ - return *(volatile int*) DMA_COMMAND_QUEUE; -} - -static inline void mchan_transfer(unsigned int len, - unsigned int ext_addr, - unsigned int tcdm_addr) { - - *(volatile int*) DMA_COMMAND_QUEUE = len | - (DMA_RX << PLP_DMA_TYPE_BIT) | - (DMA_INC << PLP_DMA_INCR_BIT) | - (0 << PLP_DMA_2D_BIT) | - (1 << PLP_DMA_ELE_BIT) | - (1 << PLP_DMA_ILE_BIT) | - (0 << PLP_DMA_BLE_BIT) | - (0 << PLP_DMA_2D_TCDM_BIT); - *(volatile int*) DMA_COMMAND_QUEUE = tcdm_addr; - *(volatile int*) DMA_COMMAND_QUEUE = ext_addr; -} - -static inline void mchan_barrier(int id) { - while(((*(volatile int*)(DMA_STATUS_REGISTER)) >> id ) & 0x1 ) { - eu_evt_maskWaitAndClr(1 << FC_DMA_EVENT); - } -} - -static inline void mchan_free(int id) { - *(volatile int*) DMA_STATUS_REGISTER = 0x1 << id; -} - -// void redmule_cfg (unsigned int x, unsigned int w, unsigned int z, -// uint16_t m_size, uint16_t n_size, uint16_t k_size, -// uint8_t gemm_op, uint8_t gemm_fmt){ -// -// uint32_t mcfg_reg0 = 0; -// uint32_t mcfg_reg1 = 0; -// uint32_t arith_reg = 0; -// -// mcfg_reg0 = (k_size << 16) | -// (m_size << 0); -// mcfg_reg1 = n_size << 0; -// -// arith_reg = (gemm_op << 10) | -// (gemm_fmt << 7); -// -// redmule_x_add_set ((unsigned int) x); -// redmule_w_add_set ((unsigned int) w); -// redmule_z_add_set ((unsigned int) z); -// redmule_mcfg_set ((unsigned int) mcfg_reg0, -// (unsigned int) mcfg_reg1); -// redmule_arith_set ((unsigned int) arith_reg); -// -// } - -void redmule_cfg (uint16_t m_size, uint16_t n_size, uint16_t k_size, uint8_t gemm_ops){ - uint32_t x_iters = 0; - uint32_t w_iters = 0; - uint32_t leftovers = 0; - uint32_t left_params = 0; - uint32_t x_d1_stride = 0; - uint32_t x_rows_offs = 0; - uint32_t w_tot_len = 0; - uint32_t w_d1_len = 0; - uint32_t w_d0_stride = 0; - uint32_t yz_tot_len = 0; - uint32_t yz_d0_stride = 0; - uint32_t yz_d2_stride = 0; - uint32_t tot_x_read = 0; - uint32_t x_buffer_slots = 0; - uint32_t op_selection = 0; - uint16_t tot_stores = 0; - uint16_t w_rows = n_size; - uint16_t depth = DATA_WIDTH/(ARRAY_HEIGHT*FPFORMAT); - uint8_t tile = ARRAY_HEIGHT*(PIPE_REGS + 1); - _Bool x_rows_sub = 0; - _Bool x_cols_sub = 0; - _Bool w_cols_sub = 0; - uint16_t x_rows_iter, - x_rows_iter_tmp, - w_rows_iter, - w_rows_iter_tmp; - uint16_t x_cols_iter, - x_cols_iter_tmp, - w_cols_iter, - w_cols_iter_tmp; - uint8_t x_rows_lftovr, - x_cols_lftovr, - w_rows_lftovr, - w_cols_lftovr, - slots; - - // Calculating the number of iterations alng the two dimensions of the X matrix - x_rows_iter_tmp = m_size/ARRAY_WIDTH; - x_cols_iter_tmp = n_size/tile; - - // Calculating the number of iterations alng the two dimensions of the W matrix - w_rows_iter_tmp = w_rows; - w_cols_iter_tmp = k_size/tile; - - // Calculating the residuals along the input dimensions - x_rows_lftovr = m_size - (x_rows_iter_tmp*ARRAY_WIDTH); - x_cols_lftovr = n_size - (x_cols_iter_tmp*tile); - - // Calculating the residuals along the weight dimensions - w_rows_lftovr = n_size - (ARRAY_HEIGHT*(w_rows/ARRAY_HEIGHT)); - w_cols_lftovr = k_size - (w_cols_iter_tmp*tile); - - if (w_cols_lftovr != 0) - w_cols_iter = w_cols_iter_tmp + 1; - else - w_cols_iter = w_cols_iter_tmp; - - if (w_rows_lftovr != 0) - w_rows_iter = w_rows_iter_tmp + ARRAY_HEIGHT - w_rows_lftovr; - else - w_rows_iter = w_rows_iter_tmp; - - if (x_cols_lftovr != 0) - x_cols_iter = x_cols_iter_tmp + 1; - else - x_cols_iter = x_cols_iter_tmp; - - if (x_rows_lftovr != 0) - x_rows_iter = x_rows_iter_tmp + 1; - else - x_rows_iter = x_rows_iter_tmp; - - if (x_cols_lftovr%depth != 0) - x_buffer_slots = x_cols_lftovr/depth + 1; - else - x_buffer_slots = x_cols_lftovr/depth; - - // Calculating the number of total stores - tot_stores = x_rows_iter*w_cols_iter; - - // Determining if input matrixes are sub-matrixes - if (m_size < ARRAY_WIDTH) - x_rows_sub = 1; - if (n_size < ARRAY_HEIGHT) - x_cols_sub = 1; - if (k_size < tile) - w_cols_sub = 1; - - // Operation selection - switch (gemm_ops) { - case MATMUL: - op_selection |= (RNE << 29 | RNE << 26 | OP_FMADD << 22 | OP_MINMAX << 18 | SRC_FMT << 15 | DST_FMT << 12) | 0; - break; - - case GEMM: - op_selection |= (RNE << 29 | RNE << 26 | OP_FMADD << 22 | OP_MINMAX << 18 | SRC_FMT << 15 | DST_FMT << 12) | 1; - break; - - case ADDMAX: - op_selection |= (RNE << 29 | RTZ << 26 | OP_ADD << 22 | OP_MINMAX << 18 | SRC_FMT << 15 | DST_FMT << 12) | 1; - break; - - case ADDMIN: - op_selection |= (RNE << 29 | RNE << 26 | OP_ADD << 22 | OP_MINMAX << 18 | SRC_FMT << 15 | DST_FMT << 12) | 1; - break; - - case MULMAX: - op_selection |= (RNE << 29 | RTZ << 26 | OP_MUL << 22 | OP_MINMAX << 18 | SRC_FMT << 15 | DST_FMT << 12) | 1; - break; - - case MULMIN: - op_selection |= (RNE << 29 | RNE << 26 | OP_MUL << 22 | OP_MINMAX << 18 | SRC_FMT << 15 | DST_FMT << 12) | 1; - break; - - case MAXMIN: - op_selection |= (RTZ << 29 | RNE << 26 | OP_MINMAX << 22 | OP_MINMAX << 18 | SRC_FMT << 15 | DST_FMT << 12) | 1; - break; - - case MINMAX: - op_selection |= (RNE << 29 | RTZ << 26 | OP_MINMAX << 22 | OP_MINMAX << 18 | SRC_FMT << 15 | DST_FMT << 12) | 1; - break; - } - - // Storing iterations and residuals in registers - x_iters |= x_rows_iter << 16 | x_cols_iter << 0; - w_iters |= w_rows_iter << 16 | w_cols_iter << 0; - leftovers |= x_rows_lftovr << 24 | x_cols_lftovr << 16 | w_rows_lftovr << 8 | w_cols_lftovr << 0; - left_params |= tot_stores << 16 | x_rows_sub << 15 | x_cols_sub << 14 | w_cols_sub << 13; - x_d1_stride = ((4*FPFORMAT)/ADDR_WIDTH)*(((DATA_WIDTH/FPFORMAT)*x_cols_iter_tmp) + x_cols_lftovr); - x_rows_offs = ARRAY_WIDTH*x_d1_stride; - w_tot_len = w_rows_iter*w_cols_iter*x_rows_iter; - w_d0_stride = ((4*FPFORMAT)/ADDR_WIDTH)*(((DATA_WIDTH/FPFORMAT)*w_cols_iter_tmp) + w_cols_lftovr); - yz_tot_len = ARRAY_WIDTH*x_rows_iter*w_cols_iter; - yz_d0_stride = w_d0_stride; - yz_d2_stride = ARRAY_WIDTH*w_d0_stride; - tot_x_read = x_rows_iter*x_cols_iter*w_cols_iter; - - // Writing the computations in configuration register - HWPE_WRITE(x_iters , REDMULE_REG_OFFS + REDMULE_REG_X_ITER_PTR ); - HWPE_WRITE(w_iters , REDMULE_REG_OFFS + REDMULE_REG_W_ITER_PTR ); - HWPE_WRITE(leftovers , REDMULE_REG_OFFS + REDMULE_REG_LEFTOVERS_PTR ); - HWPE_WRITE(left_params , REDMULE_REG_OFFS + REDMULE_REG_LEFT_PARAMS_PTR ); - HWPE_WRITE(x_d1_stride , REDMULE_REG_OFFS + REDMULE_REG_X_D1_STRIDE_PTR ); - HWPE_WRITE(x_rows_offs , REDMULE_REG_OFFS + REDMULE_REG_X_ROWS_OFFS_PTR ); - HWPE_WRITE(tot_x_read , REDMULE_REG_OFFS + REDMULE_REG_TOT_X_READ_PTR ); - HWPE_WRITE(x_buffer_slots, REDMULE_REG_OFFS + REDMULE_REG_X_BUFFER_SLOTS_PTR ); - HWPE_WRITE(w_tot_len , REDMULE_REG_OFFS + REDMULE_REG_W_TOT_LEN_PTR ); - HWPE_WRITE(w_d0_stride , REDMULE_REG_OFFS + REDMULE_REG_W_D0_STRIDE_PTR ); - HWPE_WRITE(yz_tot_len , REDMULE_REG_OFFS + REDMULE_REG_YZ_TOT_LEN_PTR ); - HWPE_WRITE(yz_d0_stride , REDMULE_REG_OFFS + REDMULE_REG_YZ_D0_STRIDE_PTR ); - HWPE_WRITE(yz_d2_stride , REDMULE_REG_OFFS + REDMULE_REG_YZ_D2_STRIDE_PTR ); - HWPE_WRITE(op_selection , REDMULE_REG_OFFS + REDMULE_REG_OP_SELECTION ); -} - -void generate_test_data16(int x_start_addr, - int w_start_addr, - int y_start_addr, - int m_size, - int n_size, - int k_size) { - - int x_addr = x_start_addr; - int w_addr = w_start_addr; - int y_addr = y_start_addr; - int x_end_addr = x_start_addr + (2*m_size*n_size); - int w_end_addr = w_start_addr + (2*n_size*k_size); - int y_end_addr = y_start_addr + (2*m_size*k_size); - - // Generating input stimuli from golden model - for (x_addr = x_start_addr; x_addr < x_end_addr; x_addr += 2) { - int x = x_addr - x_start_addr; - *(uint32_t *)(x_addr) = x_inp[x/2]; - } - - // Generating Weight stimuli from golden model - for (w_addr = w_start_addr; w_addr < w_end_addr; w_addr += 2) { - int w = w_addr - w_start_addr; - *(uint32_t *)(w_addr) = w_inp[w/2]; - } - - for (y_addr = y_start_addr; y_addr < y_end_addr; y_addr += 2) { - int y = y_addr - y_start_addr; - *(uint32_t *)(y_addr) = y_inp[y/2]; - } -} - -int redmule_compare16 (int z_start_addr, int m_size, int k_size) { - int err = 0; - int z_end_addr = z_start_addr + 2*m_size*k_size; - uint16_t z_computed; - uint16_t diff, diff_1, diff_2; - - for (int z_addr = z_start_addr; z_addr < z_end_addr; z_addr += 2) { - int z = z_addr - z_start_addr; - z_computed = *(uint32_t *)(z_addr); - - if ( z_computed != z_oup[z/2] ) { - diff_1 = z_computed - z_oup[z/2]; - if (diff_1 > 3) { - diff_2 = z_oup[z/2] - z_computed; - if (diff_2 > 3) { - err++; - } - } - } - } - - return err; - -} - -int redmule16_compare_int(uint32_t *actual_z, uint32_t *golden_z, int len) { - #define ERR 0x0011 - uint32_t actual_word = 0; - uint16_t actual_MSHWord, actual_LSHWord; - uint32_t golden_word = 0; - uint16_t golden_MSHWord, golden_LSHWord; - uint32_t actual = 0; - uint32_t golden = 0; - - int errors = 0; - int error; - - for (int i=0; i golden_LSHWord) ? (actual_LSHWord - golden_LSHWord) : 0; - diff = (actual_LSHWord < golden_LSHWord) ? (golden_LSHWord - actual_LSHWord) : 0; - - if (diff > ERR) { - error = 1; - #ifdef VERBOSE - tfp_printf ("diff: 0x%08x\n", diff); - tfp_printf ("LSW: Error!\n"); - #endif - } - - // Checking Most Significant Half-Word - actual_MSHWord = (uint16_t)((actual_word >> 16) & 0x0000FFFF); - golden_MSHWord = (uint16_t)((golden_word >> 16) & 0x0000FFFF); - - diff = (actual_MSHWord > golden_MSHWord) ? (actual_MSHWord - golden_MSHWord) : 0; - diff = (actual_MSHWord < golden_MSHWord) ? (golden_MSHWord - actual_MSHWord) : 0; - - if (diff > ERR) { - error = 1; - #ifdef VERBOSE - tfp_printf ("diff: 0x%08x\n", diff); - tfp_printf ("MSW: Error!\n"); - #endif - } - - errors += error; - - #ifdef DEBUG - tfp_printf(" Golden: 0x%08x; Actual: 0x%08x,\n", golden_word, actual_word); - #endif - - #ifdef VERBOSE - if(error) { - if(errors==1) tfp_printf(" golden <- actual @ address @ index\n"); - tfp_printf(" 0x%08x <- 0x%08x @ 0x%08x @ 0x%08x\n", golden_word, actual_word, (actual_z+i), i*4); - } - #endif - } - return errors; -} - -int redmule8_compare_int(uint32_t *actual_z, uint32_t *golden_z, int len) { - #define ERR 0x0011 - uint32_t actual_word = 0; - uint8_t actual_Byte0, - actual_Byte1, - actual_Byte2, - actual_Byte3; - uint32_t golden_word = 0; - uint8_t golden_Byte0, - golden_Byte1, - golden_Byte2, - golden_Byte3; - uint32_t actual = 0; - uint32_t golden = 0; - - int errors = 0; - int error; - - for (int i=0; i golden_Byte0) ? (actual_Byte0 - golden_Byte0) : 0; - diff = (actual_Byte0 < golden_Byte0) ? (golden_Byte0 - actual_Byte0) : 0; - - if (diff > ERR) { - error = 1; - tfp_printf ("diff: 0x%08x\n", diff); - tfp_printf ("Byte0: Error!\n"); - } - - // Cheching Byte1 - actual_Byte1 = (uint8_t)( (actual_word >> 8 ) & 0x000000FF); - golden_Byte1 = (uint8_t)( (golden_word >> 8 ) & 0x000000FF); - - diff = (actual_Byte1 > golden_Byte1) ? (actual_Byte1 - golden_Byte1) : 0; - diff = (actual_Byte1 < golden_Byte1) ? (golden_Byte1 - actual_Byte1) : 0; - - if (diff > ERR) { - error = 1; - tfp_printf ("diff: 0x%08x\n", diff); - tfp_printf ("Byte1: Error!\n"); - } - - // Cheching Byte2 - actual_Byte2 = (uint8_t)( (actual_word >> 16 ) & 0x000000FF); - golden_Byte2 = (uint8_t)( (golden_word >> 16 ) & 0x000000FF); - - diff = (actual_Byte2 > golden_Byte2) ? (actual_Byte2 - golden_Byte2) : 0; - diff = (actual_Byte2 < golden_Byte2) ? (golden_Byte2 - actual_Byte2) : 0; - - if (diff > ERR) { - error = 1; - tfp_printf ("diff: 0x%08x\n", diff); - tfp_printf ("Byte2: Error!\n"); - } - - // Cheching Byte3 - actual_Byte3 = (uint8_t)( (actual_word >> 24 ) & 0x000000FF); - golden_Byte3 = (uint8_t)( (golden_word >> 24 ) & 0x000000FF); - - diff = (actual_Byte3 > golden_Byte3) ? (actual_Byte3 - golden_Byte3) : 0; - diff = (actual_Byte3 < golden_Byte3) ? (golden_Byte3 - actual_Byte3) : 0; - - if (diff > ERR) { - error = 1; - tfp_printf ("diff: 0x%08x\n", diff); - tfp_printf ("Byte3: Error!\n"); - } - - errors += error; - - #ifdef DEBUG - tfp_printf(" Golden: 0x%08x; Actual: 0x%08x,\n", golden_word, actual_word); - #endif - - #ifdef VERBOSE - if(error) { - if(errors==1) tfp_printf(" golden <- actual @ address @ index\n"); - tfp_printf(" 0x%08x <- 0x%08x @ 0x%08x @ 0x%08x\n", golden_word, actual_word, (actual_z+i), i*4); - } - #endif - } - return errors; -} - -#endif diff --git a/astral/redmule/inc/golden.h b/astral/redmule/inc/golden.h deleted file mode 100644 index f664e47..0000000 --- a/astral/redmule/inc/golden.h +++ /dev/null @@ -1,387 +0,0 @@ - /* Header file generated by RedMulE Golden Model */ -uint32_t golden [384] = { -0x48974845, -0x48384608, -0x487b4855, -0x48804869, -0x48b046d1, -0x483f48db, -0x485f48c9, -0x483a4881, -0x472c484b, -0x492b4762, -0x48fd4822, -0x492e488e, -0x484f483e, -0x46d749e8, -0x489d484b, -0x47e9490b, -0x47d2484f, -0x474744be, -0x46c047c7, -0x48af4727, -0x482d46c5, -0x482e483d, -0x479f4897, -0x4749488b, -0x46a8489a, -0x488b46f2, -0x47e84891, -0x483d4872, -0x46fd4716, -0x46a049b5, -0x47a446e7, -0x476748a1, -0x49354939, -0x48c14703, -0x48bd4863, -0x48cf4913, -0x48b848b6, -0x49204946, -0x48e1495e, -0x48b24938, -0x4882493a, -0x49d5483b, -0x49724911, -0x49df496b, -0x488848f2, -0x48214a46, -0x490c48c1, -0x48a349b2, -0x47b0463a, -0x476244cb, -0x46b94765, -0x4814466a, -0x47964631, -0x474b4666, -0x47044798, -0x47614838, -0x459047d3, -0x48a245ea, -0x484447f1, -0x4776484b, -0x46d847d6, -0x44d348f3, -0x478d46fa, -0x466e481e, -0x481e4827, -0x479445a2, -0x48064727, -0x48d5475d, -0x48284708, -0x480d4862, -0x48324895, -0x47f148bd, -0x46a7482a, -0x492d47b1, -0x4884484d, -0x485f48dc, -0x480c476d, -0x46d348e9, -0x48844728, -0x480e48a0, -0x48134862, -0x485a4675, -0x473847e8, -0x48234836, -0x482146e7, -0x47b34822, -0x48554846, -0x47174863, -0x47c14872, -0x488e46d5, -0x485f47e2, -0x48b8487c, -0x4788481e, -0x467748bd, -0x47f846c9, -0x47fc48fe, -0x47b247a0, -0x467e4588, -0x46c74662, -0x481246e8, -0x474e4536, -0x468f46c0, -0x4679481f, -0x46e246a1, -0x45604809, -0x47eb4630, -0x475746b5, -0x477f4848, -0x46d846a6, -0x459a4870, -0x46784670, -0x468c47d2, -0x48c44762, -0x479146e3, -0x486d46b1, -0x486747d0, -0x47f6468d, -0x475648a5, -0x48544857, -0x48384866, -0x46ec484d, -0x48f647d2, -0x4879484a, -0x483c4848, -0x4806471d, -0x473048fa, -0x47b84768, -0x46f94865, -0x491848a8, -0x486746ca, -0x48624800, -0x491048d3, -0x4849474e, -0x486b48eb, -0x48c54966, -0x483048f4, -0x477848f9, -0x499e481e, -0x48f148cf, -0x49234982, -0x47cf487c, -0x464949ea, -0x495e4773, -0x483f48b2, -0x497548a7, -0x481e4616, -0x4866481f, -0x486448b6, -0x487347dc, -0x487f485c, -0x491f4938, -0x48b6490d, -0x48a148f8, -0x492d4859, -0x4915489c, -0x48874899, -0x4859486c, -0x471e49ca, -0x49184867, -0x482748d3, -0x4998488b, -0x481d4704, -0x488048b8, -0x49444876, -0x48f2470c, -0x489b48b9, -0x48e54956, -0x48a548d6, -0x485648dc, -0x49ab484e, -0x490e48e0, -0x494548dd, -0x48dd488b, -0x47ea4a32, -0x49114835, -0x48194965, -0x481e460e, -0x4673452c, -0x4717475c, -0x46d046f6, -0x46bc4696, -0x481e4726, -0x46ea4763, -0x475846fe, -0x4627478b, -0x483f4704, -0x47b146ad, -0x48164792, -0x468446f2, -0x45a84827, -0x47a4472f, -0x462b4797, -0x48ab483f, -0x4863468f, -0x4766485a, -0x48cb481d, -0x490347dc, -0x483048fc, -0x483e48cc, -0x486448ab, -0x47634966, -0x499d4794, -0x488b488e, -0x496048dc, -0x484c4854, -0x474c499c, -0x48bc4826, -0x48834949, -0x4905489d, -0x481e4718, -0x48f448e3, -0x490448c1, -0x48b347e8, -0x48d44892, -0x489448ff, -0x488648d5, -0x480348fa, -0x492e47d2, -0x48b24870, -0x492b48e5, -0x4785487b, -0x471d49e3, -0x48bf4837, -0x48c4489b, -0x4871475c, -0x4811464a, -0x471c47af, -0x48174817, -0x484e463b, -0x464f477f, -0x487c4704, -0x472547a3, -0x462a4853, -0x4860465a, -0x48804736, -0x482b47e1, -0x46c04811, -0x475d48dc, -0x48064668, -0x46f44893, -0x49594858, -0x487b463d, -0x484e480f, -0x48a648c0, -0x48944847, -0x484a48a0, -0x48f4491e, -0x48b548fc, -0x47d248ce, -0x497f47db, -0x49394955, -0x48ce48a7, -0x48844890, -0x476349d6, -0x4922486e, -0x48c348f4, -0x491c47ec, -0x47834698, -0x47544715, -0x47524745, -0x4832472f, -0x48094817, -0x48c347f8, -0x480047e6, -0x473048b6, -0x48cb480a, -0x488e479e, -0x488e47c2, -0x47ee472f, -0x4744489d, -0x48514755, -0x47d34846, -0x48a04838, -0x47624634, -0x48064786, -0x482d47e3, -0x486c4726, -0x480347b7, -0x481448ac, -0x483948e0, -0x47504827, -0x48c546f2, -0x4886483f, -0x485648ad, -0x47a947e8, -0x47434937, -0x481f46d0, -0x4804484c, -0x481f47fd, -0x4813456d, -0x4807474d, -0x480e4688, -0x481046e8, -0x4799469f, -0x478f4853, -0x482447f2, -0x471f47d0, -0x485f46da, -0x481c4813, -0x4863482e, -0x480b4786, -0x46b848c9, -0x46e2475a, -0x46c54852, -0x480245af, -0x46c24466, -0x4743465d, -0x47ba46b7, -0x46c34636, -0x47844677, -0x47c2485a, -0x46ac46dc, -0x460e47de, -0x4834465f, -0x476947f4, -0x481046fc, -0x45ea45fd, -0x45b548d0, -0x47834704, -0x46c44830, -0x47c74759, -0x45b0453d, -0x47024741, -0x47934736, -0x47ba461b, -0x46dd470b, -0x470b4657, -0x4710470d, -0x468f486c, -0x46ba45c3, -0x483b479d, -0x477446c9, -0x46a746a9, -0x46064833, -0x46a94690, -0x46a746f5, -0x48bb47ac, -0x4803452c, -0x4824470f, -0x48cb47d5, -0x484a4707, -0x47974832, -0x482c4851, -0x4877487a, -0x465d4891, -0x48ce47f4, -0x48994898, -0x486a484e, -0x47f047ac, -0x4611493e, -0x489e47e2, -0x46af488c, -0x48364665, -0x46b645e4, -0x46b946a1, -0x46dd46c8, -0x474b4658, -0x4777467b, -0x47984769, -0x475e4785, -0x4656472a, -0x488145fb, -0x472d46fc, -0x47a3476e, -0x46ca465d, -0x45004855, -0x479a464f, -0x473846c3, -0x486c481e, -0x48014659, -0x477a4756, -0x487b47d5, -0x48084706, -0x4838484f, -0x48634870, -0x480648d3, -0x47714865, -0x494c46be, -0x484c4915, -0x48624900, -0x46e8481a, -0x46a04974, -0x483d4775, -0x480e487c, -}; \ No newline at end of file diff --git a/astral/redmule/inc/tensor_dim.h b/astral/redmule/inc/tensor_dim.h deleted file mode 100644 index 21bd0d8..0000000 --- a/astral/redmule/inc/tensor_dim.h +++ /dev/null @@ -1,13 +0,0 @@ - /* Header file generated by RedMulE Golden Model */ -#ifndef __TENSOR_DIM__ -#define __TENSOR_DIM__ - -#define M_SIZE 24 -#define N_SIZE 32 -#define K_SIZE 32 -#define SRC_FMT FP16 -#define DST_FMT FP16 -#define FPFORMAT 16 -uint8_t gemm_ops = GEMM; - -#endif diff --git a/astral/redmule/inc/w_2D.h b/astral/redmule/inc/w_2D.h deleted file mode 100644 index 9409c64..0000000 --- a/astral/redmule/inc/w_2D.h +++ /dev/null @@ -1,35 +0,0 @@ - /* Header file generated by RedMulE Golden Model */ -uint16_t w_inp_2D [32][32] = { -0x311a, 0x39e0, 0x387d, 0x3a4a, 0x386f, 0x3ada, 0x392f, 0x3854, 0x3014, 0x2fd2, 0x31c9, 0x2fca, 0x2e55, 0x3bc8, 0x396d, 0x3b1d, 0x39f6, 0x333a, 0x3908, 0x3628, 0x3bab, 0x3b8b, 0x3b4a, 0x322d, 0x3925, 0x317a, 0x3725, 0x31c2, 0x3066, 0x38f3, 0x3a17, 0x3476, -0x3bda, 0x3196, 0x3922, 0x3680, 0x396a, 0x3021, 0x3761, 0x374d, 0x2fc2, 0x3967, 0x3b94, 0x33b5, 0x3797, 0x34d6, 0x3655, 0x2176, 0x39bc, 0x3999, 0x3658, 0x3904, 0x3759, 0x2ade, 0x3a5a, 0x3b78, 0x36c7, 0x2d01, 0x3b58, 0x2d9a, 0x373d, 0x3952, 0x38e8, 0x3887, -0x37b6, 0x3a88, 0x2f8a, 0x2d79, 0x3413, 0x3421, 0x3976, 0x32b2, 0x3446, 0x2d99, 0x3a56, 0x3322, 0x3b49, 0x39fa, 0x3acd, 0x3af6, 0x304c, 0x3abb, 0x3a83, 0x38b2, 0x3ab9, 0x363e, 0x389f, 0x31bb, 0x38e1, 0x3bc4, 0x3b9b, 0x2984, 0x3a43, 0x3b2f, 0x35d6, 0x3bda, -0x2df3, 0x3bf8, 0x2acc, 0x378b, 0x3555, 0x2e59, 0x31d4, 0x34ec, 0x3a46, 0x3bab, 0x3214, 0x3161, 0x3470, 0x3a03, 0x368e, 0x31ad, 0x27cb, 0x2ecb, 0x3422, 0x39f7, 0x3644, 0x3a77, 0x313f, 0x34f2, 0x39b3, 0x3bf2, 0x379a, 0x3456, 0x35fe, 0x3ae7, 0x3964, 0x385f, -0x3b16, 0x3999, 0x3833, 0x2eda, 0x3afd, 0x3a4a, 0x3ba2, 0x2bd4, 0x3b38, 0x31a2, 0x32dd, 0x353c, 0x366f, 0x375e, 0x3821, 0x367a, 0x3b44, 0x39e6, 0x3787, 0x339e, 0x39d7, 0x38c6, 0x37d5, 0x342f, 0x3984, 0x319b, 0x33b5, 0x35ab, 0x398a, 0x374e, 0x36b6, 0x3b21, -0x3bbb, 0x2ab3, 0x2ad5, 0x33bc, 0x2bef, 0x3780, 0x3738, 0x3a0b, 0x3b09, 0x30ca, 0x384e, 0x3ab3, 0x39bd, 0x3453, 0x3a6d, 0x3957, 0x2c10, 0x30e9, 0x35d4, 0x3aef, 0x3be9, 0x39ad, 0x3a74, 0x3af9, 0x3739, 0x2d4d, 0x39fe, 0x3b72, 0x2c57, 0x398c, 0x381f, 0x3930, -0x3820, 0x321b, 0x3964, 0x2964, 0x33a0, 0x2d00, 0x2490, 0x336b, 0x3465, 0x3b2e, 0x3aa0, 0x371f, 0x300e, 0x3a09, 0x3bf1, 0x25cc, 0x3b6f, 0x3384, 0x3a88, 0x3acb, 0x3814, 0x36d0, 0x3081, 0x3a2c, 0x3353, 0x39cb, 0x31ed, 0x3af6, 0x3721, 0x36c7, 0x2ce2, 0x390d, -0x3698, 0x3ab2, 0x3b3e, 0x2eb4, 0x3998, 0x39e3, 0x3a77, 0x3632, 0x2c12, 0x3bd5, 0x3ba3, 0x3bba, 0x323c, 0x367b, 0x3557, 0x39c8, 0x37db, 0x3b45, 0x3b6e, 0x3931, 0x3121, 0x3a8d, 0x3a55, 0x3b9b, 0x358a, 0x3925, 0x3491, 0x3912, 0x3b6b, 0x3584, 0x32df, 0x3120, -0x32b2, 0x3b0a, 0x2cad, 0x3465, 0x3ad3, 0x3bcd, 0x363b, 0x3afe, 0x354b, 0x3374, 0x39af, 0x3b7f, 0x308c, 0x2e72, 0x3380, 0x3b70, 0x3902, 0x38d8, 0x39f3, 0x3a4b, 0x3853, 0x397b, 0x2ebe, 0x387f, 0x2845, 0x37e2, 0x360f, 0x370b, 0x3acb, 0x35d4, 0x36e6, 0x3262, -0x2e88, 0x3a54, 0x2ee3, 0x3575, 0x3afe, 0x2aee, 0x39a0, 0x3aae, 0x3693, 0x3432, 0x3834, 0x3b9b, 0x3bcb, 0x2e3a, 0x356d, 0x374e, 0x3924, 0x383c, 0x311e, 0x3ac5, 0x352d, 0x311e, 0x38ca, 0x34d4, 0x36ca, 0x34ed, 0x3a13, 0x33eb, 0x3639, 0x3828, 0x3b3c, 0x3939, -0x3837, 0x3521, 0x2cb5, 0x3629, 0x3924, 0x384c, 0x366a, 0x3bbf, 0x2e9e, 0x3ba8, 0x33ad, 0x38c8, 0x3934, 0x3907, 0x249a, 0x3690, 0x3a09, 0x3215, 0x3898, 0x325d, 0x37d5, 0x3195, 0x361c, 0x3ae4, 0x351f, 0x3452, 0x3bc0, 0x375c, 0x39bf, 0x317a, 0x3aae, 0x283a, -0x3476, 0x3b92, 0x3472, 0x383e, 0x280f, 0x39d6, 0x2fd1, 0x31f4, 0x2ffb, 0x3b97, 0x3692, 0x36c0, 0x3989, 0x33cf, 0x3ba6, 0x3239, 0x35d7, 0x33ab, 0x31eb, 0x3b47, 0x389b, 0x3b88, 0x3580, 0x354c, 0x3802, 0x3b9a, 0x3b94, 0x2a92, 0x2db1, 0x38bd, 0x2dfb, 0x3900, -0x344f, 0x3739, 0x27a5, 0x3b2e, 0x342b, 0x34bb, 0x30c8, 0x3ae8, 0x3b26, 0x3982, 0x38c0, 0x3408, 0x38c8, 0x36ef, 0x3bf0, 0x3acf, 0x3a3c, 0x3825, 0x31a5, 0x3ada, 0x3b5b, 0x37db, 0x3a01, 0x3663, 0x3a7d, 0x327b, 0x3a1f, 0x3862, 0x38af, 0x3204, 0x372e, 0x3b19, -0x3708, 0x3622, 0x2e62, 0x39ab, 0x2d4d, 0x31b4, 0x3552, 0x3bbc, 0x36f2, 0x36eb, 0x38ef, 0x3755, 0x3bbe, 0x2c17, 0x3815, 0x2f53, 0x363f, 0x38c1, 0x3246, 0x386b, 0x34de, 0x34e4, 0x3baa, 0x349e, 0x32ce, 0x3a68, 0x373f, 0x2cce, 0x3b36, 0x28ba, 0x3b50, 0x3232, -0x1f34, 0x3928, 0x35cd, 0x3b38, 0x30ce, 0x35a1, 0x3a06, 0x3a32, 0x3a53, 0x3489, 0x3241, 0x372f, 0x390c, 0x3a1b, 0x378a, 0x3713, 0x3769, 0x37a8, 0x3418, 0x3ad4, 0x3a4e, 0x3bf7, 0x37a5, 0x34dc, 0x39b2, 0x351b, 0x3372, 0x349f, 0x2f50, 0x3ab1, 0x3795, 0x2db7, -0x3864, 0x3157, 0x3900, 0x323e, 0x389e, 0x3880, 0x3b1f, 0x37a1, 0x396c, 0x2e43, 0x2c2a, 0x3b78, 0x3988, 0x3a14, 0x39c1, 0x3b51, 0x3780, 0x3bf2, 0x2d19, 0x3815, 0x3a5f, 0x3641, 0x2f62, 0x37d5, 0x3564, 0x139a, 0x3ab8, 0x28f7, 0x3785, 0x34e1, 0x3097, 0x3768, -0x3971, 0x3ae2, 0x32ae, 0x2fd5, 0x382a, 0x346c, 0x3133, 0x3167, 0x3940, 0x2d12, 0x389a, 0x3bd0, 0x3943, 0x391c, 0x3a75, 0x2a11, 0x391e, 0x372d, 0x3a79, 0x3b72, 0x3373, 0x39b7, 0x35d7, 0x372b, 0x3a6d, 0x38a1, 0x3279, 0x3434, 0x3694, 0x3b45, 0x3abb, 0x392d, -0x34a8, 0x3757, 0x32ca, 0x345d, 0x36a5, 0x3854, 0x2dcd, 0x30af, 0x38dd, 0x3067, 0x3411, 0x3997, 0x397a, 0x3a64, 0x38b8, 0x3962, 0x3509, 0x3bb6, 0x3a66, 0x339f, 0x372a, 0x31a8, 0x37da, 0x36ff, 0x33c6, 0x31da, 0x3977, 0x3b72, 0x3841, 0x3567, 0x3433, 0x33b8, -0x39fe, 0x3a10, 0x3bf2, 0x35e7, 0x3a4a, 0x3b3e, 0x2ec7, 0x3aa4, 0x3846, 0x3af9, 0x38a9, 0x2c1f, 0x39ab, 0x349f, 0x31d6, 0x39ae, 0x3b79, 0x352d, 0x3516, 0x347c, 0x2f33, 0x35ad, 0x31c4, 0x3b52, 0x354b, 0x3786, 0x3ab7, 0x3896, 0x34ac, 0x352f, 0x37e6, 0x326a, -0x2e44, 0x34c7, 0x388d, 0x3bf4, 0x363f, 0x3b3d, 0x33b1, 0x3b8b, 0x3340, 0x37f7, 0x3b07, 0x25bf, 0x398e, 0x3505, 0x3bd7, 0x366d, 0x388a, 0x2cc0, 0x359a, 0x3b9a, 0x3b99, 0x379d, 0x3b6b, 0x39b8, 0x3223, 0x2703, 0x3ba9, 0x2ecb, 0x3759, 0x39d8, 0x37ac, 0x32cf, -0x35f2, 0x38a3, 0x399e, 0x3bd2, 0x3780, 0x3af3, 0x3b5e, 0x337b, 0x3a08, 0x35da, 0x3446, 0x3b25, 0x3ad0, 0x3bee, 0x3141, 0x32d8, 0x34ce, 0x2ac9, 0x3800, 0x3a8a, 0x2d53, 0x368a, 0x3561, 0x3998, 0x35a3, 0x3677, 0x3ab2, 0x3269, 0x3236, 0x3b3e, 0x3aba, 0x3bac, -0x395d, 0x3820, 0x1df6, 0x3bb5, 0x35b5, 0x3675, 0x3b74, 0x360f, 0x34de, 0x3a0c, 0x3aeb, 0x299d, 0x3207, 0x3bd8, 0x2178, 0x3995, 0x3948, 0x3908, 0x3843, 0x2ea5, 0x3045, 0x3989, 0x345d, 0x39c5, 0x3a89, 0x3863, 0x3be0, 0x397a, 0x38f1, 0x39e2, 0x3b08, 0x352e, -0x385f, 0x28f2, 0x3bc3, 0x35e0, 0x380c, 0x3b9c, 0x3afc, 0x390a, 0x3689, 0x34fd, 0x2cf5, 0x308e, 0x342b, 0x3921, 0x3a67, 0x3ad6, 0x2986, 0x32fc, 0x35aa, 0x3507, 0x3608, 0x33fd, 0x3bf3, 0x39e2, 0x3b0f, 0x30b7, 0x3896, 0x3ae4, 0x2145, 0x35b6, 0x2e1d, 0x3ad1, -0x333d, 0x3afb, 0x2703, 0x3413, 0x1d7d, 0x3b7f, 0x3ae1, 0x303c, 0x3004, 0x39d3, 0x3554, 0x31a4, 0x354e, 0x3662, 0x39c5, 0x2eb7, 0x2c6e, 0x397f, 0x31d8, 0x1f0c, 0x38e3, 0x35f0, 0x2714, 0x28d1, 0x375e, 0x3a75, 0x3830, 0x3578, 0x397d, 0x3b18, 0x383c, 0x3498, -0x39ad, 0x3598, 0x23c4, 0x34ea, 0x3a61, 0x2b00, 0x3707, 0x3ae1, 0x37ae, 0x389d, 0x37fa, 0x3673, 0x3278, 0xf3e, 0x3809, 0x33c6, 0x3bf5, 0x3279, 0x3816, 0x360c, 0x39c8, 0x381f, 0x3741, 0x2d66, 0x38c0, 0x37d3, 0x377a, 0x3621, 0x2faf, 0x392e, 0x2de6, 0x33c5, -0x3803, 0x2600, 0x32e9, 0x39b4, 0x38d2, 0x34e8, 0x2fe6, 0x3199, 0x3643, 0x3a77, 0x27cc, 0x39d7, 0x34c6, 0x2ea8, 0x364e, 0x3b07, 0x31c7, 0x30a1, 0x31b1, 0x3b8f, 0x3571, 0x3b75, 0x3989, 0x3805, 0x39fb, 0x3945, 0x352b, 0x31d8, 0x3904, 0x3440, 0x3a57, 0x2cf7, -0x3b39, 0x2fcd, 0x2b89, 0x2edd, 0x3682, 0x36a9, 0x32c8, 0x37ac, 0x32a5, 0x3311, 0x394b, 0x3b84, 0x3aec, 0x3601, 0x2765, 0x3b69, 0x396b, 0x3727, 0x3bfe, 0x3907, 0x376f, 0x3674, 0x3973, 0x3671, 0x3491, 0x3993, 0x383f, 0x3335, 0x3989, 0x3550, 0x3077, 0x35f5, -0x3a59, 0x3950, 0x380c, 0x37cd, 0x30bf, 0x3607, 0x3afa, 0x3b5d, 0x32b9, 0x386b, 0x35bd, 0x3aca, 0x3ba5, 0x3b2d, 0x3b19, 0x3b8b, 0x345e, 0x2845, 0x34aa, 0x372a, 0x3448, 0x34f5, 0x3ae2, 0x3637, 0x2cb5, 0x354b, 0x3b15, 0x2ca8, 0x2641, 0x3178, 0x2cfe, 0x39b4, -0x3bdd, 0x3acb, 0x3a05, 0x38a2, 0x3b4a, 0x34e5, 0x395f, 0x394b, 0x34c4, 0x3aa5, 0x29bb, 0x2d96, 0x339d, 0x387c, 0x382e, 0x385a, 0x396b, 0x3aa9, 0x2f1e, 0x33a7, 0x3b90, 0x3b7b, 0x3b5f, 0x39d3, 0x3b18, 0x354f, 0x2cdb, 0x3a6f, 0x3434, 0x34ff, 0x3a5b, 0x3b84, -0x3a33, 0x384b, 0x2e67, 0x3b85, 0x3853, 0x380c, 0x346a, 0x3aaa, 0x3492, 0x33e8, 0x3bf2, 0x38ae, 0x3a29, 0x3830, 0x3221, 0x35b1, 0x3a48, 0x2c68, 0x2ced, 0x3a7e, 0x3539, 0x3922, 0x374c, 0x3aaa, 0x2dae, 0x395d, 0x3b3d, 0x3890, 0x2cfe, 0x2dd6, 0x3bad, 0x33c5, -0x2c07, 0x3a2c, 0x37a8, 0x390f, 0x2fc8, 0x35ae, 0x388c, 0x30ee, 0x3674, 0x391d, 0x3bfc, 0x36bf, 0x322d, 0x3a78, 0x35c0, 0x3492, 0x3ac8, 0x3504, 0x3315, 0x381d, 0x3a7a, 0x3a08, 0x343c, 0x3bda, 0x341b, 0x39f0, 0x3b9e, 0x395d, 0x3c00, 0x38ab, 0x3bcf, 0x3564, -0x33c4, 0x3b0d, 0x3623, 0x33b9, 0x3b92, 0x1e71, 0x2c57, 0x36d0, 0x314b, 0x3a16, 0x3372, 0x341b, 0x3aaa, 0x3444, 0x396b, 0x2dd7, 0x3b30, 0x3559, 0x3b5b, 0x3a29, 0x2d19, 0x38b7, 0x3b01, 0x3afa, 0x398a, 0x3839, 0x3ac9, 0x2e31, 0x3924, 0x39f2, 0x3a7f, 0x3285 -}; \ No newline at end of file diff --git a/astral/redmule/inc/w_input.h b/astral/redmule/inc/w_input.h deleted file mode 100644 index dc4d3be..0000000 --- a/astral/redmule/inc/w_input.h +++ /dev/null @@ -1,35 +0,0 @@ - /* Header file generated by RedMulE Golden Model */ -uint16_t w_inp [1024] = { -0x311a, 0x39e0, 0x387d, 0x3a4a, 0x386f, 0x3ada, 0x392f, 0x3854, 0x3014, 0x2fd2, 0x31c9, 0x2fca, 0x2e55, 0x3bc8, 0x396d, 0x3b1d, 0x39f6, 0x333a, 0x3908, 0x3628, 0x3bab, 0x3b8b, 0x3b4a, 0x322d, 0x3925, 0x317a, 0x3725, 0x31c2, 0x3066, 0x38f3, 0x3a17, 0x3476, -0x3bda, 0x3196, 0x3922, 0x3680, 0x396a, 0x3021, 0x3761, 0x374d, 0x2fc2, 0x3967, 0x3b94, 0x33b5, 0x3797, 0x34d6, 0x3655, 0x2176, 0x39bc, 0x3999, 0x3658, 0x3904, 0x3759, 0x2ade, 0x3a5a, 0x3b78, 0x36c7, 0x2d01, 0x3b58, 0x2d9a, 0x373d, 0x3952, 0x38e8, 0x3887, -0x37b6, 0x3a88, 0x2f8a, 0x2d79, 0x3413, 0x3421, 0x3976, 0x32b2, 0x3446, 0x2d99, 0x3a56, 0x3322, 0x3b49, 0x39fa, 0x3acd, 0x3af6, 0x304c, 0x3abb, 0x3a83, 0x38b2, 0x3ab9, 0x363e, 0x389f, 0x31bb, 0x38e1, 0x3bc4, 0x3b9b, 0x2984, 0x3a43, 0x3b2f, 0x35d6, 0x3bda, -0x2df3, 0x3bf8, 0x2acc, 0x378b, 0x3555, 0x2e59, 0x31d4, 0x34ec, 0x3a46, 0x3bab, 0x3214, 0x3161, 0x3470, 0x3a03, 0x368e, 0x31ad, 0x27cb, 0x2ecb, 0x3422, 0x39f7, 0x3644, 0x3a77, 0x313f, 0x34f2, 0x39b3, 0x3bf2, 0x379a, 0x3456, 0x35fe, 0x3ae7, 0x3964, 0x385f, -0x3b16, 0x3999, 0x3833, 0x2eda, 0x3afd, 0x3a4a, 0x3ba2, 0x2bd4, 0x3b38, 0x31a2, 0x32dd, 0x353c, 0x366f, 0x375e, 0x3821, 0x367a, 0x3b44, 0x39e6, 0x3787, 0x339e, 0x39d7, 0x38c6, 0x37d5, 0x342f, 0x3984, 0x319b, 0x33b5, 0x35ab, 0x398a, 0x374e, 0x36b6, 0x3b21, -0x3bbb, 0x2ab3, 0x2ad5, 0x33bc, 0x2bef, 0x3780, 0x3738, 0x3a0b, 0x3b09, 0x30ca, 0x384e, 0x3ab3, 0x39bd, 0x3453, 0x3a6d, 0x3957, 0x2c10, 0x30e9, 0x35d4, 0x3aef, 0x3be9, 0x39ad, 0x3a74, 0x3af9, 0x3739, 0x2d4d, 0x39fe, 0x3b72, 0x2c57, 0x398c, 0x381f, 0x3930, -0x3820, 0x321b, 0x3964, 0x2964, 0x33a0, 0x2d00, 0x2490, 0x336b, 0x3465, 0x3b2e, 0x3aa0, 0x371f, 0x300e, 0x3a09, 0x3bf1, 0x25cc, 0x3b6f, 0x3384, 0x3a88, 0x3acb, 0x3814, 0x36d0, 0x3081, 0x3a2c, 0x3353, 0x39cb, 0x31ed, 0x3af6, 0x3721, 0x36c7, 0x2ce2, 0x390d, -0x3698, 0x3ab2, 0x3b3e, 0x2eb4, 0x3998, 0x39e3, 0x3a77, 0x3632, 0x2c12, 0x3bd5, 0x3ba3, 0x3bba, 0x323c, 0x367b, 0x3557, 0x39c8, 0x37db, 0x3b45, 0x3b6e, 0x3931, 0x3121, 0x3a8d, 0x3a55, 0x3b9b, 0x358a, 0x3925, 0x3491, 0x3912, 0x3b6b, 0x3584, 0x32df, 0x3120, -0x32b2, 0x3b0a, 0x2cad, 0x3465, 0x3ad3, 0x3bcd, 0x363b, 0x3afe, 0x354b, 0x3374, 0x39af, 0x3b7f, 0x308c, 0x2e72, 0x3380, 0x3b70, 0x3902, 0x38d8, 0x39f3, 0x3a4b, 0x3853, 0x397b, 0x2ebe, 0x387f, 0x2845, 0x37e2, 0x360f, 0x370b, 0x3acb, 0x35d4, 0x36e6, 0x3262, -0x2e88, 0x3a54, 0x2ee3, 0x3575, 0x3afe, 0x2aee, 0x39a0, 0x3aae, 0x3693, 0x3432, 0x3834, 0x3b9b, 0x3bcb, 0x2e3a, 0x356d, 0x374e, 0x3924, 0x383c, 0x311e, 0x3ac5, 0x352d, 0x311e, 0x38ca, 0x34d4, 0x36ca, 0x34ed, 0x3a13, 0x33eb, 0x3639, 0x3828, 0x3b3c, 0x3939, -0x3837, 0x3521, 0x2cb5, 0x3629, 0x3924, 0x384c, 0x366a, 0x3bbf, 0x2e9e, 0x3ba8, 0x33ad, 0x38c8, 0x3934, 0x3907, 0x249a, 0x3690, 0x3a09, 0x3215, 0x3898, 0x325d, 0x37d5, 0x3195, 0x361c, 0x3ae4, 0x351f, 0x3452, 0x3bc0, 0x375c, 0x39bf, 0x317a, 0x3aae, 0x283a, -0x3476, 0x3b92, 0x3472, 0x383e, 0x280f, 0x39d6, 0x2fd1, 0x31f4, 0x2ffb, 0x3b97, 0x3692, 0x36c0, 0x3989, 0x33cf, 0x3ba6, 0x3239, 0x35d7, 0x33ab, 0x31eb, 0x3b47, 0x389b, 0x3b88, 0x3580, 0x354c, 0x3802, 0x3b9a, 0x3b94, 0x2a92, 0x2db1, 0x38bd, 0x2dfb, 0x3900, -0x344f, 0x3739, 0x27a5, 0x3b2e, 0x342b, 0x34bb, 0x30c8, 0x3ae8, 0x3b26, 0x3982, 0x38c0, 0x3408, 0x38c8, 0x36ef, 0x3bf0, 0x3acf, 0x3a3c, 0x3825, 0x31a5, 0x3ada, 0x3b5b, 0x37db, 0x3a01, 0x3663, 0x3a7d, 0x327b, 0x3a1f, 0x3862, 0x38af, 0x3204, 0x372e, 0x3b19, -0x3708, 0x3622, 0x2e62, 0x39ab, 0x2d4d, 0x31b4, 0x3552, 0x3bbc, 0x36f2, 0x36eb, 0x38ef, 0x3755, 0x3bbe, 0x2c17, 0x3815, 0x2f53, 0x363f, 0x38c1, 0x3246, 0x386b, 0x34de, 0x34e4, 0x3baa, 0x349e, 0x32ce, 0x3a68, 0x373f, 0x2cce, 0x3b36, 0x28ba, 0x3b50, 0x3232, -0x1f34, 0x3928, 0x35cd, 0x3b38, 0x30ce, 0x35a1, 0x3a06, 0x3a32, 0x3a53, 0x3489, 0x3241, 0x372f, 0x390c, 0x3a1b, 0x378a, 0x3713, 0x3769, 0x37a8, 0x3418, 0x3ad4, 0x3a4e, 0x3bf7, 0x37a5, 0x34dc, 0x39b2, 0x351b, 0x3372, 0x349f, 0x2f50, 0x3ab1, 0x3795, 0x2db7, -0x3864, 0x3157, 0x3900, 0x323e, 0x389e, 0x3880, 0x3b1f, 0x37a1, 0x396c, 0x2e43, 0x2c2a, 0x3b78, 0x3988, 0x3a14, 0x39c1, 0x3b51, 0x3780, 0x3bf2, 0x2d19, 0x3815, 0x3a5f, 0x3641, 0x2f62, 0x37d5, 0x3564, 0x139a, 0x3ab8, 0x28f7, 0x3785, 0x34e1, 0x3097, 0x3768, -0x3971, 0x3ae2, 0x32ae, 0x2fd5, 0x382a, 0x346c, 0x3133, 0x3167, 0x3940, 0x2d12, 0x389a, 0x3bd0, 0x3943, 0x391c, 0x3a75, 0x2a11, 0x391e, 0x372d, 0x3a79, 0x3b72, 0x3373, 0x39b7, 0x35d7, 0x372b, 0x3a6d, 0x38a1, 0x3279, 0x3434, 0x3694, 0x3b45, 0x3abb, 0x392d, -0x34a8, 0x3757, 0x32ca, 0x345d, 0x36a5, 0x3854, 0x2dcd, 0x30af, 0x38dd, 0x3067, 0x3411, 0x3997, 0x397a, 0x3a64, 0x38b8, 0x3962, 0x3509, 0x3bb6, 0x3a66, 0x339f, 0x372a, 0x31a8, 0x37da, 0x36ff, 0x33c6, 0x31da, 0x3977, 0x3b72, 0x3841, 0x3567, 0x3433, 0x33b8, -0x39fe, 0x3a10, 0x3bf2, 0x35e7, 0x3a4a, 0x3b3e, 0x2ec7, 0x3aa4, 0x3846, 0x3af9, 0x38a9, 0x2c1f, 0x39ab, 0x349f, 0x31d6, 0x39ae, 0x3b79, 0x352d, 0x3516, 0x347c, 0x2f33, 0x35ad, 0x31c4, 0x3b52, 0x354b, 0x3786, 0x3ab7, 0x3896, 0x34ac, 0x352f, 0x37e6, 0x326a, -0x2e44, 0x34c7, 0x388d, 0x3bf4, 0x363f, 0x3b3d, 0x33b1, 0x3b8b, 0x3340, 0x37f7, 0x3b07, 0x25bf, 0x398e, 0x3505, 0x3bd7, 0x366d, 0x388a, 0x2cc0, 0x359a, 0x3b9a, 0x3b99, 0x379d, 0x3b6b, 0x39b8, 0x3223, 0x2703, 0x3ba9, 0x2ecb, 0x3759, 0x39d8, 0x37ac, 0x32cf, -0x35f2, 0x38a3, 0x399e, 0x3bd2, 0x3780, 0x3af3, 0x3b5e, 0x337b, 0x3a08, 0x35da, 0x3446, 0x3b25, 0x3ad0, 0x3bee, 0x3141, 0x32d8, 0x34ce, 0x2ac9, 0x3800, 0x3a8a, 0x2d53, 0x368a, 0x3561, 0x3998, 0x35a3, 0x3677, 0x3ab2, 0x3269, 0x3236, 0x3b3e, 0x3aba, 0x3bac, -0x395d, 0x3820, 0x1df6, 0x3bb5, 0x35b5, 0x3675, 0x3b74, 0x360f, 0x34de, 0x3a0c, 0x3aeb, 0x299d, 0x3207, 0x3bd8, 0x2178, 0x3995, 0x3948, 0x3908, 0x3843, 0x2ea5, 0x3045, 0x3989, 0x345d, 0x39c5, 0x3a89, 0x3863, 0x3be0, 0x397a, 0x38f1, 0x39e2, 0x3b08, 0x352e, -0x385f, 0x28f2, 0x3bc3, 0x35e0, 0x380c, 0x3b9c, 0x3afc, 0x390a, 0x3689, 0x34fd, 0x2cf5, 0x308e, 0x342b, 0x3921, 0x3a67, 0x3ad6, 0x2986, 0x32fc, 0x35aa, 0x3507, 0x3608, 0x33fd, 0x3bf3, 0x39e2, 0x3b0f, 0x30b7, 0x3896, 0x3ae4, 0x2145, 0x35b6, 0x2e1d, 0x3ad1, -0x333d, 0x3afb, 0x2703, 0x3413, 0x1d7d, 0x3b7f, 0x3ae1, 0x303c, 0x3004, 0x39d3, 0x3554, 0x31a4, 0x354e, 0x3662, 0x39c5, 0x2eb7, 0x2c6e, 0x397f, 0x31d8, 0x1f0c, 0x38e3, 0x35f0, 0x2714, 0x28d1, 0x375e, 0x3a75, 0x3830, 0x3578, 0x397d, 0x3b18, 0x383c, 0x3498, -0x39ad, 0x3598, 0x23c4, 0x34ea, 0x3a61, 0x2b00, 0x3707, 0x3ae1, 0x37ae, 0x389d, 0x37fa, 0x3673, 0x3278, 0xf3e, 0x3809, 0x33c6, 0x3bf5, 0x3279, 0x3816, 0x360c, 0x39c8, 0x381f, 0x3741, 0x2d66, 0x38c0, 0x37d3, 0x377a, 0x3621, 0x2faf, 0x392e, 0x2de6, 0x33c5, -0x3803, 0x2600, 0x32e9, 0x39b4, 0x38d2, 0x34e8, 0x2fe6, 0x3199, 0x3643, 0x3a77, 0x27cc, 0x39d7, 0x34c6, 0x2ea8, 0x364e, 0x3b07, 0x31c7, 0x30a1, 0x31b1, 0x3b8f, 0x3571, 0x3b75, 0x3989, 0x3805, 0x39fb, 0x3945, 0x352b, 0x31d8, 0x3904, 0x3440, 0x3a57, 0x2cf7, -0x3b39, 0x2fcd, 0x2b89, 0x2edd, 0x3682, 0x36a9, 0x32c8, 0x37ac, 0x32a5, 0x3311, 0x394b, 0x3b84, 0x3aec, 0x3601, 0x2765, 0x3b69, 0x396b, 0x3727, 0x3bfe, 0x3907, 0x376f, 0x3674, 0x3973, 0x3671, 0x3491, 0x3993, 0x383f, 0x3335, 0x3989, 0x3550, 0x3077, 0x35f5, -0x3a59, 0x3950, 0x380c, 0x37cd, 0x30bf, 0x3607, 0x3afa, 0x3b5d, 0x32b9, 0x386b, 0x35bd, 0x3aca, 0x3ba5, 0x3b2d, 0x3b19, 0x3b8b, 0x345e, 0x2845, 0x34aa, 0x372a, 0x3448, 0x34f5, 0x3ae2, 0x3637, 0x2cb5, 0x354b, 0x3b15, 0x2ca8, 0x2641, 0x3178, 0x2cfe, 0x39b4, -0x3bdd, 0x3acb, 0x3a05, 0x38a2, 0x3b4a, 0x34e5, 0x395f, 0x394b, 0x34c4, 0x3aa5, 0x29bb, 0x2d96, 0x339d, 0x387c, 0x382e, 0x385a, 0x396b, 0x3aa9, 0x2f1e, 0x33a7, 0x3b90, 0x3b7b, 0x3b5f, 0x39d3, 0x3b18, 0x354f, 0x2cdb, 0x3a6f, 0x3434, 0x34ff, 0x3a5b, 0x3b84, -0x3a33, 0x384b, 0x2e67, 0x3b85, 0x3853, 0x380c, 0x346a, 0x3aaa, 0x3492, 0x33e8, 0x3bf2, 0x38ae, 0x3a29, 0x3830, 0x3221, 0x35b1, 0x3a48, 0x2c68, 0x2ced, 0x3a7e, 0x3539, 0x3922, 0x374c, 0x3aaa, 0x2dae, 0x395d, 0x3b3d, 0x3890, 0x2cfe, 0x2dd6, 0x3bad, 0x33c5, -0x2c07, 0x3a2c, 0x37a8, 0x390f, 0x2fc8, 0x35ae, 0x388c, 0x30ee, 0x3674, 0x391d, 0x3bfc, 0x36bf, 0x322d, 0x3a78, 0x35c0, 0x3492, 0x3ac8, 0x3504, 0x3315, 0x381d, 0x3a7a, 0x3a08, 0x343c, 0x3bda, 0x341b, 0x39f0, 0x3b9e, 0x395d, 0x3c00, 0x38ab, 0x3bcf, 0x3564, -0x33c4, 0x3b0d, 0x3623, 0x33b9, 0x3b92, 0x1e71, 0x2c57, 0x36d0, 0x314b, 0x3a16, 0x3372, 0x341b, 0x3aaa, 0x3444, 0x396b, 0x2dd7, 0x3b30, 0x3559, 0x3b5b, 0x3a29, 0x2d19, 0x38b7, 0x3b01, 0x3afa, 0x398a, 0x3839, 0x3ac9, 0x2e31, 0x3924, 0x39f2, 0x3a7f, 0x3285 -}; \ No newline at end of file diff --git a/astral/redmule/inc/x_2D.h b/astral/redmule/inc/x_2D.h deleted file mode 100644 index 0b589f8..0000000 --- a/astral/redmule/inc/x_2D.h +++ /dev/null @@ -1,27 +0,0 @@ - /* Header file generated by RedMulE Golden Model */ -uint16_t x_inp_2D [24][32] = { -0x2153, 0x3bb5, 0x3896, 0x365f, 0x2483, 0x3518, 0x2dd1, 0x3bca, 0x397b, 0x29b1, 0x3705, 0x36c8, 0x398b, 0x3661, 0x2f05, 0x365a, 0x3bf9, 0x34df, 0x363b, 0x38d9, 0x39c6, 0x3abb, 0x3952, 0x38f2, 0x392d, 0x3b3e, 0x2afb, 0x3a9d, 0x353b, 0x3b73, 0x3a01, 0x3679, -0x3934, 0x397d, 0x2904, 0x3822, 0x3462, 0x3b44, 0x39e9, 0x28be, 0x331e, 0x3a1d, 0x39e5, 0x34da, 0x3a19, 0x3906, 0x1d35, 0x3871, 0x31e7, 0x3b29, 0x325d, 0x3797, 0x2b2f, 0x38b4, 0x232f, 0x38aa, 0x3aca, 0x316f, 0x3811, 0x3950, 0x32ea, 0x3bc7, 0x382c, 0x38a2, -0x29ce, 0x3afa, 0x3a39, 0x2ccc, 0x39fd, 0x3b3d, 0x384a, 0x3a35, 0x3802, 0x366a, 0x37ec, 0x3598, 0x3bf8, 0x3a85, 0x3a1b, 0x386e, 0x3b4c, 0x39de, 0x38c2, 0x2f93, 0x3b4c, 0x39c4, 0x3b9e, 0x3844, 0x346d, 0x3bff, 0x32ce, 0x296d, 0x3130, 0x3b3d, 0x3b44, 0x369d, -0x3b13, 0x31ed, 0x330a, 0x3831, 0x34e7, 0x37b3, 0x331a, 0x3918, 0x32d3, 0x3995, 0x3991, 0x3919, 0x3a26, 0x385b, 0x2b76, 0x3a3b, 0x37f2, 0x26a7, 0x3225, 0x3b64, 0x28f0, 0x3456, 0x3822, 0x341e, 0x381a, 0x38d8, 0x2c11, 0x33be, 0x33ac, 0x353f, 0x3476, 0x3abc, -0x36ec, 0x3a1d, 0x39d3, 0x3821, 0x36ac, 0x3bce, 0x3ad2, 0x3616, 0x36a1, 0x2cb3, 0x38d2, 0x314f, 0x385c, 0x3b63, 0x3bb6, 0x2951, 0x372d, 0x2c42, 0x3823, 0x3883, 0x3872, 0x31ee, 0x36c5, 0x399a, 0x31b0, 0x3887, 0x3884, 0x3865, 0x3896, 0x36c3, 0x32e3, 0x346c, -0x3935, 0x3b50, 0x2b6d, 0x38cd, 0x388f, 0x3389, 0x395d, 0x31cd, 0x2efd, 0x3154, 0x2f35, 0x3444, 0x3293, 0x3b6b, 0x1bec, 0x3b69, 0x3bf3, 0x3611, 0x3508, 0x3742, 0x3a50, 0x3ab7, 0x3457, 0x38d3, 0x3344, 0x38e8, 0x33c0, 0x3668, 0x3bee, 0x3b21, 0x3727, 0x3121, -0x316c, 0x3288, 0x2d50, 0x2e74, 0x35d5, 0x37e2, 0x303d, 0x36af, 0x341f, 0x3436, 0x2df7, 0x399d, 0x30f4, 0x3aaf, 0x34e4, 0x2c2a, 0x3116, 0x34d3, 0x36ac, 0x35e3, 0x3760, 0x36e1, 0x3ad2, 0x3547, 0x38f4, 0x369c, 0x3ba9, 0x34f0, 0x3a39, 0x3b19, 0x36e6, 0x395d, -0x3be8, 0x3293, 0x3bfc, 0x3435, 0x2eb3, 0x3360, 0x3919, 0x3bed, 0x396a, 0x37fc, 0x3242, 0x384b, 0x38cb, 0x3b2c, 0x3b28, 0x28cf, 0x3828, 0x3855, 0x3ba9, 0x2fa7, 0x340b, 0x32f1, 0x3ada, 0x36fa, 0x31f5, 0x3436, 0x29d0, 0x33e6, 0x3232, 0x3bec, 0x3904, 0x2797, -0x3b81, 0x3bac, 0x38d2, 0x343d, 0x31af, 0x3b1e, 0x33fc, 0x3864, 0x3624, 0x3905, 0x2945, 0x3b52, 0x2d08, 0x3a17, 0x3b84, 0x3804, 0x3a24, 0x38a3, 0x3562, 0x3ae6, 0x3bba, 0x3a45, 0x3679, 0x31fa, 0x3994, 0x2c3d, 0x383f, 0x399d, 0x34f7, 0x360e, 0x35f3, 0x38f0, -0x38d4, 0x399a, 0x3a48, 0x3987, 0x3b54, 0x382c, 0x3210, 0x35ef, 0x36ca, 0x31b4, 0x3625, 0x371f, 0x37bd, 0x3680, 0x3a3a, 0x3ac0, 0x3bbf, 0x3bf5, 0x39f2, 0x29c2, 0x363e, 0x3a4e, 0x3596, 0x3b1b, 0x3459, 0x3669, 0x3aa1, 0x39c3, 0x3376, 0x390d, 0x2456, 0x39b5, -0x3a66, 0x3ad8, 0x3b51, 0x36aa, 0x32be, 0x3ac8, 0x392b, 0x3740, 0x3a48, 0x38f5, 0x3b2d, 0x3a5f, 0x2ff3, 0x366f, 0x39d3, 0x35e5, 0x3822, 0x38db, 0x3b8a, 0x34be, 0x2d33, 0x36dd, 0x3578, 0x3bdf, 0x2c7e, 0x39cf, 0x32ff, 0x35c9, 0x3970, 0x3bcb, 0x351e, 0x3956, -0x2c42, 0x3308, 0x377a, 0x361c, 0x39a0, 0x36c9, 0x2dcb, 0x3bf2, 0x3b5f, 0x33ee, 0x24c1, 0x2ce9, 0x3927, 0x305d, 0x3702, 0x3119, 0x35f9, 0x3855, 0x3374, 0x349b, 0x3bcf, 0x2dea, 0x34f0, 0x363f, 0x37da, 0x3a74, 0x35fc, 0x35fa, 0x316b, 0x3804, 0x37a7, 0x3986, -0x3073, 0x3aed, 0x31c7, 0x3844, 0x34a4, 0x387d, 0x3a20, 0x3037, 0x3a00, 0x3b70, 0x377f, 0x3686, 0x3b7e, 0x38b3, 0x32e3, 0x3323, 0x391e, 0x3228, 0x3930, 0x3997, 0x3a5e, 0x398b, 0x3512, 0x35b0, 0x365c, 0x325d, 0x3b61, 0x38b8, 0x39a4, 0x3423, 0x3bd7, 0x38af, -0x2d3d, 0x382d, 0x38ac, 0x26ca, 0x395e, 0x21a8, 0x3520, 0x386f, 0x3b95, 0x32c0, 0x3b84, 0x3a51, 0x3b4b, 0x31d2, 0x3747, 0x3b96, 0x3b40, 0x3535, 0x38d1, 0x3899, 0x3b00, 0x3827, 0x3ae3, 0x38c8, 0x3a07, 0x338d, 0x2e96, 0x3a46, 0x394a, 0x39de, 0x2951, 0x3a02, -0x3838, 0x2d45, 0x28c0, 0x3958, 0x3070, 0x2aa2, 0x3510, 0x38ce, 0x271c, 0x3440, 0x3954, 0x30bc, 0x3b35, 0x2f1d, 0x3afb, 0x2dae, 0x356f, 0x2e13, 0x3981, 0x326d, 0x3a28, 0x3a36, 0x3a95, 0x38cb, 0x38db, 0x3150, 0x2c9e, 0x34c5, 0x3adb, 0x3bdf, 0x38f2, 0x3994, -0x36f8, 0x31c0, 0x3a4f, 0x3825, 0x394b, 0x3a8b, 0x38ac, 0x3167, 0x2e2d, 0x3a93, 0x34f3, 0x37bd, 0x3b63, 0x2f2f, 0x3ae0, 0x3ad8, 0x34a8, 0x2e1c, 0x3890, 0x3705, 0x3b69, 0x3bc1, 0x28af, 0x3b36, 0x348b, 0x3111, 0x3a8d, 0x389c, 0x3916, 0x36dc, 0x3bae, 0x3874, -0x3593, 0x3638, 0x3018, 0x3a56, 0x38a3, 0x2ad4, 0x3a25, 0x38d7, 0x3864, 0x31c1, 0x28d1, 0x39c8, 0x37d6, 0x2c7f, 0x3ba5, 0x34b8, 0x3bef, 0x3b83, 0x3ab5, 0x3062, 0x38bc, 0x399c, 0x2ce4, 0x2f2c, 0x39bf, 0x2ed1, 0x385f, 0x37e0, 0x35ee, 0x397d, 0x3b0c, 0x3049, -0x39d5, 0x322e, 0x3936, 0x3747, 0x2e15, 0x3b41, 0x3874, 0x3bd0, 0x2c04, 0x3800, 0x375b, 0x3b2d, 0x38d8, 0x3a51, 0x3406, 0x38da, 0x38ba, 0x3497, 0x382e, 0x35fc, 0x39d4, 0x3775, 0x3b1e, 0x3813, 0x3649, 0x31af, 0x37bb, 0x334a, 0x3a6e, 0x3284, 0x26e0, 0x2e01, -0x2ebb, 0x344b, 0x3821, 0x381a, 0x385a, 0x2534, 0x3635, 0x2a92, 0x3b8c, 0x31f0, 0x3947, 0x3ac7, 0x3743, 0x3924, 0x39e4, 0x358f, 0x2b62, 0x392c, 0x3955, 0x3341, 0x3676, 0x38ac, 0x3957, 0x335b, 0x2ca2, 0x39ff, 0x37cb, 0x341f, 0x3ac9, 0x3b6c, 0x2f14, 0x34c3, -0x3018, 0x3169, 0x355b, 0x3624, 0x31ed, 0x379e, 0x3268, 0x309b, 0x35db, 0x3872, 0x3bdb, 0x34c7, 0x3408, 0x3359, 0x3920, 0x331f, 0x3866, 0x3af0, 0x2a1a, 0x39e0, 0x3b14, 0x34fa, 0x2d18, 0x3963, 0x35e8, 0x2539, 0x38f5, 0x37b3, 0x378f, 0x31b5, 0x3a6c, 0x3685, -0x3a06, 0x318a, 0x2934, 0x33c1, 0x3be8, 0x375b, 0x3860, 0x3543, 0x3702, 0x3951, 0x3677, 0x37ff, 0x2e27, 0x2e3a, 0x340f, 0x3817, 0x2f04, 0x357e, 0x3a1d, 0x2dd6, 0x252a, 0x3945, 0x162a, 0x3b19, 0x3a53, 0x35d2, 0x3a5d, 0x3474, 0x38e9, 0x374b, 0x387c, 0x1f1a, -0x38ac, 0x3291, 0x3393, 0x3b53, 0x3169, 0x3bca, 0x2f1a, 0x3551, 0x38a3, 0x28e3, 0x369d, 0x34a1, 0x38a8, 0x34c3, 0x3841, 0x390d, 0x3b13, 0x3282, 0x3a29, 0x3a78, 0x2df3, 0x3a37, 0x35f4, 0x35a6, 0x38e8, 0x3328, 0x3beb, 0x390b, 0x32dc, 0x34dc, 0x396d, 0x3a78, -0x39ba, 0x3a06, 0x2cdd, 0x3bc3, 0x2d43, 0x2992, 0x3663, 0x3a68, 0x2c3e, 0x394e, 0x2c9f, 0x380e, 0x37f5, 0x3557, 0x2873, 0x390f, 0x39e7, 0x3939, 0x3669, 0x385c, 0x3a68, 0x32c4, 0x2b04, 0x2d6d, 0x39d3, 0x3895, 0x331d, 0x3b59, 0x3463, 0x2b6a, 0x31de, 0x3296, -0x3aae, 0x3bcd, 0x345a, 0x3897, 0x374b, 0x3bd4, 0x38a2, 0x357f, 0x3402, 0x3a0c, 0x3507, 0x3865, 0x3a54, 0x3878, 0x3859, 0x383e, 0x32b5, 0x34ea, 0x328d, 0x38b6, 0x3464, 0x2f5b, 0x35ff, 0x3817, 0x2f24, 0x3533, 0x3b21, 0x37ba, 0x3837, 0x2e34, 0x3bad, 0x34bc -}; \ No newline at end of file diff --git a/astral/redmule/inc/x_input.h b/astral/redmule/inc/x_input.h deleted file mode 100644 index 1e38d23..0000000 --- a/astral/redmule/inc/x_input.h +++ /dev/null @@ -1,27 +0,0 @@ - /* Header file generated by RedMulE Golden Model */ -uint16_t x_inp [768] = { -0x2153, 0x3bb5, 0x3896, 0x365f, 0x2483, 0x3518, 0x2dd1, 0x3bca, 0x397b, 0x29b1, 0x3705, 0x36c8, 0x398b, 0x3661, 0x2f05, 0x365a, 0x3bf9, 0x34df, 0x363b, 0x38d9, 0x39c6, 0x3abb, 0x3952, 0x38f2, 0x392d, 0x3b3e, 0x2afb, 0x3a9d, 0x353b, 0x3b73, 0x3a01, 0x3679, -0x3934, 0x397d, 0x2904, 0x3822, 0x3462, 0x3b44, 0x39e9, 0x28be, 0x331e, 0x3a1d, 0x39e5, 0x34da, 0x3a19, 0x3906, 0x1d35, 0x3871, 0x31e7, 0x3b29, 0x325d, 0x3797, 0x2b2f, 0x38b4, 0x232f, 0x38aa, 0x3aca, 0x316f, 0x3811, 0x3950, 0x32ea, 0x3bc7, 0x382c, 0x38a2, -0x29ce, 0x3afa, 0x3a39, 0x2ccc, 0x39fd, 0x3b3d, 0x384a, 0x3a35, 0x3802, 0x366a, 0x37ec, 0x3598, 0x3bf8, 0x3a85, 0x3a1b, 0x386e, 0x3b4c, 0x39de, 0x38c2, 0x2f93, 0x3b4c, 0x39c4, 0x3b9e, 0x3844, 0x346d, 0x3bff, 0x32ce, 0x296d, 0x3130, 0x3b3d, 0x3b44, 0x369d, -0x3b13, 0x31ed, 0x330a, 0x3831, 0x34e7, 0x37b3, 0x331a, 0x3918, 0x32d3, 0x3995, 0x3991, 0x3919, 0x3a26, 0x385b, 0x2b76, 0x3a3b, 0x37f2, 0x26a7, 0x3225, 0x3b64, 0x28f0, 0x3456, 0x3822, 0x341e, 0x381a, 0x38d8, 0x2c11, 0x33be, 0x33ac, 0x353f, 0x3476, 0x3abc, -0x36ec, 0x3a1d, 0x39d3, 0x3821, 0x36ac, 0x3bce, 0x3ad2, 0x3616, 0x36a1, 0x2cb3, 0x38d2, 0x314f, 0x385c, 0x3b63, 0x3bb6, 0x2951, 0x372d, 0x2c42, 0x3823, 0x3883, 0x3872, 0x31ee, 0x36c5, 0x399a, 0x31b0, 0x3887, 0x3884, 0x3865, 0x3896, 0x36c3, 0x32e3, 0x346c, -0x3935, 0x3b50, 0x2b6d, 0x38cd, 0x388f, 0x3389, 0x395d, 0x31cd, 0x2efd, 0x3154, 0x2f35, 0x3444, 0x3293, 0x3b6b, 0x1bec, 0x3b69, 0x3bf3, 0x3611, 0x3508, 0x3742, 0x3a50, 0x3ab7, 0x3457, 0x38d3, 0x3344, 0x38e8, 0x33c0, 0x3668, 0x3bee, 0x3b21, 0x3727, 0x3121, -0x316c, 0x3288, 0x2d50, 0x2e74, 0x35d5, 0x37e2, 0x303d, 0x36af, 0x341f, 0x3436, 0x2df7, 0x399d, 0x30f4, 0x3aaf, 0x34e4, 0x2c2a, 0x3116, 0x34d3, 0x36ac, 0x35e3, 0x3760, 0x36e1, 0x3ad2, 0x3547, 0x38f4, 0x369c, 0x3ba9, 0x34f0, 0x3a39, 0x3b19, 0x36e6, 0x395d, -0x3be8, 0x3293, 0x3bfc, 0x3435, 0x2eb3, 0x3360, 0x3919, 0x3bed, 0x396a, 0x37fc, 0x3242, 0x384b, 0x38cb, 0x3b2c, 0x3b28, 0x28cf, 0x3828, 0x3855, 0x3ba9, 0x2fa7, 0x340b, 0x32f1, 0x3ada, 0x36fa, 0x31f5, 0x3436, 0x29d0, 0x33e6, 0x3232, 0x3bec, 0x3904, 0x2797, -0x3b81, 0x3bac, 0x38d2, 0x343d, 0x31af, 0x3b1e, 0x33fc, 0x3864, 0x3624, 0x3905, 0x2945, 0x3b52, 0x2d08, 0x3a17, 0x3b84, 0x3804, 0x3a24, 0x38a3, 0x3562, 0x3ae6, 0x3bba, 0x3a45, 0x3679, 0x31fa, 0x3994, 0x2c3d, 0x383f, 0x399d, 0x34f7, 0x360e, 0x35f3, 0x38f0, -0x38d4, 0x399a, 0x3a48, 0x3987, 0x3b54, 0x382c, 0x3210, 0x35ef, 0x36ca, 0x31b4, 0x3625, 0x371f, 0x37bd, 0x3680, 0x3a3a, 0x3ac0, 0x3bbf, 0x3bf5, 0x39f2, 0x29c2, 0x363e, 0x3a4e, 0x3596, 0x3b1b, 0x3459, 0x3669, 0x3aa1, 0x39c3, 0x3376, 0x390d, 0x2456, 0x39b5, -0x3a66, 0x3ad8, 0x3b51, 0x36aa, 0x32be, 0x3ac8, 0x392b, 0x3740, 0x3a48, 0x38f5, 0x3b2d, 0x3a5f, 0x2ff3, 0x366f, 0x39d3, 0x35e5, 0x3822, 0x38db, 0x3b8a, 0x34be, 0x2d33, 0x36dd, 0x3578, 0x3bdf, 0x2c7e, 0x39cf, 0x32ff, 0x35c9, 0x3970, 0x3bcb, 0x351e, 0x3956, -0x2c42, 0x3308, 0x377a, 0x361c, 0x39a0, 0x36c9, 0x2dcb, 0x3bf2, 0x3b5f, 0x33ee, 0x24c1, 0x2ce9, 0x3927, 0x305d, 0x3702, 0x3119, 0x35f9, 0x3855, 0x3374, 0x349b, 0x3bcf, 0x2dea, 0x34f0, 0x363f, 0x37da, 0x3a74, 0x35fc, 0x35fa, 0x316b, 0x3804, 0x37a7, 0x3986, -0x3073, 0x3aed, 0x31c7, 0x3844, 0x34a4, 0x387d, 0x3a20, 0x3037, 0x3a00, 0x3b70, 0x377f, 0x3686, 0x3b7e, 0x38b3, 0x32e3, 0x3323, 0x391e, 0x3228, 0x3930, 0x3997, 0x3a5e, 0x398b, 0x3512, 0x35b0, 0x365c, 0x325d, 0x3b61, 0x38b8, 0x39a4, 0x3423, 0x3bd7, 0x38af, -0x2d3d, 0x382d, 0x38ac, 0x26ca, 0x395e, 0x21a8, 0x3520, 0x386f, 0x3b95, 0x32c0, 0x3b84, 0x3a51, 0x3b4b, 0x31d2, 0x3747, 0x3b96, 0x3b40, 0x3535, 0x38d1, 0x3899, 0x3b00, 0x3827, 0x3ae3, 0x38c8, 0x3a07, 0x338d, 0x2e96, 0x3a46, 0x394a, 0x39de, 0x2951, 0x3a02, -0x3838, 0x2d45, 0x28c0, 0x3958, 0x3070, 0x2aa2, 0x3510, 0x38ce, 0x271c, 0x3440, 0x3954, 0x30bc, 0x3b35, 0x2f1d, 0x3afb, 0x2dae, 0x356f, 0x2e13, 0x3981, 0x326d, 0x3a28, 0x3a36, 0x3a95, 0x38cb, 0x38db, 0x3150, 0x2c9e, 0x34c5, 0x3adb, 0x3bdf, 0x38f2, 0x3994, -0x36f8, 0x31c0, 0x3a4f, 0x3825, 0x394b, 0x3a8b, 0x38ac, 0x3167, 0x2e2d, 0x3a93, 0x34f3, 0x37bd, 0x3b63, 0x2f2f, 0x3ae0, 0x3ad8, 0x34a8, 0x2e1c, 0x3890, 0x3705, 0x3b69, 0x3bc1, 0x28af, 0x3b36, 0x348b, 0x3111, 0x3a8d, 0x389c, 0x3916, 0x36dc, 0x3bae, 0x3874, -0x3593, 0x3638, 0x3018, 0x3a56, 0x38a3, 0x2ad4, 0x3a25, 0x38d7, 0x3864, 0x31c1, 0x28d1, 0x39c8, 0x37d6, 0x2c7f, 0x3ba5, 0x34b8, 0x3bef, 0x3b83, 0x3ab5, 0x3062, 0x38bc, 0x399c, 0x2ce4, 0x2f2c, 0x39bf, 0x2ed1, 0x385f, 0x37e0, 0x35ee, 0x397d, 0x3b0c, 0x3049, -0x39d5, 0x322e, 0x3936, 0x3747, 0x2e15, 0x3b41, 0x3874, 0x3bd0, 0x2c04, 0x3800, 0x375b, 0x3b2d, 0x38d8, 0x3a51, 0x3406, 0x38da, 0x38ba, 0x3497, 0x382e, 0x35fc, 0x39d4, 0x3775, 0x3b1e, 0x3813, 0x3649, 0x31af, 0x37bb, 0x334a, 0x3a6e, 0x3284, 0x26e0, 0x2e01, -0x2ebb, 0x344b, 0x3821, 0x381a, 0x385a, 0x2534, 0x3635, 0x2a92, 0x3b8c, 0x31f0, 0x3947, 0x3ac7, 0x3743, 0x3924, 0x39e4, 0x358f, 0x2b62, 0x392c, 0x3955, 0x3341, 0x3676, 0x38ac, 0x3957, 0x335b, 0x2ca2, 0x39ff, 0x37cb, 0x341f, 0x3ac9, 0x3b6c, 0x2f14, 0x34c3, -0x3018, 0x3169, 0x355b, 0x3624, 0x31ed, 0x379e, 0x3268, 0x309b, 0x35db, 0x3872, 0x3bdb, 0x34c7, 0x3408, 0x3359, 0x3920, 0x331f, 0x3866, 0x3af0, 0x2a1a, 0x39e0, 0x3b14, 0x34fa, 0x2d18, 0x3963, 0x35e8, 0x2539, 0x38f5, 0x37b3, 0x378f, 0x31b5, 0x3a6c, 0x3685, -0x3a06, 0x318a, 0x2934, 0x33c1, 0x3be8, 0x375b, 0x3860, 0x3543, 0x3702, 0x3951, 0x3677, 0x37ff, 0x2e27, 0x2e3a, 0x340f, 0x3817, 0x2f04, 0x357e, 0x3a1d, 0x2dd6, 0x252a, 0x3945, 0x162a, 0x3b19, 0x3a53, 0x35d2, 0x3a5d, 0x3474, 0x38e9, 0x374b, 0x387c, 0x1f1a, -0x38ac, 0x3291, 0x3393, 0x3b53, 0x3169, 0x3bca, 0x2f1a, 0x3551, 0x38a3, 0x28e3, 0x369d, 0x34a1, 0x38a8, 0x34c3, 0x3841, 0x390d, 0x3b13, 0x3282, 0x3a29, 0x3a78, 0x2df3, 0x3a37, 0x35f4, 0x35a6, 0x38e8, 0x3328, 0x3beb, 0x390b, 0x32dc, 0x34dc, 0x396d, 0x3a78, -0x39ba, 0x3a06, 0x2cdd, 0x3bc3, 0x2d43, 0x2992, 0x3663, 0x3a68, 0x2c3e, 0x394e, 0x2c9f, 0x380e, 0x37f5, 0x3557, 0x2873, 0x390f, 0x39e7, 0x3939, 0x3669, 0x385c, 0x3a68, 0x32c4, 0x2b04, 0x2d6d, 0x39d3, 0x3895, 0x331d, 0x3b59, 0x3463, 0x2b6a, 0x31de, 0x3296, -0x3aae, 0x3bcd, 0x345a, 0x3897, 0x374b, 0x3bd4, 0x38a2, 0x357f, 0x3402, 0x3a0c, 0x3507, 0x3865, 0x3a54, 0x3878, 0x3859, 0x383e, 0x32b5, 0x34ea, 0x328d, 0x38b6, 0x3464, 0x2f5b, 0x35ff, 0x3817, 0x2f24, 0x3533, 0x3b21, 0x37ba, 0x3837, 0x2e34, 0x3bad, 0x34bc -}; \ No newline at end of file diff --git a/astral/redmule/inc/y_2D.h b/astral/redmule/inc/y_2D.h deleted file mode 100644 index 9484a10..0000000 --- a/astral/redmule/inc/y_2D.h +++ /dev/null @@ -1,27 +0,0 @@ - /* Header file generated by RedMulE Golden Model */ -uint16_t y_inp_2D [32][32] = { -0x3150, 0x2dc1, 0x3033, 0x31f5, 0x3bb6, 0x3bff, 0x39f9, 0x3662, 0x3720, 0x351d, 0x384b, 0x3093, 0x3b9d, 0x35ad, 0x3695, 0x3466, 0x2300, 0x3445, 0x33ae, 0x3586, 0x38a3, 0x3bdb, 0x33a2, 0x379b, 0x3a0e, 0x38b0, 0x39ba, 0x379b, 0x39d3, 0x3a51, 0x3b30, 0x3794, -0x3b76, 0x3042, 0x38cc, 0x2dfc, 0x3b1a, 0x37fb, 0x38f7, 0x3824, 0x386f, 0x38c7, 0x36ee, 0x3a9c, 0x38d3, 0x2c67, 0x3a80, 0x2f30, 0x3328, 0x3721, 0x3790, 0x34e5, 0x3a6c, 0x3643, 0x3934, 0x3034, 0x38d4, 0x362e, 0x3b4b, 0x3408, 0x30c2, 0x370e, 0x3b31, 0x3b16, -0x3b6b, 0x39d4, 0x339c, 0x381e, 0x313e, 0x3671, 0x3ae2, 0x3479, 0x3940, 0x342d, 0x3925, 0x370a, 0x35d8, 0x2dad, 0x3888, 0x24b9, 0x375d, 0x34bd, 0x3243, 0x2ebb, 0x3970, 0x3a21, 0x3a07, 0x3877, 0x3888, 0x3569, 0x372d, 0x2ac1, 0x331e, 0x384d, 0x3996, 0x34a4, -0x35c1, 0x33a9, 0x21ed, 0x3a42, 0x388d, 0x34e4, 0x33c3, 0x34f9, 0x3a7b, 0x33fb, 0x2cdd, 0x3b0e, 0x333b, 0x3973, 0x34fc, 0x3771, 0x32ea, 0x2de4, 0x31a8, 0x3946, 0x3657, 0x3a4e, 0x36f6, 0x2829, 0x3ba2, 0x3bdc, 0x3bb3, 0x306c, 0x398d, 0x3a1f, 0x3991, 0x3846, -0x3547, 0x3292, 0x2e85, 0x31ed, 0x3979, 0x3a90, 0x28a4, 0x3bed, 0x36d8, 0x340e, 0x3b6a, 0x3ab6, 0x3824, 0x382b, 0x3ac3, 0x3811, 0x36d7, 0x3519, 0x3a92, 0x3a42, 0x29d1, 0x383a, 0x3a9b, 0x300e, 0x2cd3, 0x39cd, 0x3874, 0x3a07, 0x2eb1, 0x3b86, 0x3ad8, 0x3a5d, -0x3712, 0x284a, 0x38c1, 0x3bec, 0x39c0, 0x32cd, 0x3ad8, 0x3bce, 0x3817, 0x3896, 0x3aa7, 0x3870, 0x3996, 0x32cc, 0x3a4c, 0x3757, 0x3814, 0x3b65, 0x3acb, 0x376e, 0x34c0, 0x3609, 0x3bf0, 0x3b24, 0x3b29, 0x3848, 0x34b7, 0x398a, 0x220c, 0x3498, 0x3a8c, 0x3883, -0x38c4, 0x3af6, 0x3a42, 0x2dd6, 0x3147, 0x3717, 0x3a8e, 0x3af9, 0x3296, 0x38ef, 0x34fa, 0x3555, 0x3b29, 0x38de, 0x315e, 0x3773, 0x3b67, 0x3116, 0x38ec, 0x357c, 0x35d0, 0x2518, 0x3958, 0x2a03, 0x37d9, 0x3699, 0x3a1e, 0x3230, 0x3b13, 0x36d4, 0x3b2a, 0x39ad, -0x3b10, 0x351a, 0x3b97, 0x3326, 0x2b54, 0x3b7d, 0x386f, 0x373e, 0x37fa, 0x389b, 0x3b90, 0x3292, 0x3975, 0x38f3, 0x37f1, 0x3590, 0x3810, 0x2fd7, 0x3bf7, 0x3a5a, 0x3a1c, 0x34dd, 0x354c, 0x32f8, 0x3095, 0x321e, 0x39e0, 0x395c, 0x3717, 0x357f, 0x394a, 0x34b1, -0x3ba4, 0x380c, 0x3604, 0x2f50, 0x348d, 0x3828, 0x3a9f, 0x39ce, 0x32ca, 0x3906, 0x3ab2, 0x2ca5, 0x38c9, 0x362a, 0x34b2, 0x29dc, 0x3a36, 0x3052, 0x31b7, 0x3589, 0x387c, 0x3401, 0x3b22, 0x3ad6, 0x3ae8, 0x3238, 0x3494, 0x3502, 0x3717, 0x3a6c, 0x3229, 0x368c, -0x3056, 0x3a56, 0x3498, 0x39eb, 0x2864, 0x342d, 0x39e0, 0x34a1, 0x2b99, 0x3a04, 0x38ff, 0x328c, 0x34d9, 0x387d, 0x3a3c, 0x32e5, 0x39eb, 0x3984, 0x34dd, 0x38a7, 0x373f, 0x39b4, 0x3235, 0x2f58, 0x2f39, 0x3800, 0x3758, 0x3939, 0x39fc, 0x3a4b, 0x38bf, 0x30ee, -0x345e, 0x39c8, 0x3a6d, 0x3262, 0x3b81, 0x31dc, 0x3a15, 0x3bd0, 0x36af, 0x36de, 0x37d5, 0x39d7, 0x3ad3, 0x3ac1, 0x3109, 0x35ea, 0x31c6, 0x398d, 0x3987, 0x3a4a, 0x34d2, 0x2ed2, 0x35e6, 0x352c, 0x39eb, 0x3bd6, 0x3a5b, 0x39d1, 0x34aa, 0x3ade, 0x394b, 0x38a1, -0x2bed, 0x38de, 0x3811, 0x3813, 0x391a, 0x374b, 0x3829, 0x3725, 0x38f0, 0x3583, 0x3966, 0x3a7d, 0x375a, 0x38fe, 0x3696, 0x361c, 0x39a8, 0x35f0, 0x38e1, 0x3003, 0x3595, 0x316e, 0x3862, 0x3af8, 0x3af2, 0x34c8, 0x381d, 0x37d8, 0x3893, 0x3a9c, 0x3989, 0x308c, -0x30cc, 0x2538, 0x399d, 0x3919, 0x399e, 0x21cc, 0x38e9, 0x30f8, 0x3a20, 0x3b3c, 0x3990, 0x259c, 0x3143, 0x3080, 0x3967, 0x3afb, 0x3a1b, 0x3779, 0x2eeb, 0x39f3, 0x379a, 0x369c, 0x3985, 0x3a1b, 0x3ba6, 0x3a53, 0x28d5, 0x3881, 0x31d9, 0x3a34, 0x3bd9, 0x393a, -0x3601, 0x2c6e, 0x3636, 0x3298, 0x39bb, 0x3a08, 0x38db, 0x35ad, 0x3a09, 0x36a6, 0x3bc7, 0x3bac, 0x34ae, 0x3291, 0x290b, 0x3250, 0x2648, 0x333d, 0x2bf3, 0x34b1, 0x30e0, 0x351f, 0x3a74, 0x38dc, 0x3883, 0x2841, 0x35e1, 0x390d, 0x3a50, 0x3abd, 0x386d, 0x3bb7, -0x3b94, 0x36b7, 0x3a49, 0x332f, 0x3a1d, 0x354b, 0x3bab, 0x3346, 0x3417, 0x351e, 0x3b6d, 0x391a, 0x2db3, 0x3b1c, 0x3a4a, 0x37b7, 0x36cf, 0x3a56, 0x39c4, 0x3be9, 0x34f0, 0x39be, 0x3691, 0x1ba5, 0x3888, 0x3040, 0x3ae1, 0x3b9b, 0x398f, 0x3a49, 0x3a16, 0x38c0, -0x386c, 0x39ab, 0x37fa, 0x382c, 0x3a6f, 0x393f, 0x340d, 0x38ef, 0x39d1, 0x3845, 0x398f, 0x363e, 0x3687, 0x3052, 0x3a2b, 0x392c, 0x2f5c, 0x3412, 0x3a1f, 0x3b2f, 0x3bcc, 0x3a63, 0x3a89, 0x36e9, 0x3921, 0x3b80, 0x2dc0, 0x3a03, 0x3beb, 0x38d3, 0x36cb, 0x39a3, -0x3978, 0x3a88, 0x3ba4, 0x3561, 0x28c5, 0x33a0, 0x37be, 0x2c39, 0x30ee, 0x3782, 0x2c07, 0x354e, 0x3491, 0x3a92, 0x331a, 0x3b15, 0x32e1, 0x3839, 0x3afb, 0x36c2, 0x2fd0, 0x29ad, 0x3b2e, 0x39c1, 0x2a8c, 0x341a, 0x2f90, 0x395a, 0x3969, 0x37ea, 0x3a5c, 0x3b6d, -0x3971, 0x3a93, 0x304e, 0x3623, 0x3a22, 0x31ee, 0x29df, 0x2c93, 0x3a01, 0x3a62, 0x366c, 0x371d, 0x3af3, 0x2e08, 0x3ac0, 0x3642, 0x3a28, 0x368d, 0x2d3d, 0x36d9, 0x32c3, 0x373f, 0x36fe, 0x3487, 0x2c81, 0x3623, 0x3b59, 0x3a91, 0x350a, 0x34f4, 0x3b09, 0x2c25, -0x3b13, 0x325a, 0x379e, 0x3a7d, 0x34b1, 0x39d5, 0x2ba8, 0x322b, 0x3b5e, 0x37ab, 0x2e24, 0x3ba9, 0x3a3d, 0x34f7, 0x3ba1, 0x3877, 0x3071, 0x39fb, 0x3bbd, 0x3633, 0x3b36, 0x2daa, 0x3b9b, 0x3aa0, 0x395c, 0x3b8f, 0x38d5, 0x3ab0, 0x3a8f, 0x36c2, 0x3b1f, 0x3489, -0x2acc, 0x3845, 0x3715, 0x37d8, 0x3992, 0x3bff, 0x350e, 0x3ad7, 0x39b0, 0x35ac, 0x3287, 0x385f, 0x3bd4, 0x37a3, 0x3438, 0x39a5, 0x3bcf, 0x38c3, 0x34f6, 0x3ae3, 0x3b57, 0x39af, 0x35eb, 0x3bed, 0x34d4, 0x2a95, 0x3b13, 0x384e, 0x3a3b, 0x33da, 0x3bce, 0x3b99, -0x3559, 0x3335, 0x3a2e, 0x3123, 0x38db, 0x33d0, 0x3638, 0x3b17, 0x3a72, 0x3afc, 0x3936, 0x3838, 0x2b69, 0x3895, 0x3a1a, 0x3192, 0x39d5, 0x37a5, 0x2eb0, 0x2e8b, 0x329a, 0x3b90, 0x390a, 0x3a1e, 0x3847, 0x375d, 0x3873, 0x35e2, 0x3771, 0x30f5, 0x3231, 0x3bd7, -0x2bbc, 0x3ace, 0x31ad, 0x3a6b, 0x28a4, 0x3b48, 0x3ba3, 0x3a84, 0x3353, 0x39f6, 0x381f, 0x2dd6, 0x314c, 0x34af, 0x3929, 0x3921, 0x383b, 0x34b0, 0x3923, 0x32c9, 0x3ae7, 0x318f, 0x3480, 0x2ad8, 0x3042, 0x3a4c, 0x349d, 0x2c12, 0x3abb, 0x3a57, 0x3b0d, 0x3111, -0x3359, 0x3a84, 0x38f2, 0x368d, 0x2f4b, 0x3ba0, 0x395c, 0x3026, 0x3a15, 0x2a04, 0x326e, 0x3522, 0x31a2, 0x382f, 0x2ada, 0x3b7c, 0x2f80, 0x3af5, 0x2d35, 0x38fa, 0x39ab, 0x2c6d, 0x2e7a, 0x39f6, 0x31a4, 0x3a53, 0x358c, 0x3951, 0x3a4e, 0x3916, 0x2a3f, 0x3ae9, -0x3b03, 0x39f8, 0x39fe, 0x3a61, 0x39fb, 0x3704, 0x360d, 0x39a7, 0x37a9, 0x348f, 0x3a30, 0x3af5, 0x366f, 0x3b29, 0x3a6a, 0x33d5, 0x370a, 0x39cd, 0x3444, 0x3bea, 0x3b2b, 0x312e, 0x3b8e, 0x32cf, 0x3b79, 0x3302, 0x3bba, 0x3962, 0x3413, 0x37a1, 0x39e0, 0x3805 -}; \ No newline at end of file diff --git a/astral/redmule/inc/y_input.h b/astral/redmule/inc/y_input.h deleted file mode 100644 index 45a2375..0000000 --- a/astral/redmule/inc/y_input.h +++ /dev/null @@ -1,27 +0,0 @@ - /* Header file generated by RedMulE Golden Model */ -uint16_t y_inp [768] = { -0x3150, 0x2dc1, 0x3033, 0x31f5, 0x3bb6, 0x3bff, 0x39f9, 0x3662, 0x3720, 0x351d, 0x384b, 0x3093, 0x3b9d, 0x35ad, 0x3695, 0x3466, 0x2300, 0x3445, 0x33ae, 0x3586, 0x38a3, 0x3bdb, 0x33a2, 0x379b, 0x3a0e, 0x38b0, 0x39ba, 0x379b, 0x39d3, 0x3a51, 0x3b30, 0x3794, -0x3b76, 0x3042, 0x38cc, 0x2dfc, 0x3b1a, 0x37fb, 0x38f7, 0x3824, 0x386f, 0x38c7, 0x36ee, 0x3a9c, 0x38d3, 0x2c67, 0x3a80, 0x2f30, 0x3328, 0x3721, 0x3790, 0x34e5, 0x3a6c, 0x3643, 0x3934, 0x3034, 0x38d4, 0x362e, 0x3b4b, 0x3408, 0x30c2, 0x370e, 0x3b31, 0x3b16, -0x3b6b, 0x39d4, 0x339c, 0x381e, 0x313e, 0x3671, 0x3ae2, 0x3479, 0x3940, 0x342d, 0x3925, 0x370a, 0x35d8, 0x2dad, 0x3888, 0x24b9, 0x375d, 0x34bd, 0x3243, 0x2ebb, 0x3970, 0x3a21, 0x3a07, 0x3877, 0x3888, 0x3569, 0x372d, 0x2ac1, 0x331e, 0x384d, 0x3996, 0x34a4, -0x35c1, 0x33a9, 0x21ed, 0x3a42, 0x388d, 0x34e4, 0x33c3, 0x34f9, 0x3a7b, 0x33fb, 0x2cdd, 0x3b0e, 0x333b, 0x3973, 0x34fc, 0x3771, 0x32ea, 0x2de4, 0x31a8, 0x3946, 0x3657, 0x3a4e, 0x36f6, 0x2829, 0x3ba2, 0x3bdc, 0x3bb3, 0x306c, 0x398d, 0x3a1f, 0x3991, 0x3846, -0x3547, 0x3292, 0x2e85, 0x31ed, 0x3979, 0x3a90, 0x28a4, 0x3bed, 0x36d8, 0x340e, 0x3b6a, 0x3ab6, 0x3824, 0x382b, 0x3ac3, 0x3811, 0x36d7, 0x3519, 0x3a92, 0x3a42, 0x29d1, 0x383a, 0x3a9b, 0x300e, 0x2cd3, 0x39cd, 0x3874, 0x3a07, 0x2eb1, 0x3b86, 0x3ad8, 0x3a5d, -0x3712, 0x284a, 0x38c1, 0x3bec, 0x39c0, 0x32cd, 0x3ad8, 0x3bce, 0x3817, 0x3896, 0x3aa7, 0x3870, 0x3996, 0x32cc, 0x3a4c, 0x3757, 0x3814, 0x3b65, 0x3acb, 0x376e, 0x34c0, 0x3609, 0x3bf0, 0x3b24, 0x3b29, 0x3848, 0x34b7, 0x398a, 0x220c, 0x3498, 0x3a8c, 0x3883, -0x38c4, 0x3af6, 0x3a42, 0x2dd6, 0x3147, 0x3717, 0x3a8e, 0x3af9, 0x3296, 0x38ef, 0x34fa, 0x3555, 0x3b29, 0x38de, 0x315e, 0x3773, 0x3b67, 0x3116, 0x38ec, 0x357c, 0x35d0, 0x2518, 0x3958, 0x2a03, 0x37d9, 0x3699, 0x3a1e, 0x3230, 0x3b13, 0x36d4, 0x3b2a, 0x39ad, -0x3b10, 0x351a, 0x3b97, 0x3326, 0x2b54, 0x3b7d, 0x386f, 0x373e, 0x37fa, 0x389b, 0x3b90, 0x3292, 0x3975, 0x38f3, 0x37f1, 0x3590, 0x3810, 0x2fd7, 0x3bf7, 0x3a5a, 0x3a1c, 0x34dd, 0x354c, 0x32f8, 0x3095, 0x321e, 0x39e0, 0x395c, 0x3717, 0x357f, 0x394a, 0x34b1, -0x3ba4, 0x380c, 0x3604, 0x2f50, 0x348d, 0x3828, 0x3a9f, 0x39ce, 0x32ca, 0x3906, 0x3ab2, 0x2ca5, 0x38c9, 0x362a, 0x34b2, 0x29dc, 0x3a36, 0x3052, 0x31b7, 0x3589, 0x387c, 0x3401, 0x3b22, 0x3ad6, 0x3ae8, 0x3238, 0x3494, 0x3502, 0x3717, 0x3a6c, 0x3229, 0x368c, -0x3056, 0x3a56, 0x3498, 0x39eb, 0x2864, 0x342d, 0x39e0, 0x34a1, 0x2b99, 0x3a04, 0x38ff, 0x328c, 0x34d9, 0x387d, 0x3a3c, 0x32e5, 0x39eb, 0x3984, 0x34dd, 0x38a7, 0x373f, 0x39b4, 0x3235, 0x2f58, 0x2f39, 0x3800, 0x3758, 0x3939, 0x39fc, 0x3a4b, 0x38bf, 0x30ee, -0x345e, 0x39c8, 0x3a6d, 0x3262, 0x3b81, 0x31dc, 0x3a15, 0x3bd0, 0x36af, 0x36de, 0x37d5, 0x39d7, 0x3ad3, 0x3ac1, 0x3109, 0x35ea, 0x31c6, 0x398d, 0x3987, 0x3a4a, 0x34d2, 0x2ed2, 0x35e6, 0x352c, 0x39eb, 0x3bd6, 0x3a5b, 0x39d1, 0x34aa, 0x3ade, 0x394b, 0x38a1, -0x2bed, 0x38de, 0x3811, 0x3813, 0x391a, 0x374b, 0x3829, 0x3725, 0x38f0, 0x3583, 0x3966, 0x3a7d, 0x375a, 0x38fe, 0x3696, 0x361c, 0x39a8, 0x35f0, 0x38e1, 0x3003, 0x3595, 0x316e, 0x3862, 0x3af8, 0x3af2, 0x34c8, 0x381d, 0x37d8, 0x3893, 0x3a9c, 0x3989, 0x308c, -0x30cc, 0x2538, 0x399d, 0x3919, 0x399e, 0x21cc, 0x38e9, 0x30f8, 0x3a20, 0x3b3c, 0x3990, 0x259c, 0x3143, 0x3080, 0x3967, 0x3afb, 0x3a1b, 0x3779, 0x2eeb, 0x39f3, 0x379a, 0x369c, 0x3985, 0x3a1b, 0x3ba6, 0x3a53, 0x28d5, 0x3881, 0x31d9, 0x3a34, 0x3bd9, 0x393a, -0x3601, 0x2c6e, 0x3636, 0x3298, 0x39bb, 0x3a08, 0x38db, 0x35ad, 0x3a09, 0x36a6, 0x3bc7, 0x3bac, 0x34ae, 0x3291, 0x290b, 0x3250, 0x2648, 0x333d, 0x2bf3, 0x34b1, 0x30e0, 0x351f, 0x3a74, 0x38dc, 0x3883, 0x2841, 0x35e1, 0x390d, 0x3a50, 0x3abd, 0x386d, 0x3bb7, -0x3b94, 0x36b7, 0x3a49, 0x332f, 0x3a1d, 0x354b, 0x3bab, 0x3346, 0x3417, 0x351e, 0x3b6d, 0x391a, 0x2db3, 0x3b1c, 0x3a4a, 0x37b7, 0x36cf, 0x3a56, 0x39c4, 0x3be9, 0x34f0, 0x39be, 0x3691, 0x1ba5, 0x3888, 0x3040, 0x3ae1, 0x3b9b, 0x398f, 0x3a49, 0x3a16, 0x38c0, -0x386c, 0x39ab, 0x37fa, 0x382c, 0x3a6f, 0x393f, 0x340d, 0x38ef, 0x39d1, 0x3845, 0x398f, 0x363e, 0x3687, 0x3052, 0x3a2b, 0x392c, 0x2f5c, 0x3412, 0x3a1f, 0x3b2f, 0x3bcc, 0x3a63, 0x3a89, 0x36e9, 0x3921, 0x3b80, 0x2dc0, 0x3a03, 0x3beb, 0x38d3, 0x36cb, 0x39a3, -0x3978, 0x3a88, 0x3ba4, 0x3561, 0x28c5, 0x33a0, 0x37be, 0x2c39, 0x30ee, 0x3782, 0x2c07, 0x354e, 0x3491, 0x3a92, 0x331a, 0x3b15, 0x32e1, 0x3839, 0x3afb, 0x36c2, 0x2fd0, 0x29ad, 0x3b2e, 0x39c1, 0x2a8c, 0x341a, 0x2f90, 0x395a, 0x3969, 0x37ea, 0x3a5c, 0x3b6d, -0x3971, 0x3a93, 0x304e, 0x3623, 0x3a22, 0x31ee, 0x29df, 0x2c93, 0x3a01, 0x3a62, 0x366c, 0x371d, 0x3af3, 0x2e08, 0x3ac0, 0x3642, 0x3a28, 0x368d, 0x2d3d, 0x36d9, 0x32c3, 0x373f, 0x36fe, 0x3487, 0x2c81, 0x3623, 0x3b59, 0x3a91, 0x350a, 0x34f4, 0x3b09, 0x2c25, -0x3b13, 0x325a, 0x379e, 0x3a7d, 0x34b1, 0x39d5, 0x2ba8, 0x322b, 0x3b5e, 0x37ab, 0x2e24, 0x3ba9, 0x3a3d, 0x34f7, 0x3ba1, 0x3877, 0x3071, 0x39fb, 0x3bbd, 0x3633, 0x3b36, 0x2daa, 0x3b9b, 0x3aa0, 0x395c, 0x3b8f, 0x38d5, 0x3ab0, 0x3a8f, 0x36c2, 0x3b1f, 0x3489, -0x2acc, 0x3845, 0x3715, 0x37d8, 0x3992, 0x3bff, 0x350e, 0x3ad7, 0x39b0, 0x35ac, 0x3287, 0x385f, 0x3bd4, 0x37a3, 0x3438, 0x39a5, 0x3bcf, 0x38c3, 0x34f6, 0x3ae3, 0x3b57, 0x39af, 0x35eb, 0x3bed, 0x34d4, 0x2a95, 0x3b13, 0x384e, 0x3a3b, 0x33da, 0x3bce, 0x3b99, -0x3559, 0x3335, 0x3a2e, 0x3123, 0x38db, 0x33d0, 0x3638, 0x3b17, 0x3a72, 0x3afc, 0x3936, 0x3838, 0x2b69, 0x3895, 0x3a1a, 0x3192, 0x39d5, 0x37a5, 0x2eb0, 0x2e8b, 0x329a, 0x3b90, 0x390a, 0x3a1e, 0x3847, 0x375d, 0x3873, 0x35e2, 0x3771, 0x30f5, 0x3231, 0x3bd7, -0x2bbc, 0x3ace, 0x31ad, 0x3a6b, 0x28a4, 0x3b48, 0x3ba3, 0x3a84, 0x3353, 0x39f6, 0x381f, 0x2dd6, 0x314c, 0x34af, 0x3929, 0x3921, 0x383b, 0x34b0, 0x3923, 0x32c9, 0x3ae7, 0x318f, 0x3480, 0x2ad8, 0x3042, 0x3a4c, 0x349d, 0x2c12, 0x3abb, 0x3a57, 0x3b0d, 0x3111, -0x3359, 0x3a84, 0x38f2, 0x368d, 0x2f4b, 0x3ba0, 0x395c, 0x3026, 0x3a15, 0x2a04, 0x326e, 0x3522, 0x31a2, 0x382f, 0x2ada, 0x3b7c, 0x2f80, 0x3af5, 0x2d35, 0x38fa, 0x39ab, 0x2c6d, 0x2e7a, 0x39f6, 0x31a4, 0x3a53, 0x358c, 0x3951, 0x3a4e, 0x3916, 0x2a3f, 0x3ae9, -0x3b03, 0x39f8, 0x39fe, 0x3a61, 0x39fb, 0x3704, 0x360d, 0x39a7, 0x37a9, 0x348f, 0x3a30, 0x3af5, 0x366f, 0x3b29, 0x3a6a, 0x33d5, 0x370a, 0x39cd, 0x3444, 0x3bea, 0x3b2b, 0x312e, 0x3b8e, 0x32cf, 0x3b79, 0x3302, 0x3bba, 0x3962, 0x3413, 0x37a1, 0x39e0, 0x3805 -}; \ No newline at end of file diff --git a/astral/redmule/inc/z_2D.h b/astral/redmule/inc/z_2D.h deleted file mode 100644 index aff808a..0000000 --- a/astral/redmule/inc/z_2D.h +++ /dev/null @@ -1,27 +0,0 @@ - /* Header file generated by RedMulE Golden Model */ -uint16_t z_oup_2D [24][32] = { -0x4845, 0x4897, 0x4608, 0x4838, 0x4855, 0x487b, 0x4869, 0x4880, 0x46d1, 0x48b0, 0x48db, 0x483f, 0x48c9, 0x485f, 0x4881, 0x483a, 0x484b, 0x472c, 0x4762, 0x492b, 0x4822, 0x48fd, 0x488e, 0x492e, 0x483e, 0x484f, 0x49e8, 0x46d7, 0x484b, 0x489d, 0x490b, 0x47e9, -0x484f, 0x47d2, 0x44be, 0x4747, 0x47c7, 0x46c0, 0x4727, 0x48af, 0x46c5, 0x482d, 0x483d, 0x482e, 0x4897, 0x479f, 0x488b, 0x4749, 0x489a, 0x46a8, 0x46f2, 0x488b, 0x4891, 0x47e8, 0x4872, 0x483d, 0x4716, 0x46fd, 0x49b5, 0x46a0, 0x46e7, 0x47a4, 0x48a1, 0x4767, -0x4939, 0x4935, 0x4703, 0x48c1, 0x4863, 0x48bd, 0x4913, 0x48cf, 0x48b6, 0x48b8, 0x4946, 0x4920, 0x495e, 0x48e1, 0x4938, 0x48b2, 0x493a, 0x4882, 0x483b, 0x49d5, 0x4911, 0x4972, 0x496b, 0x49df, 0x48f2, 0x4888, 0x4a46, 0x4821, 0x48c1, 0x490c, 0x49b2, 0x48a3, -0x463a, 0x47b0, 0x44cb, 0x4762, 0x4765, 0x46b9, 0x466a, 0x4814, 0x4631, 0x4796, 0x4666, 0x474b, 0x4798, 0x4704, 0x4838, 0x4761, 0x47d3, 0x4590, 0x45ea, 0x48a2, 0x47f1, 0x4844, 0x484b, 0x4776, 0x47d6, 0x46d8, 0x48f3, 0x44d3, 0x46fa, 0x478d, 0x481e, 0x466e, -0x4827, 0x481e, 0x45a2, 0x4794, 0x4727, 0x4806, 0x475d, 0x48d5, 0x4708, 0x4828, 0x4862, 0x480d, 0x4895, 0x4832, 0x48bd, 0x47f1, 0x482a, 0x46a7, 0x47b1, 0x492d, 0x484d, 0x4884, 0x48dc, 0x485f, 0x476d, 0x480c, 0x48e9, 0x46d3, 0x4728, 0x4884, 0x48a0, 0x480e, -0x4862, 0x4813, 0x4675, 0x485a, 0x47e8, 0x4738, 0x4836, 0x4823, 0x46e7, 0x4821, 0x4822, 0x47b3, 0x4846, 0x4855, 0x4863, 0x4717, 0x4872, 0x47c1, 0x46d5, 0x488e, 0x47e2, 0x485f, 0x487c, 0x48b8, 0x481e, 0x4788, 0x48bd, 0x4677, 0x46c9, 0x47f8, 0x48fe, 0x47fc, -0x47a0, 0x47b2, 0x4588, 0x467e, 0x4662, 0x46c7, 0x46e8, 0x4812, 0x4536, 0x474e, 0x46c0, 0x468f, 0x481f, 0x4679, 0x46a1, 0x46e2, 0x4809, 0x4560, 0x4630, 0x47eb, 0x46b5, 0x4757, 0x4848, 0x477f, 0x46a6, 0x46d8, 0x4870, 0x459a, 0x4670, 0x4678, 0x47d2, 0x468c, -0x4762, 0x48c4, 0x46e3, 0x4791, 0x46b1, 0x486d, 0x47d0, 0x4867, 0x468d, 0x47f6, 0x48a5, 0x4756, 0x4857, 0x4854, 0x4866, 0x4838, 0x484d, 0x46ec, 0x47d2, 0x48f6, 0x484a, 0x4879, 0x4848, 0x483c, 0x471d, 0x4806, 0x48fa, 0x4730, 0x4768, 0x47b8, 0x4865, 0x46f9, -0x48a8, 0x4918, 0x46ca, 0x4867, 0x4800, 0x4862, 0x48d3, 0x4910, 0x474e, 0x4849, 0x48eb, 0x486b, 0x4966, 0x48c5, 0x48f4, 0x4830, 0x48f9, 0x4778, 0x481e, 0x499e, 0x48cf, 0x48f1, 0x4982, 0x4923, 0x487c, 0x47cf, 0x49ea, 0x4649, 0x4773, 0x495e, 0x48b2, 0x483f, -0x48a7, 0x4975, 0x4616, 0x481e, 0x481f, 0x4866, 0x48b6, 0x4864, 0x47dc, 0x4873, 0x485c, 0x487f, 0x4938, 0x491f, 0x490d, 0x48b6, 0x48f8, 0x48a1, 0x4859, 0x492d, 0x489c, 0x4915, 0x4899, 0x4887, 0x486c, 0x4859, 0x49ca, 0x471e, 0x4867, 0x4918, 0x48d3, 0x4827, -0x488b, 0x4998, 0x4704, 0x481d, 0x48b8, 0x4880, 0x4876, 0x4944, 0x470c, 0x48f2, 0x48b9, 0x489b, 0x4956, 0x48e5, 0x48d6, 0x48a5, 0x48dc, 0x4856, 0x484e, 0x49ab, 0x48e0, 0x490e, 0x48dd, 0x4945, 0x488b, 0x48dd, 0x4a32, 0x47ea, 0x4835, 0x4911, 0x4965, 0x4819, -0x460e, 0x481e, 0x452c, 0x4673, 0x475c, 0x4717, 0x46f6, 0x46d0, 0x4696, 0x46bc, 0x4726, 0x481e, 0x4763, 0x46ea, 0x46fe, 0x4758, 0x478b, 0x4627, 0x4704, 0x483f, 0x46ad, 0x47b1, 0x4792, 0x4816, 0x46f2, 0x4684, 0x4827, 0x45a8, 0x472f, 0x47a4, 0x4797, 0x462b, -0x483f, 0x48ab, 0x468f, 0x4863, 0x485a, 0x4766, 0x481d, 0x48cb, 0x47dc, 0x4903, 0x48fc, 0x4830, 0x48cc, 0x483e, 0x48ab, 0x4864, 0x4966, 0x4763, 0x4794, 0x499d, 0x488e, 0x488b, 0x48dc, 0x4960, 0x4854, 0x484c, 0x499c, 0x474c, 0x4826, 0x48bc, 0x4949, 0x4883, -0x489d, 0x4905, 0x4718, 0x481e, 0x48e3, 0x48f4, 0x48c1, 0x4904, 0x47e8, 0x48b3, 0x4892, 0x48d4, 0x48ff, 0x4894, 0x48d5, 0x4886, 0x48fa, 0x4803, 0x47d2, 0x492e, 0x4870, 0x48b2, 0x48e5, 0x492b, 0x487b, 0x4785, 0x49e3, 0x471d, 0x4837, 0x48bf, 0x489b, 0x48c4, -0x475c, 0x4871, 0x464a, 0x4811, 0x47af, 0x471c, 0x4817, 0x4817, 0x463b, 0x484e, 0x477f, 0x464f, 0x4704, 0x487c, 0x47a3, 0x4725, 0x4853, 0x462a, 0x465a, 0x4860, 0x4736, 0x4880, 0x47e1, 0x482b, 0x4811, 0x46c0, 0x48dc, 0x475d, 0x4668, 0x4806, 0x4893, 0x46f4, -0x4858, 0x4959, 0x463d, 0x487b, 0x480f, 0x484e, 0x48c0, 0x48a6, 0x4847, 0x4894, 0x48a0, 0x484a, 0x491e, 0x48f4, 0x48fc, 0x48b5, 0x48ce, 0x47d2, 0x47db, 0x497f, 0x4955, 0x4939, 0x48a7, 0x48ce, 0x4890, 0x4884, 0x49d6, 0x4763, 0x486e, 0x4922, 0x48f4, 0x48c3, -0x47ec, 0x491c, 0x4698, 0x4783, 0x4715, 0x4754, 0x4745, 0x4752, 0x472f, 0x4832, 0x4817, 0x4809, 0x47f8, 0x48c3, 0x47e6, 0x4800, 0x48b6, 0x4730, 0x480a, 0x48cb, 0x479e, 0x488e, 0x47c2, 0x488e, 0x472f, 0x47ee, 0x489d, 0x4744, 0x4755, 0x4851, 0x4846, 0x47d3, -0x4838, 0x48a0, 0x4634, 0x4762, 0x4786, 0x4806, 0x47e3, 0x482d, 0x4726, 0x486c, 0x47b7, 0x4803, 0x48ac, 0x4814, 0x48e0, 0x4839, 0x4827, 0x4750, 0x46f2, 0x48c5, 0x483f, 0x4886, 0x48ad, 0x4856, 0x47e8, 0x47a9, 0x4937, 0x4743, 0x46d0, 0x481f, 0x484c, 0x4804, -0x47fd, 0x481f, 0x456d, 0x4813, 0x474d, 0x4807, 0x4688, 0x480e, 0x46e8, 0x4810, 0x469f, 0x4799, 0x4853, 0x478f, 0x47f2, 0x4824, 0x47d0, 0x471f, 0x46da, 0x485f, 0x4813, 0x481c, 0x482e, 0x4863, 0x4786, 0x480b, 0x48c9, 0x46b8, 0x475a, 0x46e2, 0x4852, 0x46c5, -0x45af, 0x4802, 0x4466, 0x46c2, 0x465d, 0x4743, 0x46b7, 0x47ba, 0x4636, 0x46c3, 0x4677, 0x4784, 0x485a, 0x47c2, 0x46dc, 0x46ac, 0x47de, 0x460e, 0x465f, 0x4834, 0x47f4, 0x4769, 0x46fc, 0x4810, 0x45fd, 0x45ea, 0x48d0, 0x45b5, 0x4704, 0x4783, 0x4830, 0x46c4, -0x4759, 0x47c7, 0x453d, 0x45b0, 0x4741, 0x4702, 0x4736, 0x4793, 0x461b, 0x47ba, 0x470b, 0x46dd, 0x4657, 0x470b, 0x470d, 0x4710, 0x486c, 0x468f, 0x45c3, 0x46ba, 0x479d, 0x483b, 0x46c9, 0x4774, 0x46a9, 0x46a7, 0x4833, 0x4606, 0x4690, 0x46a9, 0x46f5, 0x46a7, -0x47ac, 0x48bb, 0x452c, 0x4803, 0x470f, 0x4824, 0x47d5, 0x48cb, 0x4707, 0x484a, 0x4832, 0x4797, 0x4851, 0x482c, 0x487a, 0x4877, 0x4891, 0x465d, 0x47f4, 0x48ce, 0x4898, 0x4899, 0x484e, 0x486a, 0x47ac, 0x47f0, 0x493e, 0x4611, 0x47e2, 0x489e, 0x488c, 0x46af, -0x4665, 0x4836, 0x45e4, 0x46b6, 0x46a1, 0x46b9, 0x46c8, 0x46dd, 0x4658, 0x474b, 0x467b, 0x4777, 0x4769, 0x4798, 0x4785, 0x475e, 0x472a, 0x4656, 0x45fb, 0x4881, 0x46fc, 0x472d, 0x476e, 0x47a3, 0x465d, 0x46ca, 0x4855, 0x4500, 0x464f, 0x479a, 0x46c3, 0x4738, -0x481e, 0x486c, 0x4659, 0x4801, 0x4756, 0x477a, 0x47d5, 0x487b, 0x4706, 0x4808, 0x484f, 0x4838, 0x4870, 0x4863, 0x48d3, 0x4806, 0x4865, 0x4771, 0x46be, 0x494c, 0x4915, 0x484c, 0x4900, 0x4862, 0x481a, 0x46e8, 0x4974, 0x46a0, 0x4775, 0x483d, 0x487c, 0x480e -}; \ No newline at end of file diff --git a/astral/redmule/inc/z_output.h b/astral/redmule/inc/z_output.h deleted file mode 100644 index 96c7e5f..0000000 --- a/astral/redmule/inc/z_output.h +++ /dev/null @@ -1,27 +0,0 @@ - /* Header file generated by RedMulE Golden Model */ -uint16_t z_oup [768] = { -0x4845, 0x4897, 0x4608, 0x4838, 0x4855, 0x487b, 0x4869, 0x4880, 0x46d1, 0x48b0, 0x48db, 0x483f, 0x48c9, 0x485f, 0x4881, 0x483a, 0x484b, 0x472c, 0x4762, 0x492b, 0x4822, 0x48fd, 0x488e, 0x492e, 0x483e, 0x484f, 0x49e8, 0x46d7, 0x484b, 0x489d, 0x490b, 0x47e9, -0x484f, 0x47d2, 0x44be, 0x4747, 0x47c7, 0x46c0, 0x4727, 0x48af, 0x46c5, 0x482d, 0x483d, 0x482e, 0x4897, 0x479f, 0x488b, 0x4749, 0x489a, 0x46a8, 0x46f2, 0x488b, 0x4891, 0x47e8, 0x4872, 0x483d, 0x4716, 0x46fd, 0x49b5, 0x46a0, 0x46e7, 0x47a4, 0x48a1, 0x4767, -0x4939, 0x4935, 0x4703, 0x48c1, 0x4863, 0x48bd, 0x4913, 0x48cf, 0x48b6, 0x48b8, 0x4946, 0x4920, 0x495e, 0x48e1, 0x4938, 0x48b2, 0x493a, 0x4882, 0x483b, 0x49d5, 0x4911, 0x4972, 0x496b, 0x49df, 0x48f2, 0x4888, 0x4a46, 0x4821, 0x48c1, 0x490c, 0x49b2, 0x48a3, -0x463a, 0x47b0, 0x44cb, 0x4762, 0x4765, 0x46b9, 0x466a, 0x4814, 0x4631, 0x4796, 0x4666, 0x474b, 0x4798, 0x4704, 0x4838, 0x4761, 0x47d3, 0x4590, 0x45ea, 0x48a2, 0x47f1, 0x4844, 0x484b, 0x4776, 0x47d6, 0x46d8, 0x48f3, 0x44d3, 0x46fa, 0x478d, 0x481e, 0x466e, -0x4827, 0x481e, 0x45a2, 0x4794, 0x4727, 0x4806, 0x475d, 0x48d5, 0x4708, 0x4828, 0x4862, 0x480d, 0x4895, 0x4832, 0x48bd, 0x47f1, 0x482a, 0x46a7, 0x47b1, 0x492d, 0x484d, 0x4884, 0x48dc, 0x485f, 0x476d, 0x480c, 0x48e9, 0x46d3, 0x4728, 0x4884, 0x48a0, 0x480e, -0x4862, 0x4813, 0x4675, 0x485a, 0x47e8, 0x4738, 0x4836, 0x4823, 0x46e7, 0x4821, 0x4822, 0x47b3, 0x4846, 0x4855, 0x4863, 0x4717, 0x4872, 0x47c1, 0x46d5, 0x488e, 0x47e2, 0x485f, 0x487c, 0x48b8, 0x481e, 0x4788, 0x48bd, 0x4677, 0x46c9, 0x47f8, 0x48fe, 0x47fc, -0x47a0, 0x47b2, 0x4588, 0x467e, 0x4662, 0x46c7, 0x46e8, 0x4812, 0x4536, 0x474e, 0x46c0, 0x468f, 0x481f, 0x4679, 0x46a1, 0x46e2, 0x4809, 0x4560, 0x4630, 0x47eb, 0x46b5, 0x4757, 0x4848, 0x477f, 0x46a6, 0x46d8, 0x4870, 0x459a, 0x4670, 0x4678, 0x47d2, 0x468c, -0x4762, 0x48c4, 0x46e3, 0x4791, 0x46b1, 0x486d, 0x47d0, 0x4867, 0x468d, 0x47f6, 0x48a5, 0x4756, 0x4857, 0x4854, 0x4866, 0x4838, 0x484d, 0x46ec, 0x47d2, 0x48f6, 0x484a, 0x4879, 0x4848, 0x483c, 0x471d, 0x4806, 0x48fa, 0x4730, 0x4768, 0x47b8, 0x4865, 0x46f9, -0x48a8, 0x4918, 0x46ca, 0x4867, 0x4800, 0x4862, 0x48d3, 0x4910, 0x474e, 0x4849, 0x48eb, 0x486b, 0x4966, 0x48c5, 0x48f4, 0x4830, 0x48f9, 0x4778, 0x481e, 0x499e, 0x48cf, 0x48f1, 0x4982, 0x4923, 0x487c, 0x47cf, 0x49ea, 0x4649, 0x4773, 0x495e, 0x48b2, 0x483f, -0x48a7, 0x4975, 0x4616, 0x481e, 0x481f, 0x4866, 0x48b6, 0x4864, 0x47dc, 0x4873, 0x485c, 0x487f, 0x4938, 0x491f, 0x490d, 0x48b6, 0x48f8, 0x48a1, 0x4859, 0x492d, 0x489c, 0x4915, 0x4899, 0x4887, 0x486c, 0x4859, 0x49ca, 0x471e, 0x4867, 0x4918, 0x48d3, 0x4827, -0x488b, 0x4998, 0x4704, 0x481d, 0x48b8, 0x4880, 0x4876, 0x4944, 0x470c, 0x48f2, 0x48b9, 0x489b, 0x4956, 0x48e5, 0x48d6, 0x48a5, 0x48dc, 0x4856, 0x484e, 0x49ab, 0x48e0, 0x490e, 0x48dd, 0x4945, 0x488b, 0x48dd, 0x4a32, 0x47ea, 0x4835, 0x4911, 0x4965, 0x4819, -0x460e, 0x481e, 0x452c, 0x4673, 0x475c, 0x4717, 0x46f6, 0x46d0, 0x4696, 0x46bc, 0x4726, 0x481e, 0x4763, 0x46ea, 0x46fe, 0x4758, 0x478b, 0x4627, 0x4704, 0x483f, 0x46ad, 0x47b1, 0x4792, 0x4816, 0x46f2, 0x4684, 0x4827, 0x45a8, 0x472f, 0x47a4, 0x4797, 0x462b, -0x483f, 0x48ab, 0x468f, 0x4863, 0x485a, 0x4766, 0x481d, 0x48cb, 0x47dc, 0x4903, 0x48fc, 0x4830, 0x48cc, 0x483e, 0x48ab, 0x4864, 0x4966, 0x4763, 0x4794, 0x499d, 0x488e, 0x488b, 0x48dc, 0x4960, 0x4854, 0x484c, 0x499c, 0x474c, 0x4826, 0x48bc, 0x4949, 0x4883, -0x489d, 0x4905, 0x4718, 0x481e, 0x48e3, 0x48f4, 0x48c1, 0x4904, 0x47e8, 0x48b3, 0x4892, 0x48d4, 0x48ff, 0x4894, 0x48d5, 0x4886, 0x48fa, 0x4803, 0x47d2, 0x492e, 0x4870, 0x48b2, 0x48e5, 0x492b, 0x487b, 0x4785, 0x49e3, 0x471d, 0x4837, 0x48bf, 0x489b, 0x48c4, -0x475c, 0x4871, 0x464a, 0x4811, 0x47af, 0x471c, 0x4817, 0x4817, 0x463b, 0x484e, 0x477f, 0x464f, 0x4704, 0x487c, 0x47a3, 0x4725, 0x4853, 0x462a, 0x465a, 0x4860, 0x4736, 0x4880, 0x47e1, 0x482b, 0x4811, 0x46c0, 0x48dc, 0x475d, 0x4668, 0x4806, 0x4893, 0x46f4, -0x4858, 0x4959, 0x463d, 0x487b, 0x480f, 0x484e, 0x48c0, 0x48a6, 0x4847, 0x4894, 0x48a0, 0x484a, 0x491e, 0x48f4, 0x48fc, 0x48b5, 0x48ce, 0x47d2, 0x47db, 0x497f, 0x4955, 0x4939, 0x48a7, 0x48ce, 0x4890, 0x4884, 0x49d6, 0x4763, 0x486e, 0x4922, 0x48f4, 0x48c3, -0x47ec, 0x491c, 0x4698, 0x4783, 0x4715, 0x4754, 0x4745, 0x4752, 0x472f, 0x4832, 0x4817, 0x4809, 0x47f8, 0x48c3, 0x47e6, 0x4800, 0x48b6, 0x4730, 0x480a, 0x48cb, 0x479e, 0x488e, 0x47c2, 0x488e, 0x472f, 0x47ee, 0x489d, 0x4744, 0x4755, 0x4851, 0x4846, 0x47d3, -0x4838, 0x48a0, 0x4634, 0x4762, 0x4786, 0x4806, 0x47e3, 0x482d, 0x4726, 0x486c, 0x47b7, 0x4803, 0x48ac, 0x4814, 0x48e0, 0x4839, 0x4827, 0x4750, 0x46f2, 0x48c5, 0x483f, 0x4886, 0x48ad, 0x4856, 0x47e8, 0x47a9, 0x4937, 0x4743, 0x46d0, 0x481f, 0x484c, 0x4804, -0x47fd, 0x481f, 0x456d, 0x4813, 0x474d, 0x4807, 0x4688, 0x480e, 0x46e8, 0x4810, 0x469f, 0x4799, 0x4853, 0x478f, 0x47f2, 0x4824, 0x47d0, 0x471f, 0x46da, 0x485f, 0x4813, 0x481c, 0x482e, 0x4863, 0x4786, 0x480b, 0x48c9, 0x46b8, 0x475a, 0x46e2, 0x4852, 0x46c5, -0x45af, 0x4802, 0x4466, 0x46c2, 0x465d, 0x4743, 0x46b7, 0x47ba, 0x4636, 0x46c3, 0x4677, 0x4784, 0x485a, 0x47c2, 0x46dc, 0x46ac, 0x47de, 0x460e, 0x465f, 0x4834, 0x47f4, 0x4769, 0x46fc, 0x4810, 0x45fd, 0x45ea, 0x48d0, 0x45b5, 0x4704, 0x4783, 0x4830, 0x46c4, -0x4759, 0x47c7, 0x453d, 0x45b0, 0x4741, 0x4702, 0x4736, 0x4793, 0x461b, 0x47ba, 0x470b, 0x46dd, 0x4657, 0x470b, 0x470d, 0x4710, 0x486c, 0x468f, 0x45c3, 0x46ba, 0x479d, 0x483b, 0x46c9, 0x4774, 0x46a9, 0x46a7, 0x4833, 0x4606, 0x4690, 0x46a9, 0x46f5, 0x46a7, -0x47ac, 0x48bb, 0x452c, 0x4803, 0x470f, 0x4824, 0x47d5, 0x48cb, 0x4707, 0x484a, 0x4832, 0x4797, 0x4851, 0x482c, 0x487a, 0x4877, 0x4891, 0x465d, 0x47f4, 0x48ce, 0x4898, 0x4899, 0x484e, 0x486a, 0x47ac, 0x47f0, 0x493e, 0x4611, 0x47e2, 0x489e, 0x488c, 0x46af, -0x4665, 0x4836, 0x45e4, 0x46b6, 0x46a1, 0x46b9, 0x46c8, 0x46dd, 0x4658, 0x474b, 0x467b, 0x4777, 0x4769, 0x4798, 0x4785, 0x475e, 0x472a, 0x4656, 0x45fb, 0x4881, 0x46fc, 0x472d, 0x476e, 0x47a3, 0x465d, 0x46ca, 0x4855, 0x4500, 0x464f, 0x479a, 0x46c3, 0x4738, -0x481e, 0x486c, 0x4659, 0x4801, 0x4756, 0x477a, 0x47d5, 0x487b, 0x4706, 0x4808, 0x484f, 0x4838, 0x4870, 0x4863, 0x48d3, 0x4806, 0x4865, 0x4771, 0x46be, 0x494c, 0x4915, 0x484c, 0x4900, 0x4862, 0x481a, 0x46e8, 0x4974, 0x46a0, 0x4775, 0x483d, 0x487c, 0x480e -}; \ No newline at end of file diff --git a/astral/redmule/redmule.c b/astral/redmule/redmule.c deleted file mode 100644 index 992e223..0000000 --- a/astral/redmule/redmule.c +++ /dev/null @@ -1,112 +0,0 @@ -/* - * Copyright (C) 2022-2023 ETH Zurich and University of Bologna - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * SPDX-License-Identifier: Apache-2.0 - * - * Author: Yvan Tortorella - * - * RedMulE SW test - */ - -#include -#include "stdio.h" -#include "archi_redmule.h" -#include "hal_redmule.h" -#include "pulp.h" - -int main() { - - volatile int errors = 0; - - if(get_core_id() == 0){ - - uint16_t m_size = M_SIZE; - uint16_t n_size = N_SIZE; - uint16_t k_size = K_SIZE; - - uint8_t *x_ext = x_inp; - uint8_t *w_ext = w_inp; - uint8_t *y_ext = y_inp; - uint8_t *z_ext = z_oup; - - uint8_t volatile *x = (uint8_t volatile *) pi_l1_malloc(0, (2*m_size*n_size)); - uint8_t volatile *w = (uint8_t volatile *) pi_l1_malloc(0, (2*n_size*k_size)); - uint8_t volatile *y = (uint8_t volatile *) pi_l1_malloc(0, (2*m_size*k_size)); - - #ifdef USE_NO_DMA - generate_test_data16((int) x, (int) w, (int) y, (int) m_size, (int) n_size, (int) k_size); - #else - volatile unsigned int dma_id = 0; - dma_id = mchan_alloc(); - mchan_transfer((unsigned int) 2*(2*m_size*n_size), - (unsigned int) x_ext, - (unsigned int) x ); - mchan_barrier(dma_id); - mchan_free(dma_id); - - dma_id = mchan_alloc(); - mchan_transfer((unsigned int) 2*(2*n_size*k_size), - (unsigned int) w_ext, - (unsigned int) w ); - mchan_barrier(dma_id); - mchan_free(dma_id); - - dma_id = mchan_alloc(); - mchan_transfer((unsigned int) 2*(2*m_size*k_size), - (unsigned int) y_ext, - (unsigned int) y ); - mchan_barrier(dma_id); - #endif - - int gold_sum = 0, check_sum = 0; - int i,j; - - int offload_id_tmp, offload_id; - - // Enable RedMulE - hwpe_cg_enable(); - - hwpe_soft_clear(); - - // redmule_cfg ((unsigned int) x, - // (unsigned int) w, - // (unsigned int) y, - // m_size, n_size, k_size, - // (uint8_t) GEMM, - // (uint8_t) Float16); - redmule_x_add_set ((unsigned int) x); - redmule_w_add_set ((unsigned int) w); - redmule_y_add_set ((unsigned int) y); - redmule_z_add_set ((unsigned int) y); - redmule_cfg (m_size, n_size, k_size, gemm_ops); - - // Start RedMulE operation - hwpe_trigger_job(); - - // Wait for end of computation - redmule_evt_wait(); - - // Disable RedMulE - hwpe_cg_disable(); - - errors = redmule_compare16((int) y, (int) m_size, (int) k_size); - - *(int *) 0x1A1040A0 = errors; - - printf ("Terminated test with %d errors. See you!\n", errors); - - } - synch_barrier(); - return errors; -} From 484768eb4027d52132a83196247bbc05e2151598 Mon Sep 17 00:00:00 2001 From: Riccardo Tedeschi Date: Fri, 29 Mar 2024 12:07:05 +0100 Subject: [PATCH 30/71] Fix ECC scrubber test return value --- astral/ecc_test/ecc_test.c | 2 +- carfield/ecc_test/ecc_test.c | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/astral/ecc_test/ecc_test.c b/astral/ecc_test/ecc_test.c index d3c92bd..99ee1cf 100644 --- a/astral/ecc_test/ecc_test.c +++ b/astral/ecc_test/ecc_test.c @@ -65,5 +65,5 @@ int main() { printf("mismatch_cnt: %d, fix_cnt: %d, uncorrectable_cnt: %d\n", mismatch_cnt, fix_cnt, uncorrectable_cnt); - return (error != 0) ^ (uncorrectable_cnt != 0); + return (error != 0) && (uncorrectable_cnt == 0); } diff --git a/carfield/ecc_test/ecc_test.c b/carfield/ecc_test/ecc_test.c index d3c92bd..99ee1cf 100644 --- a/carfield/ecc_test/ecc_test.c +++ b/carfield/ecc_test/ecc_test.c @@ -65,5 +65,5 @@ int main() { printf("mismatch_cnt: %d, fix_cnt: %d, uncorrectable_cnt: %d\n", mismatch_cnt, fix_cnt, uncorrectable_cnt); - return (error != 0) ^ (uncorrectable_cnt != 0); + return (error != 0) && (uncorrectable_cnt == 0); } From c4af4ddd3a945f35e7b1240ea3add056f515cac3 Mon Sep 17 00:00:00 2001 From: Andrea Belano Date: Tue, 7 May 2024 16:29:06 +0200 Subject: [PATCH 31/71] Added softex tests --- hwpe/softex/Makefile | 9 + hwpe/softex/archi_softex.h | 81 +++ hwpe/softex/hal_softex.h | 91 ++++ hwpe/softex/inc/golden.h | 1031 +++++++++++++++++++++++++++++++++++ hwpe/softex/inc/scores.h | 1037 ++++++++++++++++++++++++++++++++++++ hwpe/softex/softex.c | 96 ++++ 6 files changed, 2345 insertions(+) create mode 100644 hwpe/softex/Makefile create mode 100644 hwpe/softex/archi_softex.h create mode 100644 hwpe/softex/hal_softex.h create mode 100644 hwpe/softex/inc/golden.h create mode 100644 hwpe/softex/inc/scores.h create mode 100644 hwpe/softex/softex.c diff --git a/hwpe/softex/Makefile b/hwpe/softex/Makefile new file mode 100644 index 0000000..a15e398 --- /dev/null +++ b/hwpe/softex/Makefile @@ -0,0 +1,9 @@ +PULP_APP = test +PULP_APP_SRCS = softex.c +PULP_CFLAGS = -O3 + +ifeq ($(use_dma),1) + PULP_CFLAGS += -DUSE_DMA +endif + +include $(PULP_SDK_HOME)/install/rules/pulp_rt.mk diff --git a/hwpe/softex/archi_softex.h b/hwpe/softex/archi_softex.h new file mode 100644 index 0000000..70727a2 --- /dev/null +++ b/hwpe/softex/archi_softex.h @@ -0,0 +1,81 @@ +/* + * Andrea Belano + * + * Copyright 2024 ETH Zurich and University of Bologna + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * SPDX-License-Identifier: Apache-2.0 + */ + +#ifndef __ARCHI_SOFTEX__ +#define __ARCHI_SOFTEX__ + +#define DATA_WIDTH 256 + +/* PULP Cluster Archi defines */ +#define ARCHI_CLUST_CTRL_BASE 0x50200000 +#define ARCHI_CLUST_HWPE_BASE 0x50201000 +#define DMA_COMMAND_QUEUE 0x50204400 +#define DMA_STATUS_REGISTER 0x50204404 +#define ARCHI_CL_HWPE_EVT0 12 +#define ARCHI_CL_HWPE_EVT1 13 +#define FC_DMA_EVENT 8 +#define CL_DMA_EVENT 22 +#define CLUST_CTRL_HWPE_EN 0x18 +#define CLUST_CTRL_HWPE_EN_MASK 0x800 +#define __builtin_bitinsert(a,b,c,d) (a | (((b << (32-c)) >> (32-c)) << d)) + +#define SOFTEX_BASE_ADD ARCHI_CLUST_HWPE_BASE +#define SOFTEX_CG_EN_MSK 0x4000 +// Commands +#define SOFTEX_TRIGGER 0x00 +#define SOFTEX_ACQUIRE 0x04 +#define SOFTEX_FINISHED 0x08 +#define SOFTEX_STATUS 0x0C +#define SOFTEX_RUNNING_JOB 0x10 +#define SOFTEX_SOFT_CLEAR 0x14 + +#define SOFTEX_REG_OFFS 0x20 + +#define SOFTEX_IN_ADDR SOFTEX_REG_OFFS + 0x00 +#define SOFTEX_OUT_ADDR SOFTEX_REG_OFFS + 0x04 +#define SOFTEX_TOT_LEN SOFTEX_REG_OFFS + 0x08 +#define SOFTEX_COMMANDS SOFTEX_REG_OFFS + 0x0C +#define SOFTEX_CACHE_BASE_ADDR SOFTEX_REG_OFFS + 0x10 +#define SOFTEX_CAST_CTRL SOFTEX_REG_OFFS + 0x14 + + +#define SOFTEX_CMD_ACC_ONLY 0x00000001 +#define SOFTEX_CMD_DIV_ONLY 0x00000002 +#define SOFTEX_CMD_ACQUIRE_SLOT 0x00000004 +#define SOFTEX_CMD_LAST 0x00000008 +#define SOFTEX_CMD_SET_CACHE_ADDR 0x00000010 +#define SOFTEX_CMD_NO_OP 0x00000020 +#define SOFTEX_CMD_INT_INPUT 0x00000040 +#define SOFTEX_CMD_INT_OUTPUT 0x00000080 + +/* DMA Archi */ +#define DMA_TX 0 +#define DMA_RX 1 +#define DMA_INC 1 + +#define PLP_DMA_TYPE_BIT 0x00000011 +#define PLP_DMA_INCR_BIT 0x00000012 +#define PLP_DMA_2D_BIT 0x00000013 +#define PLP_DMA_ELE_BIT 0x00000014 +#define PLP_DMA_ILE_BIT 0x00000015 +#define PLP_DMA_BLE_BIT 0x00000016 +#define PLP_DMA_2D_TCDM_BIT 0x0000017 + +#endif \ No newline at end of file diff --git a/hwpe/softex/hal_softex.h b/hwpe/softex/hal_softex.h new file mode 100644 index 0000000..199a972 --- /dev/null +++ b/hwpe/softex/hal_softex.h @@ -0,0 +1,91 @@ +/* + * Andrea Belano + * + * Copyright 2024 ETH Zurich and University of Bologna + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * SPDX-License-Identifier: Apache-2.0 + */ + +#ifndef __HAL_SOFTEX__ +#define __HAL_SOFTEX__ + +#include +#include "archi_softex.h" + +#define HWPE_WRITE(value, offset) *(volatile int *)(SOFTEX_BASE_ADD + offset) = value +#define HWPE_READ(offset) *(volatile int *)(SOFTEX_BASE_ADD + offset) + +static inline void hwpe_trigger_job() { + HWPE_WRITE(0, SOFTEX_TRIGGER); +} + +static inline int hwpe_acquire_job() { + return HWPE_READ(SOFTEX_ACQUIRE); +} + +static inline unsigned int hwpe_get_status() { + return HWPE_READ(SOFTEX_STATUS); +} + +static inline void hwpe_soft_clear() { + HWPE_WRITE(0, SOFTEX_SOFT_CLEAR); +} + +static inline void hwpe_cg_enable() { + *(volatile int*) (ARCHI_CLUST_CTRL_BASE + CLUST_CTRL_HWPE_EN) |= (CLUST_CTRL_HWPE_EN_MASK | SOFTEX_CG_EN_MSK); +} + +static inline void hwpe_cg_disable() { + *(volatile int*) (ARCHI_CLUST_CTRL_BASE + CLUST_CTRL_HWPE_EN) &= ~(CLUST_CTRL_HWPE_EN_MASK | SOFTEX_CG_EN_MSK); +} + +static inline void softex_evt_wait() { + do { + eu_evt_maskWaitAndClr (1 << ARCHI_CL_HWPE_EVT0); + } while((*(int volatile *)(ARCHI_CLUST_HWPE_BASE + SOFTEX_STATUS)) != 0); +} + +/* DMA APIs */ +static inline int mchan_alloc(){ + return *(volatile int*) DMA_COMMAND_QUEUE; +} + +static inline void mchan_transfer(unsigned int len, + unsigned int ext_addr, + unsigned int tcdm_addr) { + + *(volatile int*) DMA_COMMAND_QUEUE = len | + (DMA_RX << PLP_DMA_TYPE_BIT) | + (DMA_INC << PLP_DMA_INCR_BIT) | + (0 << PLP_DMA_2D_BIT) | + (1 << PLP_DMA_ELE_BIT) | + (1 << PLP_DMA_ILE_BIT) | + (0 << PLP_DMA_BLE_BIT) | + (0 << PLP_DMA_2D_TCDM_BIT); + *(volatile int*) DMA_COMMAND_QUEUE = tcdm_addr; + *(volatile int*) DMA_COMMAND_QUEUE = ext_addr; +} + +static inline void mchan_barrier(int id) { + while(((*(volatile int*)(DMA_STATUS_REGISTER)) >> id ) & 0x1 ) { + eu_evt_maskWaitAndClr(1 << FC_DMA_EVENT); + } +} + +static inline void mchan_free(int id) { + *(volatile int*) DMA_STATUS_REGISTER = 0x1 << id; +} + +#endif \ No newline at end of file diff --git a/hwpe/softex/inc/golden.h b/hwpe/softex/inc/golden.h new file mode 100644 index 0000000..12f0012 --- /dev/null +++ b/hwpe/softex/inc/golden.h @@ -0,0 +1,1031 @@ +#ifndef __SOFTEX_GOLDEN__ +#define __SOFTEX_GOLDEN__ + +#define GOLDEN { \ + 0x31c8, \ + 0x323b, \ + 0x2cba, \ + 0x2bf2, \ + 0x3c72, \ + 0x2c91, \ + 0x39a1, \ + 0x308b, \ + 0x3c56, \ + 0x395d, \ + 0x308b, \ + 0x2f8c, \ + 0x2d45, \ + 0x3693, \ + 0x2613, \ + 0x3a16, \ + 0x32fe, \ + 0x326f, \ + 0x3310, \ + 0x2b82, \ + 0x2fb4, \ + 0x2c91, \ + 0x2f5b, \ + 0x28dd, \ + 0x3730, \ + 0x3b28, \ + 0x3b58, \ + 0x364a, \ + 0x2c1b, \ + 0x3890, \ + 0x2c80, \ + 0x3c89, \ + 0x38d1, \ + 0x2cef, \ + 0x2f2a, \ + 0x29db, \ + 0x2cba, \ + 0x294e, \ + 0x3906, \ + 0x38b8, \ + 0x39cf, \ + 0x3a8c, \ + 0x38d1, \ + 0x3028, \ + 0x3a78, \ + 0x2e7b, \ + 0x2d90, \ + 0x2f5b, \ + 0x31c8, \ + 0x2f9f, \ + 0x29f8, \ + 0x364a, \ + 0x34db, \ + 0x33fb, \ + 0x3ae8, \ + 0x381a, \ + 0x3028, \ + 0x35bf, \ + 0x2689, \ + 0x364a, \ + 0x3211, \ + 0x3791, \ + 0x33c3, \ + 0x3748, \ + 0x3a5b, \ + 0x39a1, \ + 0x2672, \ + 0x276f, \ + 0x34db, \ + 0x2656, \ + 0x2cef, \ + 0x3c13, \ + 0x33ac, \ + 0x3386, \ + 0x39a1, \ + 0x3058, \ + 0x3253, \ + 0x3b75, \ + 0x3a9f, \ + 0x2753, \ + 0x360b, \ + 0x309d, \ + 0x3568, \ + 0x3c89, \ + 0x276f, \ + 0x28ac, \ + 0x35bf, \ + 0x38a3, \ + 0x344f, \ + 0x2ea1, \ + 0x3003, \ + 0x3c3d, \ + 0x3a16, \ + 0x2626, \ + 0x2d2e, \ + 0x3436, \ + 0x37f0, \ + 0x31c8, \ + 0x36bd, \ + 0x2db8, \ + 0x3386, \ + 0x3a41, \ + 0x33dd, \ + 0x3200, \ + 0x2823, \ + 0x3c02, \ + 0x2dd1, \ + 0x3225, \ + 0x2898, \ + 0x340e, \ + 0x387e, \ + 0x3808, \ + 0x30b2, \ + 0x381a, \ + 0x371c, \ + 0x2689, \ + 0x27ae, \ + 0x3be5, \ + 0x2b32, \ + 0x33ac, \ + 0x3c56, \ + 0x2656, \ + 0x2c48, \ + 0x2cd3, \ + 0x2672, \ + 0x3a5b, \ + 0x3583, \ + 0x3943, \ + 0x2bd6, \ + 0x2a67, \ + 0x387e, \ + 0x3c3d, \ + 0x3709, \ + 0x3ab4, \ + 0x3534, \ + 0x3c13, \ + 0x29aa, \ + 0x2a95, \ + 0x269b, \ + 0x346a, \ + 0x3211, \ + 0x3943, \ + 0x2921, \ + 0x3b9d, \ + 0x2cd3, \ + 0x3a41, \ + 0x3890, \ + 0x323b, \ + 0x2cef, \ + 0x2851, \ + 0x3225, \ + 0x2b4a, \ + 0x2bbd, \ + 0x2a67, \ + 0x3351, \ + 0x3351, \ + 0x2823, \ + 0x3028, \ + 0x382e, \ + 0x3808, \ + 0x2cba, \ + 0x3665, \ + 0x2d2e, \ + 0x2ca5, \ + 0x2db8, \ + 0x3cb0, \ + 0x2fb4, \ + 0x2838, \ + 0x36a7, \ + 0x3253, \ + 0x2810, \ + 0x2753, \ + 0x395d, \ + 0x2f41, \ + 0x36bd, \ + 0x279a, \ + 0x3126, \ + 0x3172, \ + 0x336d, \ + 0x2f05, \ + 0x2f9f, \ + 0x35a8, \ + 0x392c, \ + 0x3015, \ + 0x3780, \ + 0x303f, \ + 0x2e8e, \ + 0x36a7, \ + 0x39cf, \ + 0x34db, \ + 0x2f41, \ + 0x39a1, \ + 0x3ce2, \ + 0x28fa, \ + 0x2a4c, \ + 0x38ed, \ + 0x2936, \ + 0x3ab4, \ + 0x3102, \ + 0x30ca, \ + 0x3be5, \ + 0x31b0, \ + 0x2dd1, \ + 0x2e18, \ + 0x36a7, \ + 0x361d, \ + 0x27fd, \ + 0x2eb6, \ + 0x3a16, \ + 0x2eb6, \ + 0x2a67, \ + 0x37d3, \ + 0x3436, \ + 0x33c3, \ + 0x336d, \ + 0x27c5, \ + 0x2f5b, \ + 0x360b, \ + 0x2cd3, \ + 0x387e, \ + 0x3568, \ + 0x3890, \ + 0x3b9d, \ + 0x3be5, \ + 0x2788, \ + 0x27fd, \ + 0x2886, \ + 0x3126, \ + 0x2eea, \ + 0x2753, \ + 0x2f8c, \ + 0x34db, \ + 0x2d2e, \ + 0x3075, \ + 0x360b, \ + 0x2a1f, \ + 0x3595, \ + 0x3682, \ + 0x2eb6, \ + 0x29db, \ + 0x395d, \ + 0x2f2a, \ + 0x2bbd, \ + 0x3906, \ + 0x263c, \ + 0x2e06, \ + 0x3acc, \ + 0x2700, \ + 0x28dd, \ + 0x2f16, \ + 0x2a67, \ + 0x309d, \ + 0x2b1d, \ + 0x2aa8, \ + 0x3709, \ + 0x28fa, \ + 0x3436, \ + 0x3534, \ + 0x3b03, \ + 0x2fe7, \ + 0x2aa8, \ + 0x2823, \ + 0x326f, \ + 0x32ae, \ + 0x3c72, \ + 0x29db, \ + 0x3253, \ + 0x29db, \ + 0x3225, \ + 0x2c91, \ + 0x2700, \ + 0x2bf2, \ + 0x3bca, \ + 0x34f8, \ + 0x29db, \ + 0x3568, \ + 0x27c5, \ + 0x3730, \ + 0x2672, \ + 0x3730, \ + 0x3a2a, \ + 0x303f, \ + 0x32c5, \ + 0x33c3, \ + 0x3693, \ + 0x37f0, \ + 0x33ac, \ + 0x3906, \ + 0x313d, \ + 0x3780, \ + 0x2cba, \ + 0x2c30, \ + 0x3c72, \ + 0x2cd3, \ + 0x2810, \ + 0x263c, \ + 0x382e, \ + 0x28fa, \ + 0x382e, \ + 0x395d, \ + 0x28ac, \ + 0x38a3, \ + 0x32e0, \ + 0x2724, \ + 0x31b0, \ + 0x2613, \ + 0x273a, \ + 0x2cef, \ + 0x29c1, \ + 0x2b93, \ + 0x2f78, \ + 0x2e2c, \ + 0x344f, \ + 0x2b93, \ + 0x2996, \ + 0x2d60, \ + 0x3ce2, \ + 0x3be5, \ + 0x2672, \ + 0x28c3, \ + 0x2ded, \ + 0x34db, \ + 0x2b4a, \ + 0x38d1, \ + 0x27ae, \ + 0x38ed, \ + 0x2c1b, \ + 0x3172, \ + 0x3288, \ + 0x2810, \ + 0x2bbd, \ + 0x3b03, \ + 0x326f, \ + 0x3b15, \ + 0x3b9d, \ + 0x2a0c, \ + 0x3ae8, \ + 0x3846, \ + 0x2e8e, \ + 0x2ecf, \ + 0x286d, \ + 0x3b28, \ + 0x2eea, \ + 0x3156, \ + 0x2c48, \ + 0x3ab4, \ + 0x35bf, \ + 0x2c48, \ + 0x32c5, \ + 0x2d90, \ + 0x3015, \ + 0x3860, \ + 0x3be5, \ + 0x2ded, \ + 0x3a2a, \ + 0x3b03, \ + 0x32ae, \ + 0x346a, \ + 0x3890, \ + 0x34f8, \ + 0x3a41, \ + 0x3b58, \ + 0x36bd, \ + 0x3bb2, \ + 0x2b4a, \ + 0x39a1, \ + 0x3693, \ + 0x2a83, \ + 0x2d1a, \ + 0x3890, \ + 0x3918, \ + 0x3762, \ + 0x3a2a, \ + 0x3860, \ + 0x2f9f, \ + 0x3ce2, \ + 0x3730, \ + 0x34c1, \ + 0x279a, \ + 0x35a8, \ + 0x2ba6, \ + 0x392c, \ + 0x33ac, \ + 0x3943, \ + 0x2da3, \ + 0x2eea, \ + 0x344f, \ + 0x35d8, \ + 0x2ea1, \ + 0x3c13, \ + 0x2a95, \ + 0x2bf2, \ + 0x2823, \ + 0x36f2, \ + 0x381a, \ + 0x3a05, \ + 0x3846, \ + 0x308b, \ + 0x3ae8, \ + 0x3b8b, \ + 0x354c, \ + 0x3b9d, \ + 0x2e2c, \ + 0x273a, \ + 0x3323, \ + 0x28fa, \ + 0x2b82, \ + 0x34aa, \ + 0x2cef, \ + 0x26e2, \ + 0x392c, \ + 0x2cba, \ + 0x2a67, \ + 0x2b4a, \ + 0x2a67, \ + 0x3748, \ + 0x371c, \ + 0x3288, \ + 0x32c5, \ + 0x3c3d, \ + 0x2e2c, \ + 0x3791, \ + 0x2e5d, \ + 0x3075, \ + 0x3a05, \ + 0x2e8e, \ + 0x32fe, \ + 0x3c02, \ + 0x27fd, \ + 0x2cba, \ + 0x3c89, \ + 0x2838, \ + 0x2700, \ + 0x2e43, \ + 0x3386, \ + 0x37f0, \ + 0x3421, \ + 0x354c, \ + 0x31e2, \ + 0x2996, \ + 0x30b2, \ + 0x2f8c, \ + 0x2a0c, \ + 0x3c02, \ + 0x32e0, \ + 0x2a83, \ + 0x2886, \ + 0x3568, \ + 0x326f, \ + 0x2788, \ + 0x398e, \ + 0x371c, \ + 0x2851, \ + 0x269b, \ + 0x2613, \ + 0x2672, \ + 0x364a, \ + 0x2bf2, \ + 0x387e, \ + 0x2f78, \ + 0x3398, \ + 0x2851, \ + 0x2838, \ + 0x39b6, \ + 0x2e18, \ + 0x3c3d, \ + 0x39b6, \ + 0x3943, \ + 0x28fa, \ + 0x2a83, \ + 0x3cb0, \ + 0x2f2a, \ + 0x2e7b, \ + 0x2f78, \ + 0x3bca, \ + 0x37bb, \ + 0x279a, \ + 0x2e7b, \ + 0x3a9f, \ + 0x392c, \ + 0x27c5, \ + 0x3156, \ + 0x37a5, \ + 0x3c56, \ + 0x3172, \ + 0x2d2e, \ + 0x3665, \ + 0x2fb4, \ + 0x2d08, \ + 0x361d, \ + 0x2abf, \ + 0x36f2, \ + 0x2cd3, \ + 0x30e5, \ + 0x2fb4, \ + 0x2a1f, \ + 0x3cc8, \ + 0x38a3, \ + 0x397b, \ + 0x2f9f, \ + 0x39b6, \ + 0x3200, \ + 0x3253, \ + 0x3156, \ + 0x2724, \ + 0x296a, \ + 0x3a5b, \ + 0x2c30, \ + 0x3398, \ + 0x2f5b, \ + 0x2cef, \ + 0x39ea, \ + 0x3906, \ + 0x3b3f, \ + 0x2724, \ + 0x2753, \ + 0x3200, \ + 0x2a1f, \ + 0x329a, \ + 0x32ae, \ + 0x2b32, \ + 0x33c3, \ + 0x3075, \ + 0x3126, \ + 0x37a5, \ + 0x361d, \ + 0x32fe, \ + 0x3665, \ + 0x263c, \ + 0x2c09, \ + 0x3709, \ + 0x29db, \ + 0x3682, \ + 0x39cf, \ + 0x2ecf, \ + 0x3d00, \ + 0x30ca, \ + 0x3421, \ + 0x3890, \ + 0x2f2a, \ + 0x3172, \ + 0x263c, \ + 0x2689, \ + 0x39ea, \ + 0x2cef, \ + 0x26c8, \ + 0x3015, \ + 0x2936, \ + 0x2689, \ + 0x3943, \ + 0x2db8, \ + 0x37d3, \ + 0x3534, \ + 0x3682, \ + 0x32fe, \ + 0x2b32, \ + 0x2f05, \ + 0x3421, \ + 0x2613, \ + 0x2b4a, \ + 0x3189, \ + 0x3310, \ + 0x2bf2, \ + 0x2f41, \ + 0x3780, \ + 0x3386, \ + 0x3102, \ + 0x326f, \ + 0x2cd3, \ + 0x3c3d, \ + 0x2eb6, \ + 0x33c3, \ + 0x2f5b, \ + 0x2bbd, \ + 0x3b03, \ + 0x2cba, \ + 0x3780, \ + 0x346a, \ + 0x398e, \ + 0x2c30, \ + 0x28fa, \ + 0x2a95, \ + 0x3ae8, \ + 0x2c91, \ + 0x381a, \ + 0x2788, \ + 0x26b0, \ + 0x34f8, \ + 0x3c27, \ + 0x34db, \ + 0x3780, \ + 0x3398, \ + 0x3b58, \ + 0x3172, \ + 0x31e2, \ + 0x350c, \ + 0x3bb2, \ + 0x3748, \ + 0x350c, \ + 0x3b75, \ + 0x34aa, \ + 0x2eb6, \ + 0x381a, \ + 0x2cba, \ + 0x2b1d, \ + 0x2613, \ + 0x3496, \ + 0x2abf, \ + 0x3102, \ + 0x2936, \ + 0x3351, \ + 0x2bbd, \ + 0x3496, \ + 0x3398, \ + 0x3015, \ + 0x2a34, \ + 0x2613, \ + 0x2e43, \ + 0x2ded, \ + 0x29db, \ + 0x37a5, \ + 0x296a, \ + 0x2bbd, \ + 0x3bca, \ + 0x37a5, \ + 0x3a2a, \ + 0x2f9f, \ + 0x3709, \ + 0x29c1, \ + 0x3bca, \ + 0x398e, \ + 0x3595, \ + 0x29f8, \ + 0x2da3, \ + 0x3568, \ + 0x3485, \ + 0x2da3, \ + 0x38a3, \ + 0x3323, \ + 0x2d90, \ + 0x344f, \ + 0x26b0, \ + 0x2a0c, \ + 0x3534, \ + 0x3b03, \ + 0x3b28, \ + 0x3c72, \ + 0x2f5b, \ + 0x2a34, \ + 0x3436, \ + 0x30ca, \ + 0x3730, \ + 0x3211, \ + 0x32e0, \ + 0x3126, \ + 0x3003, \ + 0x395d, \ + 0x294e, \ + 0x38ed, \ + 0x3c9c, \ + 0x2996, \ + 0x2b32, \ + 0x313d, \ + 0x350c, \ + 0x2d90, \ + 0x3d11, \ + 0x2eb6, \ + 0x2f78, \ + 0x39a1, \ + 0x3351, \ + 0x2da3, \ + 0x2985, \ + 0x3225, \ + 0x2c62, \ + 0x3ce2, \ + 0x3682, \ + 0x39cf, \ + 0x2aa8, \ + 0x2ea1, \ + 0x2d1a, \ + 0x344f, \ + 0x290e, \ + 0x2700, \ + 0x2af5, \ + 0x3808, \ + 0x3398, \ + 0x3211, \ + 0x2bbd, \ + 0x3780, \ + 0x3323, \ + 0x3172, \ + 0x350c, \ + 0x3acc, \ + 0x3058, \ + 0x3ab4, \ + 0x3200, \ + 0x2fb4, \ + 0x3cb0, \ + 0x2cba, \ + 0x3015, \ + 0x354c, \ + 0x26e2, \ + 0x2cef, \ + 0x3b28, \ + 0x2c30, \ + 0x3c02, \ + 0x2700, \ + 0x2788, \ + 0x2fb4, \ + 0x28ac, \ + 0x3b03, \ + 0x33c3, \ + 0x34db, \ + 0x3b28, \ + 0x3780, \ + 0x3b58, \ + 0x3d00, \ + 0x3075, \ + 0x28fa, \ + 0x34db, \ + 0x34db, \ + 0x279a, \ + 0x2ea1, \ + 0x3386, \ + 0x37bb, \ + 0x35bf, \ + 0x2eb6, \ + 0x371c, \ + 0x2e7b, \ + 0x2d90, \ + 0x2f78, \ + 0x32ae, \ + 0x3b03, \ + 0x269b, \ + 0x2ba6, \ + 0x2ba6, \ + 0x364a, \ + 0x2c91, \ + 0x279a, \ + 0x28fa, \ + 0x3a9f, \ + 0x33c3, \ + 0x2abf, \ + 0x3a2a, \ + 0x3846, \ + 0x2f2a, \ + 0x2b93, \ + 0x397b, \ + 0x2b4a, \ + 0x371c, \ + 0x2fcc, \ + 0x2a1f, \ + 0x37f0, \ + 0x3943, \ + 0x3730, \ + 0x3d00, \ + 0x2c80, \ + 0x346a, \ + 0x39a1, \ + 0x32ae, \ + 0x308b, \ + 0x39cf, \ + 0x32e0, \ + 0x3c02, \ + 0x2aa8, \ + 0x3568, \ + 0x3c89, \ + 0x2724, \ + 0x296a, \ + 0x3acc, \ + 0x296a, \ + 0x2e7b, \ + 0x2e5d, \ + 0x2936, \ + 0x3c27, \ + 0x3a9f, \ + 0x2ca5, \ + 0x2a4c, \ + 0x2f41, \ + 0x2b82, \ + 0x28c3, \ + 0x39a1, \ + 0x286d, \ + 0x308b, \ + 0x3253, \ + 0x395d, \ + 0x2e8e, \ + 0x2db8, \ + 0x3906, \ + 0x2c48, \ + 0x3310, \ + 0x326f, \ + 0x2810, \ + 0x3172, \ + 0x3632, \ + 0x2b93, \ + 0x3a5b, \ + 0x34db, \ + 0x290e, \ + 0x294e, \ + 0x3c3d, \ + 0x3534, \ + 0x29c1, \ + 0x37a5, \ + 0x39b6, \ + 0x3c13, \ + 0x3acc, \ + 0x269b, \ + 0x33dd, \ + 0x29db, \ + 0x2851, \ + 0x323b, \ + 0x3436, \ + 0x3709, \ + 0x26c8, \ + 0x2656, \ + 0x354c, \ + 0x2810, \ + 0x3ab4, \ + 0x3b9d, \ + 0x371c, \ + 0x2838, \ + 0x3386, \ + 0x3b15, \ + 0x3bca, \ + 0x32e0, \ + 0x2a67, \ + 0x2838, \ + 0x2c91, \ + 0x3189, \ + 0x279a, \ + 0x3225, \ + 0x27c5, \ + 0x3730, \ + 0x2cd3, \ + 0x269b, \ + 0x3225, \ + 0x309d, \ + 0x26e2, \ + 0x2a83, \ + 0x36a7, \ + 0x34aa, \ + 0x2bf2, \ + 0x387e, \ + 0x3c3d, \ + 0x28dd, \ + 0x3730, \ + 0x3253, \ + 0x2ca5, \ + 0x3338, \ + 0x2a67, \ + 0x2ea1, \ + 0x2d7d, \ + 0x3496, \ + 0x2cba, \ + 0x2e2c, \ + 0x2985, \ + 0x3126, \ + 0x2ecf, \ + 0x2e43, \ + 0x32c5, \ + 0x3be5, \ + 0x2e18, \ + 0x3386, \ + 0x3906, \ + 0x2689, \ + 0x33fb, \ + 0x31e2, \ + 0x3762, \ + 0x2b65, \ + 0x3a5b, \ + 0x3a8c, \ + 0x263c, \ + 0x27ae, \ + 0x2a4c, \ + 0x2d60, \ + 0x3860, \ + 0x303f, \ + 0x2724, \ + 0x344f, \ + 0x2d08, \ + 0x351f, \ + 0x361d, \ + 0x30ca, \ + 0x37bb, \ + 0x3ce2, \ + 0x2724, \ + 0x3ab4, \ + 0x2b65, \ + 0x3860, \ + 0x33c3, \ + 0x3015, \ + 0x2c1b, \ + 0x3189, \ + 0x2886, \ + 0x30b2, \ + 0x2996, \ + 0x3288, \ + 0x3918, \ + 0x2b93, \ + 0x2f9f, \ + 0x2613, \ + 0x33fb, \ + 0x3791, \ + 0x3c13, \ + 0x3113, \ + 0x2af5, \ + 0x3791, \ + 0x2e43, \ + 0x2ca5, \ + 0x27ae, \ + 0x3b15, \ + 0x34aa, \ + 0x3338, \ + 0x39a1, \ + 0x387e, \ + 0x3172, \ + 0x2b0b, \ + 0x34aa, \ + 0x2ded, \ + 0x3be5, \ + 0x3323, \ + 0x3568, \ + 0x2f41, \ + 0x2bd6, \ + 0x3568, \ + 0x34c1, \ + 0x2689, \ + 0x2672, \ + 0x2eb6, \ + 0x3b8b, \ + 0x3058, \ + 0x3113, \ + 0x3583, \ + 0x2a34, \ + 0x3906, \ + 0x3bb2, \ + 0x2eea, \ + 0x2ad8, \ + 0x319c, \ + 0x3693, \ + 0x33ac, \ + 0x38b8, \ + 0x2689, \ + 0x31e2, \ + 0x33ac, \ + 0x27ae, \ + 0x2bbd, \ + 0x360b, \ + 0x2985, \ + 0x28ac, \ + 0x2b1d, \ + 0x336d, \ + 0x35bf, \ + 0x323b, \ + 0x2e8e, \ + 0x351f, \ + 0x2b82, \ + 0x313d, \ + 0x3421, \ + 0x2f9f, \ + 0x3b8b, \ + 0x2fe7, \ + 0x360b, \ + 0x2b32, \ + 0x2b32, \ + 0x27c5, \ + 0x273a, \ + 0x3b75, \ + 0x2626, \ + 0x2f2a, \ + 0x296a, \ + 0x3730, \ + 0x37d3, \ + 0x2700, \ + 0x395d, \ + 0x30ca, \ + 0x2921, \ + 0x3156, \ + 0x3c9c, \ + 0x2fe7, \ + 0x2788, \ + 0x2bd6, \ + 0x35bf, \ + 0x3a16, \ + 0x36a7, \ + 0x351f, \ + 0x395d, \ + 0x3288, \ + 0x3a2a, \ + 0x37a5, \ + 0x2bbd, \ + 0x2d1a, \ + 0x34db, \ + 0x3126, \ + 0x2fe7, \ + 0x33fb, \ + 0x294e, \ + 0x2bbd, \ + 0x3156, \ + 0x2e7b, \ + 0x2a67, \ + 0x38ed, \ + 0x397b, \ + 0x30ca, \ + 0x2f78, \ + 0x2a0c, \ + 0x3075, \ + 0x2d2e, \ + 0x2656, \ + 0x3a16, \ + 0x2a83, \ + 0x2c80, \ + 0x3693, \ + 0x354c, \ + 0x2788, \ + 0x36f2, \ + 0x37f0, \ + 0x27ae, \ + 0x34f8, \ + 0x2b82, \ + 0x35a8, \ + 0x3632, \ + 0x2f16, \ +} + +#endif \ No newline at end of file diff --git a/hwpe/softex/inc/scores.h b/hwpe/softex/inc/scores.h new file mode 100644 index 0000000..d60ba7a --- /dev/null +++ b/hwpe/softex/inc/scores.h @@ -0,0 +1,1037 @@ +#ifndef __SOFTEX_SCORES__ +#define __SOFTEX_SCORES__ + +#define LENGTH 1024 + +#define FMT_WIDTH 2 + +#define N_VECTORS 1 + +#define SCORES { \ + 0x4182, \ + 0x4187, \ + 0x4114, \ + 0x4102, \ + 0x41f8, \ + 0x4110, \ + 0x41d9, \ + 0x4168, \ + 0x41f7, \ + 0x41d6, \ + 0x4168, \ + 0x4152, \ + 0x4120, \ + 0x41b7, \ + 0x0000, \ + 0x41de, \ + 0x418f, \ + 0x4189, \ + 0x4190, \ + 0x40f0, \ + 0x4156, \ + 0x4110, \ + 0x414e, \ + 0x4078, \ + 0x41be, \ + 0x41ea, \ + 0x41ec, \ + 0x41b4, \ + 0x4106, \ + 0x41cd, \ + 0x410e, \ + 0x41f9, \ + 0x41d0, \ + 0x4118, \ + 0x414a, \ + 0x40a8, \ + 0x4114, \ + 0x4090, \ + 0x41d2, \ + 0x41cf, \ + 0x41db, \ + 0x41e3, \ + 0x41d0, \ + 0x4160, \ + 0x41e2, \ + 0x413a, \ + 0x4126, \ + 0x414e, \ + 0x4182, \ + 0x4154, \ + 0x40ac, \ + 0x41b4, \ + 0x41a4, \ + 0x419a, \ + 0x41e7, \ + 0x41c8, \ + 0x4160, \ + 0x41ae, \ + 0x3f20, \ + 0x41b4, \ + 0x4185, \ + 0x41c2, \ + 0x4198, \ + 0x41bf, \ + 0x41e1, \ + 0x41d9, \ + 0x3f00, \ + 0x3ff0, \ + 0x41a4, \ + 0x3ec0, \ + 0x4118, \ + 0x41f4, \ + 0x4197, \ + 0x4195, \ + 0x41d9, \ + 0x4164, \ + 0x4188, \ + 0x41ed, \ + 0x41e4, \ + 0x3fe0, \ + 0x41b1, \ + 0x416a, \ + 0x41aa, \ + 0x41f9, \ + 0x3ff0, \ + 0x4068, \ + 0x41ae, \ + 0x41ce, \ + 0x419e, \ + 0x413e, \ + 0x415c, \ + 0x41f6, \ + 0x41de, \ + 0x3e00, \ + 0x411e, \ + 0x419d, \ + 0x41c6, \ + 0x4182, \ + 0x41b9, \ + 0x412a, \ + 0x4195, \ + 0x41e0, \ + 0x4199, \ + 0x4184, \ + 0x4038, \ + 0x41f3, \ + 0x412c, \ + 0x4186, \ + 0x4060, \ + 0x419b, \ + 0x41cc, \ + 0x41c7, \ + 0x416c, \ + 0x41c8, \ + 0x41bd, \ + 0x3f20, \ + 0x4010, \ + 0x41f2, \ + 0x40e4, \ + 0x4197, \ + 0x41f7, \ + 0x3ec0, \ + 0x410a, \ + 0x4116, \ + 0x3f00, \ + 0x41e1, \ + 0x41ab, \ + 0x41d5, \ + 0x4100, \ + 0x40c0, \ + 0x41cc, \ + 0x41f6, \ + 0x41bc, \ + 0x41e5, \ + 0x41a8, \ + 0x41f4, \ + 0x40a0, \ + 0x40c8, \ + 0x3f40, \ + 0x419f, \ + 0x4185, \ + 0x41d5, \ + 0x4088, \ + 0x41ef, \ + 0x4116, \ + 0x41e0, \ + 0x41cd, \ + 0x4187, \ + 0x4118, \ + 0x4048, \ + 0x4186, \ + 0x40e8, \ + 0x40fc, \ + 0x40c0, \ + 0x4193, \ + 0x4193, \ + 0x4038, \ + 0x4160, \ + 0x41c9, \ + 0x41c7, \ + 0x4114, \ + 0x41b5, \ + 0x411e, \ + 0x4112, \ + 0x412a, \ + 0x41fb, \ + 0x4156, \ + 0x4040, \ + 0x41b8, \ + 0x4188, \ + 0x4030, \ + 0x3fe0, \ + 0x41d6, \ + 0x414c, \ + 0x41b9, \ + 0x4008, \ + 0x4176, \ + 0x417c, \ + 0x4194, \ + 0x4146, \ + 0x4154, \ + 0x41ad, \ + 0x41d4, \ + 0x415e, \ + 0x41c1, \ + 0x4162, \ + 0x413c, \ + 0x41b8, \ + 0x41db, \ + 0x41a4, \ + 0x414c, \ + 0x41d9, \ + 0x41fd, \ + 0x4080, \ + 0x40bc, \ + 0x41d1, \ + 0x408c, \ + 0x41e5, \ + 0x4172, \ + 0x416e, \ + 0x41f2, \ + 0x4181, \ + 0x412c, \ + 0x4132, \ + 0x41b8, \ + 0x41b2, \ + 0x4028, \ + 0x4140, \ + 0x41de, \ + 0x4140, \ + 0x40c0, \ + 0x41c5, \ + 0x419d, \ + 0x4198, \ + 0x4194, \ + 0x4018, \ + 0x414e, \ + 0x41b1, \ + 0x4116, \ + 0x41cc, \ + 0x41aa, \ + 0x41cd, \ + 0x41ef, \ + 0x41f2, \ + 0x4000, \ + 0x4028, \ + 0x4058, \ + 0x4176, \ + 0x4144, \ + 0x3fe0, \ + 0x4152, \ + 0x41a4, \ + 0x411e, \ + 0x4166, \ + 0x41b1, \ + 0x40b4, \ + 0x41ac, \ + 0x41b6, \ + 0x4140, \ + 0x40a8, \ + 0x41d6, \ + 0x414a, \ + 0x40fc, \ + 0x41d2, \ + 0x3e80, \ + 0x4130, \ + 0x41e6, \ + 0x3fa0, \ + 0x4078, \ + 0x4148, \ + 0x40c0, \ + 0x416a, \ + 0x40e0, \ + 0x40cc, \ + 0x41bc, \ + 0x4080, \ + 0x419d, \ + 0x41a8, \ + 0x41e8, \ + 0x415a, \ + 0x40cc, \ + 0x4038, \ + 0x4189, \ + 0x418c, \ + 0x41f8, \ + 0x40a8, \ + 0x4188, \ + 0x40a8, \ + 0x4186, \ + 0x4110, \ + 0x3fa0, \ + 0x4102, \ + 0x41f1, \ + 0x41a5, \ + 0x40a8, \ + 0x41aa, \ + 0x4018, \ + 0x41be, \ + 0x3f00, \ + 0x41be, \ + 0x41df, \ + 0x4162, \ + 0x418d, \ + 0x4198, \ + 0x41b7, \ + 0x41c6, \ + 0x4197, \ + 0x41d2, \ + 0x4178, \ + 0x41c1, \ + 0x4114, \ + 0x4108, \ + 0x41f8, \ + 0x4116, \ + 0x4030, \ + 0x3e80, \ + 0x41c9, \ + 0x4080, \ + 0x41c9, \ + 0x41d6, \ + 0x4068, \ + 0x41ce, \ + 0x418e, \ + 0x3fc0, \ + 0x4181, \ + 0x0000, \ + 0x3fd0, \ + 0x4118, \ + 0x40a4, \ + 0x40f4, \ + 0x4150, \ + 0x4134, \ + 0x419e, \ + 0x40f4, \ + 0x409c, \ + 0x4122, \ + 0x41fd, \ + 0x41f2, \ + 0x3f00, \ + 0x4070, \ + 0x412e, \ + 0x41a4, \ + 0x40e8, \ + 0x41d0, \ + 0x4010, \ + 0x41d1, \ + 0x4106, \ + 0x417c, \ + 0x418a, \ + 0x4030, \ + 0x40fc, \ + 0x41e8, \ + 0x4189, \ + 0x41e9, \ + 0x41ef, \ + 0x40b0, \ + 0x41e7, \ + 0x41ca, \ + 0x413c, \ + 0x4142, \ + 0x4050, \ + 0x41ea, \ + 0x4144, \ + 0x417a, \ + 0x410a, \ + 0x41e5, \ + 0x41ae, \ + 0x410a, \ + 0x418d, \ + 0x4126, \ + 0x415e, \ + 0x41cb, \ + 0x41f2, \ + 0x412e, \ + 0x41df, \ + 0x41e8, \ + 0x418c, \ + 0x419f, \ + 0x41cd, \ + 0x41a5, \ + 0x41e0, \ + 0x41ec, \ + 0x41b9, \ + 0x41f0, \ + 0x40e8, \ + 0x41d9, \ + 0x41b7, \ + 0x40c4, \ + 0x411c, \ + 0x41cd, \ + 0x41d3, \ + 0x41c0, \ + 0x41df, \ + 0x41cb, \ + 0x4154, \ + 0x41fd, \ + 0x41be, \ + 0x41a3, \ + 0x4008, \ + 0x41ad, \ + 0x40f8, \ + 0x41d4, \ + 0x4197, \ + 0x41d5, \ + 0x4128, \ + 0x4144, \ + 0x419e, \ + 0x41af, \ + 0x413e, \ + 0x41f4, \ + 0x40c8, \ + 0x4102, \ + 0x4038, \ + 0x41bb, \ + 0x41c8, \ + 0x41dd, \ + 0x41ca, \ + 0x4168, \ + 0x41e7, \ + 0x41ee, \ + 0x41a9, \ + 0x41ef, \ + 0x4134, \ + 0x3fd0, \ + 0x4191, \ + 0x4080, \ + 0x40f0, \ + 0x41a2, \ + 0x4118, \ + 0x3f90, \ + 0x41d4, \ + 0x4114, \ + 0x40c0, \ + 0x40e8, \ + 0x40c0, \ + 0x41bf, \ + 0x41bd, \ + 0x418a, \ + 0x418d, \ + 0x41f6, \ + 0x4134, \ + 0x41c2, \ + 0x4138, \ + 0x4166, \ + 0x41dd, \ + 0x413c, \ + 0x418f, \ + 0x41f3, \ + 0x4028, \ + 0x4114, \ + 0x41f9, \ + 0x4040, \ + 0x3fa0, \ + 0x4136, \ + 0x4195, \ + 0x41c6, \ + 0x419c, \ + 0x41a9, \ + 0x4183, \ + 0x409c, \ + 0x416c, \ + 0x4152, \ + 0x40b0, \ + 0x41f3, \ + 0x418e, \ + 0x40c4, \ + 0x4058, \ + 0x41aa, \ + 0x4189, \ + 0x4000, \ + 0x41d8, \ + 0x41bd, \ + 0x4048, \ + 0x3f40, \ + 0x0000, \ + 0x3f00, \ + 0x41b4, \ + 0x4102, \ + 0x41cc, \ + 0x4150, \ + 0x4196, \ + 0x4048, \ + 0x4040, \ + 0x41da, \ + 0x4132, \ + 0x41f6, \ + 0x41da, \ + 0x41d5, \ + 0x4080, \ + 0x40c4, \ + 0x41fb, \ + 0x414a, \ + 0x413a, \ + 0x4150, \ + 0x41f1, \ + 0x41c4, \ + 0x4008, \ + 0x413a, \ + 0x41e4, \ + 0x41d4, \ + 0x4018, \ + 0x417a, \ + 0x41c3, \ + 0x41f7, \ + 0x417c, \ + 0x411e, \ + 0x41b5, \ + 0x4156, \ + 0x411a, \ + 0x41b2, \ + 0x40d0, \ + 0x41bb, \ + 0x4116, \ + 0x4170, \ + 0x4156, \ + 0x40b4, \ + 0x41fc, \ + 0x41ce, \ + 0x41d7, \ + 0x4154, \ + 0x41da, \ + 0x4184, \ + 0x4188, \ + 0x417a, \ + 0x3fc0, \ + 0x4094, \ + 0x41e1, \ + 0x4108, \ + 0x4196, \ + 0x414e, \ + 0x4118, \ + 0x41dc, \ + 0x41d2, \ + 0x41eb, \ + 0x3fc0, \ + 0x3fe0, \ + 0x4184, \ + 0x40b4, \ + 0x418b, \ + 0x418c, \ + 0x40e4, \ + 0x4198, \ + 0x4166, \ + 0x4176, \ + 0x41c3, \ + 0x41b2, \ + 0x418f, \ + 0x41b5, \ + 0x3e80, \ + 0x4104, \ + 0x41bc, \ + 0x40a8, \ + 0x41b6, \ + 0x41db, \ + 0x4142, \ + 0x41fe, \ + 0x416e, \ + 0x419c, \ + 0x41cd, \ + 0x414a, \ + 0x417c, \ + 0x3e80, \ + 0x3f20, \ + 0x41dc, \ + 0x4118, \ + 0x3f80, \ + 0x415e, \ + 0x408c, \ + 0x3f20, \ + 0x41d5, \ + 0x412a, \ + 0x41c5, \ + 0x41a8, \ + 0x41b6, \ + 0x418f, \ + 0x40e4, \ + 0x4146, \ + 0x419c, \ + 0x0000, \ + 0x40e8, \ + 0x417e, \ + 0x4190, \ + 0x4102, \ + 0x414c, \ + 0x41c1, \ + 0x4195, \ + 0x4172, \ + 0x4189, \ + 0x4116, \ + 0x41f6, \ + 0x4140, \ + 0x4198, \ + 0x414e, \ + 0x40fc, \ + 0x41e8, \ + 0x4114, \ + 0x41c1, \ + 0x419f, \ + 0x41d8, \ + 0x4108, \ + 0x4080, \ + 0x40c8, \ + 0x41e7, \ + 0x4110, \ + 0x41c8, \ + 0x4000, \ + 0x3f60, \ + 0x41a5, \ + 0x41f5, \ + 0x41a4, \ + 0x41c1, \ + 0x4196, \ + 0x41ec, \ + 0x417c, \ + 0x4183, \ + 0x41a6, \ + 0x41f0, \ + 0x41bf, \ + 0x41a6, \ + 0x41ed, \ + 0x41a2, \ + 0x4140, \ + 0x41c8, \ + 0x4114, \ + 0x40e0, \ + 0x0000, \ + 0x41a1, \ + 0x40d0, \ + 0x4172, \ + 0x408c, \ + 0x4193, \ + 0x40fc, \ + 0x41a1, \ + 0x4196, \ + 0x415e, \ + 0x40b8, \ + 0x0000, \ + 0x4136, \ + 0x412e, \ + 0x40a8, \ + 0x41c3, \ + 0x4094, \ + 0x40fc, \ + 0x41f1, \ + 0x41c3, \ + 0x41df, \ + 0x4154, \ + 0x41bc, \ + 0x40a4, \ + 0x41f1, \ + 0x41d8, \ + 0x41ac, \ + 0x40ac, \ + 0x4128, \ + 0x41aa, \ + 0x41a0, \ + 0x4128, \ + 0x41ce, \ + 0x4191, \ + 0x4126, \ + 0x419e, \ + 0x3f60, \ + 0x40b0, \ + 0x41a8, \ + 0x41e8, \ + 0x41ea, \ + 0x41f8, \ + 0x414e, \ + 0x40b8, \ + 0x419d, \ + 0x416e, \ + 0x41be, \ + 0x4185, \ + 0x418e, \ + 0x4176, \ + 0x415c, \ + 0x41d6, \ + 0x4090, \ + 0x41d1, \ + 0x41fa, \ + 0x409c, \ + 0x40e4, \ + 0x4178, \ + 0x41a6, \ + 0x4126, \ + 0x41ff, \ + 0x4140, \ + 0x4150, \ + 0x41d9, \ + 0x4193, \ + 0x4128, \ + 0x4098, \ + 0x4186, \ + 0x410c, \ + 0x41fd, \ + 0x41b6, \ + 0x41db, \ + 0x40cc, \ + 0x413e, \ + 0x411c, \ + 0x419e, \ + 0x4084, \ + 0x3fa0, \ + 0x40d8, \ + 0x41c7, \ + 0x4196, \ + 0x4185, \ + 0x40fc, \ + 0x41c1, \ + 0x4191, \ + 0x417c, \ + 0x41a6, \ + 0x41e6, \ + 0x4164, \ + 0x41e5, \ + 0x4184, \ + 0x4156, \ + 0x41fb, \ + 0x4114, \ + 0x415e, \ + 0x41a9, \ + 0x3f90, \ + 0x4118, \ + 0x41ea, \ + 0x4108, \ + 0x41f3, \ + 0x3fa0, \ + 0x4000, \ + 0x4156, \ + 0x4068, \ + 0x41e8, \ + 0x4198, \ + 0x41a4, \ + 0x41ea, \ + 0x41c1, \ + 0x41ec, \ + 0x41fe, \ + 0x4166, \ + 0x4080, \ + 0x41a4, \ + 0x41a4, \ + 0x4008, \ + 0x413e, \ + 0x4195, \ + 0x41c4, \ + 0x41ae, \ + 0x4140, \ + 0x41bd, \ + 0x413a, \ + 0x4126, \ + 0x4150, \ + 0x418c, \ + 0x41e8, \ + 0x3f40, \ + 0x40f8, \ + 0x40f8, \ + 0x41b4, \ + 0x4110, \ + 0x4008, \ + 0x4080, \ + 0x41e4, \ + 0x4198, \ + 0x40d0, \ + 0x41df, \ + 0x41ca, \ + 0x414a, \ + 0x40f4, \ + 0x41d7, \ + 0x40e8, \ + 0x41bd, \ + 0x4158, \ + 0x40b4, \ + 0x41c6, \ + 0x41d5, \ + 0x41be, \ + 0x41fe, \ + 0x410e, \ + 0x419f, \ + 0x41d9, \ + 0x418c, \ + 0x4168, \ + 0x41db, \ + 0x418e, \ + 0x41f3, \ + 0x40cc, \ + 0x41aa, \ + 0x41f9, \ + 0x3fc0, \ + 0x4094, \ + 0x41e6, \ + 0x4094, \ + 0x413a, \ + 0x4138, \ + 0x408c, \ + 0x41f5, \ + 0x41e4, \ + 0x4112, \ + 0x40bc, \ + 0x414c, \ + 0x40f0, \ + 0x4070, \ + 0x41d9, \ + 0x4050, \ + 0x4168, \ + 0x4188, \ + 0x41d6, \ + 0x413c, \ + 0x412a, \ + 0x41d2, \ + 0x410a, \ + 0x4190, \ + 0x4189, \ + 0x4030, \ + 0x417c, \ + 0x41b3, \ + 0x40f4, \ + 0x41e1, \ + 0x41a4, \ + 0x4084, \ + 0x4090, \ + 0x41f6, \ + 0x41a8, \ + 0x40a4, \ + 0x41c3, \ + 0x41da, \ + 0x41f4, \ + 0x41e6, \ + 0x3f40, \ + 0x4199, \ + 0x40a8, \ + 0x4048, \ + 0x4187, \ + 0x419d, \ + 0x41bc, \ + 0x3f80, \ + 0x3ec0, \ + 0x41a9, \ + 0x4030, \ + 0x41e5, \ + 0x41ef, \ + 0x41bd, \ + 0x4040, \ + 0x4195, \ + 0x41e9, \ + 0x41f1, \ + 0x418e, \ + 0x40c0, \ + 0x4040, \ + 0x4110, \ + 0x417e, \ + 0x4008, \ + 0x4186, \ + 0x4018, \ + 0x41be, \ + 0x4116, \ + 0x3f40, \ + 0x4186, \ + 0x416a, \ + 0x3f90, \ + 0x40c4, \ + 0x41b8, \ + 0x41a2, \ + 0x4102, \ + 0x41cc, \ + 0x41f6, \ + 0x4078, \ + 0x41be, \ + 0x4188, \ + 0x4112, \ + 0x4192, \ + 0x40c0, \ + 0x413e, \ + 0x4124, \ + 0x41a1, \ + 0x4114, \ + 0x4134, \ + 0x4098, \ + 0x4176, \ + 0x4142, \ + 0x4136, \ + 0x418d, \ + 0x41f2, \ + 0x4132, \ + 0x4195, \ + 0x41d2, \ + 0x3f20, \ + 0x419a, \ + 0x4183, \ + 0x41c0, \ + 0x40ec, \ + 0x41e1, \ + 0x41e3, \ + 0x3e80, \ + 0x4010, \ + 0x40bc, \ + 0x4122, \ + 0x41cb, \ + 0x4162, \ + 0x3fc0, \ + 0x419e, \ + 0x411a, \ + 0x41a7, \ + 0x41b2, \ + 0x416e, \ + 0x41c4, \ + 0x41fd, \ + 0x3fc0, \ + 0x41e5, \ + 0x40ec, \ + 0x41cb, \ + 0x4198, \ + 0x415e, \ + 0x4106, \ + 0x417e, \ + 0x4058, \ + 0x416c, \ + 0x409c, \ + 0x418a, \ + 0x41d3, \ + 0x40f4, \ + 0x4154, \ + 0x0000, \ + 0x419a, \ + 0x41c2, \ + 0x41f4, \ + 0x4174, \ + 0x40d8, \ + 0x41c2, \ + 0x4136, \ + 0x4112, \ + 0x4010, \ + 0x41e9, \ + 0x41a2, \ + 0x4192, \ + 0x41d9, \ + 0x41cc, \ + 0x417c, \ + 0x40dc, \ + 0x41a2, \ + 0x412e, \ + 0x41f2, \ + 0x4191, \ + 0x41aa, \ + 0x414c, \ + 0x4100, \ + 0x41aa, \ + 0x41a3, \ + 0x3f20, \ + 0x3f00, \ + 0x4140, \ + 0x41ee, \ + 0x4164, \ + 0x4174, \ + 0x41ab, \ + 0x40b8, \ + 0x41d2, \ + 0x41f0, \ + 0x4144, \ + 0x40d4, \ + 0x4180, \ + 0x41b7, \ + 0x4197, \ + 0x41cf, \ + 0x3f20, \ + 0x4183, \ + 0x4197, \ + 0x4010, \ + 0x40fc, \ + 0x41b1, \ + 0x4098, \ + 0x4068, \ + 0x40e0, \ + 0x4194, \ + 0x41ae, \ + 0x4187, \ + 0x413c, \ + 0x41a7, \ + 0x40f0, \ + 0x4178, \ + 0x419c, \ + 0x4154, \ + 0x41ee, \ + 0x415a, \ + 0x41b1, \ + 0x40e4, \ + 0x40e4, \ + 0x4018, \ + 0x3fd0, \ + 0x41ed, \ + 0x3e00, \ + 0x414a, \ + 0x4094, \ + 0x41be, \ + 0x41c5, \ + 0x3fa0, \ + 0x41d6, \ + 0x416e, \ + 0x4088, \ + 0x417a, \ + 0x41fa, \ + 0x415a, \ + 0x4000, \ + 0x4100, \ + 0x41ae, \ + 0x41de, \ + 0x41b8, \ + 0x41a7, \ + 0x41d6, \ + 0x418a, \ + 0x41df, \ + 0x41c3, \ + 0x40fc, \ + 0x411c, \ + 0x41a4, \ + 0x4176, \ + 0x415a, \ + 0x419a, \ + 0x4090, \ + 0x40fc, \ + 0x417a, \ + 0x413a, \ + 0x40c0, \ + 0x41d1, \ + 0x41d7, \ + 0x416e, \ + 0x4150, \ + 0x40b0, \ + 0x4166, \ + 0x411e, \ + 0x3ec0, \ + 0x41de, \ + 0x40c4, \ + 0x410e, \ + 0x41b7, \ + 0x41a9, \ + 0x4000, \ + 0x41bb, \ + 0x41c6, \ + 0x4010, \ + 0x41a5, \ + 0x40f0, \ + 0x41ad, \ + 0x41b3, \ + 0x4148 \ +} + +#endif \ No newline at end of file diff --git a/hwpe/softex/softex.c b/hwpe/softex/softex.c new file mode 100644 index 0000000..289e6d7 --- /dev/null +++ b/hwpe/softex/softex.c @@ -0,0 +1,96 @@ +/* + * Andrea Belano + * + * Copyright 2024 ETH Zurich and University of Bologna + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * SPDX-License-Identifier: Apache-2.0 + */ + +#include +#include "stdio.h" +#include "archi_softex.h" +#include "hal_softex.h" +#include "pulp.h" + +#include "inc/golden.h" +#include "inc/scores.h" + +#define TOLERANCE 0x2 + +uint16_t scores_ext [LENGTH] = SCORES; +uint16_t golden [LENGTH] = GOLDEN; + +int main() { + volatile int errors = 0; + + uint16_t volatile *scores = (uint16_t volatile *) pi_l1_malloc(0, (FMT_WIDTH*LENGTH)); + + if(get_core_id() == 0){ + #ifdef USE_DMA + volatile unsigned int dma_id = 0; + dma_id = mchan_alloc(); + + mchan_transfer((unsigned int) FMT_WIDTH*LENGTH , + (unsigned int) scores_ext , + (unsigned int) scores + ); + + mchan_barrier(dma_id); + mchan_free(dma_id); + #else + for (int i = 0; i < LENGTH; i++) { + scores [i] = scores_ext [i]; + } + #endif + + // Enable softex + hwpe_cg_enable(); + + hwpe_soft_clear(); + + HWPE_WRITE(scores, SOFTEX_IN_ADDR); + HWPE_WRITE(LENGTH * FMT_WIDTH, SOFTEX_TOT_LEN); + HWPE_WRITE(scores, SOFTEX_OUT_ADDR); + + hwpe_trigger_job(); + + softex_evt_wait(); + + // Disable softex + hwpe_cg_disable(); + + for (int i = 0; i < LENGTH; i++) { + uint16_t diff; + + if (golden [i] >= scores[i]) { + diff = golden [i] - scores [i]; + } else { + diff = scores [i] - golden [i]; + } + + if (diff > TOLERANCE) { + errors += 1; + + printf ("Mismatch!!!\tIndex: %d\tExpected: 0x%04x\tWas: 0x%04x\tDifference: 0x%x\n", i, golden [i], scores [i], diff); + } + } + + *(int *) 0x1A1040A0 = errors; + + printf("Test completed with %d errors\n", errors); + } + synch_barrier(); + return errors; +} From 26dc475c885c448ec2cd6df052dc4d77b8ca0861 Mon Sep 17 00:00:00 2001 From: Yvan Tortorella Date: Wed, 15 May 2024 18:27:09 +0200 Subject: [PATCH 32/71] Remove submodule SSH. --- .gitmodules | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.gitmodules b/.gitmodules index 36d31e4..5ade099 100644 --- a/.gitmodules +++ b/.gitmodules @@ -1,3 +1,3 @@ [submodule "hwpe/neureka/pulp-nnx"] path = hwpe/neureka/pulp-nnx - url = git@github.com:pulp-platform/pulp-nnx + url = https://github.com/pulp-platform/pulp-nnx From c58da1f4c46ba1fff2bcccd5e8ad6308bee51191 Mon Sep 17 00:00:00 2001 From: Andrea Belano Date: Mon, 20 May 2024 11:39:17 +0200 Subject: [PATCH 33/71] Added link to softex test --- astral/softex | 1 + 1 file changed, 1 insertion(+) create mode 120000 astral/softex diff --git a/astral/softex b/astral/softex new file mode 120000 index 0000000..e1a6d4b --- /dev/null +++ b/astral/softex @@ -0,0 +1 @@ +../hwpe/softex/ \ No newline at end of file From 90551fa71498b420df734d23d06d661d0553556a Mon Sep 17 00:00:00 2001 From: Andrea Belano Date: Mon, 27 May 2024 10:20:39 +0200 Subject: [PATCH 34/71] Updated softex test --- hwpe/softex/softex.c | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/hwpe/softex/softex.c b/hwpe/softex/softex.c index 289e6d7..3126f1a 100644 --- a/hwpe/softex/softex.c +++ b/hwpe/softex/softex.c @@ -19,6 +19,7 @@ */ #include +#include #include "stdio.h" #include "archi_softex.h" #include "hal_softex.h" @@ -50,9 +51,7 @@ int main() { mchan_barrier(dma_id); mchan_free(dma_id); #else - for (int i = 0; i < LENGTH; i++) { - scores [i] = scores_ext [i]; - } + memcpy(scores, scores_ext, LENGTH*FMT_WIDTH); #endif // Enable softex From 2ee29de429107adf729170d0ef0ed8e93ff09397 Mon Sep 17 00:00:00 2001 From: Luigi Ghionda Date: Fri, 31 May 2024 00:51:59 +0200 Subject: [PATCH 35/71] Add fault injection in redmule regression to test ECC HCI --- hwpe/redmule/Makefile | 11 +++++++ hwpe/redmule/archi_redmule.h | 6 ++++ hwpe/redmule/hal_redmule.h | 16 +++++++++ hwpe/redmule/pulp_inject_fault.tcl | 53 ++++++++++++++++++++++++++++++ hwpe/redmule/redmule.c | 28 +++++++++++++++- 5 files changed, 113 insertions(+), 1 deletion(-) create mode 100644 hwpe/redmule/pulp_inject_fault.tcl diff --git a/hwpe/redmule/Makefile b/hwpe/redmule/Makefile index 0b85ed2..88346b6 100644 --- a/hwpe/redmule/Makefile +++ b/hwpe/redmule/Makefile @@ -6,4 +6,15 @@ ifeq ($(use_dma),1) PULP_CFLAGS += -DUSE_DMA endif +ifeq ($(fault_inject),1) + export FAULT_INJECTION=1 + export FAULT_INJECTION_SCRIPT=$(CURDIR)/pulp_inject_fault.tcl +endif + +ifeq ($(multi_bit_upset),1) + export MULTI_BIT_UPSET=1 +else + export MULTI_BIT_UPSET=0 +endif + include $(PULP_SDK_HOME)/install/rules/pulp_rt.mk diff --git a/hwpe/redmule/archi_redmule.h b/hwpe/redmule/archi_redmule.h index 9222d63..662e1e6 100644 --- a/hwpe/redmule/archi_redmule.h +++ b/hwpe/redmule/archi_redmule.h @@ -119,6 +119,12 @@ #define REDMULE_REG_X_TOT_LEN_PTR 0x44 #define REDMULE_REG_OP_SELECTION 0x48 +#define REDMULE_ECC_REG_OFFS 0x90 +#define DATA_CORR_ERR 0x00 +#define DATA_UNCORR_ERR 0x04 +#define METADATA_CORR_ERR 0x08 +#define METADATA_UNCORR_ERR 0x0c + // OPs definition #define MATMUL 0x0 #define GEMM 0x1 diff --git a/hwpe/redmule/hal_redmule.h b/hwpe/redmule/hal_redmule.h index c5a0c32..ef0b633 100644 --- a/hwpe/redmule/hal_redmule.h +++ b/hwpe/redmule/hal_redmule.h @@ -99,6 +99,22 @@ static inline void redmule_evt_wait() { } while((*(int volatile *)(ARCHI_CLUST_HWPE_BASE + REDMULE_STATUS)) != 0); } +static inline unsigned int redmule_get_data_correctable_count () { + return HWPE_READ(REDMULE_ECC_REG_OFFS + DATA_CORR_ERR); +} + +static inline unsigned int redmule_get_data_uncorrectable_count () { + return HWPE_READ(REDMULE_ECC_REG_OFFS + DATA_UNCORR_ERR); +} + +static inline unsigned int redmule_get_meta_correctable_count () { + return HWPE_READ(REDMULE_ECC_REG_OFFS + METADATA_CORR_ERR); +} + +static inline unsigned int redmule_get_meta_uncorrectable_count () { + return HWPE_READ(REDMULE_ECC_REG_OFFS + METADATA_UNCORR_ERR); +} + /* DMA APIs */ static inline int mchan_alloc(){ return *(volatile int*) DMA_COMMAND_QUEUE; diff --git a/hwpe/redmule/pulp_inject_fault.tcl b/hwpe/redmule/pulp_inject_fault.tcl new file mode 100644 index 0000000..61ccadf --- /dev/null +++ b/hwpe/redmule/pulp_inject_fault.tcl @@ -0,0 +1,53 @@ +# Copyright 2023 ETH Zurich and University of Bologna. +# Solderpad Hardware License, Version 0.51, see LICENSE for details. +# SPDX-License-Identifier: SHL-0.51 +# +# Author: Michael Rogenmoser (michaero@iis.ee.ethz.ch) + +transcript quietly +if {! [info exists ::env(VSIM_PATH)]} {error "Define VSIM_PATH"} +set utils_base_path [file join $::env(VSIM_PATH) scripts fault_injection_utils] +set script_base_path [file join $::env(VSIM_PATH) fault_injection_sim scripts] + +set verbosity 2 +set log_injections 1 +# Easy way to generate a variable seed +# set seed [clock seconds] +# Default value +set seed 12345 +set print_statistics 1 + +set inject_start_time 550000000000ps +set inject_stop_time 750000000000ps +set injection_clock "pulp_cluster_tb/cluster_i/clk_i" +set injection_clock_trigger 0 +set fault_period 150 +set rand_initial_injection_phase 0 +# max_num set to 0 means until stop_time +set max_num_fault_inject 0 +set signal_fault_duration 20ns +set register_fault_duration 0ns + +set allow_multi_bit_upset $::env(MULTI_BIT_UPSET) +set use_bitwidth_as_weight 0 +set check_core_output_modification 0 +set check_core_next_state_modification 0 +set reg_to_sig_ratio 1 + +source [file join $utils_base_path pulp_extract_nets.tcl] + +set inject_signals_netlist [] +set inject_register_netlist [] +set output_netlist [] +set next_state_netlist [] +set assertion_disable_list [] + +# for {set idx 0} {$idx < 12} {incr idx} { +# set inject_signals_netlist [list {*}$inject_signals_netlist {*}[get_all_core_nets $idx]] +# set output_netlist [list {*}$output_netlist {*}[get_core_output_nets $idx]] +# } + +set inject_register_netlist [list {*}$inject_register_netlist {*}[get_memory_slice {0 16} {256 336}]] + +source [file join $script_base_path inject_fault.tcl] + diff --git a/hwpe/redmule/redmule.c b/hwpe/redmule/redmule.c index db549e2..6d4f9fd 100644 --- a/hwpe/redmule/redmule.c +++ b/hwpe/redmule/redmule.c @@ -28,6 +28,11 @@ int main() { volatile int errors = 0; + unsigned int cluster_id = rt_cluster_id(); + unsigned int intc_data_correctable_cnt, redmule_data_correctable_cnt = 0; + unsigned int intc_meta_correctable_cnt = 0; + unsigned int intc_data_uncorrectable_cnt, redmule_data_uncorrectable_cnt = 0; + unsigned int intc_meta_uncorrectable_cnt = 0; if(get_core_id() == 0){ @@ -97,6 +102,10 @@ int main() { // Wait for end of computation redmule_evt_wait(); + // Check number of detected errors by ECC modules inside RedMulE + redmule_data_correctable_cnt = redmule_get_data_correctable_count(); + redmule_data_uncorrectable_cnt = redmule_get_data_uncorrectable_count(); + // Disable RedMulE hwpe_cg_disable(); @@ -106,7 +115,24 @@ int main() { printf ("Terminated test with %d errors. See you!\n", errors); + // Check number of detected errors by ECC modules inside interconnect + intc_data_correctable_cnt = hwpe_hci_ecc_get_data_correctable_count(cluster_id); + intc_meta_correctable_cnt = hwpe_hci_ecc_get_meta_correctable_count(cluster_id); + intc_data_uncorrectable_cnt = hwpe_hci_ecc_get_data_uncorrectable_count(cluster_id); + intc_meta_uncorrectable_cnt = hwpe_hci_ecc_get_meta_uncorrectable_count(cluster_id); + for (int i = 0; i < 16; i++) { + intc_meta_correctable_cnt += tcdm_scrubber_get_mismatch_count(cluster_id, i); + } + + printf ("Data errors corrected inside RedMulE: %d. Data errors uncorrectable inside RedMulE: %d \n", + redmule_data_correctable_cnt, redmule_data_uncorrectable_cnt); + printf("Data errors corrected inside intc: %d. Data errors uncorrectable inside intc: %d\n", + intc_data_correctable_cnt, intc_data_uncorrectable_cnt); + printf("Meta errors corrected inside intc: %d. Meta errors uncorrectable inside intc: %d\n", + intc_meta_correctable_cnt, intc_meta_uncorrectable_cnt); + + } synch_barrier(); - return errors; + return (errors != 0) && (redmule_data_uncorrectable_cnt==0 && intc_data_uncorrectable_cnt == 0 && intc_meta_uncorrectable_cnt == 0); } From 6660fcd1ef639fe3fcbf9d677261aabbadc1b127 Mon Sep 17 00:00:00 2001 From: Luigi Ghionda Date: Fri, 31 May 2024 14:08:07 +0200 Subject: [PATCH 36/71] Add fault injection in neureka regression to test ECC HCI --- hwpe/neureka/Makefile | 11 +++++++ hwpe/neureka/inc/ecc_check.h | 27 +++++++++++++++ hwpe/neureka/pulp-nnx | 2 +- hwpe/neureka/pulp_inject_fault.tcl | 53 ++++++++++++++++++++++++++++++ hwpe/neureka/src/main.c | 34 +++++++++++++++++-- hwpe/neureka/src/nnx_layer.c | 4 +++ 6 files changed, 127 insertions(+), 4 deletions(-) create mode 100644 hwpe/neureka/inc/ecc_check.h create mode 100644 hwpe/neureka/pulp_inject_fault.tcl diff --git a/hwpe/neureka/Makefile b/hwpe/neureka/Makefile index 37ace72..92b7197 100644 --- a/hwpe/neureka/Makefile +++ b/hwpe/neureka/Makefile @@ -31,4 +31,15 @@ PULP_CFLAGS += $(INC_FLAGS) -O3 PULP_APP = test +ifeq ($(fault_inject),1) + export FAULT_INJECTION=1 + export FAULT_INJECTION_SCRIPT=$(CURDIR)/pulp_inject_fault.tcl +endif + +ifeq ($(multi_bit_upset),1) + export MULTI_BIT_UPSET=1 +else + export MULTI_BIT_UPSET=0 +endif + include $(PULP_SDK_HOME)/install/rules/pulp_rt.mk diff --git a/hwpe/neureka/inc/ecc_check.h b/hwpe/neureka/inc/ecc_check.h new file mode 100644 index 0000000..3f9783d --- /dev/null +++ b/hwpe/neureka/inc/ecc_check.h @@ -0,0 +1,27 @@ +/* + * Copyright 2024 ETH Zurich and University of Bologna + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * SPDX-License-Identifier: Apache-2.0 + */ + +#ifndef __ECC_CHECK_H__ +#define __ECC_CHECK_H__ + +#include + +#define ECC_REGS (4) +extern uint32_t ecc_errs[ECC_REGS]; + +#endif // __ECC_CHECK_H__ diff --git a/hwpe/neureka/pulp-nnx b/hwpe/neureka/pulp-nnx index 37a8013..47baf51 160000 --- a/hwpe/neureka/pulp-nnx +++ b/hwpe/neureka/pulp-nnx @@ -1 +1 @@ -Subproject commit 37a80138686668c455fb07af475ee7abbb8b6fbb +Subproject commit 47baf51728fcaaacbd8a332b8d03717d6c03ace1 diff --git a/hwpe/neureka/pulp_inject_fault.tcl b/hwpe/neureka/pulp_inject_fault.tcl new file mode 100644 index 0000000..fa7efb2 --- /dev/null +++ b/hwpe/neureka/pulp_inject_fault.tcl @@ -0,0 +1,53 @@ +# Copyright 2023 ETH Zurich and University of Bologna. +# Solderpad Hardware License, Version 0.51, see LICENSE for details. +# SPDX-License-Identifier: SHL-0.51 +# +# Author: Michael Rogenmoser (michaero@iis.ee.ethz.ch) + +transcript quietly +if {! [info exists ::env(VSIM_PATH)]} {error "Define VSIM_PATH"} +set utils_base_path [file join $::env(VSIM_PATH) scripts fault_injection_utils] +set script_base_path [file join $::env(VSIM_PATH) fault_injection_sim scripts] + +set verbosity 2 +set log_injections 1 +# Easy way to generate a variable seed +# set seed [clock seconds] +# Default value +set seed 12345 +set print_statistics 1 + +set inject_start_time 80000000000ps +set inject_stop_time 150000000000ps +set injection_clock "pulp_cluster_tb/cluster_i/clk_i" +set injection_clock_trigger 0 +set fault_period 100 +set rand_initial_injection_phase 1 +# max_num set to 0 means until stop_time +set max_num_fault_inject 0 +set signal_fault_duration 20ns +set register_fault_duration 0ns + +set allow_multi_bit_upset $::env(MULTI_BIT_UPSET) +set use_bitwidth_as_weight 0 +set check_core_output_modification 0 +set check_core_next_state_modification 0 +set reg_to_sig_ratio 1 + +source [file join $utils_base_path pulp_extract_nets.tcl] + +set inject_signals_netlist [] +set inject_register_netlist [] +set output_netlist [] +set next_state_netlist [] +set assertion_disable_list [] + +# for {set idx 0} {$idx < 12} {incr idx} { +# set inject_signals_netlist [list {*}$inject_signals_netlist {*}[get_all_core_nets $idx]] +# set output_netlist [list {*}$output_netlist {*}[get_core_output_nets $idx]] +# } + +set inject_register_netlist [list {*}$inject_register_netlist {*}[get_memory_slice {0 16} {0 50}]] + +source [file join $script_base_path inject_fault.tcl] + diff --git a/hwpe/neureka/src/main.c b/hwpe/neureka/src/main.c index 4a8f24e..4e82af7 100644 --- a/hwpe/neureka/src/main.c +++ b/hwpe/neureka/src/main.c @@ -23,16 +23,20 @@ * Main Test Program for N-EUREKA */ +#include #include #include #include "layer_util.h" #include "nnx_layer.h" +#include "ecc_check.h" #define OUTPUT_SIZE 512 extern int8_t output[]; +uint32_t ecc_errs[ECC_REGS]; + static int check_output() { int checksum = 0; for (int i = 0; i < OUTPUT_SIZE; i++) { @@ -42,10 +46,17 @@ static int check_output() { } int errors = 0; +unsigned int intc_data_correctable_cnt = 0; +unsigned int intc_meta_correctable_cnt = 0; +unsigned int intc_data_uncorrectable_cnt = 0; +unsigned int intc_meta_uncorrectable_cnt = 0; int main() { - if (get_core_id() == 0) { + unsigned int core_id = get_core_id(); + unsigned int cluster_id = rt_cluster_id(); + + if (core_id == 0) { // execute NNX layer execute_nnx_layer(NULL); @@ -58,8 +69,25 @@ int main() { else printf ("[OK] Terminated test with no errors!!!\n"); + // Check number of detected errors by ECC modules inside interconnect + intc_data_correctable_cnt = hwpe_hci_ecc_get_data_correctable_count(cluster_id); + intc_meta_correctable_cnt = hwpe_hci_ecc_get_meta_correctable_count(cluster_id); + intc_data_uncorrectable_cnt = hwpe_hci_ecc_get_data_uncorrectable_count(cluster_id); + intc_meta_uncorrectable_cnt = hwpe_hci_ecc_get_meta_uncorrectable_count(cluster_id); + for (int i = 0; i < 16; i++) { + intc_meta_correctable_cnt += tcdm_scrubber_get_mismatch_count(cluster_id, i); + } + + printf("Data errors corrected inside Neureka: %d. Data errors uncorrectable inside Neureka: %d\n", + ecc_errs[0], ecc_errs[1]); + printf("Meta errors corrected inside Neureka: %d. Meta errors uncorrectable inside Neureka: %d\n", + ecc_errs[2], ecc_errs[3]); + + printf("Data errors corrected inside intc: %d. Data errors uncorrectable inside intc: %d\n", + intc_data_correctable_cnt, intc_data_uncorrectable_cnt); + printf("Meta errors corrected inside intc: %d. Meta errors uncorrectable inside intc: %d\n", + intc_meta_correctable_cnt, intc_meta_uncorrectable_cnt); } synch_barrier(); - return errors; - + return (errors != 0) && (intc_data_uncorrectable_cnt == 0 && intc_meta_uncorrectable_cnt == 0 && (ecc_errs[1]==0 && ecc_errs[3]==0)); } diff --git a/hwpe/neureka/src/nnx_layer.c b/hwpe/neureka/src/nnx_layer.c index cb53369..57eb6fc 100644 --- a/hwpe/neureka/src/nnx_layer.c +++ b/hwpe/neureka/src/nnx_layer.c @@ -19,6 +19,7 @@ */ #include "nnx_layer.h" +#include "ecc_check.h" #include #include "neureka.h" @@ -57,6 +58,7 @@ typedef neureka_task_flag_e nnx_task_flag_e; #define nnx_dispatch_wait neureka_nnx_dispatch_wait #define nnx_dispatch neureka_nnx_dispatch #define nnx_resolve_wait neureka_nnx_resolve_wait +#define nnx_read_ecc_regs neureka_nnx_read_ecc_regs #define nnx_term neureka_nnx_term // Generated headers @@ -160,6 +162,8 @@ static void task_execute(nnx_task_t *task) { nnx_resolve_wait(dev, task); + nnx_read_ecc_regs(dev, (uint32_t)ecc_errs); + nnx_term(dev); } From b1c3f826ebee842f91be9a504e1cab94a9f95840 Mon Sep 17 00:00:00 2001 From: Francesco Conti Date: Fri, 23 Aug 2024 17:09:02 +0200 Subject: [PATCH 37/71] Add redmule_softclear, redmule_256iter tests --- astral/redmule_256iter | 1 + astral/redmule_softclear | 1 + hwpe/redmule/hal_redmule.h | 15 +- hwpe/redmule/redmule.c | 2 + hwpe/redmule_256iter/Makefile | 20 + hwpe/redmule_256iter/archi_redmule.h | 170 ++++++ hwpe/redmule_256iter/hal_redmule.h | 556 +++++++++++++++++++ hwpe/redmule_256iter/inc/golden.h | 387 +++++++++++++ hwpe/redmule_256iter/inc/tensor_dim.h | 13 + hwpe/redmule_256iter/inc/w_2D.h | 35 ++ hwpe/redmule_256iter/inc/w_input.h | 35 ++ hwpe/redmule_256iter/inc/x_2D.h | 27 + hwpe/redmule_256iter/inc/x_input.h | 27 + hwpe/redmule_256iter/inc/y_2D.h | 27 + hwpe/redmule_256iter/inc/y_input.h | 27 + hwpe/redmule_256iter/inc/z_2D.h | 27 + hwpe/redmule_256iter/inc/z_output.h | 27 + hwpe/redmule_256iter/pulp_inject_fault.tcl | 53 ++ hwpe/redmule_256iter/redmule.c | 141 +++++ hwpe/redmule_softclear/Makefile | 20 + hwpe/redmule_softclear/archi_redmule.h | 170 ++++++ hwpe/redmule_softclear/hal_redmule.h | 556 +++++++++++++++++++ hwpe/redmule_softclear/inc/golden.h | 387 +++++++++++++ hwpe/redmule_softclear/inc/tensor_dim.h | 13 + hwpe/redmule_softclear/inc/w_2D.h | 35 ++ hwpe/redmule_softclear/inc/w_input.h | 35 ++ hwpe/redmule_softclear/inc/x_2D.h | 27 + hwpe/redmule_softclear/inc/x_input.h | 27 + hwpe/redmule_softclear/inc/y_2D.h | 27 + hwpe/redmule_softclear/inc/y_input.h | 27 + hwpe/redmule_softclear/inc/z_2D.h | 27 + hwpe/redmule_softclear/inc/z_output.h | 27 + hwpe/redmule_softclear/pulp_inject_fault.tcl | 53 ++ hwpe/redmule_softclear/redmule.c | 185 ++++++ 34 files changed, 3206 insertions(+), 1 deletion(-) create mode 120000 astral/redmule_256iter create mode 120000 astral/redmule_softclear create mode 100644 hwpe/redmule_256iter/Makefile create mode 100644 hwpe/redmule_256iter/archi_redmule.h create mode 100644 hwpe/redmule_256iter/hal_redmule.h create mode 100644 hwpe/redmule_256iter/inc/golden.h create mode 100644 hwpe/redmule_256iter/inc/tensor_dim.h create mode 100644 hwpe/redmule_256iter/inc/w_2D.h create mode 100644 hwpe/redmule_256iter/inc/w_input.h create mode 100644 hwpe/redmule_256iter/inc/x_2D.h create mode 100644 hwpe/redmule_256iter/inc/x_input.h create mode 100644 hwpe/redmule_256iter/inc/y_2D.h create mode 100644 hwpe/redmule_256iter/inc/y_input.h create mode 100644 hwpe/redmule_256iter/inc/z_2D.h create mode 100644 hwpe/redmule_256iter/inc/z_output.h create mode 100644 hwpe/redmule_256iter/pulp_inject_fault.tcl create mode 100644 hwpe/redmule_256iter/redmule.c create mode 100644 hwpe/redmule_softclear/Makefile create mode 100644 hwpe/redmule_softclear/archi_redmule.h create mode 100644 hwpe/redmule_softclear/hal_redmule.h create mode 100644 hwpe/redmule_softclear/inc/golden.h create mode 100644 hwpe/redmule_softclear/inc/tensor_dim.h create mode 100644 hwpe/redmule_softclear/inc/w_2D.h create mode 100644 hwpe/redmule_softclear/inc/w_input.h create mode 100644 hwpe/redmule_softclear/inc/x_2D.h create mode 100644 hwpe/redmule_softclear/inc/x_input.h create mode 100644 hwpe/redmule_softclear/inc/y_2D.h create mode 100644 hwpe/redmule_softclear/inc/y_input.h create mode 100644 hwpe/redmule_softclear/inc/z_2D.h create mode 100644 hwpe/redmule_softclear/inc/z_output.h create mode 100644 hwpe/redmule_softclear/pulp_inject_fault.tcl create mode 100644 hwpe/redmule_softclear/redmule.c diff --git a/astral/redmule_256iter b/astral/redmule_256iter new file mode 120000 index 0000000..e81b225 --- /dev/null +++ b/astral/redmule_256iter @@ -0,0 +1 @@ +../hwpe/redmule_256iter/ \ No newline at end of file diff --git a/astral/redmule_softclear b/astral/redmule_softclear new file mode 120000 index 0000000..2904f52 --- /dev/null +++ b/astral/redmule_softclear @@ -0,0 +1 @@ +../hwpe/redmule_softclear/ \ No newline at end of file diff --git a/hwpe/redmule/hal_redmule.h b/hwpe/redmule/hal_redmule.h index ef0b633..8fc5000 100644 --- a/hwpe/redmule/hal_redmule.h +++ b/hwpe/redmule/hal_redmule.h @@ -81,8 +81,12 @@ static inline unsigned int hwpe_get_status() { return HWPE_READ(REDMULE_STATUS); } +static inline unsigned int hwpe_get_running_job() { + return HWPE_READ(REDMULE_RUNNING_JOB); +} + static inline void hwpe_soft_clear() { - HWPE_WRITE(1, REDMULE_SOFT_CLEAR); + HWPE_WRITE(0, REDMULE_SOFT_CLEAR); } static inline void hwpe_cg_enable() { @@ -99,6 +103,15 @@ static inline void redmule_evt_wait() { } while((*(int volatile *)(ARCHI_CLUST_HWPE_BASE + REDMULE_STATUS)) != 0); } +static inline int hwpe_wait_acquire() { + int job_id = hwpe_acquire_job(); + while(job_id < 0) { + eu_evt_maskWaitAndClr (1 << ARCHI_CL_HWPE_EVT0); + job_id = hwpe_acquire_job(); + } + return job_id; +} + static inline unsigned int redmule_get_data_correctable_count () { return HWPE_READ(REDMULE_ECC_REG_OFFS + DATA_CORR_ERR); } diff --git a/hwpe/redmule/redmule.c b/hwpe/redmule/redmule.c index 6d4f9fd..44a724d 100644 --- a/hwpe/redmule/redmule.c +++ b/hwpe/redmule/redmule.c @@ -81,8 +81,10 @@ int main() { // Enable RedMulE hwpe_cg_enable(); + asm volatile("": : :"memory"); hwpe_soft_clear(); + asm volatile("": : :"memory"); // redmule_cfg ((unsigned int) x, // (unsigned int) w, diff --git a/hwpe/redmule_256iter/Makefile b/hwpe/redmule_256iter/Makefile new file mode 100644 index 0000000..88346b6 --- /dev/null +++ b/hwpe/redmule_256iter/Makefile @@ -0,0 +1,20 @@ +PULP_APP = test +PULP_APP_SRCS = redmule.c +PULP_CFLAGS = -O3 + +ifeq ($(use_dma),1) + PULP_CFLAGS += -DUSE_DMA +endif + +ifeq ($(fault_inject),1) + export FAULT_INJECTION=1 + export FAULT_INJECTION_SCRIPT=$(CURDIR)/pulp_inject_fault.tcl +endif + +ifeq ($(multi_bit_upset),1) + export MULTI_BIT_UPSET=1 +else + export MULTI_BIT_UPSET=0 +endif + +include $(PULP_SDK_HOME)/install/rules/pulp_rt.mk diff --git a/hwpe/redmule_256iter/archi_redmule.h b/hwpe/redmule_256iter/archi_redmule.h new file mode 100644 index 0000000..662e1e6 --- /dev/null +++ b/hwpe/redmule_256iter/archi_redmule.h @@ -0,0 +1,170 @@ +/* + * Copyright (C) 2022-2023 ETH Zurich and University of Bologna + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * SPDX-License-Identifier: Apache-2.0 + * + * Author: Yvan Tortorella + * + * High-level architecture of RedMulE + * + */ + +#ifndef __ARCHI_REDMULE_H__ +#define __ARCHI_REDMULE_H__ + +/* + * |========================================================================| + * || || + * ||Control and generic configuration register layout || + * |========================================================================| + * || # reg | offset | bits | bitmask || content || + * ||-------+----------+---------+--------------++-------------------------|| + * || 0 | 0x0000 | 31: 0 | 0xFFFFFFFF || TRIGGER || + * || 1 | 0x0004 | 31: 0 | 0xFFFFFFFF || ACQUIRE || + * || 2 | 0x0008 | 31: 0 | 0xFFFFFFFF || EVT_ENABLE || + * || 3 | 0x000c | 31: 0 | 0xFFFFFFFF || STATUS || + * || 4 | 0x0010 | 31: 0 | 0xFFFFFFFF || RUNNING_JOB || + * || 5 | 0x0014 | 31: 0 | 0xFFFFFFFF || SOFT_CLEAR || + * |========================================================================| + * || || + * ||Job-dependent registers layout || + * |========================================================================| + * || # reg | offset | bits | bitmask || content || + * ||-------+----------+---------+--------------++-------------------------|| + * || 0 | 0x0040 | 31: 0 | 0xFFFFFFFF || X_ADDR || + * ||-------+----------+---------+--------------++-------------------------|| + * || 1 | 0x0044 | 31: 0 | 0xFFFFFFFF || W_ADDR || + * ||-------+----------+---------+--------------++-------------------------|| + * || 2 | 0x0048 | 31: 0 | 0xFFFFFFFF || Z_ADDR || + * ||-------+----------+---------+--------------++-------------------------|| + * || 3 | 0x004C | | || Matrix Config 0 Reg || + * || | | 31:16 | 0xFFFF0000 || K Size (W Columns) || + * || | | 15: 0 | 0x0000FFFF || M Size (X Rows) || + * ||-------+----------+---------+--------------++-------------------------|| + * || 4 | 0x0050 | | || Matrix Config 1 Reg || + * || | | 31:16 | 0xFFFFFFFF || N Size (X Cols/W Rows) || + * ||-------+----------+---------+--------------++-------------------------|| + * || 5 | 0x0054 | | || Matrix Arithmetic Reg || + * || | | 12:10 | 0x00001C00 || Operation selection || + * || | | 9: 7 | 0x00000380 || Input/Output format || + * |========================================================================| + * + */ + +/* PULP Cluster Archi defines */ +#define ARCHI_CLUST_CTRL_BASE 0x50200000 +#define ARCHI_CLUST_HWPE_BASE 0x50201000 +#define DMA_COMMAND_QUEUE 0x50204400 +#define DMA_STATUS_REGISTER 0x50204404 +#define ARCHI_CL_HWPE_EVT0 12 +#define ARCHI_CL_HWPE_EVT1 13 +#define FC_DMA_EVENT 8 +#define CL_DMA_EVENT 22 +#define CLUST_CTRL_HWPE_EN 0x18 +#define CLUST_CTRL_HWPE_EN_MASK 0x800 +#define __builtin_bitinsert(a,b,c,d) (a | (((b << (32-c)) >> (32-c)) << d)) + +// RedMulE architecture +#define ADDR_WIDTH 32 +#define DATA_WIDTH 256 +#define REDMULE_FMT 16 +#define ARRAY_HEIGHT 4 +#define PIPE_REGS 3 +#define ARRAY_WIDTH 12 /* Superior limit is ARRAY_HEIGHT*PIPE_REGS */ + +// Commands +#define REDMULE_TRIGGER 0x00 +#define REDMULE_ACQUIRE 0x04 +#define REDMULE_FINISHED 0x08 +#define REDMULE_STATUS 0x0C +#define REDMULE_RUNNING_JOB 0x10 +#define REDMULE_SOFT_CLEAR 0x14 + +// Registers +#define REDMULE_REG_OFFS 0x40 +// #define REDMULE_REG_X_PTR 0x00 +// #define REDMULE_REG_W_PTR 0x04 +// #define REDMULE_REG_Z_PTR 0x08 +// #define REDMULE_MCFG0_PTR 0x0C +// #define REDMULE_MCFG1_PTR 0x10 +// #define REDMULE_ARITH_PTR 0x14 +#define REDMULE_REG_X_PTR 0x00 +#define REDMULE_REG_W_PTR 0x04 +#define REDMULE_REG_Y_PTR 0x08 +#define REDMULE_REG_Z_PTR 0x0C +#define REDMULE_REG_X_ITER_PTR 0x10 +#define REDMULE_REG_W_ITER_PTR 0x14 +#define REDMULE_REG_LEFTOVERS_PTR 0x18 +#define REDMULE_REG_LEFT_PARAMS_PTR 0x1C +#define REDMULE_REG_X_D1_STRIDE_PTR 0x20 +#define REDMULE_REG_W_TOT_LEN_PTR 0x24 +#define REDMULE_REG_TOT_X_READ_PTR 0x28 +#define REDMULE_REG_W_D0_STRIDE_PTR 0x2C +#define REDMULE_REG_YZ_TOT_LEN_PTR 0x30 +#define REDMULE_REG_YZ_D0_STRIDE_PTR 0x34 +#define REDMULE_REG_YZ_D2_STRIDE_PTR 0x38 +#define REDMULE_REG_X_ROWS_OFFS_PTR 0x3C +#define REDMULE_REG_X_BUFFER_SLOTS_PTR 0x40 +#define REDMULE_REG_X_TOT_LEN_PTR 0x44 +#define REDMULE_REG_OP_SELECTION 0x48 + +#define REDMULE_ECC_REG_OFFS 0x90 +#define DATA_CORR_ERR 0x00 +#define DATA_UNCORR_ERR 0x04 +#define METADATA_CORR_ERR 0x08 +#define METADATA_UNCORR_ERR 0x0c + +// OPs definition +#define MATMUL 0x0 +#define GEMM 0x1 +#define ADDMAX 0x2 +#define ADDMIN 0x3 +#define MULMAX 0x4 +#define MULMIN 0x5 +#define MAXMIN 0x6 +#define MINMAX 0x7 + +// GEMM formats +#define Float8 0x0 +#define Float16 0x1 +#define Float8Alt 0x2 +#define Float16Alt 0x3 + +#define RNE 0x0 +#define RTZ 0x1 +#define OP_FMADD 0x0 +#define OP_ADD 0x2 +#define OP_MUL 0x3 +#define OP_MINMAX 0x7 + +// FP Formats encoding +#define FP16 0x2 +#define FP8 0x3 +#define FP16ALT 0x4 +#define FP8ALT 0x5 + +/* DMA Archi */ +#define DMA_TX 0 +#define DMA_RX 1 +#define DMA_INC 1 + +#define PLP_DMA_TYPE_BIT 0x00000011 +#define PLP_DMA_INCR_BIT 0x00000012 +#define PLP_DMA_2D_BIT 0x00000013 +#define PLP_DMA_ELE_BIT 0x00000014 +#define PLP_DMA_ILE_BIT 0x00000015 +#define PLP_DMA_BLE_BIT 0x00000016 +#define PLP_DMA_2D_TCDM_BIT 0x0000017 + +#endif diff --git a/hwpe/redmule_256iter/hal_redmule.h b/hwpe/redmule_256iter/hal_redmule.h new file mode 100644 index 0000000..8fc5000 --- /dev/null +++ b/hwpe/redmule_256iter/hal_redmule.h @@ -0,0 +1,556 @@ +/* + * Copyright (C) 2022-2023 ETH Zurich and University of Bologna + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * SPDX-License-Identifier: Apache-2.0 + * + * Author: Yvan Tortorella + * + * RedMulE Hardware Abstraction Layer (HAL) + */ + +#ifndef __HAL_REDMULE_H__ +#define __HAL_REDMULE_H__ + +#include +#include "inc/x_input.h" +#include "inc/w_input.h" +#include "inc/y_input.h" +#include "inc/z_output.h" +#include "inc/golden.h" +#include "inc/tensor_dim.h" + +/* + * + * For control, generic configuration register layout, + * and job-dependent register map, look at redmule_archi.h + * + */ + +// For all the following functions we use __builtin_pulp_OffsetedWrite and __builtin_pulp_OffsetedRead +// instead of classic load/store because otherwise the compiler is not able to correctly factorize +// the HWPE base in case several accesses are done, ending up with twice more code + +#define HWPE_WRITE(value, offset) *(int *)(ARCHI_CLUST_HWPE_BASE + offset) = value +#define HWPE_READ(offset) *(int *)(ARCHI_CLUST_HWPE_BASE + offset) + +static inline void redmule_x_add_set (unsigned int value) { + HWPE_WRITE(value, REDMULE_REG_OFFS + REDMULE_REG_X_PTR); +} + +static inline void redmule_w_add_set (unsigned int value) { + HWPE_WRITE(value, REDMULE_REG_OFFS + REDMULE_REG_W_PTR); +} + +static inline void redmule_y_add_set (unsigned int value) { + HWPE_WRITE(value, REDMULE_REG_OFFS + REDMULE_REG_Y_PTR); +} + +static inline void redmule_z_add_set (unsigned int value) { + HWPE_WRITE(value, REDMULE_REG_OFFS + REDMULE_REG_Z_PTR); +} + +// static inline void redmule_mcfg_set (uint32_t mcfg0, uint32_t mcfg1) { +// HWPE_WRITE(mcfg0, REDMULE_REG_OFFS + REDMULE_MCFG0_PTR); +// HWPE_WRITE(mcfg1, REDMULE_REG_OFFS + REDMULE_MCFG1_PTR); +// } +// +// static inline void redmule_arith_set (uint32_t arith) { +// HWPE_WRITE(arith, REDMULE_REG_OFFS + REDMULE_ARITH_PTR); +// } + +static inline void hwpe_trigger_job() { + HWPE_WRITE(0, REDMULE_TRIGGER); +} + +static inline int hwpe_acquire_job() { + return HWPE_READ(REDMULE_ACQUIRE); +} + +static inline unsigned int hwpe_get_status() { + return HWPE_READ(REDMULE_STATUS); +} + +static inline unsigned int hwpe_get_running_job() { + return HWPE_READ(REDMULE_RUNNING_JOB); +} + +static inline void hwpe_soft_clear() { + HWPE_WRITE(0, REDMULE_SOFT_CLEAR); +} + +static inline void hwpe_cg_enable() { + *(volatile int*) (ARCHI_CLUST_CTRL_BASE + CLUST_CTRL_HWPE_EN) |= CLUST_CTRL_HWPE_EN_MASK; +} + +static inline void hwpe_cg_disable() { + *(volatile int*) (ARCHI_CLUST_CTRL_BASE + CLUST_CTRL_HWPE_EN) &= ~CLUST_CTRL_HWPE_EN_MASK; +} + +static inline void redmule_evt_wait() { + do { + eu_evt_maskWaitAndClr (1 << ARCHI_CL_HWPE_EVT0); + } while((*(int volatile *)(ARCHI_CLUST_HWPE_BASE + REDMULE_STATUS)) != 0); +} + +static inline int hwpe_wait_acquire() { + int job_id = hwpe_acquire_job(); + while(job_id < 0) { + eu_evt_maskWaitAndClr (1 << ARCHI_CL_HWPE_EVT0); + job_id = hwpe_acquire_job(); + } + return job_id; +} + +static inline unsigned int redmule_get_data_correctable_count () { + return HWPE_READ(REDMULE_ECC_REG_OFFS + DATA_CORR_ERR); +} + +static inline unsigned int redmule_get_data_uncorrectable_count () { + return HWPE_READ(REDMULE_ECC_REG_OFFS + DATA_UNCORR_ERR); +} + +static inline unsigned int redmule_get_meta_correctable_count () { + return HWPE_READ(REDMULE_ECC_REG_OFFS + METADATA_CORR_ERR); +} + +static inline unsigned int redmule_get_meta_uncorrectable_count () { + return HWPE_READ(REDMULE_ECC_REG_OFFS + METADATA_UNCORR_ERR); +} + +/* DMA APIs */ +static inline int mchan_alloc(){ + return *(volatile int*) DMA_COMMAND_QUEUE; +} + +static inline void mchan_transfer(unsigned int len, + unsigned int ext_addr, + unsigned int tcdm_addr) { + + *(volatile int*) DMA_COMMAND_QUEUE = len | + (DMA_RX << PLP_DMA_TYPE_BIT) | + (DMA_INC << PLP_DMA_INCR_BIT) | + (0 << PLP_DMA_2D_BIT) | + (1 << PLP_DMA_ELE_BIT) | + (1 << PLP_DMA_ILE_BIT) | + (0 << PLP_DMA_BLE_BIT) | + (0 << PLP_DMA_2D_TCDM_BIT); + *(volatile int*) DMA_COMMAND_QUEUE = tcdm_addr; + *(volatile int*) DMA_COMMAND_QUEUE = ext_addr; +} + +static inline void mchan_barrier(int id) { + while(((*(volatile int*)(DMA_STATUS_REGISTER)) >> id ) & 0x1 ) { + eu_evt_maskWaitAndClr(1 << FC_DMA_EVENT); + } +} + +static inline void mchan_free(int id) { + *(volatile int*) DMA_STATUS_REGISTER = 0x1 << id; +} + +// void redmule_cfg (unsigned int x, unsigned int w, unsigned int z, +// uint16_t m_size, uint16_t n_size, uint16_t k_size, +// uint8_t gemm_op, uint8_t gemm_fmt){ +// +// uint32_t mcfg_reg0 = 0; +// uint32_t mcfg_reg1 = 0; +// uint32_t arith_reg = 0; +// +// mcfg_reg0 = (k_size << 16) | +// (m_size << 0); +// mcfg_reg1 = n_size << 0; +// +// arith_reg = (gemm_op << 10) | +// (gemm_fmt << 7); +// +// redmule_x_add_set ((unsigned int) x); +// redmule_w_add_set ((unsigned int) w); +// redmule_z_add_set ((unsigned int) z); +// redmule_mcfg_set ((unsigned int) mcfg_reg0, +// (unsigned int) mcfg_reg1); +// redmule_arith_set ((unsigned int) arith_reg); +// +// } + +void redmule_cfg (uint16_t m_size, uint16_t n_size, uint16_t k_size, uint8_t gemm_ops){ + uint32_t x_iters = 0; + uint32_t w_iters = 0; + uint32_t leftovers = 0; + uint32_t left_params = 0; + uint32_t x_d1_stride = 0; + uint32_t x_rows_offs = 0; + uint32_t w_tot_len = 0; + uint32_t w_d1_len = 0; + uint32_t w_d0_stride = 0; + uint32_t yz_tot_len = 0; + uint32_t yz_d0_stride = 0; + uint32_t yz_d2_stride = 0; + uint32_t tot_x_read = 0; + uint32_t x_buffer_slots = 0; + uint32_t op_selection = 0; + uint16_t tot_stores = 0; + uint16_t w_rows = n_size; + uint16_t depth = DATA_WIDTH/(ARRAY_HEIGHT*FPFORMAT); + uint8_t tile = ARRAY_HEIGHT*(PIPE_REGS + 1); + _Bool x_rows_sub = 0; + _Bool x_cols_sub = 0; + _Bool w_cols_sub = 0; + uint16_t x_rows_iter, + x_rows_iter_tmp, + w_rows_iter, + w_rows_iter_tmp; + uint16_t x_cols_iter, + x_cols_iter_tmp, + w_cols_iter, + w_cols_iter_tmp; + uint8_t x_rows_lftovr, + x_cols_lftovr, + w_rows_lftovr, + w_cols_lftovr, + slots; + + // Calculating the number of iterations alng the two dimensions of the X matrix + x_rows_iter_tmp = m_size/ARRAY_WIDTH; + x_cols_iter_tmp = n_size/tile; + + // Calculating the number of iterations alng the two dimensions of the W matrix + w_rows_iter_tmp = w_rows; + w_cols_iter_tmp = k_size/tile; + + // Calculating the residuals along the input dimensions + x_rows_lftovr = m_size - (x_rows_iter_tmp*ARRAY_WIDTH); + x_cols_lftovr = n_size - (x_cols_iter_tmp*tile); + + // Calculating the residuals along the weight dimensions + w_rows_lftovr = n_size - (ARRAY_HEIGHT*(w_rows/ARRAY_HEIGHT)); + w_cols_lftovr = k_size - (w_cols_iter_tmp*tile); + + if (w_cols_lftovr != 0) + w_cols_iter = w_cols_iter_tmp + 1; + else + w_cols_iter = w_cols_iter_tmp; + + if (w_rows_lftovr != 0) + w_rows_iter = w_rows_iter_tmp + ARRAY_HEIGHT - w_rows_lftovr; + else + w_rows_iter = w_rows_iter_tmp; + + if (x_cols_lftovr != 0) + x_cols_iter = x_cols_iter_tmp + 1; + else + x_cols_iter = x_cols_iter_tmp; + + if (x_rows_lftovr != 0) + x_rows_iter = x_rows_iter_tmp + 1; + else + x_rows_iter = x_rows_iter_tmp; + + if (x_cols_lftovr%depth != 0) + x_buffer_slots = x_cols_lftovr/depth + 1; + else + x_buffer_slots = x_cols_lftovr/depth; + + // Calculating the number of total stores + tot_stores = x_rows_iter*w_cols_iter; + + // Determining if input matrixes are sub-matrixes + if (m_size < ARRAY_WIDTH) + x_rows_sub = 1; + if (n_size < ARRAY_HEIGHT) + x_cols_sub = 1; + if (k_size < tile) + w_cols_sub = 1; + + // Operation selection + switch (gemm_ops) { + case MATMUL: + op_selection |= (RNE << 29 | RNE << 26 | OP_FMADD << 22 | OP_MINMAX << 18 | SRC_FMT << 15 | DST_FMT << 12) | 0; + break; + + case GEMM: + op_selection |= (RNE << 29 | RNE << 26 | OP_FMADD << 22 | OP_MINMAX << 18 | SRC_FMT << 15 | DST_FMT << 12) | 1; + break; + + case ADDMAX: + op_selection |= (RNE << 29 | RTZ << 26 | OP_ADD << 22 | OP_MINMAX << 18 | SRC_FMT << 15 | DST_FMT << 12) | 1; + break; + + case ADDMIN: + op_selection |= (RNE << 29 | RNE << 26 | OP_ADD << 22 | OP_MINMAX << 18 | SRC_FMT << 15 | DST_FMT << 12) | 1; + break; + + case MULMAX: + op_selection |= (RNE << 29 | RTZ << 26 | OP_MUL << 22 | OP_MINMAX << 18 | SRC_FMT << 15 | DST_FMT << 12) | 1; + break; + + case MULMIN: + op_selection |= (RNE << 29 | RNE << 26 | OP_MUL << 22 | OP_MINMAX << 18 | SRC_FMT << 15 | DST_FMT << 12) | 1; + break; + + case MAXMIN: + op_selection |= (RTZ << 29 | RNE << 26 | OP_MINMAX << 22 | OP_MINMAX << 18 | SRC_FMT << 15 | DST_FMT << 12) | 1; + break; + + case MINMAX: + op_selection |= (RNE << 29 | RTZ << 26 | OP_MINMAX << 22 | OP_MINMAX << 18 | SRC_FMT << 15 | DST_FMT << 12) | 1; + break; + } + + // Storing iterations and residuals in registers + x_iters |= x_rows_iter << 16 | x_cols_iter << 0; + w_iters |= w_rows_iter << 16 | w_cols_iter << 0; + leftovers |= x_rows_lftovr << 24 | x_cols_lftovr << 16 | w_rows_lftovr << 8 | w_cols_lftovr << 0; + left_params |= tot_stores << 16 | x_rows_sub << 15 | x_cols_sub << 14 | w_cols_sub << 13; + x_d1_stride = ((4*FPFORMAT)/ADDR_WIDTH)*(((DATA_WIDTH/FPFORMAT)*x_cols_iter_tmp) + x_cols_lftovr); + x_rows_offs = ARRAY_WIDTH*x_d1_stride; + w_tot_len = w_rows_iter*w_cols_iter*x_rows_iter; + w_d0_stride = ((4*FPFORMAT)/ADDR_WIDTH)*(((DATA_WIDTH/FPFORMAT)*w_cols_iter_tmp) + w_cols_lftovr); + yz_tot_len = ARRAY_WIDTH*x_rows_iter*w_cols_iter; + yz_d0_stride = w_d0_stride; + yz_d2_stride = ARRAY_WIDTH*w_d0_stride; + tot_x_read = x_rows_iter*x_cols_iter*w_cols_iter; + + // Writing the computations in configuration register + HWPE_WRITE(x_iters , REDMULE_REG_OFFS + REDMULE_REG_X_ITER_PTR ); + HWPE_WRITE(w_iters , REDMULE_REG_OFFS + REDMULE_REG_W_ITER_PTR ); + HWPE_WRITE(leftovers , REDMULE_REG_OFFS + REDMULE_REG_LEFTOVERS_PTR ); + HWPE_WRITE(left_params , REDMULE_REG_OFFS + REDMULE_REG_LEFT_PARAMS_PTR ); + HWPE_WRITE(x_d1_stride , REDMULE_REG_OFFS + REDMULE_REG_X_D1_STRIDE_PTR ); + HWPE_WRITE(x_rows_offs , REDMULE_REG_OFFS + REDMULE_REG_X_ROWS_OFFS_PTR ); + HWPE_WRITE(tot_x_read , REDMULE_REG_OFFS + REDMULE_REG_TOT_X_READ_PTR ); + HWPE_WRITE(x_buffer_slots, REDMULE_REG_OFFS + REDMULE_REG_X_BUFFER_SLOTS_PTR ); + HWPE_WRITE(w_tot_len , REDMULE_REG_OFFS + REDMULE_REG_W_TOT_LEN_PTR ); + HWPE_WRITE(w_d0_stride , REDMULE_REG_OFFS + REDMULE_REG_W_D0_STRIDE_PTR ); + HWPE_WRITE(yz_tot_len , REDMULE_REG_OFFS + REDMULE_REG_YZ_TOT_LEN_PTR ); + HWPE_WRITE(yz_d0_stride , REDMULE_REG_OFFS + REDMULE_REG_YZ_D0_STRIDE_PTR ); + HWPE_WRITE(yz_d2_stride , REDMULE_REG_OFFS + REDMULE_REG_YZ_D2_STRIDE_PTR ); + HWPE_WRITE(op_selection , REDMULE_REG_OFFS + REDMULE_REG_OP_SELECTION ); +} + +void generate_test_data16(int x_start_addr, + int w_start_addr, + int y_start_addr, + int m_size, + int n_size, + int k_size) { + + int x_addr = x_start_addr; + int w_addr = w_start_addr; + int y_addr = y_start_addr; + int x_end_addr = x_start_addr + (2*m_size*n_size); + int w_end_addr = w_start_addr + (2*n_size*k_size); + int y_end_addr = y_start_addr + (2*m_size*k_size); + + // Generating input stimuli from golden model + for (x_addr = x_start_addr; x_addr < x_end_addr; x_addr += 2) { + int x = x_addr - x_start_addr; + *(uint32_t *)(x_addr) = x_inp[x/2]; + } + + // Generating Weight stimuli from golden model + for (w_addr = w_start_addr; w_addr < w_end_addr; w_addr += 2) { + int w = w_addr - w_start_addr; + *(uint32_t *)(w_addr) = w_inp[w/2]; + } + + for (y_addr = y_start_addr; y_addr < y_end_addr; y_addr += 2) { + int y = y_addr - y_start_addr; + *(uint32_t *)(y_addr) = y_inp[y/2]; + } +} + +int redmule_compare16 (int z_start_addr, int m_size, int k_size) { + int err = 0; + int z_end_addr = z_start_addr + 2*m_size*k_size; + uint16_t z_computed; + uint16_t diff, diff_1, diff_2; + + for (int z_addr = z_start_addr; z_addr < z_end_addr; z_addr += 2) { + int z = z_addr - z_start_addr; + z_computed = *(uint32_t *)(z_addr); + + if ( z_computed != z_oup[z/2] ) { + diff_1 = z_computed - z_oup[z/2]; + if (diff_1 > 3) { + diff_2 = z_oup[z/2] - z_computed; + if (diff_2 > 3) { + err++; + } + } + } + } + + return err; + +} + +int redmule16_compare_int(uint32_t *actual_z, uint32_t *golden_z, int len) { + #define ERR 0x0011 + uint32_t actual_word = 0; + uint16_t actual_MSHWord, actual_LSHWord; + uint32_t golden_word = 0; + uint16_t golden_MSHWord, golden_LSHWord; + uint32_t actual = 0; + uint32_t golden = 0; + + int errors = 0; + int error; + + for (int i=0; i golden_LSHWord) ? (actual_LSHWord - golden_LSHWord) : 0; + diff = (actual_LSHWord < golden_LSHWord) ? (golden_LSHWord - actual_LSHWord) : 0; + + if (diff > ERR) { + error = 1; + #ifdef VERBOSE + tfp_printf ("diff: 0x%08x\n", diff); + tfp_printf ("LSW: Error!\n"); + #endif + } + + // Checking Most Significant Half-Word + actual_MSHWord = (uint16_t)((actual_word >> 16) & 0x0000FFFF); + golden_MSHWord = (uint16_t)((golden_word >> 16) & 0x0000FFFF); + + diff = (actual_MSHWord > golden_MSHWord) ? (actual_MSHWord - golden_MSHWord) : 0; + diff = (actual_MSHWord < golden_MSHWord) ? (golden_MSHWord - actual_MSHWord) : 0; + + if (diff > ERR) { + error = 1; + #ifdef VERBOSE + tfp_printf ("diff: 0x%08x\n", diff); + tfp_printf ("MSW: Error!\n"); + #endif + } + + errors += error; + + #ifdef DEBUG + tfp_printf(" Golden: 0x%08x; Actual: 0x%08x,\n", golden_word, actual_word); + #endif + + #ifdef VERBOSE + if(error) { + if(errors==1) tfp_printf(" golden <- actual @ address @ index\n"); + tfp_printf(" 0x%08x <- 0x%08x @ 0x%08x @ 0x%08x\n", golden_word, actual_word, (actual_z+i), i*4); + } + #endif + } + return errors; +} + +int redmule8_compare_int(uint32_t *actual_z, uint32_t *golden_z, int len) { + #define ERR 0x0011 + uint32_t actual_word = 0; + uint8_t actual_Byte0, + actual_Byte1, + actual_Byte2, + actual_Byte3; + uint32_t golden_word = 0; + uint8_t golden_Byte0, + golden_Byte1, + golden_Byte2, + golden_Byte3; + uint32_t actual = 0; + uint32_t golden = 0; + + int errors = 0; + int error; + + for (int i=0; i golden_Byte0) ? (actual_Byte0 - golden_Byte0) : 0; + diff = (actual_Byte0 < golden_Byte0) ? (golden_Byte0 - actual_Byte0) : 0; + + if (diff > ERR) { + error = 1; + tfp_printf ("diff: 0x%08x\n", diff); + tfp_printf ("Byte0: Error!\n"); + } + + // Cheching Byte1 + actual_Byte1 = (uint8_t)( (actual_word >> 8 ) & 0x000000FF); + golden_Byte1 = (uint8_t)( (golden_word >> 8 ) & 0x000000FF); + + diff = (actual_Byte1 > golden_Byte1) ? (actual_Byte1 - golden_Byte1) : 0; + diff = (actual_Byte1 < golden_Byte1) ? (golden_Byte1 - actual_Byte1) : 0; + + if (diff > ERR) { + error = 1; + tfp_printf ("diff: 0x%08x\n", diff); + tfp_printf ("Byte1: Error!\n"); + } + + // Cheching Byte2 + actual_Byte2 = (uint8_t)( (actual_word >> 16 ) & 0x000000FF); + golden_Byte2 = (uint8_t)( (golden_word >> 16 ) & 0x000000FF); + + diff = (actual_Byte2 > golden_Byte2) ? (actual_Byte2 - golden_Byte2) : 0; + diff = (actual_Byte2 < golden_Byte2) ? (golden_Byte2 - actual_Byte2) : 0; + + if (diff > ERR) { + error = 1; + tfp_printf ("diff: 0x%08x\n", diff); + tfp_printf ("Byte2: Error!\n"); + } + + // Cheching Byte3 + actual_Byte3 = (uint8_t)( (actual_word >> 24 ) & 0x000000FF); + golden_Byte3 = (uint8_t)( (golden_word >> 24 ) & 0x000000FF); + + diff = (actual_Byte3 > golden_Byte3) ? (actual_Byte3 - golden_Byte3) : 0; + diff = (actual_Byte3 < golden_Byte3) ? (golden_Byte3 - actual_Byte3) : 0; + + if (diff > ERR) { + error = 1; + tfp_printf ("diff: 0x%08x\n", diff); + tfp_printf ("Byte3: Error!\n"); + } + + errors += error; + + #ifdef DEBUG + tfp_printf(" Golden: 0x%08x; Actual: 0x%08x,\n", golden_word, actual_word); + #endif + + #ifdef VERBOSE + if(error) { + if(errors==1) tfp_printf(" golden <- actual @ address @ index\n"); + tfp_printf(" 0x%08x <- 0x%08x @ 0x%08x @ 0x%08x\n", golden_word, actual_word, (actual_z+i), i*4); + } + #endif + } + return errors; +} + +#endif diff --git a/hwpe/redmule_256iter/inc/golden.h b/hwpe/redmule_256iter/inc/golden.h new file mode 100644 index 0000000..f664e47 --- /dev/null +++ b/hwpe/redmule_256iter/inc/golden.h @@ -0,0 +1,387 @@ + /* Header file generated by RedMulE Golden Model */ +uint32_t golden [384] = { +0x48974845, +0x48384608, +0x487b4855, +0x48804869, +0x48b046d1, +0x483f48db, +0x485f48c9, +0x483a4881, +0x472c484b, +0x492b4762, +0x48fd4822, +0x492e488e, +0x484f483e, +0x46d749e8, +0x489d484b, +0x47e9490b, +0x47d2484f, +0x474744be, +0x46c047c7, +0x48af4727, +0x482d46c5, +0x482e483d, +0x479f4897, +0x4749488b, +0x46a8489a, +0x488b46f2, +0x47e84891, +0x483d4872, +0x46fd4716, +0x46a049b5, +0x47a446e7, +0x476748a1, +0x49354939, +0x48c14703, +0x48bd4863, +0x48cf4913, +0x48b848b6, +0x49204946, +0x48e1495e, +0x48b24938, +0x4882493a, +0x49d5483b, +0x49724911, +0x49df496b, +0x488848f2, +0x48214a46, +0x490c48c1, +0x48a349b2, +0x47b0463a, +0x476244cb, +0x46b94765, +0x4814466a, +0x47964631, +0x474b4666, +0x47044798, +0x47614838, +0x459047d3, +0x48a245ea, +0x484447f1, +0x4776484b, +0x46d847d6, +0x44d348f3, +0x478d46fa, +0x466e481e, +0x481e4827, +0x479445a2, +0x48064727, +0x48d5475d, +0x48284708, +0x480d4862, +0x48324895, +0x47f148bd, +0x46a7482a, +0x492d47b1, +0x4884484d, +0x485f48dc, +0x480c476d, +0x46d348e9, +0x48844728, +0x480e48a0, +0x48134862, +0x485a4675, +0x473847e8, +0x48234836, +0x482146e7, +0x47b34822, +0x48554846, +0x47174863, +0x47c14872, +0x488e46d5, +0x485f47e2, +0x48b8487c, +0x4788481e, +0x467748bd, +0x47f846c9, +0x47fc48fe, +0x47b247a0, +0x467e4588, +0x46c74662, +0x481246e8, +0x474e4536, +0x468f46c0, +0x4679481f, +0x46e246a1, +0x45604809, +0x47eb4630, +0x475746b5, +0x477f4848, +0x46d846a6, +0x459a4870, +0x46784670, +0x468c47d2, +0x48c44762, +0x479146e3, +0x486d46b1, +0x486747d0, +0x47f6468d, +0x475648a5, +0x48544857, +0x48384866, +0x46ec484d, +0x48f647d2, +0x4879484a, +0x483c4848, +0x4806471d, +0x473048fa, +0x47b84768, +0x46f94865, +0x491848a8, +0x486746ca, +0x48624800, +0x491048d3, +0x4849474e, +0x486b48eb, +0x48c54966, +0x483048f4, +0x477848f9, +0x499e481e, +0x48f148cf, +0x49234982, +0x47cf487c, +0x464949ea, +0x495e4773, +0x483f48b2, +0x497548a7, +0x481e4616, +0x4866481f, +0x486448b6, +0x487347dc, +0x487f485c, +0x491f4938, +0x48b6490d, +0x48a148f8, +0x492d4859, +0x4915489c, +0x48874899, +0x4859486c, +0x471e49ca, +0x49184867, +0x482748d3, +0x4998488b, +0x481d4704, +0x488048b8, +0x49444876, +0x48f2470c, +0x489b48b9, +0x48e54956, +0x48a548d6, +0x485648dc, +0x49ab484e, +0x490e48e0, +0x494548dd, +0x48dd488b, +0x47ea4a32, +0x49114835, +0x48194965, +0x481e460e, +0x4673452c, +0x4717475c, +0x46d046f6, +0x46bc4696, +0x481e4726, +0x46ea4763, +0x475846fe, +0x4627478b, +0x483f4704, +0x47b146ad, +0x48164792, +0x468446f2, +0x45a84827, +0x47a4472f, +0x462b4797, +0x48ab483f, +0x4863468f, +0x4766485a, +0x48cb481d, +0x490347dc, +0x483048fc, +0x483e48cc, +0x486448ab, +0x47634966, +0x499d4794, +0x488b488e, +0x496048dc, +0x484c4854, +0x474c499c, +0x48bc4826, +0x48834949, +0x4905489d, +0x481e4718, +0x48f448e3, +0x490448c1, +0x48b347e8, +0x48d44892, +0x489448ff, +0x488648d5, +0x480348fa, +0x492e47d2, +0x48b24870, +0x492b48e5, +0x4785487b, +0x471d49e3, +0x48bf4837, +0x48c4489b, +0x4871475c, +0x4811464a, +0x471c47af, +0x48174817, +0x484e463b, +0x464f477f, +0x487c4704, +0x472547a3, +0x462a4853, +0x4860465a, +0x48804736, +0x482b47e1, +0x46c04811, +0x475d48dc, +0x48064668, +0x46f44893, +0x49594858, +0x487b463d, +0x484e480f, +0x48a648c0, +0x48944847, +0x484a48a0, +0x48f4491e, +0x48b548fc, +0x47d248ce, +0x497f47db, +0x49394955, +0x48ce48a7, +0x48844890, +0x476349d6, +0x4922486e, +0x48c348f4, +0x491c47ec, +0x47834698, +0x47544715, +0x47524745, +0x4832472f, +0x48094817, +0x48c347f8, +0x480047e6, +0x473048b6, +0x48cb480a, +0x488e479e, +0x488e47c2, +0x47ee472f, +0x4744489d, +0x48514755, +0x47d34846, +0x48a04838, +0x47624634, +0x48064786, +0x482d47e3, +0x486c4726, +0x480347b7, +0x481448ac, +0x483948e0, +0x47504827, +0x48c546f2, +0x4886483f, +0x485648ad, +0x47a947e8, +0x47434937, +0x481f46d0, +0x4804484c, +0x481f47fd, +0x4813456d, +0x4807474d, +0x480e4688, +0x481046e8, +0x4799469f, +0x478f4853, +0x482447f2, +0x471f47d0, +0x485f46da, +0x481c4813, +0x4863482e, +0x480b4786, +0x46b848c9, +0x46e2475a, +0x46c54852, +0x480245af, +0x46c24466, +0x4743465d, +0x47ba46b7, +0x46c34636, +0x47844677, +0x47c2485a, +0x46ac46dc, +0x460e47de, +0x4834465f, +0x476947f4, +0x481046fc, +0x45ea45fd, +0x45b548d0, +0x47834704, +0x46c44830, +0x47c74759, +0x45b0453d, +0x47024741, +0x47934736, +0x47ba461b, +0x46dd470b, +0x470b4657, +0x4710470d, +0x468f486c, +0x46ba45c3, +0x483b479d, +0x477446c9, +0x46a746a9, +0x46064833, +0x46a94690, +0x46a746f5, +0x48bb47ac, +0x4803452c, +0x4824470f, +0x48cb47d5, +0x484a4707, +0x47974832, +0x482c4851, +0x4877487a, +0x465d4891, +0x48ce47f4, +0x48994898, +0x486a484e, +0x47f047ac, +0x4611493e, +0x489e47e2, +0x46af488c, +0x48364665, +0x46b645e4, +0x46b946a1, +0x46dd46c8, +0x474b4658, +0x4777467b, +0x47984769, +0x475e4785, +0x4656472a, +0x488145fb, +0x472d46fc, +0x47a3476e, +0x46ca465d, +0x45004855, +0x479a464f, +0x473846c3, +0x486c481e, +0x48014659, +0x477a4756, +0x487b47d5, +0x48084706, +0x4838484f, +0x48634870, +0x480648d3, +0x47714865, +0x494c46be, +0x484c4915, +0x48624900, +0x46e8481a, +0x46a04974, +0x483d4775, +0x480e487c, +}; \ No newline at end of file diff --git a/hwpe/redmule_256iter/inc/tensor_dim.h b/hwpe/redmule_256iter/inc/tensor_dim.h new file mode 100644 index 0000000..21bd0d8 --- /dev/null +++ b/hwpe/redmule_256iter/inc/tensor_dim.h @@ -0,0 +1,13 @@ + /* Header file generated by RedMulE Golden Model */ +#ifndef __TENSOR_DIM__ +#define __TENSOR_DIM__ + +#define M_SIZE 24 +#define N_SIZE 32 +#define K_SIZE 32 +#define SRC_FMT FP16 +#define DST_FMT FP16 +#define FPFORMAT 16 +uint8_t gemm_ops = GEMM; + +#endif diff --git a/hwpe/redmule_256iter/inc/w_2D.h b/hwpe/redmule_256iter/inc/w_2D.h new file mode 100644 index 0000000..9409c64 --- /dev/null +++ b/hwpe/redmule_256iter/inc/w_2D.h @@ -0,0 +1,35 @@ + /* Header file generated by RedMulE Golden Model */ +uint16_t w_inp_2D [32][32] = { +0x311a, 0x39e0, 0x387d, 0x3a4a, 0x386f, 0x3ada, 0x392f, 0x3854, 0x3014, 0x2fd2, 0x31c9, 0x2fca, 0x2e55, 0x3bc8, 0x396d, 0x3b1d, 0x39f6, 0x333a, 0x3908, 0x3628, 0x3bab, 0x3b8b, 0x3b4a, 0x322d, 0x3925, 0x317a, 0x3725, 0x31c2, 0x3066, 0x38f3, 0x3a17, 0x3476, +0x3bda, 0x3196, 0x3922, 0x3680, 0x396a, 0x3021, 0x3761, 0x374d, 0x2fc2, 0x3967, 0x3b94, 0x33b5, 0x3797, 0x34d6, 0x3655, 0x2176, 0x39bc, 0x3999, 0x3658, 0x3904, 0x3759, 0x2ade, 0x3a5a, 0x3b78, 0x36c7, 0x2d01, 0x3b58, 0x2d9a, 0x373d, 0x3952, 0x38e8, 0x3887, +0x37b6, 0x3a88, 0x2f8a, 0x2d79, 0x3413, 0x3421, 0x3976, 0x32b2, 0x3446, 0x2d99, 0x3a56, 0x3322, 0x3b49, 0x39fa, 0x3acd, 0x3af6, 0x304c, 0x3abb, 0x3a83, 0x38b2, 0x3ab9, 0x363e, 0x389f, 0x31bb, 0x38e1, 0x3bc4, 0x3b9b, 0x2984, 0x3a43, 0x3b2f, 0x35d6, 0x3bda, +0x2df3, 0x3bf8, 0x2acc, 0x378b, 0x3555, 0x2e59, 0x31d4, 0x34ec, 0x3a46, 0x3bab, 0x3214, 0x3161, 0x3470, 0x3a03, 0x368e, 0x31ad, 0x27cb, 0x2ecb, 0x3422, 0x39f7, 0x3644, 0x3a77, 0x313f, 0x34f2, 0x39b3, 0x3bf2, 0x379a, 0x3456, 0x35fe, 0x3ae7, 0x3964, 0x385f, +0x3b16, 0x3999, 0x3833, 0x2eda, 0x3afd, 0x3a4a, 0x3ba2, 0x2bd4, 0x3b38, 0x31a2, 0x32dd, 0x353c, 0x366f, 0x375e, 0x3821, 0x367a, 0x3b44, 0x39e6, 0x3787, 0x339e, 0x39d7, 0x38c6, 0x37d5, 0x342f, 0x3984, 0x319b, 0x33b5, 0x35ab, 0x398a, 0x374e, 0x36b6, 0x3b21, +0x3bbb, 0x2ab3, 0x2ad5, 0x33bc, 0x2bef, 0x3780, 0x3738, 0x3a0b, 0x3b09, 0x30ca, 0x384e, 0x3ab3, 0x39bd, 0x3453, 0x3a6d, 0x3957, 0x2c10, 0x30e9, 0x35d4, 0x3aef, 0x3be9, 0x39ad, 0x3a74, 0x3af9, 0x3739, 0x2d4d, 0x39fe, 0x3b72, 0x2c57, 0x398c, 0x381f, 0x3930, +0x3820, 0x321b, 0x3964, 0x2964, 0x33a0, 0x2d00, 0x2490, 0x336b, 0x3465, 0x3b2e, 0x3aa0, 0x371f, 0x300e, 0x3a09, 0x3bf1, 0x25cc, 0x3b6f, 0x3384, 0x3a88, 0x3acb, 0x3814, 0x36d0, 0x3081, 0x3a2c, 0x3353, 0x39cb, 0x31ed, 0x3af6, 0x3721, 0x36c7, 0x2ce2, 0x390d, +0x3698, 0x3ab2, 0x3b3e, 0x2eb4, 0x3998, 0x39e3, 0x3a77, 0x3632, 0x2c12, 0x3bd5, 0x3ba3, 0x3bba, 0x323c, 0x367b, 0x3557, 0x39c8, 0x37db, 0x3b45, 0x3b6e, 0x3931, 0x3121, 0x3a8d, 0x3a55, 0x3b9b, 0x358a, 0x3925, 0x3491, 0x3912, 0x3b6b, 0x3584, 0x32df, 0x3120, +0x32b2, 0x3b0a, 0x2cad, 0x3465, 0x3ad3, 0x3bcd, 0x363b, 0x3afe, 0x354b, 0x3374, 0x39af, 0x3b7f, 0x308c, 0x2e72, 0x3380, 0x3b70, 0x3902, 0x38d8, 0x39f3, 0x3a4b, 0x3853, 0x397b, 0x2ebe, 0x387f, 0x2845, 0x37e2, 0x360f, 0x370b, 0x3acb, 0x35d4, 0x36e6, 0x3262, +0x2e88, 0x3a54, 0x2ee3, 0x3575, 0x3afe, 0x2aee, 0x39a0, 0x3aae, 0x3693, 0x3432, 0x3834, 0x3b9b, 0x3bcb, 0x2e3a, 0x356d, 0x374e, 0x3924, 0x383c, 0x311e, 0x3ac5, 0x352d, 0x311e, 0x38ca, 0x34d4, 0x36ca, 0x34ed, 0x3a13, 0x33eb, 0x3639, 0x3828, 0x3b3c, 0x3939, +0x3837, 0x3521, 0x2cb5, 0x3629, 0x3924, 0x384c, 0x366a, 0x3bbf, 0x2e9e, 0x3ba8, 0x33ad, 0x38c8, 0x3934, 0x3907, 0x249a, 0x3690, 0x3a09, 0x3215, 0x3898, 0x325d, 0x37d5, 0x3195, 0x361c, 0x3ae4, 0x351f, 0x3452, 0x3bc0, 0x375c, 0x39bf, 0x317a, 0x3aae, 0x283a, +0x3476, 0x3b92, 0x3472, 0x383e, 0x280f, 0x39d6, 0x2fd1, 0x31f4, 0x2ffb, 0x3b97, 0x3692, 0x36c0, 0x3989, 0x33cf, 0x3ba6, 0x3239, 0x35d7, 0x33ab, 0x31eb, 0x3b47, 0x389b, 0x3b88, 0x3580, 0x354c, 0x3802, 0x3b9a, 0x3b94, 0x2a92, 0x2db1, 0x38bd, 0x2dfb, 0x3900, +0x344f, 0x3739, 0x27a5, 0x3b2e, 0x342b, 0x34bb, 0x30c8, 0x3ae8, 0x3b26, 0x3982, 0x38c0, 0x3408, 0x38c8, 0x36ef, 0x3bf0, 0x3acf, 0x3a3c, 0x3825, 0x31a5, 0x3ada, 0x3b5b, 0x37db, 0x3a01, 0x3663, 0x3a7d, 0x327b, 0x3a1f, 0x3862, 0x38af, 0x3204, 0x372e, 0x3b19, +0x3708, 0x3622, 0x2e62, 0x39ab, 0x2d4d, 0x31b4, 0x3552, 0x3bbc, 0x36f2, 0x36eb, 0x38ef, 0x3755, 0x3bbe, 0x2c17, 0x3815, 0x2f53, 0x363f, 0x38c1, 0x3246, 0x386b, 0x34de, 0x34e4, 0x3baa, 0x349e, 0x32ce, 0x3a68, 0x373f, 0x2cce, 0x3b36, 0x28ba, 0x3b50, 0x3232, +0x1f34, 0x3928, 0x35cd, 0x3b38, 0x30ce, 0x35a1, 0x3a06, 0x3a32, 0x3a53, 0x3489, 0x3241, 0x372f, 0x390c, 0x3a1b, 0x378a, 0x3713, 0x3769, 0x37a8, 0x3418, 0x3ad4, 0x3a4e, 0x3bf7, 0x37a5, 0x34dc, 0x39b2, 0x351b, 0x3372, 0x349f, 0x2f50, 0x3ab1, 0x3795, 0x2db7, +0x3864, 0x3157, 0x3900, 0x323e, 0x389e, 0x3880, 0x3b1f, 0x37a1, 0x396c, 0x2e43, 0x2c2a, 0x3b78, 0x3988, 0x3a14, 0x39c1, 0x3b51, 0x3780, 0x3bf2, 0x2d19, 0x3815, 0x3a5f, 0x3641, 0x2f62, 0x37d5, 0x3564, 0x139a, 0x3ab8, 0x28f7, 0x3785, 0x34e1, 0x3097, 0x3768, +0x3971, 0x3ae2, 0x32ae, 0x2fd5, 0x382a, 0x346c, 0x3133, 0x3167, 0x3940, 0x2d12, 0x389a, 0x3bd0, 0x3943, 0x391c, 0x3a75, 0x2a11, 0x391e, 0x372d, 0x3a79, 0x3b72, 0x3373, 0x39b7, 0x35d7, 0x372b, 0x3a6d, 0x38a1, 0x3279, 0x3434, 0x3694, 0x3b45, 0x3abb, 0x392d, +0x34a8, 0x3757, 0x32ca, 0x345d, 0x36a5, 0x3854, 0x2dcd, 0x30af, 0x38dd, 0x3067, 0x3411, 0x3997, 0x397a, 0x3a64, 0x38b8, 0x3962, 0x3509, 0x3bb6, 0x3a66, 0x339f, 0x372a, 0x31a8, 0x37da, 0x36ff, 0x33c6, 0x31da, 0x3977, 0x3b72, 0x3841, 0x3567, 0x3433, 0x33b8, +0x39fe, 0x3a10, 0x3bf2, 0x35e7, 0x3a4a, 0x3b3e, 0x2ec7, 0x3aa4, 0x3846, 0x3af9, 0x38a9, 0x2c1f, 0x39ab, 0x349f, 0x31d6, 0x39ae, 0x3b79, 0x352d, 0x3516, 0x347c, 0x2f33, 0x35ad, 0x31c4, 0x3b52, 0x354b, 0x3786, 0x3ab7, 0x3896, 0x34ac, 0x352f, 0x37e6, 0x326a, +0x2e44, 0x34c7, 0x388d, 0x3bf4, 0x363f, 0x3b3d, 0x33b1, 0x3b8b, 0x3340, 0x37f7, 0x3b07, 0x25bf, 0x398e, 0x3505, 0x3bd7, 0x366d, 0x388a, 0x2cc0, 0x359a, 0x3b9a, 0x3b99, 0x379d, 0x3b6b, 0x39b8, 0x3223, 0x2703, 0x3ba9, 0x2ecb, 0x3759, 0x39d8, 0x37ac, 0x32cf, +0x35f2, 0x38a3, 0x399e, 0x3bd2, 0x3780, 0x3af3, 0x3b5e, 0x337b, 0x3a08, 0x35da, 0x3446, 0x3b25, 0x3ad0, 0x3bee, 0x3141, 0x32d8, 0x34ce, 0x2ac9, 0x3800, 0x3a8a, 0x2d53, 0x368a, 0x3561, 0x3998, 0x35a3, 0x3677, 0x3ab2, 0x3269, 0x3236, 0x3b3e, 0x3aba, 0x3bac, +0x395d, 0x3820, 0x1df6, 0x3bb5, 0x35b5, 0x3675, 0x3b74, 0x360f, 0x34de, 0x3a0c, 0x3aeb, 0x299d, 0x3207, 0x3bd8, 0x2178, 0x3995, 0x3948, 0x3908, 0x3843, 0x2ea5, 0x3045, 0x3989, 0x345d, 0x39c5, 0x3a89, 0x3863, 0x3be0, 0x397a, 0x38f1, 0x39e2, 0x3b08, 0x352e, +0x385f, 0x28f2, 0x3bc3, 0x35e0, 0x380c, 0x3b9c, 0x3afc, 0x390a, 0x3689, 0x34fd, 0x2cf5, 0x308e, 0x342b, 0x3921, 0x3a67, 0x3ad6, 0x2986, 0x32fc, 0x35aa, 0x3507, 0x3608, 0x33fd, 0x3bf3, 0x39e2, 0x3b0f, 0x30b7, 0x3896, 0x3ae4, 0x2145, 0x35b6, 0x2e1d, 0x3ad1, +0x333d, 0x3afb, 0x2703, 0x3413, 0x1d7d, 0x3b7f, 0x3ae1, 0x303c, 0x3004, 0x39d3, 0x3554, 0x31a4, 0x354e, 0x3662, 0x39c5, 0x2eb7, 0x2c6e, 0x397f, 0x31d8, 0x1f0c, 0x38e3, 0x35f0, 0x2714, 0x28d1, 0x375e, 0x3a75, 0x3830, 0x3578, 0x397d, 0x3b18, 0x383c, 0x3498, +0x39ad, 0x3598, 0x23c4, 0x34ea, 0x3a61, 0x2b00, 0x3707, 0x3ae1, 0x37ae, 0x389d, 0x37fa, 0x3673, 0x3278, 0xf3e, 0x3809, 0x33c6, 0x3bf5, 0x3279, 0x3816, 0x360c, 0x39c8, 0x381f, 0x3741, 0x2d66, 0x38c0, 0x37d3, 0x377a, 0x3621, 0x2faf, 0x392e, 0x2de6, 0x33c5, +0x3803, 0x2600, 0x32e9, 0x39b4, 0x38d2, 0x34e8, 0x2fe6, 0x3199, 0x3643, 0x3a77, 0x27cc, 0x39d7, 0x34c6, 0x2ea8, 0x364e, 0x3b07, 0x31c7, 0x30a1, 0x31b1, 0x3b8f, 0x3571, 0x3b75, 0x3989, 0x3805, 0x39fb, 0x3945, 0x352b, 0x31d8, 0x3904, 0x3440, 0x3a57, 0x2cf7, +0x3b39, 0x2fcd, 0x2b89, 0x2edd, 0x3682, 0x36a9, 0x32c8, 0x37ac, 0x32a5, 0x3311, 0x394b, 0x3b84, 0x3aec, 0x3601, 0x2765, 0x3b69, 0x396b, 0x3727, 0x3bfe, 0x3907, 0x376f, 0x3674, 0x3973, 0x3671, 0x3491, 0x3993, 0x383f, 0x3335, 0x3989, 0x3550, 0x3077, 0x35f5, +0x3a59, 0x3950, 0x380c, 0x37cd, 0x30bf, 0x3607, 0x3afa, 0x3b5d, 0x32b9, 0x386b, 0x35bd, 0x3aca, 0x3ba5, 0x3b2d, 0x3b19, 0x3b8b, 0x345e, 0x2845, 0x34aa, 0x372a, 0x3448, 0x34f5, 0x3ae2, 0x3637, 0x2cb5, 0x354b, 0x3b15, 0x2ca8, 0x2641, 0x3178, 0x2cfe, 0x39b4, +0x3bdd, 0x3acb, 0x3a05, 0x38a2, 0x3b4a, 0x34e5, 0x395f, 0x394b, 0x34c4, 0x3aa5, 0x29bb, 0x2d96, 0x339d, 0x387c, 0x382e, 0x385a, 0x396b, 0x3aa9, 0x2f1e, 0x33a7, 0x3b90, 0x3b7b, 0x3b5f, 0x39d3, 0x3b18, 0x354f, 0x2cdb, 0x3a6f, 0x3434, 0x34ff, 0x3a5b, 0x3b84, +0x3a33, 0x384b, 0x2e67, 0x3b85, 0x3853, 0x380c, 0x346a, 0x3aaa, 0x3492, 0x33e8, 0x3bf2, 0x38ae, 0x3a29, 0x3830, 0x3221, 0x35b1, 0x3a48, 0x2c68, 0x2ced, 0x3a7e, 0x3539, 0x3922, 0x374c, 0x3aaa, 0x2dae, 0x395d, 0x3b3d, 0x3890, 0x2cfe, 0x2dd6, 0x3bad, 0x33c5, +0x2c07, 0x3a2c, 0x37a8, 0x390f, 0x2fc8, 0x35ae, 0x388c, 0x30ee, 0x3674, 0x391d, 0x3bfc, 0x36bf, 0x322d, 0x3a78, 0x35c0, 0x3492, 0x3ac8, 0x3504, 0x3315, 0x381d, 0x3a7a, 0x3a08, 0x343c, 0x3bda, 0x341b, 0x39f0, 0x3b9e, 0x395d, 0x3c00, 0x38ab, 0x3bcf, 0x3564, +0x33c4, 0x3b0d, 0x3623, 0x33b9, 0x3b92, 0x1e71, 0x2c57, 0x36d0, 0x314b, 0x3a16, 0x3372, 0x341b, 0x3aaa, 0x3444, 0x396b, 0x2dd7, 0x3b30, 0x3559, 0x3b5b, 0x3a29, 0x2d19, 0x38b7, 0x3b01, 0x3afa, 0x398a, 0x3839, 0x3ac9, 0x2e31, 0x3924, 0x39f2, 0x3a7f, 0x3285 +}; \ No newline at end of file diff --git a/hwpe/redmule_256iter/inc/w_input.h b/hwpe/redmule_256iter/inc/w_input.h new file mode 100644 index 0000000..dc4d3be --- /dev/null +++ b/hwpe/redmule_256iter/inc/w_input.h @@ -0,0 +1,35 @@ + /* Header file generated by RedMulE Golden Model */ +uint16_t w_inp [1024] = { +0x311a, 0x39e0, 0x387d, 0x3a4a, 0x386f, 0x3ada, 0x392f, 0x3854, 0x3014, 0x2fd2, 0x31c9, 0x2fca, 0x2e55, 0x3bc8, 0x396d, 0x3b1d, 0x39f6, 0x333a, 0x3908, 0x3628, 0x3bab, 0x3b8b, 0x3b4a, 0x322d, 0x3925, 0x317a, 0x3725, 0x31c2, 0x3066, 0x38f3, 0x3a17, 0x3476, +0x3bda, 0x3196, 0x3922, 0x3680, 0x396a, 0x3021, 0x3761, 0x374d, 0x2fc2, 0x3967, 0x3b94, 0x33b5, 0x3797, 0x34d6, 0x3655, 0x2176, 0x39bc, 0x3999, 0x3658, 0x3904, 0x3759, 0x2ade, 0x3a5a, 0x3b78, 0x36c7, 0x2d01, 0x3b58, 0x2d9a, 0x373d, 0x3952, 0x38e8, 0x3887, +0x37b6, 0x3a88, 0x2f8a, 0x2d79, 0x3413, 0x3421, 0x3976, 0x32b2, 0x3446, 0x2d99, 0x3a56, 0x3322, 0x3b49, 0x39fa, 0x3acd, 0x3af6, 0x304c, 0x3abb, 0x3a83, 0x38b2, 0x3ab9, 0x363e, 0x389f, 0x31bb, 0x38e1, 0x3bc4, 0x3b9b, 0x2984, 0x3a43, 0x3b2f, 0x35d6, 0x3bda, +0x2df3, 0x3bf8, 0x2acc, 0x378b, 0x3555, 0x2e59, 0x31d4, 0x34ec, 0x3a46, 0x3bab, 0x3214, 0x3161, 0x3470, 0x3a03, 0x368e, 0x31ad, 0x27cb, 0x2ecb, 0x3422, 0x39f7, 0x3644, 0x3a77, 0x313f, 0x34f2, 0x39b3, 0x3bf2, 0x379a, 0x3456, 0x35fe, 0x3ae7, 0x3964, 0x385f, +0x3b16, 0x3999, 0x3833, 0x2eda, 0x3afd, 0x3a4a, 0x3ba2, 0x2bd4, 0x3b38, 0x31a2, 0x32dd, 0x353c, 0x366f, 0x375e, 0x3821, 0x367a, 0x3b44, 0x39e6, 0x3787, 0x339e, 0x39d7, 0x38c6, 0x37d5, 0x342f, 0x3984, 0x319b, 0x33b5, 0x35ab, 0x398a, 0x374e, 0x36b6, 0x3b21, +0x3bbb, 0x2ab3, 0x2ad5, 0x33bc, 0x2bef, 0x3780, 0x3738, 0x3a0b, 0x3b09, 0x30ca, 0x384e, 0x3ab3, 0x39bd, 0x3453, 0x3a6d, 0x3957, 0x2c10, 0x30e9, 0x35d4, 0x3aef, 0x3be9, 0x39ad, 0x3a74, 0x3af9, 0x3739, 0x2d4d, 0x39fe, 0x3b72, 0x2c57, 0x398c, 0x381f, 0x3930, +0x3820, 0x321b, 0x3964, 0x2964, 0x33a0, 0x2d00, 0x2490, 0x336b, 0x3465, 0x3b2e, 0x3aa0, 0x371f, 0x300e, 0x3a09, 0x3bf1, 0x25cc, 0x3b6f, 0x3384, 0x3a88, 0x3acb, 0x3814, 0x36d0, 0x3081, 0x3a2c, 0x3353, 0x39cb, 0x31ed, 0x3af6, 0x3721, 0x36c7, 0x2ce2, 0x390d, +0x3698, 0x3ab2, 0x3b3e, 0x2eb4, 0x3998, 0x39e3, 0x3a77, 0x3632, 0x2c12, 0x3bd5, 0x3ba3, 0x3bba, 0x323c, 0x367b, 0x3557, 0x39c8, 0x37db, 0x3b45, 0x3b6e, 0x3931, 0x3121, 0x3a8d, 0x3a55, 0x3b9b, 0x358a, 0x3925, 0x3491, 0x3912, 0x3b6b, 0x3584, 0x32df, 0x3120, +0x32b2, 0x3b0a, 0x2cad, 0x3465, 0x3ad3, 0x3bcd, 0x363b, 0x3afe, 0x354b, 0x3374, 0x39af, 0x3b7f, 0x308c, 0x2e72, 0x3380, 0x3b70, 0x3902, 0x38d8, 0x39f3, 0x3a4b, 0x3853, 0x397b, 0x2ebe, 0x387f, 0x2845, 0x37e2, 0x360f, 0x370b, 0x3acb, 0x35d4, 0x36e6, 0x3262, +0x2e88, 0x3a54, 0x2ee3, 0x3575, 0x3afe, 0x2aee, 0x39a0, 0x3aae, 0x3693, 0x3432, 0x3834, 0x3b9b, 0x3bcb, 0x2e3a, 0x356d, 0x374e, 0x3924, 0x383c, 0x311e, 0x3ac5, 0x352d, 0x311e, 0x38ca, 0x34d4, 0x36ca, 0x34ed, 0x3a13, 0x33eb, 0x3639, 0x3828, 0x3b3c, 0x3939, +0x3837, 0x3521, 0x2cb5, 0x3629, 0x3924, 0x384c, 0x366a, 0x3bbf, 0x2e9e, 0x3ba8, 0x33ad, 0x38c8, 0x3934, 0x3907, 0x249a, 0x3690, 0x3a09, 0x3215, 0x3898, 0x325d, 0x37d5, 0x3195, 0x361c, 0x3ae4, 0x351f, 0x3452, 0x3bc0, 0x375c, 0x39bf, 0x317a, 0x3aae, 0x283a, +0x3476, 0x3b92, 0x3472, 0x383e, 0x280f, 0x39d6, 0x2fd1, 0x31f4, 0x2ffb, 0x3b97, 0x3692, 0x36c0, 0x3989, 0x33cf, 0x3ba6, 0x3239, 0x35d7, 0x33ab, 0x31eb, 0x3b47, 0x389b, 0x3b88, 0x3580, 0x354c, 0x3802, 0x3b9a, 0x3b94, 0x2a92, 0x2db1, 0x38bd, 0x2dfb, 0x3900, +0x344f, 0x3739, 0x27a5, 0x3b2e, 0x342b, 0x34bb, 0x30c8, 0x3ae8, 0x3b26, 0x3982, 0x38c0, 0x3408, 0x38c8, 0x36ef, 0x3bf0, 0x3acf, 0x3a3c, 0x3825, 0x31a5, 0x3ada, 0x3b5b, 0x37db, 0x3a01, 0x3663, 0x3a7d, 0x327b, 0x3a1f, 0x3862, 0x38af, 0x3204, 0x372e, 0x3b19, +0x3708, 0x3622, 0x2e62, 0x39ab, 0x2d4d, 0x31b4, 0x3552, 0x3bbc, 0x36f2, 0x36eb, 0x38ef, 0x3755, 0x3bbe, 0x2c17, 0x3815, 0x2f53, 0x363f, 0x38c1, 0x3246, 0x386b, 0x34de, 0x34e4, 0x3baa, 0x349e, 0x32ce, 0x3a68, 0x373f, 0x2cce, 0x3b36, 0x28ba, 0x3b50, 0x3232, +0x1f34, 0x3928, 0x35cd, 0x3b38, 0x30ce, 0x35a1, 0x3a06, 0x3a32, 0x3a53, 0x3489, 0x3241, 0x372f, 0x390c, 0x3a1b, 0x378a, 0x3713, 0x3769, 0x37a8, 0x3418, 0x3ad4, 0x3a4e, 0x3bf7, 0x37a5, 0x34dc, 0x39b2, 0x351b, 0x3372, 0x349f, 0x2f50, 0x3ab1, 0x3795, 0x2db7, +0x3864, 0x3157, 0x3900, 0x323e, 0x389e, 0x3880, 0x3b1f, 0x37a1, 0x396c, 0x2e43, 0x2c2a, 0x3b78, 0x3988, 0x3a14, 0x39c1, 0x3b51, 0x3780, 0x3bf2, 0x2d19, 0x3815, 0x3a5f, 0x3641, 0x2f62, 0x37d5, 0x3564, 0x139a, 0x3ab8, 0x28f7, 0x3785, 0x34e1, 0x3097, 0x3768, +0x3971, 0x3ae2, 0x32ae, 0x2fd5, 0x382a, 0x346c, 0x3133, 0x3167, 0x3940, 0x2d12, 0x389a, 0x3bd0, 0x3943, 0x391c, 0x3a75, 0x2a11, 0x391e, 0x372d, 0x3a79, 0x3b72, 0x3373, 0x39b7, 0x35d7, 0x372b, 0x3a6d, 0x38a1, 0x3279, 0x3434, 0x3694, 0x3b45, 0x3abb, 0x392d, +0x34a8, 0x3757, 0x32ca, 0x345d, 0x36a5, 0x3854, 0x2dcd, 0x30af, 0x38dd, 0x3067, 0x3411, 0x3997, 0x397a, 0x3a64, 0x38b8, 0x3962, 0x3509, 0x3bb6, 0x3a66, 0x339f, 0x372a, 0x31a8, 0x37da, 0x36ff, 0x33c6, 0x31da, 0x3977, 0x3b72, 0x3841, 0x3567, 0x3433, 0x33b8, +0x39fe, 0x3a10, 0x3bf2, 0x35e7, 0x3a4a, 0x3b3e, 0x2ec7, 0x3aa4, 0x3846, 0x3af9, 0x38a9, 0x2c1f, 0x39ab, 0x349f, 0x31d6, 0x39ae, 0x3b79, 0x352d, 0x3516, 0x347c, 0x2f33, 0x35ad, 0x31c4, 0x3b52, 0x354b, 0x3786, 0x3ab7, 0x3896, 0x34ac, 0x352f, 0x37e6, 0x326a, +0x2e44, 0x34c7, 0x388d, 0x3bf4, 0x363f, 0x3b3d, 0x33b1, 0x3b8b, 0x3340, 0x37f7, 0x3b07, 0x25bf, 0x398e, 0x3505, 0x3bd7, 0x366d, 0x388a, 0x2cc0, 0x359a, 0x3b9a, 0x3b99, 0x379d, 0x3b6b, 0x39b8, 0x3223, 0x2703, 0x3ba9, 0x2ecb, 0x3759, 0x39d8, 0x37ac, 0x32cf, +0x35f2, 0x38a3, 0x399e, 0x3bd2, 0x3780, 0x3af3, 0x3b5e, 0x337b, 0x3a08, 0x35da, 0x3446, 0x3b25, 0x3ad0, 0x3bee, 0x3141, 0x32d8, 0x34ce, 0x2ac9, 0x3800, 0x3a8a, 0x2d53, 0x368a, 0x3561, 0x3998, 0x35a3, 0x3677, 0x3ab2, 0x3269, 0x3236, 0x3b3e, 0x3aba, 0x3bac, +0x395d, 0x3820, 0x1df6, 0x3bb5, 0x35b5, 0x3675, 0x3b74, 0x360f, 0x34de, 0x3a0c, 0x3aeb, 0x299d, 0x3207, 0x3bd8, 0x2178, 0x3995, 0x3948, 0x3908, 0x3843, 0x2ea5, 0x3045, 0x3989, 0x345d, 0x39c5, 0x3a89, 0x3863, 0x3be0, 0x397a, 0x38f1, 0x39e2, 0x3b08, 0x352e, +0x385f, 0x28f2, 0x3bc3, 0x35e0, 0x380c, 0x3b9c, 0x3afc, 0x390a, 0x3689, 0x34fd, 0x2cf5, 0x308e, 0x342b, 0x3921, 0x3a67, 0x3ad6, 0x2986, 0x32fc, 0x35aa, 0x3507, 0x3608, 0x33fd, 0x3bf3, 0x39e2, 0x3b0f, 0x30b7, 0x3896, 0x3ae4, 0x2145, 0x35b6, 0x2e1d, 0x3ad1, +0x333d, 0x3afb, 0x2703, 0x3413, 0x1d7d, 0x3b7f, 0x3ae1, 0x303c, 0x3004, 0x39d3, 0x3554, 0x31a4, 0x354e, 0x3662, 0x39c5, 0x2eb7, 0x2c6e, 0x397f, 0x31d8, 0x1f0c, 0x38e3, 0x35f0, 0x2714, 0x28d1, 0x375e, 0x3a75, 0x3830, 0x3578, 0x397d, 0x3b18, 0x383c, 0x3498, +0x39ad, 0x3598, 0x23c4, 0x34ea, 0x3a61, 0x2b00, 0x3707, 0x3ae1, 0x37ae, 0x389d, 0x37fa, 0x3673, 0x3278, 0xf3e, 0x3809, 0x33c6, 0x3bf5, 0x3279, 0x3816, 0x360c, 0x39c8, 0x381f, 0x3741, 0x2d66, 0x38c0, 0x37d3, 0x377a, 0x3621, 0x2faf, 0x392e, 0x2de6, 0x33c5, +0x3803, 0x2600, 0x32e9, 0x39b4, 0x38d2, 0x34e8, 0x2fe6, 0x3199, 0x3643, 0x3a77, 0x27cc, 0x39d7, 0x34c6, 0x2ea8, 0x364e, 0x3b07, 0x31c7, 0x30a1, 0x31b1, 0x3b8f, 0x3571, 0x3b75, 0x3989, 0x3805, 0x39fb, 0x3945, 0x352b, 0x31d8, 0x3904, 0x3440, 0x3a57, 0x2cf7, +0x3b39, 0x2fcd, 0x2b89, 0x2edd, 0x3682, 0x36a9, 0x32c8, 0x37ac, 0x32a5, 0x3311, 0x394b, 0x3b84, 0x3aec, 0x3601, 0x2765, 0x3b69, 0x396b, 0x3727, 0x3bfe, 0x3907, 0x376f, 0x3674, 0x3973, 0x3671, 0x3491, 0x3993, 0x383f, 0x3335, 0x3989, 0x3550, 0x3077, 0x35f5, +0x3a59, 0x3950, 0x380c, 0x37cd, 0x30bf, 0x3607, 0x3afa, 0x3b5d, 0x32b9, 0x386b, 0x35bd, 0x3aca, 0x3ba5, 0x3b2d, 0x3b19, 0x3b8b, 0x345e, 0x2845, 0x34aa, 0x372a, 0x3448, 0x34f5, 0x3ae2, 0x3637, 0x2cb5, 0x354b, 0x3b15, 0x2ca8, 0x2641, 0x3178, 0x2cfe, 0x39b4, +0x3bdd, 0x3acb, 0x3a05, 0x38a2, 0x3b4a, 0x34e5, 0x395f, 0x394b, 0x34c4, 0x3aa5, 0x29bb, 0x2d96, 0x339d, 0x387c, 0x382e, 0x385a, 0x396b, 0x3aa9, 0x2f1e, 0x33a7, 0x3b90, 0x3b7b, 0x3b5f, 0x39d3, 0x3b18, 0x354f, 0x2cdb, 0x3a6f, 0x3434, 0x34ff, 0x3a5b, 0x3b84, +0x3a33, 0x384b, 0x2e67, 0x3b85, 0x3853, 0x380c, 0x346a, 0x3aaa, 0x3492, 0x33e8, 0x3bf2, 0x38ae, 0x3a29, 0x3830, 0x3221, 0x35b1, 0x3a48, 0x2c68, 0x2ced, 0x3a7e, 0x3539, 0x3922, 0x374c, 0x3aaa, 0x2dae, 0x395d, 0x3b3d, 0x3890, 0x2cfe, 0x2dd6, 0x3bad, 0x33c5, +0x2c07, 0x3a2c, 0x37a8, 0x390f, 0x2fc8, 0x35ae, 0x388c, 0x30ee, 0x3674, 0x391d, 0x3bfc, 0x36bf, 0x322d, 0x3a78, 0x35c0, 0x3492, 0x3ac8, 0x3504, 0x3315, 0x381d, 0x3a7a, 0x3a08, 0x343c, 0x3bda, 0x341b, 0x39f0, 0x3b9e, 0x395d, 0x3c00, 0x38ab, 0x3bcf, 0x3564, +0x33c4, 0x3b0d, 0x3623, 0x33b9, 0x3b92, 0x1e71, 0x2c57, 0x36d0, 0x314b, 0x3a16, 0x3372, 0x341b, 0x3aaa, 0x3444, 0x396b, 0x2dd7, 0x3b30, 0x3559, 0x3b5b, 0x3a29, 0x2d19, 0x38b7, 0x3b01, 0x3afa, 0x398a, 0x3839, 0x3ac9, 0x2e31, 0x3924, 0x39f2, 0x3a7f, 0x3285 +}; \ No newline at end of file diff --git a/hwpe/redmule_256iter/inc/x_2D.h b/hwpe/redmule_256iter/inc/x_2D.h new file mode 100644 index 0000000..0b589f8 --- /dev/null +++ b/hwpe/redmule_256iter/inc/x_2D.h @@ -0,0 +1,27 @@ + /* Header file generated by RedMulE Golden Model */ +uint16_t x_inp_2D [24][32] = { +0x2153, 0x3bb5, 0x3896, 0x365f, 0x2483, 0x3518, 0x2dd1, 0x3bca, 0x397b, 0x29b1, 0x3705, 0x36c8, 0x398b, 0x3661, 0x2f05, 0x365a, 0x3bf9, 0x34df, 0x363b, 0x38d9, 0x39c6, 0x3abb, 0x3952, 0x38f2, 0x392d, 0x3b3e, 0x2afb, 0x3a9d, 0x353b, 0x3b73, 0x3a01, 0x3679, +0x3934, 0x397d, 0x2904, 0x3822, 0x3462, 0x3b44, 0x39e9, 0x28be, 0x331e, 0x3a1d, 0x39e5, 0x34da, 0x3a19, 0x3906, 0x1d35, 0x3871, 0x31e7, 0x3b29, 0x325d, 0x3797, 0x2b2f, 0x38b4, 0x232f, 0x38aa, 0x3aca, 0x316f, 0x3811, 0x3950, 0x32ea, 0x3bc7, 0x382c, 0x38a2, +0x29ce, 0x3afa, 0x3a39, 0x2ccc, 0x39fd, 0x3b3d, 0x384a, 0x3a35, 0x3802, 0x366a, 0x37ec, 0x3598, 0x3bf8, 0x3a85, 0x3a1b, 0x386e, 0x3b4c, 0x39de, 0x38c2, 0x2f93, 0x3b4c, 0x39c4, 0x3b9e, 0x3844, 0x346d, 0x3bff, 0x32ce, 0x296d, 0x3130, 0x3b3d, 0x3b44, 0x369d, +0x3b13, 0x31ed, 0x330a, 0x3831, 0x34e7, 0x37b3, 0x331a, 0x3918, 0x32d3, 0x3995, 0x3991, 0x3919, 0x3a26, 0x385b, 0x2b76, 0x3a3b, 0x37f2, 0x26a7, 0x3225, 0x3b64, 0x28f0, 0x3456, 0x3822, 0x341e, 0x381a, 0x38d8, 0x2c11, 0x33be, 0x33ac, 0x353f, 0x3476, 0x3abc, +0x36ec, 0x3a1d, 0x39d3, 0x3821, 0x36ac, 0x3bce, 0x3ad2, 0x3616, 0x36a1, 0x2cb3, 0x38d2, 0x314f, 0x385c, 0x3b63, 0x3bb6, 0x2951, 0x372d, 0x2c42, 0x3823, 0x3883, 0x3872, 0x31ee, 0x36c5, 0x399a, 0x31b0, 0x3887, 0x3884, 0x3865, 0x3896, 0x36c3, 0x32e3, 0x346c, +0x3935, 0x3b50, 0x2b6d, 0x38cd, 0x388f, 0x3389, 0x395d, 0x31cd, 0x2efd, 0x3154, 0x2f35, 0x3444, 0x3293, 0x3b6b, 0x1bec, 0x3b69, 0x3bf3, 0x3611, 0x3508, 0x3742, 0x3a50, 0x3ab7, 0x3457, 0x38d3, 0x3344, 0x38e8, 0x33c0, 0x3668, 0x3bee, 0x3b21, 0x3727, 0x3121, +0x316c, 0x3288, 0x2d50, 0x2e74, 0x35d5, 0x37e2, 0x303d, 0x36af, 0x341f, 0x3436, 0x2df7, 0x399d, 0x30f4, 0x3aaf, 0x34e4, 0x2c2a, 0x3116, 0x34d3, 0x36ac, 0x35e3, 0x3760, 0x36e1, 0x3ad2, 0x3547, 0x38f4, 0x369c, 0x3ba9, 0x34f0, 0x3a39, 0x3b19, 0x36e6, 0x395d, +0x3be8, 0x3293, 0x3bfc, 0x3435, 0x2eb3, 0x3360, 0x3919, 0x3bed, 0x396a, 0x37fc, 0x3242, 0x384b, 0x38cb, 0x3b2c, 0x3b28, 0x28cf, 0x3828, 0x3855, 0x3ba9, 0x2fa7, 0x340b, 0x32f1, 0x3ada, 0x36fa, 0x31f5, 0x3436, 0x29d0, 0x33e6, 0x3232, 0x3bec, 0x3904, 0x2797, +0x3b81, 0x3bac, 0x38d2, 0x343d, 0x31af, 0x3b1e, 0x33fc, 0x3864, 0x3624, 0x3905, 0x2945, 0x3b52, 0x2d08, 0x3a17, 0x3b84, 0x3804, 0x3a24, 0x38a3, 0x3562, 0x3ae6, 0x3bba, 0x3a45, 0x3679, 0x31fa, 0x3994, 0x2c3d, 0x383f, 0x399d, 0x34f7, 0x360e, 0x35f3, 0x38f0, +0x38d4, 0x399a, 0x3a48, 0x3987, 0x3b54, 0x382c, 0x3210, 0x35ef, 0x36ca, 0x31b4, 0x3625, 0x371f, 0x37bd, 0x3680, 0x3a3a, 0x3ac0, 0x3bbf, 0x3bf5, 0x39f2, 0x29c2, 0x363e, 0x3a4e, 0x3596, 0x3b1b, 0x3459, 0x3669, 0x3aa1, 0x39c3, 0x3376, 0x390d, 0x2456, 0x39b5, +0x3a66, 0x3ad8, 0x3b51, 0x36aa, 0x32be, 0x3ac8, 0x392b, 0x3740, 0x3a48, 0x38f5, 0x3b2d, 0x3a5f, 0x2ff3, 0x366f, 0x39d3, 0x35e5, 0x3822, 0x38db, 0x3b8a, 0x34be, 0x2d33, 0x36dd, 0x3578, 0x3bdf, 0x2c7e, 0x39cf, 0x32ff, 0x35c9, 0x3970, 0x3bcb, 0x351e, 0x3956, +0x2c42, 0x3308, 0x377a, 0x361c, 0x39a0, 0x36c9, 0x2dcb, 0x3bf2, 0x3b5f, 0x33ee, 0x24c1, 0x2ce9, 0x3927, 0x305d, 0x3702, 0x3119, 0x35f9, 0x3855, 0x3374, 0x349b, 0x3bcf, 0x2dea, 0x34f0, 0x363f, 0x37da, 0x3a74, 0x35fc, 0x35fa, 0x316b, 0x3804, 0x37a7, 0x3986, +0x3073, 0x3aed, 0x31c7, 0x3844, 0x34a4, 0x387d, 0x3a20, 0x3037, 0x3a00, 0x3b70, 0x377f, 0x3686, 0x3b7e, 0x38b3, 0x32e3, 0x3323, 0x391e, 0x3228, 0x3930, 0x3997, 0x3a5e, 0x398b, 0x3512, 0x35b0, 0x365c, 0x325d, 0x3b61, 0x38b8, 0x39a4, 0x3423, 0x3bd7, 0x38af, +0x2d3d, 0x382d, 0x38ac, 0x26ca, 0x395e, 0x21a8, 0x3520, 0x386f, 0x3b95, 0x32c0, 0x3b84, 0x3a51, 0x3b4b, 0x31d2, 0x3747, 0x3b96, 0x3b40, 0x3535, 0x38d1, 0x3899, 0x3b00, 0x3827, 0x3ae3, 0x38c8, 0x3a07, 0x338d, 0x2e96, 0x3a46, 0x394a, 0x39de, 0x2951, 0x3a02, +0x3838, 0x2d45, 0x28c0, 0x3958, 0x3070, 0x2aa2, 0x3510, 0x38ce, 0x271c, 0x3440, 0x3954, 0x30bc, 0x3b35, 0x2f1d, 0x3afb, 0x2dae, 0x356f, 0x2e13, 0x3981, 0x326d, 0x3a28, 0x3a36, 0x3a95, 0x38cb, 0x38db, 0x3150, 0x2c9e, 0x34c5, 0x3adb, 0x3bdf, 0x38f2, 0x3994, +0x36f8, 0x31c0, 0x3a4f, 0x3825, 0x394b, 0x3a8b, 0x38ac, 0x3167, 0x2e2d, 0x3a93, 0x34f3, 0x37bd, 0x3b63, 0x2f2f, 0x3ae0, 0x3ad8, 0x34a8, 0x2e1c, 0x3890, 0x3705, 0x3b69, 0x3bc1, 0x28af, 0x3b36, 0x348b, 0x3111, 0x3a8d, 0x389c, 0x3916, 0x36dc, 0x3bae, 0x3874, +0x3593, 0x3638, 0x3018, 0x3a56, 0x38a3, 0x2ad4, 0x3a25, 0x38d7, 0x3864, 0x31c1, 0x28d1, 0x39c8, 0x37d6, 0x2c7f, 0x3ba5, 0x34b8, 0x3bef, 0x3b83, 0x3ab5, 0x3062, 0x38bc, 0x399c, 0x2ce4, 0x2f2c, 0x39bf, 0x2ed1, 0x385f, 0x37e0, 0x35ee, 0x397d, 0x3b0c, 0x3049, +0x39d5, 0x322e, 0x3936, 0x3747, 0x2e15, 0x3b41, 0x3874, 0x3bd0, 0x2c04, 0x3800, 0x375b, 0x3b2d, 0x38d8, 0x3a51, 0x3406, 0x38da, 0x38ba, 0x3497, 0x382e, 0x35fc, 0x39d4, 0x3775, 0x3b1e, 0x3813, 0x3649, 0x31af, 0x37bb, 0x334a, 0x3a6e, 0x3284, 0x26e0, 0x2e01, +0x2ebb, 0x344b, 0x3821, 0x381a, 0x385a, 0x2534, 0x3635, 0x2a92, 0x3b8c, 0x31f0, 0x3947, 0x3ac7, 0x3743, 0x3924, 0x39e4, 0x358f, 0x2b62, 0x392c, 0x3955, 0x3341, 0x3676, 0x38ac, 0x3957, 0x335b, 0x2ca2, 0x39ff, 0x37cb, 0x341f, 0x3ac9, 0x3b6c, 0x2f14, 0x34c3, +0x3018, 0x3169, 0x355b, 0x3624, 0x31ed, 0x379e, 0x3268, 0x309b, 0x35db, 0x3872, 0x3bdb, 0x34c7, 0x3408, 0x3359, 0x3920, 0x331f, 0x3866, 0x3af0, 0x2a1a, 0x39e0, 0x3b14, 0x34fa, 0x2d18, 0x3963, 0x35e8, 0x2539, 0x38f5, 0x37b3, 0x378f, 0x31b5, 0x3a6c, 0x3685, +0x3a06, 0x318a, 0x2934, 0x33c1, 0x3be8, 0x375b, 0x3860, 0x3543, 0x3702, 0x3951, 0x3677, 0x37ff, 0x2e27, 0x2e3a, 0x340f, 0x3817, 0x2f04, 0x357e, 0x3a1d, 0x2dd6, 0x252a, 0x3945, 0x162a, 0x3b19, 0x3a53, 0x35d2, 0x3a5d, 0x3474, 0x38e9, 0x374b, 0x387c, 0x1f1a, +0x38ac, 0x3291, 0x3393, 0x3b53, 0x3169, 0x3bca, 0x2f1a, 0x3551, 0x38a3, 0x28e3, 0x369d, 0x34a1, 0x38a8, 0x34c3, 0x3841, 0x390d, 0x3b13, 0x3282, 0x3a29, 0x3a78, 0x2df3, 0x3a37, 0x35f4, 0x35a6, 0x38e8, 0x3328, 0x3beb, 0x390b, 0x32dc, 0x34dc, 0x396d, 0x3a78, +0x39ba, 0x3a06, 0x2cdd, 0x3bc3, 0x2d43, 0x2992, 0x3663, 0x3a68, 0x2c3e, 0x394e, 0x2c9f, 0x380e, 0x37f5, 0x3557, 0x2873, 0x390f, 0x39e7, 0x3939, 0x3669, 0x385c, 0x3a68, 0x32c4, 0x2b04, 0x2d6d, 0x39d3, 0x3895, 0x331d, 0x3b59, 0x3463, 0x2b6a, 0x31de, 0x3296, +0x3aae, 0x3bcd, 0x345a, 0x3897, 0x374b, 0x3bd4, 0x38a2, 0x357f, 0x3402, 0x3a0c, 0x3507, 0x3865, 0x3a54, 0x3878, 0x3859, 0x383e, 0x32b5, 0x34ea, 0x328d, 0x38b6, 0x3464, 0x2f5b, 0x35ff, 0x3817, 0x2f24, 0x3533, 0x3b21, 0x37ba, 0x3837, 0x2e34, 0x3bad, 0x34bc +}; \ No newline at end of file diff --git a/hwpe/redmule_256iter/inc/x_input.h b/hwpe/redmule_256iter/inc/x_input.h new file mode 100644 index 0000000..1e38d23 --- /dev/null +++ b/hwpe/redmule_256iter/inc/x_input.h @@ -0,0 +1,27 @@ + /* Header file generated by RedMulE Golden Model */ +uint16_t x_inp [768] = { +0x2153, 0x3bb5, 0x3896, 0x365f, 0x2483, 0x3518, 0x2dd1, 0x3bca, 0x397b, 0x29b1, 0x3705, 0x36c8, 0x398b, 0x3661, 0x2f05, 0x365a, 0x3bf9, 0x34df, 0x363b, 0x38d9, 0x39c6, 0x3abb, 0x3952, 0x38f2, 0x392d, 0x3b3e, 0x2afb, 0x3a9d, 0x353b, 0x3b73, 0x3a01, 0x3679, +0x3934, 0x397d, 0x2904, 0x3822, 0x3462, 0x3b44, 0x39e9, 0x28be, 0x331e, 0x3a1d, 0x39e5, 0x34da, 0x3a19, 0x3906, 0x1d35, 0x3871, 0x31e7, 0x3b29, 0x325d, 0x3797, 0x2b2f, 0x38b4, 0x232f, 0x38aa, 0x3aca, 0x316f, 0x3811, 0x3950, 0x32ea, 0x3bc7, 0x382c, 0x38a2, +0x29ce, 0x3afa, 0x3a39, 0x2ccc, 0x39fd, 0x3b3d, 0x384a, 0x3a35, 0x3802, 0x366a, 0x37ec, 0x3598, 0x3bf8, 0x3a85, 0x3a1b, 0x386e, 0x3b4c, 0x39de, 0x38c2, 0x2f93, 0x3b4c, 0x39c4, 0x3b9e, 0x3844, 0x346d, 0x3bff, 0x32ce, 0x296d, 0x3130, 0x3b3d, 0x3b44, 0x369d, +0x3b13, 0x31ed, 0x330a, 0x3831, 0x34e7, 0x37b3, 0x331a, 0x3918, 0x32d3, 0x3995, 0x3991, 0x3919, 0x3a26, 0x385b, 0x2b76, 0x3a3b, 0x37f2, 0x26a7, 0x3225, 0x3b64, 0x28f0, 0x3456, 0x3822, 0x341e, 0x381a, 0x38d8, 0x2c11, 0x33be, 0x33ac, 0x353f, 0x3476, 0x3abc, +0x36ec, 0x3a1d, 0x39d3, 0x3821, 0x36ac, 0x3bce, 0x3ad2, 0x3616, 0x36a1, 0x2cb3, 0x38d2, 0x314f, 0x385c, 0x3b63, 0x3bb6, 0x2951, 0x372d, 0x2c42, 0x3823, 0x3883, 0x3872, 0x31ee, 0x36c5, 0x399a, 0x31b0, 0x3887, 0x3884, 0x3865, 0x3896, 0x36c3, 0x32e3, 0x346c, +0x3935, 0x3b50, 0x2b6d, 0x38cd, 0x388f, 0x3389, 0x395d, 0x31cd, 0x2efd, 0x3154, 0x2f35, 0x3444, 0x3293, 0x3b6b, 0x1bec, 0x3b69, 0x3bf3, 0x3611, 0x3508, 0x3742, 0x3a50, 0x3ab7, 0x3457, 0x38d3, 0x3344, 0x38e8, 0x33c0, 0x3668, 0x3bee, 0x3b21, 0x3727, 0x3121, +0x316c, 0x3288, 0x2d50, 0x2e74, 0x35d5, 0x37e2, 0x303d, 0x36af, 0x341f, 0x3436, 0x2df7, 0x399d, 0x30f4, 0x3aaf, 0x34e4, 0x2c2a, 0x3116, 0x34d3, 0x36ac, 0x35e3, 0x3760, 0x36e1, 0x3ad2, 0x3547, 0x38f4, 0x369c, 0x3ba9, 0x34f0, 0x3a39, 0x3b19, 0x36e6, 0x395d, +0x3be8, 0x3293, 0x3bfc, 0x3435, 0x2eb3, 0x3360, 0x3919, 0x3bed, 0x396a, 0x37fc, 0x3242, 0x384b, 0x38cb, 0x3b2c, 0x3b28, 0x28cf, 0x3828, 0x3855, 0x3ba9, 0x2fa7, 0x340b, 0x32f1, 0x3ada, 0x36fa, 0x31f5, 0x3436, 0x29d0, 0x33e6, 0x3232, 0x3bec, 0x3904, 0x2797, +0x3b81, 0x3bac, 0x38d2, 0x343d, 0x31af, 0x3b1e, 0x33fc, 0x3864, 0x3624, 0x3905, 0x2945, 0x3b52, 0x2d08, 0x3a17, 0x3b84, 0x3804, 0x3a24, 0x38a3, 0x3562, 0x3ae6, 0x3bba, 0x3a45, 0x3679, 0x31fa, 0x3994, 0x2c3d, 0x383f, 0x399d, 0x34f7, 0x360e, 0x35f3, 0x38f0, +0x38d4, 0x399a, 0x3a48, 0x3987, 0x3b54, 0x382c, 0x3210, 0x35ef, 0x36ca, 0x31b4, 0x3625, 0x371f, 0x37bd, 0x3680, 0x3a3a, 0x3ac0, 0x3bbf, 0x3bf5, 0x39f2, 0x29c2, 0x363e, 0x3a4e, 0x3596, 0x3b1b, 0x3459, 0x3669, 0x3aa1, 0x39c3, 0x3376, 0x390d, 0x2456, 0x39b5, +0x3a66, 0x3ad8, 0x3b51, 0x36aa, 0x32be, 0x3ac8, 0x392b, 0x3740, 0x3a48, 0x38f5, 0x3b2d, 0x3a5f, 0x2ff3, 0x366f, 0x39d3, 0x35e5, 0x3822, 0x38db, 0x3b8a, 0x34be, 0x2d33, 0x36dd, 0x3578, 0x3bdf, 0x2c7e, 0x39cf, 0x32ff, 0x35c9, 0x3970, 0x3bcb, 0x351e, 0x3956, +0x2c42, 0x3308, 0x377a, 0x361c, 0x39a0, 0x36c9, 0x2dcb, 0x3bf2, 0x3b5f, 0x33ee, 0x24c1, 0x2ce9, 0x3927, 0x305d, 0x3702, 0x3119, 0x35f9, 0x3855, 0x3374, 0x349b, 0x3bcf, 0x2dea, 0x34f0, 0x363f, 0x37da, 0x3a74, 0x35fc, 0x35fa, 0x316b, 0x3804, 0x37a7, 0x3986, +0x3073, 0x3aed, 0x31c7, 0x3844, 0x34a4, 0x387d, 0x3a20, 0x3037, 0x3a00, 0x3b70, 0x377f, 0x3686, 0x3b7e, 0x38b3, 0x32e3, 0x3323, 0x391e, 0x3228, 0x3930, 0x3997, 0x3a5e, 0x398b, 0x3512, 0x35b0, 0x365c, 0x325d, 0x3b61, 0x38b8, 0x39a4, 0x3423, 0x3bd7, 0x38af, +0x2d3d, 0x382d, 0x38ac, 0x26ca, 0x395e, 0x21a8, 0x3520, 0x386f, 0x3b95, 0x32c0, 0x3b84, 0x3a51, 0x3b4b, 0x31d2, 0x3747, 0x3b96, 0x3b40, 0x3535, 0x38d1, 0x3899, 0x3b00, 0x3827, 0x3ae3, 0x38c8, 0x3a07, 0x338d, 0x2e96, 0x3a46, 0x394a, 0x39de, 0x2951, 0x3a02, +0x3838, 0x2d45, 0x28c0, 0x3958, 0x3070, 0x2aa2, 0x3510, 0x38ce, 0x271c, 0x3440, 0x3954, 0x30bc, 0x3b35, 0x2f1d, 0x3afb, 0x2dae, 0x356f, 0x2e13, 0x3981, 0x326d, 0x3a28, 0x3a36, 0x3a95, 0x38cb, 0x38db, 0x3150, 0x2c9e, 0x34c5, 0x3adb, 0x3bdf, 0x38f2, 0x3994, +0x36f8, 0x31c0, 0x3a4f, 0x3825, 0x394b, 0x3a8b, 0x38ac, 0x3167, 0x2e2d, 0x3a93, 0x34f3, 0x37bd, 0x3b63, 0x2f2f, 0x3ae0, 0x3ad8, 0x34a8, 0x2e1c, 0x3890, 0x3705, 0x3b69, 0x3bc1, 0x28af, 0x3b36, 0x348b, 0x3111, 0x3a8d, 0x389c, 0x3916, 0x36dc, 0x3bae, 0x3874, +0x3593, 0x3638, 0x3018, 0x3a56, 0x38a3, 0x2ad4, 0x3a25, 0x38d7, 0x3864, 0x31c1, 0x28d1, 0x39c8, 0x37d6, 0x2c7f, 0x3ba5, 0x34b8, 0x3bef, 0x3b83, 0x3ab5, 0x3062, 0x38bc, 0x399c, 0x2ce4, 0x2f2c, 0x39bf, 0x2ed1, 0x385f, 0x37e0, 0x35ee, 0x397d, 0x3b0c, 0x3049, +0x39d5, 0x322e, 0x3936, 0x3747, 0x2e15, 0x3b41, 0x3874, 0x3bd0, 0x2c04, 0x3800, 0x375b, 0x3b2d, 0x38d8, 0x3a51, 0x3406, 0x38da, 0x38ba, 0x3497, 0x382e, 0x35fc, 0x39d4, 0x3775, 0x3b1e, 0x3813, 0x3649, 0x31af, 0x37bb, 0x334a, 0x3a6e, 0x3284, 0x26e0, 0x2e01, +0x2ebb, 0x344b, 0x3821, 0x381a, 0x385a, 0x2534, 0x3635, 0x2a92, 0x3b8c, 0x31f0, 0x3947, 0x3ac7, 0x3743, 0x3924, 0x39e4, 0x358f, 0x2b62, 0x392c, 0x3955, 0x3341, 0x3676, 0x38ac, 0x3957, 0x335b, 0x2ca2, 0x39ff, 0x37cb, 0x341f, 0x3ac9, 0x3b6c, 0x2f14, 0x34c3, +0x3018, 0x3169, 0x355b, 0x3624, 0x31ed, 0x379e, 0x3268, 0x309b, 0x35db, 0x3872, 0x3bdb, 0x34c7, 0x3408, 0x3359, 0x3920, 0x331f, 0x3866, 0x3af0, 0x2a1a, 0x39e0, 0x3b14, 0x34fa, 0x2d18, 0x3963, 0x35e8, 0x2539, 0x38f5, 0x37b3, 0x378f, 0x31b5, 0x3a6c, 0x3685, +0x3a06, 0x318a, 0x2934, 0x33c1, 0x3be8, 0x375b, 0x3860, 0x3543, 0x3702, 0x3951, 0x3677, 0x37ff, 0x2e27, 0x2e3a, 0x340f, 0x3817, 0x2f04, 0x357e, 0x3a1d, 0x2dd6, 0x252a, 0x3945, 0x162a, 0x3b19, 0x3a53, 0x35d2, 0x3a5d, 0x3474, 0x38e9, 0x374b, 0x387c, 0x1f1a, +0x38ac, 0x3291, 0x3393, 0x3b53, 0x3169, 0x3bca, 0x2f1a, 0x3551, 0x38a3, 0x28e3, 0x369d, 0x34a1, 0x38a8, 0x34c3, 0x3841, 0x390d, 0x3b13, 0x3282, 0x3a29, 0x3a78, 0x2df3, 0x3a37, 0x35f4, 0x35a6, 0x38e8, 0x3328, 0x3beb, 0x390b, 0x32dc, 0x34dc, 0x396d, 0x3a78, +0x39ba, 0x3a06, 0x2cdd, 0x3bc3, 0x2d43, 0x2992, 0x3663, 0x3a68, 0x2c3e, 0x394e, 0x2c9f, 0x380e, 0x37f5, 0x3557, 0x2873, 0x390f, 0x39e7, 0x3939, 0x3669, 0x385c, 0x3a68, 0x32c4, 0x2b04, 0x2d6d, 0x39d3, 0x3895, 0x331d, 0x3b59, 0x3463, 0x2b6a, 0x31de, 0x3296, +0x3aae, 0x3bcd, 0x345a, 0x3897, 0x374b, 0x3bd4, 0x38a2, 0x357f, 0x3402, 0x3a0c, 0x3507, 0x3865, 0x3a54, 0x3878, 0x3859, 0x383e, 0x32b5, 0x34ea, 0x328d, 0x38b6, 0x3464, 0x2f5b, 0x35ff, 0x3817, 0x2f24, 0x3533, 0x3b21, 0x37ba, 0x3837, 0x2e34, 0x3bad, 0x34bc +}; \ No newline at end of file diff --git a/hwpe/redmule_256iter/inc/y_2D.h b/hwpe/redmule_256iter/inc/y_2D.h new file mode 100644 index 0000000..9484a10 --- /dev/null +++ b/hwpe/redmule_256iter/inc/y_2D.h @@ -0,0 +1,27 @@ + /* Header file generated by RedMulE Golden Model */ +uint16_t y_inp_2D [32][32] = { +0x3150, 0x2dc1, 0x3033, 0x31f5, 0x3bb6, 0x3bff, 0x39f9, 0x3662, 0x3720, 0x351d, 0x384b, 0x3093, 0x3b9d, 0x35ad, 0x3695, 0x3466, 0x2300, 0x3445, 0x33ae, 0x3586, 0x38a3, 0x3bdb, 0x33a2, 0x379b, 0x3a0e, 0x38b0, 0x39ba, 0x379b, 0x39d3, 0x3a51, 0x3b30, 0x3794, +0x3b76, 0x3042, 0x38cc, 0x2dfc, 0x3b1a, 0x37fb, 0x38f7, 0x3824, 0x386f, 0x38c7, 0x36ee, 0x3a9c, 0x38d3, 0x2c67, 0x3a80, 0x2f30, 0x3328, 0x3721, 0x3790, 0x34e5, 0x3a6c, 0x3643, 0x3934, 0x3034, 0x38d4, 0x362e, 0x3b4b, 0x3408, 0x30c2, 0x370e, 0x3b31, 0x3b16, +0x3b6b, 0x39d4, 0x339c, 0x381e, 0x313e, 0x3671, 0x3ae2, 0x3479, 0x3940, 0x342d, 0x3925, 0x370a, 0x35d8, 0x2dad, 0x3888, 0x24b9, 0x375d, 0x34bd, 0x3243, 0x2ebb, 0x3970, 0x3a21, 0x3a07, 0x3877, 0x3888, 0x3569, 0x372d, 0x2ac1, 0x331e, 0x384d, 0x3996, 0x34a4, +0x35c1, 0x33a9, 0x21ed, 0x3a42, 0x388d, 0x34e4, 0x33c3, 0x34f9, 0x3a7b, 0x33fb, 0x2cdd, 0x3b0e, 0x333b, 0x3973, 0x34fc, 0x3771, 0x32ea, 0x2de4, 0x31a8, 0x3946, 0x3657, 0x3a4e, 0x36f6, 0x2829, 0x3ba2, 0x3bdc, 0x3bb3, 0x306c, 0x398d, 0x3a1f, 0x3991, 0x3846, +0x3547, 0x3292, 0x2e85, 0x31ed, 0x3979, 0x3a90, 0x28a4, 0x3bed, 0x36d8, 0x340e, 0x3b6a, 0x3ab6, 0x3824, 0x382b, 0x3ac3, 0x3811, 0x36d7, 0x3519, 0x3a92, 0x3a42, 0x29d1, 0x383a, 0x3a9b, 0x300e, 0x2cd3, 0x39cd, 0x3874, 0x3a07, 0x2eb1, 0x3b86, 0x3ad8, 0x3a5d, +0x3712, 0x284a, 0x38c1, 0x3bec, 0x39c0, 0x32cd, 0x3ad8, 0x3bce, 0x3817, 0x3896, 0x3aa7, 0x3870, 0x3996, 0x32cc, 0x3a4c, 0x3757, 0x3814, 0x3b65, 0x3acb, 0x376e, 0x34c0, 0x3609, 0x3bf0, 0x3b24, 0x3b29, 0x3848, 0x34b7, 0x398a, 0x220c, 0x3498, 0x3a8c, 0x3883, +0x38c4, 0x3af6, 0x3a42, 0x2dd6, 0x3147, 0x3717, 0x3a8e, 0x3af9, 0x3296, 0x38ef, 0x34fa, 0x3555, 0x3b29, 0x38de, 0x315e, 0x3773, 0x3b67, 0x3116, 0x38ec, 0x357c, 0x35d0, 0x2518, 0x3958, 0x2a03, 0x37d9, 0x3699, 0x3a1e, 0x3230, 0x3b13, 0x36d4, 0x3b2a, 0x39ad, +0x3b10, 0x351a, 0x3b97, 0x3326, 0x2b54, 0x3b7d, 0x386f, 0x373e, 0x37fa, 0x389b, 0x3b90, 0x3292, 0x3975, 0x38f3, 0x37f1, 0x3590, 0x3810, 0x2fd7, 0x3bf7, 0x3a5a, 0x3a1c, 0x34dd, 0x354c, 0x32f8, 0x3095, 0x321e, 0x39e0, 0x395c, 0x3717, 0x357f, 0x394a, 0x34b1, +0x3ba4, 0x380c, 0x3604, 0x2f50, 0x348d, 0x3828, 0x3a9f, 0x39ce, 0x32ca, 0x3906, 0x3ab2, 0x2ca5, 0x38c9, 0x362a, 0x34b2, 0x29dc, 0x3a36, 0x3052, 0x31b7, 0x3589, 0x387c, 0x3401, 0x3b22, 0x3ad6, 0x3ae8, 0x3238, 0x3494, 0x3502, 0x3717, 0x3a6c, 0x3229, 0x368c, +0x3056, 0x3a56, 0x3498, 0x39eb, 0x2864, 0x342d, 0x39e0, 0x34a1, 0x2b99, 0x3a04, 0x38ff, 0x328c, 0x34d9, 0x387d, 0x3a3c, 0x32e5, 0x39eb, 0x3984, 0x34dd, 0x38a7, 0x373f, 0x39b4, 0x3235, 0x2f58, 0x2f39, 0x3800, 0x3758, 0x3939, 0x39fc, 0x3a4b, 0x38bf, 0x30ee, +0x345e, 0x39c8, 0x3a6d, 0x3262, 0x3b81, 0x31dc, 0x3a15, 0x3bd0, 0x36af, 0x36de, 0x37d5, 0x39d7, 0x3ad3, 0x3ac1, 0x3109, 0x35ea, 0x31c6, 0x398d, 0x3987, 0x3a4a, 0x34d2, 0x2ed2, 0x35e6, 0x352c, 0x39eb, 0x3bd6, 0x3a5b, 0x39d1, 0x34aa, 0x3ade, 0x394b, 0x38a1, +0x2bed, 0x38de, 0x3811, 0x3813, 0x391a, 0x374b, 0x3829, 0x3725, 0x38f0, 0x3583, 0x3966, 0x3a7d, 0x375a, 0x38fe, 0x3696, 0x361c, 0x39a8, 0x35f0, 0x38e1, 0x3003, 0x3595, 0x316e, 0x3862, 0x3af8, 0x3af2, 0x34c8, 0x381d, 0x37d8, 0x3893, 0x3a9c, 0x3989, 0x308c, +0x30cc, 0x2538, 0x399d, 0x3919, 0x399e, 0x21cc, 0x38e9, 0x30f8, 0x3a20, 0x3b3c, 0x3990, 0x259c, 0x3143, 0x3080, 0x3967, 0x3afb, 0x3a1b, 0x3779, 0x2eeb, 0x39f3, 0x379a, 0x369c, 0x3985, 0x3a1b, 0x3ba6, 0x3a53, 0x28d5, 0x3881, 0x31d9, 0x3a34, 0x3bd9, 0x393a, +0x3601, 0x2c6e, 0x3636, 0x3298, 0x39bb, 0x3a08, 0x38db, 0x35ad, 0x3a09, 0x36a6, 0x3bc7, 0x3bac, 0x34ae, 0x3291, 0x290b, 0x3250, 0x2648, 0x333d, 0x2bf3, 0x34b1, 0x30e0, 0x351f, 0x3a74, 0x38dc, 0x3883, 0x2841, 0x35e1, 0x390d, 0x3a50, 0x3abd, 0x386d, 0x3bb7, +0x3b94, 0x36b7, 0x3a49, 0x332f, 0x3a1d, 0x354b, 0x3bab, 0x3346, 0x3417, 0x351e, 0x3b6d, 0x391a, 0x2db3, 0x3b1c, 0x3a4a, 0x37b7, 0x36cf, 0x3a56, 0x39c4, 0x3be9, 0x34f0, 0x39be, 0x3691, 0x1ba5, 0x3888, 0x3040, 0x3ae1, 0x3b9b, 0x398f, 0x3a49, 0x3a16, 0x38c0, +0x386c, 0x39ab, 0x37fa, 0x382c, 0x3a6f, 0x393f, 0x340d, 0x38ef, 0x39d1, 0x3845, 0x398f, 0x363e, 0x3687, 0x3052, 0x3a2b, 0x392c, 0x2f5c, 0x3412, 0x3a1f, 0x3b2f, 0x3bcc, 0x3a63, 0x3a89, 0x36e9, 0x3921, 0x3b80, 0x2dc0, 0x3a03, 0x3beb, 0x38d3, 0x36cb, 0x39a3, +0x3978, 0x3a88, 0x3ba4, 0x3561, 0x28c5, 0x33a0, 0x37be, 0x2c39, 0x30ee, 0x3782, 0x2c07, 0x354e, 0x3491, 0x3a92, 0x331a, 0x3b15, 0x32e1, 0x3839, 0x3afb, 0x36c2, 0x2fd0, 0x29ad, 0x3b2e, 0x39c1, 0x2a8c, 0x341a, 0x2f90, 0x395a, 0x3969, 0x37ea, 0x3a5c, 0x3b6d, +0x3971, 0x3a93, 0x304e, 0x3623, 0x3a22, 0x31ee, 0x29df, 0x2c93, 0x3a01, 0x3a62, 0x366c, 0x371d, 0x3af3, 0x2e08, 0x3ac0, 0x3642, 0x3a28, 0x368d, 0x2d3d, 0x36d9, 0x32c3, 0x373f, 0x36fe, 0x3487, 0x2c81, 0x3623, 0x3b59, 0x3a91, 0x350a, 0x34f4, 0x3b09, 0x2c25, +0x3b13, 0x325a, 0x379e, 0x3a7d, 0x34b1, 0x39d5, 0x2ba8, 0x322b, 0x3b5e, 0x37ab, 0x2e24, 0x3ba9, 0x3a3d, 0x34f7, 0x3ba1, 0x3877, 0x3071, 0x39fb, 0x3bbd, 0x3633, 0x3b36, 0x2daa, 0x3b9b, 0x3aa0, 0x395c, 0x3b8f, 0x38d5, 0x3ab0, 0x3a8f, 0x36c2, 0x3b1f, 0x3489, +0x2acc, 0x3845, 0x3715, 0x37d8, 0x3992, 0x3bff, 0x350e, 0x3ad7, 0x39b0, 0x35ac, 0x3287, 0x385f, 0x3bd4, 0x37a3, 0x3438, 0x39a5, 0x3bcf, 0x38c3, 0x34f6, 0x3ae3, 0x3b57, 0x39af, 0x35eb, 0x3bed, 0x34d4, 0x2a95, 0x3b13, 0x384e, 0x3a3b, 0x33da, 0x3bce, 0x3b99, +0x3559, 0x3335, 0x3a2e, 0x3123, 0x38db, 0x33d0, 0x3638, 0x3b17, 0x3a72, 0x3afc, 0x3936, 0x3838, 0x2b69, 0x3895, 0x3a1a, 0x3192, 0x39d5, 0x37a5, 0x2eb0, 0x2e8b, 0x329a, 0x3b90, 0x390a, 0x3a1e, 0x3847, 0x375d, 0x3873, 0x35e2, 0x3771, 0x30f5, 0x3231, 0x3bd7, +0x2bbc, 0x3ace, 0x31ad, 0x3a6b, 0x28a4, 0x3b48, 0x3ba3, 0x3a84, 0x3353, 0x39f6, 0x381f, 0x2dd6, 0x314c, 0x34af, 0x3929, 0x3921, 0x383b, 0x34b0, 0x3923, 0x32c9, 0x3ae7, 0x318f, 0x3480, 0x2ad8, 0x3042, 0x3a4c, 0x349d, 0x2c12, 0x3abb, 0x3a57, 0x3b0d, 0x3111, +0x3359, 0x3a84, 0x38f2, 0x368d, 0x2f4b, 0x3ba0, 0x395c, 0x3026, 0x3a15, 0x2a04, 0x326e, 0x3522, 0x31a2, 0x382f, 0x2ada, 0x3b7c, 0x2f80, 0x3af5, 0x2d35, 0x38fa, 0x39ab, 0x2c6d, 0x2e7a, 0x39f6, 0x31a4, 0x3a53, 0x358c, 0x3951, 0x3a4e, 0x3916, 0x2a3f, 0x3ae9, +0x3b03, 0x39f8, 0x39fe, 0x3a61, 0x39fb, 0x3704, 0x360d, 0x39a7, 0x37a9, 0x348f, 0x3a30, 0x3af5, 0x366f, 0x3b29, 0x3a6a, 0x33d5, 0x370a, 0x39cd, 0x3444, 0x3bea, 0x3b2b, 0x312e, 0x3b8e, 0x32cf, 0x3b79, 0x3302, 0x3bba, 0x3962, 0x3413, 0x37a1, 0x39e0, 0x3805 +}; \ No newline at end of file diff --git a/hwpe/redmule_256iter/inc/y_input.h b/hwpe/redmule_256iter/inc/y_input.h new file mode 100644 index 0000000..45a2375 --- /dev/null +++ b/hwpe/redmule_256iter/inc/y_input.h @@ -0,0 +1,27 @@ + /* Header file generated by RedMulE Golden Model */ +uint16_t y_inp [768] = { +0x3150, 0x2dc1, 0x3033, 0x31f5, 0x3bb6, 0x3bff, 0x39f9, 0x3662, 0x3720, 0x351d, 0x384b, 0x3093, 0x3b9d, 0x35ad, 0x3695, 0x3466, 0x2300, 0x3445, 0x33ae, 0x3586, 0x38a3, 0x3bdb, 0x33a2, 0x379b, 0x3a0e, 0x38b0, 0x39ba, 0x379b, 0x39d3, 0x3a51, 0x3b30, 0x3794, +0x3b76, 0x3042, 0x38cc, 0x2dfc, 0x3b1a, 0x37fb, 0x38f7, 0x3824, 0x386f, 0x38c7, 0x36ee, 0x3a9c, 0x38d3, 0x2c67, 0x3a80, 0x2f30, 0x3328, 0x3721, 0x3790, 0x34e5, 0x3a6c, 0x3643, 0x3934, 0x3034, 0x38d4, 0x362e, 0x3b4b, 0x3408, 0x30c2, 0x370e, 0x3b31, 0x3b16, +0x3b6b, 0x39d4, 0x339c, 0x381e, 0x313e, 0x3671, 0x3ae2, 0x3479, 0x3940, 0x342d, 0x3925, 0x370a, 0x35d8, 0x2dad, 0x3888, 0x24b9, 0x375d, 0x34bd, 0x3243, 0x2ebb, 0x3970, 0x3a21, 0x3a07, 0x3877, 0x3888, 0x3569, 0x372d, 0x2ac1, 0x331e, 0x384d, 0x3996, 0x34a4, +0x35c1, 0x33a9, 0x21ed, 0x3a42, 0x388d, 0x34e4, 0x33c3, 0x34f9, 0x3a7b, 0x33fb, 0x2cdd, 0x3b0e, 0x333b, 0x3973, 0x34fc, 0x3771, 0x32ea, 0x2de4, 0x31a8, 0x3946, 0x3657, 0x3a4e, 0x36f6, 0x2829, 0x3ba2, 0x3bdc, 0x3bb3, 0x306c, 0x398d, 0x3a1f, 0x3991, 0x3846, +0x3547, 0x3292, 0x2e85, 0x31ed, 0x3979, 0x3a90, 0x28a4, 0x3bed, 0x36d8, 0x340e, 0x3b6a, 0x3ab6, 0x3824, 0x382b, 0x3ac3, 0x3811, 0x36d7, 0x3519, 0x3a92, 0x3a42, 0x29d1, 0x383a, 0x3a9b, 0x300e, 0x2cd3, 0x39cd, 0x3874, 0x3a07, 0x2eb1, 0x3b86, 0x3ad8, 0x3a5d, +0x3712, 0x284a, 0x38c1, 0x3bec, 0x39c0, 0x32cd, 0x3ad8, 0x3bce, 0x3817, 0x3896, 0x3aa7, 0x3870, 0x3996, 0x32cc, 0x3a4c, 0x3757, 0x3814, 0x3b65, 0x3acb, 0x376e, 0x34c0, 0x3609, 0x3bf0, 0x3b24, 0x3b29, 0x3848, 0x34b7, 0x398a, 0x220c, 0x3498, 0x3a8c, 0x3883, +0x38c4, 0x3af6, 0x3a42, 0x2dd6, 0x3147, 0x3717, 0x3a8e, 0x3af9, 0x3296, 0x38ef, 0x34fa, 0x3555, 0x3b29, 0x38de, 0x315e, 0x3773, 0x3b67, 0x3116, 0x38ec, 0x357c, 0x35d0, 0x2518, 0x3958, 0x2a03, 0x37d9, 0x3699, 0x3a1e, 0x3230, 0x3b13, 0x36d4, 0x3b2a, 0x39ad, +0x3b10, 0x351a, 0x3b97, 0x3326, 0x2b54, 0x3b7d, 0x386f, 0x373e, 0x37fa, 0x389b, 0x3b90, 0x3292, 0x3975, 0x38f3, 0x37f1, 0x3590, 0x3810, 0x2fd7, 0x3bf7, 0x3a5a, 0x3a1c, 0x34dd, 0x354c, 0x32f8, 0x3095, 0x321e, 0x39e0, 0x395c, 0x3717, 0x357f, 0x394a, 0x34b1, +0x3ba4, 0x380c, 0x3604, 0x2f50, 0x348d, 0x3828, 0x3a9f, 0x39ce, 0x32ca, 0x3906, 0x3ab2, 0x2ca5, 0x38c9, 0x362a, 0x34b2, 0x29dc, 0x3a36, 0x3052, 0x31b7, 0x3589, 0x387c, 0x3401, 0x3b22, 0x3ad6, 0x3ae8, 0x3238, 0x3494, 0x3502, 0x3717, 0x3a6c, 0x3229, 0x368c, +0x3056, 0x3a56, 0x3498, 0x39eb, 0x2864, 0x342d, 0x39e0, 0x34a1, 0x2b99, 0x3a04, 0x38ff, 0x328c, 0x34d9, 0x387d, 0x3a3c, 0x32e5, 0x39eb, 0x3984, 0x34dd, 0x38a7, 0x373f, 0x39b4, 0x3235, 0x2f58, 0x2f39, 0x3800, 0x3758, 0x3939, 0x39fc, 0x3a4b, 0x38bf, 0x30ee, +0x345e, 0x39c8, 0x3a6d, 0x3262, 0x3b81, 0x31dc, 0x3a15, 0x3bd0, 0x36af, 0x36de, 0x37d5, 0x39d7, 0x3ad3, 0x3ac1, 0x3109, 0x35ea, 0x31c6, 0x398d, 0x3987, 0x3a4a, 0x34d2, 0x2ed2, 0x35e6, 0x352c, 0x39eb, 0x3bd6, 0x3a5b, 0x39d1, 0x34aa, 0x3ade, 0x394b, 0x38a1, +0x2bed, 0x38de, 0x3811, 0x3813, 0x391a, 0x374b, 0x3829, 0x3725, 0x38f0, 0x3583, 0x3966, 0x3a7d, 0x375a, 0x38fe, 0x3696, 0x361c, 0x39a8, 0x35f0, 0x38e1, 0x3003, 0x3595, 0x316e, 0x3862, 0x3af8, 0x3af2, 0x34c8, 0x381d, 0x37d8, 0x3893, 0x3a9c, 0x3989, 0x308c, +0x30cc, 0x2538, 0x399d, 0x3919, 0x399e, 0x21cc, 0x38e9, 0x30f8, 0x3a20, 0x3b3c, 0x3990, 0x259c, 0x3143, 0x3080, 0x3967, 0x3afb, 0x3a1b, 0x3779, 0x2eeb, 0x39f3, 0x379a, 0x369c, 0x3985, 0x3a1b, 0x3ba6, 0x3a53, 0x28d5, 0x3881, 0x31d9, 0x3a34, 0x3bd9, 0x393a, +0x3601, 0x2c6e, 0x3636, 0x3298, 0x39bb, 0x3a08, 0x38db, 0x35ad, 0x3a09, 0x36a6, 0x3bc7, 0x3bac, 0x34ae, 0x3291, 0x290b, 0x3250, 0x2648, 0x333d, 0x2bf3, 0x34b1, 0x30e0, 0x351f, 0x3a74, 0x38dc, 0x3883, 0x2841, 0x35e1, 0x390d, 0x3a50, 0x3abd, 0x386d, 0x3bb7, +0x3b94, 0x36b7, 0x3a49, 0x332f, 0x3a1d, 0x354b, 0x3bab, 0x3346, 0x3417, 0x351e, 0x3b6d, 0x391a, 0x2db3, 0x3b1c, 0x3a4a, 0x37b7, 0x36cf, 0x3a56, 0x39c4, 0x3be9, 0x34f0, 0x39be, 0x3691, 0x1ba5, 0x3888, 0x3040, 0x3ae1, 0x3b9b, 0x398f, 0x3a49, 0x3a16, 0x38c0, +0x386c, 0x39ab, 0x37fa, 0x382c, 0x3a6f, 0x393f, 0x340d, 0x38ef, 0x39d1, 0x3845, 0x398f, 0x363e, 0x3687, 0x3052, 0x3a2b, 0x392c, 0x2f5c, 0x3412, 0x3a1f, 0x3b2f, 0x3bcc, 0x3a63, 0x3a89, 0x36e9, 0x3921, 0x3b80, 0x2dc0, 0x3a03, 0x3beb, 0x38d3, 0x36cb, 0x39a3, +0x3978, 0x3a88, 0x3ba4, 0x3561, 0x28c5, 0x33a0, 0x37be, 0x2c39, 0x30ee, 0x3782, 0x2c07, 0x354e, 0x3491, 0x3a92, 0x331a, 0x3b15, 0x32e1, 0x3839, 0x3afb, 0x36c2, 0x2fd0, 0x29ad, 0x3b2e, 0x39c1, 0x2a8c, 0x341a, 0x2f90, 0x395a, 0x3969, 0x37ea, 0x3a5c, 0x3b6d, +0x3971, 0x3a93, 0x304e, 0x3623, 0x3a22, 0x31ee, 0x29df, 0x2c93, 0x3a01, 0x3a62, 0x366c, 0x371d, 0x3af3, 0x2e08, 0x3ac0, 0x3642, 0x3a28, 0x368d, 0x2d3d, 0x36d9, 0x32c3, 0x373f, 0x36fe, 0x3487, 0x2c81, 0x3623, 0x3b59, 0x3a91, 0x350a, 0x34f4, 0x3b09, 0x2c25, +0x3b13, 0x325a, 0x379e, 0x3a7d, 0x34b1, 0x39d5, 0x2ba8, 0x322b, 0x3b5e, 0x37ab, 0x2e24, 0x3ba9, 0x3a3d, 0x34f7, 0x3ba1, 0x3877, 0x3071, 0x39fb, 0x3bbd, 0x3633, 0x3b36, 0x2daa, 0x3b9b, 0x3aa0, 0x395c, 0x3b8f, 0x38d5, 0x3ab0, 0x3a8f, 0x36c2, 0x3b1f, 0x3489, +0x2acc, 0x3845, 0x3715, 0x37d8, 0x3992, 0x3bff, 0x350e, 0x3ad7, 0x39b0, 0x35ac, 0x3287, 0x385f, 0x3bd4, 0x37a3, 0x3438, 0x39a5, 0x3bcf, 0x38c3, 0x34f6, 0x3ae3, 0x3b57, 0x39af, 0x35eb, 0x3bed, 0x34d4, 0x2a95, 0x3b13, 0x384e, 0x3a3b, 0x33da, 0x3bce, 0x3b99, +0x3559, 0x3335, 0x3a2e, 0x3123, 0x38db, 0x33d0, 0x3638, 0x3b17, 0x3a72, 0x3afc, 0x3936, 0x3838, 0x2b69, 0x3895, 0x3a1a, 0x3192, 0x39d5, 0x37a5, 0x2eb0, 0x2e8b, 0x329a, 0x3b90, 0x390a, 0x3a1e, 0x3847, 0x375d, 0x3873, 0x35e2, 0x3771, 0x30f5, 0x3231, 0x3bd7, +0x2bbc, 0x3ace, 0x31ad, 0x3a6b, 0x28a4, 0x3b48, 0x3ba3, 0x3a84, 0x3353, 0x39f6, 0x381f, 0x2dd6, 0x314c, 0x34af, 0x3929, 0x3921, 0x383b, 0x34b0, 0x3923, 0x32c9, 0x3ae7, 0x318f, 0x3480, 0x2ad8, 0x3042, 0x3a4c, 0x349d, 0x2c12, 0x3abb, 0x3a57, 0x3b0d, 0x3111, +0x3359, 0x3a84, 0x38f2, 0x368d, 0x2f4b, 0x3ba0, 0x395c, 0x3026, 0x3a15, 0x2a04, 0x326e, 0x3522, 0x31a2, 0x382f, 0x2ada, 0x3b7c, 0x2f80, 0x3af5, 0x2d35, 0x38fa, 0x39ab, 0x2c6d, 0x2e7a, 0x39f6, 0x31a4, 0x3a53, 0x358c, 0x3951, 0x3a4e, 0x3916, 0x2a3f, 0x3ae9, +0x3b03, 0x39f8, 0x39fe, 0x3a61, 0x39fb, 0x3704, 0x360d, 0x39a7, 0x37a9, 0x348f, 0x3a30, 0x3af5, 0x366f, 0x3b29, 0x3a6a, 0x33d5, 0x370a, 0x39cd, 0x3444, 0x3bea, 0x3b2b, 0x312e, 0x3b8e, 0x32cf, 0x3b79, 0x3302, 0x3bba, 0x3962, 0x3413, 0x37a1, 0x39e0, 0x3805 +}; \ No newline at end of file diff --git a/hwpe/redmule_256iter/inc/z_2D.h b/hwpe/redmule_256iter/inc/z_2D.h new file mode 100644 index 0000000..aff808a --- /dev/null +++ b/hwpe/redmule_256iter/inc/z_2D.h @@ -0,0 +1,27 @@ + /* Header file generated by RedMulE Golden Model */ +uint16_t z_oup_2D [24][32] = { +0x4845, 0x4897, 0x4608, 0x4838, 0x4855, 0x487b, 0x4869, 0x4880, 0x46d1, 0x48b0, 0x48db, 0x483f, 0x48c9, 0x485f, 0x4881, 0x483a, 0x484b, 0x472c, 0x4762, 0x492b, 0x4822, 0x48fd, 0x488e, 0x492e, 0x483e, 0x484f, 0x49e8, 0x46d7, 0x484b, 0x489d, 0x490b, 0x47e9, +0x484f, 0x47d2, 0x44be, 0x4747, 0x47c7, 0x46c0, 0x4727, 0x48af, 0x46c5, 0x482d, 0x483d, 0x482e, 0x4897, 0x479f, 0x488b, 0x4749, 0x489a, 0x46a8, 0x46f2, 0x488b, 0x4891, 0x47e8, 0x4872, 0x483d, 0x4716, 0x46fd, 0x49b5, 0x46a0, 0x46e7, 0x47a4, 0x48a1, 0x4767, +0x4939, 0x4935, 0x4703, 0x48c1, 0x4863, 0x48bd, 0x4913, 0x48cf, 0x48b6, 0x48b8, 0x4946, 0x4920, 0x495e, 0x48e1, 0x4938, 0x48b2, 0x493a, 0x4882, 0x483b, 0x49d5, 0x4911, 0x4972, 0x496b, 0x49df, 0x48f2, 0x4888, 0x4a46, 0x4821, 0x48c1, 0x490c, 0x49b2, 0x48a3, +0x463a, 0x47b0, 0x44cb, 0x4762, 0x4765, 0x46b9, 0x466a, 0x4814, 0x4631, 0x4796, 0x4666, 0x474b, 0x4798, 0x4704, 0x4838, 0x4761, 0x47d3, 0x4590, 0x45ea, 0x48a2, 0x47f1, 0x4844, 0x484b, 0x4776, 0x47d6, 0x46d8, 0x48f3, 0x44d3, 0x46fa, 0x478d, 0x481e, 0x466e, +0x4827, 0x481e, 0x45a2, 0x4794, 0x4727, 0x4806, 0x475d, 0x48d5, 0x4708, 0x4828, 0x4862, 0x480d, 0x4895, 0x4832, 0x48bd, 0x47f1, 0x482a, 0x46a7, 0x47b1, 0x492d, 0x484d, 0x4884, 0x48dc, 0x485f, 0x476d, 0x480c, 0x48e9, 0x46d3, 0x4728, 0x4884, 0x48a0, 0x480e, +0x4862, 0x4813, 0x4675, 0x485a, 0x47e8, 0x4738, 0x4836, 0x4823, 0x46e7, 0x4821, 0x4822, 0x47b3, 0x4846, 0x4855, 0x4863, 0x4717, 0x4872, 0x47c1, 0x46d5, 0x488e, 0x47e2, 0x485f, 0x487c, 0x48b8, 0x481e, 0x4788, 0x48bd, 0x4677, 0x46c9, 0x47f8, 0x48fe, 0x47fc, +0x47a0, 0x47b2, 0x4588, 0x467e, 0x4662, 0x46c7, 0x46e8, 0x4812, 0x4536, 0x474e, 0x46c0, 0x468f, 0x481f, 0x4679, 0x46a1, 0x46e2, 0x4809, 0x4560, 0x4630, 0x47eb, 0x46b5, 0x4757, 0x4848, 0x477f, 0x46a6, 0x46d8, 0x4870, 0x459a, 0x4670, 0x4678, 0x47d2, 0x468c, +0x4762, 0x48c4, 0x46e3, 0x4791, 0x46b1, 0x486d, 0x47d0, 0x4867, 0x468d, 0x47f6, 0x48a5, 0x4756, 0x4857, 0x4854, 0x4866, 0x4838, 0x484d, 0x46ec, 0x47d2, 0x48f6, 0x484a, 0x4879, 0x4848, 0x483c, 0x471d, 0x4806, 0x48fa, 0x4730, 0x4768, 0x47b8, 0x4865, 0x46f9, +0x48a8, 0x4918, 0x46ca, 0x4867, 0x4800, 0x4862, 0x48d3, 0x4910, 0x474e, 0x4849, 0x48eb, 0x486b, 0x4966, 0x48c5, 0x48f4, 0x4830, 0x48f9, 0x4778, 0x481e, 0x499e, 0x48cf, 0x48f1, 0x4982, 0x4923, 0x487c, 0x47cf, 0x49ea, 0x4649, 0x4773, 0x495e, 0x48b2, 0x483f, +0x48a7, 0x4975, 0x4616, 0x481e, 0x481f, 0x4866, 0x48b6, 0x4864, 0x47dc, 0x4873, 0x485c, 0x487f, 0x4938, 0x491f, 0x490d, 0x48b6, 0x48f8, 0x48a1, 0x4859, 0x492d, 0x489c, 0x4915, 0x4899, 0x4887, 0x486c, 0x4859, 0x49ca, 0x471e, 0x4867, 0x4918, 0x48d3, 0x4827, +0x488b, 0x4998, 0x4704, 0x481d, 0x48b8, 0x4880, 0x4876, 0x4944, 0x470c, 0x48f2, 0x48b9, 0x489b, 0x4956, 0x48e5, 0x48d6, 0x48a5, 0x48dc, 0x4856, 0x484e, 0x49ab, 0x48e0, 0x490e, 0x48dd, 0x4945, 0x488b, 0x48dd, 0x4a32, 0x47ea, 0x4835, 0x4911, 0x4965, 0x4819, +0x460e, 0x481e, 0x452c, 0x4673, 0x475c, 0x4717, 0x46f6, 0x46d0, 0x4696, 0x46bc, 0x4726, 0x481e, 0x4763, 0x46ea, 0x46fe, 0x4758, 0x478b, 0x4627, 0x4704, 0x483f, 0x46ad, 0x47b1, 0x4792, 0x4816, 0x46f2, 0x4684, 0x4827, 0x45a8, 0x472f, 0x47a4, 0x4797, 0x462b, +0x483f, 0x48ab, 0x468f, 0x4863, 0x485a, 0x4766, 0x481d, 0x48cb, 0x47dc, 0x4903, 0x48fc, 0x4830, 0x48cc, 0x483e, 0x48ab, 0x4864, 0x4966, 0x4763, 0x4794, 0x499d, 0x488e, 0x488b, 0x48dc, 0x4960, 0x4854, 0x484c, 0x499c, 0x474c, 0x4826, 0x48bc, 0x4949, 0x4883, +0x489d, 0x4905, 0x4718, 0x481e, 0x48e3, 0x48f4, 0x48c1, 0x4904, 0x47e8, 0x48b3, 0x4892, 0x48d4, 0x48ff, 0x4894, 0x48d5, 0x4886, 0x48fa, 0x4803, 0x47d2, 0x492e, 0x4870, 0x48b2, 0x48e5, 0x492b, 0x487b, 0x4785, 0x49e3, 0x471d, 0x4837, 0x48bf, 0x489b, 0x48c4, +0x475c, 0x4871, 0x464a, 0x4811, 0x47af, 0x471c, 0x4817, 0x4817, 0x463b, 0x484e, 0x477f, 0x464f, 0x4704, 0x487c, 0x47a3, 0x4725, 0x4853, 0x462a, 0x465a, 0x4860, 0x4736, 0x4880, 0x47e1, 0x482b, 0x4811, 0x46c0, 0x48dc, 0x475d, 0x4668, 0x4806, 0x4893, 0x46f4, +0x4858, 0x4959, 0x463d, 0x487b, 0x480f, 0x484e, 0x48c0, 0x48a6, 0x4847, 0x4894, 0x48a0, 0x484a, 0x491e, 0x48f4, 0x48fc, 0x48b5, 0x48ce, 0x47d2, 0x47db, 0x497f, 0x4955, 0x4939, 0x48a7, 0x48ce, 0x4890, 0x4884, 0x49d6, 0x4763, 0x486e, 0x4922, 0x48f4, 0x48c3, +0x47ec, 0x491c, 0x4698, 0x4783, 0x4715, 0x4754, 0x4745, 0x4752, 0x472f, 0x4832, 0x4817, 0x4809, 0x47f8, 0x48c3, 0x47e6, 0x4800, 0x48b6, 0x4730, 0x480a, 0x48cb, 0x479e, 0x488e, 0x47c2, 0x488e, 0x472f, 0x47ee, 0x489d, 0x4744, 0x4755, 0x4851, 0x4846, 0x47d3, +0x4838, 0x48a0, 0x4634, 0x4762, 0x4786, 0x4806, 0x47e3, 0x482d, 0x4726, 0x486c, 0x47b7, 0x4803, 0x48ac, 0x4814, 0x48e0, 0x4839, 0x4827, 0x4750, 0x46f2, 0x48c5, 0x483f, 0x4886, 0x48ad, 0x4856, 0x47e8, 0x47a9, 0x4937, 0x4743, 0x46d0, 0x481f, 0x484c, 0x4804, +0x47fd, 0x481f, 0x456d, 0x4813, 0x474d, 0x4807, 0x4688, 0x480e, 0x46e8, 0x4810, 0x469f, 0x4799, 0x4853, 0x478f, 0x47f2, 0x4824, 0x47d0, 0x471f, 0x46da, 0x485f, 0x4813, 0x481c, 0x482e, 0x4863, 0x4786, 0x480b, 0x48c9, 0x46b8, 0x475a, 0x46e2, 0x4852, 0x46c5, +0x45af, 0x4802, 0x4466, 0x46c2, 0x465d, 0x4743, 0x46b7, 0x47ba, 0x4636, 0x46c3, 0x4677, 0x4784, 0x485a, 0x47c2, 0x46dc, 0x46ac, 0x47de, 0x460e, 0x465f, 0x4834, 0x47f4, 0x4769, 0x46fc, 0x4810, 0x45fd, 0x45ea, 0x48d0, 0x45b5, 0x4704, 0x4783, 0x4830, 0x46c4, +0x4759, 0x47c7, 0x453d, 0x45b0, 0x4741, 0x4702, 0x4736, 0x4793, 0x461b, 0x47ba, 0x470b, 0x46dd, 0x4657, 0x470b, 0x470d, 0x4710, 0x486c, 0x468f, 0x45c3, 0x46ba, 0x479d, 0x483b, 0x46c9, 0x4774, 0x46a9, 0x46a7, 0x4833, 0x4606, 0x4690, 0x46a9, 0x46f5, 0x46a7, +0x47ac, 0x48bb, 0x452c, 0x4803, 0x470f, 0x4824, 0x47d5, 0x48cb, 0x4707, 0x484a, 0x4832, 0x4797, 0x4851, 0x482c, 0x487a, 0x4877, 0x4891, 0x465d, 0x47f4, 0x48ce, 0x4898, 0x4899, 0x484e, 0x486a, 0x47ac, 0x47f0, 0x493e, 0x4611, 0x47e2, 0x489e, 0x488c, 0x46af, +0x4665, 0x4836, 0x45e4, 0x46b6, 0x46a1, 0x46b9, 0x46c8, 0x46dd, 0x4658, 0x474b, 0x467b, 0x4777, 0x4769, 0x4798, 0x4785, 0x475e, 0x472a, 0x4656, 0x45fb, 0x4881, 0x46fc, 0x472d, 0x476e, 0x47a3, 0x465d, 0x46ca, 0x4855, 0x4500, 0x464f, 0x479a, 0x46c3, 0x4738, +0x481e, 0x486c, 0x4659, 0x4801, 0x4756, 0x477a, 0x47d5, 0x487b, 0x4706, 0x4808, 0x484f, 0x4838, 0x4870, 0x4863, 0x48d3, 0x4806, 0x4865, 0x4771, 0x46be, 0x494c, 0x4915, 0x484c, 0x4900, 0x4862, 0x481a, 0x46e8, 0x4974, 0x46a0, 0x4775, 0x483d, 0x487c, 0x480e +}; \ No newline at end of file diff --git a/hwpe/redmule_256iter/inc/z_output.h b/hwpe/redmule_256iter/inc/z_output.h new file mode 100644 index 0000000..96c7e5f --- /dev/null +++ b/hwpe/redmule_256iter/inc/z_output.h @@ -0,0 +1,27 @@ + /* Header file generated by RedMulE Golden Model */ +uint16_t z_oup [768] = { +0x4845, 0x4897, 0x4608, 0x4838, 0x4855, 0x487b, 0x4869, 0x4880, 0x46d1, 0x48b0, 0x48db, 0x483f, 0x48c9, 0x485f, 0x4881, 0x483a, 0x484b, 0x472c, 0x4762, 0x492b, 0x4822, 0x48fd, 0x488e, 0x492e, 0x483e, 0x484f, 0x49e8, 0x46d7, 0x484b, 0x489d, 0x490b, 0x47e9, +0x484f, 0x47d2, 0x44be, 0x4747, 0x47c7, 0x46c0, 0x4727, 0x48af, 0x46c5, 0x482d, 0x483d, 0x482e, 0x4897, 0x479f, 0x488b, 0x4749, 0x489a, 0x46a8, 0x46f2, 0x488b, 0x4891, 0x47e8, 0x4872, 0x483d, 0x4716, 0x46fd, 0x49b5, 0x46a0, 0x46e7, 0x47a4, 0x48a1, 0x4767, +0x4939, 0x4935, 0x4703, 0x48c1, 0x4863, 0x48bd, 0x4913, 0x48cf, 0x48b6, 0x48b8, 0x4946, 0x4920, 0x495e, 0x48e1, 0x4938, 0x48b2, 0x493a, 0x4882, 0x483b, 0x49d5, 0x4911, 0x4972, 0x496b, 0x49df, 0x48f2, 0x4888, 0x4a46, 0x4821, 0x48c1, 0x490c, 0x49b2, 0x48a3, +0x463a, 0x47b0, 0x44cb, 0x4762, 0x4765, 0x46b9, 0x466a, 0x4814, 0x4631, 0x4796, 0x4666, 0x474b, 0x4798, 0x4704, 0x4838, 0x4761, 0x47d3, 0x4590, 0x45ea, 0x48a2, 0x47f1, 0x4844, 0x484b, 0x4776, 0x47d6, 0x46d8, 0x48f3, 0x44d3, 0x46fa, 0x478d, 0x481e, 0x466e, +0x4827, 0x481e, 0x45a2, 0x4794, 0x4727, 0x4806, 0x475d, 0x48d5, 0x4708, 0x4828, 0x4862, 0x480d, 0x4895, 0x4832, 0x48bd, 0x47f1, 0x482a, 0x46a7, 0x47b1, 0x492d, 0x484d, 0x4884, 0x48dc, 0x485f, 0x476d, 0x480c, 0x48e9, 0x46d3, 0x4728, 0x4884, 0x48a0, 0x480e, +0x4862, 0x4813, 0x4675, 0x485a, 0x47e8, 0x4738, 0x4836, 0x4823, 0x46e7, 0x4821, 0x4822, 0x47b3, 0x4846, 0x4855, 0x4863, 0x4717, 0x4872, 0x47c1, 0x46d5, 0x488e, 0x47e2, 0x485f, 0x487c, 0x48b8, 0x481e, 0x4788, 0x48bd, 0x4677, 0x46c9, 0x47f8, 0x48fe, 0x47fc, +0x47a0, 0x47b2, 0x4588, 0x467e, 0x4662, 0x46c7, 0x46e8, 0x4812, 0x4536, 0x474e, 0x46c0, 0x468f, 0x481f, 0x4679, 0x46a1, 0x46e2, 0x4809, 0x4560, 0x4630, 0x47eb, 0x46b5, 0x4757, 0x4848, 0x477f, 0x46a6, 0x46d8, 0x4870, 0x459a, 0x4670, 0x4678, 0x47d2, 0x468c, +0x4762, 0x48c4, 0x46e3, 0x4791, 0x46b1, 0x486d, 0x47d0, 0x4867, 0x468d, 0x47f6, 0x48a5, 0x4756, 0x4857, 0x4854, 0x4866, 0x4838, 0x484d, 0x46ec, 0x47d2, 0x48f6, 0x484a, 0x4879, 0x4848, 0x483c, 0x471d, 0x4806, 0x48fa, 0x4730, 0x4768, 0x47b8, 0x4865, 0x46f9, +0x48a8, 0x4918, 0x46ca, 0x4867, 0x4800, 0x4862, 0x48d3, 0x4910, 0x474e, 0x4849, 0x48eb, 0x486b, 0x4966, 0x48c5, 0x48f4, 0x4830, 0x48f9, 0x4778, 0x481e, 0x499e, 0x48cf, 0x48f1, 0x4982, 0x4923, 0x487c, 0x47cf, 0x49ea, 0x4649, 0x4773, 0x495e, 0x48b2, 0x483f, +0x48a7, 0x4975, 0x4616, 0x481e, 0x481f, 0x4866, 0x48b6, 0x4864, 0x47dc, 0x4873, 0x485c, 0x487f, 0x4938, 0x491f, 0x490d, 0x48b6, 0x48f8, 0x48a1, 0x4859, 0x492d, 0x489c, 0x4915, 0x4899, 0x4887, 0x486c, 0x4859, 0x49ca, 0x471e, 0x4867, 0x4918, 0x48d3, 0x4827, +0x488b, 0x4998, 0x4704, 0x481d, 0x48b8, 0x4880, 0x4876, 0x4944, 0x470c, 0x48f2, 0x48b9, 0x489b, 0x4956, 0x48e5, 0x48d6, 0x48a5, 0x48dc, 0x4856, 0x484e, 0x49ab, 0x48e0, 0x490e, 0x48dd, 0x4945, 0x488b, 0x48dd, 0x4a32, 0x47ea, 0x4835, 0x4911, 0x4965, 0x4819, +0x460e, 0x481e, 0x452c, 0x4673, 0x475c, 0x4717, 0x46f6, 0x46d0, 0x4696, 0x46bc, 0x4726, 0x481e, 0x4763, 0x46ea, 0x46fe, 0x4758, 0x478b, 0x4627, 0x4704, 0x483f, 0x46ad, 0x47b1, 0x4792, 0x4816, 0x46f2, 0x4684, 0x4827, 0x45a8, 0x472f, 0x47a4, 0x4797, 0x462b, +0x483f, 0x48ab, 0x468f, 0x4863, 0x485a, 0x4766, 0x481d, 0x48cb, 0x47dc, 0x4903, 0x48fc, 0x4830, 0x48cc, 0x483e, 0x48ab, 0x4864, 0x4966, 0x4763, 0x4794, 0x499d, 0x488e, 0x488b, 0x48dc, 0x4960, 0x4854, 0x484c, 0x499c, 0x474c, 0x4826, 0x48bc, 0x4949, 0x4883, +0x489d, 0x4905, 0x4718, 0x481e, 0x48e3, 0x48f4, 0x48c1, 0x4904, 0x47e8, 0x48b3, 0x4892, 0x48d4, 0x48ff, 0x4894, 0x48d5, 0x4886, 0x48fa, 0x4803, 0x47d2, 0x492e, 0x4870, 0x48b2, 0x48e5, 0x492b, 0x487b, 0x4785, 0x49e3, 0x471d, 0x4837, 0x48bf, 0x489b, 0x48c4, +0x475c, 0x4871, 0x464a, 0x4811, 0x47af, 0x471c, 0x4817, 0x4817, 0x463b, 0x484e, 0x477f, 0x464f, 0x4704, 0x487c, 0x47a3, 0x4725, 0x4853, 0x462a, 0x465a, 0x4860, 0x4736, 0x4880, 0x47e1, 0x482b, 0x4811, 0x46c0, 0x48dc, 0x475d, 0x4668, 0x4806, 0x4893, 0x46f4, +0x4858, 0x4959, 0x463d, 0x487b, 0x480f, 0x484e, 0x48c0, 0x48a6, 0x4847, 0x4894, 0x48a0, 0x484a, 0x491e, 0x48f4, 0x48fc, 0x48b5, 0x48ce, 0x47d2, 0x47db, 0x497f, 0x4955, 0x4939, 0x48a7, 0x48ce, 0x4890, 0x4884, 0x49d6, 0x4763, 0x486e, 0x4922, 0x48f4, 0x48c3, +0x47ec, 0x491c, 0x4698, 0x4783, 0x4715, 0x4754, 0x4745, 0x4752, 0x472f, 0x4832, 0x4817, 0x4809, 0x47f8, 0x48c3, 0x47e6, 0x4800, 0x48b6, 0x4730, 0x480a, 0x48cb, 0x479e, 0x488e, 0x47c2, 0x488e, 0x472f, 0x47ee, 0x489d, 0x4744, 0x4755, 0x4851, 0x4846, 0x47d3, +0x4838, 0x48a0, 0x4634, 0x4762, 0x4786, 0x4806, 0x47e3, 0x482d, 0x4726, 0x486c, 0x47b7, 0x4803, 0x48ac, 0x4814, 0x48e0, 0x4839, 0x4827, 0x4750, 0x46f2, 0x48c5, 0x483f, 0x4886, 0x48ad, 0x4856, 0x47e8, 0x47a9, 0x4937, 0x4743, 0x46d0, 0x481f, 0x484c, 0x4804, +0x47fd, 0x481f, 0x456d, 0x4813, 0x474d, 0x4807, 0x4688, 0x480e, 0x46e8, 0x4810, 0x469f, 0x4799, 0x4853, 0x478f, 0x47f2, 0x4824, 0x47d0, 0x471f, 0x46da, 0x485f, 0x4813, 0x481c, 0x482e, 0x4863, 0x4786, 0x480b, 0x48c9, 0x46b8, 0x475a, 0x46e2, 0x4852, 0x46c5, +0x45af, 0x4802, 0x4466, 0x46c2, 0x465d, 0x4743, 0x46b7, 0x47ba, 0x4636, 0x46c3, 0x4677, 0x4784, 0x485a, 0x47c2, 0x46dc, 0x46ac, 0x47de, 0x460e, 0x465f, 0x4834, 0x47f4, 0x4769, 0x46fc, 0x4810, 0x45fd, 0x45ea, 0x48d0, 0x45b5, 0x4704, 0x4783, 0x4830, 0x46c4, +0x4759, 0x47c7, 0x453d, 0x45b0, 0x4741, 0x4702, 0x4736, 0x4793, 0x461b, 0x47ba, 0x470b, 0x46dd, 0x4657, 0x470b, 0x470d, 0x4710, 0x486c, 0x468f, 0x45c3, 0x46ba, 0x479d, 0x483b, 0x46c9, 0x4774, 0x46a9, 0x46a7, 0x4833, 0x4606, 0x4690, 0x46a9, 0x46f5, 0x46a7, +0x47ac, 0x48bb, 0x452c, 0x4803, 0x470f, 0x4824, 0x47d5, 0x48cb, 0x4707, 0x484a, 0x4832, 0x4797, 0x4851, 0x482c, 0x487a, 0x4877, 0x4891, 0x465d, 0x47f4, 0x48ce, 0x4898, 0x4899, 0x484e, 0x486a, 0x47ac, 0x47f0, 0x493e, 0x4611, 0x47e2, 0x489e, 0x488c, 0x46af, +0x4665, 0x4836, 0x45e4, 0x46b6, 0x46a1, 0x46b9, 0x46c8, 0x46dd, 0x4658, 0x474b, 0x467b, 0x4777, 0x4769, 0x4798, 0x4785, 0x475e, 0x472a, 0x4656, 0x45fb, 0x4881, 0x46fc, 0x472d, 0x476e, 0x47a3, 0x465d, 0x46ca, 0x4855, 0x4500, 0x464f, 0x479a, 0x46c3, 0x4738, +0x481e, 0x486c, 0x4659, 0x4801, 0x4756, 0x477a, 0x47d5, 0x487b, 0x4706, 0x4808, 0x484f, 0x4838, 0x4870, 0x4863, 0x48d3, 0x4806, 0x4865, 0x4771, 0x46be, 0x494c, 0x4915, 0x484c, 0x4900, 0x4862, 0x481a, 0x46e8, 0x4974, 0x46a0, 0x4775, 0x483d, 0x487c, 0x480e +}; \ No newline at end of file diff --git a/hwpe/redmule_256iter/pulp_inject_fault.tcl b/hwpe/redmule_256iter/pulp_inject_fault.tcl new file mode 100644 index 0000000..61ccadf --- /dev/null +++ b/hwpe/redmule_256iter/pulp_inject_fault.tcl @@ -0,0 +1,53 @@ +# Copyright 2023 ETH Zurich and University of Bologna. +# Solderpad Hardware License, Version 0.51, see LICENSE for details. +# SPDX-License-Identifier: SHL-0.51 +# +# Author: Michael Rogenmoser (michaero@iis.ee.ethz.ch) + +transcript quietly +if {! [info exists ::env(VSIM_PATH)]} {error "Define VSIM_PATH"} +set utils_base_path [file join $::env(VSIM_PATH) scripts fault_injection_utils] +set script_base_path [file join $::env(VSIM_PATH) fault_injection_sim scripts] + +set verbosity 2 +set log_injections 1 +# Easy way to generate a variable seed +# set seed [clock seconds] +# Default value +set seed 12345 +set print_statistics 1 + +set inject_start_time 550000000000ps +set inject_stop_time 750000000000ps +set injection_clock "pulp_cluster_tb/cluster_i/clk_i" +set injection_clock_trigger 0 +set fault_period 150 +set rand_initial_injection_phase 0 +# max_num set to 0 means until stop_time +set max_num_fault_inject 0 +set signal_fault_duration 20ns +set register_fault_duration 0ns + +set allow_multi_bit_upset $::env(MULTI_BIT_UPSET) +set use_bitwidth_as_weight 0 +set check_core_output_modification 0 +set check_core_next_state_modification 0 +set reg_to_sig_ratio 1 + +source [file join $utils_base_path pulp_extract_nets.tcl] + +set inject_signals_netlist [] +set inject_register_netlist [] +set output_netlist [] +set next_state_netlist [] +set assertion_disable_list [] + +# for {set idx 0} {$idx < 12} {incr idx} { +# set inject_signals_netlist [list {*}$inject_signals_netlist {*}[get_all_core_nets $idx]] +# set output_netlist [list {*}$output_netlist {*}[get_core_output_nets $idx]] +# } + +set inject_register_netlist [list {*}$inject_register_netlist {*}[get_memory_slice {0 16} {256 336}]] + +source [file join $script_base_path inject_fault.tcl] + diff --git a/hwpe/redmule_256iter/redmule.c b/hwpe/redmule_256iter/redmule.c new file mode 100644 index 0000000..77019ae --- /dev/null +++ b/hwpe/redmule_256iter/redmule.c @@ -0,0 +1,141 @@ +/* + * Copyright (C) 2022-2023 ETH Zurich and University of Bologna + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * SPDX-License-Identifier: Apache-2.0 + * + * Author: Yvan Tortorella + * + * RedMulE SW test + */ + +#include +#include "stdio.h" +#include "archi_redmule.h" +#include "hal_redmule.h" +#include "pulp.h" + +#define NB_ITER 255 + +int main() { + + volatile int errors = 0; + unsigned int cluster_id = rt_cluster_id(); + unsigned int intc_data_correctable_cnt, redmule_data_correctable_cnt = 0; + unsigned int intc_meta_correctable_cnt = 0; + unsigned int intc_data_uncorrectable_cnt, redmule_data_uncorrectable_cnt = 0; + unsigned int intc_meta_uncorrectable_cnt = 0; + + if(get_core_id() == 0){ + + uint16_t m_size = M_SIZE; + uint16_t n_size = N_SIZE; + uint16_t k_size = K_SIZE; + + uint8_t *x_ext = x_inp; + uint8_t *w_ext = w_inp; + uint8_t *y_ext = y_inp; + uint8_t *z_ext = z_oup; + + uint8_t volatile *x = (uint8_t volatile *) pi_l1_malloc(0, (2*m_size*n_size)); + uint8_t volatile *w = (uint8_t volatile *) pi_l1_malloc(0, (2*n_size*k_size)); + uint8_t volatile *y = (uint8_t volatile *) pi_l1_malloc(0, (2*m_size*k_size)); + uint8_t volatile *z = (uint8_t volatile *) pi_l1_malloc(0, (2*m_size*k_size)); + + #ifdef USE_DMA + volatile unsigned int dma_id = 0; + dma_id = mchan_alloc(); + mchan_transfer((unsigned int) 2*(2*m_size*n_size), + (unsigned int) x_ext, + (unsigned int) x ); + mchan_barrier(dma_id); + mchan_free(dma_id); + + dma_id = mchan_alloc(); + mchan_transfer((unsigned int) 2*(2*n_size*k_size), + (unsigned int) w_ext, + (unsigned int) w ); + mchan_barrier(dma_id); + mchan_free(dma_id); + + dma_id = mchan_alloc(); + mchan_transfer((unsigned int) 2*(2*m_size*k_size), + (unsigned int) y_ext, + (unsigned int) y ); + mchan_barrier(dma_id); + #else + generate_test_data16((int) x, (int) w, (int) y, (int) m_size, (int) n_size, (int) k_size); + #endif + + int gold_sum = 0, check_sum = 0; + int i,j; + + int offload_id_tmp, offload_id; + + // Enable RedMulE + hwpe_cg_enable(); + asm volatile("": : :"memory"); + + hwpe_soft_clear(); + asm volatile("": : :"memory"); + + volatile int job_id = -1; + + // job 0 + job_id = hwpe_wait_acquire(); + asm volatile("": : :"memory"); + redmule_x_add_set ((unsigned int) x); + redmule_w_add_set ((unsigned int) w); + redmule_y_add_set ((unsigned int) y); + redmule_z_add_set ((unsigned int) z); + redmule_cfg (m_size, n_size, k_size, gemm_ops); + asm volatile("": : :"memory"); + hwpe_trigger_job(); + asm volatile("": : :"memory"); + + // job 1 + job_id = hwpe_wait_acquire(); + asm volatile("": : :"memory"); + redmule_x_add_set ((unsigned int) x); + redmule_w_add_set ((unsigned int) w); + redmule_y_add_set ((unsigned int) y); + redmule_z_add_set ((unsigned int) z); + redmule_cfg (m_size, n_size, k_size, gemm_ops); + asm volatile("": : :"memory"); + hwpe_trigger_job(); + asm volatile("": : :"memory"); + + // jobs 2-255 + do { + job_id = hwpe_wait_acquire(); + asm volatile("": : :"memory"); + hwpe_trigger_job(); + asm volatile("": : :"memory"); + } while(job_id < NB_ITER); + + // Wait for end of computation + redmule_evt_wait(); + + // Disable RedMulE + hwpe_cg_disable(); + + errors = redmule_compare16((int) z, (int) m_size, (int) k_size); + + *(int *) 0x1A1040A0 = errors; + + printf ("Terminated test with %d errors. See you!\n", errors); + + } + synch_barrier(); + return (errors != 0); +} diff --git a/hwpe/redmule_softclear/Makefile b/hwpe/redmule_softclear/Makefile new file mode 100644 index 0000000..88346b6 --- /dev/null +++ b/hwpe/redmule_softclear/Makefile @@ -0,0 +1,20 @@ +PULP_APP = test +PULP_APP_SRCS = redmule.c +PULP_CFLAGS = -O3 + +ifeq ($(use_dma),1) + PULP_CFLAGS += -DUSE_DMA +endif + +ifeq ($(fault_inject),1) + export FAULT_INJECTION=1 + export FAULT_INJECTION_SCRIPT=$(CURDIR)/pulp_inject_fault.tcl +endif + +ifeq ($(multi_bit_upset),1) + export MULTI_BIT_UPSET=1 +else + export MULTI_BIT_UPSET=0 +endif + +include $(PULP_SDK_HOME)/install/rules/pulp_rt.mk diff --git a/hwpe/redmule_softclear/archi_redmule.h b/hwpe/redmule_softclear/archi_redmule.h new file mode 100644 index 0000000..662e1e6 --- /dev/null +++ b/hwpe/redmule_softclear/archi_redmule.h @@ -0,0 +1,170 @@ +/* + * Copyright (C) 2022-2023 ETH Zurich and University of Bologna + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * SPDX-License-Identifier: Apache-2.0 + * + * Author: Yvan Tortorella + * + * High-level architecture of RedMulE + * + */ + +#ifndef __ARCHI_REDMULE_H__ +#define __ARCHI_REDMULE_H__ + +/* + * |========================================================================| + * || || + * ||Control and generic configuration register layout || + * |========================================================================| + * || # reg | offset | bits | bitmask || content || + * ||-------+----------+---------+--------------++-------------------------|| + * || 0 | 0x0000 | 31: 0 | 0xFFFFFFFF || TRIGGER || + * || 1 | 0x0004 | 31: 0 | 0xFFFFFFFF || ACQUIRE || + * || 2 | 0x0008 | 31: 0 | 0xFFFFFFFF || EVT_ENABLE || + * || 3 | 0x000c | 31: 0 | 0xFFFFFFFF || STATUS || + * || 4 | 0x0010 | 31: 0 | 0xFFFFFFFF || RUNNING_JOB || + * || 5 | 0x0014 | 31: 0 | 0xFFFFFFFF || SOFT_CLEAR || + * |========================================================================| + * || || + * ||Job-dependent registers layout || + * |========================================================================| + * || # reg | offset | bits | bitmask || content || + * ||-------+----------+---------+--------------++-------------------------|| + * || 0 | 0x0040 | 31: 0 | 0xFFFFFFFF || X_ADDR || + * ||-------+----------+---------+--------------++-------------------------|| + * || 1 | 0x0044 | 31: 0 | 0xFFFFFFFF || W_ADDR || + * ||-------+----------+---------+--------------++-------------------------|| + * || 2 | 0x0048 | 31: 0 | 0xFFFFFFFF || Z_ADDR || + * ||-------+----------+---------+--------------++-------------------------|| + * || 3 | 0x004C | | || Matrix Config 0 Reg || + * || | | 31:16 | 0xFFFF0000 || K Size (W Columns) || + * || | | 15: 0 | 0x0000FFFF || M Size (X Rows) || + * ||-------+----------+---------+--------------++-------------------------|| + * || 4 | 0x0050 | | || Matrix Config 1 Reg || + * || | | 31:16 | 0xFFFFFFFF || N Size (X Cols/W Rows) || + * ||-------+----------+---------+--------------++-------------------------|| + * || 5 | 0x0054 | | || Matrix Arithmetic Reg || + * || | | 12:10 | 0x00001C00 || Operation selection || + * || | | 9: 7 | 0x00000380 || Input/Output format || + * |========================================================================| + * + */ + +/* PULP Cluster Archi defines */ +#define ARCHI_CLUST_CTRL_BASE 0x50200000 +#define ARCHI_CLUST_HWPE_BASE 0x50201000 +#define DMA_COMMAND_QUEUE 0x50204400 +#define DMA_STATUS_REGISTER 0x50204404 +#define ARCHI_CL_HWPE_EVT0 12 +#define ARCHI_CL_HWPE_EVT1 13 +#define FC_DMA_EVENT 8 +#define CL_DMA_EVENT 22 +#define CLUST_CTRL_HWPE_EN 0x18 +#define CLUST_CTRL_HWPE_EN_MASK 0x800 +#define __builtin_bitinsert(a,b,c,d) (a | (((b << (32-c)) >> (32-c)) << d)) + +// RedMulE architecture +#define ADDR_WIDTH 32 +#define DATA_WIDTH 256 +#define REDMULE_FMT 16 +#define ARRAY_HEIGHT 4 +#define PIPE_REGS 3 +#define ARRAY_WIDTH 12 /* Superior limit is ARRAY_HEIGHT*PIPE_REGS */ + +// Commands +#define REDMULE_TRIGGER 0x00 +#define REDMULE_ACQUIRE 0x04 +#define REDMULE_FINISHED 0x08 +#define REDMULE_STATUS 0x0C +#define REDMULE_RUNNING_JOB 0x10 +#define REDMULE_SOFT_CLEAR 0x14 + +// Registers +#define REDMULE_REG_OFFS 0x40 +// #define REDMULE_REG_X_PTR 0x00 +// #define REDMULE_REG_W_PTR 0x04 +// #define REDMULE_REG_Z_PTR 0x08 +// #define REDMULE_MCFG0_PTR 0x0C +// #define REDMULE_MCFG1_PTR 0x10 +// #define REDMULE_ARITH_PTR 0x14 +#define REDMULE_REG_X_PTR 0x00 +#define REDMULE_REG_W_PTR 0x04 +#define REDMULE_REG_Y_PTR 0x08 +#define REDMULE_REG_Z_PTR 0x0C +#define REDMULE_REG_X_ITER_PTR 0x10 +#define REDMULE_REG_W_ITER_PTR 0x14 +#define REDMULE_REG_LEFTOVERS_PTR 0x18 +#define REDMULE_REG_LEFT_PARAMS_PTR 0x1C +#define REDMULE_REG_X_D1_STRIDE_PTR 0x20 +#define REDMULE_REG_W_TOT_LEN_PTR 0x24 +#define REDMULE_REG_TOT_X_READ_PTR 0x28 +#define REDMULE_REG_W_D0_STRIDE_PTR 0x2C +#define REDMULE_REG_YZ_TOT_LEN_PTR 0x30 +#define REDMULE_REG_YZ_D0_STRIDE_PTR 0x34 +#define REDMULE_REG_YZ_D2_STRIDE_PTR 0x38 +#define REDMULE_REG_X_ROWS_OFFS_PTR 0x3C +#define REDMULE_REG_X_BUFFER_SLOTS_PTR 0x40 +#define REDMULE_REG_X_TOT_LEN_PTR 0x44 +#define REDMULE_REG_OP_SELECTION 0x48 + +#define REDMULE_ECC_REG_OFFS 0x90 +#define DATA_CORR_ERR 0x00 +#define DATA_UNCORR_ERR 0x04 +#define METADATA_CORR_ERR 0x08 +#define METADATA_UNCORR_ERR 0x0c + +// OPs definition +#define MATMUL 0x0 +#define GEMM 0x1 +#define ADDMAX 0x2 +#define ADDMIN 0x3 +#define MULMAX 0x4 +#define MULMIN 0x5 +#define MAXMIN 0x6 +#define MINMAX 0x7 + +// GEMM formats +#define Float8 0x0 +#define Float16 0x1 +#define Float8Alt 0x2 +#define Float16Alt 0x3 + +#define RNE 0x0 +#define RTZ 0x1 +#define OP_FMADD 0x0 +#define OP_ADD 0x2 +#define OP_MUL 0x3 +#define OP_MINMAX 0x7 + +// FP Formats encoding +#define FP16 0x2 +#define FP8 0x3 +#define FP16ALT 0x4 +#define FP8ALT 0x5 + +/* DMA Archi */ +#define DMA_TX 0 +#define DMA_RX 1 +#define DMA_INC 1 + +#define PLP_DMA_TYPE_BIT 0x00000011 +#define PLP_DMA_INCR_BIT 0x00000012 +#define PLP_DMA_2D_BIT 0x00000013 +#define PLP_DMA_ELE_BIT 0x00000014 +#define PLP_DMA_ILE_BIT 0x00000015 +#define PLP_DMA_BLE_BIT 0x00000016 +#define PLP_DMA_2D_TCDM_BIT 0x0000017 + +#endif diff --git a/hwpe/redmule_softclear/hal_redmule.h b/hwpe/redmule_softclear/hal_redmule.h new file mode 100644 index 0000000..8fc5000 --- /dev/null +++ b/hwpe/redmule_softclear/hal_redmule.h @@ -0,0 +1,556 @@ +/* + * Copyright (C) 2022-2023 ETH Zurich and University of Bologna + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * SPDX-License-Identifier: Apache-2.0 + * + * Author: Yvan Tortorella + * + * RedMulE Hardware Abstraction Layer (HAL) + */ + +#ifndef __HAL_REDMULE_H__ +#define __HAL_REDMULE_H__ + +#include +#include "inc/x_input.h" +#include "inc/w_input.h" +#include "inc/y_input.h" +#include "inc/z_output.h" +#include "inc/golden.h" +#include "inc/tensor_dim.h" + +/* + * + * For control, generic configuration register layout, + * and job-dependent register map, look at redmule_archi.h + * + */ + +// For all the following functions we use __builtin_pulp_OffsetedWrite and __builtin_pulp_OffsetedRead +// instead of classic load/store because otherwise the compiler is not able to correctly factorize +// the HWPE base in case several accesses are done, ending up with twice more code + +#define HWPE_WRITE(value, offset) *(int *)(ARCHI_CLUST_HWPE_BASE + offset) = value +#define HWPE_READ(offset) *(int *)(ARCHI_CLUST_HWPE_BASE + offset) + +static inline void redmule_x_add_set (unsigned int value) { + HWPE_WRITE(value, REDMULE_REG_OFFS + REDMULE_REG_X_PTR); +} + +static inline void redmule_w_add_set (unsigned int value) { + HWPE_WRITE(value, REDMULE_REG_OFFS + REDMULE_REG_W_PTR); +} + +static inline void redmule_y_add_set (unsigned int value) { + HWPE_WRITE(value, REDMULE_REG_OFFS + REDMULE_REG_Y_PTR); +} + +static inline void redmule_z_add_set (unsigned int value) { + HWPE_WRITE(value, REDMULE_REG_OFFS + REDMULE_REG_Z_PTR); +} + +// static inline void redmule_mcfg_set (uint32_t mcfg0, uint32_t mcfg1) { +// HWPE_WRITE(mcfg0, REDMULE_REG_OFFS + REDMULE_MCFG0_PTR); +// HWPE_WRITE(mcfg1, REDMULE_REG_OFFS + REDMULE_MCFG1_PTR); +// } +// +// static inline void redmule_arith_set (uint32_t arith) { +// HWPE_WRITE(arith, REDMULE_REG_OFFS + REDMULE_ARITH_PTR); +// } + +static inline void hwpe_trigger_job() { + HWPE_WRITE(0, REDMULE_TRIGGER); +} + +static inline int hwpe_acquire_job() { + return HWPE_READ(REDMULE_ACQUIRE); +} + +static inline unsigned int hwpe_get_status() { + return HWPE_READ(REDMULE_STATUS); +} + +static inline unsigned int hwpe_get_running_job() { + return HWPE_READ(REDMULE_RUNNING_JOB); +} + +static inline void hwpe_soft_clear() { + HWPE_WRITE(0, REDMULE_SOFT_CLEAR); +} + +static inline void hwpe_cg_enable() { + *(volatile int*) (ARCHI_CLUST_CTRL_BASE + CLUST_CTRL_HWPE_EN) |= CLUST_CTRL_HWPE_EN_MASK; +} + +static inline void hwpe_cg_disable() { + *(volatile int*) (ARCHI_CLUST_CTRL_BASE + CLUST_CTRL_HWPE_EN) &= ~CLUST_CTRL_HWPE_EN_MASK; +} + +static inline void redmule_evt_wait() { + do { + eu_evt_maskWaitAndClr (1 << ARCHI_CL_HWPE_EVT0); + } while((*(int volatile *)(ARCHI_CLUST_HWPE_BASE + REDMULE_STATUS)) != 0); +} + +static inline int hwpe_wait_acquire() { + int job_id = hwpe_acquire_job(); + while(job_id < 0) { + eu_evt_maskWaitAndClr (1 << ARCHI_CL_HWPE_EVT0); + job_id = hwpe_acquire_job(); + } + return job_id; +} + +static inline unsigned int redmule_get_data_correctable_count () { + return HWPE_READ(REDMULE_ECC_REG_OFFS + DATA_CORR_ERR); +} + +static inline unsigned int redmule_get_data_uncorrectable_count () { + return HWPE_READ(REDMULE_ECC_REG_OFFS + DATA_UNCORR_ERR); +} + +static inline unsigned int redmule_get_meta_correctable_count () { + return HWPE_READ(REDMULE_ECC_REG_OFFS + METADATA_CORR_ERR); +} + +static inline unsigned int redmule_get_meta_uncorrectable_count () { + return HWPE_READ(REDMULE_ECC_REG_OFFS + METADATA_UNCORR_ERR); +} + +/* DMA APIs */ +static inline int mchan_alloc(){ + return *(volatile int*) DMA_COMMAND_QUEUE; +} + +static inline void mchan_transfer(unsigned int len, + unsigned int ext_addr, + unsigned int tcdm_addr) { + + *(volatile int*) DMA_COMMAND_QUEUE = len | + (DMA_RX << PLP_DMA_TYPE_BIT) | + (DMA_INC << PLP_DMA_INCR_BIT) | + (0 << PLP_DMA_2D_BIT) | + (1 << PLP_DMA_ELE_BIT) | + (1 << PLP_DMA_ILE_BIT) | + (0 << PLP_DMA_BLE_BIT) | + (0 << PLP_DMA_2D_TCDM_BIT); + *(volatile int*) DMA_COMMAND_QUEUE = tcdm_addr; + *(volatile int*) DMA_COMMAND_QUEUE = ext_addr; +} + +static inline void mchan_barrier(int id) { + while(((*(volatile int*)(DMA_STATUS_REGISTER)) >> id ) & 0x1 ) { + eu_evt_maskWaitAndClr(1 << FC_DMA_EVENT); + } +} + +static inline void mchan_free(int id) { + *(volatile int*) DMA_STATUS_REGISTER = 0x1 << id; +} + +// void redmule_cfg (unsigned int x, unsigned int w, unsigned int z, +// uint16_t m_size, uint16_t n_size, uint16_t k_size, +// uint8_t gemm_op, uint8_t gemm_fmt){ +// +// uint32_t mcfg_reg0 = 0; +// uint32_t mcfg_reg1 = 0; +// uint32_t arith_reg = 0; +// +// mcfg_reg0 = (k_size << 16) | +// (m_size << 0); +// mcfg_reg1 = n_size << 0; +// +// arith_reg = (gemm_op << 10) | +// (gemm_fmt << 7); +// +// redmule_x_add_set ((unsigned int) x); +// redmule_w_add_set ((unsigned int) w); +// redmule_z_add_set ((unsigned int) z); +// redmule_mcfg_set ((unsigned int) mcfg_reg0, +// (unsigned int) mcfg_reg1); +// redmule_arith_set ((unsigned int) arith_reg); +// +// } + +void redmule_cfg (uint16_t m_size, uint16_t n_size, uint16_t k_size, uint8_t gemm_ops){ + uint32_t x_iters = 0; + uint32_t w_iters = 0; + uint32_t leftovers = 0; + uint32_t left_params = 0; + uint32_t x_d1_stride = 0; + uint32_t x_rows_offs = 0; + uint32_t w_tot_len = 0; + uint32_t w_d1_len = 0; + uint32_t w_d0_stride = 0; + uint32_t yz_tot_len = 0; + uint32_t yz_d0_stride = 0; + uint32_t yz_d2_stride = 0; + uint32_t tot_x_read = 0; + uint32_t x_buffer_slots = 0; + uint32_t op_selection = 0; + uint16_t tot_stores = 0; + uint16_t w_rows = n_size; + uint16_t depth = DATA_WIDTH/(ARRAY_HEIGHT*FPFORMAT); + uint8_t tile = ARRAY_HEIGHT*(PIPE_REGS + 1); + _Bool x_rows_sub = 0; + _Bool x_cols_sub = 0; + _Bool w_cols_sub = 0; + uint16_t x_rows_iter, + x_rows_iter_tmp, + w_rows_iter, + w_rows_iter_tmp; + uint16_t x_cols_iter, + x_cols_iter_tmp, + w_cols_iter, + w_cols_iter_tmp; + uint8_t x_rows_lftovr, + x_cols_lftovr, + w_rows_lftovr, + w_cols_lftovr, + slots; + + // Calculating the number of iterations alng the two dimensions of the X matrix + x_rows_iter_tmp = m_size/ARRAY_WIDTH; + x_cols_iter_tmp = n_size/tile; + + // Calculating the number of iterations alng the two dimensions of the W matrix + w_rows_iter_tmp = w_rows; + w_cols_iter_tmp = k_size/tile; + + // Calculating the residuals along the input dimensions + x_rows_lftovr = m_size - (x_rows_iter_tmp*ARRAY_WIDTH); + x_cols_lftovr = n_size - (x_cols_iter_tmp*tile); + + // Calculating the residuals along the weight dimensions + w_rows_lftovr = n_size - (ARRAY_HEIGHT*(w_rows/ARRAY_HEIGHT)); + w_cols_lftovr = k_size - (w_cols_iter_tmp*tile); + + if (w_cols_lftovr != 0) + w_cols_iter = w_cols_iter_tmp + 1; + else + w_cols_iter = w_cols_iter_tmp; + + if (w_rows_lftovr != 0) + w_rows_iter = w_rows_iter_tmp + ARRAY_HEIGHT - w_rows_lftovr; + else + w_rows_iter = w_rows_iter_tmp; + + if (x_cols_lftovr != 0) + x_cols_iter = x_cols_iter_tmp + 1; + else + x_cols_iter = x_cols_iter_tmp; + + if (x_rows_lftovr != 0) + x_rows_iter = x_rows_iter_tmp + 1; + else + x_rows_iter = x_rows_iter_tmp; + + if (x_cols_lftovr%depth != 0) + x_buffer_slots = x_cols_lftovr/depth + 1; + else + x_buffer_slots = x_cols_lftovr/depth; + + // Calculating the number of total stores + tot_stores = x_rows_iter*w_cols_iter; + + // Determining if input matrixes are sub-matrixes + if (m_size < ARRAY_WIDTH) + x_rows_sub = 1; + if (n_size < ARRAY_HEIGHT) + x_cols_sub = 1; + if (k_size < tile) + w_cols_sub = 1; + + // Operation selection + switch (gemm_ops) { + case MATMUL: + op_selection |= (RNE << 29 | RNE << 26 | OP_FMADD << 22 | OP_MINMAX << 18 | SRC_FMT << 15 | DST_FMT << 12) | 0; + break; + + case GEMM: + op_selection |= (RNE << 29 | RNE << 26 | OP_FMADD << 22 | OP_MINMAX << 18 | SRC_FMT << 15 | DST_FMT << 12) | 1; + break; + + case ADDMAX: + op_selection |= (RNE << 29 | RTZ << 26 | OP_ADD << 22 | OP_MINMAX << 18 | SRC_FMT << 15 | DST_FMT << 12) | 1; + break; + + case ADDMIN: + op_selection |= (RNE << 29 | RNE << 26 | OP_ADD << 22 | OP_MINMAX << 18 | SRC_FMT << 15 | DST_FMT << 12) | 1; + break; + + case MULMAX: + op_selection |= (RNE << 29 | RTZ << 26 | OP_MUL << 22 | OP_MINMAX << 18 | SRC_FMT << 15 | DST_FMT << 12) | 1; + break; + + case MULMIN: + op_selection |= (RNE << 29 | RNE << 26 | OP_MUL << 22 | OP_MINMAX << 18 | SRC_FMT << 15 | DST_FMT << 12) | 1; + break; + + case MAXMIN: + op_selection |= (RTZ << 29 | RNE << 26 | OP_MINMAX << 22 | OP_MINMAX << 18 | SRC_FMT << 15 | DST_FMT << 12) | 1; + break; + + case MINMAX: + op_selection |= (RNE << 29 | RTZ << 26 | OP_MINMAX << 22 | OP_MINMAX << 18 | SRC_FMT << 15 | DST_FMT << 12) | 1; + break; + } + + // Storing iterations and residuals in registers + x_iters |= x_rows_iter << 16 | x_cols_iter << 0; + w_iters |= w_rows_iter << 16 | w_cols_iter << 0; + leftovers |= x_rows_lftovr << 24 | x_cols_lftovr << 16 | w_rows_lftovr << 8 | w_cols_lftovr << 0; + left_params |= tot_stores << 16 | x_rows_sub << 15 | x_cols_sub << 14 | w_cols_sub << 13; + x_d1_stride = ((4*FPFORMAT)/ADDR_WIDTH)*(((DATA_WIDTH/FPFORMAT)*x_cols_iter_tmp) + x_cols_lftovr); + x_rows_offs = ARRAY_WIDTH*x_d1_stride; + w_tot_len = w_rows_iter*w_cols_iter*x_rows_iter; + w_d0_stride = ((4*FPFORMAT)/ADDR_WIDTH)*(((DATA_WIDTH/FPFORMAT)*w_cols_iter_tmp) + w_cols_lftovr); + yz_tot_len = ARRAY_WIDTH*x_rows_iter*w_cols_iter; + yz_d0_stride = w_d0_stride; + yz_d2_stride = ARRAY_WIDTH*w_d0_stride; + tot_x_read = x_rows_iter*x_cols_iter*w_cols_iter; + + // Writing the computations in configuration register + HWPE_WRITE(x_iters , REDMULE_REG_OFFS + REDMULE_REG_X_ITER_PTR ); + HWPE_WRITE(w_iters , REDMULE_REG_OFFS + REDMULE_REG_W_ITER_PTR ); + HWPE_WRITE(leftovers , REDMULE_REG_OFFS + REDMULE_REG_LEFTOVERS_PTR ); + HWPE_WRITE(left_params , REDMULE_REG_OFFS + REDMULE_REG_LEFT_PARAMS_PTR ); + HWPE_WRITE(x_d1_stride , REDMULE_REG_OFFS + REDMULE_REG_X_D1_STRIDE_PTR ); + HWPE_WRITE(x_rows_offs , REDMULE_REG_OFFS + REDMULE_REG_X_ROWS_OFFS_PTR ); + HWPE_WRITE(tot_x_read , REDMULE_REG_OFFS + REDMULE_REG_TOT_X_READ_PTR ); + HWPE_WRITE(x_buffer_slots, REDMULE_REG_OFFS + REDMULE_REG_X_BUFFER_SLOTS_PTR ); + HWPE_WRITE(w_tot_len , REDMULE_REG_OFFS + REDMULE_REG_W_TOT_LEN_PTR ); + HWPE_WRITE(w_d0_stride , REDMULE_REG_OFFS + REDMULE_REG_W_D0_STRIDE_PTR ); + HWPE_WRITE(yz_tot_len , REDMULE_REG_OFFS + REDMULE_REG_YZ_TOT_LEN_PTR ); + HWPE_WRITE(yz_d0_stride , REDMULE_REG_OFFS + REDMULE_REG_YZ_D0_STRIDE_PTR ); + HWPE_WRITE(yz_d2_stride , REDMULE_REG_OFFS + REDMULE_REG_YZ_D2_STRIDE_PTR ); + HWPE_WRITE(op_selection , REDMULE_REG_OFFS + REDMULE_REG_OP_SELECTION ); +} + +void generate_test_data16(int x_start_addr, + int w_start_addr, + int y_start_addr, + int m_size, + int n_size, + int k_size) { + + int x_addr = x_start_addr; + int w_addr = w_start_addr; + int y_addr = y_start_addr; + int x_end_addr = x_start_addr + (2*m_size*n_size); + int w_end_addr = w_start_addr + (2*n_size*k_size); + int y_end_addr = y_start_addr + (2*m_size*k_size); + + // Generating input stimuli from golden model + for (x_addr = x_start_addr; x_addr < x_end_addr; x_addr += 2) { + int x = x_addr - x_start_addr; + *(uint32_t *)(x_addr) = x_inp[x/2]; + } + + // Generating Weight stimuli from golden model + for (w_addr = w_start_addr; w_addr < w_end_addr; w_addr += 2) { + int w = w_addr - w_start_addr; + *(uint32_t *)(w_addr) = w_inp[w/2]; + } + + for (y_addr = y_start_addr; y_addr < y_end_addr; y_addr += 2) { + int y = y_addr - y_start_addr; + *(uint32_t *)(y_addr) = y_inp[y/2]; + } +} + +int redmule_compare16 (int z_start_addr, int m_size, int k_size) { + int err = 0; + int z_end_addr = z_start_addr + 2*m_size*k_size; + uint16_t z_computed; + uint16_t diff, diff_1, diff_2; + + for (int z_addr = z_start_addr; z_addr < z_end_addr; z_addr += 2) { + int z = z_addr - z_start_addr; + z_computed = *(uint32_t *)(z_addr); + + if ( z_computed != z_oup[z/2] ) { + diff_1 = z_computed - z_oup[z/2]; + if (diff_1 > 3) { + diff_2 = z_oup[z/2] - z_computed; + if (diff_2 > 3) { + err++; + } + } + } + } + + return err; + +} + +int redmule16_compare_int(uint32_t *actual_z, uint32_t *golden_z, int len) { + #define ERR 0x0011 + uint32_t actual_word = 0; + uint16_t actual_MSHWord, actual_LSHWord; + uint32_t golden_word = 0; + uint16_t golden_MSHWord, golden_LSHWord; + uint32_t actual = 0; + uint32_t golden = 0; + + int errors = 0; + int error; + + for (int i=0; i golden_LSHWord) ? (actual_LSHWord - golden_LSHWord) : 0; + diff = (actual_LSHWord < golden_LSHWord) ? (golden_LSHWord - actual_LSHWord) : 0; + + if (diff > ERR) { + error = 1; + #ifdef VERBOSE + tfp_printf ("diff: 0x%08x\n", diff); + tfp_printf ("LSW: Error!\n"); + #endif + } + + // Checking Most Significant Half-Word + actual_MSHWord = (uint16_t)((actual_word >> 16) & 0x0000FFFF); + golden_MSHWord = (uint16_t)((golden_word >> 16) & 0x0000FFFF); + + diff = (actual_MSHWord > golden_MSHWord) ? (actual_MSHWord - golden_MSHWord) : 0; + diff = (actual_MSHWord < golden_MSHWord) ? (golden_MSHWord - actual_MSHWord) : 0; + + if (diff > ERR) { + error = 1; + #ifdef VERBOSE + tfp_printf ("diff: 0x%08x\n", diff); + tfp_printf ("MSW: Error!\n"); + #endif + } + + errors += error; + + #ifdef DEBUG + tfp_printf(" Golden: 0x%08x; Actual: 0x%08x,\n", golden_word, actual_word); + #endif + + #ifdef VERBOSE + if(error) { + if(errors==1) tfp_printf(" golden <- actual @ address @ index\n"); + tfp_printf(" 0x%08x <- 0x%08x @ 0x%08x @ 0x%08x\n", golden_word, actual_word, (actual_z+i), i*4); + } + #endif + } + return errors; +} + +int redmule8_compare_int(uint32_t *actual_z, uint32_t *golden_z, int len) { + #define ERR 0x0011 + uint32_t actual_word = 0; + uint8_t actual_Byte0, + actual_Byte1, + actual_Byte2, + actual_Byte3; + uint32_t golden_word = 0; + uint8_t golden_Byte0, + golden_Byte1, + golden_Byte2, + golden_Byte3; + uint32_t actual = 0; + uint32_t golden = 0; + + int errors = 0; + int error; + + for (int i=0; i golden_Byte0) ? (actual_Byte0 - golden_Byte0) : 0; + diff = (actual_Byte0 < golden_Byte0) ? (golden_Byte0 - actual_Byte0) : 0; + + if (diff > ERR) { + error = 1; + tfp_printf ("diff: 0x%08x\n", diff); + tfp_printf ("Byte0: Error!\n"); + } + + // Cheching Byte1 + actual_Byte1 = (uint8_t)( (actual_word >> 8 ) & 0x000000FF); + golden_Byte1 = (uint8_t)( (golden_word >> 8 ) & 0x000000FF); + + diff = (actual_Byte1 > golden_Byte1) ? (actual_Byte1 - golden_Byte1) : 0; + diff = (actual_Byte1 < golden_Byte1) ? (golden_Byte1 - actual_Byte1) : 0; + + if (diff > ERR) { + error = 1; + tfp_printf ("diff: 0x%08x\n", diff); + tfp_printf ("Byte1: Error!\n"); + } + + // Cheching Byte2 + actual_Byte2 = (uint8_t)( (actual_word >> 16 ) & 0x000000FF); + golden_Byte2 = (uint8_t)( (golden_word >> 16 ) & 0x000000FF); + + diff = (actual_Byte2 > golden_Byte2) ? (actual_Byte2 - golden_Byte2) : 0; + diff = (actual_Byte2 < golden_Byte2) ? (golden_Byte2 - actual_Byte2) : 0; + + if (diff > ERR) { + error = 1; + tfp_printf ("diff: 0x%08x\n", diff); + tfp_printf ("Byte2: Error!\n"); + } + + // Cheching Byte3 + actual_Byte3 = (uint8_t)( (actual_word >> 24 ) & 0x000000FF); + golden_Byte3 = (uint8_t)( (golden_word >> 24 ) & 0x000000FF); + + diff = (actual_Byte3 > golden_Byte3) ? (actual_Byte3 - golden_Byte3) : 0; + diff = (actual_Byte3 < golden_Byte3) ? (golden_Byte3 - actual_Byte3) : 0; + + if (diff > ERR) { + error = 1; + tfp_printf ("diff: 0x%08x\n", diff); + tfp_printf ("Byte3: Error!\n"); + } + + errors += error; + + #ifdef DEBUG + tfp_printf(" Golden: 0x%08x; Actual: 0x%08x,\n", golden_word, actual_word); + #endif + + #ifdef VERBOSE + if(error) { + if(errors==1) tfp_printf(" golden <- actual @ address @ index\n"); + tfp_printf(" 0x%08x <- 0x%08x @ 0x%08x @ 0x%08x\n", golden_word, actual_word, (actual_z+i), i*4); + } + #endif + } + return errors; +} + +#endif diff --git a/hwpe/redmule_softclear/inc/golden.h b/hwpe/redmule_softclear/inc/golden.h new file mode 100644 index 0000000..f664e47 --- /dev/null +++ b/hwpe/redmule_softclear/inc/golden.h @@ -0,0 +1,387 @@ + /* Header file generated by RedMulE Golden Model */ +uint32_t golden [384] = { +0x48974845, +0x48384608, +0x487b4855, +0x48804869, +0x48b046d1, +0x483f48db, +0x485f48c9, +0x483a4881, +0x472c484b, +0x492b4762, +0x48fd4822, +0x492e488e, +0x484f483e, +0x46d749e8, +0x489d484b, +0x47e9490b, +0x47d2484f, +0x474744be, +0x46c047c7, +0x48af4727, +0x482d46c5, +0x482e483d, +0x479f4897, +0x4749488b, +0x46a8489a, +0x488b46f2, +0x47e84891, +0x483d4872, +0x46fd4716, +0x46a049b5, +0x47a446e7, +0x476748a1, +0x49354939, +0x48c14703, +0x48bd4863, +0x48cf4913, +0x48b848b6, +0x49204946, +0x48e1495e, +0x48b24938, +0x4882493a, +0x49d5483b, +0x49724911, +0x49df496b, +0x488848f2, +0x48214a46, +0x490c48c1, +0x48a349b2, +0x47b0463a, +0x476244cb, +0x46b94765, +0x4814466a, +0x47964631, +0x474b4666, +0x47044798, +0x47614838, +0x459047d3, +0x48a245ea, +0x484447f1, +0x4776484b, +0x46d847d6, +0x44d348f3, +0x478d46fa, +0x466e481e, +0x481e4827, +0x479445a2, +0x48064727, +0x48d5475d, +0x48284708, +0x480d4862, +0x48324895, +0x47f148bd, +0x46a7482a, +0x492d47b1, +0x4884484d, +0x485f48dc, +0x480c476d, +0x46d348e9, +0x48844728, +0x480e48a0, +0x48134862, +0x485a4675, +0x473847e8, +0x48234836, +0x482146e7, +0x47b34822, +0x48554846, +0x47174863, +0x47c14872, +0x488e46d5, +0x485f47e2, +0x48b8487c, +0x4788481e, +0x467748bd, +0x47f846c9, +0x47fc48fe, +0x47b247a0, +0x467e4588, +0x46c74662, +0x481246e8, +0x474e4536, +0x468f46c0, +0x4679481f, +0x46e246a1, +0x45604809, +0x47eb4630, +0x475746b5, +0x477f4848, +0x46d846a6, +0x459a4870, +0x46784670, +0x468c47d2, +0x48c44762, +0x479146e3, +0x486d46b1, +0x486747d0, +0x47f6468d, +0x475648a5, +0x48544857, +0x48384866, +0x46ec484d, +0x48f647d2, +0x4879484a, +0x483c4848, +0x4806471d, +0x473048fa, +0x47b84768, +0x46f94865, +0x491848a8, +0x486746ca, +0x48624800, +0x491048d3, +0x4849474e, +0x486b48eb, +0x48c54966, +0x483048f4, +0x477848f9, +0x499e481e, +0x48f148cf, +0x49234982, +0x47cf487c, +0x464949ea, +0x495e4773, +0x483f48b2, +0x497548a7, +0x481e4616, +0x4866481f, +0x486448b6, +0x487347dc, +0x487f485c, +0x491f4938, +0x48b6490d, +0x48a148f8, +0x492d4859, +0x4915489c, +0x48874899, +0x4859486c, +0x471e49ca, +0x49184867, +0x482748d3, +0x4998488b, +0x481d4704, +0x488048b8, +0x49444876, +0x48f2470c, +0x489b48b9, +0x48e54956, +0x48a548d6, +0x485648dc, +0x49ab484e, +0x490e48e0, +0x494548dd, +0x48dd488b, +0x47ea4a32, +0x49114835, +0x48194965, +0x481e460e, +0x4673452c, +0x4717475c, +0x46d046f6, +0x46bc4696, +0x481e4726, +0x46ea4763, +0x475846fe, +0x4627478b, +0x483f4704, +0x47b146ad, +0x48164792, +0x468446f2, +0x45a84827, +0x47a4472f, +0x462b4797, +0x48ab483f, +0x4863468f, +0x4766485a, +0x48cb481d, +0x490347dc, +0x483048fc, +0x483e48cc, +0x486448ab, +0x47634966, +0x499d4794, +0x488b488e, +0x496048dc, +0x484c4854, +0x474c499c, +0x48bc4826, +0x48834949, +0x4905489d, +0x481e4718, +0x48f448e3, +0x490448c1, +0x48b347e8, +0x48d44892, +0x489448ff, +0x488648d5, +0x480348fa, +0x492e47d2, +0x48b24870, +0x492b48e5, +0x4785487b, +0x471d49e3, +0x48bf4837, +0x48c4489b, +0x4871475c, +0x4811464a, +0x471c47af, +0x48174817, +0x484e463b, +0x464f477f, +0x487c4704, +0x472547a3, +0x462a4853, +0x4860465a, +0x48804736, +0x482b47e1, +0x46c04811, +0x475d48dc, +0x48064668, +0x46f44893, +0x49594858, +0x487b463d, +0x484e480f, +0x48a648c0, +0x48944847, +0x484a48a0, +0x48f4491e, +0x48b548fc, +0x47d248ce, +0x497f47db, +0x49394955, +0x48ce48a7, +0x48844890, +0x476349d6, +0x4922486e, +0x48c348f4, +0x491c47ec, +0x47834698, +0x47544715, +0x47524745, +0x4832472f, +0x48094817, +0x48c347f8, +0x480047e6, +0x473048b6, +0x48cb480a, +0x488e479e, +0x488e47c2, +0x47ee472f, +0x4744489d, +0x48514755, +0x47d34846, +0x48a04838, +0x47624634, +0x48064786, +0x482d47e3, +0x486c4726, +0x480347b7, +0x481448ac, +0x483948e0, +0x47504827, +0x48c546f2, +0x4886483f, +0x485648ad, +0x47a947e8, +0x47434937, +0x481f46d0, +0x4804484c, +0x481f47fd, +0x4813456d, +0x4807474d, +0x480e4688, +0x481046e8, +0x4799469f, +0x478f4853, +0x482447f2, +0x471f47d0, +0x485f46da, +0x481c4813, +0x4863482e, +0x480b4786, +0x46b848c9, +0x46e2475a, +0x46c54852, +0x480245af, +0x46c24466, +0x4743465d, +0x47ba46b7, +0x46c34636, +0x47844677, +0x47c2485a, +0x46ac46dc, +0x460e47de, +0x4834465f, +0x476947f4, +0x481046fc, +0x45ea45fd, +0x45b548d0, +0x47834704, +0x46c44830, +0x47c74759, +0x45b0453d, +0x47024741, +0x47934736, +0x47ba461b, +0x46dd470b, +0x470b4657, +0x4710470d, +0x468f486c, +0x46ba45c3, +0x483b479d, +0x477446c9, +0x46a746a9, +0x46064833, +0x46a94690, +0x46a746f5, +0x48bb47ac, +0x4803452c, +0x4824470f, +0x48cb47d5, +0x484a4707, +0x47974832, +0x482c4851, +0x4877487a, +0x465d4891, +0x48ce47f4, +0x48994898, +0x486a484e, +0x47f047ac, +0x4611493e, +0x489e47e2, +0x46af488c, +0x48364665, +0x46b645e4, +0x46b946a1, +0x46dd46c8, +0x474b4658, +0x4777467b, +0x47984769, +0x475e4785, +0x4656472a, +0x488145fb, +0x472d46fc, +0x47a3476e, +0x46ca465d, +0x45004855, +0x479a464f, +0x473846c3, +0x486c481e, +0x48014659, +0x477a4756, +0x487b47d5, +0x48084706, +0x4838484f, +0x48634870, +0x480648d3, +0x47714865, +0x494c46be, +0x484c4915, +0x48624900, +0x46e8481a, +0x46a04974, +0x483d4775, +0x480e487c, +}; \ No newline at end of file diff --git a/hwpe/redmule_softclear/inc/tensor_dim.h b/hwpe/redmule_softclear/inc/tensor_dim.h new file mode 100644 index 0000000..21bd0d8 --- /dev/null +++ b/hwpe/redmule_softclear/inc/tensor_dim.h @@ -0,0 +1,13 @@ + /* Header file generated by RedMulE Golden Model */ +#ifndef __TENSOR_DIM__ +#define __TENSOR_DIM__ + +#define M_SIZE 24 +#define N_SIZE 32 +#define K_SIZE 32 +#define SRC_FMT FP16 +#define DST_FMT FP16 +#define FPFORMAT 16 +uint8_t gemm_ops = GEMM; + +#endif diff --git a/hwpe/redmule_softclear/inc/w_2D.h b/hwpe/redmule_softclear/inc/w_2D.h new file mode 100644 index 0000000..9409c64 --- /dev/null +++ b/hwpe/redmule_softclear/inc/w_2D.h @@ -0,0 +1,35 @@ + /* Header file generated by RedMulE Golden Model */ +uint16_t w_inp_2D [32][32] = { +0x311a, 0x39e0, 0x387d, 0x3a4a, 0x386f, 0x3ada, 0x392f, 0x3854, 0x3014, 0x2fd2, 0x31c9, 0x2fca, 0x2e55, 0x3bc8, 0x396d, 0x3b1d, 0x39f6, 0x333a, 0x3908, 0x3628, 0x3bab, 0x3b8b, 0x3b4a, 0x322d, 0x3925, 0x317a, 0x3725, 0x31c2, 0x3066, 0x38f3, 0x3a17, 0x3476, +0x3bda, 0x3196, 0x3922, 0x3680, 0x396a, 0x3021, 0x3761, 0x374d, 0x2fc2, 0x3967, 0x3b94, 0x33b5, 0x3797, 0x34d6, 0x3655, 0x2176, 0x39bc, 0x3999, 0x3658, 0x3904, 0x3759, 0x2ade, 0x3a5a, 0x3b78, 0x36c7, 0x2d01, 0x3b58, 0x2d9a, 0x373d, 0x3952, 0x38e8, 0x3887, +0x37b6, 0x3a88, 0x2f8a, 0x2d79, 0x3413, 0x3421, 0x3976, 0x32b2, 0x3446, 0x2d99, 0x3a56, 0x3322, 0x3b49, 0x39fa, 0x3acd, 0x3af6, 0x304c, 0x3abb, 0x3a83, 0x38b2, 0x3ab9, 0x363e, 0x389f, 0x31bb, 0x38e1, 0x3bc4, 0x3b9b, 0x2984, 0x3a43, 0x3b2f, 0x35d6, 0x3bda, +0x2df3, 0x3bf8, 0x2acc, 0x378b, 0x3555, 0x2e59, 0x31d4, 0x34ec, 0x3a46, 0x3bab, 0x3214, 0x3161, 0x3470, 0x3a03, 0x368e, 0x31ad, 0x27cb, 0x2ecb, 0x3422, 0x39f7, 0x3644, 0x3a77, 0x313f, 0x34f2, 0x39b3, 0x3bf2, 0x379a, 0x3456, 0x35fe, 0x3ae7, 0x3964, 0x385f, +0x3b16, 0x3999, 0x3833, 0x2eda, 0x3afd, 0x3a4a, 0x3ba2, 0x2bd4, 0x3b38, 0x31a2, 0x32dd, 0x353c, 0x366f, 0x375e, 0x3821, 0x367a, 0x3b44, 0x39e6, 0x3787, 0x339e, 0x39d7, 0x38c6, 0x37d5, 0x342f, 0x3984, 0x319b, 0x33b5, 0x35ab, 0x398a, 0x374e, 0x36b6, 0x3b21, +0x3bbb, 0x2ab3, 0x2ad5, 0x33bc, 0x2bef, 0x3780, 0x3738, 0x3a0b, 0x3b09, 0x30ca, 0x384e, 0x3ab3, 0x39bd, 0x3453, 0x3a6d, 0x3957, 0x2c10, 0x30e9, 0x35d4, 0x3aef, 0x3be9, 0x39ad, 0x3a74, 0x3af9, 0x3739, 0x2d4d, 0x39fe, 0x3b72, 0x2c57, 0x398c, 0x381f, 0x3930, +0x3820, 0x321b, 0x3964, 0x2964, 0x33a0, 0x2d00, 0x2490, 0x336b, 0x3465, 0x3b2e, 0x3aa0, 0x371f, 0x300e, 0x3a09, 0x3bf1, 0x25cc, 0x3b6f, 0x3384, 0x3a88, 0x3acb, 0x3814, 0x36d0, 0x3081, 0x3a2c, 0x3353, 0x39cb, 0x31ed, 0x3af6, 0x3721, 0x36c7, 0x2ce2, 0x390d, +0x3698, 0x3ab2, 0x3b3e, 0x2eb4, 0x3998, 0x39e3, 0x3a77, 0x3632, 0x2c12, 0x3bd5, 0x3ba3, 0x3bba, 0x323c, 0x367b, 0x3557, 0x39c8, 0x37db, 0x3b45, 0x3b6e, 0x3931, 0x3121, 0x3a8d, 0x3a55, 0x3b9b, 0x358a, 0x3925, 0x3491, 0x3912, 0x3b6b, 0x3584, 0x32df, 0x3120, +0x32b2, 0x3b0a, 0x2cad, 0x3465, 0x3ad3, 0x3bcd, 0x363b, 0x3afe, 0x354b, 0x3374, 0x39af, 0x3b7f, 0x308c, 0x2e72, 0x3380, 0x3b70, 0x3902, 0x38d8, 0x39f3, 0x3a4b, 0x3853, 0x397b, 0x2ebe, 0x387f, 0x2845, 0x37e2, 0x360f, 0x370b, 0x3acb, 0x35d4, 0x36e6, 0x3262, +0x2e88, 0x3a54, 0x2ee3, 0x3575, 0x3afe, 0x2aee, 0x39a0, 0x3aae, 0x3693, 0x3432, 0x3834, 0x3b9b, 0x3bcb, 0x2e3a, 0x356d, 0x374e, 0x3924, 0x383c, 0x311e, 0x3ac5, 0x352d, 0x311e, 0x38ca, 0x34d4, 0x36ca, 0x34ed, 0x3a13, 0x33eb, 0x3639, 0x3828, 0x3b3c, 0x3939, +0x3837, 0x3521, 0x2cb5, 0x3629, 0x3924, 0x384c, 0x366a, 0x3bbf, 0x2e9e, 0x3ba8, 0x33ad, 0x38c8, 0x3934, 0x3907, 0x249a, 0x3690, 0x3a09, 0x3215, 0x3898, 0x325d, 0x37d5, 0x3195, 0x361c, 0x3ae4, 0x351f, 0x3452, 0x3bc0, 0x375c, 0x39bf, 0x317a, 0x3aae, 0x283a, +0x3476, 0x3b92, 0x3472, 0x383e, 0x280f, 0x39d6, 0x2fd1, 0x31f4, 0x2ffb, 0x3b97, 0x3692, 0x36c0, 0x3989, 0x33cf, 0x3ba6, 0x3239, 0x35d7, 0x33ab, 0x31eb, 0x3b47, 0x389b, 0x3b88, 0x3580, 0x354c, 0x3802, 0x3b9a, 0x3b94, 0x2a92, 0x2db1, 0x38bd, 0x2dfb, 0x3900, +0x344f, 0x3739, 0x27a5, 0x3b2e, 0x342b, 0x34bb, 0x30c8, 0x3ae8, 0x3b26, 0x3982, 0x38c0, 0x3408, 0x38c8, 0x36ef, 0x3bf0, 0x3acf, 0x3a3c, 0x3825, 0x31a5, 0x3ada, 0x3b5b, 0x37db, 0x3a01, 0x3663, 0x3a7d, 0x327b, 0x3a1f, 0x3862, 0x38af, 0x3204, 0x372e, 0x3b19, +0x3708, 0x3622, 0x2e62, 0x39ab, 0x2d4d, 0x31b4, 0x3552, 0x3bbc, 0x36f2, 0x36eb, 0x38ef, 0x3755, 0x3bbe, 0x2c17, 0x3815, 0x2f53, 0x363f, 0x38c1, 0x3246, 0x386b, 0x34de, 0x34e4, 0x3baa, 0x349e, 0x32ce, 0x3a68, 0x373f, 0x2cce, 0x3b36, 0x28ba, 0x3b50, 0x3232, +0x1f34, 0x3928, 0x35cd, 0x3b38, 0x30ce, 0x35a1, 0x3a06, 0x3a32, 0x3a53, 0x3489, 0x3241, 0x372f, 0x390c, 0x3a1b, 0x378a, 0x3713, 0x3769, 0x37a8, 0x3418, 0x3ad4, 0x3a4e, 0x3bf7, 0x37a5, 0x34dc, 0x39b2, 0x351b, 0x3372, 0x349f, 0x2f50, 0x3ab1, 0x3795, 0x2db7, +0x3864, 0x3157, 0x3900, 0x323e, 0x389e, 0x3880, 0x3b1f, 0x37a1, 0x396c, 0x2e43, 0x2c2a, 0x3b78, 0x3988, 0x3a14, 0x39c1, 0x3b51, 0x3780, 0x3bf2, 0x2d19, 0x3815, 0x3a5f, 0x3641, 0x2f62, 0x37d5, 0x3564, 0x139a, 0x3ab8, 0x28f7, 0x3785, 0x34e1, 0x3097, 0x3768, +0x3971, 0x3ae2, 0x32ae, 0x2fd5, 0x382a, 0x346c, 0x3133, 0x3167, 0x3940, 0x2d12, 0x389a, 0x3bd0, 0x3943, 0x391c, 0x3a75, 0x2a11, 0x391e, 0x372d, 0x3a79, 0x3b72, 0x3373, 0x39b7, 0x35d7, 0x372b, 0x3a6d, 0x38a1, 0x3279, 0x3434, 0x3694, 0x3b45, 0x3abb, 0x392d, +0x34a8, 0x3757, 0x32ca, 0x345d, 0x36a5, 0x3854, 0x2dcd, 0x30af, 0x38dd, 0x3067, 0x3411, 0x3997, 0x397a, 0x3a64, 0x38b8, 0x3962, 0x3509, 0x3bb6, 0x3a66, 0x339f, 0x372a, 0x31a8, 0x37da, 0x36ff, 0x33c6, 0x31da, 0x3977, 0x3b72, 0x3841, 0x3567, 0x3433, 0x33b8, +0x39fe, 0x3a10, 0x3bf2, 0x35e7, 0x3a4a, 0x3b3e, 0x2ec7, 0x3aa4, 0x3846, 0x3af9, 0x38a9, 0x2c1f, 0x39ab, 0x349f, 0x31d6, 0x39ae, 0x3b79, 0x352d, 0x3516, 0x347c, 0x2f33, 0x35ad, 0x31c4, 0x3b52, 0x354b, 0x3786, 0x3ab7, 0x3896, 0x34ac, 0x352f, 0x37e6, 0x326a, +0x2e44, 0x34c7, 0x388d, 0x3bf4, 0x363f, 0x3b3d, 0x33b1, 0x3b8b, 0x3340, 0x37f7, 0x3b07, 0x25bf, 0x398e, 0x3505, 0x3bd7, 0x366d, 0x388a, 0x2cc0, 0x359a, 0x3b9a, 0x3b99, 0x379d, 0x3b6b, 0x39b8, 0x3223, 0x2703, 0x3ba9, 0x2ecb, 0x3759, 0x39d8, 0x37ac, 0x32cf, +0x35f2, 0x38a3, 0x399e, 0x3bd2, 0x3780, 0x3af3, 0x3b5e, 0x337b, 0x3a08, 0x35da, 0x3446, 0x3b25, 0x3ad0, 0x3bee, 0x3141, 0x32d8, 0x34ce, 0x2ac9, 0x3800, 0x3a8a, 0x2d53, 0x368a, 0x3561, 0x3998, 0x35a3, 0x3677, 0x3ab2, 0x3269, 0x3236, 0x3b3e, 0x3aba, 0x3bac, +0x395d, 0x3820, 0x1df6, 0x3bb5, 0x35b5, 0x3675, 0x3b74, 0x360f, 0x34de, 0x3a0c, 0x3aeb, 0x299d, 0x3207, 0x3bd8, 0x2178, 0x3995, 0x3948, 0x3908, 0x3843, 0x2ea5, 0x3045, 0x3989, 0x345d, 0x39c5, 0x3a89, 0x3863, 0x3be0, 0x397a, 0x38f1, 0x39e2, 0x3b08, 0x352e, +0x385f, 0x28f2, 0x3bc3, 0x35e0, 0x380c, 0x3b9c, 0x3afc, 0x390a, 0x3689, 0x34fd, 0x2cf5, 0x308e, 0x342b, 0x3921, 0x3a67, 0x3ad6, 0x2986, 0x32fc, 0x35aa, 0x3507, 0x3608, 0x33fd, 0x3bf3, 0x39e2, 0x3b0f, 0x30b7, 0x3896, 0x3ae4, 0x2145, 0x35b6, 0x2e1d, 0x3ad1, +0x333d, 0x3afb, 0x2703, 0x3413, 0x1d7d, 0x3b7f, 0x3ae1, 0x303c, 0x3004, 0x39d3, 0x3554, 0x31a4, 0x354e, 0x3662, 0x39c5, 0x2eb7, 0x2c6e, 0x397f, 0x31d8, 0x1f0c, 0x38e3, 0x35f0, 0x2714, 0x28d1, 0x375e, 0x3a75, 0x3830, 0x3578, 0x397d, 0x3b18, 0x383c, 0x3498, +0x39ad, 0x3598, 0x23c4, 0x34ea, 0x3a61, 0x2b00, 0x3707, 0x3ae1, 0x37ae, 0x389d, 0x37fa, 0x3673, 0x3278, 0xf3e, 0x3809, 0x33c6, 0x3bf5, 0x3279, 0x3816, 0x360c, 0x39c8, 0x381f, 0x3741, 0x2d66, 0x38c0, 0x37d3, 0x377a, 0x3621, 0x2faf, 0x392e, 0x2de6, 0x33c5, +0x3803, 0x2600, 0x32e9, 0x39b4, 0x38d2, 0x34e8, 0x2fe6, 0x3199, 0x3643, 0x3a77, 0x27cc, 0x39d7, 0x34c6, 0x2ea8, 0x364e, 0x3b07, 0x31c7, 0x30a1, 0x31b1, 0x3b8f, 0x3571, 0x3b75, 0x3989, 0x3805, 0x39fb, 0x3945, 0x352b, 0x31d8, 0x3904, 0x3440, 0x3a57, 0x2cf7, +0x3b39, 0x2fcd, 0x2b89, 0x2edd, 0x3682, 0x36a9, 0x32c8, 0x37ac, 0x32a5, 0x3311, 0x394b, 0x3b84, 0x3aec, 0x3601, 0x2765, 0x3b69, 0x396b, 0x3727, 0x3bfe, 0x3907, 0x376f, 0x3674, 0x3973, 0x3671, 0x3491, 0x3993, 0x383f, 0x3335, 0x3989, 0x3550, 0x3077, 0x35f5, +0x3a59, 0x3950, 0x380c, 0x37cd, 0x30bf, 0x3607, 0x3afa, 0x3b5d, 0x32b9, 0x386b, 0x35bd, 0x3aca, 0x3ba5, 0x3b2d, 0x3b19, 0x3b8b, 0x345e, 0x2845, 0x34aa, 0x372a, 0x3448, 0x34f5, 0x3ae2, 0x3637, 0x2cb5, 0x354b, 0x3b15, 0x2ca8, 0x2641, 0x3178, 0x2cfe, 0x39b4, +0x3bdd, 0x3acb, 0x3a05, 0x38a2, 0x3b4a, 0x34e5, 0x395f, 0x394b, 0x34c4, 0x3aa5, 0x29bb, 0x2d96, 0x339d, 0x387c, 0x382e, 0x385a, 0x396b, 0x3aa9, 0x2f1e, 0x33a7, 0x3b90, 0x3b7b, 0x3b5f, 0x39d3, 0x3b18, 0x354f, 0x2cdb, 0x3a6f, 0x3434, 0x34ff, 0x3a5b, 0x3b84, +0x3a33, 0x384b, 0x2e67, 0x3b85, 0x3853, 0x380c, 0x346a, 0x3aaa, 0x3492, 0x33e8, 0x3bf2, 0x38ae, 0x3a29, 0x3830, 0x3221, 0x35b1, 0x3a48, 0x2c68, 0x2ced, 0x3a7e, 0x3539, 0x3922, 0x374c, 0x3aaa, 0x2dae, 0x395d, 0x3b3d, 0x3890, 0x2cfe, 0x2dd6, 0x3bad, 0x33c5, +0x2c07, 0x3a2c, 0x37a8, 0x390f, 0x2fc8, 0x35ae, 0x388c, 0x30ee, 0x3674, 0x391d, 0x3bfc, 0x36bf, 0x322d, 0x3a78, 0x35c0, 0x3492, 0x3ac8, 0x3504, 0x3315, 0x381d, 0x3a7a, 0x3a08, 0x343c, 0x3bda, 0x341b, 0x39f0, 0x3b9e, 0x395d, 0x3c00, 0x38ab, 0x3bcf, 0x3564, +0x33c4, 0x3b0d, 0x3623, 0x33b9, 0x3b92, 0x1e71, 0x2c57, 0x36d0, 0x314b, 0x3a16, 0x3372, 0x341b, 0x3aaa, 0x3444, 0x396b, 0x2dd7, 0x3b30, 0x3559, 0x3b5b, 0x3a29, 0x2d19, 0x38b7, 0x3b01, 0x3afa, 0x398a, 0x3839, 0x3ac9, 0x2e31, 0x3924, 0x39f2, 0x3a7f, 0x3285 +}; \ No newline at end of file diff --git a/hwpe/redmule_softclear/inc/w_input.h b/hwpe/redmule_softclear/inc/w_input.h new file mode 100644 index 0000000..dc4d3be --- /dev/null +++ b/hwpe/redmule_softclear/inc/w_input.h @@ -0,0 +1,35 @@ + /* Header file generated by RedMulE Golden Model */ +uint16_t w_inp [1024] = { +0x311a, 0x39e0, 0x387d, 0x3a4a, 0x386f, 0x3ada, 0x392f, 0x3854, 0x3014, 0x2fd2, 0x31c9, 0x2fca, 0x2e55, 0x3bc8, 0x396d, 0x3b1d, 0x39f6, 0x333a, 0x3908, 0x3628, 0x3bab, 0x3b8b, 0x3b4a, 0x322d, 0x3925, 0x317a, 0x3725, 0x31c2, 0x3066, 0x38f3, 0x3a17, 0x3476, +0x3bda, 0x3196, 0x3922, 0x3680, 0x396a, 0x3021, 0x3761, 0x374d, 0x2fc2, 0x3967, 0x3b94, 0x33b5, 0x3797, 0x34d6, 0x3655, 0x2176, 0x39bc, 0x3999, 0x3658, 0x3904, 0x3759, 0x2ade, 0x3a5a, 0x3b78, 0x36c7, 0x2d01, 0x3b58, 0x2d9a, 0x373d, 0x3952, 0x38e8, 0x3887, +0x37b6, 0x3a88, 0x2f8a, 0x2d79, 0x3413, 0x3421, 0x3976, 0x32b2, 0x3446, 0x2d99, 0x3a56, 0x3322, 0x3b49, 0x39fa, 0x3acd, 0x3af6, 0x304c, 0x3abb, 0x3a83, 0x38b2, 0x3ab9, 0x363e, 0x389f, 0x31bb, 0x38e1, 0x3bc4, 0x3b9b, 0x2984, 0x3a43, 0x3b2f, 0x35d6, 0x3bda, +0x2df3, 0x3bf8, 0x2acc, 0x378b, 0x3555, 0x2e59, 0x31d4, 0x34ec, 0x3a46, 0x3bab, 0x3214, 0x3161, 0x3470, 0x3a03, 0x368e, 0x31ad, 0x27cb, 0x2ecb, 0x3422, 0x39f7, 0x3644, 0x3a77, 0x313f, 0x34f2, 0x39b3, 0x3bf2, 0x379a, 0x3456, 0x35fe, 0x3ae7, 0x3964, 0x385f, +0x3b16, 0x3999, 0x3833, 0x2eda, 0x3afd, 0x3a4a, 0x3ba2, 0x2bd4, 0x3b38, 0x31a2, 0x32dd, 0x353c, 0x366f, 0x375e, 0x3821, 0x367a, 0x3b44, 0x39e6, 0x3787, 0x339e, 0x39d7, 0x38c6, 0x37d5, 0x342f, 0x3984, 0x319b, 0x33b5, 0x35ab, 0x398a, 0x374e, 0x36b6, 0x3b21, +0x3bbb, 0x2ab3, 0x2ad5, 0x33bc, 0x2bef, 0x3780, 0x3738, 0x3a0b, 0x3b09, 0x30ca, 0x384e, 0x3ab3, 0x39bd, 0x3453, 0x3a6d, 0x3957, 0x2c10, 0x30e9, 0x35d4, 0x3aef, 0x3be9, 0x39ad, 0x3a74, 0x3af9, 0x3739, 0x2d4d, 0x39fe, 0x3b72, 0x2c57, 0x398c, 0x381f, 0x3930, +0x3820, 0x321b, 0x3964, 0x2964, 0x33a0, 0x2d00, 0x2490, 0x336b, 0x3465, 0x3b2e, 0x3aa0, 0x371f, 0x300e, 0x3a09, 0x3bf1, 0x25cc, 0x3b6f, 0x3384, 0x3a88, 0x3acb, 0x3814, 0x36d0, 0x3081, 0x3a2c, 0x3353, 0x39cb, 0x31ed, 0x3af6, 0x3721, 0x36c7, 0x2ce2, 0x390d, +0x3698, 0x3ab2, 0x3b3e, 0x2eb4, 0x3998, 0x39e3, 0x3a77, 0x3632, 0x2c12, 0x3bd5, 0x3ba3, 0x3bba, 0x323c, 0x367b, 0x3557, 0x39c8, 0x37db, 0x3b45, 0x3b6e, 0x3931, 0x3121, 0x3a8d, 0x3a55, 0x3b9b, 0x358a, 0x3925, 0x3491, 0x3912, 0x3b6b, 0x3584, 0x32df, 0x3120, +0x32b2, 0x3b0a, 0x2cad, 0x3465, 0x3ad3, 0x3bcd, 0x363b, 0x3afe, 0x354b, 0x3374, 0x39af, 0x3b7f, 0x308c, 0x2e72, 0x3380, 0x3b70, 0x3902, 0x38d8, 0x39f3, 0x3a4b, 0x3853, 0x397b, 0x2ebe, 0x387f, 0x2845, 0x37e2, 0x360f, 0x370b, 0x3acb, 0x35d4, 0x36e6, 0x3262, +0x2e88, 0x3a54, 0x2ee3, 0x3575, 0x3afe, 0x2aee, 0x39a0, 0x3aae, 0x3693, 0x3432, 0x3834, 0x3b9b, 0x3bcb, 0x2e3a, 0x356d, 0x374e, 0x3924, 0x383c, 0x311e, 0x3ac5, 0x352d, 0x311e, 0x38ca, 0x34d4, 0x36ca, 0x34ed, 0x3a13, 0x33eb, 0x3639, 0x3828, 0x3b3c, 0x3939, +0x3837, 0x3521, 0x2cb5, 0x3629, 0x3924, 0x384c, 0x366a, 0x3bbf, 0x2e9e, 0x3ba8, 0x33ad, 0x38c8, 0x3934, 0x3907, 0x249a, 0x3690, 0x3a09, 0x3215, 0x3898, 0x325d, 0x37d5, 0x3195, 0x361c, 0x3ae4, 0x351f, 0x3452, 0x3bc0, 0x375c, 0x39bf, 0x317a, 0x3aae, 0x283a, +0x3476, 0x3b92, 0x3472, 0x383e, 0x280f, 0x39d6, 0x2fd1, 0x31f4, 0x2ffb, 0x3b97, 0x3692, 0x36c0, 0x3989, 0x33cf, 0x3ba6, 0x3239, 0x35d7, 0x33ab, 0x31eb, 0x3b47, 0x389b, 0x3b88, 0x3580, 0x354c, 0x3802, 0x3b9a, 0x3b94, 0x2a92, 0x2db1, 0x38bd, 0x2dfb, 0x3900, +0x344f, 0x3739, 0x27a5, 0x3b2e, 0x342b, 0x34bb, 0x30c8, 0x3ae8, 0x3b26, 0x3982, 0x38c0, 0x3408, 0x38c8, 0x36ef, 0x3bf0, 0x3acf, 0x3a3c, 0x3825, 0x31a5, 0x3ada, 0x3b5b, 0x37db, 0x3a01, 0x3663, 0x3a7d, 0x327b, 0x3a1f, 0x3862, 0x38af, 0x3204, 0x372e, 0x3b19, +0x3708, 0x3622, 0x2e62, 0x39ab, 0x2d4d, 0x31b4, 0x3552, 0x3bbc, 0x36f2, 0x36eb, 0x38ef, 0x3755, 0x3bbe, 0x2c17, 0x3815, 0x2f53, 0x363f, 0x38c1, 0x3246, 0x386b, 0x34de, 0x34e4, 0x3baa, 0x349e, 0x32ce, 0x3a68, 0x373f, 0x2cce, 0x3b36, 0x28ba, 0x3b50, 0x3232, +0x1f34, 0x3928, 0x35cd, 0x3b38, 0x30ce, 0x35a1, 0x3a06, 0x3a32, 0x3a53, 0x3489, 0x3241, 0x372f, 0x390c, 0x3a1b, 0x378a, 0x3713, 0x3769, 0x37a8, 0x3418, 0x3ad4, 0x3a4e, 0x3bf7, 0x37a5, 0x34dc, 0x39b2, 0x351b, 0x3372, 0x349f, 0x2f50, 0x3ab1, 0x3795, 0x2db7, +0x3864, 0x3157, 0x3900, 0x323e, 0x389e, 0x3880, 0x3b1f, 0x37a1, 0x396c, 0x2e43, 0x2c2a, 0x3b78, 0x3988, 0x3a14, 0x39c1, 0x3b51, 0x3780, 0x3bf2, 0x2d19, 0x3815, 0x3a5f, 0x3641, 0x2f62, 0x37d5, 0x3564, 0x139a, 0x3ab8, 0x28f7, 0x3785, 0x34e1, 0x3097, 0x3768, +0x3971, 0x3ae2, 0x32ae, 0x2fd5, 0x382a, 0x346c, 0x3133, 0x3167, 0x3940, 0x2d12, 0x389a, 0x3bd0, 0x3943, 0x391c, 0x3a75, 0x2a11, 0x391e, 0x372d, 0x3a79, 0x3b72, 0x3373, 0x39b7, 0x35d7, 0x372b, 0x3a6d, 0x38a1, 0x3279, 0x3434, 0x3694, 0x3b45, 0x3abb, 0x392d, +0x34a8, 0x3757, 0x32ca, 0x345d, 0x36a5, 0x3854, 0x2dcd, 0x30af, 0x38dd, 0x3067, 0x3411, 0x3997, 0x397a, 0x3a64, 0x38b8, 0x3962, 0x3509, 0x3bb6, 0x3a66, 0x339f, 0x372a, 0x31a8, 0x37da, 0x36ff, 0x33c6, 0x31da, 0x3977, 0x3b72, 0x3841, 0x3567, 0x3433, 0x33b8, +0x39fe, 0x3a10, 0x3bf2, 0x35e7, 0x3a4a, 0x3b3e, 0x2ec7, 0x3aa4, 0x3846, 0x3af9, 0x38a9, 0x2c1f, 0x39ab, 0x349f, 0x31d6, 0x39ae, 0x3b79, 0x352d, 0x3516, 0x347c, 0x2f33, 0x35ad, 0x31c4, 0x3b52, 0x354b, 0x3786, 0x3ab7, 0x3896, 0x34ac, 0x352f, 0x37e6, 0x326a, +0x2e44, 0x34c7, 0x388d, 0x3bf4, 0x363f, 0x3b3d, 0x33b1, 0x3b8b, 0x3340, 0x37f7, 0x3b07, 0x25bf, 0x398e, 0x3505, 0x3bd7, 0x366d, 0x388a, 0x2cc0, 0x359a, 0x3b9a, 0x3b99, 0x379d, 0x3b6b, 0x39b8, 0x3223, 0x2703, 0x3ba9, 0x2ecb, 0x3759, 0x39d8, 0x37ac, 0x32cf, +0x35f2, 0x38a3, 0x399e, 0x3bd2, 0x3780, 0x3af3, 0x3b5e, 0x337b, 0x3a08, 0x35da, 0x3446, 0x3b25, 0x3ad0, 0x3bee, 0x3141, 0x32d8, 0x34ce, 0x2ac9, 0x3800, 0x3a8a, 0x2d53, 0x368a, 0x3561, 0x3998, 0x35a3, 0x3677, 0x3ab2, 0x3269, 0x3236, 0x3b3e, 0x3aba, 0x3bac, +0x395d, 0x3820, 0x1df6, 0x3bb5, 0x35b5, 0x3675, 0x3b74, 0x360f, 0x34de, 0x3a0c, 0x3aeb, 0x299d, 0x3207, 0x3bd8, 0x2178, 0x3995, 0x3948, 0x3908, 0x3843, 0x2ea5, 0x3045, 0x3989, 0x345d, 0x39c5, 0x3a89, 0x3863, 0x3be0, 0x397a, 0x38f1, 0x39e2, 0x3b08, 0x352e, +0x385f, 0x28f2, 0x3bc3, 0x35e0, 0x380c, 0x3b9c, 0x3afc, 0x390a, 0x3689, 0x34fd, 0x2cf5, 0x308e, 0x342b, 0x3921, 0x3a67, 0x3ad6, 0x2986, 0x32fc, 0x35aa, 0x3507, 0x3608, 0x33fd, 0x3bf3, 0x39e2, 0x3b0f, 0x30b7, 0x3896, 0x3ae4, 0x2145, 0x35b6, 0x2e1d, 0x3ad1, +0x333d, 0x3afb, 0x2703, 0x3413, 0x1d7d, 0x3b7f, 0x3ae1, 0x303c, 0x3004, 0x39d3, 0x3554, 0x31a4, 0x354e, 0x3662, 0x39c5, 0x2eb7, 0x2c6e, 0x397f, 0x31d8, 0x1f0c, 0x38e3, 0x35f0, 0x2714, 0x28d1, 0x375e, 0x3a75, 0x3830, 0x3578, 0x397d, 0x3b18, 0x383c, 0x3498, +0x39ad, 0x3598, 0x23c4, 0x34ea, 0x3a61, 0x2b00, 0x3707, 0x3ae1, 0x37ae, 0x389d, 0x37fa, 0x3673, 0x3278, 0xf3e, 0x3809, 0x33c6, 0x3bf5, 0x3279, 0x3816, 0x360c, 0x39c8, 0x381f, 0x3741, 0x2d66, 0x38c0, 0x37d3, 0x377a, 0x3621, 0x2faf, 0x392e, 0x2de6, 0x33c5, +0x3803, 0x2600, 0x32e9, 0x39b4, 0x38d2, 0x34e8, 0x2fe6, 0x3199, 0x3643, 0x3a77, 0x27cc, 0x39d7, 0x34c6, 0x2ea8, 0x364e, 0x3b07, 0x31c7, 0x30a1, 0x31b1, 0x3b8f, 0x3571, 0x3b75, 0x3989, 0x3805, 0x39fb, 0x3945, 0x352b, 0x31d8, 0x3904, 0x3440, 0x3a57, 0x2cf7, +0x3b39, 0x2fcd, 0x2b89, 0x2edd, 0x3682, 0x36a9, 0x32c8, 0x37ac, 0x32a5, 0x3311, 0x394b, 0x3b84, 0x3aec, 0x3601, 0x2765, 0x3b69, 0x396b, 0x3727, 0x3bfe, 0x3907, 0x376f, 0x3674, 0x3973, 0x3671, 0x3491, 0x3993, 0x383f, 0x3335, 0x3989, 0x3550, 0x3077, 0x35f5, +0x3a59, 0x3950, 0x380c, 0x37cd, 0x30bf, 0x3607, 0x3afa, 0x3b5d, 0x32b9, 0x386b, 0x35bd, 0x3aca, 0x3ba5, 0x3b2d, 0x3b19, 0x3b8b, 0x345e, 0x2845, 0x34aa, 0x372a, 0x3448, 0x34f5, 0x3ae2, 0x3637, 0x2cb5, 0x354b, 0x3b15, 0x2ca8, 0x2641, 0x3178, 0x2cfe, 0x39b4, +0x3bdd, 0x3acb, 0x3a05, 0x38a2, 0x3b4a, 0x34e5, 0x395f, 0x394b, 0x34c4, 0x3aa5, 0x29bb, 0x2d96, 0x339d, 0x387c, 0x382e, 0x385a, 0x396b, 0x3aa9, 0x2f1e, 0x33a7, 0x3b90, 0x3b7b, 0x3b5f, 0x39d3, 0x3b18, 0x354f, 0x2cdb, 0x3a6f, 0x3434, 0x34ff, 0x3a5b, 0x3b84, +0x3a33, 0x384b, 0x2e67, 0x3b85, 0x3853, 0x380c, 0x346a, 0x3aaa, 0x3492, 0x33e8, 0x3bf2, 0x38ae, 0x3a29, 0x3830, 0x3221, 0x35b1, 0x3a48, 0x2c68, 0x2ced, 0x3a7e, 0x3539, 0x3922, 0x374c, 0x3aaa, 0x2dae, 0x395d, 0x3b3d, 0x3890, 0x2cfe, 0x2dd6, 0x3bad, 0x33c5, +0x2c07, 0x3a2c, 0x37a8, 0x390f, 0x2fc8, 0x35ae, 0x388c, 0x30ee, 0x3674, 0x391d, 0x3bfc, 0x36bf, 0x322d, 0x3a78, 0x35c0, 0x3492, 0x3ac8, 0x3504, 0x3315, 0x381d, 0x3a7a, 0x3a08, 0x343c, 0x3bda, 0x341b, 0x39f0, 0x3b9e, 0x395d, 0x3c00, 0x38ab, 0x3bcf, 0x3564, +0x33c4, 0x3b0d, 0x3623, 0x33b9, 0x3b92, 0x1e71, 0x2c57, 0x36d0, 0x314b, 0x3a16, 0x3372, 0x341b, 0x3aaa, 0x3444, 0x396b, 0x2dd7, 0x3b30, 0x3559, 0x3b5b, 0x3a29, 0x2d19, 0x38b7, 0x3b01, 0x3afa, 0x398a, 0x3839, 0x3ac9, 0x2e31, 0x3924, 0x39f2, 0x3a7f, 0x3285 +}; \ No newline at end of file diff --git a/hwpe/redmule_softclear/inc/x_2D.h b/hwpe/redmule_softclear/inc/x_2D.h new file mode 100644 index 0000000..0b589f8 --- /dev/null +++ b/hwpe/redmule_softclear/inc/x_2D.h @@ -0,0 +1,27 @@ + /* Header file generated by RedMulE Golden Model */ +uint16_t x_inp_2D [24][32] = { +0x2153, 0x3bb5, 0x3896, 0x365f, 0x2483, 0x3518, 0x2dd1, 0x3bca, 0x397b, 0x29b1, 0x3705, 0x36c8, 0x398b, 0x3661, 0x2f05, 0x365a, 0x3bf9, 0x34df, 0x363b, 0x38d9, 0x39c6, 0x3abb, 0x3952, 0x38f2, 0x392d, 0x3b3e, 0x2afb, 0x3a9d, 0x353b, 0x3b73, 0x3a01, 0x3679, +0x3934, 0x397d, 0x2904, 0x3822, 0x3462, 0x3b44, 0x39e9, 0x28be, 0x331e, 0x3a1d, 0x39e5, 0x34da, 0x3a19, 0x3906, 0x1d35, 0x3871, 0x31e7, 0x3b29, 0x325d, 0x3797, 0x2b2f, 0x38b4, 0x232f, 0x38aa, 0x3aca, 0x316f, 0x3811, 0x3950, 0x32ea, 0x3bc7, 0x382c, 0x38a2, +0x29ce, 0x3afa, 0x3a39, 0x2ccc, 0x39fd, 0x3b3d, 0x384a, 0x3a35, 0x3802, 0x366a, 0x37ec, 0x3598, 0x3bf8, 0x3a85, 0x3a1b, 0x386e, 0x3b4c, 0x39de, 0x38c2, 0x2f93, 0x3b4c, 0x39c4, 0x3b9e, 0x3844, 0x346d, 0x3bff, 0x32ce, 0x296d, 0x3130, 0x3b3d, 0x3b44, 0x369d, +0x3b13, 0x31ed, 0x330a, 0x3831, 0x34e7, 0x37b3, 0x331a, 0x3918, 0x32d3, 0x3995, 0x3991, 0x3919, 0x3a26, 0x385b, 0x2b76, 0x3a3b, 0x37f2, 0x26a7, 0x3225, 0x3b64, 0x28f0, 0x3456, 0x3822, 0x341e, 0x381a, 0x38d8, 0x2c11, 0x33be, 0x33ac, 0x353f, 0x3476, 0x3abc, +0x36ec, 0x3a1d, 0x39d3, 0x3821, 0x36ac, 0x3bce, 0x3ad2, 0x3616, 0x36a1, 0x2cb3, 0x38d2, 0x314f, 0x385c, 0x3b63, 0x3bb6, 0x2951, 0x372d, 0x2c42, 0x3823, 0x3883, 0x3872, 0x31ee, 0x36c5, 0x399a, 0x31b0, 0x3887, 0x3884, 0x3865, 0x3896, 0x36c3, 0x32e3, 0x346c, +0x3935, 0x3b50, 0x2b6d, 0x38cd, 0x388f, 0x3389, 0x395d, 0x31cd, 0x2efd, 0x3154, 0x2f35, 0x3444, 0x3293, 0x3b6b, 0x1bec, 0x3b69, 0x3bf3, 0x3611, 0x3508, 0x3742, 0x3a50, 0x3ab7, 0x3457, 0x38d3, 0x3344, 0x38e8, 0x33c0, 0x3668, 0x3bee, 0x3b21, 0x3727, 0x3121, +0x316c, 0x3288, 0x2d50, 0x2e74, 0x35d5, 0x37e2, 0x303d, 0x36af, 0x341f, 0x3436, 0x2df7, 0x399d, 0x30f4, 0x3aaf, 0x34e4, 0x2c2a, 0x3116, 0x34d3, 0x36ac, 0x35e3, 0x3760, 0x36e1, 0x3ad2, 0x3547, 0x38f4, 0x369c, 0x3ba9, 0x34f0, 0x3a39, 0x3b19, 0x36e6, 0x395d, +0x3be8, 0x3293, 0x3bfc, 0x3435, 0x2eb3, 0x3360, 0x3919, 0x3bed, 0x396a, 0x37fc, 0x3242, 0x384b, 0x38cb, 0x3b2c, 0x3b28, 0x28cf, 0x3828, 0x3855, 0x3ba9, 0x2fa7, 0x340b, 0x32f1, 0x3ada, 0x36fa, 0x31f5, 0x3436, 0x29d0, 0x33e6, 0x3232, 0x3bec, 0x3904, 0x2797, +0x3b81, 0x3bac, 0x38d2, 0x343d, 0x31af, 0x3b1e, 0x33fc, 0x3864, 0x3624, 0x3905, 0x2945, 0x3b52, 0x2d08, 0x3a17, 0x3b84, 0x3804, 0x3a24, 0x38a3, 0x3562, 0x3ae6, 0x3bba, 0x3a45, 0x3679, 0x31fa, 0x3994, 0x2c3d, 0x383f, 0x399d, 0x34f7, 0x360e, 0x35f3, 0x38f0, +0x38d4, 0x399a, 0x3a48, 0x3987, 0x3b54, 0x382c, 0x3210, 0x35ef, 0x36ca, 0x31b4, 0x3625, 0x371f, 0x37bd, 0x3680, 0x3a3a, 0x3ac0, 0x3bbf, 0x3bf5, 0x39f2, 0x29c2, 0x363e, 0x3a4e, 0x3596, 0x3b1b, 0x3459, 0x3669, 0x3aa1, 0x39c3, 0x3376, 0x390d, 0x2456, 0x39b5, +0x3a66, 0x3ad8, 0x3b51, 0x36aa, 0x32be, 0x3ac8, 0x392b, 0x3740, 0x3a48, 0x38f5, 0x3b2d, 0x3a5f, 0x2ff3, 0x366f, 0x39d3, 0x35e5, 0x3822, 0x38db, 0x3b8a, 0x34be, 0x2d33, 0x36dd, 0x3578, 0x3bdf, 0x2c7e, 0x39cf, 0x32ff, 0x35c9, 0x3970, 0x3bcb, 0x351e, 0x3956, +0x2c42, 0x3308, 0x377a, 0x361c, 0x39a0, 0x36c9, 0x2dcb, 0x3bf2, 0x3b5f, 0x33ee, 0x24c1, 0x2ce9, 0x3927, 0x305d, 0x3702, 0x3119, 0x35f9, 0x3855, 0x3374, 0x349b, 0x3bcf, 0x2dea, 0x34f0, 0x363f, 0x37da, 0x3a74, 0x35fc, 0x35fa, 0x316b, 0x3804, 0x37a7, 0x3986, +0x3073, 0x3aed, 0x31c7, 0x3844, 0x34a4, 0x387d, 0x3a20, 0x3037, 0x3a00, 0x3b70, 0x377f, 0x3686, 0x3b7e, 0x38b3, 0x32e3, 0x3323, 0x391e, 0x3228, 0x3930, 0x3997, 0x3a5e, 0x398b, 0x3512, 0x35b0, 0x365c, 0x325d, 0x3b61, 0x38b8, 0x39a4, 0x3423, 0x3bd7, 0x38af, +0x2d3d, 0x382d, 0x38ac, 0x26ca, 0x395e, 0x21a8, 0x3520, 0x386f, 0x3b95, 0x32c0, 0x3b84, 0x3a51, 0x3b4b, 0x31d2, 0x3747, 0x3b96, 0x3b40, 0x3535, 0x38d1, 0x3899, 0x3b00, 0x3827, 0x3ae3, 0x38c8, 0x3a07, 0x338d, 0x2e96, 0x3a46, 0x394a, 0x39de, 0x2951, 0x3a02, +0x3838, 0x2d45, 0x28c0, 0x3958, 0x3070, 0x2aa2, 0x3510, 0x38ce, 0x271c, 0x3440, 0x3954, 0x30bc, 0x3b35, 0x2f1d, 0x3afb, 0x2dae, 0x356f, 0x2e13, 0x3981, 0x326d, 0x3a28, 0x3a36, 0x3a95, 0x38cb, 0x38db, 0x3150, 0x2c9e, 0x34c5, 0x3adb, 0x3bdf, 0x38f2, 0x3994, +0x36f8, 0x31c0, 0x3a4f, 0x3825, 0x394b, 0x3a8b, 0x38ac, 0x3167, 0x2e2d, 0x3a93, 0x34f3, 0x37bd, 0x3b63, 0x2f2f, 0x3ae0, 0x3ad8, 0x34a8, 0x2e1c, 0x3890, 0x3705, 0x3b69, 0x3bc1, 0x28af, 0x3b36, 0x348b, 0x3111, 0x3a8d, 0x389c, 0x3916, 0x36dc, 0x3bae, 0x3874, +0x3593, 0x3638, 0x3018, 0x3a56, 0x38a3, 0x2ad4, 0x3a25, 0x38d7, 0x3864, 0x31c1, 0x28d1, 0x39c8, 0x37d6, 0x2c7f, 0x3ba5, 0x34b8, 0x3bef, 0x3b83, 0x3ab5, 0x3062, 0x38bc, 0x399c, 0x2ce4, 0x2f2c, 0x39bf, 0x2ed1, 0x385f, 0x37e0, 0x35ee, 0x397d, 0x3b0c, 0x3049, +0x39d5, 0x322e, 0x3936, 0x3747, 0x2e15, 0x3b41, 0x3874, 0x3bd0, 0x2c04, 0x3800, 0x375b, 0x3b2d, 0x38d8, 0x3a51, 0x3406, 0x38da, 0x38ba, 0x3497, 0x382e, 0x35fc, 0x39d4, 0x3775, 0x3b1e, 0x3813, 0x3649, 0x31af, 0x37bb, 0x334a, 0x3a6e, 0x3284, 0x26e0, 0x2e01, +0x2ebb, 0x344b, 0x3821, 0x381a, 0x385a, 0x2534, 0x3635, 0x2a92, 0x3b8c, 0x31f0, 0x3947, 0x3ac7, 0x3743, 0x3924, 0x39e4, 0x358f, 0x2b62, 0x392c, 0x3955, 0x3341, 0x3676, 0x38ac, 0x3957, 0x335b, 0x2ca2, 0x39ff, 0x37cb, 0x341f, 0x3ac9, 0x3b6c, 0x2f14, 0x34c3, +0x3018, 0x3169, 0x355b, 0x3624, 0x31ed, 0x379e, 0x3268, 0x309b, 0x35db, 0x3872, 0x3bdb, 0x34c7, 0x3408, 0x3359, 0x3920, 0x331f, 0x3866, 0x3af0, 0x2a1a, 0x39e0, 0x3b14, 0x34fa, 0x2d18, 0x3963, 0x35e8, 0x2539, 0x38f5, 0x37b3, 0x378f, 0x31b5, 0x3a6c, 0x3685, +0x3a06, 0x318a, 0x2934, 0x33c1, 0x3be8, 0x375b, 0x3860, 0x3543, 0x3702, 0x3951, 0x3677, 0x37ff, 0x2e27, 0x2e3a, 0x340f, 0x3817, 0x2f04, 0x357e, 0x3a1d, 0x2dd6, 0x252a, 0x3945, 0x162a, 0x3b19, 0x3a53, 0x35d2, 0x3a5d, 0x3474, 0x38e9, 0x374b, 0x387c, 0x1f1a, +0x38ac, 0x3291, 0x3393, 0x3b53, 0x3169, 0x3bca, 0x2f1a, 0x3551, 0x38a3, 0x28e3, 0x369d, 0x34a1, 0x38a8, 0x34c3, 0x3841, 0x390d, 0x3b13, 0x3282, 0x3a29, 0x3a78, 0x2df3, 0x3a37, 0x35f4, 0x35a6, 0x38e8, 0x3328, 0x3beb, 0x390b, 0x32dc, 0x34dc, 0x396d, 0x3a78, +0x39ba, 0x3a06, 0x2cdd, 0x3bc3, 0x2d43, 0x2992, 0x3663, 0x3a68, 0x2c3e, 0x394e, 0x2c9f, 0x380e, 0x37f5, 0x3557, 0x2873, 0x390f, 0x39e7, 0x3939, 0x3669, 0x385c, 0x3a68, 0x32c4, 0x2b04, 0x2d6d, 0x39d3, 0x3895, 0x331d, 0x3b59, 0x3463, 0x2b6a, 0x31de, 0x3296, +0x3aae, 0x3bcd, 0x345a, 0x3897, 0x374b, 0x3bd4, 0x38a2, 0x357f, 0x3402, 0x3a0c, 0x3507, 0x3865, 0x3a54, 0x3878, 0x3859, 0x383e, 0x32b5, 0x34ea, 0x328d, 0x38b6, 0x3464, 0x2f5b, 0x35ff, 0x3817, 0x2f24, 0x3533, 0x3b21, 0x37ba, 0x3837, 0x2e34, 0x3bad, 0x34bc +}; \ No newline at end of file diff --git a/hwpe/redmule_softclear/inc/x_input.h b/hwpe/redmule_softclear/inc/x_input.h new file mode 100644 index 0000000..1e38d23 --- /dev/null +++ b/hwpe/redmule_softclear/inc/x_input.h @@ -0,0 +1,27 @@ + /* Header file generated by RedMulE Golden Model */ +uint16_t x_inp [768] = { +0x2153, 0x3bb5, 0x3896, 0x365f, 0x2483, 0x3518, 0x2dd1, 0x3bca, 0x397b, 0x29b1, 0x3705, 0x36c8, 0x398b, 0x3661, 0x2f05, 0x365a, 0x3bf9, 0x34df, 0x363b, 0x38d9, 0x39c6, 0x3abb, 0x3952, 0x38f2, 0x392d, 0x3b3e, 0x2afb, 0x3a9d, 0x353b, 0x3b73, 0x3a01, 0x3679, +0x3934, 0x397d, 0x2904, 0x3822, 0x3462, 0x3b44, 0x39e9, 0x28be, 0x331e, 0x3a1d, 0x39e5, 0x34da, 0x3a19, 0x3906, 0x1d35, 0x3871, 0x31e7, 0x3b29, 0x325d, 0x3797, 0x2b2f, 0x38b4, 0x232f, 0x38aa, 0x3aca, 0x316f, 0x3811, 0x3950, 0x32ea, 0x3bc7, 0x382c, 0x38a2, +0x29ce, 0x3afa, 0x3a39, 0x2ccc, 0x39fd, 0x3b3d, 0x384a, 0x3a35, 0x3802, 0x366a, 0x37ec, 0x3598, 0x3bf8, 0x3a85, 0x3a1b, 0x386e, 0x3b4c, 0x39de, 0x38c2, 0x2f93, 0x3b4c, 0x39c4, 0x3b9e, 0x3844, 0x346d, 0x3bff, 0x32ce, 0x296d, 0x3130, 0x3b3d, 0x3b44, 0x369d, +0x3b13, 0x31ed, 0x330a, 0x3831, 0x34e7, 0x37b3, 0x331a, 0x3918, 0x32d3, 0x3995, 0x3991, 0x3919, 0x3a26, 0x385b, 0x2b76, 0x3a3b, 0x37f2, 0x26a7, 0x3225, 0x3b64, 0x28f0, 0x3456, 0x3822, 0x341e, 0x381a, 0x38d8, 0x2c11, 0x33be, 0x33ac, 0x353f, 0x3476, 0x3abc, +0x36ec, 0x3a1d, 0x39d3, 0x3821, 0x36ac, 0x3bce, 0x3ad2, 0x3616, 0x36a1, 0x2cb3, 0x38d2, 0x314f, 0x385c, 0x3b63, 0x3bb6, 0x2951, 0x372d, 0x2c42, 0x3823, 0x3883, 0x3872, 0x31ee, 0x36c5, 0x399a, 0x31b0, 0x3887, 0x3884, 0x3865, 0x3896, 0x36c3, 0x32e3, 0x346c, +0x3935, 0x3b50, 0x2b6d, 0x38cd, 0x388f, 0x3389, 0x395d, 0x31cd, 0x2efd, 0x3154, 0x2f35, 0x3444, 0x3293, 0x3b6b, 0x1bec, 0x3b69, 0x3bf3, 0x3611, 0x3508, 0x3742, 0x3a50, 0x3ab7, 0x3457, 0x38d3, 0x3344, 0x38e8, 0x33c0, 0x3668, 0x3bee, 0x3b21, 0x3727, 0x3121, +0x316c, 0x3288, 0x2d50, 0x2e74, 0x35d5, 0x37e2, 0x303d, 0x36af, 0x341f, 0x3436, 0x2df7, 0x399d, 0x30f4, 0x3aaf, 0x34e4, 0x2c2a, 0x3116, 0x34d3, 0x36ac, 0x35e3, 0x3760, 0x36e1, 0x3ad2, 0x3547, 0x38f4, 0x369c, 0x3ba9, 0x34f0, 0x3a39, 0x3b19, 0x36e6, 0x395d, +0x3be8, 0x3293, 0x3bfc, 0x3435, 0x2eb3, 0x3360, 0x3919, 0x3bed, 0x396a, 0x37fc, 0x3242, 0x384b, 0x38cb, 0x3b2c, 0x3b28, 0x28cf, 0x3828, 0x3855, 0x3ba9, 0x2fa7, 0x340b, 0x32f1, 0x3ada, 0x36fa, 0x31f5, 0x3436, 0x29d0, 0x33e6, 0x3232, 0x3bec, 0x3904, 0x2797, +0x3b81, 0x3bac, 0x38d2, 0x343d, 0x31af, 0x3b1e, 0x33fc, 0x3864, 0x3624, 0x3905, 0x2945, 0x3b52, 0x2d08, 0x3a17, 0x3b84, 0x3804, 0x3a24, 0x38a3, 0x3562, 0x3ae6, 0x3bba, 0x3a45, 0x3679, 0x31fa, 0x3994, 0x2c3d, 0x383f, 0x399d, 0x34f7, 0x360e, 0x35f3, 0x38f0, +0x38d4, 0x399a, 0x3a48, 0x3987, 0x3b54, 0x382c, 0x3210, 0x35ef, 0x36ca, 0x31b4, 0x3625, 0x371f, 0x37bd, 0x3680, 0x3a3a, 0x3ac0, 0x3bbf, 0x3bf5, 0x39f2, 0x29c2, 0x363e, 0x3a4e, 0x3596, 0x3b1b, 0x3459, 0x3669, 0x3aa1, 0x39c3, 0x3376, 0x390d, 0x2456, 0x39b5, +0x3a66, 0x3ad8, 0x3b51, 0x36aa, 0x32be, 0x3ac8, 0x392b, 0x3740, 0x3a48, 0x38f5, 0x3b2d, 0x3a5f, 0x2ff3, 0x366f, 0x39d3, 0x35e5, 0x3822, 0x38db, 0x3b8a, 0x34be, 0x2d33, 0x36dd, 0x3578, 0x3bdf, 0x2c7e, 0x39cf, 0x32ff, 0x35c9, 0x3970, 0x3bcb, 0x351e, 0x3956, +0x2c42, 0x3308, 0x377a, 0x361c, 0x39a0, 0x36c9, 0x2dcb, 0x3bf2, 0x3b5f, 0x33ee, 0x24c1, 0x2ce9, 0x3927, 0x305d, 0x3702, 0x3119, 0x35f9, 0x3855, 0x3374, 0x349b, 0x3bcf, 0x2dea, 0x34f0, 0x363f, 0x37da, 0x3a74, 0x35fc, 0x35fa, 0x316b, 0x3804, 0x37a7, 0x3986, +0x3073, 0x3aed, 0x31c7, 0x3844, 0x34a4, 0x387d, 0x3a20, 0x3037, 0x3a00, 0x3b70, 0x377f, 0x3686, 0x3b7e, 0x38b3, 0x32e3, 0x3323, 0x391e, 0x3228, 0x3930, 0x3997, 0x3a5e, 0x398b, 0x3512, 0x35b0, 0x365c, 0x325d, 0x3b61, 0x38b8, 0x39a4, 0x3423, 0x3bd7, 0x38af, +0x2d3d, 0x382d, 0x38ac, 0x26ca, 0x395e, 0x21a8, 0x3520, 0x386f, 0x3b95, 0x32c0, 0x3b84, 0x3a51, 0x3b4b, 0x31d2, 0x3747, 0x3b96, 0x3b40, 0x3535, 0x38d1, 0x3899, 0x3b00, 0x3827, 0x3ae3, 0x38c8, 0x3a07, 0x338d, 0x2e96, 0x3a46, 0x394a, 0x39de, 0x2951, 0x3a02, +0x3838, 0x2d45, 0x28c0, 0x3958, 0x3070, 0x2aa2, 0x3510, 0x38ce, 0x271c, 0x3440, 0x3954, 0x30bc, 0x3b35, 0x2f1d, 0x3afb, 0x2dae, 0x356f, 0x2e13, 0x3981, 0x326d, 0x3a28, 0x3a36, 0x3a95, 0x38cb, 0x38db, 0x3150, 0x2c9e, 0x34c5, 0x3adb, 0x3bdf, 0x38f2, 0x3994, +0x36f8, 0x31c0, 0x3a4f, 0x3825, 0x394b, 0x3a8b, 0x38ac, 0x3167, 0x2e2d, 0x3a93, 0x34f3, 0x37bd, 0x3b63, 0x2f2f, 0x3ae0, 0x3ad8, 0x34a8, 0x2e1c, 0x3890, 0x3705, 0x3b69, 0x3bc1, 0x28af, 0x3b36, 0x348b, 0x3111, 0x3a8d, 0x389c, 0x3916, 0x36dc, 0x3bae, 0x3874, +0x3593, 0x3638, 0x3018, 0x3a56, 0x38a3, 0x2ad4, 0x3a25, 0x38d7, 0x3864, 0x31c1, 0x28d1, 0x39c8, 0x37d6, 0x2c7f, 0x3ba5, 0x34b8, 0x3bef, 0x3b83, 0x3ab5, 0x3062, 0x38bc, 0x399c, 0x2ce4, 0x2f2c, 0x39bf, 0x2ed1, 0x385f, 0x37e0, 0x35ee, 0x397d, 0x3b0c, 0x3049, +0x39d5, 0x322e, 0x3936, 0x3747, 0x2e15, 0x3b41, 0x3874, 0x3bd0, 0x2c04, 0x3800, 0x375b, 0x3b2d, 0x38d8, 0x3a51, 0x3406, 0x38da, 0x38ba, 0x3497, 0x382e, 0x35fc, 0x39d4, 0x3775, 0x3b1e, 0x3813, 0x3649, 0x31af, 0x37bb, 0x334a, 0x3a6e, 0x3284, 0x26e0, 0x2e01, +0x2ebb, 0x344b, 0x3821, 0x381a, 0x385a, 0x2534, 0x3635, 0x2a92, 0x3b8c, 0x31f0, 0x3947, 0x3ac7, 0x3743, 0x3924, 0x39e4, 0x358f, 0x2b62, 0x392c, 0x3955, 0x3341, 0x3676, 0x38ac, 0x3957, 0x335b, 0x2ca2, 0x39ff, 0x37cb, 0x341f, 0x3ac9, 0x3b6c, 0x2f14, 0x34c3, +0x3018, 0x3169, 0x355b, 0x3624, 0x31ed, 0x379e, 0x3268, 0x309b, 0x35db, 0x3872, 0x3bdb, 0x34c7, 0x3408, 0x3359, 0x3920, 0x331f, 0x3866, 0x3af0, 0x2a1a, 0x39e0, 0x3b14, 0x34fa, 0x2d18, 0x3963, 0x35e8, 0x2539, 0x38f5, 0x37b3, 0x378f, 0x31b5, 0x3a6c, 0x3685, +0x3a06, 0x318a, 0x2934, 0x33c1, 0x3be8, 0x375b, 0x3860, 0x3543, 0x3702, 0x3951, 0x3677, 0x37ff, 0x2e27, 0x2e3a, 0x340f, 0x3817, 0x2f04, 0x357e, 0x3a1d, 0x2dd6, 0x252a, 0x3945, 0x162a, 0x3b19, 0x3a53, 0x35d2, 0x3a5d, 0x3474, 0x38e9, 0x374b, 0x387c, 0x1f1a, +0x38ac, 0x3291, 0x3393, 0x3b53, 0x3169, 0x3bca, 0x2f1a, 0x3551, 0x38a3, 0x28e3, 0x369d, 0x34a1, 0x38a8, 0x34c3, 0x3841, 0x390d, 0x3b13, 0x3282, 0x3a29, 0x3a78, 0x2df3, 0x3a37, 0x35f4, 0x35a6, 0x38e8, 0x3328, 0x3beb, 0x390b, 0x32dc, 0x34dc, 0x396d, 0x3a78, +0x39ba, 0x3a06, 0x2cdd, 0x3bc3, 0x2d43, 0x2992, 0x3663, 0x3a68, 0x2c3e, 0x394e, 0x2c9f, 0x380e, 0x37f5, 0x3557, 0x2873, 0x390f, 0x39e7, 0x3939, 0x3669, 0x385c, 0x3a68, 0x32c4, 0x2b04, 0x2d6d, 0x39d3, 0x3895, 0x331d, 0x3b59, 0x3463, 0x2b6a, 0x31de, 0x3296, +0x3aae, 0x3bcd, 0x345a, 0x3897, 0x374b, 0x3bd4, 0x38a2, 0x357f, 0x3402, 0x3a0c, 0x3507, 0x3865, 0x3a54, 0x3878, 0x3859, 0x383e, 0x32b5, 0x34ea, 0x328d, 0x38b6, 0x3464, 0x2f5b, 0x35ff, 0x3817, 0x2f24, 0x3533, 0x3b21, 0x37ba, 0x3837, 0x2e34, 0x3bad, 0x34bc +}; \ No newline at end of file diff --git a/hwpe/redmule_softclear/inc/y_2D.h b/hwpe/redmule_softclear/inc/y_2D.h new file mode 100644 index 0000000..9484a10 --- /dev/null +++ b/hwpe/redmule_softclear/inc/y_2D.h @@ -0,0 +1,27 @@ + /* Header file generated by RedMulE Golden Model */ +uint16_t y_inp_2D [32][32] = { +0x3150, 0x2dc1, 0x3033, 0x31f5, 0x3bb6, 0x3bff, 0x39f9, 0x3662, 0x3720, 0x351d, 0x384b, 0x3093, 0x3b9d, 0x35ad, 0x3695, 0x3466, 0x2300, 0x3445, 0x33ae, 0x3586, 0x38a3, 0x3bdb, 0x33a2, 0x379b, 0x3a0e, 0x38b0, 0x39ba, 0x379b, 0x39d3, 0x3a51, 0x3b30, 0x3794, +0x3b76, 0x3042, 0x38cc, 0x2dfc, 0x3b1a, 0x37fb, 0x38f7, 0x3824, 0x386f, 0x38c7, 0x36ee, 0x3a9c, 0x38d3, 0x2c67, 0x3a80, 0x2f30, 0x3328, 0x3721, 0x3790, 0x34e5, 0x3a6c, 0x3643, 0x3934, 0x3034, 0x38d4, 0x362e, 0x3b4b, 0x3408, 0x30c2, 0x370e, 0x3b31, 0x3b16, +0x3b6b, 0x39d4, 0x339c, 0x381e, 0x313e, 0x3671, 0x3ae2, 0x3479, 0x3940, 0x342d, 0x3925, 0x370a, 0x35d8, 0x2dad, 0x3888, 0x24b9, 0x375d, 0x34bd, 0x3243, 0x2ebb, 0x3970, 0x3a21, 0x3a07, 0x3877, 0x3888, 0x3569, 0x372d, 0x2ac1, 0x331e, 0x384d, 0x3996, 0x34a4, +0x35c1, 0x33a9, 0x21ed, 0x3a42, 0x388d, 0x34e4, 0x33c3, 0x34f9, 0x3a7b, 0x33fb, 0x2cdd, 0x3b0e, 0x333b, 0x3973, 0x34fc, 0x3771, 0x32ea, 0x2de4, 0x31a8, 0x3946, 0x3657, 0x3a4e, 0x36f6, 0x2829, 0x3ba2, 0x3bdc, 0x3bb3, 0x306c, 0x398d, 0x3a1f, 0x3991, 0x3846, +0x3547, 0x3292, 0x2e85, 0x31ed, 0x3979, 0x3a90, 0x28a4, 0x3bed, 0x36d8, 0x340e, 0x3b6a, 0x3ab6, 0x3824, 0x382b, 0x3ac3, 0x3811, 0x36d7, 0x3519, 0x3a92, 0x3a42, 0x29d1, 0x383a, 0x3a9b, 0x300e, 0x2cd3, 0x39cd, 0x3874, 0x3a07, 0x2eb1, 0x3b86, 0x3ad8, 0x3a5d, +0x3712, 0x284a, 0x38c1, 0x3bec, 0x39c0, 0x32cd, 0x3ad8, 0x3bce, 0x3817, 0x3896, 0x3aa7, 0x3870, 0x3996, 0x32cc, 0x3a4c, 0x3757, 0x3814, 0x3b65, 0x3acb, 0x376e, 0x34c0, 0x3609, 0x3bf0, 0x3b24, 0x3b29, 0x3848, 0x34b7, 0x398a, 0x220c, 0x3498, 0x3a8c, 0x3883, +0x38c4, 0x3af6, 0x3a42, 0x2dd6, 0x3147, 0x3717, 0x3a8e, 0x3af9, 0x3296, 0x38ef, 0x34fa, 0x3555, 0x3b29, 0x38de, 0x315e, 0x3773, 0x3b67, 0x3116, 0x38ec, 0x357c, 0x35d0, 0x2518, 0x3958, 0x2a03, 0x37d9, 0x3699, 0x3a1e, 0x3230, 0x3b13, 0x36d4, 0x3b2a, 0x39ad, +0x3b10, 0x351a, 0x3b97, 0x3326, 0x2b54, 0x3b7d, 0x386f, 0x373e, 0x37fa, 0x389b, 0x3b90, 0x3292, 0x3975, 0x38f3, 0x37f1, 0x3590, 0x3810, 0x2fd7, 0x3bf7, 0x3a5a, 0x3a1c, 0x34dd, 0x354c, 0x32f8, 0x3095, 0x321e, 0x39e0, 0x395c, 0x3717, 0x357f, 0x394a, 0x34b1, +0x3ba4, 0x380c, 0x3604, 0x2f50, 0x348d, 0x3828, 0x3a9f, 0x39ce, 0x32ca, 0x3906, 0x3ab2, 0x2ca5, 0x38c9, 0x362a, 0x34b2, 0x29dc, 0x3a36, 0x3052, 0x31b7, 0x3589, 0x387c, 0x3401, 0x3b22, 0x3ad6, 0x3ae8, 0x3238, 0x3494, 0x3502, 0x3717, 0x3a6c, 0x3229, 0x368c, +0x3056, 0x3a56, 0x3498, 0x39eb, 0x2864, 0x342d, 0x39e0, 0x34a1, 0x2b99, 0x3a04, 0x38ff, 0x328c, 0x34d9, 0x387d, 0x3a3c, 0x32e5, 0x39eb, 0x3984, 0x34dd, 0x38a7, 0x373f, 0x39b4, 0x3235, 0x2f58, 0x2f39, 0x3800, 0x3758, 0x3939, 0x39fc, 0x3a4b, 0x38bf, 0x30ee, +0x345e, 0x39c8, 0x3a6d, 0x3262, 0x3b81, 0x31dc, 0x3a15, 0x3bd0, 0x36af, 0x36de, 0x37d5, 0x39d7, 0x3ad3, 0x3ac1, 0x3109, 0x35ea, 0x31c6, 0x398d, 0x3987, 0x3a4a, 0x34d2, 0x2ed2, 0x35e6, 0x352c, 0x39eb, 0x3bd6, 0x3a5b, 0x39d1, 0x34aa, 0x3ade, 0x394b, 0x38a1, +0x2bed, 0x38de, 0x3811, 0x3813, 0x391a, 0x374b, 0x3829, 0x3725, 0x38f0, 0x3583, 0x3966, 0x3a7d, 0x375a, 0x38fe, 0x3696, 0x361c, 0x39a8, 0x35f0, 0x38e1, 0x3003, 0x3595, 0x316e, 0x3862, 0x3af8, 0x3af2, 0x34c8, 0x381d, 0x37d8, 0x3893, 0x3a9c, 0x3989, 0x308c, +0x30cc, 0x2538, 0x399d, 0x3919, 0x399e, 0x21cc, 0x38e9, 0x30f8, 0x3a20, 0x3b3c, 0x3990, 0x259c, 0x3143, 0x3080, 0x3967, 0x3afb, 0x3a1b, 0x3779, 0x2eeb, 0x39f3, 0x379a, 0x369c, 0x3985, 0x3a1b, 0x3ba6, 0x3a53, 0x28d5, 0x3881, 0x31d9, 0x3a34, 0x3bd9, 0x393a, +0x3601, 0x2c6e, 0x3636, 0x3298, 0x39bb, 0x3a08, 0x38db, 0x35ad, 0x3a09, 0x36a6, 0x3bc7, 0x3bac, 0x34ae, 0x3291, 0x290b, 0x3250, 0x2648, 0x333d, 0x2bf3, 0x34b1, 0x30e0, 0x351f, 0x3a74, 0x38dc, 0x3883, 0x2841, 0x35e1, 0x390d, 0x3a50, 0x3abd, 0x386d, 0x3bb7, +0x3b94, 0x36b7, 0x3a49, 0x332f, 0x3a1d, 0x354b, 0x3bab, 0x3346, 0x3417, 0x351e, 0x3b6d, 0x391a, 0x2db3, 0x3b1c, 0x3a4a, 0x37b7, 0x36cf, 0x3a56, 0x39c4, 0x3be9, 0x34f0, 0x39be, 0x3691, 0x1ba5, 0x3888, 0x3040, 0x3ae1, 0x3b9b, 0x398f, 0x3a49, 0x3a16, 0x38c0, +0x386c, 0x39ab, 0x37fa, 0x382c, 0x3a6f, 0x393f, 0x340d, 0x38ef, 0x39d1, 0x3845, 0x398f, 0x363e, 0x3687, 0x3052, 0x3a2b, 0x392c, 0x2f5c, 0x3412, 0x3a1f, 0x3b2f, 0x3bcc, 0x3a63, 0x3a89, 0x36e9, 0x3921, 0x3b80, 0x2dc0, 0x3a03, 0x3beb, 0x38d3, 0x36cb, 0x39a3, +0x3978, 0x3a88, 0x3ba4, 0x3561, 0x28c5, 0x33a0, 0x37be, 0x2c39, 0x30ee, 0x3782, 0x2c07, 0x354e, 0x3491, 0x3a92, 0x331a, 0x3b15, 0x32e1, 0x3839, 0x3afb, 0x36c2, 0x2fd0, 0x29ad, 0x3b2e, 0x39c1, 0x2a8c, 0x341a, 0x2f90, 0x395a, 0x3969, 0x37ea, 0x3a5c, 0x3b6d, +0x3971, 0x3a93, 0x304e, 0x3623, 0x3a22, 0x31ee, 0x29df, 0x2c93, 0x3a01, 0x3a62, 0x366c, 0x371d, 0x3af3, 0x2e08, 0x3ac0, 0x3642, 0x3a28, 0x368d, 0x2d3d, 0x36d9, 0x32c3, 0x373f, 0x36fe, 0x3487, 0x2c81, 0x3623, 0x3b59, 0x3a91, 0x350a, 0x34f4, 0x3b09, 0x2c25, +0x3b13, 0x325a, 0x379e, 0x3a7d, 0x34b1, 0x39d5, 0x2ba8, 0x322b, 0x3b5e, 0x37ab, 0x2e24, 0x3ba9, 0x3a3d, 0x34f7, 0x3ba1, 0x3877, 0x3071, 0x39fb, 0x3bbd, 0x3633, 0x3b36, 0x2daa, 0x3b9b, 0x3aa0, 0x395c, 0x3b8f, 0x38d5, 0x3ab0, 0x3a8f, 0x36c2, 0x3b1f, 0x3489, +0x2acc, 0x3845, 0x3715, 0x37d8, 0x3992, 0x3bff, 0x350e, 0x3ad7, 0x39b0, 0x35ac, 0x3287, 0x385f, 0x3bd4, 0x37a3, 0x3438, 0x39a5, 0x3bcf, 0x38c3, 0x34f6, 0x3ae3, 0x3b57, 0x39af, 0x35eb, 0x3bed, 0x34d4, 0x2a95, 0x3b13, 0x384e, 0x3a3b, 0x33da, 0x3bce, 0x3b99, +0x3559, 0x3335, 0x3a2e, 0x3123, 0x38db, 0x33d0, 0x3638, 0x3b17, 0x3a72, 0x3afc, 0x3936, 0x3838, 0x2b69, 0x3895, 0x3a1a, 0x3192, 0x39d5, 0x37a5, 0x2eb0, 0x2e8b, 0x329a, 0x3b90, 0x390a, 0x3a1e, 0x3847, 0x375d, 0x3873, 0x35e2, 0x3771, 0x30f5, 0x3231, 0x3bd7, +0x2bbc, 0x3ace, 0x31ad, 0x3a6b, 0x28a4, 0x3b48, 0x3ba3, 0x3a84, 0x3353, 0x39f6, 0x381f, 0x2dd6, 0x314c, 0x34af, 0x3929, 0x3921, 0x383b, 0x34b0, 0x3923, 0x32c9, 0x3ae7, 0x318f, 0x3480, 0x2ad8, 0x3042, 0x3a4c, 0x349d, 0x2c12, 0x3abb, 0x3a57, 0x3b0d, 0x3111, +0x3359, 0x3a84, 0x38f2, 0x368d, 0x2f4b, 0x3ba0, 0x395c, 0x3026, 0x3a15, 0x2a04, 0x326e, 0x3522, 0x31a2, 0x382f, 0x2ada, 0x3b7c, 0x2f80, 0x3af5, 0x2d35, 0x38fa, 0x39ab, 0x2c6d, 0x2e7a, 0x39f6, 0x31a4, 0x3a53, 0x358c, 0x3951, 0x3a4e, 0x3916, 0x2a3f, 0x3ae9, +0x3b03, 0x39f8, 0x39fe, 0x3a61, 0x39fb, 0x3704, 0x360d, 0x39a7, 0x37a9, 0x348f, 0x3a30, 0x3af5, 0x366f, 0x3b29, 0x3a6a, 0x33d5, 0x370a, 0x39cd, 0x3444, 0x3bea, 0x3b2b, 0x312e, 0x3b8e, 0x32cf, 0x3b79, 0x3302, 0x3bba, 0x3962, 0x3413, 0x37a1, 0x39e0, 0x3805 +}; \ No newline at end of file diff --git a/hwpe/redmule_softclear/inc/y_input.h b/hwpe/redmule_softclear/inc/y_input.h new file mode 100644 index 0000000..45a2375 --- /dev/null +++ b/hwpe/redmule_softclear/inc/y_input.h @@ -0,0 +1,27 @@ + /* Header file generated by RedMulE Golden Model */ +uint16_t y_inp [768] = { +0x3150, 0x2dc1, 0x3033, 0x31f5, 0x3bb6, 0x3bff, 0x39f9, 0x3662, 0x3720, 0x351d, 0x384b, 0x3093, 0x3b9d, 0x35ad, 0x3695, 0x3466, 0x2300, 0x3445, 0x33ae, 0x3586, 0x38a3, 0x3bdb, 0x33a2, 0x379b, 0x3a0e, 0x38b0, 0x39ba, 0x379b, 0x39d3, 0x3a51, 0x3b30, 0x3794, +0x3b76, 0x3042, 0x38cc, 0x2dfc, 0x3b1a, 0x37fb, 0x38f7, 0x3824, 0x386f, 0x38c7, 0x36ee, 0x3a9c, 0x38d3, 0x2c67, 0x3a80, 0x2f30, 0x3328, 0x3721, 0x3790, 0x34e5, 0x3a6c, 0x3643, 0x3934, 0x3034, 0x38d4, 0x362e, 0x3b4b, 0x3408, 0x30c2, 0x370e, 0x3b31, 0x3b16, +0x3b6b, 0x39d4, 0x339c, 0x381e, 0x313e, 0x3671, 0x3ae2, 0x3479, 0x3940, 0x342d, 0x3925, 0x370a, 0x35d8, 0x2dad, 0x3888, 0x24b9, 0x375d, 0x34bd, 0x3243, 0x2ebb, 0x3970, 0x3a21, 0x3a07, 0x3877, 0x3888, 0x3569, 0x372d, 0x2ac1, 0x331e, 0x384d, 0x3996, 0x34a4, +0x35c1, 0x33a9, 0x21ed, 0x3a42, 0x388d, 0x34e4, 0x33c3, 0x34f9, 0x3a7b, 0x33fb, 0x2cdd, 0x3b0e, 0x333b, 0x3973, 0x34fc, 0x3771, 0x32ea, 0x2de4, 0x31a8, 0x3946, 0x3657, 0x3a4e, 0x36f6, 0x2829, 0x3ba2, 0x3bdc, 0x3bb3, 0x306c, 0x398d, 0x3a1f, 0x3991, 0x3846, +0x3547, 0x3292, 0x2e85, 0x31ed, 0x3979, 0x3a90, 0x28a4, 0x3bed, 0x36d8, 0x340e, 0x3b6a, 0x3ab6, 0x3824, 0x382b, 0x3ac3, 0x3811, 0x36d7, 0x3519, 0x3a92, 0x3a42, 0x29d1, 0x383a, 0x3a9b, 0x300e, 0x2cd3, 0x39cd, 0x3874, 0x3a07, 0x2eb1, 0x3b86, 0x3ad8, 0x3a5d, +0x3712, 0x284a, 0x38c1, 0x3bec, 0x39c0, 0x32cd, 0x3ad8, 0x3bce, 0x3817, 0x3896, 0x3aa7, 0x3870, 0x3996, 0x32cc, 0x3a4c, 0x3757, 0x3814, 0x3b65, 0x3acb, 0x376e, 0x34c0, 0x3609, 0x3bf0, 0x3b24, 0x3b29, 0x3848, 0x34b7, 0x398a, 0x220c, 0x3498, 0x3a8c, 0x3883, +0x38c4, 0x3af6, 0x3a42, 0x2dd6, 0x3147, 0x3717, 0x3a8e, 0x3af9, 0x3296, 0x38ef, 0x34fa, 0x3555, 0x3b29, 0x38de, 0x315e, 0x3773, 0x3b67, 0x3116, 0x38ec, 0x357c, 0x35d0, 0x2518, 0x3958, 0x2a03, 0x37d9, 0x3699, 0x3a1e, 0x3230, 0x3b13, 0x36d4, 0x3b2a, 0x39ad, +0x3b10, 0x351a, 0x3b97, 0x3326, 0x2b54, 0x3b7d, 0x386f, 0x373e, 0x37fa, 0x389b, 0x3b90, 0x3292, 0x3975, 0x38f3, 0x37f1, 0x3590, 0x3810, 0x2fd7, 0x3bf7, 0x3a5a, 0x3a1c, 0x34dd, 0x354c, 0x32f8, 0x3095, 0x321e, 0x39e0, 0x395c, 0x3717, 0x357f, 0x394a, 0x34b1, +0x3ba4, 0x380c, 0x3604, 0x2f50, 0x348d, 0x3828, 0x3a9f, 0x39ce, 0x32ca, 0x3906, 0x3ab2, 0x2ca5, 0x38c9, 0x362a, 0x34b2, 0x29dc, 0x3a36, 0x3052, 0x31b7, 0x3589, 0x387c, 0x3401, 0x3b22, 0x3ad6, 0x3ae8, 0x3238, 0x3494, 0x3502, 0x3717, 0x3a6c, 0x3229, 0x368c, +0x3056, 0x3a56, 0x3498, 0x39eb, 0x2864, 0x342d, 0x39e0, 0x34a1, 0x2b99, 0x3a04, 0x38ff, 0x328c, 0x34d9, 0x387d, 0x3a3c, 0x32e5, 0x39eb, 0x3984, 0x34dd, 0x38a7, 0x373f, 0x39b4, 0x3235, 0x2f58, 0x2f39, 0x3800, 0x3758, 0x3939, 0x39fc, 0x3a4b, 0x38bf, 0x30ee, +0x345e, 0x39c8, 0x3a6d, 0x3262, 0x3b81, 0x31dc, 0x3a15, 0x3bd0, 0x36af, 0x36de, 0x37d5, 0x39d7, 0x3ad3, 0x3ac1, 0x3109, 0x35ea, 0x31c6, 0x398d, 0x3987, 0x3a4a, 0x34d2, 0x2ed2, 0x35e6, 0x352c, 0x39eb, 0x3bd6, 0x3a5b, 0x39d1, 0x34aa, 0x3ade, 0x394b, 0x38a1, +0x2bed, 0x38de, 0x3811, 0x3813, 0x391a, 0x374b, 0x3829, 0x3725, 0x38f0, 0x3583, 0x3966, 0x3a7d, 0x375a, 0x38fe, 0x3696, 0x361c, 0x39a8, 0x35f0, 0x38e1, 0x3003, 0x3595, 0x316e, 0x3862, 0x3af8, 0x3af2, 0x34c8, 0x381d, 0x37d8, 0x3893, 0x3a9c, 0x3989, 0x308c, +0x30cc, 0x2538, 0x399d, 0x3919, 0x399e, 0x21cc, 0x38e9, 0x30f8, 0x3a20, 0x3b3c, 0x3990, 0x259c, 0x3143, 0x3080, 0x3967, 0x3afb, 0x3a1b, 0x3779, 0x2eeb, 0x39f3, 0x379a, 0x369c, 0x3985, 0x3a1b, 0x3ba6, 0x3a53, 0x28d5, 0x3881, 0x31d9, 0x3a34, 0x3bd9, 0x393a, +0x3601, 0x2c6e, 0x3636, 0x3298, 0x39bb, 0x3a08, 0x38db, 0x35ad, 0x3a09, 0x36a6, 0x3bc7, 0x3bac, 0x34ae, 0x3291, 0x290b, 0x3250, 0x2648, 0x333d, 0x2bf3, 0x34b1, 0x30e0, 0x351f, 0x3a74, 0x38dc, 0x3883, 0x2841, 0x35e1, 0x390d, 0x3a50, 0x3abd, 0x386d, 0x3bb7, +0x3b94, 0x36b7, 0x3a49, 0x332f, 0x3a1d, 0x354b, 0x3bab, 0x3346, 0x3417, 0x351e, 0x3b6d, 0x391a, 0x2db3, 0x3b1c, 0x3a4a, 0x37b7, 0x36cf, 0x3a56, 0x39c4, 0x3be9, 0x34f0, 0x39be, 0x3691, 0x1ba5, 0x3888, 0x3040, 0x3ae1, 0x3b9b, 0x398f, 0x3a49, 0x3a16, 0x38c0, +0x386c, 0x39ab, 0x37fa, 0x382c, 0x3a6f, 0x393f, 0x340d, 0x38ef, 0x39d1, 0x3845, 0x398f, 0x363e, 0x3687, 0x3052, 0x3a2b, 0x392c, 0x2f5c, 0x3412, 0x3a1f, 0x3b2f, 0x3bcc, 0x3a63, 0x3a89, 0x36e9, 0x3921, 0x3b80, 0x2dc0, 0x3a03, 0x3beb, 0x38d3, 0x36cb, 0x39a3, +0x3978, 0x3a88, 0x3ba4, 0x3561, 0x28c5, 0x33a0, 0x37be, 0x2c39, 0x30ee, 0x3782, 0x2c07, 0x354e, 0x3491, 0x3a92, 0x331a, 0x3b15, 0x32e1, 0x3839, 0x3afb, 0x36c2, 0x2fd0, 0x29ad, 0x3b2e, 0x39c1, 0x2a8c, 0x341a, 0x2f90, 0x395a, 0x3969, 0x37ea, 0x3a5c, 0x3b6d, +0x3971, 0x3a93, 0x304e, 0x3623, 0x3a22, 0x31ee, 0x29df, 0x2c93, 0x3a01, 0x3a62, 0x366c, 0x371d, 0x3af3, 0x2e08, 0x3ac0, 0x3642, 0x3a28, 0x368d, 0x2d3d, 0x36d9, 0x32c3, 0x373f, 0x36fe, 0x3487, 0x2c81, 0x3623, 0x3b59, 0x3a91, 0x350a, 0x34f4, 0x3b09, 0x2c25, +0x3b13, 0x325a, 0x379e, 0x3a7d, 0x34b1, 0x39d5, 0x2ba8, 0x322b, 0x3b5e, 0x37ab, 0x2e24, 0x3ba9, 0x3a3d, 0x34f7, 0x3ba1, 0x3877, 0x3071, 0x39fb, 0x3bbd, 0x3633, 0x3b36, 0x2daa, 0x3b9b, 0x3aa0, 0x395c, 0x3b8f, 0x38d5, 0x3ab0, 0x3a8f, 0x36c2, 0x3b1f, 0x3489, +0x2acc, 0x3845, 0x3715, 0x37d8, 0x3992, 0x3bff, 0x350e, 0x3ad7, 0x39b0, 0x35ac, 0x3287, 0x385f, 0x3bd4, 0x37a3, 0x3438, 0x39a5, 0x3bcf, 0x38c3, 0x34f6, 0x3ae3, 0x3b57, 0x39af, 0x35eb, 0x3bed, 0x34d4, 0x2a95, 0x3b13, 0x384e, 0x3a3b, 0x33da, 0x3bce, 0x3b99, +0x3559, 0x3335, 0x3a2e, 0x3123, 0x38db, 0x33d0, 0x3638, 0x3b17, 0x3a72, 0x3afc, 0x3936, 0x3838, 0x2b69, 0x3895, 0x3a1a, 0x3192, 0x39d5, 0x37a5, 0x2eb0, 0x2e8b, 0x329a, 0x3b90, 0x390a, 0x3a1e, 0x3847, 0x375d, 0x3873, 0x35e2, 0x3771, 0x30f5, 0x3231, 0x3bd7, +0x2bbc, 0x3ace, 0x31ad, 0x3a6b, 0x28a4, 0x3b48, 0x3ba3, 0x3a84, 0x3353, 0x39f6, 0x381f, 0x2dd6, 0x314c, 0x34af, 0x3929, 0x3921, 0x383b, 0x34b0, 0x3923, 0x32c9, 0x3ae7, 0x318f, 0x3480, 0x2ad8, 0x3042, 0x3a4c, 0x349d, 0x2c12, 0x3abb, 0x3a57, 0x3b0d, 0x3111, +0x3359, 0x3a84, 0x38f2, 0x368d, 0x2f4b, 0x3ba0, 0x395c, 0x3026, 0x3a15, 0x2a04, 0x326e, 0x3522, 0x31a2, 0x382f, 0x2ada, 0x3b7c, 0x2f80, 0x3af5, 0x2d35, 0x38fa, 0x39ab, 0x2c6d, 0x2e7a, 0x39f6, 0x31a4, 0x3a53, 0x358c, 0x3951, 0x3a4e, 0x3916, 0x2a3f, 0x3ae9, +0x3b03, 0x39f8, 0x39fe, 0x3a61, 0x39fb, 0x3704, 0x360d, 0x39a7, 0x37a9, 0x348f, 0x3a30, 0x3af5, 0x366f, 0x3b29, 0x3a6a, 0x33d5, 0x370a, 0x39cd, 0x3444, 0x3bea, 0x3b2b, 0x312e, 0x3b8e, 0x32cf, 0x3b79, 0x3302, 0x3bba, 0x3962, 0x3413, 0x37a1, 0x39e0, 0x3805 +}; \ No newline at end of file diff --git a/hwpe/redmule_softclear/inc/z_2D.h b/hwpe/redmule_softclear/inc/z_2D.h new file mode 100644 index 0000000..aff808a --- /dev/null +++ b/hwpe/redmule_softclear/inc/z_2D.h @@ -0,0 +1,27 @@ + /* Header file generated by RedMulE Golden Model */ +uint16_t z_oup_2D [24][32] = { +0x4845, 0x4897, 0x4608, 0x4838, 0x4855, 0x487b, 0x4869, 0x4880, 0x46d1, 0x48b0, 0x48db, 0x483f, 0x48c9, 0x485f, 0x4881, 0x483a, 0x484b, 0x472c, 0x4762, 0x492b, 0x4822, 0x48fd, 0x488e, 0x492e, 0x483e, 0x484f, 0x49e8, 0x46d7, 0x484b, 0x489d, 0x490b, 0x47e9, +0x484f, 0x47d2, 0x44be, 0x4747, 0x47c7, 0x46c0, 0x4727, 0x48af, 0x46c5, 0x482d, 0x483d, 0x482e, 0x4897, 0x479f, 0x488b, 0x4749, 0x489a, 0x46a8, 0x46f2, 0x488b, 0x4891, 0x47e8, 0x4872, 0x483d, 0x4716, 0x46fd, 0x49b5, 0x46a0, 0x46e7, 0x47a4, 0x48a1, 0x4767, +0x4939, 0x4935, 0x4703, 0x48c1, 0x4863, 0x48bd, 0x4913, 0x48cf, 0x48b6, 0x48b8, 0x4946, 0x4920, 0x495e, 0x48e1, 0x4938, 0x48b2, 0x493a, 0x4882, 0x483b, 0x49d5, 0x4911, 0x4972, 0x496b, 0x49df, 0x48f2, 0x4888, 0x4a46, 0x4821, 0x48c1, 0x490c, 0x49b2, 0x48a3, +0x463a, 0x47b0, 0x44cb, 0x4762, 0x4765, 0x46b9, 0x466a, 0x4814, 0x4631, 0x4796, 0x4666, 0x474b, 0x4798, 0x4704, 0x4838, 0x4761, 0x47d3, 0x4590, 0x45ea, 0x48a2, 0x47f1, 0x4844, 0x484b, 0x4776, 0x47d6, 0x46d8, 0x48f3, 0x44d3, 0x46fa, 0x478d, 0x481e, 0x466e, +0x4827, 0x481e, 0x45a2, 0x4794, 0x4727, 0x4806, 0x475d, 0x48d5, 0x4708, 0x4828, 0x4862, 0x480d, 0x4895, 0x4832, 0x48bd, 0x47f1, 0x482a, 0x46a7, 0x47b1, 0x492d, 0x484d, 0x4884, 0x48dc, 0x485f, 0x476d, 0x480c, 0x48e9, 0x46d3, 0x4728, 0x4884, 0x48a0, 0x480e, +0x4862, 0x4813, 0x4675, 0x485a, 0x47e8, 0x4738, 0x4836, 0x4823, 0x46e7, 0x4821, 0x4822, 0x47b3, 0x4846, 0x4855, 0x4863, 0x4717, 0x4872, 0x47c1, 0x46d5, 0x488e, 0x47e2, 0x485f, 0x487c, 0x48b8, 0x481e, 0x4788, 0x48bd, 0x4677, 0x46c9, 0x47f8, 0x48fe, 0x47fc, +0x47a0, 0x47b2, 0x4588, 0x467e, 0x4662, 0x46c7, 0x46e8, 0x4812, 0x4536, 0x474e, 0x46c0, 0x468f, 0x481f, 0x4679, 0x46a1, 0x46e2, 0x4809, 0x4560, 0x4630, 0x47eb, 0x46b5, 0x4757, 0x4848, 0x477f, 0x46a6, 0x46d8, 0x4870, 0x459a, 0x4670, 0x4678, 0x47d2, 0x468c, +0x4762, 0x48c4, 0x46e3, 0x4791, 0x46b1, 0x486d, 0x47d0, 0x4867, 0x468d, 0x47f6, 0x48a5, 0x4756, 0x4857, 0x4854, 0x4866, 0x4838, 0x484d, 0x46ec, 0x47d2, 0x48f6, 0x484a, 0x4879, 0x4848, 0x483c, 0x471d, 0x4806, 0x48fa, 0x4730, 0x4768, 0x47b8, 0x4865, 0x46f9, +0x48a8, 0x4918, 0x46ca, 0x4867, 0x4800, 0x4862, 0x48d3, 0x4910, 0x474e, 0x4849, 0x48eb, 0x486b, 0x4966, 0x48c5, 0x48f4, 0x4830, 0x48f9, 0x4778, 0x481e, 0x499e, 0x48cf, 0x48f1, 0x4982, 0x4923, 0x487c, 0x47cf, 0x49ea, 0x4649, 0x4773, 0x495e, 0x48b2, 0x483f, +0x48a7, 0x4975, 0x4616, 0x481e, 0x481f, 0x4866, 0x48b6, 0x4864, 0x47dc, 0x4873, 0x485c, 0x487f, 0x4938, 0x491f, 0x490d, 0x48b6, 0x48f8, 0x48a1, 0x4859, 0x492d, 0x489c, 0x4915, 0x4899, 0x4887, 0x486c, 0x4859, 0x49ca, 0x471e, 0x4867, 0x4918, 0x48d3, 0x4827, +0x488b, 0x4998, 0x4704, 0x481d, 0x48b8, 0x4880, 0x4876, 0x4944, 0x470c, 0x48f2, 0x48b9, 0x489b, 0x4956, 0x48e5, 0x48d6, 0x48a5, 0x48dc, 0x4856, 0x484e, 0x49ab, 0x48e0, 0x490e, 0x48dd, 0x4945, 0x488b, 0x48dd, 0x4a32, 0x47ea, 0x4835, 0x4911, 0x4965, 0x4819, +0x460e, 0x481e, 0x452c, 0x4673, 0x475c, 0x4717, 0x46f6, 0x46d0, 0x4696, 0x46bc, 0x4726, 0x481e, 0x4763, 0x46ea, 0x46fe, 0x4758, 0x478b, 0x4627, 0x4704, 0x483f, 0x46ad, 0x47b1, 0x4792, 0x4816, 0x46f2, 0x4684, 0x4827, 0x45a8, 0x472f, 0x47a4, 0x4797, 0x462b, +0x483f, 0x48ab, 0x468f, 0x4863, 0x485a, 0x4766, 0x481d, 0x48cb, 0x47dc, 0x4903, 0x48fc, 0x4830, 0x48cc, 0x483e, 0x48ab, 0x4864, 0x4966, 0x4763, 0x4794, 0x499d, 0x488e, 0x488b, 0x48dc, 0x4960, 0x4854, 0x484c, 0x499c, 0x474c, 0x4826, 0x48bc, 0x4949, 0x4883, +0x489d, 0x4905, 0x4718, 0x481e, 0x48e3, 0x48f4, 0x48c1, 0x4904, 0x47e8, 0x48b3, 0x4892, 0x48d4, 0x48ff, 0x4894, 0x48d5, 0x4886, 0x48fa, 0x4803, 0x47d2, 0x492e, 0x4870, 0x48b2, 0x48e5, 0x492b, 0x487b, 0x4785, 0x49e3, 0x471d, 0x4837, 0x48bf, 0x489b, 0x48c4, +0x475c, 0x4871, 0x464a, 0x4811, 0x47af, 0x471c, 0x4817, 0x4817, 0x463b, 0x484e, 0x477f, 0x464f, 0x4704, 0x487c, 0x47a3, 0x4725, 0x4853, 0x462a, 0x465a, 0x4860, 0x4736, 0x4880, 0x47e1, 0x482b, 0x4811, 0x46c0, 0x48dc, 0x475d, 0x4668, 0x4806, 0x4893, 0x46f4, +0x4858, 0x4959, 0x463d, 0x487b, 0x480f, 0x484e, 0x48c0, 0x48a6, 0x4847, 0x4894, 0x48a0, 0x484a, 0x491e, 0x48f4, 0x48fc, 0x48b5, 0x48ce, 0x47d2, 0x47db, 0x497f, 0x4955, 0x4939, 0x48a7, 0x48ce, 0x4890, 0x4884, 0x49d6, 0x4763, 0x486e, 0x4922, 0x48f4, 0x48c3, +0x47ec, 0x491c, 0x4698, 0x4783, 0x4715, 0x4754, 0x4745, 0x4752, 0x472f, 0x4832, 0x4817, 0x4809, 0x47f8, 0x48c3, 0x47e6, 0x4800, 0x48b6, 0x4730, 0x480a, 0x48cb, 0x479e, 0x488e, 0x47c2, 0x488e, 0x472f, 0x47ee, 0x489d, 0x4744, 0x4755, 0x4851, 0x4846, 0x47d3, +0x4838, 0x48a0, 0x4634, 0x4762, 0x4786, 0x4806, 0x47e3, 0x482d, 0x4726, 0x486c, 0x47b7, 0x4803, 0x48ac, 0x4814, 0x48e0, 0x4839, 0x4827, 0x4750, 0x46f2, 0x48c5, 0x483f, 0x4886, 0x48ad, 0x4856, 0x47e8, 0x47a9, 0x4937, 0x4743, 0x46d0, 0x481f, 0x484c, 0x4804, +0x47fd, 0x481f, 0x456d, 0x4813, 0x474d, 0x4807, 0x4688, 0x480e, 0x46e8, 0x4810, 0x469f, 0x4799, 0x4853, 0x478f, 0x47f2, 0x4824, 0x47d0, 0x471f, 0x46da, 0x485f, 0x4813, 0x481c, 0x482e, 0x4863, 0x4786, 0x480b, 0x48c9, 0x46b8, 0x475a, 0x46e2, 0x4852, 0x46c5, +0x45af, 0x4802, 0x4466, 0x46c2, 0x465d, 0x4743, 0x46b7, 0x47ba, 0x4636, 0x46c3, 0x4677, 0x4784, 0x485a, 0x47c2, 0x46dc, 0x46ac, 0x47de, 0x460e, 0x465f, 0x4834, 0x47f4, 0x4769, 0x46fc, 0x4810, 0x45fd, 0x45ea, 0x48d0, 0x45b5, 0x4704, 0x4783, 0x4830, 0x46c4, +0x4759, 0x47c7, 0x453d, 0x45b0, 0x4741, 0x4702, 0x4736, 0x4793, 0x461b, 0x47ba, 0x470b, 0x46dd, 0x4657, 0x470b, 0x470d, 0x4710, 0x486c, 0x468f, 0x45c3, 0x46ba, 0x479d, 0x483b, 0x46c9, 0x4774, 0x46a9, 0x46a7, 0x4833, 0x4606, 0x4690, 0x46a9, 0x46f5, 0x46a7, +0x47ac, 0x48bb, 0x452c, 0x4803, 0x470f, 0x4824, 0x47d5, 0x48cb, 0x4707, 0x484a, 0x4832, 0x4797, 0x4851, 0x482c, 0x487a, 0x4877, 0x4891, 0x465d, 0x47f4, 0x48ce, 0x4898, 0x4899, 0x484e, 0x486a, 0x47ac, 0x47f0, 0x493e, 0x4611, 0x47e2, 0x489e, 0x488c, 0x46af, +0x4665, 0x4836, 0x45e4, 0x46b6, 0x46a1, 0x46b9, 0x46c8, 0x46dd, 0x4658, 0x474b, 0x467b, 0x4777, 0x4769, 0x4798, 0x4785, 0x475e, 0x472a, 0x4656, 0x45fb, 0x4881, 0x46fc, 0x472d, 0x476e, 0x47a3, 0x465d, 0x46ca, 0x4855, 0x4500, 0x464f, 0x479a, 0x46c3, 0x4738, +0x481e, 0x486c, 0x4659, 0x4801, 0x4756, 0x477a, 0x47d5, 0x487b, 0x4706, 0x4808, 0x484f, 0x4838, 0x4870, 0x4863, 0x48d3, 0x4806, 0x4865, 0x4771, 0x46be, 0x494c, 0x4915, 0x484c, 0x4900, 0x4862, 0x481a, 0x46e8, 0x4974, 0x46a0, 0x4775, 0x483d, 0x487c, 0x480e +}; \ No newline at end of file diff --git a/hwpe/redmule_softclear/inc/z_output.h b/hwpe/redmule_softclear/inc/z_output.h new file mode 100644 index 0000000..96c7e5f --- /dev/null +++ b/hwpe/redmule_softclear/inc/z_output.h @@ -0,0 +1,27 @@ + /* Header file generated by RedMulE Golden Model */ +uint16_t z_oup [768] = { +0x4845, 0x4897, 0x4608, 0x4838, 0x4855, 0x487b, 0x4869, 0x4880, 0x46d1, 0x48b0, 0x48db, 0x483f, 0x48c9, 0x485f, 0x4881, 0x483a, 0x484b, 0x472c, 0x4762, 0x492b, 0x4822, 0x48fd, 0x488e, 0x492e, 0x483e, 0x484f, 0x49e8, 0x46d7, 0x484b, 0x489d, 0x490b, 0x47e9, +0x484f, 0x47d2, 0x44be, 0x4747, 0x47c7, 0x46c0, 0x4727, 0x48af, 0x46c5, 0x482d, 0x483d, 0x482e, 0x4897, 0x479f, 0x488b, 0x4749, 0x489a, 0x46a8, 0x46f2, 0x488b, 0x4891, 0x47e8, 0x4872, 0x483d, 0x4716, 0x46fd, 0x49b5, 0x46a0, 0x46e7, 0x47a4, 0x48a1, 0x4767, +0x4939, 0x4935, 0x4703, 0x48c1, 0x4863, 0x48bd, 0x4913, 0x48cf, 0x48b6, 0x48b8, 0x4946, 0x4920, 0x495e, 0x48e1, 0x4938, 0x48b2, 0x493a, 0x4882, 0x483b, 0x49d5, 0x4911, 0x4972, 0x496b, 0x49df, 0x48f2, 0x4888, 0x4a46, 0x4821, 0x48c1, 0x490c, 0x49b2, 0x48a3, +0x463a, 0x47b0, 0x44cb, 0x4762, 0x4765, 0x46b9, 0x466a, 0x4814, 0x4631, 0x4796, 0x4666, 0x474b, 0x4798, 0x4704, 0x4838, 0x4761, 0x47d3, 0x4590, 0x45ea, 0x48a2, 0x47f1, 0x4844, 0x484b, 0x4776, 0x47d6, 0x46d8, 0x48f3, 0x44d3, 0x46fa, 0x478d, 0x481e, 0x466e, +0x4827, 0x481e, 0x45a2, 0x4794, 0x4727, 0x4806, 0x475d, 0x48d5, 0x4708, 0x4828, 0x4862, 0x480d, 0x4895, 0x4832, 0x48bd, 0x47f1, 0x482a, 0x46a7, 0x47b1, 0x492d, 0x484d, 0x4884, 0x48dc, 0x485f, 0x476d, 0x480c, 0x48e9, 0x46d3, 0x4728, 0x4884, 0x48a0, 0x480e, +0x4862, 0x4813, 0x4675, 0x485a, 0x47e8, 0x4738, 0x4836, 0x4823, 0x46e7, 0x4821, 0x4822, 0x47b3, 0x4846, 0x4855, 0x4863, 0x4717, 0x4872, 0x47c1, 0x46d5, 0x488e, 0x47e2, 0x485f, 0x487c, 0x48b8, 0x481e, 0x4788, 0x48bd, 0x4677, 0x46c9, 0x47f8, 0x48fe, 0x47fc, +0x47a0, 0x47b2, 0x4588, 0x467e, 0x4662, 0x46c7, 0x46e8, 0x4812, 0x4536, 0x474e, 0x46c0, 0x468f, 0x481f, 0x4679, 0x46a1, 0x46e2, 0x4809, 0x4560, 0x4630, 0x47eb, 0x46b5, 0x4757, 0x4848, 0x477f, 0x46a6, 0x46d8, 0x4870, 0x459a, 0x4670, 0x4678, 0x47d2, 0x468c, +0x4762, 0x48c4, 0x46e3, 0x4791, 0x46b1, 0x486d, 0x47d0, 0x4867, 0x468d, 0x47f6, 0x48a5, 0x4756, 0x4857, 0x4854, 0x4866, 0x4838, 0x484d, 0x46ec, 0x47d2, 0x48f6, 0x484a, 0x4879, 0x4848, 0x483c, 0x471d, 0x4806, 0x48fa, 0x4730, 0x4768, 0x47b8, 0x4865, 0x46f9, +0x48a8, 0x4918, 0x46ca, 0x4867, 0x4800, 0x4862, 0x48d3, 0x4910, 0x474e, 0x4849, 0x48eb, 0x486b, 0x4966, 0x48c5, 0x48f4, 0x4830, 0x48f9, 0x4778, 0x481e, 0x499e, 0x48cf, 0x48f1, 0x4982, 0x4923, 0x487c, 0x47cf, 0x49ea, 0x4649, 0x4773, 0x495e, 0x48b2, 0x483f, +0x48a7, 0x4975, 0x4616, 0x481e, 0x481f, 0x4866, 0x48b6, 0x4864, 0x47dc, 0x4873, 0x485c, 0x487f, 0x4938, 0x491f, 0x490d, 0x48b6, 0x48f8, 0x48a1, 0x4859, 0x492d, 0x489c, 0x4915, 0x4899, 0x4887, 0x486c, 0x4859, 0x49ca, 0x471e, 0x4867, 0x4918, 0x48d3, 0x4827, +0x488b, 0x4998, 0x4704, 0x481d, 0x48b8, 0x4880, 0x4876, 0x4944, 0x470c, 0x48f2, 0x48b9, 0x489b, 0x4956, 0x48e5, 0x48d6, 0x48a5, 0x48dc, 0x4856, 0x484e, 0x49ab, 0x48e0, 0x490e, 0x48dd, 0x4945, 0x488b, 0x48dd, 0x4a32, 0x47ea, 0x4835, 0x4911, 0x4965, 0x4819, +0x460e, 0x481e, 0x452c, 0x4673, 0x475c, 0x4717, 0x46f6, 0x46d0, 0x4696, 0x46bc, 0x4726, 0x481e, 0x4763, 0x46ea, 0x46fe, 0x4758, 0x478b, 0x4627, 0x4704, 0x483f, 0x46ad, 0x47b1, 0x4792, 0x4816, 0x46f2, 0x4684, 0x4827, 0x45a8, 0x472f, 0x47a4, 0x4797, 0x462b, +0x483f, 0x48ab, 0x468f, 0x4863, 0x485a, 0x4766, 0x481d, 0x48cb, 0x47dc, 0x4903, 0x48fc, 0x4830, 0x48cc, 0x483e, 0x48ab, 0x4864, 0x4966, 0x4763, 0x4794, 0x499d, 0x488e, 0x488b, 0x48dc, 0x4960, 0x4854, 0x484c, 0x499c, 0x474c, 0x4826, 0x48bc, 0x4949, 0x4883, +0x489d, 0x4905, 0x4718, 0x481e, 0x48e3, 0x48f4, 0x48c1, 0x4904, 0x47e8, 0x48b3, 0x4892, 0x48d4, 0x48ff, 0x4894, 0x48d5, 0x4886, 0x48fa, 0x4803, 0x47d2, 0x492e, 0x4870, 0x48b2, 0x48e5, 0x492b, 0x487b, 0x4785, 0x49e3, 0x471d, 0x4837, 0x48bf, 0x489b, 0x48c4, +0x475c, 0x4871, 0x464a, 0x4811, 0x47af, 0x471c, 0x4817, 0x4817, 0x463b, 0x484e, 0x477f, 0x464f, 0x4704, 0x487c, 0x47a3, 0x4725, 0x4853, 0x462a, 0x465a, 0x4860, 0x4736, 0x4880, 0x47e1, 0x482b, 0x4811, 0x46c0, 0x48dc, 0x475d, 0x4668, 0x4806, 0x4893, 0x46f4, +0x4858, 0x4959, 0x463d, 0x487b, 0x480f, 0x484e, 0x48c0, 0x48a6, 0x4847, 0x4894, 0x48a0, 0x484a, 0x491e, 0x48f4, 0x48fc, 0x48b5, 0x48ce, 0x47d2, 0x47db, 0x497f, 0x4955, 0x4939, 0x48a7, 0x48ce, 0x4890, 0x4884, 0x49d6, 0x4763, 0x486e, 0x4922, 0x48f4, 0x48c3, +0x47ec, 0x491c, 0x4698, 0x4783, 0x4715, 0x4754, 0x4745, 0x4752, 0x472f, 0x4832, 0x4817, 0x4809, 0x47f8, 0x48c3, 0x47e6, 0x4800, 0x48b6, 0x4730, 0x480a, 0x48cb, 0x479e, 0x488e, 0x47c2, 0x488e, 0x472f, 0x47ee, 0x489d, 0x4744, 0x4755, 0x4851, 0x4846, 0x47d3, +0x4838, 0x48a0, 0x4634, 0x4762, 0x4786, 0x4806, 0x47e3, 0x482d, 0x4726, 0x486c, 0x47b7, 0x4803, 0x48ac, 0x4814, 0x48e0, 0x4839, 0x4827, 0x4750, 0x46f2, 0x48c5, 0x483f, 0x4886, 0x48ad, 0x4856, 0x47e8, 0x47a9, 0x4937, 0x4743, 0x46d0, 0x481f, 0x484c, 0x4804, +0x47fd, 0x481f, 0x456d, 0x4813, 0x474d, 0x4807, 0x4688, 0x480e, 0x46e8, 0x4810, 0x469f, 0x4799, 0x4853, 0x478f, 0x47f2, 0x4824, 0x47d0, 0x471f, 0x46da, 0x485f, 0x4813, 0x481c, 0x482e, 0x4863, 0x4786, 0x480b, 0x48c9, 0x46b8, 0x475a, 0x46e2, 0x4852, 0x46c5, +0x45af, 0x4802, 0x4466, 0x46c2, 0x465d, 0x4743, 0x46b7, 0x47ba, 0x4636, 0x46c3, 0x4677, 0x4784, 0x485a, 0x47c2, 0x46dc, 0x46ac, 0x47de, 0x460e, 0x465f, 0x4834, 0x47f4, 0x4769, 0x46fc, 0x4810, 0x45fd, 0x45ea, 0x48d0, 0x45b5, 0x4704, 0x4783, 0x4830, 0x46c4, +0x4759, 0x47c7, 0x453d, 0x45b0, 0x4741, 0x4702, 0x4736, 0x4793, 0x461b, 0x47ba, 0x470b, 0x46dd, 0x4657, 0x470b, 0x470d, 0x4710, 0x486c, 0x468f, 0x45c3, 0x46ba, 0x479d, 0x483b, 0x46c9, 0x4774, 0x46a9, 0x46a7, 0x4833, 0x4606, 0x4690, 0x46a9, 0x46f5, 0x46a7, +0x47ac, 0x48bb, 0x452c, 0x4803, 0x470f, 0x4824, 0x47d5, 0x48cb, 0x4707, 0x484a, 0x4832, 0x4797, 0x4851, 0x482c, 0x487a, 0x4877, 0x4891, 0x465d, 0x47f4, 0x48ce, 0x4898, 0x4899, 0x484e, 0x486a, 0x47ac, 0x47f0, 0x493e, 0x4611, 0x47e2, 0x489e, 0x488c, 0x46af, +0x4665, 0x4836, 0x45e4, 0x46b6, 0x46a1, 0x46b9, 0x46c8, 0x46dd, 0x4658, 0x474b, 0x467b, 0x4777, 0x4769, 0x4798, 0x4785, 0x475e, 0x472a, 0x4656, 0x45fb, 0x4881, 0x46fc, 0x472d, 0x476e, 0x47a3, 0x465d, 0x46ca, 0x4855, 0x4500, 0x464f, 0x479a, 0x46c3, 0x4738, +0x481e, 0x486c, 0x4659, 0x4801, 0x4756, 0x477a, 0x47d5, 0x487b, 0x4706, 0x4808, 0x484f, 0x4838, 0x4870, 0x4863, 0x48d3, 0x4806, 0x4865, 0x4771, 0x46be, 0x494c, 0x4915, 0x484c, 0x4900, 0x4862, 0x481a, 0x46e8, 0x4974, 0x46a0, 0x4775, 0x483d, 0x487c, 0x480e +}; \ No newline at end of file diff --git a/hwpe/redmule_softclear/pulp_inject_fault.tcl b/hwpe/redmule_softclear/pulp_inject_fault.tcl new file mode 100644 index 0000000..61ccadf --- /dev/null +++ b/hwpe/redmule_softclear/pulp_inject_fault.tcl @@ -0,0 +1,53 @@ +# Copyright 2023 ETH Zurich and University of Bologna. +# Solderpad Hardware License, Version 0.51, see LICENSE for details. +# SPDX-License-Identifier: SHL-0.51 +# +# Author: Michael Rogenmoser (michaero@iis.ee.ethz.ch) + +transcript quietly +if {! [info exists ::env(VSIM_PATH)]} {error "Define VSIM_PATH"} +set utils_base_path [file join $::env(VSIM_PATH) scripts fault_injection_utils] +set script_base_path [file join $::env(VSIM_PATH) fault_injection_sim scripts] + +set verbosity 2 +set log_injections 1 +# Easy way to generate a variable seed +# set seed [clock seconds] +# Default value +set seed 12345 +set print_statistics 1 + +set inject_start_time 550000000000ps +set inject_stop_time 750000000000ps +set injection_clock "pulp_cluster_tb/cluster_i/clk_i" +set injection_clock_trigger 0 +set fault_period 150 +set rand_initial_injection_phase 0 +# max_num set to 0 means until stop_time +set max_num_fault_inject 0 +set signal_fault_duration 20ns +set register_fault_duration 0ns + +set allow_multi_bit_upset $::env(MULTI_BIT_UPSET) +set use_bitwidth_as_weight 0 +set check_core_output_modification 0 +set check_core_next_state_modification 0 +set reg_to_sig_ratio 1 + +source [file join $utils_base_path pulp_extract_nets.tcl] + +set inject_signals_netlist [] +set inject_register_netlist [] +set output_netlist [] +set next_state_netlist [] +set assertion_disable_list [] + +# for {set idx 0} {$idx < 12} {incr idx} { +# set inject_signals_netlist [list {*}$inject_signals_netlist {*}[get_all_core_nets $idx]] +# set output_netlist [list {*}$output_netlist {*}[get_core_output_nets $idx]] +# } + +set inject_register_netlist [list {*}$inject_register_netlist {*}[get_memory_slice {0 16} {256 336}]] + +source [file join $script_base_path inject_fault.tcl] + diff --git a/hwpe/redmule_softclear/redmule.c b/hwpe/redmule_softclear/redmule.c new file mode 100644 index 0000000..a80171c --- /dev/null +++ b/hwpe/redmule_softclear/redmule.c @@ -0,0 +1,185 @@ +/* + * Copyright (C) 2022-2023 ETH Zurich and University of Bologna + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * SPDX-License-Identifier: Apache-2.0 + * + * Author: Yvan Tortorella + * + * RedMulE SW test + */ + +#include +#include "stdio.h" +#include "archi_redmule.h" +#include "hal_redmule.h" +#include "pulp.h" + +static inline void wait_cycles(const unsigned cycles) +{ + /** + * Each iteration of the loop below will take four cycles on RI5CY (one for + * `addi` and three for the taken `bnez`; if the instructions hit in the + * I$). Thus, we let `i` count the number of remaining loop iterations and + * initialize it to a fourth of the number of clock cyles. With this + * initialization, we must not enter the loop if the number of clock cycles + * is less than four, because this will cause an underflow on the first + * subtraction. + */ + register unsigned threshold; + asm volatile("li %[threshold], 4" : [threshold] "=r" (threshold)); + asm volatile goto("ble %[cycles], %[threshold], %l2" + : /* no output */ + : [cycles] "r" (cycles), [threshold] "r" (threshold) + : /* no clobbers */ + : __wait_cycles_end); + register unsigned i = cycles >> 2; +__wait_cycles_start: + // Decrement `i` and loop if it is not yet zero. + asm volatile("addi %0, %0, -1" : "+r" (i)); + asm volatile goto("bnez %0, %l1" + : /* no output */ + : "r" (i) + : /* no clobbers */ + : __wait_cycles_start); +__wait_cycles_end: + return; +} + +int main() { + + volatile int errors = 0; + unsigned int cluster_id = rt_cluster_id(); + unsigned int intc_data_correctable_cnt, redmule_data_correctable_cnt = 0; + unsigned int intc_meta_correctable_cnt = 0; + unsigned int intc_data_uncorrectable_cnt, redmule_data_uncorrectable_cnt = 0; + unsigned int intc_meta_uncorrectable_cnt = 0; + + if(get_core_id() == 0){ + + uint16_t m_size = M_SIZE; + uint16_t n_size = N_SIZE; + uint16_t k_size = K_SIZE; + + uint8_t *x_ext = x_inp; + uint8_t *w_ext = w_inp; + uint8_t *y_ext = y_inp; + uint8_t *z_ext = z_oup; + + uint8_t volatile *x = (uint8_t volatile *) pi_l1_malloc(0, (2*m_size*n_size)); + uint8_t volatile *w = (uint8_t volatile *) pi_l1_malloc(0, (2*n_size*k_size)); + uint8_t volatile *y = (uint8_t volatile *) pi_l1_malloc(0, (2*m_size*k_size)); + uint8_t volatile *z = (uint8_t volatile *) pi_l1_malloc(0, (2*m_size*k_size)); + + #ifdef USE_DMA + volatile unsigned int dma_id = 0; + dma_id = mchan_alloc(); + mchan_transfer((unsigned int) 2*(2*m_size*n_size), + (unsigned int) x_ext, + (unsigned int) x ); + mchan_barrier(dma_id); + mchan_free(dma_id); + + dma_id = mchan_alloc(); + mchan_transfer((unsigned int) 2*(2*n_size*k_size), + (unsigned int) w_ext, + (unsigned int) w ); + mchan_barrier(dma_id); + mchan_free(dma_id); + + dma_id = mchan_alloc(); + mchan_transfer((unsigned int) 2*(2*m_size*k_size), + (unsigned int) y_ext, + (unsigned int) y ); + mchan_barrier(dma_id); + #else + generate_test_data16((int) x, (int) w, (int) y, (int) m_size, (int) n_size, (int) k_size); + #endif + + int gold_sum = 0, check_sum = 0; + int i,j; + + int offload_id_tmp, offload_id; + + // Enable RedMulE + hwpe_cg_enable(); + asm volatile("": : :"memory"); + + hwpe_soft_clear(); + asm volatile("": : :"memory"); + + volatile int job_id = -1; + + // job 0 + job_id = hwpe_wait_acquire(); + asm volatile("": : :"memory"); + redmule_x_add_set ((unsigned int) x); + redmule_w_add_set ((unsigned int) w); + redmule_y_add_set ((unsigned int) y); + redmule_z_add_set ((unsigned int) z); + redmule_cfg (m_size, n_size, k_size, gemm_ops); + asm volatile("": : :"memory"); + hwpe_trigger_job(); + asm volatile("": : :"memory"); + + // job 1 + job_id = hwpe_wait_acquire(); + asm volatile("": : :"memory"); + redmule_x_add_set ((unsigned int) x); + redmule_w_add_set ((unsigned int) w); + redmule_y_add_set ((unsigned int) y); + redmule_z_add_set ((unsigned int) z); + redmule_cfg (m_size, n_size, k_size, gemm_ops); + asm volatile("": : :"memory"); + hwpe_trigger_job(); + asm volatile("": : :"memory"); + + // soft-clear execution + wait_cycles(20); + hwpe_soft_clear(); + wait_cycles(100); + + // job 0 + job_id = hwpe_wait_acquire(); + asm volatile("": : :"memory"); + redmule_x_add_set ((unsigned int) x); + redmule_w_add_set ((unsigned int) w); + redmule_y_add_set ((unsigned int) y); + redmule_z_add_set ((unsigned int) z); + redmule_cfg (m_size, n_size, k_size, gemm_ops); + asm volatile("": : :"memory"); + hwpe_trigger_job(); + asm volatile("": : :"memory"); + + // Wait for end of computation + redmule_evt_wait(); + + // Disable RedMulE + hwpe_cg_disable(); + + errors = redmule_compare16((int) z, (int) m_size, (int) k_size); + + *(int *) 0x1A1040A0 = errors; + + if(job_id != 0) { + printf ("Terminated test with wrong job id!!! and %d errors. See you!\n", errors); + errors++; + } + else { + printf ("Terminated test with OK job id and %d errors. See you!\n", errors); + } + + } + synch_barrier(); + return (errors != 0); +} From 53d7aee16d8670e1e0ee0cd75fd9688674c2de97 Mon Sep 17 00:00:00 2001 From: Andrea Belano Date: Mon, 9 Dec 2024 16:15:02 +0100 Subject: [PATCH 38/71] Remove hardcoded addresses in softex and redmule tests --- hwpe/redmule/archi_redmule.h | 8 ++++---- hwpe/redmule_256iter/archi_redmule.h | 8 ++++---- hwpe/redmule_softclear/archi_redmule.h | 8 ++++---- hwpe/softex/archi_softex.h | 10 +++++----- 4 files changed, 17 insertions(+), 17 deletions(-) diff --git a/hwpe/redmule/archi_redmule.h b/hwpe/redmule/archi_redmule.h index 662e1e6..40eceee 100644 --- a/hwpe/redmule/archi_redmule.h +++ b/hwpe/redmule/archi_redmule.h @@ -63,10 +63,10 @@ */ /* PULP Cluster Archi defines */ -#define ARCHI_CLUST_CTRL_BASE 0x50200000 -#define ARCHI_CLUST_HWPE_BASE 0x50201000 -#define DMA_COMMAND_QUEUE 0x50204400 -#define DMA_STATUS_REGISTER 0x50204404 +#define ARCHI_CLUST_CTRL_BASE ARCHI_CLUSTER_CTRL_ADDR +#define ARCHI_CLUST_HWPE_BASE ARCHI_HWCE_ADDR +#define DMA_COMMAND_QUEUE ARCHI_MCHAN_DEMUX_ADDR +#define DMA_STATUS_REGISTER (ARCHI_MCHAN_DEMUX_ADDR + 4) #define ARCHI_CL_HWPE_EVT0 12 #define ARCHI_CL_HWPE_EVT1 13 #define FC_DMA_EVENT 8 diff --git a/hwpe/redmule_256iter/archi_redmule.h b/hwpe/redmule_256iter/archi_redmule.h index 662e1e6..40eceee 100644 --- a/hwpe/redmule_256iter/archi_redmule.h +++ b/hwpe/redmule_256iter/archi_redmule.h @@ -63,10 +63,10 @@ */ /* PULP Cluster Archi defines */ -#define ARCHI_CLUST_CTRL_BASE 0x50200000 -#define ARCHI_CLUST_HWPE_BASE 0x50201000 -#define DMA_COMMAND_QUEUE 0x50204400 -#define DMA_STATUS_REGISTER 0x50204404 +#define ARCHI_CLUST_CTRL_BASE ARCHI_CLUSTER_CTRL_ADDR +#define ARCHI_CLUST_HWPE_BASE ARCHI_HWCE_ADDR +#define DMA_COMMAND_QUEUE ARCHI_MCHAN_DEMUX_ADDR +#define DMA_STATUS_REGISTER (ARCHI_MCHAN_DEMUX_ADDR + 4) #define ARCHI_CL_HWPE_EVT0 12 #define ARCHI_CL_HWPE_EVT1 13 #define FC_DMA_EVENT 8 diff --git a/hwpe/redmule_softclear/archi_redmule.h b/hwpe/redmule_softclear/archi_redmule.h index 662e1e6..40eceee 100644 --- a/hwpe/redmule_softclear/archi_redmule.h +++ b/hwpe/redmule_softclear/archi_redmule.h @@ -63,10 +63,10 @@ */ /* PULP Cluster Archi defines */ -#define ARCHI_CLUST_CTRL_BASE 0x50200000 -#define ARCHI_CLUST_HWPE_BASE 0x50201000 -#define DMA_COMMAND_QUEUE 0x50204400 -#define DMA_STATUS_REGISTER 0x50204404 +#define ARCHI_CLUST_CTRL_BASE ARCHI_CLUSTER_CTRL_ADDR +#define ARCHI_CLUST_HWPE_BASE ARCHI_HWCE_ADDR +#define DMA_COMMAND_QUEUE ARCHI_MCHAN_DEMUX_ADDR +#define DMA_STATUS_REGISTER (ARCHI_MCHAN_DEMUX_ADDR + 4) #define ARCHI_CL_HWPE_EVT0 12 #define ARCHI_CL_HWPE_EVT1 13 #define FC_DMA_EVENT 8 diff --git a/hwpe/softex/archi_softex.h b/hwpe/softex/archi_softex.h index 70727a2..8d08543 100644 --- a/hwpe/softex/archi_softex.h +++ b/hwpe/softex/archi_softex.h @@ -24,10 +24,10 @@ #define DATA_WIDTH 256 /* PULP Cluster Archi defines */ -#define ARCHI_CLUST_CTRL_BASE 0x50200000 -#define ARCHI_CLUST_HWPE_BASE 0x50201000 -#define DMA_COMMAND_QUEUE 0x50204400 -#define DMA_STATUS_REGISTER 0x50204404 +#define ARCHI_CLUST_CTRL_BASE ARCHI_CLUSTER_CTRL_ADDR +#define ARCHI_CLUST_HWPE_BASE ARCHI_HWCE_ADDR +#define DMA_COMMAND_QUEUE ARCHI_MCHAN_DEMUX_ADDR +#define DMA_STATUS_REGISTER (ARCHI_MCHAN_DEMUX_ADDR + 4) #define ARCHI_CL_HWPE_EVT0 12 #define ARCHI_CL_HWPE_EVT1 13 #define FC_DMA_EVENT 8 @@ -37,7 +37,7 @@ #define __builtin_bitinsert(a,b,c,d) (a | (((b << (32-c)) >> (32-c)) << d)) #define SOFTEX_BASE_ADD ARCHI_CLUST_HWPE_BASE -#define SOFTEX_CG_EN_MSK 0x4000 +#define SOFTEX_CG_EN_MSK 0x4000 // Commands #define SOFTEX_TRIGGER 0x00 #define SOFTEX_ACQUIRE 0x04 From c8ac022c1be105ca6c602b4bb7b9dc0412beaad4 Mon Sep 17 00:00:00 2001 From: Andrea Belano Date: Tue, 10 Dec 2024 15:54:09 +0100 Subject: [PATCH 39/71] Move reliability tests to their own directory --- astral/dmr_matmul | 1 + astral/ecc_test | 1 + {astral => reliability_tests}/dmr_matmul/Makefile | 0 {astral => reliability_tests}/dmr_matmul/dmr_matmul.c | 2 +- {astral => reliability_tests}/dmr_matmul/matmul.h | 0 {astral => reliability_tests}/dmr_matmul/pulp_inject_fault.tcl | 0 {astral => reliability_tests}/ecc_test/Makefile | 0 {astral => reliability_tests}/ecc_test/ecc_test.c | 0 {astral => reliability_tests}/ecc_test/pulp_inject_fault.tcl | 0 9 files changed, 3 insertions(+), 1 deletion(-) create mode 120000 astral/dmr_matmul create mode 120000 astral/ecc_test rename {astral => reliability_tests}/dmr_matmul/Makefile (100%) rename {astral => reliability_tests}/dmr_matmul/dmr_matmul.c (99%) rename {astral => reliability_tests}/dmr_matmul/matmul.h (100%) rename {astral => reliability_tests}/dmr_matmul/pulp_inject_fault.tcl (100%) rename {astral => reliability_tests}/ecc_test/Makefile (100%) rename {astral => reliability_tests}/ecc_test/ecc_test.c (100%) rename {astral => reliability_tests}/ecc_test/pulp_inject_fault.tcl (100%) diff --git a/astral/dmr_matmul b/astral/dmr_matmul new file mode 120000 index 0000000..c6cc223 --- /dev/null +++ b/astral/dmr_matmul @@ -0,0 +1 @@ +../reliability_tests/dmr_matmul \ No newline at end of file diff --git a/astral/ecc_test b/astral/ecc_test new file mode 120000 index 0000000..a80e9ae --- /dev/null +++ b/astral/ecc_test @@ -0,0 +1 @@ +../reliability_tests/ecc_test \ No newline at end of file diff --git a/astral/dmr_matmul/Makefile b/reliability_tests/dmr_matmul/Makefile similarity index 100% rename from astral/dmr_matmul/Makefile rename to reliability_tests/dmr_matmul/Makefile diff --git a/astral/dmr_matmul/dmr_matmul.c b/reliability_tests/dmr_matmul/dmr_matmul.c similarity index 99% rename from astral/dmr_matmul/dmr_matmul.c rename to reliability_tests/dmr_matmul/dmr_matmul.c index 953dfdf..0cfcc61 100644 --- a/astral/dmr_matmul/dmr_matmul.c +++ b/reliability_tests/dmr_matmul/dmr_matmul.c @@ -60,7 +60,7 @@ int main() { void matrix_multiplication(testresult_t *result, void (*start)(), void (*stop)()) { int coreid = rt_core_id(); - int numcores = 6; + int numcores = 4; int *CHKSUM_RESULT; short int i, iter, j, k; int lb, ub, chunk; diff --git a/astral/dmr_matmul/matmul.h b/reliability_tests/dmr_matmul/matmul.h similarity index 100% rename from astral/dmr_matmul/matmul.h rename to reliability_tests/dmr_matmul/matmul.h diff --git a/astral/dmr_matmul/pulp_inject_fault.tcl b/reliability_tests/dmr_matmul/pulp_inject_fault.tcl similarity index 100% rename from astral/dmr_matmul/pulp_inject_fault.tcl rename to reliability_tests/dmr_matmul/pulp_inject_fault.tcl diff --git a/astral/ecc_test/Makefile b/reliability_tests/ecc_test/Makefile similarity index 100% rename from astral/ecc_test/Makefile rename to reliability_tests/ecc_test/Makefile diff --git a/astral/ecc_test/ecc_test.c b/reliability_tests/ecc_test/ecc_test.c similarity index 100% rename from astral/ecc_test/ecc_test.c rename to reliability_tests/ecc_test/ecc_test.c diff --git a/astral/ecc_test/pulp_inject_fault.tcl b/reliability_tests/ecc_test/pulp_inject_fault.tcl similarity index 100% rename from astral/ecc_test/pulp_inject_fault.tcl rename to reliability_tests/ecc_test/pulp_inject_fault.tcl From a61fc85e424ca99af941d924bbadbb1b64736ceb Mon Sep 17 00:00:00 2001 From: Andrea Belano Date: Tue, 10 Dec 2024 18:12:28 +0100 Subject: [PATCH 40/71] Neureka: add configuration for the pulp cluster --- hwpe/neureka/Makefile | 8 ++++---- hwpe/neureka/pulp-nnx | 2 +- hwpe/neureka/src/nnx_layer.c | 8 ++++---- 3 files changed, 9 insertions(+), 9 deletions(-) diff --git a/hwpe/neureka/Makefile b/hwpe/neureka/Makefile index 92b7197..618cbfb 100644 --- a/hwpe/neureka/Makefile +++ b/hwpe/neureka/Makefile @@ -14,9 +14,9 @@ PULP_APP_SRCS += $(LIBDIR)/src/pulp_nnx_$(ACCELERATOR).c $(wildcard $(LIBDIR)/ut SRC_DIRS += $(LIBDIR)/src $(LIBDIR)/util ## Accelerator -INC_DIRS += $(ACC_DIR)/hal $(ACC_DIR)/bsp $(ACC_DIR)/bsp/astral -PULP_APP_SRCS += $(wildcard $(ACC_DIR)/hal/*.c) $(wildcard $(ACC_DIR)/bsp/astral/*.c) -SRC_DIRS += $(ACC_DIR)/hal $(ACC_DIR)/bsp/astral +INC_DIRS += $(ACC_DIR)/hal $(ACC_DIR)/bsp $(ACC_DIR)/bsp/pulp_cluster +PULP_APP_SRCS += $(wildcard $(ACC_DIR)/hal/*.c) $(wildcard $(ACC_DIR)/bsp/pulp_cluster/*.c) +SRC_DIRS += $(ACC_DIR)/hal $(ACC_DIR)/bsp/pulp_cluster ## Generated INC_DIRS += gen/inc @@ -26,7 +26,7 @@ INC_FLAGS += $(addprefix -I,$(INC_DIRS)) # Flags ACCELERATOR_UPPERCASE := $(shell echo $(ACCELERATOR) | tr [:lower:] [:upper:]) -PULP_CFLAGS += -DNNX_ACCELERATOR=\"$(ACCELERATOR)\" -DNNX_$(ACCELERATOR_UPPERCASE) -DNNX_NEUREKA_ASTRAL -DNNX_NEUREKA_PE_H=4 -DNNX_NEUREKA_PE_W=4 +PULP_CFLAGS += -DNNX_ACCELERATOR=\"$(ACCELERATOR)\" -DNNX_$(ACCELERATOR_UPPERCASE) -DNNX_NEUREKA_PULP_CLUSTER -DNNX_NEUREKA_PE_H=4 -DNNX_NEUREKA_PE_W=4 PULP_CFLAGS += $(INC_FLAGS) -O3 PULP_APP = test diff --git a/hwpe/neureka/pulp-nnx b/hwpe/neureka/pulp-nnx index 47baf51..4becda2 160000 --- a/hwpe/neureka/pulp-nnx +++ b/hwpe/neureka/pulp-nnx @@ -1 +1 @@ -Subproject commit 47baf51728fcaaacbd8a332b8d03717d6c03ace1 +Subproject commit 4becda239309035887db4f7fdf54a63ac8463180 diff --git a/hwpe/neureka/src/nnx_layer.c b/hwpe/neureka/src/nnx_layer.c index 57eb6fc..41edddf 100644 --- a/hwpe/neureka/src/nnx_layer.c +++ b/hwpe/neureka/src/nnx_layer.c @@ -20,10 +20,10 @@ #include "nnx_layer.h" #include "ecc_check.h" -#include +#include "pulp.h" #include "neureka.h" -#include "neureka_astral_bsp.h" +#include "neureka_pulp_cluster_bsp.h" #include "neureka_task.h" #include "pulp_nnx_neureka.h" @@ -35,7 +35,7 @@ typedef neureka_quant_function_e nnx_quant_function_e; typedef neureka_norm_t nnx_norm_t; typedef neureka_task_t nnx_task_t; typedef neureka_dev_t nnx_dev_t; -typedef neureka_astral_conf_t nnx_bsp_conf_t; +typedef neureka_pulp_cluster_conf_t nnx_bsp_conf_t; typedef neureka_task_flag_e nnx_task_flag_e; #define nnxTaskFlagTrue neurekaTaskFlagTrue @@ -52,7 +52,7 @@ typedef neureka_task_flag_e nnx_task_flag_e; #define nnx_task_set_ptrs_conv neureka_task_set_ptrs_conv #define nnx_task_set_ptrs_norm_quant neureka_task_set_ptrs_norm_quant -#define nnx_bsp_get_dev neureka_astral_get_dev +#define nnx_bsp_get_dev neureka_pulp_cluster_get_dev #define nnx_init neureka_nnx_init #define nnx_dispatch_wait neureka_nnx_dispatch_wait From 1cbed9e3b84d033f6dee08394b675f2163b7b72a Mon Sep 17 00:00:00 2001 From: Michael Rogenmoser Date: Wed, 31 Jul 2024 13:02:50 +0200 Subject: [PATCH 41/71] Add cluster icache fault injection test --- astral/icache_fi_conv16/Makefile | 11 + astral/icache_fi_conv16/conv16.h | 397 ++++++++ astral/icache_fi_conv16/icache_conv16.c | 935 ++++++++++++++++++ astral/icache_fi_conv16/pulp_inject_fault.tcl | 53 + 4 files changed, 1396 insertions(+) create mode 100644 astral/icache_fi_conv16/Makefile create mode 100644 astral/icache_fi_conv16/conv16.h create mode 100644 astral/icache_fi_conv16/icache_conv16.c create mode 100644 astral/icache_fi_conv16/pulp_inject_fault.tcl diff --git a/astral/icache_fi_conv16/Makefile b/astral/icache_fi_conv16/Makefile new file mode 100644 index 0000000..58620aa --- /dev/null +++ b/astral/icache_fi_conv16/Makefile @@ -0,0 +1,11 @@ +PULP_APP = test +PULP_APP_SRCS = icache_conv16.c + +PULP_CFLAGS = -O3 + +ifeq ($(fault_inject),1) + export FAULT_INJECTION=1 + export FAULT_INJECTION_SCRIPT=$(CURDIR)/pulp_inject_fault.tcl +endif + +include $(PULP_SDK_HOME)/install/rules/pulp.mk diff --git a/astral/icache_fi_conv16/conv16.h b/astral/icache_fi_conv16/conv16.h new file mode 100644 index 0000000..b75c587 --- /dev/null +++ b/astral/icache_fi_conv16/conv16.h @@ -0,0 +1,397 @@ +/* + * Copyright (C) 2018 ETH Zurich and University of Bologna + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/* + * Mantainer: Luca Valente, luca.valente2@unibo.it + */ +/****************************************************************************** + * * + * Multitherman Lab @ DEI - University of Bologna * + * Viale Risorgimento 2 40136 * + * Bologna - phone 0512092759 * + * * + * Engineer: Francesco Conti - f.conti@unibo.it * + * * + * Project: CConvNet * + * File: conv16.h * + * Description: 16-bit fixed point convolution test * + * * + ******************************************************************************/ + +#ifndef _CONV16_H +#define _CONV16_H + +// uncomment if doing test with SPI (disables printf's) +// #define PULP_SPI + +// fractionary bits +#define QF 13 + +// uncomment if checking errors in detail +#define CHECK_ERROR + +// uncomment if performing checks at all +#define CHECK_CHECKSUM + +#define IMPRECISE_ASM5 + +#define FIXED_MUL(a,b) ((a*b) >> QF); + +#define IH 32 +#define IW 32 +#define FH 5 +#define FW 5 +#define OH (IH-FH+1) +#define OW (IW-FW+1) + +// right checksum +#define RIGHT_CHECKSUM 0x009da8b0 + +#define FIXED_MUL_ASM(W_ptr,x_ptr,conv) \ +__asm__ volatile \ +( \ + "l.lhs r28,0x0(%0); " \ + "l.addi %0,%0,0x4; " \ + "l.addi %1,%1,0xFFFC; " \ + "l.mul r28,r28,r29; " \ + "l.srli r28,r28,0xD; " \ + "l.add %2,%2,r28; " \ + : "=r"(W_ptr), "=r"(x_ptr), "=&r"(conv) \ + : "r"(W_ptr), "r"(x_ptr) \ + : "r28", "r29", "cc" \ +) + +#define FIXED_MUL_ASM5_IMPRECISE(W_ptr,x_ptr,conv) \ +__asm__ volatile \ +( \ + "l.ori r25,r0,0xffff; " \ + "l.ori r26,r0,16; " \ + "l.andi r27,r27,0x0000; " \ + "l.lwz r28,0x0000(%0); " \ + "l.lwz r29,0x0000(%1); " \ + "l.ror r30,r28,r26; " \ + "l.ror r31,r29,r26; " \ + "l.and r30,r30,r25; " \ + "l.and r31,r31,r25; " \ + "l.mul r30,r30,r31; " \ + "l.add r27,r27,r30; " \ + "l.and r28,r28,r25; " \ + "l.and r29,r29,r25; " \ + "l.mul r28,r28,r29; " \ + "l.add r27,r27,r28; " \ + "l.lwz r28,0x0004(%0); " \ + "l.lwz r29,0xfffc(%1); " \ + "l.ror r30,r28,r26; " \ + "l.ror r31,r29,r26; " \ + "l.and r30,r30,r25; " \ + "l.and r31,r31,r25; " \ + "l.mul r30,r30,r31; " \ + "l.add r27,r27,r30; " \ + "l.and r28,r28,r25; " \ + "l.and r29,r29,r25; " \ + "l.mul r28,r28,r29; " \ + "l.add r27,r27,r28; " \ + "l.lwz r28,0x0008(%0); " \ + "l.lwz r29,0xfff8(%1); " \ + "l.ror r31,r29,r26; " \ + "l.and r28,r28,r25; " \ + "l.and r31,r31,r25; " \ + "l.mul r28,r28,r31; " \ + "l.add r27,r27,r28; " \ + "l.srli r27,r27,0xD; " \ + "l.add %2,%2,r27; " \ + : "=r"(W_ptr), "=r"(x_ptr), "=&r"(conv) \ + : "r"(W_ptr), "r"(x_ptr), "r"(conv) \ + : "r27", "r28", "r29", "cc" \ +) + +#define FIXED_MUL_ASM5_PRECISE(W_ptr,x_ptr,conv) \ +__asm__ volatile \ +( \ + "l.lhs r28,0x0000(%0); " \ + "l.lhs r29,0x0000(%1); " \ + "l.mul r28,r28,r29; " \ + "l.srli r28,r28,0xD; " \ + "l.add %2,%2,r28; " \ + "l.lhs r28,0x0002(%0); " \ + "l.lhs r29,0xfffe(%1); " \ + "l.mul r28,r28,r29; " \ + "l.srli r28,r28,0xD; " \ + "l.add %2,%2,r28; " \ + "l.lhs r28,0x0004(%0); " \ + "l.lhs r29,0xfffc(%1); " \ + "l.mul r28,r28,r29; " \ + "l.srli r28,r28,0xD; " \ + "l.add %2,%2,r28; " \ + "l.lhs r28,0x0006(%0); " \ + "l.lhs r29,0xfffa(%1); " \ + "l.mul r28,r28,r29; " \ + "l.srli r28,r28,0xD; " \ + "l.add %2,%2,r28; " \ + "l.lhs r28,0x0008(%0); " \ + "l.lhs r29,0xfff8(%1); " \ + "l.mul r28,r28,r29; " \ + "l.srli r28,r28,0xD; " \ + "l.add %2,%2,r28; " \ + : "=r"(W_ptr), "=r"(x_ptr), "=&r"(conv) \ + : "r"(W_ptr), "r"(x_ptr) \ + : "r27", "r28", "r29", "cc" \ +) + +// #define FIXED_MUL_ASM25_PRECISE(W_ptr,x_ptr,conv) \ +// __asm__ volatile \ +// ( \ +// "l.lwz r28,0x0000(%0); " \ +// "l.lwz r29,0x0000(%1); " \ +// "l.mul r28,r28,r29; " \ +// "l.srli r28,r28,0xD; " \ +// "l.add %2,%2,r28; " \ +// "l.lwz r28,0x0004(%0); " \ +// "l.lwz r29,0xfffc(%1); " \ +// "l.mul r28,r28,r29; " \ +// "l.srli r28,r28,0xD; " \ +// "l.add %2,%2,r28; " \ +// "l.lwz r28,0x0008(%0); " \ +// "l.lwz r29,0xfff8(%1); " \ +// "l.mul r28,r28,r29; " \ +// "l.srli r28,r28,0xD; " \ +// "l.add %2,%2,r28; " \ +// "l.lwz r28,0x000c(%0); " \ +// "l.lwz r29,0xfff4(%1); " \ +// "l.mul r28,r28,r29; " \ +// "l.srli r28,r28,0xD; " \ +// "l.add %2,%2,r28; " \ +// "l.lwz r28,0x0010(%0); " \ +// "l.lwz r29,0xfff0(%1); " \ +// "l.mul r28,r28,r29; " \ +// "l.srli r28,r28,0xD; " \ +// "l.add %2,%2,r28; " \ +// \ +// "l.slli %1,r28,0x2; " \ +// \ +// "l.lwz r28,0x0014(%0); " \ +// "l.lwz r29,0x0000(%1); " \ +// "l.mul r28,r28,r29; " \ +// "l.srli r28,r28,0xD; " \ +// "l.add %2,%2,r28; " \ +// "l.lwz r28,0x0018(%0); " \ +// "l.lwz r29,0xfffc(%1); " \ +// "l.mul r28,r28,r29; " \ +// "l.srli r28,r28,0xD; " \ +// "l.add %2,%2,r28; " \ +// "l.lwz r28,0x001c(%0); " \ +// "l.lwz r29,0xfff8(%1); " \ +// "l.mul r28,r28,r29; " \ +// "l.srli r28,r28,0xD; " \ +// "l.add %2,%2,r28; " \ +// "l.lwz r28,0x0020(%0); " \ +// "l.lwz r29,0xfff4(%1); " \ +// "l.mul r28,r28,r29; " \ +// "l.srli r28,r28,0xD; " \ +// "l.add %2,%2,r28; " \ +// "l.lwz r28,0x0024(%0); " \ +// "l.lwz r29,0xfff0(%1); " \ +// "l.mul r28,r28,r29; " \ +// "l.srli r28,r28,0xD; " \ +// "l.add %2,%2,r28; " \ +// // WIP +// : "=r"(W_ptr), "=r"(x_ptr), "=&r"(conv) \ +// : "r"(W_ptr), "r"(x_ptr), "r"(w), "r"(fw) \ +// : "r27", "r28", "r29", "cc" \ +// ) + +#define XPTR_UPDATE(x_ptr,w,fw) \ +__asm__ volatile \ +( \ + "l.sub r28,%1,%2; " \ + "l.slli r28,r28,0x2; " \ + "l.sub %0,%0,r28; " \ + : "=&r"(x_ptr) \ + : "r"(x_ptr), "r"(w), "r"(fw) \ + : "r28", "cc" \ +) + +int test_singlethread(void (*test)(int16_t *, int16_t *, int16_t *, int, int, int, int, int, int, int, int, int), char *str); +int test_multithread(void (*test)(int16_t *, int16_t *, int16_t *, int, int, int, int, int, int, int, int, int), char *str); + +void conv16_gold(int16_t *__restrict__ W, int16_t *__restrict__ x, int16_t *__restrict__ y, int h, int w, int fh, int fw, int oh, int ow, int nif, int a, int b); +void conv16_asm_mul(int16_t *__restrict__ W, int16_t *__restrict__ x, int16_t *__restrict__ y, int h, int w, int fh, int fw, int oh, int ow, int nif, int a, int b); +// void conv16_asm_mac(int16_t *__restrict__ W, int16_t *__restrict__ x, int16_t *__restrict__ y, int h, int w, int fh, int fw, int oh, int ow, int nif, int a, int b); +void conv16_asm_mul_unrolled_5x5(int16_t *__restrict__ W, int16_t *__restrict__ x, int16_t *__restrict__ y, int h, int w, int fh, int fw, int oh, int ow, int nif, int a, int b); +void conv16_unrolled_5x5(int16_t *__restrict__ W, int16_t *__restrict__ x, int16_t *__restrict__ y, int h, int w, int fh, int fw, int oh, int ow, int nif, int a, int b); +void conv16_unrolled_ptr_5x5(int16_t *__restrict__ W, int16_t *__restrict__ x, int16_t *__restrict__ y, int h, int w, int fh, int fw, int oh, int ow, int nif, int a, int b); +// void conv16_gold_four_finest(int16_t *__restrict__ W, int16_t *__restrict__ x, int16_t *__restrict__ y, int h, int w, int fh, int fw, int oh, int ow, int nif, int a, int b, int32_t *shared_conv); +// void conv16_gold_four_fine(int16_t *__restrict__ W, int16_t *__restrict__ x, int16_t *__restrict__ y, int h, int w, int fh, int fw, int oh, int ow, int nif, int a, int b); +void conv16_gold_four_coarse(int16_t *__restrict__ W, int16_t *__restrict__ x, int16_t *__restrict__ y, int h, int w, int fh, int fw, int oh, int ow, int nif, int a, int b); +void conv16_unrolled_5x5_four_coarse(int16_t *__restrict__ W, int16_t *__restrict__ x, int16_t *__restrict__ y, int h, int w, int fh, int fw, int oh, int ow, int nif, int a, int b); +void conv16_unrolled_ptr_5x5_four_coarse(int16_t *__restrict__ W, int16_t *__restrict__ x, int16_t *__restrict__ y, int h, int w, int fh, int fw, int oh, int ow, int nif, int a, int b); +void conv16_gold_four_coarsest(int16_t *__restrict__ W, int16_t *__restrict__ x, int16_t *__restrict__ y, int h, int w, int fh, int fw, int oh, int ow, int nif, int a, int b); +void conv16_unrolled_5x5_four_coarsest(int16_t *__restrict__ W, int16_t *__restrict__ x, int16_t *__restrict__ y, int h, int w, int fh, int fw, int oh, int ow, int nif, int a, int b); +void conv16_unrolled_ptr_5x5_four_coarsest(int16_t *__restrict__ W, int16_t *__restrict__ x, int16_t *__restrict__ y, int h, int w, int fh, int fw, int oh, int ow, int nif, int a, int b); +void conv16_asm_mul_unrolled_5x5_four_coarsest(int16_t *__restrict__ W, int16_t *__restrict__ x, int16_t *__restrict__ y, int h, int w, int fh, int fw, int oh, int ow, int nif, int a, int b); + +void load(); +int check(int16_t *y); +int checksum(int16_t *y); + +int16_t correct_yout[OH*OW] = { + 0x0352, + 0x036c, + 0x0386, + 0x03a0, + 0x03ba, + 0x03d4, + 0x03ee, + 0x0408, + 0x0422, + 0x043c, + 0x0456, + 0x0470, + 0x04ee, + 0x0508, + 0x0522, + 0x053c, + 0x0556, + 0x0570, + 0x058a, + 0x05a4, + 0x05be, + 0x05d8, + 0x05f2, + 0x060c, + 0x068a, + 0x06a4, + 0x06be, + 0x06d8, + 0x06f2, + 0x070c, + 0x0726, + 0x0740, + 0x075a, + 0x0774, + 0x078e, + 0x07a8, + 0x0826, + 0x0840, + 0x085a, + 0x0874, + 0x088e, + 0x08a8, + 0x08c2, + 0x08dc, + 0x08f6, + 0x0910, + 0x092a, + 0x0944, + 0x09c2, + 0x09dc, + 0x09f6, + 0x0a10, + 0x0a2a, + 0x0a44, + 0x0a5e, + 0x0a78, + 0x0a92, + 0x0aac, + 0x0ac6, + 0x0ae0, + 0x0b5e, + 0x0b78, + 0x0b92, + 0x0bac, + 0x0bc6, + 0x0be0, + 0x0bfa, + 0x0c14, + 0x0c2e, + 0x0c48, + 0x0c62, + 0x0c7c, + 0x0cfa, + 0x0d14, + 0x0d2e, + 0x0d48, + 0x0d62, + 0x0d7c, + 0x0d96, + 0x0db0, + 0x0dca, + 0x0de4, + 0x0dfe, + 0x0e18, + 0x0e96, + 0x0eb0, + 0x0eca, + 0x0ee4, + 0x0efe, + 0x0f18, + 0x0f32, + 0x0f4c, + 0x0f66, + 0x0f80, + 0x0f9a, + 0x0fb4, + 0x1032, + 0x104c, + 0x1066, + 0x1080, + 0x109a, + 0x10b4, + 0x10ce, + 0x10e8, + 0x1102, + 0x111c, + 0x1136, + 0x1150, + 0x11ce, + 0x11e8, + 0x1202, + 0x121c, + 0x1236, + 0x1250, + 0x126a, + 0x1284, + 0x129e, + 0x12b8, + 0x12d2, + 0x12ec, + 0x136a, + 0x1384, + 0x139e, + 0x13b8, + 0x13d2, + 0x13ec, + 0x1406, + 0x1420, + 0x143a, + 0x1454, + 0x146e, + 0x1488, + 0x1506, + 0x1520, + 0x153a, + 0x1554, + 0x156e, + 0x1588, + 0x15a2, + 0x15bc, + 0x15d6, + 0x15f0, + 0x160a, + 0x1624, +}; + +#endif diff --git a/astral/icache_fi_conv16/icache_conv16.c b/astral/icache_fi_conv16/icache_conv16.c new file mode 100644 index 0000000..e62c440 --- /dev/null +++ b/astral/icache_fi_conv16/icache_conv16.c @@ -0,0 +1,935 @@ +/* + * Copyright (C) 2018 ETH Zurich and University of Bologna + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/* + * Mantainer: Luca Valente, luca.valente2@unibo.it + */ +/****************************************************************************** + * * + * Multitherman Lab @ DEI - University of Bologna * + * Viale Risorgimento 2 40136 * + * Bologna - phone 0512092759 * + * * + * Engineer: Francesco Conti - f.conti@unibo.it * + * * + * Project: CConvNet * + * File: conv16.c * + * Description: 16-bit fixed point convolution test * + * * + ******************************************************************************/ + +#include +#include +#include "conv16.h" + +__attribute__((section(".heapsram"))) int16_t g_W[FH*FW]; +__attribute__((section(".heapsram"))) int16_t g_x[IH*IW]; +__attribute__((section(".heapsram"))) int16_t g_y[OH*OW]; +__attribute__((section(".heapsram"))) int16_t g_y_in[OH*OW]; + +int main() { + + if (rt_cluster_id() != 0) + return bench_cluster_forward(0); + + int errors = 0; + int sum = 0; + + // single-threaded "golden" by-the-book convolution + errors += test_singlethread(&conv16_gold, "sequential convolution"); + + // single-threaded loop-unrolled convolution + errors += test_singlethread(&conv16_unrolled_5x5, "sequential loop-unrolled convolution"); + + // single-threaded loop-unrolled pointer-optimized convolution + errors += test_singlethread(&conv16_unrolled_ptr_5x5, "sequential loop-unrolled pointer-optimized convolution"); + + // multi-threaded by-the-book convolution (1 thread per output pixel) + errors += test_multithread(&conv16_gold_four_coarse, "4-threaded convolution (1 thread per output pixel)"); + + // multi-threaded loop-unrolled convolution (1 thread per output pixel) + errors += test_multithread(&conv16_unrolled_5x5_four_coarse, "4-threaded loop-unrolled convolution (1 thread per output pixel)"); + + // multi-threaded loop-unrolled pointer-optimized convolution (1 thread per output pixel) + errors += test_multithread(&conv16_unrolled_ptr_5x5_four_coarse, "4-threaded loop-unrolled pointer-optimized convolution (1 thread per output pixel)"); + + // multi-threaded by-the-book convolution (1 thread per output row) + errors += test_multithread(&conv16_gold_four_coarsest, "4-threaded convolution (1 thread per output row)"); + + // multi-threaded loop-unrolled convolution (1 thread per output row) + errors += test_multithread(&conv16_unrolled_5x5_four_coarsest, "4-threaded loop-unrolled convolution (1 thread per output row)"); + + // multi-threaded loop-unrolled pointer-optimized convolution (1 thread per output row) + errors += test_multithread(&conv16_unrolled_ptr_5x5_four_coarsest, "4-threaded loop-unrolled pointer-optimized convolution (1 thread per output row)"); + + synch_barrier(); + + // TODO readout icache errors + + return errors; +} + +int test_singlethread(void (*test)(int16_t *, int16_t *, int16_t *, int, int, int, int, int, int, int, int, int), char *str) { + int errors = 0; + int sum = 0; + + synch_barrier(); + + if(rt_core_id() == 0) { + load(); + + reset_timer(rt_cluster_id()); + start_timer(rt_cluster_id()); + test(g_W, g_x, g_y, IH, IW, FH, FW, OH, OW, 1, 0, 0); + stop_timer(rt_cluster_id()); + + #ifdef CHECK_CHECKSUM + errors = 0; + sum = checksum(g_y); + if(sum != RIGHT_CHECKSUM) { + #ifndef PULP_SPI + printf("wrong checksum, 0x%08x instead of 0x%08x\n", sum, RIGHT_CHECKSUM); + #ifndef CHECK_ERROR + errors += 1; + #endif + #endif + #ifdef CHECK_ERROR + errors = check(g_y); + #endif + } + #else + errors = -1; + #endif + + #ifndef PULP_SPI + printf("%s, errors=%d, time=%d\n", str, errors, get_time(rt_cluster_id())); + #endif + + } + + return errors; +} + +int test_multithread(void (*test)(int16_t *, int16_t *, int16_t *, int, int, int, int, int, int, int, int, int), char *str) { + int errors = 0; + int sum = 0; + + if(rt_core_id() == 0) { + load(); + } + + synch_barrier(); + + if(rt_core_id() == 0) { + reset_timer(rt_cluster_id()); + start_timer(rt_cluster_id()); + } + test(g_W, g_x, g_y, IH, IW, FH, FW, OH, OW, 1, 0, 0); + if(rt_core_id() == 0) { + stop_timer(rt_cluster_id()); + + #ifdef CHECK_CHECKSUM + errors = 0; + sum = checksum(g_y); + if(sum != RIGHT_CHECKSUM) { + #ifndef PULP_SPI + printf("wrong checksum, 0x%08x instead of 0x%08x\n", sum, RIGHT_CHECKSUM); + #ifndef CHECK_ERROR + errors += 1; + #endif + #endif + #ifdef CHECK_ERROR + errors = check(g_y); + #endif + } + #else + errors = -1; + #endif + + #ifndef PULP_SPI + printf("%s, errors=%d, time=%d\n", str, errors, get_time(rt_cluster_id())); + #endif + + } + + return errors; +} + +void conv16_gold(int16_t *__restrict__ W, int16_t *__restrict__ x, int16_t *__restrict__ y, int h, int w, int fh, int fw, int oh, int ow, int nif, int a, int b) { + int i; + for (i=0; i> QF)); + #endif + } + } +} + +void conv16_unrolled_5x5(int16_t *__restrict__ W, int16_t *__restrict__ x, int16_t *__restrict__ y, int h, int w, int fh, int fw, int oh, int ow, int nif, int a, int b) { + int i; + for (i=0; i> QF); + + #endif + + } + } +} + +void conv16_unrolled_ptr_5x5(int16_t *__restrict__ W, int16_t *__restrict__ x, int16_t *__restrict__ y, int h, int w, int fh, int fw, int oh, int ow, int nif, int a, int b) { + register int i; + register int j; + + int16_t *y_ptr = y + a*oh*ow; + int16_t *x_base = x + b*h*w + (fh-1)*w + (fw-1); + int16_t *W_base = &W[((a*nif)+b)*fh*fw]; + int16_t *W_ptr; + int16_t *x_ptr; + + for (i=0; i> QF; + + #endif + + } + } + +} + +void conv16_gold_four_coarse(int16_t *__restrict__ W, int16_t *__restrict__ x, int16_t *__restrict__ y, int h, int w, int fh, int fw, int oh, int ow, int nif, int a, int b) { + int i; + register int myid = rt_core_id(); + register int num_cores = get_core_num(); + // synch_barrier(); + for (i=0; i> QF)); + #endif + } + } + synch_barrier(); +} + +void conv16_gold_four_coarsest(int16_t *__restrict__ W, int16_t *__restrict__ x, int16_t *__restrict__ y, int h, int w, int fh, int fw, int oh, int ow, int nif, int a, int b) { + int i; + register int myid = rt_core_id(); + register int num_cores = get_core_num(); + // synch_barrier(); + for (i=myid; i> QF)); + #endif + } + } + synch_barrier(); +} + +void conv16_unrolled_5x5_four_coarse(int16_t *__restrict__ W, int16_t *__restrict__ x, int16_t *__restrict__ y, int h, int w, int fh, int fw, int oh, int ow, int nif, int a, int b) { + int i; + register int myid = rt_core_id(); + register int num_cores = get_core_num(); + // synch_barrier(); + for (i=0; i> QF); // because i'm using 32-bit int + + #endif + + } + } + synch_barrier(); +} + +void conv16_unrolled_5x5_four_coarsest(int16_t *__restrict__ W, int16_t *__restrict__ x, int16_t *__restrict__ y, int h, int w, int fh, int fw, int oh, int ow, int nif, int a, int b) { + int i; + register int myid = rt_core_id(); + register int num_cores = get_core_num(); + // synch_barrier(); + for (i=myid; i> QF); // because i'm using 32-bit int + + #endif + + } + } + synch_barrier(); +} + +void conv16_unrolled_ptr_5x5_four_coarse(int16_t *__restrict__ W, int16_t *__restrict__ x, int16_t *__restrict__ y, int h, int w, int fh, int fw, int oh, int ow, int nif, int a, int b) { + register int i; + register int j; + register int myid = rt_core_id(); + register int num_cores = get_core_num(); + int16_t *W_ptr; + int16_t *x_ptr; + int16_t *y_ptr = y + a*oh*ow; + int16_t *x_base = x + b*h*w + (fh-1)*w + (fw-1); + int16_t *W_base = &W[((a*nif)+b)*fh*fw]; + + // synch_barrier(); + + for (i=0; i> QF; + + #endif + + } + } + + synch_barrier(); +} + +void conv16_unrolled_ptr_5x5_four_coarsest(int16_t *__restrict__ W, int16_t *__restrict__ x, int16_t *__restrict__ y, int h, int w, int fh, int fw, int oh, int ow, int nif, int a, int b) { + // register int i; + // register int j; + // register int myid = rt_core_id(); + // int16_t *W_ptr; + // int16_t *x_ptr; + int16_t *y_ptr = y + a*oh*ow; + int16_t *x_base = x + b*h*w + (fh-1)*w + (fw-1); + int16_t *W_base = &W[((a*nif)+b)*fh*fw]; + + register int myid = rt_core_id(); + register int num_cores = get_core_num(); + + register int i; + register int j; + int16_t *W_ptr; + int16_t *x_ptr; + + for (i=myid; i> QF; + + #endif + + } + } + + synch_barrier(); + +} + +#ifndef __GCC__ +#ifndef __riscv__ +void conv16_asm_mul_unrolled_5x5_four_coarsest(int16_t *__restrict__ W, int16_t *__restrict__ x, int16_t *__restrict__ y, int h, int w, int fh, int fw, int oh, int ow, int nif, int a, int b) { + register int i; + register int j; + register int myid = rt_core_id(); + register int num_cores = get_core_num(); + register int16_t *W_ptr; + register int16_t *x_ptr; + int16_t *y_ptr = y + a*oh*ow; + int16_t *x_base = x + b*h*w + (fh-1)*w + (fw-1); + int16_t *W_base = &W[((a*nif)+b)*fh*fw]; + for (i=myid; i Date: Thu, 19 Dec 2024 17:14:53 +0100 Subject: [PATCH 42/71] Move icache_fi_conv16 tests to reliability_tests directory --- astral/icache_fi_conv16 | 1 + {astral => reliability_tests}/icache_fi_conv16/Makefile | 0 {astral => reliability_tests}/icache_fi_conv16/conv16.h | 0 {astral => reliability_tests}/icache_fi_conv16/icache_conv16.c | 0 .../icache_fi_conv16/pulp_inject_fault.tcl | 0 5 files changed, 1 insertion(+) create mode 120000 astral/icache_fi_conv16 rename {astral => reliability_tests}/icache_fi_conv16/Makefile (100%) rename {astral => reliability_tests}/icache_fi_conv16/conv16.h (100%) rename {astral => reliability_tests}/icache_fi_conv16/icache_conv16.c (100%) rename {astral => reliability_tests}/icache_fi_conv16/pulp_inject_fault.tcl (100%) diff --git a/astral/icache_fi_conv16 b/astral/icache_fi_conv16 new file mode 120000 index 0000000..c97475b --- /dev/null +++ b/astral/icache_fi_conv16 @@ -0,0 +1 @@ +../reliability_tests/icache_fi_conv16 \ No newline at end of file diff --git a/astral/icache_fi_conv16/Makefile b/reliability_tests/icache_fi_conv16/Makefile similarity index 100% rename from astral/icache_fi_conv16/Makefile rename to reliability_tests/icache_fi_conv16/Makefile diff --git a/astral/icache_fi_conv16/conv16.h b/reliability_tests/icache_fi_conv16/conv16.h similarity index 100% rename from astral/icache_fi_conv16/conv16.h rename to reliability_tests/icache_fi_conv16/conv16.h diff --git a/astral/icache_fi_conv16/icache_conv16.c b/reliability_tests/icache_fi_conv16/icache_conv16.c similarity index 100% rename from astral/icache_fi_conv16/icache_conv16.c rename to reliability_tests/icache_fi_conv16/icache_conv16.c diff --git a/astral/icache_fi_conv16/pulp_inject_fault.tcl b/reliability_tests/icache_fi_conv16/pulp_inject_fault.tcl similarity index 100% rename from astral/icache_fi_conv16/pulp_inject_fault.tcl rename to reliability_tests/icache_fi_conv16/pulp_inject_fault.tcl From 06b73a8d225fea6aebeebdd1e5f92f9d96fb3248 Mon Sep 17 00:00:00 2001 From: Luigi Ghionda Date: Sun, 16 Feb 2025 17:26:00 +0100 Subject: [PATCH 43/71] Fix neureka's check_output function --- hwpe/neureka/src/main.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/hwpe/neureka/src/main.c b/hwpe/neureka/src/main.c index 4e82af7..d6c70f3 100644 --- a/hwpe/neureka/src/main.c +++ b/hwpe/neureka/src/main.c @@ -33,16 +33,16 @@ #define OUTPUT_SIZE 512 -extern int8_t output[]; +extern uint8_t output[]; uint32_t ecc_errs[ECC_REGS]; static int check_output() { - int checksum = 0; + uint32_t checksum = 0; for (int i = 0; i < OUTPUT_SIZE; i++) { checksum += output[i]; } - return (checksum == 0x00007330); + return (checksum != 0x00007330); } int errors = 0; From be5f94c5ba4c2998a24c9d8a01449494bfc3640b Mon Sep 17 00:00:00 2001 From: Luigi Ghionda Date: Sun, 16 Feb 2025 18:32:12 +0100 Subject: [PATCH 44/71] Add define to redmule and neureka tests to skip ecc-related checks if they are not implemented --- hwpe/neureka/Makefile | 4 +++ hwpe/neureka/src/main.c | 46 ++++++++++++++++++----------- hwpe/neureka/src/nnx_layer.c | 3 +- hwpe/redmule/Makefile | 3 ++ hwpe/redmule/redmule.c | 57 +++++++++++++++++++++--------------- 5 files changed, 71 insertions(+), 42 deletions(-) diff --git a/hwpe/neureka/Makefile b/hwpe/neureka/Makefile index 618cbfb..22ba1d0 100644 --- a/hwpe/neureka/Makefile +++ b/hwpe/neureka/Makefile @@ -31,6 +31,10 @@ PULP_CFLAGS += $(INC_FLAGS) -O3 PULP_APP = test +ifeq ($(no_ecc),1) + PULP_CFLAGS += -DNO_ECC +endif + ifeq ($(fault_inject),1) export FAULT_INJECTION=1 export FAULT_INJECTION_SCRIPT=$(CURDIR)/pulp_inject_fault.tcl diff --git a/hwpe/neureka/src/main.c b/hwpe/neureka/src/main.c index d6c70f3..d0133cf 100644 --- a/hwpe/neureka/src/main.c +++ b/hwpe/neureka/src/main.c @@ -29,13 +29,17 @@ #include "layer_util.h" #include "nnx_layer.h" +#ifndef NO_ECC #include "ecc_check.h" +#endif #define OUTPUT_SIZE 512 extern uint8_t output[]; +#ifndef NO_ECC uint32_t ecc_errs[ECC_REGS]; +#endif static int check_output() { uint32_t checksum = 0; @@ -46,10 +50,12 @@ static int check_output() { } int errors = 0; +#ifndef NO_ECC unsigned int intc_data_correctable_cnt = 0; unsigned int intc_meta_correctable_cnt = 0; unsigned int intc_data_uncorrectable_cnt = 0; unsigned int intc_meta_uncorrectable_cnt = 0; +#endif int main() { @@ -69,25 +75,31 @@ int main() { else printf ("[OK] Terminated test with no errors!!!\n"); - // Check number of detected errors by ECC modules inside interconnect - intc_data_correctable_cnt = hwpe_hci_ecc_get_data_correctable_count(cluster_id); - intc_meta_correctable_cnt = hwpe_hci_ecc_get_meta_correctable_count(cluster_id); - intc_data_uncorrectable_cnt = hwpe_hci_ecc_get_data_uncorrectable_count(cluster_id); - intc_meta_uncorrectable_cnt = hwpe_hci_ecc_get_meta_uncorrectable_count(cluster_id); - for (int i = 0; i < 16; i++) { - intc_meta_correctable_cnt += tcdm_scrubber_get_mismatch_count(cluster_id, i); - } + #ifndef NO_ECC + // Check number of detected errors by ECC modules inside interconnect + intc_data_correctable_cnt = hwpe_hci_ecc_get_data_correctable_count(cluster_id); + intc_meta_correctable_cnt = hwpe_hci_ecc_get_meta_correctable_count(cluster_id); + intc_data_uncorrectable_cnt = hwpe_hci_ecc_get_data_uncorrectable_count(cluster_id); + intc_meta_uncorrectable_cnt = hwpe_hci_ecc_get_meta_uncorrectable_count(cluster_id); + for (int i = 0; i < 16; i++) { + intc_meta_correctable_cnt += tcdm_scrubber_get_mismatch_count(cluster_id, i); + } - printf("Data errors corrected inside Neureka: %d. Data errors uncorrectable inside Neureka: %d\n", - ecc_errs[0], ecc_errs[1]); - printf("Meta errors corrected inside Neureka: %d. Meta errors uncorrectable inside Neureka: %d\n", - ecc_errs[2], ecc_errs[3]); + printf("Data errors corrected inside Neureka: %d. Data errors uncorrectable inside Neureka: %d\n", + ecc_errs[0], ecc_errs[1]); + printf("Meta errors corrected inside Neureka: %d. Meta errors uncorrectable inside Neureka: %d\n", + ecc_errs[2], ecc_errs[3]); - printf("Data errors corrected inside intc: %d. Data errors uncorrectable inside intc: %d\n", - intc_data_correctable_cnt, intc_data_uncorrectable_cnt); - printf("Meta errors corrected inside intc: %d. Meta errors uncorrectable inside intc: %d\n", - intc_meta_correctable_cnt, intc_meta_uncorrectable_cnt); + printf("Data errors corrected inside intc: %d. Data errors uncorrectable inside intc: %d\n", + intc_data_correctable_cnt, intc_data_uncorrectable_cnt); + printf("Meta errors corrected inside intc: %d. Meta errors uncorrectable inside intc: %d\n", + intc_meta_correctable_cnt, intc_meta_uncorrectable_cnt); + #endif } synch_barrier(); - return (errors != 0) && (intc_data_uncorrectable_cnt == 0 && intc_meta_uncorrectable_cnt == 0 && (ecc_errs[1]==0 && ecc_errs[3]==0)); + #ifndef NO_ECC + return (errors != 0) && (intc_data_uncorrectable_cnt == 0 && intc_meta_uncorrectable_cnt == 0 && (ecc_errs[1]==0 && ecc_errs[3]==0)); + #else + return errors; + #endif } diff --git a/hwpe/neureka/src/nnx_layer.c b/hwpe/neureka/src/nnx_layer.c index 41edddf..06a7dd4 100644 --- a/hwpe/neureka/src/nnx_layer.c +++ b/hwpe/neureka/src/nnx_layer.c @@ -161,8 +161,9 @@ static void task_execute(nnx_task_t *task) { #endif nnx_resolve_wait(dev, task); - +#ifndef NO_ECC nnx_read_ecc_regs(dev, (uint32_t)ecc_errs); +#endif nnx_term(dev); diff --git a/hwpe/redmule/Makefile b/hwpe/redmule/Makefile index 88346b6..2d118a6 100644 --- a/hwpe/redmule/Makefile +++ b/hwpe/redmule/Makefile @@ -5,6 +5,9 @@ PULP_CFLAGS = -O3 ifeq ($(use_dma),1) PULP_CFLAGS += -DUSE_DMA endif +ifeq ($(no_ecc),1) + PULP_CFLAGS += -DNO_ECC +endif ifeq ($(fault_inject),1) export FAULT_INJECTION=1 diff --git a/hwpe/redmule/redmule.c b/hwpe/redmule/redmule.c index 44a724d..61a4b2b 100644 --- a/hwpe/redmule/redmule.c +++ b/hwpe/redmule/redmule.c @@ -29,10 +29,12 @@ int main() { volatile int errors = 0; unsigned int cluster_id = rt_cluster_id(); - unsigned int intc_data_correctable_cnt, redmule_data_correctable_cnt = 0; - unsigned int intc_meta_correctable_cnt = 0; - unsigned int intc_data_uncorrectable_cnt, redmule_data_uncorrectable_cnt = 0; - unsigned int intc_meta_uncorrectable_cnt = 0; + #ifndef NO_ECC + unsigned int intc_data_correctable_cnt, redmule_data_correctable_cnt = 0; + unsigned int intc_meta_correctable_cnt = 0; + unsigned int intc_data_uncorrectable_cnt, redmule_data_uncorrectable_cnt = 0; + unsigned int intc_meta_uncorrectable_cnt = 0; + #endif if(get_core_id() == 0){ @@ -104,9 +106,11 @@ int main() { // Wait for end of computation redmule_evt_wait(); - // Check number of detected errors by ECC modules inside RedMulE - redmule_data_correctable_cnt = redmule_get_data_correctable_count(); - redmule_data_uncorrectable_cnt = redmule_get_data_uncorrectable_count(); + #ifndef NO_ECC + // Check number of detected errors by ECC modules inside RedMulE + redmule_data_correctable_cnt = redmule_get_data_correctable_count(); + redmule_data_uncorrectable_cnt = redmule_get_data_uncorrectable_count(); + #endif // Disable RedMulE hwpe_cg_disable(); @@ -117,24 +121,29 @@ int main() { printf ("Terminated test with %d errors. See you!\n", errors); - // Check number of detected errors by ECC modules inside interconnect - intc_data_correctable_cnt = hwpe_hci_ecc_get_data_correctable_count(cluster_id); - intc_meta_correctable_cnt = hwpe_hci_ecc_get_meta_correctable_count(cluster_id); - intc_data_uncorrectable_cnt = hwpe_hci_ecc_get_data_uncorrectable_count(cluster_id); - intc_meta_uncorrectable_cnt = hwpe_hci_ecc_get_meta_uncorrectable_count(cluster_id); - for (int i = 0; i < 16; i++) { - intc_meta_correctable_cnt += tcdm_scrubber_get_mismatch_count(cluster_id, i); - } - - printf ("Data errors corrected inside RedMulE: %d. Data errors uncorrectable inside RedMulE: %d \n", - redmule_data_correctable_cnt, redmule_data_uncorrectable_cnt); - printf("Data errors corrected inside intc: %d. Data errors uncorrectable inside intc: %d\n", - intc_data_correctable_cnt, intc_data_uncorrectable_cnt); - printf("Meta errors corrected inside intc: %d. Meta errors uncorrectable inside intc: %d\n", - intc_meta_correctable_cnt, intc_meta_uncorrectable_cnt); - + #ifndef NO_ECC + // Check number of detected errors by ECC modules inside interconnect + intc_data_correctable_cnt = hwpe_hci_ecc_get_data_correctable_count(cluster_id); + intc_meta_correctable_cnt = hwpe_hci_ecc_get_meta_correctable_count(cluster_id); + intc_data_uncorrectable_cnt = hwpe_hci_ecc_get_data_uncorrectable_count(cluster_id); + intc_meta_uncorrectable_cnt = hwpe_hci_ecc_get_meta_uncorrectable_count(cluster_id); + for (int i = 0; i < 16; i++) { + intc_meta_correctable_cnt += tcdm_scrubber_get_mismatch_count(cluster_id, i); + } + + printf ("Data errors corrected inside RedMulE: %d. Data errors uncorrectable inside RedMulE: %d \n", + redmule_data_correctable_cnt, redmule_data_uncorrectable_cnt); + printf("Data errors corrected inside intc: %d. Data errors uncorrectable inside intc: %d\n", + intc_data_correctable_cnt, intc_data_uncorrectable_cnt); + printf("Meta errors corrected inside intc: %d. Meta errors uncorrectable inside intc: %d\n", + intc_meta_correctable_cnt, intc_meta_uncorrectable_cnt); + #endif } synch_barrier(); - return (errors != 0) && (redmule_data_uncorrectable_cnt==0 && intc_data_uncorrectable_cnt == 0 && intc_meta_uncorrectable_cnt == 0); + #ifndef NO_ECC + return (errors != 0) && (redmule_data_uncorrectable_cnt==0 && intc_data_uncorrectable_cnt == 0 && intc_meta_uncorrectable_cnt == 0); + #else + return errors; + #endif } From d43cb0d58ba3ca985170c68d7192eaa2998a5398 Mon Sep 17 00:00:00 2001 From: Luigi Ghionda Date: Sun, 16 Feb 2025 18:36:49 +0100 Subject: [PATCH 45/71] Update `.gitignore` --- .gitignore | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/.gitignore b/.gitignore index 831ba58..fa8d3f0 100644 --- a/.gitignore +++ b/.gitignore @@ -5,3 +5,7 @@ /**/*~ !boot_code/crt0.S /simplified-runtime.xml +*.log +*.wlf +modelsim.ini +transcript From afc44a4645d564f137c9a86e425b495fc756c67b Mon Sep 17 00:00:00 2001 From: Georg Rutishauser Date: Tue, 11 Jun 2024 15:31:13 +0200 Subject: [PATCH 46/71] add 3 tests for XpulpNN(v2) --- rt_nn_tests.yaml | 10 + rt_nn_tests/xpnn_conv/Makefile | 20 + rt_nn_tests/xpnn_conv/data_statstest.h | 1894 ++ rt_nn_tests/xpnn_conv/dory_dma.c | 176 + rt_nn_tests/xpnn_conv/dory_dma.h | 52 + rt_nn_tests/xpnn_conv/mchan.h | 137 + rt_nn_tests/xpnn_conv/pulp_nn_kernels.h | 26528 ++++++++++++++++ rt_nn_tests/xpnn_conv/pulp_nn_mix_kernels.h | 7093 +++++ rt_nn_tests/xpnn_conv/pulp_nn_utils.h | 2006 ++ rt_nn_tests/xpnn_conv/pulp_nn_utils_xpnn.h | 1937 ++ rt_nn_tests/xpnn_conv/test.c | 230 + .../xpnn_conv/xpulp_nn_conv_u4_u8_i2.c | 303 + .../xpnn_conv/xpulp_nn_matmul_u4_u8_i2.c | 490 + rt_nn_tests/xpnn_maxpool_2b/Makefile | 19 + rt_nn_tests/xpnn_maxpool_2b/data_statstest.h | 10270 ++++++ rt_nn_tests/xpnn_maxpool_2b/dory_dma.c | 176 + rt_nn_tests/xpnn_maxpool_2b/dory_dma.h | 52 + rt_nn_tests/xpnn_maxpool_2b/mchan.h | 137 + .../openocd-zcu102-olimex-arm-usb-ocd-h.cfg | 41 + rt_nn_tests/xpnn_maxpool_2b/pulp_nn_kernels.h | 26528 ++++++++++++++++ .../xpnn_maxpool_2b/pulp_nn_mix_kernels.h | 7093 +++++ rt_nn_tests/xpnn_maxpool_2b/pulp_nn_utils.h | 2006 ++ .../xpnn_maxpool_2b/pulp_nn_utils_xpnn.h | 1937 ++ rt_nn_tests/xpnn_maxpool_2b/test.c | 172 + .../xpnn_maxpool_2b/xpulp_nn_maxpool_i2.c | 146 + rt_nn_tests/xpnnv2_conv/Makefile | 20 + rt_nn_tests/xpnnv2_conv/data_statstest.h | 1894 ++ rt_nn_tests/xpnnv2_conv/dory_dma.c | 176 + rt_nn_tests/xpnnv2_conv/dory_dma.h | 52 + rt_nn_tests/xpnnv2_conv/mchan.h | 137 + .../openocd-zcu102-olimex-arm-usb-ocd-h.cfg | 41 + rt_nn_tests/xpnnv2_conv/pulp_nn_kernels.h | 26528 ++++++++++++++++ rt_nn_tests/xpnnv2_conv/pulp_nn_mix_kernels.h | 7093 +++++ rt_nn_tests/xpnnv2_conv/pulp_nn_utils.h | 2006 ++ rt_nn_tests/xpnnv2_conv/pulp_nn_utils_xpnn.h | 1937 ++ rt_nn_tests/xpnnv2_conv/test.c | 230 + .../xpnnv2_conv/xpulp_nn_mix_conv_u4_u8_i2.c | 298 + .../xpulp_nn_mix_matmul_u4_u8_i2.c | 470 + 38 files changed, 130335 insertions(+) create mode 100644 rt_nn_tests.yaml create mode 100644 rt_nn_tests/xpnn_conv/Makefile create mode 100644 rt_nn_tests/xpnn_conv/data_statstest.h create mode 100644 rt_nn_tests/xpnn_conv/dory_dma.c create mode 100644 rt_nn_tests/xpnn_conv/dory_dma.h create mode 100644 rt_nn_tests/xpnn_conv/mchan.h create mode 100644 rt_nn_tests/xpnn_conv/pulp_nn_kernels.h create mode 100644 rt_nn_tests/xpnn_conv/pulp_nn_mix_kernels.h create mode 100644 rt_nn_tests/xpnn_conv/pulp_nn_utils.h create mode 100644 rt_nn_tests/xpnn_conv/pulp_nn_utils_xpnn.h create mode 100644 rt_nn_tests/xpnn_conv/test.c create mode 100644 rt_nn_tests/xpnn_conv/xpulp_nn_conv_u4_u8_i2.c create mode 100644 rt_nn_tests/xpnn_conv/xpulp_nn_matmul_u4_u8_i2.c create mode 100644 rt_nn_tests/xpnn_maxpool_2b/Makefile create mode 100644 rt_nn_tests/xpnn_maxpool_2b/data_statstest.h create mode 100644 rt_nn_tests/xpnn_maxpool_2b/dory_dma.c create mode 100644 rt_nn_tests/xpnn_maxpool_2b/dory_dma.h create mode 100644 rt_nn_tests/xpnn_maxpool_2b/mchan.h create mode 100644 rt_nn_tests/xpnn_maxpool_2b/openocd-zcu102-olimex-arm-usb-ocd-h.cfg create mode 100644 rt_nn_tests/xpnn_maxpool_2b/pulp_nn_kernels.h create mode 100644 rt_nn_tests/xpnn_maxpool_2b/pulp_nn_mix_kernels.h create mode 100644 rt_nn_tests/xpnn_maxpool_2b/pulp_nn_utils.h create mode 100644 rt_nn_tests/xpnn_maxpool_2b/pulp_nn_utils_xpnn.h create mode 100644 rt_nn_tests/xpnn_maxpool_2b/test.c create mode 100644 rt_nn_tests/xpnn_maxpool_2b/xpulp_nn_maxpool_i2.c create mode 100644 rt_nn_tests/xpnnv2_conv/Makefile create mode 100644 rt_nn_tests/xpnnv2_conv/data_statstest.h create mode 100644 rt_nn_tests/xpnnv2_conv/dory_dma.c create mode 100644 rt_nn_tests/xpnnv2_conv/dory_dma.h create mode 100644 rt_nn_tests/xpnnv2_conv/mchan.h create mode 100644 rt_nn_tests/xpnnv2_conv/openocd-zcu102-olimex-arm-usb-ocd-h.cfg create mode 100644 rt_nn_tests/xpnnv2_conv/pulp_nn_kernels.h create mode 100644 rt_nn_tests/xpnnv2_conv/pulp_nn_mix_kernels.h create mode 100644 rt_nn_tests/xpnnv2_conv/pulp_nn_utils.h create mode 100644 rt_nn_tests/xpnnv2_conv/pulp_nn_utils_xpnn.h create mode 100644 rt_nn_tests/xpnnv2_conv/test.c create mode 100644 rt_nn_tests/xpnnv2_conv/xpulp_nn_mix_conv_u4_u8_i2.c create mode 100644 rt_nn_tests/xpnnv2_conv/xpulp_nn_mix_matmul_u4_u8_i2.c diff --git a/rt_nn_tests.yaml b/rt_nn_tests.yaml new file mode 100644 index 0000000..d8bc0e7 --- /dev/null +++ b/rt_nn_tests.yaml @@ -0,0 +1,10 @@ +parallel_bare_tests: + xpnn_conv: + path: ./rt_nn_tests/xpnn_conv + command: make clean all run + xpnnv2_conv: + path: ./rt_nn_tests/xpnnv2_conv + command: make clean all run + xpnn_maxpool_2b: + path: ./xpnn_maxpool_2b/xpnn_maxpool_2b + command: make clean all run diff --git a/rt_nn_tests/xpnn_conv/Makefile b/rt_nn_tests/xpnn_conv/Makefile new file mode 100644 index 0000000..3d1d03f --- /dev/null +++ b/rt_nn_tests/xpnn_conv/Makefile @@ -0,0 +1,20 @@ +APP = test +PULP_APP = test +PULP_APP_SRCS = test.c +PULP_APP_SRCS += dory_dma.c +PULP_APP_SRCS += xpulp_nn_conv_u4_u8_i2.c +PULP_APP_SRCS += xpulp_nn_matmul_u4_u8_i2.c + +CORE=8 + + +PULP_CFLAGS += -DNUM_CORES=$(CORE) -I. -O3 +PULP_LDFLAGS += -lc -lm -lgcc -Wl,-print-memory-usage + +PULP_APP_CFLAGS += -DNUM_CORES=$(CORE) -I. -O3 +PULP_APP_LDFLAGS += -lc -lm -lgcc -Wl,-print-memory-usage + +PULP_CFLAGS += -DPULP_RUNTIME -DSINGLE_CORE_DMA -DALWAYS_BLOCK_DMA_TRANSFERS + + +include $(PULP_SDK_HOME)/install/rules/pulp.mk diff --git a/rt_nn_tests/xpnn_conv/data_statstest.h b/rt_nn_tests/xpnn_conv/data_statstest.h new file mode 100644 index 0000000..d679d0f --- /dev/null +++ b/rt_nn_tests/xpnn_conv/data_statstest.h @@ -0,0 +1,1894 @@ +// this file is generated automatically by the python script `generate_statstest.py` + +#ifndef _DATA_H +#define _DATA_H + + + +#define IM2COL_DIM (72 * NUM_CORES * 2) // for NUM_CORES cores +#define OUTPUT_DIM 512 +#define OUTPUT_DIM_FP (1) +uint8_t pWeight_0 [] = { +0x29, +0xc5, +0xac, +0x95, +0x91, +0x84, +0x79, +0x41, +0xf7, +0xd6, +0x8a, +0x4e, +0xa8, +0x85, +0x7f, +0x76, +0x57, +0x20, +0x83, +0xa5, +0xfa, +0x8a, +0xd4, +0xf2, +0x58, +0xa0, +0x7d, +0x60, +0x0a, +0x58, +0x02, +0x04, +0x86, +0xfd, +0xcc, +0xfb, +0x8c, +0xc0, +0xc0, +0x88, +0xde, +0x5d, +0x3b, +0x3c, +0x69, +0x80, +0xd0, +0x38, +0x83, +0xe5, +0x35, +0x27, +0x14, +0x5d, +0x2a, +0xe8, +0xd0, +0xf9, +0xcc, +0x81, +0x16, +0x31, +0xd3, +0xc6, +0xf1, +0xfa, +0xe2, +0x5b, +0x08, +0x6d, +0xa5, +0x01, +0xb2, +0x28, +0x54, +0x06, +0x78, +0x97, +0x40, +0x73, +0xd2, +0x27, +0x96, +0xbd, +0x1f, +0xc0, +0xfa, +0xb8, +0x49, +0x68, +0x75, +0x2f, +0xe5, +0xa4, +0xcb, +0xcc, +0x09, +0x39, +0x85, +0x71, +0xc3, +0xfb, +0x6f, +0x9b, +0x42, +0x0f, +0x91, +0x1b, +0x66, +0xaf, +0xfb, +0xc8, +0xf8, +0xba, +0x9d, +0x0a, +0xd2, +0xa8, +0x39, +0x4a, +0x2d, +0xcd, +0xf8, +0xc4, +0x8c, +0x02, +0xe2, +0x4f, +0x68, +0xff, +0x96, +0x7f, +0x96, +0xad, +0xa5, +0xf2, +0xb8, +0xb8, +0x5d, +0x02, +0x4c, +0x19, +0xb0, +0x11, +0x51, +0x8d, +0xb3, +0xb1, +0x3f, +0xcd, +0xaf, +0x85, +0x94, +0x65, +0x24, +0xa1, +0xbb, +0x3e, +0xa1, +0xe2, +0xab, +0xb4, +0x62, +0x6c, +0xf5, +0x2f, +0x5a, +0xbe, +0x68, +0xba, +0x8a, +0xcf, +0xa1, +0x3f, +0xfa, +0xb8, +0xe9, +0xe8, +0xfa, +0x4e, +0xdd, +0x57, +0x45, +0x1a, +0x5c, +0xfd, +0x58, +0x77, +0x52, +0xd6, +0x15, +0x07, +0x39, +0xf2, +0x34, +0xf2, +0x66, +0x90, +0xea, +0x42, +0x42, +0x43, +0x36, +0xd7, +0xc3, +0xb8, +0x2c, +0x10, +0xd0, +0x90, +0x2d, +0xf9, +0x6a, +0xbc, +0x57, +0x19, +0x69, +0x60, +0x65, +0x7f, +0xee, +0x10, +0x06, +0x71, +0xe4, +0x49, +0x5b, +0x5a, +0x5a, +0x9c, +0x6f, +0x87, +0x68, +0x44, +0xb4, +0xf8, +0xe8, +0xae, +0x75, +0xe0, +0x0f, +0x43, +0x51, +0x71, +0xde, +0xce, +0x56, +0x13, +0x3d, +0xf9, +0x80, +0x1f, +0x0a, +0x9e, +0x2b, +0xa7, +0x73, +0x76, +0xe2, +0x36, +0x16, +0x42, +0x0c, +0x73, +0x59, +0xf6, +0x53, +0xaf, +0x77, +0x12, +0x67, +0x33, +0xb7, +0x90, +0x41, +0x55, +0x90, +0xbf, +0x8c, +0x31, +0xfc, +0xdd, +0x9c, +0x42, +0x9a, +0xfd, +0x30, +0xe5, +0x12, +0x12, +0x6c, +0xc3, +0xa6, +0xd8, +0xb0, +0x41, +0x4c, +0xd0, +0x27, +0x97, +0x7f, +0x8b, +0x4c, +0x44, +0xb0, +0x7f, +0xba, +0x18, +0x37, +0x46, +0x9e, +0xdc, +0xbf, +0xd8, +0x97, +0xce, +0x3b, +0x61, +0x7e, +0x9b, +0x36, +0xe7, +0x0c, +0x4e, +0x57, +0x21, +0x36, +0x18, +0x4d, +0x17, +0x41, +0x83, +0xd4, +0x8b, +0xf7, +0x53, +0x4d, +0xff, +0x98, +0xbb, +0x79, +0x38, +0x2e, +0x22, +0x8f, +0xe5, +0x5e, +0x81, +0xdb, +0xf0, +0x2b, +0x16, +0xf6, +0x69, +0xb1, +0xe5, +0xd6, +0xab, +0xc6, +0xb1, +0xd0, +0x62, +0x57, +0xa4, +0x6c, +0xe8, +0x0e, +0x65, +0xb6, +0x18, +0x7a, +0xe7, +0x99, +0x92, +0x68, +0x83, +0x7e, +0xe3, +0xca, +0x61, +0xb0, +0x5e, +0x4d, +0x25, +0x92, +0xe5, +0x02, +0xbb, +0x81, +0xfa, +0x81, +0x92, +0x9d, +0x80, +0xd7, +0xf4, +0x73, +0xe3, +0x63, +0x64, +0x5a, +0x26, +0x98, +0x55, +0x32, +0x65, +0xf9, +0x5c, +0x5d, +0xdc, +0x2e, +0x59, +0xf1, +0x90, +0xf5, +0x78, +0x05, +0xb1, +0x5c, +0xde, +0xdd, +0x93, +0x3f, +0xd8, +0xc2, +0x2a, +0x94, +0xfd, +0x51, +0x72, +0x9c, +0xda, +0x58, +0xc6, +0x94, +0xe5, +0xed, +0x3d, +0xf3, +0x7a, +0xd8, +0x91, +0xbf, +0xeb, +0x31, +0xda, +0xe4, +0x89, +0x74, +0x31, +0x86, +0x42, +0xe2, +0x1b, +0x7e, +0x28, +0xaf, +0xf8, +0xfd, +0x0b, +0x9a, +0xa7, +0x39, +0xd8, +0x9d, +0x25, +0x7f, +0xe5, +0xc4, +0x7f, +0x98, +0x9f, +0x79, +0x5f, +0x4b, +0x7a, +0x05, +0x07, +0x6c, +0xe9, +0x1f, +0xd0, +0x60, +0xfb, +0x7f, +0xf6, +0x5c, +0xa2, +0x3d, +0x2c, +0x22, +0x7b, +0xbe, +0x39, +0x0a, +0xfc, +0x8f, +0x8b, +0x80, +0x6f, +0x6f, +0x1b, +0x28, +0x9b, +0x79, +0x0e, +0xb3, +0x57, +0x07, +0x45, +0x61, +0x83, +0x12, +0x7a, +0x53, +0x3d, +0x80, +0xf1, +0xe1, +0xd1, +0x40, +0x26, +0xfd, +0xd8, +0x81, +0xab, +0xbe, +0x16, +0xfa, +0xf2, +0x25, +0x15, +0x8f, +0xcd, +0xc7, +0xbe, +0xe1, +0xd9, +0x95, +0x3b, +0xbd, +0x6b, +0x81, +0x59, +0x26, +0x27, +0xe8, +0x1b, +0x74, +0x7b, +0x95, +0xb4, +0xe0, +0x60, +0x0b, +0x44, +0x67, +0x7e, +0xb9, +0xfb, +0xc2, +0xc3, +0xb2, +0xd5, +0x22, +0x39, +0xae, +0xb2, +0xd9, +0x2e, +0x63, +0x19, +0x04, +0xe5, +0x69, +0xf5, +0x5f, +0x2a, +0x9f, +0x8f, +0xe2, +0xab, +0x89, +0x8d, +0xd9, +0x23, +0x45, +0x75, +0xa2, +0x2e, +0x1d, +0xc2, +0xe4, +0xf0, +0xe0, +0xbb, +0x26, +0x8b, +0x7c, +0xd4, +0xaa, +0x6d, +0x74, +0x0e, +0xa7, +0x73, +0x44, +0xc2, +0xee, +0x74, +0xd4, +0x07, +0xf9, +0xdd, +0xd6, +0x57, +0x84, +0xdd, +0xee, +0x67, +0x82, +0xd1, +0x52, +0xb3, +0x35, +0xb3, +0xb4, +0x3e, +0x19, +0xd7, +0x55, +0x22, +0xf0, +0xdd, +0xe1, +0x80, +0x15, +0x71, +0xff, +0x58, +0x87, +0xe2, +0xf2, +0xd4, +0x05, +0x68, +0x46, +0xf2, +0x22, +0xd0, +0x46, +0xa8, +0xa4, +0x16, +0x81, +0xc5, +0x7d, +0x1b, +0x50, +0x25, +0x91, +0xcd, +0x29, +0xa6, +0x35, +0x32, +0xf5, +0xff, +0x53, +0xd7, +0x00, +0xf6, +0xab, +0x39, +0xac, +0x85, +0xe9, +0x1a, +0x80, +0x1f, +0x89, +0x30, +0x77, +0x9a, +0x5e, +0xb2, +0xdb, +0x74, +0x53, +0x48, +0x6a, +0x91, +0x11, +0xf0, +0xd8, +0x94, +0x63, +0xbc, +0x32, +0x84, +0x55, +0x04, +0x84, +0x8a, +0x29, +0x38, +0x9c, +0x2c, +0x14, +0x23, +0xfe, +0xb9, +0x88, +0x6e, +0xac, +0xf4, +0xcf, +0xd6, +0x4a, +0xe5, +0x19, +0xad, +0x80, +0x4b, +0x34, +0x0f, +0xbc, +0x93, +0x86, +0x1c, +0x77, +0x1c, +0x7e, +0xda, +0x39, +0xf3, +0xb0, +0x7b, +0xae, +0x0a, +0x4a, +0x49, +0xba, +0x69, +0xf5, +0xa5, +0x05, +0x3b, +0xab, +0xfd, +0xa1, +0xc6, +0xc7, +0x8d, +0x7e, +0x1a, +0x1d, +0xa4, +0x6d, +0x54, +0xe2, +0x1b, +0xb9, +0x46, +0x42, +0xbe, +0xc9, +0x6a, +0xc7, +0x14, +0xa1, +0xd4, +0x27, +0x39, +0x65, +0xf8, +0xb3, +0xf4, +0x1a, +0x31, +0x9a, +0xc5, +0x74, +0x63, +0xb3, +0xa9, +0x10, +0xe2, +0x22, +0x1d, +0xc6, +0x20, +0x00, +0x58, +0xa7, +0xaa, +0x82, +0x25, +0x71, +0xf6, +0xb0, +0x5d, +0xd8, +0xeb, +0xf5, +0x17, +0xd0, +0x04, +0x07, +0xac, +0xf5, +0x63, +0x7a, +0x26, +0x0a, +0x68, +0xe3, +0x74, +0xc5, +0x44, +0x44, +0xd8, +0xf3, +0xa5, +0x99, +0x77, +0xc4, +0x48, +0x47, +0xc0, +0x94, +0xd6, +0x27, +0x79, +0x3d, +0x0a, +0x83, +0x46, +0x0b, +0x8f, +0xd7, +0x03, +0x7c, +0xa7, +0x35, +0xd5, +0x70, +0xb2, +0x19, +0x29, +0x14, +0xb6, +0xbe, +0x61, +0xfb, +0x5c, +0x04, +0xf4, +0x7f, +0xb4, +0xbd, +0xcb, +0x4c, +0xae, +0xd0, +0x20, +0x3e, +0xd9, +0x25, +0xcc, +0xa9, +0xd2, +0x13, +0xf7, +0x66, +0x4e, +0xbe, +0xeb, +0xed, +0x6b, +0xb0, +0x9c, +0xd3, +0x94, +0x21, +0x33, +0x70, +0x16, +0x53, +0xfe, +0x21, +0x08, +0xf5, +0xbc, +0x1b, +0xb1, +0x92, +0x3a, +0xf4, +0xd2, +0xc7, +0x40, +0x96, +0x01, +0xbc, +0xd5, +0x96, +0x35, +0x17, +0xa0, +0x0c, +0x1b, +0x85, +0x2e, +0xb3, +0xab, +0x55, +0xcb, +0xc0, +0xe0, +0x75, +0x61, +0xf8, +0xa6, +0x96, +0xa2, +0x3f, +0x57, +0xd6, +0xb7, +0xfc, +0x8a, +0x6a, +0x6c, +0xcc, +0x38, +0x7f, +0x8c, +0x99, +0x6e, +0x5e, +0x19, +0x23, +0x21, +0xb0, +0xaa, +0x77, +0x43, +0x05, +0x9b, +0x70, +0xd4, +0xde, +0xf8, +0x7d, +0xbb, +0xad, +0x28, +0x4e, +0xc3, +0x5f, +0x97, +0x1d, +0x79, +0xd9, +0x55, +0xce, +0x28, +0x13, +0x91, +0xc0, +0x94, +0x5b, +0x04, +0x70, +0xcc, +0xd8, +0x38, +0xa9, +0x72, +0x0e, +0xd1, +0x93, +0xe4, +0x81, +0x47, +0x29, +0xec, +0x0f, +0x4c, +0x5d, +0x50, +0x6e, +0xd7, +0xa2, +0xe3, +0x4e, +0x58, +0x29, +0x05, +0xa2, +0x37, +0x27, +0xfe, +0x84, +0x51, +0xac, +0xc2, +0xc8, +0x03, +0xe6, +0x5f, +0xea, +0x15, +0x25, +0x7a, +0x39, +0x60, +0xd1, +0xc8, +0x94, +0xb3, +0xf9, +0x8b, +0x20, +0x45, +0xec, +0x75, +0x54, +0xd1, +0xdd, +0x6a, +0x39, +0x31, +0xc9, +0x62, +0x67, +0x84, +0xb3, +0x47, +0xbb, +0x10, +0xb1, +0x0f, +0x5e, +0x11, +0x00, +0x1e, +0xc5, +0x79, +0xf9, +0xd9, +0xb7, +0x18, +0x0a, +0x55, +0x1d, +0x99, +0xd5, +0x46, +0x2a, +0x22, +0xd9, +0x2e, +0xc3, +0x2d, +0xd1, +0x9e, +0xb9, +0x3a, +0x32, +0x1a, +0x13, +0xdb, +0xe5, +0x45, +0x1a, +0x83, +0x38, +0xec, +0x45, +0x7b, +0x87, +0x01, +0x3c, +0x32, +0xd3, +0x60, +0x09, +0xdd, +0xce, +0x87, +0xa3, +0x03, +0x02, +0x91, +0xfa, +0xc5, +0x4d, +0x4d, +0x08, +0x6d, +0xca, +0x9e, +0xfa, +0x7e, +0x8c, +0xdf, +0x3e, +0xb3, +0x10, +0xfb, +0xa3, +0x2f, +0xef, +0x7e, +0x1e, +0x9f, +0xd3, +0x78, +0xfb, +0x5f, +0x50, +0x4c, +0xaa, +0x16, +0x0c, +0x35, +0x46, +0x10, +0x3c, +0x67, +0xaa, +0x95, +0x8a, +0x38, +0xf3, +0xb5, +0x07, +0xdb, +0x6c, +0x52, +0xde, +0xc6, +0x77, +0x0e, +0xd0, +0xf7, +0xea, +0x1f, +0x96, +0xae +}; + +uint8_t pIn_0 [] = { +0x09, +0xe8, +0x1c, +0x6f, +0x55, +0xe1, +0xa3, +0x4d, +0xad, +0x94, +0x4a, +0x9d, +0x90, +0xfc, +0x76, +0xc9, +0x84, +0xce, +0xa8, +0x18, +0xe2, +0x30, +0x85, +0x41, +0x6f, +0x11, +0x09, +0xff, +0x07, +0xb0, +0x5b, +0xe4, +0x40, +0xf3, +0x8f, +0xcd, +0xa3, +0x2f, +0x85, +0x67, +0x31, +0x96, +0xc2, +0x86, +0x1d, +0xe5, +0xc1, +0xee, +0x0b, +0x4d, +0x50, +0xa6, +0x00, +0x69, +0xff, +0x8c, +0x4c, +0xb5, +0x46, +0xd5, +0x14, +0xd0, +0xdb, +0x47, +0xf9, +0x2d, +0x77, +0x9a, +0x92, +0xa4, +0xe8, +0xab, +0xbd, +0xd3, +0x88, +0xb6, +0x00, +0xbc, +0xb0, +0xe7, +0x60, +0xd9, +0x8b, +0x1b, +0x9e, +0x06, +0x95, +0x99, +0x8d, +0x6e, +0x21, +0x20, +0xa3, +0x5e, +0x99, +0x27, +0xb1, +0x7d, +0xce, +0xdc, +0xcf, +0xd6, +0xe8, +0x16, +0xaa, +0xec, +0x67, +0x8c, +0x23, +0xd0, +0x15, +0xa0, +0xe8, +0x86, +0x2b, +0x90, +0xe1, +0xb2, +0x5b, +0x13, +0x19, +0xbe, +0x8c, +0x9e, +0x12, +0x13, +0xeb, +0x69 +}; + +int32_t pLambda_0 [] = { +0x00247d20, +0x001b6100, +0x00124840, +0x00247d20, +0x00247d20, +0x00124840, +0x001b6100, +0x00247d20, +0x00092c20, +0x00247d20, +0x001b6100, +0x00124840, +0x00124840, +0x00124840, +0x00124840, +0x001b6100, +0x00124840, +0x00124840, +0x00092c20, +0x00124840, +0x001b6100, +0x00092c20, +0x00124840, +0x001b6100, +0x001b6100, +0x00247d20, +0x00247d20, +0x00092c20, +0x001b6100, +0x00092c20, +0x00247d20, +0x001b6100 +}; + +int32_t pKappa_0 [] = { +0x00000acb, +0x00000818, +0x00000566, +0x00000acb, +0x00000acb, +0x00000566, +0x00000818, +0x00000acb, +0x000002b3, +0x00000acb, +0x00000818, +0x00000566, +0x00000566, +0x00000566, +0x00000566, +0x00000818, +0x00000566, +0x00000566, +0x000002b3, +0x00000566, +0x00000818, +0x000002b3, +0x00000566, +0x00000818, +0x00000818, +0x00000acb, +0x00000acb, +0x000002b3, +0x00000818, +0x000002b3, +0x00000acb, +0x00000818 +}; + + +/* -----------EXPECTED OUTPUTS----------- */ +uint8_t exp_outp_0 [] = { +0xbb, +0x94, +0x64, +0xc4, +0x8c, +0x6e, +0x90, +0xff, +0x34, +0xbe, +0x8a, +0x76, +0x5f, +0x58, +0x58, +0x88, +0x6a, +0x6b, +0x34, +0x5f, +0x77, +0x30, +0x66, +0xa7, +0xa9, +0xbe, +0xe5, +0x33, +0xc3, +0x2d, +0xbc, +0x80, +0x91, +0x97, +0x53, +0xb6, +0x25, +0x55, +0xa3, +0xc9, +0x29, +0x7f, +0x79, +0x66, +0x58, +0x3e, +0x3c, +0x79, +0x46, +0x68, +0x2d, +0x51, +0x5d, +0x2a, +0x65, +0x92, +0x5b, +0x6c, +0xbd, +0x33, +0x97, +0x26, +0x79, +0x7e, +0xb6, +0x98, +0x45, +0xa0, +0x37, +0x54, +0x9a, +0xd5, +0x20, +0x87, +0x7d, +0x69, +0x5f, +0x43, +0x4b, +0x7e, +0x49, +0x77, +0x26, +0x5f, +0x54, +0x2b, +0x77, +0x91, +0x71, +0x94, +0xec, +0x27, +0x85, +0x27, +0x78, +0x6a, +0xe0, +0xb9, +0x76, +0xb4, +0x9e, +0x6b, +0xc0, +0xf0, +0x34, +0xd6, +0x7d, +0x7a, +0x5a, +0x55, +0x69, +0x86, +0x52, +0x7e, +0x34, +0x6b, +0x80, +0x39, +0x80, +0xc3, +0x90, +0xc0, +0xf0, +0x3d, +0xb4, +0x38, +0xc6, +0xb3, +0xa9, +0x7c, +0x4e, +0x5d, +0x68, +0x74, +0xa2, +0xc5, +0x26, +0xac, +0x7d, +0x5e, +0x44, +0x48, +0x55, +0x77, +0x52, +0x6e, +0x30, +0x60, +0x5d, +0x1f, +0x57, +0x84, +0x8f, +0x99, +0xa4, +0x29, +0x97, +0x2e, +0x80, +0x6f, +0x69, +0x63, +0x42, +0x35, +0x00, +0x61, +0x68, +0x9c, +0x21, +0x82, +0x36, +0x38, +0x10, +0x24, +0x48, +0x39, +0x16, +0x55, +0x14, +0x2c, +0x28, +0x22, +0x43, +0x58, +0x41, +0x4b, +0x8c, +0x21, +0x53, +0x22, +0x58, +0x49, +0x72, +0x62, +0x27, +0x13, +0x0b, +0x52, +0x89, +0x7b, +0x19, +0x93, +0x6b, +0x4c, +0x1b, +0x22, +0x41, +0x36, +0x1a, +0x61, +0x1e, +0x29, +0x4b, +0x12, +0x54, +0x5d, +0x49, +0x68, +0x93, +0x1d, +0x72, +0x26, +0x5a, +0x5b, +0xe8, +0x9d, +0x64, +0x8b, +0x71, +0x65, +0xb3, +0xb4, +0x2e, +0xd2, +0x8e, +0x69, +0x5b, +0x48, +0x6c, +0x6e, +0x33, +0x70, +0x2c, +0x57, +0x67, +0x39, +0x75, +0xb2, +0x80, +0xba, +0xdf, +0x38, +0x9c, +0x33, +0xc1, +0x94, +0x92, +0x67, +0x49, +0x90, +0x5e, +0x75, +0x78, +0xd7, +0x2b, +0xaa, +0x65, +0x72, +0x43, +0x41, +0x56, +0x5e, +0x4c, +0x55, +0x2d, +0x5a, +0x6a, +0x25, +0x54, +0x97, +0x89, +0xcb, +0xab, +0x24, +0x9f, +0x27, +0x84, +0x6b, +0x87, +0x73, +0x3b, +0x25, +0x00, +0x62, +0x63, +0x82, +0x16, +0x7b, +0x38, +0x47, +0x22, +0x1c, +0x49, +0x57, +0x24, +0x58, +0x26, +0x33, +0x25, +0x1c, +0x54, +0x81, +0x31, +0x5f, +0x7f, +0x28, +0x6f, +0x23, +0x52, +0x5b, +0x8c, +0x65, +0x39, +0x34, +0x05, +0x5d, +0x7f, +0x7f, +0x1c, +0x7c, +0x4d, +0x73, +0x11, +0x21, +0x3e, +0x5d, +0x26, +0x55, +0x1a, +0x58, +0x1d, +0x22, +0x43, +0x65, +0x42, +0x56, +0xac, +0x26, +0x5c, +0x2c, +0x4c, +0x5d, +0xf7, +0x87, +0x58, +0x65, +0x59, +0x62, +0x95, +0xa8, +0x27, +0xad, +0x80, +0x5b, +0x51, +0x54, +0x70, +0x6a, +0x34, +0x77, +0x27, +0x75, +0x75, +0x30, +0x6c, +0x95, +0x88, +0xa9, +0xca, +0x2c, +0x7c, +0x37, +0x8f, +0x84, +0xe0, +0xa4, +0x62, +0x7d, +0xaa, +0x77, +0xa7, +0xfd, +0x2f, +0xc5, +0x8a, +0x79, +0x58, +0x68, +0x6b, +0x80, +0x55, +0x7c, +0x43, +0x7b, +0x84, +0x2f, +0x69, +0xa7, +0xa8, +0xf3, +0xbb, +0x35, +0xbd, +0x30, +0xd8, +0x82, +0x9a, +0xa9, +0x5b, +0x60, +0x7f, +0x87, +0x82, +0xc9, +0x2c, +0xcf, +0x7f, +0x71, +0x51, +0x63, +0x61, +0x7d, +0x35, +0x6a, +0x31, +0x5f, +0x63, +0x38, +0x50, +0xaf, +0x6d, +0xd0, +0x8d, +0x31, +0x88, +0x31, +0xc9, +0x8b, +0xaa, +0x8e, +0x6a, +0x6c, +0x82, +0x78, +0x83, +0xc4, +0x31, +0xdc, +0x77, +0x77, +0x4c, +0x57, +0x6c, +0x8b, +0x47, +0x6b, +0x3b, +0x69, +0x7d, +0x36, +0x52, +0xab, +0x7b, +0xda, +0xbc, +0x33, +0xa2, +0x2e, +0xbe, +0x75, +0xf6, +0xab, +0x6a, +0xb6, +0xad, +0x7b, +0xa4, +0xc6, +0x33, +0xe6, +0x8e, +0x7b, +0x77, +0x62, +0x79, +0x84, +0x4a, +0x79, +0x34, +0x7d, +0x88, +0x36, +0x6a, +0xbf, +0x88, +0xf9, +0xdf, +0x3d, +0x98, +0x3a, +0xfd, +0xaa +}; + + + +L1_DATA uint32_t threshs_l1 [32] = {0}; +L1_DATA int32_t kappa_l1 [32] = {0}; +L1_DATA int32_t lambda_l1 [32] = {0}; +L1_DATA uint8_t inp_l1 [128] = {0}; +L1_DATA uint8_t outp_l1 [512] = {0}; +L1_DATA int8_t wt_l1 [1152] = {0}; +L1_DATA uint8_t im2col_l1 [IM2COL_DIM] = {0}; + +#endif diff --git a/rt_nn_tests/xpnn_conv/dory_dma.c b/rt_nn_tests/xpnn_conv/dory_dma.c new file mode 100644 index 0000000..61c9116 --- /dev/null +++ b/rt_nn_tests/xpnn_conv/dory_dma.c @@ -0,0 +1,176 @@ +#include "dory_dma.h" + +#include "pmsis.h" + +#ifndef MCHAN_BASE_ADDR +// FIXME: For GAP9, this must point to ARCHI_MCHAN_EXT_ADDR!!! +// In PULP-SDK for Kraken, this is fixed. +// GAP8 hardware to be tested... +#define MCHAN_BASE_ADDR (ARCHI_MCHAN_DEMUX_ADDR) // CLUSTER_MCHAN_ADDR +#endif +#define MCHAN_EVENT +//#define MCHAN_POLLED +#ifdef MCHAN_EVENT +#define MCHAN_EVENT_BIT (ARCHI_CL_EVT_DMA0) // 8 +#endif +#include "mchan.h" + + +#if defined(MCHAN_POLLED) +#define MCHAN_FLAGS (MCHAN_CMD_FLAG_INCREMENTAL) +#elif defined(MCHAN_EVENT) +#define MCHAN_FLAGS (MCHAN_CMD_FLAG_EVENT_ENABLE | MCHAN_CMD_FLAG_INCREMENTAL) +#elif defined(MCHAN_INTERRUPT) +#define MCHAN_FLAGS (MCHAN_CMD_FLAG_INTERRUPT_ENABLE | MCHAN_CMD_FLAG_INCREMENTAL) +#endif + +#define MCHAN_FLAGS_1D (MCHAN_FLAGS) +#define MCHAN_FLAGS_2D (MCHAN_FLAGS | MCHAN_CMD_FLAG_2D_TRANSFER_EXTERNAL) + +#define MIN(a,b) ((a)<(b)?(a):(b)) + +void dory_dma_memcpy_hwc_to_chw(DMA_copy *copy){ + int start_pixel, stop_pixel; // "pixel" is a misnomer; the CHANNELS are divided between the cores + // this function assumes that a DW tile is always as wide as the complete feature map (this is enforced by DORY's tiler) + // if there is only 1 DMA control unit for the cluster (e.g., Kraken), we can't execute DMA calls on multiple clusters. +#ifndef SINGLE_CORE_DMA + int core_id = pi_core_id(); + int Log2Core = log2(NUM_CORES); + int number_of_copies_per_core = (copy->length_1d_copy >> Log2Core) + ((copy->length_1d_copy & (NUM_CORES-1))!=0); + start_pixel = MIN(number_of_copies_per_core * core_id, copy->length_1d_copy); + stop_pixel = MIN(start_pixel + number_of_copies_per_core, copy->length_1d_copy); +#else + start_pixel = 0; + stop_pixel = copy->length_1d_copy; +#endif + void * loc = copy->loc + copy->number_of_1d_copies*copy->number_of_2d_copies*start_pixel; + void * ext = copy->ext + start_pixel; + const int size_2d = copy->number_of_1d_copies * copy->number_of_2d_copies; + + for (int i=start_pixel; idir << MCHAN_CMD_SHIFT_DIRECTION | MCHAN_FLAGS_2D, + .size = size_2d, + .ext = ext, + .loc = loc, + .ext_size_1d = 1, // one byte at a time... + .ext_stride_1d = copy->stride_1d + }; +#ifdef SINGLE_CORE_DMA + if (pi_core_id() == 0) { +#endif + mchan_transfer_push_2d(trans); +#ifdef SINGLE_CORE_DMA + } +#endif +#ifdef ALWAYS_BLOCK_DMA_TRANSFERS // needed on GAP8 board + dory_dma_barrier(copy); +#endif + ext += 1; // next channel + loc += copy->number_of_1d_copies * copy->number_of_2d_copies; + } +} + +void dory_dma_memcpy_1d_async(DMA_copy *copy) { + if (pi_core_id() == 0) { + mchan_transfer_t trans = { + .cmd = copy->length_1d_copy * copy->number_of_1d_copies * copy->number_of_2d_copies | (copy->dir << MCHAN_CMD_SHIFT_DIRECTION) | MCHAN_FLAGS_1D, + .size = copy->length_1d_copy * copy->number_of_1d_copies * copy->number_of_2d_copies, + .ext = copy->ext, + .loc = copy->loc + }; + mchan_transfer_push_1d(trans); + } +} + +void dory_dma_memcpy_2d_async(DMA_copy *copy) { + if (pi_core_id() == 0) { + const int size_2d = copy->number_of_1d_copies * copy->length_1d_copy * copy->number_of_2d_copies; + const int stride = (copy->number_of_2d_copies == 1) ? copy->stride_1d : copy->stride_2d; + const int size_1d = (copy->number_of_2d_copies == 1) ? copy->length_1d_copy : copy->length_1d_copy * copy->number_of_1d_copies; + + mchan_transfer_t trans = { + .cmd = size_2d | copy->dir << MCHAN_CMD_SHIFT_DIRECTION | MCHAN_FLAGS_2D, + .size = size_2d, + .ext = copy->ext, + .loc = copy->loc, + .ext_size_1d = size_1d, + .ext_stride_1d = stride + }; + mchan_transfer_push_2d(trans); + } +} + +void dory_dma_memcpy_3d_async(DMA_copy *copy) { + int start_pixel, stop_pixel; +#ifndef SINGLE_CORE_DMA + int core_id = pi_core_id(); + int Log2Core = log2(NUM_CORES); + int number_of_2d_copies_per_core = (copy->number_of_2d_copies >> Log2Core) + ((copy->number_of_2d_copies & (NUM_CORES-1))!=0); + start_pixel = MIN(number_of_2d_copies_per_core * core_id, copy->number_of_2d_copies); + stop_pixel = MIN(start_pixel + number_of_2d_copies_per_core, copy->number_of_2d_copies); +#else + start_pixel = 0; + stop_pixel = copy->number_of_2d_copies; +#endif + void *ext = copy->ext + copy->stride_2d*start_pixel; + void *loc = copy->loc + copy->length_1d_copy*copy->number_of_1d_copies*start_pixel; + const int size_2d = copy->number_of_1d_copies * copy->length_1d_copy; + for (int i = start_pixel; i < stop_pixel; i++) { + mchan_transfer_t trans = { + .cmd = size_2d | copy->dir << MCHAN_CMD_SHIFT_DIRECTION | MCHAN_FLAGS_2D, + .size = size_2d, + .ext = ext, + .loc = loc, + .ext_size_1d = copy->length_1d_copy, + .ext_stride_1d = copy->stride_1d + }; +#ifdef SINGLE_CORE_DMA + if (pi_core_id() == 0) { +#endif + mchan_transfer_push_2d(trans); +#ifdef SINGLE_CORE_DMA + } +#endif +#ifdef ALWAYS_BLOCK_DMA_TRANSFERS // needed on GAP8 board + dory_dma_barrier(copy); +#endif + loc += size_2d; + ext += copy->stride_2d; + } +} + +void dory_dma_memcpy_async(DMA_copy *copy) { + if (copy->hwc_to_chw == 1) { + dory_dma_memcpy_hwc_to_chw(copy); + } + else if ((copy->number_of_2d_copies == 1 && copy->number_of_1d_copies == 1) || (copy->stride_1d == copy->length_1d_copy && copy->number_of_1d_copies * copy->length_1d_copy == copy->stride_2d) || (copy->number_of_2d_copies == 1 && copy->length_1d_copy == copy->stride_1d)) { + dory_dma_memcpy_1d_async(copy); + } else if ((copy->number_of_2d_copies == 1) || (copy->length_1d_copy == copy->stride_1d)) {// wrong! + dory_dma_memcpy_2d_async(copy); + } else { + dory_dma_memcpy_3d_async(copy); + } +#ifdef ALWAYS_BLOCK_DMA_TRANSFERS + dory_dma_barrier(copy); +#endif +} + +void dory_dma_free(DMA_copy *copy) { + mchan_transfer_free(copy->tid); +} + +void dory_dma_barrier(DMA_copy *copy) { +#ifdef SINGLE_CORE_DMA + // if DMA is only used by a single core (only 1 ctrl interface), other cores must not access its register file. Instead, they should all wait for core 0 to confirm the transfer is over. + if (pi_core_id() == 0) + mchan_transfer_wait(copy->tid); + pi_cl_team_barrier(0); +#else + mchan_transfer_wait(copy->tid); +#endif +} + +int dory_dma_allocate() { + return mchan_transfer_get_id(); +} diff --git a/rt_nn_tests/xpnn_conv/dory_dma.h b/rt_nn_tests/xpnn_conv/dory_dma.h new file mode 100644 index 0000000..e0b3ef3 --- /dev/null +++ b/rt_nn_tests/xpnn_conv/dory_dma.h @@ -0,0 +1,52 @@ +/* + * dory.h + * Alessio Burrello + * + * Copyright (C) 2019-2020 University of Bologna + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef _DORY_DMA_H +#define _DORY_DMA_H + +typedef struct +{ + void *ext; + void *loc; + unsigned short hwc_to_chw; + unsigned short stride_2d; + unsigned short number_of_2d_copies; + unsigned short stride_1d; + unsigned short number_of_1d_copies; + unsigned short length_1d_copy; + int dir; // 0 l1->l2, 1 l2->l1 + int tid; +} DMA_copy; + +void dory_dma_memcpy_hwc_to_chw(DMA_copy *copy); + +void dory_dma_memcpy_1d_async(DMA_copy *copy); + +void dory_dma_memcpy_2d_async(DMA_copy *copy); + +void dory_dma_memcpy_3d_async(DMA_copy *copy); + +void dory_dma_memcpy_async(DMA_copy *copy); + +void dory_dma_free(DMA_copy *copy); + +void dory_dma_barrier(DMA_copy *copy); + +int dory_dma_allocate(); +#endif diff --git a/rt_nn_tests/xpnn_conv/mchan.h b/rt_nn_tests/xpnn_conv/mchan.h new file mode 100644 index 0000000..95882ab --- /dev/null +++ b/rt_nn_tests/xpnn_conv/mchan.h @@ -0,0 +1,137 @@ +#ifndef _MCHAN_H +#define _MCHAN_H + +// Requires to have MCHAN_BASE_ADDR, MCHAN_EVENT defined outside of header +#ifndef MCHAN_BASE_ADDR +#error "[mchan.h] MCHAN_BASE_ADDR not defined!" +#endif + +#if !defined(MCHAN_EVENT) && !defined(MCHAN_POLLED) +#error "[mchan.h] Nor MCHAN_EVENT nor MCHAN_POLLED defined!" +#endif + +#if defined(MCHAN_EVENT) && !defined(MCHAN_EVENT_BIT) +#error "[mchan.h] MCHAN_EVENT_BIT should be defined when using events as signalization!" +#endif + +#include "pmsis.h" + +#define MCHAN_CMD_OFFSET 0 +#define MCHAN_STATUS_OFFSET 4 + +#define MCHAN_CMD_ADDR (MCHAN_BASE_ADDR + MCHAN_CMD_OFFSET) +#define MCHAN_STATUS_ADDR (MCHAN_BASE_ADDR + MCHAN_STATUS_OFFSET) + +#define READ_REG(addr) (*(volatile int*)(addr)) +#define WRITE_REG(addr, value) do { *(volatile int*)(addr) = (int)value; } while (0) + +#define MCHAN_READ_CMD() READ_REG(MCHAN_CMD_ADDR) +#define MCHAN_WRITE_CMD(value) WRITE_REG(MCHAN_CMD_ADDR, value) + +#define MCHAN_READ_STATUS() READ_REG(MCHAN_STATUS_ADDR) +#define MCHAN_WRITE_STATUS(value) WRITE_REG(MCHAN_STATUS_ADDR, value) + +// MCHAN version 7 has 1 more bit for the transfer length, so all the flag offsets are shifted by 1. Also, LOC (TCDM) striding is not supported in v6. +#if MCHAN_VERSION==7 +#define MCHAN_TRANSFER_LEN_SIZE (17) +#else +#define MCHAN_TRANSFER_LEN_SIZE (16) +#endif + +#define MCHAN_CMD_FLAG_DIRECTION_LOC2EXT (0 << (MCHAN_TRANSFER_LEN_SIZE + 0)) +#define MCHAN_CMD_FLAG_DIRECTION_EXT2LOC (1 << (MCHAN_TRANSFER_LEN_SIZE + 0)) +#define MCHAN_CMD_FLAG_INCREMENTAL (1 << (MCHAN_TRANSFER_LEN_SIZE + 1)) +#define MCHAN_CMD_FLAG_2D_TRANSFER_EXTERNAL (1 << (MCHAN_TRANSFER_LEN_SIZE + 2)) +#define MCHAN_CMD_FLAG_EVENT_ENABLE (1 << (MCHAN_TRANSFER_LEN_SIZE + 3)) +#define MCHAN_CMD_FLAG_INTERRUPT_ENABLE (1 << (MCHAN_TRANSFER_LEN_SIZE + 4)) +#define MCHAN_CMD_FLAG_BROADCAST_FINISH (1 << (MCHAN_TRANSFER_LEN_SIZE + 5)) +#if MCHAN_VERSION==7 +#define MCHAN_CMD_FLAG_2D_TRANSFER_LOCAL (1 << (MCHAN_TRANSFER_LEN_SIZE + 6)) // can only be used with MCHAN v7 +#endif +#define MCHAN_CMD_SHIFT_DIRECTION MCHAN_TRANSFER_LEN_SIZE + + +#define MCHAN_CMD(len, dir, inc, loc_2d, ext_2d, int_en, event_en, broadcast) \ + (len | dir | inc | loc_2d | ext_2d | broadcast | int_en | event_en) + +typedef enum { + MCHAN_DMA_TRANSFER_DIRECTION_EXT2LOC = MCHAN_CMD_FLAG_DIRECTION_EXT2LOC, + MCHAN_DMA_TRANSFER_DIRECTION_LOC2EXT = MCHAN_CMD_FLAG_DIRECTION_LOC2EXT +} mchan_dma_transfer_direction_e; + +typedef struct { + int cmd; + int size; + + void *loc; + int loc_size_1d; + int loc_stride_1d; + + void *ext; + int ext_size_1d; + int ext_stride_1d; +} mchan_transfer_t; + +static int mchan_transfer_get_id() { + return MCHAN_READ_CMD(); +} + +static void mchan_transfer_push_1d(mchan_transfer_t trans) +{ + MCHAN_WRITE_CMD(trans.cmd); + MCHAN_WRITE_CMD(trans.loc); + MCHAN_WRITE_CMD(trans.ext); +} + +static void mchan_transfer_push_2d(mchan_transfer_t trans) +{ + MCHAN_WRITE_CMD(trans.cmd); + MCHAN_WRITE_CMD(trans.loc); + MCHAN_WRITE_CMD(trans.ext); +// MCHAN version 7 takes 2D "count" (length of 1D transfers) and stride in 2 steps, +// v7 takes it in 1 step with the stride shifted to the upper 16 bits. +#if MCHAN_VERSION==7 + MCHAN_WRITE_CMD(trans.ext_size_1d); + MCHAN_WRITE_CMD(trans.ext_stride_1d); +#else + MCHAN_WRITE_CMD(trans.ext_size_1d | (trans.ext_stride_1d << 16)); +#endif +} + +static void mchan_transfer_push(mchan_transfer_t trans) +{ + MCHAN_WRITE_CMD(trans.cmd); + MCHAN_WRITE_CMD(trans.loc); + MCHAN_WRITE_CMD(trans.ext); + + if (trans.ext_size_1d < trans.size) { + MCHAN_WRITE_CMD(trans.ext_size_1d); + MCHAN_WRITE_CMD(trans.ext_stride_1d); + } + + if (trans.loc_size_1d < trans.size) { + MCHAN_WRITE_CMD(trans.loc_size_1d); + MCHAN_WRITE_CMD(trans.loc_stride_1d); + } +} + +static void mchan_transfer_free(int tid) +{ + MCHAN_WRITE_STATUS(1 << tid); +} + +static int mchan_transfer_busy(int tid) +{ + return MCHAN_READ_STATUS() & (1 << tid); +} + +static void mchan_transfer_wait(int tid) +{ + #if defined(MCHAN_EVENT) + while(mchan_transfer_busy(tid)) eu_evt_maskWaitAndClr(1 << MCHAN_EVENT_BIT); + #elif defined(MCHAN_POLLED) + while(mchan_transfer_busy(tid)) ; + #endif +} + +#endif diff --git a/rt_nn_tests/xpnn_conv/pulp_nn_kernels.h b/rt_nn_tests/xpnn_conv/pulp_nn_kernels.h new file mode 100644 index 0000000..f4ec977 --- /dev/null +++ b/rt_nn_tests/xpnn_conv/pulp_nn_kernels.h @@ -0,0 +1,26528 @@ +/* + * pulp_nn_kernels.h + * Nazareno Bruschi + * + * Copyright (C) 2019-2020 University of Bologna + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef __XPULPNN_KERNELS__ +#define __XPULPNN_KERNELS__ + +void xpulp_nn_conv_u8_u8_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u8_u8_i8_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u8_i8_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u8_i8_i8_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i8_u8_i8( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i8_u8_i8_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i8_i8_i8( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i8_i8_i8_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u8_u8_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u8_u8_i4_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u8_i8_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u8_i8_i4_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i8_u8_i4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i8_u8_i4_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i8_i8_i4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i8_i8_i4_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u8_u8_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u8_u8_i2_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u8_i8_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u8_i8_i2_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i8_u8_i2( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i8_u8_i2_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i8_i8_i2( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i8_i8_i2_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u8_u4_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u8_u4_i8_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u8_i4_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u8_i4_i8_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i8_u4_i8( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i8_u4_i8_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i8_i4_i8( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i8_i4_i8_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u8_u4_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u8_u4_i4_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u8_i4_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u8_i4_i4_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i8_u4_i4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i8_u4_i4_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i8_i4_i4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i8_i4_i4_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u8_u4_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u8_u4_i2_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u8_i4_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u8_i4_i2_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i8_u4_i2( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i8_u4_i2_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i8_i4_i2( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i8_i4_i2_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u8_u2_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u8_u2_i8_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u8_i2_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u8_i2_i8_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i8_u2_i8( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i8_u2_i8_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i8_i2_i8( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i8_i2_i8_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u8_u2_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u8_u2_i4_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u8_i2_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u8_i2_i4_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i8_u2_i4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i8_u2_i4_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i8_i2_i4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i8_i2_i4_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u8_u2_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u8_u2_i2_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u8_i2_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u8_i2_i2_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i8_u2_i2( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i8_u2_i2_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i8_i2_i2( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i8_i2_i2_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u4_u8_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u4_u8_i8_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u4_i8_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u4_i8_i8_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i4_u8_i8( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i4_u8_i8_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i4_i8_i8( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i4_i8_i8_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u4_u8_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u4_u8_i4_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u4_i8_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u4_i8_i4_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i4_u8_i4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i4_u8_i4_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i4_i8_i4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i4_i8_i4_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u4_u8_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u4_u8_i2_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u4_i8_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u4_i8_i2_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i4_u8_i2( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i4_u8_i2_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i4_i8_i2( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i4_i8_i2_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u4_u4_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u4_u4_i8_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u4_i4_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u4_i4_i8_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i4_u4_i8( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i4_u4_i8_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i4_i4_i8( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i4_i4_i8_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u4_u4_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u4_u4_i4_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u4_i4_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u4_i4_i4_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i4_u4_i4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i4_u4_i4_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i4_i4_i4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i4_i4_i4_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u4_u4_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u4_u4_i2_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u4_i4_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u4_i4_i2_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i4_u4_i2( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i4_u4_i2_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i4_i4_i2( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i4_i4_i2_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u4_u2_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u4_u2_i8_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u4_i2_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u4_i2_i8_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i4_u2_i8( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i4_u2_i8_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i4_i2_i8( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i4_i2_i8_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u4_u2_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u4_u2_i4_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u4_i2_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u4_i2_i4_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i4_u2_i4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i4_u2_i4_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i4_i2_i4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i4_i2_i4_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u4_u2_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u4_u2_i2_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u4_i2_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u4_i2_i2_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i4_u2_i2( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i4_u2_i2_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i4_i2_i2( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i4_i2_i2_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u2_u8_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u2_u8_i8_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u2_i8_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u2_i8_i8_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i2_u8_i8( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i2_u8_i8_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i2_i8_i8( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i2_i8_i8_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u2_u8_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u2_u8_i4_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u2_i8_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u2_i8_i4_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i2_u8_i4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i2_u8_i4_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i2_i8_i4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i2_i8_i4_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u2_u8_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u2_u8_i2_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u2_i8_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u2_i8_i2_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i2_u8_i2( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i2_u8_i2_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i2_i8_i2( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i2_i8_i2_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u2_u4_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u2_u4_i8_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u2_i4_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u2_i4_i8_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i2_u4_i8( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i2_u4_i8_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i2_i4_i8( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i2_i4_i8_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u2_u4_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u2_u4_i4_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u2_i4_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u2_i4_i4_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i2_u4_i4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i2_u4_i4_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i2_i4_i4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i2_i4_i4_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u2_u4_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u2_u4_i2_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u2_i4_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u2_i4_i2_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i2_u4_i2( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i2_u4_i2_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i2_i4_i2( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i2_i4_i2_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u2_u2_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u2_u2_i8_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u2_i2_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u2_i2_i8_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i2_u2_i8( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i2_u2_i8_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i2_i2_i8( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i2_i2_i8_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u2_u2_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u2_u2_i4_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u2_i2_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u2_i2_i4_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i2_u2_i4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i2_u2_i4_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i2_i2_i4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i2_i2_i4_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u2_u2_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u2_u2_i2_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u2_i2_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u2_i2_i2_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i2_u2_i2( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i2_u2_i2_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i2_i2_i2( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, +#ifndef PROFILE + uint8_t flag_batch_norm); +#else + uint8_t flag_batch_norm, + uint32_t *im2col_cycles, + uint32_t *hotloop_prep_cycles, + uint32_t *hotloop_cycles, + uint32_t *requant_cycles, + uint32_t *hotloop_leftover_cycles, + uint32_t *matmul4x2_leftover_cycles); +#endif + + +void xpulp_nn_conv_i2_i2_i2_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u8_u8_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u8_u8_i8_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u8_i8_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u8_i8_i8_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i8_u8_i8( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i8_u8_i8_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i8_i8_i8( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i8_i8_i8_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u8_u8_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u8_u8_i4_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u8_i8_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u8_i8_i4_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i8_u8_i4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i8_u8_i4_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i8_i8_i4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i8_i8_i4_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u8_u8_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u8_u8_i2_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u8_i8_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u8_i8_i2_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i8_u8_i2( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i8_u8_i2_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i8_i8_i2( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i8_i8_i2_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u8_u4_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u8_u4_i8_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u8_i4_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u8_i4_i8_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i8_u4_i8( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i8_u4_i8_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i8_i4_i8( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i8_i4_i8_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u8_u4_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u8_u4_i4_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u8_i4_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u8_i4_i4_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i8_u4_i4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i8_u4_i4_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i8_i4_i4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i8_i4_i4_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u8_u4_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u8_u4_i2_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u8_i4_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u8_i4_i2_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i8_u4_i2( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i8_u4_i2_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i8_i4_i2( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i8_i4_i2_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u8_u2_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u8_u2_i8_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u8_i2_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u8_i2_i8_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i8_u2_i8( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i8_u2_i8_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i8_i2_i8( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i8_i2_i8_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u8_u2_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u8_u2_i4_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u8_i2_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u8_i2_i4_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i8_u2_i4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i8_u2_i4_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i8_i2_i4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i8_i2_i4_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u8_u2_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u8_u2_i2_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u8_i2_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u8_i2_i2_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i8_u2_i2( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i8_u2_i2_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i8_i2_i2( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i8_i2_i2_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u4_u8_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u4_u8_i8_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u4_i8_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u4_i8_i8_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i4_u8_i8( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i4_u8_i8_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i4_i8_i8( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i4_i8_i8_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u4_u8_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u4_u8_i4_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u4_i8_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u4_i8_i4_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i4_u8_i4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i4_u8_i4_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i4_i8_i4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i4_i8_i4_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u4_u8_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u4_u8_i2_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u4_i8_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u4_i8_i2_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i4_u8_i2( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i4_u8_i2_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i4_i8_i2( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i4_i8_i2_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u4_u4_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u4_u4_i8_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u4_i4_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u4_i4_i8_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i4_u4_i8( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i4_u4_i8_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i4_i4_i8( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i4_i4_i8_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u4_u4_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u4_u4_i4_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u4_i4_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u4_i4_i4_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i4_u4_i4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i4_u4_i4_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i4_i4_i4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i4_i4_i4_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u4_u4_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u4_u4_i2_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u4_i4_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u4_i4_i2_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i4_u4_i2( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i4_u4_i2_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i4_i4_i2( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i4_i4_i2_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u4_u2_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u4_u2_i8_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u4_i2_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u4_i2_i8_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i4_u2_i8( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i4_u2_i8_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i4_i2_i8( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i4_i2_i8_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u4_u2_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u4_u2_i4_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u4_i2_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u4_i2_i4_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i4_u2_i4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i4_u2_i4_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i4_i2_i4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i4_i2_i4_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u4_u2_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u4_u2_i2_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u4_i2_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u4_i2_i2_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i4_u2_i2( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i4_u2_i2_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i4_i2_i2( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i4_i2_i2_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u2_u8_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u2_u8_i8_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u2_i8_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u2_i8_i8_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i2_u8_i8( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i2_u8_i8_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i2_i8_i8( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i2_i8_i8_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u2_u8_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u2_u8_i4_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u2_i8_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u2_i8_i4_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i2_u8_i4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i2_u8_i4_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i2_i8_i4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i2_i8_i4_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u2_u8_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u2_u8_i2_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u2_i8_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u2_i8_i2_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i2_u8_i2( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i2_u8_i2_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i2_i8_i2( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i2_i8_i2_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u2_u4_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u2_u4_i8_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u2_i4_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u2_i4_i8_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i2_u4_i8( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i2_u4_i8_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i2_i4_i8( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i2_i4_i8_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u2_u4_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u2_u4_i4_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u2_i4_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u2_i4_i4_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i2_u4_i4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i2_u4_i4_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i2_i4_i4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i2_i4_i4_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u2_u4_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u2_u4_i2_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u2_i4_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u2_i4_i2_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i2_u4_i2( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i2_u4_i2_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i2_i4_i2( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i2_i4_i2_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u2_u2_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u2_u2_i8_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u2_i2_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u2_i2_i8_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i2_u2_i8( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i2_u2_i8_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i2_i2_i8( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i2_i2_i8_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u2_u2_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u2_u2_i4_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u2_i2_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u2_i2_i4_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i2_u2_i4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i2_u2_i4_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i2_i2_i4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i2_i2_i4_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u2_u2_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u2_u2_i2_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u2_i2_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u2_i2_i2_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i2_u2_i2( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i2_u2_i2_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i2_i2_i2( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i2_i2_i2_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_u8_u8_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_u8_i8_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_i8_u8_i8( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_i8_i8_i8( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_u8_u8_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_u8_i8_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_i8_u8_i4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_i8_i8_i4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_u8_u8_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_u8_i8_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_i8_u8_i2( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_i8_i8_i2( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_u8_u4_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_u8_i4_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_i8_u4_i8( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_i8_i4_i8( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_u8_u4_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_u8_i4_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_i8_u4_i4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_i8_i4_i4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_u8_u4_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_u8_i4_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_i8_u4_i2( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_i8_i4_i2( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_u8_u2_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_u8_i2_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_i8_u2_i8( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_i8_i2_i8( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_u8_u2_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_u8_i2_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_i8_u2_i4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_i8_i2_i4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_u8_u2_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_u8_i2_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_i8_u2_i2( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_i8_i2_i2( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_u4_u8_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_u4_i8_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_i4_u8_i8( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_i4_i8_i8( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_u4_u8_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_u4_i8_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_i4_u8_i4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_i4_i8_i4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_u4_u8_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_u4_i8_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_i4_u8_i2( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_i4_i8_i2( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_u4_u4_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_u4_i4_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_i4_u4_i8( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_i4_i4_i8( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_u4_u4_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_u4_i4_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_i4_u4_i4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_i4_i4_i4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_u4_u4_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_u4_i4_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_i4_u4_i2( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_i4_i4_i2( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_u4_u2_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_u4_i2_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_i4_u2_i8( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_i4_i2_i8( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_u4_u2_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_u4_i2_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_i4_u2_i4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_i4_i2_i4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_u4_u2_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_u4_i2_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_i4_u2_i2( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_i4_i2_i2( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_u2_u8_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_u2_i8_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_i2_u8_i8( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_i2_i8_i8( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_u2_u8_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_u2_i8_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_i2_u8_i4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_i2_i8_i4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_u2_u8_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_u2_i8_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_i2_u8_i2( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_i2_i8_i2( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_u2_u4_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_u2_i4_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_i2_u4_i8( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_i2_i4_i8( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_u2_u4_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_u2_i4_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_i2_u4_i4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_i2_i4_i4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_u2_u4_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_u2_i4_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_i2_u4_i2( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_i2_i4_i2( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_u2_u2_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_u2_i2_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_i2_u2_i8( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_i2_i2_i8( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_u2_u2_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_u2_i2_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_i2_u2_i4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_i2_i2_i4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_u2_u2_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_u2_i2_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_i2_u2_i2( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_i2_i2_i2( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u8_u8_i8( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u8_i8_i8( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i8_u8_i8( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i8_i8_i8( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u8_u8_i8_4x4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u8_i8_i8_4x4( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pOut3, + int8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i8_u8_i8_4x4( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i8_i8_i8_4x4( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pOut3, + int8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u8_u8_i4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u8_i8_i4( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i8_u8_i4( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i8_i8_i4( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u8_u8_i4_4x4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u8_i8_i4_4x4( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pOut3, + int8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i8_u8_i4_4x4( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i8_i8_i4_4x4( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pOut3, + int8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u8_u8_i2( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u8_i8_i2( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i8_u8_i2( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i8_i8_i2( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u8_u8_i2_4x4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u8_i8_i2_4x4( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pOut3, + int8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i8_u8_i2_4x4( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i8_i8_i2_4x4( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pOut3, + int8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u8_u4_i8( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u8_i4_i8( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i8_u4_i8( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i8_i4_i8( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u8_u4_i8_4x4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u8_i4_i8_4x4( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pOut3, + int8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i8_u4_i8_4x4( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i8_i4_i8_4x4( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pOut3, + int8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u8_u4_i4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u8_i4_i4( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i8_u4_i4( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i8_i4_i4( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u8_u4_i4_4x4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u8_i4_i4_4x4( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pOut3, + int8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i8_u4_i4_4x4( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i8_i4_i4_4x4( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pOut3, + int8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u8_u4_i2( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u8_i4_i2( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i8_u4_i2( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i8_i4_i2( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u8_u4_i2_4x4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u8_i4_i2_4x4( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pOut3, + int8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i8_u4_i2_4x4( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i8_i4_i2_4x4( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pOut3, + int8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u8_u2_i8( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u8_i2_i8( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i8_u2_i8( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i8_i2_i8( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u8_u2_i8_4x4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u8_i2_i8_4x4( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pOut3, + int8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i8_u2_i8_4x4( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i8_i2_i8_4x4( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pOut3, + int8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u8_u2_i4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u8_i2_i4( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i8_u2_i4( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i8_i2_i4( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u8_u2_i4_4x4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u8_i2_i4_4x4( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pOut3, + int8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i8_u2_i4_4x4( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i8_i2_i4_4x4( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pOut3, + int8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u8_u2_i2( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u8_i2_i2( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i8_u2_i2( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i8_i2_i2( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u8_u2_i2_4x4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u8_i2_i2_4x4( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pOut3, + int8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i8_u2_i2_4x4( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i8_i2_i2_4x4( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pOut3, + int8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u4_u8_i8( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u4_i8_i8( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i4_u8_i8( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i4_i8_i8( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u4_u8_i8_4x4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u4_i8_i8_4x4( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pOut3, + int8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i4_u8_i8_4x4( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i4_i8_i8_4x4( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pOut3, + int8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u4_u8_i4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u4_i8_i4( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i4_u8_i4( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i4_i8_i4( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u4_u8_i4_4x4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u4_i8_i4_4x4( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pOut3, + int8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i4_u8_i4_4x4( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i4_i8_i4_4x4( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pOut3, + int8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u4_u8_i2( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u4_i8_i2( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i4_u8_i2( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i4_i8_i2( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u4_u8_i2_4x4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u4_i8_i2_4x4( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pOut3, + int8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i4_u8_i2_4x4( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i4_i8_i2_4x4( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pOut3, + int8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u4_u4_i8( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u4_i4_i8( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i4_u4_i8( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i4_i4_i8( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u4_u4_i8_4x4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u4_i4_i8_4x4( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pOut3, + int8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i4_u4_i8_4x4( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i4_i4_i8_4x4( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pOut3, + int8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u4_u4_i4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u4_i4_i4( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i4_u4_i4( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i4_i4_i4( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u4_u4_i4_4x4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u4_i4_i4_4x4( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pOut3, + int8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i4_u4_i4_4x4( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i4_i4_i4_4x4( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pOut3, + int8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u4_u4_i2( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u4_i4_i2( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i4_u4_i2( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i4_i4_i2( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u4_u4_i2_4x4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u4_i4_i2_4x4( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pOut3, + int8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i4_u4_i2_4x4( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i4_i4_i2_4x4( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pOut3, + int8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u4_u2_i8( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u4_i2_i8( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i4_u2_i8( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i4_i2_i8( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u4_u2_i8_4x4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u4_i2_i8_4x4( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pOut3, + int8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i4_u2_i8_4x4( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i4_i2_i8_4x4( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pOut3, + int8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u4_u2_i4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u4_i2_i4( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i4_u2_i4( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i4_i2_i4( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u4_u2_i4_4x4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u4_i2_i4_4x4( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pOut3, + int8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i4_u2_i4_4x4( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i4_i2_i4_4x4( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pOut3, + int8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u4_u2_i2( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u4_i2_i2( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i4_u2_i2( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i4_i2_i2( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u4_u2_i2_4x4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u4_i2_i2_4x4( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pOut3, + int8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i4_u2_i2_4x4( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i4_i2_i2_4x4( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pOut3, + int8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u2_u8_i8( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u2_i8_i8( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i2_u8_i8( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i2_i8_i8( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u2_u8_i8_4x4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u2_i8_i8_4x4( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pOut3, + int8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i2_u8_i8_4x4( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i2_i8_i8_4x4( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pOut3, + int8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u2_u8_i4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u2_i8_i4( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i2_u8_i4( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i2_i8_i4( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u2_u8_i4_4x4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u2_i8_i4_4x4( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pOut3, + int8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i2_u8_i4_4x4( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i2_i8_i4_4x4( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pOut3, + int8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u2_u8_i2( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u2_i8_i2( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i2_u8_i2( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i2_i8_i2( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u2_u8_i2_4x4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u2_i8_i2_4x4( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pOut3, + int8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i2_u8_i2_4x4( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i2_i8_i2_4x4( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pOut3, + int8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u2_u4_i8( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u2_i4_i8( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i2_u4_i8( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i2_i4_i8( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u2_u4_i8_4x4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u2_i4_i8_4x4( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pOut3, + int8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i2_u4_i8_4x4( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i2_i4_i8_4x4( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pOut3, + int8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u2_u4_i4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u2_i4_i4( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i2_u4_i4( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i2_i4_i4( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u2_u4_i4_4x4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u2_i4_i4_4x4( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pOut3, + int8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i2_u4_i4_4x4( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i2_i4_i4_4x4( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pOut3, + int8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u2_u4_i2( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u2_i4_i2( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i2_u4_i2( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i2_i4_i2( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u2_u4_i2_4x4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u2_i4_i2_4x4( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pOut3, + int8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i2_u4_i2_4x4( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i2_i4_i2_4x4( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pOut3, + int8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u2_u2_i8( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u2_i2_i8( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i2_u2_i8( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i2_i2_i8( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u2_u2_i8_4x4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u2_i2_i8_4x4( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pOut3, + int8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i2_u2_i8_4x4( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i2_i2_i8_4x4( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pOut3, + int8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u2_u2_i4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u2_i2_i4( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i2_u2_i4( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i2_i2_i4( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u2_u2_i4_4x4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u2_i2_i4_4x4( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pOut3, + int8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i2_u2_i4_4x4( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i2_i2_i4_4x4( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pOut3, + int8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u2_u2_i2( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u2_i2_i2( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i2_u2_i2( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i2_i2_i2( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, +#ifndef PROFILE + uint8_t flag_batch_norm); +#else + uint8_t flag_batch_norm, + uint32_t *hotloop_prep_cycles, + uint32_t *hotloop_cycles, + uint32_t *requant_cycles, + uint32_t *hotloop_leftover_cycles); +#endif + +uint8_t *xpulp_nn_matmul_u2_u2_i2_4x4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u2_i2_i2_4x4( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pOut3, + int8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i2_u2_i2_4x4( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i2_i2_i2_4x4( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pOut3, + int8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_u8_u8_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_u8_i8_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_i8_u8_i8( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_i8_i8_i8( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_u8_u8_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_u8_i8_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_i8_u8_i4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_i8_i8_i4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_u8_u8_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_u8_i8_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_i8_u8_i2( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_i8_i8_i2( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_u8_u4_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_u8_i4_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_i8_u4_i8( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_i8_i4_i8( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_u8_u4_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_u8_i4_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_i8_u4_i4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_i8_i4_i4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_u8_u4_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_u8_i4_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_i8_u4_i2( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_i8_i4_i2( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_u8_u2_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_u8_i2_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_i8_u2_i8( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_i8_i2_i8( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_u8_u2_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_u8_i2_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_i8_u2_i4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_i8_i2_i4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_u8_u2_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_u8_i2_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_i8_u2_i2( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_i8_i2_i2( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_u4_u8_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_u4_i8_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_i4_u8_i8( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_i4_i8_i8( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_u4_u8_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_u4_i8_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_i4_u8_i4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_i4_i8_i4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_u4_u8_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_u4_i8_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_i4_u8_i2( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_i4_i8_i2( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_u4_u4_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_u4_i4_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_i4_u4_i8( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_i4_i4_i8( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_u4_u4_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_u4_i4_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_i4_u4_i4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_i4_i4_i4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_u4_u4_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_u4_i4_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_i4_u4_i2( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_i4_i4_i2( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_u4_u2_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_u4_i2_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_i4_u2_i8( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_i4_i2_i8( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_u4_u2_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_u4_i2_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_i4_u2_i4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_i4_i2_i4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_u4_u2_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_u4_i2_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_i4_u2_i2( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_i4_i2_i2( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_u2_u8_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_u2_i8_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_i2_u8_i8( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_i2_i8_i8( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_u2_u8_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_u2_i8_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_i2_u8_i4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_i2_i8_i4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_u2_u8_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_u2_i8_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_i2_u8_i2( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_i2_i8_i2( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_u2_u4_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_u2_i4_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_i2_u4_i8( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_i2_i4_i8( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_u2_u4_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_u2_i4_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_i2_u4_i4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_i2_i4_i4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_u2_u4_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_u2_i4_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_i2_u4_i2( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_i2_i4_i2( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_u2_u2_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_u2_i2_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_i2_u2_i8( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_i2_i2_i8( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_u2_u2_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_u2_i2_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_i2_u2_i4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_i2_i2_i4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_u2_u2_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_u2_i2_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_i2_u2_i2( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_i2_i2_i2( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_u8_i32_i8( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + uint16_t dim_vec, + uint16_t num_o_neurons); + +void xpulp_nn_linear_i8_i32_i8( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + uint16_t dim_vec, + uint16_t num_o_neurons); + +void xpulp_nn_linear_u8_i32_i4( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + uint16_t dim_vec, + uint16_t num_o_neurons); + +void xpulp_nn_linear_i8_i32_i4( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + uint16_t dim_vec, + uint16_t num_o_neurons); + +void xpulp_nn_linear_u8_i32_i2( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + uint16_t dim_vec, + uint16_t num_o_neurons); + +void xpulp_nn_linear_i8_i32_i2( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + uint16_t dim_vec, + uint16_t num_o_neurons); + +void xpulp_nn_linear_u4_i32_i8( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + uint16_t dim_vec, + uint16_t num_o_neurons); + +void xpulp_nn_linear_i4_i32_i8( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + uint16_t dim_vec, + uint16_t num_o_neurons); + +void xpulp_nn_linear_u4_i32_i4( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + uint16_t dim_vec, + uint16_t num_o_neurons); + +void xpulp_nn_linear_i4_i32_i4( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + uint16_t dim_vec, + uint16_t num_o_neurons); + +void xpulp_nn_linear_u4_i32_i2( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + uint16_t dim_vec, + uint16_t num_o_neurons); + +void xpulp_nn_linear_i4_i32_i2( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + uint16_t dim_vec, + uint16_t num_o_neurons); + +void xpulp_nn_linear_u2_i32_i8( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + uint16_t dim_vec, + uint16_t num_o_neurons); + +void xpulp_nn_linear_i2_i32_i8( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + uint16_t dim_vec, + uint16_t num_o_neurons); + +void xpulp_nn_linear_u2_i32_i4( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + uint16_t dim_vec, + uint16_t num_o_neurons); + +void xpulp_nn_linear_i2_i32_i4( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + uint16_t dim_vec, + uint16_t num_o_neurons); + +void xpulp_nn_linear_u2_i32_i2( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + uint16_t dim_vec, + uint16_t num_o_neurons); + +void xpulp_nn_linear_i2_i32_i2( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + uint16_t dim_vec, + uint16_t num_o_neurons); + +void xpulp_nn_linear_u8_u8_i8( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_u8_i8_i8( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_i8_u8_i8( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_i8_i8_i8( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_u8_u8_i4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_u8_i8_i4( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_i8_u8_i4( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_i8_i8_i4( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_u8_u8_i2( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_u8_i8_i2( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_i8_u8_i2( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_i8_i8_i2( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_u8_u4_i8( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_u8_i4_i8( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_i8_u4_i8( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_i8_i4_i8( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_u8_u4_i4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_u8_i4_i4( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_i8_u4_i4( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_i8_i4_i4( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_u8_u4_i2( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_u8_i4_i2( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_i8_u4_i2( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_i8_i4_i2( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_u8_u2_i8( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_u8_i2_i8( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_i8_u2_i8( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_i8_i2_i8( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_u8_u2_i4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_u8_i2_i4( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_i8_u2_i4( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_i8_i2_i4( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_u8_u2_i2( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_u8_i2_i2( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_i8_u2_i2( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_i8_i2_i2( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_u4_u8_i8( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_u4_i8_i8( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_i4_u8_i8( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_i4_i8_i8( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_u4_u8_i4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_u4_i8_i4( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_i4_u8_i4( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_i4_i8_i4( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_u4_u8_i2( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_u4_i8_i2( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_i4_u8_i2( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_i4_i8_i2( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_u4_u4_i8( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_u4_i4_i8( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_i4_u4_i8( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_i4_i4_i8( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_u4_u4_i4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_u4_i4_i4( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_i4_u4_i4( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_i4_i4_i4( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_u4_u4_i2( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_u4_i4_i2( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_i4_u4_i2( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_i4_i4_i2( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_u4_u2_i8( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_u4_i2_i8( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_i4_u2_i8( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_i4_i2_i8( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_u4_u2_i4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_u4_i2_i4( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_i4_u2_i4( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_i4_i2_i4( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_u4_u2_i2( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_u4_i2_i2( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_i4_u2_i2( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_i4_i2_i2( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_u2_u8_i8( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_u2_i8_i8( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_i2_u8_i8( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_i2_i8_i8( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_u2_u8_i4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_u2_i8_i4( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_i2_u8_i4( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_i2_i8_i4( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_u2_u8_i2( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_u2_i8_i2( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_i2_u8_i2( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_i2_i8_i2( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_u2_u4_i8( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_u2_i4_i8( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_i2_u4_i8( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_i2_i4_i8( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_u2_u4_i4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_u2_i4_i4( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_i2_u4_i4( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_i2_i4_i4( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_u2_u4_i2( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_u2_i4_i2( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_i2_u4_i2( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_i2_i4_i2( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_u2_u2_i8( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_u2_i2_i8( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_i2_u2_i8( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_i2_i2_i8( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_u2_u2_i4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_u2_i2_i4( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_i2_u2_i4( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_i2_i2_i4( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_u2_u2_i2( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_u2_i2_i2( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_i2_u2_i2( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_i2_i2_i2( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_maxpool_u8( + uint8_t * pIn, + uint8_t * pOut, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + uint16_t dim_im_out_x, + uint16_t dim_im_out_y, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_t, + uint16_t padding_b, + uint16_t padding_l, + uint16_t padding_r, + uint16_t stride_x, + uint16_t stride_y); + +void xpulp_nn_maxpool_i8( + int8_t * pIn, + int8_t * pOut, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + uint16_t dim_im_out_x, + uint16_t dim_im_out_y, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_t, + uint16_t padding_b, + uint16_t padding_l, + uint16_t padding_r, + uint16_t stride_x, + uint16_t stride_y); + +void xpulp_nn_maxpool_u4( + uint8_t * pIn, + uint8_t * pOut, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + uint16_t dim_im_out_x, + uint16_t dim_im_out_y, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_t, + uint16_t padding_b, + uint16_t padding_l, + uint16_t padding_r, + uint16_t stride_x, + uint16_t stride_y); + +void xpulp_nn_maxpool_i4( + int8_t * pIn, + int8_t * pOut, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + uint16_t dim_im_out_x, + uint16_t dim_im_out_y, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_t, + uint16_t padding_b, + uint16_t padding_l, + uint16_t padding_r, + uint16_t stride_x, + uint16_t stride_y); + +void xpulp_nn_maxpool_u2( + uint8_t * pIn, + uint8_t * pOut, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + uint16_t dim_im_out_x, + uint16_t dim_im_out_y, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_t, + uint16_t padding_b, + uint16_t padding_l, + uint16_t padding_r, + uint16_t stride_x, + uint16_t stride_y); + +void xpulp_nn_maxpool_i2( + int8_t * pIn, + int8_t * pOut, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + uint16_t dim_im_out_x, + uint16_t dim_im_out_y, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_t, + uint16_t padding_b, + uint16_t padding_l, + uint16_t padding_r, + uint16_t stride_x, + uint16_t stride_y); + +void xpulp_nn_avgpool_u8_u8( + uint8_t * pIn, + uint8_t * pOut, + int32_t lambda, + uint16_t out_shift, + int32_t out_add, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + uint16_t dim_im_out_x, + uint16_t dim_im_out_y, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_t, + uint16_t padding_b, + uint16_t padding_l, + uint16_t padding_r, + uint16_t stride_x, + uint16_t stride_y, + int flag_requant +); + +void xpulp_nn_avgpool_u8_i8( + uint8_t * pIn, + int8_t * pOut, + int32_t lambda, + uint16_t out_shift, + int32_t out_add, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + uint16_t dim_im_out_x, + uint16_t dim_im_out_y, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_t, + uint16_t padding_b, + uint16_t padding_l, + uint16_t padding_r, + uint16_t stride_x, + uint16_t stride_y, + int flag_requant +); + +void xpulp_nn_avgpool_i8_u8( + int8_t * pIn, + uint8_t * pOut, + int32_t lambda, + uint16_t out_shift, + int32_t out_add, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + uint16_t dim_im_out_x, + uint16_t dim_im_out_y, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_t, + uint16_t padding_b, + uint16_t padding_l, + uint16_t padding_r, + uint16_t stride_x, + uint16_t stride_y, + int flag_requant +); + +void xpulp_nn_avgpool_i8_i8( + int8_t * pIn, + int8_t * pOut, + int32_t lambda, + uint16_t out_shift, + int32_t out_add, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + uint16_t dim_im_out_x, + uint16_t dim_im_out_y, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_t, + uint16_t padding_b, + uint16_t padding_l, + uint16_t padding_r, + uint16_t stride_x, + uint16_t stride_y, + int flag_requant +); + +void xpulp_nn_avgpool_u8_u4( + uint8_t * pIn, + uint8_t * pOut, + int32_t lambda, + uint16_t out_shift, + int32_t out_add, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + uint16_t dim_im_out_x, + uint16_t dim_im_out_y, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_t, + uint16_t padding_b, + uint16_t padding_l, + uint16_t padding_r, + uint16_t stride_x, + uint16_t stride_y, + int flag_requant +); + +void xpulp_nn_avgpool_u8_i4( + uint8_t * pIn, + int8_t * pOut, + int32_t lambda, + uint16_t out_shift, + int32_t out_add, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + uint16_t dim_im_out_x, + uint16_t dim_im_out_y, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_t, + uint16_t padding_b, + uint16_t padding_l, + uint16_t padding_r, + uint16_t stride_x, + uint16_t stride_y, + int flag_requant +); + +void xpulp_nn_avgpool_i8_u4( + int8_t * pIn, + uint8_t * pOut, + int32_t lambda, + uint16_t out_shift, + int32_t out_add, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + uint16_t dim_im_out_x, + uint16_t dim_im_out_y, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_t, + uint16_t padding_b, + uint16_t padding_l, + uint16_t padding_r, + uint16_t stride_x, + uint16_t stride_y, + int flag_requant +); + +void xpulp_nn_avgpool_i8_i4( + int8_t * pIn, + int8_t * pOut, + int32_t lambda, + uint16_t out_shift, + int32_t out_add, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + uint16_t dim_im_out_x, + uint16_t dim_im_out_y, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_t, + uint16_t padding_b, + uint16_t padding_l, + uint16_t padding_r, + uint16_t stride_x, + uint16_t stride_y, + int flag_requant +); + +void xpulp_nn_avgpool_u8_u2( + uint8_t * pIn, + uint8_t * pOut, + int32_t lambda, + uint16_t out_shift, + int32_t out_add, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + uint16_t dim_im_out_x, + uint16_t dim_im_out_y, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_t, + uint16_t padding_b, + uint16_t padding_l, + uint16_t padding_r, + uint16_t stride_x, + uint16_t stride_y, + int flag_requant +); + +void xpulp_nn_avgpool_u8_i2( + uint8_t * pIn, + int8_t * pOut, + int32_t lambda, + uint16_t out_shift, + int32_t out_add, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + uint16_t dim_im_out_x, + uint16_t dim_im_out_y, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_t, + uint16_t padding_b, + uint16_t padding_l, + uint16_t padding_r, + uint16_t stride_x, + uint16_t stride_y, + int flag_requant +); + +void xpulp_nn_avgpool_i8_u2( + int8_t * pIn, + uint8_t * pOut, + int32_t lambda, + uint16_t out_shift, + int32_t out_add, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + uint16_t dim_im_out_x, + uint16_t dim_im_out_y, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_t, + uint16_t padding_b, + uint16_t padding_l, + uint16_t padding_r, + uint16_t stride_x, + uint16_t stride_y, + int flag_requant +); + +void xpulp_nn_avgpool_i8_i2( + int8_t * pIn, + int8_t * pOut, + int32_t lambda, + uint16_t out_shift, + int32_t out_add, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + uint16_t dim_im_out_x, + uint16_t dim_im_out_y, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_t, + uint16_t padding_b, + uint16_t padding_l, + uint16_t padding_r, + uint16_t stride_x, + uint16_t stride_y, + int flag_requant +); + +void xpulp_nn_avgpool_u4_u8( + uint8_t * pIn, + uint8_t * pOut, + int32_t lambda, + uint16_t out_shift, + int32_t out_add, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + uint16_t dim_im_out_x, + uint16_t dim_im_out_y, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_t, + uint16_t padding_b, + uint16_t padding_l, + uint16_t padding_r, + uint16_t stride_x, + uint16_t stride_y, + int flag_requant +); + +void xpulp_nn_avgpool_u4_i8( + uint8_t * pIn, + int8_t * pOut, + int32_t lambda, + uint16_t out_shift, + int32_t out_add, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + uint16_t dim_im_out_x, + uint16_t dim_im_out_y, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_t, + uint16_t padding_b, + uint16_t padding_l, + uint16_t padding_r, + uint16_t stride_x, + uint16_t stride_y, + int flag_requant +); + +void xpulp_nn_avgpool_i4_u8( + int8_t * pIn, + uint8_t * pOut, + int32_t lambda, + uint16_t out_shift, + int32_t out_add, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + uint16_t dim_im_out_x, + uint16_t dim_im_out_y, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_t, + uint16_t padding_b, + uint16_t padding_l, + uint16_t padding_r, + uint16_t stride_x, + uint16_t stride_y, + int flag_requant +); + +void xpulp_nn_avgpool_i4_i8( + int8_t * pIn, + int8_t * pOut, + int32_t lambda, + uint16_t out_shift, + int32_t out_add, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + uint16_t dim_im_out_x, + uint16_t dim_im_out_y, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_t, + uint16_t padding_b, + uint16_t padding_l, + uint16_t padding_r, + uint16_t stride_x, + uint16_t stride_y, + int flag_requant +); + +void xpulp_nn_avgpool_u4_u4( + uint8_t * pIn, + uint8_t * pOut, + int32_t lambda, + uint16_t out_shift, + int32_t out_add, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + uint16_t dim_im_out_x, + uint16_t dim_im_out_y, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_t, + uint16_t padding_b, + uint16_t padding_l, + uint16_t padding_r, + uint16_t stride_x, + uint16_t stride_y, + int flag_requant +); + +void xpulp_nn_avgpool_u4_i4( + uint8_t * pIn, + int8_t * pOut, + int32_t lambda, + uint16_t out_shift, + int32_t out_add, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + uint16_t dim_im_out_x, + uint16_t dim_im_out_y, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_t, + uint16_t padding_b, + uint16_t padding_l, + uint16_t padding_r, + uint16_t stride_x, + uint16_t stride_y, + int flag_requant +); + +void xpulp_nn_avgpool_i4_u4( + int8_t * pIn, + uint8_t * pOut, + int32_t lambda, + uint16_t out_shift, + int32_t out_add, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + uint16_t dim_im_out_x, + uint16_t dim_im_out_y, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_t, + uint16_t padding_b, + uint16_t padding_l, + uint16_t padding_r, + uint16_t stride_x, + uint16_t stride_y, + int flag_requant +); + +void xpulp_nn_avgpool_i4_i4( + int8_t * pIn, + int8_t * pOut, + int32_t lambda, + uint16_t out_shift, + int32_t out_add, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + uint16_t dim_im_out_x, + uint16_t dim_im_out_y, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_t, + uint16_t padding_b, + uint16_t padding_l, + uint16_t padding_r, + uint16_t stride_x, + uint16_t stride_y, + int flag_requant +); + +void xpulp_nn_avgpool_u4_u2( + uint8_t * pIn, + uint8_t * pOut, + int32_t lambda, + uint16_t out_shift, + int32_t out_add, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + uint16_t dim_im_out_x, + uint16_t dim_im_out_y, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_t, + uint16_t padding_b, + uint16_t padding_l, + uint16_t padding_r, + uint16_t stride_x, + uint16_t stride_y, + int flag_requant +); + +void xpulp_nn_avgpool_u4_i2( + uint8_t * pIn, + int8_t * pOut, + int32_t lambda, + uint16_t out_shift, + int32_t out_add, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + uint16_t dim_im_out_x, + uint16_t dim_im_out_y, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_t, + uint16_t padding_b, + uint16_t padding_l, + uint16_t padding_r, + uint16_t stride_x, + uint16_t stride_y, + int flag_requant +); + +void xpulp_nn_avgpool_i4_u2( + int8_t * pIn, + uint8_t * pOut, + int32_t lambda, + uint16_t out_shift, + int32_t out_add, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + uint16_t dim_im_out_x, + uint16_t dim_im_out_y, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_t, + uint16_t padding_b, + uint16_t padding_l, + uint16_t padding_r, + uint16_t stride_x, + uint16_t stride_y, + int flag_requant +); + +void xpulp_nn_avgpool_i4_i2( + int8_t * pIn, + int8_t * pOut, + int32_t lambda, + uint16_t out_shift, + int32_t out_add, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + uint16_t dim_im_out_x, + uint16_t dim_im_out_y, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_t, + uint16_t padding_b, + uint16_t padding_l, + uint16_t padding_r, + uint16_t stride_x, + uint16_t stride_y, + int flag_requant +); + +void xpulp_nn_avgpool_u2_u8( + uint8_t * pIn, + uint8_t * pOut, + int32_t lambda, + uint16_t out_shift, + int32_t out_add, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + uint16_t dim_im_out_x, + uint16_t dim_im_out_y, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_t, + uint16_t padding_b, + uint16_t padding_l, + uint16_t padding_r, + uint16_t stride_x, + uint16_t stride_y, + int flag_requant +); + +void xpulp_nn_avgpool_u2_i8( + uint8_t * pIn, + int8_t * pOut, + int32_t lambda, + uint16_t out_shift, + int32_t out_add, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + uint16_t dim_im_out_x, + uint16_t dim_im_out_y, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_t, + uint16_t padding_b, + uint16_t padding_l, + uint16_t padding_r, + uint16_t stride_x, + uint16_t stride_y, + int flag_requant +); + +void xpulp_nn_avgpool_i2_u8( + int8_t * pIn, + uint8_t * pOut, + int32_t lambda, + uint16_t out_shift, + int32_t out_add, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + uint16_t dim_im_out_x, + uint16_t dim_im_out_y, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_t, + uint16_t padding_b, + uint16_t padding_l, + uint16_t padding_r, + uint16_t stride_x, + uint16_t stride_y, + int flag_requant +); + +void xpulp_nn_avgpool_i2_i8( + int8_t * pIn, + int8_t * pOut, + int32_t lambda, + uint16_t out_shift, + int32_t out_add, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + uint16_t dim_im_out_x, + uint16_t dim_im_out_y, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_t, + uint16_t padding_b, + uint16_t padding_l, + uint16_t padding_r, + uint16_t stride_x, + uint16_t stride_y, + int flag_requant +); + +void xpulp_nn_avgpool_u2_u4( + uint8_t * pIn, + uint8_t * pOut, + int32_t lambda, + uint16_t out_shift, + int32_t out_add, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + uint16_t dim_im_out_x, + uint16_t dim_im_out_y, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_t, + uint16_t padding_b, + uint16_t padding_l, + uint16_t padding_r, + uint16_t stride_x, + uint16_t stride_y, + int flag_requant +); + +void xpulp_nn_avgpool_u2_i4( + uint8_t * pIn, + int8_t * pOut, + int32_t lambda, + uint16_t out_shift, + int32_t out_add, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + uint16_t dim_im_out_x, + uint16_t dim_im_out_y, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_t, + uint16_t padding_b, + uint16_t padding_l, + uint16_t padding_r, + uint16_t stride_x, + uint16_t stride_y, + int flag_requant +); + +void xpulp_nn_avgpool_i2_u4( + int8_t * pIn, + uint8_t * pOut, + int32_t lambda, + uint16_t out_shift, + int32_t out_add, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + uint16_t dim_im_out_x, + uint16_t dim_im_out_y, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_t, + uint16_t padding_b, + uint16_t padding_l, + uint16_t padding_r, + uint16_t stride_x, + uint16_t stride_y, + int flag_requant +); + +void xpulp_nn_avgpool_i2_i4( + int8_t * pIn, + int8_t * pOut, + int32_t lambda, + uint16_t out_shift, + int32_t out_add, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + uint16_t dim_im_out_x, + uint16_t dim_im_out_y, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_t, + uint16_t padding_b, + uint16_t padding_l, + uint16_t padding_r, + uint16_t stride_x, + uint16_t stride_y, + int flag_requant +); + +void xpulp_nn_avgpool_u2_u2( + uint8_t * pIn, + uint8_t * pOut, + int32_t lambda, + uint16_t out_shift, + int32_t out_add, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + uint16_t dim_im_out_x, + uint16_t dim_im_out_y, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_t, + uint16_t padding_b, + uint16_t padding_l, + uint16_t padding_r, + uint16_t stride_x, + uint16_t stride_y, + int flag_requant +); + +void xpulp_nn_avgpool_u2_i2( + uint8_t * pIn, + int8_t * pOut, + int32_t lambda, + uint16_t out_shift, + int32_t out_add, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + uint16_t dim_im_out_x, + uint16_t dim_im_out_y, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_t, + uint16_t padding_b, + uint16_t padding_l, + uint16_t padding_r, + uint16_t stride_x, + uint16_t stride_y, + int flag_requant +); + +void xpulp_nn_avgpool_i2_u2( + int8_t * pIn, + uint8_t * pOut, + int32_t lambda, + uint16_t out_shift, + int32_t out_add, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + uint16_t dim_im_out_x, + uint16_t dim_im_out_y, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_t, + uint16_t padding_b, + uint16_t padding_l, + uint16_t padding_r, + uint16_t stride_x, + uint16_t stride_y, + int flag_requant +); + +void xpulp_nn_avgpool_i2_i2( + int8_t * pIn, + int8_t * pOut, + int32_t lambda, + uint16_t out_shift, + int32_t out_add, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + uint16_t dim_im_out_x, + uint16_t dim_im_out_y, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_t, + uint16_t padding_b, + uint16_t padding_l, + uint16_t padding_r, + uint16_t stride_x, + uint16_t stride_y, + int flag_requant +); + +void xpulp_nn_add_u8_u8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + uint16_t out_mult1, + uint16_t out_mult2, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in); + +void xpulp_nn_add_u8_u8_u8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u8_u8_u4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u8_u8_u2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u8_u8_i8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u8_u8_i4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u8_u8_i2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u8_i8_u8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u8_i8_u4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u8_i8_u2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u8_i8_i8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u8_i8_i4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u8_i8_i2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i8_u8_u8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i8_u8_u4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i8_u8_u2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i8_u8_i8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i8_u8_i4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i8_u8_i2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i8_i8_u8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i8_i8_u4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i8_i8_u2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i8_i8_i8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i8_i8_i4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i8_i8_i2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u8_u4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + uint16_t out_mult1, + uint16_t out_mult2, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in); + +void xpulp_nn_add_u8_u4_u8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u8_u4_u4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u8_u4_u2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u8_u4_i8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u8_u4_i4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u8_u4_i2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u8_i4_u8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u8_i4_u4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u8_i4_u2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u8_i4_i8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u8_i4_i4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u8_i4_i2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i8_u4_u8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i8_u4_u4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i8_u4_u2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i8_u4_i8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i8_u4_i4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i8_u4_i2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i8_i4_u8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i8_i4_u4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i8_i4_u2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i8_i4_i8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i8_i4_i4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i8_i4_i2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u8_u2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + uint16_t out_mult1, + uint16_t out_mult2, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in); + +void xpulp_nn_add_u8_u2_u8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u8_u2_u4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u8_u2_u2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u8_u2_i8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u8_u2_i4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u8_u2_i2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u8_i2_u8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u8_i2_u4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u8_i2_u2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u8_i2_i8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u8_i2_i4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u8_i2_i2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i8_u2_u8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i8_u2_u4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i8_u2_u2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i8_u2_i8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i8_u2_i4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i8_u2_i2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i8_i2_u8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i8_i2_u4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i8_i2_u2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i8_i2_i8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i8_i2_i4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i8_i2_i2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u4_u8_u8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u4_u8_u4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u4_u8_u2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u4_u8_i8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u4_u8_i4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u4_u8_i2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u4_i8_u8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u4_i8_u4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u4_i8_u2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u4_i8_i8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u4_i8_i4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u4_i8_i2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i4_u8_u8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i4_u8_u4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i4_u8_u2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i4_u8_i8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i4_u8_i4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i4_u8_i2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i4_i8_u8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i4_i8_u4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i4_i8_u2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i4_i8_i8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i4_i8_i4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i4_i8_i2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u4_u4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + uint16_t out_mult1, + uint16_t out_mult2, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in); + +void xpulp_nn_add_u4_u4_u8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u4_u4_u4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u4_u4_u2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u4_u4_i8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u4_u4_i4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u4_u4_i2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u4_i4_u8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u4_i4_u4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u4_i4_u2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u4_i4_i8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u4_i4_i4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u4_i4_i2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i4_u4_u8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i4_u4_u4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i4_u4_u2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i4_u4_i8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i4_u4_i4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i4_u4_i2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i4_i4_u8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i4_i4_u4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i4_i4_u2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i4_i4_i8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i4_i4_i4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i4_i4_i2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u4_u2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + uint16_t out_mult1, + uint16_t out_mult2, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in); + +void xpulp_nn_add_u4_u2_u8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u4_u2_u4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u4_u2_u2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u4_u2_i8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u4_u2_i4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u4_u2_i2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u4_i2_u8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u4_i2_u4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u4_i2_u2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u4_i2_i8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u4_i2_i4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u4_i2_i2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i4_u2_u8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i4_u2_u4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i4_u2_u2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i4_u2_i8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i4_u2_i4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i4_u2_i2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i4_i2_u8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i4_i2_u4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i4_i2_u2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i4_i2_i8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i4_i2_i4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i4_i2_i2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u2_u8_u8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u2_u8_u4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u2_u8_u2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u2_u8_i8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u2_u8_i4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u2_u8_i2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u2_i8_u8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u2_i8_u4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u2_i8_u2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u2_i8_i8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u2_i8_i4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u2_i8_i2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i2_u8_u8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i2_u8_u4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i2_u8_u2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i2_u8_i8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i2_u8_i4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i2_u8_i2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i2_i8_u8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i2_i8_u4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i2_i8_u2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i2_i8_i8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i2_i8_i4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i2_i8_i2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u2_u4_u8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u2_u4_u4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u2_u4_u2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u2_u4_i8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u2_u4_i4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u2_u4_i2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u2_i4_u8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u2_i4_u4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u2_i4_u2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u2_i4_i8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u2_i4_i4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u2_i4_i2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i2_u4_u8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i2_u4_u4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i2_u4_u2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i2_u4_i8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i2_u4_i4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i2_u4_i2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i2_i4_u8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i2_i4_u4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i2_i4_u2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i2_i4_i8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i2_i4_i4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i2_i4_i2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u2_u2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + uint16_t out_mult1, + uint16_t out_mult2, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in); + +void xpulp_nn_add_u2_u2_u8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u2_u2_u4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u2_u2_u2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u2_u2_i8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u2_u2_i4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u2_u2_i2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u2_i2_u8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u2_i2_u4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u2_i2_u2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u2_i2_i8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u2_i2_i4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u2_i2_i2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i2_u2_u8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i2_u2_u4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i2_u2_u2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i2_u2_i8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i2_u2_i4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i2_u2_i2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i2_i2_u8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i2_i2_u4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i2_i2_u2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i2_i2_i8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i2_i2_i4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i2_i2_i2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + + + +#endif diff --git a/rt_nn_tests/xpnn_conv/pulp_nn_mix_kernels.h b/rt_nn_tests/xpnn_conv/pulp_nn_mix_kernels.h new file mode 100644 index 0000000..8b2a3c6 --- /dev/null +++ b/rt_nn_tests/xpnn_conv/pulp_nn_mix_kernels.h @@ -0,0 +1,7093 @@ +/* + * pulp_nn_kernels.h + * Nazareno Bruschi + * + * Copyright (C) 2019-2020 University of Bologna + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef __XPULPNN-MIXED_KERNELS__ +#define __XPULPNN-MIXED_KERNELS__ + +void xpulp_nn_mix_conv_u8_u8_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_mix_conv_u8_u8_i8_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_mix_conv_u8_u8_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_mix_conv_u8_u8_i4_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_mix_conv_u8_u8_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_mix_conv_u8_u8_i2_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_mix_conv_u8_u4_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_mix_conv_u8_u4_i8_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_mix_conv_u8_u4_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_mix_conv_u8_u4_i4_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_mix_conv_u8_u4_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_mix_conv_u8_u4_i2_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_mix_conv_u8_u2_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_mix_conv_u8_u2_i8_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_mix_conv_u8_u2_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_mix_conv_u8_u2_i4_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_mix_conv_u8_u2_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_mix_conv_u8_u2_i2_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_mix_conv_u4_u8_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_mix_conv_u4_u8_i8_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_mix_conv_u4_u8_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_mix_conv_u4_u8_i4_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_mix_conv_u4_u8_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_mix_conv_u4_u8_i2_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_mix_conv_u4_u4_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_mix_conv_u4_u4_i8_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_mix_conv_u4_u4_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_mix_conv_u4_u4_i4_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_mix_conv_u4_u4_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_mix_conv_u4_u4_i2_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_mix_conv_u4_u2_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_mix_conv_u4_u2_i8_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_mix_conv_u4_u2_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_mix_conv_u4_u2_i4_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_mix_conv_u4_u2_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_mix_conv_u4_u2_i2_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_mix_conv_u2_u8_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_mix_conv_u2_u8_i8_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_mix_conv_u2_u8_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_mix_conv_u2_u8_i4_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_mix_conv_u2_u8_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_mix_conv_u2_u8_i2_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_mix_conv_u2_u4_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_mix_conv_u2_u4_i8_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_mix_conv_u2_u4_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_mix_conv_u2_u4_i4_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_mix_conv_u2_u4_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_mix_conv_u2_u4_i2_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_mix_conv_u2_u2_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_mix_conv_u2_u2_i8_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_mix_conv_u2_u2_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_mix_conv_u2_u2_i4_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_mix_conv_u2_u2_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_mix_conv_u2_u2_i2_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_mix_matmul_u8_u8_i8( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_mix_matmul_u8_u8_i8_4x4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_mix_matmul_u8_u8_i4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_mix_matmul_u8_u8_i4_4x4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_mix_matmul_u8_u8_i2( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_mix_matmul_u8_u8_i2_4x4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_mix_matmul_u8_u4_i8( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_mix_matmul_u8_u4_i8_4x4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_mix_matmul_u8_u4_i4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_mix_matmul_u8_u4_i4_4x4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_mix_matmul_u8_u4_i2( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_mix_matmul_u8_u4_i2_4x4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_mix_matmul_u8_u2_i8( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_mix_matmul_u8_u2_i8_4x4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_mix_matmul_u8_u2_i4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_mix_matmul_u8_u2_i4_4x4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_mix_matmul_u8_u2_i2( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_mix_matmul_u8_u2_i2_4x4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_mix_matmul_u4_u8_i8( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_mix_matmul_u4_u8_i8_4x4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_mix_matmul_u4_u8_i4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_mix_matmul_u4_u8_i4_4x4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_mix_matmul_u4_u8_i2( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_mix_matmul_u4_u8_i2_4x4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_mix_matmul_u4_u4_i8( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_mix_matmul_u4_u4_i8_4x4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_mix_matmul_u4_u4_i4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_mix_matmul_u4_u4_i4_4x4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_mix_matmul_u4_u4_i2( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_mix_matmul_u4_u4_i2_4x4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_mix_matmul_u4_u2_i8( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_mix_matmul_u4_u2_i8_4x4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_mix_matmul_u4_u2_i4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_mix_matmul_u4_u2_i4_4x4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_mix_matmul_u4_u2_i2( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_mix_matmul_u4_u2_i2_4x4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_mix_matmul_u2_u8_i8( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_mix_matmul_u2_u8_i8_4x4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_mix_matmul_u2_u8_i4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_mix_matmul_u2_u8_i4_4x4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_mix_matmul_u2_u8_i2( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_mix_matmul_u2_u8_i2_4x4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_mix_matmul_u2_u4_i8( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_mix_matmul_u2_u4_i8_4x4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_mix_matmul_u2_u4_i4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_mix_matmul_u2_u4_i4_4x4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_mix_matmul_u2_u4_i2( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_mix_matmul_u2_u4_i2_4x4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_mix_matmul_u2_u2_i8( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_mix_matmul_u2_u2_i8_4x4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_mix_matmul_u2_u2_i4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_mix_matmul_u2_u2_i4_4x4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_mix_matmul_u2_u2_i2( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_mix_matmul_u2_u2_i2_4x4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_avgpool_u8_u8( + uint8_t * pIn, + uint8_t * pOut, + int32_t lambda, + uint16_t out_shift, + int32_t out_add, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + uint16_t dim_im_out_x, + uint16_t dim_im_out_y, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_t, + uint16_t padding_b, + uint16_t padding_l, + uint16_t padding_r, + uint16_t stride_x, + uint16_t stride_y, + int flag_requant +); + +void xpulp_nn_avgpool_u8_i8( + uint8_t * pIn, + int8_t * pOut, + int32_t lambda, + uint16_t out_shift, + int32_t out_add, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + uint16_t dim_im_out_x, + uint16_t dim_im_out_y, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_t, + uint16_t padding_b, + uint16_t padding_l, + uint16_t padding_r, + uint16_t stride_x, + uint16_t stride_y, + int flag_requant +); + +void xpulp_nn_avgpool_i8_u8( + int8_t * pIn, + uint8_t * pOut, + int32_t lambda, + uint16_t out_shift, + int32_t out_add, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + uint16_t dim_im_out_x, + uint16_t dim_im_out_y, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_t, + uint16_t padding_b, + uint16_t padding_l, + uint16_t padding_r, + uint16_t stride_x, + uint16_t stride_y, + int flag_requant +); + +void xpulp_nn_avgpool_i8_i8( + int8_t * pIn, + int8_t * pOut, + int32_t lambda, + uint16_t out_shift, + int32_t out_add, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + uint16_t dim_im_out_x, + uint16_t dim_im_out_y, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_t, + uint16_t padding_b, + uint16_t padding_l, + uint16_t padding_r, + uint16_t stride_x, + uint16_t stride_y, + int flag_requant +); + +void xpulp_nn_avgpool_u8_u4( + uint8_t * pIn, + uint8_t * pOut, + int32_t lambda, + uint16_t out_shift, + int32_t out_add, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + uint16_t dim_im_out_x, + uint16_t dim_im_out_y, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_t, + uint16_t padding_b, + uint16_t padding_l, + uint16_t padding_r, + uint16_t stride_x, + uint16_t stride_y, + int flag_requant +); + +void xpulp_nn_avgpool_u8_i4( + uint8_t * pIn, + int8_t * pOut, + int32_t lambda, + uint16_t out_shift, + int32_t out_add, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + uint16_t dim_im_out_x, + uint16_t dim_im_out_y, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_t, + uint16_t padding_b, + uint16_t padding_l, + uint16_t padding_r, + uint16_t stride_x, + uint16_t stride_y, + int flag_requant +); + +void xpulp_nn_avgpool_i8_u4( + int8_t * pIn, + uint8_t * pOut, + int32_t lambda, + uint16_t out_shift, + int32_t out_add, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + uint16_t dim_im_out_x, + uint16_t dim_im_out_y, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_t, + uint16_t padding_b, + uint16_t padding_l, + uint16_t padding_r, + uint16_t stride_x, + uint16_t stride_y, + int flag_requant +); + +void xpulp_nn_avgpool_i8_i4( + int8_t * pIn, + int8_t * pOut, + int32_t lambda, + uint16_t out_shift, + int32_t out_add, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + uint16_t dim_im_out_x, + uint16_t dim_im_out_y, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_t, + uint16_t padding_b, + uint16_t padding_l, + uint16_t padding_r, + uint16_t stride_x, + uint16_t stride_y, + int flag_requant +); + +void xpulp_nn_avgpool_u8_u2( + uint8_t * pIn, + uint8_t * pOut, + int32_t lambda, + uint16_t out_shift, + int32_t out_add, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + uint16_t dim_im_out_x, + uint16_t dim_im_out_y, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_t, + uint16_t padding_b, + uint16_t padding_l, + uint16_t padding_r, + uint16_t stride_x, + uint16_t stride_y, + int flag_requant +); + +void xpulp_nn_avgpool_u8_i2( + uint8_t * pIn, + int8_t * pOut, + int32_t lambda, + uint16_t out_shift, + int32_t out_add, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + uint16_t dim_im_out_x, + uint16_t dim_im_out_y, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_t, + uint16_t padding_b, + uint16_t padding_l, + uint16_t padding_r, + uint16_t stride_x, + uint16_t stride_y, + int flag_requant +); + +void xpulp_nn_avgpool_i8_u2( + int8_t * pIn, + uint8_t * pOut, + int32_t lambda, + uint16_t out_shift, + int32_t out_add, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + uint16_t dim_im_out_x, + uint16_t dim_im_out_y, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_t, + uint16_t padding_b, + uint16_t padding_l, + uint16_t padding_r, + uint16_t stride_x, + uint16_t stride_y, + int flag_requant +); + +void xpulp_nn_avgpool_i8_i2( + int8_t * pIn, + int8_t * pOut, + int32_t lambda, + uint16_t out_shift, + int32_t out_add, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + uint16_t dim_im_out_x, + uint16_t dim_im_out_y, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_t, + uint16_t padding_b, + uint16_t padding_l, + uint16_t padding_r, + uint16_t stride_x, + uint16_t stride_y, + int flag_requant +); + +void xpulp_nn_avgpool_u4_u8( + uint8_t * pIn, + uint8_t * pOut, + int32_t lambda, + uint16_t out_shift, + int32_t out_add, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + uint16_t dim_im_out_x, + uint16_t dim_im_out_y, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_t, + uint16_t padding_b, + uint16_t padding_l, + uint16_t padding_r, + uint16_t stride_x, + uint16_t stride_y, + int flag_requant +); + +void xpulp_nn_avgpool_u4_i8( + uint8_t * pIn, + int8_t * pOut, + int32_t lambda, + uint16_t out_shift, + int32_t out_add, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + uint16_t dim_im_out_x, + uint16_t dim_im_out_y, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_t, + uint16_t padding_b, + uint16_t padding_l, + uint16_t padding_r, + uint16_t stride_x, + uint16_t stride_y, + int flag_requant +); + +void xpulp_nn_avgpool_i4_u8( + int8_t * pIn, + uint8_t * pOut, + int32_t lambda, + uint16_t out_shift, + int32_t out_add, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + uint16_t dim_im_out_x, + uint16_t dim_im_out_y, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_t, + uint16_t padding_b, + uint16_t padding_l, + uint16_t padding_r, + uint16_t stride_x, + uint16_t stride_y, + int flag_requant +); + +void xpulp_nn_avgpool_i4_i8( + int8_t * pIn, + int8_t * pOut, + int32_t lambda, + uint16_t out_shift, + int32_t out_add, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + uint16_t dim_im_out_x, + uint16_t dim_im_out_y, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_t, + uint16_t padding_b, + uint16_t padding_l, + uint16_t padding_r, + uint16_t stride_x, + uint16_t stride_y, + int flag_requant +); + +void xpulp_nn_avgpool_u4_u4( + uint8_t * pIn, + uint8_t * pOut, + int32_t lambda, + uint16_t out_shift, + int32_t out_add, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + uint16_t dim_im_out_x, + uint16_t dim_im_out_y, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_t, + uint16_t padding_b, + uint16_t padding_l, + uint16_t padding_r, + uint16_t stride_x, + uint16_t stride_y, + int flag_requant +); + +void xpulp_nn_avgpool_u4_i4( + uint8_t * pIn, + int8_t * pOut, + int32_t lambda, + uint16_t out_shift, + int32_t out_add, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + uint16_t dim_im_out_x, + uint16_t dim_im_out_y, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_t, + uint16_t padding_b, + uint16_t padding_l, + uint16_t padding_r, + uint16_t stride_x, + uint16_t stride_y, + int flag_requant +); + +void xpulp_nn_avgpool_i4_u4( + int8_t * pIn, + uint8_t * pOut, + int32_t lambda, + uint16_t out_shift, + int32_t out_add, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + uint16_t dim_im_out_x, + uint16_t dim_im_out_y, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_t, + uint16_t padding_b, + uint16_t padding_l, + uint16_t padding_r, + uint16_t stride_x, + uint16_t stride_y, + int flag_requant +); + +void xpulp_nn_avgpool_i4_i4( + int8_t * pIn, + int8_t * pOut, + int32_t lambda, + uint16_t out_shift, + int32_t out_add, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + uint16_t dim_im_out_x, + uint16_t dim_im_out_y, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_t, + uint16_t padding_b, + uint16_t padding_l, + uint16_t padding_r, + uint16_t stride_x, + uint16_t stride_y, + int flag_requant +); + +void xpulp_nn_avgpool_u4_u2( + uint8_t * pIn, + uint8_t * pOut, + int32_t lambda, + uint16_t out_shift, + int32_t out_add, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + uint16_t dim_im_out_x, + uint16_t dim_im_out_y, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_t, + uint16_t padding_b, + uint16_t padding_l, + uint16_t padding_r, + uint16_t stride_x, + uint16_t stride_y, + int flag_requant +); + +void xpulp_nn_avgpool_u4_i2( + uint8_t * pIn, + int8_t * pOut, + int32_t lambda, + uint16_t out_shift, + int32_t out_add, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + uint16_t dim_im_out_x, + uint16_t dim_im_out_y, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_t, + uint16_t padding_b, + uint16_t padding_l, + uint16_t padding_r, + uint16_t stride_x, + uint16_t stride_y, + int flag_requant +); + +void xpulp_nn_avgpool_i4_u2( + int8_t * pIn, + uint8_t * pOut, + int32_t lambda, + uint16_t out_shift, + int32_t out_add, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + uint16_t dim_im_out_x, + uint16_t dim_im_out_y, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_t, + uint16_t padding_b, + uint16_t padding_l, + uint16_t padding_r, + uint16_t stride_x, + uint16_t stride_y, + int flag_requant +); + +void xpulp_nn_avgpool_i4_i2( + int8_t * pIn, + int8_t * pOut, + int32_t lambda, + uint16_t out_shift, + int32_t out_add, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + uint16_t dim_im_out_x, + uint16_t dim_im_out_y, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_t, + uint16_t padding_b, + uint16_t padding_l, + uint16_t padding_r, + uint16_t stride_x, + uint16_t stride_y, + int flag_requant +); + +void xpulp_nn_avgpool_u2_u8( + uint8_t * pIn, + uint8_t * pOut, + int32_t lambda, + uint16_t out_shift, + int32_t out_add, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + uint16_t dim_im_out_x, + uint16_t dim_im_out_y, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_t, + uint16_t padding_b, + uint16_t padding_l, + uint16_t padding_r, + uint16_t stride_x, + uint16_t stride_y, + int flag_requant +); + +void xpulp_nn_avgpool_u2_i8( + uint8_t * pIn, + int8_t * pOut, + int32_t lambda, + uint16_t out_shift, + int32_t out_add, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + uint16_t dim_im_out_x, + uint16_t dim_im_out_y, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_t, + uint16_t padding_b, + uint16_t padding_l, + uint16_t padding_r, + uint16_t stride_x, + uint16_t stride_y, + int flag_requant +); + +void xpulp_nn_avgpool_i2_u8( + int8_t * pIn, + uint8_t * pOut, + int32_t lambda, + uint16_t out_shift, + int32_t out_add, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + uint16_t dim_im_out_x, + uint16_t dim_im_out_y, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_t, + uint16_t padding_b, + uint16_t padding_l, + uint16_t padding_r, + uint16_t stride_x, + uint16_t stride_y, + int flag_requant +); + +void xpulp_nn_avgpool_i2_i8( + int8_t * pIn, + int8_t * pOut, + int32_t lambda, + uint16_t out_shift, + int32_t out_add, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + uint16_t dim_im_out_x, + uint16_t dim_im_out_y, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_t, + uint16_t padding_b, + uint16_t padding_l, + uint16_t padding_r, + uint16_t stride_x, + uint16_t stride_y, + int flag_requant +); + +void xpulp_nn_avgpool_u2_u4( + uint8_t * pIn, + uint8_t * pOut, + int32_t lambda, + uint16_t out_shift, + int32_t out_add, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + uint16_t dim_im_out_x, + uint16_t dim_im_out_y, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_t, + uint16_t padding_b, + uint16_t padding_l, + uint16_t padding_r, + uint16_t stride_x, + uint16_t stride_y, + int flag_requant +); + +void xpulp_nn_avgpool_u2_i4( + uint8_t * pIn, + int8_t * pOut, + int32_t lambda, + uint16_t out_shift, + int32_t out_add, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + uint16_t dim_im_out_x, + uint16_t dim_im_out_y, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_t, + uint16_t padding_b, + uint16_t padding_l, + uint16_t padding_r, + uint16_t stride_x, + uint16_t stride_y, + int flag_requant +); + +void xpulp_nn_avgpool_i2_u4( + int8_t * pIn, + uint8_t * pOut, + int32_t lambda, + uint16_t out_shift, + int32_t out_add, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + uint16_t dim_im_out_x, + uint16_t dim_im_out_y, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_t, + uint16_t padding_b, + uint16_t padding_l, + uint16_t padding_r, + uint16_t stride_x, + uint16_t stride_y, + int flag_requant +); + +void xpulp_nn_avgpool_i2_i4( + int8_t * pIn, + int8_t * pOut, + int32_t lambda, + uint16_t out_shift, + int32_t out_add, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + uint16_t dim_im_out_x, + uint16_t dim_im_out_y, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_t, + uint16_t padding_b, + uint16_t padding_l, + uint16_t padding_r, + uint16_t stride_x, + uint16_t stride_y, + int flag_requant +); + +void xpulp_nn_avgpool_u2_u2( + uint8_t * pIn, + uint8_t * pOut, + int32_t lambda, + uint16_t out_shift, + int32_t out_add, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + uint16_t dim_im_out_x, + uint16_t dim_im_out_y, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_t, + uint16_t padding_b, + uint16_t padding_l, + uint16_t padding_r, + uint16_t stride_x, + uint16_t stride_y, + int flag_requant +); + +void xpulp_nn_avgpool_u2_i2( + uint8_t * pIn, + int8_t * pOut, + int32_t lambda, + uint16_t out_shift, + int32_t out_add, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + uint16_t dim_im_out_x, + uint16_t dim_im_out_y, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_t, + uint16_t padding_b, + uint16_t padding_l, + uint16_t padding_r, + uint16_t stride_x, + uint16_t stride_y, + int flag_requant +); + +void xpulp_nn_avgpool_i2_u2( + int8_t * pIn, + uint8_t * pOut, + int32_t lambda, + uint16_t out_shift, + int32_t out_add, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + uint16_t dim_im_out_x, + uint16_t dim_im_out_y, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_t, + uint16_t padding_b, + uint16_t padding_l, + uint16_t padding_r, + uint16_t stride_x, + uint16_t stride_y, + int flag_requant +); + +void xpulp_nn_avgpool_i2_i2( + int8_t * pIn, + int8_t * pOut, + int32_t lambda, + uint16_t out_shift, + int32_t out_add, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + uint16_t dim_im_out_x, + uint16_t dim_im_out_y, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_t, + uint16_t padding_b, + uint16_t padding_l, + uint16_t padding_r, + uint16_t stride_x, + uint16_t stride_y, + int flag_requant +); + +void xpulp_nn_add_u8_u8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + uint16_t out_mult1, + uint16_t out_mult2, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in); + +void xpulp_nn_add_u8_u8_u8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u8_u8_u4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u8_u8_u2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u8_u8_i8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u8_u8_i4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u8_u8_i2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u8_i8_u8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u8_i8_u4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u8_i8_u2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u8_i8_i8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u8_i8_i4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u8_i8_i2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i8_u8_u8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i8_u8_u4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i8_u8_u2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i8_u8_i8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i8_u8_i4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i8_u8_i2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i8_i8_u8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i8_i8_u4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i8_i8_u2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i8_i8_i8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i8_i8_i4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i8_i8_i2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u8_u4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + uint16_t out_mult1, + uint16_t out_mult2, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in); + +void xpulp_nn_add_u8_u4_u8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u8_u4_u4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u8_u4_u2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u8_u4_i8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u8_u4_i4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u8_u4_i2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u8_i4_u8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u8_i4_u4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u8_i4_u2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u8_i4_i8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u8_i4_i4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u8_i4_i2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i8_u4_u8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i8_u4_u4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i8_u4_u2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i8_u4_i8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i8_u4_i4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i8_u4_i2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i8_i4_u8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i8_i4_u4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i8_i4_u2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i8_i4_i8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i8_i4_i4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i8_i4_i2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u8_u2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + uint16_t out_mult1, + uint16_t out_mult2, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in); + +void xpulp_nn_add_u8_u2_u8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u8_u2_u4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u8_u2_u2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u8_u2_i8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u8_u2_i4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u8_u2_i2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u8_i2_u8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u8_i2_u4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u8_i2_u2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u8_i2_i8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u8_i2_i4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u8_i2_i2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i8_u2_u8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i8_u2_u4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i8_u2_u2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i8_u2_i8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i8_u2_i4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i8_u2_i2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i8_i2_u8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i8_i2_u4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i8_i2_u2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i8_i2_i8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i8_i2_i4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i8_i2_i2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u4_u8_u8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u4_u8_u4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u4_u8_u2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u4_u8_i8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u4_u8_i4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u4_u8_i2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u4_i8_u8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u4_i8_u4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u4_i8_u2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u4_i8_i8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u4_i8_i4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u4_i8_i2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i4_u8_u8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i4_u8_u4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i4_u8_u2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i4_u8_i8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i4_u8_i4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i4_u8_i2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i4_i8_u8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i4_i8_u4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i4_i8_u2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i4_i8_i8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i4_i8_i4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i4_i8_i2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u4_u4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + uint16_t out_mult1, + uint16_t out_mult2, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in); + +void xpulp_nn_add_u4_u4_u8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u4_u4_u4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u4_u4_u2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u4_u4_i8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u4_u4_i4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u4_u4_i2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u4_i4_u8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u4_i4_u4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u4_i4_u2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u4_i4_i8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u4_i4_i4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u4_i4_i2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i4_u4_u8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i4_u4_u4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i4_u4_u2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i4_u4_i8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i4_u4_i4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i4_u4_i2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i4_i4_u8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i4_i4_u4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i4_i4_u2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i4_i4_i8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i4_i4_i4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i4_i4_i2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u4_u2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + uint16_t out_mult1, + uint16_t out_mult2, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in); + +void xpulp_nn_add_u4_u2_u8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u4_u2_u4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u4_u2_u2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u4_u2_i8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u4_u2_i4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u4_u2_i2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u4_i2_u8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u4_i2_u4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u4_i2_u2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u4_i2_i8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u4_i2_i4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u4_i2_i2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i4_u2_u8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i4_u2_u4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i4_u2_u2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i4_u2_i8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i4_u2_i4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i4_u2_i2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i4_i2_u8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i4_i2_u4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i4_i2_u2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i4_i2_i8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i4_i2_i4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i4_i2_i2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u2_u8_u8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u2_u8_u4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u2_u8_u2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u2_u8_i8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u2_u8_i4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u2_u8_i2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u2_i8_u8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u2_i8_u4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u2_i8_u2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u2_i8_i8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u2_i8_i4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u2_i8_i2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i2_u8_u8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i2_u8_u4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i2_u8_u2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i2_u8_i8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i2_u8_i4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i2_u8_i2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i2_i8_u8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i2_i8_u4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i2_i8_u2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i2_i8_i8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i2_i8_i4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i2_i8_i2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u2_u4_u8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u2_u4_u4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u2_u4_u2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u2_u4_i8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u2_u4_i4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u2_u4_i2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u2_i4_u8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u2_i4_u4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u2_i4_u2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u2_i4_i8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u2_i4_i4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u2_i4_i2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i2_u4_u8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i2_u4_u4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i2_u4_u2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i2_u4_i8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i2_u4_i4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i2_u4_i2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i2_i4_u8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i2_i4_u4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i2_i4_u2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i2_i4_i8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i2_i4_i4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i2_i4_i2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u2_u2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + uint16_t out_mult1, + uint16_t out_mult2, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in); + +void xpulp_nn_add_u2_u2_u8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u2_u2_u4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u2_u2_u2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u2_u2_i8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u2_u2_i4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u2_u2_i2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u2_i2_u8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u2_i2_u4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u2_i2_u2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u2_i2_i8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u2_i2_i4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u2_i2_i2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i2_u2_u8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i2_u2_u4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i2_u2_u2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i2_u2_i8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i2_u2_i4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i2_u2_i2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i2_i2_u8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i2_i2_u4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i2_i2_u2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i2_i2_i8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i2_i2_i4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i2_i2_i2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + + + +#endif \ No newline at end of file diff --git a/rt_nn_tests/xpnn_conv/pulp_nn_utils.h b/rt_nn_tests/xpnn_conv/pulp_nn_utils.h new file mode 100644 index 0000000..86107a0 --- /dev/null +++ b/rt_nn_tests/xpnn_conv/pulp_nn_utils.h @@ -0,0 +1,2006 @@ +/* + * pulp_nn_utils.h + * Nazareno Bruschi + * Alessandro Nadalini + * Georg Rutishauser + * + * Copyright (C) 2019-2020 ETH Zurich & University of Bologna + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef __PULPNN_UTILS__ +#define __PULPNN_UTILS__ + +#include + +typedef signed short v2s __attribute__((vector_size (4))); + + + +#define min(a,b) ((a)<(b)?(a):(b)) +#define log2(x) __builtin_pulp_fl1(x) +#define PACK_INT2_SIZE(x) ((x) >> 2) + +#define MemoryFence() asm volatile("":::"memory") + +#define CHANS_DECOMPR(x) (5*x >> 2) // equivalent to division by 0.8 + +/* Functions for Compressed MAC */ +#define CompressedMAC(sum, ptr, config) asm volatile( \ + "pv.smlsdotsp.t %[shum], %[phtr], %[chonfig];" \ + : [shum] "+r" (sum), [phtr] "+r" (ptr): [chonfig] "I" (config)) + +#define CompressedMACUnsigned(sum, ptr, config) asm volatile( \ + "pv.smlsdotsup.t %[shum], %[phtr], %[chonfig];" \ + : [shum] "+r" (sum), [phtr] "+r" (ptr): [chonfig] "I" (config)) + +#define InitNNRF(ptr, config) asm volatile( \ + "pv.smlsdotsp.t x0, %[phtr], %[chonfig];" \ + : [phtr] "+r" (ptr) : [chonfig] "I" (config)) + +#define ThresholdCompress(res, val, thrs) asm volatile( \ + "pv.thrc %[rhes], %[vhal], %[thhrs];" : [rhes] "+r" (res) : [vhal] "r" (val), [thhrs] "r" (thrs)) + +#define GetConfig(a_update, b_update, a_reg, b_reg) a_update << 4 | b_update << 3 | a_reg << 1 | b_reg + +/* Functions for threshold&compress */ +#define check_store(res, pOut) \ + if ((res & 0xe0000000) == 0x00000000) { \ + *pOut = res & 0xff; \ + pOut++; \ + incr_val=ch_out_r; } + +#define check_store_4x1(res, pOut) \ + if ((res & 0xe0000000) == 0x00000000) { \ + *pOut = res & 0xff; \ + pOut++; } + +#define reset_currThr() \ + if ((uint32_t *) currThr == (uint32_t *) (pThr + ch_out)) { \ + currThr = (v2s *) pThr; \ + } + +#define MacLoads20(a_update, b_update, a_reg, b_reg, ptr, sum) __builtin_pulp_mlsdotsp20_v3(a_update, b_update, a_reg, b_reg, ptr, sum) + +#define MacLoad20(a_update, b_update, a_reg, b_reg, ptr, sum) __builtin_pulp_mlsdotsup20_v3(a_update, b_update, a_reg, b_reg, ptr, sum) + +/* Functions for compressed min/max */ +#define CompressedMax(res, in1, in2) asm volatile( \ + "pv.max.t %[res_], %[in1_], %[in2_];" : [res_] "=r" (res) : [in1_] "r" (in1), [in2_] "r" (in2)) + +#define CompressedMin(res, in1, in2) asm volatile( \ + "pv.min.t %[res_], %[in1_], %[in2_];" : [res_] "=r" (res) : [in1_] "r" (in1), [in2_] "r" (in2)) + +#define Max16(res, in1, in2) asm volatile( \ + "pv.max.c %[res_], %[in1_], %[in2_];" : [res_] "=r" (res) : [in1_] "r" (in1), [in2_] "r" (in2)) + +#define Min16(res, in1, in2) asm volatile( \ + "pv.min.c %[res_], %[in1_], %[in2_];" : [res_] "=r" (res) : [in1_] "r" (in1), [in2_] "r" (in2)) + +#define thr_cmp(state, val, threshs) __builtin_pulp_thresh_compr(state, val, threshs) + +typedef unsigned char v4u __attribute__((vector_size (4))); +typedef signed char v4s __attribute__((vector_size (4))); + +#define bitext(x,size,off) __builtin_pulp_bextract(x,size,off) +#define bitextu(x,size,off) __builtin_pulp_bextractu(x,size,off) +#ifdef __clang__ +#define bitins(dst,not_mask_imm,src,mask_imm,off) __builtin_binsert(dst,not_mask_imm,src,mask_imm,off) +#else +#define bitins(dst,not_mask_imm,src,mask_imm,off) __builtin_pulp_binsert(dst,not_mask_imm,src,mask_imm,off) +#endif +#define pack(x,y,z,t) __builtin_pulp_pack4(x,y,z,t) +#define max4(a,b) __builtin_pulp_maxu4(a,b) +#define maxs4(a, b) __builtin_pulp_max4(a, b) +#define max8(a, b) __builtin_pulp_maxu8(a, b) +#define maxs8(a, b) __builtin_pulp_max8(a, b) +#define max16(a, b) __builtin_pulp_maxu16(a, b) +#define maxs16(a, b) __builtin_pulp_max16(a, b) +#define max32(a,b) __builtin_pulp_maxusi(a,b) +#define maxs32(a,b) __builtin_pulp_maxsi(a,b) +#define min32(a,b) __builtin_pulp_minusi(a,b) +#define mins32(a,b) __builtin_pulp_minsi(a,b) +#define min4(a, b) __builtin_pulp_minu4(a, b) +#define mins4(a, b) __builtin_pulp_min4(a, b) +#define min8(a, b) __builtin_pulp_minu8(a, b) +#define mins8(a, b) __builtin_pulp_min8(a, b) +#define min16(a, b) __builtin_pulp_minu16(a, b) +#define mins16(a, b) __builtin_pulp_min16(a, b) +#define avg4(a,b) __builtin_pulp_avgu4(a,b) +#define avg8(a,b) __builtin_pulp_avgu8(a,b) +#define avg16(a,b) __builtin_pulp_avgu16(a,b) +#define log2(x) __builtin_pulp_fl1(x) +#define min(a,b) ((a)<(b)?(a):(b)) +#define SumDotp4(a, b, c) __builtin_pulp_sdotusp4(a, b, c) +#define SumDotp8(a, b, c) __builtin_pulp_sdotusp8(a, b, c) +#define SumDotp16(a, b, c) __builtin_pulp_sdotusp16(a, b, c) +#define SumDotps4(a, b, c) __builtin_pulp_sdotsp4(a, b, c) +#define SumDotps8(a, b, c) __builtin_pulp_sdotsp8(a, b, c) +#define SumDotps16(a, b, c) __builtin_pulp_sdotsp16(a, b, c) +#define clip4(x) __builtin_pulp_clipu_r(x, 15) +#define clip2(x) __builtin_pulp_clipu_r(x, 3) +#define clip8(x) __builtin_pulp_clipu_r(x, 255) + +#define clips4(x) __builtin_pulp_clip_r(x, 7) +#define clips2(x) __builtin_pulp_clip_r(x, 1) +#define clips8(x) __builtin_pulp_clip_r(x, 127) +#define MacLoadInit(a_update, b_update, a_reg, b_reg, ptr) __builtin_pulp_mlinitspr_v3(a_update, b_update, a_reg, b_reg, ptr) +#define MacLoadUpdate(ptr) __builtin_pulp_mlupdatespr_v3(ptr) +#define MacLoadAssign(ptr) __builtin_pulp_mlassignspr_v3(ptr) +#define MacLoad4(a_update, b_update, a_reg, b_reg, ptr, sum) __builtin_pulp_mlsdotsup4_v3(a_update, b_update, a_reg, b_reg, ptr, sum) +#define MacLoad8(a_update, b_update, a_reg, b_reg, ptr, sum) __builtin_pulp_mlsdotsup8_v3(a_update, b_update, a_reg, b_reg, ptr, sum) +#define MacLoad16(a_update, b_update, a_reg, b_reg, ptr, sum) __builtin_pulp_mlsdotsup16_v3(a_update, b_update, a_reg, b_reg, ptr, sum) +#define MacLoads4(a_update, b_update, a_reg, b_reg, ptr, sum) __builtin_pulp_mlsdotsp4_v3(a_update, b_update, a_reg, b_reg, ptr, sum) +#define MacLoads8(a_update, b_update, a_reg, b_reg, ptr, sum) __builtin_pulp_mlsdotsp8_v3(a_update, b_update, a_reg, b_reg, ptr, sum) +#define MacLoads16(a_update, b_update, a_reg, b_reg, ptr, sum) __builtin_pulp_mlsdotsp16_v3(a_update, b_update, a_reg, b_reg, ptr, sum) + +#define PACK_INT8_SIZE(x) (x) +#define PACK_INT4_SIZE(x) ((x) >> 1) +#define PACK_INT2_SIZE(x) ((x) >> 2) + +#define MemoryFence() asm volatile("":::"memory") + +#define LEGACY_MODE(x) asm volatile ("csrwi 0x010," x) +#define IVEC_FMT(x) asm volatile ("csrwi 0x00D," x) +#define MIXED_SKIP(x) asm volatile ("csrwi 0x00F," x) +#define A_ADDRESS(x) asm volatile ("csrw 0x100, %0" :: "r" (x)) +#define W_ADDRESS(x) asm volatile ("csrw 0x101, %0" :: "r" (x)) +#define A_STRIDE(x) asm volatile ("csrw 0x102, %0":: "r" (x)) +#define W_STRIDE(x) asm volatile ("csrw 0x103, %0":: "r" (x)) +#define A_ROLLBACK(x) asm volatile ("csrw 0x104, %0":: "r" (x)) +#define W_ROLLBACK(x) asm volatile ("csrw 0x105, %0":: "r" (x)) +#define A_SKIP(x) asm volatile ("csrwi 0x106," x) +#define W_SKIP(x) asm volatile ("csrwi 0x107," x) + +static uint8_t __attribute__((noinline)) pulp_nn_quant_u2 ( + int32_t phi, + int16_t m, + int8_t d + ) { + int32_t x = (m * phi) >> d; + uint8_t res = clip2(x); + return res; +} +static uint8_t __attribute__((noinline)) pulp_nn_bn_quant_u2 ( + int32_t phi, + int32_t k, + int32_t lambda, + int8_t d + ) { + int32_t integer_image_phi = (k * phi) + lambda; + int32_t x = (integer_image_phi) >> d; + uint8_t res = clip2(x); + return res; +} +static uint8_t __attribute__((noinline)) pulp_nn_add_quant_u2 ( + uint8_t pix1, + uint8_t pix2, + int16_t m1, + int16_t m2, + int8_t d + ) { + uint32_t integer_image = pix1*m1 + pix2*m2; + uint32_t x = (integer_image) >> d; + uint8_t res = clip2(x); + return res; +} + +static int8_t __attribute__((noinline)) pulp_nn_quant_i2 ( + int32_t phi, + int16_t m, + int8_t d + ) { + int32_t x = (m * phi) >> d; + int8_t res = clips2(x); + return res; +} +static int8_t __attribute__((noinline)) pulp_nn_bn_quant_i2 ( + int32_t phi, + int32_t k, + int32_t lambda, + int8_t d + ) { + int32_t integer_image_phi = (k * phi) + lambda; + int32_t x = (integer_image_phi) >> d; + int8_t res = clips2(x); + return res; +} +static int8_t __attribute__((noinline)) pulp_nn_add_quant_i2 ( + int8_t pix1, + int8_t pix2, + int16_t m1, + int16_t m2, + int8_t d + ) { + int32_t integer_image = pix1*m1 + pix2*m2; + int32_t x = (integer_image) >> d; + int8_t res = clips2(x); + return res; +} + +static uint8_t __attribute__((noinline)) pulp_nn_quant_u4 ( + int32_t phi, + int16_t m, + int8_t d + ) { + int32_t x = (m * phi) >> d; + uint8_t res = clip4(x); + return res; +} +static uint8_t __attribute__((noinline)) pulp_nn_bn_quant_u4 ( + int32_t phi, + int32_t k, + int32_t lambda, + int8_t d + ) { + int32_t integer_image_phi = (k * phi) + lambda; + int32_t x = (integer_image_phi) >> d; + uint8_t res = clip4(x); + return res; +} +static uint8_t __attribute__((noinline)) pulp_nn_add_quant_u4 ( + uint8_t pix1, + uint8_t pix2, + int16_t m1, + int16_t m2, + int8_t d + ) { + uint32_t integer_image = pix1*m1 + pix2*m2; + uint32_t x = (integer_image) >> d; + uint8_t res = clip4(x); + return res; +} + +static int8_t __attribute__((noinline)) pulp_nn_quant_i4 ( + int32_t phi, + int16_t m, + int8_t d + ) { + int32_t x = (m * phi) >> d; + int8_t res = clips4(x); + return res; +} +static int8_t __attribute__((noinline)) pulp_nn_bn_quant_i4 ( + int32_t phi, + int32_t k, + int32_t lambda, + int8_t d + ) { + int32_t integer_image_phi = (k * phi) + lambda; + int32_t x = (integer_image_phi) >> d; + int8_t res = clips4(x); + return res; +} +static int8_t __attribute__((noinline)) pulp_nn_add_quant_i4 ( + int8_t pix1, + int8_t pix2, + int16_t m1, + int16_t m2, + int8_t d + ) { + int32_t integer_image = pix1*m1 + pix2*m2; + int32_t x = (integer_image) >> d; + int8_t res = clips4(x); + return res; +} + +static uint8_t __attribute__((noinline)) pulp_nn_quant_u8 ( + int32_t phi, + int16_t m, + int8_t d + ) { + int32_t x = (m * phi) >> d; + uint8_t res = clip8(x); + return res; +} +static uint8_t __attribute__((noinline)) pulp_nn_bn_quant_u8 ( + int32_t phi, + int32_t k, + int32_t lambda, + int8_t d + ) { + int32_t integer_image_phi = (k * phi) + lambda; + int32_t x = (integer_image_phi) >> d; + uint8_t res = clip8(x); + return res; +} +static uint8_t __attribute__((noinline)) pulp_nn_add_quant_u8 ( + uint8_t pix1, + uint8_t pix2, + int16_t m1, + int16_t m2, + int8_t d + ) { + uint32_t integer_image = pix1*m1 + pix2*m2; + uint32_t x = (integer_image) >> d; + uint8_t res = clip8(x); + return res; +} + +static int8_t __attribute__((noinline)) pulp_nn_quant_i8 ( + int32_t phi, + int16_t m, + int8_t d + ) { + int32_t x = (m * phi) >> d; + int8_t res = clips8(x); + return res; +} +static int8_t __attribute__((noinline)) pulp_nn_bn_quant_i8 ( + int32_t phi, + int32_t k, + int32_t lambda, + int8_t d + ) { + int32_t integer_image_phi = (k * phi) + lambda; + int32_t x = (integer_image_phi) >> d; + int8_t res = clips8(x); + return res; +} +static int8_t __attribute__((noinline)) pulp_nn_add_quant_i8 ( + int8_t pix1, + int8_t pix2, + int16_t m1, + int16_t m2, + int8_t d + ) { + int32_t integer_image = pix1*m1 + pix2*m2; + int32_t x = (integer_image) >> d; + int8_t res = clips8(x); + return res; +} + + +static uint8_t __attribute__((noinline)) pulp_nn_u4_quant(int input, int16_t * pThr) +{ + if(input <= pThr[7] ) + { + if( input <= pThr[3]) + { + if( input <= pThr[1]) + { + if( input <= pThr[0]) + return 0; + else + return 1; + } + else + { + if( input <= pThr[2]) + return 2; + else + return 3; + } + } + else + { + if( input <= pThr[5]) + { + if( input <= pThr[4]) + return 4; + else + return 5; + } + else + { + if( input <= pThr[6]) + return 6; + else + return 7; + } + } + } + else + { + if( input <= pThr[11]) + { + if( input <= pThr[9]) + { + if( input <= pThr[8]) + return 8; + else + return 9; + } + else + { + if( input <= pThr[10]) + return 10; + else + return 11; + } + } + else + { + if( input <= pThr[13]) + { + if( input <= pThr[12]) + return 12; + else + return 13; + } + else + { + if( input <= pThr[14]) + return 14; + else + return 15; + } + } + } +} + +static uint8_t __attribute__((noinline)) pulp_nn_u2_quant(int input, int16_t * pThr) +{ + if( input <= pThr[1]) + { + if( input <= pThr[0]) + { + return 0; + } + else + { + return 1; + } + } + else + { + if( input <= pThr[2]) + { + return 2; + } + else + { + return 3; + } + } +} + +/* + * Common + */ + + +static v4s __attribute__((noinline)) pulp_nn_i4_to_i8_r( int8_t *pSrc) +{ + v4s Src = *((v4s*) pSrc); + int8_t bext1, bext2, bext3, bext4; + + bext1 = (int8_t) bitext((int) Src, 4, 0); + bext2 = (int8_t) bitext((int) Src, 4, 4); + bext3 = (int8_t) bitext((int) Src, 4, 8); + bext4 = (int8_t) bitext((int) Src, 4, 12); + v4s res = pack((int8_t) bext1, (int8_t) bext2, (int8_t) bext3, (int8_t) bext4); + + return res; +} + +static v4u __attribute__((noinline)) pulp_nn_u4_to_u8_r(uint8_t *pSrc) +{ + v4u Src = *((v4u*) pSrc); + uint8_t bext1, bext2, bext3, bext4; + + bext1 = (uint8_t) bitextu((unsigned int) Src, 4, 0); + bext2 = (uint8_t) bitextu((unsigned int) Src, 4, 4); + bext3 = (uint8_t) bitextu((unsigned int) Src, 4, 8); + bext4 = (uint8_t) bitextu((unsigned int) Src, 4, 12); + v4u res = pack((uint8_t) bext1, (uint8_t) bext2, (uint8_t) bext3, (uint8_t) bext4); + + return res; +} + +static v4s __attribute__((noinline)) pulp_nn_i2_to_i8_r( int8_t *pSrc) +{ + v4s Src = *((v4s*) pSrc); + int8_t bext1, bext2, bext3, bext4; + + bext1 = (int8_t) bitext((int) Src, 2, 0); + bext2 = (int8_t) bitext((int) Src, 2, 2); + bext3 = (int8_t) bitext((int) Src, 2, 4); + bext4 = (int8_t) bitext((int) Src, 2, 6); + v4s res = pack((int8_t) bext1, (int8_t) bext2, (int8_t) bext3, (int8_t) bext4); + + return res; +} + +static v4u __attribute__((noinline)) pulp_nn_u2_to_u8_r(uint8_t *pSrc) +{ + v4u Src = *((v4u*) pSrc); + uint8_t bext1, bext2, bext3, bext4; + + bext1 = (uint8_t) bitextu((unsigned int) Src, 2, 0); + bext2 = (uint8_t) bitextu((unsigned int) Src, 2, 2); + bext3 = (uint8_t) bitextu((unsigned int) Src, 2, 4); + bext4 = (uint8_t) bitextu((unsigned int) Src, 2, 6); + v4u res = pack((uint8_t) bext1, (uint8_t) bext2, (uint8_t) bext3, (uint8_t) bext4); + + return res; +} + +static v4s __attribute__((noinline)) pulp_nn_i2_to_i4_r(int8_t *pSrc) +{ + int8_t mask = 0xf0; + int8_t n_mask = ~ mask; + int8_t off = 0x04; + + v4s Src = *((v4s*) pSrc); + int8_t bext1, bext2, bext3, bext4; + int8_t out1, out2, out3, out4; + + bext1 = (int8_t) bitextu((int) Src, 2, 0); + bext2 = (int8_t) bitextu((int) Src, 2, 2); + bext3 = (int8_t) bitextu((int) Src, 2, 4); + bext4 = (int8_t) bitextu((int) Src, 2, 6); + + out1 = bitins(bext1, n_mask, bext2, mask, off); + out2 = bitins(bext3, n_mask, bext4, mask, off); + + bext1 = (int8_t) bitextu((int) Src, 2, 8); + bext2 = (int8_t) bitextu((int) Src, 2, 10); + bext3 = (int8_t) bitextu((int) Src, 2, 12); + bext4 = (int8_t) bitextu((int) Src, 2, 14); + + out3 = bitins(bext1, n_mask, bext2, mask, off); + out4 = bitins(bext3, n_mask, bext4, mask, off); + + v4s res = pack((int8_t) out1, (int8_t) out2, (int8_t) out3, (int8_t) out4); + + return res; +} + +static v4u __attribute__((noinline)) pulp_nn_u2_to_u4_r(uint8_t *pSrc) +{ + int8_t mask = 0xf0; + int8_t n_mask = ~ mask; + int8_t off = 0x04; + + v4u Src = *((v4u*) pSrc); + uint8_t bext1, bext2, bext3, bext4; + uint8_t out1, out2, out3, out4; + + bext1 = (uint8_t) bitextu((unsigned int) Src, 2, 0); + bext2 = (uint8_t) bitextu((unsigned int) Src, 2, 2); + bext3 = (uint8_t) bitextu((unsigned int) Src, 2, 4); + bext4 = (uint8_t) bitextu((unsigned int) Src, 2, 6); + + out1 = bitins(bext1, n_mask, bext2, mask, off); + out2 = bitins(bext3, n_mask, bext4, mask, off); + + bext1 = (uint8_t) bitextu((unsigned int) Src, 2, 8); + bext2 = (uint8_t) bitextu((unsigned int) Src, 2, 10); + bext3 = (uint8_t) bitextu((unsigned int) Src, 2, 12); + bext4 = (uint8_t) bitextu((unsigned int) Src, 2, 14); + + out3 = bitins(bext1, n_mask, bext2, mask, off); + out4 = bitins(bext3, n_mask, bext4, mask, off); + + v4u res = pack((uint8_t) out1, (uint8_t) out2, (uint8_t) out3, (uint8_t) out4); + + return res; +} + +static int8_t *__attribute__((always_inline)) pulp_nn_i4_to_i8( int8_t *pSrc, int8_t *pDst) +{ + v4s Src = *((v4s*) pSrc); + int8_t bext1, bext2, bext3, bext4; + + pSrc+=4; + + bext1 = (int8_t) bitext((int) Src, 4, 0); + bext2 = (int8_t) bitext((int) Src, 4, 4); + bext3 = (int8_t) bitext((int) Src, 4, 8); + bext4 = (int8_t) bitext((int) Src, 4, 12); + *((v4s*)pDst) = pack((int8_t) bext1, (int8_t) bext2, (int8_t) bext3, (int8_t) bext4); + MemoryFence(); + pDst+=4; + bext1 = (int8_t) bitext((int) Src, 4, 16); + bext2 = (int8_t) bitext((int) Src, 4, 20); + bext3 = (int8_t) bitext((int) Src, 4, 24); + bext4 = (int8_t) bitext((int) Src, 4, 28); + *((v4s*)pDst) = pack((int8_t) bext1, (int8_t) bext2, (int8_t) bext3, (int8_t) bext4); + + return pSrc; +} + +static uint8_t *__attribute__((always_inline)) pulp_nn_u4_to_u8(uint8_t *pSrc, uint8_t *pDst) +{ + v4u Src = *((v4u*) pSrc); + uint8_t bext1, bext2, bext3, bext4; + + pSrc+=4; + + bext1 = (uint8_t) bitextu((unsigned int) Src, 4, 0); + bext2 = (uint8_t) bitextu((unsigned int) Src, 4, 4); + bext3 = (uint8_t) bitextu((unsigned int) Src, 4, 8); + bext4 = (uint8_t) bitextu((unsigned int) Src, 4, 12); + *((v4u*)pDst) = pack((uint8_t) bext1, (uint8_t) bext2, (uint8_t) bext3, (uint8_t) bext4); + MemoryFence(); + pDst+=4; + bext1 = (uint8_t) bitextu((unsigned int) Src, 4, 16); + bext2 = (uint8_t) bitextu((unsigned int) Src, 4, 20); + bext3 = (uint8_t) bitextu((unsigned int) Src, 4, 24); + bext4 = (uint8_t) bitextu((unsigned int) Src, 4, 28); + *((v4u*)pDst) = pack((uint8_t) bext1, (uint8_t) bext2, (uint8_t) bext3, (uint8_t) bext4); + + return pSrc; +} + +static int8_t *__attribute__((always_inline)) pulp_nn_i2_to_i8( int8_t * pSrc, int8_t * pDst) +{ + v4s Src = *((v4s*) pSrc); + int8_t bext1, bext2, bext3, bext4; + + pSrc+=4; + + bext1 = (int8_t) bitext((int) Src, 2, 0); + bext2 = (int8_t) bitext((int) Src, 2, 2); + bext3 = (int8_t) bitext((int) Src, 2, 4); + bext4 = (int8_t) bitext((int) Src, 2, 6); + *((v4s*)pDst) = pack((int8_t) bext1, (int8_t) bext2, (int8_t) bext3, (int8_t) bext4); + MemoryFence(); + pDst+=4; + bext1 = (int8_t) bitext((int) Src, 2, 8); + bext2 = (int8_t) bitext((int) Src, 2, 10); + bext3 = (int8_t) bitext((int) Src, 2, 12); + bext4 = (int8_t) bitext((int) Src, 2, 14); + *((v4s*)pDst) = pack((int8_t) bext1, (int8_t) bext2, (int8_t) bext3, (int8_t) bext4); + MemoryFence(); + pDst+=4; + bext1 = (int8_t) bitext((int) Src, 2, 16); + bext2 = (int8_t) bitext((int) Src, 2, 18); + bext3 = (int8_t) bitext((int) Src, 2, 20); + bext4 = (int8_t) bitext((int) Src, 2, 22); + *((v4s*)pDst) = pack((int8_t) bext1, (int8_t) bext2, (int8_t) bext3, (int8_t) bext4); + MemoryFence(); + pDst+=4; + bext1 = (int8_t) bitext((int) Src, 2, 24); + bext2 = (int8_t) bitext((int) Src, 2, 26); + bext3 = (int8_t) bitext((int) Src, 2, 28); + bext4 = (int8_t) bitext((int) Src, 2, 30); + *((v4s*)pDst) = pack((int8_t) bext1, (int8_t) bext2, (int8_t) bext3, (int8_t) bext4); + + return pSrc; +} + +static uint8_t *__attribute__((always_inline)) pulp_nn_u2_to_u8(uint8_t * pSrc, uint8_t * pDst) +{ + v4u Src = *((v4u*) pSrc); + uint8_t bext1, bext2, bext3, bext4; + + pSrc+=4; + + bext1 = (uint8_t) bitextu((unsigned int) Src, 2, 0); + bext2 = (uint8_t) bitextu((unsigned int) Src, 2, 2); + bext3 = (uint8_t) bitextu((unsigned int) Src, 2, 4); + bext4 = (uint8_t) bitextu((unsigned int) Src, 2, 6); + *((v4u*)pDst) = pack((uint8_t) bext1, (uint8_t) bext2, (uint8_t) bext3, (uint8_t) bext4); + MemoryFence(); + pDst+=4; + bext1 = (uint8_t) bitextu((unsigned int) Src, 2, 8); + bext2 = (uint8_t) bitextu((unsigned int) Src, 2, 10); + bext3 = (uint8_t) bitextu((unsigned int) Src, 2, 12); + bext4 = (uint8_t) bitextu((unsigned int) Src, 2, 14); + *((v4u*)pDst) = pack((uint8_t) bext1, (uint8_t) bext2, (uint8_t) bext3, (uint8_t) bext4); + MemoryFence(); + pDst+=4; + bext1 = (uint8_t) bitextu((unsigned int) Src, 2, 16); + bext2 = (uint8_t) bitextu((unsigned int) Src, 2, 18); + bext3 = (uint8_t) bitextu((unsigned int) Src, 2, 20); + bext4 = (uint8_t) bitextu((unsigned int) Src, 2, 22); + *((v4u*)pDst) = pack((uint8_t) bext1, (uint8_t) bext2, (uint8_t) bext3, (uint8_t) bext4); + MemoryFence(); + pDst+=4; + bext1 = (uint8_t) bitextu((unsigned int) Src, 2, 24); + bext2 = (uint8_t) bitextu((unsigned int) Src, 2, 26); + bext3 = (uint8_t) bitextu((unsigned int) Src, 2, 28); + bext4 = (uint8_t) bitextu((unsigned int) Src, 2, 30); + *((v4u*)pDst) = pack((uint8_t) bext1, (uint8_t) bext2, (uint8_t) bext3, (uint8_t) bext4); + + return pSrc; +} + +static int8_t *__attribute__((always_inline)) pulp_nn_i2_to_i4( int8_t * pSrc, int8_t * pDst) +{ + int8_t mask = 0xf0; + int8_t n_mask = ~ mask; + int8_t off = 0x04; + + v4s Src = *((v4s*) pSrc); + int8_t bext1, bext2, bext3, bext4; + int8_t out1, out2, out3, out4; + + pSrc+=4; + + bext1 = (int8_t) bitext((int) Src, 2, 0); + bext2 = (int8_t) bitext((int) Src, 2, 2); + bext3 = (int8_t) bitext((int) Src, 2, 4); + bext4 = (int8_t) bitext((int) Src, 2, 6); + + out1 = bitins(bext1, n_mask, bext2, mask, off); + out2 = bitins(bext3, n_mask, bext4, mask, off); + MemoryFence(); + + bext1 = (int8_t) bitext((int) Src, 2, 8); + bext2 = (int8_t) bitext((int) Src, 2, 10); + bext3 = (int8_t) bitext((int) Src, 2, 12); + bext4 = (int8_t) bitext((int) Src, 2, 14); + + out3 = bitins(bext1, n_mask, bext2, mask, off); + out4 = bitins(bext3, n_mask, bext4, mask, off); + + *((v4s*)pDst) = pack((int8_t) out1, (int8_t) out2, (int8_t) out3, (int8_t) out4); + MemoryFence(); + + pDst+=4; + bext1 = (int8_t) bitext((int) Src, 2, 16); + bext2 = (int8_t) bitext((int) Src, 2, 18); + bext3 = (int8_t) bitext((int) Src, 2, 20); + bext4 = (int8_t) bitext((int) Src, 2, 22); + + out1 = bitins(bext1, n_mask, bext2, mask, off); + out2 = bitins(bext3, n_mask, bext4, mask, off); + MemoryFence(); + + bext1 = (int8_t) bitext((int) Src, 2, 24); + bext2 = (int8_t) bitext((int) Src, 2, 26); + bext3 = (int8_t) bitext((int) Src, 2, 28); + bext4 = (int8_t) bitext((int) Src, 2, 30); + + out3 = bitins(bext1, n_mask, bext2, mask, off); + out4 = bitins(bext3, n_mask, bext4, mask, off); + + *((v4s*)pDst) = pack((int8_t) out1, (int8_t) out2, (int8_t) out3, (int8_t) out4); + + return pSrc; +} + +static uint8_t *__attribute__((always_inline)) pulp_nn_u2_to_u4( uint8_t * pSrc, uint8_t * pDst) +{ + int8_t mask = 0xf0; + int8_t n_mask = ~ mask; + int8_t off = 0x04; + + v4u Src = *((v4u*) pSrc); + uint8_t bext1, bext2, bext3, bext4; + uint8_t out1, out2, out3, out4; + + pSrc+=4; + + bext1 = (uint8_t) bitextu((unsigned int) Src, 2, 0); + bext2 = (uint8_t) bitextu((unsigned int) Src, 2, 2); + bext3 = (uint8_t) bitextu((unsigned int) Src, 2, 4); + bext4 = (uint8_t) bitextu((unsigned int) Src, 2, 6); + + out1 = bitins(bext1, n_mask, bext2, mask, off); + out2 = bitins(bext3, n_mask, bext4, mask, off); + MemoryFence(); + + bext1 = (uint8_t) bitextu((unsigned int) Src, 2, 8); + bext2 = (uint8_t) bitextu((unsigned int) Src, 2, 10); + bext3 = (uint8_t) bitextu((unsigned int) Src, 2, 12); + bext4 = (uint8_t) bitextu((unsigned int) Src, 2, 14); + + out3 = bitins(bext1, n_mask, bext2, mask, off); + out4 = bitins(bext3, n_mask, bext4, mask, off); + + *((v4u*)pDst) = pack((uint8_t) out1, (uint8_t) out2, (uint8_t) out3, (uint8_t) out4); + MemoryFence(); + + pDst+=4; + bext1 = (uint8_t) bitextu((unsigned int) Src, 2, 16); + bext2 = (uint8_t) bitextu((unsigned int) Src, 2, 18); + bext3 = (uint8_t) bitextu((unsigned int) Src, 2, 20); + bext4 = (uint8_t) bitextu((unsigned int) Src, 2, 22); + + out1 = bitins(bext1, n_mask, bext2, mask, off); + out2 = bitins(bext3, n_mask, bext4, mask, off); + MemoryFence(); + + bext1 = (uint8_t) bitextu((unsigned int) Src, 2, 24); + bext2 = (uint8_t) bitextu((unsigned int) Src, 2, 26); + bext3 = (uint8_t) bitextu((unsigned int) Src, 2, 28); + bext4 = (uint8_t) bitextu((unsigned int) Src, 2, 30); + + out3 = bitins(bext1, n_mask, bext2, mask, off); + out4 = bitins(bext3, n_mask, bext4, mask, off); + + *((v4u*)pDst) = pack((uint8_t) out1, (uint8_t) out2, (uint8_t) out3, (uint8_t) out4); + + return pSrc; +} + +/* + * XpulpV2 + */ + +static void __attribute__((noinline)) pulp_zero_mem(uint8_t * pBuffer, unsigned int size) +{ + int lfover = size &0x3; + for (int i=0; i<(size>>2); i++) + { + *((v4u *)pBuffer) = (v4u){0,0,0,0}; + MemoryFence(); + pBuffer+=4; + } + while(lfover) + { + *pBuffer++=0; + lfover--; + } +} + +static void __attribute__((noinline)) pulp_nn_im2col_u2_to_u8(uint8_t * pInput, uint8_t * pOutput, unsigned int blockSize) +{ + unsigned int blkCnt = blockSize >> 4u; + int lfover = blockSize & 0x0f; + for (int i = 0; i> 4u; + int lfover = blockSize & 0x0f; + for (int i = 0; i> 3u; + int lfover = blockSize & 0x07; + for (int i = 0; i> 3u; + int lfover = blockSize & 0x07; + for (int i = 0; i> 2u; + int lfover = blockSize & 0x03; + for (int i = 0; i> 2u; + int lfover = blockSize & 0x03; + for (int i = 0; i> 4u; + int lfover = blockSize & 0x0f; + for (int i = 0; i> 4u; + int lfover = blockSize & 0x0f; + for (int i = 0; i> 4u; + int lfover = blockSize & 0x0f; + for (int i = 0; i> 4u; + int lfover = blockSize & 0x0f; + for (int i = 0; i> 4u; + int lfover = blockSize & 0x0f; + for (int i = 0; i> 4u; + int lfover = blockSize & 0x0f; + for (int i = 0; i> 3u; + int lfover = blockSize & 0x07; + for (int i = 0; i> 3u; + int lfover = blockSize & 0x07; + for (int i = 0; i> 3u; + int lfover = blockSize & 0x07; + for (int i = 0; i> 3u; + int lfover = blockSize & 0x07; + for (int i = 0; i> 2u; + int lfover = blockSize & 0x03; + for (int i = 0; i> 2u; + int lfover = blockSize & 0x03; + for (int i = 0; i> 2; + + while(cnt > 0u) + { + inp = *((v4u*)pIn); + com = *((v4u*)pCom); + + *((v4u*)pIn) = max4(inp, com); + + pCom+=4; + pIn+=4; + cnt--; + } + + int left = length & 0x3; + while (left>0u) + { + if(*pIn<*pCom) + *pIn=*pCom; + + pIn++; + pCom++; + left--; + } +} + +static void __attribute__((noinline)) pulp_nn_compare_and_replace_if_larger_i8( + int8_t * base, int8_t * target, uint16_t length) { + int8_t *pIn = base; + int8_t *pCom = target; + v4s inp; + v4s com; + int cnt = length >> 2; + + while (cnt > 0u) { + inp = *((v4s *)pIn); + com = *((v4s *)pCom); + + *((v4s *)pIn) = maxs4(inp, com); + + pCom += 4; + pIn += 4; + cnt--; + } + + int left = length & 0x3; + while (left > 0u) { + if (*pIn < *pCom) + *pIn = *pCom; + + pIn++; + pCom++; + left--; + } +} + +static void __attribute__((noinline)) pulp_nn_avg_and_replace_u8(uint8_t * base, + uint8_t * target, + uint16_t length) +{ + uint8_t *pIn = base; + uint8_t *pCom = target; + + while (length>0u) + { + *pIn = ((*pIn + *pCom) >> 1); + + pIn++; + pCom++; + length--; + } +} + +static void __attribute__((noinline)) pulp_nn_compare_and_replace_if_larger_u4(uint8_t * base, + uint8_t * target, + uint16_t length) +{ + int8_t mask = 0xf0; + int8_t n_mask = ~ mask; + int8_t off = 0x04; + + uint8_t *pIn = base; + uint8_t *pCom = target; + v4u inp[2]; + v4u com[2]; + uint8_t *out; + int cnt = length >> 2; + + while(cnt > 0u) + { + pulp_nn_u4_to_u8(pIn, (uint8_t *)inp); + pulp_nn_u4_to_u8(pCom, (uint8_t *)com); + + *((v4u *)out) = max4(inp[0], com[0]); + + *((uint8_t*)pIn) = bitins(*out, n_mask, *(out + 1), mask, off); + pIn++; + *((uint8_t*)pIn) = bitins(*(out + 2), n_mask, *(out + 3), mask, off); + pIn++; + + *((v4u *)out) = max4(inp[1], com[1]); + + *((uint8_t*)pIn) = bitins(*out, n_mask, *(out + 1), mask, off); + pIn++; + *((uint8_t*)pIn) = bitins(*(out + 2), n_mask, *(out + 3), mask, off); + pIn++; + + pCom+=4; + cnt--; + } + + int left = length & 0x3; + while (left>0u) + { + uint8_t inA0 = (uint8_t) bitextu((unsigned int) *pIn, 4, 0); + uint8_t inA1 = (uint8_t) bitextu((unsigned int) *pIn, 4, 4); + uint8_t inB0 = (uint8_t) bitextu((unsigned int) *pCom, 4, 0); + uint8_t inB1 = (uint8_t) bitextu((unsigned int) *pCom, 4, 4); + + if(inA0> 2; + + while(cnt > 0u) + { + pulp_nn_i4_to_i8(pIn, (int8_t *)inp); + pulp_nn_i4_to_i8(pCom, (int8_t *)com); + + *((v4s *)out) = maxs4(inp[0], com[0]); + + *((int8_t*)pIn) = bitins(*out, n_mask, *(out + 1), mask, off); + pIn++; + *((int8_t*)pIn) = bitins(*(out + 2), n_mask, *(out + 3), mask, off); + pIn++; + + *((v4s *)out) = maxs4(inp[1], com[1]); + + *((int8_t*)pIn) = bitins(*out, n_mask, *(out + 1), mask, off); + pIn++; + *((int8_t*)pIn) = bitins(*(out + 2), n_mask, *(out + 3), mask, off); + pIn++; + + pCom+=4; + cnt--; + } + + int left = length & 0x3; + while (left>0u) + { + int8_t inA0 = (int8_t) bitext((int) *pIn, 4, 0); + int8_t inA1 = (int8_t) bitext((int) *pIn, 4, 4); + int8_t inB0 = (int8_t) bitext((int) *pCom, 4, 0); + int8_t inB1 = (int8_t) bitext((int) *pCom, 4, 4); + + if(inA00u) + { + uint8_t inA0 = (uint8_t) bitextu((unsigned int) *pIn, 4, 0); + uint8_t inA1 = (uint8_t) bitextu((unsigned int) *pIn, 4, 4); + uint8_t inB0 = (uint8_t) bitextu((unsigned int) *pCom, 4, 0); + uint8_t inB1 = (uint8_t) bitextu((unsigned int) *pCom, 4, 4); + + inA0 = ((inA0 + inB0) >> 1); + inA1 = ((inA1 + inB1) >> 1); + + *((uint8_t*)pIn) = bitins(inA0, n_mask, inA1, mask, off); + + pIn++; + pCom++; + length--; + } +} + +static void __attribute__((noinline)) pulp_nn_compare_and_replace_if_larger_u2(uint8_t * base, + uint8_t * target, + uint16_t length) +{ + int8_t mask2 = 0x0c; + int8_t n_mask2 = ~ mask2; + int8_t mask4 = 0x30; + int8_t n_mask4 = ~ mask4; + int8_t mask6 = 0xc0; + int8_t n_mask6 = ~ mask6; + int8_t off2 = 2; + int8_t off4 = 4; + int8_t off6 = 6; + + uint8_t *pIn = base; + uint8_t *pCom = target; + v4u inp[4]; + v4u com[4]; + uint8_t *out; + int cnt = length >> 2; + + while(cnt > 0u) + { + pulp_nn_u2_to_u8(pIn, inp); + pulp_nn_u2_to_u8(pCom, com); + + *((v4u*)out) = max4(inp[0], com[0]); + + uint8_t inA = (uint8_t) bitins(*out, n_mask2, *(out + 1), mask2, off2); + inA = bitins(inA, n_mask4, *(out + 2), mask4, off4); + *((uint8_t*)pIn) = bitins(inA, n_mask6, *(out + 3), mask6, off6); + pIn++; + + *((v4u*)out) = max4(inp[1], com[1]); + + inA = (uint8_t) bitins(*out, n_mask2, *(out + 1), mask2, off2); + inA = bitins(inA, n_mask4, *(out + 2), mask4, off4); + *((uint8_t*)pIn) = bitins(inA, n_mask6, *(out + 3), mask6, off6); + pIn++; + + *((v4u*)out) = max4(inp[2], com[2]); + + inA = (uint8_t) bitins(*out, n_mask2, *(out + 1), mask2, off2); + inA = bitins(inA, n_mask4, *(out + 2), mask4, off4); + *((uint8_t*)pIn) = bitins(inA, n_mask6, *(out + 3), mask6, off6); + pIn++; + + *((v4u*)out) = max4(inp[3], com[3]); + + inA = (uint8_t) bitins(*out, n_mask2, *(out + 1), mask2, off2); + inA = bitins(inA, n_mask4, *(out + 2), mask4, off4); + *((uint8_t*)pIn) = bitins(inA, n_mask6, *(out + 3), mask6, off6); + pIn++; + + pCom+=4; + cnt--; + } + + int left = length & 0x3; + while (left>0u) + { + uint8_t inA0 = (uint8_t) bitextu((unsigned int) *pIn, 2, 0); + uint8_t inA1 = (uint8_t) bitextu((unsigned int) *pIn, 2, 2); + uint8_t inA2 = (uint8_t) bitextu((unsigned int) *pIn, 2, 4); + uint8_t inA3 = (uint8_t) bitextu((unsigned int) *pIn, 2, 6); + v4u inA4 = pack((uint8_t) inA0, (uint8_t) inA1, (uint8_t) inA2, (uint8_t) inA3); + uint8_t inB0 = (uint8_t) bitextu((unsigned int) *pCom, 2, 0); + uint8_t inB1 = (uint8_t) bitextu((unsigned int) *pCom, 2, 2); + uint8_t inB2 = (uint8_t) bitextu((unsigned int) *pCom, 2, 4); + uint8_t inB3 = (uint8_t) bitextu((unsigned int) *pCom, 2, 6); + v4u inB4 = pack((uint8_t) inB0, (uint8_t) inB1, (uint8_t) inB2, (uint8_t) inB3); + + *((v4u*)out) = max4(inA4, inB4); + + uint8_t inA = (uint8_t) bitins(*out, n_mask2, *(out + 1), mask2, off2); + inA = bitins(inA, n_mask4, *(out + 2), mask4, off4); + *((uint8_t*)pIn) = bitins(inA, n_mask6, *(out + 3), mask6, off6); + + pIn++; + pCom++; + left--; + } +} + + +static void __attribute__((noinline)) pulp_nn_compare_and_replace_if_larger_i2(int8_t * base, + int8_t * target, + uint16_t length) +{ + int8_t mask2 = 0x0c; + int8_t n_mask2 = ~ mask2; + int8_t mask4 = 0x30; + int8_t n_mask4 = ~ mask4; + int8_t mask6 = 0xc0; + int8_t n_mask6 = ~ mask6; + int8_t off2 = 2; + int8_t off4 = 4; + int8_t off6 = 6; + + int8_t *pIn = base; + int8_t *pCom = target; + v4s inp[4]; + v4s com[4]; + int8_t *out; + int cnt = length >> 2; + + while(cnt > 0u) + { + pulp_nn_i2_to_i8(pIn, inp); + pulp_nn_i2_to_i8(pCom, com); + + *((v4s*)out) = maxs4(inp[0], com[0]); + + int8_t inA = (int8_t) bitins(*out, n_mask2, *(out + 1), mask2, off2); + inA = bitins(inA, n_mask4, *(out + 2), mask4, off4); + *((int8_t*)pIn) = bitins(inA, n_mask6, *(out + 3), mask6, off6); + pIn++; + + *((v4s*)out) = maxs4(inp[1], com[1]); + + inA = (int8_t) bitins(*out, n_mask2, *(out + 1), mask2, off2); + inA = bitins(inA, n_mask4, *(out + 2), mask4, off4); + *((int8_t*)pIn) = bitins(inA, n_mask6, *(out + 3), mask6, off6); + pIn++; + + *((v4s*)out) = maxs4(inp[2], com[2]); + + inA = (int8_t) bitins(*out, n_mask2, *(out + 1), mask2, off2); + inA = bitins(inA, n_mask4, *(out + 2), mask4, off4); + *((int8_t*)pIn) = bitins(inA, n_mask6, *(out + 3), mask6, off6); + pIn++; + + *((v4s*)out) = maxs4(inp[3], com[3]); + + inA = (int8_t) bitins(*out, n_mask2, *(out + 1), mask2, off2); + inA = bitins(inA, n_mask4, *(out + 2), mask4, off4); + *((int8_t*)pIn) = bitins(inA, n_mask6, *(out + 3), mask6, off6); + pIn++; + + pCom+=4; + cnt--; + } + + int left = length & 0x3; + while (left>0u) + { + int8_t inA0 = (int8_t) bitext((unsigned int) *pIn, 2, 0); + int8_t inA1 = (int8_t) bitext((unsigned int) *pIn, 2, 2); + int8_t inA2 = (int8_t) bitext((unsigned int) *pIn, 2, 4); + int8_t inA3 = (int8_t) bitext((unsigned int) *pIn, 2, 6); + v4s inA4 = pack((int8_t) inA0, (int8_t) inA1, (int8_t) inA2, (int8_t) inA3); + int8_t inB0 = (int8_t) bitext((unsigned int) *pCom, 2, 0); + int8_t inB1 = (int8_t) bitext((unsigned int) *pCom, 2, 2); + int8_t inB2 = (int8_t) bitext((unsigned int) *pCom, 2, 4); + int8_t inB3 = (int8_t) bitext((unsigned int) *pCom, 2, 6); + v4s inB4 = pack((int8_t) inB0, (int8_t) inB1, (int8_t) inB2, (int8_t) inB3); + + *((v4s*)out) = maxs4(inA4, inB4); + + int8_t inA = (int8_t) bitins(*out, n_mask2, *(out + 1), mask2, off2); + inA = bitins(inA, n_mask4, *(out + 2), mask4, off4); + *((int8_t*)pIn) = bitins(inA, n_mask6, *(out + 3), mask6, off6); + + pIn++; + pCom++; + left--; + } +} + +static void __attribute__((noinline)) pulp_nn_avg_and_replace_u2(uint8_t * base, + uint8_t * target, + uint16_t length) +{ + int8_t mask2 = 0x0c; + int8_t n_mask2 = ~ mask2; + int8_t mask4 = 0x30; + int8_t n_mask4 = ~ mask4; + int8_t mask6 = 0xc0; + int8_t n_mask6 = ~ mask6; + int8_t off2 = 2; + int8_t off4 = 4; + int8_t off6 = 6; + + uint8_t *pIn = base; + uint8_t *pCom = target; + + while (length>0u) + { + uint8_t inA0 = (uint8_t) bitextu((unsigned int) *pIn, 2, 0); + uint8_t inA1 = (uint8_t) bitextu((unsigned int) *pIn, 2, 2); + uint8_t inA2 = (uint8_t) bitextu((unsigned int) *pIn, 2, 4); + uint8_t inA3 = (uint8_t) bitextu((unsigned int) *pIn, 2, 6); + + uint8_t inB0 = (uint8_t) bitextu((unsigned int) *pCom, 2, 0); + uint8_t inB1 = (uint8_t) bitextu((unsigned int) *pCom, 2, 2); + uint8_t inB2 = (uint8_t) bitextu((unsigned int) *pCom, 2, 4); + uint8_t inB3 = (uint8_t) bitextu((unsigned int) *pCom, 2, 6); + + inA0 = ((inA0 + inB0) >> 1); + inA1 = ((inA1 + inB1) >> 1); + inA2 = ((inA2 + inB2) >> 1); + inA3 = ((inA3 + inB3) >> 1); + + uint8_t inA = (uint8_t) bitins(inA0, n_mask2, inA1, mask2, off2); + inA = bitins(inA, n_mask4, inA2, mask4, off4); + *((uint8_t*)pIn) = bitins(inA, n_mask6, inA3, mask6, off6); + + pIn++; + pCom++; + length--; + } +} + +/* + * XpulpNN + */ + +static void __attribute__((noinline)) xpulp_nn_zero_mem_u8(uint8_t * pBuffer, unsigned int size) +{ + int lfover = size &0x3; + for (int i=0; i<(size>>2); i++) + { + *((v4u *)pBuffer) = (v4u){0,0,0,0}; + MemoryFence(); + pBuffer+=4; + } + while(lfover) + { + *pBuffer++=0; + lfover--; + } +} + +static void __attribute__((noinline)) xpulp_nn_zero_mem_u4(uint8_t * pBuffer, unsigned int size) +{ + int lfover = size &0x7; + for (int i=0; i<(size>>3); i++) + { + *((v4u *)pBuffer) = (v4u){0,0,0,0}; + MemoryFence(); + pBuffer+=4; + } + while(lfover) + { + *pBuffer++=0; + lfover-=2; + } +} + +static void __attribute__((noinline)) xpulp_nn_zero_mem_u2(uint8_t * pBuffer, unsigned int size) +{ + int lfover = size &0xf; + for (int i=0; i<(size>>4); i++) + { + *((v4u *)pBuffer) = (v4u){0,0,0,0}; + MemoryFence(); + pBuffer+=4; + } + while(lfover) + { + *pBuffer++=0; + lfover-=4; + } +} + + +static void __attribute__((noinline)) xpulp_nn_compare_and_replace_if_larger_u4(uint8_t * base, + uint8_t * target, + uint16_t length) +{ + int8_t mask = 0xf0; + int8_t n_mask = ~ mask; + int8_t off = 0x04; + + uint8_t *pIn = base; + uint8_t *pCom = target; + + int cnt = length >> 2; + + while(cnt > 0u) + { + *((uint32_t *)pIn) = max8(*((uint32_t *)pIn), *((uint32_t *)pCom)); + + pIn+=4; + pCom+=4; + + cnt--; + } + + int left = length & 0x3; + while (left>0u) + { + uint8_t inA0 = (uint8_t) bitextu((unsigned int) *pIn, 4, 0); + uint8_t inA1 = (uint8_t) bitextu((unsigned int) *pIn, 4, 4); + uint8_t inB0 = (uint8_t) bitextu((unsigned int) *pCom, 4, 0); + uint8_t inB1 = (uint8_t) bitextu((unsigned int) *pCom, 4, 4); + + if(inA0> 2; + + while (cnt > 0u) { + *((int32_t *)pIn) = maxs8(*((int32_t *)pIn), *((int32_t *)pCom)); + + pIn += 4; + pCom += 4; + + cnt--; + } + + int left = length & 0x3; + while (left > 0u) { + int8_t inA0 = (int8_t)bitext((int)*pIn, 4, 0); + int8_t inA1 = (int8_t)bitext((int)*pIn, 4, 4); + int8_t inB0 = (int8_t)bitext((int)*pCom, 4, 0); + int8_t inB1 = (int8_t)bitext((int)*pCom, 4, 4); + + if (inA0 < inB0) + inA0 = inB0; + + if (inA1 < inB1) + inA1 = inB1; + + *((int8_t *)pIn) = bitins(inA0, n_mask, inA1, mask, off); + + pIn++; + pCom++; + left--; + } +} + +static void __attribute__((noinline)) xpulp_nn_avg_and_replace_u4(uint8_t * base, + uint8_t * target, + uint16_t length) +{ + int8_t mask = 0xf0; + int8_t n_mask = ~ mask; + int8_t off = 0x04; + + uint8_t *pIn = base; + uint8_t *pCom = target; + + int cnt = length >> 2; + + while (cnt > 0u) + { + *((uint32_t *)pIn) = avg8(*((uint32_t *)pIn), *((uint32_t *)pCom)); + + pIn+=4; + pCom+=4; + cnt--; + } + + int left = length & 0x3; + + while (left>0u) + { + uint8_t inA0 = (uint8_t) bitextu((unsigned int) *pIn, 4, 0); + uint8_t inA1 = (uint8_t) bitextu((unsigned int) *pIn, 4, 4); + uint8_t inB0 = (uint8_t) bitextu((unsigned int) *pCom, 4, 0); + uint8_t inB1 = (uint8_t) bitextu((unsigned int) *pCom, 4, 4); + + inA0 = ((inA0 + inB0) >> 1); + inA1 = ((inA1 + inB1) >> 1); + + *((uint8_t*)pIn) = bitins(inA0, n_mask, inA1, mask, off); + + pIn++; + pCom++; + length--; + } +} + +static void __attribute__((noinline)) xpulp_nn_compare_and_replace_if_larger_u2(uint8_t * base, + uint8_t * target, + uint16_t length) +{ + int8_t mask2 = 0x0c; + int8_t n_mask2 = ~ mask2; + int8_t mask4 = 0x30; + int8_t n_mask4 = ~ mask4; + int8_t mask6 = 0xc0; + int8_t n_mask6 = ~ mask6; + int8_t off2 = 2; + int8_t off4 = 4; + int8_t off6 = 6; + + uint8_t *pIn = base; + uint8_t *pCom = target; + uint8_t *out; + + int cnt = length >> 2; + + while(cnt > 0u) + { + *((uint32_t *)pIn) = max16(*((uint32_t *)pIn), *((uint32_t *)pCom)); + + pIn+=4; + pCom+=4; + cnt--; + } + + int left = length & 0x3; + while (left>0u) + { + uint8_t inA0 = (uint8_t) bitextu((unsigned int) *pIn, 2, 0); + uint8_t inA1 = (uint8_t) bitextu((unsigned int) *pIn, 2, 2); + uint8_t inA2 = (uint8_t) bitextu((unsigned int) *pIn, 2, 4); + uint8_t inA3 = (uint8_t) bitextu((unsigned int) *pIn, 2, 6); + v4u inA4 = pack((uint8_t) inA0, (uint8_t) inA1, (uint8_t) inA2, (uint8_t) inA3); + uint8_t inB0 = (uint8_t) bitextu((unsigned int) *pCom, 2, 0); + uint8_t inB1 = (uint8_t) bitextu((unsigned int) *pCom, 2, 2); + uint8_t inB2 = (uint8_t) bitextu((unsigned int) *pCom, 2, 4); + uint8_t inB3 = (uint8_t) bitextu((unsigned int) *pCom, 2, 6); + v4u inB4 = pack((uint8_t) inB0, (uint8_t) inB1, (uint8_t) inB2, (uint8_t) inB3); + + *((v4u*)out) = max4(inA4, inB4); + + uint8_t inA = (uint8_t) bitins(*out, n_mask2, *(out + 1), mask2, off2); + inA = bitins(inA, n_mask4, *(out + 2), mask4, off4); + *((uint8_t*)pIn) = bitins(inA, n_mask6, *(out + 3), mask6, off6); + + pIn++; + pCom++; + left--; + } +} +static void __attribute__((noinline)) xpulp_nn_compare_and_replace_if_larger_i2(int8_t * base, + int8_t * target, + uint16_t length) +{ + int8_t mask2 = 0x0c; + int8_t n_mask2 = ~ mask2; + int8_t mask4 = 0x30; + int8_t n_mask4 = ~ mask4; + int8_t mask6 = 0xc0; + int8_t n_mask6 = ~ mask6; + int8_t off2 = 2; + int8_t off4 = 4; + int8_t off6 = 6; + + int8_t *pIn = base; + int8_t *pCom = target; + int8_t *out; + + int cnt = length >> 2; + + while(cnt > 0u) + { + *((int32_t *)pIn) = maxs16(*((int32_t *)pIn), *((int32_t *)pCom)); + + pIn+=4; + pCom+=4; + cnt--; + } + + int left = length & 0x3; + while (left>0u) + { + int8_t inA0 = (int8_t) bitext((int) *pIn, 2, 0); + int8_t inA1 = (int8_t) bitext((int) *pIn, 2, 2); + int8_t inA2 = (int8_t) bitext((int) *pIn, 2, 4); + int8_t inA3 = (int8_t) bitext((int) *pIn, 2, 6); + v4s inA4 = pack((int8_t) inA0, (int8_t) inA1, (int8_t) inA2, (int8_t) inA3); + int8_t inB0 = (int8_t) bitext((int) *pCom, 2, 0); + int8_t inB1 = (int8_t) bitext((int) *pCom, 2, 2); + int8_t inB2 = (int8_t) bitext((int) *pCom, 2, 4); + int8_t inB3 = (int8_t) bitext((int) *pCom, 2, 6); + v4s inB4 = pack((int8_t) inB0, (int8_t) inB1, (int8_t) inB2, (int8_t) inB3); + + *((v4s*)out) = maxs4(inA4, inB4); + + int8_t inA = (int8_t) bitins(*out, n_mask2, *(out + 1), mask2, off2); + inA = bitins(inA, n_mask4, *(out + 2), mask4, off4); + *((int8_t*)pIn) = bitins(inA, n_mask6, *(out + 3), mask6, off6); + + pIn++; + pCom++; + left--; + } +} + +static void __attribute__((noinline)) xpulp_nn_avg_and_replace_u2(uint8_t * base, + uint8_t * target, + uint16_t length) +{ + int8_t mask2 = 0x0c; + int8_t n_mask2 = ~ mask2; + int8_t mask4 = 0x30; + int8_t n_mask4 = ~ mask4; + int8_t mask6 = 0xc0; + int8_t n_mask6 = ~ mask6; + int8_t off2 = 2; + int8_t off4 = 4; + int8_t off6 = 6; + + uint8_t *pIn = base; + uint8_t *pCom = target; + uint8_t *out; + + int cnt = length >> 2; + + while(cnt > 0u) + { + *((uint32_t *)pIn) = avg16(*((uint32_t *)pIn), *((uint32_t *)pCom)); + + pIn+=4; + pCom+=4; + cnt--; + } + + int left = length & 0x3; + while (left>0u) + { + uint8_t inA0 = (uint8_t) bitextu((unsigned int) *pIn, 2, 0); + uint8_t inA1 = (uint8_t) bitextu((unsigned int) *pIn, 2, 2); + uint8_t inA2 = (uint8_t) bitextu((unsigned int) *pIn, 2, 4); + uint8_t inA3 = (uint8_t) bitextu((unsigned int) *pIn, 2, 6); + v4u inA4 = pack((uint8_t) inA0, (uint8_t) inA1, (uint8_t) inA2, (uint8_t) inA3); + uint8_t inB0 = (uint8_t) bitextu((unsigned int) *pCom, 2, 0); + uint8_t inB1 = (uint8_t) bitextu((unsigned int) *pCom, 2, 2); + uint8_t inB2 = (uint8_t) bitextu((unsigned int) *pCom, 2, 4); + uint8_t inB3 = (uint8_t) bitextu((unsigned int) *pCom, 2, 6); + v4u inB4 = pack((uint8_t) inB0, (uint8_t) inB1, (uint8_t) inB2, (uint8_t) inB3); + + *((v4u*)out) = avg4(inA4, inB4); + + uint8_t inA = (uint8_t) bitins(*out, n_mask2, *(out + 1), mask2, off2); + inA = bitins(inA, n_mask4, *(out + 2), mask4, off4); + *((uint8_t*)pIn) = bitins(inA, n_mask6, *(out + 3), mask6, off6); + + pIn++; + pCom++; + left--; + } +} + +#endif diff --git a/rt_nn_tests/xpnn_conv/pulp_nn_utils_xpnn.h b/rt_nn_tests/xpnn_conv/pulp_nn_utils_xpnn.h new file mode 100644 index 0000000..0c783ae --- /dev/null +++ b/rt_nn_tests/xpnn_conv/pulp_nn_utils_xpnn.h @@ -0,0 +1,1937 @@ +/* + * pulp_nn_utils.h + * Nazareno Bruschi + * Alessandro Nadalini + * Georg Rutishauser + * + * Copyright (C) 2019-2020 ETH Zurich & University of Bologna + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef __PULPNN_UTILS__ +#define __PULPNN_UTILS__ + +#include "pmsis.h" +#ifdef GAP_SDK +#include "pulp.h" +#endif + +#define bitext(x,size,off) __builtin_pulp_bextract(x,size,off) +#define bitextu(x,size,off) __builtin_pulp_bextractu(x,size,off) +#define bitins(dst,not_mask_imm,src,mask_imm,off) __builtin_pulp_binsert(dst,not_mask_imm,src,mask_imm,off) +#define pack(x,y,z,t) __builtin_pulp_pack4(x,y,z,t) +#define max4(a,b) __builtin_pulp_maxu4(a,b) +#define maxs4(a, b) __builtin_pulp_max4(a, b) +#define max8(a, b) __builtin_pulp_maxu8(a, b) +#define maxs8(a, b) __builtin_pulp_max8(a, b) +#define max16(a, b) __builtin_pulp_maxu16(a, b) +#define maxs16(a, b) __builtin_pulp_max16(a, b) +#define max32(a,b) __builtin_pulp_maxusi(a,b) +#define maxs32(a,b) __builtin_pulp_maxsi(a,b) +#define min32(a,b) __builtin_pulp_minusi(a,b) +#define mins32(a,b) __builtin_pulp_minsi(a,b) +#define min4(a, b) __builtin_pulp_minu4(a, b) +#define mins4(a, b) __builtin_pulp_min4(a, b) +#define min8(a, b) __builtin_pulp_minu8(a, b) +#define mins8(a, b) __builtin_pulp_min8(a, b) +#define min16(a, b) __builtin_pulp_minu16(a, b) +#define mins16(a, b) __builtin_pulp_min16(a, b) +#define avg4(a,b) __builtin_pulp_avgu4(a,b) +#define avg8(a,b) __builtin_pulp_avgu8(a,b) +#define avg16(a,b) __builtin_pulp_avgu16(a,b) +#define log2(x) __builtin_pulp_fl1(x) +#define min(a,b) ((a)<(b)?(a):(b)) +#define SumDotp4(a, b, c) __builtin_pulp_sdotusp4(a, b, c) +#define SumDotp8(a, b, c) __builtin_pulp_sdotusp8(a, b, c) +#define SumDotp16(a, b, c) __builtin_pulp_sdotusp16(a, b, c) +#define SumDotps4(a, b, c) __builtin_pulp_sdotsp4(a, b, c) +#define SumDotps8(a, b, c) __builtin_pulp_sdotsp8(a, b, c) +#define SumDotps16(a, b, c) __builtin_pulp_sdotsp16(a, b, c) +#define clip4(x) __builtin_pulp_clipu_r(x, 15) +#define clip2(x) __builtin_pulp_clipu_r(x, 3) +#define clip8(x) __builtin_pulp_clipu_r(x, 255) + +#define clips4(x) __builtin_pulp_clip_r(x, 7) +#define clips2(x) __builtin_pulp_clip_r(x, 1) +#define clips8(x) __builtin_pulp_clip_r(x, 127) +#define MacLoadInit(a_update, b_update, a_reg, b_reg, ptr) __builtin_pulp_mlinitspr_v3(a_update, b_update, a_reg, b_reg, ptr) +#define MacLoadUpdate(ptr) __builtin_pulp_mlupdatespr_v3(ptr) +#define MacLoadAssign(ptr) __builtin_pulp_mlassignspr_v3(ptr) +#define MacLoad4(a_update, b_update, a_reg, b_reg, ptr, sum) __builtin_pulp_mlsdotsup4_v3(a_update, b_update, a_reg, b_reg, ptr, sum) +#define MacLoad8(a_update, b_update, a_reg, b_reg, ptr, sum) __builtin_pulp_mlsdotsup8_v3(a_update, b_update, a_reg, b_reg, ptr, sum) +#define MacLoad16(a_update, b_update, a_reg, b_reg, ptr, sum) __builtin_pulp_mlsdotsup16_v3(a_update, b_update, a_reg, b_reg, ptr, sum) +#define MacLoads4(a_update, b_update, a_reg, b_reg, ptr, sum) __builtin_pulp_mlsdotsp4_v3(a_update, b_update, a_reg, b_reg, ptr, sum) +#define MacLoads8(a_update, b_update, a_reg, b_reg, ptr, sum) __builtin_pulp_mlsdotsp8_v3(a_update, b_update, a_reg, b_reg, ptr, sum) +#define MacLoads16(a_update, b_update, a_reg, b_reg, ptr, sum) __builtin_pulp_mlsdotsp16_v3(a_update, b_update, a_reg, b_reg, ptr, sum) + +#define PACK_INT8_SIZE(x) (x) +#define PACK_INT4_SIZE(x) ((x) >> 1) +#define PACK_INT2_SIZE(x) ((x) >> 2) + +#define MemoryFence() asm volatile("":::"memory") + +#define LEGACY_MODE(x) asm volatile ("csrwi 0x010," x) +#define IVEC_FMT(x) asm volatile ("csrwi 0x00D," x) +#define MIXED_SKIP(x) asm volatile ("csrwi 0x00F," x) +#define A_ADDRESS(x) asm volatile ("csrw 0x100, %0" :: "r" (x)) +#define W_ADDRESS(x) asm volatile ("csrw 0x101, %0" :: "r" (x)) +#define A_STRIDE(x) asm volatile ("csrw 0x102, %0":: "r" (x)) +#define W_STRIDE(x) asm volatile ("csrw 0x103, %0":: "r" (x)) +#define A_ROLLBACK(x) asm volatile ("csrw 0x104, %0":: "r" (x)) +#define W_ROLLBACK(x) asm volatile ("csrw 0x105, %0":: "r" (x)) +#define A_SKIP(x) asm volatile ("csrwi 0x106," x) +#define W_SKIP(x) asm volatile ("csrwi 0x107," x) + +static uint8_t __attribute__((noinline)) pulp_nn_quant_u2 ( + int32_t phi, + int16_t m, + int8_t d + ) { + int32_t x = (m * phi) >> d; + uint8_t res = clip2(x); + return res; +} +static uint8_t __attribute__((noinline)) pulp_nn_bn_quant_u2 ( + int32_t phi, + int32_t k, + int32_t lambda, + int8_t d + ) { + int32_t integer_image_phi = (k * phi) + lambda; + int32_t x = (integer_image_phi) >> d; + uint8_t res = clip2(x); + return res; +} +static uint8_t __attribute__((noinline)) pulp_nn_add_quant_u2 ( + uint8_t pix1, + uint8_t pix2, + int16_t m1, + int16_t m2, + int8_t d + ) { + uint32_t integer_image = pix1*m1 + pix2*m2; + uint32_t x = (integer_image) >> d; + uint8_t res = clip2(x); + return res; +} + +static int8_t __attribute__((noinline)) pulp_nn_quant_i2 ( + int32_t phi, + int16_t m, + int8_t d + ) { + int32_t x = (m * phi) >> d; + int8_t res = clips2(x); + return res; +} +static int8_t __attribute__((noinline)) pulp_nn_bn_quant_i2 ( + int32_t phi, + int32_t k, + int32_t lambda, + int8_t d + ) { + int32_t integer_image_phi = (k * phi) + lambda; + int32_t x = (integer_image_phi) >> d; + int8_t res = clips2(x); + return res; +} +static int8_t __attribute__((noinline)) pulp_nn_add_quant_i2 ( + int8_t pix1, + int8_t pix2, + int16_t m1, + int16_t m2, + int8_t d + ) { + int32_t integer_image = pix1*m1 + pix2*m2; + int32_t x = (integer_image) >> d; + int8_t res = clips2(x); + return res; +} + +static uint8_t __attribute__((noinline)) pulp_nn_quant_u4 ( + int32_t phi, + int16_t m, + int8_t d + ) { + int32_t x = (m * phi) >> d; + uint8_t res = clip4(x); + return res; +} +static uint8_t __attribute__((noinline)) pulp_nn_bn_quant_u4 ( + int32_t phi, + int32_t k, + int32_t lambda, + int8_t d + ) { + int32_t integer_image_phi = (k * phi) + lambda; + int32_t x = (integer_image_phi) >> d; + uint8_t res = clip4(x); + return res; +} +static uint8_t __attribute__((noinline)) pulp_nn_add_quant_u4 ( + uint8_t pix1, + uint8_t pix2, + int16_t m1, + int16_t m2, + int8_t d + ) { + uint32_t integer_image = pix1*m1 + pix2*m2; + uint32_t x = (integer_image) >> d; + uint8_t res = clip4(x); + return res; +} + +static int8_t __attribute__((noinline)) pulp_nn_quant_i4 ( + int32_t phi, + int16_t m, + int8_t d + ) { + int32_t x = (m * phi) >> d; + int8_t res = clips4(x); + return res; +} +static int8_t __attribute__((noinline)) pulp_nn_bn_quant_i4 ( + int32_t phi, + int32_t k, + int32_t lambda, + int8_t d + ) { + int32_t integer_image_phi = (k * phi) + lambda; + int32_t x = (integer_image_phi) >> d; + int8_t res = clips4(x); + return res; +} +static int8_t __attribute__((noinline)) pulp_nn_add_quant_i4 ( + int8_t pix1, + int8_t pix2, + int16_t m1, + int16_t m2, + int8_t d + ) { + int32_t integer_image = pix1*m1 + pix2*m2; + int32_t x = (integer_image) >> d; + int8_t res = clips4(x); + return res; +} + +static uint8_t __attribute__((noinline)) pulp_nn_quant_u8 ( + int32_t phi, + int16_t m, + int8_t d + ) { + int32_t x = (m * phi) >> d; + uint8_t res = clip8(x); + return res; +} +static uint8_t __attribute__((noinline)) pulp_nn_bn_quant_u8 ( + int32_t phi, + int32_t k, + int32_t lambda, + int8_t d + ) { + int32_t integer_image_phi = (k * phi) + lambda; + int32_t x = (integer_image_phi) >> d; + uint8_t res = clip8(x); + return res; +} +static uint8_t __attribute__((noinline)) pulp_nn_add_quant_u8 ( + uint8_t pix1, + uint8_t pix2, + int16_t m1, + int16_t m2, + int8_t d + ) { + uint32_t integer_image = pix1*m1 + pix2*m2; + uint32_t x = (integer_image) >> d; + uint8_t res = clip8(x); + return res; +} + +static int8_t __attribute__((noinline)) pulp_nn_quant_i8 ( + int32_t phi, + int16_t m, + int8_t d + ) { + int32_t x = (m * phi) >> d; + int8_t res = clips8(x); + return res; +} +static int8_t __attribute__((noinline)) pulp_nn_bn_quant_i8 ( + int32_t phi, + int32_t k, + int32_t lambda, + int8_t d + ) { + int32_t integer_image_phi = (k * phi) + lambda; + int32_t x = (integer_image_phi) >> d; + int8_t res = clips8(x); + return res; +} +static int8_t __attribute__((noinline)) pulp_nn_add_quant_i8 ( + int8_t pix1, + int8_t pix2, + int16_t m1, + int16_t m2, + int8_t d + ) { + int32_t integer_image = pix1*m1 + pix2*m2; + int32_t x = (integer_image) >> d; + int8_t res = clips8(x); + return res; +} + + +static uint8_t __attribute__((noinline)) pulp_nn_u4_quant(int input, int16_t * pThr) +{ + if(input <= pThr[7] ) + { + if( input <= pThr[3]) + { + if( input <= pThr[1]) + { + if( input <= pThr[0]) + return 0; + else + return 1; + } + else + { + if( input <= pThr[2]) + return 2; + else + return 3; + } + } + else + { + if( input <= pThr[5]) + { + if( input <= pThr[4]) + return 4; + else + return 5; + } + else + { + if( input <= pThr[6]) + return 6; + else + return 7; + } + } + } + else + { + if( input <= pThr[11]) + { + if( input <= pThr[9]) + { + if( input <= pThr[8]) + return 8; + else + return 9; + } + else + { + if( input <= pThr[10]) + return 10; + else + return 11; + } + } + else + { + if( input <= pThr[13]) + { + if( input <= pThr[12]) + return 12; + else + return 13; + } + else + { + if( input <= pThr[14]) + return 14; + else + return 15; + } + } + } +} + +static uint8_t __attribute__((noinline)) pulp_nn_u2_quant(int input, int16_t * pThr) +{ + if( input <= pThr[1]) + { + if( input <= pThr[0]) + { + return 0; + } + else + { + return 1; + } + } + else + { + if( input <= pThr[2]) + { + return 2; + } + else + { + return 3; + } + } +} + +/* + * Common + */ + + +static v4s __attribute__((noinline)) pulp_nn_i4_to_i8_r( int8_t *pSrc) +{ + v4s Src = *((v4s*) pSrc); + int8_t bext1, bext2, bext3, bext4; + + bext1 = (int8_t) bitext((int) Src, 4, 0); + bext2 = (int8_t) bitext((int) Src, 4, 4); + bext3 = (int8_t) bitext((int) Src, 4, 8); + bext4 = (int8_t) bitext((int) Src, 4, 12); + v4s res = pack((int8_t) bext1, (int8_t) bext2, (int8_t) bext3, (int8_t) bext4); + + return res; +} + +static v4u __attribute__((noinline)) pulp_nn_u4_to_u8_r(uint8_t *pSrc) +{ + v4u Src = *((v4u*) pSrc); + uint8_t bext1, bext2, bext3, bext4; + + bext1 = (uint8_t) bitextu((unsigned int) Src, 4, 0); + bext2 = (uint8_t) bitextu((unsigned int) Src, 4, 4); + bext3 = (uint8_t) bitextu((unsigned int) Src, 4, 8); + bext4 = (uint8_t) bitextu((unsigned int) Src, 4, 12); + v4u res = pack((uint8_t) bext1, (uint8_t) bext2, (uint8_t) bext3, (uint8_t) bext4); + + return res; +} + +static v4s __attribute__((noinline)) pulp_nn_i2_to_i8_r( int8_t *pSrc) +{ + v4s Src = *((v4s*) pSrc); + int8_t bext1, bext2, bext3, bext4; + + bext1 = (int8_t) bitext((int) Src, 2, 0); + bext2 = (int8_t) bitext((int) Src, 2, 2); + bext3 = (int8_t) bitext((int) Src, 2, 4); + bext4 = (int8_t) bitext((int) Src, 2, 6); + v4s res = pack((int8_t) bext1, (int8_t) bext2, (int8_t) bext3, (int8_t) bext4); + + return res; +} + +static v4u __attribute__((noinline)) pulp_nn_u2_to_u8_r(uint8_t *pSrc) +{ + v4u Src = *((v4u*) pSrc); + uint8_t bext1, bext2, bext3, bext4; + + bext1 = (uint8_t) bitextu((unsigned int) Src, 2, 0); + bext2 = (uint8_t) bitextu((unsigned int) Src, 2, 2); + bext3 = (uint8_t) bitextu((unsigned int) Src, 2, 4); + bext4 = (uint8_t) bitextu((unsigned int) Src, 2, 6); + v4u res = pack((uint8_t) bext1, (uint8_t) bext2, (uint8_t) bext3, (uint8_t) bext4); + + return res; +} + +static v4s __attribute__((noinline)) pulp_nn_i2_to_i4_r(int8_t *pSrc) +{ + int8_t mask = 0xf0; + int8_t n_mask = ~ mask; + int8_t off = 0x04; + + v4s Src = *((v4s*) pSrc); + int8_t bext1, bext2, bext3, bext4; + int8_t out1, out2, out3, out4; + + bext1 = (int8_t) bitextu((int) Src, 2, 0); + bext2 = (int8_t) bitextu((int) Src, 2, 2); + bext3 = (int8_t) bitextu((int) Src, 2, 4); + bext4 = (int8_t) bitextu((int) Src, 2, 6); + + out1 = bitins(bext1, n_mask, bext2, mask, off); + out2 = bitins(bext3, n_mask, bext4, mask, off); + + bext1 = (int8_t) bitextu((int) Src, 2, 8); + bext2 = (int8_t) bitextu((int) Src, 2, 10); + bext3 = (int8_t) bitextu((int) Src, 2, 12); + bext4 = (int8_t) bitextu((int) Src, 2, 14); + + out3 = bitins(bext1, n_mask, bext2, mask, off); + out4 = bitins(bext3, n_mask, bext4, mask, off); + + v4s res = pack((int8_t) out1, (int8_t) out2, (int8_t) out3, (int8_t) out4); + + return res; +} + +static v4u __attribute__((noinline)) pulp_nn_u2_to_u4_r(uint8_t *pSrc) +{ + int8_t mask = 0xf0; + int8_t n_mask = ~ mask; + int8_t off = 0x04; + + v4u Src = *((v4u*) pSrc); + uint8_t bext1, bext2, bext3, bext4; + uint8_t out1, out2, out3, out4; + + bext1 = (uint8_t) bitextu((unsigned int) Src, 2, 0); + bext2 = (uint8_t) bitextu((unsigned int) Src, 2, 2); + bext3 = (uint8_t) bitextu((unsigned int) Src, 2, 4); + bext4 = (uint8_t) bitextu((unsigned int) Src, 2, 6); + + out1 = bitins(bext1, n_mask, bext2, mask, off); + out2 = bitins(bext3, n_mask, bext4, mask, off); + + bext1 = (uint8_t) bitextu((unsigned int) Src, 2, 8); + bext2 = (uint8_t) bitextu((unsigned int) Src, 2, 10); + bext3 = (uint8_t) bitextu((unsigned int) Src, 2, 12); + bext4 = (uint8_t) bitextu((unsigned int) Src, 2, 14); + + out3 = bitins(bext1, n_mask, bext2, mask, off); + out4 = bitins(bext3, n_mask, bext4, mask, off); + + v4u res = pack((uint8_t) out1, (uint8_t) out2, (uint8_t) out3, (uint8_t) out4); + + return res; +} + +static int8_t *__attribute__((always_inline)) pulp_nn_i4_to_i8( int8_t *pSrc, int8_t *pDst) +{ + v4s Src = *((v4s*) pSrc); + int8_t bext1, bext2, bext3, bext4; + + pSrc+=4; + + bext1 = (int8_t) bitext((int) Src, 4, 0); + bext2 = (int8_t) bitext((int) Src, 4, 4); + bext3 = (int8_t) bitext((int) Src, 4, 8); + bext4 = (int8_t) bitext((int) Src, 4, 12); + *((v4s*)pDst) = pack((int8_t) bext1, (int8_t) bext2, (int8_t) bext3, (int8_t) bext4); + MemoryFence(); + pDst+=4; + bext1 = (int8_t) bitext((int) Src, 4, 16); + bext2 = (int8_t) bitext((int) Src, 4, 20); + bext3 = (int8_t) bitext((int) Src, 4, 24); + bext4 = (int8_t) bitext((int) Src, 4, 28); + *((v4s*)pDst) = pack((int8_t) bext1, (int8_t) bext2, (int8_t) bext3, (int8_t) bext4); + + return pSrc; +} + +static uint8_t *__attribute__((always_inline)) pulp_nn_u4_to_u8(uint8_t *pSrc, uint8_t *pDst) +{ + v4u Src = *((v4u*) pSrc); + uint8_t bext1, bext2, bext3, bext4; + + pSrc+=4; + + bext1 = (uint8_t) bitextu((unsigned int) Src, 4, 0); + bext2 = (uint8_t) bitextu((unsigned int) Src, 4, 4); + bext3 = (uint8_t) bitextu((unsigned int) Src, 4, 8); + bext4 = (uint8_t) bitextu((unsigned int) Src, 4, 12); + *((v4u*)pDst) = pack((uint8_t) bext1, (uint8_t) bext2, (uint8_t) bext3, (uint8_t) bext4); + MemoryFence(); + pDst+=4; + bext1 = (uint8_t) bitextu((unsigned int) Src, 4, 16); + bext2 = (uint8_t) bitextu((unsigned int) Src, 4, 20); + bext3 = (uint8_t) bitextu((unsigned int) Src, 4, 24); + bext4 = (uint8_t) bitextu((unsigned int) Src, 4, 28); + *((v4u*)pDst) = pack((uint8_t) bext1, (uint8_t) bext2, (uint8_t) bext3, (uint8_t) bext4); + + return pSrc; +} + +static int8_t *__attribute__((always_inline)) pulp_nn_i2_to_i8( int8_t * pSrc, int8_t * pDst) +{ + v4s Src = *((v4s*) pSrc); + int8_t bext1, bext2, bext3, bext4; + + pSrc+=4; + + bext1 = (int8_t) bitext((int) Src, 2, 0); + bext2 = (int8_t) bitext((int) Src, 2, 2); + bext3 = (int8_t) bitext((int) Src, 2, 4); + bext4 = (int8_t) bitext((int) Src, 2, 6); + *((v4s*)pDst) = pack((int8_t) bext1, (int8_t) bext2, (int8_t) bext3, (int8_t) bext4); + MemoryFence(); + pDst+=4; + bext1 = (int8_t) bitext((int) Src, 2, 8); + bext2 = (int8_t) bitext((int) Src, 2, 10); + bext3 = (int8_t) bitext((int) Src, 2, 12); + bext4 = (int8_t) bitext((int) Src, 2, 14); + *((v4s*)pDst) = pack((int8_t) bext1, (int8_t) bext2, (int8_t) bext3, (int8_t) bext4); + MemoryFence(); + pDst+=4; + bext1 = (int8_t) bitext((int) Src, 2, 16); + bext2 = (int8_t) bitext((int) Src, 2, 18); + bext3 = (int8_t) bitext((int) Src, 2, 20); + bext4 = (int8_t) bitext((int) Src, 2, 22); + *((v4s*)pDst) = pack((int8_t) bext1, (int8_t) bext2, (int8_t) bext3, (int8_t) bext4); + MemoryFence(); + pDst+=4; + bext1 = (int8_t) bitext((int) Src, 2, 24); + bext2 = (int8_t) bitext((int) Src, 2, 26); + bext3 = (int8_t) bitext((int) Src, 2, 28); + bext4 = (int8_t) bitext((int) Src, 2, 30); + *((v4s*)pDst) = pack((int8_t) bext1, (int8_t) bext2, (int8_t) bext3, (int8_t) bext4); + + return pSrc; +} + +static uint8_t *__attribute__((always_inline)) pulp_nn_u2_to_u8(uint8_t * pSrc, uint8_t * pDst) +{ + v4u Src = *((v4u*) pSrc); + uint8_t bext1, bext2, bext3, bext4; + + pSrc+=4; + + bext1 = (uint8_t) bitextu((unsigned int) Src, 2, 0); + bext2 = (uint8_t) bitextu((unsigned int) Src, 2, 2); + bext3 = (uint8_t) bitextu((unsigned int) Src, 2, 4); + bext4 = (uint8_t) bitextu((unsigned int) Src, 2, 6); + *((v4u*)pDst) = pack((uint8_t) bext1, (uint8_t) bext2, (uint8_t) bext3, (uint8_t) bext4); + MemoryFence(); + pDst+=4; + bext1 = (uint8_t) bitextu((unsigned int) Src, 2, 8); + bext2 = (uint8_t) bitextu((unsigned int) Src, 2, 10); + bext3 = (uint8_t) bitextu((unsigned int) Src, 2, 12); + bext4 = (uint8_t) bitextu((unsigned int) Src, 2, 14); + *((v4u*)pDst) = pack((uint8_t) bext1, (uint8_t) bext2, (uint8_t) bext3, (uint8_t) bext4); + MemoryFence(); + pDst+=4; + bext1 = (uint8_t) bitextu((unsigned int) Src, 2, 16); + bext2 = (uint8_t) bitextu((unsigned int) Src, 2, 18); + bext3 = (uint8_t) bitextu((unsigned int) Src, 2, 20); + bext4 = (uint8_t) bitextu((unsigned int) Src, 2, 22); + *((v4u*)pDst) = pack((uint8_t) bext1, (uint8_t) bext2, (uint8_t) bext3, (uint8_t) bext4); + MemoryFence(); + pDst+=4; + bext1 = (uint8_t) bitextu((unsigned int) Src, 2, 24); + bext2 = (uint8_t) bitextu((unsigned int) Src, 2, 26); + bext3 = (uint8_t) bitextu((unsigned int) Src, 2, 28); + bext4 = (uint8_t) bitextu((unsigned int) Src, 2, 30); + *((v4u*)pDst) = pack((uint8_t) bext1, (uint8_t) bext2, (uint8_t) bext3, (uint8_t) bext4); + + return pSrc; +} + +static int8_t *__attribute__((always_inline)) pulp_nn_i2_to_i4( int8_t * pSrc, int8_t * pDst) +{ + int8_t mask = 0xf0; + int8_t n_mask = ~ mask; + int8_t off = 0x04; + + v4s Src = *((v4s*) pSrc); + int8_t bext1, bext2, bext3, bext4; + int8_t out1, out2, out3, out4; + + pSrc+=4; + + bext1 = (int8_t) bitext((int) Src, 2, 0); + bext2 = (int8_t) bitext((int) Src, 2, 2); + bext3 = (int8_t) bitext((int) Src, 2, 4); + bext4 = (int8_t) bitext((int) Src, 2, 6); + + out1 = bitins(bext1, n_mask, bext2, mask, off); + out2 = bitins(bext3, n_mask, bext4, mask, off); + MemoryFence(); + + bext1 = (int8_t) bitext((int) Src, 2, 8); + bext2 = (int8_t) bitext((int) Src, 2, 10); + bext3 = (int8_t) bitext((int) Src, 2, 12); + bext4 = (int8_t) bitext((int) Src, 2, 14); + + out3 = bitins(bext1, n_mask, bext2, mask, off); + out4 = bitins(bext3, n_mask, bext4, mask, off); + + *((v4s*)pDst) = pack((int8_t) out1, (int8_t) out2, (int8_t) out3, (int8_t) out4); + MemoryFence(); + + pDst+=4; + bext1 = (int8_t) bitext((int) Src, 2, 16); + bext2 = (int8_t) bitext((int) Src, 2, 18); + bext3 = (int8_t) bitext((int) Src, 2, 20); + bext4 = (int8_t) bitext((int) Src, 2, 22); + + out1 = bitins(bext1, n_mask, bext2, mask, off); + out2 = bitins(bext3, n_mask, bext4, mask, off); + MemoryFence(); + + bext1 = (int8_t) bitext((int) Src, 2, 24); + bext2 = (int8_t) bitext((int) Src, 2, 26); + bext3 = (int8_t) bitext((int) Src, 2, 28); + bext4 = (int8_t) bitext((int) Src, 2, 30); + + out3 = bitins(bext1, n_mask, bext2, mask, off); + out4 = bitins(bext3, n_mask, bext4, mask, off); + + *((v4s*)pDst) = pack((int8_t) out1, (int8_t) out2, (int8_t) out3, (int8_t) out4); + + return pSrc; +} + +static uint8_t *__attribute__((always_inline)) pulp_nn_u2_to_u4( uint8_t * pSrc, uint8_t * pDst) +{ + int8_t mask = 0xf0; + int8_t n_mask = ~ mask; + int8_t off = 0x04; + + v4u Src = *((v4u*) pSrc); + uint8_t bext1, bext2, bext3, bext4; + uint8_t out1, out2, out3, out4; + + pSrc+=4; + + bext1 = (uint8_t) bitextu((unsigned int) Src, 2, 0); + bext2 = (uint8_t) bitextu((unsigned int) Src, 2, 2); + bext3 = (uint8_t) bitextu((unsigned int) Src, 2, 4); + bext4 = (uint8_t) bitextu((unsigned int) Src, 2, 6); + + out1 = bitins(bext1, n_mask, bext2, mask, off); + out2 = bitins(bext3, n_mask, bext4, mask, off); + MemoryFence(); + + bext1 = (uint8_t) bitextu((unsigned int) Src, 2, 8); + bext2 = (uint8_t) bitextu((unsigned int) Src, 2, 10); + bext3 = (uint8_t) bitextu((unsigned int) Src, 2, 12); + bext4 = (uint8_t) bitextu((unsigned int) Src, 2, 14); + + out3 = bitins(bext1, n_mask, bext2, mask, off); + out4 = bitins(bext3, n_mask, bext4, mask, off); + + *((v4u*)pDst) = pack((uint8_t) out1, (uint8_t) out2, (uint8_t) out3, (uint8_t) out4); + MemoryFence(); + + pDst+=4; + bext1 = (uint8_t) bitextu((unsigned int) Src, 2, 16); + bext2 = (uint8_t) bitextu((unsigned int) Src, 2, 18); + bext3 = (uint8_t) bitextu((unsigned int) Src, 2, 20); + bext4 = (uint8_t) bitextu((unsigned int) Src, 2, 22); + + out1 = bitins(bext1, n_mask, bext2, mask, off); + out2 = bitins(bext3, n_mask, bext4, mask, off); + MemoryFence(); + + bext1 = (uint8_t) bitextu((unsigned int) Src, 2, 24); + bext2 = (uint8_t) bitextu((unsigned int) Src, 2, 26); + bext3 = (uint8_t) bitextu((unsigned int) Src, 2, 28); + bext4 = (uint8_t) bitextu((unsigned int) Src, 2, 30); + + out3 = bitins(bext1, n_mask, bext2, mask, off); + out4 = bitins(bext3, n_mask, bext4, mask, off); + + *((v4u*)pDst) = pack((uint8_t) out1, (uint8_t) out2, (uint8_t) out3, (uint8_t) out4); + + return pSrc; +} + +/* + * XpulpV2 + */ + +static void __attribute__((noinline)) pulp_zero_mem(uint8_t * pBuffer, unsigned int size) +{ + int lfover = size &0x3; + for (int i=0; i<(size>>2); i++) + { + *((v4u *)pBuffer) = (v4u){0,0,0,0}; + MemoryFence(); + pBuffer+=4; + } + while(lfover) + { + *pBuffer++=0; + lfover--; + } +} + +static void __attribute__((noinline)) pulp_nn_im2col_u2_to_u8(uint8_t * pInput, uint8_t * pOutput, unsigned int blockSize) +{ + unsigned int blkCnt = blockSize >> 4u; + int lfover = blockSize & 0x0f; + for (int i = 0; i> 4u; + int lfover = blockSize & 0x0f; + for (int i = 0; i> 3u; + int lfover = blockSize & 0x07; + for (int i = 0; i> 3u; + int lfover = blockSize & 0x07; + for (int i = 0; i> 2u; + int lfover = blockSize & 0x03; + for (int i = 0; i> 2u; + int lfover = blockSize & 0x03; + for (int i = 0; i> 4u; + int lfover = blockSize & 0x0f; + for (int i = 0; i> 4u; + int lfover = blockSize & 0x0f; + for (int i = 0; i> 4u; + int lfover = blockSize & 0x0f; + for (int i = 0; i> 4u; + int lfover = blockSize & 0x0f; + for (int i = 0; i> 4u; + int lfover = blockSize & 0x0f; + for (int i = 0; i> 4u; + int lfover = blockSize & 0x0f; + for (int i = 0; i> 3u; + int lfover = blockSize & 0x07; + for (int i = 0; i> 3u; + int lfover = blockSize & 0x07; + for (int i = 0; i> 3u; + int lfover = blockSize & 0x07; + for (int i = 0; i> 3u; + int lfover = blockSize & 0x07; + for (int i = 0; i> 2u; + int lfover = blockSize & 0x03; + for (int i = 0; i> 2u; + int lfover = blockSize & 0x03; + for (int i = 0; i> 2; + + while(cnt > 0u) + { + inp = *((v4u*)pIn); + com = *((v4u*)pCom); + + *((v4u*)pIn) = max4(inp, com); + + pCom+=4; + pIn+=4; + cnt--; + } + + int left = length & 0x3; + while (left>0u) + { + if(*pIn<*pCom) + *pIn=*pCom; + + pIn++; + pCom++; + left--; + } +} + +static void __attribute__((noinline)) pulp_nn_compare_and_replace_if_larger_i8( + int8_t * base, int8_t * target, uint16_t length) { + int8_t *pIn = base; + int8_t *pCom = target; + v4s inp; + v4s com; + int cnt = length >> 2; + + while (cnt > 0u) { + inp = *((v4s *)pIn); + com = *((v4s *)pCom); + + *((v4s *)pIn) = maxs4(inp, com); + + pCom += 4; + pIn += 4; + cnt--; + } + + int left = length & 0x3; + while (left > 0u) { + if (*pIn < *pCom) + *pIn = *pCom; + + pIn++; + pCom++; + left--; + } +} + +static void __attribute__((noinline)) pulp_nn_avg_and_replace_u8(uint8_t * base, + uint8_t * target, + uint16_t length) +{ + uint8_t *pIn = base; + uint8_t *pCom = target; + + while (length>0u) + { + *pIn = ((*pIn + *pCom) >> 1); + + pIn++; + pCom++; + length--; + } +} + +static void __attribute__((noinline)) pulp_nn_compare_and_replace_if_larger_u4(uint8_t * base, + uint8_t * target, + uint16_t length) +{ + int8_t mask = 0xf0; + int8_t n_mask = ~ mask; + int8_t off = 0x04; + + uint8_t *pIn = base; + uint8_t *pCom = target; + v4u inp[2]; + v4u com[2]; + uint8_t *out; + int cnt = length >> 2; + + while(cnt > 0u) + { + pulp_nn_u4_to_u8(pIn, (uint8_t *)inp); + pulp_nn_u4_to_u8(pCom, (uint8_t *)com); + + *((v4u *)out) = max4(inp[0], com[0]); + + *((uint8_t*)pIn) = bitins(*out, n_mask, *(out + 1), mask, off); + pIn++; + *((uint8_t*)pIn) = bitins(*(out + 2), n_mask, *(out + 3), mask, off); + pIn++; + + *((v4u *)out) = max4(inp[1], com[1]); + + *((uint8_t*)pIn) = bitins(*out, n_mask, *(out + 1), mask, off); + pIn++; + *((uint8_t*)pIn) = bitins(*(out + 2), n_mask, *(out + 3), mask, off); + pIn++; + + pCom+=4; + cnt--; + } + + int left = length & 0x3; + while (left>0u) + { + uint8_t inA0 = (uint8_t) bitextu((unsigned int) *pIn, 4, 0); + uint8_t inA1 = (uint8_t) bitextu((unsigned int) *pIn, 4, 4); + uint8_t inB0 = (uint8_t) bitextu((unsigned int) *pCom, 4, 0); + uint8_t inB1 = (uint8_t) bitextu((unsigned int) *pCom, 4, 4); + + if(inA0> 2; + + while(cnt > 0u) + { + pulp_nn_i4_to_i8(pIn, (int8_t *)inp); + pulp_nn_i4_to_i8(pCom, (int8_t *)com); + + *((v4s *)out) = maxs4(inp[0], com[0]); + + *((int8_t*)pIn) = bitins(*out, n_mask, *(out + 1), mask, off); + pIn++; + *((int8_t*)pIn) = bitins(*(out + 2), n_mask, *(out + 3), mask, off); + pIn++; + + *((v4s *)out) = maxs4(inp[1], com[1]); + + *((int8_t*)pIn) = bitins(*out, n_mask, *(out + 1), mask, off); + pIn++; + *((int8_t*)pIn) = bitins(*(out + 2), n_mask, *(out + 3), mask, off); + pIn++; + + pCom+=4; + cnt--; + } + + int left = length & 0x3; + while (left>0u) + { + int8_t inA0 = (int8_t) bitext((int) *pIn, 4, 0); + int8_t inA1 = (int8_t) bitext((int) *pIn, 4, 4); + int8_t inB0 = (int8_t) bitext((int) *pCom, 4, 0); + int8_t inB1 = (int8_t) bitext((int) *pCom, 4, 4); + + if(inA00u) + { + uint8_t inA0 = (uint8_t) bitextu((unsigned int) *pIn, 4, 0); + uint8_t inA1 = (uint8_t) bitextu((unsigned int) *pIn, 4, 4); + uint8_t inB0 = (uint8_t) bitextu((unsigned int) *pCom, 4, 0); + uint8_t inB1 = (uint8_t) bitextu((unsigned int) *pCom, 4, 4); + + inA0 = ((inA0 + inB0) >> 1); + inA1 = ((inA1 + inB1) >> 1); + + *((uint8_t*)pIn) = bitins(inA0, n_mask, inA1, mask, off); + + pIn++; + pCom++; + length--; + } +} + +static void __attribute__((noinline)) pulp_nn_compare_and_replace_if_larger_u2(uint8_t * base, + uint8_t * target, + uint16_t length) +{ + int8_t mask2 = 0x0c; + int8_t n_mask2 = ~ mask2; + int8_t mask4 = 0x30; + int8_t n_mask4 = ~ mask4; + int8_t mask6 = 0xc0; + int8_t n_mask6 = ~ mask6; + int8_t off2 = 2; + int8_t off4 = 4; + int8_t off6 = 6; + + uint8_t *pIn = base; + uint8_t *pCom = target; + v4u inp[4]; + v4u com[4]; + uint8_t *out; + int cnt = length >> 2; + + while(cnt > 0u) + { + pulp_nn_u2_to_u8(pIn, inp); + pulp_nn_u2_to_u8(pCom, com); + + *((v4u*)out) = max4(inp[0], com[0]); + + uint8_t inA = (uint8_t) bitins(*out, n_mask2, *(out + 1), mask2, off2); + inA = bitins(inA, n_mask4, *(out + 2), mask4, off4); + *((uint8_t*)pIn) = bitins(inA, n_mask6, *(out + 3), mask6, off6); + pIn++; + + *((v4u*)out) = max4(inp[1], com[1]); + + inA = (uint8_t) bitins(*out, n_mask2, *(out + 1), mask2, off2); + inA = bitins(inA, n_mask4, *(out + 2), mask4, off4); + *((uint8_t*)pIn) = bitins(inA, n_mask6, *(out + 3), mask6, off6); + pIn++; + + *((v4u*)out) = max4(inp[2], com[2]); + + inA = (uint8_t) bitins(*out, n_mask2, *(out + 1), mask2, off2); + inA = bitins(inA, n_mask4, *(out + 2), mask4, off4); + *((uint8_t*)pIn) = bitins(inA, n_mask6, *(out + 3), mask6, off6); + pIn++; + + *((v4u*)out) = max4(inp[3], com[3]); + + inA = (uint8_t) bitins(*out, n_mask2, *(out + 1), mask2, off2); + inA = bitins(inA, n_mask4, *(out + 2), mask4, off4); + *((uint8_t*)pIn) = bitins(inA, n_mask6, *(out + 3), mask6, off6); + pIn++; + + pCom+=4; + cnt--; + } + + int left = length & 0x3; + while (left>0u) + { + uint8_t inA0 = (uint8_t) bitextu((unsigned int) *pIn, 2, 0); + uint8_t inA1 = (uint8_t) bitextu((unsigned int) *pIn, 2, 2); + uint8_t inA2 = (uint8_t) bitextu((unsigned int) *pIn, 2, 4); + uint8_t inA3 = (uint8_t) bitextu((unsigned int) *pIn, 2, 6); + v4u inA4 = pack((uint8_t) inA0, (uint8_t) inA1, (uint8_t) inA2, (uint8_t) inA3); + uint8_t inB0 = (uint8_t) bitextu((unsigned int) *pCom, 2, 0); + uint8_t inB1 = (uint8_t) bitextu((unsigned int) *pCom, 2, 2); + uint8_t inB2 = (uint8_t) bitextu((unsigned int) *pCom, 2, 4); + uint8_t inB3 = (uint8_t) bitextu((unsigned int) *pCom, 2, 6); + v4u inB4 = pack((uint8_t) inB0, (uint8_t) inB1, (uint8_t) inB2, (uint8_t) inB3); + + *((v4u*)out) = max4(inA4, inB4); + + uint8_t inA = (uint8_t) bitins(*out, n_mask2, *(out + 1), mask2, off2); + inA = bitins(inA, n_mask4, *(out + 2), mask4, off4); + *((uint8_t*)pIn) = bitins(inA, n_mask6, *(out + 3), mask6, off6); + + pIn++; + pCom++; + left--; + } +} + + +static void __attribute__((noinline)) pulp_nn_compare_and_replace_if_larger_i2(int8_t * base, + int8_t * target, + uint16_t length) +{ + int8_t mask2 = 0x0c; + int8_t n_mask2 = ~ mask2; + int8_t mask4 = 0x30; + int8_t n_mask4 = ~ mask4; + int8_t mask6 = 0xc0; + int8_t n_mask6 = ~ mask6; + int8_t off2 = 2; + int8_t off4 = 4; + int8_t off6 = 6; + + int8_t *pIn = base; + int8_t *pCom = target; + v4s inp[4]; + v4s com[4]; + int8_t *out; + int cnt = length >> 2; + + while(cnt > 0u) + { + pulp_nn_i2_to_i8(pIn, inp); + pulp_nn_i2_to_i8(pCom, com); + + *((v4s*)out) = maxs4(inp[0], com[0]); + + int8_t inA = (int8_t) bitins(*out, n_mask2, *(out + 1), mask2, off2); + inA = bitins(inA, n_mask4, *(out + 2), mask4, off4); + *((int8_t*)pIn) = bitins(inA, n_mask6, *(out + 3), mask6, off6); + pIn++; + + *((v4s*)out) = maxs4(inp[1], com[1]); + + inA = (int8_t) bitins(*out, n_mask2, *(out + 1), mask2, off2); + inA = bitins(inA, n_mask4, *(out + 2), mask4, off4); + *((int8_t*)pIn) = bitins(inA, n_mask6, *(out + 3), mask6, off6); + pIn++; + + *((v4s*)out) = maxs4(inp[2], com[2]); + + inA = (int8_t) bitins(*out, n_mask2, *(out + 1), mask2, off2); + inA = bitins(inA, n_mask4, *(out + 2), mask4, off4); + *((int8_t*)pIn) = bitins(inA, n_mask6, *(out + 3), mask6, off6); + pIn++; + + *((v4s*)out) = maxs4(inp[3], com[3]); + + inA = (int8_t) bitins(*out, n_mask2, *(out + 1), mask2, off2); + inA = bitins(inA, n_mask4, *(out + 2), mask4, off4); + *((int8_t*)pIn) = bitins(inA, n_mask6, *(out + 3), mask6, off6); + pIn++; + + pCom+=4; + cnt--; + } + + int left = length & 0x3; + while (left>0u) + { + int8_t inA0 = (int8_t) bitext((unsigned int) *pIn, 2, 0); + int8_t inA1 = (int8_t) bitext((unsigned int) *pIn, 2, 2); + int8_t inA2 = (int8_t) bitext((unsigned int) *pIn, 2, 4); + int8_t inA3 = (int8_t) bitext((unsigned int) *pIn, 2, 6); + v4s inA4 = pack((int8_t) inA0, (int8_t) inA1, (int8_t) inA2, (int8_t) inA3); + int8_t inB0 = (int8_t) bitext((unsigned int) *pCom, 2, 0); + int8_t inB1 = (int8_t) bitext((unsigned int) *pCom, 2, 2); + int8_t inB2 = (int8_t) bitext((unsigned int) *pCom, 2, 4); + int8_t inB3 = (int8_t) bitext((unsigned int) *pCom, 2, 6); + v4s inB4 = pack((int8_t) inB0, (int8_t) inB1, (int8_t) inB2, (int8_t) inB3); + + *((v4s*)out) = maxs4(inA4, inB4); + + int8_t inA = (int8_t) bitins(*out, n_mask2, *(out + 1), mask2, off2); + inA = bitins(inA, n_mask4, *(out + 2), mask4, off4); + *((int8_t*)pIn) = bitins(inA, n_mask6, *(out + 3), mask6, off6); + + pIn++; + pCom++; + left--; + } +} + +static void __attribute__((noinline)) pulp_nn_avg_and_replace_u2(uint8_t * base, + uint8_t * target, + uint16_t length) +{ + int8_t mask2 = 0x0c; + int8_t n_mask2 = ~ mask2; + int8_t mask4 = 0x30; + int8_t n_mask4 = ~ mask4; + int8_t mask6 = 0xc0; + int8_t n_mask6 = ~ mask6; + int8_t off2 = 2; + int8_t off4 = 4; + int8_t off6 = 6; + + uint8_t *pIn = base; + uint8_t *pCom = target; + + while (length>0u) + { + uint8_t inA0 = (uint8_t) bitextu((unsigned int) *pIn, 2, 0); + uint8_t inA1 = (uint8_t) bitextu((unsigned int) *pIn, 2, 2); + uint8_t inA2 = (uint8_t) bitextu((unsigned int) *pIn, 2, 4); + uint8_t inA3 = (uint8_t) bitextu((unsigned int) *pIn, 2, 6); + + uint8_t inB0 = (uint8_t) bitextu((unsigned int) *pCom, 2, 0); + uint8_t inB1 = (uint8_t) bitextu((unsigned int) *pCom, 2, 2); + uint8_t inB2 = (uint8_t) bitextu((unsigned int) *pCom, 2, 4); + uint8_t inB3 = (uint8_t) bitextu((unsigned int) *pCom, 2, 6); + + inA0 = ((inA0 + inB0) >> 1); + inA1 = ((inA1 + inB1) >> 1); + inA2 = ((inA2 + inB2) >> 1); + inA3 = ((inA3 + inB3) >> 1); + + uint8_t inA = (uint8_t) bitins(inA0, n_mask2, inA1, mask2, off2); + inA = bitins(inA, n_mask4, inA2, mask4, off4); + *((uint8_t*)pIn) = bitins(inA, n_mask6, inA3, mask6, off6); + + pIn++; + pCom++; + length--; + } +} + +/* + * XpulpNN + */ + +static void __attribute__((noinline)) xpulp_nn_zero_mem_u8(uint8_t * pBuffer, unsigned int size) +{ + int lfover = size &0x3; + for (int i=0; i<(size>>2); i++) + { + *((v4u *)pBuffer) = (v4u){0,0,0,0}; + MemoryFence(); + pBuffer+=4; + } + while(lfover) + { + *pBuffer++=0; + lfover--; + } +} + +static void __attribute__((noinline)) xpulp_nn_zero_mem_u4(uint8_t * pBuffer, unsigned int size) +{ + int lfover = size &0x7; + for (int i=0; i<(size>>3); i++) + { + *((v4u *)pBuffer) = (v4u){0,0,0,0}; + MemoryFence(); + pBuffer+=4; + } + while(lfover) + { + *pBuffer++=0; + lfover-=2; + } +} + +static void __attribute__((noinline)) xpulp_nn_zero_mem_u2(uint8_t * pBuffer, unsigned int size) +{ + int lfover = size &0xf; + for (int i=0; i<(size>>4); i++) + { + *((v4u *)pBuffer) = (v4u){0,0,0,0}; + MemoryFence(); + pBuffer+=4; + } + while(lfover) + { + *pBuffer++=0; + lfover-=4; + } +} + + +static void __attribute__((noinline)) xpulp_nn_compare_and_replace_if_larger_u4(uint8_t * base, + uint8_t * target, + uint16_t length) +{ + int8_t mask = 0xf0; + int8_t n_mask = ~ mask; + int8_t off = 0x04; + + uint8_t *pIn = base; + uint8_t *pCom = target; + + int cnt = length >> 2; + + while(cnt > 0u) + { + *((uint32_t *)pIn) = max8(*((uint32_t *)pIn), *((uint32_t *)pCom)); + + pIn+=4; + pCom+=4; + + cnt--; + } + + int left = length & 0x3; + while (left>0u) + { + uint8_t inA0 = (uint8_t) bitextu((unsigned int) *pIn, 4, 0); + uint8_t inA1 = (uint8_t) bitextu((unsigned int) *pIn, 4, 4); + uint8_t inB0 = (uint8_t) bitextu((unsigned int) *pCom, 4, 0); + uint8_t inB1 = (uint8_t) bitextu((unsigned int) *pCom, 4, 4); + + if(inA0> 2; + + while (cnt > 0u) { + *((int32_t *)pIn) = maxs8(*((int32_t *)pIn), *((int32_t *)pCom)); + + pIn += 4; + pCom += 4; + + cnt--; + } + + int left = length & 0x3; + while (left > 0u) { + int8_t inA0 = (int8_t)bitext((int)*pIn, 4, 0); + int8_t inA1 = (int8_t)bitext((int)*pIn, 4, 4); + int8_t inB0 = (int8_t)bitext((int)*pCom, 4, 0); + int8_t inB1 = (int8_t)bitext((int)*pCom, 4, 4); + + if (inA0 < inB0) + inA0 = inB0; + + if (inA1 < inB1) + inA1 = inB1; + + *((int8_t *)pIn) = bitins(inA0, n_mask, inA1, mask, off); + + pIn++; + pCom++; + left--; + } +} + +static void __attribute__((noinline)) xpulp_nn_avg_and_replace_u4(uint8_t * base, + uint8_t * target, + uint16_t length) +{ + int8_t mask = 0xf0; + int8_t n_mask = ~ mask; + int8_t off = 0x04; + + uint8_t *pIn = base; + uint8_t *pCom = target; + + int cnt = length >> 2; + + while (cnt > 0u) + { + *((uint32_t *)pIn) = avg8(*((uint32_t *)pIn), *((uint32_t *)pCom)); + + pIn+=4; + pCom+=4; + cnt--; + } + + int left = length & 0x3; + + while (left>0u) + { + uint8_t inA0 = (uint8_t) bitextu((unsigned int) *pIn, 4, 0); + uint8_t inA1 = (uint8_t) bitextu((unsigned int) *pIn, 4, 4); + uint8_t inB0 = (uint8_t) bitextu((unsigned int) *pCom, 4, 0); + uint8_t inB1 = (uint8_t) bitextu((unsigned int) *pCom, 4, 4); + + inA0 = ((inA0 + inB0) >> 1); + inA1 = ((inA1 + inB1) >> 1); + + *((uint8_t*)pIn) = bitins(inA0, n_mask, inA1, mask, off); + + pIn++; + pCom++; + length--; + } +} + +static void __attribute__((noinline)) xpulp_nn_compare_and_replace_if_larger_u2(uint8_t * base, + uint8_t * target, + uint16_t length) +{ + int8_t mask2 = 0x0c; + int8_t n_mask2 = ~ mask2; + int8_t mask4 = 0x30; + int8_t n_mask4 = ~ mask4; + int8_t mask6 = 0xc0; + int8_t n_mask6 = ~ mask6; + int8_t off2 = 2; + int8_t off4 = 4; + int8_t off6 = 6; + + uint8_t *pIn = base; + uint8_t *pCom = target; + uint8_t *out; + + int cnt = length >> 2; + + while(cnt > 0u) + { + *((uint32_t *)pIn) = max16(*((uint32_t *)pIn), *((uint32_t *)pCom)); + + pIn+=4; + pCom+=4; + cnt--; + } + + int left = length & 0x3; + while (left>0u) + { + uint8_t inA0 = (uint8_t) bitextu((unsigned int) *pIn, 2, 0); + uint8_t inA1 = (uint8_t) bitextu((unsigned int) *pIn, 2, 2); + uint8_t inA2 = (uint8_t) bitextu((unsigned int) *pIn, 2, 4); + uint8_t inA3 = (uint8_t) bitextu((unsigned int) *pIn, 2, 6); + v4u inA4 = pack((uint8_t) inA0, (uint8_t) inA1, (uint8_t) inA2, (uint8_t) inA3); + uint8_t inB0 = (uint8_t) bitextu((unsigned int) *pCom, 2, 0); + uint8_t inB1 = (uint8_t) bitextu((unsigned int) *pCom, 2, 2); + uint8_t inB2 = (uint8_t) bitextu((unsigned int) *pCom, 2, 4); + uint8_t inB3 = (uint8_t) bitextu((unsigned int) *pCom, 2, 6); + v4u inB4 = pack((uint8_t) inB0, (uint8_t) inB1, (uint8_t) inB2, (uint8_t) inB3); + + *((v4u*)out) = max4(inA4, inB4); + + uint8_t inA = (uint8_t) bitins(*out, n_mask2, *(out + 1), mask2, off2); + inA = bitins(inA, n_mask4, *(out + 2), mask4, off4); + *((uint8_t*)pIn) = bitins(inA, n_mask6, *(out + 3), mask6, off6); + + pIn++; + pCom++; + left--; + } +} +static void __attribute__((noinline)) xpulp_nn_compare_and_replace_if_larger_i2(int8_t * base, + int8_t * target, + uint16_t length) +{ + int8_t mask2 = 0x0c; + int8_t n_mask2 = ~ mask2; + int8_t mask4 = 0x30; + int8_t n_mask4 = ~ mask4; + int8_t mask6 = 0xc0; + int8_t n_mask6 = ~ mask6; + int8_t off2 = 2; + int8_t off4 = 4; + int8_t off6 = 6; + + int8_t *pIn = base; + int8_t *pCom = target; + int8_t *out; + + int cnt = length >> 2; + + while(cnt > 0u) + { + *((int32_t *)pIn) = maxs16(*((int32_t *)pIn), *((int32_t *)pCom)); + + pIn+=4; + pCom+=4; + cnt--; + } + + int left = length & 0x3; + while (left>0u) + { + int8_t inA0 = (int8_t) bitext((int) *pIn, 2, 0); + int8_t inA1 = (int8_t) bitext((int) *pIn, 2, 2); + int8_t inA2 = (int8_t) bitext((int) *pIn, 2, 4); + int8_t inA3 = (int8_t) bitext((int) *pIn, 2, 6); + v4s inA4 = pack((int8_t) inA0, (int8_t) inA1, (int8_t) inA2, (int8_t) inA3); + int8_t inB0 = (int8_t) bitext((int) *pCom, 2, 0); + int8_t inB1 = (int8_t) bitext((int) *pCom, 2, 2); + int8_t inB2 = (int8_t) bitext((int) *pCom, 2, 4); + int8_t inB3 = (int8_t) bitext((int) *pCom, 2, 6); + v4s inB4 = pack((int8_t) inB0, (int8_t) inB1, (int8_t) inB2, (int8_t) inB3); + + *((v4s*)out) = maxs4(inA4, inB4); + + int8_t inA = (int8_t) bitins(*out, n_mask2, *(out + 1), mask2, off2); + inA = bitins(inA, n_mask4, *(out + 2), mask4, off4); + *((int8_t*)pIn) = bitins(inA, n_mask6, *(out + 3), mask6, off6); + + pIn++; + pCom++; + left--; + } +} + +static void __attribute__((noinline)) xpulp_nn_avg_and_replace_u2(uint8_t * base, + uint8_t * target, + uint16_t length) +{ + int8_t mask2 = 0x0c; + int8_t n_mask2 = ~ mask2; + int8_t mask4 = 0x30; + int8_t n_mask4 = ~ mask4; + int8_t mask6 = 0xc0; + int8_t n_mask6 = ~ mask6; + int8_t off2 = 2; + int8_t off4 = 4; + int8_t off6 = 6; + + uint8_t *pIn = base; + uint8_t *pCom = target; + uint8_t *out; + + int cnt = length >> 2; + + while(cnt > 0u) + { + *((uint32_t *)pIn) = avg16(*((uint32_t *)pIn), *((uint32_t *)pCom)); + + pIn+=4; + pCom+=4; + cnt--; + } + + int left = length & 0x3; + while (left>0u) + { + uint8_t inA0 = (uint8_t) bitextu((unsigned int) *pIn, 2, 0); + uint8_t inA1 = (uint8_t) bitextu((unsigned int) *pIn, 2, 2); + uint8_t inA2 = (uint8_t) bitextu((unsigned int) *pIn, 2, 4); + uint8_t inA3 = (uint8_t) bitextu((unsigned int) *pIn, 2, 6); + v4u inA4 = pack((uint8_t) inA0, (uint8_t) inA1, (uint8_t) inA2, (uint8_t) inA3); + uint8_t inB0 = (uint8_t) bitextu((unsigned int) *pCom, 2, 0); + uint8_t inB1 = (uint8_t) bitextu((unsigned int) *pCom, 2, 2); + uint8_t inB2 = (uint8_t) bitextu((unsigned int) *pCom, 2, 4); + uint8_t inB3 = (uint8_t) bitextu((unsigned int) *pCom, 2, 6); + v4u inB4 = pack((uint8_t) inB0, (uint8_t) inB1, (uint8_t) inB2, (uint8_t) inB3); + + *((v4u*)out) = avg4(inA4, inB4); + + uint8_t inA = (uint8_t) bitins(*out, n_mask2, *(out + 1), mask2, off2); + inA = bitins(inA, n_mask4, *(out + 2), mask4, off4); + *((uint8_t*)pIn) = bitins(inA, n_mask6, *(out + 3), mask6, off6); + + pIn++; + pCom++; + left--; + } +} + + +#endif diff --git a/rt_nn_tests/xpnn_conv/test.c b/rt_nn_tests/xpnn_conv/test.c new file mode 100644 index 0000000..07d841b --- /dev/null +++ b/rt_nn_tests/xpnn_conv/test.c @@ -0,0 +1,230 @@ +// massive hack to enable rt compatibility +#define pi_core_id get_core_id +#include +#include +#include + +#include "dory_dma.h" + +#include "pmsis.h" + +#include "data_statstest.h" +//#include "pulp_nn_kernels.h" +#include "pulp_nn_mix_kernels.h" + + +#define start_cycle_counter() asm volatile("csrw 0xCC0, 0x01;") +#define stop_cycle_counter() asm volatile("csrw 0xCC0, 0x00;") +#define read_cycle_counter(x) asm volatile("csrr %0, 0x780;" : "=r" (x)) +#define reset_cycle_counter() asm volatile("csrw 0x780, 0x0;") + +uint8_t im2col[IM2COL_DIM] = {0}; +uint8_t outputs[OUTPUT_DIM] = {0}; + +int32_t outputs_fp[OUTPUT_DIM_FP] = {0}; + +#ifndef PROFILE +int num_cycles; +#else +int im2col_cycles; +int hotloop_prep_cycles; +int hotloop_cycles; +int threshold_cycles; +int requant_cycles; +int hotloop_leftover_cycles; +int matmul4x2_leftover_cycles; +#endif + +void call_krnl_0(); +void test_0(); + +int main(int argc, char *argv[]) +{ +#if KRAKEN_PTEST == 1 + kraken_padframe_aon_pad_gpioa_cfg_rxe_set(24, 0); + kraken_padframe_aon_pad_gpioa_cfg_trie_set(24, 0); + kraken_padframe_aon_pad_gpioa_cfg_chip2pad_set(24, 0); +#endif + int n_mismatches = 0; + int mismatches_tot = 0; + + + + #ifndef PROFILE + num_cycles = 0; + #endif + + if (get_core_id() == 0) { + printf("===> TEST 0: Running xpulp_nn_conv_u4_u8_i2...\n"); + printf(" dims_in = [4, 4]\n"); + printf(" dims_kernel = [3, 3]\n"); + printf(" ch_in/out = [16, 32]\n"); + //printf(" padding_y_top = [%d]\n", padding_y_top); + //printf(" padding_y_bottom = [%d]\n", padding_y_bottom); + //printf(" padding_x_left = [%d]\n", padding_x_left); + //printf(" padding_x_right = [%d]\n", padding_x_right); + //printf(" stride_x = [%d]\n", stride_x); + //printf(" stride_y = [%d]\n", stride_y); + } + test_0(); + #ifndef PROFILE + stop_cycle_counter(); + read_cycle_counter(num_cycles); + if (get_core_id() == 0) { + printf("===> TEST 0: Finished running xpulp_nn_conv_u4_u8_i2\n"); + printf("num_cycles = %d\n", num_cycles); + printf("MACs = 73728\n"); + printf("MACs/cycle = %.4f\n", 73728/num_cycles); + } + #endif + if (get_core_id() == 0) { + printf("Checking for mismatches..\n"); + n_mismatches = 0; + + for(int i=0; i < 512; i++) { + if (outputs[i] != exp_outp_0[i]){ + printf("***Mismatch in test 0 at iteration %d: Expected: %x, got: %x\n", i, exp_outp_0[i], outputs[i]); + n_mismatches++; + } + } + } + mismatches_tot += n_mismatches; + + if (get_core_id() == 0) { + printf("Got %d mismatches in %d tests\n", mismatches_tot, 1); + } + return mismatches_tot; +} + + +void call_krnl_0(void) { + uint8_t * pInp; + uint8_t * pIm2ColBuffer; + int8_t * pBias = NULL; + uint8_t * pOut; + int8_t * pWeight; + uint32_t * pThr; + int32_t * pKappa, pLambda; + #ifdef PROFILE + int32_t im2col_cycles = 0; + int32_t hotloop_prep_cycles = 0; + int32_t hotloop_cycles = 0; + int32_t threshold_cycles = 0; + int32_t requant_cycles = 0; + int32_t hotloop_leftover_cycles = 0; + int32_t matmul4x2_leftover_cycles = 0; + #endif + pInp = inp_l1; + + pOut = outp_l1; + pIm2ColBuffer = im2col_l1; + pWeight = wt_l1; + pThr = threshs_l1; + pKappa = kappa_l1; + pLambda = lambda_l1; +#if KRAKEN_PTEST == 1 + if (pi_core_id() == 0) { + kraken_padframe_aon_pad_gpioa_cfg_chip2pad_set(24, 1); + } +#endif + xpulp_nn_conv_u4_u8_i2( + pInp, + pIm2ColBuffer, + pBias, + pOut, + pWeight, + pKappa, + pLambda, + 1, + 13, + 4, + 4, + 16, + 4, + 4, + 32, + 3, + 3, + 1, + 1, + 1, + 1, + 1, + 1, + 1, +#ifndef PROFILE + 1 +#else + 1, + &im2col_cycles, + &hotloop_prep_cycles, + &hotloop_cycles, + &requant_cycles, + &hotloop_leftover_cycles, + &matmul4x2_leftover_cycles +#endif + ); + +#if KRAKEN_PTEST == 1 + if (pi_core_id() == 0) { + kraken_padframe_aon_pad_gpioa_cfg_chip2pad_set(24, 0); + } +#endif + #ifdef PROFILE + if (pi_core_id() == 0) { + printf("im2col_cycles = %d\n", im2col_cycles); + printf("hotloop_prep_cycles = %d\n", hotloop_prep_cycles); + printf("hotloop_cycles = %d\n", hotloop_cycles); + printf("requant_cycles = %d\n", requant_cycles); + printf("threshold_cycles = %d\n", threshold_cycles); + printf("hotloop_leftover_cycles = %d\n", hotloop_leftover_cycles); + printf("matmul4x2_leftover_cycles = %d\n", matmul4x2_leftover_cycles); + } + #endif +} + +void test_0(void) { + uint32_t dma_channel = dory_dma_allocate(); + DMA_copy dma_tx = {0}; + // DMA transfer inputs from L2 to L1 + dma_tx.ext = pIn_0; + dma_tx.loc = inp_l1; + dma_tx.number_of_1d_copies = 1; + dma_tx.number_of_2d_copies = 1; + dma_tx.length_1d_copy = 128; + dma_tx.stride_1d = 1; + dma_tx.stride_2d = 1; + dma_tx.dir = 1; + dma_tx.tid = dma_channel; + dory_dma_memcpy_async(&dma_tx); + dma_tx.ext = pLambda_0; + dma_tx.loc = lambda_l1; + dma_tx.length_1d_copy = 32 * 4; // 4 bytes per lambda item + dory_dma_memcpy_async(&dma_tx); + dma_tx.ext = pKappa_0; + dma_tx.loc = kappa_l1; + dory_dma_memcpy_async(&dma_tx); + // transfer weights + dma_tx.ext = pWeight_0; + dma_tx.loc = wt_l1; + dma_tx.length_1d_copy = 1152; + dory_dma_memcpy_async(&dma_tx); + call_krnl_0(); + // get outputs back with DMA + dma_tx.dir = 0; + dma_tx.ext = outputs; + dma_tx.loc = outp_l1; + dma_tx.length_1d_copy = 512; + dory_dma_memcpy_async(&dma_tx); + dory_dma_free(&dma_tx); +} + + + + + + + + + + diff --git a/rt_nn_tests/xpnn_conv/xpulp_nn_conv_u4_u8_i2.c b/rt_nn_tests/xpnn_conv/xpulp_nn_conv_u4_u8_i2.c new file mode 100644 index 0000000..f625bfc --- /dev/null +++ b/rt_nn_tests/xpnn_conv/xpulp_nn_conv_u4_u8_i2.c @@ -0,0 +1,303 @@ +/* + * xpulp_nn_conv_u4_u8_i2.c + * Nazareno Bruschi + * + * Copyright (C) 2019-2020 University of Bologna + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "pmsis.h" +#include "pulp_nn_utils.h" +#include "pulp_nn_kernels.h" + + + + +void __attribute__((noinline)) xpulp_nn_conv_u4_u8_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mult, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batch_norm) +{ + uint16_t ch_in_r = PACK_INT4_SIZE(ch_in); + uint16_t ch_out_r = PACK_INT8_SIZE(ch_out); + + int core_id = pi_core_id(); + uint8_t * pIm2ColBase = pIm2ColBuffer + (2 * core_id * PACK_INT4_SIZE(ch_in) * dim_kernel_x * dim_kernel_y); + int i_out_y, i_out_x, i_ker_y, i_ker_x; + int Log2Core; + + uint8_t extra_chunk = ((dim_out_y & (NUM_CORES-1)) != 0); + uint8_t extra_chunk_r; + uint16_t dim_out_x_r; + uint8_t section; + int core_id_r; + + if(extra_chunk && dim_out_x > 1) + { + Log2Core = log2(NUM_CORES >> 1); + core_id_r = (core_id >> 1); + dim_out_x_r = (dim_out_x >> 1); + section = (core_id & 0x1); + extra_chunk_r = ((dim_out_y & ((NUM_CORES >> 1) - 1)) != 0); + } + else + { + Log2Core = log2(NUM_CORES); + core_id_r = core_id; + dim_out_x_r = dim_out_x; + section = 0; + extra_chunk_r = extra_chunk; + extra_chunk = 0; + } + + uint8_t flag_dim_out_x_odd = dim_out_x & 0x01; + + int chunk = (dim_out_y >> Log2Core) + extra_chunk_r; + + int start_pixel = min((chunk * core_id_r), dim_out_y); + int stop_pixel = min(start_pixel + chunk, dim_out_y); + + uint8_t *pIm2Col = pIm2ColBase; + uint8_t *pOutBuffer = pOut + (start_pixel * ch_out_r * dim_out_x) + (section * ch_out_r * dim_out_x_r); + + for (i_out_y = start_pixel; i_out_y < stop_pixel; i_out_y++) + { + for(i_out_x=(section * dim_out_x_r); i_out_x<(dim_out_x_r + (section * (dim_out_x_r + flag_dim_out_x_odd))); i_out_x++) + { + if(i_out_y < padding_y_top) + { + for(i_ker_y=((i_out_y * stride_y) - padding_y_top); i_ker_y<((i_out_y * stride_y) - padding_y_top + dim_kernel_y); i_ker_y++) + { + for(i_ker_x=((i_out_x * stride_x) - padding_x_left); i_ker_x<((i_out_x * stride_x) - padding_x_left + dim_kernel_x); i_ker_x++) + { + if((i_ker_y < 0) || (i_ker_y >= dim_in_y) || (i_ker_x < 0) || (i_ker_x >= dim_in_x)) + { + xpulp_nn_zero_mem_u4(pIm2Col, ch_in); + } + else + { + xpulp_nn_im2col_u4_to_u4((uint8_t*) (pIn + ((i_ker_y * dim_in_x + i_ker_x) * ch_in_r)), pIm2Col, ch_in); + } + pIm2Col+=PACK_INT4_SIZE(ch_in); + } + } + } + else if(i_out_y < dim_out_y - padding_y_bottom) + { + if(i_out_x < padding_x_left) + { + for(i_ker_y=((i_out_y * stride_y) - padding_y_top); i_ker_y<((i_out_y * stride_y) - padding_y_top + dim_kernel_y); i_ker_y++) + { + for(i_ker_x=((i_out_x * stride_x) - padding_x_left); i_ker_x<((i_out_x * stride_x) - padding_x_left + dim_kernel_x); i_ker_x++) + { + if((i_ker_x < 0) || (i_ker_x >= dim_in_x)) + { + xpulp_nn_zero_mem_u4(pIm2Col, ch_in); + } + else + { + xpulp_nn_im2col_u4_to_u4((uint8_t*) (pIn + ((i_ker_y * dim_in_x + i_ker_x) * ch_in_r)), pIm2Col, ch_in); + } + pIm2Col+=PACK_INT4_SIZE(ch_in); + } + } + } + else if(i_out_x < (dim_out_x - padding_x_right)) + { + for(i_ker_y=((i_out_y * stride_y) - padding_y_top); i_ker_y<((i_out_y * stride_y) - padding_y_top + dim_kernel_y); i_ker_y++) + { + xpulp_nn_im2col_u4_to_u4((uint8_t*) pIn + (i_ker_y * dim_in_x + i_out_x * stride_x - padding_x_left)*ch_in_r,pIm2Col,ch_in * dim_kernel_x); + pIm2Col+=PACK_INT4_SIZE(ch_in * dim_kernel_x); + } + } + else + { + for(i_ker_y=((i_out_y * stride_y) - padding_y_top); i_ker_y<((i_out_y * stride_y) - padding_y_top + dim_kernel_y); i_ker_y++) + { + for(i_ker_x = i_out_x * stride_x - padding_x_left; i_ker_x < i_out_x * stride_x - padding_x_left + dim_kernel_x; i_ker_x++) + { + if((i_ker_x < 0) || (i_ker_x >= dim_in_x)) + { + xpulp_nn_zero_mem_u4(pIm2Col, ch_in); + } + else + { + xpulp_nn_im2col_u4_to_u4((uint8_t *)pIn + (i_ker_y*dim_in_x+i_ker_x)* ch_in_r, pIm2Col, ch_in); + } + pIm2Col+=PACK_INT4_SIZE(ch_in); + } + } + } + } + else + { + for(i_ker_y=((i_out_y * stride_y) - padding_y_top); i_ker_y<((i_out_y * stride_y) - padding_y_top + dim_kernel_y); i_ker_y++) + { + for(i_ker_x = i_out_x * stride_x - padding_x_left; i_ker_x < i_out_x * stride_x - padding_x_left + dim_kernel_x; i_ker_x++) + { + if(i_ker_y < 0 || (i_ker_y >= dim_in_y) || i_ker_x < 0 || i_ker_x >= dim_in_x) + { + xpulp_nn_zero_mem_u4(pIm2Col, ch_in); + } + else + { + xpulp_nn_im2col_u4_to_u4((uint8_t *) pIn + (i_ker_y * dim_in_x + i_ker_x) * ch_in_r, pIm2Col, ch_in); + } + pIm2Col+=PACK_INT4_SIZE(ch_in); + } + } + } + if(pIm2Col == (pIm2ColBase + ((PACK_INT4_SIZE(ch_in) * dim_kernel_x * dim_kernel_y) << 1))) + { + pOutBuffer = xpulp_nn_matmul_u4_u8_i2( + pIm2ColBase, + pBias, + pOutBuffer, + pOutBuffer + ch_out_r, + pWeight, + pKappa, + pLambda, + out_mult, + out_shift, + (ch_in * dim_kernel_x * dim_kernel_y), + ch_out, + flag_relu, + flag_batch_norm + ); + + pIm2Col = pIm2ColBase; + } + } + + if(pIm2Col != pIm2ColBase) + { + const int8_t *pA = pWeight; + int i; + int32_t * k1 = pKappa; + int32_t * lambda1 = pLambda; + + v4s inA[2]; + uint8_t out[1]; + uint16_t num_col_im2col = ch_in * dim_kernel_x * dim_kernel_y; + uint16_t num_col_im2col_w = PACK_INT2_SIZE(ch_in) * dim_kernel_x * dim_kernel_y; + + for(i = 0; i < ch_out; i++) + { + int sum = 0; + if (pBias != NULL) + { + sum = *((int*) pBias); + pBias+= 4; + } + + uint8_t *pB = pIm2ColBase; + + int32_t *ptrA = (int32_t *)pA; + uint32_t *ptrB = (uint32_t *)pB; + + for(int j=0; j < (num_col_im2col >> 4); j++) + { + pA = pulp_nn_i2_to_i4(pA,inA); + + ptrA = (int32_t *)inA; + + sum = SumDotp8(*(uint32_t *)ptrB, *(int32_t *)ptrA, sum); + + ptrA++; + ptrB++; + + sum = SumDotp8(*(uint32_t *)ptrB, *(int32_t *)ptrA, sum); + + ptrA++; + ptrB++; + } + + int col_cnt_im2col = num_col_im2col & 0xf; + + if(col_cnt_im2col) + { + + uint16_t loop_cnt_im2col_a = (num_col_im2col >> 4) << 3; + pB+=loop_cnt_im2col_a; + + do + { + int8_t inA1 = (int8_t) bitext((int) *pA, 2, 0); + uint8_t inB1 = (uint8_t) bitextu((uint32_t) *pB, 4, 0); + sum += inA1 * inB1; + inA1 = (int8_t) bitext((int) *pA, 2, 2); + inB1 = (uint8_t) bitextu((uint32_t) *pB, 4, 4); + sum += inA1 * inB1; + pB++; + inA1 = (int8_t) bitext((int) *pA, 2, 4); + inB1 = (uint8_t) bitextu((uint32_t) *pB, 4, 0); + sum += inA1 * inB1; + inA1 = (int8_t) bitext((int) *pA, 2, 6); + inB1 = (uint8_t) bitextu((uint32_t) *pB, 4, 4); + sum += inA1 * inB1; + + pA++; + pB++; + col_cnt_im2col-=4; + } while(col_cnt_im2col); + } + if (flag_batch_norm && flag_relu) + { + *pOutBuffer = pulp_nn_bn_quant_u8(sum, *k1, *lambda1, out_shift); + k1++; + lambda1++; + pOutBuffer++; + } + else + { + if(flag_relu == 1) + { + *pOutBuffer = pulp_nn_quant_u8(sum, out_mult, out_shift); + pOutBuffer++; + } + else + { + *pOutBuffer = (uint8_t) clip8(sum >> out_shift); + pOutBuffer++; + } + } + } + } + pOutBuffer+=(extra_chunk * ((dim_out_x_r + ((1 - section) * flag_dim_out_x_odd)) * ch_out_r)); + pIm2Col = pIm2ColBase; + } + pi_cl_team_barrier(); +} diff --git a/rt_nn_tests/xpnn_conv/xpulp_nn_matmul_u4_u8_i2.c b/rt_nn_tests/xpnn_conv/xpulp_nn_matmul_u4_u8_i2.c new file mode 100644 index 0000000..5713be9 --- /dev/null +++ b/rt_nn_tests/xpnn_conv/xpulp_nn_matmul_u4_u8_i2.c @@ -0,0 +1,490 @@ +/* + * xpulp_nn_matmul_u4_u8_i2.c + * Nazareno Bruschi + * + * Copyright (C) 2019-2020 University of Bologna + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "pmsis.h" +#include "pulp_nn_utils.h" + + + +uint8_t * __attribute__((noinline)) xpulp_nn_matmul_u4_u8_i2( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mult, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batch_norm) +{ + int32_t vecA[2]; + int32_t vecA2[2]; + int32_t vecA3[2]; + int32_t vecA4[2]; + + uint16_t ch_out_r = PACK_INT8_SIZE(ch_out); + + uint16_t num_col_im2col_w = PACK_INT2_SIZE(num_col_im2col); + uint16_t num_col_im2col_a = PACK_INT4_SIZE(num_col_im2col); + + //uint8_t *pOut2 = pOut + ch_out_r; + int8_t *pA = pWeight; + + uint16_t chan_left = ch_out & 0x3; + + for(int i=0; i < (ch_out >> 2); i++) + { + uint8_t *pB = pIn; + uint8_t *pB2 = (pB + num_col_im2col_a); + + uint32_t *ptrB = (uint32_t *) pB; + uint32_t *ptrB2 = (uint32_t *) pB2; + + int8_t *pA2 = (pA + num_col_im2col_w); + int8_t *pA3 = (pA2 + num_col_im2col_w); + int8_t *pA4 = (pA3 + num_col_im2col_w); + + pA = pulp_nn_i2_to_i4(pA , vecA); + pA2 = pulp_nn_i2_to_i4(pA2, vecA2); + pA3 = pulp_nn_i2_to_i4(pA3, vecA3); + pA4 = pulp_nn_i2_to_i4(pA4, vecA4); + + int32_t *startA; + int32_t *startA2; + int32_t *startA3; + int32_t *startA4; + + asm volatile("mv %0, %1":"=r"(startA):"r"(vecA)); + asm volatile("mv %0, %1":"=r"(startA2):"r"(vecA2)); + asm volatile("mv %0, %1":"=r"(startA3):"r"(vecA3)); + asm volatile("mv %0, %1":"=r"(startA4):"r"(vecA4)); + + int32_t *ptrA = (int32_t *) vecA ; + int32_t *ptrA2 = (int32_t *) vecA2; + int32_t *ptrA3 = (int32_t *) vecA3; + int32_t *ptrA4 = (int32_t *) vecA4; + + ptrA = MacLoadInit(1, 0, 0, 0, ptrA); + ptrA2 = MacLoadInit(1, 0, 1, 0, ptrA2); + ptrA3 = MacLoadInit(1, 0, 2, 0, ptrA3); + ptrA4 = MacLoadInit(1, 0, 3, 0, ptrA4); + + ptrB = MacLoadInit(0, 1, 0, 0, ptrB); + + int sum = 0; + int sum2 = 0; + int sum3 = 0; + int sum4 = 0; + int sum5 = 0; + int sum6 = 0; + int sum7 = 0; + int sum8 = 0; + + + if (pBias != NULL) + { + sum = *((int*) pBias); + pBias+= 4; + sum2 = *((int*) pBias); + pBias+= 4; + sum3 = *((int*) pBias); + pBias+= 4; + sum4 = *((int*) pBias); + pBias+= 4; + + sum5 = sum; + sum6 = sum2; + sum7 = sum3; + sum8 = sum4; + } + + for(int j=0; j<(num_col_im2col >> 4); j++) + { + ptrB2 = MacLoadInit(0, 1, 0, 1, ptrB2); + + sum = MacLoad8(0, 0, 0, 0, ptrA, sum); + sum2 = MacLoad8(0, 0, 1, 0, ptrA2, sum2); + sum3 = MacLoad8(0, 0, 2, 0, ptrA3, sum3); + sum4 = MacLoad8(0, 1, 3, 0, ptrB, sum4); + ptrB = MacLoadUpdate(ptrB); + + + sum5 = MacLoad8(1, 0, 0, 1, ptrA, sum5); + ptrA = MacLoadUpdate(ptrA); + + sum6 = MacLoad8(1, 0, 1, 1, ptrA2, sum6); + ptrA2 = MacLoadUpdate(ptrA2); + + sum7 = MacLoad8(1, 0, 2, 1, ptrA3, sum7); + ptrA3 = MacLoadUpdate(ptrA3); + + sum8 = MacLoad8(1, 0, 3, 1, ptrA4, sum8); + ptrA4 = MacLoadUpdate(ptrA4); + + ptrB2 = MacLoadInit(0, 1, 0, 1, ptrB2); + + sum = MacLoad8(0, 0, 0, 0, ptrA, sum); + sum2 = MacLoad8(0, 0, 1, 0, ptrA2, sum2); + sum3 = MacLoad8(0, 0, 2, 0, ptrA3, sum3); + sum4 = MacLoad8(0, 1, 3, 0, ptrB, sum4); + ptrB = MacLoadUpdate(ptrB); + + pA = pulp_nn_i2_to_i4(pA , vecA); + pA2 = pulp_nn_i2_to_i4(pA2, vecA2); + pA3 = pulp_nn_i2_to_i4(pA3, vecA3); + pA4 = pulp_nn_i2_to_i4(pA4, vecA4); + + ptrA = MacLoadAssign(vecA); + ptrA2 = MacLoadAssign(vecA2); + ptrA3 = MacLoadAssign(vecA3); + ptrA4 = MacLoadAssign(vecA4); + + sum5 = MacLoad8(1, 0, 0, 1, ptrA, sum5); + ptrA = MacLoadUpdate(ptrA); + + sum6 = MacLoad8(1, 0, 1, 1, ptrA2, sum6); + ptrA2 = MacLoadUpdate(ptrA2); + + sum7 = MacLoad8(1, 0, 2, 1, ptrA3, sum7); + ptrA3 = MacLoadUpdate(ptrA3); + + sum8 = MacLoad8(1, 0, 3, 1, ptrA4, sum8); + ptrA4 = MacLoadUpdate(ptrA4); + } + pA-=4; + pA2-=4; + pA3-=4; + pA4-=4; + + int col_cnt_im2col = num_col_im2col & 0xf; + + if(col_cnt_im2col) + { + + uint16_t loop_cnt_im2col_a = (num_col_im2col >> 4) << 3; + pB+=loop_cnt_im2col_a; + pB2+=loop_cnt_im2col_a; + + do + { + int8_t inA = (int8_t) bitext((int) *pA, 2, 0); + int8_t inA2 = (int8_t) bitext((int) *pA2, 2, 0); + int8_t inA3 = (int8_t) bitext((int) *pA3, 2, 0); + int8_t inA4 = (int8_t) bitext((int) *pA4, 2, 0); + + uint8_t inB = (uint8_t)bitextu((uint32_t) *pB, 4, 0); + uint8_t inB2 = (uint8_t)bitextu((uint32_t) *pB2, 4, 0); + + sum += inA * inB; + sum2 += inA2 * inB; + sum3 += inA3 * inB; + sum4 += inA4 * inB; + + sum5 += inA * inB2; + sum6 += inA2 * inB2; + sum7 += inA3 * inB2; + sum8 += inA4 * inB2; + + inA = (int8_t) bitext((int) *pA, 2, 2); + inA2 = (int8_t) bitext((int) *pA2, 2, 2); + inA3 = (int8_t) bitext((int) *pA3, 2, 2); + inA4 = (int8_t) bitext((int) *pA4, 2, 2); + + inB = (uint8_t)bitextu((uint32_t) *pB, 4, 4); + inB2 = (uint8_t)bitextu((uint32_t) *pB2, 4, 4); + + sum += inA * inB; + sum2 += inA2 * inB; + sum3 += inA3 * inB; + sum4 += inA4 * inB; + + sum5 += inA * inB2; + sum6 += inA2 * inB2; + sum7 += inA3 * inB2; + sum8 += inA4 * inB2; + + pB++; + pB2++; + + inA = (int8_t) bitext((int) *pA, 2, 4); + inA2 = (int8_t) bitext((int) *pA2, 2, 4); + inA3 = (int8_t) bitext((int) *pA3, 2, 4); + inA4 = (int8_t) bitext((int) *pA4, 2, 4); + + inB = (uint8_t)bitextu((uint32_t) *pB, 4, 0); + inB2 = (uint8_t)bitextu((uint32_t) *pB2, 4, 0); + + sum += inA * inB; + sum2 += inA2 * inB; + sum3 += inA3 * inB; + sum4 += inA4 * inB; + + sum5 += inA * inB2; + sum6 += inA2 * inB2; + sum7 += inA3 * inB2; + sum8 += inA4 * inB2; + + inA = (int8_t) bitext((int) *pA, 2, 6); + inA2 = (int8_t) bitext((int) *pA2, 2, 6); + inA3 = (int8_t) bitext((int) *pA3, 2, 6); + inA4 = (int8_t) bitext((int) *pA4, 2, 6); + + inB = (uint8_t)bitextu((uint32_t) *pB, 4, 4); + inB2 = (uint8_t)bitextu((uint32_t) *pB2, 4, 4); + + sum += inA * inB; + sum2 += inA2 * inB; + sum3 += inA3 * inB; + sum4 += inA4 * inB; + + sum5 += inA * inB2; + sum6 += inA2 * inB2; + sum7 += inA3 * inB2; + sum8 += inA4 * inB2; + + pA++; + pA2++; + pA3++; + pA4++; + + pB++; + pB2++; + + col_cnt_im2col-=4; + } while(col_cnt_im2col > 0); + } + if (flag_batch_norm && flag_relu) + { + *pOut = pulp_nn_bn_quant_u8(sum, *pKappa, *pLambda, out_shift); + pOut++; + *pOut2 = pulp_nn_bn_quant_u8(sum5, *pKappa, *pLambda, out_shift); + pOut2++; + pKappa++; + pLambda++; + + *pOut = pulp_nn_bn_quant_u8(sum2, *pKappa, *pLambda, out_shift); + pOut++; + *pOut2 = pulp_nn_bn_quant_u8(sum6, *pKappa, *pLambda, out_shift); + pOut2++; + pKappa++; + pLambda++; + + *pOut = pulp_nn_bn_quant_u8(sum3, *pKappa, *pLambda, out_shift); + pOut++; + *pOut2 = pulp_nn_bn_quant_u8(sum7, *pKappa, *pLambda, out_shift); + pOut2++; + pKappa++; + pLambda++; + + *pOut = pulp_nn_bn_quant_u8(sum4, *pKappa, *pLambda, out_shift); + pOut++; + *pOut2 = pulp_nn_bn_quant_u8(sum8, *pKappa, *pLambda, out_shift); + pOut2++; + pKappa++; + pLambda++; + } + else + { + if (flag_relu == 1) + { + *pOut = pulp_nn_quant_u8(sum, out_mult, out_shift); + pOut++; + *pOut = pulp_nn_quant_u8(sum2, out_mult, out_shift); + pOut++; + *pOut = pulp_nn_quant_u8(sum3, out_mult, out_shift); + pOut++; + *pOut = pulp_nn_quant_u8(sum4, out_mult, out_shift); + pOut++; + + *pOut2 = pulp_nn_quant_u8(sum5, out_mult, out_shift); + pOut2++; + *pOut2 = pulp_nn_quant_u8(sum6, out_mult, out_shift); + pOut2++; + *pOut2 = pulp_nn_quant_u8(sum7, out_mult, out_shift); + pOut2++; + *pOut2 = pulp_nn_quant_u8(sum8, out_mult, out_shift); + pOut2++; + + } + else + { + *pOut = (uint8_t) clip8(sum >> out_shift); + pOut++; + *pOut = (uint8_t) clip8(sum2 >> out_shift); + pOut++; + *pOut = (uint8_t) clip8(sum3 >> out_shift); + pOut++; + *pOut = (uint8_t) clip8(sum4 >> out_shift); + pOut++; + + *pOut2 = (uint8_t) clip8(sum5 >> out_shift); + pOut2++; + *pOut2 = (uint8_t) clip8(sum6 >> out_shift); + pOut2++; + *pOut2 = (uint8_t) clip8(sum7 >> out_shift); + pOut2++; + *pOut2 = (uint8_t) clip8(sum8 >> out_shift); + pOut2++; + + } + } + pA+=(3 * num_col_im2col_w); + } + while(chan_left) + { + uint8_t *pB = pIn; + uint8_t *pB2 = (pB + num_col_im2col_a); + + uint32_t *ptrB = (uint32_t *) pB; + uint32_t *ptrB2 = (uint32_t *) pB2; + + pA = pulp_nn_i2_to_i4(pA , vecA); + + int32_t *startA; + + asm volatile("mv %0, %1":"=r"(startA):"r"(vecA)); + + int32_t *ptrA = (int32_t *) vecA; + + ptrA = MacLoadInit(1, 0, 0, 0, ptrA); + + ptrB = MacLoadInit(0, 1, 0, 0, ptrB); + + int sum = 0; + if (pBias != NULL) + { + sum = *((int*) pBias++); + } + int sum2 = sum; + + for(int j=0; j < (num_col_im2col >> 4); j++) + { + ptrB2 = MacLoadInit(0, 1, 0, 1, ptrB2); + + sum = MacLoad8(0, 1, 0, 0, ptrB, sum); + ptrB = MacLoadUpdate(ptrB); + + sum2 = MacLoad8(1, 0, 0, 1, ptrA, sum2); + ptrA = MacLoadUpdate(ptrA); + ptrB2 = MacLoadInit(0, 1, 0, 1, ptrB2); + + sum = MacLoad8(0, 1, 0, 0, ptrB, sum); + ptrB = MacLoadUpdate(ptrB); + + pA = pulp_nn_i2_to_i4(pA , vecA); + + ptrA = MacLoadAssign(vecA); + + sum2 = MacLoad8(1, 0, 0, 1, ptrA, sum2); + ptrA = MacLoadUpdate(ptrA); + } + pA-=4; + int col_cnt_im2col = num_col_im2col & 0xf; + + if(col_cnt_im2col) + { + + uint16_t loop_cnt_im2col_a = (num_col_im2col >> 4) << 3; + pB+=loop_cnt_im2col_a; + pB2+=loop_cnt_im2col_a; + + do + { + int8_t inA = (int8_t) bitext((int) *pA, 2, 0); + + uint8_t inB = (uint8_t)bitextu((uint32_t) *pB, 4, 0); + uint8_t inB2 = (uint8_t)bitextu((uint32_t) *pB2, 4, 0); + + sum += inA * inB; + + sum2 += inA * inB2; + + inA = (int8_t) bitext((int) *pA, 2, 2); + + inB = (uint8_t)bitextu((uint32_t) *pB, 4, 4); + inB2 = (uint8_t)bitextu((uint32_t) *pB2, 4, 4); + + sum += inA * inB; + + sum2 += inA * inB2; + + pB++; + pB2++; + + inA = (int8_t) bitext((int) *pA, 2, 4); + + inB = (uint8_t)bitextu((uint32_t) *pB, 4, 0); + inB2 = (uint8_t)bitextu((uint32_t) *pB2, 4, 0); + + sum += inA * inB; + + sum2 += inA * inB2; + + inA = (int8_t) bitext((int) *pA, 2, 6); + + inB = (uint8_t)bitextu((uint32_t) *pB, 4, 4); + inB2 = (uint8_t)bitextu((uint32_t) *pB2, 4, 4); + + sum += inA * inB; + + sum2 += inA * inB2; + + pA++; + + pB++; + pB2++; + + col_cnt_im2col-=4; + } while(col_cnt_im2col > 0); + } + if (flag_batch_norm && flag_relu) + { + *pOut = pulp_nn_bn_quant_u8(sum, *pKappa, *pLambda, out_shift); + pOut++; + *pOut2 = pulp_nn_bn_quant_u8(sum2, *pKappa, *pLambda, out_shift); + pOut2++; + pKappa++; + pLambda++; + } + else + { + if (flag_relu == 1) + { + *pOut = pulp_nn_quant_u8(sum, out_mult, out_shift); + pOut++; + *pOut2 = pulp_nn_quant_u8(sum2, out_mult, out_shift); + pOut2++; + } + else + { + *pOut = (uint8_t) clip8(sum >> out_shift); + pOut++; + *pOut2 = (uint8_t) clip8(sum2 >> out_shift); + pOut2++; + } + } + chan_left--; + } + pOut+=ch_out_r; + return pOut; +} diff --git a/rt_nn_tests/xpnn_maxpool_2b/Makefile b/rt_nn_tests/xpnn_maxpool_2b/Makefile new file mode 100644 index 0000000..72619b7 --- /dev/null +++ b/rt_nn_tests/xpnn_maxpool_2b/Makefile @@ -0,0 +1,19 @@ +APP = test +PULP_APP = test +PULP_APP_SRCS = test.c +PULP_APP_SRCS += dory_dma.c +PULP_APP_SRCS += xpulp_nn_maxpool_i2.c + +CORE=8 + + +PULP_CFLAGS += -DNUM_CORES=$(CORE) -I. -O3 +PULP_LDFLAGS += -lc -lm -lgcc -Wl,-print-memory-usage + +PULP_APP_CFLAGS += -DNUM_CORES=$(CORE) -I. -O3 +PULP_APP_LDFLAGS += -lc -lm -lgcc -Wl,-print-memory-usage + +PULP_CFLAGS += -DPULP_RUNTIME -DSINGLE_CORE_DMA -DALWAYS_BLOCK_DMA_TRANSFERS + + +include $(PULP_SDK_HOME)/install/rules/pulp.mk diff --git a/rt_nn_tests/xpnn_maxpool_2b/data_statstest.h b/rt_nn_tests/xpnn_maxpool_2b/data_statstest.h new file mode 100644 index 0000000..91291ed --- /dev/null +++ b/rt_nn_tests/xpnn_maxpool_2b/data_statstest.h @@ -0,0 +1,10270 @@ +// this file is generated automatically by the python script `generate_statstest.py` + +#ifndef _DATA_H +#define _DATA_H + + + +#define IM2COL_DIM (32 * NUM_CORES * 2) // for NUM_CORES cores +#define OUTPUT_DIM 2048 +#define OUTPUT_DIM_FP (1) + +uint8_t pIn_0 [] = { +0xb7, +0xd3, +0x41, +0xbd, +0xa7, +0x84, +0xc9, +0x6c, +0xb7, +0x85, +0xef, +0xc3, +0xe6, +0xd1, +0x57, +0xda, +0x0a, +0x5a, +0x40, +0xcd, +0x0b, +0xd9, +0xf0, +0xbd, +0x01, +0x9c, +0x1a, +0x06, +0x55, +0xf8, +0xee, +0xcf, +0x62, +0x05, +0xdc, +0x27, +0xac, +0x99, +0xc0, +0xc4, +0xc3, +0x9a, +0x69, +0x04, +0x51, +0xf6, +0xf3, +0x08, +0x91, +0x8e, +0xd7, +0xae, +0x9d, +0xa6, +0x43, +0x4e, +0x72, +0xfb, +0xdd, +0x59, +0x39, +0x37, +0x69, +0x9b, +0x57, +0x94, +0xd7, +0x7b, +0x42, +0x0a, +0x9e, +0x3f, +0xe7, +0xeb, +0x54, +0x43, +0xc8, +0x0a, +0xa5, +0x03, +0x9e, +0x11, +0x6b, +0x3a, +0x7e, +0x6f, +0x6c, +0x18, +0xe7, +0x87, +0x7d, +0x6d, +0x42, +0x7b, +0x84, +0x90, +0x13, +0x38, +0xbc, +0xbb, +0x73, +0x80, +0x7a, +0x66, +0x38, +0x73, +0x2a, +0xed, +0x6f, +0x17, +0x86, +0x41, +0x16, +0x60, +0xe3, +0x2e, +0x41, +0x88, +0x91, +0x21, +0x4b, +0x9e, +0x5c, +0xdf, +0x7d, +0xbd, +0x87, +0xcb, +0xae, +0x7f, +0xa0, +0xf4, +0x09, +0xad, +0xbd, +0xb1, +0x48, +0xd9, +0x96, +0xfc, +0x9a, +0x92, +0xaf, +0x92, +0x0a, +0x49, +0x0c, +0x40, +0xf0, +0xa7, +0xb2, +0xbd, +0x1c, +0x91, +0x5e, +0x47, +0xcc, +0x4e, +0x9a, +0xc9, +0x16, +0x50, +0x50, +0xb9, +0xb6, +0x6f, +0xea, +0x1b, +0x75, +0xb7, +0x5d, +0x5a, +0xec, +0x47, +0x9a, +0x89, +0x36, +0xb2, +0x2e, +0x97, +0x4c, +0xd8, +0x3e, +0xb7, +0xfa, +0xaa, +0x4f, +0x2e, +0xe0, +0x68, +0x1d, +0xd7, +0xc9, +0xa3, +0x65, +0xa4, +0xff, +0x0a, +0xa3, +0x1f, +0xc1, +0x92, +0xf1, +0x17, +0x70, +0x55, +0xb7, +0x9c, +0x7c, +0xb2, +0x11, +0x1c, +0xc5, +0x0a, +0xfd, +0x6e, +0xfe, +0x5c, +0x28, +0xd9, +0x90, +0xf9, +0xbc, +0x5d, +0xf5, +0xf9, +0x9f, +0x47, +0x52, +0x49, +0x79, +0xcb, +0x8c, +0xec, +0x2c, +0xe9, +0x84, +0xe3, +0x66, +0x50, +0x18, +0xb7, +0x8a, +0x57, +0xd5, +0x8f, +0xb4, +0xc9, +0x37, +0xe2, +0x15, +0x49, +0x4d, +0xac, +0x05, +0x6c, +0xbe, +0x1a, +0x50, +0xf8, +0xa8, +0x94, +0x60, +0x3d, +0xfa, +0x90, +0x6d, +0x5b, +0x27, +0x22, +0x77, +0xa5, +0x20, +0x9b, +0xd2, +0xf1, +0x5c, +0x03, +0x8c, +0x04, +0x53, +0xcf, +0x1c, +0x6a, +0x0d, +0xfd, +0xba, +0x8a, +0x55, +0x95, +0x25, +0x65, +0x2c, +0x4d, +0x4b, +0x77, +0x6c, +0xc6, +0x46, +0xf1, +0x57, +0x2c, +0x1d, +0x41, +0x8b, +0xf4, +0x08, +0x62, +0x26, +0xd6, +0x14, +0x65, +0xe3, +0x8c, +0x63, +0x34, +0x7c, +0x64, +0xb1, +0x0e, +0xfb, +0x1b, +0x6c, +0x9c, +0x19, +0xff, +0xcd, +0xfc, +0x7d, +0xf3, +0x8c, +0x4b, +0x61, +0xb8, +0xeb, +0xd9, +0x6b, +0x5b, +0x79, +0xb4, +0x3e, +0x10, +0x4c, +0x1b, +0x98, +0xd2, +0x1a, +0x62, +0xf7, +0x30, +0xea, +0xe6, +0xcf, +0x1c, +0x46, +0xba, +0x57, +0x1e, +0x4e, +0x73, +0x02, +0xbb, +0x5b, +0x27, +0x1b, +0xe8, +0xe8, +0x7b, +0x20, +0x95, +0x70, +0xa9, +0x87, +0x0a, +0x36, +0x83, +0xc8, +0x1a, +0x03, +0x8e, +0xd9, +0x10, +0x9c, +0x04, +0x14, +0xe2, +0xed, +0x31, +0x43, +0xd2, +0x76, +0x75, +0x5f, +0x30, +0xc5, +0x4c, +0x7b, +0x86, +0xdd, +0x35, +0x42, +0xbe, +0x90, +0xad, +0xb6, +0x3a, +0x1c, +0x7f, +0x67, +0xfd, +0x9f, +0xa3, +0xd7, +0xf3, +0xdf, +0xbb, +0x8d, +0x16, +0x20, +0x51, +0xa0, +0xe7, +0x9b, +0x68, +0x0f, +0x75, +0xfd, +0xbc, +0xa3, +0x58, +0x98, +0x7b, +0xaa, +0xb2, +0x8b, +0xba, +0x6f, +0xe3, +0x36, +0xd8, +0x89, +0xbb, +0xbf, +0xf1, +0x97, +0x5c, +0x9b, +0xa4, +0xb8, +0x83, +0xc0, +0x39, +0x2a, +0x78, +0xba, +0xbf, +0x87, +0x92, +0xcd, +0xe8, +0x96, +0x56, +0xa9, +0x18, +0x57, +0xc0, +0xf3, +0x19, +0x0b, +0x70, +0x84, +0xa7, +0x60, +0x18, +0x64, +0x55, +0x44, +0xc8, +0xcb, +0xa7, +0x19, +0xb4, +0x80, +0x28, +0x68, +0xcb, +0xfb, +0x05, +0xbc, +0xce, +0x90, +0x58, +0xdb, +0x1b, +0x2e, +0xd4, +0x7a, +0xd2, +0x73, +0x64, +0x4e, +0x5a, +0x88, +0x55, +0xc1, +0x27, +0x23, +0x77, +0xc8, +0xbb, +0x3f, +0x1b, +0x06, +0xbf, +0x30, +0x41, +0xbb, +0xcc, +0xa7, +0xda, +0x58, +0x20, +0xe5, +0x85, +0xc6, +0x08, +0x16, +0x4d, +0x2a, +0x1e, +0x0b, +0x7a, +0x99, +0xf9, +0xc7, +0x31, +0x2f, +0xc5, +0xea, +0xc1, +0xb1, +0xb2, +0x62, +0x90, +0xcd, +0xa3, +0x1f, +0x10, +0xb4, +0xe8, +0x18, +0x4d, +0xa8, +0x6e, +0x3c, +0xf2, +0xbc, +0x8d, +0xcd, +0xcb, +0xce, +0x6d, +0x31, +0x13, +0xad, +0x38, +0xb1, +0x7a, +0xc8, +0x53, +0x86, +0x5c, +0x85, +0x4e, +0x85, +0x91, +0x19, +0xc0, +0x2f, +0xcd, +0xdb, +0x3a, +0x87, +0xfa, +0x72, +0x70, +0x2b, +0xdb, +0x5f, +0xdc, +0x50, +0xf5, +0xf9, +0x77, +0x01, +0xb1, +0x67, +0x60, +0xd5, +0xdc, +0x8f, +0x6c, +0xaf, +0x16, +0xb7, +0xdb, +0x05, +0xc3, +0x54, +0x3e, +0x04, +0xa6, +0xe2, +0x6b, +0xb4, +0x65, +0x6d, +0x29, +0xf3, +0x2d, +0x91, +0xa7, +0xec, +0xa5, +0x25, +0x27, +0x5f, +0xd3, +0x75, +0x32, +0x70, +0x59, +0xbe, +0x04, +0x15, +0xcd, +0xf8, +0xc9, +0x98, +0xfa, +0x5f, +0x01, +0xe7, +0x7c, +0x4b, +0xe0, +0xfa, +0x97, +0xea, +0xea, +0xbb, +0x7d, +0xbb, +0x5d, +0x72, +0x93, +0xac, +0xb6, +0xac, +0x90, +0xdd, +0x42, +0xd1, +0xb6, +0xf6, +0x4a, +0x0e, +0x70, +0x36, +0x31, +0x10, +0x3f, +0x5a, +0xf9, +0xa8, +0xfd, +0x57, +0x84, +0x05, +0x16, +0x1a, +0x3d, +0x10, +0x58, +0x76, +0x49, +0xb7, +0xf0, +0x23, +0xdb, +0x71, +0xfb, +0x4a, +0xa5, +0x27, +0xec, +0xde, +0x65, +0xa5, +0x51, +0xa1, +0x07, +0xab, +0x10, +0x8d, +0x6a, +0x80, +0x61, +0x27, +0x22, +0xc0, +0x61, +0x4e, +0x51, +0x4f, +0x21, +0x44, +0x8a, +0xdb, +0x26, +0xee, +0x78, +0xed, +0xa2, +0xdd, +0x59, +0xc0, +0x7a, +0xa0, +0x09, +0x7d, +0x83, +0x4b, +0x2b, +0x09, +0x80, +0x9a, +0x2e, +0x4a, +0x9b, +0x28, +0x53, +0x79, +0xc4, +0xf0, +0x6e, +0x0e, +0xff, +0x2e, +0x15, +0xf8, +0xa0, +0xec, +0xb0, +0xd3, +0xd3, +0x16, +0x5f, +0xdd, +0x80, +0xfe, +0xd3, +0x2b, +0xb7, +0x8e, +0x53, +0x0b, +0x20, +0x1d, +0xeb, +0x52, +0x05, +0xb3, +0x7f, +0x0a, +0xf1, +0x2f, +0x11, +0x86, +0xb2, +0xf2, +0xfc, +0x42, +0x87, +0xd2, +0x4f, +0x50, +0x5f, +0x9e, +0x73, +0x15, +0xaf, +0xc5, +0x94, +0x14, +0xfa, +0x65, +0x12, +0xf0, +0x6a, +0x43, +0xa8, +0x66, +0x11, +0x8d, +0xf9, +0xde, +0x96, +0xac, +0x72, +0x9d, +0x16, +0x7a, +0x3a, +0x2a, +0xdd, +0x7c, +0x3c, +0xfe, +0x11, +0x35, +0xe7, +0xfd, +0x8b, +0xeb, +0xe1, +0x33, +0x92, +0x59, +0xb9, +0xff, +0x52, +0x1c, +0x41, +0x95, +0x11, +0xcb, +0x5f, +0xc9, +0x90, +0xf0, +0x50, +0x48, +0xa6, +0x99, +0x53, +0x3d, +0x7a, +0x79, +0x78, +0xd9, +0x65, +0x40, +0x86, +0x3a, +0x3b, +0x32, +0xcb, +0xb7, +0x32, +0x21, +0x7c, +0x4d, +0x80, +0xba, +0xf6, +0x29, +0x13, +0x2d, +0xb0, +0xae, +0xdf, +0x32, +0x5c, +0x9f, +0x47, +0xc1, +0xd1, +0xb9, +0xf3, +0xda, +0x67, +0x7d, +0x21, +0x02, +0xf0, +0x1e, +0x7e, +0xc0, +0x9d, +0xd4, +0x68, +0x4e, +0x27, +0x01, +0xe6, +0x1c, +0xe5, +0xa8, +0x30, +0xd8, +0x0d, +0x87, +0x5d, +0xb7, +0x36, +0x4e, +0x29, +0xae, +0x14, +0xe4, +0xab, +0x37, +0x81, +0xdb, +0x2a, +0x76, +0xb8, +0x75, +0x93, +0x39, +0x84, +0x2b, +0xb0, +0xd6, +0xa7, +0x1f, +0x31, +0x2e, +0xda, +0x09, +0xf4, +0xc8, +0xc5, +0x64, +0x10, +0xaa, +0xf4, +0xcf, +0x74, +0x3c, +0x98, +0xc8, +0x48, +0xb8, +0xea, +0xd2, +0x47, +0x1e, +0x96, +0xce, +0x71, +0x47, +0x44, +0x8f, +0xde, +0x7a, +0x01, +0x8d, +0x3d, +0x37, +0x1f, +0xd8, +0xc1, +0x21, +0xe3, +0xa2, +0x3d, +0x51, +0x82, +0x5e, +0x13, +0x4b, +0x08, +0x76, +0x6c, +0x17, +0x67, +0x9a, +0xfb, +0x21, +0x46, +0x97, +0xe0, +0xd8, +0xf3, +0x1a, +0x74, +0x5e, +0x48, +0xab, +0x33, +0xc7, +0x05, +0xa6, +0x9b, +0x42, +0x88, +0x31, +0xed, +0xf6, +0x7c, +0xe9, +0x07, +0x05, +0xea, +0xff, +0x0a, +0x43, +0x3f, +0xe2, +0x98, +0x30, +0x61, +0x17, +0xe9, +0x2f, +0x31, +0xae, +0x87, +0x0d, +0xe1, +0x66, +0x2f, +0x57, +0xe0, +0xe4, +0x34, +0x1b, +0xc7, +0x92, +0x4b, +0xee, +0x1a, +0x69, +0x73, +0x14, +0x4d, +0x51, +0x07, +0x04, +0xe5, +0x97, +0x91, +0xea, +0xa9, +0x7b, +0x06, +0xb9, +0x54, +0xbe, +0x2f, +0x8d, +0x6e, +0x4f, +0xca, +0x8d, +0x17, +0xb8, +0x18, +0x2e, +0xa5, +0x31, +0x9f, +0x9b, +0x28, +0x21, +0x5f, +0xcc, +0x95, +0xe2, +0x79, +0x72, +0x0c, +0xcb, +0x6a, +0x5f, +0xa2, +0x28, +0x8e, +0x8e, +0x85, +0x2d, +0xcc, +0x59, +0x0e, +0xaf, +0x00, +0x34, +0xad, +0xda, +0x9a, +0x0a, +0xda, +0x44, +0x07, +0x1e, +0x4b, +0x7c, +0x6e, +0xb7, +0xa9, +0x72, +0x66, +0x88, +0xc7, +0xe9, +0xd6, +0x72, +0x32, +0xc8, +0xb2, +0xe1, +0x9b, +0xa0, +0x39, +0x25, +0xe0, +0xd6, +0xf6, +0x85, +0xda, +0x5f, +0x8d, +0x13, +0xc9, +0x26, +0x1c, +0x21, +0x0c, +0x78, +0x72, +0x56, +0xb5, +0x7a, +0x0c, +0xb3, +0xd4, +0x04, +0xc0, +0x58, +0x63, +0x89, +0xfd, +0x2c, +0x02, +0x98, +0x91, +0x21, +0x80, +0xb7, +0xf6, +0x3b, +0x5e, +0x3d, +0x1e, +0xa5, +0x9d, +0xcc, +0xeb, +0x0f, +0x31, +0xf4, +0x3b, +0xbb, +0x06, +0x9b, +0x4d, +0x5c, +0xa7, +0xf5, +0xfb, +0x85, +0xca, +0xaf, +0xe4, +0x9e, +0x4e, +0x5e, +0x31, +0x53, +0x3d, +0x6e, +0x94, +0x4c, +0x5c, +0x3d, +0x7b, +0x92, +0xd6, +0x6b, +0x2f, +0x5b, +0x26, +0x2f, +0xe7, +0xc1, +0x79, +0xde, +0xe5, +0x4a, +0x73, +0xcb, +0xeb, +0x7d, +0x56, +0x9a, +0x49, +0x33, +0xcd, +0xb2, +0xc8, +0xa2, +0x4b, +0x47, +0x41, +0x6b, +0x6b, +0xb5, +0x66, +0x78, +0x05, +0xf4, +0xc9, +0xc2, +0x9e, +0x77, +0x69, +0x5f, +0x39, +0x50, +0xeb, +0x77, +0x6e, +0xe9, +0xb9, +0xd3, +0x22, +0xe2, +0xa9, +0x30, +0x03, +0xdb, +0xb2, +0xea, +0xae, +0x10, +0x8b, +0x46, +0x6b, +0x9c, +0xf8, +0xea, +0x88, +0x47, +0x62, +0x78, +0x89, +0x4c, +0x5e, +0x5e, +0xff, +0x7a, +0x4e, +0x24, +0x33, +0x0e, +0x4d, +0x43, +0x02, +0x68, +0x92, +0x1b, +0x6d, +0xe6, +0xe5, +0x94, +0xeb, +0x40, +0x8c, +0x77, +0x4c, +0x50, +0x36, +0x26, +0x9d, +0x9f, +0x6e, +0xea, +0x4c, +0xf5, +0xeb, +0xf1, +0x6c, +0x3c, +0x06, +0x9e, +0xea, +0x17, +0xcd, +0x48, +0x8f, +0x29, +0xec, +0x9a, +0x11, +0xb2, +0x47, +0xff, +0x75, +0x23, +0x22, +0x15, +0x2f, +0x5c, +0xa1, +0x7a, +0x8f, +0x20, +0x4b, +0x2f, +0xc6, +0x2c, +0x3b, +0x5d, +0x67, +0xbd, +0x67, +0xcf, +0x66, +0x87, +0x2a, +0x9a, +0x49, +0xcc, +0x49, +0x66, +0xd1, +0x17, +0xb1, +0x65, +0x0d, +0xe6, +0x14, +0x9a, +0x57, +0x84, +0x5a, +0x55, +0x00, +0x70, +0x32, +0x56, +0x09, +0xa7, +0x2a, +0xfd, +0x94, +0xb6, +0x81, +0x8c, +0x38, +0x46, +0x0b, +0x7f, +0x52, +0x53, +0x2a, +0x90, +0xd1, +0x1c, +0xd8, +0x35, +0xb6, +0xea, +0xec, +0xdc, +0xae, +0x16, +0xa6, +0x76, +0x29, +0x2d, +0xc7, +0x06, +0xb5, +0x10, +0x97, +0x28, +0x3c, +0xdd, +0x0b, +0x94, +0x08, +0x97, +0x82, +0xa1, +0x1b, +0x66, +0x86, +0x51, +0x03, +0x89, +0x1e, +0x2d, +0x5a, +0xb6, +0x56, +0xd8, +0xc9, +0x26, +0xc0, +0x51, +0x6a, +0xb6, +0x7c, +0x99, +0x32, +0xd3, +0x8c, +0xe8, +0x76, +0xb4, +0x87, +0x65, +0x99, +0x60, +0xfa, +0x6c, +0x17, +0xa5, +0x47, +0x31, +0x25, +0x0b, +0x25, +0x85, +0xc2, +0xb4, +0xb2, +0x38, +0x72, +0x4b, +0xe6, +0x59, +0x40, +0xf5, +0x70, +0x5c, +0x50, +0x86, +0xa4, +0xe1, +0x77, +0x3a, +0xe3, +0x4c, +0x7a, +0xc2, +0x9d, +0x08, +0x0c, +0x7c, +0xcb, +0x3b, +0xf1, +0xd0, +0x5f, +0x1a, +0xde, +0x31, +0x2b, +0xc0, +0xd2, +0x3f, +0xff, +0xe2, +0xbe, +0x3e, +0x07, +0xa5, +0x47, +0xe2, +0x1f, +0x2e, +0xcf, +0x87, +0xa3, +0xe2, +0x59, +0x71, +0x2c, +0x3a, +0xb4, +0xd0, +0x78, +0xff, +0xb1, +0xe3, +0x76, +0xa2, +0xf2, +0x05, +0xb2, +0xd7, +0x1f, +0x4b, +0x6c, +0x93, +0xe7, +0xf6, +0x29, +0x53, +0xec, +0x7f, +0xb9, +0x12, +0x30, +0x88, +0x01, +0xb5, +0xe9, +0x5b, +0x90, +0x37, +0x31, +0x3d, +0xba, +0x5f, +0x17, +0x20, +0x65, +0x84, +0xbf, +0x3b, +0x89, +0x0d, +0x28, +0xcb, +0x6e, +0x9f, +0x51, +0xb3, +0x58, +0xb0, +0x6f, +0xc3, +0x34, +0x03, +0x1f, +0x58, +0xf0, +0x7f, +0xe8, +0x13, +0x47, +0x7f, +0x55, +0x80, +0xeb, +0x55, +0x2f, +0x7e, +0xd1, +0x61, +0x35, +0x6c, +0x95, +0x87, +0x27, +0x7c, +0x83, +0x13, +0x6b, +0x3b, +0x81, +0xdf, +0x89, +0xcb, +0xa5, +0x22, +0xe5, +0x7a, +0x23, +0x35, +0x41, +0x26, +0x90, +0x6b, +0x62, +0x90, +0x2f, +0x21, +0x68, +0x5c, +0x2f, +0x0a, +0xb3, +0xaa, +0xed, +0x22, +0x75, +0x12, +0xff, +0x0e, +0xbf, +0xf7, +0x71, +0xca, +0xee, +0xa5, +0x56, +0x82, +0x65, +0x7c, +0xe2, +0x53, +0x53, +0x86, +0x9c, +0x36, +0x72, +0x13, +0x7b, +0x43, +0x64, +0xa5, +0x5a, +0x96, +0x30, +0xb7, +0x4f, +0xea, +0xcd, +0x23, +0x6a, +0x37, +0x35, +0x1d, +0x42, +0x0f, +0x8f, +0x1c, +0x52, +0xad, +0xa7, +0xa7, +0xfc, +0xc5, +0xa0, +0x21, +0xcd, +0x0d, +0x13, +0x4f, +0x9d, +0xad, +0xe9, +0x03, +0x5c, +0x36, +0x65, +0xff, +0xb1, +0xb8, +0xc5, +0xd4, +0x4d, +0x36, +0x47, +0x90, +0x65, +0xd1, +0xca, +0xf7, +0x60, +0x10, +0xdc, +0xf7, +0x32, +0xd2, +0xb9, +0xc6, +0x28, +0x63, +0x4a, +0x47, +0xf9, +0xc7, +0xd6, +0x2d, +0x29, +0xb1, +0x3c, +0xf4, +0x91, +0x62, +0xec, +0x17, +0x1c, +0x2c, +0xc3, +0xb9, +0x7e, +0x96, +0x49, +0xb0, +0x39, +0xc9, +0xd4, +0x2c, +0x8c, +0xc1, +0xe1, +0x60, +0x33, +0x97, +0x28, +0x26, +0x20, +0x57, +0x65, +0xb8, +0xf4, +0x7b, +0xcf, +0xa0, +0x29, +0x54, +0x9b, +0x82, +0x75, +0x35, +0x61, +0x15, +0xb0, +0xbd, +0x9c, +0xdd, +0x8d, +0x8c, +0x41, +0x45, +0x86, +0xdb, +0xa4, +0xdf, +0xbb, +0xf5, +0x52, +0x89, +0x23, +0xb7, +0x10, +0xba, +0x17, +0xf6, +0x56, +0x08, +0x2c, +0xac, +0x64, +0x32, +0x48, +0x16, +0x2e, +0x47, +0xce, +0x07, +0x7e, +0x42, +0x48, +0x0e, +0x24, +0x50, +0x49, +0xe3, +0xc9, +0xb5, +0x90, +0x66, +0x0b, +0xf2, +0x01, +0xe8, +0x9b, +0x5f, +0x7d, +0xa0, +0x20, +0x14, +0x4e, +0x47, +0xbc, +0x82, +0xc3, +0xce, +0xb3, +0x60, +0xdc, +0xef, +0x42, +0xed, +0x02, +0x68, +0x64, +0x01, +0x7d, +0xbf, +0xef, +0x1b, +0xc3, +0xdd, +0xe4, +0xfa, +0xa4, +0x02, +0x3e, +0x7c, +0xf6, +0x60, +0x94, +0xd2, +0xa0, +0xbd, +0x58, +0xda, +0xff, +0xe7, +0x2a, +0x51, +0x6e, +0x30, +0x7a, +0x09, +0xac, +0x55, +0xce, +0xb5, +0xe0, +0x7a, +0x39, +0x2f, +0x53, +0x56, +0x25, +0xa2, +0x7c, +0x19, +0xec, +0x07, +0x07, +0xf6, +0xbb, +0xc3, +0xb3, +0xe1, +0x3a, +0x35, +0x9c, +0x45, +0xc0, +0x24, +0x71, +0x39, +0x60, +0xf8, +0x96, +0xa5, +0xe7, +0x5c, +0x6a, +0x73, +0x62, +0xf8, +0xda, +0x20, +0xef, +0x08, +0xe6, +0xa9, +0x8d, +0xb7, +0x59, +0x45, +0x46, +0xc1, +0x66, +0x18, +0x6a, +0x25, +0x62, +0xdd, +0x11, +0xa1, +0xf1, +0x0e, +0xdd, +0x4e, +0x2b, +0x43, +0x52, +0x0b, +0xd7, +0xe5, +0x67, +0xce, +0x0b, +0xdf, +0x08, +0x84, +0x23, +0x73, +0x99, +0xf3, +0x77, +0x3a, +0x90, +0x24, +0x53, +0xee, +0xf9, +0x0c, +0x6f, +0xf5, +0x0a, +0x6f, +0xa5, +0xc2, +0xda, +0x3a, +0x78, +0x23, +0x32, +0x4d, +0x9b, +0x8e, +0x3c, +0x4c, +0x81, +0x69, +0x7f, +0x96, +0xcc, +0xe0, +0xe2, +0x05, +0xfc, +0xec, +0x76, +0x7f, +0x85, +0x0c, +0xec, +0x32, +0x73, +0xb9, +0x01, +0xa8, +0x1c, +0x00, +0x69, +0x0e, +0x0e, +0xe0, +0xd4, +0x49, +0x05, +0xc6, +0xb9, +0x78, +0x6c, +0x94, +0x3c, +0x7a, +0xab, +0x32, +0x42, +0x07, +0x31, +0xce, +0xc9, +0xcd, +0x0d, +0xc4, +0xce, +0x36, +0x02, +0x96, +0xd5, +0x51, +0x58, +0x64, +0xd5, +0x01, +0xe0, +0x72, +0xcf, +0x81, +0xf0, +0xc3, +0xd4, +0x75, +0x96, +0x7a, +0x4d, +0x6a, +0x6a, +0xa0, +0x40, +0xf2, +0xce, +0x1e, +0x01, +0xfb, +0xa5, +0x97, +0xfa, +0x3c, +0xdd, +0x7c, +0xac, +0xf3, +0x5c, +0xf4, +0xe8, +0xcc, +0x8e, +0x4d, +0xb4, +0xc7, +0xd6, +0x47, +0xc5, +0x4d, +0x24, +0x44, +0x6a, +0x43, +0x33, +0x38, +0x84, +0x69, +0xbc, +0x1d, +0x62, +0xa0, +0x98, +0xa5, +0x82, +0xfc, +0x5a, +0x71, +0x53, +0xbe, +0x78, +0xa0, +0x09, +0xc6, +0xc2, +0x10, +0x30, +0xd3, +0xea, +0xcb, +0x1f, +0x61, +0x8c, +0xd3, +0xd9, +0x28, +0x5b, +0xf5, +0x1a, +0x9d, +0xaf, +0x42, +0xbf, +0xbe, +0xca, +0x2e, +0x88, +0xe4, +0x8f, +0xcd, +0x16, +0x34, +0xc5, +0x77, +0x50, +0x37, +0xd1, +0xe9, +0x2a, +0xbf, +0xd1, +0x77, +0x56, +0xed, +0x74, +0xa3, +0x1c, +0x26, +0x08, +0x4d, +0x36, +0xf3, +0x79, +0xd5, +0x13, +0xb4, +0xce, +0x62, +0xdc, +0x47, +0xd5, +0xa8, +0xee, +0xe9, +0x7c, +0x42, +0x02, +0xf9, +0x9e, +0xe5, +0x15, +0xeb, +0xd9, +0xdc, +0x2c, +0xf5, +0x50, +0x3d, +0x58, +0xa8, +0x98, +0x74, +0xb4, +0x22, +0x85, +0x71, +0x91, +0xb9, +0x3c, +0xc4, +0x4d, +0x1c, +0xa5, +0xc8, +0x86, +0xd6, +0xb0, +0xe6, +0x1f, +0xbc, +0x29, +0x2b, +0xaf, +0x6f, +0x2d, +0xfc, +0x7a, +0x8e, +0x6f, +0xca, +0x34, +0x2e, +0x64, +0xda, +0xb4, +0x0f, +0xc9, +0x2d, +0x28, +0x2f, +0x36, +0xc9, +0xd9, +0x53, +0xc9, +0xd0, +0x81, +0x03, +0xdd, +0x08, +0xd5, +0xfc, +0xf9, +0x59, +0x45, +0x76, +0x7e, +0x20, +0xbf, +0x4f, +0x55, +0x00, +0x48, +0x45, +0x9d, +0x1c, +0x2f, +0x09, +0x20, +0xe9, +0x27, +0xcf, +0x00, +0x6f, +0x48, +0x0d, +0xf0, +0x00, +0x18, +0x58, +0x4e, +0x8e, +0x51, +0x61, +0x8f, +0xa9, +0x15, +0x43, +0x72, +0xab, +0xdc, +0x1a, +0xe6, +0x7d, +0xfd, +0x21, +0x94, +0xf4, +0x5c, +0x2e, +0x88, +0x81, +0x82, +0xf3, +0x45, +0xd4, +0x48, +0x92, +0x5d, +0x76, +0xf6, +0x97, +0xcf, +0x0a, +0x8a, +0xb1, +0x4d, +0x2f, +0x31, +0x04, +0x26, +0xee, +0x15, +0x77, +0x88, +0x91, +0x06, +0xcb, +0x31, +0x8f, +0x2a, +0xe5, +0x4a, +0x54, +0x22, +0x9e, +0x12, +0xf5, +0x83, +0x99, +0x12, +0xe4, +0x10, +0x77, +0x59, +0x15, +0x59, +0x51, +0xa8, +0xa3, +0xc3, +0x8f, +0xe9, +0x33, +0xeb, +0xb9, +0x0c, +0xb4, +0xdf, +0x7c, +0xc2, +0xdc, +0xe0, +0x65, +0xfc, +0xd2, +0x70, +0x84, +0xaa, +0x81, +0xac, +0xd1, +0x29, +0xf6, +0x9a, +0x78, +0x8b, +0xe1, +0x0c, +0x12, +0x3b, +0x70, +0x96, +0x32, +0xba, +0xf7, +0x6a, +0x04, +0xa2, +0x74, +0xb0, +0x77, +0xd7, +0x69, +0x69, +0x43, +0x27, +0xc4, +0x8b, +0x9c, +0x1a, +0x26, +0x74, +0xfd, +0x8e, +0x42, +0x7c, +0x35, +0x84, +0x51, +0xdb, +0x88, +0x2d, +0x83, +0x1e, +0x2e, +0x8b, +0xb5, +0xfa, +0x15, +0xc7, +0xaa, +0x43, +0x2e, +0x50, +0x91, +0x6a, +0xdb, +0xf9, +0x26, +0xd8, +0x76, +0xa3, +0xe8, +0x54, +0x11, +0x34, +0xd2, +0x8a, +0x2f, +0x50, +0x0a, +0x3e, +0x19, +0x5e, +0x76, +0x9b, +0x68, +0x52, +0x83, +0x6e, +0x7a, +0x04, +0x59, +0x5c, +0xbf, +0x77, +0x20, +0xd2, +0x23, +0xb0, +0x9a, +0xe2, +0xe3, +0x27, +0x32, +0x03, +0xa2, +0xaf, +0xbe, +0xf6, +0xf5, +0x87, +0x4a, +0x60, +0xd8, +0xca, +0x20, +0xf7, +0x40, +0x3d, +0xae, +0x23, +0x9e, +0xdf, +0x68, +0x2a, +0x30, +0x0a, +0x6c, +0xb0, +0x01, +0x9c, +0xee, +0x4f, +0xe4, +0x4f, +0x5f, +0xb1, +0x11, +0xce, +0x28, +0xaf, +0x27, +0xb5, +0x13, +0xa1, +0x76, +0xb9, +0x81, +0xa5, +0xbb, +0x38, +0x5a, +0xa1, +0xd7, +0x27, +0x00, +0x8a, +0x3e, +0x72, +0xb4, +0x9e, +0x31, +0x61, +0x27, +0x71, +0x63, +0xa7, +0xc0, +0xdd, +0x48, +0x50, +0x0f, +0x1a, +0xd8, +0x7e, +0x97, +0x52, +0xc5, +0xf1, +0xfe, +0x28, +0x5c, +0x4c, +0xfa, +0xd6, +0xd4, +0x85, +0x6d, +0x40, +0x02, +0x82, +0x46, +0x6c, +0x3e, +0x5d, +0xf0, +0x2f, +0x31, +0xa6, +0x65, +0x91, +0x83, +0xa6, +0x20, +0xdc, +0xc2, +0xb3, +0xbe, +0x85, +0x15, +0xaa, +0x84, +0x72, +0xc5, +0x2e, +0xa0, +0x2c, +0xc2, +0x5d, +0xf4, +0xa9, +0x64, +0x60, +0xc4, +0x07, +0xef, +0xee, +0x0b, +0x91, +0x54, +0x0a, +0x5e, +0xb5, +0xb8, +0xa9, +0x49, +0xbc, +0xb0, +0x0f, +0x0b, +0x4c, +0xf0, +0x50, +0x11, +0xac, +0x11, +0x38, +0xfe, +0x91, +0x1d, +0x7e, +0x8d, +0x39, +0x29, +0x48, +0x66, +0x31, +0x94, +0xaf, +0xb5, +0xbf, +0xe1, +0xd2, +0x5d, +0x44, +0x83, +0xb4, +0xe2, +0x7c, +0xf2, +0x81, +0x79, +0x8e, +0xf2, +0x95, +0x17, +0xe7, +0xfa, +0x5f, +0xa4, +0xf0, +0xb4, +0x32, +0xcd, +0xaa, +0xad, +0xdb, +0x9b, +0x9c, +0x1c, +0x20, +0x75, +0xf0, +0xae, +0x37, +0xc5, +0x3d, +0x4d, +0x86, +0x31, +0xc6, +0xdd, +0x2e, +0x67, +0x97, +0x43, +0x99, +0x67, +0x4d, +0x0b, +0x95, +0x49, +0xf1, +0x6c, +0xb0, +0xe3, +0x8a, +0xfa, +0x26, +0x7b, +0x44, +0x11, +0x35, +0x79, +0x7e, +0xa9, +0x44, +0x65, +0x94, +0x66, +0xf7, +0x93, +0x7b, +0x4b, +0xd8, +0x6c, +0xc1, +0x7a, +0xca, +0x6a, +0x82, +0x8c, +0xc0, +0xa0, +0x5d, +0xfc, +0x9c, +0x1c, +0x51, +0x62, +0x5d, +0x21, +0x94, +0xda, +0x05, +0x9a, +0x25, +0x69, +0x13, +0x37, +0x19, +0x06, +0xd1, +0x59, +0x03, +0xca, +0x10, +0x1b, +0x0a, +0xfb, +0x73, +0xfb, +0xf5, +0xfe, +0x5b, +0xd6, +0x55, +0x02, +0x2f, +0x1d, +0x4c, +0xd1, +0x8f, +0x2a, +0xba, +0x75, +0xc8, +0xb1, +0x0e, +0xc4, +0x4f, +0x7c, +0xc2, +0x2b, +0x69, +0x90, +0x99, +0x83, +0x98, +0x23, +0x3a, +0x4e, +0x89, +0x8f, +0x50, +0xff, +0x8e, +0x0a, +0x75, +0xf4, +0xc9, +0x3d, +0x10, +0x2d, +0xea, +0x79, +0x9c, +0xf7, +0x9f, +0xac, +0x94, +0xdd, +0x5d, +0xf9, +0xb6, +0x6d, +0x82, +0x67, +0x95, +0x6e, +0xae, +0xe2, +0x2c, +0x7e, +0x01, +0x2c, +0xc3, +0x56, +0x6c, +0x75, +0x59, +0xf2, +0xca, +0x2e, +0xa4, +0x4e, +0xb1, +0x83, +0x4f, +0x51, +0x39, +0x76, +0x5e, +0x78, +0x2a, +0x2b, +0x48, +0xc2, +0x95, +0x63, +0x1a, +0xda, +0xb3, +0xbf, +0x1a, +0x5e, +0x78, +0x4b, +0x95, +0x47, +0x0b, +0x80, +0xf8, +0xf4, +0x9b, +0x27, +0x03, +0x21, +0x2f, +0x49, +0x66, +0xdf, +0x7d, +0xad, +0x9b, +0xa9, +0xf3, +0x26, +0xe2, +0x3c, +0x17, +0x9f, +0x29, +0xc8, +0xa3, +0x23, +0x4a, +0x50, +0xa1, +0x74, +0x9c, +0xda, +0x01, +0xfd, +0xd8, +0xe7, +0xed, +0x72, +0x70, +0x98, +0x6c, +0x3a, +0xd8, +0x88, +0xd7, +0xc6, +0x81, +0x89, +0xf1, +0xa4, +0x3d, +0x4c, +0x3c, +0x57, +0xe5, +0xfa, +0xe3, +0x6f, +0x04, +0x01, +0xe4, +0x7f, +0xba, +0x2b, +0x05, +0x6e, +0xc8, +0xe9, +0x52, +0x49, +0x8a, +0x7a, +0x5c, +0xca, +0x0f, +0xdb, +0x58, +0x1f, +0xe4, +0xbd, +0xf5, +0x8c, +0xe5, +0x7c, +0xa0, +0xb3, +0xd9, +0x00, +0x95, +0xe4, +0x05, +0xe4, +0x3a, +0x4b, +0x67, +0xf4, +0x51, +0xca, +0x26, +0x9e, +0x55, +0xdd, +0xbd, +0x14, +0x2f, +0x50, +0x29, +0x0f, +0x02, +0xb2, +0x42, +0x0a, +0xc3, +0x45, +0xa2, +0x67, +0xef, +0x48, +0x6b, +0x5c, +0x58, +0xc3, +0x5e, +0xc3, +0x10, +0x87, +0x1e, +0x14, +0x2d, +0x07, +0x1a, +0x55, +0xe1, +0x46, +0x6f, +0x9e, +0x0f, +0xa5, +0x7e, +0xb1, +0x79, +0xe1, +0x21, +0x09, +0x52, +0xc2, +0x50, +0xcc, +0xe5, +0x05, +0xf5, +0x57, +0x88, +0x21, +0x2c, +0xd7, +0xc1, +0x2b, +0x77, +0x44, +0xc2, +0x4e, +0x3f, +0xf0, +0xea, +0x7f, +0x6a, +0x4f, +0x97, +0xe1, +0x36, +0xaf, +0x7d, +0x1f, +0x12, +0xdc, +0x65, +0x3b, +0xcd, +0x07, +0xc2, +0x6f, +0xdf, +0xe7, +0x39, +0x18, +0x54, +0xd3, +0x3a, +0x64, +0x84, +0x34, +0x08, +0xc8, +0x3e, +0xa8, +0xdf, +0x4e, +0xc8, +0x0d, +0x48, +0x61, +0x2b, +0x9a, +0xdc, +0xe8, +0xfa, +0xf0, +0x37, +0x9b, +0xaf, +0x06, +0x8b, +0x78, +0x0f, +0x67, +0xc2, +0x5b, +0x6b, +0xa4, +0x01, +0x40, +0x51, +0xa9, +0x4a, +0x9b, +0x01, +0xd2, +0xde, +0x31, +0x1d, +0x46, +0xe4, +0xbc, +0xd0, +0x93, +0x57, +0x16, +0x91, +0x79, +0x67, +0x12, +0x3b, +0x83, +0x95, +0x21, +0x2f, +0xec, +0xf1, +0x62, +0x4f, +0x24, +0x5b, +0xdc, +0xfe, +0x19, +0xec, +0x45, +0x1c, +0x9f, +0x8d, +0x1c, +0x7c, +0x13, +0x50, +0x54, +0x29, +0x6b, +0xe7, +0x03, +0x73, +0x29, +0x5f, +0xd8, +0x5e, +0x05, +0x51, +0x94, +0xb7, +0x08, +0x40, +0xd7, +0x8f, +0x09, +0x9b, +0xc6, +0x11, +0x5c, +0x86, +0xae, +0xfa, +0x8b, +0xb4, +0x3b, +0x86, +0x9d, +0x3d, +0x7c, +0x0a, +0x1b, +0x46, +0x28, +0x58, +0x2f, +0xd5, +0xda, +0x8f, +0x10, +0x9f, +0xa5, +0x86, +0x76, +0xec, +0x0f, +0x07, +0x16, +0xf0, +0xc6, +0x82, +0x96, +0xfa, +0xfa, +0xe2, +0xd3, +0xf7, +0x57, +0xd0, +0x59, +0x46, +0x63, +0x69, +0x3e, +0xb7, +0xdc, +0x2e, +0xaf, +0x0a, +0x5d, +0xb3, +0xe4, +0x7a, +0x1c, +0x07, +0x04, +0x5e, +0x24, +0x58, +0x08, +0x92, +0x21, +0xc3, +0xd0, +0xb8, +0x16, +0x30, +0x1d, +0xd3, +0x1f, +0xba, +0xb1, +0xc5, +0xf1, +0xfd, +0x32, +0xfe, +0x1e, +0x5e, +0x07, +0xb4, +0xea, +0x1c, +0xce, +0xa0, +0x7a, +0x1a, +0x87, +0x94, +0xaa, +0xbf, +0xc0, +0x15, +0x32, +0x12, +0xd4, +0x49, +0xf4, +0xa0, +0xd9, +0x2d, +0xf4, +0x36, +0xc2, +0x67, +0xb7, +0x56, +0x1d, +0xa4, +0x1a, +0xb0, +0xc8, +0x84, +0x89, +0x38, +0xf6, +0x35, +0x9f, +0x1a, +0x47, +0x81, +0xc9, +0x6a, +0x2a, +0xb3, +0x24, +0x19, +0x10, +0xdc, +0xfd, +0x78, +0x7c, +0xc8, +0xbf, +0x85, +0xe3, +0xb4, +0x4a, +0x9a, +0x77, +0x33, +0x81, +0x7e, +0x6d, +0xa1, +0x29, +0xf8, +0xd5, +0x7a, +0x36, +0x09, +0xb3, +0x6b, +0xa3, +0x92, +0x6a, +0x45, +0x89, +0xbf, +0x79, +0x8d, +0xda, +0x5d, +0x06, +0xce, +0x65, +0xf2, +0xd7, +0x9d, +0xca, +0xd7, +0x0a, +0x0a, +0x68, +0x56, +0x20, +0x02, +0xd2, +0xa0, +0x5d, +0xbc, +0xb9, +0x79, +0xf2, +0xf9, +0x5b, +0xb3, +0xac, +0xe7, +0x72, +0x55, +0xda, +0x94, +0xf1, +0x4a, +0x1f, +0xea, +0xbb, +0x75, +0x3a, +0x58, +0x9c, +0x7b, +0xa4, +0xbc, +0x67, +0x23, +0xeb, +0xb8, +0xd1, +0x59, +0x1c, +0x38, +0xb8, +0x78, +0x07, +0xd8, +0x5c, +0xca, +0x30, +0xa5, +0xc8, +0x8d, +0xbf, +0xa2, +0x78, +0x6c, +0x3a, +0x4b, +0x3b, +0x5f, +0x0c, +0x39, +0xbb, +0x68, +0x67, +0xa5, +0x78, +0x25, +0x4e, +0x35, +0x81, +0xc9, +0xee, +0xfb, +0x90, +0x7a, +0x14, +0x9d, +0xfc, +0x9a, +0x1d, +0x9d, +0xb7, +0xae, +0x90, +0x69, +0x79, +0x89, +0xba, +0x9a, +0x40, +0x4b, +0x60, +0x74, +0x58, +0x16, +0x2c, +0xc6, +0xbf, +0x5d, +0x16, +0x46, +0xe7, +0x81, +0x63, +0x08, +0xbf, +0x43, +0xdf, +0xaa, +0x70, +0xac, +0x82, +0x63, +0x08, +0x82, +0x44, +0x9b, +0xdd, +0xce, +0x90, +0x0e, +0xff, +0x52, +0xe7, +0x65, +0x9a, +0xdb, +0x51, +0x98, +0xfa, +0xd4, +0xc9, +0x2f, +0x25, +0x28, +0x82, +0x65, +0x34, +0x70, +0x23, +0x32, +0x2b, +0x53, +0x59, +0xaa, +0x9d, +0xec, +0x57, +0x7d, +0x26, +0x59, +0x2f, +0xa2, +0xd4, +0xf8, +0x68, +0x27, +0x81, +0xb5, +0x61, +0x19, +0x8e, +0x24, +0x97, +0x7c, +0x41, +0xe4, +0xf7, +0x53, +0xf2, +0xe0, +0x40, +0xe3, +0xff, +0x29, +0x3f, +0x01, +0x38, +0x2c, +0x4e, +0x4d, +0xa8, +0xbe, +0x5b, +0x48, +0x2e, +0xc9, +0xf9, +0x7d, +0x6d, +0xed, +0x14, +0x6c, +0x57, +0x4f, +0x03, +0x9e, +0xb7, +0xf6, +0x35, +0x9a, +0x92, +0x73, +0xf6, +0xc1, +0x18, +0xa6, +0x3f, +0xaf, +0x9e, +0xca, +0x0d, +0x9b, +0xa6, +0x25, +0x3b, +0x5c, +0x1b, +0x6d, +0x6b, +0x9e, +0x58, +0x9b, +0xbf, +0x29, +0x98, +0xc5, +0x00, +0xc2, +0xd8, +0x92, +0xa6, +0xdf, +0xeb, +0x29, +0x47, +0x3a, +0xc4, +0xd8, +0x08, +0xc7, +0xbb, +0xc5, +0x63, +0x49, +0xfe, +0x7d, +0x9b, +0xb3, +0x74, +0x73, +0xfc, +0xaa, +0x18, +0xd3, +0x01, +0xfd, +0xa4, +0xad, +0x72, +0x85, +0xa5, +0x58, +0x13, +0x5b, +0x7a, +0xcd, +0x3e, +0x9e, +0x56, +0x73, +0x00, +0x75, +0xdf, +0x2a, +0xe4, +0xc9, +0xff, +0x17, +0xfd, +0x0c, +0x36, +0xd9, +0xa5, +0xff, +0xe6, +0x13, +0xe6, +0xcb, +0x0f, +0xa4, +0x80, +0xa8, +0x15, +0xd2, +0x85, +0x30, +0x2c, +0x4a, +0xe5, +0xb5, +0xf6, +0xdc, +0x69, +0x76, +0x5f, +0xbc, +0x4c, +0x98, +0xab, +0x1d, +0x71, +0x56, +0x84, +0x49, +0x1d, +0x8e, +0x13, +0x1e, +0x85, +0x80, +0x5b, +0x74, +0xda, +0xe4, +0xbd, +0x38, +0xf9, +0x88, +0x5b, +0x2a, +0x43, +0x45, +0x5d, +0x7d, +0xb6, +0x40, +0x48, +0xd2, +0xec, +0x92, +0x09, +0xbf, +0xd4, +0xdc, +0xf0, +0x3e, +0x36, +0x7e, +0xd4, +0x70, +0x9b, +0x80, +0xfc, +0x2e, +0x8f, +0xa5, +0x0b, +0x88, +0xee, +0x92, +0x92, +0xc0, +0x8d, +0x4f, +0xbc, +0xdb, +0xf1, +0x2c, +0x60, +0x9f, +0xe1, +0xc6, +0x1f, +0x4b, +0xff, +0x5d, +0x13, +0x7c, +0x34, +0x8d, +0x65, +0x5d, +0xec, +0xc6, +0xbf, +0xe8, +0x82, +0xb2, +0x46, +0x42, +0x18, +0x7f, +0xce, +0xc8, +0xc3, +0x46, +0xca, +0xaf, +0x75, +0xaf, +0x3e, +0xf0, +0x14, +0xbb, +0x33, +0x70, +0x42, +0x9b, +0x35, +0xb9, +0x12, +0x90, +0xf4, +0xa9, +0xef, +0xe6, +0xf6, +0x8a, +0xb1, +0x03, +0x48, +0x5a, +0xb0, +0x00, +0x35, +0xaf, +0xc4, +0x66, +0xa6, +0x29, +0x14, +0x2d, +0xe6, +0xfd, +0x29, +0x84, +0xab, +0x3f, +0x07, +0x11, +0xd8, +0x4d, +0x1e, +0x01, +0x79, +0x67, +0xcd, +0x3c, +0xe3, +0x20, +0x61, +0x95, +0x5f, +0x4a, +0x09, +0xb3, +0x60, +0x13, +0xb6, +0x30, +0xba, +0x1f, +0xb7, +0x28, +0xa8, +0x28, +0xd9, +0xdd, +0x1f, +0x48, +0x7e, +0x93, +0xce, +0x32, +0x0f, +0x14, +0xbc, +0x76, +0x0a, +0x6e, +0x7b, +0x94, +0x7f, +0xb4, +0x03, +0x25, +0x62, +0xc2, +0xe6, +0xa5, +0x62, +0xf5, +0xb1, +0x30, +0x2a, +0x08, +0xd6, +0x13, +0x82, +0x65, +0xfa, +0x99, +0xc6, +0xc8, +0x8b, +0x6e, +0xc5, +0x1c, +0x50, +0xe6, +0xb9, +0x0c, +0xc2, +0x1b, +0xf6, +0x93, +0xe3, +0x9a, +0x35, +0x6e, +0x2f, +0x90, +0x01, +0xd3, +0xf2, +0x39, +0x34, +0x73, +0x4c, +0x38, +0x5c, +0xce, +0x33, +0x3d, +0x84, +0x88, +0xa4, +0xb9, +0x7a, +0x84, +0x58, +0x22, +0xe9, +0x37, +0xd5, +0xfd, +0x57, +0x35, +0x21, +0x2a, +0x02, +0x04, +0x79, +0x02, +0x1c, +0xd3, +0x3b, +0x1d, +0x31, +0xf1, +0x73, +0x6e, +0x5b, +0xb4, +0x95, +0xdd, +0x63, +0xe5, +0x1c, +0xae, +0xfb, +0x80, +0x62, +0x90, +0x5e, +0x27, +0x1b, +0x87, +0xc0, +0xa1, +0xf6, +0xbb, +0x19, +0x6a, +0x6d, +0xe4, +0xb3, +0x6b, +0xb7, +0x36, +0x99, +0xc9, +0x83, +0xaa, +0xbc, +0x95, +0x56, +0x80, +0x81, +0xc4, +0xcb, +0x0c, +0x2c, +0x01, +0x69, +0x12, +0xf6, +0xe3, +0x65, +0x47, +0x53, +0x40, +0x23, +0xf2, +0x40, +0xf3, +0x49, +0x11, +0xaf, +0x5e, +0x18, +0x6a, +0x16, +0x51, +0x8a, +0xa9, +0x41, +0x2a, +0x4d, +0xa7, +0xd2, +0xb8, +0xdb, +0xc2, +0x37, +0x94, +0x7e, +0x27, +0xfb, +0x57, +0x22, +0x28, +0x36, +0xe2, +0x0f, +0xe6, +0x10, +0x51, +0xd0, +0x39, +0xd9, +0x5f, +0x35, +0x5e, +0x52, +0xe8, +0xbe, +0xb4, +0x78, +0x80, +0xca, +0xdb, +0xb5, +0xe0, +0x79, +0x16, +0x19, +0x18, +0x53, +0x23, +0xb6, +0xa3, +0xee, +0x6a, +0xdf, +0x66, +0x0e, +0xd3, +0x05, +0x5f, +0x4a, +0xe9, +0x9e, +0x51, +0xa9, +0xf4, +0xef, +0x55, +0xc1, +0x1a, +0x28, +0x6c, +0xf8, +0x09, +0x8b, +0xb8, +0xc7, +0x14, +0x7c, +0x86, +0x8c, +0xfd, +0xd4, +0x92, +0xd7, +0x05, +0x16, +0x67, +0x53, +0x95, +0x8d, +0xe0, +0xe4, +0x70, +0x76, +0x28, +0xac, +0x95, +0x4a, +0xc6, +0x66, +0x6b, +0xfd, +0xd2, +0x86, +0x70, +0xc5, +0x08, +0x95, +0x5c, +0x69, +0xdb, +0xca, +0x85, +0x3e, +0xef, +0xc1, +0xcb, +0xb7, +0x85, +0x4f, +0x65, +0x28, +0x6a, +0x29, +0x6e, +0xa9, +0x51, +0x4f, +0xcf, +0x2a, +0x56, +0xfc, +0xc7, +0x6e, +0x69, +0x00, +0xaf, +0x50, +0xb8, +0x9b, +0xe1, +0x02, +0xa7, +0xab, +0x25, +0xf1, +0xbd, +0x55, +0x78, +0x60, +0x6d, +0x37, +0x1d, +0x7c, +0xdb, +0xbc, +0x0f, +0x70, +0xca, +0xb8, +0x15, +0x1f, +0x26, +0x12, +0x0b, +0x56, +0x7c, +0xb2, +0x48, +0xa7, +0xee, +0x73, +0x1a, +0xb5, +0xb9, +0x2a, +0xfb, +0x37, +0x04, +0x4e, +0x44, +0x8f, +0x8c, +0xc8, +0xd1, +0x2b, +0x83, +0x6a, +0xee, +0xf7, +0x8a, +0x2c, +0x9e, +0x48, +0xe5, +0xf3, +0xad, +0xdf, +0xf2, +0x9f, +0x31, +0xb5, +0x4c, +0xb8, +0x91, +0x79, +0xb6, +0xc0, +0x92, +0x42, +0x01, +0x05, +0x63, +0xa7, +0xbd, +0x2b, +0x31, +0x43, +0x07, +0xfe, +0x1c, +0x40, +0xec, +0xc9, +0x24, +0x0b, +0x7d, +0x01, +0xaa, +0x43, +0x0a, +0x7e, +0xae, +0xbf, +0xb5, +0x74, +0x3a, +0x91, +0x21, +0x23, +0x35, +0xa0, +0xeb, +0xd6, +0x65, +0x35, +0xce, +0x81, +0x83, +0x4d, +0x46, +0x70, +0x44, +0x33, +0x9e, +0x37, +0xa0, +0xe0, +0x76, +0x9f, +0x02, +0x4e, +0xcd, +0x00, +0xb0, +0x4c, +0x9c, +0xf1, +0x33, +0x4b, +0xa0, +0xc5, +0x88, +0x46, +0x03, +0xa0, +0x99, +0x81, +0xb0, +0x43, +0x02, +0xb4, +0xe9, +0x45, +0xa8, +0x37, +0x85, +0x64, +0x7e, +0xf9, +0x9a, +0x8f, +0xdd, +0x3f, +0xb7, +0xea, +0xe5, +0x1d, +0x9d, +0x4f, +0x5e, +0x80, +0x14, +0xe1, +0xcc, +0xd5, +0x2e, +0x57, +0xab, +0x79, +0x0c, +0xb5, +0xc5, +0x71, +0x18, +0xc0, +0x80, +0xe4, +0x87, +0x7e, +0xbc, +0x5c, +0x43, +0x8a, +0x7a, +0x7b, +0xbe, +0x40, +0x76, +0xf7, +0x04, +0x23, +0xf3, +0xd6, +0x76, +0xd1, +0x82, +0x93, +0x04, +0xe1, +0x29, +0xf7, +0x60, +0xd3, +0x6d, +0xee, +0x85, +0xc9, +0x23, +0xfe, +0x9a, +0x93, +0xe6, +0x61, +0xbd, +0x3d, +0x3d, +0x7a, +0xf8, +0x48, +0x1c, +0xc3, +0x6c, +0x61, +0x42, +0x66, +0x9b, +0x70, +0x56, +0xdc, +0x97, +0xcd, +0x75, +0xb3, +0x83, +0x40, +0xfe, +0x2b, +0x81, +0xa6, +0x12, +0xd3, +0x84, +0x0b, +0x9f, +0x13, +0x65, +0x91, +0xb0, +0x3e, +0x75, +0x13, +0x0c, +0xd5, +0x62, +0x81, +0xed, +0x06, +0xf8, +0x96, +0xf9, +0x48, +0xea, +0x98, +0x12, +0x4a, +0x6e, +0xf3, +0x57, +0xf4, +0x09, +0x74, +0x31, +0xda, +0x98, +0x1e, +0xdb, +0x43, +0x90, +0xb6, +0xdb, +0x78, +0x88, +0xdd, +0x39, +0xec, +0xf2, +0xe5, +0xc2, +0x37, +0x55, +0x9f, +0xbb, +0xb4, +0x6c, +0x1e, +0xd8, +0x9e, +0x46, +0x79, +0xa7, +0xa1, +0x89, +0x41, +0xe0, +0xf6, +0xa6, +0x1c, +0xf2, +0x12, +0x0d, +0xee, +0xa2, +0x3b, +0xcc, +0x35, +0x97, +0x44, +0x6b, +0x56, +0xac, +0xb6, +0xdf, +0x2a, +0x70, +0xde, +0xf2, +0xf5, +0xcc, +0xa5, +0xc5, +0xb8, +0x3b, +0x32, +0x62, +0xcc, +0xb3, +0xc9, +0x5f, +0x32, +0x6a, +0xe5, +0x85, +0x03, +0x2b, +0xe2, +0x73, +0x4f, +0x00, +0xba, +0x21, +0x6e, +0x51, +0xc6, +0x52, +0x5c, +0x34, +0x16, +0x58, +0x5c, +0xb2, +0xa5, +0x70, +0x84, +0xbd, +0xa8, +0x25, +0x7f, +0x04, +0x6b, +0xd2, +0xf8, +0x35, +0xa1, +0xc2, +0x3b, +0x52, +0xce, +0x29, +0x8e, +0x7a, +0x5f, +0x5b, +0x04, +0x3b, +0x0b, +0xc1, +0x0a, +0x25, +0xa8, +0xd1, +0x59, +0x83, +0x03, +0x90, +0x42, +0x74, +0xcb, +0xc8, +0x5b, +0x7f, +0x6a, +0x2b, +0xe5, +0x6a, +0x56, +0x77, +0xe2, +0x96, +0xce, +0xf3, +0x99, +0x36, +0xa5, +0x8b, +0x2f, +0xf5, +0x17, +0xf7, +0x92, +0x6c, +0xf5, +0x62, +0xd8, +0x25, +0x0f, +0xdb, +0xfc, +0x5e, +0x08, +0x4b, +0x27, +0x13, +0x2a, +0x9e, +0x4c, +0xb4, +0xb9, +0xc8, +0x62, +0x4e, +0xb3, +0x13, +0x0d, +0xc1, +0x2b, +0x8e, +0xff, +0x8e, +0x52, +0x2a, +0x52, +0x95, +0x5a, +0x09, +0xd8, +0x1e, +0x29, +0x75, +0x49, +0x54, +0xf3, +0x30, +0xd0, +0x2b, +0x03, +0xaf, +0x53, +0x6c, +0xbd, +0x8a, +0xdc, +0x44, +0x96, +0x68, +0x51, +0xf8, +0xd8, +0x7a, +0xf5, +0x35, +0xc3, +0x11, +0x5c, +0x5e, +0x9a, +0x70, +0xf4, +0xac, +0x5c, +0xee, +0x8d, +0x68, +0x53, +0x0a, +0xb7, +0x7b, +0x16, +0x6b, +0xb8, +0x08, +0xf0, +0xd6, +0xda, +0x29, +0x17, +0xf2, +0xf3, +0x35, +0x8e, +0x0d, +0x03, +0x98, +0xe8, +0x53, +0x33, +0x84, +0x79, +0xa3, +0x6c, +0x12, +0xc5, +0x76, +0x04, +0xd5, +0x5f, +0x58, +0xd5, +0xac, +0x57, +0x5f, +0xfe, +0xd0, +0x22, +0xf3, +0x26, +0x07, +0x99, +0x1c, +0xe8, +0xa0, +0x32, +0x1d, +0xdb, +0x0f, +0xcb, +0x10, +0x85, +0x6f, +0x22, +0x7a, +0x05, +0x66, +0x91, +0x2f, +0x58, +0xa0, +0xc4, +0xa6, +0x1c, +0xa9, +0x16, +0x07, +0x84, +0x82, +0x06, +0xc0, +0x65, +0xae, +0x78, +0xf2, +0xcf, +0xa3, +0x9e, +0xf0, +0xe0, +0x2e, +0x92, +0x6e, +0xb8, +0xa6, +0x77, +0x59, +0x01, +0x8d, +0xac, +0xfa, +0x5e, +0x29, +0xd0, +0xda, +0x5e, +0xeb, +0x8a, +0x5e, +0xd6, +0x9d, +0x6f, +0xda, +0x7d, +0x25, +0x30, +0xf9, +0xc0, +0xee, +0xdf, +0x14, +0x6d, +0x07, +0x09, +0x0a, +0x3f, +0xfb, +0x23, +0x40, +0x19, +0xe6, +0xd2, +0x3c, +0xd0, +0x69, +0x00, +0xf6, +0xaa, +0x4b, +0xf7, +0x0e, +0xc0, +0x0e, +0x4d, +0x81, +0x01, +0x44, +0xad, +0xf4, +0x33, +0x83, +0xc5, +0x45, +0x3f, +0x33, +0xea, +0x5c, +0x8d, +0xa7, +0xcd, +0xef, +0x5c, +0x40, +0xbc, +0xcf, +0x9b, +0x04, +0x30, +0x12, +0x90, +0x83, +0xbd, +0xc8, +0x1a, +0x9a, +0x8c, +0xc0, +0x56, +0x39, +0xc1, +0x7c, +0xd8, +0x66, +0xa8, +0x2c, +0x27, +0x4d, +0xe4, +0xa3, +0x84, +0xf6, +0xae, +0xbd, +0x41, +0x69, +0xa2, +0xc3, +0x69, +0xd3, +0x34, +0x06, +0x3a, +0x34, +0x15, +0x61, +0xa5, +0xb1, +0xae, +0xd0, +0xc5, +0x01, +0x28, +0x82, +0x7b, +0x67, +0x48, +0x5b, +0x71, +0xb8, +0xe3, +0x6b, +0xe3, +0x51, +0x35, +0xac, +0x18, +0x4b, +0x7a, +0x7e, +0x88, +0xc8, +0x6f, +0x8d, +0xe0, +0x68, +0x53, +0x70, +0x4f, +0x0a, +0xa8, +0x3e, +0x44, +0xea, +0xd2, +0x9e, +0x64, +0xb7, +0xca, +0x50, +0xc5, +0x08, +0x46, +0xc7, +0x21, +0x7f, +0x58, +0x8d, +0x3e, +0x56, +0x8b, +0xa9, +0x4d, +0x81, +0x95, +0xe2, +0x20, +0xc6, +0xd0, +0x2d, +0x68, +0x5e, +0x99, +0xbc, +0x97, +0x13, +0xbf, +0xd6, +0x48, +0x53, +0x7e, +0x41, +0x96, +0x3b, +0x44, +0x34, +0xea, +0xf6, +0xbe, +0x8a, +0x04, +0xdf, +0x40, +0xa5, +0x54, +0x37, +0xec, +0x9e, +0x2f, +0x37, +0x52, +0xa6, +0xcd, +0xdd, +0xc8, +0x6f, +0xdd, +0xc4, +0x04, +0x03, +0xa1, +0xe7, +0xb5, +0xa4, +0x1c, +0x7a, +0xc8, +0x0b, +0x8e, +0x32, +0x6b, +0x6f, +0xc7, +0x5b, +0x7a, +0x79, +0xe5, +0xf5, +0x48, +0x16, +0x75, +0xd8, +0xb4, +0x27, +0xc4, +0x92, +0xc3, +0xcb, +0x67, +0xf4, +0x46, +0xcf, +0xed, +0x2e, +0x38, +0x8c, +0x9d, +0xab, +0x78, +0x80, +0xc9, +0x15, +0x57, +0x77, +0x3e, +0x6d, +0xf7, +0xdc, +0x4f, +0x3d, +0xd5, +0x10, +0x7e, +0x64, +0x2c, +0xdd, +0x34, +0xb1, +0x8d, +0xde, +0x59, +0x54, +0x5a, +0x20, +0xcb, +0x7f, +0xe2, +0x67, +0x3d, +0xe3, +0x21, +0xd0, +0x36, +0xb3, +0x10, +0xdc, +0x78, +0xd5, +0xa1, +0x64, +0x69, +0x75, +0x8d, +0xce, +0x6e, +0xab, +0xa7, +0x79, +0x8c, +0xfb, +0x63, +0x57, +0xaf, +0x9b, +0xd0, +0x9b, +0x6b, +0x82, +0xf1, +0x18, +0x87, +0xc1, +0x8a, +0x93, +0xd4, +0xf8, +0xfa, +0xad, +0xe4, +0xfd, +0x73, +0xfc, +0x84, +0x41, +0x49, +0x21, +0x53, +0x22, +0xdf, +0xd9, +0x06, +0xd0, +0xf4, +0xa1, +0x1b, +0x04, +0xe5, +0x08, +0xf3, +0x3f, +0x2c, +0x1c, +0x73, +0x07, +0x0a, +0x82, +0xdc, +0xb9, +0x0b, +0x93, +0xdd, +0x22, +0xdb, +0xe7, +0x8d, +0xf7, +0xe1, +0xb9, +0x55, +0xa4, +0xeb, +0xd2, +0x19, +0x4b, +0x7c, +0x27, +0x14, +0x65, +0x5c, +0xaa, +0x31, +0x6f, +0x7c, +0xe8, +0xfc, +0x9d, +0xce, +0x6d, +0x0a, +0x76, +0xa9, +0x67, +0xab, +0x74, +0xdc, +0x75, +0x31, +0x58, +0x0d, +0x55, +0xb9, +0xe3, +0x01, +0x96, +0xf8, +0xcb, +0x9b, +0xb7, +0x0f, +0x80, +0x8f, +0x6c, +0x65, +0xc9, +0xe1, +0x4a, +0x4b, +0x8d, +0x36, +0xd9, +0x9a, +0xdd, +0xe4, +0xad, +0x00, +0x7c, +0x47, +0xb5, +0xb5, +0x8c, +0x34, +0x6a, +0x50, +0xb7, +0x88, +0xa1, +0x44, +0xae, +0xb3, +0x84, +0x13, +0x70, +0xa9, +0x42, +0x5f, +0xa8, +0xb5, +0xcb, +0x4f, +0xe9, +0x40, +0x53, +0x23, +0x59, +0x51, +0xc0, +0xf1, +0xc0, +0x41, +0xac, +0x7b, +0xf9, +0xbb, +0x91, +0xbe, +0xb5, +0xfb, +0x53, +0x9e, +0xf4, +0xe9, +0xad, +0xa1, +0x62, +0x83, +0x1b, +0x24, +0xb8, +0x48, +0xbb, +0x70, +0x29, +0x11, +0x11, +0xf1, +0x08, +0x1d, +0x46, +0x7a, +0xfb, +0x52, +0x3d, +0x97, +0x60, +0xcc, +0xb1, +0xed, +0xa2, +0xb8, +0xda, +0x9e, +0x44, +0x5d, +0x95, +0x53, +0x2b, +0xc4, +0x8a, +0x4c, +0xdd, +0xb3, +0xe2, +0x06, +0xa6, +0x81, +0x36, +0xf2, +0x36, +0xfd, +0x7d, +0x46, +0x20, +0x31, +0x73, +0xc8, +0xbc, +0x85, +0xa2, +0x89, +0x74, +0x56, +0xaf, +0x76, +0xff, +0xea, +0xae, +0xe3, +0x34, +0xbc, +0x72, +0xfe, +0x35, +0xf1, +0x69, +0x43, +0x6a, +0x83, +0x25, +0x3a, +0x97, +0x33, +0xc6, +0x35, +0x84, +0xa5, +0x6b, +0x58, +0x0c, +0xdc, +0xd2, +0xd6, +0x43, +0x0d, +0x43, +0x77, +0x11, +0xc0, +0x70, +0x67, +0x48, +0x2d, +0x26, +0x45, +0xfc, +0xe6, +0x0f, +0x33, +0x2a, +0xe7, +0xf3, +0xb6, +0x63, +0xf8, +0xc5, +0xad, +0x0b, +0x0e, +0x91, +0x9e, +0x61, +0x8a, +0x08, +0xde, +0x4b, +0x02, +0x8a, +0x96, +0xa1, +0xb7, +0x95, +0xda, +0x45, +0xd2, +0x17, +0x3c, +0xf4, +0xa4, +0xc6, +0x35, +0x52, +0xc4, +0x38, +0x76, +0x92, +0x66, +0x33, +0x77, +0x6f, +0x41, +0xdc, +0xc0, +0x02, +0x0d, +0x48, +0x0a, +0xfd, +0x9e, +0x0e, +0x42, +0x1b, +0xe3, +0xf6, +0xb1, +0xe7, +0x14, +0xc8, +0x58, +0xff, +0xdb, +0xe2, +0x5f, +0x08, +0xba, +0x98, +0xcc, +0x69, +0x06, +0xee, +0x4b, +0x9c, +0x4d, +0xfe, +0x5f, +0xb4, +0x3d, +0x71, +0x8f, +0x90, +0x63, +0xb5, +0xd5, +0x82, +0x96, +0xcc, +0x60, +0x5d, +0x5f, +0x3e, +0x78, +0x50, +0x89, +0x1f, +0xb9, +0x26, +0xbf, +0x40, +0xa2, +0x58, +0xae, +0xe5, +0x44, +0xd3, +0x4f, +0x6a, +0x5a, +0x9f, +0x62, +0x06, +0x63, +0x2f, +0x26, +0xf3, +0x6d, +0x07, +0xba, +0xc5, +0x44, +0x8b, +0x03, +0x10, +0x9b, +0xfd, +0x4a, +0x82, +0x45, +0x83, +0x80, +0x89, +0xeb, +0x71, +0x9d, +0x7b, +0xa8, +0x97, +0xef, +0xac, +0x63, +0x8e, +0x6a, +0x34, +0xca, +0x18, +0x82, +0x82, +0x8b, +0xcb, +0xa2, +0xe6, +0x1b, +0x78, +0xf7, +0xb0, +0x86, +0xaa, +0xec, +0x30, +0xcf, +0x31, +0x67, +0x80, +0x54, +0x45, +0x25, +0x37, +0x26, +0x20, +0xcc, +0xcd, +0xf9, +0x01, +0x7a, +0xcc, +0xcf, +0x9b, +0x72, +0x90, +0x6d, +0xf6, +0x1c, +0x2b, +0xaa, +0x9b, +0x9d, +0xb0, +0x03, +0x00, +0xcc, +0xd0, +0x62, +0x6f, +0xa9, +0x08, +0x9f, +0xca, +0x7a, +0x20, +0x0c, +0xdd, +0x5d, +0x0f, +0x84, +0xc1, +0x38, +0x6f, +0xc7, +0x74, +0xe9, +0x88, +0x03, +0xe1, +0x5a, +0x99, +0x92, +0xb3, +0xe8, +0x68, +0x28, +0xac, +0x10, +0x67, +0x76, +0xda, +0xfc, +0x96, +0xd7, +0xc5, +0xfc, +0x00, +0xb5, +0xeb, +0x03, +0x28, +0x15, +0x03, +0x04, +0x5d, +0xf4, +0x1b, +0xdc, +0x9c, +0xc1, +0xa4, +0x13, +0xff, +0xaf, +0x34, +0x01, +0x64, +0x0b, +0xe9, +0x75, +0xac, +0x0a, +0x5f, +0x3c, +0x87, +0x0f, +0xb5, +0xe2, +0x3f, +0x35, +0x71, +0xf4, +0xf1, +0x93, +0x88, +0x5e, +0x9c, +0xdd, +0x90, +0x8e, +0x79, +0x60, +0x75, +0x47, +0x71, +0x6a, +0x0a, +0xa5, +0x35, +0x4c, +0x0e, +0xa0, +0x29, +0x21, +0x83, +0x4a, +0xf4, +0x5e, +0xac, +0x65, +0xab, +0x89, +0x9a, +0x41, +0x4f, +0x14, +0x86, +0x7b, +0xe4, +0xe9, +0xf6, +0xe4, +0x83, +0xda, +0x2a, +0x04, +0x51, +0xf2, +0xd4, +0xae, +0xd0, +0x7f, +0x9f, +0xbc, +0xcd, +0xa5, +0xe1, +0xcb, +0x20, +0xd4, +0x4d, +0x05, +0x54, +0x66, +0x5d, +0x35, +0xce, +0x5a, +0xe1, +0xfb, +0xe7, +0xbd, +0xf6, +0x01, +0x34, +0x48, +0xe7, +0x60, +0x73, +0x58, +0xaf, +0x55, +0xf6, +0xce, +0x16, +0xd4, +0xf3, +0x9b, +0xaa, +0xe8, +0xd7, +0x6c, +0xea, +0x1b, +0x4d, +0x84, +0x1f, +0x4e, +0x0c, +0x44, +0x82, +0x72, +0x32, +0x22, +0xce, +0xc2, +0xfd, +0xba, +0x46, +0x3e, +0x73, +0x28, +0x5f, +0xa6, +0x19, +0x81, +0xe6, +0x45, +0xed, +0x01, +0xea, +0x74, +0xcd, +0x64, +0xa9, +0x5a, +0x31, +0x61, +0x82, +0xa1, +0x9f, +0x30, +0x9d, +0x0c, +0xa8, +0x57, +0x1c, +0xd5, +0x50, +0x4e, +0x96, +0x4b, +0x8c, +0xa7, +0xff, +0x59, +0x04, +0x29, +0x17, +0x3c, +0xec, +0x73, +0xfd, +0x81, +0x5e, +0x24, +0xd0, +0xf7, +0xd4, +0x8f, +0xfc, +0xa2, +0x9f, +0x21, +0x06, +0xf1, +0x4b, +0x2e, +0x2c, +0x3d, +0x2b, +0x86, +0x81, +0x3f, +0xa7, +0xdc, +0xa7, +0xf0, +0x1d, +0xd0, +0xaa, +0xbb, +0x96, +0x52, +0xae, +0xc9, +0xda, +0x22, +0x83, +0xc5, +0xfc, +0x0d, +0x1c, +0xa6, +0x49, +0x08, +0x74, +0x97, +0x65, +0xdb, +0x23, +0xf8, +0x2c, +0x57, +0xa9, +0x60, +0x82, +0x11, +0xc7, +0xa9, +0x86, +0x57, +0x1f, +0xb3, +0xc8, +0xd8, +0x51, +0x99, +0x3d, +0x32, +0x7f, +0x83, +0x81, +0xf6, +0x64, +0x7b, +0x29, +0x81, +0x65, +0x48, +0x1d, +0x28, +0x8c, +0x99, +0xf7, +0xe8, +0xf4, +0xfa, +0xd9, +0x92, +0x0c, +0xad, +0xb3, +0x73, +0x00, +0x01, +0x62, +0x2c, +0x0c, +0xb6, +0x73, +0xff, +0xb7, +0xf0, +0x8a, +0x6c, +0x56, +0x7f, +0xa0, +0x23, +0xf3, +0x28, +0xf1, +0x49, +0x1c, +0x9a, +0x50, +0xd6, +0x37, +0x58, +0xfe, +0x1d, +0x94, +0xf5, +0x95, +0x89, +0x65, +0xed, +0x3e, +0x47, +0x33, +0xa6, +0x36, +0xdc, +0x69, +0xc7, +0x85, +0x0b, +0xa2, +0x35, +0x17, +0x01, +0xa6, +0x7b, +0x31, +0xd7, +0xda, +0xed, +0x18, +0xdf, +0x07, +0x4a, +0xd2, +0x4a, +0xa1, +0x7f, +0x8a, +0xca, +0xe7, +0x8a, +0x65, +0xb8, +0x3d, +0x88, +0x9e, +0x61, +0x3b, +0xda, +0x05, +0x30, +0xae, +0x9f, +0x83, +0x16, +0x7f, +0xc9, +0x75, +0xdd, +0x0a, +0x17, +0xea, +0xc4, +0x27, +0xe8, +0x21, +0x42, +0x48, +0x2d, +0x91, +0xd4, +0xd8, +0x59, +0x03, +0x50, +0xb9, +0xbc, +0xc9, +0x55, +0x3d, +0xc2, +0x4b, +0x5f, +0xe3, +0xca, +0x28, +0xe4, +0x63, +0x69, +0xfd, +0xa5, +0xf6, +0x1b, +0xb2, +0x01, +0xb3, +0x76, +0x54, +0x95, +0xe2, +0x9d, +0xd4, +0x4b, +0xa6, +0x00, +0xb4, +0xe8, +0x41, +0x80, +0xe0, +0x0b, +0xfd, +0xe6, +0xbf, +0x0a, +0xb8, +0xba, +0xd2, +0x57, +0xff, +0xc7, +0x77, +0xe4, +0x13, +0xd9, +0x75, +0x8f, +0xee, +0x21, +0x66, +0x21, +0xd6, +0xb9, +0x1b, +0x42, +0x93, +0xe6, +0x27, +0x38, +0xcb, +0x10, +0x11, +0xdc, +0xe9, +0xfd, +0x5a, +0xf8, +0x00, +0xc2, +0x22, +0xa7, +0x95, +0xa7, +0xe9, +0x78, +0x3d, +0x31, +0x29, +0x7d, +0xfa, +0x9a, +0x6f, +0x5a, +0xe4, +0xb6, +0x9d, +0x45, +0x30, +0xbb, +0x7f, +0xff, +0xca, +0x56, +0xb2, +0xfd, +0x20, +0x57, +0xa9, +0xee, +0x2b, +0x9e, +0xd7, +0xfc, +0x53, +0x93, +0x1a, +0x60, +0x91, +0xf6, +0xf7, +0x0d, +0x7d, +0xf0, +0x04, +0x02, +0xd1, +0x8e, +0x26, +0x56, +0x1e, +0xda, +0xcc, +0x55, +0xc3, +0x30, +0x1b, +0x1c, +0xad, +0xa8, +0xa6, +0x71, +0xf2, +0x00, +0x94, +0xfe, +0x17, +0xf9, +0x04, +0x08, +0xdf, +0xb2, +0x07, +0x10, +0x33, +0x94, +0x28, +0xe7, +0x9a, +0x43, +0x1e, +0xad, +0x6f, +0x49, +0xfd, +0xd1, +0xec, +0xf9, +0x7b, +0x40, +0x8a, +0x9a, +0x49, +0xbc, +0xfe, +0x6b, +0xb4, +0xce, +0x0f, +0xf3, +0x85, +0xad, +0x90, +0xb7, +0xf1, +0x6e, +0x16, +0x41, +0xb5, +0xca, +0x5b, +0x1a, +0x8b, +0x74, +0xa7, +0x94, +0xdc, +0x8f, +0x21, +0xbd, +0x68, +0xbf, +0xf4, +0x8f, +0x67, +0x2b, +0x3a, +0xce, +0x97, +0x8f, +0x55, +0xa5, +0xf6, +0xf1, +0xf2, +0x6a, +0xed, +0x82, +0xe5, +0x91, +0xab, +0xf1, +0xb3, +0xbe, +0x9f, +0x9a, +0x99, +0x79, +0x4a, +0x25, +0x9f, +0x99, +0xad, +0x16, +0x0f, +0x5c, +0x0e, +0x66, +0x9d, +0x4c, +0x58, +0x21, +0xcf, +0xcc, +0x19, +0x09, +0x46, +0x76, +0x0b, +0x93, +0x46, +0x34, +0x85, +0xee, +0x58, +0x70, +0x24, +0x45, +0xc1, +0xed, +0x0f, +0xed, +0x1e, +0xb8, +0xc9, +0xf3, +0x22, +0x90, +0xe2, +0x26, +0x2f, +0x15, +0x19, +0xf2, +0xb8, +0x10, +0x26, +0x0b, +0x35, +0xde, +0xda, +0x29, +0x8f, +0x45, +0x46, +0xec, +0x00, +0xe6, +0x03, +0x4e, +0xb9, +0x54, +0x3a, +0x9d, +0x15, +0xd7, +0x27, +0xd6, +0x04, +0x0c, +0x3e, +0x3e, +0xf7, +0xcf, +0xcc, +0x9b, +0x1d, +0xa5, +0x93, +0xf8, +0xd2, +0xe3, +0x1b, +0x7c, +0xce, +0xfc, +0x5f, +0x0a, +0x35, +0xa9, +0x99, +0x37, +0x83, +0xec, +0x2d, +0x7a, +0x6d, +0x07, +0x76, +0x35, +0x02, +0xfd, +0x3c, +0xa8, +0x9e, +0x47, +0x2b, +0xcc, +0x78, +0x52, +0xd3, +0x8d, +0x57, +0xb6, +0x79, +0x3c, +0x09, +0x33, +0x14, +0x61, +0x47, +0x84, +0xd9, +0x3d, +0x63, +0xe8, +0xdb, +0x29, +0xb6, +0x45, +0xe1, +0x9c, +0x54, +0x0d, +0x23, +0xf7, +0x8d, +0x00, +0x9a, +0x03, +0x4b, +0xaf, +0x19, +0xf5, +0x45, +0xa5, +0x97, +0x5d, +0x47, +0x78, +0x8a, +0x99, +0x0d, +0x40, +0xac, +0xf6, +0xa5, +0xf5, +0x3b, +0x4e, +0xdc, +0xd9, +0x36, +0xed, +0xd0, +0x38, +0xee, +0xa0, +0x24, +0x71, +0xbc, +0x69, +0x6d, +0xa4, +0x36, +0xe8, +0xe9, +0xb7, +0x21, +0xd1, +0xb9, +0xe1, +0xd6, +0xa7, +0x4d, +0xf8, +0x7b, +0x12, +0x63, +0x56, +0x8b, +0x21, +0xdd, +0x05, +0x34, +0xed, +0x7c, +0xc9, +0x04, +0x75, +0xfd, +0xd0, +0x38, +0xf0, +0xa7, +0x23, +0x06, +0x77, +0x7c, +0xd5, +0xc2, +0x46, +0xd6, +0xe4, +0x03, +0x5b, +0x13, +0x64, +0x6b, +0xf9, +0xac, +0x5e, +0x6e, +0xd5, +0x55, +0xca, +0xfe, +0x5f, +0x5e, +0x44, +0xa3, +0x88, +0x17, +0xdb, +0x36, +0x93, +0xe6, +0x02, +0x02, +0x89, +0x39, +0x86, +0x3f, +0x5e, +0x7e, +0x91, +0xff, +0xca, +0xbe, +0x95, +0xbd, +0x06, +0xe4, +0xf9, +0x5f, +0x99, +0xa9, +0x1a, +0xc0, +0x5d, +0xd1, +0x29, +0x38, +0x77, +0xb4, +0x00, +0xf3, +0x57, +0x16, +0x34, +0x52, +0x04, +0xe7, +0xf4, +0x6c, +0xf4, +0xb1, +0x75, +0x6d, +0x7a, +0x63, +0x14, +0x5b, +0x9f, +0x56, +0x69, +0x6b, +0x13, +0x8e, +0x76, +0x9c, +0x36, +0xa6, +0x2f, +0xd5, +0x57, +0xcf, +0x20, +0xbc, +0x78, +0x0a, +0x59, +0x0f, +0xdc, +0xf4, +0xde, +0x5d, +0xf1, +0x99, +0x91, +0xd8, +0xf8, +0x82, +0x90, +0x28, +0xe3, +0x2e, +0x75, +0x3d, +0xf1, +0x10, +0xf6, +0xe8, +0xfb, +0x09, +0x84, +0x7a, +0xf0, +0xab, +0xa4, +0x08, +0xf5, +0xfb, +0x62, +0xfe, +0x6a, +0x70, +0x79, +0x52, +0x97, +0xea, +0x13, +0xf0, +0x3b, +0xe1, +0xf6, +0xab, +0x64, +0x89, +0x23, +0x34, +0x20, +0x69, +0xd2, +0xf5, +0x8d, +0x0b, +0x62, +0x5e, +0x04, +0x1c, +0xf1, +0x2b, +0xe9, +0x79, +0x98, +0xa1, +0x34, +0x87, +0x41, +0xe1, +0x83, +0x70, +0x30, +0x94, +0xdc, +0x7a, +0x34, +0x10, +0xea, +0x6c, +0xe2, +0xfb, +0xc8, +0x29, +0x97, +0x26, +0xa0, +0x64, +0x2e, +0x56, +0x90, +0xf2, +0xc6, +0x7d, +0x86, +0x76, +0x41, +0xe3, +0x62, +0x5e, +0x03, +0xda, +0x33, +0x8f, +0x4b, +0x44, +0x7a, +0x9c, +0x16, +0x2d, +0xc5, +0x16, +0xfa, +0x5a, +0x99, +0xa2, +0x51, +0x60, +0x66, +0x01, +0xa9, +0x75, +0x05, +0x44, +0x7e, +0x3b, +0xc0, +0x97, +0xbc, +0x58, +0xe0, +0x0a, +0x18, +0x8f, +0x5a, +0xd1, +0x83, +0x7f, +0x15, +0x18, +0xae, +0xbb, +0x75, +0xb0, +0x5b, +0x9c, +0xa2, +0x12, +0x2d, +0x16, +0x4a, +0x8e, +0xc7, +0x69, +0xd5, +0xc3, +0xa1, +0x39, +0x5d, +0x2d, +0x88, +0xb8, +0x29, +0xa4, +0x5d, +0x4a, +0x76, +0x7c, +0x8b, +0x3b, +0xf0, +0x55, +0xa2, +0x6c, +0xb2, +0xb6, +0xf7, +0xaa, +0x05, +0xb3, +0x19, +0x4c, +0x7e, +0x7d, +0xdf, +0x30, +0xed, +0x1c, +0x61, +0x7b, +0x08, +0x30, +0x03, +0x22, +0x57, +0x15, +0x15, +0x7b, +0x93, +0x5e, +0xbf, +0x30, +0x07, +0xa2, +0xd6, +0xf6, +0xc8, +0xb4, +0xce, +0xb7, +0x96, +0x62, +0x33, +0x83, +0xcd, +0xd4, +0x92, +0x00, +0xc7, +0x4e, +0xf8, +0x5e, +0xb6, +0x1d, +0xcf, +0x04, +0x4a, +0x13, +0x11, +0x7d, +0x2a, +0xa5, +0xd6, +0xb0, +0xee, +0xfd, +0xe8, +0x4f, +0xc0, +0x9d, +0x70, +0xe0, +0x27, +0x41, +0x80, +0x2a, +0x92, +0x79, +0x23, +0xf1, +0x70, +0x5f, +0x1b, +0xcf, +0x89, +0xd5, +0xa5, +0xdb, +0x5c, +0x65, +0xc6, +0x86, +0x37, +0x44, +0xbe, +0xdf, +0x90, +0xd0, +0x2c, +0xe2, +0x24, +0x0e, +0x3e, +0xdb, +0xe3, +0x4f, +0xdd, +0xdf, +0xe1, +0x40, +0x2b, +0x64, +0x58, +0x70, +0x4f, +0xae, +0xc9, +0x8a, +0x67, +0x03, +0x34, +0xba, +0xf4, +0x06, +0x8c, +0xfb, +0x6f, +0x1c, +0x1c, +0xa0, +0x70, +0x72, +0xdd, +0xbc, +0x12, +0xd7, +0xe2, +0xc0, +0x6d, +0x31, +0x19, +0x5c, +0xe2, +0x14, +0x4f, +0x1a, +0x50, +0xb6, +0xb0, +0x1d, +0x26, +0x54, +0x8e, +0xfa, +0x70, +0xf7, +0xeb, +0x58, +0x21, +0x6f, +0xf0, +0x9f, +0x79, +0x4d, +0x7b, +0x32, +0x0a, +0x6b, +0xbe, +0xbd, +0x02, +0x6c, +0xe8, +0xec, +0x48, +0x60, +0x76, +0x98, +0xed, +0x86, +0xb7, +0x1e, +0xf9, +0x68, +0x89, +0x71, +0x09, +0x66, +0x8d, +0xa5, +0x17, +0x77, +0x05, +0xb6, +0xac, +0x6c, +0x80, +0xb3, +0x19, +0x49, +0xf1, +0x6d, +0x28, +0xe3, +0x87, +0x33, +0x67, +0xb1, +0x2f, +0x2a, +0xd8, +0xf1, +0x54, +0x22, +0x88, +0x19, +0x55, +0xc4, +0x08, +0xa6, +0x16, +0x4b, +0x68, +0x9e, +0xd0, +0x88, +0xaa, +0x03, +0x47, +0xd2, +0x3b, +0xf4, +0xb2, +0x38, +0x3d, +0x6a, +0x6d, +0xac, +0x1e, +0x15, +0x09, +0xa3, +0xcf, +0x46, +0x85, +0x12, +0xfe, +0xe2, +0x89, +0xaf, +0xff, +0x49, +0x78, +0x56, +0xbc, +0x8b, +0x56, +0xdd, +0xd4, +0x06, +0xb8, +0x71, +0xa8, +0x9a, +0xb8, +0xd1, +0xdc, +0x7b, +0xdb, +0xbf, +0x31, +0xb0, +0xc8, +0x7e, +0x4f, +0x3b, +0xa4, +0x6c, +0x8d, +0xdf, +0xb7, +0x7c, +0xf3, +0xac, +0xb6, +0x81, +0x6f, +0xf3, +0xff, +0xbe, +0x5a, +0xa5, +0x56, +0x3a, +0x42, +0x8b, +0x75, +0xff, +0xd5, +0x32, +0x42, +0x2b, +0x61, +0x37, +0xf5, +0x60, +0xe8, +0xe0, +0x66, +0x33, +0x65, +0x56, +0x46, +0x86, +0x89, +0x38, +0xb8, +0x34, +0xad, +0xfb, +0x5c, +0x8b, +0xc1, +0x64, +0xa3, +0x59, +0xbd, +0xb6, +0x17, +0xb7, +0x55, +0x9c, +0xf2, +0x12, +0xcc, +0xef, +0x38, +0xd3, +0xc8, +0xee, +0xbf, +0x80, +0x6e, +0x5b, +0x57, +0xfc, +0xef, +0x52, +0xac, +0x67, +0xe1, +0xd6, +0x17, +0xca, +0x6b, +0x45, +0x18, +0xde, +0x3f, +0x8a, +0x06, +0x3f, +0x04, +0x3d, +0x6c, +0xe2, +0xe1, +0xc6, +0x7a, +0x06, +0xbd, +0x1a, +0x0d, +0xbf, +0xf2, +0x1b, +0x99, +0x62, +0x62, +0xf3, +0x85, +0x90, +0x5b, +0xd1, +0xf2, +0x14, +0x49, +0x9a, +0x4c, +0x85, +0x15, +0xf1, +0xc0, +0xd5, +0xf0, +0x13, +0x07, +0x77, +0x67, +0x68, +0xf4, +0x4e, +0x04, +0xfe, +0x56, +0x44, +0xd6, +0x8e, +0x7a, +0xce, +0xe8, +0x6d, +0xcb, +0x6b, +0xcf, +0x4a, +0x36, +0x8f, +0x93, +0x31, +0x59, +0xda, +0x61, +0x60, +0xc3, +0xdd, +0xe2, +0x94, +0xb8, +0xd3, +0xa1, +0xdc, +0x7c, +0x1c, +0x24, +0x42, +0xa6, +0x3c, +0x8f, +0x17, +0x01, +0xc8, +0x64, +0xbd, +0xfd, +0x6b, +0x5a, +0xdb, +0x10, +0x08, +0xf7, +0x7c, +0x50, +0xdc, +0x88, +0x2e, +0xf7, +0xf8, +0x02, +0x26, +0x67, +0x0d, +0xe6, +0x9c, +0xf6, +0x3d, +0xb6, +0x9c, +0x48, +0x3f, +0x4c, +0x27, +0x70, +0x14, +0xe7, +0x84, +0x3a, +0x94, +0x72, +0x9a, +0x42, +0x54, +0xb7, +0x6f, +0xb2, +0x14, +0xf1, +0xe6, +0x4c, +0xd7, +0x17, +0xe1, +0x70, +0x5a, +0x50, +0x39, +0x2b, +0xf6, +0x7a, +0xcb, +0x46, +0xd5, +0x53, +0x2f, +0x27, +0xf0, +0x12, +0xd8, +0xba, +0xb6, +0x39, +0x1d, +0x0b, +0xb3, +0xbf, +0xe9, +0x0d, +0xf5, +0x36, +0x8f, +0xfa, +0x99, +0xc3, +0xef, +0x6c, +0x12, +0x14, +0x97, +0xa5, +0x7d, +0x71, +0x95, +0x68, +0x6f, +0x0f, +0x52, +0x10, +0x4d, +0x06, +0x8f, +0xe4, +0x01, +0x75, +0x7e, +0x06, +0xf5, +0xe6, +0xdd, +0xd4, +0x34, +0x2d, +0x74, +0x3c, +0x5e, +0x20, +0xba, +0xcf, +0x33, +0x09, +0x9f, +0xf2, +0x5e, +0x23, +0x17, +0x35, +0x41, +0xd7, +0xe7, +0x3d, +0x3d, +0x8a, +0x24, +0xbb, +0x45, +0x4e, +0xa9, +0x03, +0x2c, +0x09, +0xd7, +0x4f, +0xaa, +0x70, +0xb6, +0x1c, +0xe2, +0xcb, +0xf6, +0xef, +0x0e, +0x08, +0x90, +0x0c, +0x23, +0xe8, +0x44, +0xd5, +0x5d, +0x83, +0xb2, +0xed, +0x80, +0xdf, +0xf2, +0xa7, +0xaa, +0xfe, +0xa9, +0x43, +0x0e, +0xe8, +0x48, +0xff, +0x0c, +0xc4, +0xd8, +0x79, +0x7c, +0x94, +0x20, +0x83, +0x04, +0xc4, +0x85, +0xc2, +0x46, +0x1a, +0x99, +0x2d, +0xff, +0x65, +0x56, +0x81, +0x11, +0x54, +0x5a, +0xab, +0xe1, +0xc5, +0xad, +0xb3, +0xfe, +0xc3, +0xfd, +0xd4, +0x28, +0xb0, +0xa8, +0xab, +0x1d, +0x5e, +0x37, +0x7c, +0xdb, +0x11, +0xa8, +0x14, +0x57, +0x13, +0x86, +0x6a, +0x81, +0x7e, +0x9c, +0x31, +0x94, +0x89, +0xb5, +0x8c, +0x35, +0xbd, +0xe1, +0xae, +0xf9, +0x5f, +0x74, +0x88, +0x58, +0x7a, +0x0e, +0x2b, +0x7e, +0x4c, +0xd8, +0x38, +0x10, +0xab, +0xfc, +0x22, +0xae, +0xc9, +0x3f, +0x32, +0x85, +0xff, +0x90, +0xd8, +0xb0, +0x2b, +0x5b, +0x1f, +0x92, +0x18, +0x28, +0x5f, +0xf4, +0x58, +0x37, +0x8c, +0xc5, +0xe6, +0xfd, +0x69, +0x27, +0x95, +0xc6, +0x64, +0x0c, +0x0a, +0x0b, +0xe9, +0xbb, +0xf7, +0xb9, +0x10, +0x68, +0xca, +0x34, +0x36, +0xa3, +0x85, +0xb1, +0xd8, +0xdb, +0x48, +0x32, +0x6f, +0xbf, +0x50, +0x63, +0x83, +0x72, +0xb3, +0x87, +0xbd, +0x6b, +0x39, +0xd2, +0x6c, +0xaf, +0x0a, +0x1f, +0xaf, +0x21, +0x87, +0xc7, +0xcc, +0x32, +0x7a, +0xf3, +0xed, +0xce, +0xcd, +0x9c, +0x12, +0x6c, +0x00, +0x93, +0xde, +0x93, +0x52, +0x86, +0x44, +0x6f, +0xdd, +0xbd, +0x8d, +0x67, +0xf2, +0xe6, +0x3d, +0xce, +0xaf, +0xc8, +0x05, +0xc9, +0x16, +0xb7, +0xe6, +0x29, +0x4d, +0xc8, +0xc3, +0x76, +0xbb, +0x83, +0x90, +0x91, +0xd1, +0x68, +0x9c, +0x9a, +0x46, +0xa6, +0xaa, +0x05, +0x8a, +0x92, +0x88, +0x49, +0x35, +0x5e, +0x19, +0x2e, +0xda, +0xa9, +0xf7, +0xbe, +0x31, +0x99, +0xad, +0xcf, +0x2f, +0xcd, +0x65, +0x61, +0xc9, +0xda, +0xc1, +0x91, +0xfd, +0xac, +0x7f, +0xb9, +0xec, +0xdc, +0x50, +0x74, +0x68, +0x7f, +0x18, +0x74, +0xae, +0xe8, +0x46, +0xdf, +0x18, +0x30, +0xf9, +0xb4, +0x96, +0x17, +0x2d, +0x78, +0x89, +0xef, +0x8b, +0xc7, +0x68, +0x8f, +0x3f, +0xc6, +0xec, +0xd8, +0x33, +0xa5, +0xd7, +0xf1, +0xbb, +0x75, +0x9a, +0x53, +0x9d, +0x49, +0x83, +0x49, +0x01, +0x4b, +0x58, +0x93, +0xa8, +0xd9, +0xae, +0x1d, +0xcb, +0xb0, +0x54, +0xa7, +0xfd, +0x3e, +0x60, +0x38, +0x4e, +0x7c, +0xcc, +0x98, +0x12, +0x7c, +0xe9, +0x2b, +0xde, +0x7e, +0x4f, +0x96, +0x87, +0x35, +0xd3, +0xf0, +0x6d, +0x8d, +0x7a, +0x61, +0x50, +0xa5, +0xad, +0x51, +0x9a, +0x6c, +0x04, +0x52, +0x84, +0x2c, +0xfa, +0x90, +0x78, +0x7f, +0xb1, +0x45, +0x8c, +0xb1, +0x09, +0x7e, +0xe9, +0x9f, +0xe6, +0xa0, +0xee, +0x0c, +0x03, +0x13, +0x29, +0xa2, +0x69, +0xc8, +0x74, +0xe9, +0x23, +0x07, +0x3c, +0xd8, +0xa5, +0xff, +0x70, +0xa9, +0x20, +0x83, +0xf0, +0x65, +0x21, +0x89, +0x53, +0x64, +0x0d, +0x25, +0x06, +0xd4, +0xd2, +0x10, +0xc2, +0x86, +0x80, +0xd6, +0x31, +0x69, +0xe9, +0x0a, +0xd3, +0x2f, +0xc2, +0xc9, +0xb6, +0x00, +0xb4, +0xd6, +0x09, +0xe2, +0x4c, +0x92, +0x41, +0x7a, +0x30, +0xef, +0xe3, +0xf2, +0xa8, +0x1e, +0xe7, +0x00, +0x3e, +0x96, +0x39, +0xbc, +0x90, +0x2c, +0x84, +0xa1, +0x1e, +0x79, +0x96, +0xe1, +0x19, +0x7e, +0x69, +0x3a, +0x51, +0x5c, +0x04, +0xf3, +0xfe, +0x44, +0x5c, +0x50, +0x42, +0x28, +0x6e, +0x61, +0xed, +0xc5, +0xa5, +0xe1, +0x04, +0xf9, +0x07, +0x3f, +0xf9, +0xdd, +0xc3, +0x6d, +0x50, +0x16, +0x20, +0x31, +0x0f, +0xa5, +0x89, +0xfd, +0x6d, +0xce, +0x66, +0xfd, +0xd0, +0x6c, +0xe8, +0x6b, +0x1a, +0x6e, +0x6b, +0x81, +0x98, +0x24, +0x83, +0x30, +0x20, +0x33, +0x78, +0x5b, +0xf9, +0x98, +0xe8, +0x06, +0xff, +0x0e, +0x45, +0x65, +0x35, +0x78, +0x5e, +0x7f, +0xe8, +0xce, +0xc8, +0x2c, +0xcf, +0xca, +0x4a, +0xa1, +0x0d, +0x71, +0x3e, +0xa0, +0x15, +0xbf, +0xa9, +0x6a, +0x61, +0x02, +0xb5, +0x88, +0x90, +0xa6, +0xe8, +0xd0, +0x5d, +0xdb, +0x5f, +0x7b, +0xc9, +0xde, +0x4f, +0x0b, +0x6f, +0x84, +0x39, +0x9b, +0xbc, +0x79, +0x30, +0x5c, +0x2e, +0x19, +0x8f, +0x03, +0x9b, +0x2f, +0x68, +0x17, +0xd3, +0x4d, +0x15, +0xfc, +0xea, +0x44, +0xb6, +0x98, +0xd4, +0x05, +0x3f, +0xd7, +0x1b, +0x35, +0x1a, +0x30, +0x4b, +0xbe, +0x1c, +0xcb, +0x94, +0x24, +0xac, +0x45, +0x14, +0xdf, +0x90, +0xbf, +0x0e, +0x98, +0xe9, +0x84, +0xab, +0xb5, +0xfc, +0xe6, +0xec, +0x11, +0x22, +0x75, +0xf3, +0x8e, +0x27, +0xd5, +0x6a, +0xaf, +0xe6, +0x15, +0x8f, +0xbe, +0x3a, +0x63, +0x81, +0xde, +0xe1, +0x41, +0xec, +0x14, +0x8e, +0x24, +0xdc, +0x79, +0xf2, +0x9d, +0xaf, +0xdb, +0x09, +0x3d, +0x99, +0xbb, +0x66, +0xf2, +0xa4, +0x24, +0xb9, +0x86, +0xaa, +0xc6, +0x5b, +0x55, +0xba, +0xb9, +0x28, +0xd1, +0x6a, +0x13, +0x48, +0x68, +0xd1, +0x3c, +0xd8, +0xef, +0xb7, +0x68, +0x99, +0xeb, +0xed, +0x63, +0x6d, +0x09, +0xf9, +0xdf, +0xde, +0x30, +0x72, +0x13, +0xcf, +0x02, +0xba, +0x15, +0x8a, +0x1d, +0xfe, +0x40, +0x02, +0x9f, +0x7b, +0xb5, +0x07, +0xcf, +0x9a, +0x09, +0xb2, +0x32, +0x1f, +0xf6, +0x67, +0x2a, +0x4a, +0x57, +0x33, +0x63, +0x22, +0xaa, +0x5f, +0x94, +0xd1, +0x30, +0x68, +0x48, +0xed, +0x2c, +0xde, +0x66, +0x0c, +0x2c, +0x38, +0xdf, +0x9c, +0x40, +0x03, +0xef, +0x07, +0xac, +0x6c, +0x42, +0xeb, +0xa0, +0x21, +0xc4, +0x9a, +0x04, +0x46, +0xee, +0x8c, +0x88, +0xb0, +0xfd, +0xa9, +0x1e, +0x7b, +0x11, +0x2d, +0x97, +0x11, +0x00, +0xe5, +0x3a, +0x41, +0x25, +0x0d, +0xc0, +0xff, +0xe2, +0x67, +0x7b, +0xf3, +0xf6, +0x4d, +0xa1, +0x71, +0xcd, +0xe7, +0x5a, +0xa2, +0x48, +0x0b, +0x0a, +0x48, +0xe3, +0x9a, +0x35, +0x7a, +0x35, +0x11, +0x4c, +0x0e, +0x9b, +0x51, +0xe2, +0xdd, +0x1c, +0x78, +0x40, +0x67, +0x8b, +0x13, +0x8d, +0x6b, +0xec, +0xb3, +0xfa, +0x5c, +0xfe, +0xcd, +0xbc, +0xa0, +0x34, +0x4a, +0x2e, +0xc6, +0x3b, +0x55, +0x80, +0xbd, +0xb9, +0x71, +0xe0, +0x65, +0xe1, +0x11, +0x31, +0xf8, +0x40, +0xe4, +0x8d, +0x49, +0x2e, +0x7c, +0x00, +0x06, +0xbc, +0x4c, +0xaf, +0xd7, +0x23, +0x66, +0xf1, +0x96, +0xeb, +0x55, +0x54, +0x13, +0x65, +0x11, +0x1a, +0x17, +0x21, +0x17, +0xd6, +0xdd, +0x3f, +0xd1, +0x32, +0xda, +0x3a, +0x2e, +0x8f, +0xe3, +0xa8, +0xd4, +0x7e, +0xe8, +0xca, +0xf3, +0x99, +0x69, +0x4f, +0x56, +0xd9, +0xf5, +0x8d, +0x67, +0x52, +0xaa, +0xa5, +0x58, +0x5e, +0x21, +0xf8, +0x28, +0xef, +0x96, +0x6c, +0x4f, +0x49, +0x4d, +0xd7, +0x1a, +0xda, +0xd9, +0x2f, +0xf9, +0x85, +0x75, +0x24, +0x4e, +0x1a, +0xa4, +0x98, +0x71, +0x7e, +0x1c, +0xed, +0xb7, +0x31, +0x3e, +0x5d, +0x9c, +0x2a, +0xed, +0x16, +0xaf, +0x04, +0x4b, +0x5a, +0x5e, +0xb0, +0xa0, +0x58, +0xe7, +0x31, +0xec, +0xb0, +0x64, +0xb9, +0x60, +0x6f, +0x83, +0xce, +0xef, +0x8f, +0x39, +0x05, +0x3c, +0xca, +0xc6, +0x6d, +0xb0, +0xc6, +0xf3, +0x79, +0xb9, +0x24, +0x6a, +0xc8, +0xd7, +0xb5, +0x15, +0xa7, +0xa7, +0xb9, +0x2c, +0xed, +0x5c, +0x1c, +0xd4, +0xd4, +0x89, +0xdb, +0xf6, +0x40, +0x73, +0xa2, +0x09, +0xbe, +0x96, +0x65, +0xd0, +0x72, +0xc2, +0x94, +0x17, +0x7b, +0x03, +0x8b, +0xd0, +0x2f, +0x67, +0x19, +0x82, +0x56, +0x39, +0xa8, +0x9d, +0x8c, +0x11, +0xa2, +0x68, +0xd4, +0x84, +0x79, +0xba, +0x76, +0x09, +0x27, +0x2a, +0x12, +0xa4, +0x53, +0x32, +0xda, +0x71, +0x98, +0x36, +0x08, +0x9b, +0x73, +0x55, +0x39, +0xc5, +0xd8, +0xe7, +0x4a, +0xb8, +0x0c, +0x0d, +0x83, +0x11, +0xe9, +0x8d, +0xbc, +0x06, +0x60, +0xff, +0x08, +0xe7, +0x14, +0x73, +0xd5, +0x2d, +0x4a, +0xb6, +0x5a, +0x3d, +0x43, +0xea, +0xd1, +0xde, +0x98, +0xf4, +0xe3, +0xc7, +0x6d, +0xbc, +0x59, +0xae, +0xfc, +0x00, +0xf3, +0x2f, +0x57, +0xa6, +0xb0, +0xb2, +0x74, +0xfc, +0x67, +0x9d, +0x9e, +0x46, +0xa0, +0xaa, +0x05, +0x84, +0x10, +0x47, +0x50, +0xc2, +0xc0, +0xda, +0x07, +0xc7, +0x4d, +0xe1, +0xf1, +0x9b, +0x23, +0xd5, +0xf4, +0x77, +0xd5, +0x64, +0xc2, +0xf0, +0x16, +0x63, +0x24, +0x3b, +0x30, +0x15, +0xfa, +0x68, +0x83, +0x40, +0xf2, +0x61, +0xe2, +0x9c, +0xdf, +0xa7, +0x91, +0xf7, +0x39, +0x3d, +0xe8, +0x38, +0x78, +0x28, +0xf3, +0xb5, +0x6a, +0x78, +0x51, +0x74, +0x53, +0x16, +0xed, +0x81, +0x06, +0x0d, +0xda, +0x51, +0xb0, +0x3f, +0xc5, +0x1a, +0x56, +0xae, +0xd0, +0xc2, +0x14, +0x5c, +0xad, +0xfa, +0xd8, +0x2f, +0xef, +0x5d, +0x47, +0x4f, +0x95, +0x8a, +0x27, +0x80, +0x11, +0xd1, +0x6b, +0x43, +0xab, +0xea, +0x57, +0xad, +0xe4, +0xc6, +0x5f, +0x5a, +0x46, +0x66, +0x9f, +0x67, +0x90, +0xf1, +0x3e, +0x7d, +0x02, +0xcc, +0x1d, +0x4e, +0x8c, +0xb2, +0x78, +0x10, +0x68, +0x7f, +0x23, +0x14, +0xea, +0xa0, +0x6c, +0x48, +0xce, +0x23, +0xf2, +0x4c, +0x25, +0x94, +0x80, +0xda, +0x9f, +0xe5, +0x70, +0x4b, +0x1a, +0x94, +0xf3, +0xb3, +0x67, +0xfd, +0x47, +0x0e, +0x87 +}; + + + +/* -----------EXPECTED OUTPUTS----------- */ +uint8_t exp_outp_0 [] = { +0xf7, +0x15, +0x51, +0x51, +0x24, +0x15, +0x55, +0x55, +0x51, +0x5c, +0x50, +0x45, +0x55, +0x11, +0xc0, +0x05, +0x55, +0x15, +0x55, +0x45, +0x55, +0x55, +0x51, +0x45, +0x51, +0xc4, +0x55, +0x55, +0x55, +0x54, +0x55, +0x55, +0x55, +0x14, +0x54, +0x50, +0x51, +0x0c, +0xd5, +0x11, +0x54, +0x55, +0x5d, +0x75, +0x47, +0x50, +0x44, +0x14, +0x10, +0x50, +0x54, +0x35, +0x57, +0x14, +0x44, +0x45, +0x54, +0x55, +0x50, +0x1d, +0x55, +0x11, +0x15, +0x05, +0x54, +0x51, +0xd5, +0x45, +0x51, +0xd5, +0x55, +0x55, +0x54, +0x51, +0x50, +0x45, +0xd4, +0x47, +0x10, +0x4d, +0x55, +0x55, +0x51, +0x51, +0xf4, +0x54, +0xd8, +0x59, +0x05, +0xb3, +0x4f, +0x15, +0x54, +0x50, +0x15, +0xd4, +0xc5, +0x93, +0x45, +0x15, +0x54, +0x55, +0xb5, +0x1c, +0x54, +0x50, +0x55, +0x55, +0x55, +0x41, +0xc5, +0x55, +0x15, +0xc5, +0x10, +0x55, +0x54, +0x51, +0x75, +0x55, +0x55, +0x17, +0x55, +0x55, +0x55, +0x5c, +0x05, +0x55, +0x55, +0x11, +0x55, +0x45, +0xc7, +0x4c, +0x57, +0x55, +0x15, +0x55, +0x54, +0x51, +0x55, +0x51, +0x55, +0x51, +0x41, +0x70, +0x55, +0x15, +0x45, +0x0d, +0x1d, +0x55, +0x4c, +0x51, +0x05, +0x51, +0x55, +0x45, +0xc5, +0x51, +0x51, +0x51, +0x55, +0x15, +0x5d, +0x50, +0x55, +0x55, +0x41, +0x44, +0x15, +0x55, +0x45, +0x54, +0x55, +0x10, +0x55, +0x55, +0x15, +0x55, +0x11, +0x55, +0xf5, +0x55, +0x15, +0x55, +0x55, +0x51, +0x45, +0x05, +0x51, +0x55, +0x54, +0x05, +0x44, +0x71, +0x5c, +0x55, +0x44, +0x55, +0x35, +0x45, +0x1c, +0x50, +0x55, +0x45, +0x55, +0x15, +0x5e, +0x15, +0x11, +0x55, +0x54, +0x55, +0x45, +0x54, +0x54, +0x55, +0x55, +0x55, +0x51, +0x15, +0x05, +0x51, +0x55, +0x51, +0x50, +0x51, +0x45, +0x00, +0x54, +0x75, +0x14, +0x45, +0x5d, +0x44, +0x51, +0x55, +0x15, +0x40, +0xd4, +0x45, +0x45, +0x17, +0x45, +0x55, +0x71, +0x05, +0x40, +0x11, +0x13, +0xd4, +0x15, +0x51, +0x55, +0x01, +0x57, +0x50, +0x55, +0x74, +0x15, +0x55, +0x51, +0x47, +0x15, +0x55, +0x17, +0x55, +0x4d, +0x45, +0x41, +0x04, +0x15, +0x14, +0x51, +0x51, +0x5d, +0x55, +0x31, +0x55, +0x47, +0x55, +0x15, +0x41, +0x55, +0x41, +0x04, +0x55, +0x54, +0x55, +0x54, +0x5e, +0x55, +0x15, +0x44, +0x45, +0xd1, +0x15, +0x55, +0x15, +0x75, +0x54, +0x54, +0x34, +0x15, +0x15, +0x54, +0x55, +0x54, +0x05, +0x55, +0x14, +0x55, +0x14, +0x15, +0x11, +0x51, +0x50, +0x45, +0x55, +0x1d, +0x51, +0x15, +0x10, +0x55, +0x55, +0xd4, +0x45, +0x55, +0x55, +0x55, +0x35, +0x55, +0x15, +0x75, +0x54, +0x5c, +0x54, +0x45, +0x74, +0x51, +0x55, +0x55, +0x75, +0x40, +0x41, +0xd0, +0x5d, +0x51, +0x54, +0x55, +0x41, +0x45, +0x57, +0x75, +0x55, +0x50, +0x05, +0x54, +0x05, +0x74, +0x51, +0x51, +0x75, +0x13, +0x34, +0x15, +0x41, +0x54, +0x5d, +0x5c, +0x5d, +0x53, +0x04, +0x44, +0x41, +0x55, +0x55, +0x54, +0x55, +0x54, +0x01, +0x41, +0x91, +0x45, +0x40, +0xc1, +0x44, +0x50, +0x55, +0x51, +0x51, +0x55, +0x3c, +0x50, +0x55, +0x51, +0x55, +0x50, +0xd5, +0x15, +0x55, +0x5d, +0xc5, +0x55, +0x45, +0x55, +0x41, +0x55, +0x41, +0x54, +0x54, +0x57, +0x75, +0xd0, +0x71, +0x01, +0x75, +0x15, +0x54, +0x45, +0x45, +0x54, +0x71, +0x51, +0x55, +0xc5, +0x5d, +0x55, +0x44, +0x15, +0x47, +0x1c, +0x5d, +0x55, +0x53, +0x55, +0x55, +0x15, +0x55, +0x45, +0x55, +0x01, +0x55, +0x15, +0x55, +0x44, +0x51, +0xd1, +0xd5, +0x14, +0x41, +0x15, +0x54, +0x55, +0x55, +0xd4, +0x15, +0x45, +0x01, +0x71, +0x44, +0x54, +0xd5, +0x54, +0x4d, +0x14, +0x51, +0x01, +0x15, +0x4d, +0x55, +0x55, +0x45, +0x44, +0x75, +0x54, +0x0d, +0x45, +0x01, +0x55, +0xd5, +0x15, +0x45, +0x55, +0x55, +0x55, +0x54, +0xd4, +0x54, +0x55, +0x17, +0x55, +0x55, +0x49, +0x65, +0x14, +0x74, +0x40, +0x5d, +0x55, +0x34, +0x54, +0x55, +0x44, +0xd5, +0x55, +0x55, +0x55, +0x40, +0x54, +0x51, +0xc5, +0x01, +0x15, +0x51, +0x55, +0x54, +0x50, +0x48, +0x45, +0x5d, +0x55, +0x04, +0x54, +0xd1, +0x54, +0x57, +0x55, +0x54, +0x05, +0x11, +0x41, +0x54, +0x35, +0xd5, +0x55, +0x56, +0x15, +0x45, +0x15, +0x50, +0x74, +0x50, +0x40, +0x54, +0x55, +0x55, +0x55, +0x15, +0x6d, +0x51, +0x54, +0x54, +0x75, +0x55, +0x51, +0x51, +0xf1, +0x54, +0x44, +0x51, +0x10, +0x05, +0x00, +0xc7, +0x55, +0x05, +0x5c, +0x74, +0x11, +0x5d, +0x4d, +0x44, +0x34, +0x44, +0x51, +0xd5, +0x55, +0xcd, +0x51, +0x45, +0x47, +0x55, +0x54, +0x11, +0x55, +0x55, +0x05, +0x45, +0x45, +0x55, +0x54, +0x51, +0x45, +0x51, +0x01, +0x15, +0x50, +0x40, +0x44, +0x54, +0x14, +0x55, +0x41, +0x41, +0x01, +0x55, +0x55, +0x55, +0x15, +0x55, +0x44, +0x55, +0x15, +0x07, +0xc4, +0x15, +0x45, +0x5d, +0x55, +0x15, +0x54, +0x51, +0x55, +0x55, +0x51, +0x51, +0x55, +0x10, +0x55, +0x5d, +0x54, +0x11, +0x55, +0x4c, +0xd5, +0x51, +0x45, +0x50, +0x55, +0x45, +0x41, +0x15, +0x57, +0x75, +0x33, +0x55, +0x54, +0x10, +0x15, +0x50, +0x55, +0xc4, +0x7d, +0x55, +0x45, +0x15, +0x45, +0x15, +0x45, +0x55, +0x15, +0x55, +0x51, +0x45, +0x51, +0x55, +0x51, +0x41, +0x15, +0x44, +0x45, +0x55, +0x47, +0x14, +0x54, +0x53, +0x54, +0x51, +0x05, +0x55, +0x55, +0x55, +0x55, +0x55, +0x51, +0x51, +0x15, +0x51, +0x14, +0x55, +0x55, +0x45, +0x54, +0x50, +0x55, +0x55, +0x45, +0x4d, +0x51, +0x50, +0x55, +0x55, +0x50, +0x55, +0x57, +0x41, +0x54, +0x55, +0x04, +0x1d, +0x41, +0x55, +0xd4, +0xdd, +0x4d, +0x14, +0x11, +0x55, +0x51, +0x74, +0x45, +0x01, +0x44, +0x55, +0x55, +0x40, +0x55, +0x51, +0x51, +0x55, +0x55, +0x55, +0x45, +0x75, +0x53, +0x5c, +0x54, +0x55, +0x51, +0x15, +0x55, +0x01, +0x55, +0x55, +0x54, +0x55, +0x15, +0x50, +0x11, +0x50, +0x14, +0x53, +0x55, +0x55, +0x54, +0x15, +0x5c, +0x45, +0x7d, +0x18, +0x14, +0x55, +0x44, +0x55, +0x1d, +0x55, +0x54, +0x05, +0x54, +0x50, +0x05, +0x47, +0x54, +0xdc, +0x51, +0x51, +0x51, +0x14, +0x54, +0x54, +0x55, +0x45, +0x55, +0x50, +0x55, +0x55, +0x15, +0x44, +0x54, +0x51, +0x15, +0x55, +0x51, +0x11, +0x14, +0x54, +0x55, +0x45, +0x41, +0x15, +0x04, +0x55, +0x70, +0x10, +0x54, +0x55, +0x75, +0x55, +0x55, +0x45, +0x54, +0x45, +0x01, +0x55, +0x15, +0x74, +0x35, +0x15, +0x14, +0x51, +0x55, +0xd1, +0x55, +0x55, +0x74, +0x51, +0x11, +0x45, +0x41, +0xd5, +0x15, +0xd0, +0x55, +0x55, +0x05, +0x05, +0x45, +0x4d, +0x1c, +0x55, +0x15, +0x01, +0x75, +0x55, +0x54, +0x15, +0x55, +0x50, +0x51, +0x55, +0x51, +0x55, +0x14, +0xd5, +0xd5, +0x57, +0x15, +0x0c, +0x47, +0x55, +0x05, +0x5c, +0x55, +0x51, +0x55, +0x75, +0x5c, +0x4d, +0x45, +0xd5, +0x50, +0x5d, +0x45, +0x55, +0x54, +0x55, +0x5d, +0x05, +0x51, +0x5d, +0x15, +0x51, +0x54, +0x52, +0x54, +0x55, +0x55, +0x55, +0x14, +0xd4, +0x40, +0x5d, +0x54, +0x45, +0x10, +0x50, +0x55, +0x51, +0x51, +0x11, +0x41, +0x57, +0x55, +0x55, +0xd0, +0x55, +0x13, +0x40, +0x04, +0xd5, +0x45, +0x57, +0x55, +0x51, +0x10, +0x05, +0x55, +0x54, +0x54, +0x51, +0x45, +0xd4, +0x75, +0x55, +0x11, +0x54, +0x45, +0x55, +0x15, +0x55, +0x45, +0x1d, +0x15, +0x55, +0x4d, +0x45, +0x15, +0x11, +0xd4, +0x55, +0x55, +0x55, +0x50, +0x55, +0x45, +0x04, +0x64, +0x50, +0x55, +0x11, +0x14, +0x45, +0x45, +0x50, +0x55, +0x54, +0x45, +0x15, +0x41, +0x45, +0x60, +0x54, +0x15, +0x55, +0x41, +0x55, +0x50, +0x15, +0x55, +0x0d, +0x55, +0x51, +0x45, +0x55, +0x34, +0x15, +0x55, +0x57, +0x50, +0x10, +0x55, +0x50, +0x50, +0x41, +0x05, +0x04, +0x55, +0x55, +0x55, +0x05, +0x01, +0x11, +0x41, +0x05, +0x71, +0x41, +0x54, +0xd4, +0x55, +0x11, +0x55, +0x45, +0x15, +0x55, +0x45, +0x85, +0x05, +0x35, +0x51, +0x45, +0x41, +0x14, +0x40, +0x55, +0x55, +0x15, +0xc5, +0xc5, +0x55, +0x45, +0x55, +0x41, +0x05, +0x05, +0x41, +0x45, +0x50, +0x54, +0x43, +0x11, +0x05, +0x45, +0x54, +0x51, +0x55, +0x11, +0x41, +0xd1, +0x45, +0x44, +0x55, +0x55, +0x55, +0x55, +0x47, +0x05, +0xd1, +0x45, +0x15, +0x51, +0x54, +0x55, +0x55, +0x14, +0x45, +0x55, +0x51, +0x50, +0x44, +0x50, +0x74, +0x17, +0x51, +0x55, +0x57, +0x05, +0x11, +0x11, +0x55, +0x75, +0x51, +0x55, +0x71, +0x05, +0x11, +0x45, +0x57, +0x5c, +0x51, +0x54, +0xd0, +0x54, +0x45, +0x45, +0x54, +0x11, +0x41, +0x5c, +0x50, +0x55, +0xd5, +0x51, +0x17, +0x45, +0x17, +0x05, +0x55, +0x41, +0x51, +0x11, +0x45, +0x54, +0x14, +0x55, +0x54, +0x51, +0x55, +0x15, +0x55, +0x5c, +0xd5, +0x71, +0x34, +0x51, +0x15, +0x54, +0x15, +0x55, +0x55, +0xc4, +0x15, +0x05, +0x55, +0xe1, +0x54, +0x04, +0x05, +0x54, +0x54, +0x51, +0x55, +0x0d, +0x95, +0x55, +0x54, +0x5d, +0x55, +0x55, +0x51, +0x35, +0x01, +0x51, +0x50, +0x04, +0x17, +0x55, +0x5d, +0x55, +0x15, +0x50, +0x51, +0x45, +0x41, +0x55, +0x41, +0x54, +0xd5, +0x55, +0x55, +0xc4, +0xc5, +0x55, +0x54, +0x41, +0x40, +0x50, +0x14, +0x55, +0x45, +0x11, +0x54, +0x05, +0xd5, +0x5d, +0xd4, +0x75, +0x0c, +0x11, +0x55, +0x45, +0x14, +0xc7, +0x55, +0x55, +0x75, +0x15, +0x55, +0x45, +0x55, +0x51, +0x41, +0x55, +0x45, +0x54, +0x51, +0x55, +0x50, +0x75, +0x41, +0x58, +0x5d, +0x55, +0x45, +0x40, +0x51, +0x54, +0x55, +0x55, +0x55, +0x51, +0x45, +0x55, +0x47, +0xd5, +0x45, +0x51, +0x15, +0x44, +0x54, +0x54, +0xd1, +0x55, +0x50, +0x55, +0x55, +0x41, +0x55, +0x11, +0x45, +0x55, +0x55, +0x15, +0xcd, +0x51, +0x11, +0x45, +0x54, +0x57, +0x05, +0x04, +0x55, +0x44, +0x54, +0x59, +0x51, +0x51, +0xd5, +0x55, +0x51, +0x15, +0x55, +0x14, +0x44, +0x17, +0x41, +0x15, +0x55, +0x45, +0x55, +0x65, +0x45, +0x54, +0x44, +0x31, +0xd5, +0x10, +0x51, +0x54, +0x54, +0x51, +0x07, +0x55, +0x11, +0x55, +0x45, +0x55, +0x05, +0x55, +0x55, +0x15, +0x14, +0x51, +0x54, +0x54, +0x11, +0x54, +0x45, +0x75, +0x75, +0x05, +0x05, +0x51, +0x04, +0xd5, +0x54, +0x45, +0x57, +0x55, +0x5d, +0x55, +0x15, +0x55, +0x54, +0x14, +0x65, +0x05, +0x45, +0x53, +0x45, +0x54, +0x54, +0x17, +0x45, +0x55, +0x01, +0xd5, +0x14, +0x10, +0x54, +0x5d, +0x15, +0x55, +0x55, +0x51, +0x45, +0x10, +0x55, +0xc5, +0x55, +0x45, +0x51, +0x55, +0x55, +0x35, +0x40, +0x54, +0x15, +0x55, +0x55, +0x17, +0x4c, +0x54, +0x55, +0x57, +0x72, +0x45, +0x44, +0x5f, +0x07, +0x11, +0x55, +0x75, +0x55, +0x41, +0x45, +0xd7, +0x45, +0xdd, +0x40, +0xd5, +0x40, +0x04, +0x57, +0x5c, +0x55, +0x54, +0x55, +0x55, +0x35, +0x14, +0x47, +0x31, +0x45, +0x51, +0x45, +0x05, +0x51, +0x44, +0x1c, +0x14, +0x51, +0x11, +0x10, +0x00, +0x45, +0x14, +0x51, +0x5d, +0x55, +0x5d, +0x54, +0x45, +0x54, +0x55, +0x15, +0x44, +0xf9, +0x44, +0x54, +0x55, +0x10, +0x45, +0x55, +0x55, +0x51, +0x15, +0x11, +0x55, +0x55, +0x15, +0x14, +0x1c, +0x51, +0x17, +0x41, +0x44, +0x51, +0x41, +0x51, +0x54, +0x75, +0x74, +0x57, +0x17, +0x51, +0xc5, +0x5d, +0x54, +0x15, +0x55, +0x55, +0x75, +0xd5, +0x55, +0x47, +0x31, +0x05, +0x54, +0x11, +0x55, +0x55, +0x15, +0x55, +0xd1, +0x7d, +0x1d, +0x55, +0x15, +0x5d, +0x45, +0x75, +0x1d, +0x5d, +0x51, +0x15, +0x47, +0x05, +0x55, +0x51, +0x54, +0x55, +0x15, +0x55, +0x11, +0x51, +0x43, +0x55, +0x11, +0x15, +0x19, +0x05, +0x40, +0x55, +0x55, +0x15, +0x05, +0x15, +0x14, +0x57, +0x05, +0x54, +0x34, +0x1d, +0x55, +0xd4, +0x14, +0x54, +0x1d, +0x05, +0x57, +0x05, +0x15, +0xd1, +0x55, +0x55, +0x11, +0xf5, +0x55, +0x78, +0x51, +0x54, +0x55, +0x45, +0x55, +0x57, +0x55, +0x51, +0x55, +0x05, +0x5d, +0x55, +0x54, +0x55, +0x51, +0x35, +0x05, +0x55, +0xd5, +0x51, +0x55, +0x50, +0x15, +0x55, +0x55, +0x45, +0x14, +0x55, +0x15, +0x15, +0x04, +0x55, +0x14, +0x51, +0x14, +0x51, +0x55, +0xc5, +0x54, +0x15, +0x5d, +0x14, +0x41, +0x55, +0x40, +0x55, +0x55, +0x55, +0x11, +0x15, +0x15, +0x55, +0x55, +0x04, +0x04, +0x55, +0x55, +0x55, +0x40, +0x51, +0x55, +0x54, +0x70, +0x15, +0x55, +0x51, +0x44, +0x50, +0x54, +0x11, +0x00, +0x55, +0x15, +0x15, +0x75, +0x55, +0xd5, +0x11, +0x54, +0x55, +0x45, +0x10, +0x50, +0x54, +0x15, +0x55, +0x55, +0x44, +0x55, +0x15, +0x5d, +0x14, +0x55, +0x71, +0x55, +0x54, +0x51, +0x54, +0x1c, +0x45, +0x55, +0x55, +0x1c, +0x50, +0x55, +0x14, +0x55, +0x35, +0x41, +0x45, +0x55, +0x51, +0x50, +0x55, +0x1c, +0xd5, +0xcb, +0x57, +0x10, +0x54, +0x71, +0x75, +0x57, +0x55, +0x5d, +0x53, +0x54, +0x44, +0x51, +0x51, +0x35, +0xc1, +0x51, +0x15, +0x55, +0x14, +0x57, +0x45, +0x55, +0x70, +0x74, +0x40, +0x54, +0x54, +0x11, +0x15, +0x45, +0x05, +0x55, +0x55, +0x44, +0x45, +0x55, +0x15, +0x55, +0x45, +0x15, +0x55, +0x55, +0x15, +0x45, +0x51, +0x71, +0x54, +0x54, +0x40, +0x15, +0x55, +0x54, +0x04, +0x44, +0x45, +0x54, +0x51, +0x15, +0x41, +0x14, +0x55, +0x45, +0x45, +0x55, +0x51, +0x11, +0x55, +0xd1, +0x14, +0x55, +0x5d, +0x55, +0x15, +0x94, +0xc5, +0x51, +0x51, +0x55, +0x74, +0x41, +0x45, +0x53, +0x14, +0x45, +0x57, +0xd5, +0x54, +0x34, +0x41, +0x54, +0x75, +0x50, +0x15, +0x14, +0x75, +0x45, +0x55, +0x55, +0x55, +0x05, +0x01, +0x54, +0x43, +0x51, +0x41, +0xd4, +0x14, +0x17, +0x55, +0x54, +0xd5, +0x55, +0x41, +0x55, +0x55, +0x00, +0x5c, +0x55, +0x50, +0x14, +0x05, +0xd5, +0x45, +0x44, +0x15, +0x11, +0x05, +0xd1, +0x55, +0x55, +0xd1, +0x55, +0x55, +0x51, +0x54, +0x55, +0x55, +0x71, +0x14, +0x55, +0x54, +0x17, +0x54, +0x45, +0x55, +0x51, +0x75, +0xd5, +0x51, +0x75, +0x59, +0x50, +0x71, +0x50, +0x40, +0x5d, +0x45, +0x54, +0x15, +0x55, +0x5c, +0x14, +0x51, +0x04, +0x54, +0x55, +0x54, +0x15, +0x04, +0x1d, +0x75, +0x35, +0x15, +0x15, +0x55, +0x50, +0x44, +0x14, +0x45, +0xf3, +0x55, +0x51, +0x44, +0x41, +0x13, +0x55, +0x15, +0x71, +0x15, +0x54, +0x51, +0x50, +0x51, +0x50, +0x55, +0x51, +0x51, +0x55, +0x45, +0x41, +0x55, +0x15, +0x05, +0x45, +0x15, +0xd5, +0xd5, +0x51, +0x51, +0x4c, +0x54, +0x55, +0x54, +0x44, +0x11, +0x05, +0x10, +0x11, +0x45, +0x55, +0x35, +0x5d, +0x51, +0x51, +0x0d, +0x41, +0x45, +0x71, +0x15, +0xdc, +0x55, +0x54, +0x51, +0x50, +0x55, +0x44, +0xd5, +0x14, +0x41, +0x54, +0x4d, +0x15, +0x01, +0x15, +0x54, +0x41, +0x45, +0x55, +0x54, +0x55, +0x15, +0x55, +0x13, +0x55, +0x5c, +0x45, +0x54, +0xd4, +0x11, +0x4c, +0x55, +0x14, +0x51, +0x45, +0x43, +0x55, +0x54, +0x15, +0x51, +0x51, +0x55, +0x55, +0x05, +0x55, +0x04, +0x75, +0x11, +0x51, +0x75, +0xd1, +0x65, +0x14, +0x45, +0x05, +0x11, +0x17, +0x50, +0x55, +0x15, +0x0d, +0x50, +0x55, +0x45, +0x55, +0x15, +0x55, +0x51, +0x50, +0x51, +0x05, +0xc1, +0x15, +0x54, +0x15, +0x15, +0x55, +0x05, +0x11, +0x54, +0x45, +0x57, +0x14, +0x55, +0x54, +0x54, +0x45, +0x11, +0x70, +0x55, +0x55, +0x44, +0x54, +0x45, +0x51, +0xdd, +0x44, +0x41, +0x15, +0x15, +0x14, +0x54, +0x51, +0x55, +0x15, +0x15, +0x11, +0x45, +0x4c, +0x45, +0x45, +0x4d, +0x01, +0x45, +0x55, +0x57, +0x55, +0x51, +0x55, +0x15, +0x50, +0x47, +0x55, +0x55, +0x51, +0x51, +0x54, +0x40, +0x44, +0x55, +0x50, +0x55, +0xc0, +0xd1, +0x05, +0x45, +0x51, +0x45, +0x01, +0x51, +0x15, +0x55, +0x44, +0x44, +0x15, +0x15, +0x55, +0x55, +0x11, +0x54, +0x31, +0x55, +0x54, +0x55, +0x50, +0x15, +0x71, +0xd5, +0x46, +0x41, +0x51, +0x51, +0x55, +0x54, +0x55, +0x15, +0x55, +0x64, +0x50, +0x55, +0x44, +0x41, +0x55, +0x45, +0x54, +0x51, +0x15, +0x05, +0x5d, +0x51, +0x46, +0x55, +0x15, +0x47, +0x15, +0x40, +0x50, +0x54, +0x41, +0x70, +0x50, +0x54, +0x05, +0xd4, +0xc4, +0x11, +0x55, +0x35, +0x44, +0x47, +0x55 +}; + + + +L1_DATA uint32_t threshs_l1 [32] = {0}; +L1_DATA int32_t kappa_l1 [32] = {0}; +L1_DATA int32_t lambda_l1 [32] = {0}; +L1_DATA uint8_t inp_l1 [8192] = {0}; +L1_DATA uint8_t outp_l1 [2048] = {0}; +L1_DATA uint8_t im2col_l1 [IM2COL_DIM] = {0}; + +#endif diff --git a/rt_nn_tests/xpnn_maxpool_2b/dory_dma.c b/rt_nn_tests/xpnn_maxpool_2b/dory_dma.c new file mode 100644 index 0000000..61c9116 --- /dev/null +++ b/rt_nn_tests/xpnn_maxpool_2b/dory_dma.c @@ -0,0 +1,176 @@ +#include "dory_dma.h" + +#include "pmsis.h" + +#ifndef MCHAN_BASE_ADDR +// FIXME: For GAP9, this must point to ARCHI_MCHAN_EXT_ADDR!!! +// In PULP-SDK for Kraken, this is fixed. +// GAP8 hardware to be tested... +#define MCHAN_BASE_ADDR (ARCHI_MCHAN_DEMUX_ADDR) // CLUSTER_MCHAN_ADDR +#endif +#define MCHAN_EVENT +//#define MCHAN_POLLED +#ifdef MCHAN_EVENT +#define MCHAN_EVENT_BIT (ARCHI_CL_EVT_DMA0) // 8 +#endif +#include "mchan.h" + + +#if defined(MCHAN_POLLED) +#define MCHAN_FLAGS (MCHAN_CMD_FLAG_INCREMENTAL) +#elif defined(MCHAN_EVENT) +#define MCHAN_FLAGS (MCHAN_CMD_FLAG_EVENT_ENABLE | MCHAN_CMD_FLAG_INCREMENTAL) +#elif defined(MCHAN_INTERRUPT) +#define MCHAN_FLAGS (MCHAN_CMD_FLAG_INTERRUPT_ENABLE | MCHAN_CMD_FLAG_INCREMENTAL) +#endif + +#define MCHAN_FLAGS_1D (MCHAN_FLAGS) +#define MCHAN_FLAGS_2D (MCHAN_FLAGS | MCHAN_CMD_FLAG_2D_TRANSFER_EXTERNAL) + +#define MIN(a,b) ((a)<(b)?(a):(b)) + +void dory_dma_memcpy_hwc_to_chw(DMA_copy *copy){ + int start_pixel, stop_pixel; // "pixel" is a misnomer; the CHANNELS are divided between the cores + // this function assumes that a DW tile is always as wide as the complete feature map (this is enforced by DORY's tiler) + // if there is only 1 DMA control unit for the cluster (e.g., Kraken), we can't execute DMA calls on multiple clusters. +#ifndef SINGLE_CORE_DMA + int core_id = pi_core_id(); + int Log2Core = log2(NUM_CORES); + int number_of_copies_per_core = (copy->length_1d_copy >> Log2Core) + ((copy->length_1d_copy & (NUM_CORES-1))!=0); + start_pixel = MIN(number_of_copies_per_core * core_id, copy->length_1d_copy); + stop_pixel = MIN(start_pixel + number_of_copies_per_core, copy->length_1d_copy); +#else + start_pixel = 0; + stop_pixel = copy->length_1d_copy; +#endif + void * loc = copy->loc + copy->number_of_1d_copies*copy->number_of_2d_copies*start_pixel; + void * ext = copy->ext + start_pixel; + const int size_2d = copy->number_of_1d_copies * copy->number_of_2d_copies; + + for (int i=start_pixel; idir << MCHAN_CMD_SHIFT_DIRECTION | MCHAN_FLAGS_2D, + .size = size_2d, + .ext = ext, + .loc = loc, + .ext_size_1d = 1, // one byte at a time... + .ext_stride_1d = copy->stride_1d + }; +#ifdef SINGLE_CORE_DMA + if (pi_core_id() == 0) { +#endif + mchan_transfer_push_2d(trans); +#ifdef SINGLE_CORE_DMA + } +#endif +#ifdef ALWAYS_BLOCK_DMA_TRANSFERS // needed on GAP8 board + dory_dma_barrier(copy); +#endif + ext += 1; // next channel + loc += copy->number_of_1d_copies * copy->number_of_2d_copies; + } +} + +void dory_dma_memcpy_1d_async(DMA_copy *copy) { + if (pi_core_id() == 0) { + mchan_transfer_t trans = { + .cmd = copy->length_1d_copy * copy->number_of_1d_copies * copy->number_of_2d_copies | (copy->dir << MCHAN_CMD_SHIFT_DIRECTION) | MCHAN_FLAGS_1D, + .size = copy->length_1d_copy * copy->number_of_1d_copies * copy->number_of_2d_copies, + .ext = copy->ext, + .loc = copy->loc + }; + mchan_transfer_push_1d(trans); + } +} + +void dory_dma_memcpy_2d_async(DMA_copy *copy) { + if (pi_core_id() == 0) { + const int size_2d = copy->number_of_1d_copies * copy->length_1d_copy * copy->number_of_2d_copies; + const int stride = (copy->number_of_2d_copies == 1) ? copy->stride_1d : copy->stride_2d; + const int size_1d = (copy->number_of_2d_copies == 1) ? copy->length_1d_copy : copy->length_1d_copy * copy->number_of_1d_copies; + + mchan_transfer_t trans = { + .cmd = size_2d | copy->dir << MCHAN_CMD_SHIFT_DIRECTION | MCHAN_FLAGS_2D, + .size = size_2d, + .ext = copy->ext, + .loc = copy->loc, + .ext_size_1d = size_1d, + .ext_stride_1d = stride + }; + mchan_transfer_push_2d(trans); + } +} + +void dory_dma_memcpy_3d_async(DMA_copy *copy) { + int start_pixel, stop_pixel; +#ifndef SINGLE_CORE_DMA + int core_id = pi_core_id(); + int Log2Core = log2(NUM_CORES); + int number_of_2d_copies_per_core = (copy->number_of_2d_copies >> Log2Core) + ((copy->number_of_2d_copies & (NUM_CORES-1))!=0); + start_pixel = MIN(number_of_2d_copies_per_core * core_id, copy->number_of_2d_copies); + stop_pixel = MIN(start_pixel + number_of_2d_copies_per_core, copy->number_of_2d_copies); +#else + start_pixel = 0; + stop_pixel = copy->number_of_2d_copies; +#endif + void *ext = copy->ext + copy->stride_2d*start_pixel; + void *loc = copy->loc + copy->length_1d_copy*copy->number_of_1d_copies*start_pixel; + const int size_2d = copy->number_of_1d_copies * copy->length_1d_copy; + for (int i = start_pixel; i < stop_pixel; i++) { + mchan_transfer_t trans = { + .cmd = size_2d | copy->dir << MCHAN_CMD_SHIFT_DIRECTION | MCHAN_FLAGS_2D, + .size = size_2d, + .ext = ext, + .loc = loc, + .ext_size_1d = copy->length_1d_copy, + .ext_stride_1d = copy->stride_1d + }; +#ifdef SINGLE_CORE_DMA + if (pi_core_id() == 0) { +#endif + mchan_transfer_push_2d(trans); +#ifdef SINGLE_CORE_DMA + } +#endif +#ifdef ALWAYS_BLOCK_DMA_TRANSFERS // needed on GAP8 board + dory_dma_barrier(copy); +#endif + loc += size_2d; + ext += copy->stride_2d; + } +} + +void dory_dma_memcpy_async(DMA_copy *copy) { + if (copy->hwc_to_chw == 1) { + dory_dma_memcpy_hwc_to_chw(copy); + } + else if ((copy->number_of_2d_copies == 1 && copy->number_of_1d_copies == 1) || (copy->stride_1d == copy->length_1d_copy && copy->number_of_1d_copies * copy->length_1d_copy == copy->stride_2d) || (copy->number_of_2d_copies == 1 && copy->length_1d_copy == copy->stride_1d)) { + dory_dma_memcpy_1d_async(copy); + } else if ((copy->number_of_2d_copies == 1) || (copy->length_1d_copy == copy->stride_1d)) {// wrong! + dory_dma_memcpy_2d_async(copy); + } else { + dory_dma_memcpy_3d_async(copy); + } +#ifdef ALWAYS_BLOCK_DMA_TRANSFERS + dory_dma_barrier(copy); +#endif +} + +void dory_dma_free(DMA_copy *copy) { + mchan_transfer_free(copy->tid); +} + +void dory_dma_barrier(DMA_copy *copy) { +#ifdef SINGLE_CORE_DMA + // if DMA is only used by a single core (only 1 ctrl interface), other cores must not access its register file. Instead, they should all wait for core 0 to confirm the transfer is over. + if (pi_core_id() == 0) + mchan_transfer_wait(copy->tid); + pi_cl_team_barrier(0); +#else + mchan_transfer_wait(copy->tid); +#endif +} + +int dory_dma_allocate() { + return mchan_transfer_get_id(); +} diff --git a/rt_nn_tests/xpnn_maxpool_2b/dory_dma.h b/rt_nn_tests/xpnn_maxpool_2b/dory_dma.h new file mode 100644 index 0000000..e0b3ef3 --- /dev/null +++ b/rt_nn_tests/xpnn_maxpool_2b/dory_dma.h @@ -0,0 +1,52 @@ +/* + * dory.h + * Alessio Burrello + * + * Copyright (C) 2019-2020 University of Bologna + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef _DORY_DMA_H +#define _DORY_DMA_H + +typedef struct +{ + void *ext; + void *loc; + unsigned short hwc_to_chw; + unsigned short stride_2d; + unsigned short number_of_2d_copies; + unsigned short stride_1d; + unsigned short number_of_1d_copies; + unsigned short length_1d_copy; + int dir; // 0 l1->l2, 1 l2->l1 + int tid; +} DMA_copy; + +void dory_dma_memcpy_hwc_to_chw(DMA_copy *copy); + +void dory_dma_memcpy_1d_async(DMA_copy *copy); + +void dory_dma_memcpy_2d_async(DMA_copy *copy); + +void dory_dma_memcpy_3d_async(DMA_copy *copy); + +void dory_dma_memcpy_async(DMA_copy *copy); + +void dory_dma_free(DMA_copy *copy); + +void dory_dma_barrier(DMA_copy *copy); + +int dory_dma_allocate(); +#endif diff --git a/rt_nn_tests/xpnn_maxpool_2b/mchan.h b/rt_nn_tests/xpnn_maxpool_2b/mchan.h new file mode 100644 index 0000000..95882ab --- /dev/null +++ b/rt_nn_tests/xpnn_maxpool_2b/mchan.h @@ -0,0 +1,137 @@ +#ifndef _MCHAN_H +#define _MCHAN_H + +// Requires to have MCHAN_BASE_ADDR, MCHAN_EVENT defined outside of header +#ifndef MCHAN_BASE_ADDR +#error "[mchan.h] MCHAN_BASE_ADDR not defined!" +#endif + +#if !defined(MCHAN_EVENT) && !defined(MCHAN_POLLED) +#error "[mchan.h] Nor MCHAN_EVENT nor MCHAN_POLLED defined!" +#endif + +#if defined(MCHAN_EVENT) && !defined(MCHAN_EVENT_BIT) +#error "[mchan.h] MCHAN_EVENT_BIT should be defined when using events as signalization!" +#endif + +#include "pmsis.h" + +#define MCHAN_CMD_OFFSET 0 +#define MCHAN_STATUS_OFFSET 4 + +#define MCHAN_CMD_ADDR (MCHAN_BASE_ADDR + MCHAN_CMD_OFFSET) +#define MCHAN_STATUS_ADDR (MCHAN_BASE_ADDR + MCHAN_STATUS_OFFSET) + +#define READ_REG(addr) (*(volatile int*)(addr)) +#define WRITE_REG(addr, value) do { *(volatile int*)(addr) = (int)value; } while (0) + +#define MCHAN_READ_CMD() READ_REG(MCHAN_CMD_ADDR) +#define MCHAN_WRITE_CMD(value) WRITE_REG(MCHAN_CMD_ADDR, value) + +#define MCHAN_READ_STATUS() READ_REG(MCHAN_STATUS_ADDR) +#define MCHAN_WRITE_STATUS(value) WRITE_REG(MCHAN_STATUS_ADDR, value) + +// MCHAN version 7 has 1 more bit for the transfer length, so all the flag offsets are shifted by 1. Also, LOC (TCDM) striding is not supported in v6. +#if MCHAN_VERSION==7 +#define MCHAN_TRANSFER_LEN_SIZE (17) +#else +#define MCHAN_TRANSFER_LEN_SIZE (16) +#endif + +#define MCHAN_CMD_FLAG_DIRECTION_LOC2EXT (0 << (MCHAN_TRANSFER_LEN_SIZE + 0)) +#define MCHAN_CMD_FLAG_DIRECTION_EXT2LOC (1 << (MCHAN_TRANSFER_LEN_SIZE + 0)) +#define MCHAN_CMD_FLAG_INCREMENTAL (1 << (MCHAN_TRANSFER_LEN_SIZE + 1)) +#define MCHAN_CMD_FLAG_2D_TRANSFER_EXTERNAL (1 << (MCHAN_TRANSFER_LEN_SIZE + 2)) +#define MCHAN_CMD_FLAG_EVENT_ENABLE (1 << (MCHAN_TRANSFER_LEN_SIZE + 3)) +#define MCHAN_CMD_FLAG_INTERRUPT_ENABLE (1 << (MCHAN_TRANSFER_LEN_SIZE + 4)) +#define MCHAN_CMD_FLAG_BROADCAST_FINISH (1 << (MCHAN_TRANSFER_LEN_SIZE + 5)) +#if MCHAN_VERSION==7 +#define MCHAN_CMD_FLAG_2D_TRANSFER_LOCAL (1 << (MCHAN_TRANSFER_LEN_SIZE + 6)) // can only be used with MCHAN v7 +#endif +#define MCHAN_CMD_SHIFT_DIRECTION MCHAN_TRANSFER_LEN_SIZE + + +#define MCHAN_CMD(len, dir, inc, loc_2d, ext_2d, int_en, event_en, broadcast) \ + (len | dir | inc | loc_2d | ext_2d | broadcast | int_en | event_en) + +typedef enum { + MCHAN_DMA_TRANSFER_DIRECTION_EXT2LOC = MCHAN_CMD_FLAG_DIRECTION_EXT2LOC, + MCHAN_DMA_TRANSFER_DIRECTION_LOC2EXT = MCHAN_CMD_FLAG_DIRECTION_LOC2EXT +} mchan_dma_transfer_direction_e; + +typedef struct { + int cmd; + int size; + + void *loc; + int loc_size_1d; + int loc_stride_1d; + + void *ext; + int ext_size_1d; + int ext_stride_1d; +} mchan_transfer_t; + +static int mchan_transfer_get_id() { + return MCHAN_READ_CMD(); +} + +static void mchan_transfer_push_1d(mchan_transfer_t trans) +{ + MCHAN_WRITE_CMD(trans.cmd); + MCHAN_WRITE_CMD(trans.loc); + MCHAN_WRITE_CMD(trans.ext); +} + +static void mchan_transfer_push_2d(mchan_transfer_t trans) +{ + MCHAN_WRITE_CMD(trans.cmd); + MCHAN_WRITE_CMD(trans.loc); + MCHAN_WRITE_CMD(trans.ext); +// MCHAN version 7 takes 2D "count" (length of 1D transfers) and stride in 2 steps, +// v7 takes it in 1 step with the stride shifted to the upper 16 bits. +#if MCHAN_VERSION==7 + MCHAN_WRITE_CMD(trans.ext_size_1d); + MCHAN_WRITE_CMD(trans.ext_stride_1d); +#else + MCHAN_WRITE_CMD(trans.ext_size_1d | (trans.ext_stride_1d << 16)); +#endif +} + +static void mchan_transfer_push(mchan_transfer_t trans) +{ + MCHAN_WRITE_CMD(trans.cmd); + MCHAN_WRITE_CMD(trans.loc); + MCHAN_WRITE_CMD(trans.ext); + + if (trans.ext_size_1d < trans.size) { + MCHAN_WRITE_CMD(trans.ext_size_1d); + MCHAN_WRITE_CMD(trans.ext_stride_1d); + } + + if (trans.loc_size_1d < trans.size) { + MCHAN_WRITE_CMD(trans.loc_size_1d); + MCHAN_WRITE_CMD(trans.loc_stride_1d); + } +} + +static void mchan_transfer_free(int tid) +{ + MCHAN_WRITE_STATUS(1 << tid); +} + +static int mchan_transfer_busy(int tid) +{ + return MCHAN_READ_STATUS() & (1 << tid); +} + +static void mchan_transfer_wait(int tid) +{ + #if defined(MCHAN_EVENT) + while(mchan_transfer_busy(tid)) eu_evt_maskWaitAndClr(1 << MCHAN_EVENT_BIT); + #elif defined(MCHAN_POLLED) + while(mchan_transfer_busy(tid)) ; + #endif +} + +#endif diff --git a/rt_nn_tests/xpnn_maxpool_2b/openocd-zcu102-olimex-arm-usb-ocd-h.cfg b/rt_nn_tests/xpnn_maxpool_2b/openocd-zcu102-olimex-arm-usb-ocd-h.cfg new file mode 100644 index 0000000..b924719 --- /dev/null +++ b/rt_nn_tests/xpnn_maxpool_2b/openocd-zcu102-olimex-arm-usb-ocd-h.cfg @@ -0,0 +1,41 @@ +adapter_khz 1000 + +# Olimex ARM-USB-OCD-H +interface ftdi +ftdi_device_desc "Olimex OpenOCD JTAG ARM-USB-OCD-H" +ftdi_vid_pid 0x15ba 0x002b + +ftdi layout_init 0x0b08 0x0b1b + +ftdi layout_signal nSRST -data 0x0200 +ftdi layout_signal nTRST -data 0x0100 +ftdi layout_signal LED -data 0x0800 +reset_config srst_push_pull srst_only + + +set _CHIPNAME riscv + + + +jtag newtap $_CHIPNAME unknown0 -irlen 5 -expected-id 0x10102001 +jtag newtap $_CHIPNAME cpu -irlen 5 -expected-id 0x249511C3 + +set _TARGETNAME $_CHIPNAME.cpu +target create $_TARGETNAME riscv -chain-position $_TARGETNAME -coreid 0x3e0 + +gdb_report_data_abort enable +gdb_report_register_access_error enable + +riscv set_reset_timeout_sec 120 +riscv set_command_timeout_sec 120 + +# prefer to use sba for system bus access +riscv set_prefer_sba on +# dump jtag chain + +scan_chain + +init +reset +halt +echo "Ready for Remote Connections" diff --git a/rt_nn_tests/xpnn_maxpool_2b/pulp_nn_kernels.h b/rt_nn_tests/xpnn_maxpool_2b/pulp_nn_kernels.h new file mode 100644 index 0000000..f4ec977 --- /dev/null +++ b/rt_nn_tests/xpnn_maxpool_2b/pulp_nn_kernels.h @@ -0,0 +1,26528 @@ +/* + * pulp_nn_kernels.h + * Nazareno Bruschi + * + * Copyright (C) 2019-2020 University of Bologna + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef __XPULPNN_KERNELS__ +#define __XPULPNN_KERNELS__ + +void xpulp_nn_conv_u8_u8_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u8_u8_i8_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u8_i8_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u8_i8_i8_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i8_u8_i8( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i8_u8_i8_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i8_i8_i8( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i8_i8_i8_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u8_u8_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u8_u8_i4_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u8_i8_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u8_i8_i4_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i8_u8_i4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i8_u8_i4_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i8_i8_i4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i8_i8_i4_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u8_u8_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u8_u8_i2_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u8_i8_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u8_i8_i2_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i8_u8_i2( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i8_u8_i2_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i8_i8_i2( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i8_i8_i2_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u8_u4_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u8_u4_i8_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u8_i4_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u8_i4_i8_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i8_u4_i8( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i8_u4_i8_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i8_i4_i8( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i8_i4_i8_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u8_u4_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u8_u4_i4_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u8_i4_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u8_i4_i4_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i8_u4_i4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i8_u4_i4_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i8_i4_i4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i8_i4_i4_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u8_u4_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u8_u4_i2_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u8_i4_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u8_i4_i2_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i8_u4_i2( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i8_u4_i2_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i8_i4_i2( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i8_i4_i2_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u8_u2_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u8_u2_i8_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u8_i2_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u8_i2_i8_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i8_u2_i8( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i8_u2_i8_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i8_i2_i8( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i8_i2_i8_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u8_u2_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u8_u2_i4_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u8_i2_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u8_i2_i4_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i8_u2_i4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i8_u2_i4_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i8_i2_i4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i8_i2_i4_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u8_u2_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u8_u2_i2_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u8_i2_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u8_i2_i2_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i8_u2_i2( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i8_u2_i2_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i8_i2_i2( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i8_i2_i2_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u4_u8_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u4_u8_i8_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u4_i8_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u4_i8_i8_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i4_u8_i8( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i4_u8_i8_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i4_i8_i8( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i4_i8_i8_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u4_u8_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u4_u8_i4_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u4_i8_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u4_i8_i4_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i4_u8_i4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i4_u8_i4_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i4_i8_i4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i4_i8_i4_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u4_u8_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u4_u8_i2_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u4_i8_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u4_i8_i2_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i4_u8_i2( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i4_u8_i2_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i4_i8_i2( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i4_i8_i2_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u4_u4_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u4_u4_i8_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u4_i4_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u4_i4_i8_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i4_u4_i8( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i4_u4_i8_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i4_i4_i8( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i4_i4_i8_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u4_u4_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u4_u4_i4_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u4_i4_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u4_i4_i4_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i4_u4_i4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i4_u4_i4_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i4_i4_i4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i4_i4_i4_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u4_u4_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u4_u4_i2_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u4_i4_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u4_i4_i2_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i4_u4_i2( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i4_u4_i2_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i4_i4_i2( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i4_i4_i2_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u4_u2_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u4_u2_i8_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u4_i2_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u4_i2_i8_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i4_u2_i8( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i4_u2_i8_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i4_i2_i8( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i4_i2_i8_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u4_u2_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u4_u2_i4_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u4_i2_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u4_i2_i4_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i4_u2_i4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i4_u2_i4_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i4_i2_i4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i4_i2_i4_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u4_u2_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u4_u2_i2_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u4_i2_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u4_i2_i2_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i4_u2_i2( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i4_u2_i2_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i4_i2_i2( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i4_i2_i2_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u2_u8_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u2_u8_i8_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u2_i8_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u2_i8_i8_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i2_u8_i8( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i2_u8_i8_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i2_i8_i8( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i2_i8_i8_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u2_u8_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u2_u8_i4_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u2_i8_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u2_i8_i4_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i2_u8_i4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i2_u8_i4_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i2_i8_i4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i2_i8_i4_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u2_u8_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u2_u8_i2_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u2_i8_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u2_i8_i2_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i2_u8_i2( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i2_u8_i2_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i2_i8_i2( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i2_i8_i2_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u2_u4_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u2_u4_i8_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u2_i4_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u2_i4_i8_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i2_u4_i8( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i2_u4_i8_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i2_i4_i8( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i2_i4_i8_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u2_u4_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u2_u4_i4_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u2_i4_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u2_i4_i4_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i2_u4_i4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i2_u4_i4_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i2_i4_i4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i2_i4_i4_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u2_u4_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u2_u4_i2_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u2_i4_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u2_i4_i2_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i2_u4_i2( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i2_u4_i2_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i2_i4_i2( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i2_i4_i2_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u2_u2_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u2_u2_i8_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u2_i2_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u2_i2_i8_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i2_u2_i8( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i2_u2_i8_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i2_i2_i8( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i2_i2_i8_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u2_u2_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u2_u2_i4_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u2_i2_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u2_i2_i4_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i2_u2_i4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i2_u2_i4_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i2_i2_i4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i2_i2_i4_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u2_u2_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u2_u2_i2_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u2_i2_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u2_i2_i2_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i2_u2_i2( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i2_u2_i2_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i2_i2_i2( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, +#ifndef PROFILE + uint8_t flag_batch_norm); +#else + uint8_t flag_batch_norm, + uint32_t *im2col_cycles, + uint32_t *hotloop_prep_cycles, + uint32_t *hotloop_cycles, + uint32_t *requant_cycles, + uint32_t *hotloop_leftover_cycles, + uint32_t *matmul4x2_leftover_cycles); +#endif + + +void xpulp_nn_conv_i2_i2_i2_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u8_u8_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u8_u8_i8_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u8_i8_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u8_i8_i8_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i8_u8_i8( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i8_u8_i8_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i8_i8_i8( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i8_i8_i8_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u8_u8_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u8_u8_i4_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u8_i8_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u8_i8_i4_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i8_u8_i4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i8_u8_i4_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i8_i8_i4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i8_i8_i4_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u8_u8_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u8_u8_i2_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u8_i8_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u8_i8_i2_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i8_u8_i2( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i8_u8_i2_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i8_i8_i2( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i8_i8_i2_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u8_u4_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u8_u4_i8_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u8_i4_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u8_i4_i8_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i8_u4_i8( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i8_u4_i8_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i8_i4_i8( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i8_i4_i8_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u8_u4_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u8_u4_i4_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u8_i4_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u8_i4_i4_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i8_u4_i4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i8_u4_i4_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i8_i4_i4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i8_i4_i4_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u8_u4_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u8_u4_i2_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u8_i4_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u8_i4_i2_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i8_u4_i2( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i8_u4_i2_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i8_i4_i2( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i8_i4_i2_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u8_u2_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u8_u2_i8_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u8_i2_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u8_i2_i8_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i8_u2_i8( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i8_u2_i8_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i8_i2_i8( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i8_i2_i8_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u8_u2_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u8_u2_i4_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u8_i2_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u8_i2_i4_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i8_u2_i4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i8_u2_i4_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i8_i2_i4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i8_i2_i4_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u8_u2_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u8_u2_i2_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u8_i2_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u8_i2_i2_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i8_u2_i2( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i8_u2_i2_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i8_i2_i2( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i8_i2_i2_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u4_u8_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u4_u8_i8_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u4_i8_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u4_i8_i8_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i4_u8_i8( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i4_u8_i8_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i4_i8_i8( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i4_i8_i8_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u4_u8_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u4_u8_i4_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u4_i8_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u4_i8_i4_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i4_u8_i4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i4_u8_i4_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i4_i8_i4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i4_i8_i4_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u4_u8_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u4_u8_i2_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u4_i8_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u4_i8_i2_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i4_u8_i2( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i4_u8_i2_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i4_i8_i2( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i4_i8_i2_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u4_u4_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u4_u4_i8_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u4_i4_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u4_i4_i8_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i4_u4_i8( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i4_u4_i8_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i4_i4_i8( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i4_i4_i8_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u4_u4_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u4_u4_i4_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u4_i4_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u4_i4_i4_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i4_u4_i4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i4_u4_i4_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i4_i4_i4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i4_i4_i4_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u4_u4_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u4_u4_i2_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u4_i4_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u4_i4_i2_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i4_u4_i2( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i4_u4_i2_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i4_i4_i2( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i4_i4_i2_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u4_u2_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u4_u2_i8_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u4_i2_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u4_i2_i8_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i4_u2_i8( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i4_u2_i8_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i4_i2_i8( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i4_i2_i8_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u4_u2_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u4_u2_i4_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u4_i2_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u4_i2_i4_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i4_u2_i4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i4_u2_i4_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i4_i2_i4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i4_i2_i4_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u4_u2_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u4_u2_i2_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u4_i2_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u4_i2_i2_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i4_u2_i2( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i4_u2_i2_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i4_i2_i2( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i4_i2_i2_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u2_u8_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u2_u8_i8_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u2_i8_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u2_i8_i8_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i2_u8_i8( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i2_u8_i8_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i2_i8_i8( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i2_i8_i8_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u2_u8_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u2_u8_i4_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u2_i8_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u2_i8_i4_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i2_u8_i4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i2_u8_i4_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i2_i8_i4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i2_i8_i4_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u2_u8_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u2_u8_i2_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u2_i8_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u2_i8_i2_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i2_u8_i2( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i2_u8_i2_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i2_i8_i2( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i2_i8_i2_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u2_u4_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u2_u4_i8_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u2_i4_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u2_i4_i8_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i2_u4_i8( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i2_u4_i8_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i2_i4_i8( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i2_i4_i8_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u2_u4_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u2_u4_i4_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u2_i4_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u2_i4_i4_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i2_u4_i4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i2_u4_i4_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i2_i4_i4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i2_i4_i4_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u2_u4_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u2_u4_i2_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u2_i4_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u2_i4_i2_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i2_u4_i2( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i2_u4_i2_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i2_i4_i2( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i2_i4_i2_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u2_u2_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u2_u2_i8_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u2_i2_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u2_i2_i8_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i2_u2_i8( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i2_u2_i8_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i2_i2_i8( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i2_i2_i8_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u2_u2_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u2_u2_i4_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u2_i2_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u2_i2_i4_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i2_u2_i4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i2_u2_i4_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i2_i2_i4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i2_i2_i4_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u2_u2_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u2_u2_i2_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u2_i2_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u2_i2_i2_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i2_u2_i2( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i2_u2_i2_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i2_i2_i2( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i2_i2_i2_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_u8_u8_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_u8_i8_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_i8_u8_i8( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_i8_i8_i8( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_u8_u8_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_u8_i8_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_i8_u8_i4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_i8_i8_i4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_u8_u8_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_u8_i8_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_i8_u8_i2( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_i8_i8_i2( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_u8_u4_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_u8_i4_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_i8_u4_i8( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_i8_i4_i8( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_u8_u4_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_u8_i4_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_i8_u4_i4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_i8_i4_i4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_u8_u4_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_u8_i4_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_i8_u4_i2( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_i8_i4_i2( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_u8_u2_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_u8_i2_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_i8_u2_i8( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_i8_i2_i8( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_u8_u2_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_u8_i2_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_i8_u2_i4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_i8_i2_i4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_u8_u2_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_u8_i2_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_i8_u2_i2( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_i8_i2_i2( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_u4_u8_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_u4_i8_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_i4_u8_i8( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_i4_i8_i8( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_u4_u8_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_u4_i8_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_i4_u8_i4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_i4_i8_i4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_u4_u8_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_u4_i8_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_i4_u8_i2( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_i4_i8_i2( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_u4_u4_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_u4_i4_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_i4_u4_i8( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_i4_i4_i8( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_u4_u4_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_u4_i4_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_i4_u4_i4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_i4_i4_i4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_u4_u4_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_u4_i4_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_i4_u4_i2( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_i4_i4_i2( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_u4_u2_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_u4_i2_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_i4_u2_i8( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_i4_i2_i8( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_u4_u2_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_u4_i2_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_i4_u2_i4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_i4_i2_i4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_u4_u2_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_u4_i2_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_i4_u2_i2( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_i4_i2_i2( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_u2_u8_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_u2_i8_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_i2_u8_i8( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_i2_i8_i8( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_u2_u8_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_u2_i8_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_i2_u8_i4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_i2_i8_i4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_u2_u8_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_u2_i8_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_i2_u8_i2( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_i2_i8_i2( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_u2_u4_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_u2_i4_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_i2_u4_i8( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_i2_i4_i8( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_u2_u4_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_u2_i4_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_i2_u4_i4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_i2_i4_i4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_u2_u4_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_u2_i4_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_i2_u4_i2( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_i2_i4_i2( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_u2_u2_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_u2_i2_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_i2_u2_i8( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_i2_i2_i8( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_u2_u2_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_u2_i2_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_i2_u2_i4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_i2_i2_i4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_u2_u2_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_u2_i2_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_i2_u2_i2( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_i2_i2_i2( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u8_u8_i8( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u8_i8_i8( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i8_u8_i8( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i8_i8_i8( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u8_u8_i8_4x4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u8_i8_i8_4x4( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pOut3, + int8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i8_u8_i8_4x4( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i8_i8_i8_4x4( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pOut3, + int8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u8_u8_i4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u8_i8_i4( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i8_u8_i4( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i8_i8_i4( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u8_u8_i4_4x4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u8_i8_i4_4x4( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pOut3, + int8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i8_u8_i4_4x4( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i8_i8_i4_4x4( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pOut3, + int8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u8_u8_i2( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u8_i8_i2( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i8_u8_i2( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i8_i8_i2( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u8_u8_i2_4x4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u8_i8_i2_4x4( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pOut3, + int8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i8_u8_i2_4x4( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i8_i8_i2_4x4( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pOut3, + int8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u8_u4_i8( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u8_i4_i8( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i8_u4_i8( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i8_i4_i8( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u8_u4_i8_4x4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u8_i4_i8_4x4( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pOut3, + int8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i8_u4_i8_4x4( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i8_i4_i8_4x4( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pOut3, + int8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u8_u4_i4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u8_i4_i4( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i8_u4_i4( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i8_i4_i4( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u8_u4_i4_4x4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u8_i4_i4_4x4( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pOut3, + int8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i8_u4_i4_4x4( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i8_i4_i4_4x4( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pOut3, + int8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u8_u4_i2( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u8_i4_i2( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i8_u4_i2( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i8_i4_i2( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u8_u4_i2_4x4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u8_i4_i2_4x4( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pOut3, + int8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i8_u4_i2_4x4( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i8_i4_i2_4x4( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pOut3, + int8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u8_u2_i8( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u8_i2_i8( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i8_u2_i8( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i8_i2_i8( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u8_u2_i8_4x4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u8_i2_i8_4x4( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pOut3, + int8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i8_u2_i8_4x4( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i8_i2_i8_4x4( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pOut3, + int8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u8_u2_i4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u8_i2_i4( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i8_u2_i4( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i8_i2_i4( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u8_u2_i4_4x4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u8_i2_i4_4x4( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pOut3, + int8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i8_u2_i4_4x4( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i8_i2_i4_4x4( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pOut3, + int8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u8_u2_i2( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u8_i2_i2( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i8_u2_i2( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i8_i2_i2( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u8_u2_i2_4x4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u8_i2_i2_4x4( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pOut3, + int8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i8_u2_i2_4x4( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i8_i2_i2_4x4( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pOut3, + int8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u4_u8_i8( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u4_i8_i8( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i4_u8_i8( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i4_i8_i8( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u4_u8_i8_4x4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u4_i8_i8_4x4( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pOut3, + int8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i4_u8_i8_4x4( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i4_i8_i8_4x4( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pOut3, + int8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u4_u8_i4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u4_i8_i4( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i4_u8_i4( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i4_i8_i4( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u4_u8_i4_4x4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u4_i8_i4_4x4( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pOut3, + int8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i4_u8_i4_4x4( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i4_i8_i4_4x4( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pOut3, + int8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u4_u8_i2( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u4_i8_i2( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i4_u8_i2( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i4_i8_i2( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u4_u8_i2_4x4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u4_i8_i2_4x4( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pOut3, + int8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i4_u8_i2_4x4( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i4_i8_i2_4x4( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pOut3, + int8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u4_u4_i8( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u4_i4_i8( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i4_u4_i8( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i4_i4_i8( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u4_u4_i8_4x4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u4_i4_i8_4x4( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pOut3, + int8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i4_u4_i8_4x4( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i4_i4_i8_4x4( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pOut3, + int8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u4_u4_i4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u4_i4_i4( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i4_u4_i4( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i4_i4_i4( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u4_u4_i4_4x4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u4_i4_i4_4x4( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pOut3, + int8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i4_u4_i4_4x4( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i4_i4_i4_4x4( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pOut3, + int8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u4_u4_i2( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u4_i4_i2( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i4_u4_i2( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i4_i4_i2( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u4_u4_i2_4x4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u4_i4_i2_4x4( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pOut3, + int8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i4_u4_i2_4x4( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i4_i4_i2_4x4( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pOut3, + int8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u4_u2_i8( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u4_i2_i8( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i4_u2_i8( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i4_i2_i8( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u4_u2_i8_4x4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u4_i2_i8_4x4( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pOut3, + int8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i4_u2_i8_4x4( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i4_i2_i8_4x4( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pOut3, + int8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u4_u2_i4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u4_i2_i4( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i4_u2_i4( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i4_i2_i4( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u4_u2_i4_4x4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u4_i2_i4_4x4( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pOut3, + int8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i4_u2_i4_4x4( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i4_i2_i4_4x4( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pOut3, + int8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u4_u2_i2( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u4_i2_i2( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i4_u2_i2( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i4_i2_i2( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u4_u2_i2_4x4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u4_i2_i2_4x4( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pOut3, + int8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i4_u2_i2_4x4( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i4_i2_i2_4x4( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pOut3, + int8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u2_u8_i8( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u2_i8_i8( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i2_u8_i8( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i2_i8_i8( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u2_u8_i8_4x4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u2_i8_i8_4x4( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pOut3, + int8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i2_u8_i8_4x4( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i2_i8_i8_4x4( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pOut3, + int8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u2_u8_i4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u2_i8_i4( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i2_u8_i4( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i2_i8_i4( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u2_u8_i4_4x4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u2_i8_i4_4x4( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pOut3, + int8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i2_u8_i4_4x4( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i2_i8_i4_4x4( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pOut3, + int8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u2_u8_i2( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u2_i8_i2( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i2_u8_i2( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i2_i8_i2( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u2_u8_i2_4x4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u2_i8_i2_4x4( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pOut3, + int8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i2_u8_i2_4x4( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i2_i8_i2_4x4( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pOut3, + int8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u2_u4_i8( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u2_i4_i8( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i2_u4_i8( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i2_i4_i8( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u2_u4_i8_4x4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u2_i4_i8_4x4( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pOut3, + int8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i2_u4_i8_4x4( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i2_i4_i8_4x4( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pOut3, + int8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u2_u4_i4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u2_i4_i4( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i2_u4_i4( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i2_i4_i4( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u2_u4_i4_4x4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u2_i4_i4_4x4( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pOut3, + int8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i2_u4_i4_4x4( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i2_i4_i4_4x4( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pOut3, + int8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u2_u4_i2( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u2_i4_i2( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i2_u4_i2( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i2_i4_i2( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u2_u4_i2_4x4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u2_i4_i2_4x4( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pOut3, + int8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i2_u4_i2_4x4( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i2_i4_i2_4x4( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pOut3, + int8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u2_u2_i8( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u2_i2_i8( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i2_u2_i8( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i2_i2_i8( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u2_u2_i8_4x4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u2_i2_i8_4x4( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pOut3, + int8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i2_u2_i8_4x4( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i2_i2_i8_4x4( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pOut3, + int8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u2_u2_i4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u2_i2_i4( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i2_u2_i4( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i2_i2_i4( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u2_u2_i4_4x4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u2_i2_i4_4x4( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pOut3, + int8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i2_u2_i4_4x4( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i2_i2_i4_4x4( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pOut3, + int8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u2_u2_i2( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u2_i2_i2( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i2_u2_i2( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i2_i2_i2( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, +#ifndef PROFILE + uint8_t flag_batch_norm); +#else + uint8_t flag_batch_norm, + uint32_t *hotloop_prep_cycles, + uint32_t *hotloop_cycles, + uint32_t *requant_cycles, + uint32_t *hotloop_leftover_cycles); +#endif + +uint8_t *xpulp_nn_matmul_u2_u2_i2_4x4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u2_i2_i2_4x4( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pOut3, + int8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i2_u2_i2_4x4( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i2_i2_i2_4x4( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pOut3, + int8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_u8_u8_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_u8_i8_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_i8_u8_i8( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_i8_i8_i8( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_u8_u8_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_u8_i8_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_i8_u8_i4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_i8_i8_i4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_u8_u8_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_u8_i8_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_i8_u8_i2( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_i8_i8_i2( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_u8_u4_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_u8_i4_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_i8_u4_i8( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_i8_i4_i8( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_u8_u4_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_u8_i4_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_i8_u4_i4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_i8_i4_i4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_u8_u4_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_u8_i4_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_i8_u4_i2( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_i8_i4_i2( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_u8_u2_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_u8_i2_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_i8_u2_i8( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_i8_i2_i8( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_u8_u2_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_u8_i2_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_i8_u2_i4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_i8_i2_i4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_u8_u2_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_u8_i2_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_i8_u2_i2( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_i8_i2_i2( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_u4_u8_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_u4_i8_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_i4_u8_i8( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_i4_i8_i8( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_u4_u8_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_u4_i8_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_i4_u8_i4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_i4_i8_i4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_u4_u8_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_u4_i8_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_i4_u8_i2( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_i4_i8_i2( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_u4_u4_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_u4_i4_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_i4_u4_i8( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_i4_i4_i8( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_u4_u4_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_u4_i4_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_i4_u4_i4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_i4_i4_i4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_u4_u4_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_u4_i4_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_i4_u4_i2( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_i4_i4_i2( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_u4_u2_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_u4_i2_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_i4_u2_i8( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_i4_i2_i8( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_u4_u2_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_u4_i2_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_i4_u2_i4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_i4_i2_i4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_u4_u2_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_u4_i2_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_i4_u2_i2( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_i4_i2_i2( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_u2_u8_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_u2_i8_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_i2_u8_i8( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_i2_i8_i8( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_u2_u8_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_u2_i8_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_i2_u8_i4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_i2_i8_i4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_u2_u8_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_u2_i8_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_i2_u8_i2( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_i2_i8_i2( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_u2_u4_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_u2_i4_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_i2_u4_i8( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_i2_i4_i8( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_u2_u4_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_u2_i4_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_i2_u4_i4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_i2_i4_i4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_u2_u4_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_u2_i4_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_i2_u4_i2( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_i2_i4_i2( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_u2_u2_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_u2_i2_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_i2_u2_i8( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_i2_i2_i8( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_u2_u2_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_u2_i2_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_i2_u2_i4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_i2_i2_i4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_u2_u2_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_u2_i2_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_i2_u2_i2( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_i2_i2_i2( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_u8_i32_i8( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + uint16_t dim_vec, + uint16_t num_o_neurons); + +void xpulp_nn_linear_i8_i32_i8( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + uint16_t dim_vec, + uint16_t num_o_neurons); + +void xpulp_nn_linear_u8_i32_i4( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + uint16_t dim_vec, + uint16_t num_o_neurons); + +void xpulp_nn_linear_i8_i32_i4( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + uint16_t dim_vec, + uint16_t num_o_neurons); + +void xpulp_nn_linear_u8_i32_i2( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + uint16_t dim_vec, + uint16_t num_o_neurons); + +void xpulp_nn_linear_i8_i32_i2( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + uint16_t dim_vec, + uint16_t num_o_neurons); + +void xpulp_nn_linear_u4_i32_i8( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + uint16_t dim_vec, + uint16_t num_o_neurons); + +void xpulp_nn_linear_i4_i32_i8( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + uint16_t dim_vec, + uint16_t num_o_neurons); + +void xpulp_nn_linear_u4_i32_i4( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + uint16_t dim_vec, + uint16_t num_o_neurons); + +void xpulp_nn_linear_i4_i32_i4( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + uint16_t dim_vec, + uint16_t num_o_neurons); + +void xpulp_nn_linear_u4_i32_i2( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + uint16_t dim_vec, + uint16_t num_o_neurons); + +void xpulp_nn_linear_i4_i32_i2( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + uint16_t dim_vec, + uint16_t num_o_neurons); + +void xpulp_nn_linear_u2_i32_i8( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + uint16_t dim_vec, + uint16_t num_o_neurons); + +void xpulp_nn_linear_i2_i32_i8( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + uint16_t dim_vec, + uint16_t num_o_neurons); + +void xpulp_nn_linear_u2_i32_i4( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + uint16_t dim_vec, + uint16_t num_o_neurons); + +void xpulp_nn_linear_i2_i32_i4( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + uint16_t dim_vec, + uint16_t num_o_neurons); + +void xpulp_nn_linear_u2_i32_i2( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + uint16_t dim_vec, + uint16_t num_o_neurons); + +void xpulp_nn_linear_i2_i32_i2( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + uint16_t dim_vec, + uint16_t num_o_neurons); + +void xpulp_nn_linear_u8_u8_i8( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_u8_i8_i8( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_i8_u8_i8( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_i8_i8_i8( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_u8_u8_i4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_u8_i8_i4( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_i8_u8_i4( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_i8_i8_i4( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_u8_u8_i2( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_u8_i8_i2( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_i8_u8_i2( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_i8_i8_i2( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_u8_u4_i8( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_u8_i4_i8( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_i8_u4_i8( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_i8_i4_i8( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_u8_u4_i4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_u8_i4_i4( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_i8_u4_i4( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_i8_i4_i4( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_u8_u4_i2( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_u8_i4_i2( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_i8_u4_i2( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_i8_i4_i2( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_u8_u2_i8( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_u8_i2_i8( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_i8_u2_i8( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_i8_i2_i8( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_u8_u2_i4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_u8_i2_i4( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_i8_u2_i4( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_i8_i2_i4( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_u8_u2_i2( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_u8_i2_i2( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_i8_u2_i2( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_i8_i2_i2( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_u4_u8_i8( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_u4_i8_i8( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_i4_u8_i8( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_i4_i8_i8( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_u4_u8_i4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_u4_i8_i4( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_i4_u8_i4( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_i4_i8_i4( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_u4_u8_i2( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_u4_i8_i2( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_i4_u8_i2( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_i4_i8_i2( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_u4_u4_i8( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_u4_i4_i8( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_i4_u4_i8( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_i4_i4_i8( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_u4_u4_i4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_u4_i4_i4( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_i4_u4_i4( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_i4_i4_i4( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_u4_u4_i2( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_u4_i4_i2( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_i4_u4_i2( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_i4_i4_i2( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_u4_u2_i8( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_u4_i2_i8( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_i4_u2_i8( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_i4_i2_i8( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_u4_u2_i4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_u4_i2_i4( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_i4_u2_i4( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_i4_i2_i4( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_u4_u2_i2( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_u4_i2_i2( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_i4_u2_i2( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_i4_i2_i2( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_u2_u8_i8( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_u2_i8_i8( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_i2_u8_i8( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_i2_i8_i8( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_u2_u8_i4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_u2_i8_i4( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_i2_u8_i4( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_i2_i8_i4( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_u2_u8_i2( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_u2_i8_i2( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_i2_u8_i2( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_i2_i8_i2( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_u2_u4_i8( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_u2_i4_i8( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_i2_u4_i8( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_i2_i4_i8( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_u2_u4_i4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_u2_i4_i4( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_i2_u4_i4( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_i2_i4_i4( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_u2_u4_i2( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_u2_i4_i2( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_i2_u4_i2( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_i2_i4_i2( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_u2_u2_i8( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_u2_i2_i8( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_i2_u2_i8( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_i2_i2_i8( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_u2_u2_i4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_u2_i2_i4( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_i2_u2_i4( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_i2_i2_i4( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_u2_u2_i2( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_u2_i2_i2( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_i2_u2_i2( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_i2_i2_i2( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_maxpool_u8( + uint8_t * pIn, + uint8_t * pOut, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + uint16_t dim_im_out_x, + uint16_t dim_im_out_y, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_t, + uint16_t padding_b, + uint16_t padding_l, + uint16_t padding_r, + uint16_t stride_x, + uint16_t stride_y); + +void xpulp_nn_maxpool_i8( + int8_t * pIn, + int8_t * pOut, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + uint16_t dim_im_out_x, + uint16_t dim_im_out_y, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_t, + uint16_t padding_b, + uint16_t padding_l, + uint16_t padding_r, + uint16_t stride_x, + uint16_t stride_y); + +void xpulp_nn_maxpool_u4( + uint8_t * pIn, + uint8_t * pOut, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + uint16_t dim_im_out_x, + uint16_t dim_im_out_y, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_t, + uint16_t padding_b, + uint16_t padding_l, + uint16_t padding_r, + uint16_t stride_x, + uint16_t stride_y); + +void xpulp_nn_maxpool_i4( + int8_t * pIn, + int8_t * pOut, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + uint16_t dim_im_out_x, + uint16_t dim_im_out_y, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_t, + uint16_t padding_b, + uint16_t padding_l, + uint16_t padding_r, + uint16_t stride_x, + uint16_t stride_y); + +void xpulp_nn_maxpool_u2( + uint8_t * pIn, + uint8_t * pOut, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + uint16_t dim_im_out_x, + uint16_t dim_im_out_y, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_t, + uint16_t padding_b, + uint16_t padding_l, + uint16_t padding_r, + uint16_t stride_x, + uint16_t stride_y); + +void xpulp_nn_maxpool_i2( + int8_t * pIn, + int8_t * pOut, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + uint16_t dim_im_out_x, + uint16_t dim_im_out_y, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_t, + uint16_t padding_b, + uint16_t padding_l, + uint16_t padding_r, + uint16_t stride_x, + uint16_t stride_y); + +void xpulp_nn_avgpool_u8_u8( + uint8_t * pIn, + uint8_t * pOut, + int32_t lambda, + uint16_t out_shift, + int32_t out_add, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + uint16_t dim_im_out_x, + uint16_t dim_im_out_y, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_t, + uint16_t padding_b, + uint16_t padding_l, + uint16_t padding_r, + uint16_t stride_x, + uint16_t stride_y, + int flag_requant +); + +void xpulp_nn_avgpool_u8_i8( + uint8_t * pIn, + int8_t * pOut, + int32_t lambda, + uint16_t out_shift, + int32_t out_add, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + uint16_t dim_im_out_x, + uint16_t dim_im_out_y, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_t, + uint16_t padding_b, + uint16_t padding_l, + uint16_t padding_r, + uint16_t stride_x, + uint16_t stride_y, + int flag_requant +); + +void xpulp_nn_avgpool_i8_u8( + int8_t * pIn, + uint8_t * pOut, + int32_t lambda, + uint16_t out_shift, + int32_t out_add, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + uint16_t dim_im_out_x, + uint16_t dim_im_out_y, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_t, + uint16_t padding_b, + uint16_t padding_l, + uint16_t padding_r, + uint16_t stride_x, + uint16_t stride_y, + int flag_requant +); + +void xpulp_nn_avgpool_i8_i8( + int8_t * pIn, + int8_t * pOut, + int32_t lambda, + uint16_t out_shift, + int32_t out_add, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + uint16_t dim_im_out_x, + uint16_t dim_im_out_y, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_t, + uint16_t padding_b, + uint16_t padding_l, + uint16_t padding_r, + uint16_t stride_x, + uint16_t stride_y, + int flag_requant +); + +void xpulp_nn_avgpool_u8_u4( + uint8_t * pIn, + uint8_t * pOut, + int32_t lambda, + uint16_t out_shift, + int32_t out_add, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + uint16_t dim_im_out_x, + uint16_t dim_im_out_y, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_t, + uint16_t padding_b, + uint16_t padding_l, + uint16_t padding_r, + uint16_t stride_x, + uint16_t stride_y, + int flag_requant +); + +void xpulp_nn_avgpool_u8_i4( + uint8_t * pIn, + int8_t * pOut, + int32_t lambda, + uint16_t out_shift, + int32_t out_add, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + uint16_t dim_im_out_x, + uint16_t dim_im_out_y, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_t, + uint16_t padding_b, + uint16_t padding_l, + uint16_t padding_r, + uint16_t stride_x, + uint16_t stride_y, + int flag_requant +); + +void xpulp_nn_avgpool_i8_u4( + int8_t * pIn, + uint8_t * pOut, + int32_t lambda, + uint16_t out_shift, + int32_t out_add, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + uint16_t dim_im_out_x, + uint16_t dim_im_out_y, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_t, + uint16_t padding_b, + uint16_t padding_l, + uint16_t padding_r, + uint16_t stride_x, + uint16_t stride_y, + int flag_requant +); + +void xpulp_nn_avgpool_i8_i4( + int8_t * pIn, + int8_t * pOut, + int32_t lambda, + uint16_t out_shift, + int32_t out_add, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + uint16_t dim_im_out_x, + uint16_t dim_im_out_y, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_t, + uint16_t padding_b, + uint16_t padding_l, + uint16_t padding_r, + uint16_t stride_x, + uint16_t stride_y, + int flag_requant +); + +void xpulp_nn_avgpool_u8_u2( + uint8_t * pIn, + uint8_t * pOut, + int32_t lambda, + uint16_t out_shift, + int32_t out_add, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + uint16_t dim_im_out_x, + uint16_t dim_im_out_y, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_t, + uint16_t padding_b, + uint16_t padding_l, + uint16_t padding_r, + uint16_t stride_x, + uint16_t stride_y, + int flag_requant +); + +void xpulp_nn_avgpool_u8_i2( + uint8_t * pIn, + int8_t * pOut, + int32_t lambda, + uint16_t out_shift, + int32_t out_add, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + uint16_t dim_im_out_x, + uint16_t dim_im_out_y, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_t, + uint16_t padding_b, + uint16_t padding_l, + uint16_t padding_r, + uint16_t stride_x, + uint16_t stride_y, + int flag_requant +); + +void xpulp_nn_avgpool_i8_u2( + int8_t * pIn, + uint8_t * pOut, + int32_t lambda, + uint16_t out_shift, + int32_t out_add, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + uint16_t dim_im_out_x, + uint16_t dim_im_out_y, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_t, + uint16_t padding_b, + uint16_t padding_l, + uint16_t padding_r, + uint16_t stride_x, + uint16_t stride_y, + int flag_requant +); + +void xpulp_nn_avgpool_i8_i2( + int8_t * pIn, + int8_t * pOut, + int32_t lambda, + uint16_t out_shift, + int32_t out_add, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + uint16_t dim_im_out_x, + uint16_t dim_im_out_y, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_t, + uint16_t padding_b, + uint16_t padding_l, + uint16_t padding_r, + uint16_t stride_x, + uint16_t stride_y, + int flag_requant +); + +void xpulp_nn_avgpool_u4_u8( + uint8_t * pIn, + uint8_t * pOut, + int32_t lambda, + uint16_t out_shift, + int32_t out_add, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + uint16_t dim_im_out_x, + uint16_t dim_im_out_y, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_t, + uint16_t padding_b, + uint16_t padding_l, + uint16_t padding_r, + uint16_t stride_x, + uint16_t stride_y, + int flag_requant +); + +void xpulp_nn_avgpool_u4_i8( + uint8_t * pIn, + int8_t * pOut, + int32_t lambda, + uint16_t out_shift, + int32_t out_add, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + uint16_t dim_im_out_x, + uint16_t dim_im_out_y, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_t, + uint16_t padding_b, + uint16_t padding_l, + uint16_t padding_r, + uint16_t stride_x, + uint16_t stride_y, + int flag_requant +); + +void xpulp_nn_avgpool_i4_u8( + int8_t * pIn, + uint8_t * pOut, + int32_t lambda, + uint16_t out_shift, + int32_t out_add, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + uint16_t dim_im_out_x, + uint16_t dim_im_out_y, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_t, + uint16_t padding_b, + uint16_t padding_l, + uint16_t padding_r, + uint16_t stride_x, + uint16_t stride_y, + int flag_requant +); + +void xpulp_nn_avgpool_i4_i8( + int8_t * pIn, + int8_t * pOut, + int32_t lambda, + uint16_t out_shift, + int32_t out_add, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + uint16_t dim_im_out_x, + uint16_t dim_im_out_y, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_t, + uint16_t padding_b, + uint16_t padding_l, + uint16_t padding_r, + uint16_t stride_x, + uint16_t stride_y, + int flag_requant +); + +void xpulp_nn_avgpool_u4_u4( + uint8_t * pIn, + uint8_t * pOut, + int32_t lambda, + uint16_t out_shift, + int32_t out_add, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + uint16_t dim_im_out_x, + uint16_t dim_im_out_y, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_t, + uint16_t padding_b, + uint16_t padding_l, + uint16_t padding_r, + uint16_t stride_x, + uint16_t stride_y, + int flag_requant +); + +void xpulp_nn_avgpool_u4_i4( + uint8_t * pIn, + int8_t * pOut, + int32_t lambda, + uint16_t out_shift, + int32_t out_add, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + uint16_t dim_im_out_x, + uint16_t dim_im_out_y, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_t, + uint16_t padding_b, + uint16_t padding_l, + uint16_t padding_r, + uint16_t stride_x, + uint16_t stride_y, + int flag_requant +); + +void xpulp_nn_avgpool_i4_u4( + int8_t * pIn, + uint8_t * pOut, + int32_t lambda, + uint16_t out_shift, + int32_t out_add, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + uint16_t dim_im_out_x, + uint16_t dim_im_out_y, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_t, + uint16_t padding_b, + uint16_t padding_l, + uint16_t padding_r, + uint16_t stride_x, + uint16_t stride_y, + int flag_requant +); + +void xpulp_nn_avgpool_i4_i4( + int8_t * pIn, + int8_t * pOut, + int32_t lambda, + uint16_t out_shift, + int32_t out_add, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + uint16_t dim_im_out_x, + uint16_t dim_im_out_y, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_t, + uint16_t padding_b, + uint16_t padding_l, + uint16_t padding_r, + uint16_t stride_x, + uint16_t stride_y, + int flag_requant +); + +void xpulp_nn_avgpool_u4_u2( + uint8_t * pIn, + uint8_t * pOut, + int32_t lambda, + uint16_t out_shift, + int32_t out_add, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + uint16_t dim_im_out_x, + uint16_t dim_im_out_y, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_t, + uint16_t padding_b, + uint16_t padding_l, + uint16_t padding_r, + uint16_t stride_x, + uint16_t stride_y, + int flag_requant +); + +void xpulp_nn_avgpool_u4_i2( + uint8_t * pIn, + int8_t * pOut, + int32_t lambda, + uint16_t out_shift, + int32_t out_add, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + uint16_t dim_im_out_x, + uint16_t dim_im_out_y, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_t, + uint16_t padding_b, + uint16_t padding_l, + uint16_t padding_r, + uint16_t stride_x, + uint16_t stride_y, + int flag_requant +); + +void xpulp_nn_avgpool_i4_u2( + int8_t * pIn, + uint8_t * pOut, + int32_t lambda, + uint16_t out_shift, + int32_t out_add, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + uint16_t dim_im_out_x, + uint16_t dim_im_out_y, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_t, + uint16_t padding_b, + uint16_t padding_l, + uint16_t padding_r, + uint16_t stride_x, + uint16_t stride_y, + int flag_requant +); + +void xpulp_nn_avgpool_i4_i2( + int8_t * pIn, + int8_t * pOut, + int32_t lambda, + uint16_t out_shift, + int32_t out_add, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + uint16_t dim_im_out_x, + uint16_t dim_im_out_y, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_t, + uint16_t padding_b, + uint16_t padding_l, + uint16_t padding_r, + uint16_t stride_x, + uint16_t stride_y, + int flag_requant +); + +void xpulp_nn_avgpool_u2_u8( + uint8_t * pIn, + uint8_t * pOut, + int32_t lambda, + uint16_t out_shift, + int32_t out_add, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + uint16_t dim_im_out_x, + uint16_t dim_im_out_y, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_t, + uint16_t padding_b, + uint16_t padding_l, + uint16_t padding_r, + uint16_t stride_x, + uint16_t stride_y, + int flag_requant +); + +void xpulp_nn_avgpool_u2_i8( + uint8_t * pIn, + int8_t * pOut, + int32_t lambda, + uint16_t out_shift, + int32_t out_add, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + uint16_t dim_im_out_x, + uint16_t dim_im_out_y, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_t, + uint16_t padding_b, + uint16_t padding_l, + uint16_t padding_r, + uint16_t stride_x, + uint16_t stride_y, + int flag_requant +); + +void xpulp_nn_avgpool_i2_u8( + int8_t * pIn, + uint8_t * pOut, + int32_t lambda, + uint16_t out_shift, + int32_t out_add, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + uint16_t dim_im_out_x, + uint16_t dim_im_out_y, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_t, + uint16_t padding_b, + uint16_t padding_l, + uint16_t padding_r, + uint16_t stride_x, + uint16_t stride_y, + int flag_requant +); + +void xpulp_nn_avgpool_i2_i8( + int8_t * pIn, + int8_t * pOut, + int32_t lambda, + uint16_t out_shift, + int32_t out_add, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + uint16_t dim_im_out_x, + uint16_t dim_im_out_y, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_t, + uint16_t padding_b, + uint16_t padding_l, + uint16_t padding_r, + uint16_t stride_x, + uint16_t stride_y, + int flag_requant +); + +void xpulp_nn_avgpool_u2_u4( + uint8_t * pIn, + uint8_t * pOut, + int32_t lambda, + uint16_t out_shift, + int32_t out_add, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + uint16_t dim_im_out_x, + uint16_t dim_im_out_y, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_t, + uint16_t padding_b, + uint16_t padding_l, + uint16_t padding_r, + uint16_t stride_x, + uint16_t stride_y, + int flag_requant +); + +void xpulp_nn_avgpool_u2_i4( + uint8_t * pIn, + int8_t * pOut, + int32_t lambda, + uint16_t out_shift, + int32_t out_add, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + uint16_t dim_im_out_x, + uint16_t dim_im_out_y, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_t, + uint16_t padding_b, + uint16_t padding_l, + uint16_t padding_r, + uint16_t stride_x, + uint16_t stride_y, + int flag_requant +); + +void xpulp_nn_avgpool_i2_u4( + int8_t * pIn, + uint8_t * pOut, + int32_t lambda, + uint16_t out_shift, + int32_t out_add, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + uint16_t dim_im_out_x, + uint16_t dim_im_out_y, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_t, + uint16_t padding_b, + uint16_t padding_l, + uint16_t padding_r, + uint16_t stride_x, + uint16_t stride_y, + int flag_requant +); + +void xpulp_nn_avgpool_i2_i4( + int8_t * pIn, + int8_t * pOut, + int32_t lambda, + uint16_t out_shift, + int32_t out_add, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + uint16_t dim_im_out_x, + uint16_t dim_im_out_y, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_t, + uint16_t padding_b, + uint16_t padding_l, + uint16_t padding_r, + uint16_t stride_x, + uint16_t stride_y, + int flag_requant +); + +void xpulp_nn_avgpool_u2_u2( + uint8_t * pIn, + uint8_t * pOut, + int32_t lambda, + uint16_t out_shift, + int32_t out_add, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + uint16_t dim_im_out_x, + uint16_t dim_im_out_y, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_t, + uint16_t padding_b, + uint16_t padding_l, + uint16_t padding_r, + uint16_t stride_x, + uint16_t stride_y, + int flag_requant +); + +void xpulp_nn_avgpool_u2_i2( + uint8_t * pIn, + int8_t * pOut, + int32_t lambda, + uint16_t out_shift, + int32_t out_add, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + uint16_t dim_im_out_x, + uint16_t dim_im_out_y, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_t, + uint16_t padding_b, + uint16_t padding_l, + uint16_t padding_r, + uint16_t stride_x, + uint16_t stride_y, + int flag_requant +); + +void xpulp_nn_avgpool_i2_u2( + int8_t * pIn, + uint8_t * pOut, + int32_t lambda, + uint16_t out_shift, + int32_t out_add, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + uint16_t dim_im_out_x, + uint16_t dim_im_out_y, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_t, + uint16_t padding_b, + uint16_t padding_l, + uint16_t padding_r, + uint16_t stride_x, + uint16_t stride_y, + int flag_requant +); + +void xpulp_nn_avgpool_i2_i2( + int8_t * pIn, + int8_t * pOut, + int32_t lambda, + uint16_t out_shift, + int32_t out_add, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + uint16_t dim_im_out_x, + uint16_t dim_im_out_y, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_t, + uint16_t padding_b, + uint16_t padding_l, + uint16_t padding_r, + uint16_t stride_x, + uint16_t stride_y, + int flag_requant +); + +void xpulp_nn_add_u8_u8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + uint16_t out_mult1, + uint16_t out_mult2, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in); + +void xpulp_nn_add_u8_u8_u8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u8_u8_u4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u8_u8_u2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u8_u8_i8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u8_u8_i4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u8_u8_i2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u8_i8_u8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u8_i8_u4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u8_i8_u2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u8_i8_i8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u8_i8_i4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u8_i8_i2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i8_u8_u8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i8_u8_u4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i8_u8_u2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i8_u8_i8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i8_u8_i4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i8_u8_i2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i8_i8_u8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i8_i8_u4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i8_i8_u2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i8_i8_i8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i8_i8_i4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i8_i8_i2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u8_u4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + uint16_t out_mult1, + uint16_t out_mult2, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in); + +void xpulp_nn_add_u8_u4_u8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u8_u4_u4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u8_u4_u2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u8_u4_i8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u8_u4_i4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u8_u4_i2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u8_i4_u8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u8_i4_u4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u8_i4_u2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u8_i4_i8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u8_i4_i4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u8_i4_i2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i8_u4_u8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i8_u4_u4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i8_u4_u2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i8_u4_i8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i8_u4_i4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i8_u4_i2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i8_i4_u8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i8_i4_u4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i8_i4_u2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i8_i4_i8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i8_i4_i4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i8_i4_i2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u8_u2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + uint16_t out_mult1, + uint16_t out_mult2, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in); + +void xpulp_nn_add_u8_u2_u8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u8_u2_u4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u8_u2_u2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u8_u2_i8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u8_u2_i4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u8_u2_i2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u8_i2_u8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u8_i2_u4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u8_i2_u2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u8_i2_i8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u8_i2_i4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u8_i2_i2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i8_u2_u8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i8_u2_u4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i8_u2_u2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i8_u2_i8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i8_u2_i4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i8_u2_i2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i8_i2_u8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i8_i2_u4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i8_i2_u2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i8_i2_i8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i8_i2_i4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i8_i2_i2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u4_u8_u8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u4_u8_u4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u4_u8_u2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u4_u8_i8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u4_u8_i4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u4_u8_i2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u4_i8_u8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u4_i8_u4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u4_i8_u2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u4_i8_i8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u4_i8_i4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u4_i8_i2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i4_u8_u8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i4_u8_u4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i4_u8_u2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i4_u8_i8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i4_u8_i4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i4_u8_i2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i4_i8_u8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i4_i8_u4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i4_i8_u2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i4_i8_i8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i4_i8_i4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i4_i8_i2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u4_u4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + uint16_t out_mult1, + uint16_t out_mult2, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in); + +void xpulp_nn_add_u4_u4_u8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u4_u4_u4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u4_u4_u2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u4_u4_i8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u4_u4_i4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u4_u4_i2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u4_i4_u8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u4_i4_u4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u4_i4_u2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u4_i4_i8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u4_i4_i4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u4_i4_i2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i4_u4_u8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i4_u4_u4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i4_u4_u2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i4_u4_i8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i4_u4_i4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i4_u4_i2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i4_i4_u8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i4_i4_u4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i4_i4_u2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i4_i4_i8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i4_i4_i4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i4_i4_i2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u4_u2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + uint16_t out_mult1, + uint16_t out_mult2, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in); + +void xpulp_nn_add_u4_u2_u8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u4_u2_u4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u4_u2_u2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u4_u2_i8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u4_u2_i4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u4_u2_i2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u4_i2_u8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u4_i2_u4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u4_i2_u2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u4_i2_i8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u4_i2_i4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u4_i2_i2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i4_u2_u8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i4_u2_u4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i4_u2_u2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i4_u2_i8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i4_u2_i4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i4_u2_i2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i4_i2_u8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i4_i2_u4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i4_i2_u2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i4_i2_i8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i4_i2_i4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i4_i2_i2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u2_u8_u8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u2_u8_u4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u2_u8_u2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u2_u8_i8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u2_u8_i4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u2_u8_i2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u2_i8_u8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u2_i8_u4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u2_i8_u2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u2_i8_i8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u2_i8_i4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u2_i8_i2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i2_u8_u8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i2_u8_u4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i2_u8_u2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i2_u8_i8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i2_u8_i4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i2_u8_i2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i2_i8_u8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i2_i8_u4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i2_i8_u2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i2_i8_i8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i2_i8_i4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i2_i8_i2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u2_u4_u8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u2_u4_u4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u2_u4_u2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u2_u4_i8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u2_u4_i4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u2_u4_i2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u2_i4_u8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u2_i4_u4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u2_i4_u2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u2_i4_i8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u2_i4_i4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u2_i4_i2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i2_u4_u8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i2_u4_u4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i2_u4_u2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i2_u4_i8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i2_u4_i4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i2_u4_i2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i2_i4_u8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i2_i4_u4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i2_i4_u2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i2_i4_i8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i2_i4_i4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i2_i4_i2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u2_u2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + uint16_t out_mult1, + uint16_t out_mult2, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in); + +void xpulp_nn_add_u2_u2_u8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u2_u2_u4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u2_u2_u2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u2_u2_i8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u2_u2_i4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u2_u2_i2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u2_i2_u8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u2_i2_u4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u2_i2_u2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u2_i2_i8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u2_i2_i4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u2_i2_i2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i2_u2_u8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i2_u2_u4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i2_u2_u2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i2_u2_i8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i2_u2_i4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i2_u2_i2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i2_i2_u8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i2_i2_u4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i2_i2_u2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i2_i2_i8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i2_i2_i4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i2_i2_i2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + + + +#endif diff --git a/rt_nn_tests/xpnn_maxpool_2b/pulp_nn_mix_kernels.h b/rt_nn_tests/xpnn_maxpool_2b/pulp_nn_mix_kernels.h new file mode 100644 index 0000000..8b2a3c6 --- /dev/null +++ b/rt_nn_tests/xpnn_maxpool_2b/pulp_nn_mix_kernels.h @@ -0,0 +1,7093 @@ +/* + * pulp_nn_kernels.h + * Nazareno Bruschi + * + * Copyright (C) 2019-2020 University of Bologna + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef __XPULPNN-MIXED_KERNELS__ +#define __XPULPNN-MIXED_KERNELS__ + +void xpulp_nn_mix_conv_u8_u8_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_mix_conv_u8_u8_i8_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_mix_conv_u8_u8_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_mix_conv_u8_u8_i4_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_mix_conv_u8_u8_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_mix_conv_u8_u8_i2_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_mix_conv_u8_u4_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_mix_conv_u8_u4_i8_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_mix_conv_u8_u4_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_mix_conv_u8_u4_i4_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_mix_conv_u8_u4_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_mix_conv_u8_u4_i2_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_mix_conv_u8_u2_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_mix_conv_u8_u2_i8_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_mix_conv_u8_u2_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_mix_conv_u8_u2_i4_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_mix_conv_u8_u2_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_mix_conv_u8_u2_i2_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_mix_conv_u4_u8_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_mix_conv_u4_u8_i8_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_mix_conv_u4_u8_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_mix_conv_u4_u8_i4_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_mix_conv_u4_u8_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_mix_conv_u4_u8_i2_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_mix_conv_u4_u4_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_mix_conv_u4_u4_i8_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_mix_conv_u4_u4_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_mix_conv_u4_u4_i4_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_mix_conv_u4_u4_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_mix_conv_u4_u4_i2_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_mix_conv_u4_u2_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_mix_conv_u4_u2_i8_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_mix_conv_u4_u2_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_mix_conv_u4_u2_i4_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_mix_conv_u4_u2_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_mix_conv_u4_u2_i2_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_mix_conv_u2_u8_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_mix_conv_u2_u8_i8_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_mix_conv_u2_u8_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_mix_conv_u2_u8_i4_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_mix_conv_u2_u8_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_mix_conv_u2_u8_i2_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_mix_conv_u2_u4_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_mix_conv_u2_u4_i8_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_mix_conv_u2_u4_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_mix_conv_u2_u4_i4_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_mix_conv_u2_u4_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_mix_conv_u2_u4_i2_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_mix_conv_u2_u2_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_mix_conv_u2_u2_i8_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_mix_conv_u2_u2_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_mix_conv_u2_u2_i4_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_mix_conv_u2_u2_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_mix_conv_u2_u2_i2_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_mix_matmul_u8_u8_i8( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_mix_matmul_u8_u8_i8_4x4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_mix_matmul_u8_u8_i4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_mix_matmul_u8_u8_i4_4x4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_mix_matmul_u8_u8_i2( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_mix_matmul_u8_u8_i2_4x4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_mix_matmul_u8_u4_i8( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_mix_matmul_u8_u4_i8_4x4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_mix_matmul_u8_u4_i4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_mix_matmul_u8_u4_i4_4x4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_mix_matmul_u8_u4_i2( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_mix_matmul_u8_u4_i2_4x4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_mix_matmul_u8_u2_i8( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_mix_matmul_u8_u2_i8_4x4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_mix_matmul_u8_u2_i4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_mix_matmul_u8_u2_i4_4x4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_mix_matmul_u8_u2_i2( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_mix_matmul_u8_u2_i2_4x4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_mix_matmul_u4_u8_i8( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_mix_matmul_u4_u8_i8_4x4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_mix_matmul_u4_u8_i4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_mix_matmul_u4_u8_i4_4x4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_mix_matmul_u4_u8_i2( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_mix_matmul_u4_u8_i2_4x4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_mix_matmul_u4_u4_i8( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_mix_matmul_u4_u4_i8_4x4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_mix_matmul_u4_u4_i4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_mix_matmul_u4_u4_i4_4x4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_mix_matmul_u4_u4_i2( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_mix_matmul_u4_u4_i2_4x4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_mix_matmul_u4_u2_i8( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_mix_matmul_u4_u2_i8_4x4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_mix_matmul_u4_u2_i4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_mix_matmul_u4_u2_i4_4x4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_mix_matmul_u4_u2_i2( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_mix_matmul_u4_u2_i2_4x4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_mix_matmul_u2_u8_i8( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_mix_matmul_u2_u8_i8_4x4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_mix_matmul_u2_u8_i4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_mix_matmul_u2_u8_i4_4x4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_mix_matmul_u2_u8_i2( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_mix_matmul_u2_u8_i2_4x4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_mix_matmul_u2_u4_i8( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_mix_matmul_u2_u4_i8_4x4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_mix_matmul_u2_u4_i4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_mix_matmul_u2_u4_i4_4x4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_mix_matmul_u2_u4_i2( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_mix_matmul_u2_u4_i2_4x4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_mix_matmul_u2_u2_i8( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_mix_matmul_u2_u2_i8_4x4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_mix_matmul_u2_u2_i4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_mix_matmul_u2_u2_i4_4x4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_mix_matmul_u2_u2_i2( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_mix_matmul_u2_u2_i2_4x4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_avgpool_u8_u8( + uint8_t * pIn, + uint8_t * pOut, + int32_t lambda, + uint16_t out_shift, + int32_t out_add, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + uint16_t dim_im_out_x, + uint16_t dim_im_out_y, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_t, + uint16_t padding_b, + uint16_t padding_l, + uint16_t padding_r, + uint16_t stride_x, + uint16_t stride_y, + int flag_requant +); + +void xpulp_nn_avgpool_u8_i8( + uint8_t * pIn, + int8_t * pOut, + int32_t lambda, + uint16_t out_shift, + int32_t out_add, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + uint16_t dim_im_out_x, + uint16_t dim_im_out_y, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_t, + uint16_t padding_b, + uint16_t padding_l, + uint16_t padding_r, + uint16_t stride_x, + uint16_t stride_y, + int flag_requant +); + +void xpulp_nn_avgpool_i8_u8( + int8_t * pIn, + uint8_t * pOut, + int32_t lambda, + uint16_t out_shift, + int32_t out_add, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + uint16_t dim_im_out_x, + uint16_t dim_im_out_y, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_t, + uint16_t padding_b, + uint16_t padding_l, + uint16_t padding_r, + uint16_t stride_x, + uint16_t stride_y, + int flag_requant +); + +void xpulp_nn_avgpool_i8_i8( + int8_t * pIn, + int8_t * pOut, + int32_t lambda, + uint16_t out_shift, + int32_t out_add, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + uint16_t dim_im_out_x, + uint16_t dim_im_out_y, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_t, + uint16_t padding_b, + uint16_t padding_l, + uint16_t padding_r, + uint16_t stride_x, + uint16_t stride_y, + int flag_requant +); + +void xpulp_nn_avgpool_u8_u4( + uint8_t * pIn, + uint8_t * pOut, + int32_t lambda, + uint16_t out_shift, + int32_t out_add, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + uint16_t dim_im_out_x, + uint16_t dim_im_out_y, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_t, + uint16_t padding_b, + uint16_t padding_l, + uint16_t padding_r, + uint16_t stride_x, + uint16_t stride_y, + int flag_requant +); + +void xpulp_nn_avgpool_u8_i4( + uint8_t * pIn, + int8_t * pOut, + int32_t lambda, + uint16_t out_shift, + int32_t out_add, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + uint16_t dim_im_out_x, + uint16_t dim_im_out_y, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_t, + uint16_t padding_b, + uint16_t padding_l, + uint16_t padding_r, + uint16_t stride_x, + uint16_t stride_y, + int flag_requant +); + +void xpulp_nn_avgpool_i8_u4( + int8_t * pIn, + uint8_t * pOut, + int32_t lambda, + uint16_t out_shift, + int32_t out_add, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + uint16_t dim_im_out_x, + uint16_t dim_im_out_y, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_t, + uint16_t padding_b, + uint16_t padding_l, + uint16_t padding_r, + uint16_t stride_x, + uint16_t stride_y, + int flag_requant +); + +void xpulp_nn_avgpool_i8_i4( + int8_t * pIn, + int8_t * pOut, + int32_t lambda, + uint16_t out_shift, + int32_t out_add, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + uint16_t dim_im_out_x, + uint16_t dim_im_out_y, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_t, + uint16_t padding_b, + uint16_t padding_l, + uint16_t padding_r, + uint16_t stride_x, + uint16_t stride_y, + int flag_requant +); + +void xpulp_nn_avgpool_u8_u2( + uint8_t * pIn, + uint8_t * pOut, + int32_t lambda, + uint16_t out_shift, + int32_t out_add, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + uint16_t dim_im_out_x, + uint16_t dim_im_out_y, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_t, + uint16_t padding_b, + uint16_t padding_l, + uint16_t padding_r, + uint16_t stride_x, + uint16_t stride_y, + int flag_requant +); + +void xpulp_nn_avgpool_u8_i2( + uint8_t * pIn, + int8_t * pOut, + int32_t lambda, + uint16_t out_shift, + int32_t out_add, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + uint16_t dim_im_out_x, + uint16_t dim_im_out_y, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_t, + uint16_t padding_b, + uint16_t padding_l, + uint16_t padding_r, + uint16_t stride_x, + uint16_t stride_y, + int flag_requant +); + +void xpulp_nn_avgpool_i8_u2( + int8_t * pIn, + uint8_t * pOut, + int32_t lambda, + uint16_t out_shift, + int32_t out_add, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + uint16_t dim_im_out_x, + uint16_t dim_im_out_y, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_t, + uint16_t padding_b, + uint16_t padding_l, + uint16_t padding_r, + uint16_t stride_x, + uint16_t stride_y, + int flag_requant +); + +void xpulp_nn_avgpool_i8_i2( + int8_t * pIn, + int8_t * pOut, + int32_t lambda, + uint16_t out_shift, + int32_t out_add, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + uint16_t dim_im_out_x, + uint16_t dim_im_out_y, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_t, + uint16_t padding_b, + uint16_t padding_l, + uint16_t padding_r, + uint16_t stride_x, + uint16_t stride_y, + int flag_requant +); + +void xpulp_nn_avgpool_u4_u8( + uint8_t * pIn, + uint8_t * pOut, + int32_t lambda, + uint16_t out_shift, + int32_t out_add, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + uint16_t dim_im_out_x, + uint16_t dim_im_out_y, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_t, + uint16_t padding_b, + uint16_t padding_l, + uint16_t padding_r, + uint16_t stride_x, + uint16_t stride_y, + int flag_requant +); + +void xpulp_nn_avgpool_u4_i8( + uint8_t * pIn, + int8_t * pOut, + int32_t lambda, + uint16_t out_shift, + int32_t out_add, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + uint16_t dim_im_out_x, + uint16_t dim_im_out_y, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_t, + uint16_t padding_b, + uint16_t padding_l, + uint16_t padding_r, + uint16_t stride_x, + uint16_t stride_y, + int flag_requant +); + +void xpulp_nn_avgpool_i4_u8( + int8_t * pIn, + uint8_t * pOut, + int32_t lambda, + uint16_t out_shift, + int32_t out_add, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + uint16_t dim_im_out_x, + uint16_t dim_im_out_y, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_t, + uint16_t padding_b, + uint16_t padding_l, + uint16_t padding_r, + uint16_t stride_x, + uint16_t stride_y, + int flag_requant +); + +void xpulp_nn_avgpool_i4_i8( + int8_t * pIn, + int8_t * pOut, + int32_t lambda, + uint16_t out_shift, + int32_t out_add, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + uint16_t dim_im_out_x, + uint16_t dim_im_out_y, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_t, + uint16_t padding_b, + uint16_t padding_l, + uint16_t padding_r, + uint16_t stride_x, + uint16_t stride_y, + int flag_requant +); + +void xpulp_nn_avgpool_u4_u4( + uint8_t * pIn, + uint8_t * pOut, + int32_t lambda, + uint16_t out_shift, + int32_t out_add, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + uint16_t dim_im_out_x, + uint16_t dim_im_out_y, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_t, + uint16_t padding_b, + uint16_t padding_l, + uint16_t padding_r, + uint16_t stride_x, + uint16_t stride_y, + int flag_requant +); + +void xpulp_nn_avgpool_u4_i4( + uint8_t * pIn, + int8_t * pOut, + int32_t lambda, + uint16_t out_shift, + int32_t out_add, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + uint16_t dim_im_out_x, + uint16_t dim_im_out_y, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_t, + uint16_t padding_b, + uint16_t padding_l, + uint16_t padding_r, + uint16_t stride_x, + uint16_t stride_y, + int flag_requant +); + +void xpulp_nn_avgpool_i4_u4( + int8_t * pIn, + uint8_t * pOut, + int32_t lambda, + uint16_t out_shift, + int32_t out_add, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + uint16_t dim_im_out_x, + uint16_t dim_im_out_y, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_t, + uint16_t padding_b, + uint16_t padding_l, + uint16_t padding_r, + uint16_t stride_x, + uint16_t stride_y, + int flag_requant +); + +void xpulp_nn_avgpool_i4_i4( + int8_t * pIn, + int8_t * pOut, + int32_t lambda, + uint16_t out_shift, + int32_t out_add, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + uint16_t dim_im_out_x, + uint16_t dim_im_out_y, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_t, + uint16_t padding_b, + uint16_t padding_l, + uint16_t padding_r, + uint16_t stride_x, + uint16_t stride_y, + int flag_requant +); + +void xpulp_nn_avgpool_u4_u2( + uint8_t * pIn, + uint8_t * pOut, + int32_t lambda, + uint16_t out_shift, + int32_t out_add, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + uint16_t dim_im_out_x, + uint16_t dim_im_out_y, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_t, + uint16_t padding_b, + uint16_t padding_l, + uint16_t padding_r, + uint16_t stride_x, + uint16_t stride_y, + int flag_requant +); + +void xpulp_nn_avgpool_u4_i2( + uint8_t * pIn, + int8_t * pOut, + int32_t lambda, + uint16_t out_shift, + int32_t out_add, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + uint16_t dim_im_out_x, + uint16_t dim_im_out_y, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_t, + uint16_t padding_b, + uint16_t padding_l, + uint16_t padding_r, + uint16_t stride_x, + uint16_t stride_y, + int flag_requant +); + +void xpulp_nn_avgpool_i4_u2( + int8_t * pIn, + uint8_t * pOut, + int32_t lambda, + uint16_t out_shift, + int32_t out_add, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + uint16_t dim_im_out_x, + uint16_t dim_im_out_y, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_t, + uint16_t padding_b, + uint16_t padding_l, + uint16_t padding_r, + uint16_t stride_x, + uint16_t stride_y, + int flag_requant +); + +void xpulp_nn_avgpool_i4_i2( + int8_t * pIn, + int8_t * pOut, + int32_t lambda, + uint16_t out_shift, + int32_t out_add, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + uint16_t dim_im_out_x, + uint16_t dim_im_out_y, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_t, + uint16_t padding_b, + uint16_t padding_l, + uint16_t padding_r, + uint16_t stride_x, + uint16_t stride_y, + int flag_requant +); + +void xpulp_nn_avgpool_u2_u8( + uint8_t * pIn, + uint8_t * pOut, + int32_t lambda, + uint16_t out_shift, + int32_t out_add, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + uint16_t dim_im_out_x, + uint16_t dim_im_out_y, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_t, + uint16_t padding_b, + uint16_t padding_l, + uint16_t padding_r, + uint16_t stride_x, + uint16_t stride_y, + int flag_requant +); + +void xpulp_nn_avgpool_u2_i8( + uint8_t * pIn, + int8_t * pOut, + int32_t lambda, + uint16_t out_shift, + int32_t out_add, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + uint16_t dim_im_out_x, + uint16_t dim_im_out_y, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_t, + uint16_t padding_b, + uint16_t padding_l, + uint16_t padding_r, + uint16_t stride_x, + uint16_t stride_y, + int flag_requant +); + +void xpulp_nn_avgpool_i2_u8( + int8_t * pIn, + uint8_t * pOut, + int32_t lambda, + uint16_t out_shift, + int32_t out_add, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + uint16_t dim_im_out_x, + uint16_t dim_im_out_y, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_t, + uint16_t padding_b, + uint16_t padding_l, + uint16_t padding_r, + uint16_t stride_x, + uint16_t stride_y, + int flag_requant +); + +void xpulp_nn_avgpool_i2_i8( + int8_t * pIn, + int8_t * pOut, + int32_t lambda, + uint16_t out_shift, + int32_t out_add, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + uint16_t dim_im_out_x, + uint16_t dim_im_out_y, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_t, + uint16_t padding_b, + uint16_t padding_l, + uint16_t padding_r, + uint16_t stride_x, + uint16_t stride_y, + int flag_requant +); + +void xpulp_nn_avgpool_u2_u4( + uint8_t * pIn, + uint8_t * pOut, + int32_t lambda, + uint16_t out_shift, + int32_t out_add, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + uint16_t dim_im_out_x, + uint16_t dim_im_out_y, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_t, + uint16_t padding_b, + uint16_t padding_l, + uint16_t padding_r, + uint16_t stride_x, + uint16_t stride_y, + int flag_requant +); + +void xpulp_nn_avgpool_u2_i4( + uint8_t * pIn, + int8_t * pOut, + int32_t lambda, + uint16_t out_shift, + int32_t out_add, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + uint16_t dim_im_out_x, + uint16_t dim_im_out_y, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_t, + uint16_t padding_b, + uint16_t padding_l, + uint16_t padding_r, + uint16_t stride_x, + uint16_t stride_y, + int flag_requant +); + +void xpulp_nn_avgpool_i2_u4( + int8_t * pIn, + uint8_t * pOut, + int32_t lambda, + uint16_t out_shift, + int32_t out_add, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + uint16_t dim_im_out_x, + uint16_t dim_im_out_y, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_t, + uint16_t padding_b, + uint16_t padding_l, + uint16_t padding_r, + uint16_t stride_x, + uint16_t stride_y, + int flag_requant +); + +void xpulp_nn_avgpool_i2_i4( + int8_t * pIn, + int8_t * pOut, + int32_t lambda, + uint16_t out_shift, + int32_t out_add, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + uint16_t dim_im_out_x, + uint16_t dim_im_out_y, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_t, + uint16_t padding_b, + uint16_t padding_l, + uint16_t padding_r, + uint16_t stride_x, + uint16_t stride_y, + int flag_requant +); + +void xpulp_nn_avgpool_u2_u2( + uint8_t * pIn, + uint8_t * pOut, + int32_t lambda, + uint16_t out_shift, + int32_t out_add, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + uint16_t dim_im_out_x, + uint16_t dim_im_out_y, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_t, + uint16_t padding_b, + uint16_t padding_l, + uint16_t padding_r, + uint16_t stride_x, + uint16_t stride_y, + int flag_requant +); + +void xpulp_nn_avgpool_u2_i2( + uint8_t * pIn, + int8_t * pOut, + int32_t lambda, + uint16_t out_shift, + int32_t out_add, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + uint16_t dim_im_out_x, + uint16_t dim_im_out_y, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_t, + uint16_t padding_b, + uint16_t padding_l, + uint16_t padding_r, + uint16_t stride_x, + uint16_t stride_y, + int flag_requant +); + +void xpulp_nn_avgpool_i2_u2( + int8_t * pIn, + uint8_t * pOut, + int32_t lambda, + uint16_t out_shift, + int32_t out_add, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + uint16_t dim_im_out_x, + uint16_t dim_im_out_y, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_t, + uint16_t padding_b, + uint16_t padding_l, + uint16_t padding_r, + uint16_t stride_x, + uint16_t stride_y, + int flag_requant +); + +void xpulp_nn_avgpool_i2_i2( + int8_t * pIn, + int8_t * pOut, + int32_t lambda, + uint16_t out_shift, + int32_t out_add, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + uint16_t dim_im_out_x, + uint16_t dim_im_out_y, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_t, + uint16_t padding_b, + uint16_t padding_l, + uint16_t padding_r, + uint16_t stride_x, + uint16_t stride_y, + int flag_requant +); + +void xpulp_nn_add_u8_u8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + uint16_t out_mult1, + uint16_t out_mult2, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in); + +void xpulp_nn_add_u8_u8_u8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u8_u8_u4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u8_u8_u2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u8_u8_i8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u8_u8_i4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u8_u8_i2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u8_i8_u8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u8_i8_u4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u8_i8_u2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u8_i8_i8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u8_i8_i4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u8_i8_i2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i8_u8_u8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i8_u8_u4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i8_u8_u2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i8_u8_i8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i8_u8_i4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i8_u8_i2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i8_i8_u8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i8_i8_u4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i8_i8_u2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i8_i8_i8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i8_i8_i4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i8_i8_i2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u8_u4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + uint16_t out_mult1, + uint16_t out_mult2, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in); + +void xpulp_nn_add_u8_u4_u8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u8_u4_u4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u8_u4_u2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u8_u4_i8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u8_u4_i4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u8_u4_i2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u8_i4_u8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u8_i4_u4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u8_i4_u2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u8_i4_i8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u8_i4_i4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u8_i4_i2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i8_u4_u8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i8_u4_u4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i8_u4_u2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i8_u4_i8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i8_u4_i4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i8_u4_i2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i8_i4_u8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i8_i4_u4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i8_i4_u2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i8_i4_i8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i8_i4_i4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i8_i4_i2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u8_u2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + uint16_t out_mult1, + uint16_t out_mult2, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in); + +void xpulp_nn_add_u8_u2_u8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u8_u2_u4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u8_u2_u2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u8_u2_i8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u8_u2_i4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u8_u2_i2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u8_i2_u8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u8_i2_u4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u8_i2_u2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u8_i2_i8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u8_i2_i4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u8_i2_i2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i8_u2_u8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i8_u2_u4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i8_u2_u2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i8_u2_i8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i8_u2_i4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i8_u2_i2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i8_i2_u8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i8_i2_u4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i8_i2_u2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i8_i2_i8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i8_i2_i4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i8_i2_i2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u4_u8_u8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u4_u8_u4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u4_u8_u2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u4_u8_i8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u4_u8_i4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u4_u8_i2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u4_i8_u8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u4_i8_u4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u4_i8_u2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u4_i8_i8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u4_i8_i4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u4_i8_i2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i4_u8_u8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i4_u8_u4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i4_u8_u2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i4_u8_i8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i4_u8_i4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i4_u8_i2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i4_i8_u8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i4_i8_u4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i4_i8_u2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i4_i8_i8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i4_i8_i4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i4_i8_i2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u4_u4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + uint16_t out_mult1, + uint16_t out_mult2, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in); + +void xpulp_nn_add_u4_u4_u8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u4_u4_u4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u4_u4_u2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u4_u4_i8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u4_u4_i4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u4_u4_i2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u4_i4_u8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u4_i4_u4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u4_i4_u2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u4_i4_i8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u4_i4_i4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u4_i4_i2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i4_u4_u8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i4_u4_u4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i4_u4_u2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i4_u4_i8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i4_u4_i4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i4_u4_i2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i4_i4_u8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i4_i4_u4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i4_i4_u2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i4_i4_i8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i4_i4_i4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i4_i4_i2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u4_u2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + uint16_t out_mult1, + uint16_t out_mult2, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in); + +void xpulp_nn_add_u4_u2_u8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u4_u2_u4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u4_u2_u2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u4_u2_i8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u4_u2_i4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u4_u2_i2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u4_i2_u8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u4_i2_u4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u4_i2_u2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u4_i2_i8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u4_i2_i4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u4_i2_i2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i4_u2_u8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i4_u2_u4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i4_u2_u2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i4_u2_i8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i4_u2_i4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i4_u2_i2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i4_i2_u8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i4_i2_u4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i4_i2_u2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i4_i2_i8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i4_i2_i4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i4_i2_i2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u2_u8_u8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u2_u8_u4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u2_u8_u2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u2_u8_i8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u2_u8_i4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u2_u8_i2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u2_i8_u8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u2_i8_u4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u2_i8_u2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u2_i8_i8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u2_i8_i4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u2_i8_i2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i2_u8_u8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i2_u8_u4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i2_u8_u2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i2_u8_i8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i2_u8_i4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i2_u8_i2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i2_i8_u8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i2_i8_u4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i2_i8_u2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i2_i8_i8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i2_i8_i4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i2_i8_i2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u2_u4_u8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u2_u4_u4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u2_u4_u2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u2_u4_i8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u2_u4_i4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u2_u4_i2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u2_i4_u8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u2_i4_u4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u2_i4_u2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u2_i4_i8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u2_i4_i4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u2_i4_i2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i2_u4_u8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i2_u4_u4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i2_u4_u2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i2_u4_i8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i2_u4_i4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i2_u4_i2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i2_i4_u8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i2_i4_u4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i2_i4_u2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i2_i4_i8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i2_i4_i4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i2_i4_i2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u2_u2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + uint16_t out_mult1, + uint16_t out_mult2, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in); + +void xpulp_nn_add_u2_u2_u8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u2_u2_u4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u2_u2_u2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u2_u2_i8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u2_u2_i4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u2_u2_i2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u2_i2_u8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u2_i2_u4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u2_i2_u2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u2_i2_i8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u2_i2_i4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u2_i2_i2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i2_u2_u8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i2_u2_u4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i2_u2_u2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i2_u2_i8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i2_u2_i4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i2_u2_i2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i2_i2_u8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i2_i2_u4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i2_i2_u2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i2_i2_i8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i2_i2_i4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i2_i2_i2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + + + +#endif \ No newline at end of file diff --git a/rt_nn_tests/xpnn_maxpool_2b/pulp_nn_utils.h b/rt_nn_tests/xpnn_maxpool_2b/pulp_nn_utils.h new file mode 100644 index 0000000..86107a0 --- /dev/null +++ b/rt_nn_tests/xpnn_maxpool_2b/pulp_nn_utils.h @@ -0,0 +1,2006 @@ +/* + * pulp_nn_utils.h + * Nazareno Bruschi + * Alessandro Nadalini + * Georg Rutishauser + * + * Copyright (C) 2019-2020 ETH Zurich & University of Bologna + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef __PULPNN_UTILS__ +#define __PULPNN_UTILS__ + +#include + +typedef signed short v2s __attribute__((vector_size (4))); + + + +#define min(a,b) ((a)<(b)?(a):(b)) +#define log2(x) __builtin_pulp_fl1(x) +#define PACK_INT2_SIZE(x) ((x) >> 2) + +#define MemoryFence() asm volatile("":::"memory") + +#define CHANS_DECOMPR(x) (5*x >> 2) // equivalent to division by 0.8 + +/* Functions for Compressed MAC */ +#define CompressedMAC(sum, ptr, config) asm volatile( \ + "pv.smlsdotsp.t %[shum], %[phtr], %[chonfig];" \ + : [shum] "+r" (sum), [phtr] "+r" (ptr): [chonfig] "I" (config)) + +#define CompressedMACUnsigned(sum, ptr, config) asm volatile( \ + "pv.smlsdotsup.t %[shum], %[phtr], %[chonfig];" \ + : [shum] "+r" (sum), [phtr] "+r" (ptr): [chonfig] "I" (config)) + +#define InitNNRF(ptr, config) asm volatile( \ + "pv.smlsdotsp.t x0, %[phtr], %[chonfig];" \ + : [phtr] "+r" (ptr) : [chonfig] "I" (config)) + +#define ThresholdCompress(res, val, thrs) asm volatile( \ + "pv.thrc %[rhes], %[vhal], %[thhrs];" : [rhes] "+r" (res) : [vhal] "r" (val), [thhrs] "r" (thrs)) + +#define GetConfig(a_update, b_update, a_reg, b_reg) a_update << 4 | b_update << 3 | a_reg << 1 | b_reg + +/* Functions for threshold&compress */ +#define check_store(res, pOut) \ + if ((res & 0xe0000000) == 0x00000000) { \ + *pOut = res & 0xff; \ + pOut++; \ + incr_val=ch_out_r; } + +#define check_store_4x1(res, pOut) \ + if ((res & 0xe0000000) == 0x00000000) { \ + *pOut = res & 0xff; \ + pOut++; } + +#define reset_currThr() \ + if ((uint32_t *) currThr == (uint32_t *) (pThr + ch_out)) { \ + currThr = (v2s *) pThr; \ + } + +#define MacLoads20(a_update, b_update, a_reg, b_reg, ptr, sum) __builtin_pulp_mlsdotsp20_v3(a_update, b_update, a_reg, b_reg, ptr, sum) + +#define MacLoad20(a_update, b_update, a_reg, b_reg, ptr, sum) __builtin_pulp_mlsdotsup20_v3(a_update, b_update, a_reg, b_reg, ptr, sum) + +/* Functions for compressed min/max */ +#define CompressedMax(res, in1, in2) asm volatile( \ + "pv.max.t %[res_], %[in1_], %[in2_];" : [res_] "=r" (res) : [in1_] "r" (in1), [in2_] "r" (in2)) + +#define CompressedMin(res, in1, in2) asm volatile( \ + "pv.min.t %[res_], %[in1_], %[in2_];" : [res_] "=r" (res) : [in1_] "r" (in1), [in2_] "r" (in2)) + +#define Max16(res, in1, in2) asm volatile( \ + "pv.max.c %[res_], %[in1_], %[in2_];" : [res_] "=r" (res) : [in1_] "r" (in1), [in2_] "r" (in2)) + +#define Min16(res, in1, in2) asm volatile( \ + "pv.min.c %[res_], %[in1_], %[in2_];" : [res_] "=r" (res) : [in1_] "r" (in1), [in2_] "r" (in2)) + +#define thr_cmp(state, val, threshs) __builtin_pulp_thresh_compr(state, val, threshs) + +typedef unsigned char v4u __attribute__((vector_size (4))); +typedef signed char v4s __attribute__((vector_size (4))); + +#define bitext(x,size,off) __builtin_pulp_bextract(x,size,off) +#define bitextu(x,size,off) __builtin_pulp_bextractu(x,size,off) +#ifdef __clang__ +#define bitins(dst,not_mask_imm,src,mask_imm,off) __builtin_binsert(dst,not_mask_imm,src,mask_imm,off) +#else +#define bitins(dst,not_mask_imm,src,mask_imm,off) __builtin_pulp_binsert(dst,not_mask_imm,src,mask_imm,off) +#endif +#define pack(x,y,z,t) __builtin_pulp_pack4(x,y,z,t) +#define max4(a,b) __builtin_pulp_maxu4(a,b) +#define maxs4(a, b) __builtin_pulp_max4(a, b) +#define max8(a, b) __builtin_pulp_maxu8(a, b) +#define maxs8(a, b) __builtin_pulp_max8(a, b) +#define max16(a, b) __builtin_pulp_maxu16(a, b) +#define maxs16(a, b) __builtin_pulp_max16(a, b) +#define max32(a,b) __builtin_pulp_maxusi(a,b) +#define maxs32(a,b) __builtin_pulp_maxsi(a,b) +#define min32(a,b) __builtin_pulp_minusi(a,b) +#define mins32(a,b) __builtin_pulp_minsi(a,b) +#define min4(a, b) __builtin_pulp_minu4(a, b) +#define mins4(a, b) __builtin_pulp_min4(a, b) +#define min8(a, b) __builtin_pulp_minu8(a, b) +#define mins8(a, b) __builtin_pulp_min8(a, b) +#define min16(a, b) __builtin_pulp_minu16(a, b) +#define mins16(a, b) __builtin_pulp_min16(a, b) +#define avg4(a,b) __builtin_pulp_avgu4(a,b) +#define avg8(a,b) __builtin_pulp_avgu8(a,b) +#define avg16(a,b) __builtin_pulp_avgu16(a,b) +#define log2(x) __builtin_pulp_fl1(x) +#define min(a,b) ((a)<(b)?(a):(b)) +#define SumDotp4(a, b, c) __builtin_pulp_sdotusp4(a, b, c) +#define SumDotp8(a, b, c) __builtin_pulp_sdotusp8(a, b, c) +#define SumDotp16(a, b, c) __builtin_pulp_sdotusp16(a, b, c) +#define SumDotps4(a, b, c) __builtin_pulp_sdotsp4(a, b, c) +#define SumDotps8(a, b, c) __builtin_pulp_sdotsp8(a, b, c) +#define SumDotps16(a, b, c) __builtin_pulp_sdotsp16(a, b, c) +#define clip4(x) __builtin_pulp_clipu_r(x, 15) +#define clip2(x) __builtin_pulp_clipu_r(x, 3) +#define clip8(x) __builtin_pulp_clipu_r(x, 255) + +#define clips4(x) __builtin_pulp_clip_r(x, 7) +#define clips2(x) __builtin_pulp_clip_r(x, 1) +#define clips8(x) __builtin_pulp_clip_r(x, 127) +#define MacLoadInit(a_update, b_update, a_reg, b_reg, ptr) __builtin_pulp_mlinitspr_v3(a_update, b_update, a_reg, b_reg, ptr) +#define MacLoadUpdate(ptr) __builtin_pulp_mlupdatespr_v3(ptr) +#define MacLoadAssign(ptr) __builtin_pulp_mlassignspr_v3(ptr) +#define MacLoad4(a_update, b_update, a_reg, b_reg, ptr, sum) __builtin_pulp_mlsdotsup4_v3(a_update, b_update, a_reg, b_reg, ptr, sum) +#define MacLoad8(a_update, b_update, a_reg, b_reg, ptr, sum) __builtin_pulp_mlsdotsup8_v3(a_update, b_update, a_reg, b_reg, ptr, sum) +#define MacLoad16(a_update, b_update, a_reg, b_reg, ptr, sum) __builtin_pulp_mlsdotsup16_v3(a_update, b_update, a_reg, b_reg, ptr, sum) +#define MacLoads4(a_update, b_update, a_reg, b_reg, ptr, sum) __builtin_pulp_mlsdotsp4_v3(a_update, b_update, a_reg, b_reg, ptr, sum) +#define MacLoads8(a_update, b_update, a_reg, b_reg, ptr, sum) __builtin_pulp_mlsdotsp8_v3(a_update, b_update, a_reg, b_reg, ptr, sum) +#define MacLoads16(a_update, b_update, a_reg, b_reg, ptr, sum) __builtin_pulp_mlsdotsp16_v3(a_update, b_update, a_reg, b_reg, ptr, sum) + +#define PACK_INT8_SIZE(x) (x) +#define PACK_INT4_SIZE(x) ((x) >> 1) +#define PACK_INT2_SIZE(x) ((x) >> 2) + +#define MemoryFence() asm volatile("":::"memory") + +#define LEGACY_MODE(x) asm volatile ("csrwi 0x010," x) +#define IVEC_FMT(x) asm volatile ("csrwi 0x00D," x) +#define MIXED_SKIP(x) asm volatile ("csrwi 0x00F," x) +#define A_ADDRESS(x) asm volatile ("csrw 0x100, %0" :: "r" (x)) +#define W_ADDRESS(x) asm volatile ("csrw 0x101, %0" :: "r" (x)) +#define A_STRIDE(x) asm volatile ("csrw 0x102, %0":: "r" (x)) +#define W_STRIDE(x) asm volatile ("csrw 0x103, %0":: "r" (x)) +#define A_ROLLBACK(x) asm volatile ("csrw 0x104, %0":: "r" (x)) +#define W_ROLLBACK(x) asm volatile ("csrw 0x105, %0":: "r" (x)) +#define A_SKIP(x) asm volatile ("csrwi 0x106," x) +#define W_SKIP(x) asm volatile ("csrwi 0x107," x) + +static uint8_t __attribute__((noinline)) pulp_nn_quant_u2 ( + int32_t phi, + int16_t m, + int8_t d + ) { + int32_t x = (m * phi) >> d; + uint8_t res = clip2(x); + return res; +} +static uint8_t __attribute__((noinline)) pulp_nn_bn_quant_u2 ( + int32_t phi, + int32_t k, + int32_t lambda, + int8_t d + ) { + int32_t integer_image_phi = (k * phi) + lambda; + int32_t x = (integer_image_phi) >> d; + uint8_t res = clip2(x); + return res; +} +static uint8_t __attribute__((noinline)) pulp_nn_add_quant_u2 ( + uint8_t pix1, + uint8_t pix2, + int16_t m1, + int16_t m2, + int8_t d + ) { + uint32_t integer_image = pix1*m1 + pix2*m2; + uint32_t x = (integer_image) >> d; + uint8_t res = clip2(x); + return res; +} + +static int8_t __attribute__((noinline)) pulp_nn_quant_i2 ( + int32_t phi, + int16_t m, + int8_t d + ) { + int32_t x = (m * phi) >> d; + int8_t res = clips2(x); + return res; +} +static int8_t __attribute__((noinline)) pulp_nn_bn_quant_i2 ( + int32_t phi, + int32_t k, + int32_t lambda, + int8_t d + ) { + int32_t integer_image_phi = (k * phi) + lambda; + int32_t x = (integer_image_phi) >> d; + int8_t res = clips2(x); + return res; +} +static int8_t __attribute__((noinline)) pulp_nn_add_quant_i2 ( + int8_t pix1, + int8_t pix2, + int16_t m1, + int16_t m2, + int8_t d + ) { + int32_t integer_image = pix1*m1 + pix2*m2; + int32_t x = (integer_image) >> d; + int8_t res = clips2(x); + return res; +} + +static uint8_t __attribute__((noinline)) pulp_nn_quant_u4 ( + int32_t phi, + int16_t m, + int8_t d + ) { + int32_t x = (m * phi) >> d; + uint8_t res = clip4(x); + return res; +} +static uint8_t __attribute__((noinline)) pulp_nn_bn_quant_u4 ( + int32_t phi, + int32_t k, + int32_t lambda, + int8_t d + ) { + int32_t integer_image_phi = (k * phi) + lambda; + int32_t x = (integer_image_phi) >> d; + uint8_t res = clip4(x); + return res; +} +static uint8_t __attribute__((noinline)) pulp_nn_add_quant_u4 ( + uint8_t pix1, + uint8_t pix2, + int16_t m1, + int16_t m2, + int8_t d + ) { + uint32_t integer_image = pix1*m1 + pix2*m2; + uint32_t x = (integer_image) >> d; + uint8_t res = clip4(x); + return res; +} + +static int8_t __attribute__((noinline)) pulp_nn_quant_i4 ( + int32_t phi, + int16_t m, + int8_t d + ) { + int32_t x = (m * phi) >> d; + int8_t res = clips4(x); + return res; +} +static int8_t __attribute__((noinline)) pulp_nn_bn_quant_i4 ( + int32_t phi, + int32_t k, + int32_t lambda, + int8_t d + ) { + int32_t integer_image_phi = (k * phi) + lambda; + int32_t x = (integer_image_phi) >> d; + int8_t res = clips4(x); + return res; +} +static int8_t __attribute__((noinline)) pulp_nn_add_quant_i4 ( + int8_t pix1, + int8_t pix2, + int16_t m1, + int16_t m2, + int8_t d + ) { + int32_t integer_image = pix1*m1 + pix2*m2; + int32_t x = (integer_image) >> d; + int8_t res = clips4(x); + return res; +} + +static uint8_t __attribute__((noinline)) pulp_nn_quant_u8 ( + int32_t phi, + int16_t m, + int8_t d + ) { + int32_t x = (m * phi) >> d; + uint8_t res = clip8(x); + return res; +} +static uint8_t __attribute__((noinline)) pulp_nn_bn_quant_u8 ( + int32_t phi, + int32_t k, + int32_t lambda, + int8_t d + ) { + int32_t integer_image_phi = (k * phi) + lambda; + int32_t x = (integer_image_phi) >> d; + uint8_t res = clip8(x); + return res; +} +static uint8_t __attribute__((noinline)) pulp_nn_add_quant_u8 ( + uint8_t pix1, + uint8_t pix2, + int16_t m1, + int16_t m2, + int8_t d + ) { + uint32_t integer_image = pix1*m1 + pix2*m2; + uint32_t x = (integer_image) >> d; + uint8_t res = clip8(x); + return res; +} + +static int8_t __attribute__((noinline)) pulp_nn_quant_i8 ( + int32_t phi, + int16_t m, + int8_t d + ) { + int32_t x = (m * phi) >> d; + int8_t res = clips8(x); + return res; +} +static int8_t __attribute__((noinline)) pulp_nn_bn_quant_i8 ( + int32_t phi, + int32_t k, + int32_t lambda, + int8_t d + ) { + int32_t integer_image_phi = (k * phi) + lambda; + int32_t x = (integer_image_phi) >> d; + int8_t res = clips8(x); + return res; +} +static int8_t __attribute__((noinline)) pulp_nn_add_quant_i8 ( + int8_t pix1, + int8_t pix2, + int16_t m1, + int16_t m2, + int8_t d + ) { + int32_t integer_image = pix1*m1 + pix2*m2; + int32_t x = (integer_image) >> d; + int8_t res = clips8(x); + return res; +} + + +static uint8_t __attribute__((noinline)) pulp_nn_u4_quant(int input, int16_t * pThr) +{ + if(input <= pThr[7] ) + { + if( input <= pThr[3]) + { + if( input <= pThr[1]) + { + if( input <= pThr[0]) + return 0; + else + return 1; + } + else + { + if( input <= pThr[2]) + return 2; + else + return 3; + } + } + else + { + if( input <= pThr[5]) + { + if( input <= pThr[4]) + return 4; + else + return 5; + } + else + { + if( input <= pThr[6]) + return 6; + else + return 7; + } + } + } + else + { + if( input <= pThr[11]) + { + if( input <= pThr[9]) + { + if( input <= pThr[8]) + return 8; + else + return 9; + } + else + { + if( input <= pThr[10]) + return 10; + else + return 11; + } + } + else + { + if( input <= pThr[13]) + { + if( input <= pThr[12]) + return 12; + else + return 13; + } + else + { + if( input <= pThr[14]) + return 14; + else + return 15; + } + } + } +} + +static uint8_t __attribute__((noinline)) pulp_nn_u2_quant(int input, int16_t * pThr) +{ + if( input <= pThr[1]) + { + if( input <= pThr[0]) + { + return 0; + } + else + { + return 1; + } + } + else + { + if( input <= pThr[2]) + { + return 2; + } + else + { + return 3; + } + } +} + +/* + * Common + */ + + +static v4s __attribute__((noinline)) pulp_nn_i4_to_i8_r( int8_t *pSrc) +{ + v4s Src = *((v4s*) pSrc); + int8_t bext1, bext2, bext3, bext4; + + bext1 = (int8_t) bitext((int) Src, 4, 0); + bext2 = (int8_t) bitext((int) Src, 4, 4); + bext3 = (int8_t) bitext((int) Src, 4, 8); + bext4 = (int8_t) bitext((int) Src, 4, 12); + v4s res = pack((int8_t) bext1, (int8_t) bext2, (int8_t) bext3, (int8_t) bext4); + + return res; +} + +static v4u __attribute__((noinline)) pulp_nn_u4_to_u8_r(uint8_t *pSrc) +{ + v4u Src = *((v4u*) pSrc); + uint8_t bext1, bext2, bext3, bext4; + + bext1 = (uint8_t) bitextu((unsigned int) Src, 4, 0); + bext2 = (uint8_t) bitextu((unsigned int) Src, 4, 4); + bext3 = (uint8_t) bitextu((unsigned int) Src, 4, 8); + bext4 = (uint8_t) bitextu((unsigned int) Src, 4, 12); + v4u res = pack((uint8_t) bext1, (uint8_t) bext2, (uint8_t) bext3, (uint8_t) bext4); + + return res; +} + +static v4s __attribute__((noinline)) pulp_nn_i2_to_i8_r( int8_t *pSrc) +{ + v4s Src = *((v4s*) pSrc); + int8_t bext1, bext2, bext3, bext4; + + bext1 = (int8_t) bitext((int) Src, 2, 0); + bext2 = (int8_t) bitext((int) Src, 2, 2); + bext3 = (int8_t) bitext((int) Src, 2, 4); + bext4 = (int8_t) bitext((int) Src, 2, 6); + v4s res = pack((int8_t) bext1, (int8_t) bext2, (int8_t) bext3, (int8_t) bext4); + + return res; +} + +static v4u __attribute__((noinline)) pulp_nn_u2_to_u8_r(uint8_t *pSrc) +{ + v4u Src = *((v4u*) pSrc); + uint8_t bext1, bext2, bext3, bext4; + + bext1 = (uint8_t) bitextu((unsigned int) Src, 2, 0); + bext2 = (uint8_t) bitextu((unsigned int) Src, 2, 2); + bext3 = (uint8_t) bitextu((unsigned int) Src, 2, 4); + bext4 = (uint8_t) bitextu((unsigned int) Src, 2, 6); + v4u res = pack((uint8_t) bext1, (uint8_t) bext2, (uint8_t) bext3, (uint8_t) bext4); + + return res; +} + +static v4s __attribute__((noinline)) pulp_nn_i2_to_i4_r(int8_t *pSrc) +{ + int8_t mask = 0xf0; + int8_t n_mask = ~ mask; + int8_t off = 0x04; + + v4s Src = *((v4s*) pSrc); + int8_t bext1, bext2, bext3, bext4; + int8_t out1, out2, out3, out4; + + bext1 = (int8_t) bitextu((int) Src, 2, 0); + bext2 = (int8_t) bitextu((int) Src, 2, 2); + bext3 = (int8_t) bitextu((int) Src, 2, 4); + bext4 = (int8_t) bitextu((int) Src, 2, 6); + + out1 = bitins(bext1, n_mask, bext2, mask, off); + out2 = bitins(bext3, n_mask, bext4, mask, off); + + bext1 = (int8_t) bitextu((int) Src, 2, 8); + bext2 = (int8_t) bitextu((int) Src, 2, 10); + bext3 = (int8_t) bitextu((int) Src, 2, 12); + bext4 = (int8_t) bitextu((int) Src, 2, 14); + + out3 = bitins(bext1, n_mask, bext2, mask, off); + out4 = bitins(bext3, n_mask, bext4, mask, off); + + v4s res = pack((int8_t) out1, (int8_t) out2, (int8_t) out3, (int8_t) out4); + + return res; +} + +static v4u __attribute__((noinline)) pulp_nn_u2_to_u4_r(uint8_t *pSrc) +{ + int8_t mask = 0xf0; + int8_t n_mask = ~ mask; + int8_t off = 0x04; + + v4u Src = *((v4u*) pSrc); + uint8_t bext1, bext2, bext3, bext4; + uint8_t out1, out2, out3, out4; + + bext1 = (uint8_t) bitextu((unsigned int) Src, 2, 0); + bext2 = (uint8_t) bitextu((unsigned int) Src, 2, 2); + bext3 = (uint8_t) bitextu((unsigned int) Src, 2, 4); + bext4 = (uint8_t) bitextu((unsigned int) Src, 2, 6); + + out1 = bitins(bext1, n_mask, bext2, mask, off); + out2 = bitins(bext3, n_mask, bext4, mask, off); + + bext1 = (uint8_t) bitextu((unsigned int) Src, 2, 8); + bext2 = (uint8_t) bitextu((unsigned int) Src, 2, 10); + bext3 = (uint8_t) bitextu((unsigned int) Src, 2, 12); + bext4 = (uint8_t) bitextu((unsigned int) Src, 2, 14); + + out3 = bitins(bext1, n_mask, bext2, mask, off); + out4 = bitins(bext3, n_mask, bext4, mask, off); + + v4u res = pack((uint8_t) out1, (uint8_t) out2, (uint8_t) out3, (uint8_t) out4); + + return res; +} + +static int8_t *__attribute__((always_inline)) pulp_nn_i4_to_i8( int8_t *pSrc, int8_t *pDst) +{ + v4s Src = *((v4s*) pSrc); + int8_t bext1, bext2, bext3, bext4; + + pSrc+=4; + + bext1 = (int8_t) bitext((int) Src, 4, 0); + bext2 = (int8_t) bitext((int) Src, 4, 4); + bext3 = (int8_t) bitext((int) Src, 4, 8); + bext4 = (int8_t) bitext((int) Src, 4, 12); + *((v4s*)pDst) = pack((int8_t) bext1, (int8_t) bext2, (int8_t) bext3, (int8_t) bext4); + MemoryFence(); + pDst+=4; + bext1 = (int8_t) bitext((int) Src, 4, 16); + bext2 = (int8_t) bitext((int) Src, 4, 20); + bext3 = (int8_t) bitext((int) Src, 4, 24); + bext4 = (int8_t) bitext((int) Src, 4, 28); + *((v4s*)pDst) = pack((int8_t) bext1, (int8_t) bext2, (int8_t) bext3, (int8_t) bext4); + + return pSrc; +} + +static uint8_t *__attribute__((always_inline)) pulp_nn_u4_to_u8(uint8_t *pSrc, uint8_t *pDst) +{ + v4u Src = *((v4u*) pSrc); + uint8_t bext1, bext2, bext3, bext4; + + pSrc+=4; + + bext1 = (uint8_t) bitextu((unsigned int) Src, 4, 0); + bext2 = (uint8_t) bitextu((unsigned int) Src, 4, 4); + bext3 = (uint8_t) bitextu((unsigned int) Src, 4, 8); + bext4 = (uint8_t) bitextu((unsigned int) Src, 4, 12); + *((v4u*)pDst) = pack((uint8_t) bext1, (uint8_t) bext2, (uint8_t) bext3, (uint8_t) bext4); + MemoryFence(); + pDst+=4; + bext1 = (uint8_t) bitextu((unsigned int) Src, 4, 16); + bext2 = (uint8_t) bitextu((unsigned int) Src, 4, 20); + bext3 = (uint8_t) bitextu((unsigned int) Src, 4, 24); + bext4 = (uint8_t) bitextu((unsigned int) Src, 4, 28); + *((v4u*)pDst) = pack((uint8_t) bext1, (uint8_t) bext2, (uint8_t) bext3, (uint8_t) bext4); + + return pSrc; +} + +static int8_t *__attribute__((always_inline)) pulp_nn_i2_to_i8( int8_t * pSrc, int8_t * pDst) +{ + v4s Src = *((v4s*) pSrc); + int8_t bext1, bext2, bext3, bext4; + + pSrc+=4; + + bext1 = (int8_t) bitext((int) Src, 2, 0); + bext2 = (int8_t) bitext((int) Src, 2, 2); + bext3 = (int8_t) bitext((int) Src, 2, 4); + bext4 = (int8_t) bitext((int) Src, 2, 6); + *((v4s*)pDst) = pack((int8_t) bext1, (int8_t) bext2, (int8_t) bext3, (int8_t) bext4); + MemoryFence(); + pDst+=4; + bext1 = (int8_t) bitext((int) Src, 2, 8); + bext2 = (int8_t) bitext((int) Src, 2, 10); + bext3 = (int8_t) bitext((int) Src, 2, 12); + bext4 = (int8_t) bitext((int) Src, 2, 14); + *((v4s*)pDst) = pack((int8_t) bext1, (int8_t) bext2, (int8_t) bext3, (int8_t) bext4); + MemoryFence(); + pDst+=4; + bext1 = (int8_t) bitext((int) Src, 2, 16); + bext2 = (int8_t) bitext((int) Src, 2, 18); + bext3 = (int8_t) bitext((int) Src, 2, 20); + bext4 = (int8_t) bitext((int) Src, 2, 22); + *((v4s*)pDst) = pack((int8_t) bext1, (int8_t) bext2, (int8_t) bext3, (int8_t) bext4); + MemoryFence(); + pDst+=4; + bext1 = (int8_t) bitext((int) Src, 2, 24); + bext2 = (int8_t) bitext((int) Src, 2, 26); + bext3 = (int8_t) bitext((int) Src, 2, 28); + bext4 = (int8_t) bitext((int) Src, 2, 30); + *((v4s*)pDst) = pack((int8_t) bext1, (int8_t) bext2, (int8_t) bext3, (int8_t) bext4); + + return pSrc; +} + +static uint8_t *__attribute__((always_inline)) pulp_nn_u2_to_u8(uint8_t * pSrc, uint8_t * pDst) +{ + v4u Src = *((v4u*) pSrc); + uint8_t bext1, bext2, bext3, bext4; + + pSrc+=4; + + bext1 = (uint8_t) bitextu((unsigned int) Src, 2, 0); + bext2 = (uint8_t) bitextu((unsigned int) Src, 2, 2); + bext3 = (uint8_t) bitextu((unsigned int) Src, 2, 4); + bext4 = (uint8_t) bitextu((unsigned int) Src, 2, 6); + *((v4u*)pDst) = pack((uint8_t) bext1, (uint8_t) bext2, (uint8_t) bext3, (uint8_t) bext4); + MemoryFence(); + pDst+=4; + bext1 = (uint8_t) bitextu((unsigned int) Src, 2, 8); + bext2 = (uint8_t) bitextu((unsigned int) Src, 2, 10); + bext3 = (uint8_t) bitextu((unsigned int) Src, 2, 12); + bext4 = (uint8_t) bitextu((unsigned int) Src, 2, 14); + *((v4u*)pDst) = pack((uint8_t) bext1, (uint8_t) bext2, (uint8_t) bext3, (uint8_t) bext4); + MemoryFence(); + pDst+=4; + bext1 = (uint8_t) bitextu((unsigned int) Src, 2, 16); + bext2 = (uint8_t) bitextu((unsigned int) Src, 2, 18); + bext3 = (uint8_t) bitextu((unsigned int) Src, 2, 20); + bext4 = (uint8_t) bitextu((unsigned int) Src, 2, 22); + *((v4u*)pDst) = pack((uint8_t) bext1, (uint8_t) bext2, (uint8_t) bext3, (uint8_t) bext4); + MemoryFence(); + pDst+=4; + bext1 = (uint8_t) bitextu((unsigned int) Src, 2, 24); + bext2 = (uint8_t) bitextu((unsigned int) Src, 2, 26); + bext3 = (uint8_t) bitextu((unsigned int) Src, 2, 28); + bext4 = (uint8_t) bitextu((unsigned int) Src, 2, 30); + *((v4u*)pDst) = pack((uint8_t) bext1, (uint8_t) bext2, (uint8_t) bext3, (uint8_t) bext4); + + return pSrc; +} + +static int8_t *__attribute__((always_inline)) pulp_nn_i2_to_i4( int8_t * pSrc, int8_t * pDst) +{ + int8_t mask = 0xf0; + int8_t n_mask = ~ mask; + int8_t off = 0x04; + + v4s Src = *((v4s*) pSrc); + int8_t bext1, bext2, bext3, bext4; + int8_t out1, out2, out3, out4; + + pSrc+=4; + + bext1 = (int8_t) bitext((int) Src, 2, 0); + bext2 = (int8_t) bitext((int) Src, 2, 2); + bext3 = (int8_t) bitext((int) Src, 2, 4); + bext4 = (int8_t) bitext((int) Src, 2, 6); + + out1 = bitins(bext1, n_mask, bext2, mask, off); + out2 = bitins(bext3, n_mask, bext4, mask, off); + MemoryFence(); + + bext1 = (int8_t) bitext((int) Src, 2, 8); + bext2 = (int8_t) bitext((int) Src, 2, 10); + bext3 = (int8_t) bitext((int) Src, 2, 12); + bext4 = (int8_t) bitext((int) Src, 2, 14); + + out3 = bitins(bext1, n_mask, bext2, mask, off); + out4 = bitins(bext3, n_mask, bext4, mask, off); + + *((v4s*)pDst) = pack((int8_t) out1, (int8_t) out2, (int8_t) out3, (int8_t) out4); + MemoryFence(); + + pDst+=4; + bext1 = (int8_t) bitext((int) Src, 2, 16); + bext2 = (int8_t) bitext((int) Src, 2, 18); + bext3 = (int8_t) bitext((int) Src, 2, 20); + bext4 = (int8_t) bitext((int) Src, 2, 22); + + out1 = bitins(bext1, n_mask, bext2, mask, off); + out2 = bitins(bext3, n_mask, bext4, mask, off); + MemoryFence(); + + bext1 = (int8_t) bitext((int) Src, 2, 24); + bext2 = (int8_t) bitext((int) Src, 2, 26); + bext3 = (int8_t) bitext((int) Src, 2, 28); + bext4 = (int8_t) bitext((int) Src, 2, 30); + + out3 = bitins(bext1, n_mask, bext2, mask, off); + out4 = bitins(bext3, n_mask, bext4, mask, off); + + *((v4s*)pDst) = pack((int8_t) out1, (int8_t) out2, (int8_t) out3, (int8_t) out4); + + return pSrc; +} + +static uint8_t *__attribute__((always_inline)) pulp_nn_u2_to_u4( uint8_t * pSrc, uint8_t * pDst) +{ + int8_t mask = 0xf0; + int8_t n_mask = ~ mask; + int8_t off = 0x04; + + v4u Src = *((v4u*) pSrc); + uint8_t bext1, bext2, bext3, bext4; + uint8_t out1, out2, out3, out4; + + pSrc+=4; + + bext1 = (uint8_t) bitextu((unsigned int) Src, 2, 0); + bext2 = (uint8_t) bitextu((unsigned int) Src, 2, 2); + bext3 = (uint8_t) bitextu((unsigned int) Src, 2, 4); + bext4 = (uint8_t) bitextu((unsigned int) Src, 2, 6); + + out1 = bitins(bext1, n_mask, bext2, mask, off); + out2 = bitins(bext3, n_mask, bext4, mask, off); + MemoryFence(); + + bext1 = (uint8_t) bitextu((unsigned int) Src, 2, 8); + bext2 = (uint8_t) bitextu((unsigned int) Src, 2, 10); + bext3 = (uint8_t) bitextu((unsigned int) Src, 2, 12); + bext4 = (uint8_t) bitextu((unsigned int) Src, 2, 14); + + out3 = bitins(bext1, n_mask, bext2, mask, off); + out4 = bitins(bext3, n_mask, bext4, mask, off); + + *((v4u*)pDst) = pack((uint8_t) out1, (uint8_t) out2, (uint8_t) out3, (uint8_t) out4); + MemoryFence(); + + pDst+=4; + bext1 = (uint8_t) bitextu((unsigned int) Src, 2, 16); + bext2 = (uint8_t) bitextu((unsigned int) Src, 2, 18); + bext3 = (uint8_t) bitextu((unsigned int) Src, 2, 20); + bext4 = (uint8_t) bitextu((unsigned int) Src, 2, 22); + + out1 = bitins(bext1, n_mask, bext2, mask, off); + out2 = bitins(bext3, n_mask, bext4, mask, off); + MemoryFence(); + + bext1 = (uint8_t) bitextu((unsigned int) Src, 2, 24); + bext2 = (uint8_t) bitextu((unsigned int) Src, 2, 26); + bext3 = (uint8_t) bitextu((unsigned int) Src, 2, 28); + bext4 = (uint8_t) bitextu((unsigned int) Src, 2, 30); + + out3 = bitins(bext1, n_mask, bext2, mask, off); + out4 = bitins(bext3, n_mask, bext4, mask, off); + + *((v4u*)pDst) = pack((uint8_t) out1, (uint8_t) out2, (uint8_t) out3, (uint8_t) out4); + + return pSrc; +} + +/* + * XpulpV2 + */ + +static void __attribute__((noinline)) pulp_zero_mem(uint8_t * pBuffer, unsigned int size) +{ + int lfover = size &0x3; + for (int i=0; i<(size>>2); i++) + { + *((v4u *)pBuffer) = (v4u){0,0,0,0}; + MemoryFence(); + pBuffer+=4; + } + while(lfover) + { + *pBuffer++=0; + lfover--; + } +} + +static void __attribute__((noinline)) pulp_nn_im2col_u2_to_u8(uint8_t * pInput, uint8_t * pOutput, unsigned int blockSize) +{ + unsigned int blkCnt = blockSize >> 4u; + int lfover = blockSize & 0x0f; + for (int i = 0; i> 4u; + int lfover = blockSize & 0x0f; + for (int i = 0; i> 3u; + int lfover = blockSize & 0x07; + for (int i = 0; i> 3u; + int lfover = blockSize & 0x07; + for (int i = 0; i> 2u; + int lfover = blockSize & 0x03; + for (int i = 0; i> 2u; + int lfover = blockSize & 0x03; + for (int i = 0; i> 4u; + int lfover = blockSize & 0x0f; + for (int i = 0; i> 4u; + int lfover = blockSize & 0x0f; + for (int i = 0; i> 4u; + int lfover = blockSize & 0x0f; + for (int i = 0; i> 4u; + int lfover = blockSize & 0x0f; + for (int i = 0; i> 4u; + int lfover = blockSize & 0x0f; + for (int i = 0; i> 4u; + int lfover = blockSize & 0x0f; + for (int i = 0; i> 3u; + int lfover = blockSize & 0x07; + for (int i = 0; i> 3u; + int lfover = blockSize & 0x07; + for (int i = 0; i> 3u; + int lfover = blockSize & 0x07; + for (int i = 0; i> 3u; + int lfover = blockSize & 0x07; + for (int i = 0; i> 2u; + int lfover = blockSize & 0x03; + for (int i = 0; i> 2u; + int lfover = blockSize & 0x03; + for (int i = 0; i> 2; + + while(cnt > 0u) + { + inp = *((v4u*)pIn); + com = *((v4u*)pCom); + + *((v4u*)pIn) = max4(inp, com); + + pCom+=4; + pIn+=4; + cnt--; + } + + int left = length & 0x3; + while (left>0u) + { + if(*pIn<*pCom) + *pIn=*pCom; + + pIn++; + pCom++; + left--; + } +} + +static void __attribute__((noinline)) pulp_nn_compare_and_replace_if_larger_i8( + int8_t * base, int8_t * target, uint16_t length) { + int8_t *pIn = base; + int8_t *pCom = target; + v4s inp; + v4s com; + int cnt = length >> 2; + + while (cnt > 0u) { + inp = *((v4s *)pIn); + com = *((v4s *)pCom); + + *((v4s *)pIn) = maxs4(inp, com); + + pCom += 4; + pIn += 4; + cnt--; + } + + int left = length & 0x3; + while (left > 0u) { + if (*pIn < *pCom) + *pIn = *pCom; + + pIn++; + pCom++; + left--; + } +} + +static void __attribute__((noinline)) pulp_nn_avg_and_replace_u8(uint8_t * base, + uint8_t * target, + uint16_t length) +{ + uint8_t *pIn = base; + uint8_t *pCom = target; + + while (length>0u) + { + *pIn = ((*pIn + *pCom) >> 1); + + pIn++; + pCom++; + length--; + } +} + +static void __attribute__((noinline)) pulp_nn_compare_and_replace_if_larger_u4(uint8_t * base, + uint8_t * target, + uint16_t length) +{ + int8_t mask = 0xf0; + int8_t n_mask = ~ mask; + int8_t off = 0x04; + + uint8_t *pIn = base; + uint8_t *pCom = target; + v4u inp[2]; + v4u com[2]; + uint8_t *out; + int cnt = length >> 2; + + while(cnt > 0u) + { + pulp_nn_u4_to_u8(pIn, (uint8_t *)inp); + pulp_nn_u4_to_u8(pCom, (uint8_t *)com); + + *((v4u *)out) = max4(inp[0], com[0]); + + *((uint8_t*)pIn) = bitins(*out, n_mask, *(out + 1), mask, off); + pIn++; + *((uint8_t*)pIn) = bitins(*(out + 2), n_mask, *(out + 3), mask, off); + pIn++; + + *((v4u *)out) = max4(inp[1], com[1]); + + *((uint8_t*)pIn) = bitins(*out, n_mask, *(out + 1), mask, off); + pIn++; + *((uint8_t*)pIn) = bitins(*(out + 2), n_mask, *(out + 3), mask, off); + pIn++; + + pCom+=4; + cnt--; + } + + int left = length & 0x3; + while (left>0u) + { + uint8_t inA0 = (uint8_t) bitextu((unsigned int) *pIn, 4, 0); + uint8_t inA1 = (uint8_t) bitextu((unsigned int) *pIn, 4, 4); + uint8_t inB0 = (uint8_t) bitextu((unsigned int) *pCom, 4, 0); + uint8_t inB1 = (uint8_t) bitextu((unsigned int) *pCom, 4, 4); + + if(inA0> 2; + + while(cnt > 0u) + { + pulp_nn_i4_to_i8(pIn, (int8_t *)inp); + pulp_nn_i4_to_i8(pCom, (int8_t *)com); + + *((v4s *)out) = maxs4(inp[0], com[0]); + + *((int8_t*)pIn) = bitins(*out, n_mask, *(out + 1), mask, off); + pIn++; + *((int8_t*)pIn) = bitins(*(out + 2), n_mask, *(out + 3), mask, off); + pIn++; + + *((v4s *)out) = maxs4(inp[1], com[1]); + + *((int8_t*)pIn) = bitins(*out, n_mask, *(out + 1), mask, off); + pIn++; + *((int8_t*)pIn) = bitins(*(out + 2), n_mask, *(out + 3), mask, off); + pIn++; + + pCom+=4; + cnt--; + } + + int left = length & 0x3; + while (left>0u) + { + int8_t inA0 = (int8_t) bitext((int) *pIn, 4, 0); + int8_t inA1 = (int8_t) bitext((int) *pIn, 4, 4); + int8_t inB0 = (int8_t) bitext((int) *pCom, 4, 0); + int8_t inB1 = (int8_t) bitext((int) *pCom, 4, 4); + + if(inA00u) + { + uint8_t inA0 = (uint8_t) bitextu((unsigned int) *pIn, 4, 0); + uint8_t inA1 = (uint8_t) bitextu((unsigned int) *pIn, 4, 4); + uint8_t inB0 = (uint8_t) bitextu((unsigned int) *pCom, 4, 0); + uint8_t inB1 = (uint8_t) bitextu((unsigned int) *pCom, 4, 4); + + inA0 = ((inA0 + inB0) >> 1); + inA1 = ((inA1 + inB1) >> 1); + + *((uint8_t*)pIn) = bitins(inA0, n_mask, inA1, mask, off); + + pIn++; + pCom++; + length--; + } +} + +static void __attribute__((noinline)) pulp_nn_compare_and_replace_if_larger_u2(uint8_t * base, + uint8_t * target, + uint16_t length) +{ + int8_t mask2 = 0x0c; + int8_t n_mask2 = ~ mask2; + int8_t mask4 = 0x30; + int8_t n_mask4 = ~ mask4; + int8_t mask6 = 0xc0; + int8_t n_mask6 = ~ mask6; + int8_t off2 = 2; + int8_t off4 = 4; + int8_t off6 = 6; + + uint8_t *pIn = base; + uint8_t *pCom = target; + v4u inp[4]; + v4u com[4]; + uint8_t *out; + int cnt = length >> 2; + + while(cnt > 0u) + { + pulp_nn_u2_to_u8(pIn, inp); + pulp_nn_u2_to_u8(pCom, com); + + *((v4u*)out) = max4(inp[0], com[0]); + + uint8_t inA = (uint8_t) bitins(*out, n_mask2, *(out + 1), mask2, off2); + inA = bitins(inA, n_mask4, *(out + 2), mask4, off4); + *((uint8_t*)pIn) = bitins(inA, n_mask6, *(out + 3), mask6, off6); + pIn++; + + *((v4u*)out) = max4(inp[1], com[1]); + + inA = (uint8_t) bitins(*out, n_mask2, *(out + 1), mask2, off2); + inA = bitins(inA, n_mask4, *(out + 2), mask4, off4); + *((uint8_t*)pIn) = bitins(inA, n_mask6, *(out + 3), mask6, off6); + pIn++; + + *((v4u*)out) = max4(inp[2], com[2]); + + inA = (uint8_t) bitins(*out, n_mask2, *(out + 1), mask2, off2); + inA = bitins(inA, n_mask4, *(out + 2), mask4, off4); + *((uint8_t*)pIn) = bitins(inA, n_mask6, *(out + 3), mask6, off6); + pIn++; + + *((v4u*)out) = max4(inp[3], com[3]); + + inA = (uint8_t) bitins(*out, n_mask2, *(out + 1), mask2, off2); + inA = bitins(inA, n_mask4, *(out + 2), mask4, off4); + *((uint8_t*)pIn) = bitins(inA, n_mask6, *(out + 3), mask6, off6); + pIn++; + + pCom+=4; + cnt--; + } + + int left = length & 0x3; + while (left>0u) + { + uint8_t inA0 = (uint8_t) bitextu((unsigned int) *pIn, 2, 0); + uint8_t inA1 = (uint8_t) bitextu((unsigned int) *pIn, 2, 2); + uint8_t inA2 = (uint8_t) bitextu((unsigned int) *pIn, 2, 4); + uint8_t inA3 = (uint8_t) bitextu((unsigned int) *pIn, 2, 6); + v4u inA4 = pack((uint8_t) inA0, (uint8_t) inA1, (uint8_t) inA2, (uint8_t) inA3); + uint8_t inB0 = (uint8_t) bitextu((unsigned int) *pCom, 2, 0); + uint8_t inB1 = (uint8_t) bitextu((unsigned int) *pCom, 2, 2); + uint8_t inB2 = (uint8_t) bitextu((unsigned int) *pCom, 2, 4); + uint8_t inB3 = (uint8_t) bitextu((unsigned int) *pCom, 2, 6); + v4u inB4 = pack((uint8_t) inB0, (uint8_t) inB1, (uint8_t) inB2, (uint8_t) inB3); + + *((v4u*)out) = max4(inA4, inB4); + + uint8_t inA = (uint8_t) bitins(*out, n_mask2, *(out + 1), mask2, off2); + inA = bitins(inA, n_mask4, *(out + 2), mask4, off4); + *((uint8_t*)pIn) = bitins(inA, n_mask6, *(out + 3), mask6, off6); + + pIn++; + pCom++; + left--; + } +} + + +static void __attribute__((noinline)) pulp_nn_compare_and_replace_if_larger_i2(int8_t * base, + int8_t * target, + uint16_t length) +{ + int8_t mask2 = 0x0c; + int8_t n_mask2 = ~ mask2; + int8_t mask4 = 0x30; + int8_t n_mask4 = ~ mask4; + int8_t mask6 = 0xc0; + int8_t n_mask6 = ~ mask6; + int8_t off2 = 2; + int8_t off4 = 4; + int8_t off6 = 6; + + int8_t *pIn = base; + int8_t *pCom = target; + v4s inp[4]; + v4s com[4]; + int8_t *out; + int cnt = length >> 2; + + while(cnt > 0u) + { + pulp_nn_i2_to_i8(pIn, inp); + pulp_nn_i2_to_i8(pCom, com); + + *((v4s*)out) = maxs4(inp[0], com[0]); + + int8_t inA = (int8_t) bitins(*out, n_mask2, *(out + 1), mask2, off2); + inA = bitins(inA, n_mask4, *(out + 2), mask4, off4); + *((int8_t*)pIn) = bitins(inA, n_mask6, *(out + 3), mask6, off6); + pIn++; + + *((v4s*)out) = maxs4(inp[1], com[1]); + + inA = (int8_t) bitins(*out, n_mask2, *(out + 1), mask2, off2); + inA = bitins(inA, n_mask4, *(out + 2), mask4, off4); + *((int8_t*)pIn) = bitins(inA, n_mask6, *(out + 3), mask6, off6); + pIn++; + + *((v4s*)out) = maxs4(inp[2], com[2]); + + inA = (int8_t) bitins(*out, n_mask2, *(out + 1), mask2, off2); + inA = bitins(inA, n_mask4, *(out + 2), mask4, off4); + *((int8_t*)pIn) = bitins(inA, n_mask6, *(out + 3), mask6, off6); + pIn++; + + *((v4s*)out) = maxs4(inp[3], com[3]); + + inA = (int8_t) bitins(*out, n_mask2, *(out + 1), mask2, off2); + inA = bitins(inA, n_mask4, *(out + 2), mask4, off4); + *((int8_t*)pIn) = bitins(inA, n_mask6, *(out + 3), mask6, off6); + pIn++; + + pCom+=4; + cnt--; + } + + int left = length & 0x3; + while (left>0u) + { + int8_t inA0 = (int8_t) bitext((unsigned int) *pIn, 2, 0); + int8_t inA1 = (int8_t) bitext((unsigned int) *pIn, 2, 2); + int8_t inA2 = (int8_t) bitext((unsigned int) *pIn, 2, 4); + int8_t inA3 = (int8_t) bitext((unsigned int) *pIn, 2, 6); + v4s inA4 = pack((int8_t) inA0, (int8_t) inA1, (int8_t) inA2, (int8_t) inA3); + int8_t inB0 = (int8_t) bitext((unsigned int) *pCom, 2, 0); + int8_t inB1 = (int8_t) bitext((unsigned int) *pCom, 2, 2); + int8_t inB2 = (int8_t) bitext((unsigned int) *pCom, 2, 4); + int8_t inB3 = (int8_t) bitext((unsigned int) *pCom, 2, 6); + v4s inB4 = pack((int8_t) inB0, (int8_t) inB1, (int8_t) inB2, (int8_t) inB3); + + *((v4s*)out) = maxs4(inA4, inB4); + + int8_t inA = (int8_t) bitins(*out, n_mask2, *(out + 1), mask2, off2); + inA = bitins(inA, n_mask4, *(out + 2), mask4, off4); + *((int8_t*)pIn) = bitins(inA, n_mask6, *(out + 3), mask6, off6); + + pIn++; + pCom++; + left--; + } +} + +static void __attribute__((noinline)) pulp_nn_avg_and_replace_u2(uint8_t * base, + uint8_t * target, + uint16_t length) +{ + int8_t mask2 = 0x0c; + int8_t n_mask2 = ~ mask2; + int8_t mask4 = 0x30; + int8_t n_mask4 = ~ mask4; + int8_t mask6 = 0xc0; + int8_t n_mask6 = ~ mask6; + int8_t off2 = 2; + int8_t off4 = 4; + int8_t off6 = 6; + + uint8_t *pIn = base; + uint8_t *pCom = target; + + while (length>0u) + { + uint8_t inA0 = (uint8_t) bitextu((unsigned int) *pIn, 2, 0); + uint8_t inA1 = (uint8_t) bitextu((unsigned int) *pIn, 2, 2); + uint8_t inA2 = (uint8_t) bitextu((unsigned int) *pIn, 2, 4); + uint8_t inA3 = (uint8_t) bitextu((unsigned int) *pIn, 2, 6); + + uint8_t inB0 = (uint8_t) bitextu((unsigned int) *pCom, 2, 0); + uint8_t inB1 = (uint8_t) bitextu((unsigned int) *pCom, 2, 2); + uint8_t inB2 = (uint8_t) bitextu((unsigned int) *pCom, 2, 4); + uint8_t inB3 = (uint8_t) bitextu((unsigned int) *pCom, 2, 6); + + inA0 = ((inA0 + inB0) >> 1); + inA1 = ((inA1 + inB1) >> 1); + inA2 = ((inA2 + inB2) >> 1); + inA3 = ((inA3 + inB3) >> 1); + + uint8_t inA = (uint8_t) bitins(inA0, n_mask2, inA1, mask2, off2); + inA = bitins(inA, n_mask4, inA2, mask4, off4); + *((uint8_t*)pIn) = bitins(inA, n_mask6, inA3, mask6, off6); + + pIn++; + pCom++; + length--; + } +} + +/* + * XpulpNN + */ + +static void __attribute__((noinline)) xpulp_nn_zero_mem_u8(uint8_t * pBuffer, unsigned int size) +{ + int lfover = size &0x3; + for (int i=0; i<(size>>2); i++) + { + *((v4u *)pBuffer) = (v4u){0,0,0,0}; + MemoryFence(); + pBuffer+=4; + } + while(lfover) + { + *pBuffer++=0; + lfover--; + } +} + +static void __attribute__((noinline)) xpulp_nn_zero_mem_u4(uint8_t * pBuffer, unsigned int size) +{ + int lfover = size &0x7; + for (int i=0; i<(size>>3); i++) + { + *((v4u *)pBuffer) = (v4u){0,0,0,0}; + MemoryFence(); + pBuffer+=4; + } + while(lfover) + { + *pBuffer++=0; + lfover-=2; + } +} + +static void __attribute__((noinline)) xpulp_nn_zero_mem_u2(uint8_t * pBuffer, unsigned int size) +{ + int lfover = size &0xf; + for (int i=0; i<(size>>4); i++) + { + *((v4u *)pBuffer) = (v4u){0,0,0,0}; + MemoryFence(); + pBuffer+=4; + } + while(lfover) + { + *pBuffer++=0; + lfover-=4; + } +} + + +static void __attribute__((noinline)) xpulp_nn_compare_and_replace_if_larger_u4(uint8_t * base, + uint8_t * target, + uint16_t length) +{ + int8_t mask = 0xf0; + int8_t n_mask = ~ mask; + int8_t off = 0x04; + + uint8_t *pIn = base; + uint8_t *pCom = target; + + int cnt = length >> 2; + + while(cnt > 0u) + { + *((uint32_t *)pIn) = max8(*((uint32_t *)pIn), *((uint32_t *)pCom)); + + pIn+=4; + pCom+=4; + + cnt--; + } + + int left = length & 0x3; + while (left>0u) + { + uint8_t inA0 = (uint8_t) bitextu((unsigned int) *pIn, 4, 0); + uint8_t inA1 = (uint8_t) bitextu((unsigned int) *pIn, 4, 4); + uint8_t inB0 = (uint8_t) bitextu((unsigned int) *pCom, 4, 0); + uint8_t inB1 = (uint8_t) bitextu((unsigned int) *pCom, 4, 4); + + if(inA0> 2; + + while (cnt > 0u) { + *((int32_t *)pIn) = maxs8(*((int32_t *)pIn), *((int32_t *)pCom)); + + pIn += 4; + pCom += 4; + + cnt--; + } + + int left = length & 0x3; + while (left > 0u) { + int8_t inA0 = (int8_t)bitext((int)*pIn, 4, 0); + int8_t inA1 = (int8_t)bitext((int)*pIn, 4, 4); + int8_t inB0 = (int8_t)bitext((int)*pCom, 4, 0); + int8_t inB1 = (int8_t)bitext((int)*pCom, 4, 4); + + if (inA0 < inB0) + inA0 = inB0; + + if (inA1 < inB1) + inA1 = inB1; + + *((int8_t *)pIn) = bitins(inA0, n_mask, inA1, mask, off); + + pIn++; + pCom++; + left--; + } +} + +static void __attribute__((noinline)) xpulp_nn_avg_and_replace_u4(uint8_t * base, + uint8_t * target, + uint16_t length) +{ + int8_t mask = 0xf0; + int8_t n_mask = ~ mask; + int8_t off = 0x04; + + uint8_t *pIn = base; + uint8_t *pCom = target; + + int cnt = length >> 2; + + while (cnt > 0u) + { + *((uint32_t *)pIn) = avg8(*((uint32_t *)pIn), *((uint32_t *)pCom)); + + pIn+=4; + pCom+=4; + cnt--; + } + + int left = length & 0x3; + + while (left>0u) + { + uint8_t inA0 = (uint8_t) bitextu((unsigned int) *pIn, 4, 0); + uint8_t inA1 = (uint8_t) bitextu((unsigned int) *pIn, 4, 4); + uint8_t inB0 = (uint8_t) bitextu((unsigned int) *pCom, 4, 0); + uint8_t inB1 = (uint8_t) bitextu((unsigned int) *pCom, 4, 4); + + inA0 = ((inA0 + inB0) >> 1); + inA1 = ((inA1 + inB1) >> 1); + + *((uint8_t*)pIn) = bitins(inA0, n_mask, inA1, mask, off); + + pIn++; + pCom++; + length--; + } +} + +static void __attribute__((noinline)) xpulp_nn_compare_and_replace_if_larger_u2(uint8_t * base, + uint8_t * target, + uint16_t length) +{ + int8_t mask2 = 0x0c; + int8_t n_mask2 = ~ mask2; + int8_t mask4 = 0x30; + int8_t n_mask4 = ~ mask4; + int8_t mask6 = 0xc0; + int8_t n_mask6 = ~ mask6; + int8_t off2 = 2; + int8_t off4 = 4; + int8_t off6 = 6; + + uint8_t *pIn = base; + uint8_t *pCom = target; + uint8_t *out; + + int cnt = length >> 2; + + while(cnt > 0u) + { + *((uint32_t *)pIn) = max16(*((uint32_t *)pIn), *((uint32_t *)pCom)); + + pIn+=4; + pCom+=4; + cnt--; + } + + int left = length & 0x3; + while (left>0u) + { + uint8_t inA0 = (uint8_t) bitextu((unsigned int) *pIn, 2, 0); + uint8_t inA1 = (uint8_t) bitextu((unsigned int) *pIn, 2, 2); + uint8_t inA2 = (uint8_t) bitextu((unsigned int) *pIn, 2, 4); + uint8_t inA3 = (uint8_t) bitextu((unsigned int) *pIn, 2, 6); + v4u inA4 = pack((uint8_t) inA0, (uint8_t) inA1, (uint8_t) inA2, (uint8_t) inA3); + uint8_t inB0 = (uint8_t) bitextu((unsigned int) *pCom, 2, 0); + uint8_t inB1 = (uint8_t) bitextu((unsigned int) *pCom, 2, 2); + uint8_t inB2 = (uint8_t) bitextu((unsigned int) *pCom, 2, 4); + uint8_t inB3 = (uint8_t) bitextu((unsigned int) *pCom, 2, 6); + v4u inB4 = pack((uint8_t) inB0, (uint8_t) inB1, (uint8_t) inB2, (uint8_t) inB3); + + *((v4u*)out) = max4(inA4, inB4); + + uint8_t inA = (uint8_t) bitins(*out, n_mask2, *(out + 1), mask2, off2); + inA = bitins(inA, n_mask4, *(out + 2), mask4, off4); + *((uint8_t*)pIn) = bitins(inA, n_mask6, *(out + 3), mask6, off6); + + pIn++; + pCom++; + left--; + } +} +static void __attribute__((noinline)) xpulp_nn_compare_and_replace_if_larger_i2(int8_t * base, + int8_t * target, + uint16_t length) +{ + int8_t mask2 = 0x0c; + int8_t n_mask2 = ~ mask2; + int8_t mask4 = 0x30; + int8_t n_mask4 = ~ mask4; + int8_t mask6 = 0xc0; + int8_t n_mask6 = ~ mask6; + int8_t off2 = 2; + int8_t off4 = 4; + int8_t off6 = 6; + + int8_t *pIn = base; + int8_t *pCom = target; + int8_t *out; + + int cnt = length >> 2; + + while(cnt > 0u) + { + *((int32_t *)pIn) = maxs16(*((int32_t *)pIn), *((int32_t *)pCom)); + + pIn+=4; + pCom+=4; + cnt--; + } + + int left = length & 0x3; + while (left>0u) + { + int8_t inA0 = (int8_t) bitext((int) *pIn, 2, 0); + int8_t inA1 = (int8_t) bitext((int) *pIn, 2, 2); + int8_t inA2 = (int8_t) bitext((int) *pIn, 2, 4); + int8_t inA3 = (int8_t) bitext((int) *pIn, 2, 6); + v4s inA4 = pack((int8_t) inA0, (int8_t) inA1, (int8_t) inA2, (int8_t) inA3); + int8_t inB0 = (int8_t) bitext((int) *pCom, 2, 0); + int8_t inB1 = (int8_t) bitext((int) *pCom, 2, 2); + int8_t inB2 = (int8_t) bitext((int) *pCom, 2, 4); + int8_t inB3 = (int8_t) bitext((int) *pCom, 2, 6); + v4s inB4 = pack((int8_t) inB0, (int8_t) inB1, (int8_t) inB2, (int8_t) inB3); + + *((v4s*)out) = maxs4(inA4, inB4); + + int8_t inA = (int8_t) bitins(*out, n_mask2, *(out + 1), mask2, off2); + inA = bitins(inA, n_mask4, *(out + 2), mask4, off4); + *((int8_t*)pIn) = bitins(inA, n_mask6, *(out + 3), mask6, off6); + + pIn++; + pCom++; + left--; + } +} + +static void __attribute__((noinline)) xpulp_nn_avg_and_replace_u2(uint8_t * base, + uint8_t * target, + uint16_t length) +{ + int8_t mask2 = 0x0c; + int8_t n_mask2 = ~ mask2; + int8_t mask4 = 0x30; + int8_t n_mask4 = ~ mask4; + int8_t mask6 = 0xc0; + int8_t n_mask6 = ~ mask6; + int8_t off2 = 2; + int8_t off4 = 4; + int8_t off6 = 6; + + uint8_t *pIn = base; + uint8_t *pCom = target; + uint8_t *out; + + int cnt = length >> 2; + + while(cnt > 0u) + { + *((uint32_t *)pIn) = avg16(*((uint32_t *)pIn), *((uint32_t *)pCom)); + + pIn+=4; + pCom+=4; + cnt--; + } + + int left = length & 0x3; + while (left>0u) + { + uint8_t inA0 = (uint8_t) bitextu((unsigned int) *pIn, 2, 0); + uint8_t inA1 = (uint8_t) bitextu((unsigned int) *pIn, 2, 2); + uint8_t inA2 = (uint8_t) bitextu((unsigned int) *pIn, 2, 4); + uint8_t inA3 = (uint8_t) bitextu((unsigned int) *pIn, 2, 6); + v4u inA4 = pack((uint8_t) inA0, (uint8_t) inA1, (uint8_t) inA2, (uint8_t) inA3); + uint8_t inB0 = (uint8_t) bitextu((unsigned int) *pCom, 2, 0); + uint8_t inB1 = (uint8_t) bitextu((unsigned int) *pCom, 2, 2); + uint8_t inB2 = (uint8_t) bitextu((unsigned int) *pCom, 2, 4); + uint8_t inB3 = (uint8_t) bitextu((unsigned int) *pCom, 2, 6); + v4u inB4 = pack((uint8_t) inB0, (uint8_t) inB1, (uint8_t) inB2, (uint8_t) inB3); + + *((v4u*)out) = avg4(inA4, inB4); + + uint8_t inA = (uint8_t) bitins(*out, n_mask2, *(out + 1), mask2, off2); + inA = bitins(inA, n_mask4, *(out + 2), mask4, off4); + *((uint8_t*)pIn) = bitins(inA, n_mask6, *(out + 3), mask6, off6); + + pIn++; + pCom++; + left--; + } +} + +#endif diff --git a/rt_nn_tests/xpnn_maxpool_2b/pulp_nn_utils_xpnn.h b/rt_nn_tests/xpnn_maxpool_2b/pulp_nn_utils_xpnn.h new file mode 100644 index 0000000..0c783ae --- /dev/null +++ b/rt_nn_tests/xpnn_maxpool_2b/pulp_nn_utils_xpnn.h @@ -0,0 +1,1937 @@ +/* + * pulp_nn_utils.h + * Nazareno Bruschi + * Alessandro Nadalini + * Georg Rutishauser + * + * Copyright (C) 2019-2020 ETH Zurich & University of Bologna + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef __PULPNN_UTILS__ +#define __PULPNN_UTILS__ + +#include "pmsis.h" +#ifdef GAP_SDK +#include "pulp.h" +#endif + +#define bitext(x,size,off) __builtin_pulp_bextract(x,size,off) +#define bitextu(x,size,off) __builtin_pulp_bextractu(x,size,off) +#define bitins(dst,not_mask_imm,src,mask_imm,off) __builtin_pulp_binsert(dst,not_mask_imm,src,mask_imm,off) +#define pack(x,y,z,t) __builtin_pulp_pack4(x,y,z,t) +#define max4(a,b) __builtin_pulp_maxu4(a,b) +#define maxs4(a, b) __builtin_pulp_max4(a, b) +#define max8(a, b) __builtin_pulp_maxu8(a, b) +#define maxs8(a, b) __builtin_pulp_max8(a, b) +#define max16(a, b) __builtin_pulp_maxu16(a, b) +#define maxs16(a, b) __builtin_pulp_max16(a, b) +#define max32(a,b) __builtin_pulp_maxusi(a,b) +#define maxs32(a,b) __builtin_pulp_maxsi(a,b) +#define min32(a,b) __builtin_pulp_minusi(a,b) +#define mins32(a,b) __builtin_pulp_minsi(a,b) +#define min4(a, b) __builtin_pulp_minu4(a, b) +#define mins4(a, b) __builtin_pulp_min4(a, b) +#define min8(a, b) __builtin_pulp_minu8(a, b) +#define mins8(a, b) __builtin_pulp_min8(a, b) +#define min16(a, b) __builtin_pulp_minu16(a, b) +#define mins16(a, b) __builtin_pulp_min16(a, b) +#define avg4(a,b) __builtin_pulp_avgu4(a,b) +#define avg8(a,b) __builtin_pulp_avgu8(a,b) +#define avg16(a,b) __builtin_pulp_avgu16(a,b) +#define log2(x) __builtin_pulp_fl1(x) +#define min(a,b) ((a)<(b)?(a):(b)) +#define SumDotp4(a, b, c) __builtin_pulp_sdotusp4(a, b, c) +#define SumDotp8(a, b, c) __builtin_pulp_sdotusp8(a, b, c) +#define SumDotp16(a, b, c) __builtin_pulp_sdotusp16(a, b, c) +#define SumDotps4(a, b, c) __builtin_pulp_sdotsp4(a, b, c) +#define SumDotps8(a, b, c) __builtin_pulp_sdotsp8(a, b, c) +#define SumDotps16(a, b, c) __builtin_pulp_sdotsp16(a, b, c) +#define clip4(x) __builtin_pulp_clipu_r(x, 15) +#define clip2(x) __builtin_pulp_clipu_r(x, 3) +#define clip8(x) __builtin_pulp_clipu_r(x, 255) + +#define clips4(x) __builtin_pulp_clip_r(x, 7) +#define clips2(x) __builtin_pulp_clip_r(x, 1) +#define clips8(x) __builtin_pulp_clip_r(x, 127) +#define MacLoadInit(a_update, b_update, a_reg, b_reg, ptr) __builtin_pulp_mlinitspr_v3(a_update, b_update, a_reg, b_reg, ptr) +#define MacLoadUpdate(ptr) __builtin_pulp_mlupdatespr_v3(ptr) +#define MacLoadAssign(ptr) __builtin_pulp_mlassignspr_v3(ptr) +#define MacLoad4(a_update, b_update, a_reg, b_reg, ptr, sum) __builtin_pulp_mlsdotsup4_v3(a_update, b_update, a_reg, b_reg, ptr, sum) +#define MacLoad8(a_update, b_update, a_reg, b_reg, ptr, sum) __builtin_pulp_mlsdotsup8_v3(a_update, b_update, a_reg, b_reg, ptr, sum) +#define MacLoad16(a_update, b_update, a_reg, b_reg, ptr, sum) __builtin_pulp_mlsdotsup16_v3(a_update, b_update, a_reg, b_reg, ptr, sum) +#define MacLoads4(a_update, b_update, a_reg, b_reg, ptr, sum) __builtin_pulp_mlsdotsp4_v3(a_update, b_update, a_reg, b_reg, ptr, sum) +#define MacLoads8(a_update, b_update, a_reg, b_reg, ptr, sum) __builtin_pulp_mlsdotsp8_v3(a_update, b_update, a_reg, b_reg, ptr, sum) +#define MacLoads16(a_update, b_update, a_reg, b_reg, ptr, sum) __builtin_pulp_mlsdotsp16_v3(a_update, b_update, a_reg, b_reg, ptr, sum) + +#define PACK_INT8_SIZE(x) (x) +#define PACK_INT4_SIZE(x) ((x) >> 1) +#define PACK_INT2_SIZE(x) ((x) >> 2) + +#define MemoryFence() asm volatile("":::"memory") + +#define LEGACY_MODE(x) asm volatile ("csrwi 0x010," x) +#define IVEC_FMT(x) asm volatile ("csrwi 0x00D," x) +#define MIXED_SKIP(x) asm volatile ("csrwi 0x00F," x) +#define A_ADDRESS(x) asm volatile ("csrw 0x100, %0" :: "r" (x)) +#define W_ADDRESS(x) asm volatile ("csrw 0x101, %0" :: "r" (x)) +#define A_STRIDE(x) asm volatile ("csrw 0x102, %0":: "r" (x)) +#define W_STRIDE(x) asm volatile ("csrw 0x103, %0":: "r" (x)) +#define A_ROLLBACK(x) asm volatile ("csrw 0x104, %0":: "r" (x)) +#define W_ROLLBACK(x) asm volatile ("csrw 0x105, %0":: "r" (x)) +#define A_SKIP(x) asm volatile ("csrwi 0x106," x) +#define W_SKIP(x) asm volatile ("csrwi 0x107," x) + +static uint8_t __attribute__((noinline)) pulp_nn_quant_u2 ( + int32_t phi, + int16_t m, + int8_t d + ) { + int32_t x = (m * phi) >> d; + uint8_t res = clip2(x); + return res; +} +static uint8_t __attribute__((noinline)) pulp_nn_bn_quant_u2 ( + int32_t phi, + int32_t k, + int32_t lambda, + int8_t d + ) { + int32_t integer_image_phi = (k * phi) + lambda; + int32_t x = (integer_image_phi) >> d; + uint8_t res = clip2(x); + return res; +} +static uint8_t __attribute__((noinline)) pulp_nn_add_quant_u2 ( + uint8_t pix1, + uint8_t pix2, + int16_t m1, + int16_t m2, + int8_t d + ) { + uint32_t integer_image = pix1*m1 + pix2*m2; + uint32_t x = (integer_image) >> d; + uint8_t res = clip2(x); + return res; +} + +static int8_t __attribute__((noinline)) pulp_nn_quant_i2 ( + int32_t phi, + int16_t m, + int8_t d + ) { + int32_t x = (m * phi) >> d; + int8_t res = clips2(x); + return res; +} +static int8_t __attribute__((noinline)) pulp_nn_bn_quant_i2 ( + int32_t phi, + int32_t k, + int32_t lambda, + int8_t d + ) { + int32_t integer_image_phi = (k * phi) + lambda; + int32_t x = (integer_image_phi) >> d; + int8_t res = clips2(x); + return res; +} +static int8_t __attribute__((noinline)) pulp_nn_add_quant_i2 ( + int8_t pix1, + int8_t pix2, + int16_t m1, + int16_t m2, + int8_t d + ) { + int32_t integer_image = pix1*m1 + pix2*m2; + int32_t x = (integer_image) >> d; + int8_t res = clips2(x); + return res; +} + +static uint8_t __attribute__((noinline)) pulp_nn_quant_u4 ( + int32_t phi, + int16_t m, + int8_t d + ) { + int32_t x = (m * phi) >> d; + uint8_t res = clip4(x); + return res; +} +static uint8_t __attribute__((noinline)) pulp_nn_bn_quant_u4 ( + int32_t phi, + int32_t k, + int32_t lambda, + int8_t d + ) { + int32_t integer_image_phi = (k * phi) + lambda; + int32_t x = (integer_image_phi) >> d; + uint8_t res = clip4(x); + return res; +} +static uint8_t __attribute__((noinline)) pulp_nn_add_quant_u4 ( + uint8_t pix1, + uint8_t pix2, + int16_t m1, + int16_t m2, + int8_t d + ) { + uint32_t integer_image = pix1*m1 + pix2*m2; + uint32_t x = (integer_image) >> d; + uint8_t res = clip4(x); + return res; +} + +static int8_t __attribute__((noinline)) pulp_nn_quant_i4 ( + int32_t phi, + int16_t m, + int8_t d + ) { + int32_t x = (m * phi) >> d; + int8_t res = clips4(x); + return res; +} +static int8_t __attribute__((noinline)) pulp_nn_bn_quant_i4 ( + int32_t phi, + int32_t k, + int32_t lambda, + int8_t d + ) { + int32_t integer_image_phi = (k * phi) + lambda; + int32_t x = (integer_image_phi) >> d; + int8_t res = clips4(x); + return res; +} +static int8_t __attribute__((noinline)) pulp_nn_add_quant_i4 ( + int8_t pix1, + int8_t pix2, + int16_t m1, + int16_t m2, + int8_t d + ) { + int32_t integer_image = pix1*m1 + pix2*m2; + int32_t x = (integer_image) >> d; + int8_t res = clips4(x); + return res; +} + +static uint8_t __attribute__((noinline)) pulp_nn_quant_u8 ( + int32_t phi, + int16_t m, + int8_t d + ) { + int32_t x = (m * phi) >> d; + uint8_t res = clip8(x); + return res; +} +static uint8_t __attribute__((noinline)) pulp_nn_bn_quant_u8 ( + int32_t phi, + int32_t k, + int32_t lambda, + int8_t d + ) { + int32_t integer_image_phi = (k * phi) + lambda; + int32_t x = (integer_image_phi) >> d; + uint8_t res = clip8(x); + return res; +} +static uint8_t __attribute__((noinline)) pulp_nn_add_quant_u8 ( + uint8_t pix1, + uint8_t pix2, + int16_t m1, + int16_t m2, + int8_t d + ) { + uint32_t integer_image = pix1*m1 + pix2*m2; + uint32_t x = (integer_image) >> d; + uint8_t res = clip8(x); + return res; +} + +static int8_t __attribute__((noinline)) pulp_nn_quant_i8 ( + int32_t phi, + int16_t m, + int8_t d + ) { + int32_t x = (m * phi) >> d; + int8_t res = clips8(x); + return res; +} +static int8_t __attribute__((noinline)) pulp_nn_bn_quant_i8 ( + int32_t phi, + int32_t k, + int32_t lambda, + int8_t d + ) { + int32_t integer_image_phi = (k * phi) + lambda; + int32_t x = (integer_image_phi) >> d; + int8_t res = clips8(x); + return res; +} +static int8_t __attribute__((noinline)) pulp_nn_add_quant_i8 ( + int8_t pix1, + int8_t pix2, + int16_t m1, + int16_t m2, + int8_t d + ) { + int32_t integer_image = pix1*m1 + pix2*m2; + int32_t x = (integer_image) >> d; + int8_t res = clips8(x); + return res; +} + + +static uint8_t __attribute__((noinline)) pulp_nn_u4_quant(int input, int16_t * pThr) +{ + if(input <= pThr[7] ) + { + if( input <= pThr[3]) + { + if( input <= pThr[1]) + { + if( input <= pThr[0]) + return 0; + else + return 1; + } + else + { + if( input <= pThr[2]) + return 2; + else + return 3; + } + } + else + { + if( input <= pThr[5]) + { + if( input <= pThr[4]) + return 4; + else + return 5; + } + else + { + if( input <= pThr[6]) + return 6; + else + return 7; + } + } + } + else + { + if( input <= pThr[11]) + { + if( input <= pThr[9]) + { + if( input <= pThr[8]) + return 8; + else + return 9; + } + else + { + if( input <= pThr[10]) + return 10; + else + return 11; + } + } + else + { + if( input <= pThr[13]) + { + if( input <= pThr[12]) + return 12; + else + return 13; + } + else + { + if( input <= pThr[14]) + return 14; + else + return 15; + } + } + } +} + +static uint8_t __attribute__((noinline)) pulp_nn_u2_quant(int input, int16_t * pThr) +{ + if( input <= pThr[1]) + { + if( input <= pThr[0]) + { + return 0; + } + else + { + return 1; + } + } + else + { + if( input <= pThr[2]) + { + return 2; + } + else + { + return 3; + } + } +} + +/* + * Common + */ + + +static v4s __attribute__((noinline)) pulp_nn_i4_to_i8_r( int8_t *pSrc) +{ + v4s Src = *((v4s*) pSrc); + int8_t bext1, bext2, bext3, bext4; + + bext1 = (int8_t) bitext((int) Src, 4, 0); + bext2 = (int8_t) bitext((int) Src, 4, 4); + bext3 = (int8_t) bitext((int) Src, 4, 8); + bext4 = (int8_t) bitext((int) Src, 4, 12); + v4s res = pack((int8_t) bext1, (int8_t) bext2, (int8_t) bext3, (int8_t) bext4); + + return res; +} + +static v4u __attribute__((noinline)) pulp_nn_u4_to_u8_r(uint8_t *pSrc) +{ + v4u Src = *((v4u*) pSrc); + uint8_t bext1, bext2, bext3, bext4; + + bext1 = (uint8_t) bitextu((unsigned int) Src, 4, 0); + bext2 = (uint8_t) bitextu((unsigned int) Src, 4, 4); + bext3 = (uint8_t) bitextu((unsigned int) Src, 4, 8); + bext4 = (uint8_t) bitextu((unsigned int) Src, 4, 12); + v4u res = pack((uint8_t) bext1, (uint8_t) bext2, (uint8_t) bext3, (uint8_t) bext4); + + return res; +} + +static v4s __attribute__((noinline)) pulp_nn_i2_to_i8_r( int8_t *pSrc) +{ + v4s Src = *((v4s*) pSrc); + int8_t bext1, bext2, bext3, bext4; + + bext1 = (int8_t) bitext((int) Src, 2, 0); + bext2 = (int8_t) bitext((int) Src, 2, 2); + bext3 = (int8_t) bitext((int) Src, 2, 4); + bext4 = (int8_t) bitext((int) Src, 2, 6); + v4s res = pack((int8_t) bext1, (int8_t) bext2, (int8_t) bext3, (int8_t) bext4); + + return res; +} + +static v4u __attribute__((noinline)) pulp_nn_u2_to_u8_r(uint8_t *pSrc) +{ + v4u Src = *((v4u*) pSrc); + uint8_t bext1, bext2, bext3, bext4; + + bext1 = (uint8_t) bitextu((unsigned int) Src, 2, 0); + bext2 = (uint8_t) bitextu((unsigned int) Src, 2, 2); + bext3 = (uint8_t) bitextu((unsigned int) Src, 2, 4); + bext4 = (uint8_t) bitextu((unsigned int) Src, 2, 6); + v4u res = pack((uint8_t) bext1, (uint8_t) bext2, (uint8_t) bext3, (uint8_t) bext4); + + return res; +} + +static v4s __attribute__((noinline)) pulp_nn_i2_to_i4_r(int8_t *pSrc) +{ + int8_t mask = 0xf0; + int8_t n_mask = ~ mask; + int8_t off = 0x04; + + v4s Src = *((v4s*) pSrc); + int8_t bext1, bext2, bext3, bext4; + int8_t out1, out2, out3, out4; + + bext1 = (int8_t) bitextu((int) Src, 2, 0); + bext2 = (int8_t) bitextu((int) Src, 2, 2); + bext3 = (int8_t) bitextu((int) Src, 2, 4); + bext4 = (int8_t) bitextu((int) Src, 2, 6); + + out1 = bitins(bext1, n_mask, bext2, mask, off); + out2 = bitins(bext3, n_mask, bext4, mask, off); + + bext1 = (int8_t) bitextu((int) Src, 2, 8); + bext2 = (int8_t) bitextu((int) Src, 2, 10); + bext3 = (int8_t) bitextu((int) Src, 2, 12); + bext4 = (int8_t) bitextu((int) Src, 2, 14); + + out3 = bitins(bext1, n_mask, bext2, mask, off); + out4 = bitins(bext3, n_mask, bext4, mask, off); + + v4s res = pack((int8_t) out1, (int8_t) out2, (int8_t) out3, (int8_t) out4); + + return res; +} + +static v4u __attribute__((noinline)) pulp_nn_u2_to_u4_r(uint8_t *pSrc) +{ + int8_t mask = 0xf0; + int8_t n_mask = ~ mask; + int8_t off = 0x04; + + v4u Src = *((v4u*) pSrc); + uint8_t bext1, bext2, bext3, bext4; + uint8_t out1, out2, out3, out4; + + bext1 = (uint8_t) bitextu((unsigned int) Src, 2, 0); + bext2 = (uint8_t) bitextu((unsigned int) Src, 2, 2); + bext3 = (uint8_t) bitextu((unsigned int) Src, 2, 4); + bext4 = (uint8_t) bitextu((unsigned int) Src, 2, 6); + + out1 = bitins(bext1, n_mask, bext2, mask, off); + out2 = bitins(bext3, n_mask, bext4, mask, off); + + bext1 = (uint8_t) bitextu((unsigned int) Src, 2, 8); + bext2 = (uint8_t) bitextu((unsigned int) Src, 2, 10); + bext3 = (uint8_t) bitextu((unsigned int) Src, 2, 12); + bext4 = (uint8_t) bitextu((unsigned int) Src, 2, 14); + + out3 = bitins(bext1, n_mask, bext2, mask, off); + out4 = bitins(bext3, n_mask, bext4, mask, off); + + v4u res = pack((uint8_t) out1, (uint8_t) out2, (uint8_t) out3, (uint8_t) out4); + + return res; +} + +static int8_t *__attribute__((always_inline)) pulp_nn_i4_to_i8( int8_t *pSrc, int8_t *pDst) +{ + v4s Src = *((v4s*) pSrc); + int8_t bext1, bext2, bext3, bext4; + + pSrc+=4; + + bext1 = (int8_t) bitext((int) Src, 4, 0); + bext2 = (int8_t) bitext((int) Src, 4, 4); + bext3 = (int8_t) bitext((int) Src, 4, 8); + bext4 = (int8_t) bitext((int) Src, 4, 12); + *((v4s*)pDst) = pack((int8_t) bext1, (int8_t) bext2, (int8_t) bext3, (int8_t) bext4); + MemoryFence(); + pDst+=4; + bext1 = (int8_t) bitext((int) Src, 4, 16); + bext2 = (int8_t) bitext((int) Src, 4, 20); + bext3 = (int8_t) bitext((int) Src, 4, 24); + bext4 = (int8_t) bitext((int) Src, 4, 28); + *((v4s*)pDst) = pack((int8_t) bext1, (int8_t) bext2, (int8_t) bext3, (int8_t) bext4); + + return pSrc; +} + +static uint8_t *__attribute__((always_inline)) pulp_nn_u4_to_u8(uint8_t *pSrc, uint8_t *pDst) +{ + v4u Src = *((v4u*) pSrc); + uint8_t bext1, bext2, bext3, bext4; + + pSrc+=4; + + bext1 = (uint8_t) bitextu((unsigned int) Src, 4, 0); + bext2 = (uint8_t) bitextu((unsigned int) Src, 4, 4); + bext3 = (uint8_t) bitextu((unsigned int) Src, 4, 8); + bext4 = (uint8_t) bitextu((unsigned int) Src, 4, 12); + *((v4u*)pDst) = pack((uint8_t) bext1, (uint8_t) bext2, (uint8_t) bext3, (uint8_t) bext4); + MemoryFence(); + pDst+=4; + bext1 = (uint8_t) bitextu((unsigned int) Src, 4, 16); + bext2 = (uint8_t) bitextu((unsigned int) Src, 4, 20); + bext3 = (uint8_t) bitextu((unsigned int) Src, 4, 24); + bext4 = (uint8_t) bitextu((unsigned int) Src, 4, 28); + *((v4u*)pDst) = pack((uint8_t) bext1, (uint8_t) bext2, (uint8_t) bext3, (uint8_t) bext4); + + return pSrc; +} + +static int8_t *__attribute__((always_inline)) pulp_nn_i2_to_i8( int8_t * pSrc, int8_t * pDst) +{ + v4s Src = *((v4s*) pSrc); + int8_t bext1, bext2, bext3, bext4; + + pSrc+=4; + + bext1 = (int8_t) bitext((int) Src, 2, 0); + bext2 = (int8_t) bitext((int) Src, 2, 2); + bext3 = (int8_t) bitext((int) Src, 2, 4); + bext4 = (int8_t) bitext((int) Src, 2, 6); + *((v4s*)pDst) = pack((int8_t) bext1, (int8_t) bext2, (int8_t) bext3, (int8_t) bext4); + MemoryFence(); + pDst+=4; + bext1 = (int8_t) bitext((int) Src, 2, 8); + bext2 = (int8_t) bitext((int) Src, 2, 10); + bext3 = (int8_t) bitext((int) Src, 2, 12); + bext4 = (int8_t) bitext((int) Src, 2, 14); + *((v4s*)pDst) = pack((int8_t) bext1, (int8_t) bext2, (int8_t) bext3, (int8_t) bext4); + MemoryFence(); + pDst+=4; + bext1 = (int8_t) bitext((int) Src, 2, 16); + bext2 = (int8_t) bitext((int) Src, 2, 18); + bext3 = (int8_t) bitext((int) Src, 2, 20); + bext4 = (int8_t) bitext((int) Src, 2, 22); + *((v4s*)pDst) = pack((int8_t) bext1, (int8_t) bext2, (int8_t) bext3, (int8_t) bext4); + MemoryFence(); + pDst+=4; + bext1 = (int8_t) bitext((int) Src, 2, 24); + bext2 = (int8_t) bitext((int) Src, 2, 26); + bext3 = (int8_t) bitext((int) Src, 2, 28); + bext4 = (int8_t) bitext((int) Src, 2, 30); + *((v4s*)pDst) = pack((int8_t) bext1, (int8_t) bext2, (int8_t) bext3, (int8_t) bext4); + + return pSrc; +} + +static uint8_t *__attribute__((always_inline)) pulp_nn_u2_to_u8(uint8_t * pSrc, uint8_t * pDst) +{ + v4u Src = *((v4u*) pSrc); + uint8_t bext1, bext2, bext3, bext4; + + pSrc+=4; + + bext1 = (uint8_t) bitextu((unsigned int) Src, 2, 0); + bext2 = (uint8_t) bitextu((unsigned int) Src, 2, 2); + bext3 = (uint8_t) bitextu((unsigned int) Src, 2, 4); + bext4 = (uint8_t) bitextu((unsigned int) Src, 2, 6); + *((v4u*)pDst) = pack((uint8_t) bext1, (uint8_t) bext2, (uint8_t) bext3, (uint8_t) bext4); + MemoryFence(); + pDst+=4; + bext1 = (uint8_t) bitextu((unsigned int) Src, 2, 8); + bext2 = (uint8_t) bitextu((unsigned int) Src, 2, 10); + bext3 = (uint8_t) bitextu((unsigned int) Src, 2, 12); + bext4 = (uint8_t) bitextu((unsigned int) Src, 2, 14); + *((v4u*)pDst) = pack((uint8_t) bext1, (uint8_t) bext2, (uint8_t) bext3, (uint8_t) bext4); + MemoryFence(); + pDst+=4; + bext1 = (uint8_t) bitextu((unsigned int) Src, 2, 16); + bext2 = (uint8_t) bitextu((unsigned int) Src, 2, 18); + bext3 = (uint8_t) bitextu((unsigned int) Src, 2, 20); + bext4 = (uint8_t) bitextu((unsigned int) Src, 2, 22); + *((v4u*)pDst) = pack((uint8_t) bext1, (uint8_t) bext2, (uint8_t) bext3, (uint8_t) bext4); + MemoryFence(); + pDst+=4; + bext1 = (uint8_t) bitextu((unsigned int) Src, 2, 24); + bext2 = (uint8_t) bitextu((unsigned int) Src, 2, 26); + bext3 = (uint8_t) bitextu((unsigned int) Src, 2, 28); + bext4 = (uint8_t) bitextu((unsigned int) Src, 2, 30); + *((v4u*)pDst) = pack((uint8_t) bext1, (uint8_t) bext2, (uint8_t) bext3, (uint8_t) bext4); + + return pSrc; +} + +static int8_t *__attribute__((always_inline)) pulp_nn_i2_to_i4( int8_t * pSrc, int8_t * pDst) +{ + int8_t mask = 0xf0; + int8_t n_mask = ~ mask; + int8_t off = 0x04; + + v4s Src = *((v4s*) pSrc); + int8_t bext1, bext2, bext3, bext4; + int8_t out1, out2, out3, out4; + + pSrc+=4; + + bext1 = (int8_t) bitext((int) Src, 2, 0); + bext2 = (int8_t) bitext((int) Src, 2, 2); + bext3 = (int8_t) bitext((int) Src, 2, 4); + bext4 = (int8_t) bitext((int) Src, 2, 6); + + out1 = bitins(bext1, n_mask, bext2, mask, off); + out2 = bitins(bext3, n_mask, bext4, mask, off); + MemoryFence(); + + bext1 = (int8_t) bitext((int) Src, 2, 8); + bext2 = (int8_t) bitext((int) Src, 2, 10); + bext3 = (int8_t) bitext((int) Src, 2, 12); + bext4 = (int8_t) bitext((int) Src, 2, 14); + + out3 = bitins(bext1, n_mask, bext2, mask, off); + out4 = bitins(bext3, n_mask, bext4, mask, off); + + *((v4s*)pDst) = pack((int8_t) out1, (int8_t) out2, (int8_t) out3, (int8_t) out4); + MemoryFence(); + + pDst+=4; + bext1 = (int8_t) bitext((int) Src, 2, 16); + bext2 = (int8_t) bitext((int) Src, 2, 18); + bext3 = (int8_t) bitext((int) Src, 2, 20); + bext4 = (int8_t) bitext((int) Src, 2, 22); + + out1 = bitins(bext1, n_mask, bext2, mask, off); + out2 = bitins(bext3, n_mask, bext4, mask, off); + MemoryFence(); + + bext1 = (int8_t) bitext((int) Src, 2, 24); + bext2 = (int8_t) bitext((int) Src, 2, 26); + bext3 = (int8_t) bitext((int) Src, 2, 28); + bext4 = (int8_t) bitext((int) Src, 2, 30); + + out3 = bitins(bext1, n_mask, bext2, mask, off); + out4 = bitins(bext3, n_mask, bext4, mask, off); + + *((v4s*)pDst) = pack((int8_t) out1, (int8_t) out2, (int8_t) out3, (int8_t) out4); + + return pSrc; +} + +static uint8_t *__attribute__((always_inline)) pulp_nn_u2_to_u4( uint8_t * pSrc, uint8_t * pDst) +{ + int8_t mask = 0xf0; + int8_t n_mask = ~ mask; + int8_t off = 0x04; + + v4u Src = *((v4u*) pSrc); + uint8_t bext1, bext2, bext3, bext4; + uint8_t out1, out2, out3, out4; + + pSrc+=4; + + bext1 = (uint8_t) bitextu((unsigned int) Src, 2, 0); + bext2 = (uint8_t) bitextu((unsigned int) Src, 2, 2); + bext3 = (uint8_t) bitextu((unsigned int) Src, 2, 4); + bext4 = (uint8_t) bitextu((unsigned int) Src, 2, 6); + + out1 = bitins(bext1, n_mask, bext2, mask, off); + out2 = bitins(bext3, n_mask, bext4, mask, off); + MemoryFence(); + + bext1 = (uint8_t) bitextu((unsigned int) Src, 2, 8); + bext2 = (uint8_t) bitextu((unsigned int) Src, 2, 10); + bext3 = (uint8_t) bitextu((unsigned int) Src, 2, 12); + bext4 = (uint8_t) bitextu((unsigned int) Src, 2, 14); + + out3 = bitins(bext1, n_mask, bext2, mask, off); + out4 = bitins(bext3, n_mask, bext4, mask, off); + + *((v4u*)pDst) = pack((uint8_t) out1, (uint8_t) out2, (uint8_t) out3, (uint8_t) out4); + MemoryFence(); + + pDst+=4; + bext1 = (uint8_t) bitextu((unsigned int) Src, 2, 16); + bext2 = (uint8_t) bitextu((unsigned int) Src, 2, 18); + bext3 = (uint8_t) bitextu((unsigned int) Src, 2, 20); + bext4 = (uint8_t) bitextu((unsigned int) Src, 2, 22); + + out1 = bitins(bext1, n_mask, bext2, mask, off); + out2 = bitins(bext3, n_mask, bext4, mask, off); + MemoryFence(); + + bext1 = (uint8_t) bitextu((unsigned int) Src, 2, 24); + bext2 = (uint8_t) bitextu((unsigned int) Src, 2, 26); + bext3 = (uint8_t) bitextu((unsigned int) Src, 2, 28); + bext4 = (uint8_t) bitextu((unsigned int) Src, 2, 30); + + out3 = bitins(bext1, n_mask, bext2, mask, off); + out4 = bitins(bext3, n_mask, bext4, mask, off); + + *((v4u*)pDst) = pack((uint8_t) out1, (uint8_t) out2, (uint8_t) out3, (uint8_t) out4); + + return pSrc; +} + +/* + * XpulpV2 + */ + +static void __attribute__((noinline)) pulp_zero_mem(uint8_t * pBuffer, unsigned int size) +{ + int lfover = size &0x3; + for (int i=0; i<(size>>2); i++) + { + *((v4u *)pBuffer) = (v4u){0,0,0,0}; + MemoryFence(); + pBuffer+=4; + } + while(lfover) + { + *pBuffer++=0; + lfover--; + } +} + +static void __attribute__((noinline)) pulp_nn_im2col_u2_to_u8(uint8_t * pInput, uint8_t * pOutput, unsigned int blockSize) +{ + unsigned int blkCnt = blockSize >> 4u; + int lfover = blockSize & 0x0f; + for (int i = 0; i> 4u; + int lfover = blockSize & 0x0f; + for (int i = 0; i> 3u; + int lfover = blockSize & 0x07; + for (int i = 0; i> 3u; + int lfover = blockSize & 0x07; + for (int i = 0; i> 2u; + int lfover = blockSize & 0x03; + for (int i = 0; i> 2u; + int lfover = blockSize & 0x03; + for (int i = 0; i> 4u; + int lfover = blockSize & 0x0f; + for (int i = 0; i> 4u; + int lfover = blockSize & 0x0f; + for (int i = 0; i> 4u; + int lfover = blockSize & 0x0f; + for (int i = 0; i> 4u; + int lfover = blockSize & 0x0f; + for (int i = 0; i> 4u; + int lfover = blockSize & 0x0f; + for (int i = 0; i> 4u; + int lfover = blockSize & 0x0f; + for (int i = 0; i> 3u; + int lfover = blockSize & 0x07; + for (int i = 0; i> 3u; + int lfover = blockSize & 0x07; + for (int i = 0; i> 3u; + int lfover = blockSize & 0x07; + for (int i = 0; i> 3u; + int lfover = blockSize & 0x07; + for (int i = 0; i> 2u; + int lfover = blockSize & 0x03; + for (int i = 0; i> 2u; + int lfover = blockSize & 0x03; + for (int i = 0; i> 2; + + while(cnt > 0u) + { + inp = *((v4u*)pIn); + com = *((v4u*)pCom); + + *((v4u*)pIn) = max4(inp, com); + + pCom+=4; + pIn+=4; + cnt--; + } + + int left = length & 0x3; + while (left>0u) + { + if(*pIn<*pCom) + *pIn=*pCom; + + pIn++; + pCom++; + left--; + } +} + +static void __attribute__((noinline)) pulp_nn_compare_and_replace_if_larger_i8( + int8_t * base, int8_t * target, uint16_t length) { + int8_t *pIn = base; + int8_t *pCom = target; + v4s inp; + v4s com; + int cnt = length >> 2; + + while (cnt > 0u) { + inp = *((v4s *)pIn); + com = *((v4s *)pCom); + + *((v4s *)pIn) = maxs4(inp, com); + + pCom += 4; + pIn += 4; + cnt--; + } + + int left = length & 0x3; + while (left > 0u) { + if (*pIn < *pCom) + *pIn = *pCom; + + pIn++; + pCom++; + left--; + } +} + +static void __attribute__((noinline)) pulp_nn_avg_and_replace_u8(uint8_t * base, + uint8_t * target, + uint16_t length) +{ + uint8_t *pIn = base; + uint8_t *pCom = target; + + while (length>0u) + { + *pIn = ((*pIn + *pCom) >> 1); + + pIn++; + pCom++; + length--; + } +} + +static void __attribute__((noinline)) pulp_nn_compare_and_replace_if_larger_u4(uint8_t * base, + uint8_t * target, + uint16_t length) +{ + int8_t mask = 0xf0; + int8_t n_mask = ~ mask; + int8_t off = 0x04; + + uint8_t *pIn = base; + uint8_t *pCom = target; + v4u inp[2]; + v4u com[2]; + uint8_t *out; + int cnt = length >> 2; + + while(cnt > 0u) + { + pulp_nn_u4_to_u8(pIn, (uint8_t *)inp); + pulp_nn_u4_to_u8(pCom, (uint8_t *)com); + + *((v4u *)out) = max4(inp[0], com[0]); + + *((uint8_t*)pIn) = bitins(*out, n_mask, *(out + 1), mask, off); + pIn++; + *((uint8_t*)pIn) = bitins(*(out + 2), n_mask, *(out + 3), mask, off); + pIn++; + + *((v4u *)out) = max4(inp[1], com[1]); + + *((uint8_t*)pIn) = bitins(*out, n_mask, *(out + 1), mask, off); + pIn++; + *((uint8_t*)pIn) = bitins(*(out + 2), n_mask, *(out + 3), mask, off); + pIn++; + + pCom+=4; + cnt--; + } + + int left = length & 0x3; + while (left>0u) + { + uint8_t inA0 = (uint8_t) bitextu((unsigned int) *pIn, 4, 0); + uint8_t inA1 = (uint8_t) bitextu((unsigned int) *pIn, 4, 4); + uint8_t inB0 = (uint8_t) bitextu((unsigned int) *pCom, 4, 0); + uint8_t inB1 = (uint8_t) bitextu((unsigned int) *pCom, 4, 4); + + if(inA0> 2; + + while(cnt > 0u) + { + pulp_nn_i4_to_i8(pIn, (int8_t *)inp); + pulp_nn_i4_to_i8(pCom, (int8_t *)com); + + *((v4s *)out) = maxs4(inp[0], com[0]); + + *((int8_t*)pIn) = bitins(*out, n_mask, *(out + 1), mask, off); + pIn++; + *((int8_t*)pIn) = bitins(*(out + 2), n_mask, *(out + 3), mask, off); + pIn++; + + *((v4s *)out) = maxs4(inp[1], com[1]); + + *((int8_t*)pIn) = bitins(*out, n_mask, *(out + 1), mask, off); + pIn++; + *((int8_t*)pIn) = bitins(*(out + 2), n_mask, *(out + 3), mask, off); + pIn++; + + pCom+=4; + cnt--; + } + + int left = length & 0x3; + while (left>0u) + { + int8_t inA0 = (int8_t) bitext((int) *pIn, 4, 0); + int8_t inA1 = (int8_t) bitext((int) *pIn, 4, 4); + int8_t inB0 = (int8_t) bitext((int) *pCom, 4, 0); + int8_t inB1 = (int8_t) bitext((int) *pCom, 4, 4); + + if(inA00u) + { + uint8_t inA0 = (uint8_t) bitextu((unsigned int) *pIn, 4, 0); + uint8_t inA1 = (uint8_t) bitextu((unsigned int) *pIn, 4, 4); + uint8_t inB0 = (uint8_t) bitextu((unsigned int) *pCom, 4, 0); + uint8_t inB1 = (uint8_t) bitextu((unsigned int) *pCom, 4, 4); + + inA0 = ((inA0 + inB0) >> 1); + inA1 = ((inA1 + inB1) >> 1); + + *((uint8_t*)pIn) = bitins(inA0, n_mask, inA1, mask, off); + + pIn++; + pCom++; + length--; + } +} + +static void __attribute__((noinline)) pulp_nn_compare_and_replace_if_larger_u2(uint8_t * base, + uint8_t * target, + uint16_t length) +{ + int8_t mask2 = 0x0c; + int8_t n_mask2 = ~ mask2; + int8_t mask4 = 0x30; + int8_t n_mask4 = ~ mask4; + int8_t mask6 = 0xc0; + int8_t n_mask6 = ~ mask6; + int8_t off2 = 2; + int8_t off4 = 4; + int8_t off6 = 6; + + uint8_t *pIn = base; + uint8_t *pCom = target; + v4u inp[4]; + v4u com[4]; + uint8_t *out; + int cnt = length >> 2; + + while(cnt > 0u) + { + pulp_nn_u2_to_u8(pIn, inp); + pulp_nn_u2_to_u8(pCom, com); + + *((v4u*)out) = max4(inp[0], com[0]); + + uint8_t inA = (uint8_t) bitins(*out, n_mask2, *(out + 1), mask2, off2); + inA = bitins(inA, n_mask4, *(out + 2), mask4, off4); + *((uint8_t*)pIn) = bitins(inA, n_mask6, *(out + 3), mask6, off6); + pIn++; + + *((v4u*)out) = max4(inp[1], com[1]); + + inA = (uint8_t) bitins(*out, n_mask2, *(out + 1), mask2, off2); + inA = bitins(inA, n_mask4, *(out + 2), mask4, off4); + *((uint8_t*)pIn) = bitins(inA, n_mask6, *(out + 3), mask6, off6); + pIn++; + + *((v4u*)out) = max4(inp[2], com[2]); + + inA = (uint8_t) bitins(*out, n_mask2, *(out + 1), mask2, off2); + inA = bitins(inA, n_mask4, *(out + 2), mask4, off4); + *((uint8_t*)pIn) = bitins(inA, n_mask6, *(out + 3), mask6, off6); + pIn++; + + *((v4u*)out) = max4(inp[3], com[3]); + + inA = (uint8_t) bitins(*out, n_mask2, *(out + 1), mask2, off2); + inA = bitins(inA, n_mask4, *(out + 2), mask4, off4); + *((uint8_t*)pIn) = bitins(inA, n_mask6, *(out + 3), mask6, off6); + pIn++; + + pCom+=4; + cnt--; + } + + int left = length & 0x3; + while (left>0u) + { + uint8_t inA0 = (uint8_t) bitextu((unsigned int) *pIn, 2, 0); + uint8_t inA1 = (uint8_t) bitextu((unsigned int) *pIn, 2, 2); + uint8_t inA2 = (uint8_t) bitextu((unsigned int) *pIn, 2, 4); + uint8_t inA3 = (uint8_t) bitextu((unsigned int) *pIn, 2, 6); + v4u inA4 = pack((uint8_t) inA0, (uint8_t) inA1, (uint8_t) inA2, (uint8_t) inA3); + uint8_t inB0 = (uint8_t) bitextu((unsigned int) *pCom, 2, 0); + uint8_t inB1 = (uint8_t) bitextu((unsigned int) *pCom, 2, 2); + uint8_t inB2 = (uint8_t) bitextu((unsigned int) *pCom, 2, 4); + uint8_t inB3 = (uint8_t) bitextu((unsigned int) *pCom, 2, 6); + v4u inB4 = pack((uint8_t) inB0, (uint8_t) inB1, (uint8_t) inB2, (uint8_t) inB3); + + *((v4u*)out) = max4(inA4, inB4); + + uint8_t inA = (uint8_t) bitins(*out, n_mask2, *(out + 1), mask2, off2); + inA = bitins(inA, n_mask4, *(out + 2), mask4, off4); + *((uint8_t*)pIn) = bitins(inA, n_mask6, *(out + 3), mask6, off6); + + pIn++; + pCom++; + left--; + } +} + + +static void __attribute__((noinline)) pulp_nn_compare_and_replace_if_larger_i2(int8_t * base, + int8_t * target, + uint16_t length) +{ + int8_t mask2 = 0x0c; + int8_t n_mask2 = ~ mask2; + int8_t mask4 = 0x30; + int8_t n_mask4 = ~ mask4; + int8_t mask6 = 0xc0; + int8_t n_mask6 = ~ mask6; + int8_t off2 = 2; + int8_t off4 = 4; + int8_t off6 = 6; + + int8_t *pIn = base; + int8_t *pCom = target; + v4s inp[4]; + v4s com[4]; + int8_t *out; + int cnt = length >> 2; + + while(cnt > 0u) + { + pulp_nn_i2_to_i8(pIn, inp); + pulp_nn_i2_to_i8(pCom, com); + + *((v4s*)out) = maxs4(inp[0], com[0]); + + int8_t inA = (int8_t) bitins(*out, n_mask2, *(out + 1), mask2, off2); + inA = bitins(inA, n_mask4, *(out + 2), mask4, off4); + *((int8_t*)pIn) = bitins(inA, n_mask6, *(out + 3), mask6, off6); + pIn++; + + *((v4s*)out) = maxs4(inp[1], com[1]); + + inA = (int8_t) bitins(*out, n_mask2, *(out + 1), mask2, off2); + inA = bitins(inA, n_mask4, *(out + 2), mask4, off4); + *((int8_t*)pIn) = bitins(inA, n_mask6, *(out + 3), mask6, off6); + pIn++; + + *((v4s*)out) = maxs4(inp[2], com[2]); + + inA = (int8_t) bitins(*out, n_mask2, *(out + 1), mask2, off2); + inA = bitins(inA, n_mask4, *(out + 2), mask4, off4); + *((int8_t*)pIn) = bitins(inA, n_mask6, *(out + 3), mask6, off6); + pIn++; + + *((v4s*)out) = maxs4(inp[3], com[3]); + + inA = (int8_t) bitins(*out, n_mask2, *(out + 1), mask2, off2); + inA = bitins(inA, n_mask4, *(out + 2), mask4, off4); + *((int8_t*)pIn) = bitins(inA, n_mask6, *(out + 3), mask6, off6); + pIn++; + + pCom+=4; + cnt--; + } + + int left = length & 0x3; + while (left>0u) + { + int8_t inA0 = (int8_t) bitext((unsigned int) *pIn, 2, 0); + int8_t inA1 = (int8_t) bitext((unsigned int) *pIn, 2, 2); + int8_t inA2 = (int8_t) bitext((unsigned int) *pIn, 2, 4); + int8_t inA3 = (int8_t) bitext((unsigned int) *pIn, 2, 6); + v4s inA4 = pack((int8_t) inA0, (int8_t) inA1, (int8_t) inA2, (int8_t) inA3); + int8_t inB0 = (int8_t) bitext((unsigned int) *pCom, 2, 0); + int8_t inB1 = (int8_t) bitext((unsigned int) *pCom, 2, 2); + int8_t inB2 = (int8_t) bitext((unsigned int) *pCom, 2, 4); + int8_t inB3 = (int8_t) bitext((unsigned int) *pCom, 2, 6); + v4s inB4 = pack((int8_t) inB0, (int8_t) inB1, (int8_t) inB2, (int8_t) inB3); + + *((v4s*)out) = maxs4(inA4, inB4); + + int8_t inA = (int8_t) bitins(*out, n_mask2, *(out + 1), mask2, off2); + inA = bitins(inA, n_mask4, *(out + 2), mask4, off4); + *((int8_t*)pIn) = bitins(inA, n_mask6, *(out + 3), mask6, off6); + + pIn++; + pCom++; + left--; + } +} + +static void __attribute__((noinline)) pulp_nn_avg_and_replace_u2(uint8_t * base, + uint8_t * target, + uint16_t length) +{ + int8_t mask2 = 0x0c; + int8_t n_mask2 = ~ mask2; + int8_t mask4 = 0x30; + int8_t n_mask4 = ~ mask4; + int8_t mask6 = 0xc0; + int8_t n_mask6 = ~ mask6; + int8_t off2 = 2; + int8_t off4 = 4; + int8_t off6 = 6; + + uint8_t *pIn = base; + uint8_t *pCom = target; + + while (length>0u) + { + uint8_t inA0 = (uint8_t) bitextu((unsigned int) *pIn, 2, 0); + uint8_t inA1 = (uint8_t) bitextu((unsigned int) *pIn, 2, 2); + uint8_t inA2 = (uint8_t) bitextu((unsigned int) *pIn, 2, 4); + uint8_t inA3 = (uint8_t) bitextu((unsigned int) *pIn, 2, 6); + + uint8_t inB0 = (uint8_t) bitextu((unsigned int) *pCom, 2, 0); + uint8_t inB1 = (uint8_t) bitextu((unsigned int) *pCom, 2, 2); + uint8_t inB2 = (uint8_t) bitextu((unsigned int) *pCom, 2, 4); + uint8_t inB3 = (uint8_t) bitextu((unsigned int) *pCom, 2, 6); + + inA0 = ((inA0 + inB0) >> 1); + inA1 = ((inA1 + inB1) >> 1); + inA2 = ((inA2 + inB2) >> 1); + inA3 = ((inA3 + inB3) >> 1); + + uint8_t inA = (uint8_t) bitins(inA0, n_mask2, inA1, mask2, off2); + inA = bitins(inA, n_mask4, inA2, mask4, off4); + *((uint8_t*)pIn) = bitins(inA, n_mask6, inA3, mask6, off6); + + pIn++; + pCom++; + length--; + } +} + +/* + * XpulpNN + */ + +static void __attribute__((noinline)) xpulp_nn_zero_mem_u8(uint8_t * pBuffer, unsigned int size) +{ + int lfover = size &0x3; + for (int i=0; i<(size>>2); i++) + { + *((v4u *)pBuffer) = (v4u){0,0,0,0}; + MemoryFence(); + pBuffer+=4; + } + while(lfover) + { + *pBuffer++=0; + lfover--; + } +} + +static void __attribute__((noinline)) xpulp_nn_zero_mem_u4(uint8_t * pBuffer, unsigned int size) +{ + int lfover = size &0x7; + for (int i=0; i<(size>>3); i++) + { + *((v4u *)pBuffer) = (v4u){0,0,0,0}; + MemoryFence(); + pBuffer+=4; + } + while(lfover) + { + *pBuffer++=0; + lfover-=2; + } +} + +static void __attribute__((noinline)) xpulp_nn_zero_mem_u2(uint8_t * pBuffer, unsigned int size) +{ + int lfover = size &0xf; + for (int i=0; i<(size>>4); i++) + { + *((v4u *)pBuffer) = (v4u){0,0,0,0}; + MemoryFence(); + pBuffer+=4; + } + while(lfover) + { + *pBuffer++=0; + lfover-=4; + } +} + + +static void __attribute__((noinline)) xpulp_nn_compare_and_replace_if_larger_u4(uint8_t * base, + uint8_t * target, + uint16_t length) +{ + int8_t mask = 0xf0; + int8_t n_mask = ~ mask; + int8_t off = 0x04; + + uint8_t *pIn = base; + uint8_t *pCom = target; + + int cnt = length >> 2; + + while(cnt > 0u) + { + *((uint32_t *)pIn) = max8(*((uint32_t *)pIn), *((uint32_t *)pCom)); + + pIn+=4; + pCom+=4; + + cnt--; + } + + int left = length & 0x3; + while (left>0u) + { + uint8_t inA0 = (uint8_t) bitextu((unsigned int) *pIn, 4, 0); + uint8_t inA1 = (uint8_t) bitextu((unsigned int) *pIn, 4, 4); + uint8_t inB0 = (uint8_t) bitextu((unsigned int) *pCom, 4, 0); + uint8_t inB1 = (uint8_t) bitextu((unsigned int) *pCom, 4, 4); + + if(inA0> 2; + + while (cnt > 0u) { + *((int32_t *)pIn) = maxs8(*((int32_t *)pIn), *((int32_t *)pCom)); + + pIn += 4; + pCom += 4; + + cnt--; + } + + int left = length & 0x3; + while (left > 0u) { + int8_t inA0 = (int8_t)bitext((int)*pIn, 4, 0); + int8_t inA1 = (int8_t)bitext((int)*pIn, 4, 4); + int8_t inB0 = (int8_t)bitext((int)*pCom, 4, 0); + int8_t inB1 = (int8_t)bitext((int)*pCom, 4, 4); + + if (inA0 < inB0) + inA0 = inB0; + + if (inA1 < inB1) + inA1 = inB1; + + *((int8_t *)pIn) = bitins(inA0, n_mask, inA1, mask, off); + + pIn++; + pCom++; + left--; + } +} + +static void __attribute__((noinline)) xpulp_nn_avg_and_replace_u4(uint8_t * base, + uint8_t * target, + uint16_t length) +{ + int8_t mask = 0xf0; + int8_t n_mask = ~ mask; + int8_t off = 0x04; + + uint8_t *pIn = base; + uint8_t *pCom = target; + + int cnt = length >> 2; + + while (cnt > 0u) + { + *((uint32_t *)pIn) = avg8(*((uint32_t *)pIn), *((uint32_t *)pCom)); + + pIn+=4; + pCom+=4; + cnt--; + } + + int left = length & 0x3; + + while (left>0u) + { + uint8_t inA0 = (uint8_t) bitextu((unsigned int) *pIn, 4, 0); + uint8_t inA1 = (uint8_t) bitextu((unsigned int) *pIn, 4, 4); + uint8_t inB0 = (uint8_t) bitextu((unsigned int) *pCom, 4, 0); + uint8_t inB1 = (uint8_t) bitextu((unsigned int) *pCom, 4, 4); + + inA0 = ((inA0 + inB0) >> 1); + inA1 = ((inA1 + inB1) >> 1); + + *((uint8_t*)pIn) = bitins(inA0, n_mask, inA1, mask, off); + + pIn++; + pCom++; + length--; + } +} + +static void __attribute__((noinline)) xpulp_nn_compare_and_replace_if_larger_u2(uint8_t * base, + uint8_t * target, + uint16_t length) +{ + int8_t mask2 = 0x0c; + int8_t n_mask2 = ~ mask2; + int8_t mask4 = 0x30; + int8_t n_mask4 = ~ mask4; + int8_t mask6 = 0xc0; + int8_t n_mask6 = ~ mask6; + int8_t off2 = 2; + int8_t off4 = 4; + int8_t off6 = 6; + + uint8_t *pIn = base; + uint8_t *pCom = target; + uint8_t *out; + + int cnt = length >> 2; + + while(cnt > 0u) + { + *((uint32_t *)pIn) = max16(*((uint32_t *)pIn), *((uint32_t *)pCom)); + + pIn+=4; + pCom+=4; + cnt--; + } + + int left = length & 0x3; + while (left>0u) + { + uint8_t inA0 = (uint8_t) bitextu((unsigned int) *pIn, 2, 0); + uint8_t inA1 = (uint8_t) bitextu((unsigned int) *pIn, 2, 2); + uint8_t inA2 = (uint8_t) bitextu((unsigned int) *pIn, 2, 4); + uint8_t inA3 = (uint8_t) bitextu((unsigned int) *pIn, 2, 6); + v4u inA4 = pack((uint8_t) inA0, (uint8_t) inA1, (uint8_t) inA2, (uint8_t) inA3); + uint8_t inB0 = (uint8_t) bitextu((unsigned int) *pCom, 2, 0); + uint8_t inB1 = (uint8_t) bitextu((unsigned int) *pCom, 2, 2); + uint8_t inB2 = (uint8_t) bitextu((unsigned int) *pCom, 2, 4); + uint8_t inB3 = (uint8_t) bitextu((unsigned int) *pCom, 2, 6); + v4u inB4 = pack((uint8_t) inB0, (uint8_t) inB1, (uint8_t) inB2, (uint8_t) inB3); + + *((v4u*)out) = max4(inA4, inB4); + + uint8_t inA = (uint8_t) bitins(*out, n_mask2, *(out + 1), mask2, off2); + inA = bitins(inA, n_mask4, *(out + 2), mask4, off4); + *((uint8_t*)pIn) = bitins(inA, n_mask6, *(out + 3), mask6, off6); + + pIn++; + pCom++; + left--; + } +} +static void __attribute__((noinline)) xpulp_nn_compare_and_replace_if_larger_i2(int8_t * base, + int8_t * target, + uint16_t length) +{ + int8_t mask2 = 0x0c; + int8_t n_mask2 = ~ mask2; + int8_t mask4 = 0x30; + int8_t n_mask4 = ~ mask4; + int8_t mask6 = 0xc0; + int8_t n_mask6 = ~ mask6; + int8_t off2 = 2; + int8_t off4 = 4; + int8_t off6 = 6; + + int8_t *pIn = base; + int8_t *pCom = target; + int8_t *out; + + int cnt = length >> 2; + + while(cnt > 0u) + { + *((int32_t *)pIn) = maxs16(*((int32_t *)pIn), *((int32_t *)pCom)); + + pIn+=4; + pCom+=4; + cnt--; + } + + int left = length & 0x3; + while (left>0u) + { + int8_t inA0 = (int8_t) bitext((int) *pIn, 2, 0); + int8_t inA1 = (int8_t) bitext((int) *pIn, 2, 2); + int8_t inA2 = (int8_t) bitext((int) *pIn, 2, 4); + int8_t inA3 = (int8_t) bitext((int) *pIn, 2, 6); + v4s inA4 = pack((int8_t) inA0, (int8_t) inA1, (int8_t) inA2, (int8_t) inA3); + int8_t inB0 = (int8_t) bitext((int) *pCom, 2, 0); + int8_t inB1 = (int8_t) bitext((int) *pCom, 2, 2); + int8_t inB2 = (int8_t) bitext((int) *pCom, 2, 4); + int8_t inB3 = (int8_t) bitext((int) *pCom, 2, 6); + v4s inB4 = pack((int8_t) inB0, (int8_t) inB1, (int8_t) inB2, (int8_t) inB3); + + *((v4s*)out) = maxs4(inA4, inB4); + + int8_t inA = (int8_t) bitins(*out, n_mask2, *(out + 1), mask2, off2); + inA = bitins(inA, n_mask4, *(out + 2), mask4, off4); + *((int8_t*)pIn) = bitins(inA, n_mask6, *(out + 3), mask6, off6); + + pIn++; + pCom++; + left--; + } +} + +static void __attribute__((noinline)) xpulp_nn_avg_and_replace_u2(uint8_t * base, + uint8_t * target, + uint16_t length) +{ + int8_t mask2 = 0x0c; + int8_t n_mask2 = ~ mask2; + int8_t mask4 = 0x30; + int8_t n_mask4 = ~ mask4; + int8_t mask6 = 0xc0; + int8_t n_mask6 = ~ mask6; + int8_t off2 = 2; + int8_t off4 = 4; + int8_t off6 = 6; + + uint8_t *pIn = base; + uint8_t *pCom = target; + uint8_t *out; + + int cnt = length >> 2; + + while(cnt > 0u) + { + *((uint32_t *)pIn) = avg16(*((uint32_t *)pIn), *((uint32_t *)pCom)); + + pIn+=4; + pCom+=4; + cnt--; + } + + int left = length & 0x3; + while (left>0u) + { + uint8_t inA0 = (uint8_t) bitextu((unsigned int) *pIn, 2, 0); + uint8_t inA1 = (uint8_t) bitextu((unsigned int) *pIn, 2, 2); + uint8_t inA2 = (uint8_t) bitextu((unsigned int) *pIn, 2, 4); + uint8_t inA3 = (uint8_t) bitextu((unsigned int) *pIn, 2, 6); + v4u inA4 = pack((uint8_t) inA0, (uint8_t) inA1, (uint8_t) inA2, (uint8_t) inA3); + uint8_t inB0 = (uint8_t) bitextu((unsigned int) *pCom, 2, 0); + uint8_t inB1 = (uint8_t) bitextu((unsigned int) *pCom, 2, 2); + uint8_t inB2 = (uint8_t) bitextu((unsigned int) *pCom, 2, 4); + uint8_t inB3 = (uint8_t) bitextu((unsigned int) *pCom, 2, 6); + v4u inB4 = pack((uint8_t) inB0, (uint8_t) inB1, (uint8_t) inB2, (uint8_t) inB3); + + *((v4u*)out) = avg4(inA4, inB4); + + uint8_t inA = (uint8_t) bitins(*out, n_mask2, *(out + 1), mask2, off2); + inA = bitins(inA, n_mask4, *(out + 2), mask4, off4); + *((uint8_t*)pIn) = bitins(inA, n_mask6, *(out + 3), mask6, off6); + + pIn++; + pCom++; + left--; + } +} + + +#endif diff --git a/rt_nn_tests/xpnn_maxpool_2b/test.c b/rt_nn_tests/xpnn_maxpool_2b/test.c new file mode 100644 index 0000000..24edee2 --- /dev/null +++ b/rt_nn_tests/xpnn_maxpool_2b/test.c @@ -0,0 +1,172 @@ +// massive hack to enable rt compatibility +#define pi_core_id get_core_id +#include +#include +#include + +#include "dory_dma.h" + +#include "pmsis.h" + +#include "data_statstest.h" +//#include "pulp_nn_kernels.h" +#include "pulp_nn_mix_kernels.h" + + +#define start_cycle_counter() asm volatile("csrw 0xCC0, 0x01;") +#define stop_cycle_counter() asm volatile("csrw 0xCC0, 0x00;") +#define read_cycle_counter(x) asm volatile("csrr %0, 0x780;" : "=r" (x)) +#define reset_cycle_counter() asm volatile("csrw 0x780, 0x0;") + +uint8_t im2col[IM2COL_DIM] = {0}; +uint8_t outputs[OUTPUT_DIM] = {0}; + +int32_t outputs_fp[OUTPUT_DIM_FP] = {0}; + +#ifndef PROFILE +int num_cycles; +#else +int im2col_cycles; +int hotloop_prep_cycles; +int hotloop_cycles; +int threshold_cycles; +int requant_cycles; +int hotloop_leftover_cycles; +int matmul4x2_leftover_cycles; +#endif + +void call_krnl_0(); +void test_0(); + +int main(int argc, char *argv[]) +{ +#if KRAKEN_PTEST == 1 + kraken_padframe_aon_pad_gpioa_cfg_rxe_set(24, 0); + kraken_padframe_aon_pad_gpioa_cfg_trie_set(24, 0); + kraken_padframe_aon_pad_gpioa_cfg_chip2pad_set(24, 0); +#endif + int n_mismatches = 0; + int mismatches_tot = 0; + + + + #ifndef PROFILE + num_cycles = 0; + #endif + + if (get_core_id() == 0) { + printf("===> TEST 0: Running xpulp_nn_maxpool_i2...\n"); + printf(" dims_in = [32, 32]\n"); + printf(" dims_kernel = [2, 2]\n"); + printf(" ch_in/out = [32, 32]\n"); + //printf(" padding_y_top = [%d]\n", padding_y_top); + //printf(" padding_y_bottom = [%d]\n", padding_y_bottom); + //printf(" padding_x_left = [%d]\n", padding_x_left); + //printf(" padding_x_right = [%d]\n", padding_x_right); + //printf(" stride_x = [%d]\n", stride_x); + //printf(" stride_y = [%d]\n", stride_y); + } + test_0(); + #ifndef PROFILE + stop_cycle_counter(); + read_cycle_counter(num_cycles); + if (get_core_id() == 0) { + printf("===> TEST 0: Finished running xpulp_nn_maxpool_i2\n"); + printf("num_cycles = %d\n", num_cycles); + printf("MACs = 1048576\n"); + printf("MACs/cycle = %.4f\n", 1048576/num_cycles); + } + #endif + if (get_core_id() == 0) { + printf("Checking for mismatches..\n"); + n_mismatches = 0; + + for(int i=0; i < 2048; i++) { + if (outputs[i] != exp_outp_0[i]){ + printf("***Mismatch in test 0 at iteration %d: Expected: %x, got: %x\n", i, exp_outp_0[i], outputs[i]); + n_mismatches++; + } + } + } + mismatches_tot += n_mismatches; + + if (get_core_id() == 0) { + printf("Got %d mismatches in %d tests\n", mismatches_tot, 1); + } + return mismatches_tot; +} + + +void call_krnl_0(void) { + uint8_t * pInp; + uint8_t * pIm2ColBuffer; + int8_t * pBias = NULL; + uint8_t * pOut; + int8_t * pWeight; + uint32_t * pThr; + int32_t * pKappa, pLambda; + pInp = inp_l1; + + pOut = outp_l1; +#if KRAKEN_PTEST == 1 + if (pi_core_id() == 0) { + kraken_padframe_aon_pad_gpioa_cfg_chip2pad_set(24, 1); + } +#endif + xpulp_nn_maxpool_i2( + pInp, + pOut, + 32, + 32, + 32, + 16, + 16, + 2, + 2, + 0, + 0, + 0, + 0, + 2, + 2); + +#if KRAKEN_PTEST == 1 + if (pi_core_id() == 0) { + kraken_padframe_aon_pad_gpioa_cfg_chip2pad_set(24, 0); + } +#endif +} + +void test_0(void) { + uint32_t dma_channel = dory_dma_allocate(); + DMA_copy dma_tx = {0}; + // DMA transfer inputs from L2 to L1 + dma_tx.ext = pIn_0; + dma_tx.loc = inp_l1; + dma_tx.number_of_1d_copies = 1; + dma_tx.number_of_2d_copies = 1; + dma_tx.length_1d_copy = 8192; + dma_tx.stride_1d = 1; + dma_tx.stride_2d = 1; + dma_tx.dir = 1; + dma_tx.tid = dma_channel; + dory_dma_memcpy_async(&dma_tx); + call_krnl_0(); + // get outputs back with DMA + dma_tx.dir = 0; + dma_tx.ext = outputs; + dma_tx.loc = outp_l1; + dma_tx.length_1d_copy = 2048; + dory_dma_memcpy_async(&dma_tx); + dory_dma_free(&dma_tx); +} + + + + + + + + + + diff --git a/rt_nn_tests/xpnn_maxpool_2b/xpulp_nn_maxpool_i2.c b/rt_nn_tests/xpnn_maxpool_2b/xpulp_nn_maxpool_i2.c new file mode 100644 index 0000000..293bb62 --- /dev/null +++ b/rt_nn_tests/xpnn_maxpool_2b/xpulp_nn_maxpool_i2.c @@ -0,0 +1,146 @@ +/* + * xpulp_nn_maxpool_i2.c + * Nazareno Bruschi + * Angelo Garofalo + * + * Copyright (C) 2018-2020 University of Bologna + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "pmsis.h" +#include "pulp_nn_utils.h" + + + +void __attribute__ ((noinline)) xpulp_nn_maxpool_i2( + int8_t * pIn, + int8_t * pOut, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + uint16_t dim_im_out_x, + uint16_t dim_im_out_y, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_t, + uint16_t padding_b, + uint16_t padding_l, + uint16_t padding_r, + uint16_t stride_x, + uint16_t stride_y) +{ + int core_id = pi_core_id(); + int n_cores = NUM_CORES; + if (dim_im_in_y < NUM_CORES) + { + n_cores = dim_im_in_y; + } + int Log2Core = log2(n_cores); + int ch_im_in_r = ch_im_in >> 2; + + int chunck = (dim_im_in_y >> Log2Core) + ((dim_im_in_y & (NUM_CORES-1))!=0); + + int start = min(chunck * core_id, dim_im_in_y); + int stop = min(start + chunck, dim_im_in_y); + int i_x, i_y; + + for (i_y = start; i_y < stop; i_y++) + { + for (i_x = 0; i_x < dim_im_out_x; i_x++) + { + /* for each output pixel */ + int8_t *target = pIn + (i_y * dim_im_in_x + i_x) * ch_im_in_r; + uint8_t *win_start; + uint8_t *win_stop; + if (i_x * stride_x - padding_l < 0) + { + win_start = target; + } + else + { + win_start = pIn + (i_y * dim_im_in_x + i_x * stride_x - padding_l) * ch_im_in_r; + } + + if (i_x * stride_x - padding_l + dim_kernel_x >= dim_im_in_x) + { + win_stop = pIn + (i_y * dim_im_in_x + dim_im_in_x) * ch_im_in_r; + } + else + { + win_stop = pIn + (i_y * dim_im_in_x + i_x * stride_x - padding_l + dim_kernel_x) * ch_im_in_r; + } + + /* first step is to copy over initial data */ + for (int i = 0; i< ch_im_in_r; i++) target[i] = win_start[i]; + + /* start the max operation from the second part */ + win_start += ch_im_in_r; + for (; win_start < win_stop; win_start += ch_im_in_r) + { + xpulp_nn_compare_and_replace_if_larger_i2(target, win_start, ch_im_in_r); + } + } + } + + pi_cl_team_barrier(); + if (dim_im_out_y < NUM_CORES) + { + n_cores = dim_im_out_y; + } + Log2Core = log2(n_cores); + int chunck2 = (dim_im_out_y >> Log2Core) + ((dim_im_out_y & (NUM_CORES-1))!=0); + int start2 = chunck2 * core_id; + int stop2 = min(start2 + chunck2, dim_im_out_y); + + /* then does the pooling along y axis */ + for (i_y = start2; i_y < stop2; i_y++) + { + /* for each output row */ + int8_t *target = pOut + i_y * dim_im_out_x * ch_im_in_r; + int8_t *row_start; + int8_t *row_end; + /* setting the starting row */ + if (i_y * stride_y - padding_t < 0) + { + row_start = pIn; + } + else + { + row_start = pIn + (i_y * stride_y - padding_t) * dim_im_in_x * ch_im_in_r; + } + /* setting the stopping row */ + if (i_y * stride_y - padding_t + dim_kernel_y >= dim_im_in_y) + { + row_end = pIn + dim_im_in_y * dim_im_in_x * ch_im_in_r; + } + else + { + row_end = pIn + (i_y * stride_y - padding_t + dim_kernel_y) * dim_im_in_x * ch_im_in_r; + } + + /* copy over the first row */ + for (int i = 0; i< dim_im_out_x * ch_im_in_r; i++) + { + target[i] = (int8_t) row_start[i]; + } + /* move over to next row */ + row_start += ch_im_in_r * dim_im_in_x; + + for (; row_start < row_end; row_start += dim_im_in_x * ch_im_in_r) + { + xpulp_nn_compare_and_replace_if_larger_i2(target, row_start, dim_im_out_x * ch_im_in_r); + } + } + pi_cl_team_barrier(); +} diff --git a/rt_nn_tests/xpnnv2_conv/Makefile b/rt_nn_tests/xpnnv2_conv/Makefile new file mode 100644 index 0000000..19948cc --- /dev/null +++ b/rt_nn_tests/xpnnv2_conv/Makefile @@ -0,0 +1,20 @@ +APP = test +PULP_APP = test +PULP_APP_SRCS = test.c +PULP_APP_SRCS += dory_dma.c +PULP_APP_SRCS += xpulp_nn_mix_conv_u4_u8_i2.c +PULP_APP_SRCS += xpulp_nn_mix_matmul_u4_u8_i2.c + +CORE=8 + + +PULP_CFLAGS += -DNUM_CORES=$(CORE) -I. -O3 +PULP_LDFLAGS += -lc -lm -lgcc -Wl,-print-memory-usage + +PULP_APP_CFLAGS += -DNUM_CORES=$(CORE) -I. -O3 +PULP_APP_LDFLAGS += -lc -lm -lgcc -Wl,-print-memory-usage + +PULP_CFLAGS += -DPULP_RUNTIME -DSINGLE_CORE_DMA -DALWAYS_BLOCK_DMA_TRANSFERS + + +include $(PULP_SDK_HOME)/install/rules/pulp.mk diff --git a/rt_nn_tests/xpnnv2_conv/data_statstest.h b/rt_nn_tests/xpnnv2_conv/data_statstest.h new file mode 100644 index 0000000..d679d0f --- /dev/null +++ b/rt_nn_tests/xpnnv2_conv/data_statstest.h @@ -0,0 +1,1894 @@ +// this file is generated automatically by the python script `generate_statstest.py` + +#ifndef _DATA_H +#define _DATA_H + + + +#define IM2COL_DIM (72 * NUM_CORES * 2) // for NUM_CORES cores +#define OUTPUT_DIM 512 +#define OUTPUT_DIM_FP (1) +uint8_t pWeight_0 [] = { +0x29, +0xc5, +0xac, +0x95, +0x91, +0x84, +0x79, +0x41, +0xf7, +0xd6, +0x8a, +0x4e, +0xa8, +0x85, +0x7f, +0x76, +0x57, +0x20, +0x83, +0xa5, +0xfa, +0x8a, +0xd4, +0xf2, +0x58, +0xa0, +0x7d, +0x60, +0x0a, +0x58, +0x02, +0x04, +0x86, +0xfd, +0xcc, +0xfb, +0x8c, +0xc0, +0xc0, +0x88, +0xde, +0x5d, +0x3b, +0x3c, +0x69, +0x80, +0xd0, +0x38, +0x83, +0xe5, +0x35, +0x27, +0x14, +0x5d, +0x2a, +0xe8, +0xd0, +0xf9, +0xcc, +0x81, +0x16, +0x31, +0xd3, +0xc6, +0xf1, +0xfa, +0xe2, +0x5b, +0x08, +0x6d, +0xa5, +0x01, +0xb2, +0x28, +0x54, +0x06, +0x78, +0x97, +0x40, +0x73, +0xd2, +0x27, +0x96, +0xbd, +0x1f, +0xc0, +0xfa, +0xb8, +0x49, +0x68, +0x75, +0x2f, +0xe5, +0xa4, +0xcb, +0xcc, +0x09, +0x39, +0x85, +0x71, +0xc3, +0xfb, +0x6f, +0x9b, +0x42, +0x0f, +0x91, +0x1b, +0x66, +0xaf, +0xfb, +0xc8, +0xf8, +0xba, +0x9d, +0x0a, +0xd2, +0xa8, +0x39, +0x4a, +0x2d, +0xcd, +0xf8, +0xc4, +0x8c, +0x02, +0xe2, +0x4f, +0x68, +0xff, +0x96, +0x7f, +0x96, +0xad, +0xa5, +0xf2, +0xb8, +0xb8, +0x5d, +0x02, +0x4c, +0x19, +0xb0, +0x11, +0x51, +0x8d, +0xb3, +0xb1, +0x3f, +0xcd, +0xaf, +0x85, +0x94, +0x65, +0x24, +0xa1, +0xbb, +0x3e, +0xa1, +0xe2, +0xab, +0xb4, +0x62, +0x6c, +0xf5, +0x2f, +0x5a, +0xbe, +0x68, +0xba, +0x8a, +0xcf, +0xa1, +0x3f, +0xfa, +0xb8, +0xe9, +0xe8, +0xfa, +0x4e, +0xdd, +0x57, +0x45, +0x1a, +0x5c, +0xfd, +0x58, +0x77, +0x52, +0xd6, +0x15, +0x07, +0x39, +0xf2, +0x34, +0xf2, +0x66, +0x90, +0xea, +0x42, +0x42, +0x43, +0x36, +0xd7, +0xc3, +0xb8, +0x2c, +0x10, +0xd0, +0x90, +0x2d, +0xf9, +0x6a, +0xbc, +0x57, +0x19, +0x69, +0x60, +0x65, +0x7f, +0xee, +0x10, +0x06, +0x71, +0xe4, +0x49, +0x5b, +0x5a, +0x5a, +0x9c, +0x6f, +0x87, +0x68, +0x44, +0xb4, +0xf8, +0xe8, +0xae, +0x75, +0xe0, +0x0f, +0x43, +0x51, +0x71, +0xde, +0xce, +0x56, +0x13, +0x3d, +0xf9, +0x80, +0x1f, +0x0a, +0x9e, +0x2b, +0xa7, +0x73, +0x76, +0xe2, +0x36, +0x16, +0x42, +0x0c, +0x73, +0x59, +0xf6, +0x53, +0xaf, +0x77, +0x12, +0x67, +0x33, +0xb7, +0x90, +0x41, +0x55, +0x90, +0xbf, +0x8c, +0x31, +0xfc, +0xdd, +0x9c, +0x42, +0x9a, +0xfd, +0x30, +0xe5, +0x12, +0x12, +0x6c, +0xc3, +0xa6, +0xd8, +0xb0, +0x41, +0x4c, +0xd0, +0x27, +0x97, +0x7f, +0x8b, +0x4c, +0x44, +0xb0, +0x7f, +0xba, +0x18, +0x37, +0x46, +0x9e, +0xdc, +0xbf, +0xd8, +0x97, +0xce, +0x3b, +0x61, +0x7e, +0x9b, +0x36, +0xe7, +0x0c, +0x4e, +0x57, +0x21, +0x36, +0x18, +0x4d, +0x17, +0x41, +0x83, +0xd4, +0x8b, +0xf7, +0x53, +0x4d, +0xff, +0x98, +0xbb, +0x79, +0x38, +0x2e, +0x22, +0x8f, +0xe5, +0x5e, +0x81, +0xdb, +0xf0, +0x2b, +0x16, +0xf6, +0x69, +0xb1, +0xe5, +0xd6, +0xab, +0xc6, +0xb1, +0xd0, +0x62, +0x57, +0xa4, +0x6c, +0xe8, +0x0e, +0x65, +0xb6, +0x18, +0x7a, +0xe7, +0x99, +0x92, +0x68, +0x83, +0x7e, +0xe3, +0xca, +0x61, +0xb0, +0x5e, +0x4d, +0x25, +0x92, +0xe5, +0x02, +0xbb, +0x81, +0xfa, +0x81, +0x92, +0x9d, +0x80, +0xd7, +0xf4, +0x73, +0xe3, +0x63, +0x64, +0x5a, +0x26, +0x98, +0x55, +0x32, +0x65, +0xf9, +0x5c, +0x5d, +0xdc, +0x2e, +0x59, +0xf1, +0x90, +0xf5, +0x78, +0x05, +0xb1, +0x5c, +0xde, +0xdd, +0x93, +0x3f, +0xd8, +0xc2, +0x2a, +0x94, +0xfd, +0x51, +0x72, +0x9c, +0xda, +0x58, +0xc6, +0x94, +0xe5, +0xed, +0x3d, +0xf3, +0x7a, +0xd8, +0x91, +0xbf, +0xeb, +0x31, +0xda, +0xe4, +0x89, +0x74, +0x31, +0x86, +0x42, +0xe2, +0x1b, +0x7e, +0x28, +0xaf, +0xf8, +0xfd, +0x0b, +0x9a, +0xa7, +0x39, +0xd8, +0x9d, +0x25, +0x7f, +0xe5, +0xc4, +0x7f, +0x98, +0x9f, +0x79, +0x5f, +0x4b, +0x7a, +0x05, +0x07, +0x6c, +0xe9, +0x1f, +0xd0, +0x60, +0xfb, +0x7f, +0xf6, +0x5c, +0xa2, +0x3d, +0x2c, +0x22, +0x7b, +0xbe, +0x39, +0x0a, +0xfc, +0x8f, +0x8b, +0x80, +0x6f, +0x6f, +0x1b, +0x28, +0x9b, +0x79, +0x0e, +0xb3, +0x57, +0x07, +0x45, +0x61, +0x83, +0x12, +0x7a, +0x53, +0x3d, +0x80, +0xf1, +0xe1, +0xd1, +0x40, +0x26, +0xfd, +0xd8, +0x81, +0xab, +0xbe, +0x16, +0xfa, +0xf2, +0x25, +0x15, +0x8f, +0xcd, +0xc7, +0xbe, +0xe1, +0xd9, +0x95, +0x3b, +0xbd, +0x6b, +0x81, +0x59, +0x26, +0x27, +0xe8, +0x1b, +0x74, +0x7b, +0x95, +0xb4, +0xe0, +0x60, +0x0b, +0x44, +0x67, +0x7e, +0xb9, +0xfb, +0xc2, +0xc3, +0xb2, +0xd5, +0x22, +0x39, +0xae, +0xb2, +0xd9, +0x2e, +0x63, +0x19, +0x04, +0xe5, +0x69, +0xf5, +0x5f, +0x2a, +0x9f, +0x8f, +0xe2, +0xab, +0x89, +0x8d, +0xd9, +0x23, +0x45, +0x75, +0xa2, +0x2e, +0x1d, +0xc2, +0xe4, +0xf0, +0xe0, +0xbb, +0x26, +0x8b, +0x7c, +0xd4, +0xaa, +0x6d, +0x74, +0x0e, +0xa7, +0x73, +0x44, +0xc2, +0xee, +0x74, +0xd4, +0x07, +0xf9, +0xdd, +0xd6, +0x57, +0x84, +0xdd, +0xee, +0x67, +0x82, +0xd1, +0x52, +0xb3, +0x35, +0xb3, +0xb4, +0x3e, +0x19, +0xd7, +0x55, +0x22, +0xf0, +0xdd, +0xe1, +0x80, +0x15, +0x71, +0xff, +0x58, +0x87, +0xe2, +0xf2, +0xd4, +0x05, +0x68, +0x46, +0xf2, +0x22, +0xd0, +0x46, +0xa8, +0xa4, +0x16, +0x81, +0xc5, +0x7d, +0x1b, +0x50, +0x25, +0x91, +0xcd, +0x29, +0xa6, +0x35, +0x32, +0xf5, +0xff, +0x53, +0xd7, +0x00, +0xf6, +0xab, +0x39, +0xac, +0x85, +0xe9, +0x1a, +0x80, +0x1f, +0x89, +0x30, +0x77, +0x9a, +0x5e, +0xb2, +0xdb, +0x74, +0x53, +0x48, +0x6a, +0x91, +0x11, +0xf0, +0xd8, +0x94, +0x63, +0xbc, +0x32, +0x84, +0x55, +0x04, +0x84, +0x8a, +0x29, +0x38, +0x9c, +0x2c, +0x14, +0x23, +0xfe, +0xb9, +0x88, +0x6e, +0xac, +0xf4, +0xcf, +0xd6, +0x4a, +0xe5, +0x19, +0xad, +0x80, +0x4b, +0x34, +0x0f, +0xbc, +0x93, +0x86, +0x1c, +0x77, +0x1c, +0x7e, +0xda, +0x39, +0xf3, +0xb0, +0x7b, +0xae, +0x0a, +0x4a, +0x49, +0xba, +0x69, +0xf5, +0xa5, +0x05, +0x3b, +0xab, +0xfd, +0xa1, +0xc6, +0xc7, +0x8d, +0x7e, +0x1a, +0x1d, +0xa4, +0x6d, +0x54, +0xe2, +0x1b, +0xb9, +0x46, +0x42, +0xbe, +0xc9, +0x6a, +0xc7, +0x14, +0xa1, +0xd4, +0x27, +0x39, +0x65, +0xf8, +0xb3, +0xf4, +0x1a, +0x31, +0x9a, +0xc5, +0x74, +0x63, +0xb3, +0xa9, +0x10, +0xe2, +0x22, +0x1d, +0xc6, +0x20, +0x00, +0x58, +0xa7, +0xaa, +0x82, +0x25, +0x71, +0xf6, +0xb0, +0x5d, +0xd8, +0xeb, +0xf5, +0x17, +0xd0, +0x04, +0x07, +0xac, +0xf5, +0x63, +0x7a, +0x26, +0x0a, +0x68, +0xe3, +0x74, +0xc5, +0x44, +0x44, +0xd8, +0xf3, +0xa5, +0x99, +0x77, +0xc4, +0x48, +0x47, +0xc0, +0x94, +0xd6, +0x27, +0x79, +0x3d, +0x0a, +0x83, +0x46, +0x0b, +0x8f, +0xd7, +0x03, +0x7c, +0xa7, +0x35, +0xd5, +0x70, +0xb2, +0x19, +0x29, +0x14, +0xb6, +0xbe, +0x61, +0xfb, +0x5c, +0x04, +0xf4, +0x7f, +0xb4, +0xbd, +0xcb, +0x4c, +0xae, +0xd0, +0x20, +0x3e, +0xd9, +0x25, +0xcc, +0xa9, +0xd2, +0x13, +0xf7, +0x66, +0x4e, +0xbe, +0xeb, +0xed, +0x6b, +0xb0, +0x9c, +0xd3, +0x94, +0x21, +0x33, +0x70, +0x16, +0x53, +0xfe, +0x21, +0x08, +0xf5, +0xbc, +0x1b, +0xb1, +0x92, +0x3a, +0xf4, +0xd2, +0xc7, +0x40, +0x96, +0x01, +0xbc, +0xd5, +0x96, +0x35, +0x17, +0xa0, +0x0c, +0x1b, +0x85, +0x2e, +0xb3, +0xab, +0x55, +0xcb, +0xc0, +0xe0, +0x75, +0x61, +0xf8, +0xa6, +0x96, +0xa2, +0x3f, +0x57, +0xd6, +0xb7, +0xfc, +0x8a, +0x6a, +0x6c, +0xcc, +0x38, +0x7f, +0x8c, +0x99, +0x6e, +0x5e, +0x19, +0x23, +0x21, +0xb0, +0xaa, +0x77, +0x43, +0x05, +0x9b, +0x70, +0xd4, +0xde, +0xf8, +0x7d, +0xbb, +0xad, +0x28, +0x4e, +0xc3, +0x5f, +0x97, +0x1d, +0x79, +0xd9, +0x55, +0xce, +0x28, +0x13, +0x91, +0xc0, +0x94, +0x5b, +0x04, +0x70, +0xcc, +0xd8, +0x38, +0xa9, +0x72, +0x0e, +0xd1, +0x93, +0xe4, +0x81, +0x47, +0x29, +0xec, +0x0f, +0x4c, +0x5d, +0x50, +0x6e, +0xd7, +0xa2, +0xe3, +0x4e, +0x58, +0x29, +0x05, +0xa2, +0x37, +0x27, +0xfe, +0x84, +0x51, +0xac, +0xc2, +0xc8, +0x03, +0xe6, +0x5f, +0xea, +0x15, +0x25, +0x7a, +0x39, +0x60, +0xd1, +0xc8, +0x94, +0xb3, +0xf9, +0x8b, +0x20, +0x45, +0xec, +0x75, +0x54, +0xd1, +0xdd, +0x6a, +0x39, +0x31, +0xc9, +0x62, +0x67, +0x84, +0xb3, +0x47, +0xbb, +0x10, +0xb1, +0x0f, +0x5e, +0x11, +0x00, +0x1e, +0xc5, +0x79, +0xf9, +0xd9, +0xb7, +0x18, +0x0a, +0x55, +0x1d, +0x99, +0xd5, +0x46, +0x2a, +0x22, +0xd9, +0x2e, +0xc3, +0x2d, +0xd1, +0x9e, +0xb9, +0x3a, +0x32, +0x1a, +0x13, +0xdb, +0xe5, +0x45, +0x1a, +0x83, +0x38, +0xec, +0x45, +0x7b, +0x87, +0x01, +0x3c, +0x32, +0xd3, +0x60, +0x09, +0xdd, +0xce, +0x87, +0xa3, +0x03, +0x02, +0x91, +0xfa, +0xc5, +0x4d, +0x4d, +0x08, +0x6d, +0xca, +0x9e, +0xfa, +0x7e, +0x8c, +0xdf, +0x3e, +0xb3, +0x10, +0xfb, +0xa3, +0x2f, +0xef, +0x7e, +0x1e, +0x9f, +0xd3, +0x78, +0xfb, +0x5f, +0x50, +0x4c, +0xaa, +0x16, +0x0c, +0x35, +0x46, +0x10, +0x3c, +0x67, +0xaa, +0x95, +0x8a, +0x38, +0xf3, +0xb5, +0x07, +0xdb, +0x6c, +0x52, +0xde, +0xc6, +0x77, +0x0e, +0xd0, +0xf7, +0xea, +0x1f, +0x96, +0xae +}; + +uint8_t pIn_0 [] = { +0x09, +0xe8, +0x1c, +0x6f, +0x55, +0xe1, +0xa3, +0x4d, +0xad, +0x94, +0x4a, +0x9d, +0x90, +0xfc, +0x76, +0xc9, +0x84, +0xce, +0xa8, +0x18, +0xe2, +0x30, +0x85, +0x41, +0x6f, +0x11, +0x09, +0xff, +0x07, +0xb0, +0x5b, +0xe4, +0x40, +0xf3, +0x8f, +0xcd, +0xa3, +0x2f, +0x85, +0x67, +0x31, +0x96, +0xc2, +0x86, +0x1d, +0xe5, +0xc1, +0xee, +0x0b, +0x4d, +0x50, +0xa6, +0x00, +0x69, +0xff, +0x8c, +0x4c, +0xb5, +0x46, +0xd5, +0x14, +0xd0, +0xdb, +0x47, +0xf9, +0x2d, +0x77, +0x9a, +0x92, +0xa4, +0xe8, +0xab, +0xbd, +0xd3, +0x88, +0xb6, +0x00, +0xbc, +0xb0, +0xe7, +0x60, +0xd9, +0x8b, +0x1b, +0x9e, +0x06, +0x95, +0x99, +0x8d, +0x6e, +0x21, +0x20, +0xa3, +0x5e, +0x99, +0x27, +0xb1, +0x7d, +0xce, +0xdc, +0xcf, +0xd6, +0xe8, +0x16, +0xaa, +0xec, +0x67, +0x8c, +0x23, +0xd0, +0x15, +0xa0, +0xe8, +0x86, +0x2b, +0x90, +0xe1, +0xb2, +0x5b, +0x13, +0x19, +0xbe, +0x8c, +0x9e, +0x12, +0x13, +0xeb, +0x69 +}; + +int32_t pLambda_0 [] = { +0x00247d20, +0x001b6100, +0x00124840, +0x00247d20, +0x00247d20, +0x00124840, +0x001b6100, +0x00247d20, +0x00092c20, +0x00247d20, +0x001b6100, +0x00124840, +0x00124840, +0x00124840, +0x00124840, +0x001b6100, +0x00124840, +0x00124840, +0x00092c20, +0x00124840, +0x001b6100, +0x00092c20, +0x00124840, +0x001b6100, +0x001b6100, +0x00247d20, +0x00247d20, +0x00092c20, +0x001b6100, +0x00092c20, +0x00247d20, +0x001b6100 +}; + +int32_t pKappa_0 [] = { +0x00000acb, +0x00000818, +0x00000566, +0x00000acb, +0x00000acb, +0x00000566, +0x00000818, +0x00000acb, +0x000002b3, +0x00000acb, +0x00000818, +0x00000566, +0x00000566, +0x00000566, +0x00000566, +0x00000818, +0x00000566, +0x00000566, +0x000002b3, +0x00000566, +0x00000818, +0x000002b3, +0x00000566, +0x00000818, +0x00000818, +0x00000acb, +0x00000acb, +0x000002b3, +0x00000818, +0x000002b3, +0x00000acb, +0x00000818 +}; + + +/* -----------EXPECTED OUTPUTS----------- */ +uint8_t exp_outp_0 [] = { +0xbb, +0x94, +0x64, +0xc4, +0x8c, +0x6e, +0x90, +0xff, +0x34, +0xbe, +0x8a, +0x76, +0x5f, +0x58, +0x58, +0x88, +0x6a, +0x6b, +0x34, +0x5f, +0x77, +0x30, +0x66, +0xa7, +0xa9, +0xbe, +0xe5, +0x33, +0xc3, +0x2d, +0xbc, +0x80, +0x91, +0x97, +0x53, +0xb6, +0x25, +0x55, +0xa3, +0xc9, +0x29, +0x7f, +0x79, +0x66, +0x58, +0x3e, +0x3c, +0x79, +0x46, +0x68, +0x2d, +0x51, +0x5d, +0x2a, +0x65, +0x92, +0x5b, +0x6c, +0xbd, +0x33, +0x97, +0x26, +0x79, +0x7e, +0xb6, +0x98, +0x45, +0xa0, +0x37, +0x54, +0x9a, +0xd5, +0x20, +0x87, +0x7d, +0x69, +0x5f, +0x43, +0x4b, +0x7e, +0x49, +0x77, +0x26, +0x5f, +0x54, +0x2b, +0x77, +0x91, +0x71, +0x94, +0xec, +0x27, +0x85, +0x27, +0x78, +0x6a, +0xe0, +0xb9, +0x76, +0xb4, +0x9e, +0x6b, +0xc0, +0xf0, +0x34, +0xd6, +0x7d, +0x7a, +0x5a, +0x55, +0x69, +0x86, +0x52, +0x7e, +0x34, +0x6b, +0x80, +0x39, +0x80, +0xc3, +0x90, +0xc0, +0xf0, +0x3d, +0xb4, +0x38, +0xc6, +0xb3, +0xa9, +0x7c, +0x4e, +0x5d, +0x68, +0x74, +0xa2, +0xc5, +0x26, +0xac, +0x7d, +0x5e, +0x44, +0x48, +0x55, +0x77, +0x52, +0x6e, +0x30, +0x60, +0x5d, +0x1f, +0x57, +0x84, +0x8f, +0x99, +0xa4, +0x29, +0x97, +0x2e, +0x80, +0x6f, +0x69, +0x63, +0x42, +0x35, +0x00, +0x61, +0x68, +0x9c, +0x21, +0x82, +0x36, +0x38, +0x10, +0x24, +0x48, +0x39, +0x16, +0x55, +0x14, +0x2c, +0x28, +0x22, +0x43, +0x58, +0x41, +0x4b, +0x8c, +0x21, +0x53, +0x22, +0x58, +0x49, +0x72, +0x62, +0x27, +0x13, +0x0b, +0x52, +0x89, +0x7b, +0x19, +0x93, +0x6b, +0x4c, +0x1b, +0x22, +0x41, +0x36, +0x1a, +0x61, +0x1e, +0x29, +0x4b, +0x12, +0x54, +0x5d, +0x49, +0x68, +0x93, +0x1d, +0x72, +0x26, +0x5a, +0x5b, +0xe8, +0x9d, +0x64, +0x8b, +0x71, +0x65, +0xb3, +0xb4, +0x2e, +0xd2, +0x8e, +0x69, +0x5b, +0x48, +0x6c, +0x6e, +0x33, +0x70, +0x2c, +0x57, +0x67, +0x39, +0x75, +0xb2, +0x80, +0xba, +0xdf, +0x38, +0x9c, +0x33, +0xc1, +0x94, +0x92, +0x67, +0x49, +0x90, +0x5e, +0x75, +0x78, +0xd7, +0x2b, +0xaa, +0x65, +0x72, +0x43, +0x41, +0x56, +0x5e, +0x4c, +0x55, +0x2d, +0x5a, +0x6a, +0x25, +0x54, +0x97, +0x89, +0xcb, +0xab, +0x24, +0x9f, +0x27, +0x84, +0x6b, +0x87, +0x73, +0x3b, +0x25, +0x00, +0x62, +0x63, +0x82, +0x16, +0x7b, +0x38, +0x47, +0x22, +0x1c, +0x49, +0x57, +0x24, +0x58, +0x26, +0x33, +0x25, +0x1c, +0x54, +0x81, +0x31, +0x5f, +0x7f, +0x28, +0x6f, +0x23, +0x52, +0x5b, +0x8c, +0x65, +0x39, +0x34, +0x05, +0x5d, +0x7f, +0x7f, +0x1c, +0x7c, +0x4d, +0x73, +0x11, +0x21, +0x3e, +0x5d, +0x26, +0x55, +0x1a, +0x58, +0x1d, +0x22, +0x43, +0x65, +0x42, +0x56, +0xac, +0x26, +0x5c, +0x2c, +0x4c, +0x5d, +0xf7, +0x87, +0x58, +0x65, +0x59, +0x62, +0x95, +0xa8, +0x27, +0xad, +0x80, +0x5b, +0x51, +0x54, +0x70, +0x6a, +0x34, +0x77, +0x27, +0x75, +0x75, +0x30, +0x6c, +0x95, +0x88, +0xa9, +0xca, +0x2c, +0x7c, +0x37, +0x8f, +0x84, +0xe0, +0xa4, +0x62, +0x7d, +0xaa, +0x77, +0xa7, +0xfd, +0x2f, +0xc5, +0x8a, +0x79, +0x58, +0x68, +0x6b, +0x80, +0x55, +0x7c, +0x43, +0x7b, +0x84, +0x2f, +0x69, +0xa7, +0xa8, +0xf3, +0xbb, +0x35, +0xbd, +0x30, +0xd8, +0x82, +0x9a, +0xa9, +0x5b, +0x60, +0x7f, +0x87, +0x82, +0xc9, +0x2c, +0xcf, +0x7f, +0x71, +0x51, +0x63, +0x61, +0x7d, +0x35, +0x6a, +0x31, +0x5f, +0x63, +0x38, +0x50, +0xaf, +0x6d, +0xd0, +0x8d, +0x31, +0x88, +0x31, +0xc9, +0x8b, +0xaa, +0x8e, +0x6a, +0x6c, +0x82, +0x78, +0x83, +0xc4, +0x31, +0xdc, +0x77, +0x77, +0x4c, +0x57, +0x6c, +0x8b, +0x47, +0x6b, +0x3b, +0x69, +0x7d, +0x36, +0x52, +0xab, +0x7b, +0xda, +0xbc, +0x33, +0xa2, +0x2e, +0xbe, +0x75, +0xf6, +0xab, +0x6a, +0xb6, +0xad, +0x7b, +0xa4, +0xc6, +0x33, +0xe6, +0x8e, +0x7b, +0x77, +0x62, +0x79, +0x84, +0x4a, +0x79, +0x34, +0x7d, +0x88, +0x36, +0x6a, +0xbf, +0x88, +0xf9, +0xdf, +0x3d, +0x98, +0x3a, +0xfd, +0xaa +}; + + + +L1_DATA uint32_t threshs_l1 [32] = {0}; +L1_DATA int32_t kappa_l1 [32] = {0}; +L1_DATA int32_t lambda_l1 [32] = {0}; +L1_DATA uint8_t inp_l1 [128] = {0}; +L1_DATA uint8_t outp_l1 [512] = {0}; +L1_DATA int8_t wt_l1 [1152] = {0}; +L1_DATA uint8_t im2col_l1 [IM2COL_DIM] = {0}; + +#endif diff --git a/rt_nn_tests/xpnnv2_conv/dory_dma.c b/rt_nn_tests/xpnnv2_conv/dory_dma.c new file mode 100644 index 0000000..61c9116 --- /dev/null +++ b/rt_nn_tests/xpnnv2_conv/dory_dma.c @@ -0,0 +1,176 @@ +#include "dory_dma.h" + +#include "pmsis.h" + +#ifndef MCHAN_BASE_ADDR +// FIXME: For GAP9, this must point to ARCHI_MCHAN_EXT_ADDR!!! +// In PULP-SDK for Kraken, this is fixed. +// GAP8 hardware to be tested... +#define MCHAN_BASE_ADDR (ARCHI_MCHAN_DEMUX_ADDR) // CLUSTER_MCHAN_ADDR +#endif +#define MCHAN_EVENT +//#define MCHAN_POLLED +#ifdef MCHAN_EVENT +#define MCHAN_EVENT_BIT (ARCHI_CL_EVT_DMA0) // 8 +#endif +#include "mchan.h" + + +#if defined(MCHAN_POLLED) +#define MCHAN_FLAGS (MCHAN_CMD_FLAG_INCREMENTAL) +#elif defined(MCHAN_EVENT) +#define MCHAN_FLAGS (MCHAN_CMD_FLAG_EVENT_ENABLE | MCHAN_CMD_FLAG_INCREMENTAL) +#elif defined(MCHAN_INTERRUPT) +#define MCHAN_FLAGS (MCHAN_CMD_FLAG_INTERRUPT_ENABLE | MCHAN_CMD_FLAG_INCREMENTAL) +#endif + +#define MCHAN_FLAGS_1D (MCHAN_FLAGS) +#define MCHAN_FLAGS_2D (MCHAN_FLAGS | MCHAN_CMD_FLAG_2D_TRANSFER_EXTERNAL) + +#define MIN(a,b) ((a)<(b)?(a):(b)) + +void dory_dma_memcpy_hwc_to_chw(DMA_copy *copy){ + int start_pixel, stop_pixel; // "pixel" is a misnomer; the CHANNELS are divided between the cores + // this function assumes that a DW tile is always as wide as the complete feature map (this is enforced by DORY's tiler) + // if there is only 1 DMA control unit for the cluster (e.g., Kraken), we can't execute DMA calls on multiple clusters. +#ifndef SINGLE_CORE_DMA + int core_id = pi_core_id(); + int Log2Core = log2(NUM_CORES); + int number_of_copies_per_core = (copy->length_1d_copy >> Log2Core) + ((copy->length_1d_copy & (NUM_CORES-1))!=0); + start_pixel = MIN(number_of_copies_per_core * core_id, copy->length_1d_copy); + stop_pixel = MIN(start_pixel + number_of_copies_per_core, copy->length_1d_copy); +#else + start_pixel = 0; + stop_pixel = copy->length_1d_copy; +#endif + void * loc = copy->loc + copy->number_of_1d_copies*copy->number_of_2d_copies*start_pixel; + void * ext = copy->ext + start_pixel; + const int size_2d = copy->number_of_1d_copies * copy->number_of_2d_copies; + + for (int i=start_pixel; idir << MCHAN_CMD_SHIFT_DIRECTION | MCHAN_FLAGS_2D, + .size = size_2d, + .ext = ext, + .loc = loc, + .ext_size_1d = 1, // one byte at a time... + .ext_stride_1d = copy->stride_1d + }; +#ifdef SINGLE_CORE_DMA + if (pi_core_id() == 0) { +#endif + mchan_transfer_push_2d(trans); +#ifdef SINGLE_CORE_DMA + } +#endif +#ifdef ALWAYS_BLOCK_DMA_TRANSFERS // needed on GAP8 board + dory_dma_barrier(copy); +#endif + ext += 1; // next channel + loc += copy->number_of_1d_copies * copy->number_of_2d_copies; + } +} + +void dory_dma_memcpy_1d_async(DMA_copy *copy) { + if (pi_core_id() == 0) { + mchan_transfer_t trans = { + .cmd = copy->length_1d_copy * copy->number_of_1d_copies * copy->number_of_2d_copies | (copy->dir << MCHAN_CMD_SHIFT_DIRECTION) | MCHAN_FLAGS_1D, + .size = copy->length_1d_copy * copy->number_of_1d_copies * copy->number_of_2d_copies, + .ext = copy->ext, + .loc = copy->loc + }; + mchan_transfer_push_1d(trans); + } +} + +void dory_dma_memcpy_2d_async(DMA_copy *copy) { + if (pi_core_id() == 0) { + const int size_2d = copy->number_of_1d_copies * copy->length_1d_copy * copy->number_of_2d_copies; + const int stride = (copy->number_of_2d_copies == 1) ? copy->stride_1d : copy->stride_2d; + const int size_1d = (copy->number_of_2d_copies == 1) ? copy->length_1d_copy : copy->length_1d_copy * copy->number_of_1d_copies; + + mchan_transfer_t trans = { + .cmd = size_2d | copy->dir << MCHAN_CMD_SHIFT_DIRECTION | MCHAN_FLAGS_2D, + .size = size_2d, + .ext = copy->ext, + .loc = copy->loc, + .ext_size_1d = size_1d, + .ext_stride_1d = stride + }; + mchan_transfer_push_2d(trans); + } +} + +void dory_dma_memcpy_3d_async(DMA_copy *copy) { + int start_pixel, stop_pixel; +#ifndef SINGLE_CORE_DMA + int core_id = pi_core_id(); + int Log2Core = log2(NUM_CORES); + int number_of_2d_copies_per_core = (copy->number_of_2d_copies >> Log2Core) + ((copy->number_of_2d_copies & (NUM_CORES-1))!=0); + start_pixel = MIN(number_of_2d_copies_per_core * core_id, copy->number_of_2d_copies); + stop_pixel = MIN(start_pixel + number_of_2d_copies_per_core, copy->number_of_2d_copies); +#else + start_pixel = 0; + stop_pixel = copy->number_of_2d_copies; +#endif + void *ext = copy->ext + copy->stride_2d*start_pixel; + void *loc = copy->loc + copy->length_1d_copy*copy->number_of_1d_copies*start_pixel; + const int size_2d = copy->number_of_1d_copies * copy->length_1d_copy; + for (int i = start_pixel; i < stop_pixel; i++) { + mchan_transfer_t trans = { + .cmd = size_2d | copy->dir << MCHAN_CMD_SHIFT_DIRECTION | MCHAN_FLAGS_2D, + .size = size_2d, + .ext = ext, + .loc = loc, + .ext_size_1d = copy->length_1d_copy, + .ext_stride_1d = copy->stride_1d + }; +#ifdef SINGLE_CORE_DMA + if (pi_core_id() == 0) { +#endif + mchan_transfer_push_2d(trans); +#ifdef SINGLE_CORE_DMA + } +#endif +#ifdef ALWAYS_BLOCK_DMA_TRANSFERS // needed on GAP8 board + dory_dma_barrier(copy); +#endif + loc += size_2d; + ext += copy->stride_2d; + } +} + +void dory_dma_memcpy_async(DMA_copy *copy) { + if (copy->hwc_to_chw == 1) { + dory_dma_memcpy_hwc_to_chw(copy); + } + else if ((copy->number_of_2d_copies == 1 && copy->number_of_1d_copies == 1) || (copy->stride_1d == copy->length_1d_copy && copy->number_of_1d_copies * copy->length_1d_copy == copy->stride_2d) || (copy->number_of_2d_copies == 1 && copy->length_1d_copy == copy->stride_1d)) { + dory_dma_memcpy_1d_async(copy); + } else if ((copy->number_of_2d_copies == 1) || (copy->length_1d_copy == copy->stride_1d)) {// wrong! + dory_dma_memcpy_2d_async(copy); + } else { + dory_dma_memcpy_3d_async(copy); + } +#ifdef ALWAYS_BLOCK_DMA_TRANSFERS + dory_dma_barrier(copy); +#endif +} + +void dory_dma_free(DMA_copy *copy) { + mchan_transfer_free(copy->tid); +} + +void dory_dma_barrier(DMA_copy *copy) { +#ifdef SINGLE_CORE_DMA + // if DMA is only used by a single core (only 1 ctrl interface), other cores must not access its register file. Instead, they should all wait for core 0 to confirm the transfer is over. + if (pi_core_id() == 0) + mchan_transfer_wait(copy->tid); + pi_cl_team_barrier(0); +#else + mchan_transfer_wait(copy->tid); +#endif +} + +int dory_dma_allocate() { + return mchan_transfer_get_id(); +} diff --git a/rt_nn_tests/xpnnv2_conv/dory_dma.h b/rt_nn_tests/xpnnv2_conv/dory_dma.h new file mode 100644 index 0000000..e0b3ef3 --- /dev/null +++ b/rt_nn_tests/xpnnv2_conv/dory_dma.h @@ -0,0 +1,52 @@ +/* + * dory.h + * Alessio Burrello + * + * Copyright (C) 2019-2020 University of Bologna + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef _DORY_DMA_H +#define _DORY_DMA_H + +typedef struct +{ + void *ext; + void *loc; + unsigned short hwc_to_chw; + unsigned short stride_2d; + unsigned short number_of_2d_copies; + unsigned short stride_1d; + unsigned short number_of_1d_copies; + unsigned short length_1d_copy; + int dir; // 0 l1->l2, 1 l2->l1 + int tid; +} DMA_copy; + +void dory_dma_memcpy_hwc_to_chw(DMA_copy *copy); + +void dory_dma_memcpy_1d_async(DMA_copy *copy); + +void dory_dma_memcpy_2d_async(DMA_copy *copy); + +void dory_dma_memcpy_3d_async(DMA_copy *copy); + +void dory_dma_memcpy_async(DMA_copy *copy); + +void dory_dma_free(DMA_copy *copy); + +void dory_dma_barrier(DMA_copy *copy); + +int dory_dma_allocate(); +#endif diff --git a/rt_nn_tests/xpnnv2_conv/mchan.h b/rt_nn_tests/xpnnv2_conv/mchan.h new file mode 100644 index 0000000..95882ab --- /dev/null +++ b/rt_nn_tests/xpnnv2_conv/mchan.h @@ -0,0 +1,137 @@ +#ifndef _MCHAN_H +#define _MCHAN_H + +// Requires to have MCHAN_BASE_ADDR, MCHAN_EVENT defined outside of header +#ifndef MCHAN_BASE_ADDR +#error "[mchan.h] MCHAN_BASE_ADDR not defined!" +#endif + +#if !defined(MCHAN_EVENT) && !defined(MCHAN_POLLED) +#error "[mchan.h] Nor MCHAN_EVENT nor MCHAN_POLLED defined!" +#endif + +#if defined(MCHAN_EVENT) && !defined(MCHAN_EVENT_BIT) +#error "[mchan.h] MCHAN_EVENT_BIT should be defined when using events as signalization!" +#endif + +#include "pmsis.h" + +#define MCHAN_CMD_OFFSET 0 +#define MCHAN_STATUS_OFFSET 4 + +#define MCHAN_CMD_ADDR (MCHAN_BASE_ADDR + MCHAN_CMD_OFFSET) +#define MCHAN_STATUS_ADDR (MCHAN_BASE_ADDR + MCHAN_STATUS_OFFSET) + +#define READ_REG(addr) (*(volatile int*)(addr)) +#define WRITE_REG(addr, value) do { *(volatile int*)(addr) = (int)value; } while (0) + +#define MCHAN_READ_CMD() READ_REG(MCHAN_CMD_ADDR) +#define MCHAN_WRITE_CMD(value) WRITE_REG(MCHAN_CMD_ADDR, value) + +#define MCHAN_READ_STATUS() READ_REG(MCHAN_STATUS_ADDR) +#define MCHAN_WRITE_STATUS(value) WRITE_REG(MCHAN_STATUS_ADDR, value) + +// MCHAN version 7 has 1 more bit for the transfer length, so all the flag offsets are shifted by 1. Also, LOC (TCDM) striding is not supported in v6. +#if MCHAN_VERSION==7 +#define MCHAN_TRANSFER_LEN_SIZE (17) +#else +#define MCHAN_TRANSFER_LEN_SIZE (16) +#endif + +#define MCHAN_CMD_FLAG_DIRECTION_LOC2EXT (0 << (MCHAN_TRANSFER_LEN_SIZE + 0)) +#define MCHAN_CMD_FLAG_DIRECTION_EXT2LOC (1 << (MCHAN_TRANSFER_LEN_SIZE + 0)) +#define MCHAN_CMD_FLAG_INCREMENTAL (1 << (MCHAN_TRANSFER_LEN_SIZE + 1)) +#define MCHAN_CMD_FLAG_2D_TRANSFER_EXTERNAL (1 << (MCHAN_TRANSFER_LEN_SIZE + 2)) +#define MCHAN_CMD_FLAG_EVENT_ENABLE (1 << (MCHAN_TRANSFER_LEN_SIZE + 3)) +#define MCHAN_CMD_FLAG_INTERRUPT_ENABLE (1 << (MCHAN_TRANSFER_LEN_SIZE + 4)) +#define MCHAN_CMD_FLAG_BROADCAST_FINISH (1 << (MCHAN_TRANSFER_LEN_SIZE + 5)) +#if MCHAN_VERSION==7 +#define MCHAN_CMD_FLAG_2D_TRANSFER_LOCAL (1 << (MCHAN_TRANSFER_LEN_SIZE + 6)) // can only be used with MCHAN v7 +#endif +#define MCHAN_CMD_SHIFT_DIRECTION MCHAN_TRANSFER_LEN_SIZE + + +#define MCHAN_CMD(len, dir, inc, loc_2d, ext_2d, int_en, event_en, broadcast) \ + (len | dir | inc | loc_2d | ext_2d | broadcast | int_en | event_en) + +typedef enum { + MCHAN_DMA_TRANSFER_DIRECTION_EXT2LOC = MCHAN_CMD_FLAG_DIRECTION_EXT2LOC, + MCHAN_DMA_TRANSFER_DIRECTION_LOC2EXT = MCHAN_CMD_FLAG_DIRECTION_LOC2EXT +} mchan_dma_transfer_direction_e; + +typedef struct { + int cmd; + int size; + + void *loc; + int loc_size_1d; + int loc_stride_1d; + + void *ext; + int ext_size_1d; + int ext_stride_1d; +} mchan_transfer_t; + +static int mchan_transfer_get_id() { + return MCHAN_READ_CMD(); +} + +static void mchan_transfer_push_1d(mchan_transfer_t trans) +{ + MCHAN_WRITE_CMD(trans.cmd); + MCHAN_WRITE_CMD(trans.loc); + MCHAN_WRITE_CMD(trans.ext); +} + +static void mchan_transfer_push_2d(mchan_transfer_t trans) +{ + MCHAN_WRITE_CMD(trans.cmd); + MCHAN_WRITE_CMD(trans.loc); + MCHAN_WRITE_CMD(trans.ext); +// MCHAN version 7 takes 2D "count" (length of 1D transfers) and stride in 2 steps, +// v7 takes it in 1 step with the stride shifted to the upper 16 bits. +#if MCHAN_VERSION==7 + MCHAN_WRITE_CMD(trans.ext_size_1d); + MCHAN_WRITE_CMD(trans.ext_stride_1d); +#else + MCHAN_WRITE_CMD(trans.ext_size_1d | (trans.ext_stride_1d << 16)); +#endif +} + +static void mchan_transfer_push(mchan_transfer_t trans) +{ + MCHAN_WRITE_CMD(trans.cmd); + MCHAN_WRITE_CMD(trans.loc); + MCHAN_WRITE_CMD(trans.ext); + + if (trans.ext_size_1d < trans.size) { + MCHAN_WRITE_CMD(trans.ext_size_1d); + MCHAN_WRITE_CMD(trans.ext_stride_1d); + } + + if (trans.loc_size_1d < trans.size) { + MCHAN_WRITE_CMD(trans.loc_size_1d); + MCHAN_WRITE_CMD(trans.loc_stride_1d); + } +} + +static void mchan_transfer_free(int tid) +{ + MCHAN_WRITE_STATUS(1 << tid); +} + +static int mchan_transfer_busy(int tid) +{ + return MCHAN_READ_STATUS() & (1 << tid); +} + +static void mchan_transfer_wait(int tid) +{ + #if defined(MCHAN_EVENT) + while(mchan_transfer_busy(tid)) eu_evt_maskWaitAndClr(1 << MCHAN_EVENT_BIT); + #elif defined(MCHAN_POLLED) + while(mchan_transfer_busy(tid)) ; + #endif +} + +#endif diff --git a/rt_nn_tests/xpnnv2_conv/openocd-zcu102-olimex-arm-usb-ocd-h.cfg b/rt_nn_tests/xpnnv2_conv/openocd-zcu102-olimex-arm-usb-ocd-h.cfg new file mode 100644 index 0000000..b924719 --- /dev/null +++ b/rt_nn_tests/xpnnv2_conv/openocd-zcu102-olimex-arm-usb-ocd-h.cfg @@ -0,0 +1,41 @@ +adapter_khz 1000 + +# Olimex ARM-USB-OCD-H +interface ftdi +ftdi_device_desc "Olimex OpenOCD JTAG ARM-USB-OCD-H" +ftdi_vid_pid 0x15ba 0x002b + +ftdi layout_init 0x0b08 0x0b1b + +ftdi layout_signal nSRST -data 0x0200 +ftdi layout_signal nTRST -data 0x0100 +ftdi layout_signal LED -data 0x0800 +reset_config srst_push_pull srst_only + + +set _CHIPNAME riscv + + + +jtag newtap $_CHIPNAME unknown0 -irlen 5 -expected-id 0x10102001 +jtag newtap $_CHIPNAME cpu -irlen 5 -expected-id 0x249511C3 + +set _TARGETNAME $_CHIPNAME.cpu +target create $_TARGETNAME riscv -chain-position $_TARGETNAME -coreid 0x3e0 + +gdb_report_data_abort enable +gdb_report_register_access_error enable + +riscv set_reset_timeout_sec 120 +riscv set_command_timeout_sec 120 + +# prefer to use sba for system bus access +riscv set_prefer_sba on +# dump jtag chain + +scan_chain + +init +reset +halt +echo "Ready for Remote Connections" diff --git a/rt_nn_tests/xpnnv2_conv/pulp_nn_kernels.h b/rt_nn_tests/xpnnv2_conv/pulp_nn_kernels.h new file mode 100644 index 0000000..f4ec977 --- /dev/null +++ b/rt_nn_tests/xpnnv2_conv/pulp_nn_kernels.h @@ -0,0 +1,26528 @@ +/* + * pulp_nn_kernels.h + * Nazareno Bruschi + * + * Copyright (C) 2019-2020 University of Bologna + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef __XPULPNN_KERNELS__ +#define __XPULPNN_KERNELS__ + +void xpulp_nn_conv_u8_u8_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u8_u8_i8_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u8_i8_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u8_i8_i8_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i8_u8_i8( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i8_u8_i8_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i8_i8_i8( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i8_i8_i8_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u8_u8_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u8_u8_i4_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u8_i8_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u8_i8_i4_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i8_u8_i4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i8_u8_i4_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i8_i8_i4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i8_i8_i4_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u8_u8_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u8_u8_i2_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u8_i8_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u8_i8_i2_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i8_u8_i2( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i8_u8_i2_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i8_i8_i2( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i8_i8_i2_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u8_u4_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u8_u4_i8_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u8_i4_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u8_i4_i8_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i8_u4_i8( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i8_u4_i8_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i8_i4_i8( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i8_i4_i8_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u8_u4_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u8_u4_i4_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u8_i4_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u8_i4_i4_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i8_u4_i4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i8_u4_i4_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i8_i4_i4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i8_i4_i4_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u8_u4_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u8_u4_i2_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u8_i4_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u8_i4_i2_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i8_u4_i2( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i8_u4_i2_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i8_i4_i2( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i8_i4_i2_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u8_u2_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u8_u2_i8_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u8_i2_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u8_i2_i8_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i8_u2_i8( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i8_u2_i8_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i8_i2_i8( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i8_i2_i8_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u8_u2_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u8_u2_i4_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u8_i2_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u8_i2_i4_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i8_u2_i4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i8_u2_i4_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i8_i2_i4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i8_i2_i4_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u8_u2_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u8_u2_i2_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u8_i2_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u8_i2_i2_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i8_u2_i2( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i8_u2_i2_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i8_i2_i2( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i8_i2_i2_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u4_u8_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u4_u8_i8_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u4_i8_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u4_i8_i8_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i4_u8_i8( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i4_u8_i8_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i4_i8_i8( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i4_i8_i8_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u4_u8_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u4_u8_i4_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u4_i8_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u4_i8_i4_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i4_u8_i4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i4_u8_i4_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i4_i8_i4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i4_i8_i4_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u4_u8_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u4_u8_i2_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u4_i8_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u4_i8_i2_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i4_u8_i2( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i4_u8_i2_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i4_i8_i2( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i4_i8_i2_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u4_u4_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u4_u4_i8_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u4_i4_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u4_i4_i8_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i4_u4_i8( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i4_u4_i8_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i4_i4_i8( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i4_i4_i8_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u4_u4_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u4_u4_i4_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u4_i4_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u4_i4_i4_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i4_u4_i4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i4_u4_i4_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i4_i4_i4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i4_i4_i4_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u4_u4_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u4_u4_i2_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u4_i4_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u4_i4_i2_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i4_u4_i2( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i4_u4_i2_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i4_i4_i2( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i4_i4_i2_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u4_u2_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u4_u2_i8_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u4_i2_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u4_i2_i8_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i4_u2_i8( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i4_u2_i8_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i4_i2_i8( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i4_i2_i8_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u4_u2_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u4_u2_i4_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u4_i2_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u4_i2_i4_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i4_u2_i4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i4_u2_i4_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i4_i2_i4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i4_i2_i4_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u4_u2_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u4_u2_i2_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u4_i2_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u4_i2_i2_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i4_u2_i2( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i4_u2_i2_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i4_i2_i2( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i4_i2_i2_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u2_u8_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u2_u8_i8_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u2_i8_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u2_i8_i8_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i2_u8_i8( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i2_u8_i8_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i2_i8_i8( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i2_i8_i8_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u2_u8_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u2_u8_i4_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u2_i8_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u2_i8_i4_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i2_u8_i4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i2_u8_i4_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i2_i8_i4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i2_i8_i4_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u2_u8_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u2_u8_i2_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u2_i8_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u2_i8_i2_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i2_u8_i2( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i2_u8_i2_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i2_i8_i2( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i2_i8_i2_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u2_u4_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u2_u4_i8_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u2_i4_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u2_i4_i8_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i2_u4_i8( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i2_u4_i8_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i2_i4_i8( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i2_i4_i8_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u2_u4_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u2_u4_i4_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u2_i4_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u2_i4_i4_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i2_u4_i4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i2_u4_i4_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i2_i4_i4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i2_i4_i4_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u2_u4_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u2_u4_i2_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u2_i4_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u2_i4_i2_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i2_u4_i2( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i2_u4_i2_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i2_i4_i2( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i2_i4_i2_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u2_u2_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u2_u2_i8_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u2_i2_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u2_i2_i8_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i2_u2_i8( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i2_u2_i8_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i2_i2_i8( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i2_i2_i8_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u2_u2_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u2_u2_i4_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u2_i2_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u2_i2_i4_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i2_u2_i4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i2_u2_i4_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i2_i2_i4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i2_i2_i4_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u2_u2_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u2_u2_i2_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u2_i2_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u2_i2_i2_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i2_u2_i2( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i2_u2_i2_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i2_i2_i2( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, +#ifndef PROFILE + uint8_t flag_batch_norm); +#else + uint8_t flag_batch_norm, + uint32_t *im2col_cycles, + uint32_t *hotloop_prep_cycles, + uint32_t *hotloop_cycles, + uint32_t *requant_cycles, + uint32_t *hotloop_leftover_cycles, + uint32_t *matmul4x2_leftover_cycles); +#endif + + +void xpulp_nn_conv_i2_i2_i2_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u8_u8_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u8_u8_i8_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u8_i8_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u8_i8_i8_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i8_u8_i8( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i8_u8_i8_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i8_i8_i8( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i8_i8_i8_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u8_u8_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u8_u8_i4_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u8_i8_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u8_i8_i4_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i8_u8_i4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i8_u8_i4_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i8_i8_i4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i8_i8_i4_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u8_u8_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u8_u8_i2_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u8_i8_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u8_i8_i2_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i8_u8_i2( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i8_u8_i2_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i8_i8_i2( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i8_i8_i2_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u8_u4_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u8_u4_i8_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u8_i4_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u8_i4_i8_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i8_u4_i8( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i8_u4_i8_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i8_i4_i8( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i8_i4_i8_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u8_u4_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u8_u4_i4_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u8_i4_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u8_i4_i4_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i8_u4_i4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i8_u4_i4_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i8_i4_i4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i8_i4_i4_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u8_u4_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u8_u4_i2_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u8_i4_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u8_i4_i2_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i8_u4_i2( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i8_u4_i2_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i8_i4_i2( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i8_i4_i2_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u8_u2_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u8_u2_i8_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u8_i2_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u8_i2_i8_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i8_u2_i8( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i8_u2_i8_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i8_i2_i8( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i8_i2_i8_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u8_u2_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u8_u2_i4_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u8_i2_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u8_i2_i4_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i8_u2_i4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i8_u2_i4_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i8_i2_i4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i8_i2_i4_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u8_u2_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u8_u2_i2_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u8_i2_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u8_i2_i2_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i8_u2_i2( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i8_u2_i2_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i8_i2_i2( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i8_i2_i2_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u4_u8_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u4_u8_i8_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u4_i8_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u4_i8_i8_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i4_u8_i8( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i4_u8_i8_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i4_i8_i8( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i4_i8_i8_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u4_u8_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u4_u8_i4_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u4_i8_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u4_i8_i4_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i4_u8_i4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i4_u8_i4_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i4_i8_i4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i4_i8_i4_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u4_u8_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u4_u8_i2_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u4_i8_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u4_i8_i2_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i4_u8_i2( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i4_u8_i2_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i4_i8_i2( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i4_i8_i2_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u4_u4_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u4_u4_i8_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u4_i4_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u4_i4_i8_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i4_u4_i8( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i4_u4_i8_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i4_i4_i8( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i4_i4_i8_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u4_u4_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u4_u4_i4_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u4_i4_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u4_i4_i4_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i4_u4_i4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i4_u4_i4_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i4_i4_i4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i4_i4_i4_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u4_u4_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u4_u4_i2_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u4_i4_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u4_i4_i2_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i4_u4_i2( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i4_u4_i2_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i4_i4_i2( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i4_i4_i2_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u4_u2_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u4_u2_i8_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u4_i2_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u4_i2_i8_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i4_u2_i8( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i4_u2_i8_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i4_i2_i8( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i4_i2_i8_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u4_u2_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u4_u2_i4_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u4_i2_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u4_i2_i4_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i4_u2_i4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i4_u2_i4_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i4_i2_i4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i4_i2_i4_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u4_u2_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u4_u2_i2_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u4_i2_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u4_i2_i2_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i4_u2_i2( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i4_u2_i2_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i4_i2_i2( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i4_i2_i2_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u2_u8_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u2_u8_i8_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u2_i8_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u2_i8_i8_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i2_u8_i8( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i2_u8_i8_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i2_i8_i8( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i2_i8_i8_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u2_u8_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u2_u8_i4_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u2_i8_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u2_i8_i4_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i2_u8_i4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i2_u8_i4_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i2_i8_i4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i2_i8_i4_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u2_u8_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u2_u8_i2_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u2_i8_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u2_i8_i2_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i2_u8_i2( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i2_u8_i2_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i2_i8_i2( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i2_i8_i2_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u2_u4_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u2_u4_i8_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u2_i4_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u2_i4_i8_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i2_u4_i8( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i2_u4_i8_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i2_i4_i8( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i2_i4_i8_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u2_u4_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u2_u4_i4_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u2_i4_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u2_i4_i4_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i2_u4_i4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i2_u4_i4_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i2_i4_i4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i2_i4_i4_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u2_u4_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u2_u4_i2_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u2_i4_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u2_i4_i2_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i2_u4_i2( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i2_u4_i2_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i2_i4_i2( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i2_i4_i2_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u2_u2_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u2_u2_i8_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u2_i2_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u2_i2_i8_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i2_u2_i8( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i2_u2_i8_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i2_i2_i8( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i2_i2_i8_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u2_u2_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u2_u2_i4_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u2_i2_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u2_i2_i4_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i2_u2_i4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i2_u2_i4_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i2_i2_i4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i2_i2_i4_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u2_u2_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u2_u2_i2_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u2_i2_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u2_i2_i2_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i2_u2_i2( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i2_u2_i2_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i2_i2_i2( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i2_i2_i2_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_u8_u8_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_u8_i8_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_i8_u8_i8( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_i8_i8_i8( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_u8_u8_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_u8_i8_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_i8_u8_i4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_i8_i8_i4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_u8_u8_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_u8_i8_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_i8_u8_i2( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_i8_i8_i2( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_u8_u4_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_u8_i4_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_i8_u4_i8( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_i8_i4_i8( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_u8_u4_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_u8_i4_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_i8_u4_i4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_i8_i4_i4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_u8_u4_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_u8_i4_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_i8_u4_i2( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_i8_i4_i2( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_u8_u2_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_u8_i2_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_i8_u2_i8( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_i8_i2_i8( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_u8_u2_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_u8_i2_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_i8_u2_i4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_i8_i2_i4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_u8_u2_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_u8_i2_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_i8_u2_i2( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_i8_i2_i2( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_u4_u8_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_u4_i8_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_i4_u8_i8( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_i4_i8_i8( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_u4_u8_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_u4_i8_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_i4_u8_i4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_i4_i8_i4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_u4_u8_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_u4_i8_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_i4_u8_i2( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_i4_i8_i2( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_u4_u4_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_u4_i4_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_i4_u4_i8( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_i4_i4_i8( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_u4_u4_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_u4_i4_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_i4_u4_i4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_i4_i4_i4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_u4_u4_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_u4_i4_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_i4_u4_i2( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_i4_i4_i2( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_u4_u2_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_u4_i2_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_i4_u2_i8( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_i4_i2_i8( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_u4_u2_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_u4_i2_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_i4_u2_i4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_i4_i2_i4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_u4_u2_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_u4_i2_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_i4_u2_i2( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_i4_i2_i2( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_u2_u8_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_u2_i8_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_i2_u8_i8( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_i2_i8_i8( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_u2_u8_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_u2_i8_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_i2_u8_i4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_i2_i8_i4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_u2_u8_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_u2_i8_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_i2_u8_i2( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_i2_i8_i2( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_u2_u4_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_u2_i4_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_i2_u4_i8( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_i2_i4_i8( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_u2_u4_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_u2_i4_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_i2_u4_i4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_i2_i4_i4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_u2_u4_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_u2_i4_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_i2_u4_i2( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_i2_i4_i2( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_u2_u2_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_u2_i2_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_i2_u2_i8( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_i2_i2_i8( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_u2_u2_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_u2_i2_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_i2_u2_i4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_i2_i2_i4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_u2_u2_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_u2_i2_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_i2_u2_i2( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_i2_i2_i2( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u8_u8_i8( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u8_i8_i8( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i8_u8_i8( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i8_i8_i8( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u8_u8_i8_4x4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u8_i8_i8_4x4( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pOut3, + int8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i8_u8_i8_4x4( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i8_i8_i8_4x4( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pOut3, + int8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u8_u8_i4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u8_i8_i4( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i8_u8_i4( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i8_i8_i4( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u8_u8_i4_4x4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u8_i8_i4_4x4( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pOut3, + int8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i8_u8_i4_4x4( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i8_i8_i4_4x4( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pOut3, + int8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u8_u8_i2( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u8_i8_i2( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i8_u8_i2( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i8_i8_i2( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u8_u8_i2_4x4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u8_i8_i2_4x4( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pOut3, + int8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i8_u8_i2_4x4( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i8_i8_i2_4x4( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pOut3, + int8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u8_u4_i8( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u8_i4_i8( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i8_u4_i8( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i8_i4_i8( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u8_u4_i8_4x4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u8_i4_i8_4x4( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pOut3, + int8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i8_u4_i8_4x4( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i8_i4_i8_4x4( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pOut3, + int8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u8_u4_i4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u8_i4_i4( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i8_u4_i4( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i8_i4_i4( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u8_u4_i4_4x4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u8_i4_i4_4x4( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pOut3, + int8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i8_u4_i4_4x4( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i8_i4_i4_4x4( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pOut3, + int8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u8_u4_i2( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u8_i4_i2( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i8_u4_i2( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i8_i4_i2( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u8_u4_i2_4x4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u8_i4_i2_4x4( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pOut3, + int8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i8_u4_i2_4x4( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i8_i4_i2_4x4( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pOut3, + int8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u8_u2_i8( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u8_i2_i8( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i8_u2_i8( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i8_i2_i8( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u8_u2_i8_4x4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u8_i2_i8_4x4( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pOut3, + int8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i8_u2_i8_4x4( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i8_i2_i8_4x4( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pOut3, + int8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u8_u2_i4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u8_i2_i4( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i8_u2_i4( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i8_i2_i4( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u8_u2_i4_4x4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u8_i2_i4_4x4( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pOut3, + int8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i8_u2_i4_4x4( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i8_i2_i4_4x4( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pOut3, + int8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u8_u2_i2( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u8_i2_i2( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i8_u2_i2( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i8_i2_i2( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u8_u2_i2_4x4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u8_i2_i2_4x4( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pOut3, + int8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i8_u2_i2_4x4( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i8_i2_i2_4x4( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pOut3, + int8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u4_u8_i8( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u4_i8_i8( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i4_u8_i8( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i4_i8_i8( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u4_u8_i8_4x4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u4_i8_i8_4x4( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pOut3, + int8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i4_u8_i8_4x4( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i4_i8_i8_4x4( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pOut3, + int8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u4_u8_i4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u4_i8_i4( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i4_u8_i4( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i4_i8_i4( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u4_u8_i4_4x4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u4_i8_i4_4x4( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pOut3, + int8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i4_u8_i4_4x4( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i4_i8_i4_4x4( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pOut3, + int8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u4_u8_i2( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u4_i8_i2( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i4_u8_i2( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i4_i8_i2( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u4_u8_i2_4x4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u4_i8_i2_4x4( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pOut3, + int8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i4_u8_i2_4x4( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i4_i8_i2_4x4( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pOut3, + int8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u4_u4_i8( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u4_i4_i8( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i4_u4_i8( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i4_i4_i8( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u4_u4_i8_4x4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u4_i4_i8_4x4( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pOut3, + int8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i4_u4_i8_4x4( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i4_i4_i8_4x4( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pOut3, + int8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u4_u4_i4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u4_i4_i4( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i4_u4_i4( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i4_i4_i4( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u4_u4_i4_4x4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u4_i4_i4_4x4( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pOut3, + int8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i4_u4_i4_4x4( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i4_i4_i4_4x4( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pOut3, + int8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u4_u4_i2( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u4_i4_i2( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i4_u4_i2( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i4_i4_i2( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u4_u4_i2_4x4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u4_i4_i2_4x4( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pOut3, + int8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i4_u4_i2_4x4( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i4_i4_i2_4x4( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pOut3, + int8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u4_u2_i8( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u4_i2_i8( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i4_u2_i8( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i4_i2_i8( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u4_u2_i8_4x4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u4_i2_i8_4x4( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pOut3, + int8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i4_u2_i8_4x4( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i4_i2_i8_4x4( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pOut3, + int8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u4_u2_i4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u4_i2_i4( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i4_u2_i4( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i4_i2_i4( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u4_u2_i4_4x4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u4_i2_i4_4x4( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pOut3, + int8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i4_u2_i4_4x4( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i4_i2_i4_4x4( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pOut3, + int8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u4_u2_i2( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u4_i2_i2( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i4_u2_i2( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i4_i2_i2( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u4_u2_i2_4x4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u4_i2_i2_4x4( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pOut3, + int8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i4_u2_i2_4x4( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i4_i2_i2_4x4( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pOut3, + int8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u2_u8_i8( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u2_i8_i8( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i2_u8_i8( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i2_i8_i8( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u2_u8_i8_4x4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u2_i8_i8_4x4( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pOut3, + int8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i2_u8_i8_4x4( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i2_i8_i8_4x4( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pOut3, + int8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u2_u8_i4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u2_i8_i4( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i2_u8_i4( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i2_i8_i4( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u2_u8_i4_4x4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u2_i8_i4_4x4( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pOut3, + int8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i2_u8_i4_4x4( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i2_i8_i4_4x4( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pOut3, + int8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u2_u8_i2( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u2_i8_i2( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i2_u8_i2( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i2_i8_i2( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u2_u8_i2_4x4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u2_i8_i2_4x4( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pOut3, + int8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i2_u8_i2_4x4( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i2_i8_i2_4x4( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pOut3, + int8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u2_u4_i8( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u2_i4_i8( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i2_u4_i8( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i2_i4_i8( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u2_u4_i8_4x4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u2_i4_i8_4x4( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pOut3, + int8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i2_u4_i8_4x4( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i2_i4_i8_4x4( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pOut3, + int8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u2_u4_i4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u2_i4_i4( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i2_u4_i4( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i2_i4_i4( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u2_u4_i4_4x4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u2_i4_i4_4x4( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pOut3, + int8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i2_u4_i4_4x4( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i2_i4_i4_4x4( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pOut3, + int8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u2_u4_i2( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u2_i4_i2( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i2_u4_i2( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i2_i4_i2( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u2_u4_i2_4x4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u2_i4_i2_4x4( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pOut3, + int8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i2_u4_i2_4x4( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i2_i4_i2_4x4( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pOut3, + int8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u2_u2_i8( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u2_i2_i8( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i2_u2_i8( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i2_i2_i8( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u2_u2_i8_4x4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u2_i2_i8_4x4( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pOut3, + int8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i2_u2_i8_4x4( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i2_i2_i8_4x4( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pOut3, + int8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u2_u2_i4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u2_i2_i4( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i2_u2_i4( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i2_i2_i4( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u2_u2_i4_4x4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u2_i2_i4_4x4( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pOut3, + int8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i2_u2_i4_4x4( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i2_i2_i4_4x4( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pOut3, + int8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u2_u2_i2( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u2_i2_i2( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i2_u2_i2( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i2_i2_i2( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, +#ifndef PROFILE + uint8_t flag_batch_norm); +#else + uint8_t flag_batch_norm, + uint32_t *hotloop_prep_cycles, + uint32_t *hotloop_cycles, + uint32_t *requant_cycles, + uint32_t *hotloop_leftover_cycles); +#endif + +uint8_t *xpulp_nn_matmul_u2_u2_i2_4x4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u2_i2_i2_4x4( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pOut3, + int8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i2_u2_i2_4x4( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i2_i2_i2_4x4( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pOut3, + int8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_u8_u8_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_u8_i8_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_i8_u8_i8( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_i8_i8_i8( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_u8_u8_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_u8_i8_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_i8_u8_i4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_i8_i8_i4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_u8_u8_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_u8_i8_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_i8_u8_i2( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_i8_i8_i2( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_u8_u4_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_u8_i4_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_i8_u4_i8( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_i8_i4_i8( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_u8_u4_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_u8_i4_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_i8_u4_i4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_i8_i4_i4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_u8_u4_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_u8_i4_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_i8_u4_i2( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_i8_i4_i2( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_u8_u2_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_u8_i2_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_i8_u2_i8( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_i8_i2_i8( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_u8_u2_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_u8_i2_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_i8_u2_i4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_i8_i2_i4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_u8_u2_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_u8_i2_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_i8_u2_i2( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_i8_i2_i2( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_u4_u8_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_u4_i8_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_i4_u8_i8( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_i4_i8_i8( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_u4_u8_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_u4_i8_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_i4_u8_i4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_i4_i8_i4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_u4_u8_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_u4_i8_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_i4_u8_i2( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_i4_i8_i2( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_u4_u4_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_u4_i4_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_i4_u4_i8( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_i4_i4_i8( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_u4_u4_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_u4_i4_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_i4_u4_i4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_i4_i4_i4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_u4_u4_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_u4_i4_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_i4_u4_i2( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_i4_i4_i2( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_u4_u2_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_u4_i2_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_i4_u2_i8( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_i4_i2_i8( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_u4_u2_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_u4_i2_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_i4_u2_i4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_i4_i2_i4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_u4_u2_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_u4_i2_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_i4_u2_i2( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_i4_i2_i2( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_u2_u8_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_u2_i8_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_i2_u8_i8( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_i2_i8_i8( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_u2_u8_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_u2_i8_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_i2_u8_i4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_i2_i8_i4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_u2_u8_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_u2_i8_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_i2_u8_i2( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_i2_i8_i2( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_u2_u4_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_u2_i4_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_i2_u4_i8( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_i2_i4_i8( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_u2_u4_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_u2_i4_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_i2_u4_i4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_i2_i4_i4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_u2_u4_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_u2_i4_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_i2_u4_i2( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_i2_i4_i2( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_u2_u2_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_u2_i2_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_i2_u2_i8( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_i2_i2_i8( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_u2_u2_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_u2_i2_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_i2_u2_i4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_i2_i2_i4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_u2_u2_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_u2_i2_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_i2_u2_i2( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_i2_i2_i2( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_u8_i32_i8( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + uint16_t dim_vec, + uint16_t num_o_neurons); + +void xpulp_nn_linear_i8_i32_i8( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + uint16_t dim_vec, + uint16_t num_o_neurons); + +void xpulp_nn_linear_u8_i32_i4( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + uint16_t dim_vec, + uint16_t num_o_neurons); + +void xpulp_nn_linear_i8_i32_i4( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + uint16_t dim_vec, + uint16_t num_o_neurons); + +void xpulp_nn_linear_u8_i32_i2( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + uint16_t dim_vec, + uint16_t num_o_neurons); + +void xpulp_nn_linear_i8_i32_i2( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + uint16_t dim_vec, + uint16_t num_o_neurons); + +void xpulp_nn_linear_u4_i32_i8( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + uint16_t dim_vec, + uint16_t num_o_neurons); + +void xpulp_nn_linear_i4_i32_i8( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + uint16_t dim_vec, + uint16_t num_o_neurons); + +void xpulp_nn_linear_u4_i32_i4( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + uint16_t dim_vec, + uint16_t num_o_neurons); + +void xpulp_nn_linear_i4_i32_i4( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + uint16_t dim_vec, + uint16_t num_o_neurons); + +void xpulp_nn_linear_u4_i32_i2( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + uint16_t dim_vec, + uint16_t num_o_neurons); + +void xpulp_nn_linear_i4_i32_i2( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + uint16_t dim_vec, + uint16_t num_o_neurons); + +void xpulp_nn_linear_u2_i32_i8( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + uint16_t dim_vec, + uint16_t num_o_neurons); + +void xpulp_nn_linear_i2_i32_i8( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + uint16_t dim_vec, + uint16_t num_o_neurons); + +void xpulp_nn_linear_u2_i32_i4( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + uint16_t dim_vec, + uint16_t num_o_neurons); + +void xpulp_nn_linear_i2_i32_i4( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + uint16_t dim_vec, + uint16_t num_o_neurons); + +void xpulp_nn_linear_u2_i32_i2( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + uint16_t dim_vec, + uint16_t num_o_neurons); + +void xpulp_nn_linear_i2_i32_i2( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + uint16_t dim_vec, + uint16_t num_o_neurons); + +void xpulp_nn_linear_u8_u8_i8( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_u8_i8_i8( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_i8_u8_i8( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_i8_i8_i8( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_u8_u8_i4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_u8_i8_i4( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_i8_u8_i4( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_i8_i8_i4( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_u8_u8_i2( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_u8_i8_i2( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_i8_u8_i2( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_i8_i8_i2( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_u8_u4_i8( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_u8_i4_i8( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_i8_u4_i8( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_i8_i4_i8( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_u8_u4_i4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_u8_i4_i4( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_i8_u4_i4( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_i8_i4_i4( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_u8_u4_i2( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_u8_i4_i2( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_i8_u4_i2( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_i8_i4_i2( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_u8_u2_i8( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_u8_i2_i8( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_i8_u2_i8( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_i8_i2_i8( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_u8_u2_i4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_u8_i2_i4( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_i8_u2_i4( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_i8_i2_i4( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_u8_u2_i2( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_u8_i2_i2( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_i8_u2_i2( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_i8_i2_i2( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_u4_u8_i8( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_u4_i8_i8( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_i4_u8_i8( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_i4_i8_i8( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_u4_u8_i4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_u4_i8_i4( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_i4_u8_i4( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_i4_i8_i4( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_u4_u8_i2( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_u4_i8_i2( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_i4_u8_i2( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_i4_i8_i2( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_u4_u4_i8( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_u4_i4_i8( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_i4_u4_i8( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_i4_i4_i8( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_u4_u4_i4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_u4_i4_i4( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_i4_u4_i4( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_i4_i4_i4( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_u4_u4_i2( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_u4_i4_i2( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_i4_u4_i2( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_i4_i4_i2( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_u4_u2_i8( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_u4_i2_i8( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_i4_u2_i8( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_i4_i2_i8( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_u4_u2_i4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_u4_i2_i4( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_i4_u2_i4( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_i4_i2_i4( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_u4_u2_i2( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_u4_i2_i2( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_i4_u2_i2( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_i4_i2_i2( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_u2_u8_i8( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_u2_i8_i8( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_i2_u8_i8( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_i2_i8_i8( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_u2_u8_i4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_u2_i8_i4( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_i2_u8_i4( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_i2_i8_i4( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_u2_u8_i2( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_u2_i8_i2( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_i2_u8_i2( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_i2_i8_i2( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_u2_u4_i8( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_u2_i4_i8( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_i2_u4_i8( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_i2_i4_i8( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_u2_u4_i4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_u2_i4_i4( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_i2_u4_i4( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_i2_i4_i4( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_u2_u4_i2( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_u2_i4_i2( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_i2_u4_i2( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_i2_i4_i2( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_u2_u2_i8( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_u2_i2_i8( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_i2_u2_i8( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_i2_i2_i8( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_u2_u2_i4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_u2_i2_i4( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_i2_u2_i4( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_i2_i2_i4( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_u2_u2_i2( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_u2_i2_i2( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_i2_u2_i2( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_i2_i2_i2( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_maxpool_u8( + uint8_t * pIn, + uint8_t * pOut, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + uint16_t dim_im_out_x, + uint16_t dim_im_out_y, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_t, + uint16_t padding_b, + uint16_t padding_l, + uint16_t padding_r, + uint16_t stride_x, + uint16_t stride_y); + +void xpulp_nn_maxpool_i8( + int8_t * pIn, + int8_t * pOut, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + uint16_t dim_im_out_x, + uint16_t dim_im_out_y, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_t, + uint16_t padding_b, + uint16_t padding_l, + uint16_t padding_r, + uint16_t stride_x, + uint16_t stride_y); + +void xpulp_nn_maxpool_u4( + uint8_t * pIn, + uint8_t * pOut, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + uint16_t dim_im_out_x, + uint16_t dim_im_out_y, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_t, + uint16_t padding_b, + uint16_t padding_l, + uint16_t padding_r, + uint16_t stride_x, + uint16_t stride_y); + +void xpulp_nn_maxpool_i4( + int8_t * pIn, + int8_t * pOut, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + uint16_t dim_im_out_x, + uint16_t dim_im_out_y, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_t, + uint16_t padding_b, + uint16_t padding_l, + uint16_t padding_r, + uint16_t stride_x, + uint16_t stride_y); + +void xpulp_nn_maxpool_u2( + uint8_t * pIn, + uint8_t * pOut, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + uint16_t dim_im_out_x, + uint16_t dim_im_out_y, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_t, + uint16_t padding_b, + uint16_t padding_l, + uint16_t padding_r, + uint16_t stride_x, + uint16_t stride_y); + +void xpulp_nn_maxpool_i2( + int8_t * pIn, + int8_t * pOut, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + uint16_t dim_im_out_x, + uint16_t dim_im_out_y, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_t, + uint16_t padding_b, + uint16_t padding_l, + uint16_t padding_r, + uint16_t stride_x, + uint16_t stride_y); + +void xpulp_nn_avgpool_u8_u8( + uint8_t * pIn, + uint8_t * pOut, + int32_t lambda, + uint16_t out_shift, + int32_t out_add, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + uint16_t dim_im_out_x, + uint16_t dim_im_out_y, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_t, + uint16_t padding_b, + uint16_t padding_l, + uint16_t padding_r, + uint16_t stride_x, + uint16_t stride_y, + int flag_requant +); + +void xpulp_nn_avgpool_u8_i8( + uint8_t * pIn, + int8_t * pOut, + int32_t lambda, + uint16_t out_shift, + int32_t out_add, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + uint16_t dim_im_out_x, + uint16_t dim_im_out_y, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_t, + uint16_t padding_b, + uint16_t padding_l, + uint16_t padding_r, + uint16_t stride_x, + uint16_t stride_y, + int flag_requant +); + +void xpulp_nn_avgpool_i8_u8( + int8_t * pIn, + uint8_t * pOut, + int32_t lambda, + uint16_t out_shift, + int32_t out_add, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + uint16_t dim_im_out_x, + uint16_t dim_im_out_y, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_t, + uint16_t padding_b, + uint16_t padding_l, + uint16_t padding_r, + uint16_t stride_x, + uint16_t stride_y, + int flag_requant +); + +void xpulp_nn_avgpool_i8_i8( + int8_t * pIn, + int8_t * pOut, + int32_t lambda, + uint16_t out_shift, + int32_t out_add, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + uint16_t dim_im_out_x, + uint16_t dim_im_out_y, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_t, + uint16_t padding_b, + uint16_t padding_l, + uint16_t padding_r, + uint16_t stride_x, + uint16_t stride_y, + int flag_requant +); + +void xpulp_nn_avgpool_u8_u4( + uint8_t * pIn, + uint8_t * pOut, + int32_t lambda, + uint16_t out_shift, + int32_t out_add, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + uint16_t dim_im_out_x, + uint16_t dim_im_out_y, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_t, + uint16_t padding_b, + uint16_t padding_l, + uint16_t padding_r, + uint16_t stride_x, + uint16_t stride_y, + int flag_requant +); + +void xpulp_nn_avgpool_u8_i4( + uint8_t * pIn, + int8_t * pOut, + int32_t lambda, + uint16_t out_shift, + int32_t out_add, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + uint16_t dim_im_out_x, + uint16_t dim_im_out_y, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_t, + uint16_t padding_b, + uint16_t padding_l, + uint16_t padding_r, + uint16_t stride_x, + uint16_t stride_y, + int flag_requant +); + +void xpulp_nn_avgpool_i8_u4( + int8_t * pIn, + uint8_t * pOut, + int32_t lambda, + uint16_t out_shift, + int32_t out_add, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + uint16_t dim_im_out_x, + uint16_t dim_im_out_y, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_t, + uint16_t padding_b, + uint16_t padding_l, + uint16_t padding_r, + uint16_t stride_x, + uint16_t stride_y, + int flag_requant +); + +void xpulp_nn_avgpool_i8_i4( + int8_t * pIn, + int8_t * pOut, + int32_t lambda, + uint16_t out_shift, + int32_t out_add, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + uint16_t dim_im_out_x, + uint16_t dim_im_out_y, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_t, + uint16_t padding_b, + uint16_t padding_l, + uint16_t padding_r, + uint16_t stride_x, + uint16_t stride_y, + int flag_requant +); + +void xpulp_nn_avgpool_u8_u2( + uint8_t * pIn, + uint8_t * pOut, + int32_t lambda, + uint16_t out_shift, + int32_t out_add, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + uint16_t dim_im_out_x, + uint16_t dim_im_out_y, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_t, + uint16_t padding_b, + uint16_t padding_l, + uint16_t padding_r, + uint16_t stride_x, + uint16_t stride_y, + int flag_requant +); + +void xpulp_nn_avgpool_u8_i2( + uint8_t * pIn, + int8_t * pOut, + int32_t lambda, + uint16_t out_shift, + int32_t out_add, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + uint16_t dim_im_out_x, + uint16_t dim_im_out_y, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_t, + uint16_t padding_b, + uint16_t padding_l, + uint16_t padding_r, + uint16_t stride_x, + uint16_t stride_y, + int flag_requant +); + +void xpulp_nn_avgpool_i8_u2( + int8_t * pIn, + uint8_t * pOut, + int32_t lambda, + uint16_t out_shift, + int32_t out_add, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + uint16_t dim_im_out_x, + uint16_t dim_im_out_y, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_t, + uint16_t padding_b, + uint16_t padding_l, + uint16_t padding_r, + uint16_t stride_x, + uint16_t stride_y, + int flag_requant +); + +void xpulp_nn_avgpool_i8_i2( + int8_t * pIn, + int8_t * pOut, + int32_t lambda, + uint16_t out_shift, + int32_t out_add, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + uint16_t dim_im_out_x, + uint16_t dim_im_out_y, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_t, + uint16_t padding_b, + uint16_t padding_l, + uint16_t padding_r, + uint16_t stride_x, + uint16_t stride_y, + int flag_requant +); + +void xpulp_nn_avgpool_u4_u8( + uint8_t * pIn, + uint8_t * pOut, + int32_t lambda, + uint16_t out_shift, + int32_t out_add, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + uint16_t dim_im_out_x, + uint16_t dim_im_out_y, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_t, + uint16_t padding_b, + uint16_t padding_l, + uint16_t padding_r, + uint16_t stride_x, + uint16_t stride_y, + int flag_requant +); + +void xpulp_nn_avgpool_u4_i8( + uint8_t * pIn, + int8_t * pOut, + int32_t lambda, + uint16_t out_shift, + int32_t out_add, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + uint16_t dim_im_out_x, + uint16_t dim_im_out_y, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_t, + uint16_t padding_b, + uint16_t padding_l, + uint16_t padding_r, + uint16_t stride_x, + uint16_t stride_y, + int flag_requant +); + +void xpulp_nn_avgpool_i4_u8( + int8_t * pIn, + uint8_t * pOut, + int32_t lambda, + uint16_t out_shift, + int32_t out_add, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + uint16_t dim_im_out_x, + uint16_t dim_im_out_y, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_t, + uint16_t padding_b, + uint16_t padding_l, + uint16_t padding_r, + uint16_t stride_x, + uint16_t stride_y, + int flag_requant +); + +void xpulp_nn_avgpool_i4_i8( + int8_t * pIn, + int8_t * pOut, + int32_t lambda, + uint16_t out_shift, + int32_t out_add, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + uint16_t dim_im_out_x, + uint16_t dim_im_out_y, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_t, + uint16_t padding_b, + uint16_t padding_l, + uint16_t padding_r, + uint16_t stride_x, + uint16_t stride_y, + int flag_requant +); + +void xpulp_nn_avgpool_u4_u4( + uint8_t * pIn, + uint8_t * pOut, + int32_t lambda, + uint16_t out_shift, + int32_t out_add, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + uint16_t dim_im_out_x, + uint16_t dim_im_out_y, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_t, + uint16_t padding_b, + uint16_t padding_l, + uint16_t padding_r, + uint16_t stride_x, + uint16_t stride_y, + int flag_requant +); + +void xpulp_nn_avgpool_u4_i4( + uint8_t * pIn, + int8_t * pOut, + int32_t lambda, + uint16_t out_shift, + int32_t out_add, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + uint16_t dim_im_out_x, + uint16_t dim_im_out_y, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_t, + uint16_t padding_b, + uint16_t padding_l, + uint16_t padding_r, + uint16_t stride_x, + uint16_t stride_y, + int flag_requant +); + +void xpulp_nn_avgpool_i4_u4( + int8_t * pIn, + uint8_t * pOut, + int32_t lambda, + uint16_t out_shift, + int32_t out_add, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + uint16_t dim_im_out_x, + uint16_t dim_im_out_y, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_t, + uint16_t padding_b, + uint16_t padding_l, + uint16_t padding_r, + uint16_t stride_x, + uint16_t stride_y, + int flag_requant +); + +void xpulp_nn_avgpool_i4_i4( + int8_t * pIn, + int8_t * pOut, + int32_t lambda, + uint16_t out_shift, + int32_t out_add, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + uint16_t dim_im_out_x, + uint16_t dim_im_out_y, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_t, + uint16_t padding_b, + uint16_t padding_l, + uint16_t padding_r, + uint16_t stride_x, + uint16_t stride_y, + int flag_requant +); + +void xpulp_nn_avgpool_u4_u2( + uint8_t * pIn, + uint8_t * pOut, + int32_t lambda, + uint16_t out_shift, + int32_t out_add, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + uint16_t dim_im_out_x, + uint16_t dim_im_out_y, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_t, + uint16_t padding_b, + uint16_t padding_l, + uint16_t padding_r, + uint16_t stride_x, + uint16_t stride_y, + int flag_requant +); + +void xpulp_nn_avgpool_u4_i2( + uint8_t * pIn, + int8_t * pOut, + int32_t lambda, + uint16_t out_shift, + int32_t out_add, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + uint16_t dim_im_out_x, + uint16_t dim_im_out_y, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_t, + uint16_t padding_b, + uint16_t padding_l, + uint16_t padding_r, + uint16_t stride_x, + uint16_t stride_y, + int flag_requant +); + +void xpulp_nn_avgpool_i4_u2( + int8_t * pIn, + uint8_t * pOut, + int32_t lambda, + uint16_t out_shift, + int32_t out_add, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + uint16_t dim_im_out_x, + uint16_t dim_im_out_y, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_t, + uint16_t padding_b, + uint16_t padding_l, + uint16_t padding_r, + uint16_t stride_x, + uint16_t stride_y, + int flag_requant +); + +void xpulp_nn_avgpool_i4_i2( + int8_t * pIn, + int8_t * pOut, + int32_t lambda, + uint16_t out_shift, + int32_t out_add, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + uint16_t dim_im_out_x, + uint16_t dim_im_out_y, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_t, + uint16_t padding_b, + uint16_t padding_l, + uint16_t padding_r, + uint16_t stride_x, + uint16_t stride_y, + int flag_requant +); + +void xpulp_nn_avgpool_u2_u8( + uint8_t * pIn, + uint8_t * pOut, + int32_t lambda, + uint16_t out_shift, + int32_t out_add, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + uint16_t dim_im_out_x, + uint16_t dim_im_out_y, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_t, + uint16_t padding_b, + uint16_t padding_l, + uint16_t padding_r, + uint16_t stride_x, + uint16_t stride_y, + int flag_requant +); + +void xpulp_nn_avgpool_u2_i8( + uint8_t * pIn, + int8_t * pOut, + int32_t lambda, + uint16_t out_shift, + int32_t out_add, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + uint16_t dim_im_out_x, + uint16_t dim_im_out_y, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_t, + uint16_t padding_b, + uint16_t padding_l, + uint16_t padding_r, + uint16_t stride_x, + uint16_t stride_y, + int flag_requant +); + +void xpulp_nn_avgpool_i2_u8( + int8_t * pIn, + uint8_t * pOut, + int32_t lambda, + uint16_t out_shift, + int32_t out_add, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + uint16_t dim_im_out_x, + uint16_t dim_im_out_y, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_t, + uint16_t padding_b, + uint16_t padding_l, + uint16_t padding_r, + uint16_t stride_x, + uint16_t stride_y, + int flag_requant +); + +void xpulp_nn_avgpool_i2_i8( + int8_t * pIn, + int8_t * pOut, + int32_t lambda, + uint16_t out_shift, + int32_t out_add, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + uint16_t dim_im_out_x, + uint16_t dim_im_out_y, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_t, + uint16_t padding_b, + uint16_t padding_l, + uint16_t padding_r, + uint16_t stride_x, + uint16_t stride_y, + int flag_requant +); + +void xpulp_nn_avgpool_u2_u4( + uint8_t * pIn, + uint8_t * pOut, + int32_t lambda, + uint16_t out_shift, + int32_t out_add, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + uint16_t dim_im_out_x, + uint16_t dim_im_out_y, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_t, + uint16_t padding_b, + uint16_t padding_l, + uint16_t padding_r, + uint16_t stride_x, + uint16_t stride_y, + int flag_requant +); + +void xpulp_nn_avgpool_u2_i4( + uint8_t * pIn, + int8_t * pOut, + int32_t lambda, + uint16_t out_shift, + int32_t out_add, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + uint16_t dim_im_out_x, + uint16_t dim_im_out_y, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_t, + uint16_t padding_b, + uint16_t padding_l, + uint16_t padding_r, + uint16_t stride_x, + uint16_t stride_y, + int flag_requant +); + +void xpulp_nn_avgpool_i2_u4( + int8_t * pIn, + uint8_t * pOut, + int32_t lambda, + uint16_t out_shift, + int32_t out_add, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + uint16_t dim_im_out_x, + uint16_t dim_im_out_y, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_t, + uint16_t padding_b, + uint16_t padding_l, + uint16_t padding_r, + uint16_t stride_x, + uint16_t stride_y, + int flag_requant +); + +void xpulp_nn_avgpool_i2_i4( + int8_t * pIn, + int8_t * pOut, + int32_t lambda, + uint16_t out_shift, + int32_t out_add, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + uint16_t dim_im_out_x, + uint16_t dim_im_out_y, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_t, + uint16_t padding_b, + uint16_t padding_l, + uint16_t padding_r, + uint16_t stride_x, + uint16_t stride_y, + int flag_requant +); + +void xpulp_nn_avgpool_u2_u2( + uint8_t * pIn, + uint8_t * pOut, + int32_t lambda, + uint16_t out_shift, + int32_t out_add, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + uint16_t dim_im_out_x, + uint16_t dim_im_out_y, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_t, + uint16_t padding_b, + uint16_t padding_l, + uint16_t padding_r, + uint16_t stride_x, + uint16_t stride_y, + int flag_requant +); + +void xpulp_nn_avgpool_u2_i2( + uint8_t * pIn, + int8_t * pOut, + int32_t lambda, + uint16_t out_shift, + int32_t out_add, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + uint16_t dim_im_out_x, + uint16_t dim_im_out_y, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_t, + uint16_t padding_b, + uint16_t padding_l, + uint16_t padding_r, + uint16_t stride_x, + uint16_t stride_y, + int flag_requant +); + +void xpulp_nn_avgpool_i2_u2( + int8_t * pIn, + uint8_t * pOut, + int32_t lambda, + uint16_t out_shift, + int32_t out_add, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + uint16_t dim_im_out_x, + uint16_t dim_im_out_y, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_t, + uint16_t padding_b, + uint16_t padding_l, + uint16_t padding_r, + uint16_t stride_x, + uint16_t stride_y, + int flag_requant +); + +void xpulp_nn_avgpool_i2_i2( + int8_t * pIn, + int8_t * pOut, + int32_t lambda, + uint16_t out_shift, + int32_t out_add, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + uint16_t dim_im_out_x, + uint16_t dim_im_out_y, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_t, + uint16_t padding_b, + uint16_t padding_l, + uint16_t padding_r, + uint16_t stride_x, + uint16_t stride_y, + int flag_requant +); + +void xpulp_nn_add_u8_u8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + uint16_t out_mult1, + uint16_t out_mult2, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in); + +void xpulp_nn_add_u8_u8_u8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u8_u8_u4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u8_u8_u2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u8_u8_i8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u8_u8_i4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u8_u8_i2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u8_i8_u8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u8_i8_u4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u8_i8_u2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u8_i8_i8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u8_i8_i4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u8_i8_i2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i8_u8_u8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i8_u8_u4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i8_u8_u2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i8_u8_i8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i8_u8_i4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i8_u8_i2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i8_i8_u8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i8_i8_u4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i8_i8_u2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i8_i8_i8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i8_i8_i4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i8_i8_i2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u8_u4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + uint16_t out_mult1, + uint16_t out_mult2, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in); + +void xpulp_nn_add_u8_u4_u8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u8_u4_u4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u8_u4_u2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u8_u4_i8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u8_u4_i4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u8_u4_i2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u8_i4_u8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u8_i4_u4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u8_i4_u2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u8_i4_i8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u8_i4_i4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u8_i4_i2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i8_u4_u8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i8_u4_u4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i8_u4_u2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i8_u4_i8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i8_u4_i4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i8_u4_i2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i8_i4_u8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i8_i4_u4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i8_i4_u2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i8_i4_i8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i8_i4_i4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i8_i4_i2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u8_u2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + uint16_t out_mult1, + uint16_t out_mult2, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in); + +void xpulp_nn_add_u8_u2_u8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u8_u2_u4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u8_u2_u2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u8_u2_i8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u8_u2_i4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u8_u2_i2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u8_i2_u8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u8_i2_u4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u8_i2_u2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u8_i2_i8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u8_i2_i4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u8_i2_i2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i8_u2_u8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i8_u2_u4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i8_u2_u2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i8_u2_i8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i8_u2_i4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i8_u2_i2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i8_i2_u8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i8_i2_u4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i8_i2_u2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i8_i2_i8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i8_i2_i4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i8_i2_i2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u4_u8_u8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u4_u8_u4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u4_u8_u2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u4_u8_i8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u4_u8_i4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u4_u8_i2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u4_i8_u8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u4_i8_u4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u4_i8_u2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u4_i8_i8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u4_i8_i4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u4_i8_i2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i4_u8_u8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i4_u8_u4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i4_u8_u2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i4_u8_i8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i4_u8_i4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i4_u8_i2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i4_i8_u8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i4_i8_u4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i4_i8_u2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i4_i8_i8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i4_i8_i4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i4_i8_i2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u4_u4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + uint16_t out_mult1, + uint16_t out_mult2, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in); + +void xpulp_nn_add_u4_u4_u8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u4_u4_u4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u4_u4_u2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u4_u4_i8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u4_u4_i4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u4_u4_i2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u4_i4_u8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u4_i4_u4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u4_i4_u2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u4_i4_i8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u4_i4_i4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u4_i4_i2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i4_u4_u8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i4_u4_u4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i4_u4_u2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i4_u4_i8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i4_u4_i4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i4_u4_i2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i4_i4_u8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i4_i4_u4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i4_i4_u2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i4_i4_i8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i4_i4_i4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i4_i4_i2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u4_u2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + uint16_t out_mult1, + uint16_t out_mult2, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in); + +void xpulp_nn_add_u4_u2_u8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u4_u2_u4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u4_u2_u2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u4_u2_i8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u4_u2_i4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u4_u2_i2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u4_i2_u8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u4_i2_u4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u4_i2_u2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u4_i2_i8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u4_i2_i4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u4_i2_i2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i4_u2_u8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i4_u2_u4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i4_u2_u2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i4_u2_i8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i4_u2_i4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i4_u2_i2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i4_i2_u8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i4_i2_u4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i4_i2_u2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i4_i2_i8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i4_i2_i4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i4_i2_i2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u2_u8_u8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u2_u8_u4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u2_u8_u2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u2_u8_i8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u2_u8_i4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u2_u8_i2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u2_i8_u8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u2_i8_u4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u2_i8_u2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u2_i8_i8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u2_i8_i4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u2_i8_i2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i2_u8_u8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i2_u8_u4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i2_u8_u2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i2_u8_i8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i2_u8_i4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i2_u8_i2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i2_i8_u8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i2_i8_u4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i2_i8_u2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i2_i8_i8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i2_i8_i4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i2_i8_i2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u2_u4_u8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u2_u4_u4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u2_u4_u2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u2_u4_i8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u2_u4_i4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u2_u4_i2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u2_i4_u8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u2_i4_u4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u2_i4_u2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u2_i4_i8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u2_i4_i4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u2_i4_i2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i2_u4_u8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i2_u4_u4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i2_u4_u2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i2_u4_i8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i2_u4_i4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i2_u4_i2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i2_i4_u8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i2_i4_u4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i2_i4_u2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i2_i4_i8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i2_i4_i4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i2_i4_i2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u2_u2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + uint16_t out_mult1, + uint16_t out_mult2, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in); + +void xpulp_nn_add_u2_u2_u8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u2_u2_u4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u2_u2_u2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u2_u2_i8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u2_u2_i4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u2_u2_i2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u2_i2_u8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u2_i2_u4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u2_i2_u2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u2_i2_i8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u2_i2_i4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u2_i2_i2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i2_u2_u8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i2_u2_u4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i2_u2_u2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i2_u2_i8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i2_u2_i4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i2_u2_i2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i2_i2_u8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i2_i2_u4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i2_i2_u2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i2_i2_i8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i2_i2_i4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i2_i2_i2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + + + +#endif diff --git a/rt_nn_tests/xpnnv2_conv/pulp_nn_mix_kernels.h b/rt_nn_tests/xpnnv2_conv/pulp_nn_mix_kernels.h new file mode 100644 index 0000000..8b2a3c6 --- /dev/null +++ b/rt_nn_tests/xpnnv2_conv/pulp_nn_mix_kernels.h @@ -0,0 +1,7093 @@ +/* + * pulp_nn_kernels.h + * Nazareno Bruschi + * + * Copyright (C) 2019-2020 University of Bologna + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef __XPULPNN-MIXED_KERNELS__ +#define __XPULPNN-MIXED_KERNELS__ + +void xpulp_nn_mix_conv_u8_u8_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_mix_conv_u8_u8_i8_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_mix_conv_u8_u8_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_mix_conv_u8_u8_i4_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_mix_conv_u8_u8_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_mix_conv_u8_u8_i2_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_mix_conv_u8_u4_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_mix_conv_u8_u4_i8_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_mix_conv_u8_u4_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_mix_conv_u8_u4_i4_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_mix_conv_u8_u4_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_mix_conv_u8_u4_i2_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_mix_conv_u8_u2_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_mix_conv_u8_u2_i8_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_mix_conv_u8_u2_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_mix_conv_u8_u2_i4_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_mix_conv_u8_u2_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_mix_conv_u8_u2_i2_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_mix_conv_u4_u8_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_mix_conv_u4_u8_i8_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_mix_conv_u4_u8_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_mix_conv_u4_u8_i4_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_mix_conv_u4_u8_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_mix_conv_u4_u8_i2_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_mix_conv_u4_u4_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_mix_conv_u4_u4_i8_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_mix_conv_u4_u4_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_mix_conv_u4_u4_i4_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_mix_conv_u4_u4_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_mix_conv_u4_u4_i2_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_mix_conv_u4_u2_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_mix_conv_u4_u2_i8_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_mix_conv_u4_u2_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_mix_conv_u4_u2_i4_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_mix_conv_u4_u2_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_mix_conv_u4_u2_i2_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_mix_conv_u2_u8_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_mix_conv_u2_u8_i8_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_mix_conv_u2_u8_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_mix_conv_u2_u8_i4_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_mix_conv_u2_u8_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_mix_conv_u2_u8_i2_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_mix_conv_u2_u4_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_mix_conv_u2_u4_i8_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_mix_conv_u2_u4_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_mix_conv_u2_u4_i4_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_mix_conv_u2_u4_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_mix_conv_u2_u4_i2_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_mix_conv_u2_u2_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_mix_conv_u2_u2_i8_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_mix_conv_u2_u2_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_mix_conv_u2_u2_i4_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_mix_conv_u2_u2_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_mix_conv_u2_u2_i2_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_mix_matmul_u8_u8_i8( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_mix_matmul_u8_u8_i8_4x4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_mix_matmul_u8_u8_i4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_mix_matmul_u8_u8_i4_4x4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_mix_matmul_u8_u8_i2( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_mix_matmul_u8_u8_i2_4x4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_mix_matmul_u8_u4_i8( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_mix_matmul_u8_u4_i8_4x4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_mix_matmul_u8_u4_i4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_mix_matmul_u8_u4_i4_4x4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_mix_matmul_u8_u4_i2( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_mix_matmul_u8_u4_i2_4x4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_mix_matmul_u8_u2_i8( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_mix_matmul_u8_u2_i8_4x4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_mix_matmul_u8_u2_i4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_mix_matmul_u8_u2_i4_4x4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_mix_matmul_u8_u2_i2( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_mix_matmul_u8_u2_i2_4x4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_mix_matmul_u4_u8_i8( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_mix_matmul_u4_u8_i8_4x4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_mix_matmul_u4_u8_i4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_mix_matmul_u4_u8_i4_4x4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_mix_matmul_u4_u8_i2( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_mix_matmul_u4_u8_i2_4x4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_mix_matmul_u4_u4_i8( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_mix_matmul_u4_u4_i8_4x4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_mix_matmul_u4_u4_i4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_mix_matmul_u4_u4_i4_4x4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_mix_matmul_u4_u4_i2( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_mix_matmul_u4_u4_i2_4x4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_mix_matmul_u4_u2_i8( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_mix_matmul_u4_u2_i8_4x4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_mix_matmul_u4_u2_i4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_mix_matmul_u4_u2_i4_4x4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_mix_matmul_u4_u2_i2( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_mix_matmul_u4_u2_i2_4x4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_mix_matmul_u2_u8_i8( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_mix_matmul_u2_u8_i8_4x4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_mix_matmul_u2_u8_i4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_mix_matmul_u2_u8_i4_4x4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_mix_matmul_u2_u8_i2( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_mix_matmul_u2_u8_i2_4x4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_mix_matmul_u2_u4_i8( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_mix_matmul_u2_u4_i8_4x4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_mix_matmul_u2_u4_i4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_mix_matmul_u2_u4_i4_4x4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_mix_matmul_u2_u4_i2( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_mix_matmul_u2_u4_i2_4x4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_mix_matmul_u2_u2_i8( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_mix_matmul_u2_u2_i8_4x4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_mix_matmul_u2_u2_i4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_mix_matmul_u2_u2_i4_4x4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_mix_matmul_u2_u2_i2( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_mix_matmul_u2_u2_i2_4x4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_avgpool_u8_u8( + uint8_t * pIn, + uint8_t * pOut, + int32_t lambda, + uint16_t out_shift, + int32_t out_add, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + uint16_t dim_im_out_x, + uint16_t dim_im_out_y, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_t, + uint16_t padding_b, + uint16_t padding_l, + uint16_t padding_r, + uint16_t stride_x, + uint16_t stride_y, + int flag_requant +); + +void xpulp_nn_avgpool_u8_i8( + uint8_t * pIn, + int8_t * pOut, + int32_t lambda, + uint16_t out_shift, + int32_t out_add, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + uint16_t dim_im_out_x, + uint16_t dim_im_out_y, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_t, + uint16_t padding_b, + uint16_t padding_l, + uint16_t padding_r, + uint16_t stride_x, + uint16_t stride_y, + int flag_requant +); + +void xpulp_nn_avgpool_i8_u8( + int8_t * pIn, + uint8_t * pOut, + int32_t lambda, + uint16_t out_shift, + int32_t out_add, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + uint16_t dim_im_out_x, + uint16_t dim_im_out_y, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_t, + uint16_t padding_b, + uint16_t padding_l, + uint16_t padding_r, + uint16_t stride_x, + uint16_t stride_y, + int flag_requant +); + +void xpulp_nn_avgpool_i8_i8( + int8_t * pIn, + int8_t * pOut, + int32_t lambda, + uint16_t out_shift, + int32_t out_add, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + uint16_t dim_im_out_x, + uint16_t dim_im_out_y, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_t, + uint16_t padding_b, + uint16_t padding_l, + uint16_t padding_r, + uint16_t stride_x, + uint16_t stride_y, + int flag_requant +); + +void xpulp_nn_avgpool_u8_u4( + uint8_t * pIn, + uint8_t * pOut, + int32_t lambda, + uint16_t out_shift, + int32_t out_add, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + uint16_t dim_im_out_x, + uint16_t dim_im_out_y, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_t, + uint16_t padding_b, + uint16_t padding_l, + uint16_t padding_r, + uint16_t stride_x, + uint16_t stride_y, + int flag_requant +); + +void xpulp_nn_avgpool_u8_i4( + uint8_t * pIn, + int8_t * pOut, + int32_t lambda, + uint16_t out_shift, + int32_t out_add, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + uint16_t dim_im_out_x, + uint16_t dim_im_out_y, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_t, + uint16_t padding_b, + uint16_t padding_l, + uint16_t padding_r, + uint16_t stride_x, + uint16_t stride_y, + int flag_requant +); + +void xpulp_nn_avgpool_i8_u4( + int8_t * pIn, + uint8_t * pOut, + int32_t lambda, + uint16_t out_shift, + int32_t out_add, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + uint16_t dim_im_out_x, + uint16_t dim_im_out_y, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_t, + uint16_t padding_b, + uint16_t padding_l, + uint16_t padding_r, + uint16_t stride_x, + uint16_t stride_y, + int flag_requant +); + +void xpulp_nn_avgpool_i8_i4( + int8_t * pIn, + int8_t * pOut, + int32_t lambda, + uint16_t out_shift, + int32_t out_add, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + uint16_t dim_im_out_x, + uint16_t dim_im_out_y, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_t, + uint16_t padding_b, + uint16_t padding_l, + uint16_t padding_r, + uint16_t stride_x, + uint16_t stride_y, + int flag_requant +); + +void xpulp_nn_avgpool_u8_u2( + uint8_t * pIn, + uint8_t * pOut, + int32_t lambda, + uint16_t out_shift, + int32_t out_add, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + uint16_t dim_im_out_x, + uint16_t dim_im_out_y, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_t, + uint16_t padding_b, + uint16_t padding_l, + uint16_t padding_r, + uint16_t stride_x, + uint16_t stride_y, + int flag_requant +); + +void xpulp_nn_avgpool_u8_i2( + uint8_t * pIn, + int8_t * pOut, + int32_t lambda, + uint16_t out_shift, + int32_t out_add, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + uint16_t dim_im_out_x, + uint16_t dim_im_out_y, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_t, + uint16_t padding_b, + uint16_t padding_l, + uint16_t padding_r, + uint16_t stride_x, + uint16_t stride_y, + int flag_requant +); + +void xpulp_nn_avgpool_i8_u2( + int8_t * pIn, + uint8_t * pOut, + int32_t lambda, + uint16_t out_shift, + int32_t out_add, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + uint16_t dim_im_out_x, + uint16_t dim_im_out_y, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_t, + uint16_t padding_b, + uint16_t padding_l, + uint16_t padding_r, + uint16_t stride_x, + uint16_t stride_y, + int flag_requant +); + +void xpulp_nn_avgpool_i8_i2( + int8_t * pIn, + int8_t * pOut, + int32_t lambda, + uint16_t out_shift, + int32_t out_add, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + uint16_t dim_im_out_x, + uint16_t dim_im_out_y, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_t, + uint16_t padding_b, + uint16_t padding_l, + uint16_t padding_r, + uint16_t stride_x, + uint16_t stride_y, + int flag_requant +); + +void xpulp_nn_avgpool_u4_u8( + uint8_t * pIn, + uint8_t * pOut, + int32_t lambda, + uint16_t out_shift, + int32_t out_add, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + uint16_t dim_im_out_x, + uint16_t dim_im_out_y, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_t, + uint16_t padding_b, + uint16_t padding_l, + uint16_t padding_r, + uint16_t stride_x, + uint16_t stride_y, + int flag_requant +); + +void xpulp_nn_avgpool_u4_i8( + uint8_t * pIn, + int8_t * pOut, + int32_t lambda, + uint16_t out_shift, + int32_t out_add, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + uint16_t dim_im_out_x, + uint16_t dim_im_out_y, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_t, + uint16_t padding_b, + uint16_t padding_l, + uint16_t padding_r, + uint16_t stride_x, + uint16_t stride_y, + int flag_requant +); + +void xpulp_nn_avgpool_i4_u8( + int8_t * pIn, + uint8_t * pOut, + int32_t lambda, + uint16_t out_shift, + int32_t out_add, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + uint16_t dim_im_out_x, + uint16_t dim_im_out_y, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_t, + uint16_t padding_b, + uint16_t padding_l, + uint16_t padding_r, + uint16_t stride_x, + uint16_t stride_y, + int flag_requant +); + +void xpulp_nn_avgpool_i4_i8( + int8_t * pIn, + int8_t * pOut, + int32_t lambda, + uint16_t out_shift, + int32_t out_add, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + uint16_t dim_im_out_x, + uint16_t dim_im_out_y, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_t, + uint16_t padding_b, + uint16_t padding_l, + uint16_t padding_r, + uint16_t stride_x, + uint16_t stride_y, + int flag_requant +); + +void xpulp_nn_avgpool_u4_u4( + uint8_t * pIn, + uint8_t * pOut, + int32_t lambda, + uint16_t out_shift, + int32_t out_add, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + uint16_t dim_im_out_x, + uint16_t dim_im_out_y, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_t, + uint16_t padding_b, + uint16_t padding_l, + uint16_t padding_r, + uint16_t stride_x, + uint16_t stride_y, + int flag_requant +); + +void xpulp_nn_avgpool_u4_i4( + uint8_t * pIn, + int8_t * pOut, + int32_t lambda, + uint16_t out_shift, + int32_t out_add, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + uint16_t dim_im_out_x, + uint16_t dim_im_out_y, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_t, + uint16_t padding_b, + uint16_t padding_l, + uint16_t padding_r, + uint16_t stride_x, + uint16_t stride_y, + int flag_requant +); + +void xpulp_nn_avgpool_i4_u4( + int8_t * pIn, + uint8_t * pOut, + int32_t lambda, + uint16_t out_shift, + int32_t out_add, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + uint16_t dim_im_out_x, + uint16_t dim_im_out_y, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_t, + uint16_t padding_b, + uint16_t padding_l, + uint16_t padding_r, + uint16_t stride_x, + uint16_t stride_y, + int flag_requant +); + +void xpulp_nn_avgpool_i4_i4( + int8_t * pIn, + int8_t * pOut, + int32_t lambda, + uint16_t out_shift, + int32_t out_add, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + uint16_t dim_im_out_x, + uint16_t dim_im_out_y, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_t, + uint16_t padding_b, + uint16_t padding_l, + uint16_t padding_r, + uint16_t stride_x, + uint16_t stride_y, + int flag_requant +); + +void xpulp_nn_avgpool_u4_u2( + uint8_t * pIn, + uint8_t * pOut, + int32_t lambda, + uint16_t out_shift, + int32_t out_add, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + uint16_t dim_im_out_x, + uint16_t dim_im_out_y, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_t, + uint16_t padding_b, + uint16_t padding_l, + uint16_t padding_r, + uint16_t stride_x, + uint16_t stride_y, + int flag_requant +); + +void xpulp_nn_avgpool_u4_i2( + uint8_t * pIn, + int8_t * pOut, + int32_t lambda, + uint16_t out_shift, + int32_t out_add, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + uint16_t dim_im_out_x, + uint16_t dim_im_out_y, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_t, + uint16_t padding_b, + uint16_t padding_l, + uint16_t padding_r, + uint16_t stride_x, + uint16_t stride_y, + int flag_requant +); + +void xpulp_nn_avgpool_i4_u2( + int8_t * pIn, + uint8_t * pOut, + int32_t lambda, + uint16_t out_shift, + int32_t out_add, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + uint16_t dim_im_out_x, + uint16_t dim_im_out_y, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_t, + uint16_t padding_b, + uint16_t padding_l, + uint16_t padding_r, + uint16_t stride_x, + uint16_t stride_y, + int flag_requant +); + +void xpulp_nn_avgpool_i4_i2( + int8_t * pIn, + int8_t * pOut, + int32_t lambda, + uint16_t out_shift, + int32_t out_add, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + uint16_t dim_im_out_x, + uint16_t dim_im_out_y, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_t, + uint16_t padding_b, + uint16_t padding_l, + uint16_t padding_r, + uint16_t stride_x, + uint16_t stride_y, + int flag_requant +); + +void xpulp_nn_avgpool_u2_u8( + uint8_t * pIn, + uint8_t * pOut, + int32_t lambda, + uint16_t out_shift, + int32_t out_add, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + uint16_t dim_im_out_x, + uint16_t dim_im_out_y, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_t, + uint16_t padding_b, + uint16_t padding_l, + uint16_t padding_r, + uint16_t stride_x, + uint16_t stride_y, + int flag_requant +); + +void xpulp_nn_avgpool_u2_i8( + uint8_t * pIn, + int8_t * pOut, + int32_t lambda, + uint16_t out_shift, + int32_t out_add, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + uint16_t dim_im_out_x, + uint16_t dim_im_out_y, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_t, + uint16_t padding_b, + uint16_t padding_l, + uint16_t padding_r, + uint16_t stride_x, + uint16_t stride_y, + int flag_requant +); + +void xpulp_nn_avgpool_i2_u8( + int8_t * pIn, + uint8_t * pOut, + int32_t lambda, + uint16_t out_shift, + int32_t out_add, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + uint16_t dim_im_out_x, + uint16_t dim_im_out_y, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_t, + uint16_t padding_b, + uint16_t padding_l, + uint16_t padding_r, + uint16_t stride_x, + uint16_t stride_y, + int flag_requant +); + +void xpulp_nn_avgpool_i2_i8( + int8_t * pIn, + int8_t * pOut, + int32_t lambda, + uint16_t out_shift, + int32_t out_add, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + uint16_t dim_im_out_x, + uint16_t dim_im_out_y, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_t, + uint16_t padding_b, + uint16_t padding_l, + uint16_t padding_r, + uint16_t stride_x, + uint16_t stride_y, + int flag_requant +); + +void xpulp_nn_avgpool_u2_u4( + uint8_t * pIn, + uint8_t * pOut, + int32_t lambda, + uint16_t out_shift, + int32_t out_add, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + uint16_t dim_im_out_x, + uint16_t dim_im_out_y, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_t, + uint16_t padding_b, + uint16_t padding_l, + uint16_t padding_r, + uint16_t stride_x, + uint16_t stride_y, + int flag_requant +); + +void xpulp_nn_avgpool_u2_i4( + uint8_t * pIn, + int8_t * pOut, + int32_t lambda, + uint16_t out_shift, + int32_t out_add, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + uint16_t dim_im_out_x, + uint16_t dim_im_out_y, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_t, + uint16_t padding_b, + uint16_t padding_l, + uint16_t padding_r, + uint16_t stride_x, + uint16_t stride_y, + int flag_requant +); + +void xpulp_nn_avgpool_i2_u4( + int8_t * pIn, + uint8_t * pOut, + int32_t lambda, + uint16_t out_shift, + int32_t out_add, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + uint16_t dim_im_out_x, + uint16_t dim_im_out_y, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_t, + uint16_t padding_b, + uint16_t padding_l, + uint16_t padding_r, + uint16_t stride_x, + uint16_t stride_y, + int flag_requant +); + +void xpulp_nn_avgpool_i2_i4( + int8_t * pIn, + int8_t * pOut, + int32_t lambda, + uint16_t out_shift, + int32_t out_add, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + uint16_t dim_im_out_x, + uint16_t dim_im_out_y, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_t, + uint16_t padding_b, + uint16_t padding_l, + uint16_t padding_r, + uint16_t stride_x, + uint16_t stride_y, + int flag_requant +); + +void xpulp_nn_avgpool_u2_u2( + uint8_t * pIn, + uint8_t * pOut, + int32_t lambda, + uint16_t out_shift, + int32_t out_add, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + uint16_t dim_im_out_x, + uint16_t dim_im_out_y, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_t, + uint16_t padding_b, + uint16_t padding_l, + uint16_t padding_r, + uint16_t stride_x, + uint16_t stride_y, + int flag_requant +); + +void xpulp_nn_avgpool_u2_i2( + uint8_t * pIn, + int8_t * pOut, + int32_t lambda, + uint16_t out_shift, + int32_t out_add, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + uint16_t dim_im_out_x, + uint16_t dim_im_out_y, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_t, + uint16_t padding_b, + uint16_t padding_l, + uint16_t padding_r, + uint16_t stride_x, + uint16_t stride_y, + int flag_requant +); + +void xpulp_nn_avgpool_i2_u2( + int8_t * pIn, + uint8_t * pOut, + int32_t lambda, + uint16_t out_shift, + int32_t out_add, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + uint16_t dim_im_out_x, + uint16_t dim_im_out_y, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_t, + uint16_t padding_b, + uint16_t padding_l, + uint16_t padding_r, + uint16_t stride_x, + uint16_t stride_y, + int flag_requant +); + +void xpulp_nn_avgpool_i2_i2( + int8_t * pIn, + int8_t * pOut, + int32_t lambda, + uint16_t out_shift, + int32_t out_add, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + uint16_t dim_im_out_x, + uint16_t dim_im_out_y, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_t, + uint16_t padding_b, + uint16_t padding_l, + uint16_t padding_r, + uint16_t stride_x, + uint16_t stride_y, + int flag_requant +); + +void xpulp_nn_add_u8_u8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + uint16_t out_mult1, + uint16_t out_mult2, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in); + +void xpulp_nn_add_u8_u8_u8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u8_u8_u4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u8_u8_u2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u8_u8_i8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u8_u8_i4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u8_u8_i2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u8_i8_u8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u8_i8_u4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u8_i8_u2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u8_i8_i8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u8_i8_i4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u8_i8_i2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i8_u8_u8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i8_u8_u4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i8_u8_u2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i8_u8_i8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i8_u8_i4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i8_u8_i2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i8_i8_u8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i8_i8_u4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i8_i8_u2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i8_i8_i8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i8_i8_i4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i8_i8_i2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u8_u4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + uint16_t out_mult1, + uint16_t out_mult2, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in); + +void xpulp_nn_add_u8_u4_u8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u8_u4_u4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u8_u4_u2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u8_u4_i8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u8_u4_i4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u8_u4_i2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u8_i4_u8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u8_i4_u4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u8_i4_u2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u8_i4_i8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u8_i4_i4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u8_i4_i2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i8_u4_u8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i8_u4_u4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i8_u4_u2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i8_u4_i8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i8_u4_i4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i8_u4_i2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i8_i4_u8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i8_i4_u4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i8_i4_u2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i8_i4_i8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i8_i4_i4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i8_i4_i2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u8_u2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + uint16_t out_mult1, + uint16_t out_mult2, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in); + +void xpulp_nn_add_u8_u2_u8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u8_u2_u4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u8_u2_u2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u8_u2_i8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u8_u2_i4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u8_u2_i2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u8_i2_u8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u8_i2_u4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u8_i2_u2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u8_i2_i8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u8_i2_i4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u8_i2_i2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i8_u2_u8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i8_u2_u4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i8_u2_u2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i8_u2_i8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i8_u2_i4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i8_u2_i2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i8_i2_u8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i8_i2_u4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i8_i2_u2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i8_i2_i8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i8_i2_i4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i8_i2_i2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u4_u8_u8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u4_u8_u4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u4_u8_u2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u4_u8_i8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u4_u8_i4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u4_u8_i2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u4_i8_u8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u4_i8_u4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u4_i8_u2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u4_i8_i8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u4_i8_i4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u4_i8_i2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i4_u8_u8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i4_u8_u4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i4_u8_u2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i4_u8_i8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i4_u8_i4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i4_u8_i2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i4_i8_u8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i4_i8_u4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i4_i8_u2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i4_i8_i8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i4_i8_i4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i4_i8_i2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u4_u4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + uint16_t out_mult1, + uint16_t out_mult2, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in); + +void xpulp_nn_add_u4_u4_u8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u4_u4_u4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u4_u4_u2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u4_u4_i8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u4_u4_i4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u4_u4_i2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u4_i4_u8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u4_i4_u4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u4_i4_u2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u4_i4_i8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u4_i4_i4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u4_i4_i2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i4_u4_u8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i4_u4_u4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i4_u4_u2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i4_u4_i8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i4_u4_i4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i4_u4_i2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i4_i4_u8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i4_i4_u4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i4_i4_u2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i4_i4_i8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i4_i4_i4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i4_i4_i2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u4_u2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + uint16_t out_mult1, + uint16_t out_mult2, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in); + +void xpulp_nn_add_u4_u2_u8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u4_u2_u4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u4_u2_u2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u4_u2_i8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u4_u2_i4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u4_u2_i2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u4_i2_u8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u4_i2_u4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u4_i2_u2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u4_i2_i8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u4_i2_i4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u4_i2_i2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i4_u2_u8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i4_u2_u4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i4_u2_u2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i4_u2_i8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i4_u2_i4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i4_u2_i2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i4_i2_u8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i4_i2_u4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i4_i2_u2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i4_i2_i8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i4_i2_i4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i4_i2_i2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u2_u8_u8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u2_u8_u4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u2_u8_u2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u2_u8_i8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u2_u8_i4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u2_u8_i2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u2_i8_u8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u2_i8_u4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u2_i8_u2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u2_i8_i8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u2_i8_i4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u2_i8_i2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i2_u8_u8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i2_u8_u4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i2_u8_u2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i2_u8_i8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i2_u8_i4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i2_u8_i2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i2_i8_u8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i2_i8_u4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i2_i8_u2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i2_i8_i8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i2_i8_i4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i2_i8_i2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u2_u4_u8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u2_u4_u4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u2_u4_u2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u2_u4_i8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u2_u4_i4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u2_u4_i2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u2_i4_u8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u2_i4_u4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u2_i4_u2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u2_i4_i8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u2_i4_i4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u2_i4_i2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i2_u4_u8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i2_u4_u4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i2_u4_u2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i2_u4_i8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i2_u4_i4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i2_u4_i2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i2_i4_u8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i2_i4_u4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i2_i4_u2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i2_i4_i8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i2_i4_i4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i2_i4_i2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u2_u2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + uint16_t out_mult1, + uint16_t out_mult2, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in); + +void xpulp_nn_add_u2_u2_u8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u2_u2_u4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u2_u2_u2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u2_u2_i8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u2_u2_i4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u2_u2_i2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u2_i2_u8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u2_i2_u4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u2_i2_u2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u2_i2_i8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u2_i2_i4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u2_i2_i2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i2_u2_u8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i2_u2_u4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i2_u2_u2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i2_u2_i8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i2_u2_i4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i2_u2_i2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i2_i2_u8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i2_i2_u4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i2_i2_u2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i2_i2_i8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i2_i2_i4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i2_i2_i2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + + + +#endif \ No newline at end of file diff --git a/rt_nn_tests/xpnnv2_conv/pulp_nn_utils.h b/rt_nn_tests/xpnnv2_conv/pulp_nn_utils.h new file mode 100644 index 0000000..86107a0 --- /dev/null +++ b/rt_nn_tests/xpnnv2_conv/pulp_nn_utils.h @@ -0,0 +1,2006 @@ +/* + * pulp_nn_utils.h + * Nazareno Bruschi + * Alessandro Nadalini + * Georg Rutishauser + * + * Copyright (C) 2019-2020 ETH Zurich & University of Bologna + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef __PULPNN_UTILS__ +#define __PULPNN_UTILS__ + +#include + +typedef signed short v2s __attribute__((vector_size (4))); + + + +#define min(a,b) ((a)<(b)?(a):(b)) +#define log2(x) __builtin_pulp_fl1(x) +#define PACK_INT2_SIZE(x) ((x) >> 2) + +#define MemoryFence() asm volatile("":::"memory") + +#define CHANS_DECOMPR(x) (5*x >> 2) // equivalent to division by 0.8 + +/* Functions for Compressed MAC */ +#define CompressedMAC(sum, ptr, config) asm volatile( \ + "pv.smlsdotsp.t %[shum], %[phtr], %[chonfig];" \ + : [shum] "+r" (sum), [phtr] "+r" (ptr): [chonfig] "I" (config)) + +#define CompressedMACUnsigned(sum, ptr, config) asm volatile( \ + "pv.smlsdotsup.t %[shum], %[phtr], %[chonfig];" \ + : [shum] "+r" (sum), [phtr] "+r" (ptr): [chonfig] "I" (config)) + +#define InitNNRF(ptr, config) asm volatile( \ + "pv.smlsdotsp.t x0, %[phtr], %[chonfig];" \ + : [phtr] "+r" (ptr) : [chonfig] "I" (config)) + +#define ThresholdCompress(res, val, thrs) asm volatile( \ + "pv.thrc %[rhes], %[vhal], %[thhrs];" : [rhes] "+r" (res) : [vhal] "r" (val), [thhrs] "r" (thrs)) + +#define GetConfig(a_update, b_update, a_reg, b_reg) a_update << 4 | b_update << 3 | a_reg << 1 | b_reg + +/* Functions for threshold&compress */ +#define check_store(res, pOut) \ + if ((res & 0xe0000000) == 0x00000000) { \ + *pOut = res & 0xff; \ + pOut++; \ + incr_val=ch_out_r; } + +#define check_store_4x1(res, pOut) \ + if ((res & 0xe0000000) == 0x00000000) { \ + *pOut = res & 0xff; \ + pOut++; } + +#define reset_currThr() \ + if ((uint32_t *) currThr == (uint32_t *) (pThr + ch_out)) { \ + currThr = (v2s *) pThr; \ + } + +#define MacLoads20(a_update, b_update, a_reg, b_reg, ptr, sum) __builtin_pulp_mlsdotsp20_v3(a_update, b_update, a_reg, b_reg, ptr, sum) + +#define MacLoad20(a_update, b_update, a_reg, b_reg, ptr, sum) __builtin_pulp_mlsdotsup20_v3(a_update, b_update, a_reg, b_reg, ptr, sum) + +/* Functions for compressed min/max */ +#define CompressedMax(res, in1, in2) asm volatile( \ + "pv.max.t %[res_], %[in1_], %[in2_];" : [res_] "=r" (res) : [in1_] "r" (in1), [in2_] "r" (in2)) + +#define CompressedMin(res, in1, in2) asm volatile( \ + "pv.min.t %[res_], %[in1_], %[in2_];" : [res_] "=r" (res) : [in1_] "r" (in1), [in2_] "r" (in2)) + +#define Max16(res, in1, in2) asm volatile( \ + "pv.max.c %[res_], %[in1_], %[in2_];" : [res_] "=r" (res) : [in1_] "r" (in1), [in2_] "r" (in2)) + +#define Min16(res, in1, in2) asm volatile( \ + "pv.min.c %[res_], %[in1_], %[in2_];" : [res_] "=r" (res) : [in1_] "r" (in1), [in2_] "r" (in2)) + +#define thr_cmp(state, val, threshs) __builtin_pulp_thresh_compr(state, val, threshs) + +typedef unsigned char v4u __attribute__((vector_size (4))); +typedef signed char v4s __attribute__((vector_size (4))); + +#define bitext(x,size,off) __builtin_pulp_bextract(x,size,off) +#define bitextu(x,size,off) __builtin_pulp_bextractu(x,size,off) +#ifdef __clang__ +#define bitins(dst,not_mask_imm,src,mask_imm,off) __builtin_binsert(dst,not_mask_imm,src,mask_imm,off) +#else +#define bitins(dst,not_mask_imm,src,mask_imm,off) __builtin_pulp_binsert(dst,not_mask_imm,src,mask_imm,off) +#endif +#define pack(x,y,z,t) __builtin_pulp_pack4(x,y,z,t) +#define max4(a,b) __builtin_pulp_maxu4(a,b) +#define maxs4(a, b) __builtin_pulp_max4(a, b) +#define max8(a, b) __builtin_pulp_maxu8(a, b) +#define maxs8(a, b) __builtin_pulp_max8(a, b) +#define max16(a, b) __builtin_pulp_maxu16(a, b) +#define maxs16(a, b) __builtin_pulp_max16(a, b) +#define max32(a,b) __builtin_pulp_maxusi(a,b) +#define maxs32(a,b) __builtin_pulp_maxsi(a,b) +#define min32(a,b) __builtin_pulp_minusi(a,b) +#define mins32(a,b) __builtin_pulp_minsi(a,b) +#define min4(a, b) __builtin_pulp_minu4(a, b) +#define mins4(a, b) __builtin_pulp_min4(a, b) +#define min8(a, b) __builtin_pulp_minu8(a, b) +#define mins8(a, b) __builtin_pulp_min8(a, b) +#define min16(a, b) __builtin_pulp_minu16(a, b) +#define mins16(a, b) __builtin_pulp_min16(a, b) +#define avg4(a,b) __builtin_pulp_avgu4(a,b) +#define avg8(a,b) __builtin_pulp_avgu8(a,b) +#define avg16(a,b) __builtin_pulp_avgu16(a,b) +#define log2(x) __builtin_pulp_fl1(x) +#define min(a,b) ((a)<(b)?(a):(b)) +#define SumDotp4(a, b, c) __builtin_pulp_sdotusp4(a, b, c) +#define SumDotp8(a, b, c) __builtin_pulp_sdotusp8(a, b, c) +#define SumDotp16(a, b, c) __builtin_pulp_sdotusp16(a, b, c) +#define SumDotps4(a, b, c) __builtin_pulp_sdotsp4(a, b, c) +#define SumDotps8(a, b, c) __builtin_pulp_sdotsp8(a, b, c) +#define SumDotps16(a, b, c) __builtin_pulp_sdotsp16(a, b, c) +#define clip4(x) __builtin_pulp_clipu_r(x, 15) +#define clip2(x) __builtin_pulp_clipu_r(x, 3) +#define clip8(x) __builtin_pulp_clipu_r(x, 255) + +#define clips4(x) __builtin_pulp_clip_r(x, 7) +#define clips2(x) __builtin_pulp_clip_r(x, 1) +#define clips8(x) __builtin_pulp_clip_r(x, 127) +#define MacLoadInit(a_update, b_update, a_reg, b_reg, ptr) __builtin_pulp_mlinitspr_v3(a_update, b_update, a_reg, b_reg, ptr) +#define MacLoadUpdate(ptr) __builtin_pulp_mlupdatespr_v3(ptr) +#define MacLoadAssign(ptr) __builtin_pulp_mlassignspr_v3(ptr) +#define MacLoad4(a_update, b_update, a_reg, b_reg, ptr, sum) __builtin_pulp_mlsdotsup4_v3(a_update, b_update, a_reg, b_reg, ptr, sum) +#define MacLoad8(a_update, b_update, a_reg, b_reg, ptr, sum) __builtin_pulp_mlsdotsup8_v3(a_update, b_update, a_reg, b_reg, ptr, sum) +#define MacLoad16(a_update, b_update, a_reg, b_reg, ptr, sum) __builtin_pulp_mlsdotsup16_v3(a_update, b_update, a_reg, b_reg, ptr, sum) +#define MacLoads4(a_update, b_update, a_reg, b_reg, ptr, sum) __builtin_pulp_mlsdotsp4_v3(a_update, b_update, a_reg, b_reg, ptr, sum) +#define MacLoads8(a_update, b_update, a_reg, b_reg, ptr, sum) __builtin_pulp_mlsdotsp8_v3(a_update, b_update, a_reg, b_reg, ptr, sum) +#define MacLoads16(a_update, b_update, a_reg, b_reg, ptr, sum) __builtin_pulp_mlsdotsp16_v3(a_update, b_update, a_reg, b_reg, ptr, sum) + +#define PACK_INT8_SIZE(x) (x) +#define PACK_INT4_SIZE(x) ((x) >> 1) +#define PACK_INT2_SIZE(x) ((x) >> 2) + +#define MemoryFence() asm volatile("":::"memory") + +#define LEGACY_MODE(x) asm volatile ("csrwi 0x010," x) +#define IVEC_FMT(x) asm volatile ("csrwi 0x00D," x) +#define MIXED_SKIP(x) asm volatile ("csrwi 0x00F," x) +#define A_ADDRESS(x) asm volatile ("csrw 0x100, %0" :: "r" (x)) +#define W_ADDRESS(x) asm volatile ("csrw 0x101, %0" :: "r" (x)) +#define A_STRIDE(x) asm volatile ("csrw 0x102, %0":: "r" (x)) +#define W_STRIDE(x) asm volatile ("csrw 0x103, %0":: "r" (x)) +#define A_ROLLBACK(x) asm volatile ("csrw 0x104, %0":: "r" (x)) +#define W_ROLLBACK(x) asm volatile ("csrw 0x105, %0":: "r" (x)) +#define A_SKIP(x) asm volatile ("csrwi 0x106," x) +#define W_SKIP(x) asm volatile ("csrwi 0x107," x) + +static uint8_t __attribute__((noinline)) pulp_nn_quant_u2 ( + int32_t phi, + int16_t m, + int8_t d + ) { + int32_t x = (m * phi) >> d; + uint8_t res = clip2(x); + return res; +} +static uint8_t __attribute__((noinline)) pulp_nn_bn_quant_u2 ( + int32_t phi, + int32_t k, + int32_t lambda, + int8_t d + ) { + int32_t integer_image_phi = (k * phi) + lambda; + int32_t x = (integer_image_phi) >> d; + uint8_t res = clip2(x); + return res; +} +static uint8_t __attribute__((noinline)) pulp_nn_add_quant_u2 ( + uint8_t pix1, + uint8_t pix2, + int16_t m1, + int16_t m2, + int8_t d + ) { + uint32_t integer_image = pix1*m1 + pix2*m2; + uint32_t x = (integer_image) >> d; + uint8_t res = clip2(x); + return res; +} + +static int8_t __attribute__((noinline)) pulp_nn_quant_i2 ( + int32_t phi, + int16_t m, + int8_t d + ) { + int32_t x = (m * phi) >> d; + int8_t res = clips2(x); + return res; +} +static int8_t __attribute__((noinline)) pulp_nn_bn_quant_i2 ( + int32_t phi, + int32_t k, + int32_t lambda, + int8_t d + ) { + int32_t integer_image_phi = (k * phi) + lambda; + int32_t x = (integer_image_phi) >> d; + int8_t res = clips2(x); + return res; +} +static int8_t __attribute__((noinline)) pulp_nn_add_quant_i2 ( + int8_t pix1, + int8_t pix2, + int16_t m1, + int16_t m2, + int8_t d + ) { + int32_t integer_image = pix1*m1 + pix2*m2; + int32_t x = (integer_image) >> d; + int8_t res = clips2(x); + return res; +} + +static uint8_t __attribute__((noinline)) pulp_nn_quant_u4 ( + int32_t phi, + int16_t m, + int8_t d + ) { + int32_t x = (m * phi) >> d; + uint8_t res = clip4(x); + return res; +} +static uint8_t __attribute__((noinline)) pulp_nn_bn_quant_u4 ( + int32_t phi, + int32_t k, + int32_t lambda, + int8_t d + ) { + int32_t integer_image_phi = (k * phi) + lambda; + int32_t x = (integer_image_phi) >> d; + uint8_t res = clip4(x); + return res; +} +static uint8_t __attribute__((noinline)) pulp_nn_add_quant_u4 ( + uint8_t pix1, + uint8_t pix2, + int16_t m1, + int16_t m2, + int8_t d + ) { + uint32_t integer_image = pix1*m1 + pix2*m2; + uint32_t x = (integer_image) >> d; + uint8_t res = clip4(x); + return res; +} + +static int8_t __attribute__((noinline)) pulp_nn_quant_i4 ( + int32_t phi, + int16_t m, + int8_t d + ) { + int32_t x = (m * phi) >> d; + int8_t res = clips4(x); + return res; +} +static int8_t __attribute__((noinline)) pulp_nn_bn_quant_i4 ( + int32_t phi, + int32_t k, + int32_t lambda, + int8_t d + ) { + int32_t integer_image_phi = (k * phi) + lambda; + int32_t x = (integer_image_phi) >> d; + int8_t res = clips4(x); + return res; +} +static int8_t __attribute__((noinline)) pulp_nn_add_quant_i4 ( + int8_t pix1, + int8_t pix2, + int16_t m1, + int16_t m2, + int8_t d + ) { + int32_t integer_image = pix1*m1 + pix2*m2; + int32_t x = (integer_image) >> d; + int8_t res = clips4(x); + return res; +} + +static uint8_t __attribute__((noinline)) pulp_nn_quant_u8 ( + int32_t phi, + int16_t m, + int8_t d + ) { + int32_t x = (m * phi) >> d; + uint8_t res = clip8(x); + return res; +} +static uint8_t __attribute__((noinline)) pulp_nn_bn_quant_u8 ( + int32_t phi, + int32_t k, + int32_t lambda, + int8_t d + ) { + int32_t integer_image_phi = (k * phi) + lambda; + int32_t x = (integer_image_phi) >> d; + uint8_t res = clip8(x); + return res; +} +static uint8_t __attribute__((noinline)) pulp_nn_add_quant_u8 ( + uint8_t pix1, + uint8_t pix2, + int16_t m1, + int16_t m2, + int8_t d + ) { + uint32_t integer_image = pix1*m1 + pix2*m2; + uint32_t x = (integer_image) >> d; + uint8_t res = clip8(x); + return res; +} + +static int8_t __attribute__((noinline)) pulp_nn_quant_i8 ( + int32_t phi, + int16_t m, + int8_t d + ) { + int32_t x = (m * phi) >> d; + int8_t res = clips8(x); + return res; +} +static int8_t __attribute__((noinline)) pulp_nn_bn_quant_i8 ( + int32_t phi, + int32_t k, + int32_t lambda, + int8_t d + ) { + int32_t integer_image_phi = (k * phi) + lambda; + int32_t x = (integer_image_phi) >> d; + int8_t res = clips8(x); + return res; +} +static int8_t __attribute__((noinline)) pulp_nn_add_quant_i8 ( + int8_t pix1, + int8_t pix2, + int16_t m1, + int16_t m2, + int8_t d + ) { + int32_t integer_image = pix1*m1 + pix2*m2; + int32_t x = (integer_image) >> d; + int8_t res = clips8(x); + return res; +} + + +static uint8_t __attribute__((noinline)) pulp_nn_u4_quant(int input, int16_t * pThr) +{ + if(input <= pThr[7] ) + { + if( input <= pThr[3]) + { + if( input <= pThr[1]) + { + if( input <= pThr[0]) + return 0; + else + return 1; + } + else + { + if( input <= pThr[2]) + return 2; + else + return 3; + } + } + else + { + if( input <= pThr[5]) + { + if( input <= pThr[4]) + return 4; + else + return 5; + } + else + { + if( input <= pThr[6]) + return 6; + else + return 7; + } + } + } + else + { + if( input <= pThr[11]) + { + if( input <= pThr[9]) + { + if( input <= pThr[8]) + return 8; + else + return 9; + } + else + { + if( input <= pThr[10]) + return 10; + else + return 11; + } + } + else + { + if( input <= pThr[13]) + { + if( input <= pThr[12]) + return 12; + else + return 13; + } + else + { + if( input <= pThr[14]) + return 14; + else + return 15; + } + } + } +} + +static uint8_t __attribute__((noinline)) pulp_nn_u2_quant(int input, int16_t * pThr) +{ + if( input <= pThr[1]) + { + if( input <= pThr[0]) + { + return 0; + } + else + { + return 1; + } + } + else + { + if( input <= pThr[2]) + { + return 2; + } + else + { + return 3; + } + } +} + +/* + * Common + */ + + +static v4s __attribute__((noinline)) pulp_nn_i4_to_i8_r( int8_t *pSrc) +{ + v4s Src = *((v4s*) pSrc); + int8_t bext1, bext2, bext3, bext4; + + bext1 = (int8_t) bitext((int) Src, 4, 0); + bext2 = (int8_t) bitext((int) Src, 4, 4); + bext3 = (int8_t) bitext((int) Src, 4, 8); + bext4 = (int8_t) bitext((int) Src, 4, 12); + v4s res = pack((int8_t) bext1, (int8_t) bext2, (int8_t) bext3, (int8_t) bext4); + + return res; +} + +static v4u __attribute__((noinline)) pulp_nn_u4_to_u8_r(uint8_t *pSrc) +{ + v4u Src = *((v4u*) pSrc); + uint8_t bext1, bext2, bext3, bext4; + + bext1 = (uint8_t) bitextu((unsigned int) Src, 4, 0); + bext2 = (uint8_t) bitextu((unsigned int) Src, 4, 4); + bext3 = (uint8_t) bitextu((unsigned int) Src, 4, 8); + bext4 = (uint8_t) bitextu((unsigned int) Src, 4, 12); + v4u res = pack((uint8_t) bext1, (uint8_t) bext2, (uint8_t) bext3, (uint8_t) bext4); + + return res; +} + +static v4s __attribute__((noinline)) pulp_nn_i2_to_i8_r( int8_t *pSrc) +{ + v4s Src = *((v4s*) pSrc); + int8_t bext1, bext2, bext3, bext4; + + bext1 = (int8_t) bitext((int) Src, 2, 0); + bext2 = (int8_t) bitext((int) Src, 2, 2); + bext3 = (int8_t) bitext((int) Src, 2, 4); + bext4 = (int8_t) bitext((int) Src, 2, 6); + v4s res = pack((int8_t) bext1, (int8_t) bext2, (int8_t) bext3, (int8_t) bext4); + + return res; +} + +static v4u __attribute__((noinline)) pulp_nn_u2_to_u8_r(uint8_t *pSrc) +{ + v4u Src = *((v4u*) pSrc); + uint8_t bext1, bext2, bext3, bext4; + + bext1 = (uint8_t) bitextu((unsigned int) Src, 2, 0); + bext2 = (uint8_t) bitextu((unsigned int) Src, 2, 2); + bext3 = (uint8_t) bitextu((unsigned int) Src, 2, 4); + bext4 = (uint8_t) bitextu((unsigned int) Src, 2, 6); + v4u res = pack((uint8_t) bext1, (uint8_t) bext2, (uint8_t) bext3, (uint8_t) bext4); + + return res; +} + +static v4s __attribute__((noinline)) pulp_nn_i2_to_i4_r(int8_t *pSrc) +{ + int8_t mask = 0xf0; + int8_t n_mask = ~ mask; + int8_t off = 0x04; + + v4s Src = *((v4s*) pSrc); + int8_t bext1, bext2, bext3, bext4; + int8_t out1, out2, out3, out4; + + bext1 = (int8_t) bitextu((int) Src, 2, 0); + bext2 = (int8_t) bitextu((int) Src, 2, 2); + bext3 = (int8_t) bitextu((int) Src, 2, 4); + bext4 = (int8_t) bitextu((int) Src, 2, 6); + + out1 = bitins(bext1, n_mask, bext2, mask, off); + out2 = bitins(bext3, n_mask, bext4, mask, off); + + bext1 = (int8_t) bitextu((int) Src, 2, 8); + bext2 = (int8_t) bitextu((int) Src, 2, 10); + bext3 = (int8_t) bitextu((int) Src, 2, 12); + bext4 = (int8_t) bitextu((int) Src, 2, 14); + + out3 = bitins(bext1, n_mask, bext2, mask, off); + out4 = bitins(bext3, n_mask, bext4, mask, off); + + v4s res = pack((int8_t) out1, (int8_t) out2, (int8_t) out3, (int8_t) out4); + + return res; +} + +static v4u __attribute__((noinline)) pulp_nn_u2_to_u4_r(uint8_t *pSrc) +{ + int8_t mask = 0xf0; + int8_t n_mask = ~ mask; + int8_t off = 0x04; + + v4u Src = *((v4u*) pSrc); + uint8_t bext1, bext2, bext3, bext4; + uint8_t out1, out2, out3, out4; + + bext1 = (uint8_t) bitextu((unsigned int) Src, 2, 0); + bext2 = (uint8_t) bitextu((unsigned int) Src, 2, 2); + bext3 = (uint8_t) bitextu((unsigned int) Src, 2, 4); + bext4 = (uint8_t) bitextu((unsigned int) Src, 2, 6); + + out1 = bitins(bext1, n_mask, bext2, mask, off); + out2 = bitins(bext3, n_mask, bext4, mask, off); + + bext1 = (uint8_t) bitextu((unsigned int) Src, 2, 8); + bext2 = (uint8_t) bitextu((unsigned int) Src, 2, 10); + bext3 = (uint8_t) bitextu((unsigned int) Src, 2, 12); + bext4 = (uint8_t) bitextu((unsigned int) Src, 2, 14); + + out3 = bitins(bext1, n_mask, bext2, mask, off); + out4 = bitins(bext3, n_mask, bext4, mask, off); + + v4u res = pack((uint8_t) out1, (uint8_t) out2, (uint8_t) out3, (uint8_t) out4); + + return res; +} + +static int8_t *__attribute__((always_inline)) pulp_nn_i4_to_i8( int8_t *pSrc, int8_t *pDst) +{ + v4s Src = *((v4s*) pSrc); + int8_t bext1, bext2, bext3, bext4; + + pSrc+=4; + + bext1 = (int8_t) bitext((int) Src, 4, 0); + bext2 = (int8_t) bitext((int) Src, 4, 4); + bext3 = (int8_t) bitext((int) Src, 4, 8); + bext4 = (int8_t) bitext((int) Src, 4, 12); + *((v4s*)pDst) = pack((int8_t) bext1, (int8_t) bext2, (int8_t) bext3, (int8_t) bext4); + MemoryFence(); + pDst+=4; + bext1 = (int8_t) bitext((int) Src, 4, 16); + bext2 = (int8_t) bitext((int) Src, 4, 20); + bext3 = (int8_t) bitext((int) Src, 4, 24); + bext4 = (int8_t) bitext((int) Src, 4, 28); + *((v4s*)pDst) = pack((int8_t) bext1, (int8_t) bext2, (int8_t) bext3, (int8_t) bext4); + + return pSrc; +} + +static uint8_t *__attribute__((always_inline)) pulp_nn_u4_to_u8(uint8_t *pSrc, uint8_t *pDst) +{ + v4u Src = *((v4u*) pSrc); + uint8_t bext1, bext2, bext3, bext4; + + pSrc+=4; + + bext1 = (uint8_t) bitextu((unsigned int) Src, 4, 0); + bext2 = (uint8_t) bitextu((unsigned int) Src, 4, 4); + bext3 = (uint8_t) bitextu((unsigned int) Src, 4, 8); + bext4 = (uint8_t) bitextu((unsigned int) Src, 4, 12); + *((v4u*)pDst) = pack((uint8_t) bext1, (uint8_t) bext2, (uint8_t) bext3, (uint8_t) bext4); + MemoryFence(); + pDst+=4; + bext1 = (uint8_t) bitextu((unsigned int) Src, 4, 16); + bext2 = (uint8_t) bitextu((unsigned int) Src, 4, 20); + bext3 = (uint8_t) bitextu((unsigned int) Src, 4, 24); + bext4 = (uint8_t) bitextu((unsigned int) Src, 4, 28); + *((v4u*)pDst) = pack((uint8_t) bext1, (uint8_t) bext2, (uint8_t) bext3, (uint8_t) bext4); + + return pSrc; +} + +static int8_t *__attribute__((always_inline)) pulp_nn_i2_to_i8( int8_t * pSrc, int8_t * pDst) +{ + v4s Src = *((v4s*) pSrc); + int8_t bext1, bext2, bext3, bext4; + + pSrc+=4; + + bext1 = (int8_t) bitext((int) Src, 2, 0); + bext2 = (int8_t) bitext((int) Src, 2, 2); + bext3 = (int8_t) bitext((int) Src, 2, 4); + bext4 = (int8_t) bitext((int) Src, 2, 6); + *((v4s*)pDst) = pack((int8_t) bext1, (int8_t) bext2, (int8_t) bext3, (int8_t) bext4); + MemoryFence(); + pDst+=4; + bext1 = (int8_t) bitext((int) Src, 2, 8); + bext2 = (int8_t) bitext((int) Src, 2, 10); + bext3 = (int8_t) bitext((int) Src, 2, 12); + bext4 = (int8_t) bitext((int) Src, 2, 14); + *((v4s*)pDst) = pack((int8_t) bext1, (int8_t) bext2, (int8_t) bext3, (int8_t) bext4); + MemoryFence(); + pDst+=4; + bext1 = (int8_t) bitext((int) Src, 2, 16); + bext2 = (int8_t) bitext((int) Src, 2, 18); + bext3 = (int8_t) bitext((int) Src, 2, 20); + bext4 = (int8_t) bitext((int) Src, 2, 22); + *((v4s*)pDst) = pack((int8_t) bext1, (int8_t) bext2, (int8_t) bext3, (int8_t) bext4); + MemoryFence(); + pDst+=4; + bext1 = (int8_t) bitext((int) Src, 2, 24); + bext2 = (int8_t) bitext((int) Src, 2, 26); + bext3 = (int8_t) bitext((int) Src, 2, 28); + bext4 = (int8_t) bitext((int) Src, 2, 30); + *((v4s*)pDst) = pack((int8_t) bext1, (int8_t) bext2, (int8_t) bext3, (int8_t) bext4); + + return pSrc; +} + +static uint8_t *__attribute__((always_inline)) pulp_nn_u2_to_u8(uint8_t * pSrc, uint8_t * pDst) +{ + v4u Src = *((v4u*) pSrc); + uint8_t bext1, bext2, bext3, bext4; + + pSrc+=4; + + bext1 = (uint8_t) bitextu((unsigned int) Src, 2, 0); + bext2 = (uint8_t) bitextu((unsigned int) Src, 2, 2); + bext3 = (uint8_t) bitextu((unsigned int) Src, 2, 4); + bext4 = (uint8_t) bitextu((unsigned int) Src, 2, 6); + *((v4u*)pDst) = pack((uint8_t) bext1, (uint8_t) bext2, (uint8_t) bext3, (uint8_t) bext4); + MemoryFence(); + pDst+=4; + bext1 = (uint8_t) bitextu((unsigned int) Src, 2, 8); + bext2 = (uint8_t) bitextu((unsigned int) Src, 2, 10); + bext3 = (uint8_t) bitextu((unsigned int) Src, 2, 12); + bext4 = (uint8_t) bitextu((unsigned int) Src, 2, 14); + *((v4u*)pDst) = pack((uint8_t) bext1, (uint8_t) bext2, (uint8_t) bext3, (uint8_t) bext4); + MemoryFence(); + pDst+=4; + bext1 = (uint8_t) bitextu((unsigned int) Src, 2, 16); + bext2 = (uint8_t) bitextu((unsigned int) Src, 2, 18); + bext3 = (uint8_t) bitextu((unsigned int) Src, 2, 20); + bext4 = (uint8_t) bitextu((unsigned int) Src, 2, 22); + *((v4u*)pDst) = pack((uint8_t) bext1, (uint8_t) bext2, (uint8_t) bext3, (uint8_t) bext4); + MemoryFence(); + pDst+=4; + bext1 = (uint8_t) bitextu((unsigned int) Src, 2, 24); + bext2 = (uint8_t) bitextu((unsigned int) Src, 2, 26); + bext3 = (uint8_t) bitextu((unsigned int) Src, 2, 28); + bext4 = (uint8_t) bitextu((unsigned int) Src, 2, 30); + *((v4u*)pDst) = pack((uint8_t) bext1, (uint8_t) bext2, (uint8_t) bext3, (uint8_t) bext4); + + return pSrc; +} + +static int8_t *__attribute__((always_inline)) pulp_nn_i2_to_i4( int8_t * pSrc, int8_t * pDst) +{ + int8_t mask = 0xf0; + int8_t n_mask = ~ mask; + int8_t off = 0x04; + + v4s Src = *((v4s*) pSrc); + int8_t bext1, bext2, bext3, bext4; + int8_t out1, out2, out3, out4; + + pSrc+=4; + + bext1 = (int8_t) bitext((int) Src, 2, 0); + bext2 = (int8_t) bitext((int) Src, 2, 2); + bext3 = (int8_t) bitext((int) Src, 2, 4); + bext4 = (int8_t) bitext((int) Src, 2, 6); + + out1 = bitins(bext1, n_mask, bext2, mask, off); + out2 = bitins(bext3, n_mask, bext4, mask, off); + MemoryFence(); + + bext1 = (int8_t) bitext((int) Src, 2, 8); + bext2 = (int8_t) bitext((int) Src, 2, 10); + bext3 = (int8_t) bitext((int) Src, 2, 12); + bext4 = (int8_t) bitext((int) Src, 2, 14); + + out3 = bitins(bext1, n_mask, bext2, mask, off); + out4 = bitins(bext3, n_mask, bext4, mask, off); + + *((v4s*)pDst) = pack((int8_t) out1, (int8_t) out2, (int8_t) out3, (int8_t) out4); + MemoryFence(); + + pDst+=4; + bext1 = (int8_t) bitext((int) Src, 2, 16); + bext2 = (int8_t) bitext((int) Src, 2, 18); + bext3 = (int8_t) bitext((int) Src, 2, 20); + bext4 = (int8_t) bitext((int) Src, 2, 22); + + out1 = bitins(bext1, n_mask, bext2, mask, off); + out2 = bitins(bext3, n_mask, bext4, mask, off); + MemoryFence(); + + bext1 = (int8_t) bitext((int) Src, 2, 24); + bext2 = (int8_t) bitext((int) Src, 2, 26); + bext3 = (int8_t) bitext((int) Src, 2, 28); + bext4 = (int8_t) bitext((int) Src, 2, 30); + + out3 = bitins(bext1, n_mask, bext2, mask, off); + out4 = bitins(bext3, n_mask, bext4, mask, off); + + *((v4s*)pDst) = pack((int8_t) out1, (int8_t) out2, (int8_t) out3, (int8_t) out4); + + return pSrc; +} + +static uint8_t *__attribute__((always_inline)) pulp_nn_u2_to_u4( uint8_t * pSrc, uint8_t * pDst) +{ + int8_t mask = 0xf0; + int8_t n_mask = ~ mask; + int8_t off = 0x04; + + v4u Src = *((v4u*) pSrc); + uint8_t bext1, bext2, bext3, bext4; + uint8_t out1, out2, out3, out4; + + pSrc+=4; + + bext1 = (uint8_t) bitextu((unsigned int) Src, 2, 0); + bext2 = (uint8_t) bitextu((unsigned int) Src, 2, 2); + bext3 = (uint8_t) bitextu((unsigned int) Src, 2, 4); + bext4 = (uint8_t) bitextu((unsigned int) Src, 2, 6); + + out1 = bitins(bext1, n_mask, bext2, mask, off); + out2 = bitins(bext3, n_mask, bext4, mask, off); + MemoryFence(); + + bext1 = (uint8_t) bitextu((unsigned int) Src, 2, 8); + bext2 = (uint8_t) bitextu((unsigned int) Src, 2, 10); + bext3 = (uint8_t) bitextu((unsigned int) Src, 2, 12); + bext4 = (uint8_t) bitextu((unsigned int) Src, 2, 14); + + out3 = bitins(bext1, n_mask, bext2, mask, off); + out4 = bitins(bext3, n_mask, bext4, mask, off); + + *((v4u*)pDst) = pack((uint8_t) out1, (uint8_t) out2, (uint8_t) out3, (uint8_t) out4); + MemoryFence(); + + pDst+=4; + bext1 = (uint8_t) bitextu((unsigned int) Src, 2, 16); + bext2 = (uint8_t) bitextu((unsigned int) Src, 2, 18); + bext3 = (uint8_t) bitextu((unsigned int) Src, 2, 20); + bext4 = (uint8_t) bitextu((unsigned int) Src, 2, 22); + + out1 = bitins(bext1, n_mask, bext2, mask, off); + out2 = bitins(bext3, n_mask, bext4, mask, off); + MemoryFence(); + + bext1 = (uint8_t) bitextu((unsigned int) Src, 2, 24); + bext2 = (uint8_t) bitextu((unsigned int) Src, 2, 26); + bext3 = (uint8_t) bitextu((unsigned int) Src, 2, 28); + bext4 = (uint8_t) bitextu((unsigned int) Src, 2, 30); + + out3 = bitins(bext1, n_mask, bext2, mask, off); + out4 = bitins(bext3, n_mask, bext4, mask, off); + + *((v4u*)pDst) = pack((uint8_t) out1, (uint8_t) out2, (uint8_t) out3, (uint8_t) out4); + + return pSrc; +} + +/* + * XpulpV2 + */ + +static void __attribute__((noinline)) pulp_zero_mem(uint8_t * pBuffer, unsigned int size) +{ + int lfover = size &0x3; + for (int i=0; i<(size>>2); i++) + { + *((v4u *)pBuffer) = (v4u){0,0,0,0}; + MemoryFence(); + pBuffer+=4; + } + while(lfover) + { + *pBuffer++=0; + lfover--; + } +} + +static void __attribute__((noinline)) pulp_nn_im2col_u2_to_u8(uint8_t * pInput, uint8_t * pOutput, unsigned int blockSize) +{ + unsigned int blkCnt = blockSize >> 4u; + int lfover = blockSize & 0x0f; + for (int i = 0; i> 4u; + int lfover = blockSize & 0x0f; + for (int i = 0; i> 3u; + int lfover = blockSize & 0x07; + for (int i = 0; i> 3u; + int lfover = blockSize & 0x07; + for (int i = 0; i> 2u; + int lfover = blockSize & 0x03; + for (int i = 0; i> 2u; + int lfover = blockSize & 0x03; + for (int i = 0; i> 4u; + int lfover = blockSize & 0x0f; + for (int i = 0; i> 4u; + int lfover = blockSize & 0x0f; + for (int i = 0; i> 4u; + int lfover = blockSize & 0x0f; + for (int i = 0; i> 4u; + int lfover = blockSize & 0x0f; + for (int i = 0; i> 4u; + int lfover = blockSize & 0x0f; + for (int i = 0; i> 4u; + int lfover = blockSize & 0x0f; + for (int i = 0; i> 3u; + int lfover = blockSize & 0x07; + for (int i = 0; i> 3u; + int lfover = blockSize & 0x07; + for (int i = 0; i> 3u; + int lfover = blockSize & 0x07; + for (int i = 0; i> 3u; + int lfover = blockSize & 0x07; + for (int i = 0; i> 2u; + int lfover = blockSize & 0x03; + for (int i = 0; i> 2u; + int lfover = blockSize & 0x03; + for (int i = 0; i> 2; + + while(cnt > 0u) + { + inp = *((v4u*)pIn); + com = *((v4u*)pCom); + + *((v4u*)pIn) = max4(inp, com); + + pCom+=4; + pIn+=4; + cnt--; + } + + int left = length & 0x3; + while (left>0u) + { + if(*pIn<*pCom) + *pIn=*pCom; + + pIn++; + pCom++; + left--; + } +} + +static void __attribute__((noinline)) pulp_nn_compare_and_replace_if_larger_i8( + int8_t * base, int8_t * target, uint16_t length) { + int8_t *pIn = base; + int8_t *pCom = target; + v4s inp; + v4s com; + int cnt = length >> 2; + + while (cnt > 0u) { + inp = *((v4s *)pIn); + com = *((v4s *)pCom); + + *((v4s *)pIn) = maxs4(inp, com); + + pCom += 4; + pIn += 4; + cnt--; + } + + int left = length & 0x3; + while (left > 0u) { + if (*pIn < *pCom) + *pIn = *pCom; + + pIn++; + pCom++; + left--; + } +} + +static void __attribute__((noinline)) pulp_nn_avg_and_replace_u8(uint8_t * base, + uint8_t * target, + uint16_t length) +{ + uint8_t *pIn = base; + uint8_t *pCom = target; + + while (length>0u) + { + *pIn = ((*pIn + *pCom) >> 1); + + pIn++; + pCom++; + length--; + } +} + +static void __attribute__((noinline)) pulp_nn_compare_and_replace_if_larger_u4(uint8_t * base, + uint8_t * target, + uint16_t length) +{ + int8_t mask = 0xf0; + int8_t n_mask = ~ mask; + int8_t off = 0x04; + + uint8_t *pIn = base; + uint8_t *pCom = target; + v4u inp[2]; + v4u com[2]; + uint8_t *out; + int cnt = length >> 2; + + while(cnt > 0u) + { + pulp_nn_u4_to_u8(pIn, (uint8_t *)inp); + pulp_nn_u4_to_u8(pCom, (uint8_t *)com); + + *((v4u *)out) = max4(inp[0], com[0]); + + *((uint8_t*)pIn) = bitins(*out, n_mask, *(out + 1), mask, off); + pIn++; + *((uint8_t*)pIn) = bitins(*(out + 2), n_mask, *(out + 3), mask, off); + pIn++; + + *((v4u *)out) = max4(inp[1], com[1]); + + *((uint8_t*)pIn) = bitins(*out, n_mask, *(out + 1), mask, off); + pIn++; + *((uint8_t*)pIn) = bitins(*(out + 2), n_mask, *(out + 3), mask, off); + pIn++; + + pCom+=4; + cnt--; + } + + int left = length & 0x3; + while (left>0u) + { + uint8_t inA0 = (uint8_t) bitextu((unsigned int) *pIn, 4, 0); + uint8_t inA1 = (uint8_t) bitextu((unsigned int) *pIn, 4, 4); + uint8_t inB0 = (uint8_t) bitextu((unsigned int) *pCom, 4, 0); + uint8_t inB1 = (uint8_t) bitextu((unsigned int) *pCom, 4, 4); + + if(inA0> 2; + + while(cnt > 0u) + { + pulp_nn_i4_to_i8(pIn, (int8_t *)inp); + pulp_nn_i4_to_i8(pCom, (int8_t *)com); + + *((v4s *)out) = maxs4(inp[0], com[0]); + + *((int8_t*)pIn) = bitins(*out, n_mask, *(out + 1), mask, off); + pIn++; + *((int8_t*)pIn) = bitins(*(out + 2), n_mask, *(out + 3), mask, off); + pIn++; + + *((v4s *)out) = maxs4(inp[1], com[1]); + + *((int8_t*)pIn) = bitins(*out, n_mask, *(out + 1), mask, off); + pIn++; + *((int8_t*)pIn) = bitins(*(out + 2), n_mask, *(out + 3), mask, off); + pIn++; + + pCom+=4; + cnt--; + } + + int left = length & 0x3; + while (left>0u) + { + int8_t inA0 = (int8_t) bitext((int) *pIn, 4, 0); + int8_t inA1 = (int8_t) bitext((int) *pIn, 4, 4); + int8_t inB0 = (int8_t) bitext((int) *pCom, 4, 0); + int8_t inB1 = (int8_t) bitext((int) *pCom, 4, 4); + + if(inA00u) + { + uint8_t inA0 = (uint8_t) bitextu((unsigned int) *pIn, 4, 0); + uint8_t inA1 = (uint8_t) bitextu((unsigned int) *pIn, 4, 4); + uint8_t inB0 = (uint8_t) bitextu((unsigned int) *pCom, 4, 0); + uint8_t inB1 = (uint8_t) bitextu((unsigned int) *pCom, 4, 4); + + inA0 = ((inA0 + inB0) >> 1); + inA1 = ((inA1 + inB1) >> 1); + + *((uint8_t*)pIn) = bitins(inA0, n_mask, inA1, mask, off); + + pIn++; + pCom++; + length--; + } +} + +static void __attribute__((noinline)) pulp_nn_compare_and_replace_if_larger_u2(uint8_t * base, + uint8_t * target, + uint16_t length) +{ + int8_t mask2 = 0x0c; + int8_t n_mask2 = ~ mask2; + int8_t mask4 = 0x30; + int8_t n_mask4 = ~ mask4; + int8_t mask6 = 0xc0; + int8_t n_mask6 = ~ mask6; + int8_t off2 = 2; + int8_t off4 = 4; + int8_t off6 = 6; + + uint8_t *pIn = base; + uint8_t *pCom = target; + v4u inp[4]; + v4u com[4]; + uint8_t *out; + int cnt = length >> 2; + + while(cnt > 0u) + { + pulp_nn_u2_to_u8(pIn, inp); + pulp_nn_u2_to_u8(pCom, com); + + *((v4u*)out) = max4(inp[0], com[0]); + + uint8_t inA = (uint8_t) bitins(*out, n_mask2, *(out + 1), mask2, off2); + inA = bitins(inA, n_mask4, *(out + 2), mask4, off4); + *((uint8_t*)pIn) = bitins(inA, n_mask6, *(out + 3), mask6, off6); + pIn++; + + *((v4u*)out) = max4(inp[1], com[1]); + + inA = (uint8_t) bitins(*out, n_mask2, *(out + 1), mask2, off2); + inA = bitins(inA, n_mask4, *(out + 2), mask4, off4); + *((uint8_t*)pIn) = bitins(inA, n_mask6, *(out + 3), mask6, off6); + pIn++; + + *((v4u*)out) = max4(inp[2], com[2]); + + inA = (uint8_t) bitins(*out, n_mask2, *(out + 1), mask2, off2); + inA = bitins(inA, n_mask4, *(out + 2), mask4, off4); + *((uint8_t*)pIn) = bitins(inA, n_mask6, *(out + 3), mask6, off6); + pIn++; + + *((v4u*)out) = max4(inp[3], com[3]); + + inA = (uint8_t) bitins(*out, n_mask2, *(out + 1), mask2, off2); + inA = bitins(inA, n_mask4, *(out + 2), mask4, off4); + *((uint8_t*)pIn) = bitins(inA, n_mask6, *(out + 3), mask6, off6); + pIn++; + + pCom+=4; + cnt--; + } + + int left = length & 0x3; + while (left>0u) + { + uint8_t inA0 = (uint8_t) bitextu((unsigned int) *pIn, 2, 0); + uint8_t inA1 = (uint8_t) bitextu((unsigned int) *pIn, 2, 2); + uint8_t inA2 = (uint8_t) bitextu((unsigned int) *pIn, 2, 4); + uint8_t inA3 = (uint8_t) bitextu((unsigned int) *pIn, 2, 6); + v4u inA4 = pack((uint8_t) inA0, (uint8_t) inA1, (uint8_t) inA2, (uint8_t) inA3); + uint8_t inB0 = (uint8_t) bitextu((unsigned int) *pCom, 2, 0); + uint8_t inB1 = (uint8_t) bitextu((unsigned int) *pCom, 2, 2); + uint8_t inB2 = (uint8_t) bitextu((unsigned int) *pCom, 2, 4); + uint8_t inB3 = (uint8_t) bitextu((unsigned int) *pCom, 2, 6); + v4u inB4 = pack((uint8_t) inB0, (uint8_t) inB1, (uint8_t) inB2, (uint8_t) inB3); + + *((v4u*)out) = max4(inA4, inB4); + + uint8_t inA = (uint8_t) bitins(*out, n_mask2, *(out + 1), mask2, off2); + inA = bitins(inA, n_mask4, *(out + 2), mask4, off4); + *((uint8_t*)pIn) = bitins(inA, n_mask6, *(out + 3), mask6, off6); + + pIn++; + pCom++; + left--; + } +} + + +static void __attribute__((noinline)) pulp_nn_compare_and_replace_if_larger_i2(int8_t * base, + int8_t * target, + uint16_t length) +{ + int8_t mask2 = 0x0c; + int8_t n_mask2 = ~ mask2; + int8_t mask4 = 0x30; + int8_t n_mask4 = ~ mask4; + int8_t mask6 = 0xc0; + int8_t n_mask6 = ~ mask6; + int8_t off2 = 2; + int8_t off4 = 4; + int8_t off6 = 6; + + int8_t *pIn = base; + int8_t *pCom = target; + v4s inp[4]; + v4s com[4]; + int8_t *out; + int cnt = length >> 2; + + while(cnt > 0u) + { + pulp_nn_i2_to_i8(pIn, inp); + pulp_nn_i2_to_i8(pCom, com); + + *((v4s*)out) = maxs4(inp[0], com[0]); + + int8_t inA = (int8_t) bitins(*out, n_mask2, *(out + 1), mask2, off2); + inA = bitins(inA, n_mask4, *(out + 2), mask4, off4); + *((int8_t*)pIn) = bitins(inA, n_mask6, *(out + 3), mask6, off6); + pIn++; + + *((v4s*)out) = maxs4(inp[1], com[1]); + + inA = (int8_t) bitins(*out, n_mask2, *(out + 1), mask2, off2); + inA = bitins(inA, n_mask4, *(out + 2), mask4, off4); + *((int8_t*)pIn) = bitins(inA, n_mask6, *(out + 3), mask6, off6); + pIn++; + + *((v4s*)out) = maxs4(inp[2], com[2]); + + inA = (int8_t) bitins(*out, n_mask2, *(out + 1), mask2, off2); + inA = bitins(inA, n_mask4, *(out + 2), mask4, off4); + *((int8_t*)pIn) = bitins(inA, n_mask6, *(out + 3), mask6, off6); + pIn++; + + *((v4s*)out) = maxs4(inp[3], com[3]); + + inA = (int8_t) bitins(*out, n_mask2, *(out + 1), mask2, off2); + inA = bitins(inA, n_mask4, *(out + 2), mask4, off4); + *((int8_t*)pIn) = bitins(inA, n_mask6, *(out + 3), mask6, off6); + pIn++; + + pCom+=4; + cnt--; + } + + int left = length & 0x3; + while (left>0u) + { + int8_t inA0 = (int8_t) bitext((unsigned int) *pIn, 2, 0); + int8_t inA1 = (int8_t) bitext((unsigned int) *pIn, 2, 2); + int8_t inA2 = (int8_t) bitext((unsigned int) *pIn, 2, 4); + int8_t inA3 = (int8_t) bitext((unsigned int) *pIn, 2, 6); + v4s inA4 = pack((int8_t) inA0, (int8_t) inA1, (int8_t) inA2, (int8_t) inA3); + int8_t inB0 = (int8_t) bitext((unsigned int) *pCom, 2, 0); + int8_t inB1 = (int8_t) bitext((unsigned int) *pCom, 2, 2); + int8_t inB2 = (int8_t) bitext((unsigned int) *pCom, 2, 4); + int8_t inB3 = (int8_t) bitext((unsigned int) *pCom, 2, 6); + v4s inB4 = pack((int8_t) inB0, (int8_t) inB1, (int8_t) inB2, (int8_t) inB3); + + *((v4s*)out) = maxs4(inA4, inB4); + + int8_t inA = (int8_t) bitins(*out, n_mask2, *(out + 1), mask2, off2); + inA = bitins(inA, n_mask4, *(out + 2), mask4, off4); + *((int8_t*)pIn) = bitins(inA, n_mask6, *(out + 3), mask6, off6); + + pIn++; + pCom++; + left--; + } +} + +static void __attribute__((noinline)) pulp_nn_avg_and_replace_u2(uint8_t * base, + uint8_t * target, + uint16_t length) +{ + int8_t mask2 = 0x0c; + int8_t n_mask2 = ~ mask2; + int8_t mask4 = 0x30; + int8_t n_mask4 = ~ mask4; + int8_t mask6 = 0xc0; + int8_t n_mask6 = ~ mask6; + int8_t off2 = 2; + int8_t off4 = 4; + int8_t off6 = 6; + + uint8_t *pIn = base; + uint8_t *pCom = target; + + while (length>0u) + { + uint8_t inA0 = (uint8_t) bitextu((unsigned int) *pIn, 2, 0); + uint8_t inA1 = (uint8_t) bitextu((unsigned int) *pIn, 2, 2); + uint8_t inA2 = (uint8_t) bitextu((unsigned int) *pIn, 2, 4); + uint8_t inA3 = (uint8_t) bitextu((unsigned int) *pIn, 2, 6); + + uint8_t inB0 = (uint8_t) bitextu((unsigned int) *pCom, 2, 0); + uint8_t inB1 = (uint8_t) bitextu((unsigned int) *pCom, 2, 2); + uint8_t inB2 = (uint8_t) bitextu((unsigned int) *pCom, 2, 4); + uint8_t inB3 = (uint8_t) bitextu((unsigned int) *pCom, 2, 6); + + inA0 = ((inA0 + inB0) >> 1); + inA1 = ((inA1 + inB1) >> 1); + inA2 = ((inA2 + inB2) >> 1); + inA3 = ((inA3 + inB3) >> 1); + + uint8_t inA = (uint8_t) bitins(inA0, n_mask2, inA1, mask2, off2); + inA = bitins(inA, n_mask4, inA2, mask4, off4); + *((uint8_t*)pIn) = bitins(inA, n_mask6, inA3, mask6, off6); + + pIn++; + pCom++; + length--; + } +} + +/* + * XpulpNN + */ + +static void __attribute__((noinline)) xpulp_nn_zero_mem_u8(uint8_t * pBuffer, unsigned int size) +{ + int lfover = size &0x3; + for (int i=0; i<(size>>2); i++) + { + *((v4u *)pBuffer) = (v4u){0,0,0,0}; + MemoryFence(); + pBuffer+=4; + } + while(lfover) + { + *pBuffer++=0; + lfover--; + } +} + +static void __attribute__((noinline)) xpulp_nn_zero_mem_u4(uint8_t * pBuffer, unsigned int size) +{ + int lfover = size &0x7; + for (int i=0; i<(size>>3); i++) + { + *((v4u *)pBuffer) = (v4u){0,0,0,0}; + MemoryFence(); + pBuffer+=4; + } + while(lfover) + { + *pBuffer++=0; + lfover-=2; + } +} + +static void __attribute__((noinline)) xpulp_nn_zero_mem_u2(uint8_t * pBuffer, unsigned int size) +{ + int lfover = size &0xf; + for (int i=0; i<(size>>4); i++) + { + *((v4u *)pBuffer) = (v4u){0,0,0,0}; + MemoryFence(); + pBuffer+=4; + } + while(lfover) + { + *pBuffer++=0; + lfover-=4; + } +} + + +static void __attribute__((noinline)) xpulp_nn_compare_and_replace_if_larger_u4(uint8_t * base, + uint8_t * target, + uint16_t length) +{ + int8_t mask = 0xf0; + int8_t n_mask = ~ mask; + int8_t off = 0x04; + + uint8_t *pIn = base; + uint8_t *pCom = target; + + int cnt = length >> 2; + + while(cnt > 0u) + { + *((uint32_t *)pIn) = max8(*((uint32_t *)pIn), *((uint32_t *)pCom)); + + pIn+=4; + pCom+=4; + + cnt--; + } + + int left = length & 0x3; + while (left>0u) + { + uint8_t inA0 = (uint8_t) bitextu((unsigned int) *pIn, 4, 0); + uint8_t inA1 = (uint8_t) bitextu((unsigned int) *pIn, 4, 4); + uint8_t inB0 = (uint8_t) bitextu((unsigned int) *pCom, 4, 0); + uint8_t inB1 = (uint8_t) bitextu((unsigned int) *pCom, 4, 4); + + if(inA0> 2; + + while (cnt > 0u) { + *((int32_t *)pIn) = maxs8(*((int32_t *)pIn), *((int32_t *)pCom)); + + pIn += 4; + pCom += 4; + + cnt--; + } + + int left = length & 0x3; + while (left > 0u) { + int8_t inA0 = (int8_t)bitext((int)*pIn, 4, 0); + int8_t inA1 = (int8_t)bitext((int)*pIn, 4, 4); + int8_t inB0 = (int8_t)bitext((int)*pCom, 4, 0); + int8_t inB1 = (int8_t)bitext((int)*pCom, 4, 4); + + if (inA0 < inB0) + inA0 = inB0; + + if (inA1 < inB1) + inA1 = inB1; + + *((int8_t *)pIn) = bitins(inA0, n_mask, inA1, mask, off); + + pIn++; + pCom++; + left--; + } +} + +static void __attribute__((noinline)) xpulp_nn_avg_and_replace_u4(uint8_t * base, + uint8_t * target, + uint16_t length) +{ + int8_t mask = 0xf0; + int8_t n_mask = ~ mask; + int8_t off = 0x04; + + uint8_t *pIn = base; + uint8_t *pCom = target; + + int cnt = length >> 2; + + while (cnt > 0u) + { + *((uint32_t *)pIn) = avg8(*((uint32_t *)pIn), *((uint32_t *)pCom)); + + pIn+=4; + pCom+=4; + cnt--; + } + + int left = length & 0x3; + + while (left>0u) + { + uint8_t inA0 = (uint8_t) bitextu((unsigned int) *pIn, 4, 0); + uint8_t inA1 = (uint8_t) bitextu((unsigned int) *pIn, 4, 4); + uint8_t inB0 = (uint8_t) bitextu((unsigned int) *pCom, 4, 0); + uint8_t inB1 = (uint8_t) bitextu((unsigned int) *pCom, 4, 4); + + inA0 = ((inA0 + inB0) >> 1); + inA1 = ((inA1 + inB1) >> 1); + + *((uint8_t*)pIn) = bitins(inA0, n_mask, inA1, mask, off); + + pIn++; + pCom++; + length--; + } +} + +static void __attribute__((noinline)) xpulp_nn_compare_and_replace_if_larger_u2(uint8_t * base, + uint8_t * target, + uint16_t length) +{ + int8_t mask2 = 0x0c; + int8_t n_mask2 = ~ mask2; + int8_t mask4 = 0x30; + int8_t n_mask4 = ~ mask4; + int8_t mask6 = 0xc0; + int8_t n_mask6 = ~ mask6; + int8_t off2 = 2; + int8_t off4 = 4; + int8_t off6 = 6; + + uint8_t *pIn = base; + uint8_t *pCom = target; + uint8_t *out; + + int cnt = length >> 2; + + while(cnt > 0u) + { + *((uint32_t *)pIn) = max16(*((uint32_t *)pIn), *((uint32_t *)pCom)); + + pIn+=4; + pCom+=4; + cnt--; + } + + int left = length & 0x3; + while (left>0u) + { + uint8_t inA0 = (uint8_t) bitextu((unsigned int) *pIn, 2, 0); + uint8_t inA1 = (uint8_t) bitextu((unsigned int) *pIn, 2, 2); + uint8_t inA2 = (uint8_t) bitextu((unsigned int) *pIn, 2, 4); + uint8_t inA3 = (uint8_t) bitextu((unsigned int) *pIn, 2, 6); + v4u inA4 = pack((uint8_t) inA0, (uint8_t) inA1, (uint8_t) inA2, (uint8_t) inA3); + uint8_t inB0 = (uint8_t) bitextu((unsigned int) *pCom, 2, 0); + uint8_t inB1 = (uint8_t) bitextu((unsigned int) *pCom, 2, 2); + uint8_t inB2 = (uint8_t) bitextu((unsigned int) *pCom, 2, 4); + uint8_t inB3 = (uint8_t) bitextu((unsigned int) *pCom, 2, 6); + v4u inB4 = pack((uint8_t) inB0, (uint8_t) inB1, (uint8_t) inB2, (uint8_t) inB3); + + *((v4u*)out) = max4(inA4, inB4); + + uint8_t inA = (uint8_t) bitins(*out, n_mask2, *(out + 1), mask2, off2); + inA = bitins(inA, n_mask4, *(out + 2), mask4, off4); + *((uint8_t*)pIn) = bitins(inA, n_mask6, *(out + 3), mask6, off6); + + pIn++; + pCom++; + left--; + } +} +static void __attribute__((noinline)) xpulp_nn_compare_and_replace_if_larger_i2(int8_t * base, + int8_t * target, + uint16_t length) +{ + int8_t mask2 = 0x0c; + int8_t n_mask2 = ~ mask2; + int8_t mask4 = 0x30; + int8_t n_mask4 = ~ mask4; + int8_t mask6 = 0xc0; + int8_t n_mask6 = ~ mask6; + int8_t off2 = 2; + int8_t off4 = 4; + int8_t off6 = 6; + + int8_t *pIn = base; + int8_t *pCom = target; + int8_t *out; + + int cnt = length >> 2; + + while(cnt > 0u) + { + *((int32_t *)pIn) = maxs16(*((int32_t *)pIn), *((int32_t *)pCom)); + + pIn+=4; + pCom+=4; + cnt--; + } + + int left = length & 0x3; + while (left>0u) + { + int8_t inA0 = (int8_t) bitext((int) *pIn, 2, 0); + int8_t inA1 = (int8_t) bitext((int) *pIn, 2, 2); + int8_t inA2 = (int8_t) bitext((int) *pIn, 2, 4); + int8_t inA3 = (int8_t) bitext((int) *pIn, 2, 6); + v4s inA4 = pack((int8_t) inA0, (int8_t) inA1, (int8_t) inA2, (int8_t) inA3); + int8_t inB0 = (int8_t) bitext((int) *pCom, 2, 0); + int8_t inB1 = (int8_t) bitext((int) *pCom, 2, 2); + int8_t inB2 = (int8_t) bitext((int) *pCom, 2, 4); + int8_t inB3 = (int8_t) bitext((int) *pCom, 2, 6); + v4s inB4 = pack((int8_t) inB0, (int8_t) inB1, (int8_t) inB2, (int8_t) inB3); + + *((v4s*)out) = maxs4(inA4, inB4); + + int8_t inA = (int8_t) bitins(*out, n_mask2, *(out + 1), mask2, off2); + inA = bitins(inA, n_mask4, *(out + 2), mask4, off4); + *((int8_t*)pIn) = bitins(inA, n_mask6, *(out + 3), mask6, off6); + + pIn++; + pCom++; + left--; + } +} + +static void __attribute__((noinline)) xpulp_nn_avg_and_replace_u2(uint8_t * base, + uint8_t * target, + uint16_t length) +{ + int8_t mask2 = 0x0c; + int8_t n_mask2 = ~ mask2; + int8_t mask4 = 0x30; + int8_t n_mask4 = ~ mask4; + int8_t mask6 = 0xc0; + int8_t n_mask6 = ~ mask6; + int8_t off2 = 2; + int8_t off4 = 4; + int8_t off6 = 6; + + uint8_t *pIn = base; + uint8_t *pCom = target; + uint8_t *out; + + int cnt = length >> 2; + + while(cnt > 0u) + { + *((uint32_t *)pIn) = avg16(*((uint32_t *)pIn), *((uint32_t *)pCom)); + + pIn+=4; + pCom+=4; + cnt--; + } + + int left = length & 0x3; + while (left>0u) + { + uint8_t inA0 = (uint8_t) bitextu((unsigned int) *pIn, 2, 0); + uint8_t inA1 = (uint8_t) bitextu((unsigned int) *pIn, 2, 2); + uint8_t inA2 = (uint8_t) bitextu((unsigned int) *pIn, 2, 4); + uint8_t inA3 = (uint8_t) bitextu((unsigned int) *pIn, 2, 6); + v4u inA4 = pack((uint8_t) inA0, (uint8_t) inA1, (uint8_t) inA2, (uint8_t) inA3); + uint8_t inB0 = (uint8_t) bitextu((unsigned int) *pCom, 2, 0); + uint8_t inB1 = (uint8_t) bitextu((unsigned int) *pCom, 2, 2); + uint8_t inB2 = (uint8_t) bitextu((unsigned int) *pCom, 2, 4); + uint8_t inB3 = (uint8_t) bitextu((unsigned int) *pCom, 2, 6); + v4u inB4 = pack((uint8_t) inB0, (uint8_t) inB1, (uint8_t) inB2, (uint8_t) inB3); + + *((v4u*)out) = avg4(inA4, inB4); + + uint8_t inA = (uint8_t) bitins(*out, n_mask2, *(out + 1), mask2, off2); + inA = bitins(inA, n_mask4, *(out + 2), mask4, off4); + *((uint8_t*)pIn) = bitins(inA, n_mask6, *(out + 3), mask6, off6); + + pIn++; + pCom++; + left--; + } +} + +#endif diff --git a/rt_nn_tests/xpnnv2_conv/pulp_nn_utils_xpnn.h b/rt_nn_tests/xpnnv2_conv/pulp_nn_utils_xpnn.h new file mode 100644 index 0000000..0c783ae --- /dev/null +++ b/rt_nn_tests/xpnnv2_conv/pulp_nn_utils_xpnn.h @@ -0,0 +1,1937 @@ +/* + * pulp_nn_utils.h + * Nazareno Bruschi + * Alessandro Nadalini + * Georg Rutishauser + * + * Copyright (C) 2019-2020 ETH Zurich & University of Bologna + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef __PULPNN_UTILS__ +#define __PULPNN_UTILS__ + +#include "pmsis.h" +#ifdef GAP_SDK +#include "pulp.h" +#endif + +#define bitext(x,size,off) __builtin_pulp_bextract(x,size,off) +#define bitextu(x,size,off) __builtin_pulp_bextractu(x,size,off) +#define bitins(dst,not_mask_imm,src,mask_imm,off) __builtin_pulp_binsert(dst,not_mask_imm,src,mask_imm,off) +#define pack(x,y,z,t) __builtin_pulp_pack4(x,y,z,t) +#define max4(a,b) __builtin_pulp_maxu4(a,b) +#define maxs4(a, b) __builtin_pulp_max4(a, b) +#define max8(a, b) __builtin_pulp_maxu8(a, b) +#define maxs8(a, b) __builtin_pulp_max8(a, b) +#define max16(a, b) __builtin_pulp_maxu16(a, b) +#define maxs16(a, b) __builtin_pulp_max16(a, b) +#define max32(a,b) __builtin_pulp_maxusi(a,b) +#define maxs32(a,b) __builtin_pulp_maxsi(a,b) +#define min32(a,b) __builtin_pulp_minusi(a,b) +#define mins32(a,b) __builtin_pulp_minsi(a,b) +#define min4(a, b) __builtin_pulp_minu4(a, b) +#define mins4(a, b) __builtin_pulp_min4(a, b) +#define min8(a, b) __builtin_pulp_minu8(a, b) +#define mins8(a, b) __builtin_pulp_min8(a, b) +#define min16(a, b) __builtin_pulp_minu16(a, b) +#define mins16(a, b) __builtin_pulp_min16(a, b) +#define avg4(a,b) __builtin_pulp_avgu4(a,b) +#define avg8(a,b) __builtin_pulp_avgu8(a,b) +#define avg16(a,b) __builtin_pulp_avgu16(a,b) +#define log2(x) __builtin_pulp_fl1(x) +#define min(a,b) ((a)<(b)?(a):(b)) +#define SumDotp4(a, b, c) __builtin_pulp_sdotusp4(a, b, c) +#define SumDotp8(a, b, c) __builtin_pulp_sdotusp8(a, b, c) +#define SumDotp16(a, b, c) __builtin_pulp_sdotusp16(a, b, c) +#define SumDotps4(a, b, c) __builtin_pulp_sdotsp4(a, b, c) +#define SumDotps8(a, b, c) __builtin_pulp_sdotsp8(a, b, c) +#define SumDotps16(a, b, c) __builtin_pulp_sdotsp16(a, b, c) +#define clip4(x) __builtin_pulp_clipu_r(x, 15) +#define clip2(x) __builtin_pulp_clipu_r(x, 3) +#define clip8(x) __builtin_pulp_clipu_r(x, 255) + +#define clips4(x) __builtin_pulp_clip_r(x, 7) +#define clips2(x) __builtin_pulp_clip_r(x, 1) +#define clips8(x) __builtin_pulp_clip_r(x, 127) +#define MacLoadInit(a_update, b_update, a_reg, b_reg, ptr) __builtin_pulp_mlinitspr_v3(a_update, b_update, a_reg, b_reg, ptr) +#define MacLoadUpdate(ptr) __builtin_pulp_mlupdatespr_v3(ptr) +#define MacLoadAssign(ptr) __builtin_pulp_mlassignspr_v3(ptr) +#define MacLoad4(a_update, b_update, a_reg, b_reg, ptr, sum) __builtin_pulp_mlsdotsup4_v3(a_update, b_update, a_reg, b_reg, ptr, sum) +#define MacLoad8(a_update, b_update, a_reg, b_reg, ptr, sum) __builtin_pulp_mlsdotsup8_v3(a_update, b_update, a_reg, b_reg, ptr, sum) +#define MacLoad16(a_update, b_update, a_reg, b_reg, ptr, sum) __builtin_pulp_mlsdotsup16_v3(a_update, b_update, a_reg, b_reg, ptr, sum) +#define MacLoads4(a_update, b_update, a_reg, b_reg, ptr, sum) __builtin_pulp_mlsdotsp4_v3(a_update, b_update, a_reg, b_reg, ptr, sum) +#define MacLoads8(a_update, b_update, a_reg, b_reg, ptr, sum) __builtin_pulp_mlsdotsp8_v3(a_update, b_update, a_reg, b_reg, ptr, sum) +#define MacLoads16(a_update, b_update, a_reg, b_reg, ptr, sum) __builtin_pulp_mlsdotsp16_v3(a_update, b_update, a_reg, b_reg, ptr, sum) + +#define PACK_INT8_SIZE(x) (x) +#define PACK_INT4_SIZE(x) ((x) >> 1) +#define PACK_INT2_SIZE(x) ((x) >> 2) + +#define MemoryFence() asm volatile("":::"memory") + +#define LEGACY_MODE(x) asm volatile ("csrwi 0x010," x) +#define IVEC_FMT(x) asm volatile ("csrwi 0x00D," x) +#define MIXED_SKIP(x) asm volatile ("csrwi 0x00F," x) +#define A_ADDRESS(x) asm volatile ("csrw 0x100, %0" :: "r" (x)) +#define W_ADDRESS(x) asm volatile ("csrw 0x101, %0" :: "r" (x)) +#define A_STRIDE(x) asm volatile ("csrw 0x102, %0":: "r" (x)) +#define W_STRIDE(x) asm volatile ("csrw 0x103, %0":: "r" (x)) +#define A_ROLLBACK(x) asm volatile ("csrw 0x104, %0":: "r" (x)) +#define W_ROLLBACK(x) asm volatile ("csrw 0x105, %0":: "r" (x)) +#define A_SKIP(x) asm volatile ("csrwi 0x106," x) +#define W_SKIP(x) asm volatile ("csrwi 0x107," x) + +static uint8_t __attribute__((noinline)) pulp_nn_quant_u2 ( + int32_t phi, + int16_t m, + int8_t d + ) { + int32_t x = (m * phi) >> d; + uint8_t res = clip2(x); + return res; +} +static uint8_t __attribute__((noinline)) pulp_nn_bn_quant_u2 ( + int32_t phi, + int32_t k, + int32_t lambda, + int8_t d + ) { + int32_t integer_image_phi = (k * phi) + lambda; + int32_t x = (integer_image_phi) >> d; + uint8_t res = clip2(x); + return res; +} +static uint8_t __attribute__((noinline)) pulp_nn_add_quant_u2 ( + uint8_t pix1, + uint8_t pix2, + int16_t m1, + int16_t m2, + int8_t d + ) { + uint32_t integer_image = pix1*m1 + pix2*m2; + uint32_t x = (integer_image) >> d; + uint8_t res = clip2(x); + return res; +} + +static int8_t __attribute__((noinline)) pulp_nn_quant_i2 ( + int32_t phi, + int16_t m, + int8_t d + ) { + int32_t x = (m * phi) >> d; + int8_t res = clips2(x); + return res; +} +static int8_t __attribute__((noinline)) pulp_nn_bn_quant_i2 ( + int32_t phi, + int32_t k, + int32_t lambda, + int8_t d + ) { + int32_t integer_image_phi = (k * phi) + lambda; + int32_t x = (integer_image_phi) >> d; + int8_t res = clips2(x); + return res; +} +static int8_t __attribute__((noinline)) pulp_nn_add_quant_i2 ( + int8_t pix1, + int8_t pix2, + int16_t m1, + int16_t m2, + int8_t d + ) { + int32_t integer_image = pix1*m1 + pix2*m2; + int32_t x = (integer_image) >> d; + int8_t res = clips2(x); + return res; +} + +static uint8_t __attribute__((noinline)) pulp_nn_quant_u4 ( + int32_t phi, + int16_t m, + int8_t d + ) { + int32_t x = (m * phi) >> d; + uint8_t res = clip4(x); + return res; +} +static uint8_t __attribute__((noinline)) pulp_nn_bn_quant_u4 ( + int32_t phi, + int32_t k, + int32_t lambda, + int8_t d + ) { + int32_t integer_image_phi = (k * phi) + lambda; + int32_t x = (integer_image_phi) >> d; + uint8_t res = clip4(x); + return res; +} +static uint8_t __attribute__((noinline)) pulp_nn_add_quant_u4 ( + uint8_t pix1, + uint8_t pix2, + int16_t m1, + int16_t m2, + int8_t d + ) { + uint32_t integer_image = pix1*m1 + pix2*m2; + uint32_t x = (integer_image) >> d; + uint8_t res = clip4(x); + return res; +} + +static int8_t __attribute__((noinline)) pulp_nn_quant_i4 ( + int32_t phi, + int16_t m, + int8_t d + ) { + int32_t x = (m * phi) >> d; + int8_t res = clips4(x); + return res; +} +static int8_t __attribute__((noinline)) pulp_nn_bn_quant_i4 ( + int32_t phi, + int32_t k, + int32_t lambda, + int8_t d + ) { + int32_t integer_image_phi = (k * phi) + lambda; + int32_t x = (integer_image_phi) >> d; + int8_t res = clips4(x); + return res; +} +static int8_t __attribute__((noinline)) pulp_nn_add_quant_i4 ( + int8_t pix1, + int8_t pix2, + int16_t m1, + int16_t m2, + int8_t d + ) { + int32_t integer_image = pix1*m1 + pix2*m2; + int32_t x = (integer_image) >> d; + int8_t res = clips4(x); + return res; +} + +static uint8_t __attribute__((noinline)) pulp_nn_quant_u8 ( + int32_t phi, + int16_t m, + int8_t d + ) { + int32_t x = (m * phi) >> d; + uint8_t res = clip8(x); + return res; +} +static uint8_t __attribute__((noinline)) pulp_nn_bn_quant_u8 ( + int32_t phi, + int32_t k, + int32_t lambda, + int8_t d + ) { + int32_t integer_image_phi = (k * phi) + lambda; + int32_t x = (integer_image_phi) >> d; + uint8_t res = clip8(x); + return res; +} +static uint8_t __attribute__((noinline)) pulp_nn_add_quant_u8 ( + uint8_t pix1, + uint8_t pix2, + int16_t m1, + int16_t m2, + int8_t d + ) { + uint32_t integer_image = pix1*m1 + pix2*m2; + uint32_t x = (integer_image) >> d; + uint8_t res = clip8(x); + return res; +} + +static int8_t __attribute__((noinline)) pulp_nn_quant_i8 ( + int32_t phi, + int16_t m, + int8_t d + ) { + int32_t x = (m * phi) >> d; + int8_t res = clips8(x); + return res; +} +static int8_t __attribute__((noinline)) pulp_nn_bn_quant_i8 ( + int32_t phi, + int32_t k, + int32_t lambda, + int8_t d + ) { + int32_t integer_image_phi = (k * phi) + lambda; + int32_t x = (integer_image_phi) >> d; + int8_t res = clips8(x); + return res; +} +static int8_t __attribute__((noinline)) pulp_nn_add_quant_i8 ( + int8_t pix1, + int8_t pix2, + int16_t m1, + int16_t m2, + int8_t d + ) { + int32_t integer_image = pix1*m1 + pix2*m2; + int32_t x = (integer_image) >> d; + int8_t res = clips8(x); + return res; +} + + +static uint8_t __attribute__((noinline)) pulp_nn_u4_quant(int input, int16_t * pThr) +{ + if(input <= pThr[7] ) + { + if( input <= pThr[3]) + { + if( input <= pThr[1]) + { + if( input <= pThr[0]) + return 0; + else + return 1; + } + else + { + if( input <= pThr[2]) + return 2; + else + return 3; + } + } + else + { + if( input <= pThr[5]) + { + if( input <= pThr[4]) + return 4; + else + return 5; + } + else + { + if( input <= pThr[6]) + return 6; + else + return 7; + } + } + } + else + { + if( input <= pThr[11]) + { + if( input <= pThr[9]) + { + if( input <= pThr[8]) + return 8; + else + return 9; + } + else + { + if( input <= pThr[10]) + return 10; + else + return 11; + } + } + else + { + if( input <= pThr[13]) + { + if( input <= pThr[12]) + return 12; + else + return 13; + } + else + { + if( input <= pThr[14]) + return 14; + else + return 15; + } + } + } +} + +static uint8_t __attribute__((noinline)) pulp_nn_u2_quant(int input, int16_t * pThr) +{ + if( input <= pThr[1]) + { + if( input <= pThr[0]) + { + return 0; + } + else + { + return 1; + } + } + else + { + if( input <= pThr[2]) + { + return 2; + } + else + { + return 3; + } + } +} + +/* + * Common + */ + + +static v4s __attribute__((noinline)) pulp_nn_i4_to_i8_r( int8_t *pSrc) +{ + v4s Src = *((v4s*) pSrc); + int8_t bext1, bext2, bext3, bext4; + + bext1 = (int8_t) bitext((int) Src, 4, 0); + bext2 = (int8_t) bitext((int) Src, 4, 4); + bext3 = (int8_t) bitext((int) Src, 4, 8); + bext4 = (int8_t) bitext((int) Src, 4, 12); + v4s res = pack((int8_t) bext1, (int8_t) bext2, (int8_t) bext3, (int8_t) bext4); + + return res; +} + +static v4u __attribute__((noinline)) pulp_nn_u4_to_u8_r(uint8_t *pSrc) +{ + v4u Src = *((v4u*) pSrc); + uint8_t bext1, bext2, bext3, bext4; + + bext1 = (uint8_t) bitextu((unsigned int) Src, 4, 0); + bext2 = (uint8_t) bitextu((unsigned int) Src, 4, 4); + bext3 = (uint8_t) bitextu((unsigned int) Src, 4, 8); + bext4 = (uint8_t) bitextu((unsigned int) Src, 4, 12); + v4u res = pack((uint8_t) bext1, (uint8_t) bext2, (uint8_t) bext3, (uint8_t) bext4); + + return res; +} + +static v4s __attribute__((noinline)) pulp_nn_i2_to_i8_r( int8_t *pSrc) +{ + v4s Src = *((v4s*) pSrc); + int8_t bext1, bext2, bext3, bext4; + + bext1 = (int8_t) bitext((int) Src, 2, 0); + bext2 = (int8_t) bitext((int) Src, 2, 2); + bext3 = (int8_t) bitext((int) Src, 2, 4); + bext4 = (int8_t) bitext((int) Src, 2, 6); + v4s res = pack((int8_t) bext1, (int8_t) bext2, (int8_t) bext3, (int8_t) bext4); + + return res; +} + +static v4u __attribute__((noinline)) pulp_nn_u2_to_u8_r(uint8_t *pSrc) +{ + v4u Src = *((v4u*) pSrc); + uint8_t bext1, bext2, bext3, bext4; + + bext1 = (uint8_t) bitextu((unsigned int) Src, 2, 0); + bext2 = (uint8_t) bitextu((unsigned int) Src, 2, 2); + bext3 = (uint8_t) bitextu((unsigned int) Src, 2, 4); + bext4 = (uint8_t) bitextu((unsigned int) Src, 2, 6); + v4u res = pack((uint8_t) bext1, (uint8_t) bext2, (uint8_t) bext3, (uint8_t) bext4); + + return res; +} + +static v4s __attribute__((noinline)) pulp_nn_i2_to_i4_r(int8_t *pSrc) +{ + int8_t mask = 0xf0; + int8_t n_mask = ~ mask; + int8_t off = 0x04; + + v4s Src = *((v4s*) pSrc); + int8_t bext1, bext2, bext3, bext4; + int8_t out1, out2, out3, out4; + + bext1 = (int8_t) bitextu((int) Src, 2, 0); + bext2 = (int8_t) bitextu((int) Src, 2, 2); + bext3 = (int8_t) bitextu((int) Src, 2, 4); + bext4 = (int8_t) bitextu((int) Src, 2, 6); + + out1 = bitins(bext1, n_mask, bext2, mask, off); + out2 = bitins(bext3, n_mask, bext4, mask, off); + + bext1 = (int8_t) bitextu((int) Src, 2, 8); + bext2 = (int8_t) bitextu((int) Src, 2, 10); + bext3 = (int8_t) bitextu((int) Src, 2, 12); + bext4 = (int8_t) bitextu((int) Src, 2, 14); + + out3 = bitins(bext1, n_mask, bext2, mask, off); + out4 = bitins(bext3, n_mask, bext4, mask, off); + + v4s res = pack((int8_t) out1, (int8_t) out2, (int8_t) out3, (int8_t) out4); + + return res; +} + +static v4u __attribute__((noinline)) pulp_nn_u2_to_u4_r(uint8_t *pSrc) +{ + int8_t mask = 0xf0; + int8_t n_mask = ~ mask; + int8_t off = 0x04; + + v4u Src = *((v4u*) pSrc); + uint8_t bext1, bext2, bext3, bext4; + uint8_t out1, out2, out3, out4; + + bext1 = (uint8_t) bitextu((unsigned int) Src, 2, 0); + bext2 = (uint8_t) bitextu((unsigned int) Src, 2, 2); + bext3 = (uint8_t) bitextu((unsigned int) Src, 2, 4); + bext4 = (uint8_t) bitextu((unsigned int) Src, 2, 6); + + out1 = bitins(bext1, n_mask, bext2, mask, off); + out2 = bitins(bext3, n_mask, bext4, mask, off); + + bext1 = (uint8_t) bitextu((unsigned int) Src, 2, 8); + bext2 = (uint8_t) bitextu((unsigned int) Src, 2, 10); + bext3 = (uint8_t) bitextu((unsigned int) Src, 2, 12); + bext4 = (uint8_t) bitextu((unsigned int) Src, 2, 14); + + out3 = bitins(bext1, n_mask, bext2, mask, off); + out4 = bitins(bext3, n_mask, bext4, mask, off); + + v4u res = pack((uint8_t) out1, (uint8_t) out2, (uint8_t) out3, (uint8_t) out4); + + return res; +} + +static int8_t *__attribute__((always_inline)) pulp_nn_i4_to_i8( int8_t *pSrc, int8_t *pDst) +{ + v4s Src = *((v4s*) pSrc); + int8_t bext1, bext2, bext3, bext4; + + pSrc+=4; + + bext1 = (int8_t) bitext((int) Src, 4, 0); + bext2 = (int8_t) bitext((int) Src, 4, 4); + bext3 = (int8_t) bitext((int) Src, 4, 8); + bext4 = (int8_t) bitext((int) Src, 4, 12); + *((v4s*)pDst) = pack((int8_t) bext1, (int8_t) bext2, (int8_t) bext3, (int8_t) bext4); + MemoryFence(); + pDst+=4; + bext1 = (int8_t) bitext((int) Src, 4, 16); + bext2 = (int8_t) bitext((int) Src, 4, 20); + bext3 = (int8_t) bitext((int) Src, 4, 24); + bext4 = (int8_t) bitext((int) Src, 4, 28); + *((v4s*)pDst) = pack((int8_t) bext1, (int8_t) bext2, (int8_t) bext3, (int8_t) bext4); + + return pSrc; +} + +static uint8_t *__attribute__((always_inline)) pulp_nn_u4_to_u8(uint8_t *pSrc, uint8_t *pDst) +{ + v4u Src = *((v4u*) pSrc); + uint8_t bext1, bext2, bext3, bext4; + + pSrc+=4; + + bext1 = (uint8_t) bitextu((unsigned int) Src, 4, 0); + bext2 = (uint8_t) bitextu((unsigned int) Src, 4, 4); + bext3 = (uint8_t) bitextu((unsigned int) Src, 4, 8); + bext4 = (uint8_t) bitextu((unsigned int) Src, 4, 12); + *((v4u*)pDst) = pack((uint8_t) bext1, (uint8_t) bext2, (uint8_t) bext3, (uint8_t) bext4); + MemoryFence(); + pDst+=4; + bext1 = (uint8_t) bitextu((unsigned int) Src, 4, 16); + bext2 = (uint8_t) bitextu((unsigned int) Src, 4, 20); + bext3 = (uint8_t) bitextu((unsigned int) Src, 4, 24); + bext4 = (uint8_t) bitextu((unsigned int) Src, 4, 28); + *((v4u*)pDst) = pack((uint8_t) bext1, (uint8_t) bext2, (uint8_t) bext3, (uint8_t) bext4); + + return pSrc; +} + +static int8_t *__attribute__((always_inline)) pulp_nn_i2_to_i8( int8_t * pSrc, int8_t * pDst) +{ + v4s Src = *((v4s*) pSrc); + int8_t bext1, bext2, bext3, bext4; + + pSrc+=4; + + bext1 = (int8_t) bitext((int) Src, 2, 0); + bext2 = (int8_t) bitext((int) Src, 2, 2); + bext3 = (int8_t) bitext((int) Src, 2, 4); + bext4 = (int8_t) bitext((int) Src, 2, 6); + *((v4s*)pDst) = pack((int8_t) bext1, (int8_t) bext2, (int8_t) bext3, (int8_t) bext4); + MemoryFence(); + pDst+=4; + bext1 = (int8_t) bitext((int) Src, 2, 8); + bext2 = (int8_t) bitext((int) Src, 2, 10); + bext3 = (int8_t) bitext((int) Src, 2, 12); + bext4 = (int8_t) bitext((int) Src, 2, 14); + *((v4s*)pDst) = pack((int8_t) bext1, (int8_t) bext2, (int8_t) bext3, (int8_t) bext4); + MemoryFence(); + pDst+=4; + bext1 = (int8_t) bitext((int) Src, 2, 16); + bext2 = (int8_t) bitext((int) Src, 2, 18); + bext3 = (int8_t) bitext((int) Src, 2, 20); + bext4 = (int8_t) bitext((int) Src, 2, 22); + *((v4s*)pDst) = pack((int8_t) bext1, (int8_t) bext2, (int8_t) bext3, (int8_t) bext4); + MemoryFence(); + pDst+=4; + bext1 = (int8_t) bitext((int) Src, 2, 24); + bext2 = (int8_t) bitext((int) Src, 2, 26); + bext3 = (int8_t) bitext((int) Src, 2, 28); + bext4 = (int8_t) bitext((int) Src, 2, 30); + *((v4s*)pDst) = pack((int8_t) bext1, (int8_t) bext2, (int8_t) bext3, (int8_t) bext4); + + return pSrc; +} + +static uint8_t *__attribute__((always_inline)) pulp_nn_u2_to_u8(uint8_t * pSrc, uint8_t * pDst) +{ + v4u Src = *((v4u*) pSrc); + uint8_t bext1, bext2, bext3, bext4; + + pSrc+=4; + + bext1 = (uint8_t) bitextu((unsigned int) Src, 2, 0); + bext2 = (uint8_t) bitextu((unsigned int) Src, 2, 2); + bext3 = (uint8_t) bitextu((unsigned int) Src, 2, 4); + bext4 = (uint8_t) bitextu((unsigned int) Src, 2, 6); + *((v4u*)pDst) = pack((uint8_t) bext1, (uint8_t) bext2, (uint8_t) bext3, (uint8_t) bext4); + MemoryFence(); + pDst+=4; + bext1 = (uint8_t) bitextu((unsigned int) Src, 2, 8); + bext2 = (uint8_t) bitextu((unsigned int) Src, 2, 10); + bext3 = (uint8_t) bitextu((unsigned int) Src, 2, 12); + bext4 = (uint8_t) bitextu((unsigned int) Src, 2, 14); + *((v4u*)pDst) = pack((uint8_t) bext1, (uint8_t) bext2, (uint8_t) bext3, (uint8_t) bext4); + MemoryFence(); + pDst+=4; + bext1 = (uint8_t) bitextu((unsigned int) Src, 2, 16); + bext2 = (uint8_t) bitextu((unsigned int) Src, 2, 18); + bext3 = (uint8_t) bitextu((unsigned int) Src, 2, 20); + bext4 = (uint8_t) bitextu((unsigned int) Src, 2, 22); + *((v4u*)pDst) = pack((uint8_t) bext1, (uint8_t) bext2, (uint8_t) bext3, (uint8_t) bext4); + MemoryFence(); + pDst+=4; + bext1 = (uint8_t) bitextu((unsigned int) Src, 2, 24); + bext2 = (uint8_t) bitextu((unsigned int) Src, 2, 26); + bext3 = (uint8_t) bitextu((unsigned int) Src, 2, 28); + bext4 = (uint8_t) bitextu((unsigned int) Src, 2, 30); + *((v4u*)pDst) = pack((uint8_t) bext1, (uint8_t) bext2, (uint8_t) bext3, (uint8_t) bext4); + + return pSrc; +} + +static int8_t *__attribute__((always_inline)) pulp_nn_i2_to_i4( int8_t * pSrc, int8_t * pDst) +{ + int8_t mask = 0xf0; + int8_t n_mask = ~ mask; + int8_t off = 0x04; + + v4s Src = *((v4s*) pSrc); + int8_t bext1, bext2, bext3, bext4; + int8_t out1, out2, out3, out4; + + pSrc+=4; + + bext1 = (int8_t) bitext((int) Src, 2, 0); + bext2 = (int8_t) bitext((int) Src, 2, 2); + bext3 = (int8_t) bitext((int) Src, 2, 4); + bext4 = (int8_t) bitext((int) Src, 2, 6); + + out1 = bitins(bext1, n_mask, bext2, mask, off); + out2 = bitins(bext3, n_mask, bext4, mask, off); + MemoryFence(); + + bext1 = (int8_t) bitext((int) Src, 2, 8); + bext2 = (int8_t) bitext((int) Src, 2, 10); + bext3 = (int8_t) bitext((int) Src, 2, 12); + bext4 = (int8_t) bitext((int) Src, 2, 14); + + out3 = bitins(bext1, n_mask, bext2, mask, off); + out4 = bitins(bext3, n_mask, bext4, mask, off); + + *((v4s*)pDst) = pack((int8_t) out1, (int8_t) out2, (int8_t) out3, (int8_t) out4); + MemoryFence(); + + pDst+=4; + bext1 = (int8_t) bitext((int) Src, 2, 16); + bext2 = (int8_t) bitext((int) Src, 2, 18); + bext3 = (int8_t) bitext((int) Src, 2, 20); + bext4 = (int8_t) bitext((int) Src, 2, 22); + + out1 = bitins(bext1, n_mask, bext2, mask, off); + out2 = bitins(bext3, n_mask, bext4, mask, off); + MemoryFence(); + + bext1 = (int8_t) bitext((int) Src, 2, 24); + bext2 = (int8_t) bitext((int) Src, 2, 26); + bext3 = (int8_t) bitext((int) Src, 2, 28); + bext4 = (int8_t) bitext((int) Src, 2, 30); + + out3 = bitins(bext1, n_mask, bext2, mask, off); + out4 = bitins(bext3, n_mask, bext4, mask, off); + + *((v4s*)pDst) = pack((int8_t) out1, (int8_t) out2, (int8_t) out3, (int8_t) out4); + + return pSrc; +} + +static uint8_t *__attribute__((always_inline)) pulp_nn_u2_to_u4( uint8_t * pSrc, uint8_t * pDst) +{ + int8_t mask = 0xf0; + int8_t n_mask = ~ mask; + int8_t off = 0x04; + + v4u Src = *((v4u*) pSrc); + uint8_t bext1, bext2, bext3, bext4; + uint8_t out1, out2, out3, out4; + + pSrc+=4; + + bext1 = (uint8_t) bitextu((unsigned int) Src, 2, 0); + bext2 = (uint8_t) bitextu((unsigned int) Src, 2, 2); + bext3 = (uint8_t) bitextu((unsigned int) Src, 2, 4); + bext4 = (uint8_t) bitextu((unsigned int) Src, 2, 6); + + out1 = bitins(bext1, n_mask, bext2, mask, off); + out2 = bitins(bext3, n_mask, bext4, mask, off); + MemoryFence(); + + bext1 = (uint8_t) bitextu((unsigned int) Src, 2, 8); + bext2 = (uint8_t) bitextu((unsigned int) Src, 2, 10); + bext3 = (uint8_t) bitextu((unsigned int) Src, 2, 12); + bext4 = (uint8_t) bitextu((unsigned int) Src, 2, 14); + + out3 = bitins(bext1, n_mask, bext2, mask, off); + out4 = bitins(bext3, n_mask, bext4, mask, off); + + *((v4u*)pDst) = pack((uint8_t) out1, (uint8_t) out2, (uint8_t) out3, (uint8_t) out4); + MemoryFence(); + + pDst+=4; + bext1 = (uint8_t) bitextu((unsigned int) Src, 2, 16); + bext2 = (uint8_t) bitextu((unsigned int) Src, 2, 18); + bext3 = (uint8_t) bitextu((unsigned int) Src, 2, 20); + bext4 = (uint8_t) bitextu((unsigned int) Src, 2, 22); + + out1 = bitins(bext1, n_mask, bext2, mask, off); + out2 = bitins(bext3, n_mask, bext4, mask, off); + MemoryFence(); + + bext1 = (uint8_t) bitextu((unsigned int) Src, 2, 24); + bext2 = (uint8_t) bitextu((unsigned int) Src, 2, 26); + bext3 = (uint8_t) bitextu((unsigned int) Src, 2, 28); + bext4 = (uint8_t) bitextu((unsigned int) Src, 2, 30); + + out3 = bitins(bext1, n_mask, bext2, mask, off); + out4 = bitins(bext3, n_mask, bext4, mask, off); + + *((v4u*)pDst) = pack((uint8_t) out1, (uint8_t) out2, (uint8_t) out3, (uint8_t) out4); + + return pSrc; +} + +/* + * XpulpV2 + */ + +static void __attribute__((noinline)) pulp_zero_mem(uint8_t * pBuffer, unsigned int size) +{ + int lfover = size &0x3; + for (int i=0; i<(size>>2); i++) + { + *((v4u *)pBuffer) = (v4u){0,0,0,0}; + MemoryFence(); + pBuffer+=4; + } + while(lfover) + { + *pBuffer++=0; + lfover--; + } +} + +static void __attribute__((noinline)) pulp_nn_im2col_u2_to_u8(uint8_t * pInput, uint8_t * pOutput, unsigned int blockSize) +{ + unsigned int blkCnt = blockSize >> 4u; + int lfover = blockSize & 0x0f; + for (int i = 0; i> 4u; + int lfover = blockSize & 0x0f; + for (int i = 0; i> 3u; + int lfover = blockSize & 0x07; + for (int i = 0; i> 3u; + int lfover = blockSize & 0x07; + for (int i = 0; i> 2u; + int lfover = blockSize & 0x03; + for (int i = 0; i> 2u; + int lfover = blockSize & 0x03; + for (int i = 0; i> 4u; + int lfover = blockSize & 0x0f; + for (int i = 0; i> 4u; + int lfover = blockSize & 0x0f; + for (int i = 0; i> 4u; + int lfover = blockSize & 0x0f; + for (int i = 0; i> 4u; + int lfover = blockSize & 0x0f; + for (int i = 0; i> 4u; + int lfover = blockSize & 0x0f; + for (int i = 0; i> 4u; + int lfover = blockSize & 0x0f; + for (int i = 0; i> 3u; + int lfover = blockSize & 0x07; + for (int i = 0; i> 3u; + int lfover = blockSize & 0x07; + for (int i = 0; i> 3u; + int lfover = blockSize & 0x07; + for (int i = 0; i> 3u; + int lfover = blockSize & 0x07; + for (int i = 0; i> 2u; + int lfover = blockSize & 0x03; + for (int i = 0; i> 2u; + int lfover = blockSize & 0x03; + for (int i = 0; i> 2; + + while(cnt > 0u) + { + inp = *((v4u*)pIn); + com = *((v4u*)pCom); + + *((v4u*)pIn) = max4(inp, com); + + pCom+=4; + pIn+=4; + cnt--; + } + + int left = length & 0x3; + while (left>0u) + { + if(*pIn<*pCom) + *pIn=*pCom; + + pIn++; + pCom++; + left--; + } +} + +static void __attribute__((noinline)) pulp_nn_compare_and_replace_if_larger_i8( + int8_t * base, int8_t * target, uint16_t length) { + int8_t *pIn = base; + int8_t *pCom = target; + v4s inp; + v4s com; + int cnt = length >> 2; + + while (cnt > 0u) { + inp = *((v4s *)pIn); + com = *((v4s *)pCom); + + *((v4s *)pIn) = maxs4(inp, com); + + pCom += 4; + pIn += 4; + cnt--; + } + + int left = length & 0x3; + while (left > 0u) { + if (*pIn < *pCom) + *pIn = *pCom; + + pIn++; + pCom++; + left--; + } +} + +static void __attribute__((noinline)) pulp_nn_avg_and_replace_u8(uint8_t * base, + uint8_t * target, + uint16_t length) +{ + uint8_t *pIn = base; + uint8_t *pCom = target; + + while (length>0u) + { + *pIn = ((*pIn + *pCom) >> 1); + + pIn++; + pCom++; + length--; + } +} + +static void __attribute__((noinline)) pulp_nn_compare_and_replace_if_larger_u4(uint8_t * base, + uint8_t * target, + uint16_t length) +{ + int8_t mask = 0xf0; + int8_t n_mask = ~ mask; + int8_t off = 0x04; + + uint8_t *pIn = base; + uint8_t *pCom = target; + v4u inp[2]; + v4u com[2]; + uint8_t *out; + int cnt = length >> 2; + + while(cnt > 0u) + { + pulp_nn_u4_to_u8(pIn, (uint8_t *)inp); + pulp_nn_u4_to_u8(pCom, (uint8_t *)com); + + *((v4u *)out) = max4(inp[0], com[0]); + + *((uint8_t*)pIn) = bitins(*out, n_mask, *(out + 1), mask, off); + pIn++; + *((uint8_t*)pIn) = bitins(*(out + 2), n_mask, *(out + 3), mask, off); + pIn++; + + *((v4u *)out) = max4(inp[1], com[1]); + + *((uint8_t*)pIn) = bitins(*out, n_mask, *(out + 1), mask, off); + pIn++; + *((uint8_t*)pIn) = bitins(*(out + 2), n_mask, *(out + 3), mask, off); + pIn++; + + pCom+=4; + cnt--; + } + + int left = length & 0x3; + while (left>0u) + { + uint8_t inA0 = (uint8_t) bitextu((unsigned int) *pIn, 4, 0); + uint8_t inA1 = (uint8_t) bitextu((unsigned int) *pIn, 4, 4); + uint8_t inB0 = (uint8_t) bitextu((unsigned int) *pCom, 4, 0); + uint8_t inB1 = (uint8_t) bitextu((unsigned int) *pCom, 4, 4); + + if(inA0> 2; + + while(cnt > 0u) + { + pulp_nn_i4_to_i8(pIn, (int8_t *)inp); + pulp_nn_i4_to_i8(pCom, (int8_t *)com); + + *((v4s *)out) = maxs4(inp[0], com[0]); + + *((int8_t*)pIn) = bitins(*out, n_mask, *(out + 1), mask, off); + pIn++; + *((int8_t*)pIn) = bitins(*(out + 2), n_mask, *(out + 3), mask, off); + pIn++; + + *((v4s *)out) = maxs4(inp[1], com[1]); + + *((int8_t*)pIn) = bitins(*out, n_mask, *(out + 1), mask, off); + pIn++; + *((int8_t*)pIn) = bitins(*(out + 2), n_mask, *(out + 3), mask, off); + pIn++; + + pCom+=4; + cnt--; + } + + int left = length & 0x3; + while (left>0u) + { + int8_t inA0 = (int8_t) bitext((int) *pIn, 4, 0); + int8_t inA1 = (int8_t) bitext((int) *pIn, 4, 4); + int8_t inB0 = (int8_t) bitext((int) *pCom, 4, 0); + int8_t inB1 = (int8_t) bitext((int) *pCom, 4, 4); + + if(inA00u) + { + uint8_t inA0 = (uint8_t) bitextu((unsigned int) *pIn, 4, 0); + uint8_t inA1 = (uint8_t) bitextu((unsigned int) *pIn, 4, 4); + uint8_t inB0 = (uint8_t) bitextu((unsigned int) *pCom, 4, 0); + uint8_t inB1 = (uint8_t) bitextu((unsigned int) *pCom, 4, 4); + + inA0 = ((inA0 + inB0) >> 1); + inA1 = ((inA1 + inB1) >> 1); + + *((uint8_t*)pIn) = bitins(inA0, n_mask, inA1, mask, off); + + pIn++; + pCom++; + length--; + } +} + +static void __attribute__((noinline)) pulp_nn_compare_and_replace_if_larger_u2(uint8_t * base, + uint8_t * target, + uint16_t length) +{ + int8_t mask2 = 0x0c; + int8_t n_mask2 = ~ mask2; + int8_t mask4 = 0x30; + int8_t n_mask4 = ~ mask4; + int8_t mask6 = 0xc0; + int8_t n_mask6 = ~ mask6; + int8_t off2 = 2; + int8_t off4 = 4; + int8_t off6 = 6; + + uint8_t *pIn = base; + uint8_t *pCom = target; + v4u inp[4]; + v4u com[4]; + uint8_t *out; + int cnt = length >> 2; + + while(cnt > 0u) + { + pulp_nn_u2_to_u8(pIn, inp); + pulp_nn_u2_to_u8(pCom, com); + + *((v4u*)out) = max4(inp[0], com[0]); + + uint8_t inA = (uint8_t) bitins(*out, n_mask2, *(out + 1), mask2, off2); + inA = bitins(inA, n_mask4, *(out + 2), mask4, off4); + *((uint8_t*)pIn) = bitins(inA, n_mask6, *(out + 3), mask6, off6); + pIn++; + + *((v4u*)out) = max4(inp[1], com[1]); + + inA = (uint8_t) bitins(*out, n_mask2, *(out + 1), mask2, off2); + inA = bitins(inA, n_mask4, *(out + 2), mask4, off4); + *((uint8_t*)pIn) = bitins(inA, n_mask6, *(out + 3), mask6, off6); + pIn++; + + *((v4u*)out) = max4(inp[2], com[2]); + + inA = (uint8_t) bitins(*out, n_mask2, *(out + 1), mask2, off2); + inA = bitins(inA, n_mask4, *(out + 2), mask4, off4); + *((uint8_t*)pIn) = bitins(inA, n_mask6, *(out + 3), mask6, off6); + pIn++; + + *((v4u*)out) = max4(inp[3], com[3]); + + inA = (uint8_t) bitins(*out, n_mask2, *(out + 1), mask2, off2); + inA = bitins(inA, n_mask4, *(out + 2), mask4, off4); + *((uint8_t*)pIn) = bitins(inA, n_mask6, *(out + 3), mask6, off6); + pIn++; + + pCom+=4; + cnt--; + } + + int left = length & 0x3; + while (left>0u) + { + uint8_t inA0 = (uint8_t) bitextu((unsigned int) *pIn, 2, 0); + uint8_t inA1 = (uint8_t) bitextu((unsigned int) *pIn, 2, 2); + uint8_t inA2 = (uint8_t) bitextu((unsigned int) *pIn, 2, 4); + uint8_t inA3 = (uint8_t) bitextu((unsigned int) *pIn, 2, 6); + v4u inA4 = pack((uint8_t) inA0, (uint8_t) inA1, (uint8_t) inA2, (uint8_t) inA3); + uint8_t inB0 = (uint8_t) bitextu((unsigned int) *pCom, 2, 0); + uint8_t inB1 = (uint8_t) bitextu((unsigned int) *pCom, 2, 2); + uint8_t inB2 = (uint8_t) bitextu((unsigned int) *pCom, 2, 4); + uint8_t inB3 = (uint8_t) bitextu((unsigned int) *pCom, 2, 6); + v4u inB4 = pack((uint8_t) inB0, (uint8_t) inB1, (uint8_t) inB2, (uint8_t) inB3); + + *((v4u*)out) = max4(inA4, inB4); + + uint8_t inA = (uint8_t) bitins(*out, n_mask2, *(out + 1), mask2, off2); + inA = bitins(inA, n_mask4, *(out + 2), mask4, off4); + *((uint8_t*)pIn) = bitins(inA, n_mask6, *(out + 3), mask6, off6); + + pIn++; + pCom++; + left--; + } +} + + +static void __attribute__((noinline)) pulp_nn_compare_and_replace_if_larger_i2(int8_t * base, + int8_t * target, + uint16_t length) +{ + int8_t mask2 = 0x0c; + int8_t n_mask2 = ~ mask2; + int8_t mask4 = 0x30; + int8_t n_mask4 = ~ mask4; + int8_t mask6 = 0xc0; + int8_t n_mask6 = ~ mask6; + int8_t off2 = 2; + int8_t off4 = 4; + int8_t off6 = 6; + + int8_t *pIn = base; + int8_t *pCom = target; + v4s inp[4]; + v4s com[4]; + int8_t *out; + int cnt = length >> 2; + + while(cnt > 0u) + { + pulp_nn_i2_to_i8(pIn, inp); + pulp_nn_i2_to_i8(pCom, com); + + *((v4s*)out) = maxs4(inp[0], com[0]); + + int8_t inA = (int8_t) bitins(*out, n_mask2, *(out + 1), mask2, off2); + inA = bitins(inA, n_mask4, *(out + 2), mask4, off4); + *((int8_t*)pIn) = bitins(inA, n_mask6, *(out + 3), mask6, off6); + pIn++; + + *((v4s*)out) = maxs4(inp[1], com[1]); + + inA = (int8_t) bitins(*out, n_mask2, *(out + 1), mask2, off2); + inA = bitins(inA, n_mask4, *(out + 2), mask4, off4); + *((int8_t*)pIn) = bitins(inA, n_mask6, *(out + 3), mask6, off6); + pIn++; + + *((v4s*)out) = maxs4(inp[2], com[2]); + + inA = (int8_t) bitins(*out, n_mask2, *(out + 1), mask2, off2); + inA = bitins(inA, n_mask4, *(out + 2), mask4, off4); + *((int8_t*)pIn) = bitins(inA, n_mask6, *(out + 3), mask6, off6); + pIn++; + + *((v4s*)out) = maxs4(inp[3], com[3]); + + inA = (int8_t) bitins(*out, n_mask2, *(out + 1), mask2, off2); + inA = bitins(inA, n_mask4, *(out + 2), mask4, off4); + *((int8_t*)pIn) = bitins(inA, n_mask6, *(out + 3), mask6, off6); + pIn++; + + pCom+=4; + cnt--; + } + + int left = length & 0x3; + while (left>0u) + { + int8_t inA0 = (int8_t) bitext((unsigned int) *pIn, 2, 0); + int8_t inA1 = (int8_t) bitext((unsigned int) *pIn, 2, 2); + int8_t inA2 = (int8_t) bitext((unsigned int) *pIn, 2, 4); + int8_t inA3 = (int8_t) bitext((unsigned int) *pIn, 2, 6); + v4s inA4 = pack((int8_t) inA0, (int8_t) inA1, (int8_t) inA2, (int8_t) inA3); + int8_t inB0 = (int8_t) bitext((unsigned int) *pCom, 2, 0); + int8_t inB1 = (int8_t) bitext((unsigned int) *pCom, 2, 2); + int8_t inB2 = (int8_t) bitext((unsigned int) *pCom, 2, 4); + int8_t inB3 = (int8_t) bitext((unsigned int) *pCom, 2, 6); + v4s inB4 = pack((int8_t) inB0, (int8_t) inB1, (int8_t) inB2, (int8_t) inB3); + + *((v4s*)out) = maxs4(inA4, inB4); + + int8_t inA = (int8_t) bitins(*out, n_mask2, *(out + 1), mask2, off2); + inA = bitins(inA, n_mask4, *(out + 2), mask4, off4); + *((int8_t*)pIn) = bitins(inA, n_mask6, *(out + 3), mask6, off6); + + pIn++; + pCom++; + left--; + } +} + +static void __attribute__((noinline)) pulp_nn_avg_and_replace_u2(uint8_t * base, + uint8_t * target, + uint16_t length) +{ + int8_t mask2 = 0x0c; + int8_t n_mask2 = ~ mask2; + int8_t mask4 = 0x30; + int8_t n_mask4 = ~ mask4; + int8_t mask6 = 0xc0; + int8_t n_mask6 = ~ mask6; + int8_t off2 = 2; + int8_t off4 = 4; + int8_t off6 = 6; + + uint8_t *pIn = base; + uint8_t *pCom = target; + + while (length>0u) + { + uint8_t inA0 = (uint8_t) bitextu((unsigned int) *pIn, 2, 0); + uint8_t inA1 = (uint8_t) bitextu((unsigned int) *pIn, 2, 2); + uint8_t inA2 = (uint8_t) bitextu((unsigned int) *pIn, 2, 4); + uint8_t inA3 = (uint8_t) bitextu((unsigned int) *pIn, 2, 6); + + uint8_t inB0 = (uint8_t) bitextu((unsigned int) *pCom, 2, 0); + uint8_t inB1 = (uint8_t) bitextu((unsigned int) *pCom, 2, 2); + uint8_t inB2 = (uint8_t) bitextu((unsigned int) *pCom, 2, 4); + uint8_t inB3 = (uint8_t) bitextu((unsigned int) *pCom, 2, 6); + + inA0 = ((inA0 + inB0) >> 1); + inA1 = ((inA1 + inB1) >> 1); + inA2 = ((inA2 + inB2) >> 1); + inA3 = ((inA3 + inB3) >> 1); + + uint8_t inA = (uint8_t) bitins(inA0, n_mask2, inA1, mask2, off2); + inA = bitins(inA, n_mask4, inA2, mask4, off4); + *((uint8_t*)pIn) = bitins(inA, n_mask6, inA3, mask6, off6); + + pIn++; + pCom++; + length--; + } +} + +/* + * XpulpNN + */ + +static void __attribute__((noinline)) xpulp_nn_zero_mem_u8(uint8_t * pBuffer, unsigned int size) +{ + int lfover = size &0x3; + for (int i=0; i<(size>>2); i++) + { + *((v4u *)pBuffer) = (v4u){0,0,0,0}; + MemoryFence(); + pBuffer+=4; + } + while(lfover) + { + *pBuffer++=0; + lfover--; + } +} + +static void __attribute__((noinline)) xpulp_nn_zero_mem_u4(uint8_t * pBuffer, unsigned int size) +{ + int lfover = size &0x7; + for (int i=0; i<(size>>3); i++) + { + *((v4u *)pBuffer) = (v4u){0,0,0,0}; + MemoryFence(); + pBuffer+=4; + } + while(lfover) + { + *pBuffer++=0; + lfover-=2; + } +} + +static void __attribute__((noinline)) xpulp_nn_zero_mem_u2(uint8_t * pBuffer, unsigned int size) +{ + int lfover = size &0xf; + for (int i=0; i<(size>>4); i++) + { + *((v4u *)pBuffer) = (v4u){0,0,0,0}; + MemoryFence(); + pBuffer+=4; + } + while(lfover) + { + *pBuffer++=0; + lfover-=4; + } +} + + +static void __attribute__((noinline)) xpulp_nn_compare_and_replace_if_larger_u4(uint8_t * base, + uint8_t * target, + uint16_t length) +{ + int8_t mask = 0xf0; + int8_t n_mask = ~ mask; + int8_t off = 0x04; + + uint8_t *pIn = base; + uint8_t *pCom = target; + + int cnt = length >> 2; + + while(cnt > 0u) + { + *((uint32_t *)pIn) = max8(*((uint32_t *)pIn), *((uint32_t *)pCom)); + + pIn+=4; + pCom+=4; + + cnt--; + } + + int left = length & 0x3; + while (left>0u) + { + uint8_t inA0 = (uint8_t) bitextu((unsigned int) *pIn, 4, 0); + uint8_t inA1 = (uint8_t) bitextu((unsigned int) *pIn, 4, 4); + uint8_t inB0 = (uint8_t) bitextu((unsigned int) *pCom, 4, 0); + uint8_t inB1 = (uint8_t) bitextu((unsigned int) *pCom, 4, 4); + + if(inA0> 2; + + while (cnt > 0u) { + *((int32_t *)pIn) = maxs8(*((int32_t *)pIn), *((int32_t *)pCom)); + + pIn += 4; + pCom += 4; + + cnt--; + } + + int left = length & 0x3; + while (left > 0u) { + int8_t inA0 = (int8_t)bitext((int)*pIn, 4, 0); + int8_t inA1 = (int8_t)bitext((int)*pIn, 4, 4); + int8_t inB0 = (int8_t)bitext((int)*pCom, 4, 0); + int8_t inB1 = (int8_t)bitext((int)*pCom, 4, 4); + + if (inA0 < inB0) + inA0 = inB0; + + if (inA1 < inB1) + inA1 = inB1; + + *((int8_t *)pIn) = bitins(inA0, n_mask, inA1, mask, off); + + pIn++; + pCom++; + left--; + } +} + +static void __attribute__((noinline)) xpulp_nn_avg_and_replace_u4(uint8_t * base, + uint8_t * target, + uint16_t length) +{ + int8_t mask = 0xf0; + int8_t n_mask = ~ mask; + int8_t off = 0x04; + + uint8_t *pIn = base; + uint8_t *pCom = target; + + int cnt = length >> 2; + + while (cnt > 0u) + { + *((uint32_t *)pIn) = avg8(*((uint32_t *)pIn), *((uint32_t *)pCom)); + + pIn+=4; + pCom+=4; + cnt--; + } + + int left = length & 0x3; + + while (left>0u) + { + uint8_t inA0 = (uint8_t) bitextu((unsigned int) *pIn, 4, 0); + uint8_t inA1 = (uint8_t) bitextu((unsigned int) *pIn, 4, 4); + uint8_t inB0 = (uint8_t) bitextu((unsigned int) *pCom, 4, 0); + uint8_t inB1 = (uint8_t) bitextu((unsigned int) *pCom, 4, 4); + + inA0 = ((inA0 + inB0) >> 1); + inA1 = ((inA1 + inB1) >> 1); + + *((uint8_t*)pIn) = bitins(inA0, n_mask, inA1, mask, off); + + pIn++; + pCom++; + length--; + } +} + +static void __attribute__((noinline)) xpulp_nn_compare_and_replace_if_larger_u2(uint8_t * base, + uint8_t * target, + uint16_t length) +{ + int8_t mask2 = 0x0c; + int8_t n_mask2 = ~ mask2; + int8_t mask4 = 0x30; + int8_t n_mask4 = ~ mask4; + int8_t mask6 = 0xc0; + int8_t n_mask6 = ~ mask6; + int8_t off2 = 2; + int8_t off4 = 4; + int8_t off6 = 6; + + uint8_t *pIn = base; + uint8_t *pCom = target; + uint8_t *out; + + int cnt = length >> 2; + + while(cnt > 0u) + { + *((uint32_t *)pIn) = max16(*((uint32_t *)pIn), *((uint32_t *)pCom)); + + pIn+=4; + pCom+=4; + cnt--; + } + + int left = length & 0x3; + while (left>0u) + { + uint8_t inA0 = (uint8_t) bitextu((unsigned int) *pIn, 2, 0); + uint8_t inA1 = (uint8_t) bitextu((unsigned int) *pIn, 2, 2); + uint8_t inA2 = (uint8_t) bitextu((unsigned int) *pIn, 2, 4); + uint8_t inA3 = (uint8_t) bitextu((unsigned int) *pIn, 2, 6); + v4u inA4 = pack((uint8_t) inA0, (uint8_t) inA1, (uint8_t) inA2, (uint8_t) inA3); + uint8_t inB0 = (uint8_t) bitextu((unsigned int) *pCom, 2, 0); + uint8_t inB1 = (uint8_t) bitextu((unsigned int) *pCom, 2, 2); + uint8_t inB2 = (uint8_t) bitextu((unsigned int) *pCom, 2, 4); + uint8_t inB3 = (uint8_t) bitextu((unsigned int) *pCom, 2, 6); + v4u inB4 = pack((uint8_t) inB0, (uint8_t) inB1, (uint8_t) inB2, (uint8_t) inB3); + + *((v4u*)out) = max4(inA4, inB4); + + uint8_t inA = (uint8_t) bitins(*out, n_mask2, *(out + 1), mask2, off2); + inA = bitins(inA, n_mask4, *(out + 2), mask4, off4); + *((uint8_t*)pIn) = bitins(inA, n_mask6, *(out + 3), mask6, off6); + + pIn++; + pCom++; + left--; + } +} +static void __attribute__((noinline)) xpulp_nn_compare_and_replace_if_larger_i2(int8_t * base, + int8_t * target, + uint16_t length) +{ + int8_t mask2 = 0x0c; + int8_t n_mask2 = ~ mask2; + int8_t mask4 = 0x30; + int8_t n_mask4 = ~ mask4; + int8_t mask6 = 0xc0; + int8_t n_mask6 = ~ mask6; + int8_t off2 = 2; + int8_t off4 = 4; + int8_t off6 = 6; + + int8_t *pIn = base; + int8_t *pCom = target; + int8_t *out; + + int cnt = length >> 2; + + while(cnt > 0u) + { + *((int32_t *)pIn) = maxs16(*((int32_t *)pIn), *((int32_t *)pCom)); + + pIn+=4; + pCom+=4; + cnt--; + } + + int left = length & 0x3; + while (left>0u) + { + int8_t inA0 = (int8_t) bitext((int) *pIn, 2, 0); + int8_t inA1 = (int8_t) bitext((int) *pIn, 2, 2); + int8_t inA2 = (int8_t) bitext((int) *pIn, 2, 4); + int8_t inA3 = (int8_t) bitext((int) *pIn, 2, 6); + v4s inA4 = pack((int8_t) inA0, (int8_t) inA1, (int8_t) inA2, (int8_t) inA3); + int8_t inB0 = (int8_t) bitext((int) *pCom, 2, 0); + int8_t inB1 = (int8_t) bitext((int) *pCom, 2, 2); + int8_t inB2 = (int8_t) bitext((int) *pCom, 2, 4); + int8_t inB3 = (int8_t) bitext((int) *pCom, 2, 6); + v4s inB4 = pack((int8_t) inB0, (int8_t) inB1, (int8_t) inB2, (int8_t) inB3); + + *((v4s*)out) = maxs4(inA4, inB4); + + int8_t inA = (int8_t) bitins(*out, n_mask2, *(out + 1), mask2, off2); + inA = bitins(inA, n_mask4, *(out + 2), mask4, off4); + *((int8_t*)pIn) = bitins(inA, n_mask6, *(out + 3), mask6, off6); + + pIn++; + pCom++; + left--; + } +} + +static void __attribute__((noinline)) xpulp_nn_avg_and_replace_u2(uint8_t * base, + uint8_t * target, + uint16_t length) +{ + int8_t mask2 = 0x0c; + int8_t n_mask2 = ~ mask2; + int8_t mask4 = 0x30; + int8_t n_mask4 = ~ mask4; + int8_t mask6 = 0xc0; + int8_t n_mask6 = ~ mask6; + int8_t off2 = 2; + int8_t off4 = 4; + int8_t off6 = 6; + + uint8_t *pIn = base; + uint8_t *pCom = target; + uint8_t *out; + + int cnt = length >> 2; + + while(cnt > 0u) + { + *((uint32_t *)pIn) = avg16(*((uint32_t *)pIn), *((uint32_t *)pCom)); + + pIn+=4; + pCom+=4; + cnt--; + } + + int left = length & 0x3; + while (left>0u) + { + uint8_t inA0 = (uint8_t) bitextu((unsigned int) *pIn, 2, 0); + uint8_t inA1 = (uint8_t) bitextu((unsigned int) *pIn, 2, 2); + uint8_t inA2 = (uint8_t) bitextu((unsigned int) *pIn, 2, 4); + uint8_t inA3 = (uint8_t) bitextu((unsigned int) *pIn, 2, 6); + v4u inA4 = pack((uint8_t) inA0, (uint8_t) inA1, (uint8_t) inA2, (uint8_t) inA3); + uint8_t inB0 = (uint8_t) bitextu((unsigned int) *pCom, 2, 0); + uint8_t inB1 = (uint8_t) bitextu((unsigned int) *pCom, 2, 2); + uint8_t inB2 = (uint8_t) bitextu((unsigned int) *pCom, 2, 4); + uint8_t inB3 = (uint8_t) bitextu((unsigned int) *pCom, 2, 6); + v4u inB4 = pack((uint8_t) inB0, (uint8_t) inB1, (uint8_t) inB2, (uint8_t) inB3); + + *((v4u*)out) = avg4(inA4, inB4); + + uint8_t inA = (uint8_t) bitins(*out, n_mask2, *(out + 1), mask2, off2); + inA = bitins(inA, n_mask4, *(out + 2), mask4, off4); + *((uint8_t*)pIn) = bitins(inA, n_mask6, *(out + 3), mask6, off6); + + pIn++; + pCom++; + left--; + } +} + + +#endif diff --git a/rt_nn_tests/xpnnv2_conv/test.c b/rt_nn_tests/xpnnv2_conv/test.c new file mode 100644 index 0000000..19e7161 --- /dev/null +++ b/rt_nn_tests/xpnnv2_conv/test.c @@ -0,0 +1,230 @@ +// massive hack to enable rt compatibility +#define pi_core_id get_core_id +#include +#include +#include + +#include "dory_dma.h" + +#include "pmsis.h" + +#include "data_statstest.h" +//#include "pulp_nn_kernels.h" +#include "pulp_nn_mix_kernels.h" + + +#define start_cycle_counter() asm volatile("csrw 0xCC0, 0x01;") +#define stop_cycle_counter() asm volatile("csrw 0xCC0, 0x00;") +#define read_cycle_counter(x) asm volatile("csrr %0, 0x780;" : "=r" (x)) +#define reset_cycle_counter() asm volatile("csrw 0x780, 0x0;") + +uint8_t im2col[IM2COL_DIM] = {0}; +uint8_t outputs[OUTPUT_DIM] = {0}; + +int32_t outputs_fp[OUTPUT_DIM_FP] = {0}; + +#ifndef PROFILE +int num_cycles; +#else +int im2col_cycles; +int hotloop_prep_cycles; +int hotloop_cycles; +int threshold_cycles; +int requant_cycles; +int hotloop_leftover_cycles; +int matmul4x2_leftover_cycles; +#endif + +void call_krnl_0(); +void test_0(); + +int main(int argc, char *argv[]) +{ +#if KRAKEN_PTEST == 1 + kraken_padframe_aon_pad_gpioa_cfg_rxe_set(24, 0); + kraken_padframe_aon_pad_gpioa_cfg_trie_set(24, 0); + kraken_padframe_aon_pad_gpioa_cfg_chip2pad_set(24, 0); +#endif + int n_mismatches = 0; + int mismatches_tot = 0; + + + + #ifndef PROFILE + num_cycles = 0; + #endif + + if (get_core_id() == 0) { + printf("===> TEST 0: Running xpulp_nn_mix_conv_u4_u8_i2...\n"); + printf(" dims_in = [4, 4]\n"); + printf(" dims_kernel = [3, 3]\n"); + printf(" ch_in/out = [16, 32]\n"); + //printf(" padding_y_top = [%d]\n", padding_y_top); + //printf(" padding_y_bottom = [%d]\n", padding_y_bottom); + //printf(" padding_x_left = [%d]\n", padding_x_left); + //printf(" padding_x_right = [%d]\n", padding_x_right); + //printf(" stride_x = [%d]\n", stride_x); + //printf(" stride_y = [%d]\n", stride_y); + } + test_0(); + #ifndef PROFILE + stop_cycle_counter(); + read_cycle_counter(num_cycles); + if (get_core_id() == 0) { + printf("===> TEST 0: Finished running xpulp_nn_mix_conv_u4_u8_i2\n"); + printf("num_cycles = %d\n", num_cycles); + printf("MACs = 73728\n"); + printf("MACs/cycle = %.4f\n", 73728/num_cycles); + } + #endif + if (get_core_id() == 0) { + printf("Checking for mismatches..\n"); + n_mismatches = 0; + + for(int i=0; i < 512; i++) { + if (outputs[i] != exp_outp_0[i]){ + printf("***Mismatch in test 0 at iteration %d: Expected: %x, got: %x\n", i, exp_outp_0[i], outputs[i]); + n_mismatches++; + } + } + } + mismatches_tot += n_mismatches; + + if (get_core_id() == 0) { + printf("Got %d mismatches in %d tests\n", mismatches_tot, 1); + } + return mismatches_tot; +} + + +void call_krnl_0(void) { + uint8_t * pInp; + uint8_t * pIm2ColBuffer; + int8_t * pBias = NULL; + uint8_t * pOut; + int8_t * pWeight; + uint32_t * pThr; + int32_t * pKappa, pLambda; + #ifdef PROFILE + int32_t im2col_cycles = 0; + int32_t hotloop_prep_cycles = 0; + int32_t hotloop_cycles = 0; + int32_t threshold_cycles = 0; + int32_t requant_cycles = 0; + int32_t hotloop_leftover_cycles = 0; + int32_t matmul4x2_leftover_cycles = 0; + #endif + pInp = inp_l1; + + pOut = outp_l1; + pIm2ColBuffer = im2col_l1; + pWeight = wt_l1; + pThr = threshs_l1; + pKappa = kappa_l1; + pLambda = lambda_l1; +#if KRAKEN_PTEST == 1 + if (pi_core_id() == 0) { + kraken_padframe_aon_pad_gpioa_cfg_chip2pad_set(24, 1); + } +#endif + xpulp_nn_mix_conv_u4_u8_i2( + pInp, + pIm2ColBuffer, + pBias, + pOut, + pWeight, + pKappa, + pLambda, + 1, + 13, + 4, + 4, + 16, + 4, + 4, + 32, + 3, + 3, + 1, + 1, + 1, + 1, + 1, + 1, + 1, +#ifndef PROFILE + 1 +#else + 1, + &im2col_cycles, + &hotloop_prep_cycles, + &hotloop_cycles, + &requant_cycles, + &hotloop_leftover_cycles, + &matmul4x2_leftover_cycles +#endif + ); + +#if KRAKEN_PTEST == 1 + if (pi_core_id() == 0) { + kraken_padframe_aon_pad_gpioa_cfg_chip2pad_set(24, 0); + } +#endif + #ifdef PROFILE + if (pi_core_id() == 0) { + printf("im2col_cycles = %d\n", im2col_cycles); + printf("hotloop_prep_cycles = %d\n", hotloop_prep_cycles); + printf("hotloop_cycles = %d\n", hotloop_cycles); + printf("requant_cycles = %d\n", requant_cycles); + printf("threshold_cycles = %d\n", threshold_cycles); + printf("hotloop_leftover_cycles = %d\n", hotloop_leftover_cycles); + printf("matmul4x2_leftover_cycles = %d\n", matmul4x2_leftover_cycles); + } + #endif +} + +void test_0(void) { + uint32_t dma_channel = dory_dma_allocate(); + DMA_copy dma_tx = {0}; + // DMA transfer inputs from L2 to L1 + dma_tx.ext = pIn_0; + dma_tx.loc = inp_l1; + dma_tx.number_of_1d_copies = 1; + dma_tx.number_of_2d_copies = 1; + dma_tx.length_1d_copy = 128; + dma_tx.stride_1d = 1; + dma_tx.stride_2d = 1; + dma_tx.dir = 1; + dma_tx.tid = dma_channel; + dory_dma_memcpy_async(&dma_tx); + dma_tx.ext = pLambda_0; + dma_tx.loc = lambda_l1; + dma_tx.length_1d_copy = 32 * 4; // 4 bytes per lambda item + dory_dma_memcpy_async(&dma_tx); + dma_tx.ext = pKappa_0; + dma_tx.loc = kappa_l1; + dory_dma_memcpy_async(&dma_tx); + // transfer weights + dma_tx.ext = pWeight_0; + dma_tx.loc = wt_l1; + dma_tx.length_1d_copy = 1152; + dory_dma_memcpy_async(&dma_tx); + call_krnl_0(); + // get outputs back with DMA + dma_tx.dir = 0; + dma_tx.ext = outputs; + dma_tx.loc = outp_l1; + dma_tx.length_1d_copy = 512; + dory_dma_memcpy_async(&dma_tx); + dory_dma_free(&dma_tx); +} + + + + + + + + + + diff --git a/rt_nn_tests/xpnnv2_conv/xpulp_nn_mix_conv_u4_u8_i2.c b/rt_nn_tests/xpnnv2_conv/xpulp_nn_mix_conv_u4_u8_i2.c new file mode 100644 index 0000000..6055ed9 --- /dev/null +++ b/rt_nn_tests/xpnnv2_conv/xpulp_nn_mix_conv_u4_u8_i2.c @@ -0,0 +1,298 @@ +/* + * xpulp_nn_mix_conv_u4_u8_i2.c + * Nazareno Bruschi + * Alessandro Nadalini + * + * Copyright (C) 2019-2020 University of Bologna + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "pmsis.h" +#include "pulp_nn_utils.h" +#include "pulp_nn_kernels.h" + + +void __attribute__((noinline)) xpulp_nn_mix_conv_u4_u8_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mult, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batch_norm) +{ + uint16_t ch_in_r = PACK_INT4_SIZE(ch_in); + uint16_t ch_out_r = PACK_INT8_SIZE(ch_out); + + int core_id = pi_core_id(); + uint8_t * pIm2ColBase = pIm2ColBuffer + (2 * core_id * PACK_INT4_SIZE(ch_in) * dim_kernel_x * dim_kernel_y); + int i_out_y, i_out_x, i_ker_y, i_ker_x; + int Log2Core; + + uint8_t extra_chunk = ((dim_out_y & (NUM_CORES-1)) != 0); + uint8_t extra_chunk_r; + uint16_t dim_out_x_r; + uint8_t section; + int core_id_r; + + if(extra_chunk && dim_out_x > 1) + { + Log2Core = log2(NUM_CORES >> 1); + core_id_r = (core_id >> 1); + dim_out_x_r = (dim_out_x >> 1); + section = (core_id & 0x1); + extra_chunk_r = ((dim_out_y & ((NUM_CORES >> 1) - 1)) != 0); + } + else + { + Log2Core = log2(NUM_CORES); + core_id_r = core_id; + dim_out_x_r = dim_out_x; + section = 0; + extra_chunk_r = extra_chunk; + extra_chunk = 0; + } + + uint8_t flag_dim_out_x_odd = dim_out_x & 0x01; + + int chunk = (dim_out_y >> Log2Core) + extra_chunk_r; + + int start_pixel = min((chunk * core_id_r), dim_out_y); + int stop_pixel = min(start_pixel + chunk, dim_out_y); + + uint8_t *pIm2Col = pIm2ColBase; + uint8_t *pOutBuffer = pOut + (start_pixel * ch_out_r * dim_out_x) + (section * ch_out_r * dim_out_x_r); + + for (i_out_y = start_pixel; i_out_y < stop_pixel; i_out_y++) + { + for(i_out_x=(section * dim_out_x_r); i_out_x<(dim_out_x_r + (section * (dim_out_x_r + flag_dim_out_x_odd))); i_out_x++) + { + if(i_out_y < padding_y_top) + { + for(i_ker_y=((i_out_y * stride_y) - padding_y_top); i_ker_y<((i_out_y * stride_y) - padding_y_top + dim_kernel_y); i_ker_y++) + { + for(i_ker_x=((i_out_x * stride_x) - padding_x_left); i_ker_x<((i_out_x * stride_x) - padding_x_left + dim_kernel_x); i_ker_x++) + { + if((i_ker_y < 0) || (i_ker_y >= dim_in_y) || (i_ker_x < 0) || (i_ker_x >= dim_in_x)) + { + xpulp_nn_zero_mem_u4(pIm2Col, ch_in); + } + else + { + xpulp_nn_im2col_u4_to_u4((uint8_t*) (pIn + ((i_ker_y * dim_in_x + i_ker_x) * ch_in_r)), pIm2Col, ch_in); + } + pIm2Col+=PACK_INT4_SIZE(ch_in); + } + } + } + else if(i_out_y < dim_out_y - padding_y_bottom) + { + if(i_out_x < padding_x_left) + { + for(i_ker_y=((i_out_y * stride_y) - padding_y_top); i_ker_y<((i_out_y * stride_y) - padding_y_top + dim_kernel_y); i_ker_y++) + { + for(i_ker_x=((i_out_x * stride_x) - padding_x_left); i_ker_x<((i_out_x * stride_x) - padding_x_left + dim_kernel_x); i_ker_x++) + { + if((i_ker_x < 0) || (i_ker_x >= dim_in_x)) + { + xpulp_nn_zero_mem_u4(pIm2Col, ch_in); + } + else + { + xpulp_nn_im2col_u4_to_u4((uint8_t*) (pIn + ((i_ker_y * dim_in_x + i_ker_x) * ch_in_r)), pIm2Col, ch_in); + } + pIm2Col+=PACK_INT4_SIZE(ch_in); + } + } + } + else if(i_out_x < (dim_out_x - padding_x_right)) + { + for(i_ker_y=((i_out_y * stride_y) - padding_y_top); i_ker_y<((i_out_y * stride_y) - padding_y_top + dim_kernel_y); i_ker_y++) + { + xpulp_nn_im2col_u4_to_u4((uint8_t*) pIn + (i_ker_y * dim_in_x + i_out_x * stride_x - padding_x_left)*ch_in_r,pIm2Col,ch_in * dim_kernel_x); + pIm2Col+=PACK_INT4_SIZE(ch_in * dim_kernel_x); + } + } + else + { + for(i_ker_y=((i_out_y * stride_y) - padding_y_top); i_ker_y<((i_out_y * stride_y) - padding_y_top + dim_kernel_y); i_ker_y++) + { + for(i_ker_x = i_out_x * stride_x - padding_x_left; i_ker_x < i_out_x * stride_x - padding_x_left + dim_kernel_x; i_ker_x++) + { + if((i_ker_x < 0) || (i_ker_x >= dim_in_x)) + { + xpulp_nn_zero_mem_u4(pIm2Col, ch_in); + } + else + { + xpulp_nn_im2col_u4_to_u4((uint8_t *)pIn + (i_ker_y*dim_in_x+i_ker_x)* ch_in_r, pIm2Col, ch_in); + } + pIm2Col+=PACK_INT4_SIZE(ch_in); + } + } + } + } + else + { + for(i_ker_y=((i_out_y * stride_y) - padding_y_top); i_ker_y<((i_out_y * stride_y) - padding_y_top + dim_kernel_y); i_ker_y++) + { + for(i_ker_x = i_out_x * stride_x - padding_x_left; i_ker_x < i_out_x * stride_x - padding_x_left + dim_kernel_x; i_ker_x++) + { + if(i_ker_y < 0 || (i_ker_y >= dim_in_y) || i_ker_x < 0 || i_ker_x >= dim_in_x) + { + xpulp_nn_zero_mem_u4(pIm2Col, ch_in); + } + else + { + xpulp_nn_im2col_u4_to_u4((uint8_t *) pIn + (i_ker_y * dim_in_x + i_ker_x) * ch_in_r, pIm2Col, ch_in); + } + pIm2Col+=PACK_INT4_SIZE(ch_in); + } + } + } + if(pIm2Col == (pIm2ColBase + ((PACK_INT4_SIZE(ch_in) * dim_kernel_x * dim_kernel_y) << 1))) + { + pOutBuffer = xpulp_nn_mix_matmul_u4_u8_i2( + pIm2ColBase, + pBias, + pOutBuffer, + pOutBuffer + ch_out_r, + pWeight, + pKappa, + pLambda, + out_mult, + out_shift, + (ch_in * dim_kernel_x * dim_kernel_y), + ch_out, + flag_relu, + flag_batch_norm + ); + + pIm2Col = pIm2ColBase; + } + } + + if(pIm2Col != pIm2ColBase) + { + + MIXED_SKIP("1"); + + const int8_t *pA = pWeight; + int i; + int32_t * k1 = pKappa; + int32_t * lambda1 = pLambda; + v4s inA[2]; + uint16_t num_col_im2col = ch_in * dim_kernel_x * dim_kernel_y; + uint16_t num_col_im2col_w = PACK_INT2_SIZE(ch_in) * dim_kernel_x * dim_kernel_y; + + for(i = 0; i < ch_out; i++) + { + int sum = 0; + if (pBias != NULL) + { + sum = *((int*) pBias); + pBias += 4; + } + + uint8_t *pB = pIm2ColBase; + + int32_t *ptrA = (int32_t *)pA; + uint32_t *ptrB = (uint32_t *)pB; + + for(int j=0; j < (num_col_im2col >> 4); j++) + { + sum = SumDotp8(*(uint32_t *)ptrB, *(int32_t *)ptrA, sum); + + ptrB++; + + sum = SumDotp8(*(uint32_t *)ptrB, *(int32_t *)ptrA, sum); + + ptrA++; + ptrB++; + } + + int col_cnt_im2col = num_col_im2col & 0xf; + + if(col_cnt_im2col) + { + + uint16_t loop_cnt_im2col_a = (num_col_im2col >> 4) << 3; + pB+=loop_cnt_im2col_a; + + do + { + int8_t inA1 = (int8_t) bitext((int) *pA, 2, 0); + uint8_t inB1 = (uint8_t) bitextu((unsigned int) *pB, 4, 0); + sum += inA1 * inB1; + inA1 = (int8_t) bitext((int) *pA, 2, 2); + inB1 = (uint8_t) bitextu((unsigned int) *pB, 4, 4); + sum += inA1 * inB1; + pB++; + inA1 = (int8_t) bitext((int) *pA, 2, 4); + inB1 = (uint8_t) bitextu((unsigned int) *pB, 4, 0); + sum += inA1 * inB1; + inA1 = (int8_t) bitext((int) *pA, 2, 6); + inB1 = (uint8_t) bitextu((unsigned int) *pB, 4, 4); + sum += inA1 * inB1; + + pA++; + pB++; + col_cnt_im2col-=4; + } while(col_cnt_im2col); + } + if (flag_batch_norm && flag_relu) + { + *pOutBuffer = pulp_nn_bn_quant_u8(sum, *k1, *lambda1, out_shift); + k1++; + lambda1++; + pOutBuffer++; + } + else + { + if(flag_relu == 1) + { + *pOutBuffer = pulp_nn_quant_u8(sum, out_mult, out_shift); + pOutBuffer++; + } + else + { + *pOutBuffer = (uint8_t) clip8(sum >> out_shift); + pOutBuffer++; + } + } + } + } + pOutBuffer+=(extra_chunk * ((dim_out_x_r + ((1 - section) * flag_dim_out_x_odd)) * ch_out_r)); + pIm2Col = pIm2ColBase; + } + pi_cl_team_barrier(); +} diff --git a/rt_nn_tests/xpnnv2_conv/xpulp_nn_mix_matmul_u4_u8_i2.c b/rt_nn_tests/xpnnv2_conv/xpulp_nn_mix_matmul_u4_u8_i2.c new file mode 100644 index 0000000..bd31a9c --- /dev/null +++ b/rt_nn_tests/xpnnv2_conv/xpulp_nn_mix_matmul_u4_u8_i2.c @@ -0,0 +1,470 @@ +/* + * xpulp_nn_mix_matmul_u4_u8_i2.c + * Nazareno Bruschi + * Alessandro Nadalini + * + * Copyright (C) 2019-2020 University of Bologna + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "pmsis.h" +#include "pulp_nn_utils.h" + + +uint8_t * __attribute__((noinline)) xpulp_nn_mix_matmul_u4_u8_i2( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mult, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batch_norm) +{ + + uint16_t ch_out_r = PACK_INT8_SIZE(ch_out); + + uint16_t num_col_im2col_w = PACK_INT2_SIZE(num_col_im2col); + uint16_t num_col_im2col_a = PACK_INT4_SIZE(num_col_im2col); + + int32_t a_rollback = 4 - num_col_im2col_a; + int32_t w_rollback = 4 - (num_col_im2col_w + (num_col_im2col_w << 1)); + + LEGACY_MODE("0"); + IVEC_FMT("5"); + A_STRIDE(num_col_im2col_a); + W_STRIDE(num_col_im2col_w); + A_ROLLBACK(a_rollback); + W_ROLLBACK(w_rollback); + A_SKIP("1"); + W_SKIP("3"); + MIXED_SKIP("8"); + + int8_t *pA = pWeight; + + uint16_t chan_left = ch_out & 0x3; + + for(int i=0; i < (ch_out >> 2); i++) + { + uint8_t *pB = pIn; + + uint32_t *ptrB = (uint32_t *) pB; + + int32_t *ptrA = (int32_t *) pA ; + + A_ADDRESS(ptrB); + W_ADDRESS(ptrA); + + ptrA = MacLoadInit(1, 0, 0, 0, ptrA); + ptrA = MacLoadInit(1, 0, 1, 0, ptrA); + ptrA = MacLoadInit(1, 0, 2, 0, ptrA); + ptrA = MacLoadInit(1, 0, 3, 0, ptrA); + + ptrB = MacLoadInit(0, 1, 0, 0, ptrB); + + int sum = 0; + int sum2 = 0; + int sum3 = 0; + int sum4 = 0; + int sum5 = 0; + int sum6 = 0; + int sum7 = 0; + int sum8 = 0; + + + if (pBias != NULL) + { + sum = *((int*) pBias); + pBias += 4; + sum2 = *((int*) pBias); + pBias += 4; + sum3 = *((int*) pBias); + pBias += 4; + sum4 = *((int*) pBias); + pBias += 4; + + sum5 = sum; + sum6 = sum2; + sum7 = sum3; + sum8 = sum4; + } + + for(int j=0; j<(num_col_im2col >> 4); j++) + { + ptrB = MacLoadInit(0, 1, 0, 1, ptrB); + + sum = MacLoad8(0, 0, 0, 0, ptrA, sum); + sum2 = MacLoad8(0, 0, 1, 0, ptrA, sum2); + sum3 = MacLoad8(0, 0, 2, 0, ptrA, sum3); + sum4 = MacLoad8(0, 1, 3, 0, ptrB, sum4); + ptrB = MacLoadUpdate(ptrB); + + sum5 = MacLoad8(0, 0, 0, 1, ptrA, sum5); + sum6 = MacLoad8(0, 0, 1, 1, ptrA, sum6); + sum7 = MacLoad8(0, 0, 2, 1, ptrA, sum7); + sum8 = MacLoad8(0, 1, 3, 1, ptrB, sum8); + ptrB = MacLoadUpdate(ptrB); + + + MemoryFence(); + + sum = MacLoad8(0, 0, 0, 0, ptrA, sum); + sum2 = MacLoad8(0, 0, 1, 0, ptrA, sum2); + sum3 = MacLoad8(0, 0, 2, 0, ptrA, sum3); + sum4 = MacLoad8(0, 1, 3, 0, ptrB, sum4); + ptrB = MacLoadUpdate(ptrB); + + sum5 = MacLoad8(1, 0, 0, 1, ptrA, sum5); + ptrA = MacLoadUpdate(ptrA); + + sum6 = MacLoad8(1, 0, 1, 1, ptrA, sum6); + ptrA = MacLoadUpdate(ptrA); + + sum7 = MacLoad8(1, 0, 2, 1, ptrA, sum7); + ptrA = MacLoadUpdate(ptrA); + + sum8 = MacLoad8(1, 0, 3, 1, ptrA, sum8); + ptrA = MacLoadUpdate(ptrA); + } + + asm volatile ("csrr %0, 0x101" : "=r" (pA)); + pA-=4; + + int col_cnt_im2col = num_col_im2col & 0xf; + + if(col_cnt_im2col) + { + + uint16_t loop_cnt_im2col_a = (num_col_im2col >> 4) << 3; + + int8_t *pA2 = (pA + num_col_im2col_w); + int8_t *pA3 = (pA2 + num_col_im2col_w); + int8_t *pA4 = (pA3 + num_col_im2col_w); + + pB+=loop_cnt_im2col_a; + + uint8_t *pB2 = (pB + num_col_im2col_a); + + do + { + int8_t inA = (int8_t) bitext((int) *pA, 2, 0); + int8_t inA2 = (int8_t) bitext((int) *pA2, 2, 0); + int8_t inA3 = (int8_t) bitext((int) *pA3, 2, 0); + int8_t inA4 = (int8_t) bitext((int) *pA4, 2, 0); + + uint8_t inB = (uint8_t)bitextu((unsigned int) *pB, 4, 0); + uint8_t inB2 = (uint8_t)bitextu((unsigned int) *pB2, 4, 0); + + sum += inA * inB; + sum2 += inA2 * inB; + sum3 += inA3 * inB; + sum4 += inA4 * inB; + + sum5 += inA * inB2; + sum6 += inA2 * inB2; + sum7 += inA3 * inB2; + sum8 += inA4 * inB2; + + inA = (int8_t) bitext((int) *pA, 2, 2); + inA2 = (int8_t) bitext((int) *pA2, 2, 2); + inA3 = (int8_t) bitext((int) *pA3, 2, 2); + inA4 = (int8_t) bitext((int) *pA4, 2, 2); + + inB = (uint8_t)bitextu((unsigned int) *pB, 4, 4); + inB2 = (uint8_t)bitextu((unsigned int) *pB2, 4, 4); + + sum += inA * inB; + sum2 += inA2 * inB; + sum3 += inA3 * inB; + sum4 += inA4 * inB; + + sum5 += inA * inB2; + sum6 += inA2 * inB2; + sum7 += inA3 * inB2; + sum8 += inA4 * inB2; + + pB++; + pB2++; + + inA = (int8_t) bitext((int) *pA, 2, 4); + inA2 = (int8_t) bitext((int) *pA2, 2, 4); + inA3 = (int8_t) bitext((int) *pA3, 2, 4); + inA4 = (int8_t) bitext((int) *pA4, 2, 4); + + inB = (uint8_t)bitextu((unsigned int) *pB, 4, 0); + inB2 = (uint8_t)bitextu((unsigned int) *pB2, 4, 0); + + sum += inA * inB; + sum2 += inA2 * inB; + sum3 += inA3 * inB; + sum4 += inA4 * inB; + + sum5 += inA * inB2; + sum6 += inA2 * inB2; + sum7 += inA3 * inB2; + sum8 += inA4 * inB2; + + inA = (int8_t) bitext((int) *pA, 2, 6); + inA2 = (int8_t) bitext((int) *pA2, 2, 6); + inA3 = (int8_t) bitext((int) *pA3, 2, 6); + inA4 = (int8_t) bitext((int) *pA4, 2, 6); + + inB = (uint8_t)bitextu((unsigned int) *pB, 4, 4); + inB2 = (uint8_t)bitextu((unsigned int) *pB2, 4, 4); + + sum += inA * inB; + sum2 += inA2 * inB; + sum3 += inA3 * inB; + sum4 += inA4 * inB; + + sum5 += inA * inB2; + sum6 += inA2 * inB2; + sum7 += inA3 * inB2; + sum8 += inA4 * inB2; + + pA++; + pA2++; + pA3++; + pA4++; + + pB++; + pB2++; + + col_cnt_im2col-=4; + } while(col_cnt_im2col); + } + if (flag_batch_norm && flag_relu) + { + *pOut = pulp_nn_bn_quant_u8(sum, *pKappa, *pLambda, out_shift); + pOut++; + *pOut2 = pulp_nn_bn_quant_u8(sum5, *pKappa, *pLambda, out_shift); + pOut2++; + pKappa++; + pLambda++; + + *pOut = pulp_nn_bn_quant_u8(sum2, *pKappa, *pLambda, out_shift); + pOut++; + *pOut2 = pulp_nn_bn_quant_u8(sum6, *pKappa, *pLambda, out_shift); + pOut2++; + pKappa++; + pLambda++; + + *pOut = pulp_nn_bn_quant_u8(sum3, *pKappa, *pLambda, out_shift); + pOut++; + *pOut2 = pulp_nn_bn_quant_u8(sum7, *pKappa, *pLambda, out_shift); + pOut2++; + pKappa++; + pLambda++; + + *pOut = pulp_nn_bn_quant_u8(sum4, *pKappa, *pLambda, out_shift); + pOut++; + *pOut2 = pulp_nn_bn_quant_u8(sum8, *pKappa, *pLambda, out_shift); + pOut2++; + pKappa++; + pLambda++; + } + else + { + if (flag_relu == 1) + { + *pOut = pulp_nn_quant_u8(sum, out_mult, out_shift); + pOut++; + *pOut = pulp_nn_quant_u8(sum2, out_mult, out_shift); + pOut++; + *pOut = pulp_nn_quant_u8(sum3, out_mult, out_shift); + pOut++; + *pOut = pulp_nn_quant_u8(sum4, out_mult, out_shift); + pOut++; + + *pOut2 = pulp_nn_quant_u8(sum5, out_mult, out_shift); + pOut2++; + *pOut2 = pulp_nn_quant_u8(sum6, out_mult, out_shift); + pOut2++; + *pOut2 = pulp_nn_quant_u8(sum7, out_mult, out_shift); + pOut2++; + *pOut2 = pulp_nn_quant_u8(sum8, out_mult, out_shift); + pOut2++; + + } + else + { + *pOut = (uint8_t) clip8(sum >> out_shift); + pOut++; + *pOut = (uint8_t) clip8(sum2 >> out_shift); + pOut++; + *pOut = (uint8_t) clip8(sum3 >> out_shift); + pOut++; + *pOut = (uint8_t) clip8(sum4 >> out_shift); + pOut++; + + *pOut2 = (uint8_t) clip8(sum5 >> out_shift); + pOut2++; + *pOut2 = (uint8_t) clip8(sum6 >> out_shift); + pOut2++; + *pOut2 = (uint8_t) clip8(sum7 >> out_shift); + pOut2++; + *pOut2 = (uint8_t) clip8(sum8 >> out_shift); + pOut2++; + + } + } + pA+=(3 * num_col_im2col_w); + } + + w_rollback = 4; + W_ROLLBACK(w_rollback); + W_SKIP("0"); + MIXED_SKIP("2"); + + while(chan_left) + { + uint8_t *pB = pIn; + + int8_t *pA = pWeight + (num_col_im2col_w * (ch_out - chan_left)); + + uint32_t *ptrB = (uint32_t *) pB; + + int32_t *ptrA = (int32_t *) pA; + + A_ADDRESS(ptrB); + W_ADDRESS(ptrA); + + ptrA = MacLoadInit(1, 0, 0, 0, ptrA); + + ptrB = MacLoadInit(0, 1, 0, 0, ptrB); + + int sum = 0; + if (pBias != NULL) + { + sum = ((int) (*pBias++)); + } + int sum2 = sum; + + for(int j=0; j < (num_col_im2col >> 4); j++) + { + ptrB = MacLoadInit(0, 1, 0, 1, ptrB); + + sum = MacLoad8(0, 1, 0, 0, ptrB, sum); + ptrB = MacLoadUpdate(ptrB); + + sum2 = MacLoad8(0, 1, 0, 1, ptrB, sum2); + ptrB = MacLoadUpdate(ptrB); + + sum = MacLoad8(0, 1, 0, 0, ptrB, sum); + ptrB = MacLoadUpdate(ptrB); + + sum2 = MacLoad8(1, 0, 0, 1, ptrA, sum2); + ptrA = MacLoadUpdate(ptrA); + } + asm volatile ("csrr %0, 0x101" : "=r" (pA)); + pA-=4; + int col_cnt_im2col = num_col_im2col & 0xf; + + if(col_cnt_im2col) + { + + uint16_t loop_cnt_im2col_a = (num_col_im2col >> 4) << 3; + pB+=loop_cnt_im2col_a; + + uint8_t *pB2 = (pB +loop_cnt_im2col_a); + + int8_t *pA2 = (pA + num_col_im2col_w); + int8_t *pA3 = (pA2 + num_col_im2col_w); + int8_t *pA4 = (pA3 + num_col_im2col_w); + + do + { + int8_t inA = (int8_t) bitext((int) *pA, 2, 0); + + uint8_t inB = (uint8_t)bitextu((unsigned int) *pB, 4, 0); + uint8_t inB2 = (uint8_t)bitextu((unsigned int) *pB2, 4, 0); + + sum += inA * inB; + + sum2 += inA * inB2; + + inA = (int8_t) bitext((int) *pA, 2, 2); + + inB = (uint8_t)bitextu((unsigned int) *pB, 4, 4); + inB2 = (uint8_t)bitextu((unsigned int) *pB2, 4, 4); + + sum += inA * inB; + + sum2 += inA * inB2; + + pB++; + pB2++; + + inA = (int8_t) bitext((int) *pA, 2, 4); + + inB = (uint8_t)bitextu((unsigned int) *pB, 4, 0); + inB2 = (uint8_t)bitextu((unsigned int) *pB2, 4, 0); + + sum += inA * inB; + + sum2 += inA * inB2; + + inA = (int8_t) bitext((int) *pA, 2, 6); + + inB = (uint8_t)bitextu((unsigned int) *pB, 4, 4); + inB2 = (uint8_t)bitextu((unsigned int) *pB2, 4, 4); + + sum += inA * inB; + + sum2 += inA * inB2; + + pA++; + + pB++; + pB2++; + + col_cnt_im2col-=4; + } while(col_cnt_im2col); + } + if (flag_batch_norm && flag_relu) + { + *pOut = pulp_nn_bn_quant_u8(sum, *pKappa, *pLambda, out_shift); + pOut++; + *pOut2 = pulp_nn_bn_quant_u8(sum2, *pKappa, *pLambda, out_shift); + pOut2++; + pKappa++; + pLambda++; + } + else + { + if (flag_relu == 1) + { + *pOut = pulp_nn_quant_u8(sum, out_mult, out_shift); + pOut++; + *pOut2 = pulp_nn_quant_u8(sum2, out_mult, out_shift); + pOut2++; + } + else + { + *pOut = (uint8_t) clip8(sum >> out_shift); + pOut++; + *pOut2 = (uint8_t) clip8(sum2 >> out_shift); + pOut2++; + } + } + chan_left--; + } + pOut+=ch_out_r; + return pOut; +} From 953d7eeb2f0109599ec1fb5bb7d11b085fac0888 Mon Sep 17 00:00:00 2001 From: Georg Rutishauser Date: Thu, 13 Jun 2024 16:13:41 +0200 Subject: [PATCH 47/71] add TNN tests --- rt_nn_tests.yaml | 8 +- .../openocd-zcu102-olimex-arm-usb-ocd-h.cfg | 41 - .../openocd-zcu102-olimex-arm-usb-ocd-h.cfg | 41 - rt_nn_tests/xptnn_conv/Makefile | 21 + rt_nn_tests/xptnn_conv/data_statstest.h | 1707 + rt_nn_tests/xptnn_conv/dory_dma.c | 176 + rt_nn_tests/xptnn_conv/dory_dma.h | 52 + rt_nn_tests/xptnn_conv/mchan.h | 137 + rt_nn_tests/xptnn_conv/pulp_nn_kernels.h | 26528 ++++++++++++++++ rt_nn_tests/xptnn_conv/pulp_nn_mix_kernels.h | 7093 +++++ rt_nn_tests/xptnn_conv/pulp_nn_utils.h | 2029 ++ rt_nn_tests/xptnn_conv/pulp_nn_utils_xpnn.h | 1937 ++ rt_nn_tests/xptnn_conv/test.c | 234 + .../xptnn_conv/xpulp_tnn_conv1d_ternary.h | 35 + .../xpulp_tnn_conv1d_ternary_signed.h | 35 + .../xptnn_conv/xpulp_tnn_conv_ternary.h | 40 + .../xpulp_tnn_conv_ternary_signed.c | 259 + .../xpulp_tnn_conv_ternary_signed.h | 40 + .../xptnn_conv/xpulp_tnn_linear_ternary_i32.h | 12 + .../xpulp_tnn_linear_ternary_i32_signed.h | 12 + .../xptnn_conv/xpulp_tnn_matmul_ternary.h | 113 + .../xptnn_conv/xpulp_tnn_matmul_ternary_4x1.h | 96 + .../xpulp_tnn_matmul_ternary_signed.c | 767 + .../xpulp_tnn_matmul_ternary_signed.h | 113 + .../xpulp_tnn_matmul_ternary_signed_4x1.c | 666 + .../xpulp_tnn_matmul_ternary_signed_4x1.h | 96 + .../xptnn_conv/xpulp_tnn_maxpool_ternary.h | 20 + rt_nn_tests/xptnn_linear/Makefile | 19 + rt_nn_tests/xptnn_linear/data_statstest.h | 2153 ++ rt_nn_tests/xptnn_linear/dory_dma.c | 176 + rt_nn_tests/xptnn_linear/dory_dma.h | 52 + rt_nn_tests/xptnn_linear/hsgs_wave.do | 1384 + rt_nn_tests/xptnn_linear/mchan.h | 137 + rt_nn_tests/xptnn_linear/pulp_nn_kernels.h | 26528 ++++++++++++++++ .../xptnn_linear/pulp_nn_mix_kernels.h | 7093 +++++ rt_nn_tests/xptnn_linear/pulp_nn_utils.h | 2029 ++ rt_nn_tests/xptnn_linear/pulp_nn_utils_xpnn.h | 1937 ++ rt_nn_tests/xptnn_linear/test.c | 182 + .../xptnn_linear/xpulp_tnn_conv1d_ternary.h | 35 + .../xpulp_tnn_conv1d_ternary_signed.h | 35 + .../xptnn_linear/xpulp_tnn_conv_ternary.h | 40 + .../xpulp_tnn_conv_ternary_signed.h | 40 + .../xpulp_tnn_linear_ternary_i32.c | 95 + .../xpulp_tnn_linear_ternary_i32.h | 12 + .../xpulp_tnn_linear_ternary_i32_signed.c | 95 + .../xpulp_tnn_linear_ternary_i32_signed.h | 12 + .../xptnn_linear/xpulp_tnn_matmul_ternary.h | 113 + .../xpulp_tnn_matmul_ternary_4x1.h | 96 + .../xpulp_tnn_matmul_ternary_signed.h | 113 + .../xpulp_tnn_matmul_ternary_signed_4x1.h | 96 + .../xptnn_linear/xpulp_tnn_maxpool_ternary.h | 20 + rt_nn_tests/xptnn_maxpool/Makefile | 19 + rt_nn_tests/xptnn_maxpool/data_statstest.h | 10270 ++++++ rt_nn_tests/xptnn_maxpool/dory_dma.c | 176 + rt_nn_tests/xptnn_maxpool/dory_dma.h | 52 + rt_nn_tests/xptnn_maxpool/mchan.h | 137 + rt_nn_tests/xptnn_maxpool/pulp_nn_kernels.h | 26528 ++++++++++++++++ .../xptnn_maxpool/pulp_nn_mix_kernels.h | 7093 +++++ rt_nn_tests/xptnn_maxpool/pulp_nn_utils.h | 2088 ++ .../xptnn_maxpool/pulp_nn_utils_xpnn.h | 1937 ++ rt_nn_tests/xptnn_maxpool/test.c | 183 + .../xptnn_maxpool/xpulp_tnn_conv1d_ternary.h | 35 + .../xpulp_tnn_conv1d_ternary_signed.h | 35 + .../xptnn_maxpool/xpulp_tnn_conv_ternary.h | 40 + .../xpulp_tnn_conv_ternary_signed.h | 40 + .../xpulp_tnn_linear_ternary_i32.h | 12 + .../xpulp_tnn_linear_ternary_i32_signed.h | 12 + .../xptnn_maxpool/xpulp_tnn_matmul_ternary.h | 113 + .../xpulp_tnn_matmul_ternary_4x1.h | 96 + .../xpulp_tnn_matmul_ternary_signed.h | 113 + .../xpulp_tnn_matmul_ternary_signed_4x1.h | 96 + .../xptnn_maxpool/xpulp_tnn_maxpool_ternary.c | 159 + .../xptnn_maxpool/xpulp_tnn_maxpool_ternary.h | 20 + 73 files changed, 133971 insertions(+), 83 deletions(-) delete mode 100644 rt_nn_tests/xpnn_maxpool_2b/openocd-zcu102-olimex-arm-usb-ocd-h.cfg delete mode 100644 rt_nn_tests/xpnnv2_conv/openocd-zcu102-olimex-arm-usb-ocd-h.cfg create mode 100644 rt_nn_tests/xptnn_conv/Makefile create mode 100644 rt_nn_tests/xptnn_conv/data_statstest.h create mode 100644 rt_nn_tests/xptnn_conv/dory_dma.c create mode 100644 rt_nn_tests/xptnn_conv/dory_dma.h create mode 100644 rt_nn_tests/xptnn_conv/mchan.h create mode 100644 rt_nn_tests/xptnn_conv/pulp_nn_kernels.h create mode 100644 rt_nn_tests/xptnn_conv/pulp_nn_mix_kernels.h create mode 100644 rt_nn_tests/xptnn_conv/pulp_nn_utils.h create mode 100644 rt_nn_tests/xptnn_conv/pulp_nn_utils_xpnn.h create mode 100644 rt_nn_tests/xptnn_conv/test.c create mode 100644 rt_nn_tests/xptnn_conv/xpulp_tnn_conv1d_ternary.h create mode 100644 rt_nn_tests/xptnn_conv/xpulp_tnn_conv1d_ternary_signed.h create mode 100644 rt_nn_tests/xptnn_conv/xpulp_tnn_conv_ternary.h create mode 100644 rt_nn_tests/xptnn_conv/xpulp_tnn_conv_ternary_signed.c create mode 100644 rt_nn_tests/xptnn_conv/xpulp_tnn_conv_ternary_signed.h create mode 100644 rt_nn_tests/xptnn_conv/xpulp_tnn_linear_ternary_i32.h create mode 100644 rt_nn_tests/xptnn_conv/xpulp_tnn_linear_ternary_i32_signed.h create mode 100644 rt_nn_tests/xptnn_conv/xpulp_tnn_matmul_ternary.h create mode 100644 rt_nn_tests/xptnn_conv/xpulp_tnn_matmul_ternary_4x1.h create mode 100644 rt_nn_tests/xptnn_conv/xpulp_tnn_matmul_ternary_signed.c create mode 100644 rt_nn_tests/xptnn_conv/xpulp_tnn_matmul_ternary_signed.h create mode 100644 rt_nn_tests/xptnn_conv/xpulp_tnn_matmul_ternary_signed_4x1.c create mode 100644 rt_nn_tests/xptnn_conv/xpulp_tnn_matmul_ternary_signed_4x1.h create mode 100644 rt_nn_tests/xptnn_conv/xpulp_tnn_maxpool_ternary.h create mode 100644 rt_nn_tests/xptnn_linear/Makefile create mode 100644 rt_nn_tests/xptnn_linear/data_statstest.h create mode 100644 rt_nn_tests/xptnn_linear/dory_dma.c create mode 100644 rt_nn_tests/xptnn_linear/dory_dma.h create mode 100644 rt_nn_tests/xptnn_linear/hsgs_wave.do create mode 100644 rt_nn_tests/xptnn_linear/mchan.h create mode 100644 rt_nn_tests/xptnn_linear/pulp_nn_kernels.h create mode 100644 rt_nn_tests/xptnn_linear/pulp_nn_mix_kernels.h create mode 100644 rt_nn_tests/xptnn_linear/pulp_nn_utils.h create mode 100644 rt_nn_tests/xptnn_linear/pulp_nn_utils_xpnn.h create mode 100644 rt_nn_tests/xptnn_linear/test.c create mode 100644 rt_nn_tests/xptnn_linear/xpulp_tnn_conv1d_ternary.h create mode 100644 rt_nn_tests/xptnn_linear/xpulp_tnn_conv1d_ternary_signed.h create mode 100644 rt_nn_tests/xptnn_linear/xpulp_tnn_conv_ternary.h create mode 100644 rt_nn_tests/xptnn_linear/xpulp_tnn_conv_ternary_signed.h create mode 100644 rt_nn_tests/xptnn_linear/xpulp_tnn_linear_ternary_i32.c create mode 100644 rt_nn_tests/xptnn_linear/xpulp_tnn_linear_ternary_i32.h create mode 100644 rt_nn_tests/xptnn_linear/xpulp_tnn_linear_ternary_i32_signed.c create mode 100644 rt_nn_tests/xptnn_linear/xpulp_tnn_linear_ternary_i32_signed.h create mode 100644 rt_nn_tests/xptnn_linear/xpulp_tnn_matmul_ternary.h create mode 100644 rt_nn_tests/xptnn_linear/xpulp_tnn_matmul_ternary_4x1.h create mode 100644 rt_nn_tests/xptnn_linear/xpulp_tnn_matmul_ternary_signed.h create mode 100644 rt_nn_tests/xptnn_linear/xpulp_tnn_matmul_ternary_signed_4x1.h create mode 100644 rt_nn_tests/xptnn_linear/xpulp_tnn_maxpool_ternary.h create mode 100644 rt_nn_tests/xptnn_maxpool/Makefile create mode 100644 rt_nn_tests/xptnn_maxpool/data_statstest.h create mode 100644 rt_nn_tests/xptnn_maxpool/dory_dma.c create mode 100644 rt_nn_tests/xptnn_maxpool/dory_dma.h create mode 100644 rt_nn_tests/xptnn_maxpool/mchan.h create mode 100644 rt_nn_tests/xptnn_maxpool/pulp_nn_kernels.h create mode 100644 rt_nn_tests/xptnn_maxpool/pulp_nn_mix_kernels.h create mode 100644 rt_nn_tests/xptnn_maxpool/pulp_nn_utils.h create mode 100644 rt_nn_tests/xptnn_maxpool/pulp_nn_utils_xpnn.h create mode 100644 rt_nn_tests/xptnn_maxpool/test.c create mode 100644 rt_nn_tests/xptnn_maxpool/xpulp_tnn_conv1d_ternary.h create mode 100644 rt_nn_tests/xptnn_maxpool/xpulp_tnn_conv1d_ternary_signed.h create mode 100644 rt_nn_tests/xptnn_maxpool/xpulp_tnn_conv_ternary.h create mode 100644 rt_nn_tests/xptnn_maxpool/xpulp_tnn_conv_ternary_signed.h create mode 100644 rt_nn_tests/xptnn_maxpool/xpulp_tnn_linear_ternary_i32.h create mode 100644 rt_nn_tests/xptnn_maxpool/xpulp_tnn_linear_ternary_i32_signed.h create mode 100644 rt_nn_tests/xptnn_maxpool/xpulp_tnn_matmul_ternary.h create mode 100644 rt_nn_tests/xptnn_maxpool/xpulp_tnn_matmul_ternary_4x1.h create mode 100644 rt_nn_tests/xptnn_maxpool/xpulp_tnn_matmul_ternary_signed.h create mode 100644 rt_nn_tests/xptnn_maxpool/xpulp_tnn_matmul_ternary_signed_4x1.h create mode 100644 rt_nn_tests/xptnn_maxpool/xpulp_tnn_maxpool_ternary.c create mode 100644 rt_nn_tests/xptnn_maxpool/xpulp_tnn_maxpool_ternary.h diff --git a/rt_nn_tests.yaml b/rt_nn_tests.yaml index d8bc0e7..96848d6 100644 --- a/rt_nn_tests.yaml +++ b/rt_nn_tests.yaml @@ -6,5 +6,11 @@ parallel_bare_tests: path: ./rt_nn_tests/xpnnv2_conv command: make clean all run xpnn_maxpool_2b: - path: ./xpnn_maxpool_2b/xpnn_maxpool_2b + path: ./rt_nn_tests/xpnn_maxpool_2b + command: make clean all run + xptnn_linear: + path: ./rt_nn_tests/xptnn_linear + command: make clean all run + xptnn_maxpool: + path: ./rt_nn_tests/xptnn_maxpool command: make clean all run diff --git a/rt_nn_tests/xpnn_maxpool_2b/openocd-zcu102-olimex-arm-usb-ocd-h.cfg b/rt_nn_tests/xpnn_maxpool_2b/openocd-zcu102-olimex-arm-usb-ocd-h.cfg deleted file mode 100644 index b924719..0000000 --- a/rt_nn_tests/xpnn_maxpool_2b/openocd-zcu102-olimex-arm-usb-ocd-h.cfg +++ /dev/null @@ -1,41 +0,0 @@ -adapter_khz 1000 - -# Olimex ARM-USB-OCD-H -interface ftdi -ftdi_device_desc "Olimex OpenOCD JTAG ARM-USB-OCD-H" -ftdi_vid_pid 0x15ba 0x002b - -ftdi layout_init 0x0b08 0x0b1b - -ftdi layout_signal nSRST -data 0x0200 -ftdi layout_signal nTRST -data 0x0100 -ftdi layout_signal LED -data 0x0800 -reset_config srst_push_pull srst_only - - -set _CHIPNAME riscv - - - -jtag newtap $_CHIPNAME unknown0 -irlen 5 -expected-id 0x10102001 -jtag newtap $_CHIPNAME cpu -irlen 5 -expected-id 0x249511C3 - -set _TARGETNAME $_CHIPNAME.cpu -target create $_TARGETNAME riscv -chain-position $_TARGETNAME -coreid 0x3e0 - -gdb_report_data_abort enable -gdb_report_register_access_error enable - -riscv set_reset_timeout_sec 120 -riscv set_command_timeout_sec 120 - -# prefer to use sba for system bus access -riscv set_prefer_sba on -# dump jtag chain - -scan_chain - -init -reset -halt -echo "Ready for Remote Connections" diff --git a/rt_nn_tests/xpnnv2_conv/openocd-zcu102-olimex-arm-usb-ocd-h.cfg b/rt_nn_tests/xpnnv2_conv/openocd-zcu102-olimex-arm-usb-ocd-h.cfg deleted file mode 100644 index b924719..0000000 --- a/rt_nn_tests/xpnnv2_conv/openocd-zcu102-olimex-arm-usb-ocd-h.cfg +++ /dev/null @@ -1,41 +0,0 @@ -adapter_khz 1000 - -# Olimex ARM-USB-OCD-H -interface ftdi -ftdi_device_desc "Olimex OpenOCD JTAG ARM-USB-OCD-H" -ftdi_vid_pid 0x15ba 0x002b - -ftdi layout_init 0x0b08 0x0b1b - -ftdi layout_signal nSRST -data 0x0200 -ftdi layout_signal nTRST -data 0x0100 -ftdi layout_signal LED -data 0x0800 -reset_config srst_push_pull srst_only - - -set _CHIPNAME riscv - - - -jtag newtap $_CHIPNAME unknown0 -irlen 5 -expected-id 0x10102001 -jtag newtap $_CHIPNAME cpu -irlen 5 -expected-id 0x249511C3 - -set _TARGETNAME $_CHIPNAME.cpu -target create $_TARGETNAME riscv -chain-position $_TARGETNAME -coreid 0x3e0 - -gdb_report_data_abort enable -gdb_report_register_access_error enable - -riscv set_reset_timeout_sec 120 -riscv set_command_timeout_sec 120 - -# prefer to use sba for system bus access -riscv set_prefer_sba on -# dump jtag chain - -scan_chain - -init -reset -halt -echo "Ready for Remote Connections" diff --git a/rt_nn_tests/xptnn_conv/Makefile b/rt_nn_tests/xptnn_conv/Makefile new file mode 100644 index 0000000..b728623 --- /dev/null +++ b/rt_nn_tests/xptnn_conv/Makefile @@ -0,0 +1,21 @@ +APP = test +PULP_APP = test +PULP_APP_SRCS = test.c +PULP_APP_SRCS += dory_dma.c +PULP_APP_SRCS += xpulp_tnn_conv_ternary_signed.c +PULP_APP_SRCS += xpulp_tnn_matmul_ternary_signed.c +PULP_APP_SRCS += xpulp_tnn_matmul_ternary_signed_4x1.c + +CORE=8 + + +PULP_CFLAGS += -DNUM_CORES=$(CORE) -I. -O3 +PULP_LDFLAGS += -lc -lm -lgcc -Wl,-print-memory-usage + +PULP_APP_CFLAGS += -DNUM_CORES=$(CORE) -I. -O3 +PULP_APP_LDFLAGS += -lc -lm -lgcc -Wl,-print-memory-usage + +PULP_CFLAGS += -DPULP_RUNTIME -DSINGLE_CORE_DMA -DALWAYS_BLOCK_DMA_TRANSFERS + + +include $(PULP_SDK_HOME)/install/rules/pulp.mk diff --git a/rt_nn_tests/xptnn_conv/data_statstest.h b/rt_nn_tests/xptnn_conv/data_statstest.h new file mode 100644 index 0000000..e9baf5e --- /dev/null +++ b/rt_nn_tests/xptnn_conv/data_statstest.h @@ -0,0 +1,1707 @@ +// this file is generated automatically by the python script `generate_statstest.py` + +#ifndef _DATA_H +#define _DATA_H + + + +#define IM2COL_DIM (36 * NUM_CORES * 2) // for NUM_CORES cores +#define OUTPUT_DIM 160 +#define OUTPUT_DIM_FP (1) +uint8_t pWeight_0 [] = { +0x8d, +0x38, +0x18, +0xbf, +0x48, +0xe8, +0x36, +0xbd, +0xa1, +0x6d, +0x4d, +0xed, +0xaf, +0x30, +0x04, +0x02, +0xec, +0x6d, +0x73, +0x1c, +0x33, +0xc9, +0x45, +0x32, +0x45, +0x9c, +0xff, +0xbd, +0x0e, +0x16, +0x29, +0x1d, +0x6a, +0xb2, +0xf5, +0x28, +0xde, +0xc7, +0x71, +0xdf, +0xc9, +0xbc, +0xfa, +0x6b, +0x9c, +0xa2, +0x24, +0x41, +0x9b, +0x17, +0x69, +0x9a, +0xfe, +0xd8, +0xcb, +0xfb, +0xbc, +0x1f, +0xbc, +0xb8, +0x93, +0x60, +0x24, +0xd9, +0xa7, +0x6f, +0xa0, +0xe3, +0x5d, +0x08, +0x0b, +0x09, +0x80, +0xfd, +0xda, +0x5d, +0xbb, +0x12, +0x47, +0x7e, +0xad, +0x44, +0x8b, +0x6c, +0xd7, +0x58, +0xaf, +0xad, +0x9b, +0xb4, +0x6b, +0xe3, +0xaf, +0xfe, +0x4b, +0xd3, +0x08, +0xfd, +0x57, +0x65, +0x33, +0x1e, +0xa7, +0xe0, +0xfa, +0x2e, +0x2e, +0xc7, +0x0d, +0x90, +0x1d, +0xe3, +0x22, +0x1d, +0x80, +0x9c, +0xc7, +0x48, +0x2e, +0xeb, +0x2c, +0x07, +0xe0, +0xfa, +0xef, +0x9c, +0x02, +0xc6, +0x88, +0xe3, +0x44, +0x4d, +0xa3, +0xc0, +0x76, +0xeb, +0xe0, +0x27, +0xb5, +0xe4, +0xeb, +0xd3, +0x12, +0x06, +0xc7, +0xf7, +0x3f, +0x0f, +0x45, +0x57, +0x57, +0x49, +0xd5, +0xe9, +0xc1, +0xc0, +0x4c, +0xdf, +0x3b, +0xc1, +0x65, +0x2d, +0x35, +0x6b, +0x76, +0x40, +0xa5, +0x21, +0xeb, +0xb1, +0xc3, +0x6e, +0x2c, +0xf0, +0x46, +0x7e, +0x58, +0x2a, +0x0f, +0xcc, +0xe1, +0xad, +0xd0, +0x1d, +0x5f, +0x91, +0x10, +0x73, +0xfa, +0x70, +0xe0, +0xac, +0x04, +0x5e, +0x1c, +0x32, +0xb8, +0xea, +0xc2, +0x97, +0xce, +0xab, +0xa3, +0x5f, +0x9b, +0x76, +0x15, +0x47, +0x36, +0x55, +0xb2, +0x81, +0x04, +0xa8, +0x4f, +0x3e, +0x0f, +0x5f, +0xb6, +0x81, +0x35, +0x43, +0xfa, +0xcc, +0x9b, +0x61, +0x6d, +0xd9, +0x6b, +0x04, +0xda, +0x94, +0x56, +0x83, +0x3d, +0x6a, +0xe2, +0xb2, +0x49, +0x0d, +0x48, +0x02, +0xda, +0xa5, +0x42, +0x61, +0xf4, +0x6a, +0xec, +0x7e, +0xf5, +0x7d, +0x40, +0x0d, +0x74, +0x7e, +0x28, +0x01, +0x80, +0x05, +0xa2, +0xc3, +0x40, +0x2a, +0x6d, +0xaa, +0x31, +0xb6, +0xc7, +0x03, +0x49, +0xec, +0x50, +0x09, +0x69, +0x30, +0xa6, +0x18, +0x70, +0x71, +0x2d, +0x5f, +0x8f, +0xb6, +0x60, +0x70, +0x1e, +0x97, +0x4d, +0xef, +0x87, +0x2a, +0x3a, +0x5d, +0xaf, +0x08, +0xc6, +0x76, +0x5b, +0x93, +0x8f, +0x21, +0x3c, +0xa9, +0x49, +0x7d, +0xa5, +0xfe, +0xee, +0xaf, +0xd0, +0x67, +0x54, +0x2f, +0x6b, +0xaf, +0x2e, +0xbc, +0x1b, +0xac, +0xc6, +0xaf, +0xa8, +0xda, +0x49, +0x83, +0xc3, +0xbb, +0x61, +0xc0, +0xe2, +0x4b, +0xeb, +0x73, +0xfd, +0x3e, +0xb4, +0x9d, +0xa8, +0xcc, +0xd7, +0x5d, +0x82, +0x40, +0xde, +0xc4, +0x82, +0x2c, +0x7f, +0xf1, +0x07, +0x1a, +0x9d, +0xc6, +0x9c, +0xd4, +0x49, +0xde, +0xde, +0x74, +0x17, +0xe5, +0xcd, +0x2a, +0x2f, +0xdc, +0xc7, +0x3e, +0x9b, +0xdd, +0xc7, +0x20, +0xfd, +0xab, +0x58, +0x16, +0xfe, +0xc0, +0x46, +0x2a, +0xa3, +0x0a, +0x01, +0x38, +0x15, +0xa0, +0xfc, +0xd4, +0x35, +0x81, +0xb3, +0xfb, +0x2f, +0x40, +0x18, +0x9b, +0xf1, +0x17, +0x23, +0xd8, +0x12, +0x35, +0x85, +0xc1, +0x53, +0xca, +0xd5, +0x1c, +0x3a, +0x92, +0x9f, +0x1b, +0x4c, +0x1d, +0x5a, +0xe9, +0x42, +0x5c, +0x20, +0xe4, +0xdb, +0xdb, +0x8a, +0xed, +0xaa, +0xb2, +0x89, +0x1e, +0x01, +0x3d, +0x8f, +0x16, +0x41, +0xaf, +0x96, +0x2f, +0x3d, +0xbf, +0xfe, +0xc3, +0x2c, +0x4b, +0xd4, +0xad, +0xf6, +0xb1, +0xc5, +0x22, +0x2a, +0xaa, +0x8c, +0x47, +0xa3, +0xf3, +0xe1, +0x3c, +0x35, +0x15, +0x34, +0x17, +0x84, +0x2b, +0x56, +0x0a, +0xfe, +0x18, +0x64, +0xfa, +0xe9, +0xea, +0xde, +0x39, +0xfc, +0x3a, +0x82, +0xdf, +0x0c, +0x3f, +0x17, +0x24, +0x9f, +0x36, +0x82, +0xef, +0x71, +0xbd, +0x2d, +0x5d, +0xe8, +0x6f, +0x78, +0x07, +0x37, +0x5c, +0xb2, +0x31, +0x42, +0x0a, +0x18, +0x62, +0x1d, +0x06, +0x27, +0x9a, +0x09, +0xa1, +0x6b, +0xad, +0xb7, +0x33, +0x07, +0xc0, +0x1a, +0x7d, +0xc1, +0x75, +0xba, +0x5e, +0xdd, +0xe0, +0x3a, +0x49, +0xd1, +0x2d, +0x29, +0x1d, +0xd9, +0xef, +0xe7, +0x69, +0xe9, +0x41, +0x10, +0xb1, +0x1f, +0x95, +0x34, +0xd6, +0xa4, +0x1b, +0x1b, +0x36, +0x24, +0xb3, +0x55, +0xc5, +0x3b, +0x85, +0x7a, +0xc9, +0x30, +0x86, +0x0d, +0x28, +0x15, +0x1c, +0x9f, +0x3e, +0x56, +0x12, +0x68, +0xf0, +0xd6, +0x6d, +0x4b, +0x2b, +0xa5, +0xd5, +0xc0, +0x41, +0x90, +0x01, +0xc4, +0x30, +0x66, +0x8c, +0x47, +0x7f, +0x62, +0xa3, +0xd0, +0x70, +0x63, +0x5f, +0x47, +0x27, +0x85, +0x22, +0xa1, +0xaf, +0x02, +0x51, +0x76, +0x73, +0x07, +0x38, +0xe7, +0x97, +0xcc, +0xa2, +0xba, +0x8c, +0x05, +0x7c, +0xe7, +0xd1, +0xaf, +0xe3, +0x88, +0x00, +0xac, +0xf8, +0x03, +0x6c, +0xc9, +0x80, +0x16, +0x39, +0x48, +0x29, +0x3c, +0xf8, +0xe0, +0x27, +0xed, +0x24, +0x2b, +0x4c, +0x3c, +0x1c, +0x2e, +0x07, +0x63, +0xca, +0x0b, +0x10, +0xc3, +0xcc, +0xbf, +0x49, +0x47, +0x31, +0x5d, +0xd0, +0x11, +0x86, +0xc8, +0x9f, +0xa5, +0x11, +0xe4, +0x02, +0x20, +0x30, +0xf1, +0x83, +0x31, +0x88, +0xf0, +0x07, +0x13, +0x21, +0xb3, +0x4b, +0x0d, +0x01, +0xf0, +0x35, +0x77, +0x92, +0x63, +0xad, +0x1f, +0x9a, +0x68, +0x03, +0xcf, +0xfe, +0x7b, +0x05, +0x29, +0xde, +0x66, +0x39, +0xa3, +0x0b, +0xf1, +0xe2, +0x98, +0xcb, +0x01, +0x30, +0x32, +0x20, +0x57, +0x03, +0xb1, +0x41, +0xb0, +0xee, +0xff, +0xad, +0x7c, +0x4a, +0x60, +0xf3, +0xe1, +0x30, +0xf1, +0xea, +0x41, +0x9f, +0xac, +0x63, +0x58, +0x3a, +0xf1, +0xf0, +0x03, +0xa1, +0x3e, +0x1a, +0x2a, +0x2d, +0x40, +0xa5, +0x29, +0x50, +0xb5, +0xf5, +0xe6, +0xa9, +0x7f, +0x2c, +0xf1, +0x09, +0x44, +0xee, +0xe0, +0x12, +0xbf, +0x6b, +0x5d, +0x38, +0x36, +0x73, +0x7b, +0xad, +0x82, +0x74, +0x04, +0xaf, +0xd1, +0x0a, +0x37, +0xa0, +0x3b, +0x5d, +0x88, +0x08, +0xcd, +0xfe, +0x86, +0x45, +0x31, +0x6a, +0xe8, +0x8b, +0xfa, +0xfa, +0xd8, +0x54, +0x8d, +0x04, +0x36, +0xf0, +0x51, +0x1a, +0xa6, +0xb7, +0x8d, +0xea, +0x54, +0xa8, +0xd7, +0x86, +0xf1, +0x3b, +0x5e, +0x1f, +0xd4, +0x63, +0x15, +0x28, +0xe4, +0x04, +0x25, +0x34, +0x92, +0x0e, +0x2e, +0xe8, +0x88, +0x2a, +0x40, +0x55, +0x25, +0x8f, +0x5c, +0x4a, +0x4c, +0x64, +0x29, +0xe6, +0xa3, +0xc4, +0x44, +0x02, +0xfc, +0xa3, +0xc4, +0x37, +0xfe, +0x77, +0xc1, +0xf3, +0x03, +0x9b, +0xb1, +0x3f, +0xfe, +0x05, +0x89, +0xa9, +0xaa, +0x51, +0xd1, +0x82, +0x20, +0x5e, +0x7e, +0xa6, +0xf8, +0x92, +0x60, +0x60, +0xab, +0x85, +0x24, +0xd6, +0xe5, +0xd0, +0x16, +0x22, +0xcf, +0xc3, +0x25, +0xdc, +0xaa, +0x5a, +0x46, +0x02, +0xc6, +0x71, +0x1e, +0x01, +0xde, +0xf7, +0x56, +0x0d, +0x4b, +0x60, +0x6a, +0xfd, +0x08, +0x6c, +0x36, +0x5b, +0x02, +0xb8, +0xd6, +0x92, +0xf1, +0x4f, +0x2b, +0xd8, +0x6c, +0x26, +0xf1, +0x73, +0xdf, +0x4b, +0xe8, +0x3b, +0x32, +0x73, +0xd7, +0xe1, +0x77, +0x0e, +0x4f, +0x44, +0x26, +0x60, +0x43, +0x08, +0x67, +0x3c, +0x01, +0x2b, +0x97, +0x4a, +0x4e, +0x0d, +0x7a, +0x8d, +0x3a, +0xf5, +0xb8, +0xdb, +0x87, +0xb1, +0xa7, +0xec, +0x49, +0x8d, +0x1a, +0xe9, +0x3b, +0x05, +0x7a, +0x47, +0xff, +0x68, +0x5d, +0x98, +0x1a, +0xd0, +0xec, +0xde, +0x89, +0x23, +0x82, +0xc9, +0x23, +0x26, +0x1f, +0x97, +0xbb, +0x4f, +0xfe, +0xc6, +0xdc, +0x07, +0xe0, +0x6b, +0x3d, +0x0e, +0x1c, +0xc7, +0x2e, +0x4c, +0x01, +0x0b, +0xe2, +0x14, +0x8f, +0x63, +0x2c, +0x03, +0x98, +0xa8, +0x46, +0x29, +0x3f, +0x65, +0x9a, +0xa2, +0xe3, +0x95, +0x91, +0xe4, +0x23, +0x16, +0xfd, +0x5d, +0x9f, +0xde, +0x1c, +0xdc, +0x60, +0x9a, +0xba, +0x1c, +0x6f, +0x07, +0xa6, +0xac, +0x30, +0xe8, +0x6e, +0x71, +0xb0, +0xc3, +0x1a, +0x92, +0xe8, +0x4a, +0x4c, +0x3c, +0x8c, +0x77, +0xcb, +0xf3, +0x4a, +0x14, +0x21, +0x17, +0xbb, +0x73, +0x38, +0x7f, +0xa2, +0x0a, +0xcc, +0xd6, +0xd7, +0x23, +0x07, +0x1e, +0x38, +0xca, +0x32, +0xd4, +0xfb, +0xb6, +0x09, +0x5a, +0x03, +0x77, +0x54, +0xdd, +0xd8, +0x9a, +0xab, +0x8f, +0x51, +0x54, +0xa3, +0x14, +0x18, +0xc0, +0x86, +0xe4, +0xb8, +0x66, +0xc0, +0x6d, +0x8b, +0xa9, +0x40, +0xb3, +0xf7, +0x0e, +0xd3, +0x27, +0xe9, +0x96, +0xa4, +0xeb, +0x0b, +0x7b, +0x0e, +0x74, +0x9d, +0x28, +0xb9, +0x6b, +0xfe, +0xcd, +0x0b, +0x01, +0xf4, +0xad, +0x57, +0x5b, +0xc5, +0xad, +0xc9, +0xba, +0xf7, +0x83, +0x13, +0xa9, +0xf4, +0x85, +0x9a, +0x2a, +0x6a, +0x8c, +0xc4, +0x24, +0xfc, +0x4b, +0x70, +0xca, +0xc7, +0x58, +0xb8, +0x3b, +0xa1, +0xd0, +0x2c, +0xea, +0xe9, +0xe1, +0x50, +0x6a, +0x60, +0x2d, +0xd5, +0xa5, +0xe4, +0xce, +0xcd, +0xb8, +0xf3, +0x42, +0x43, +0xc9, +0x05, +0x97, +0xea, +0xfc, +0x36, +0xba, +0x04, +0x14, +0x86, +0x75, +0x2b, +0xc6, +0x56, +0x3f, +0x88, +0x45, +0xfa, +0x1b, +0xb5, +0x45, +0x8a, +0xa0, +0x0b, +0x50, +0x80, +0x58, +0x1f, +0x9d, +0x54, +0xe6, +0x87, +0x30, +0x6e, +0x0d, +0x1b, +0xe6, +0x91, +0xa5, +0xf7, +0x7a, +0x7e, +0x73, +0x47, +0x23, +0x92, +0xe1, +0x9b, +0xd4, +0xa5, +0x1e, +0x08, +0x17, +0x4c, +0xc0, +0x74, +0xe3, +0x45, +0x8d, +0x25, +0x74, +0x66, +0x8b, +0x76, +0x1a, +0x0a, +0x49, +0x1a, +0xbd, +0x65, +0xc9, +0x49, +0xea, +0x10, +0x5e, +0xe7, +0x5b, +0xf0, +0x53, +0x76, +0x08, +0x5b, +0xcd, +0x42, +0xc4, +0xb5, +0x1d, +0x55, +0x01, +0x46, +0x73, +0xdb, +0x6b, +0xee, +0xc7, +0xd4, +0xdf, +0x61, +0x61, +0xb0, +0x71, +0x84, +0xa6, +0xa8, +0x86, +0xa3, +0x35, +0xd8, +0x09, +0x35, +0x31, +0x4c, +0xa2, +0xb2, +0x0f, +0x1b, +0xd5, +0x88, +0x11, +0x5b, +0x69, +0xe8, +0x5f, +0x1b, +0xe3, +0xa5, +0xa8, +0x82, +0xc2, +0x16, +0xea, +0xc8, +0x33, +0x0e, +0xcc, +0xb7, +0x1a, +0x34, +0x61, +0xdf, +0x57, +0xdb, +0x46, +0xbb, +0xcc, +0x98, +0xa3, +0xda, +0x7e, +0xfe, +0xa7, +0x58, +0x3d, +0x5a, +0xe5, +0x16, +0xd9, +0xc7, +0xfc, +0x0f, +0x46, +0x23, +0x60, +0x04, +0x9c, +0xd5, +0x11, +0x43, +0xc0, +0x6a, +0xf3, +0x35, +0x7a, +0x84, +0xa7, +0x91, +0x1d, +0xd6, +0x91, +0xe3, +0xfb, +0x73, +0x88, +0xcf, +0x9a, +0xd4, +0x5e, +0xad, +0xb3, +0xdd, +0x2b, +0xf1, +0x65, +0x61, +0xe0, +0xfe, +0x00, +0x44, +0x76, +0x0d, +0xd9, +0xfc, +0x03, +0x75, +0x37, +0x81, +0x91, +0x5c, +0x3c, +0xfc, +0x63, +0x90, +0x48, +0xef, +0x14, +0xf8, +0xd7, +0xdf, +0xf4, +0x6c, +0x13, +0x20, +0xd9, +0x3e, +0x2a, +0x40, +0x2c, +0x49, +0x3d, +0x5e, +0xdd, +0xf8, +0x11, +0x84, +0x7c, +0x3d, +0x1a, +0x5e, +0xc5, +0x7d, +0x32, +0xa5, +0xab, +0xd4, +0x69, +0x08, +0x86, +0xa8, +0x74, +0x74, +0x25, +0x68, +0x4b, +0x24, +0x40, +0x4d, +0xcb, +0xf7, +0x05, +0x09, +0xc2, +0x39, +0xa9, +0xdd, +0x00, +0xc8, +0x94, +0x0a, +0x5d, +0x13, +0x8d, +0xa5, +0xaa, +0xff, +0x29, +0x36, +0xfc, +0x58, +0x6d, +0x6a, +0x7e, +0xab, +0xf0, +0x86, +0x6f, +0xc2, +0x45, +0x87, +0xa7, +0xb8, +0xb5, +0x16, +0x9d, +0xea, +0x2a, +0x25, +0xb0, +0x60, +0xe9, +0xb5, +0x06, +0x17, +0x62, +0x64, +0xf7, +0xcb, +0x84, +0x7c, +0xb6, +0xa0, +0x26 +}; + +uint8_t pIn_0 [] = { +0x05, +0xaa, +0xc9, +0x2c, +0x10, +0x4f, +0x05, +0x8a, +0x9b, +0xbf, +0xc9, +0xed, +0x5a, +0x84, +0x4a, +0x85, +0x1d, +0x18, +0xe1, +0x88, +0xa4, +0x4c, +0x33, +0x9c, +0x65, +0xf3, +0x2f, +0x58, +0x0a, +0xf6, +0xa5, +0xcd, +0x5e, +0x01, +0x33, +0xe6, +0x5c, +0xab, +0x9d, +0x09, +0xc4, +0x7d, +0x95, +0x57, +0xeb, +0x3d, +0x01, +0x17, +0x86, +0x8a, +0xbd, +0x1d, +0x97, +0x84, +0x75, +0x46, +0xa7, +0xfe, +0xf6, +0x69, +0xca, +0x41, +0xc2, +0xdc +}; + +uint32_t pThr_0 [] = { +0xff63ff84, +0xff7dff97, +0xffa5ffbf, +0x00350065, +0xff6dff7a, +0xff5fffa1, +0x001f0020, +0x000d0051, +0x003c004d, +0xff6fffa3, +0x007800cf, +0x00240061, +0x0025003e, +0x00150040, +0xffc6fff4, +0x00890099, +0xff51ff92, +0x00620063, +0xffda0023, +0x001e004e, +0x00550089, +0xff5cff9e, +0xffd4fff9, +0x0039003d, +0xff99ffa4, +0x000c0038, +0xffc2fff1, +0x003c005e, +0x0079009a, +0xff8bffc3, +0xffe7001e, +0x00560060, +0xff5eff80, +0x009800ae, +0xff6eff93, +0x00930094, +0x009800ef, +0xffcc0008, +0x000c0031, +0x00430095 +}; + + +/* -----------EXPECTED OUTPUTS----------- */ +uint8_t exp_outp_0 [] = { +0x47, +0x77, +0x7f, +0xd0, +0x4f, +0x6f, +0x53, +0xf4, +0x47, +0x77, +0x7f, +0xd0, +0x4f, +0x6f, +0x53, +0xf4, +0x47, +0x77, +0x7f, +0xd0, +0x4f, +0x6f, +0x53, +0xf4, +0x47, +0x77, +0x7f, +0xd0, +0x4f, +0x6f, +0x53, +0xf4, +0x47, +0x77, +0x7f, +0xd0, +0x4f, +0x6f, +0x53, +0xf4, +0x47, +0x77, +0x7f, +0xd0, +0x4f, +0x6f, +0x53, +0xf4, +0x47, +0x77, +0x7f, +0xd0, +0x4f, +0x6f, +0x53, +0xf4, +0x47, +0x77, +0x7f, +0xd0, +0x4f, +0x6f, +0x53, +0xf4, +0x47, +0x77, +0x7f, +0xd0, +0x4f, +0x6f, +0x53, +0xf4, +0x47, +0x77, +0x7f, +0xd0, +0x4f, +0x6f, +0x53, +0xbc, +0x47, +0x77, +0x7f, +0xd0, +0x4f, +0x6f, +0x53, +0xf4, +0x47, +0x77, +0x7f, +0xd0, +0x4f, +0x6f, +0x53, +0xf4, +0x47, +0x77, +0x7f, +0xd0, +0x4f, +0x6f, +0x53, +0xdf, +0x47, +0x77, +0x7f, +0xd0, +0x4f, +0x63, +0x53, +0xf4, +0x47, +0x77, +0x7f, +0xd0, +0x4f, +0x6f, +0x53, +0xbc, +0x47, +0x77, +0x7f, +0xd0, +0x4f, +0x6f, +0x53, +0xf4 +}; + + + +L1_DATA uint32_t threshs_l1 [40] = {0}; +L1_DATA int32_t kappa_l1 [40] = {0}; +L1_DATA int32_t lambda_l1 [40] = {0}; +L1_DATA uint8_t inp_l1 [64] = {0}; +L1_DATA uint8_t outp_l1 [128] = {0}; +L1_DATA int8_t wt_l1 [1440] = {0}; +L1_DATA uint8_t im2col_l1 [IM2COL_DIM] = {0}; + +#endif diff --git a/rt_nn_tests/xptnn_conv/dory_dma.c b/rt_nn_tests/xptnn_conv/dory_dma.c new file mode 100644 index 0000000..61c9116 --- /dev/null +++ b/rt_nn_tests/xptnn_conv/dory_dma.c @@ -0,0 +1,176 @@ +#include "dory_dma.h" + +#include "pmsis.h" + +#ifndef MCHAN_BASE_ADDR +// FIXME: For GAP9, this must point to ARCHI_MCHAN_EXT_ADDR!!! +// In PULP-SDK for Kraken, this is fixed. +// GAP8 hardware to be tested... +#define MCHAN_BASE_ADDR (ARCHI_MCHAN_DEMUX_ADDR) // CLUSTER_MCHAN_ADDR +#endif +#define MCHAN_EVENT +//#define MCHAN_POLLED +#ifdef MCHAN_EVENT +#define MCHAN_EVENT_BIT (ARCHI_CL_EVT_DMA0) // 8 +#endif +#include "mchan.h" + + +#if defined(MCHAN_POLLED) +#define MCHAN_FLAGS (MCHAN_CMD_FLAG_INCREMENTAL) +#elif defined(MCHAN_EVENT) +#define MCHAN_FLAGS (MCHAN_CMD_FLAG_EVENT_ENABLE | MCHAN_CMD_FLAG_INCREMENTAL) +#elif defined(MCHAN_INTERRUPT) +#define MCHAN_FLAGS (MCHAN_CMD_FLAG_INTERRUPT_ENABLE | MCHAN_CMD_FLAG_INCREMENTAL) +#endif + +#define MCHAN_FLAGS_1D (MCHAN_FLAGS) +#define MCHAN_FLAGS_2D (MCHAN_FLAGS | MCHAN_CMD_FLAG_2D_TRANSFER_EXTERNAL) + +#define MIN(a,b) ((a)<(b)?(a):(b)) + +void dory_dma_memcpy_hwc_to_chw(DMA_copy *copy){ + int start_pixel, stop_pixel; // "pixel" is a misnomer; the CHANNELS are divided between the cores + // this function assumes that a DW tile is always as wide as the complete feature map (this is enforced by DORY's tiler) + // if there is only 1 DMA control unit for the cluster (e.g., Kraken), we can't execute DMA calls on multiple clusters. +#ifndef SINGLE_CORE_DMA + int core_id = pi_core_id(); + int Log2Core = log2(NUM_CORES); + int number_of_copies_per_core = (copy->length_1d_copy >> Log2Core) + ((copy->length_1d_copy & (NUM_CORES-1))!=0); + start_pixel = MIN(number_of_copies_per_core * core_id, copy->length_1d_copy); + stop_pixel = MIN(start_pixel + number_of_copies_per_core, copy->length_1d_copy); +#else + start_pixel = 0; + stop_pixel = copy->length_1d_copy; +#endif + void * loc = copy->loc + copy->number_of_1d_copies*copy->number_of_2d_copies*start_pixel; + void * ext = copy->ext + start_pixel; + const int size_2d = copy->number_of_1d_copies * copy->number_of_2d_copies; + + for (int i=start_pixel; idir << MCHAN_CMD_SHIFT_DIRECTION | MCHAN_FLAGS_2D, + .size = size_2d, + .ext = ext, + .loc = loc, + .ext_size_1d = 1, // one byte at a time... + .ext_stride_1d = copy->stride_1d + }; +#ifdef SINGLE_CORE_DMA + if (pi_core_id() == 0) { +#endif + mchan_transfer_push_2d(trans); +#ifdef SINGLE_CORE_DMA + } +#endif +#ifdef ALWAYS_BLOCK_DMA_TRANSFERS // needed on GAP8 board + dory_dma_barrier(copy); +#endif + ext += 1; // next channel + loc += copy->number_of_1d_copies * copy->number_of_2d_copies; + } +} + +void dory_dma_memcpy_1d_async(DMA_copy *copy) { + if (pi_core_id() == 0) { + mchan_transfer_t trans = { + .cmd = copy->length_1d_copy * copy->number_of_1d_copies * copy->number_of_2d_copies | (copy->dir << MCHAN_CMD_SHIFT_DIRECTION) | MCHAN_FLAGS_1D, + .size = copy->length_1d_copy * copy->number_of_1d_copies * copy->number_of_2d_copies, + .ext = copy->ext, + .loc = copy->loc + }; + mchan_transfer_push_1d(trans); + } +} + +void dory_dma_memcpy_2d_async(DMA_copy *copy) { + if (pi_core_id() == 0) { + const int size_2d = copy->number_of_1d_copies * copy->length_1d_copy * copy->number_of_2d_copies; + const int stride = (copy->number_of_2d_copies == 1) ? copy->stride_1d : copy->stride_2d; + const int size_1d = (copy->number_of_2d_copies == 1) ? copy->length_1d_copy : copy->length_1d_copy * copy->number_of_1d_copies; + + mchan_transfer_t trans = { + .cmd = size_2d | copy->dir << MCHAN_CMD_SHIFT_DIRECTION | MCHAN_FLAGS_2D, + .size = size_2d, + .ext = copy->ext, + .loc = copy->loc, + .ext_size_1d = size_1d, + .ext_stride_1d = stride + }; + mchan_transfer_push_2d(trans); + } +} + +void dory_dma_memcpy_3d_async(DMA_copy *copy) { + int start_pixel, stop_pixel; +#ifndef SINGLE_CORE_DMA + int core_id = pi_core_id(); + int Log2Core = log2(NUM_CORES); + int number_of_2d_copies_per_core = (copy->number_of_2d_copies >> Log2Core) + ((copy->number_of_2d_copies & (NUM_CORES-1))!=0); + start_pixel = MIN(number_of_2d_copies_per_core * core_id, copy->number_of_2d_copies); + stop_pixel = MIN(start_pixel + number_of_2d_copies_per_core, copy->number_of_2d_copies); +#else + start_pixel = 0; + stop_pixel = copy->number_of_2d_copies; +#endif + void *ext = copy->ext + copy->stride_2d*start_pixel; + void *loc = copy->loc + copy->length_1d_copy*copy->number_of_1d_copies*start_pixel; + const int size_2d = copy->number_of_1d_copies * copy->length_1d_copy; + for (int i = start_pixel; i < stop_pixel; i++) { + mchan_transfer_t trans = { + .cmd = size_2d | copy->dir << MCHAN_CMD_SHIFT_DIRECTION | MCHAN_FLAGS_2D, + .size = size_2d, + .ext = ext, + .loc = loc, + .ext_size_1d = copy->length_1d_copy, + .ext_stride_1d = copy->stride_1d + }; +#ifdef SINGLE_CORE_DMA + if (pi_core_id() == 0) { +#endif + mchan_transfer_push_2d(trans); +#ifdef SINGLE_CORE_DMA + } +#endif +#ifdef ALWAYS_BLOCK_DMA_TRANSFERS // needed on GAP8 board + dory_dma_barrier(copy); +#endif + loc += size_2d; + ext += copy->stride_2d; + } +} + +void dory_dma_memcpy_async(DMA_copy *copy) { + if (copy->hwc_to_chw == 1) { + dory_dma_memcpy_hwc_to_chw(copy); + } + else if ((copy->number_of_2d_copies == 1 && copy->number_of_1d_copies == 1) || (copy->stride_1d == copy->length_1d_copy && copy->number_of_1d_copies * copy->length_1d_copy == copy->stride_2d) || (copy->number_of_2d_copies == 1 && copy->length_1d_copy == copy->stride_1d)) { + dory_dma_memcpy_1d_async(copy); + } else if ((copy->number_of_2d_copies == 1) || (copy->length_1d_copy == copy->stride_1d)) {// wrong! + dory_dma_memcpy_2d_async(copy); + } else { + dory_dma_memcpy_3d_async(copy); + } +#ifdef ALWAYS_BLOCK_DMA_TRANSFERS + dory_dma_barrier(copy); +#endif +} + +void dory_dma_free(DMA_copy *copy) { + mchan_transfer_free(copy->tid); +} + +void dory_dma_barrier(DMA_copy *copy) { +#ifdef SINGLE_CORE_DMA + // if DMA is only used by a single core (only 1 ctrl interface), other cores must not access its register file. Instead, they should all wait for core 0 to confirm the transfer is over. + if (pi_core_id() == 0) + mchan_transfer_wait(copy->tid); + pi_cl_team_barrier(0); +#else + mchan_transfer_wait(copy->tid); +#endif +} + +int dory_dma_allocate() { + return mchan_transfer_get_id(); +} diff --git a/rt_nn_tests/xptnn_conv/dory_dma.h b/rt_nn_tests/xptnn_conv/dory_dma.h new file mode 100644 index 0000000..e0b3ef3 --- /dev/null +++ b/rt_nn_tests/xptnn_conv/dory_dma.h @@ -0,0 +1,52 @@ +/* + * dory.h + * Alessio Burrello + * + * Copyright (C) 2019-2020 University of Bologna + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef _DORY_DMA_H +#define _DORY_DMA_H + +typedef struct +{ + void *ext; + void *loc; + unsigned short hwc_to_chw; + unsigned short stride_2d; + unsigned short number_of_2d_copies; + unsigned short stride_1d; + unsigned short number_of_1d_copies; + unsigned short length_1d_copy; + int dir; // 0 l1->l2, 1 l2->l1 + int tid; +} DMA_copy; + +void dory_dma_memcpy_hwc_to_chw(DMA_copy *copy); + +void dory_dma_memcpy_1d_async(DMA_copy *copy); + +void dory_dma_memcpy_2d_async(DMA_copy *copy); + +void dory_dma_memcpy_3d_async(DMA_copy *copy); + +void dory_dma_memcpy_async(DMA_copy *copy); + +void dory_dma_free(DMA_copy *copy); + +void dory_dma_barrier(DMA_copy *copy); + +int dory_dma_allocate(); +#endif diff --git a/rt_nn_tests/xptnn_conv/mchan.h b/rt_nn_tests/xptnn_conv/mchan.h new file mode 100644 index 0000000..95882ab --- /dev/null +++ b/rt_nn_tests/xptnn_conv/mchan.h @@ -0,0 +1,137 @@ +#ifndef _MCHAN_H +#define _MCHAN_H + +// Requires to have MCHAN_BASE_ADDR, MCHAN_EVENT defined outside of header +#ifndef MCHAN_BASE_ADDR +#error "[mchan.h] MCHAN_BASE_ADDR not defined!" +#endif + +#if !defined(MCHAN_EVENT) && !defined(MCHAN_POLLED) +#error "[mchan.h] Nor MCHAN_EVENT nor MCHAN_POLLED defined!" +#endif + +#if defined(MCHAN_EVENT) && !defined(MCHAN_EVENT_BIT) +#error "[mchan.h] MCHAN_EVENT_BIT should be defined when using events as signalization!" +#endif + +#include "pmsis.h" + +#define MCHAN_CMD_OFFSET 0 +#define MCHAN_STATUS_OFFSET 4 + +#define MCHAN_CMD_ADDR (MCHAN_BASE_ADDR + MCHAN_CMD_OFFSET) +#define MCHAN_STATUS_ADDR (MCHAN_BASE_ADDR + MCHAN_STATUS_OFFSET) + +#define READ_REG(addr) (*(volatile int*)(addr)) +#define WRITE_REG(addr, value) do { *(volatile int*)(addr) = (int)value; } while (0) + +#define MCHAN_READ_CMD() READ_REG(MCHAN_CMD_ADDR) +#define MCHAN_WRITE_CMD(value) WRITE_REG(MCHAN_CMD_ADDR, value) + +#define MCHAN_READ_STATUS() READ_REG(MCHAN_STATUS_ADDR) +#define MCHAN_WRITE_STATUS(value) WRITE_REG(MCHAN_STATUS_ADDR, value) + +// MCHAN version 7 has 1 more bit for the transfer length, so all the flag offsets are shifted by 1. Also, LOC (TCDM) striding is not supported in v6. +#if MCHAN_VERSION==7 +#define MCHAN_TRANSFER_LEN_SIZE (17) +#else +#define MCHAN_TRANSFER_LEN_SIZE (16) +#endif + +#define MCHAN_CMD_FLAG_DIRECTION_LOC2EXT (0 << (MCHAN_TRANSFER_LEN_SIZE + 0)) +#define MCHAN_CMD_FLAG_DIRECTION_EXT2LOC (1 << (MCHAN_TRANSFER_LEN_SIZE + 0)) +#define MCHAN_CMD_FLAG_INCREMENTAL (1 << (MCHAN_TRANSFER_LEN_SIZE + 1)) +#define MCHAN_CMD_FLAG_2D_TRANSFER_EXTERNAL (1 << (MCHAN_TRANSFER_LEN_SIZE + 2)) +#define MCHAN_CMD_FLAG_EVENT_ENABLE (1 << (MCHAN_TRANSFER_LEN_SIZE + 3)) +#define MCHAN_CMD_FLAG_INTERRUPT_ENABLE (1 << (MCHAN_TRANSFER_LEN_SIZE + 4)) +#define MCHAN_CMD_FLAG_BROADCAST_FINISH (1 << (MCHAN_TRANSFER_LEN_SIZE + 5)) +#if MCHAN_VERSION==7 +#define MCHAN_CMD_FLAG_2D_TRANSFER_LOCAL (1 << (MCHAN_TRANSFER_LEN_SIZE + 6)) // can only be used with MCHAN v7 +#endif +#define MCHAN_CMD_SHIFT_DIRECTION MCHAN_TRANSFER_LEN_SIZE + + +#define MCHAN_CMD(len, dir, inc, loc_2d, ext_2d, int_en, event_en, broadcast) \ + (len | dir | inc | loc_2d | ext_2d | broadcast | int_en | event_en) + +typedef enum { + MCHAN_DMA_TRANSFER_DIRECTION_EXT2LOC = MCHAN_CMD_FLAG_DIRECTION_EXT2LOC, + MCHAN_DMA_TRANSFER_DIRECTION_LOC2EXT = MCHAN_CMD_FLAG_DIRECTION_LOC2EXT +} mchan_dma_transfer_direction_e; + +typedef struct { + int cmd; + int size; + + void *loc; + int loc_size_1d; + int loc_stride_1d; + + void *ext; + int ext_size_1d; + int ext_stride_1d; +} mchan_transfer_t; + +static int mchan_transfer_get_id() { + return MCHAN_READ_CMD(); +} + +static void mchan_transfer_push_1d(mchan_transfer_t trans) +{ + MCHAN_WRITE_CMD(trans.cmd); + MCHAN_WRITE_CMD(trans.loc); + MCHAN_WRITE_CMD(trans.ext); +} + +static void mchan_transfer_push_2d(mchan_transfer_t trans) +{ + MCHAN_WRITE_CMD(trans.cmd); + MCHAN_WRITE_CMD(trans.loc); + MCHAN_WRITE_CMD(trans.ext); +// MCHAN version 7 takes 2D "count" (length of 1D transfers) and stride in 2 steps, +// v7 takes it in 1 step with the stride shifted to the upper 16 bits. +#if MCHAN_VERSION==7 + MCHAN_WRITE_CMD(trans.ext_size_1d); + MCHAN_WRITE_CMD(trans.ext_stride_1d); +#else + MCHAN_WRITE_CMD(trans.ext_size_1d | (trans.ext_stride_1d << 16)); +#endif +} + +static void mchan_transfer_push(mchan_transfer_t trans) +{ + MCHAN_WRITE_CMD(trans.cmd); + MCHAN_WRITE_CMD(trans.loc); + MCHAN_WRITE_CMD(trans.ext); + + if (trans.ext_size_1d < trans.size) { + MCHAN_WRITE_CMD(trans.ext_size_1d); + MCHAN_WRITE_CMD(trans.ext_stride_1d); + } + + if (trans.loc_size_1d < trans.size) { + MCHAN_WRITE_CMD(trans.loc_size_1d); + MCHAN_WRITE_CMD(trans.loc_stride_1d); + } +} + +static void mchan_transfer_free(int tid) +{ + MCHAN_WRITE_STATUS(1 << tid); +} + +static int mchan_transfer_busy(int tid) +{ + return MCHAN_READ_STATUS() & (1 << tid); +} + +static void mchan_transfer_wait(int tid) +{ + #if defined(MCHAN_EVENT) + while(mchan_transfer_busy(tid)) eu_evt_maskWaitAndClr(1 << MCHAN_EVENT_BIT); + #elif defined(MCHAN_POLLED) + while(mchan_transfer_busy(tid)) ; + #endif +} + +#endif diff --git a/rt_nn_tests/xptnn_conv/pulp_nn_kernels.h b/rt_nn_tests/xptnn_conv/pulp_nn_kernels.h new file mode 100644 index 0000000..f4ec977 --- /dev/null +++ b/rt_nn_tests/xptnn_conv/pulp_nn_kernels.h @@ -0,0 +1,26528 @@ +/* + * pulp_nn_kernels.h + * Nazareno Bruschi + * + * Copyright (C) 2019-2020 University of Bologna + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef __XPULPNN_KERNELS__ +#define __XPULPNN_KERNELS__ + +void xpulp_nn_conv_u8_u8_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u8_u8_i8_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u8_i8_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u8_i8_i8_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i8_u8_i8( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i8_u8_i8_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i8_i8_i8( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i8_i8_i8_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u8_u8_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u8_u8_i4_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u8_i8_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u8_i8_i4_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i8_u8_i4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i8_u8_i4_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i8_i8_i4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i8_i8_i4_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u8_u8_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u8_u8_i2_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u8_i8_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u8_i8_i2_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i8_u8_i2( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i8_u8_i2_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i8_i8_i2( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i8_i8_i2_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u8_u4_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u8_u4_i8_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u8_i4_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u8_i4_i8_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i8_u4_i8( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i8_u4_i8_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i8_i4_i8( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i8_i4_i8_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u8_u4_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u8_u4_i4_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u8_i4_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u8_i4_i4_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i8_u4_i4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i8_u4_i4_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i8_i4_i4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i8_i4_i4_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u8_u4_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u8_u4_i2_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u8_i4_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u8_i4_i2_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i8_u4_i2( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i8_u4_i2_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i8_i4_i2( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i8_i4_i2_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u8_u2_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u8_u2_i8_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u8_i2_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u8_i2_i8_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i8_u2_i8( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i8_u2_i8_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i8_i2_i8( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i8_i2_i8_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u8_u2_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u8_u2_i4_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u8_i2_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u8_i2_i4_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i8_u2_i4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i8_u2_i4_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i8_i2_i4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i8_i2_i4_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u8_u2_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u8_u2_i2_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u8_i2_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u8_i2_i2_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i8_u2_i2( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i8_u2_i2_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i8_i2_i2( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i8_i2_i2_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u4_u8_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u4_u8_i8_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u4_i8_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u4_i8_i8_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i4_u8_i8( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i4_u8_i8_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i4_i8_i8( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i4_i8_i8_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u4_u8_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u4_u8_i4_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u4_i8_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u4_i8_i4_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i4_u8_i4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i4_u8_i4_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i4_i8_i4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i4_i8_i4_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u4_u8_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u4_u8_i2_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u4_i8_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u4_i8_i2_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i4_u8_i2( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i4_u8_i2_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i4_i8_i2( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i4_i8_i2_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u4_u4_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u4_u4_i8_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u4_i4_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u4_i4_i8_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i4_u4_i8( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i4_u4_i8_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i4_i4_i8( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i4_i4_i8_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u4_u4_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u4_u4_i4_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u4_i4_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u4_i4_i4_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i4_u4_i4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i4_u4_i4_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i4_i4_i4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i4_i4_i4_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u4_u4_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u4_u4_i2_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u4_i4_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u4_i4_i2_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i4_u4_i2( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i4_u4_i2_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i4_i4_i2( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i4_i4_i2_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u4_u2_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u4_u2_i8_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u4_i2_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u4_i2_i8_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i4_u2_i8( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i4_u2_i8_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i4_i2_i8( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i4_i2_i8_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u4_u2_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u4_u2_i4_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u4_i2_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u4_i2_i4_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i4_u2_i4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i4_u2_i4_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i4_i2_i4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i4_i2_i4_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u4_u2_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u4_u2_i2_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u4_i2_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u4_i2_i2_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i4_u2_i2( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i4_u2_i2_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i4_i2_i2( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i4_i2_i2_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u2_u8_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u2_u8_i8_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u2_i8_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u2_i8_i8_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i2_u8_i8( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i2_u8_i8_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i2_i8_i8( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i2_i8_i8_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u2_u8_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u2_u8_i4_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u2_i8_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u2_i8_i4_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i2_u8_i4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i2_u8_i4_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i2_i8_i4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i2_i8_i4_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u2_u8_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u2_u8_i2_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u2_i8_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u2_i8_i2_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i2_u8_i2( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i2_u8_i2_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i2_i8_i2( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i2_i8_i2_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u2_u4_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u2_u4_i8_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u2_i4_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u2_i4_i8_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i2_u4_i8( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i2_u4_i8_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i2_i4_i8( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i2_i4_i8_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u2_u4_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u2_u4_i4_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u2_i4_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u2_i4_i4_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i2_u4_i4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i2_u4_i4_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i2_i4_i4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i2_i4_i4_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u2_u4_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u2_u4_i2_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u2_i4_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u2_i4_i2_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i2_u4_i2( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i2_u4_i2_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i2_i4_i2( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i2_i4_i2_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u2_u2_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u2_u2_i8_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u2_i2_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u2_i2_i8_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i2_u2_i8( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i2_u2_i8_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i2_i2_i8( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i2_i2_i8_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u2_u2_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u2_u2_i4_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u2_i2_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u2_i2_i4_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i2_u2_i4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i2_u2_i4_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i2_i2_i4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i2_i2_i4_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u2_u2_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u2_u2_i2_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u2_i2_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u2_i2_i2_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i2_u2_i2( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i2_u2_i2_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i2_i2_i2( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, +#ifndef PROFILE + uint8_t flag_batch_norm); +#else + uint8_t flag_batch_norm, + uint32_t *im2col_cycles, + uint32_t *hotloop_prep_cycles, + uint32_t *hotloop_cycles, + uint32_t *requant_cycles, + uint32_t *hotloop_leftover_cycles, + uint32_t *matmul4x2_leftover_cycles); +#endif + + +void xpulp_nn_conv_i2_i2_i2_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u8_u8_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u8_u8_i8_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u8_i8_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u8_i8_i8_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i8_u8_i8( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i8_u8_i8_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i8_i8_i8( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i8_i8_i8_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u8_u8_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u8_u8_i4_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u8_i8_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u8_i8_i4_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i8_u8_i4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i8_u8_i4_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i8_i8_i4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i8_i8_i4_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u8_u8_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u8_u8_i2_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u8_i8_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u8_i8_i2_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i8_u8_i2( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i8_u8_i2_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i8_i8_i2( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i8_i8_i2_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u8_u4_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u8_u4_i8_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u8_i4_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u8_i4_i8_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i8_u4_i8( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i8_u4_i8_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i8_i4_i8( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i8_i4_i8_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u8_u4_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u8_u4_i4_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u8_i4_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u8_i4_i4_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i8_u4_i4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i8_u4_i4_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i8_i4_i4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i8_i4_i4_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u8_u4_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u8_u4_i2_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u8_i4_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u8_i4_i2_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i8_u4_i2( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i8_u4_i2_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i8_i4_i2( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i8_i4_i2_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u8_u2_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u8_u2_i8_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u8_i2_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u8_i2_i8_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i8_u2_i8( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i8_u2_i8_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i8_i2_i8( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i8_i2_i8_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u8_u2_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u8_u2_i4_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u8_i2_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u8_i2_i4_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i8_u2_i4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i8_u2_i4_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i8_i2_i4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i8_i2_i4_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u8_u2_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u8_u2_i2_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u8_i2_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u8_i2_i2_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i8_u2_i2( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i8_u2_i2_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i8_i2_i2( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i8_i2_i2_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u4_u8_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u4_u8_i8_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u4_i8_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u4_i8_i8_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i4_u8_i8( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i4_u8_i8_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i4_i8_i8( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i4_i8_i8_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u4_u8_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u4_u8_i4_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u4_i8_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u4_i8_i4_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i4_u8_i4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i4_u8_i4_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i4_i8_i4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i4_i8_i4_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u4_u8_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u4_u8_i2_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u4_i8_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u4_i8_i2_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i4_u8_i2( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i4_u8_i2_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i4_i8_i2( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i4_i8_i2_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u4_u4_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u4_u4_i8_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u4_i4_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u4_i4_i8_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i4_u4_i8( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i4_u4_i8_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i4_i4_i8( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i4_i4_i8_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u4_u4_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u4_u4_i4_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u4_i4_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u4_i4_i4_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i4_u4_i4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i4_u4_i4_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i4_i4_i4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i4_i4_i4_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u4_u4_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u4_u4_i2_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u4_i4_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u4_i4_i2_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i4_u4_i2( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i4_u4_i2_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i4_i4_i2( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i4_i4_i2_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u4_u2_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u4_u2_i8_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u4_i2_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u4_i2_i8_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i4_u2_i8( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i4_u2_i8_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i4_i2_i8( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i4_i2_i8_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u4_u2_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u4_u2_i4_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u4_i2_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u4_i2_i4_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i4_u2_i4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i4_u2_i4_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i4_i2_i4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i4_i2_i4_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u4_u2_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u4_u2_i2_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u4_i2_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u4_i2_i2_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i4_u2_i2( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i4_u2_i2_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i4_i2_i2( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i4_i2_i2_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u2_u8_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u2_u8_i8_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u2_i8_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u2_i8_i8_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i2_u8_i8( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i2_u8_i8_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i2_i8_i8( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i2_i8_i8_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u2_u8_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u2_u8_i4_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u2_i8_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u2_i8_i4_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i2_u8_i4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i2_u8_i4_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i2_i8_i4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i2_i8_i4_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u2_u8_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u2_u8_i2_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u2_i8_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u2_i8_i2_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i2_u8_i2( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i2_u8_i2_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i2_i8_i2( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i2_i8_i2_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u2_u4_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u2_u4_i8_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u2_i4_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u2_i4_i8_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i2_u4_i8( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i2_u4_i8_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i2_i4_i8( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i2_i4_i8_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u2_u4_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u2_u4_i4_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u2_i4_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u2_i4_i4_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i2_u4_i4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i2_u4_i4_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i2_i4_i4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i2_i4_i4_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u2_u4_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u2_u4_i2_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u2_i4_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u2_i4_i2_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i2_u4_i2( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i2_u4_i2_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i2_i4_i2( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i2_i4_i2_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u2_u2_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u2_u2_i8_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u2_i2_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u2_i2_i8_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i2_u2_i8( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i2_u2_i8_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i2_i2_i8( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i2_i2_i8_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u2_u2_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u2_u2_i4_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u2_i2_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u2_i2_i4_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i2_u2_i4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i2_u2_i4_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i2_i2_i4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i2_i2_i4_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u2_u2_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u2_u2_i2_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u2_i2_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u2_i2_i2_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i2_u2_i2( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i2_u2_i2_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i2_i2_i2( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i2_i2_i2_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_u8_u8_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_u8_i8_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_i8_u8_i8( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_i8_i8_i8( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_u8_u8_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_u8_i8_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_i8_u8_i4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_i8_i8_i4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_u8_u8_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_u8_i8_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_i8_u8_i2( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_i8_i8_i2( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_u8_u4_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_u8_i4_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_i8_u4_i8( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_i8_i4_i8( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_u8_u4_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_u8_i4_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_i8_u4_i4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_i8_i4_i4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_u8_u4_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_u8_i4_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_i8_u4_i2( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_i8_i4_i2( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_u8_u2_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_u8_i2_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_i8_u2_i8( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_i8_i2_i8( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_u8_u2_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_u8_i2_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_i8_u2_i4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_i8_i2_i4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_u8_u2_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_u8_i2_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_i8_u2_i2( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_i8_i2_i2( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_u4_u8_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_u4_i8_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_i4_u8_i8( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_i4_i8_i8( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_u4_u8_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_u4_i8_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_i4_u8_i4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_i4_i8_i4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_u4_u8_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_u4_i8_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_i4_u8_i2( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_i4_i8_i2( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_u4_u4_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_u4_i4_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_i4_u4_i8( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_i4_i4_i8( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_u4_u4_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_u4_i4_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_i4_u4_i4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_i4_i4_i4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_u4_u4_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_u4_i4_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_i4_u4_i2( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_i4_i4_i2( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_u4_u2_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_u4_i2_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_i4_u2_i8( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_i4_i2_i8( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_u4_u2_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_u4_i2_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_i4_u2_i4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_i4_i2_i4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_u4_u2_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_u4_i2_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_i4_u2_i2( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_i4_i2_i2( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_u2_u8_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_u2_i8_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_i2_u8_i8( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_i2_i8_i8( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_u2_u8_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_u2_i8_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_i2_u8_i4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_i2_i8_i4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_u2_u8_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_u2_i8_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_i2_u8_i2( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_i2_i8_i2( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_u2_u4_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_u2_i4_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_i2_u4_i8( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_i2_i4_i8( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_u2_u4_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_u2_i4_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_i2_u4_i4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_i2_i4_i4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_u2_u4_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_u2_i4_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_i2_u4_i2( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_i2_i4_i2( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_u2_u2_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_u2_i2_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_i2_u2_i8( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_i2_i2_i8( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_u2_u2_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_u2_i2_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_i2_u2_i4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_i2_i2_i4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_u2_u2_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_u2_i2_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_i2_u2_i2( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_i2_i2_i2( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u8_u8_i8( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u8_i8_i8( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i8_u8_i8( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i8_i8_i8( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u8_u8_i8_4x4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u8_i8_i8_4x4( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pOut3, + int8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i8_u8_i8_4x4( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i8_i8_i8_4x4( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pOut3, + int8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u8_u8_i4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u8_i8_i4( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i8_u8_i4( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i8_i8_i4( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u8_u8_i4_4x4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u8_i8_i4_4x4( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pOut3, + int8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i8_u8_i4_4x4( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i8_i8_i4_4x4( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pOut3, + int8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u8_u8_i2( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u8_i8_i2( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i8_u8_i2( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i8_i8_i2( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u8_u8_i2_4x4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u8_i8_i2_4x4( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pOut3, + int8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i8_u8_i2_4x4( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i8_i8_i2_4x4( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pOut3, + int8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u8_u4_i8( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u8_i4_i8( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i8_u4_i8( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i8_i4_i8( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u8_u4_i8_4x4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u8_i4_i8_4x4( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pOut3, + int8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i8_u4_i8_4x4( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i8_i4_i8_4x4( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pOut3, + int8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u8_u4_i4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u8_i4_i4( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i8_u4_i4( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i8_i4_i4( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u8_u4_i4_4x4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u8_i4_i4_4x4( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pOut3, + int8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i8_u4_i4_4x4( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i8_i4_i4_4x4( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pOut3, + int8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u8_u4_i2( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u8_i4_i2( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i8_u4_i2( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i8_i4_i2( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u8_u4_i2_4x4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u8_i4_i2_4x4( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pOut3, + int8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i8_u4_i2_4x4( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i8_i4_i2_4x4( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pOut3, + int8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u8_u2_i8( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u8_i2_i8( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i8_u2_i8( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i8_i2_i8( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u8_u2_i8_4x4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u8_i2_i8_4x4( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pOut3, + int8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i8_u2_i8_4x4( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i8_i2_i8_4x4( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pOut3, + int8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u8_u2_i4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u8_i2_i4( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i8_u2_i4( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i8_i2_i4( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u8_u2_i4_4x4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u8_i2_i4_4x4( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pOut3, + int8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i8_u2_i4_4x4( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i8_i2_i4_4x4( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pOut3, + int8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u8_u2_i2( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u8_i2_i2( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i8_u2_i2( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i8_i2_i2( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u8_u2_i2_4x4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u8_i2_i2_4x4( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pOut3, + int8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i8_u2_i2_4x4( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i8_i2_i2_4x4( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pOut3, + int8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u4_u8_i8( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u4_i8_i8( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i4_u8_i8( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i4_i8_i8( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u4_u8_i8_4x4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u4_i8_i8_4x4( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pOut3, + int8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i4_u8_i8_4x4( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i4_i8_i8_4x4( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pOut3, + int8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u4_u8_i4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u4_i8_i4( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i4_u8_i4( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i4_i8_i4( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u4_u8_i4_4x4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u4_i8_i4_4x4( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pOut3, + int8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i4_u8_i4_4x4( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i4_i8_i4_4x4( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pOut3, + int8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u4_u8_i2( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u4_i8_i2( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i4_u8_i2( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i4_i8_i2( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u4_u8_i2_4x4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u4_i8_i2_4x4( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pOut3, + int8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i4_u8_i2_4x4( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i4_i8_i2_4x4( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pOut3, + int8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u4_u4_i8( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u4_i4_i8( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i4_u4_i8( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i4_i4_i8( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u4_u4_i8_4x4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u4_i4_i8_4x4( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pOut3, + int8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i4_u4_i8_4x4( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i4_i4_i8_4x4( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pOut3, + int8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u4_u4_i4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u4_i4_i4( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i4_u4_i4( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i4_i4_i4( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u4_u4_i4_4x4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u4_i4_i4_4x4( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pOut3, + int8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i4_u4_i4_4x4( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i4_i4_i4_4x4( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pOut3, + int8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u4_u4_i2( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u4_i4_i2( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i4_u4_i2( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i4_i4_i2( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u4_u4_i2_4x4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u4_i4_i2_4x4( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pOut3, + int8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i4_u4_i2_4x4( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i4_i4_i2_4x4( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pOut3, + int8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u4_u2_i8( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u4_i2_i8( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i4_u2_i8( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i4_i2_i8( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u4_u2_i8_4x4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u4_i2_i8_4x4( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pOut3, + int8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i4_u2_i8_4x4( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i4_i2_i8_4x4( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pOut3, + int8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u4_u2_i4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u4_i2_i4( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i4_u2_i4( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i4_i2_i4( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u4_u2_i4_4x4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u4_i2_i4_4x4( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pOut3, + int8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i4_u2_i4_4x4( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i4_i2_i4_4x4( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pOut3, + int8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u4_u2_i2( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u4_i2_i2( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i4_u2_i2( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i4_i2_i2( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u4_u2_i2_4x4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u4_i2_i2_4x4( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pOut3, + int8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i4_u2_i2_4x4( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i4_i2_i2_4x4( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pOut3, + int8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u2_u8_i8( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u2_i8_i8( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i2_u8_i8( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i2_i8_i8( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u2_u8_i8_4x4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u2_i8_i8_4x4( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pOut3, + int8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i2_u8_i8_4x4( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i2_i8_i8_4x4( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pOut3, + int8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u2_u8_i4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u2_i8_i4( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i2_u8_i4( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i2_i8_i4( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u2_u8_i4_4x4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u2_i8_i4_4x4( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pOut3, + int8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i2_u8_i4_4x4( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i2_i8_i4_4x4( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pOut3, + int8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u2_u8_i2( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u2_i8_i2( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i2_u8_i2( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i2_i8_i2( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u2_u8_i2_4x4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u2_i8_i2_4x4( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pOut3, + int8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i2_u8_i2_4x4( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i2_i8_i2_4x4( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pOut3, + int8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u2_u4_i8( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u2_i4_i8( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i2_u4_i8( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i2_i4_i8( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u2_u4_i8_4x4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u2_i4_i8_4x4( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pOut3, + int8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i2_u4_i8_4x4( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i2_i4_i8_4x4( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pOut3, + int8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u2_u4_i4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u2_i4_i4( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i2_u4_i4( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i2_i4_i4( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u2_u4_i4_4x4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u2_i4_i4_4x4( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pOut3, + int8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i2_u4_i4_4x4( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i2_i4_i4_4x4( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pOut3, + int8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u2_u4_i2( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u2_i4_i2( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i2_u4_i2( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i2_i4_i2( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u2_u4_i2_4x4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u2_i4_i2_4x4( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pOut3, + int8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i2_u4_i2_4x4( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i2_i4_i2_4x4( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pOut3, + int8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u2_u2_i8( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u2_i2_i8( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i2_u2_i8( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i2_i2_i8( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u2_u2_i8_4x4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u2_i2_i8_4x4( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pOut3, + int8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i2_u2_i8_4x4( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i2_i2_i8_4x4( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pOut3, + int8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u2_u2_i4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u2_i2_i4( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i2_u2_i4( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i2_i2_i4( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u2_u2_i4_4x4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u2_i2_i4_4x4( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pOut3, + int8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i2_u2_i4_4x4( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i2_i2_i4_4x4( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pOut3, + int8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u2_u2_i2( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u2_i2_i2( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i2_u2_i2( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i2_i2_i2( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, +#ifndef PROFILE + uint8_t flag_batch_norm); +#else + uint8_t flag_batch_norm, + uint32_t *hotloop_prep_cycles, + uint32_t *hotloop_cycles, + uint32_t *requant_cycles, + uint32_t *hotloop_leftover_cycles); +#endif + +uint8_t *xpulp_nn_matmul_u2_u2_i2_4x4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u2_i2_i2_4x4( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pOut3, + int8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i2_u2_i2_4x4( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i2_i2_i2_4x4( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pOut3, + int8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_u8_u8_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_u8_i8_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_i8_u8_i8( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_i8_i8_i8( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_u8_u8_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_u8_i8_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_i8_u8_i4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_i8_i8_i4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_u8_u8_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_u8_i8_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_i8_u8_i2( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_i8_i8_i2( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_u8_u4_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_u8_i4_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_i8_u4_i8( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_i8_i4_i8( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_u8_u4_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_u8_i4_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_i8_u4_i4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_i8_i4_i4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_u8_u4_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_u8_i4_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_i8_u4_i2( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_i8_i4_i2( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_u8_u2_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_u8_i2_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_i8_u2_i8( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_i8_i2_i8( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_u8_u2_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_u8_i2_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_i8_u2_i4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_i8_i2_i4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_u8_u2_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_u8_i2_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_i8_u2_i2( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_i8_i2_i2( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_u4_u8_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_u4_i8_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_i4_u8_i8( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_i4_i8_i8( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_u4_u8_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_u4_i8_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_i4_u8_i4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_i4_i8_i4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_u4_u8_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_u4_i8_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_i4_u8_i2( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_i4_i8_i2( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_u4_u4_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_u4_i4_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_i4_u4_i8( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_i4_i4_i8( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_u4_u4_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_u4_i4_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_i4_u4_i4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_i4_i4_i4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_u4_u4_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_u4_i4_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_i4_u4_i2( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_i4_i4_i2( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_u4_u2_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_u4_i2_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_i4_u2_i8( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_i4_i2_i8( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_u4_u2_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_u4_i2_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_i4_u2_i4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_i4_i2_i4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_u4_u2_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_u4_i2_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_i4_u2_i2( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_i4_i2_i2( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_u2_u8_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_u2_i8_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_i2_u8_i8( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_i2_i8_i8( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_u2_u8_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_u2_i8_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_i2_u8_i4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_i2_i8_i4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_u2_u8_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_u2_i8_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_i2_u8_i2( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_i2_i8_i2( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_u2_u4_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_u2_i4_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_i2_u4_i8( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_i2_i4_i8( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_u2_u4_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_u2_i4_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_i2_u4_i4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_i2_i4_i4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_u2_u4_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_u2_i4_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_i2_u4_i2( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_i2_i4_i2( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_u2_u2_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_u2_i2_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_i2_u2_i8( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_i2_i2_i8( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_u2_u2_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_u2_i2_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_i2_u2_i4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_i2_i2_i4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_u2_u2_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_u2_i2_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_i2_u2_i2( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_i2_i2_i2( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_u8_i32_i8( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + uint16_t dim_vec, + uint16_t num_o_neurons); + +void xpulp_nn_linear_i8_i32_i8( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + uint16_t dim_vec, + uint16_t num_o_neurons); + +void xpulp_nn_linear_u8_i32_i4( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + uint16_t dim_vec, + uint16_t num_o_neurons); + +void xpulp_nn_linear_i8_i32_i4( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + uint16_t dim_vec, + uint16_t num_o_neurons); + +void xpulp_nn_linear_u8_i32_i2( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + uint16_t dim_vec, + uint16_t num_o_neurons); + +void xpulp_nn_linear_i8_i32_i2( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + uint16_t dim_vec, + uint16_t num_o_neurons); + +void xpulp_nn_linear_u4_i32_i8( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + uint16_t dim_vec, + uint16_t num_o_neurons); + +void xpulp_nn_linear_i4_i32_i8( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + uint16_t dim_vec, + uint16_t num_o_neurons); + +void xpulp_nn_linear_u4_i32_i4( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + uint16_t dim_vec, + uint16_t num_o_neurons); + +void xpulp_nn_linear_i4_i32_i4( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + uint16_t dim_vec, + uint16_t num_o_neurons); + +void xpulp_nn_linear_u4_i32_i2( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + uint16_t dim_vec, + uint16_t num_o_neurons); + +void xpulp_nn_linear_i4_i32_i2( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + uint16_t dim_vec, + uint16_t num_o_neurons); + +void xpulp_nn_linear_u2_i32_i8( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + uint16_t dim_vec, + uint16_t num_o_neurons); + +void xpulp_nn_linear_i2_i32_i8( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + uint16_t dim_vec, + uint16_t num_o_neurons); + +void xpulp_nn_linear_u2_i32_i4( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + uint16_t dim_vec, + uint16_t num_o_neurons); + +void xpulp_nn_linear_i2_i32_i4( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + uint16_t dim_vec, + uint16_t num_o_neurons); + +void xpulp_nn_linear_u2_i32_i2( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + uint16_t dim_vec, + uint16_t num_o_neurons); + +void xpulp_nn_linear_i2_i32_i2( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + uint16_t dim_vec, + uint16_t num_o_neurons); + +void xpulp_nn_linear_u8_u8_i8( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_u8_i8_i8( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_i8_u8_i8( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_i8_i8_i8( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_u8_u8_i4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_u8_i8_i4( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_i8_u8_i4( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_i8_i8_i4( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_u8_u8_i2( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_u8_i8_i2( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_i8_u8_i2( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_i8_i8_i2( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_u8_u4_i8( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_u8_i4_i8( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_i8_u4_i8( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_i8_i4_i8( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_u8_u4_i4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_u8_i4_i4( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_i8_u4_i4( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_i8_i4_i4( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_u8_u4_i2( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_u8_i4_i2( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_i8_u4_i2( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_i8_i4_i2( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_u8_u2_i8( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_u8_i2_i8( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_i8_u2_i8( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_i8_i2_i8( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_u8_u2_i4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_u8_i2_i4( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_i8_u2_i4( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_i8_i2_i4( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_u8_u2_i2( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_u8_i2_i2( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_i8_u2_i2( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_i8_i2_i2( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_u4_u8_i8( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_u4_i8_i8( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_i4_u8_i8( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_i4_i8_i8( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_u4_u8_i4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_u4_i8_i4( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_i4_u8_i4( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_i4_i8_i4( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_u4_u8_i2( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_u4_i8_i2( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_i4_u8_i2( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_i4_i8_i2( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_u4_u4_i8( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_u4_i4_i8( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_i4_u4_i8( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_i4_i4_i8( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_u4_u4_i4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_u4_i4_i4( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_i4_u4_i4( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_i4_i4_i4( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_u4_u4_i2( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_u4_i4_i2( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_i4_u4_i2( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_i4_i4_i2( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_u4_u2_i8( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_u4_i2_i8( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_i4_u2_i8( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_i4_i2_i8( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_u4_u2_i4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_u4_i2_i4( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_i4_u2_i4( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_i4_i2_i4( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_u4_u2_i2( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_u4_i2_i2( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_i4_u2_i2( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_i4_i2_i2( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_u2_u8_i8( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_u2_i8_i8( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_i2_u8_i8( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_i2_i8_i8( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_u2_u8_i4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_u2_i8_i4( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_i2_u8_i4( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_i2_i8_i4( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_u2_u8_i2( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_u2_i8_i2( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_i2_u8_i2( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_i2_i8_i2( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_u2_u4_i8( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_u2_i4_i8( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_i2_u4_i8( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_i2_i4_i8( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_u2_u4_i4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_u2_i4_i4( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_i2_u4_i4( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_i2_i4_i4( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_u2_u4_i2( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_u2_i4_i2( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_i2_u4_i2( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_i2_i4_i2( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_u2_u2_i8( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_u2_i2_i8( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_i2_u2_i8( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_i2_i2_i8( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_u2_u2_i4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_u2_i2_i4( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_i2_u2_i4( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_i2_i2_i4( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_u2_u2_i2( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_u2_i2_i2( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_i2_u2_i2( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_i2_i2_i2( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_maxpool_u8( + uint8_t * pIn, + uint8_t * pOut, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + uint16_t dim_im_out_x, + uint16_t dim_im_out_y, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_t, + uint16_t padding_b, + uint16_t padding_l, + uint16_t padding_r, + uint16_t stride_x, + uint16_t stride_y); + +void xpulp_nn_maxpool_i8( + int8_t * pIn, + int8_t * pOut, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + uint16_t dim_im_out_x, + uint16_t dim_im_out_y, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_t, + uint16_t padding_b, + uint16_t padding_l, + uint16_t padding_r, + uint16_t stride_x, + uint16_t stride_y); + +void xpulp_nn_maxpool_u4( + uint8_t * pIn, + uint8_t * pOut, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + uint16_t dim_im_out_x, + uint16_t dim_im_out_y, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_t, + uint16_t padding_b, + uint16_t padding_l, + uint16_t padding_r, + uint16_t stride_x, + uint16_t stride_y); + +void xpulp_nn_maxpool_i4( + int8_t * pIn, + int8_t * pOut, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + uint16_t dim_im_out_x, + uint16_t dim_im_out_y, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_t, + uint16_t padding_b, + uint16_t padding_l, + uint16_t padding_r, + uint16_t stride_x, + uint16_t stride_y); + +void xpulp_nn_maxpool_u2( + uint8_t * pIn, + uint8_t * pOut, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + uint16_t dim_im_out_x, + uint16_t dim_im_out_y, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_t, + uint16_t padding_b, + uint16_t padding_l, + uint16_t padding_r, + uint16_t stride_x, + uint16_t stride_y); + +void xpulp_nn_maxpool_i2( + int8_t * pIn, + int8_t * pOut, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + uint16_t dim_im_out_x, + uint16_t dim_im_out_y, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_t, + uint16_t padding_b, + uint16_t padding_l, + uint16_t padding_r, + uint16_t stride_x, + uint16_t stride_y); + +void xpulp_nn_avgpool_u8_u8( + uint8_t * pIn, + uint8_t * pOut, + int32_t lambda, + uint16_t out_shift, + int32_t out_add, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + uint16_t dim_im_out_x, + uint16_t dim_im_out_y, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_t, + uint16_t padding_b, + uint16_t padding_l, + uint16_t padding_r, + uint16_t stride_x, + uint16_t stride_y, + int flag_requant +); + +void xpulp_nn_avgpool_u8_i8( + uint8_t * pIn, + int8_t * pOut, + int32_t lambda, + uint16_t out_shift, + int32_t out_add, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + uint16_t dim_im_out_x, + uint16_t dim_im_out_y, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_t, + uint16_t padding_b, + uint16_t padding_l, + uint16_t padding_r, + uint16_t stride_x, + uint16_t stride_y, + int flag_requant +); + +void xpulp_nn_avgpool_i8_u8( + int8_t * pIn, + uint8_t * pOut, + int32_t lambda, + uint16_t out_shift, + int32_t out_add, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + uint16_t dim_im_out_x, + uint16_t dim_im_out_y, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_t, + uint16_t padding_b, + uint16_t padding_l, + uint16_t padding_r, + uint16_t stride_x, + uint16_t stride_y, + int flag_requant +); + +void xpulp_nn_avgpool_i8_i8( + int8_t * pIn, + int8_t * pOut, + int32_t lambda, + uint16_t out_shift, + int32_t out_add, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + uint16_t dim_im_out_x, + uint16_t dim_im_out_y, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_t, + uint16_t padding_b, + uint16_t padding_l, + uint16_t padding_r, + uint16_t stride_x, + uint16_t stride_y, + int flag_requant +); + +void xpulp_nn_avgpool_u8_u4( + uint8_t * pIn, + uint8_t * pOut, + int32_t lambda, + uint16_t out_shift, + int32_t out_add, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + uint16_t dim_im_out_x, + uint16_t dim_im_out_y, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_t, + uint16_t padding_b, + uint16_t padding_l, + uint16_t padding_r, + uint16_t stride_x, + uint16_t stride_y, + int flag_requant +); + +void xpulp_nn_avgpool_u8_i4( + uint8_t * pIn, + int8_t * pOut, + int32_t lambda, + uint16_t out_shift, + int32_t out_add, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + uint16_t dim_im_out_x, + uint16_t dim_im_out_y, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_t, + uint16_t padding_b, + uint16_t padding_l, + uint16_t padding_r, + uint16_t stride_x, + uint16_t stride_y, + int flag_requant +); + +void xpulp_nn_avgpool_i8_u4( + int8_t * pIn, + uint8_t * pOut, + int32_t lambda, + uint16_t out_shift, + int32_t out_add, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + uint16_t dim_im_out_x, + uint16_t dim_im_out_y, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_t, + uint16_t padding_b, + uint16_t padding_l, + uint16_t padding_r, + uint16_t stride_x, + uint16_t stride_y, + int flag_requant +); + +void xpulp_nn_avgpool_i8_i4( + int8_t * pIn, + int8_t * pOut, + int32_t lambda, + uint16_t out_shift, + int32_t out_add, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + uint16_t dim_im_out_x, + uint16_t dim_im_out_y, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_t, + uint16_t padding_b, + uint16_t padding_l, + uint16_t padding_r, + uint16_t stride_x, + uint16_t stride_y, + int flag_requant +); + +void xpulp_nn_avgpool_u8_u2( + uint8_t * pIn, + uint8_t * pOut, + int32_t lambda, + uint16_t out_shift, + int32_t out_add, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + uint16_t dim_im_out_x, + uint16_t dim_im_out_y, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_t, + uint16_t padding_b, + uint16_t padding_l, + uint16_t padding_r, + uint16_t stride_x, + uint16_t stride_y, + int flag_requant +); + +void xpulp_nn_avgpool_u8_i2( + uint8_t * pIn, + int8_t * pOut, + int32_t lambda, + uint16_t out_shift, + int32_t out_add, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + uint16_t dim_im_out_x, + uint16_t dim_im_out_y, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_t, + uint16_t padding_b, + uint16_t padding_l, + uint16_t padding_r, + uint16_t stride_x, + uint16_t stride_y, + int flag_requant +); + +void xpulp_nn_avgpool_i8_u2( + int8_t * pIn, + uint8_t * pOut, + int32_t lambda, + uint16_t out_shift, + int32_t out_add, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + uint16_t dim_im_out_x, + uint16_t dim_im_out_y, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_t, + uint16_t padding_b, + uint16_t padding_l, + uint16_t padding_r, + uint16_t stride_x, + uint16_t stride_y, + int flag_requant +); + +void xpulp_nn_avgpool_i8_i2( + int8_t * pIn, + int8_t * pOut, + int32_t lambda, + uint16_t out_shift, + int32_t out_add, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + uint16_t dim_im_out_x, + uint16_t dim_im_out_y, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_t, + uint16_t padding_b, + uint16_t padding_l, + uint16_t padding_r, + uint16_t stride_x, + uint16_t stride_y, + int flag_requant +); + +void xpulp_nn_avgpool_u4_u8( + uint8_t * pIn, + uint8_t * pOut, + int32_t lambda, + uint16_t out_shift, + int32_t out_add, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + uint16_t dim_im_out_x, + uint16_t dim_im_out_y, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_t, + uint16_t padding_b, + uint16_t padding_l, + uint16_t padding_r, + uint16_t stride_x, + uint16_t stride_y, + int flag_requant +); + +void xpulp_nn_avgpool_u4_i8( + uint8_t * pIn, + int8_t * pOut, + int32_t lambda, + uint16_t out_shift, + int32_t out_add, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + uint16_t dim_im_out_x, + uint16_t dim_im_out_y, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_t, + uint16_t padding_b, + uint16_t padding_l, + uint16_t padding_r, + uint16_t stride_x, + uint16_t stride_y, + int flag_requant +); + +void xpulp_nn_avgpool_i4_u8( + int8_t * pIn, + uint8_t * pOut, + int32_t lambda, + uint16_t out_shift, + int32_t out_add, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + uint16_t dim_im_out_x, + uint16_t dim_im_out_y, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_t, + uint16_t padding_b, + uint16_t padding_l, + uint16_t padding_r, + uint16_t stride_x, + uint16_t stride_y, + int flag_requant +); + +void xpulp_nn_avgpool_i4_i8( + int8_t * pIn, + int8_t * pOut, + int32_t lambda, + uint16_t out_shift, + int32_t out_add, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + uint16_t dim_im_out_x, + uint16_t dim_im_out_y, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_t, + uint16_t padding_b, + uint16_t padding_l, + uint16_t padding_r, + uint16_t stride_x, + uint16_t stride_y, + int flag_requant +); + +void xpulp_nn_avgpool_u4_u4( + uint8_t * pIn, + uint8_t * pOut, + int32_t lambda, + uint16_t out_shift, + int32_t out_add, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + uint16_t dim_im_out_x, + uint16_t dim_im_out_y, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_t, + uint16_t padding_b, + uint16_t padding_l, + uint16_t padding_r, + uint16_t stride_x, + uint16_t stride_y, + int flag_requant +); + +void xpulp_nn_avgpool_u4_i4( + uint8_t * pIn, + int8_t * pOut, + int32_t lambda, + uint16_t out_shift, + int32_t out_add, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + uint16_t dim_im_out_x, + uint16_t dim_im_out_y, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_t, + uint16_t padding_b, + uint16_t padding_l, + uint16_t padding_r, + uint16_t stride_x, + uint16_t stride_y, + int flag_requant +); + +void xpulp_nn_avgpool_i4_u4( + int8_t * pIn, + uint8_t * pOut, + int32_t lambda, + uint16_t out_shift, + int32_t out_add, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + uint16_t dim_im_out_x, + uint16_t dim_im_out_y, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_t, + uint16_t padding_b, + uint16_t padding_l, + uint16_t padding_r, + uint16_t stride_x, + uint16_t stride_y, + int flag_requant +); + +void xpulp_nn_avgpool_i4_i4( + int8_t * pIn, + int8_t * pOut, + int32_t lambda, + uint16_t out_shift, + int32_t out_add, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + uint16_t dim_im_out_x, + uint16_t dim_im_out_y, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_t, + uint16_t padding_b, + uint16_t padding_l, + uint16_t padding_r, + uint16_t stride_x, + uint16_t stride_y, + int flag_requant +); + +void xpulp_nn_avgpool_u4_u2( + uint8_t * pIn, + uint8_t * pOut, + int32_t lambda, + uint16_t out_shift, + int32_t out_add, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + uint16_t dim_im_out_x, + uint16_t dim_im_out_y, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_t, + uint16_t padding_b, + uint16_t padding_l, + uint16_t padding_r, + uint16_t stride_x, + uint16_t stride_y, + int flag_requant +); + +void xpulp_nn_avgpool_u4_i2( + uint8_t * pIn, + int8_t * pOut, + int32_t lambda, + uint16_t out_shift, + int32_t out_add, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + uint16_t dim_im_out_x, + uint16_t dim_im_out_y, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_t, + uint16_t padding_b, + uint16_t padding_l, + uint16_t padding_r, + uint16_t stride_x, + uint16_t stride_y, + int flag_requant +); + +void xpulp_nn_avgpool_i4_u2( + int8_t * pIn, + uint8_t * pOut, + int32_t lambda, + uint16_t out_shift, + int32_t out_add, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + uint16_t dim_im_out_x, + uint16_t dim_im_out_y, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_t, + uint16_t padding_b, + uint16_t padding_l, + uint16_t padding_r, + uint16_t stride_x, + uint16_t stride_y, + int flag_requant +); + +void xpulp_nn_avgpool_i4_i2( + int8_t * pIn, + int8_t * pOut, + int32_t lambda, + uint16_t out_shift, + int32_t out_add, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + uint16_t dim_im_out_x, + uint16_t dim_im_out_y, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_t, + uint16_t padding_b, + uint16_t padding_l, + uint16_t padding_r, + uint16_t stride_x, + uint16_t stride_y, + int flag_requant +); + +void xpulp_nn_avgpool_u2_u8( + uint8_t * pIn, + uint8_t * pOut, + int32_t lambda, + uint16_t out_shift, + int32_t out_add, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + uint16_t dim_im_out_x, + uint16_t dim_im_out_y, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_t, + uint16_t padding_b, + uint16_t padding_l, + uint16_t padding_r, + uint16_t stride_x, + uint16_t stride_y, + int flag_requant +); + +void xpulp_nn_avgpool_u2_i8( + uint8_t * pIn, + int8_t * pOut, + int32_t lambda, + uint16_t out_shift, + int32_t out_add, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + uint16_t dim_im_out_x, + uint16_t dim_im_out_y, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_t, + uint16_t padding_b, + uint16_t padding_l, + uint16_t padding_r, + uint16_t stride_x, + uint16_t stride_y, + int flag_requant +); + +void xpulp_nn_avgpool_i2_u8( + int8_t * pIn, + uint8_t * pOut, + int32_t lambda, + uint16_t out_shift, + int32_t out_add, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + uint16_t dim_im_out_x, + uint16_t dim_im_out_y, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_t, + uint16_t padding_b, + uint16_t padding_l, + uint16_t padding_r, + uint16_t stride_x, + uint16_t stride_y, + int flag_requant +); + +void xpulp_nn_avgpool_i2_i8( + int8_t * pIn, + int8_t * pOut, + int32_t lambda, + uint16_t out_shift, + int32_t out_add, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + uint16_t dim_im_out_x, + uint16_t dim_im_out_y, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_t, + uint16_t padding_b, + uint16_t padding_l, + uint16_t padding_r, + uint16_t stride_x, + uint16_t stride_y, + int flag_requant +); + +void xpulp_nn_avgpool_u2_u4( + uint8_t * pIn, + uint8_t * pOut, + int32_t lambda, + uint16_t out_shift, + int32_t out_add, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + uint16_t dim_im_out_x, + uint16_t dim_im_out_y, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_t, + uint16_t padding_b, + uint16_t padding_l, + uint16_t padding_r, + uint16_t stride_x, + uint16_t stride_y, + int flag_requant +); + +void xpulp_nn_avgpool_u2_i4( + uint8_t * pIn, + int8_t * pOut, + int32_t lambda, + uint16_t out_shift, + int32_t out_add, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + uint16_t dim_im_out_x, + uint16_t dim_im_out_y, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_t, + uint16_t padding_b, + uint16_t padding_l, + uint16_t padding_r, + uint16_t stride_x, + uint16_t stride_y, + int flag_requant +); + +void xpulp_nn_avgpool_i2_u4( + int8_t * pIn, + uint8_t * pOut, + int32_t lambda, + uint16_t out_shift, + int32_t out_add, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + uint16_t dim_im_out_x, + uint16_t dim_im_out_y, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_t, + uint16_t padding_b, + uint16_t padding_l, + uint16_t padding_r, + uint16_t stride_x, + uint16_t stride_y, + int flag_requant +); + +void xpulp_nn_avgpool_i2_i4( + int8_t * pIn, + int8_t * pOut, + int32_t lambda, + uint16_t out_shift, + int32_t out_add, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + uint16_t dim_im_out_x, + uint16_t dim_im_out_y, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_t, + uint16_t padding_b, + uint16_t padding_l, + uint16_t padding_r, + uint16_t stride_x, + uint16_t stride_y, + int flag_requant +); + +void xpulp_nn_avgpool_u2_u2( + uint8_t * pIn, + uint8_t * pOut, + int32_t lambda, + uint16_t out_shift, + int32_t out_add, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + uint16_t dim_im_out_x, + uint16_t dim_im_out_y, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_t, + uint16_t padding_b, + uint16_t padding_l, + uint16_t padding_r, + uint16_t stride_x, + uint16_t stride_y, + int flag_requant +); + +void xpulp_nn_avgpool_u2_i2( + uint8_t * pIn, + int8_t * pOut, + int32_t lambda, + uint16_t out_shift, + int32_t out_add, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + uint16_t dim_im_out_x, + uint16_t dim_im_out_y, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_t, + uint16_t padding_b, + uint16_t padding_l, + uint16_t padding_r, + uint16_t stride_x, + uint16_t stride_y, + int flag_requant +); + +void xpulp_nn_avgpool_i2_u2( + int8_t * pIn, + uint8_t * pOut, + int32_t lambda, + uint16_t out_shift, + int32_t out_add, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + uint16_t dim_im_out_x, + uint16_t dim_im_out_y, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_t, + uint16_t padding_b, + uint16_t padding_l, + uint16_t padding_r, + uint16_t stride_x, + uint16_t stride_y, + int flag_requant +); + +void xpulp_nn_avgpool_i2_i2( + int8_t * pIn, + int8_t * pOut, + int32_t lambda, + uint16_t out_shift, + int32_t out_add, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + uint16_t dim_im_out_x, + uint16_t dim_im_out_y, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_t, + uint16_t padding_b, + uint16_t padding_l, + uint16_t padding_r, + uint16_t stride_x, + uint16_t stride_y, + int flag_requant +); + +void xpulp_nn_add_u8_u8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + uint16_t out_mult1, + uint16_t out_mult2, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in); + +void xpulp_nn_add_u8_u8_u8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u8_u8_u4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u8_u8_u2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u8_u8_i8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u8_u8_i4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u8_u8_i2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u8_i8_u8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u8_i8_u4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u8_i8_u2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u8_i8_i8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u8_i8_i4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u8_i8_i2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i8_u8_u8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i8_u8_u4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i8_u8_u2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i8_u8_i8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i8_u8_i4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i8_u8_i2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i8_i8_u8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i8_i8_u4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i8_i8_u2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i8_i8_i8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i8_i8_i4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i8_i8_i2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u8_u4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + uint16_t out_mult1, + uint16_t out_mult2, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in); + +void xpulp_nn_add_u8_u4_u8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u8_u4_u4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u8_u4_u2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u8_u4_i8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u8_u4_i4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u8_u4_i2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u8_i4_u8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u8_i4_u4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u8_i4_u2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u8_i4_i8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u8_i4_i4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u8_i4_i2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i8_u4_u8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i8_u4_u4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i8_u4_u2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i8_u4_i8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i8_u4_i4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i8_u4_i2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i8_i4_u8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i8_i4_u4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i8_i4_u2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i8_i4_i8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i8_i4_i4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i8_i4_i2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u8_u2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + uint16_t out_mult1, + uint16_t out_mult2, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in); + +void xpulp_nn_add_u8_u2_u8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u8_u2_u4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u8_u2_u2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u8_u2_i8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u8_u2_i4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u8_u2_i2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u8_i2_u8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u8_i2_u4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u8_i2_u2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u8_i2_i8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u8_i2_i4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u8_i2_i2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i8_u2_u8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i8_u2_u4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i8_u2_u2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i8_u2_i8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i8_u2_i4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i8_u2_i2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i8_i2_u8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i8_i2_u4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i8_i2_u2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i8_i2_i8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i8_i2_i4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i8_i2_i2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u4_u8_u8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u4_u8_u4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u4_u8_u2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u4_u8_i8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u4_u8_i4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u4_u8_i2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u4_i8_u8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u4_i8_u4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u4_i8_u2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u4_i8_i8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u4_i8_i4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u4_i8_i2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i4_u8_u8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i4_u8_u4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i4_u8_u2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i4_u8_i8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i4_u8_i4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i4_u8_i2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i4_i8_u8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i4_i8_u4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i4_i8_u2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i4_i8_i8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i4_i8_i4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i4_i8_i2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u4_u4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + uint16_t out_mult1, + uint16_t out_mult2, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in); + +void xpulp_nn_add_u4_u4_u8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u4_u4_u4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u4_u4_u2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u4_u4_i8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u4_u4_i4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u4_u4_i2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u4_i4_u8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u4_i4_u4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u4_i4_u2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u4_i4_i8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u4_i4_i4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u4_i4_i2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i4_u4_u8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i4_u4_u4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i4_u4_u2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i4_u4_i8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i4_u4_i4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i4_u4_i2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i4_i4_u8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i4_i4_u4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i4_i4_u2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i4_i4_i8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i4_i4_i4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i4_i4_i2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u4_u2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + uint16_t out_mult1, + uint16_t out_mult2, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in); + +void xpulp_nn_add_u4_u2_u8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u4_u2_u4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u4_u2_u2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u4_u2_i8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u4_u2_i4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u4_u2_i2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u4_i2_u8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u4_i2_u4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u4_i2_u2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u4_i2_i8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u4_i2_i4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u4_i2_i2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i4_u2_u8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i4_u2_u4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i4_u2_u2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i4_u2_i8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i4_u2_i4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i4_u2_i2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i4_i2_u8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i4_i2_u4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i4_i2_u2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i4_i2_i8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i4_i2_i4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i4_i2_i2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u2_u8_u8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u2_u8_u4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u2_u8_u2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u2_u8_i8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u2_u8_i4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u2_u8_i2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u2_i8_u8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u2_i8_u4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u2_i8_u2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u2_i8_i8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u2_i8_i4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u2_i8_i2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i2_u8_u8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i2_u8_u4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i2_u8_u2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i2_u8_i8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i2_u8_i4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i2_u8_i2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i2_i8_u8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i2_i8_u4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i2_i8_u2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i2_i8_i8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i2_i8_i4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i2_i8_i2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u2_u4_u8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u2_u4_u4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u2_u4_u2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u2_u4_i8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u2_u4_i4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u2_u4_i2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u2_i4_u8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u2_i4_u4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u2_i4_u2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u2_i4_i8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u2_i4_i4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u2_i4_i2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i2_u4_u8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i2_u4_u4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i2_u4_u2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i2_u4_i8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i2_u4_i4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i2_u4_i2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i2_i4_u8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i2_i4_u4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i2_i4_u2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i2_i4_i8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i2_i4_i4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i2_i4_i2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u2_u2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + uint16_t out_mult1, + uint16_t out_mult2, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in); + +void xpulp_nn_add_u2_u2_u8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u2_u2_u4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u2_u2_u2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u2_u2_i8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u2_u2_i4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u2_u2_i2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u2_i2_u8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u2_i2_u4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u2_i2_u2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u2_i2_i8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u2_i2_i4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u2_i2_i2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i2_u2_u8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i2_u2_u4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i2_u2_u2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i2_u2_i8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i2_u2_i4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i2_u2_i2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i2_i2_u8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i2_i2_u4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i2_i2_u2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i2_i2_i8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i2_i2_i4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i2_i2_i2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + + + +#endif diff --git a/rt_nn_tests/xptnn_conv/pulp_nn_mix_kernels.h b/rt_nn_tests/xptnn_conv/pulp_nn_mix_kernels.h new file mode 100644 index 0000000..8b2a3c6 --- /dev/null +++ b/rt_nn_tests/xptnn_conv/pulp_nn_mix_kernels.h @@ -0,0 +1,7093 @@ +/* + * pulp_nn_kernels.h + * Nazareno Bruschi + * + * Copyright (C) 2019-2020 University of Bologna + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef __XPULPNN-MIXED_KERNELS__ +#define __XPULPNN-MIXED_KERNELS__ + +void xpulp_nn_mix_conv_u8_u8_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_mix_conv_u8_u8_i8_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_mix_conv_u8_u8_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_mix_conv_u8_u8_i4_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_mix_conv_u8_u8_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_mix_conv_u8_u8_i2_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_mix_conv_u8_u4_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_mix_conv_u8_u4_i8_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_mix_conv_u8_u4_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_mix_conv_u8_u4_i4_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_mix_conv_u8_u4_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_mix_conv_u8_u4_i2_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_mix_conv_u8_u2_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_mix_conv_u8_u2_i8_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_mix_conv_u8_u2_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_mix_conv_u8_u2_i4_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_mix_conv_u8_u2_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_mix_conv_u8_u2_i2_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_mix_conv_u4_u8_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_mix_conv_u4_u8_i8_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_mix_conv_u4_u8_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_mix_conv_u4_u8_i4_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_mix_conv_u4_u8_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_mix_conv_u4_u8_i2_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_mix_conv_u4_u4_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_mix_conv_u4_u4_i8_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_mix_conv_u4_u4_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_mix_conv_u4_u4_i4_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_mix_conv_u4_u4_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_mix_conv_u4_u4_i2_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_mix_conv_u4_u2_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_mix_conv_u4_u2_i8_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_mix_conv_u4_u2_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_mix_conv_u4_u2_i4_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_mix_conv_u4_u2_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_mix_conv_u4_u2_i2_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_mix_conv_u2_u8_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_mix_conv_u2_u8_i8_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_mix_conv_u2_u8_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_mix_conv_u2_u8_i4_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_mix_conv_u2_u8_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_mix_conv_u2_u8_i2_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_mix_conv_u2_u4_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_mix_conv_u2_u4_i8_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_mix_conv_u2_u4_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_mix_conv_u2_u4_i4_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_mix_conv_u2_u4_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_mix_conv_u2_u4_i2_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_mix_conv_u2_u2_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_mix_conv_u2_u2_i8_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_mix_conv_u2_u2_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_mix_conv_u2_u2_i4_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_mix_conv_u2_u2_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_mix_conv_u2_u2_i2_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_mix_matmul_u8_u8_i8( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_mix_matmul_u8_u8_i8_4x4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_mix_matmul_u8_u8_i4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_mix_matmul_u8_u8_i4_4x4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_mix_matmul_u8_u8_i2( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_mix_matmul_u8_u8_i2_4x4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_mix_matmul_u8_u4_i8( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_mix_matmul_u8_u4_i8_4x4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_mix_matmul_u8_u4_i4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_mix_matmul_u8_u4_i4_4x4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_mix_matmul_u8_u4_i2( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_mix_matmul_u8_u4_i2_4x4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_mix_matmul_u8_u2_i8( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_mix_matmul_u8_u2_i8_4x4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_mix_matmul_u8_u2_i4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_mix_matmul_u8_u2_i4_4x4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_mix_matmul_u8_u2_i2( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_mix_matmul_u8_u2_i2_4x4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_mix_matmul_u4_u8_i8( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_mix_matmul_u4_u8_i8_4x4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_mix_matmul_u4_u8_i4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_mix_matmul_u4_u8_i4_4x4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_mix_matmul_u4_u8_i2( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_mix_matmul_u4_u8_i2_4x4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_mix_matmul_u4_u4_i8( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_mix_matmul_u4_u4_i8_4x4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_mix_matmul_u4_u4_i4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_mix_matmul_u4_u4_i4_4x4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_mix_matmul_u4_u4_i2( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_mix_matmul_u4_u4_i2_4x4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_mix_matmul_u4_u2_i8( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_mix_matmul_u4_u2_i8_4x4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_mix_matmul_u4_u2_i4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_mix_matmul_u4_u2_i4_4x4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_mix_matmul_u4_u2_i2( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_mix_matmul_u4_u2_i2_4x4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_mix_matmul_u2_u8_i8( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_mix_matmul_u2_u8_i8_4x4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_mix_matmul_u2_u8_i4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_mix_matmul_u2_u8_i4_4x4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_mix_matmul_u2_u8_i2( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_mix_matmul_u2_u8_i2_4x4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_mix_matmul_u2_u4_i8( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_mix_matmul_u2_u4_i8_4x4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_mix_matmul_u2_u4_i4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_mix_matmul_u2_u4_i4_4x4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_mix_matmul_u2_u4_i2( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_mix_matmul_u2_u4_i2_4x4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_mix_matmul_u2_u2_i8( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_mix_matmul_u2_u2_i8_4x4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_mix_matmul_u2_u2_i4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_mix_matmul_u2_u2_i4_4x4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_mix_matmul_u2_u2_i2( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_mix_matmul_u2_u2_i2_4x4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_avgpool_u8_u8( + uint8_t * pIn, + uint8_t * pOut, + int32_t lambda, + uint16_t out_shift, + int32_t out_add, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + uint16_t dim_im_out_x, + uint16_t dim_im_out_y, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_t, + uint16_t padding_b, + uint16_t padding_l, + uint16_t padding_r, + uint16_t stride_x, + uint16_t stride_y, + int flag_requant +); + +void xpulp_nn_avgpool_u8_i8( + uint8_t * pIn, + int8_t * pOut, + int32_t lambda, + uint16_t out_shift, + int32_t out_add, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + uint16_t dim_im_out_x, + uint16_t dim_im_out_y, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_t, + uint16_t padding_b, + uint16_t padding_l, + uint16_t padding_r, + uint16_t stride_x, + uint16_t stride_y, + int flag_requant +); + +void xpulp_nn_avgpool_i8_u8( + int8_t * pIn, + uint8_t * pOut, + int32_t lambda, + uint16_t out_shift, + int32_t out_add, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + uint16_t dim_im_out_x, + uint16_t dim_im_out_y, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_t, + uint16_t padding_b, + uint16_t padding_l, + uint16_t padding_r, + uint16_t stride_x, + uint16_t stride_y, + int flag_requant +); + +void xpulp_nn_avgpool_i8_i8( + int8_t * pIn, + int8_t * pOut, + int32_t lambda, + uint16_t out_shift, + int32_t out_add, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + uint16_t dim_im_out_x, + uint16_t dim_im_out_y, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_t, + uint16_t padding_b, + uint16_t padding_l, + uint16_t padding_r, + uint16_t stride_x, + uint16_t stride_y, + int flag_requant +); + +void xpulp_nn_avgpool_u8_u4( + uint8_t * pIn, + uint8_t * pOut, + int32_t lambda, + uint16_t out_shift, + int32_t out_add, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + uint16_t dim_im_out_x, + uint16_t dim_im_out_y, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_t, + uint16_t padding_b, + uint16_t padding_l, + uint16_t padding_r, + uint16_t stride_x, + uint16_t stride_y, + int flag_requant +); + +void xpulp_nn_avgpool_u8_i4( + uint8_t * pIn, + int8_t * pOut, + int32_t lambda, + uint16_t out_shift, + int32_t out_add, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + uint16_t dim_im_out_x, + uint16_t dim_im_out_y, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_t, + uint16_t padding_b, + uint16_t padding_l, + uint16_t padding_r, + uint16_t stride_x, + uint16_t stride_y, + int flag_requant +); + +void xpulp_nn_avgpool_i8_u4( + int8_t * pIn, + uint8_t * pOut, + int32_t lambda, + uint16_t out_shift, + int32_t out_add, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + uint16_t dim_im_out_x, + uint16_t dim_im_out_y, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_t, + uint16_t padding_b, + uint16_t padding_l, + uint16_t padding_r, + uint16_t stride_x, + uint16_t stride_y, + int flag_requant +); + +void xpulp_nn_avgpool_i8_i4( + int8_t * pIn, + int8_t * pOut, + int32_t lambda, + uint16_t out_shift, + int32_t out_add, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + uint16_t dim_im_out_x, + uint16_t dim_im_out_y, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_t, + uint16_t padding_b, + uint16_t padding_l, + uint16_t padding_r, + uint16_t stride_x, + uint16_t stride_y, + int flag_requant +); + +void xpulp_nn_avgpool_u8_u2( + uint8_t * pIn, + uint8_t * pOut, + int32_t lambda, + uint16_t out_shift, + int32_t out_add, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + uint16_t dim_im_out_x, + uint16_t dim_im_out_y, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_t, + uint16_t padding_b, + uint16_t padding_l, + uint16_t padding_r, + uint16_t stride_x, + uint16_t stride_y, + int flag_requant +); + +void xpulp_nn_avgpool_u8_i2( + uint8_t * pIn, + int8_t * pOut, + int32_t lambda, + uint16_t out_shift, + int32_t out_add, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + uint16_t dim_im_out_x, + uint16_t dim_im_out_y, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_t, + uint16_t padding_b, + uint16_t padding_l, + uint16_t padding_r, + uint16_t stride_x, + uint16_t stride_y, + int flag_requant +); + +void xpulp_nn_avgpool_i8_u2( + int8_t * pIn, + uint8_t * pOut, + int32_t lambda, + uint16_t out_shift, + int32_t out_add, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + uint16_t dim_im_out_x, + uint16_t dim_im_out_y, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_t, + uint16_t padding_b, + uint16_t padding_l, + uint16_t padding_r, + uint16_t stride_x, + uint16_t stride_y, + int flag_requant +); + +void xpulp_nn_avgpool_i8_i2( + int8_t * pIn, + int8_t * pOut, + int32_t lambda, + uint16_t out_shift, + int32_t out_add, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + uint16_t dim_im_out_x, + uint16_t dim_im_out_y, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_t, + uint16_t padding_b, + uint16_t padding_l, + uint16_t padding_r, + uint16_t stride_x, + uint16_t stride_y, + int flag_requant +); + +void xpulp_nn_avgpool_u4_u8( + uint8_t * pIn, + uint8_t * pOut, + int32_t lambda, + uint16_t out_shift, + int32_t out_add, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + uint16_t dim_im_out_x, + uint16_t dim_im_out_y, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_t, + uint16_t padding_b, + uint16_t padding_l, + uint16_t padding_r, + uint16_t stride_x, + uint16_t stride_y, + int flag_requant +); + +void xpulp_nn_avgpool_u4_i8( + uint8_t * pIn, + int8_t * pOut, + int32_t lambda, + uint16_t out_shift, + int32_t out_add, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + uint16_t dim_im_out_x, + uint16_t dim_im_out_y, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_t, + uint16_t padding_b, + uint16_t padding_l, + uint16_t padding_r, + uint16_t stride_x, + uint16_t stride_y, + int flag_requant +); + +void xpulp_nn_avgpool_i4_u8( + int8_t * pIn, + uint8_t * pOut, + int32_t lambda, + uint16_t out_shift, + int32_t out_add, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + uint16_t dim_im_out_x, + uint16_t dim_im_out_y, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_t, + uint16_t padding_b, + uint16_t padding_l, + uint16_t padding_r, + uint16_t stride_x, + uint16_t stride_y, + int flag_requant +); + +void xpulp_nn_avgpool_i4_i8( + int8_t * pIn, + int8_t * pOut, + int32_t lambda, + uint16_t out_shift, + int32_t out_add, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + uint16_t dim_im_out_x, + uint16_t dim_im_out_y, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_t, + uint16_t padding_b, + uint16_t padding_l, + uint16_t padding_r, + uint16_t stride_x, + uint16_t stride_y, + int flag_requant +); + +void xpulp_nn_avgpool_u4_u4( + uint8_t * pIn, + uint8_t * pOut, + int32_t lambda, + uint16_t out_shift, + int32_t out_add, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + uint16_t dim_im_out_x, + uint16_t dim_im_out_y, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_t, + uint16_t padding_b, + uint16_t padding_l, + uint16_t padding_r, + uint16_t stride_x, + uint16_t stride_y, + int flag_requant +); + +void xpulp_nn_avgpool_u4_i4( + uint8_t * pIn, + int8_t * pOut, + int32_t lambda, + uint16_t out_shift, + int32_t out_add, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + uint16_t dim_im_out_x, + uint16_t dim_im_out_y, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_t, + uint16_t padding_b, + uint16_t padding_l, + uint16_t padding_r, + uint16_t stride_x, + uint16_t stride_y, + int flag_requant +); + +void xpulp_nn_avgpool_i4_u4( + int8_t * pIn, + uint8_t * pOut, + int32_t lambda, + uint16_t out_shift, + int32_t out_add, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + uint16_t dim_im_out_x, + uint16_t dim_im_out_y, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_t, + uint16_t padding_b, + uint16_t padding_l, + uint16_t padding_r, + uint16_t stride_x, + uint16_t stride_y, + int flag_requant +); + +void xpulp_nn_avgpool_i4_i4( + int8_t * pIn, + int8_t * pOut, + int32_t lambda, + uint16_t out_shift, + int32_t out_add, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + uint16_t dim_im_out_x, + uint16_t dim_im_out_y, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_t, + uint16_t padding_b, + uint16_t padding_l, + uint16_t padding_r, + uint16_t stride_x, + uint16_t stride_y, + int flag_requant +); + +void xpulp_nn_avgpool_u4_u2( + uint8_t * pIn, + uint8_t * pOut, + int32_t lambda, + uint16_t out_shift, + int32_t out_add, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + uint16_t dim_im_out_x, + uint16_t dim_im_out_y, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_t, + uint16_t padding_b, + uint16_t padding_l, + uint16_t padding_r, + uint16_t stride_x, + uint16_t stride_y, + int flag_requant +); + +void xpulp_nn_avgpool_u4_i2( + uint8_t * pIn, + int8_t * pOut, + int32_t lambda, + uint16_t out_shift, + int32_t out_add, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + uint16_t dim_im_out_x, + uint16_t dim_im_out_y, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_t, + uint16_t padding_b, + uint16_t padding_l, + uint16_t padding_r, + uint16_t stride_x, + uint16_t stride_y, + int flag_requant +); + +void xpulp_nn_avgpool_i4_u2( + int8_t * pIn, + uint8_t * pOut, + int32_t lambda, + uint16_t out_shift, + int32_t out_add, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + uint16_t dim_im_out_x, + uint16_t dim_im_out_y, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_t, + uint16_t padding_b, + uint16_t padding_l, + uint16_t padding_r, + uint16_t stride_x, + uint16_t stride_y, + int flag_requant +); + +void xpulp_nn_avgpool_i4_i2( + int8_t * pIn, + int8_t * pOut, + int32_t lambda, + uint16_t out_shift, + int32_t out_add, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + uint16_t dim_im_out_x, + uint16_t dim_im_out_y, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_t, + uint16_t padding_b, + uint16_t padding_l, + uint16_t padding_r, + uint16_t stride_x, + uint16_t stride_y, + int flag_requant +); + +void xpulp_nn_avgpool_u2_u8( + uint8_t * pIn, + uint8_t * pOut, + int32_t lambda, + uint16_t out_shift, + int32_t out_add, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + uint16_t dim_im_out_x, + uint16_t dim_im_out_y, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_t, + uint16_t padding_b, + uint16_t padding_l, + uint16_t padding_r, + uint16_t stride_x, + uint16_t stride_y, + int flag_requant +); + +void xpulp_nn_avgpool_u2_i8( + uint8_t * pIn, + int8_t * pOut, + int32_t lambda, + uint16_t out_shift, + int32_t out_add, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + uint16_t dim_im_out_x, + uint16_t dim_im_out_y, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_t, + uint16_t padding_b, + uint16_t padding_l, + uint16_t padding_r, + uint16_t stride_x, + uint16_t stride_y, + int flag_requant +); + +void xpulp_nn_avgpool_i2_u8( + int8_t * pIn, + uint8_t * pOut, + int32_t lambda, + uint16_t out_shift, + int32_t out_add, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + uint16_t dim_im_out_x, + uint16_t dim_im_out_y, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_t, + uint16_t padding_b, + uint16_t padding_l, + uint16_t padding_r, + uint16_t stride_x, + uint16_t stride_y, + int flag_requant +); + +void xpulp_nn_avgpool_i2_i8( + int8_t * pIn, + int8_t * pOut, + int32_t lambda, + uint16_t out_shift, + int32_t out_add, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + uint16_t dim_im_out_x, + uint16_t dim_im_out_y, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_t, + uint16_t padding_b, + uint16_t padding_l, + uint16_t padding_r, + uint16_t stride_x, + uint16_t stride_y, + int flag_requant +); + +void xpulp_nn_avgpool_u2_u4( + uint8_t * pIn, + uint8_t * pOut, + int32_t lambda, + uint16_t out_shift, + int32_t out_add, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + uint16_t dim_im_out_x, + uint16_t dim_im_out_y, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_t, + uint16_t padding_b, + uint16_t padding_l, + uint16_t padding_r, + uint16_t stride_x, + uint16_t stride_y, + int flag_requant +); + +void xpulp_nn_avgpool_u2_i4( + uint8_t * pIn, + int8_t * pOut, + int32_t lambda, + uint16_t out_shift, + int32_t out_add, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + uint16_t dim_im_out_x, + uint16_t dim_im_out_y, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_t, + uint16_t padding_b, + uint16_t padding_l, + uint16_t padding_r, + uint16_t stride_x, + uint16_t stride_y, + int flag_requant +); + +void xpulp_nn_avgpool_i2_u4( + int8_t * pIn, + uint8_t * pOut, + int32_t lambda, + uint16_t out_shift, + int32_t out_add, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + uint16_t dim_im_out_x, + uint16_t dim_im_out_y, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_t, + uint16_t padding_b, + uint16_t padding_l, + uint16_t padding_r, + uint16_t stride_x, + uint16_t stride_y, + int flag_requant +); + +void xpulp_nn_avgpool_i2_i4( + int8_t * pIn, + int8_t * pOut, + int32_t lambda, + uint16_t out_shift, + int32_t out_add, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + uint16_t dim_im_out_x, + uint16_t dim_im_out_y, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_t, + uint16_t padding_b, + uint16_t padding_l, + uint16_t padding_r, + uint16_t stride_x, + uint16_t stride_y, + int flag_requant +); + +void xpulp_nn_avgpool_u2_u2( + uint8_t * pIn, + uint8_t * pOut, + int32_t lambda, + uint16_t out_shift, + int32_t out_add, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + uint16_t dim_im_out_x, + uint16_t dim_im_out_y, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_t, + uint16_t padding_b, + uint16_t padding_l, + uint16_t padding_r, + uint16_t stride_x, + uint16_t stride_y, + int flag_requant +); + +void xpulp_nn_avgpool_u2_i2( + uint8_t * pIn, + int8_t * pOut, + int32_t lambda, + uint16_t out_shift, + int32_t out_add, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + uint16_t dim_im_out_x, + uint16_t dim_im_out_y, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_t, + uint16_t padding_b, + uint16_t padding_l, + uint16_t padding_r, + uint16_t stride_x, + uint16_t stride_y, + int flag_requant +); + +void xpulp_nn_avgpool_i2_u2( + int8_t * pIn, + uint8_t * pOut, + int32_t lambda, + uint16_t out_shift, + int32_t out_add, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + uint16_t dim_im_out_x, + uint16_t dim_im_out_y, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_t, + uint16_t padding_b, + uint16_t padding_l, + uint16_t padding_r, + uint16_t stride_x, + uint16_t stride_y, + int flag_requant +); + +void xpulp_nn_avgpool_i2_i2( + int8_t * pIn, + int8_t * pOut, + int32_t lambda, + uint16_t out_shift, + int32_t out_add, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + uint16_t dim_im_out_x, + uint16_t dim_im_out_y, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_t, + uint16_t padding_b, + uint16_t padding_l, + uint16_t padding_r, + uint16_t stride_x, + uint16_t stride_y, + int flag_requant +); + +void xpulp_nn_add_u8_u8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + uint16_t out_mult1, + uint16_t out_mult2, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in); + +void xpulp_nn_add_u8_u8_u8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u8_u8_u4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u8_u8_u2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u8_u8_i8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u8_u8_i4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u8_u8_i2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u8_i8_u8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u8_i8_u4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u8_i8_u2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u8_i8_i8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u8_i8_i4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u8_i8_i2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i8_u8_u8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i8_u8_u4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i8_u8_u2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i8_u8_i8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i8_u8_i4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i8_u8_i2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i8_i8_u8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i8_i8_u4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i8_i8_u2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i8_i8_i8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i8_i8_i4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i8_i8_i2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u8_u4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + uint16_t out_mult1, + uint16_t out_mult2, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in); + +void xpulp_nn_add_u8_u4_u8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u8_u4_u4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u8_u4_u2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u8_u4_i8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u8_u4_i4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u8_u4_i2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u8_i4_u8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u8_i4_u4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u8_i4_u2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u8_i4_i8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u8_i4_i4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u8_i4_i2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i8_u4_u8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i8_u4_u4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i8_u4_u2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i8_u4_i8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i8_u4_i4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i8_u4_i2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i8_i4_u8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i8_i4_u4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i8_i4_u2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i8_i4_i8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i8_i4_i4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i8_i4_i2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u8_u2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + uint16_t out_mult1, + uint16_t out_mult2, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in); + +void xpulp_nn_add_u8_u2_u8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u8_u2_u4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u8_u2_u2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u8_u2_i8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u8_u2_i4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u8_u2_i2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u8_i2_u8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u8_i2_u4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u8_i2_u2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u8_i2_i8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u8_i2_i4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u8_i2_i2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i8_u2_u8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i8_u2_u4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i8_u2_u2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i8_u2_i8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i8_u2_i4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i8_u2_i2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i8_i2_u8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i8_i2_u4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i8_i2_u2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i8_i2_i8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i8_i2_i4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i8_i2_i2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u4_u8_u8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u4_u8_u4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u4_u8_u2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u4_u8_i8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u4_u8_i4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u4_u8_i2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u4_i8_u8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u4_i8_u4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u4_i8_u2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u4_i8_i8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u4_i8_i4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u4_i8_i2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i4_u8_u8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i4_u8_u4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i4_u8_u2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i4_u8_i8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i4_u8_i4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i4_u8_i2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i4_i8_u8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i4_i8_u4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i4_i8_u2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i4_i8_i8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i4_i8_i4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i4_i8_i2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u4_u4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + uint16_t out_mult1, + uint16_t out_mult2, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in); + +void xpulp_nn_add_u4_u4_u8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u4_u4_u4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u4_u4_u2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u4_u4_i8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u4_u4_i4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u4_u4_i2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u4_i4_u8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u4_i4_u4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u4_i4_u2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u4_i4_i8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u4_i4_i4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u4_i4_i2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i4_u4_u8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i4_u4_u4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i4_u4_u2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i4_u4_i8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i4_u4_i4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i4_u4_i2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i4_i4_u8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i4_i4_u4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i4_i4_u2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i4_i4_i8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i4_i4_i4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i4_i4_i2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u4_u2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + uint16_t out_mult1, + uint16_t out_mult2, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in); + +void xpulp_nn_add_u4_u2_u8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u4_u2_u4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u4_u2_u2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u4_u2_i8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u4_u2_i4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u4_u2_i2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u4_i2_u8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u4_i2_u4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u4_i2_u2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u4_i2_i8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u4_i2_i4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u4_i2_i2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i4_u2_u8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i4_u2_u4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i4_u2_u2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i4_u2_i8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i4_u2_i4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i4_u2_i2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i4_i2_u8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i4_i2_u4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i4_i2_u2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i4_i2_i8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i4_i2_i4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i4_i2_i2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u2_u8_u8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u2_u8_u4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u2_u8_u2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u2_u8_i8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u2_u8_i4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u2_u8_i2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u2_i8_u8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u2_i8_u4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u2_i8_u2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u2_i8_i8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u2_i8_i4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u2_i8_i2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i2_u8_u8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i2_u8_u4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i2_u8_u2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i2_u8_i8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i2_u8_i4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i2_u8_i2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i2_i8_u8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i2_i8_u4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i2_i8_u2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i2_i8_i8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i2_i8_i4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i2_i8_i2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u2_u4_u8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u2_u4_u4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u2_u4_u2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u2_u4_i8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u2_u4_i4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u2_u4_i2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u2_i4_u8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u2_i4_u4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u2_i4_u2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u2_i4_i8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u2_i4_i4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u2_i4_i2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i2_u4_u8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i2_u4_u4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i2_u4_u2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i2_u4_i8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i2_u4_i4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i2_u4_i2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i2_i4_u8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i2_i4_u4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i2_i4_u2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i2_i4_i8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i2_i4_i4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i2_i4_i2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u2_u2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + uint16_t out_mult1, + uint16_t out_mult2, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in); + +void xpulp_nn_add_u2_u2_u8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u2_u2_u4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u2_u2_u2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u2_u2_i8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u2_u2_i4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u2_u2_i2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u2_i2_u8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u2_i2_u4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u2_i2_u2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u2_i2_i8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u2_i2_i4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u2_i2_i2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i2_u2_u8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i2_u2_u4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i2_u2_u2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i2_u2_i8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i2_u2_i4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i2_u2_i2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i2_i2_u8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i2_i2_u4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i2_i2_u2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i2_i2_i8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i2_i2_i4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i2_i2_i2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + + + +#endif \ No newline at end of file diff --git a/rt_nn_tests/xptnn_conv/pulp_nn_utils.h b/rt_nn_tests/xptnn_conv/pulp_nn_utils.h new file mode 100644 index 0000000..cb1f610 --- /dev/null +++ b/rt_nn_tests/xptnn_conv/pulp_nn_utils.h @@ -0,0 +1,2029 @@ +/* + * pulp_nn_utils.h + * Nazareno Bruschi + * Alessandro Nadalini + * Georg Rutishauser + * + * Copyright (C) 2019-2020 ETH Zurich & University of Bologna + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef __PULPNN_UTILS__ +#define __PULPNN_UTILS__ + +#include + +typedef signed short v2s __attribute__((vector_size (4))); + + + +#define min(a,b) ((a)<(b)?(a):(b)) +#define log2(x) __builtin_pulp_fl1(x) +#define PACK_INT2_SIZE(x) ((x) >> 2) + +#define MemoryFence() asm volatile("":::"memory") + +#define CHANS_DECOMPR(x) (5*x >> 2) // equivalent to division by 0.8 + +/* Functions for Compressed MAC */ +#define CompressedMAC(sum, ptr, config) asm volatile( \ + "pv.smlsdotsp.t %[shum], %[phtr], %[chonfig];" \ + : [shum] "+r" (sum), [phtr] "+r" (ptr): [chonfig] "I" (config)) + +#define CompressedMACUnsigned(sum, ptr, config) asm volatile( \ + "pv.smlsdotsup.t %[shum], %[phtr], %[chonfig];" \ + : [shum] "+r" (sum), [phtr] "+r" (ptr): [chonfig] "I" (config)) + +#define InitNNRF(ptr, config) asm volatile( \ + "pv.smlsdotsp.t x0, %[phtr], %[chonfig];" \ + : [phtr] "+r" (ptr) : [chonfig] "I" (config)) + +#define ThresholdCompress(res, val, thrs) asm volatile( \ + "pv.thrc %[rhes], %[vhal], %[thhrs];" : [rhes] "+r" (res) : [vhal] "r" (val), [thhrs] "r" (thrs)) + +#define GetConfig(a_update, b_update, a_reg, b_reg) a_update << 4 | b_update << 3 | a_reg << 1 | b_reg + +/* Functions for threshold&compress */ +#define check_store(res, pOut) \ + if ((res & 0xe0000000) == 0x00000000) { \ + *pOut = res & 0xff; \ + pOut++; \ + incr_val=ch_out_r; } + +#define check_store_4x1(res, pOut) \ + if ((res & 0xe0000000) == 0x00000000) { \ + *pOut = res & 0xff; \ + pOut++; } + +#define reset_currThr() \ + if ((uint32_t *) currThr == (uint32_t *) (pThr + ch_out)) { \ + currThr = (v2s *) pThr; \ + } + +#define MacLoads20(a_update, b_update, a_reg, b_reg, ptr, sum) __builtin_pulp_mlsdotsp20_v3(a_update, b_update, a_reg, b_reg, ptr, sum) + +#define MacLoad20(a_update, b_update, a_reg, b_reg, ptr, sum) __builtin_pulp_mlsdotsup20_v3(a_update, b_update, a_reg, b_reg, ptr, sum) + +/* Functions for compressed min/max */ +#define CompressedMax(res, in1, in2) asm volatile( \ + "pv.max.t %[res_], %[in1_], %[in2_];" : [res_] "=r" (res) : [in1_] "r" (in1), [in2_] "r" (in2)) + +#define CompressedMin(res, in1, in2) asm volatile( \ + "pv.min.t %[res_], %[in1_], %[in2_];" : [res_] "=r" (res) : [in1_] "r" (in1), [in2_] "r" (in2)) + +#define Max16(res, in1, in2) asm volatile( \ + "pv.max.c %[res_], %[in1_], %[in2_];" : [res_] "=r" (res) : [in1_] "r" (in1), [in2_] "r" (in2)) + +#define Min16(res, in1, in2) asm volatile( \ + "pv.min.c %[res_], %[in1_], %[in2_];" : [res_] "=r" (res) : [in1_] "r" (in1), [in2_] "r" (in2)) + +#define thr_cmp(state, val, threshs) __builtin_pulp_thresh_compr(state, val, threshs) + +typedef unsigned char v4u __attribute__((vector_size (4))); +typedef signed char v4s __attribute__((vector_size (4))); + +#define bitext(x,size,off) __builtin_pulp_bextract(x,size,off) +#define bitextu(x,size,off) __builtin_pulp_bextractu(x,size,off) +#ifdef __clang__ +#define bitins(dst,not_mask_imm,src,mask_imm,off) __builtin_binsert(dst,not_mask_imm,src,mask_imm,off) +#else +#define bitins(dst,not_mask_imm,src,mask_imm,off) __builtin_pulp_binsert(dst,not_mask_imm,src,mask_imm,off) +#endif +#define pack(x,y,z,t) __builtin_pulp_pack4(x,y,z,t) +#define max4(a,b) __builtin_pulp_maxu4(a,b) +#define maxs4(a, b) __builtin_pulp_max4(a, b) +#define max8(a, b) __builtin_pulp_maxu8(a, b) +#define maxs8(a, b) __builtin_pulp_max8(a, b) +#define max16(a, b) __builtin_pulp_maxu16(a, b) +#define maxs16(a, b) __builtin_pulp_max16(a, b) +#define max32(a,b) __builtin_pulp_maxusi(a,b) +#define maxs32(a,b) __builtin_pulp_maxsi(a,b) +#define min32(a,b) __builtin_pulp_minusi(a,b) +#define mins32(a,b) __builtin_pulp_minsi(a,b) +#define min4(a, b) __builtin_pulp_minu4(a, b) +#define mins4(a, b) __builtin_pulp_min4(a, b) +#define min8(a, b) __builtin_pulp_minu8(a, b) +#define mins8(a, b) __builtin_pulp_min8(a, b) +#define min16(a, b) __builtin_pulp_minu16(a, b) +#define mins16(a, b) __builtin_pulp_min16(a, b) +#define avg4(a,b) __builtin_pulp_avgu4(a,b) +#define avg8(a,b) __builtin_pulp_avgu8(a,b) +#define avg16(a,b) __builtin_pulp_avgu16(a,b) +#define log2(x) __builtin_pulp_fl1(x) +#define min(a,b) ((a)<(b)?(a):(b)) +#define SumDotp4(a, b, c) __builtin_pulp_sdotusp4(a, b, c) +#define SumDotp8(a, b, c) __builtin_pulp_sdotusp8(a, b, c) +#define SumDotp16(a, b, c) __builtin_pulp_sdotusp16(a, b, c) +#define SumDotps4(a, b, c) __builtin_pulp_sdotsp4(a, b, c) +#define SumDotps8(a, b, c) __builtin_pulp_sdotsp8(a, b, c) +#define SumDotps16(a, b, c) __builtin_pulp_sdotsp16(a, b, c) +#define clip4(x) __builtin_pulp_clipu_r(x, 15) +#define clip2(x) __builtin_pulp_clipu_r(x, 3) +#define clip8(x) __builtin_pulp_clipu_r(x, 255) + +#define clips4(x) __builtin_pulp_clip_r(x, 7) +#define clips2(x) __builtin_pulp_clip_r(x, 1) +#define clips8(x) __builtin_pulp_clip_r(x, 127) +#define MacLoadInit(a_update, b_update, a_reg, b_reg, ptr) __builtin_pulp_mlinitspr_v3(a_update, b_update, a_reg, b_reg, ptr) +#define MacLoadUpdate(ptr) __builtin_pulp_mlupdatespr_v3(ptr) +#define MacLoadAssign(ptr) __builtin_pulp_mlassignspr_v3(ptr) +#define MacLoad4(a_update, b_update, a_reg, b_reg, ptr, sum) __builtin_pulp_mlsdotsup4_v3(a_update, b_update, a_reg, b_reg, ptr, sum) +#define MacLoad8(a_update, b_update, a_reg, b_reg, ptr, sum) __builtin_pulp_mlsdotsup8_v3(a_update, b_update, a_reg, b_reg, ptr, sum) +#define MacLoad16(a_update, b_update, a_reg, b_reg, ptr, sum) __builtin_pulp_mlsdotsup16_v3(a_update, b_update, a_reg, b_reg, ptr, sum) +#define MacLoads4(a_update, b_update, a_reg, b_reg, ptr, sum) __builtin_pulp_mlsdotsp4_v3(a_update, b_update, a_reg, b_reg, ptr, sum) +#define MacLoads8(a_update, b_update, a_reg, b_reg, ptr, sum) __builtin_pulp_mlsdotsp8_v3(a_update, b_update, a_reg, b_reg, ptr, sum) +#define MacLoads16(a_update, b_update, a_reg, b_reg, ptr, sum) __builtin_pulp_mlsdotsp16_v3(a_update, b_update, a_reg, b_reg, ptr, sum) + +#define PACK_INT8_SIZE(x) (x) +#define PACK_INT4_SIZE(x) ((x) >> 1) +#define PACK_INT2_SIZE(x) ((x) >> 2) + +#define MemoryFence() asm volatile("":::"memory") + +#define LEGACY_MODE(x) asm volatile ("csrwi 0x010," x) +#define IVEC_FMT(x) asm volatile ("csrwi 0x00D," x) +#define MIXED_SKIP(x) asm volatile ("csrwi 0x00F," x) +#define A_ADDRESS(x) asm volatile ("csrw 0x100, %0" :: "r" (x)) +#define W_ADDRESS(x) asm volatile ("csrw 0x101, %0" :: "r" (x)) +#define A_STRIDE(x) asm volatile ("csrw 0x102, %0":: "r" (x)) +#define W_STRIDE(x) asm volatile ("csrw 0x103, %0":: "r" (x)) +#define A_ROLLBACK(x) asm volatile ("csrw 0x104, %0":: "r" (x)) +#define W_ROLLBACK(x) asm volatile ("csrw 0x105, %0":: "r" (x)) +#define A_SKIP(x) asm volatile ("csrwi 0x106," x) +#define W_SKIP(x) asm volatile ("csrwi 0x107," x) + +static uint8_t __attribute__((noinline)) pulp_nn_quant_u2 ( + int32_t phi, + int16_t m, + int8_t d + ) { + int32_t x = (m * phi) >> d; + uint8_t res = clip2(x); + return res; +} +static uint8_t __attribute__((noinline)) pulp_nn_bn_quant_u2 ( + int32_t phi, + int32_t k, + int32_t lambda, + int8_t d + ) { + int32_t integer_image_phi = (k * phi) + lambda; + int32_t x = (integer_image_phi) >> d; + uint8_t res = clip2(x); + return res; +} +static uint8_t __attribute__((noinline)) pulp_nn_add_quant_u2 ( + uint8_t pix1, + uint8_t pix2, + int16_t m1, + int16_t m2, + int8_t d + ) { + uint32_t integer_image = pix1*m1 + pix2*m2; + uint32_t x = (integer_image) >> d; + uint8_t res = clip2(x); + return res; +} + +static int8_t __attribute__((noinline)) pulp_nn_quant_i2 ( + int32_t phi, + int16_t m, + int8_t d + ) { + int32_t x = (m * phi) >> d; + int8_t res = clips2(x); + return res; +} +static int8_t __attribute__((noinline)) pulp_nn_bn_quant_i2 ( + int32_t phi, + int32_t k, + int32_t lambda, + int8_t d + ) { + int32_t integer_image_phi = (k * phi) + lambda; + int32_t x = (integer_image_phi) >> d; + int8_t res = clips2(x); + return res; +} +static int8_t __attribute__((noinline)) pulp_nn_add_quant_i2 ( + int8_t pix1, + int8_t pix2, + int16_t m1, + int16_t m2, + int8_t d + ) { + int32_t integer_image = pix1*m1 + pix2*m2; + int32_t x = (integer_image) >> d; + int8_t res = clips2(x); + return res; +} + +static uint8_t __attribute__((noinline)) pulp_nn_quant_u4 ( + int32_t phi, + int16_t m, + int8_t d + ) { + int32_t x = (m * phi) >> d; + uint8_t res = clip4(x); + return res; +} +static uint8_t __attribute__((noinline)) pulp_nn_bn_quant_u4 ( + int32_t phi, + int32_t k, + int32_t lambda, + int8_t d + ) { + int32_t integer_image_phi = (k * phi) + lambda; + int32_t x = (integer_image_phi) >> d; + uint8_t res = clip4(x); + return res; +} +static uint8_t __attribute__((noinline)) pulp_nn_add_quant_u4 ( + uint8_t pix1, + uint8_t pix2, + int16_t m1, + int16_t m2, + int8_t d + ) { + uint32_t integer_image = pix1*m1 + pix2*m2; + uint32_t x = (integer_image) >> d; + uint8_t res = clip4(x); + return res; +} + +static int8_t __attribute__((noinline)) pulp_nn_quant_i4 ( + int32_t phi, + int16_t m, + int8_t d + ) { + int32_t x = (m * phi) >> d; + int8_t res = clips4(x); + return res; +} +static int8_t __attribute__((noinline)) pulp_nn_bn_quant_i4 ( + int32_t phi, + int32_t k, + int32_t lambda, + int8_t d + ) { + int32_t integer_image_phi = (k * phi) + lambda; + int32_t x = (integer_image_phi) >> d; + int8_t res = clips4(x); + return res; +} +static int8_t __attribute__((noinline)) pulp_nn_add_quant_i4 ( + int8_t pix1, + int8_t pix2, + int16_t m1, + int16_t m2, + int8_t d + ) { + int32_t integer_image = pix1*m1 + pix2*m2; + int32_t x = (integer_image) >> d; + int8_t res = clips4(x); + return res; +} + +static uint8_t __attribute__((noinline)) pulp_nn_quant_u8 ( + int32_t phi, + int16_t m, + int8_t d + ) { + int32_t x = (m * phi) >> d; + uint8_t res = clip8(x); + return res; +} +static uint8_t __attribute__((noinline)) pulp_nn_bn_quant_u8 ( + int32_t phi, + int32_t k, + int32_t lambda, + int8_t d + ) { + int32_t integer_image_phi = (k * phi) + lambda; + int32_t x = (integer_image_phi) >> d; + uint8_t res = clip8(x); + return res; +} +static uint8_t __attribute__((noinline)) pulp_nn_add_quant_u8 ( + uint8_t pix1, + uint8_t pix2, + int16_t m1, + int16_t m2, + int8_t d + ) { + uint32_t integer_image = pix1*m1 + pix2*m2; + uint32_t x = (integer_image) >> d; + uint8_t res = clip8(x); + return res; +} + +static int8_t __attribute__((noinline)) pulp_nn_quant_i8 ( + int32_t phi, + int16_t m, + int8_t d + ) { + int32_t x = (m * phi) >> d; + int8_t res = clips8(x); + return res; +} +static int8_t __attribute__((noinline)) pulp_nn_bn_quant_i8 ( + int32_t phi, + int32_t k, + int32_t lambda, + int8_t d + ) { + int32_t integer_image_phi = (k * phi) + lambda; + int32_t x = (integer_image_phi) >> d; + int8_t res = clips8(x); + return res; +} +static int8_t __attribute__((noinline)) pulp_nn_add_quant_i8 ( + int8_t pix1, + int8_t pix2, + int16_t m1, + int16_t m2, + int8_t d + ) { + int32_t integer_image = pix1*m1 + pix2*m2; + int32_t x = (integer_image) >> d; + int8_t res = clips8(x); + return res; +} + + +static uint8_t __attribute__((noinline)) pulp_nn_u4_quant(int input, int16_t * pThr) +{ + if(input <= pThr[7] ) + { + if( input <= pThr[3]) + { + if( input <= pThr[1]) + { + if( input <= pThr[0]) + return 0; + else + return 1; + } + else + { + if( input <= pThr[2]) + return 2; + else + return 3; + } + } + else + { + if( input <= pThr[5]) + { + if( input <= pThr[4]) + return 4; + else + return 5; + } + else + { + if( input <= pThr[6]) + return 6; + else + return 7; + } + } + } + else + { + if( input <= pThr[11]) + { + if( input <= pThr[9]) + { + if( input <= pThr[8]) + return 8; + else + return 9; + } + else + { + if( input <= pThr[10]) + return 10; + else + return 11; + } + } + else + { + if( input <= pThr[13]) + { + if( input <= pThr[12]) + return 12; + else + return 13; + } + else + { + if( input <= pThr[14]) + return 14; + else + return 15; + } + } + } +} + +static uint8_t __attribute__((noinline)) pulp_nn_u2_quant(int input, int16_t * pThr) +{ + if( input <= pThr[1]) + { + if( input <= pThr[0]) + { + return 0; + } + else + { + return 1; + } + } + else + { + if( input <= pThr[2]) + { + return 2; + } + else + { + return 3; + } + } +} + +/* + * Common + */ + + +static v4s __attribute__((noinline)) pulp_nn_i4_to_i8_r( int8_t *pSrc) +{ + v4s Src = *((v4s*) pSrc); + int8_t bext1, bext2, bext3, bext4; + + bext1 = (int8_t) bitext((int) Src, 4, 0); + bext2 = (int8_t) bitext((int) Src, 4, 4); + bext3 = (int8_t) bitext((int) Src, 4, 8); + bext4 = (int8_t) bitext((int) Src, 4, 12); + v4s res = pack((int8_t) bext1, (int8_t) bext2, (int8_t) bext3, (int8_t) bext4); + + return res; +} + +static v4u __attribute__((noinline)) pulp_nn_u4_to_u8_r(uint8_t *pSrc) +{ + v4u Src = *((v4u*) pSrc); + uint8_t bext1, bext2, bext3, bext4; + + bext1 = (uint8_t) bitextu((unsigned int) Src, 4, 0); + bext2 = (uint8_t) bitextu((unsigned int) Src, 4, 4); + bext3 = (uint8_t) bitextu((unsigned int) Src, 4, 8); + bext4 = (uint8_t) bitextu((unsigned int) Src, 4, 12); + v4u res = pack((uint8_t) bext1, (uint8_t) bext2, (uint8_t) bext3, (uint8_t) bext4); + + return res; +} + +static v4s __attribute__((noinline)) pulp_nn_i2_to_i8_r( int8_t *pSrc) +{ + v4s Src = *((v4s*) pSrc); + int8_t bext1, bext2, bext3, bext4; + + bext1 = (int8_t) bitext((int) Src, 2, 0); + bext2 = (int8_t) bitext((int) Src, 2, 2); + bext3 = (int8_t) bitext((int) Src, 2, 4); + bext4 = (int8_t) bitext((int) Src, 2, 6); + v4s res = pack((int8_t) bext1, (int8_t) bext2, (int8_t) bext3, (int8_t) bext4); + + return res; +} + +static v4u __attribute__((noinline)) pulp_nn_u2_to_u8_r(uint8_t *pSrc) +{ + v4u Src = *((v4u*) pSrc); + uint8_t bext1, bext2, bext3, bext4; + + bext1 = (uint8_t) bitextu((unsigned int) Src, 2, 0); + bext2 = (uint8_t) bitextu((unsigned int) Src, 2, 2); + bext3 = (uint8_t) bitextu((unsigned int) Src, 2, 4); + bext4 = (uint8_t) bitextu((unsigned int) Src, 2, 6); + v4u res = pack((uint8_t) bext1, (uint8_t) bext2, (uint8_t) bext3, (uint8_t) bext4); + + return res; +} + +static v4s __attribute__((noinline)) pulp_nn_i2_to_i4_r(int8_t *pSrc) +{ + int8_t mask = 0xf0; + int8_t n_mask = ~ mask; + int8_t off = 0x04; + + v4s Src = *((v4s*) pSrc); + int8_t bext1, bext2, bext3, bext4; + int8_t out1, out2, out3, out4; + + bext1 = (int8_t) bitextu((int) Src, 2, 0); + bext2 = (int8_t) bitextu((int) Src, 2, 2); + bext3 = (int8_t) bitextu((int) Src, 2, 4); + bext4 = (int8_t) bitextu((int) Src, 2, 6); + + out1 = bitins(bext1, n_mask, bext2, mask, off); + out2 = bitins(bext3, n_mask, bext4, mask, off); + + bext1 = (int8_t) bitextu((int) Src, 2, 8); + bext2 = (int8_t) bitextu((int) Src, 2, 10); + bext3 = (int8_t) bitextu((int) Src, 2, 12); + bext4 = (int8_t) bitextu((int) Src, 2, 14); + + out3 = bitins(bext1, n_mask, bext2, mask, off); + out4 = bitins(bext3, n_mask, bext4, mask, off); + + v4s res = pack((int8_t) out1, (int8_t) out2, (int8_t) out3, (int8_t) out4); + + return res; +} + +static v4u __attribute__((noinline)) pulp_nn_u2_to_u4_r(uint8_t *pSrc) +{ + int8_t mask = 0xf0; + int8_t n_mask = ~ mask; + int8_t off = 0x04; + + v4u Src = *((v4u*) pSrc); + uint8_t bext1, bext2, bext3, bext4; + uint8_t out1, out2, out3, out4; + + bext1 = (uint8_t) bitextu((unsigned int) Src, 2, 0); + bext2 = (uint8_t) bitextu((unsigned int) Src, 2, 2); + bext3 = (uint8_t) bitextu((unsigned int) Src, 2, 4); + bext4 = (uint8_t) bitextu((unsigned int) Src, 2, 6); + + out1 = bitins(bext1, n_mask, bext2, mask, off); + out2 = bitins(bext3, n_mask, bext4, mask, off); + + bext1 = (uint8_t) bitextu((unsigned int) Src, 2, 8); + bext2 = (uint8_t) bitextu((unsigned int) Src, 2, 10); + bext3 = (uint8_t) bitextu((unsigned int) Src, 2, 12); + bext4 = (uint8_t) bitextu((unsigned int) Src, 2, 14); + + out3 = bitins(bext1, n_mask, bext2, mask, off); + out4 = bitins(bext3, n_mask, bext4, mask, off); + + v4u res = pack((uint8_t) out1, (uint8_t) out2, (uint8_t) out3, (uint8_t) out4); + + return res; +} + +static int8_t *__attribute__((always_inline)) pulp_nn_i4_to_i8( int8_t *pSrc, int8_t *pDst) +{ + v4s Src = *((v4s*) pSrc); + int8_t bext1, bext2, bext3, bext4; + + pSrc+=4; + + bext1 = (int8_t) bitext((int) Src, 4, 0); + bext2 = (int8_t) bitext((int) Src, 4, 4); + bext3 = (int8_t) bitext((int) Src, 4, 8); + bext4 = (int8_t) bitext((int) Src, 4, 12); + *((v4s*)pDst) = pack((int8_t) bext1, (int8_t) bext2, (int8_t) bext3, (int8_t) bext4); + MemoryFence(); + pDst+=4; + bext1 = (int8_t) bitext((int) Src, 4, 16); + bext2 = (int8_t) bitext((int) Src, 4, 20); + bext3 = (int8_t) bitext((int) Src, 4, 24); + bext4 = (int8_t) bitext((int) Src, 4, 28); + *((v4s*)pDst) = pack((int8_t) bext1, (int8_t) bext2, (int8_t) bext3, (int8_t) bext4); + + return pSrc; +} + +static uint8_t *__attribute__((always_inline)) pulp_nn_u4_to_u8(uint8_t *pSrc, uint8_t *pDst) +{ + v4u Src = *((v4u*) pSrc); + uint8_t bext1, bext2, bext3, bext4; + + pSrc+=4; + + bext1 = (uint8_t) bitextu((unsigned int) Src, 4, 0); + bext2 = (uint8_t) bitextu((unsigned int) Src, 4, 4); + bext3 = (uint8_t) bitextu((unsigned int) Src, 4, 8); + bext4 = (uint8_t) bitextu((unsigned int) Src, 4, 12); + *((v4u*)pDst) = pack((uint8_t) bext1, (uint8_t) bext2, (uint8_t) bext3, (uint8_t) bext4); + MemoryFence(); + pDst+=4; + bext1 = (uint8_t) bitextu((unsigned int) Src, 4, 16); + bext2 = (uint8_t) bitextu((unsigned int) Src, 4, 20); + bext3 = (uint8_t) bitextu((unsigned int) Src, 4, 24); + bext4 = (uint8_t) bitextu((unsigned int) Src, 4, 28); + *((v4u*)pDst) = pack((uint8_t) bext1, (uint8_t) bext2, (uint8_t) bext3, (uint8_t) bext4); + + return pSrc; +} + +static int8_t *__attribute__((always_inline)) pulp_nn_i2_to_i8( int8_t * pSrc, int8_t * pDst) +{ + v4s Src = *((v4s*) pSrc); + int8_t bext1, bext2, bext3, bext4; + + pSrc+=4; + + bext1 = (int8_t) bitext((int) Src, 2, 0); + bext2 = (int8_t) bitext((int) Src, 2, 2); + bext3 = (int8_t) bitext((int) Src, 2, 4); + bext4 = (int8_t) bitext((int) Src, 2, 6); + *((v4s*)pDst) = pack((int8_t) bext1, (int8_t) bext2, (int8_t) bext3, (int8_t) bext4); + MemoryFence(); + pDst+=4; + bext1 = (int8_t) bitext((int) Src, 2, 8); + bext2 = (int8_t) bitext((int) Src, 2, 10); + bext3 = (int8_t) bitext((int) Src, 2, 12); + bext4 = (int8_t) bitext((int) Src, 2, 14); + *((v4s*)pDst) = pack((int8_t) bext1, (int8_t) bext2, (int8_t) bext3, (int8_t) bext4); + MemoryFence(); + pDst+=4; + bext1 = (int8_t) bitext((int) Src, 2, 16); + bext2 = (int8_t) bitext((int) Src, 2, 18); + bext3 = (int8_t) bitext((int) Src, 2, 20); + bext4 = (int8_t) bitext((int) Src, 2, 22); + *((v4s*)pDst) = pack((int8_t) bext1, (int8_t) bext2, (int8_t) bext3, (int8_t) bext4); + MemoryFence(); + pDst+=4; + bext1 = (int8_t) bitext((int) Src, 2, 24); + bext2 = (int8_t) bitext((int) Src, 2, 26); + bext3 = (int8_t) bitext((int) Src, 2, 28); + bext4 = (int8_t) bitext((int) Src, 2, 30); + *((v4s*)pDst) = pack((int8_t) bext1, (int8_t) bext2, (int8_t) bext3, (int8_t) bext4); + + return pSrc; +} + +static uint8_t *__attribute__((always_inline)) pulp_nn_u2_to_u8(uint8_t * pSrc, uint8_t * pDst) +{ + v4u Src = *((v4u*) pSrc); + uint8_t bext1, bext2, bext3, bext4; + + pSrc+=4; + + bext1 = (uint8_t) bitextu((unsigned int) Src, 2, 0); + bext2 = (uint8_t) bitextu((unsigned int) Src, 2, 2); + bext3 = (uint8_t) bitextu((unsigned int) Src, 2, 4); + bext4 = (uint8_t) bitextu((unsigned int) Src, 2, 6); + *((v4u*)pDst) = pack((uint8_t) bext1, (uint8_t) bext2, (uint8_t) bext3, (uint8_t) bext4); + MemoryFence(); + pDst+=4; + bext1 = (uint8_t) bitextu((unsigned int) Src, 2, 8); + bext2 = (uint8_t) bitextu((unsigned int) Src, 2, 10); + bext3 = (uint8_t) bitextu((unsigned int) Src, 2, 12); + bext4 = (uint8_t) bitextu((unsigned int) Src, 2, 14); + *((v4u*)pDst) = pack((uint8_t) bext1, (uint8_t) bext2, (uint8_t) bext3, (uint8_t) bext4); + MemoryFence(); + pDst+=4; + bext1 = (uint8_t) bitextu((unsigned int) Src, 2, 16); + bext2 = (uint8_t) bitextu((unsigned int) Src, 2, 18); + bext3 = (uint8_t) bitextu((unsigned int) Src, 2, 20); + bext4 = (uint8_t) bitextu((unsigned int) Src, 2, 22); + *((v4u*)pDst) = pack((uint8_t) bext1, (uint8_t) bext2, (uint8_t) bext3, (uint8_t) bext4); + MemoryFence(); + pDst+=4; + bext1 = (uint8_t) bitextu((unsigned int) Src, 2, 24); + bext2 = (uint8_t) bitextu((unsigned int) Src, 2, 26); + bext3 = (uint8_t) bitextu((unsigned int) Src, 2, 28); + bext4 = (uint8_t) bitextu((unsigned int) Src, 2, 30); + *((v4u*)pDst) = pack((uint8_t) bext1, (uint8_t) bext2, (uint8_t) bext3, (uint8_t) bext4); + + return pSrc; +} + +static int8_t *__attribute__((always_inline)) pulp_nn_i2_to_i4( int8_t * pSrc, int8_t * pDst) +{ + int8_t mask = 0xf0; + int8_t n_mask = ~ mask; + int8_t off = 0x04; + + v4s Src = *((v4s*) pSrc); + int8_t bext1, bext2, bext3, bext4; + int8_t out1, out2, out3, out4; + + pSrc+=4; + + bext1 = (int8_t) bitext((int) Src, 2, 0); + bext2 = (int8_t) bitext((int) Src, 2, 2); + bext3 = (int8_t) bitext((int) Src, 2, 4); + bext4 = (int8_t) bitext((int) Src, 2, 6); + + out1 = bitins(bext1, n_mask, bext2, mask, off); + out2 = bitins(bext3, n_mask, bext4, mask, off); + MemoryFence(); + + bext1 = (int8_t) bitext((int) Src, 2, 8); + bext2 = (int8_t) bitext((int) Src, 2, 10); + bext3 = (int8_t) bitext((int) Src, 2, 12); + bext4 = (int8_t) bitext((int) Src, 2, 14); + + out3 = bitins(bext1, n_mask, bext2, mask, off); + out4 = bitins(bext3, n_mask, bext4, mask, off); + + *((v4s*)pDst) = pack((int8_t) out1, (int8_t) out2, (int8_t) out3, (int8_t) out4); + MemoryFence(); + + pDst+=4; + bext1 = (int8_t) bitext((int) Src, 2, 16); + bext2 = (int8_t) bitext((int) Src, 2, 18); + bext3 = (int8_t) bitext((int) Src, 2, 20); + bext4 = (int8_t) bitext((int) Src, 2, 22); + + out1 = bitins(bext1, n_mask, bext2, mask, off); + out2 = bitins(bext3, n_mask, bext4, mask, off); + MemoryFence(); + + bext1 = (int8_t) bitext((int) Src, 2, 24); + bext2 = (int8_t) bitext((int) Src, 2, 26); + bext3 = (int8_t) bitext((int) Src, 2, 28); + bext4 = (int8_t) bitext((int) Src, 2, 30); + + out3 = bitins(bext1, n_mask, bext2, mask, off); + out4 = bitins(bext3, n_mask, bext4, mask, off); + + *((v4s*)pDst) = pack((int8_t) out1, (int8_t) out2, (int8_t) out3, (int8_t) out4); + + return pSrc; +} + +static uint8_t *__attribute__((always_inline)) pulp_nn_u2_to_u4( uint8_t * pSrc, uint8_t * pDst) +{ + int8_t mask = 0xf0; + int8_t n_mask = ~ mask; + int8_t off = 0x04; + + v4u Src = *((v4u*) pSrc); + uint8_t bext1, bext2, bext3, bext4; + uint8_t out1, out2, out3, out4; + + pSrc+=4; + + bext1 = (uint8_t) bitextu((unsigned int) Src, 2, 0); + bext2 = (uint8_t) bitextu((unsigned int) Src, 2, 2); + bext3 = (uint8_t) bitextu((unsigned int) Src, 2, 4); + bext4 = (uint8_t) bitextu((unsigned int) Src, 2, 6); + + out1 = bitins(bext1, n_mask, bext2, mask, off); + out2 = bitins(bext3, n_mask, bext4, mask, off); + MemoryFence(); + + bext1 = (uint8_t) bitextu((unsigned int) Src, 2, 8); + bext2 = (uint8_t) bitextu((unsigned int) Src, 2, 10); + bext3 = (uint8_t) bitextu((unsigned int) Src, 2, 12); + bext4 = (uint8_t) bitextu((unsigned int) Src, 2, 14); + + out3 = bitins(bext1, n_mask, bext2, mask, off); + out4 = bitins(bext3, n_mask, bext4, mask, off); + + *((v4u*)pDst) = pack((uint8_t) out1, (uint8_t) out2, (uint8_t) out3, (uint8_t) out4); + MemoryFence(); + + pDst+=4; + bext1 = (uint8_t) bitextu((unsigned int) Src, 2, 16); + bext2 = (uint8_t) bitextu((unsigned int) Src, 2, 18); + bext3 = (uint8_t) bitextu((unsigned int) Src, 2, 20); + bext4 = (uint8_t) bitextu((unsigned int) Src, 2, 22); + + out1 = bitins(bext1, n_mask, bext2, mask, off); + out2 = bitins(bext3, n_mask, bext4, mask, off); + MemoryFence(); + + bext1 = (uint8_t) bitextu((unsigned int) Src, 2, 24); + bext2 = (uint8_t) bitextu((unsigned int) Src, 2, 26); + bext3 = (uint8_t) bitextu((unsigned int) Src, 2, 28); + bext4 = (uint8_t) bitextu((unsigned int) Src, 2, 30); + + out3 = bitins(bext1, n_mask, bext2, mask, off); + out4 = bitins(bext3, n_mask, bext4, mask, off); + + *((v4u*)pDst) = pack((uint8_t) out1, (uint8_t) out2, (uint8_t) out3, (uint8_t) out4); + + return pSrc; +} + +/* + * XpulpV2 + */ + +static void __attribute__((noinline)) pulp_zero_mem(uint8_t * pBuffer, unsigned int size) +{ + int lfover = size &0x3; + for (int i=0; i<(size>>2); i++) + { + *((v4u *)pBuffer) = (v4u){0,0,0,0}; + MemoryFence(); + pBuffer+=4; + } + while(lfover) + { + *pBuffer++=0; + lfover--; + } +} + +static void __attribute__((noinline)) pulp_nn_im2col_u2_to_u8(uint8_t * pInput, uint8_t * pOutput, unsigned int blockSize) +{ + unsigned int blkCnt = blockSize >> 4u; + int lfover = blockSize & 0x0f; + for (int i = 0; i> 4u; + int lfover = blockSize & 0x0f; + for (int i = 0; i> 3u; + int lfover = blockSize & 0x07; + for (int i = 0; i> 3u; + int lfover = blockSize & 0x07; + for (int i = 0; i> 2u; + int lfover = blockSize & 0x03; + for (int i = 0; i> 2u; + int lfover = blockSize & 0x03; + for (int i = 0; i> 4u; + int lfover = blockSize & 0x0f; + for (int i = 0; i> 4u; + int lfover = blockSize & 0x0f; + for (int i = 0; i> 4u; + int lfover = blockSize & 0x0f; + for (int i = 0; i> 4u; + int lfover = blockSize & 0x0f; + for (int i = 0; i> 4u; + int lfover = blockSize & 0x0f; + for (int i = 0; i> 4u; + int lfover = blockSize & 0x0f; + for (int i = 0; i> 3u; + int lfover = blockSize & 0x07; + for (int i = 0; i> 3u; + int lfover = blockSize & 0x07; + for (int i = 0; i> 3u; + int lfover = blockSize & 0x07; + for (int i = 0; i> 3u; + int lfover = blockSize & 0x07; + for (int i = 0; i> 2u; + int lfover = blockSize & 0x03; + for (int i = 0; i> 2u; + int lfover = blockSize & 0x03; + for (int i = 0; i> 2; + + while(cnt > 0u) + { + inp = *((v4u*)pIn); + com = *((v4u*)pCom); + + *((v4u*)pIn) = max4(inp, com); + + pCom+=4; + pIn+=4; + cnt--; + } + + int left = length & 0x3; + while (left>0u) + { + if(*pIn<*pCom) + *pIn=*pCom; + + pIn++; + pCom++; + left--; + } +} + +static void __attribute__((noinline)) pulp_nn_compare_and_replace_if_larger_i8( + int8_t * base, int8_t * target, uint16_t length) { + int8_t *pIn = base; + int8_t *pCom = target; + v4s inp; + v4s com; + int cnt = length >> 2; + + while (cnt > 0u) { + inp = *((v4s *)pIn); + com = *((v4s *)pCom); + + *((v4s *)pIn) = maxs4(inp, com); + + pCom += 4; + pIn += 4; + cnt--; + } + + int left = length & 0x3; + while (left > 0u) { + if (*pIn < *pCom) + *pIn = *pCom; + + pIn++; + pCom++; + left--; + } +} + +static void __attribute__((noinline)) pulp_nn_avg_and_replace_u8(uint8_t * base, + uint8_t * target, + uint16_t length) +{ + uint8_t *pIn = base; + uint8_t *pCom = target; + + while (length>0u) + { + *pIn = ((*pIn + *pCom) >> 1); + + pIn++; + pCom++; + length--; + } +} + +static void __attribute__((noinline)) pulp_nn_compare_and_replace_if_larger_u4(uint8_t * base, + uint8_t * target, + uint16_t length) +{ + int8_t mask = 0xf0; + int8_t n_mask = ~ mask; + int8_t off = 0x04; + + uint8_t *pIn = base; + uint8_t *pCom = target; + v4u inp[2]; + v4u com[2]; + uint8_t *out; + int cnt = length >> 2; + + while(cnt > 0u) + { + pulp_nn_u4_to_u8(pIn, (uint8_t *)inp); + pulp_nn_u4_to_u8(pCom, (uint8_t *)com); + + *((v4u *)out) = max4(inp[0], com[0]); + + *((uint8_t*)pIn) = bitins(*out, n_mask, *(out + 1), mask, off); + pIn++; + *((uint8_t*)pIn) = bitins(*(out + 2), n_mask, *(out + 3), mask, off); + pIn++; + + *((v4u *)out) = max4(inp[1], com[1]); + + *((uint8_t*)pIn) = bitins(*out, n_mask, *(out + 1), mask, off); + pIn++; + *((uint8_t*)pIn) = bitins(*(out + 2), n_mask, *(out + 3), mask, off); + pIn++; + + pCom+=4; + cnt--; + } + + int left = length & 0x3; + while (left>0u) + { + uint8_t inA0 = (uint8_t) bitextu((unsigned int) *pIn, 4, 0); + uint8_t inA1 = (uint8_t) bitextu((unsigned int) *pIn, 4, 4); + uint8_t inB0 = (uint8_t) bitextu((unsigned int) *pCom, 4, 0); + uint8_t inB1 = (uint8_t) bitextu((unsigned int) *pCom, 4, 4); + + if(inA0> 2; + + while(cnt > 0u) + { + pulp_nn_i4_to_i8(pIn, (int8_t *)inp); + pulp_nn_i4_to_i8(pCom, (int8_t *)com); + + *((v4s *)out) = maxs4(inp[0], com[0]); + + *((int8_t*)pIn) = bitins(*out, n_mask, *(out + 1), mask, off); + pIn++; + *((int8_t*)pIn) = bitins(*(out + 2), n_mask, *(out + 3), mask, off); + pIn++; + + *((v4s *)out) = maxs4(inp[1], com[1]); + + *((int8_t*)pIn) = bitins(*out, n_mask, *(out + 1), mask, off); + pIn++; + *((int8_t*)pIn) = bitins(*(out + 2), n_mask, *(out + 3), mask, off); + pIn++; + + pCom+=4; + cnt--; + } + + int left = length & 0x3; + while (left>0u) + { + int8_t inA0 = (int8_t) bitext((int) *pIn, 4, 0); + int8_t inA1 = (int8_t) bitext((int) *pIn, 4, 4); + int8_t inB0 = (int8_t) bitext((int) *pCom, 4, 0); + int8_t inB1 = (int8_t) bitext((int) *pCom, 4, 4); + + if(inA00u) + { + uint8_t inA0 = (uint8_t) bitextu((unsigned int) *pIn, 4, 0); + uint8_t inA1 = (uint8_t) bitextu((unsigned int) *pIn, 4, 4); + uint8_t inB0 = (uint8_t) bitextu((unsigned int) *pCom, 4, 0); + uint8_t inB1 = (uint8_t) bitextu((unsigned int) *pCom, 4, 4); + + inA0 = ((inA0 + inB0) >> 1); + inA1 = ((inA1 + inB1) >> 1); + + *((uint8_t*)pIn) = bitins(inA0, n_mask, inA1, mask, off); + + pIn++; + pCom++; + length--; + } +} + +static void __attribute__((noinline)) pulp_nn_compare_and_replace_if_larger_u2(uint8_t * base, + uint8_t * target, + uint16_t length) +{ + int8_t mask2 = 0x0c; + int8_t n_mask2 = ~ mask2; + int8_t mask4 = 0x30; + int8_t n_mask4 = ~ mask4; + int8_t mask6 = 0xc0; + int8_t n_mask6 = ~ mask6; + int8_t off2 = 2; + int8_t off4 = 4; + int8_t off6 = 6; + + uint8_t *pIn = base; + uint8_t *pCom = target; + v4u inp[4]; + v4u com[4]; + uint8_t *out; + int cnt = length >> 2; + + while(cnt > 0u) + { + pulp_nn_u2_to_u8(pIn, inp); + pulp_nn_u2_to_u8(pCom, com); + + *((v4u*)out) = max4(inp[0], com[0]); + + uint8_t inA = (uint8_t) bitins(*out, n_mask2, *(out + 1), mask2, off2); + inA = bitins(inA, n_mask4, *(out + 2), mask4, off4); + *((uint8_t*)pIn) = bitins(inA, n_mask6, *(out + 3), mask6, off6); + pIn++; + + *((v4u*)out) = max4(inp[1], com[1]); + + inA = (uint8_t) bitins(*out, n_mask2, *(out + 1), mask2, off2); + inA = bitins(inA, n_mask4, *(out + 2), mask4, off4); + *((uint8_t*)pIn) = bitins(inA, n_mask6, *(out + 3), mask6, off6); + pIn++; + + *((v4u*)out) = max4(inp[2], com[2]); + + inA = (uint8_t) bitins(*out, n_mask2, *(out + 1), mask2, off2); + inA = bitins(inA, n_mask4, *(out + 2), mask4, off4); + *((uint8_t*)pIn) = bitins(inA, n_mask6, *(out + 3), mask6, off6); + pIn++; + + *((v4u*)out) = max4(inp[3], com[3]); + + inA = (uint8_t) bitins(*out, n_mask2, *(out + 1), mask2, off2); + inA = bitins(inA, n_mask4, *(out + 2), mask4, off4); + *((uint8_t*)pIn) = bitins(inA, n_mask6, *(out + 3), mask6, off6); + pIn++; + + pCom+=4; + cnt--; + } + + int left = length & 0x3; + while (left>0u) + { + uint8_t inA0 = (uint8_t) bitextu((unsigned int) *pIn, 2, 0); + uint8_t inA1 = (uint8_t) bitextu((unsigned int) *pIn, 2, 2); + uint8_t inA2 = (uint8_t) bitextu((unsigned int) *pIn, 2, 4); + uint8_t inA3 = (uint8_t) bitextu((unsigned int) *pIn, 2, 6); + v4u inA4 = pack((uint8_t) inA0, (uint8_t) inA1, (uint8_t) inA2, (uint8_t) inA3); + uint8_t inB0 = (uint8_t) bitextu((unsigned int) *pCom, 2, 0); + uint8_t inB1 = (uint8_t) bitextu((unsigned int) *pCom, 2, 2); + uint8_t inB2 = (uint8_t) bitextu((unsigned int) *pCom, 2, 4); + uint8_t inB3 = (uint8_t) bitextu((unsigned int) *pCom, 2, 6); + v4u inB4 = pack((uint8_t) inB0, (uint8_t) inB1, (uint8_t) inB2, (uint8_t) inB3); + + *((v4u*)out) = max4(inA4, inB4); + + uint8_t inA = (uint8_t) bitins(*out, n_mask2, *(out + 1), mask2, off2); + inA = bitins(inA, n_mask4, *(out + 2), mask4, off4); + *((uint8_t*)pIn) = bitins(inA, n_mask6, *(out + 3), mask6, off6); + + pIn++; + pCom++; + left--; + } +} + + +static void __attribute__((noinline)) pulp_nn_compare_and_replace_if_larger_i2(int8_t * base, + int8_t * target, + uint16_t length) +{ + int8_t mask2 = 0x0c; + int8_t n_mask2 = ~ mask2; + int8_t mask4 = 0x30; + int8_t n_mask4 = ~ mask4; + int8_t mask6 = 0xc0; + int8_t n_mask6 = ~ mask6; + int8_t off2 = 2; + int8_t off4 = 4; + int8_t off6 = 6; + + int8_t *pIn = base; + int8_t *pCom = target; + v4s inp[4]; + v4s com[4]; + int8_t *out; + int cnt = length >> 2; + + while(cnt > 0u) + { + pulp_nn_i2_to_i8(pIn, inp); + pulp_nn_i2_to_i8(pCom, com); + + *((v4s*)out) = maxs4(inp[0], com[0]); + + int8_t inA = (int8_t) bitins(*out, n_mask2, *(out + 1), mask2, off2); + inA = bitins(inA, n_mask4, *(out + 2), mask4, off4); + *((int8_t*)pIn) = bitins(inA, n_mask6, *(out + 3), mask6, off6); + pIn++; + + *((v4s*)out) = maxs4(inp[1], com[1]); + + inA = (int8_t) bitins(*out, n_mask2, *(out + 1), mask2, off2); + inA = bitins(inA, n_mask4, *(out + 2), mask4, off4); + *((int8_t*)pIn) = bitins(inA, n_mask6, *(out + 3), mask6, off6); + pIn++; + + *((v4s*)out) = maxs4(inp[2], com[2]); + + inA = (int8_t) bitins(*out, n_mask2, *(out + 1), mask2, off2); + inA = bitins(inA, n_mask4, *(out + 2), mask4, off4); + *((int8_t*)pIn) = bitins(inA, n_mask6, *(out + 3), mask6, off6); + pIn++; + + *((v4s*)out) = maxs4(inp[3], com[3]); + + inA = (int8_t) bitins(*out, n_mask2, *(out + 1), mask2, off2); + inA = bitins(inA, n_mask4, *(out + 2), mask4, off4); + *((int8_t*)pIn) = bitins(inA, n_mask6, *(out + 3), mask6, off6); + pIn++; + + pCom+=4; + cnt--; + } + + int left = length & 0x3; + while (left>0u) + { + int8_t inA0 = (int8_t) bitext((unsigned int) *pIn, 2, 0); + int8_t inA1 = (int8_t) bitext((unsigned int) *pIn, 2, 2); + int8_t inA2 = (int8_t) bitext((unsigned int) *pIn, 2, 4); + int8_t inA3 = (int8_t) bitext((unsigned int) *pIn, 2, 6); + v4s inA4 = pack((int8_t) inA0, (int8_t) inA1, (int8_t) inA2, (int8_t) inA3); + int8_t inB0 = (int8_t) bitext((unsigned int) *pCom, 2, 0); + int8_t inB1 = (int8_t) bitext((unsigned int) *pCom, 2, 2); + int8_t inB2 = (int8_t) bitext((unsigned int) *pCom, 2, 4); + int8_t inB3 = (int8_t) bitext((unsigned int) *pCom, 2, 6); + v4s inB4 = pack((int8_t) inB0, (int8_t) inB1, (int8_t) inB2, (int8_t) inB3); + + *((v4s*)out) = maxs4(inA4, inB4); + + int8_t inA = (int8_t) bitins(*out, n_mask2, *(out + 1), mask2, off2); + inA = bitins(inA, n_mask4, *(out + 2), mask4, off4); + *((int8_t*)pIn) = bitins(inA, n_mask6, *(out + 3), mask6, off6); + + pIn++; + pCom++; + left--; + } +} + +static void __attribute__((noinline)) pulp_nn_avg_and_replace_u2(uint8_t * base, + uint8_t * target, + uint16_t length) +{ + int8_t mask2 = 0x0c; + int8_t n_mask2 = ~ mask2; + int8_t mask4 = 0x30; + int8_t n_mask4 = ~ mask4; + int8_t mask6 = 0xc0; + int8_t n_mask6 = ~ mask6; + int8_t off2 = 2; + int8_t off4 = 4; + int8_t off6 = 6; + + uint8_t *pIn = base; + uint8_t *pCom = target; + + while (length>0u) + { + uint8_t inA0 = (uint8_t) bitextu((unsigned int) *pIn, 2, 0); + uint8_t inA1 = (uint8_t) bitextu((unsigned int) *pIn, 2, 2); + uint8_t inA2 = (uint8_t) bitextu((unsigned int) *pIn, 2, 4); + uint8_t inA3 = (uint8_t) bitextu((unsigned int) *pIn, 2, 6); + + uint8_t inB0 = (uint8_t) bitextu((unsigned int) *pCom, 2, 0); + uint8_t inB1 = (uint8_t) bitextu((unsigned int) *pCom, 2, 2); + uint8_t inB2 = (uint8_t) bitextu((unsigned int) *pCom, 2, 4); + uint8_t inB3 = (uint8_t) bitextu((unsigned int) *pCom, 2, 6); + + inA0 = ((inA0 + inB0) >> 1); + inA1 = ((inA1 + inB1) >> 1); + inA2 = ((inA2 + inB2) >> 1); + inA3 = ((inA3 + inB3) >> 1); + + uint8_t inA = (uint8_t) bitins(inA0, n_mask2, inA1, mask2, off2); + inA = bitins(inA, n_mask4, inA2, mask4, off4); + *((uint8_t*)pIn) = bitins(inA, n_mask6, inA3, mask6, off6); + + pIn++; + pCom++; + length--; + } +} + +/* + * XpulpNN + */ + +static void __attribute__((noinline)) xpulp_nn_zero_mem_u8(uint8_t * pBuffer, unsigned int size) +{ + int lfover = size &0x3; + for (int i=0; i<(size>>2); i++) + { + *((v4u *)pBuffer) = (v4u){0,0,0,0}; + MemoryFence(); + pBuffer+=4; + } + while(lfover) + { + *pBuffer++=0; + lfover--; + } +} + +static void __attribute__((noinline)) xpulp_nn_zero_mem_u4(uint8_t * pBuffer, unsigned int size) +{ + int lfover = size &0x7; + for (int i=0; i<(size>>3); i++) + { + *((v4u *)pBuffer) = (v4u){0,0,0,0}; + MemoryFence(); + pBuffer+=4; + } + while(lfover) + { + *pBuffer++=0; + lfover-=2; + } +} + +static void __attribute__((noinline)) xpulp_nn_zero_mem_u2(uint8_t * pBuffer, unsigned int size) +{ + int lfover = size &0xf; + for (int i=0; i<(size>>4); i++) + { + *((v4u *)pBuffer) = (v4u){0,0,0,0}; + MemoryFence(); + pBuffer+=4; + } + while(lfover) + { + *pBuffer++=0; + lfover-=4; + } +} + + +static void __attribute__((noinline)) xpulp_tnn_zero_mem_ternary(uint8_t * pBuffer, unsigned int size, unsigned int uns) +{ + uint8_t pad_val = 0xd9; + uint32_t pad_vec = 0xd9d9d9d9; + if (uns) { + // if we are using an unsigned kernel, we need to pad with -1 because the hardware will add a +1 to ALL values! + pad_val = 0xff; + pad_vec = 0xffffffff; + } + int lfover = size &0xf; + for (int i=0; i<(size>>4); i++) + { + *((v4u *)pBuffer) = (v4u)pad_vec; + MemoryFence(); + pBuffer+=4; + } + while(lfover) + { + *pBuffer++=pad_val; + lfover-=4; + } +} + +static void __attribute__((noinline)) xpulp_nn_compare_and_replace_if_larger_u4(uint8_t * base, + uint8_t * target, + uint16_t length) +{ + int8_t mask = 0xf0; + int8_t n_mask = ~ mask; + int8_t off = 0x04; + + uint8_t *pIn = base; + uint8_t *pCom = target; + + int cnt = length >> 2; + + while(cnt > 0u) + { + *((uint32_t *)pIn) = max8(*((uint32_t *)pIn), *((uint32_t *)pCom)); + + pIn+=4; + pCom+=4; + + cnt--; + } + + int left = length & 0x3; + while (left>0u) + { + uint8_t inA0 = (uint8_t) bitextu((unsigned int) *pIn, 4, 0); + uint8_t inA1 = (uint8_t) bitextu((unsigned int) *pIn, 4, 4); + uint8_t inB0 = (uint8_t) bitextu((unsigned int) *pCom, 4, 0); + uint8_t inB1 = (uint8_t) bitextu((unsigned int) *pCom, 4, 4); + + if(inA0> 2; + + while (cnt > 0u) { + *((int32_t *)pIn) = maxs8(*((int32_t *)pIn), *((int32_t *)pCom)); + + pIn += 4; + pCom += 4; + + cnt--; + } + + int left = length & 0x3; + while (left > 0u) { + int8_t inA0 = (int8_t)bitext((int)*pIn, 4, 0); + int8_t inA1 = (int8_t)bitext((int)*pIn, 4, 4); + int8_t inB0 = (int8_t)bitext((int)*pCom, 4, 0); + int8_t inB1 = (int8_t)bitext((int)*pCom, 4, 4); + + if (inA0 < inB0) + inA0 = inB0; + + if (inA1 < inB1) + inA1 = inB1; + + *((int8_t *)pIn) = bitins(inA0, n_mask, inA1, mask, off); + + pIn++; + pCom++; + left--; + } +} + +static void __attribute__((noinline)) xpulp_nn_avg_and_replace_u4(uint8_t * base, + uint8_t * target, + uint16_t length) +{ + int8_t mask = 0xf0; + int8_t n_mask = ~ mask; + int8_t off = 0x04; + + uint8_t *pIn = base; + uint8_t *pCom = target; + + int cnt = length >> 2; + + while (cnt > 0u) + { + *((uint32_t *)pIn) = avg8(*((uint32_t *)pIn), *((uint32_t *)pCom)); + + pIn+=4; + pCom+=4; + cnt--; + } + + int left = length & 0x3; + + while (left>0u) + { + uint8_t inA0 = (uint8_t) bitextu((unsigned int) *pIn, 4, 0); + uint8_t inA1 = (uint8_t) bitextu((unsigned int) *pIn, 4, 4); + uint8_t inB0 = (uint8_t) bitextu((unsigned int) *pCom, 4, 0); + uint8_t inB1 = (uint8_t) bitextu((unsigned int) *pCom, 4, 4); + + inA0 = ((inA0 + inB0) >> 1); + inA1 = ((inA1 + inB1) >> 1); + + *((uint8_t*)pIn) = bitins(inA0, n_mask, inA1, mask, off); + + pIn++; + pCom++; + length--; + } +} + +static void __attribute__((noinline)) xpulp_nn_compare_and_replace_if_larger_u2(uint8_t * base, + uint8_t * target, + uint16_t length) +{ + int8_t mask2 = 0x0c; + int8_t n_mask2 = ~ mask2; + int8_t mask4 = 0x30; + int8_t n_mask4 = ~ mask4; + int8_t mask6 = 0xc0; + int8_t n_mask6 = ~ mask6; + int8_t off2 = 2; + int8_t off4 = 4; + int8_t off6 = 6; + + uint8_t *pIn = base; + uint8_t *pCom = target; + uint8_t *out; + + int cnt = length >> 2; + + while(cnt > 0u) + { + *((uint32_t *)pIn) = max16(*((uint32_t *)pIn), *((uint32_t *)pCom)); + + pIn+=4; + pCom+=4; + cnt--; + } + + int left = length & 0x3; + while (left>0u) + { + uint8_t inA0 = (uint8_t) bitextu((unsigned int) *pIn, 2, 0); + uint8_t inA1 = (uint8_t) bitextu((unsigned int) *pIn, 2, 2); + uint8_t inA2 = (uint8_t) bitextu((unsigned int) *pIn, 2, 4); + uint8_t inA3 = (uint8_t) bitextu((unsigned int) *pIn, 2, 6); + v4u inA4 = pack((uint8_t) inA0, (uint8_t) inA1, (uint8_t) inA2, (uint8_t) inA3); + uint8_t inB0 = (uint8_t) bitextu((unsigned int) *pCom, 2, 0); + uint8_t inB1 = (uint8_t) bitextu((unsigned int) *pCom, 2, 2); + uint8_t inB2 = (uint8_t) bitextu((unsigned int) *pCom, 2, 4); + uint8_t inB3 = (uint8_t) bitextu((unsigned int) *pCom, 2, 6); + v4u inB4 = pack((uint8_t) inB0, (uint8_t) inB1, (uint8_t) inB2, (uint8_t) inB3); + + *((v4u*)out) = max4(inA4, inB4); + + uint8_t inA = (uint8_t) bitins(*out, n_mask2, *(out + 1), mask2, off2); + inA = bitins(inA, n_mask4, *(out + 2), mask4, off4); + *((uint8_t*)pIn) = bitins(inA, n_mask6, *(out + 3), mask6, off6); + + pIn++; + pCom++; + left--; + } +} +static void __attribute__((noinline)) xpulp_nn_compare_and_replace_if_larger_i2(int8_t * base, + int8_t * target, + uint16_t length) +{ + int8_t mask2 = 0x0c; + int8_t n_mask2 = ~ mask2; + int8_t mask4 = 0x30; + int8_t n_mask4 = ~ mask4; + int8_t mask6 = 0xc0; + int8_t n_mask6 = ~ mask6; + int8_t off2 = 2; + int8_t off4 = 4; + int8_t off6 = 6; + + int8_t *pIn = base; + int8_t *pCom = target; + int8_t *out; + + int cnt = length >> 2; + + while(cnt > 0u) + { + *((int32_t *)pIn) = maxs16(*((int32_t *)pIn), *((int32_t *)pCom)); + + pIn+=4; + pCom+=4; + cnt--; + } + + int left = length & 0x3; + while (left>0u) + { + int8_t inA0 = (int8_t) bitext((int) *pIn, 2, 0); + int8_t inA1 = (int8_t) bitext((int) *pIn, 2, 2); + int8_t inA2 = (int8_t) bitext((int) *pIn, 2, 4); + int8_t inA3 = (int8_t) bitext((int) *pIn, 2, 6); + v4s inA4 = pack((int8_t) inA0, (int8_t) inA1, (int8_t) inA2, (int8_t) inA3); + int8_t inB0 = (int8_t) bitext((int) *pCom, 2, 0); + int8_t inB1 = (int8_t) bitext((int) *pCom, 2, 2); + int8_t inB2 = (int8_t) bitext((int) *pCom, 2, 4); + int8_t inB3 = (int8_t) bitext((int) *pCom, 2, 6); + v4s inB4 = pack((int8_t) inB0, (int8_t) inB1, (int8_t) inB2, (int8_t) inB3); + + *((v4s*)out) = maxs4(inA4, inB4); + + int8_t inA = (int8_t) bitins(*out, n_mask2, *(out + 1), mask2, off2); + inA = bitins(inA, n_mask4, *(out + 2), mask4, off4); + *((int8_t*)pIn) = bitins(inA, n_mask6, *(out + 3), mask6, off6); + + pIn++; + pCom++; + left--; + } +} + +static void __attribute__((noinline)) xpulp_nn_avg_and_replace_u2(uint8_t * base, + uint8_t * target, + uint16_t length) +{ + int8_t mask2 = 0x0c; + int8_t n_mask2 = ~ mask2; + int8_t mask4 = 0x30; + int8_t n_mask4 = ~ mask4; + int8_t mask6 = 0xc0; + int8_t n_mask6 = ~ mask6; + int8_t off2 = 2; + int8_t off4 = 4; + int8_t off6 = 6; + + uint8_t *pIn = base; + uint8_t *pCom = target; + uint8_t *out; + + int cnt = length >> 2; + + while(cnt > 0u) + { + *((uint32_t *)pIn) = avg16(*((uint32_t *)pIn), *((uint32_t *)pCom)); + + pIn+=4; + pCom+=4; + cnt--; + } + + int left = length & 0x3; + while (left>0u) + { + uint8_t inA0 = (uint8_t) bitextu((unsigned int) *pIn, 2, 0); + uint8_t inA1 = (uint8_t) bitextu((unsigned int) *pIn, 2, 2); + uint8_t inA2 = (uint8_t) bitextu((unsigned int) *pIn, 2, 4); + uint8_t inA3 = (uint8_t) bitextu((unsigned int) *pIn, 2, 6); + v4u inA4 = pack((uint8_t) inA0, (uint8_t) inA1, (uint8_t) inA2, (uint8_t) inA3); + uint8_t inB0 = (uint8_t) bitextu((unsigned int) *pCom, 2, 0); + uint8_t inB1 = (uint8_t) bitextu((unsigned int) *pCom, 2, 2); + uint8_t inB2 = (uint8_t) bitextu((unsigned int) *pCom, 2, 4); + uint8_t inB3 = (uint8_t) bitextu((unsigned int) *pCom, 2, 6); + v4u inB4 = pack((uint8_t) inB0, (uint8_t) inB1, (uint8_t) inB2, (uint8_t) inB3); + + *((v4u*)out) = avg4(inA4, inB4); + + uint8_t inA = (uint8_t) bitins(*out, n_mask2, *(out + 1), mask2, off2); + inA = bitins(inA, n_mask4, *(out + 2), mask4, off4); + *((uint8_t*)pIn) = bitins(inA, n_mask6, *(out + 3), mask6, off6); + + pIn++; + pCom++; + left--; + } +} + +#endif diff --git a/rt_nn_tests/xptnn_conv/pulp_nn_utils_xpnn.h b/rt_nn_tests/xptnn_conv/pulp_nn_utils_xpnn.h new file mode 100644 index 0000000..0c783ae --- /dev/null +++ b/rt_nn_tests/xptnn_conv/pulp_nn_utils_xpnn.h @@ -0,0 +1,1937 @@ +/* + * pulp_nn_utils.h + * Nazareno Bruschi + * Alessandro Nadalini + * Georg Rutishauser + * + * Copyright (C) 2019-2020 ETH Zurich & University of Bologna + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef __PULPNN_UTILS__ +#define __PULPNN_UTILS__ + +#include "pmsis.h" +#ifdef GAP_SDK +#include "pulp.h" +#endif + +#define bitext(x,size,off) __builtin_pulp_bextract(x,size,off) +#define bitextu(x,size,off) __builtin_pulp_bextractu(x,size,off) +#define bitins(dst,not_mask_imm,src,mask_imm,off) __builtin_pulp_binsert(dst,not_mask_imm,src,mask_imm,off) +#define pack(x,y,z,t) __builtin_pulp_pack4(x,y,z,t) +#define max4(a,b) __builtin_pulp_maxu4(a,b) +#define maxs4(a, b) __builtin_pulp_max4(a, b) +#define max8(a, b) __builtin_pulp_maxu8(a, b) +#define maxs8(a, b) __builtin_pulp_max8(a, b) +#define max16(a, b) __builtin_pulp_maxu16(a, b) +#define maxs16(a, b) __builtin_pulp_max16(a, b) +#define max32(a,b) __builtin_pulp_maxusi(a,b) +#define maxs32(a,b) __builtin_pulp_maxsi(a,b) +#define min32(a,b) __builtin_pulp_minusi(a,b) +#define mins32(a,b) __builtin_pulp_minsi(a,b) +#define min4(a, b) __builtin_pulp_minu4(a, b) +#define mins4(a, b) __builtin_pulp_min4(a, b) +#define min8(a, b) __builtin_pulp_minu8(a, b) +#define mins8(a, b) __builtin_pulp_min8(a, b) +#define min16(a, b) __builtin_pulp_minu16(a, b) +#define mins16(a, b) __builtin_pulp_min16(a, b) +#define avg4(a,b) __builtin_pulp_avgu4(a,b) +#define avg8(a,b) __builtin_pulp_avgu8(a,b) +#define avg16(a,b) __builtin_pulp_avgu16(a,b) +#define log2(x) __builtin_pulp_fl1(x) +#define min(a,b) ((a)<(b)?(a):(b)) +#define SumDotp4(a, b, c) __builtin_pulp_sdotusp4(a, b, c) +#define SumDotp8(a, b, c) __builtin_pulp_sdotusp8(a, b, c) +#define SumDotp16(a, b, c) __builtin_pulp_sdotusp16(a, b, c) +#define SumDotps4(a, b, c) __builtin_pulp_sdotsp4(a, b, c) +#define SumDotps8(a, b, c) __builtin_pulp_sdotsp8(a, b, c) +#define SumDotps16(a, b, c) __builtin_pulp_sdotsp16(a, b, c) +#define clip4(x) __builtin_pulp_clipu_r(x, 15) +#define clip2(x) __builtin_pulp_clipu_r(x, 3) +#define clip8(x) __builtin_pulp_clipu_r(x, 255) + +#define clips4(x) __builtin_pulp_clip_r(x, 7) +#define clips2(x) __builtin_pulp_clip_r(x, 1) +#define clips8(x) __builtin_pulp_clip_r(x, 127) +#define MacLoadInit(a_update, b_update, a_reg, b_reg, ptr) __builtin_pulp_mlinitspr_v3(a_update, b_update, a_reg, b_reg, ptr) +#define MacLoadUpdate(ptr) __builtin_pulp_mlupdatespr_v3(ptr) +#define MacLoadAssign(ptr) __builtin_pulp_mlassignspr_v3(ptr) +#define MacLoad4(a_update, b_update, a_reg, b_reg, ptr, sum) __builtin_pulp_mlsdotsup4_v3(a_update, b_update, a_reg, b_reg, ptr, sum) +#define MacLoad8(a_update, b_update, a_reg, b_reg, ptr, sum) __builtin_pulp_mlsdotsup8_v3(a_update, b_update, a_reg, b_reg, ptr, sum) +#define MacLoad16(a_update, b_update, a_reg, b_reg, ptr, sum) __builtin_pulp_mlsdotsup16_v3(a_update, b_update, a_reg, b_reg, ptr, sum) +#define MacLoads4(a_update, b_update, a_reg, b_reg, ptr, sum) __builtin_pulp_mlsdotsp4_v3(a_update, b_update, a_reg, b_reg, ptr, sum) +#define MacLoads8(a_update, b_update, a_reg, b_reg, ptr, sum) __builtin_pulp_mlsdotsp8_v3(a_update, b_update, a_reg, b_reg, ptr, sum) +#define MacLoads16(a_update, b_update, a_reg, b_reg, ptr, sum) __builtin_pulp_mlsdotsp16_v3(a_update, b_update, a_reg, b_reg, ptr, sum) + +#define PACK_INT8_SIZE(x) (x) +#define PACK_INT4_SIZE(x) ((x) >> 1) +#define PACK_INT2_SIZE(x) ((x) >> 2) + +#define MemoryFence() asm volatile("":::"memory") + +#define LEGACY_MODE(x) asm volatile ("csrwi 0x010," x) +#define IVEC_FMT(x) asm volatile ("csrwi 0x00D," x) +#define MIXED_SKIP(x) asm volatile ("csrwi 0x00F," x) +#define A_ADDRESS(x) asm volatile ("csrw 0x100, %0" :: "r" (x)) +#define W_ADDRESS(x) asm volatile ("csrw 0x101, %0" :: "r" (x)) +#define A_STRIDE(x) asm volatile ("csrw 0x102, %0":: "r" (x)) +#define W_STRIDE(x) asm volatile ("csrw 0x103, %0":: "r" (x)) +#define A_ROLLBACK(x) asm volatile ("csrw 0x104, %0":: "r" (x)) +#define W_ROLLBACK(x) asm volatile ("csrw 0x105, %0":: "r" (x)) +#define A_SKIP(x) asm volatile ("csrwi 0x106," x) +#define W_SKIP(x) asm volatile ("csrwi 0x107," x) + +static uint8_t __attribute__((noinline)) pulp_nn_quant_u2 ( + int32_t phi, + int16_t m, + int8_t d + ) { + int32_t x = (m * phi) >> d; + uint8_t res = clip2(x); + return res; +} +static uint8_t __attribute__((noinline)) pulp_nn_bn_quant_u2 ( + int32_t phi, + int32_t k, + int32_t lambda, + int8_t d + ) { + int32_t integer_image_phi = (k * phi) + lambda; + int32_t x = (integer_image_phi) >> d; + uint8_t res = clip2(x); + return res; +} +static uint8_t __attribute__((noinline)) pulp_nn_add_quant_u2 ( + uint8_t pix1, + uint8_t pix2, + int16_t m1, + int16_t m2, + int8_t d + ) { + uint32_t integer_image = pix1*m1 + pix2*m2; + uint32_t x = (integer_image) >> d; + uint8_t res = clip2(x); + return res; +} + +static int8_t __attribute__((noinline)) pulp_nn_quant_i2 ( + int32_t phi, + int16_t m, + int8_t d + ) { + int32_t x = (m * phi) >> d; + int8_t res = clips2(x); + return res; +} +static int8_t __attribute__((noinline)) pulp_nn_bn_quant_i2 ( + int32_t phi, + int32_t k, + int32_t lambda, + int8_t d + ) { + int32_t integer_image_phi = (k * phi) + lambda; + int32_t x = (integer_image_phi) >> d; + int8_t res = clips2(x); + return res; +} +static int8_t __attribute__((noinline)) pulp_nn_add_quant_i2 ( + int8_t pix1, + int8_t pix2, + int16_t m1, + int16_t m2, + int8_t d + ) { + int32_t integer_image = pix1*m1 + pix2*m2; + int32_t x = (integer_image) >> d; + int8_t res = clips2(x); + return res; +} + +static uint8_t __attribute__((noinline)) pulp_nn_quant_u4 ( + int32_t phi, + int16_t m, + int8_t d + ) { + int32_t x = (m * phi) >> d; + uint8_t res = clip4(x); + return res; +} +static uint8_t __attribute__((noinline)) pulp_nn_bn_quant_u4 ( + int32_t phi, + int32_t k, + int32_t lambda, + int8_t d + ) { + int32_t integer_image_phi = (k * phi) + lambda; + int32_t x = (integer_image_phi) >> d; + uint8_t res = clip4(x); + return res; +} +static uint8_t __attribute__((noinline)) pulp_nn_add_quant_u4 ( + uint8_t pix1, + uint8_t pix2, + int16_t m1, + int16_t m2, + int8_t d + ) { + uint32_t integer_image = pix1*m1 + pix2*m2; + uint32_t x = (integer_image) >> d; + uint8_t res = clip4(x); + return res; +} + +static int8_t __attribute__((noinline)) pulp_nn_quant_i4 ( + int32_t phi, + int16_t m, + int8_t d + ) { + int32_t x = (m * phi) >> d; + int8_t res = clips4(x); + return res; +} +static int8_t __attribute__((noinline)) pulp_nn_bn_quant_i4 ( + int32_t phi, + int32_t k, + int32_t lambda, + int8_t d + ) { + int32_t integer_image_phi = (k * phi) + lambda; + int32_t x = (integer_image_phi) >> d; + int8_t res = clips4(x); + return res; +} +static int8_t __attribute__((noinline)) pulp_nn_add_quant_i4 ( + int8_t pix1, + int8_t pix2, + int16_t m1, + int16_t m2, + int8_t d + ) { + int32_t integer_image = pix1*m1 + pix2*m2; + int32_t x = (integer_image) >> d; + int8_t res = clips4(x); + return res; +} + +static uint8_t __attribute__((noinline)) pulp_nn_quant_u8 ( + int32_t phi, + int16_t m, + int8_t d + ) { + int32_t x = (m * phi) >> d; + uint8_t res = clip8(x); + return res; +} +static uint8_t __attribute__((noinline)) pulp_nn_bn_quant_u8 ( + int32_t phi, + int32_t k, + int32_t lambda, + int8_t d + ) { + int32_t integer_image_phi = (k * phi) + lambda; + int32_t x = (integer_image_phi) >> d; + uint8_t res = clip8(x); + return res; +} +static uint8_t __attribute__((noinline)) pulp_nn_add_quant_u8 ( + uint8_t pix1, + uint8_t pix2, + int16_t m1, + int16_t m2, + int8_t d + ) { + uint32_t integer_image = pix1*m1 + pix2*m2; + uint32_t x = (integer_image) >> d; + uint8_t res = clip8(x); + return res; +} + +static int8_t __attribute__((noinline)) pulp_nn_quant_i8 ( + int32_t phi, + int16_t m, + int8_t d + ) { + int32_t x = (m * phi) >> d; + int8_t res = clips8(x); + return res; +} +static int8_t __attribute__((noinline)) pulp_nn_bn_quant_i8 ( + int32_t phi, + int32_t k, + int32_t lambda, + int8_t d + ) { + int32_t integer_image_phi = (k * phi) + lambda; + int32_t x = (integer_image_phi) >> d; + int8_t res = clips8(x); + return res; +} +static int8_t __attribute__((noinline)) pulp_nn_add_quant_i8 ( + int8_t pix1, + int8_t pix2, + int16_t m1, + int16_t m2, + int8_t d + ) { + int32_t integer_image = pix1*m1 + pix2*m2; + int32_t x = (integer_image) >> d; + int8_t res = clips8(x); + return res; +} + + +static uint8_t __attribute__((noinline)) pulp_nn_u4_quant(int input, int16_t * pThr) +{ + if(input <= pThr[7] ) + { + if( input <= pThr[3]) + { + if( input <= pThr[1]) + { + if( input <= pThr[0]) + return 0; + else + return 1; + } + else + { + if( input <= pThr[2]) + return 2; + else + return 3; + } + } + else + { + if( input <= pThr[5]) + { + if( input <= pThr[4]) + return 4; + else + return 5; + } + else + { + if( input <= pThr[6]) + return 6; + else + return 7; + } + } + } + else + { + if( input <= pThr[11]) + { + if( input <= pThr[9]) + { + if( input <= pThr[8]) + return 8; + else + return 9; + } + else + { + if( input <= pThr[10]) + return 10; + else + return 11; + } + } + else + { + if( input <= pThr[13]) + { + if( input <= pThr[12]) + return 12; + else + return 13; + } + else + { + if( input <= pThr[14]) + return 14; + else + return 15; + } + } + } +} + +static uint8_t __attribute__((noinline)) pulp_nn_u2_quant(int input, int16_t * pThr) +{ + if( input <= pThr[1]) + { + if( input <= pThr[0]) + { + return 0; + } + else + { + return 1; + } + } + else + { + if( input <= pThr[2]) + { + return 2; + } + else + { + return 3; + } + } +} + +/* + * Common + */ + + +static v4s __attribute__((noinline)) pulp_nn_i4_to_i8_r( int8_t *pSrc) +{ + v4s Src = *((v4s*) pSrc); + int8_t bext1, bext2, bext3, bext4; + + bext1 = (int8_t) bitext((int) Src, 4, 0); + bext2 = (int8_t) bitext((int) Src, 4, 4); + bext3 = (int8_t) bitext((int) Src, 4, 8); + bext4 = (int8_t) bitext((int) Src, 4, 12); + v4s res = pack((int8_t) bext1, (int8_t) bext2, (int8_t) bext3, (int8_t) bext4); + + return res; +} + +static v4u __attribute__((noinline)) pulp_nn_u4_to_u8_r(uint8_t *pSrc) +{ + v4u Src = *((v4u*) pSrc); + uint8_t bext1, bext2, bext3, bext4; + + bext1 = (uint8_t) bitextu((unsigned int) Src, 4, 0); + bext2 = (uint8_t) bitextu((unsigned int) Src, 4, 4); + bext3 = (uint8_t) bitextu((unsigned int) Src, 4, 8); + bext4 = (uint8_t) bitextu((unsigned int) Src, 4, 12); + v4u res = pack((uint8_t) bext1, (uint8_t) bext2, (uint8_t) bext3, (uint8_t) bext4); + + return res; +} + +static v4s __attribute__((noinline)) pulp_nn_i2_to_i8_r( int8_t *pSrc) +{ + v4s Src = *((v4s*) pSrc); + int8_t bext1, bext2, bext3, bext4; + + bext1 = (int8_t) bitext((int) Src, 2, 0); + bext2 = (int8_t) bitext((int) Src, 2, 2); + bext3 = (int8_t) bitext((int) Src, 2, 4); + bext4 = (int8_t) bitext((int) Src, 2, 6); + v4s res = pack((int8_t) bext1, (int8_t) bext2, (int8_t) bext3, (int8_t) bext4); + + return res; +} + +static v4u __attribute__((noinline)) pulp_nn_u2_to_u8_r(uint8_t *pSrc) +{ + v4u Src = *((v4u*) pSrc); + uint8_t bext1, bext2, bext3, bext4; + + bext1 = (uint8_t) bitextu((unsigned int) Src, 2, 0); + bext2 = (uint8_t) bitextu((unsigned int) Src, 2, 2); + bext3 = (uint8_t) bitextu((unsigned int) Src, 2, 4); + bext4 = (uint8_t) bitextu((unsigned int) Src, 2, 6); + v4u res = pack((uint8_t) bext1, (uint8_t) bext2, (uint8_t) bext3, (uint8_t) bext4); + + return res; +} + +static v4s __attribute__((noinline)) pulp_nn_i2_to_i4_r(int8_t *pSrc) +{ + int8_t mask = 0xf0; + int8_t n_mask = ~ mask; + int8_t off = 0x04; + + v4s Src = *((v4s*) pSrc); + int8_t bext1, bext2, bext3, bext4; + int8_t out1, out2, out3, out4; + + bext1 = (int8_t) bitextu((int) Src, 2, 0); + bext2 = (int8_t) bitextu((int) Src, 2, 2); + bext3 = (int8_t) bitextu((int) Src, 2, 4); + bext4 = (int8_t) bitextu((int) Src, 2, 6); + + out1 = bitins(bext1, n_mask, bext2, mask, off); + out2 = bitins(bext3, n_mask, bext4, mask, off); + + bext1 = (int8_t) bitextu((int) Src, 2, 8); + bext2 = (int8_t) bitextu((int) Src, 2, 10); + bext3 = (int8_t) bitextu((int) Src, 2, 12); + bext4 = (int8_t) bitextu((int) Src, 2, 14); + + out3 = bitins(bext1, n_mask, bext2, mask, off); + out4 = bitins(bext3, n_mask, bext4, mask, off); + + v4s res = pack((int8_t) out1, (int8_t) out2, (int8_t) out3, (int8_t) out4); + + return res; +} + +static v4u __attribute__((noinline)) pulp_nn_u2_to_u4_r(uint8_t *pSrc) +{ + int8_t mask = 0xf0; + int8_t n_mask = ~ mask; + int8_t off = 0x04; + + v4u Src = *((v4u*) pSrc); + uint8_t bext1, bext2, bext3, bext4; + uint8_t out1, out2, out3, out4; + + bext1 = (uint8_t) bitextu((unsigned int) Src, 2, 0); + bext2 = (uint8_t) bitextu((unsigned int) Src, 2, 2); + bext3 = (uint8_t) bitextu((unsigned int) Src, 2, 4); + bext4 = (uint8_t) bitextu((unsigned int) Src, 2, 6); + + out1 = bitins(bext1, n_mask, bext2, mask, off); + out2 = bitins(bext3, n_mask, bext4, mask, off); + + bext1 = (uint8_t) bitextu((unsigned int) Src, 2, 8); + bext2 = (uint8_t) bitextu((unsigned int) Src, 2, 10); + bext3 = (uint8_t) bitextu((unsigned int) Src, 2, 12); + bext4 = (uint8_t) bitextu((unsigned int) Src, 2, 14); + + out3 = bitins(bext1, n_mask, bext2, mask, off); + out4 = bitins(bext3, n_mask, bext4, mask, off); + + v4u res = pack((uint8_t) out1, (uint8_t) out2, (uint8_t) out3, (uint8_t) out4); + + return res; +} + +static int8_t *__attribute__((always_inline)) pulp_nn_i4_to_i8( int8_t *pSrc, int8_t *pDst) +{ + v4s Src = *((v4s*) pSrc); + int8_t bext1, bext2, bext3, bext4; + + pSrc+=4; + + bext1 = (int8_t) bitext((int) Src, 4, 0); + bext2 = (int8_t) bitext((int) Src, 4, 4); + bext3 = (int8_t) bitext((int) Src, 4, 8); + bext4 = (int8_t) bitext((int) Src, 4, 12); + *((v4s*)pDst) = pack((int8_t) bext1, (int8_t) bext2, (int8_t) bext3, (int8_t) bext4); + MemoryFence(); + pDst+=4; + bext1 = (int8_t) bitext((int) Src, 4, 16); + bext2 = (int8_t) bitext((int) Src, 4, 20); + bext3 = (int8_t) bitext((int) Src, 4, 24); + bext4 = (int8_t) bitext((int) Src, 4, 28); + *((v4s*)pDst) = pack((int8_t) bext1, (int8_t) bext2, (int8_t) bext3, (int8_t) bext4); + + return pSrc; +} + +static uint8_t *__attribute__((always_inline)) pulp_nn_u4_to_u8(uint8_t *pSrc, uint8_t *pDst) +{ + v4u Src = *((v4u*) pSrc); + uint8_t bext1, bext2, bext3, bext4; + + pSrc+=4; + + bext1 = (uint8_t) bitextu((unsigned int) Src, 4, 0); + bext2 = (uint8_t) bitextu((unsigned int) Src, 4, 4); + bext3 = (uint8_t) bitextu((unsigned int) Src, 4, 8); + bext4 = (uint8_t) bitextu((unsigned int) Src, 4, 12); + *((v4u*)pDst) = pack((uint8_t) bext1, (uint8_t) bext2, (uint8_t) bext3, (uint8_t) bext4); + MemoryFence(); + pDst+=4; + bext1 = (uint8_t) bitextu((unsigned int) Src, 4, 16); + bext2 = (uint8_t) bitextu((unsigned int) Src, 4, 20); + bext3 = (uint8_t) bitextu((unsigned int) Src, 4, 24); + bext4 = (uint8_t) bitextu((unsigned int) Src, 4, 28); + *((v4u*)pDst) = pack((uint8_t) bext1, (uint8_t) bext2, (uint8_t) bext3, (uint8_t) bext4); + + return pSrc; +} + +static int8_t *__attribute__((always_inline)) pulp_nn_i2_to_i8( int8_t * pSrc, int8_t * pDst) +{ + v4s Src = *((v4s*) pSrc); + int8_t bext1, bext2, bext3, bext4; + + pSrc+=4; + + bext1 = (int8_t) bitext((int) Src, 2, 0); + bext2 = (int8_t) bitext((int) Src, 2, 2); + bext3 = (int8_t) bitext((int) Src, 2, 4); + bext4 = (int8_t) bitext((int) Src, 2, 6); + *((v4s*)pDst) = pack((int8_t) bext1, (int8_t) bext2, (int8_t) bext3, (int8_t) bext4); + MemoryFence(); + pDst+=4; + bext1 = (int8_t) bitext((int) Src, 2, 8); + bext2 = (int8_t) bitext((int) Src, 2, 10); + bext3 = (int8_t) bitext((int) Src, 2, 12); + bext4 = (int8_t) bitext((int) Src, 2, 14); + *((v4s*)pDst) = pack((int8_t) bext1, (int8_t) bext2, (int8_t) bext3, (int8_t) bext4); + MemoryFence(); + pDst+=4; + bext1 = (int8_t) bitext((int) Src, 2, 16); + bext2 = (int8_t) bitext((int) Src, 2, 18); + bext3 = (int8_t) bitext((int) Src, 2, 20); + bext4 = (int8_t) bitext((int) Src, 2, 22); + *((v4s*)pDst) = pack((int8_t) bext1, (int8_t) bext2, (int8_t) bext3, (int8_t) bext4); + MemoryFence(); + pDst+=4; + bext1 = (int8_t) bitext((int) Src, 2, 24); + bext2 = (int8_t) bitext((int) Src, 2, 26); + bext3 = (int8_t) bitext((int) Src, 2, 28); + bext4 = (int8_t) bitext((int) Src, 2, 30); + *((v4s*)pDst) = pack((int8_t) bext1, (int8_t) bext2, (int8_t) bext3, (int8_t) bext4); + + return pSrc; +} + +static uint8_t *__attribute__((always_inline)) pulp_nn_u2_to_u8(uint8_t * pSrc, uint8_t * pDst) +{ + v4u Src = *((v4u*) pSrc); + uint8_t bext1, bext2, bext3, bext4; + + pSrc+=4; + + bext1 = (uint8_t) bitextu((unsigned int) Src, 2, 0); + bext2 = (uint8_t) bitextu((unsigned int) Src, 2, 2); + bext3 = (uint8_t) bitextu((unsigned int) Src, 2, 4); + bext4 = (uint8_t) bitextu((unsigned int) Src, 2, 6); + *((v4u*)pDst) = pack((uint8_t) bext1, (uint8_t) bext2, (uint8_t) bext3, (uint8_t) bext4); + MemoryFence(); + pDst+=4; + bext1 = (uint8_t) bitextu((unsigned int) Src, 2, 8); + bext2 = (uint8_t) bitextu((unsigned int) Src, 2, 10); + bext3 = (uint8_t) bitextu((unsigned int) Src, 2, 12); + bext4 = (uint8_t) bitextu((unsigned int) Src, 2, 14); + *((v4u*)pDst) = pack((uint8_t) bext1, (uint8_t) bext2, (uint8_t) bext3, (uint8_t) bext4); + MemoryFence(); + pDst+=4; + bext1 = (uint8_t) bitextu((unsigned int) Src, 2, 16); + bext2 = (uint8_t) bitextu((unsigned int) Src, 2, 18); + bext3 = (uint8_t) bitextu((unsigned int) Src, 2, 20); + bext4 = (uint8_t) bitextu((unsigned int) Src, 2, 22); + *((v4u*)pDst) = pack((uint8_t) bext1, (uint8_t) bext2, (uint8_t) bext3, (uint8_t) bext4); + MemoryFence(); + pDst+=4; + bext1 = (uint8_t) bitextu((unsigned int) Src, 2, 24); + bext2 = (uint8_t) bitextu((unsigned int) Src, 2, 26); + bext3 = (uint8_t) bitextu((unsigned int) Src, 2, 28); + bext4 = (uint8_t) bitextu((unsigned int) Src, 2, 30); + *((v4u*)pDst) = pack((uint8_t) bext1, (uint8_t) bext2, (uint8_t) bext3, (uint8_t) bext4); + + return pSrc; +} + +static int8_t *__attribute__((always_inline)) pulp_nn_i2_to_i4( int8_t * pSrc, int8_t * pDst) +{ + int8_t mask = 0xf0; + int8_t n_mask = ~ mask; + int8_t off = 0x04; + + v4s Src = *((v4s*) pSrc); + int8_t bext1, bext2, bext3, bext4; + int8_t out1, out2, out3, out4; + + pSrc+=4; + + bext1 = (int8_t) bitext((int) Src, 2, 0); + bext2 = (int8_t) bitext((int) Src, 2, 2); + bext3 = (int8_t) bitext((int) Src, 2, 4); + bext4 = (int8_t) bitext((int) Src, 2, 6); + + out1 = bitins(bext1, n_mask, bext2, mask, off); + out2 = bitins(bext3, n_mask, bext4, mask, off); + MemoryFence(); + + bext1 = (int8_t) bitext((int) Src, 2, 8); + bext2 = (int8_t) bitext((int) Src, 2, 10); + bext3 = (int8_t) bitext((int) Src, 2, 12); + bext4 = (int8_t) bitext((int) Src, 2, 14); + + out3 = bitins(bext1, n_mask, bext2, mask, off); + out4 = bitins(bext3, n_mask, bext4, mask, off); + + *((v4s*)pDst) = pack((int8_t) out1, (int8_t) out2, (int8_t) out3, (int8_t) out4); + MemoryFence(); + + pDst+=4; + bext1 = (int8_t) bitext((int) Src, 2, 16); + bext2 = (int8_t) bitext((int) Src, 2, 18); + bext3 = (int8_t) bitext((int) Src, 2, 20); + bext4 = (int8_t) bitext((int) Src, 2, 22); + + out1 = bitins(bext1, n_mask, bext2, mask, off); + out2 = bitins(bext3, n_mask, bext4, mask, off); + MemoryFence(); + + bext1 = (int8_t) bitext((int) Src, 2, 24); + bext2 = (int8_t) bitext((int) Src, 2, 26); + bext3 = (int8_t) bitext((int) Src, 2, 28); + bext4 = (int8_t) bitext((int) Src, 2, 30); + + out3 = bitins(bext1, n_mask, bext2, mask, off); + out4 = bitins(bext3, n_mask, bext4, mask, off); + + *((v4s*)pDst) = pack((int8_t) out1, (int8_t) out2, (int8_t) out3, (int8_t) out4); + + return pSrc; +} + +static uint8_t *__attribute__((always_inline)) pulp_nn_u2_to_u4( uint8_t * pSrc, uint8_t * pDst) +{ + int8_t mask = 0xf0; + int8_t n_mask = ~ mask; + int8_t off = 0x04; + + v4u Src = *((v4u*) pSrc); + uint8_t bext1, bext2, bext3, bext4; + uint8_t out1, out2, out3, out4; + + pSrc+=4; + + bext1 = (uint8_t) bitextu((unsigned int) Src, 2, 0); + bext2 = (uint8_t) bitextu((unsigned int) Src, 2, 2); + bext3 = (uint8_t) bitextu((unsigned int) Src, 2, 4); + bext4 = (uint8_t) bitextu((unsigned int) Src, 2, 6); + + out1 = bitins(bext1, n_mask, bext2, mask, off); + out2 = bitins(bext3, n_mask, bext4, mask, off); + MemoryFence(); + + bext1 = (uint8_t) bitextu((unsigned int) Src, 2, 8); + bext2 = (uint8_t) bitextu((unsigned int) Src, 2, 10); + bext3 = (uint8_t) bitextu((unsigned int) Src, 2, 12); + bext4 = (uint8_t) bitextu((unsigned int) Src, 2, 14); + + out3 = bitins(bext1, n_mask, bext2, mask, off); + out4 = bitins(bext3, n_mask, bext4, mask, off); + + *((v4u*)pDst) = pack((uint8_t) out1, (uint8_t) out2, (uint8_t) out3, (uint8_t) out4); + MemoryFence(); + + pDst+=4; + bext1 = (uint8_t) bitextu((unsigned int) Src, 2, 16); + bext2 = (uint8_t) bitextu((unsigned int) Src, 2, 18); + bext3 = (uint8_t) bitextu((unsigned int) Src, 2, 20); + bext4 = (uint8_t) bitextu((unsigned int) Src, 2, 22); + + out1 = bitins(bext1, n_mask, bext2, mask, off); + out2 = bitins(bext3, n_mask, bext4, mask, off); + MemoryFence(); + + bext1 = (uint8_t) bitextu((unsigned int) Src, 2, 24); + bext2 = (uint8_t) bitextu((unsigned int) Src, 2, 26); + bext3 = (uint8_t) bitextu((unsigned int) Src, 2, 28); + bext4 = (uint8_t) bitextu((unsigned int) Src, 2, 30); + + out3 = bitins(bext1, n_mask, bext2, mask, off); + out4 = bitins(bext3, n_mask, bext4, mask, off); + + *((v4u*)pDst) = pack((uint8_t) out1, (uint8_t) out2, (uint8_t) out3, (uint8_t) out4); + + return pSrc; +} + +/* + * XpulpV2 + */ + +static void __attribute__((noinline)) pulp_zero_mem(uint8_t * pBuffer, unsigned int size) +{ + int lfover = size &0x3; + for (int i=0; i<(size>>2); i++) + { + *((v4u *)pBuffer) = (v4u){0,0,0,0}; + MemoryFence(); + pBuffer+=4; + } + while(lfover) + { + *pBuffer++=0; + lfover--; + } +} + +static void __attribute__((noinline)) pulp_nn_im2col_u2_to_u8(uint8_t * pInput, uint8_t * pOutput, unsigned int blockSize) +{ + unsigned int blkCnt = blockSize >> 4u; + int lfover = blockSize & 0x0f; + for (int i = 0; i> 4u; + int lfover = blockSize & 0x0f; + for (int i = 0; i> 3u; + int lfover = blockSize & 0x07; + for (int i = 0; i> 3u; + int lfover = blockSize & 0x07; + for (int i = 0; i> 2u; + int lfover = blockSize & 0x03; + for (int i = 0; i> 2u; + int lfover = blockSize & 0x03; + for (int i = 0; i> 4u; + int lfover = blockSize & 0x0f; + for (int i = 0; i> 4u; + int lfover = blockSize & 0x0f; + for (int i = 0; i> 4u; + int lfover = blockSize & 0x0f; + for (int i = 0; i> 4u; + int lfover = blockSize & 0x0f; + for (int i = 0; i> 4u; + int lfover = blockSize & 0x0f; + for (int i = 0; i> 4u; + int lfover = blockSize & 0x0f; + for (int i = 0; i> 3u; + int lfover = blockSize & 0x07; + for (int i = 0; i> 3u; + int lfover = blockSize & 0x07; + for (int i = 0; i> 3u; + int lfover = blockSize & 0x07; + for (int i = 0; i> 3u; + int lfover = blockSize & 0x07; + for (int i = 0; i> 2u; + int lfover = blockSize & 0x03; + for (int i = 0; i> 2u; + int lfover = blockSize & 0x03; + for (int i = 0; i> 2; + + while(cnt > 0u) + { + inp = *((v4u*)pIn); + com = *((v4u*)pCom); + + *((v4u*)pIn) = max4(inp, com); + + pCom+=4; + pIn+=4; + cnt--; + } + + int left = length & 0x3; + while (left>0u) + { + if(*pIn<*pCom) + *pIn=*pCom; + + pIn++; + pCom++; + left--; + } +} + +static void __attribute__((noinline)) pulp_nn_compare_and_replace_if_larger_i8( + int8_t * base, int8_t * target, uint16_t length) { + int8_t *pIn = base; + int8_t *pCom = target; + v4s inp; + v4s com; + int cnt = length >> 2; + + while (cnt > 0u) { + inp = *((v4s *)pIn); + com = *((v4s *)pCom); + + *((v4s *)pIn) = maxs4(inp, com); + + pCom += 4; + pIn += 4; + cnt--; + } + + int left = length & 0x3; + while (left > 0u) { + if (*pIn < *pCom) + *pIn = *pCom; + + pIn++; + pCom++; + left--; + } +} + +static void __attribute__((noinline)) pulp_nn_avg_and_replace_u8(uint8_t * base, + uint8_t * target, + uint16_t length) +{ + uint8_t *pIn = base; + uint8_t *pCom = target; + + while (length>0u) + { + *pIn = ((*pIn + *pCom) >> 1); + + pIn++; + pCom++; + length--; + } +} + +static void __attribute__((noinline)) pulp_nn_compare_and_replace_if_larger_u4(uint8_t * base, + uint8_t * target, + uint16_t length) +{ + int8_t mask = 0xf0; + int8_t n_mask = ~ mask; + int8_t off = 0x04; + + uint8_t *pIn = base; + uint8_t *pCom = target; + v4u inp[2]; + v4u com[2]; + uint8_t *out; + int cnt = length >> 2; + + while(cnt > 0u) + { + pulp_nn_u4_to_u8(pIn, (uint8_t *)inp); + pulp_nn_u4_to_u8(pCom, (uint8_t *)com); + + *((v4u *)out) = max4(inp[0], com[0]); + + *((uint8_t*)pIn) = bitins(*out, n_mask, *(out + 1), mask, off); + pIn++; + *((uint8_t*)pIn) = bitins(*(out + 2), n_mask, *(out + 3), mask, off); + pIn++; + + *((v4u *)out) = max4(inp[1], com[1]); + + *((uint8_t*)pIn) = bitins(*out, n_mask, *(out + 1), mask, off); + pIn++; + *((uint8_t*)pIn) = bitins(*(out + 2), n_mask, *(out + 3), mask, off); + pIn++; + + pCom+=4; + cnt--; + } + + int left = length & 0x3; + while (left>0u) + { + uint8_t inA0 = (uint8_t) bitextu((unsigned int) *pIn, 4, 0); + uint8_t inA1 = (uint8_t) bitextu((unsigned int) *pIn, 4, 4); + uint8_t inB0 = (uint8_t) bitextu((unsigned int) *pCom, 4, 0); + uint8_t inB1 = (uint8_t) bitextu((unsigned int) *pCom, 4, 4); + + if(inA0> 2; + + while(cnt > 0u) + { + pulp_nn_i4_to_i8(pIn, (int8_t *)inp); + pulp_nn_i4_to_i8(pCom, (int8_t *)com); + + *((v4s *)out) = maxs4(inp[0], com[0]); + + *((int8_t*)pIn) = bitins(*out, n_mask, *(out + 1), mask, off); + pIn++; + *((int8_t*)pIn) = bitins(*(out + 2), n_mask, *(out + 3), mask, off); + pIn++; + + *((v4s *)out) = maxs4(inp[1], com[1]); + + *((int8_t*)pIn) = bitins(*out, n_mask, *(out + 1), mask, off); + pIn++; + *((int8_t*)pIn) = bitins(*(out + 2), n_mask, *(out + 3), mask, off); + pIn++; + + pCom+=4; + cnt--; + } + + int left = length & 0x3; + while (left>0u) + { + int8_t inA0 = (int8_t) bitext((int) *pIn, 4, 0); + int8_t inA1 = (int8_t) bitext((int) *pIn, 4, 4); + int8_t inB0 = (int8_t) bitext((int) *pCom, 4, 0); + int8_t inB1 = (int8_t) bitext((int) *pCom, 4, 4); + + if(inA00u) + { + uint8_t inA0 = (uint8_t) bitextu((unsigned int) *pIn, 4, 0); + uint8_t inA1 = (uint8_t) bitextu((unsigned int) *pIn, 4, 4); + uint8_t inB0 = (uint8_t) bitextu((unsigned int) *pCom, 4, 0); + uint8_t inB1 = (uint8_t) bitextu((unsigned int) *pCom, 4, 4); + + inA0 = ((inA0 + inB0) >> 1); + inA1 = ((inA1 + inB1) >> 1); + + *((uint8_t*)pIn) = bitins(inA0, n_mask, inA1, mask, off); + + pIn++; + pCom++; + length--; + } +} + +static void __attribute__((noinline)) pulp_nn_compare_and_replace_if_larger_u2(uint8_t * base, + uint8_t * target, + uint16_t length) +{ + int8_t mask2 = 0x0c; + int8_t n_mask2 = ~ mask2; + int8_t mask4 = 0x30; + int8_t n_mask4 = ~ mask4; + int8_t mask6 = 0xc0; + int8_t n_mask6 = ~ mask6; + int8_t off2 = 2; + int8_t off4 = 4; + int8_t off6 = 6; + + uint8_t *pIn = base; + uint8_t *pCom = target; + v4u inp[4]; + v4u com[4]; + uint8_t *out; + int cnt = length >> 2; + + while(cnt > 0u) + { + pulp_nn_u2_to_u8(pIn, inp); + pulp_nn_u2_to_u8(pCom, com); + + *((v4u*)out) = max4(inp[0], com[0]); + + uint8_t inA = (uint8_t) bitins(*out, n_mask2, *(out + 1), mask2, off2); + inA = bitins(inA, n_mask4, *(out + 2), mask4, off4); + *((uint8_t*)pIn) = bitins(inA, n_mask6, *(out + 3), mask6, off6); + pIn++; + + *((v4u*)out) = max4(inp[1], com[1]); + + inA = (uint8_t) bitins(*out, n_mask2, *(out + 1), mask2, off2); + inA = bitins(inA, n_mask4, *(out + 2), mask4, off4); + *((uint8_t*)pIn) = bitins(inA, n_mask6, *(out + 3), mask6, off6); + pIn++; + + *((v4u*)out) = max4(inp[2], com[2]); + + inA = (uint8_t) bitins(*out, n_mask2, *(out + 1), mask2, off2); + inA = bitins(inA, n_mask4, *(out + 2), mask4, off4); + *((uint8_t*)pIn) = bitins(inA, n_mask6, *(out + 3), mask6, off6); + pIn++; + + *((v4u*)out) = max4(inp[3], com[3]); + + inA = (uint8_t) bitins(*out, n_mask2, *(out + 1), mask2, off2); + inA = bitins(inA, n_mask4, *(out + 2), mask4, off4); + *((uint8_t*)pIn) = bitins(inA, n_mask6, *(out + 3), mask6, off6); + pIn++; + + pCom+=4; + cnt--; + } + + int left = length & 0x3; + while (left>0u) + { + uint8_t inA0 = (uint8_t) bitextu((unsigned int) *pIn, 2, 0); + uint8_t inA1 = (uint8_t) bitextu((unsigned int) *pIn, 2, 2); + uint8_t inA2 = (uint8_t) bitextu((unsigned int) *pIn, 2, 4); + uint8_t inA3 = (uint8_t) bitextu((unsigned int) *pIn, 2, 6); + v4u inA4 = pack((uint8_t) inA0, (uint8_t) inA1, (uint8_t) inA2, (uint8_t) inA3); + uint8_t inB0 = (uint8_t) bitextu((unsigned int) *pCom, 2, 0); + uint8_t inB1 = (uint8_t) bitextu((unsigned int) *pCom, 2, 2); + uint8_t inB2 = (uint8_t) bitextu((unsigned int) *pCom, 2, 4); + uint8_t inB3 = (uint8_t) bitextu((unsigned int) *pCom, 2, 6); + v4u inB4 = pack((uint8_t) inB0, (uint8_t) inB1, (uint8_t) inB2, (uint8_t) inB3); + + *((v4u*)out) = max4(inA4, inB4); + + uint8_t inA = (uint8_t) bitins(*out, n_mask2, *(out + 1), mask2, off2); + inA = bitins(inA, n_mask4, *(out + 2), mask4, off4); + *((uint8_t*)pIn) = bitins(inA, n_mask6, *(out + 3), mask6, off6); + + pIn++; + pCom++; + left--; + } +} + + +static void __attribute__((noinline)) pulp_nn_compare_and_replace_if_larger_i2(int8_t * base, + int8_t * target, + uint16_t length) +{ + int8_t mask2 = 0x0c; + int8_t n_mask2 = ~ mask2; + int8_t mask4 = 0x30; + int8_t n_mask4 = ~ mask4; + int8_t mask6 = 0xc0; + int8_t n_mask6 = ~ mask6; + int8_t off2 = 2; + int8_t off4 = 4; + int8_t off6 = 6; + + int8_t *pIn = base; + int8_t *pCom = target; + v4s inp[4]; + v4s com[4]; + int8_t *out; + int cnt = length >> 2; + + while(cnt > 0u) + { + pulp_nn_i2_to_i8(pIn, inp); + pulp_nn_i2_to_i8(pCom, com); + + *((v4s*)out) = maxs4(inp[0], com[0]); + + int8_t inA = (int8_t) bitins(*out, n_mask2, *(out + 1), mask2, off2); + inA = bitins(inA, n_mask4, *(out + 2), mask4, off4); + *((int8_t*)pIn) = bitins(inA, n_mask6, *(out + 3), mask6, off6); + pIn++; + + *((v4s*)out) = maxs4(inp[1], com[1]); + + inA = (int8_t) bitins(*out, n_mask2, *(out + 1), mask2, off2); + inA = bitins(inA, n_mask4, *(out + 2), mask4, off4); + *((int8_t*)pIn) = bitins(inA, n_mask6, *(out + 3), mask6, off6); + pIn++; + + *((v4s*)out) = maxs4(inp[2], com[2]); + + inA = (int8_t) bitins(*out, n_mask2, *(out + 1), mask2, off2); + inA = bitins(inA, n_mask4, *(out + 2), mask4, off4); + *((int8_t*)pIn) = bitins(inA, n_mask6, *(out + 3), mask6, off6); + pIn++; + + *((v4s*)out) = maxs4(inp[3], com[3]); + + inA = (int8_t) bitins(*out, n_mask2, *(out + 1), mask2, off2); + inA = bitins(inA, n_mask4, *(out + 2), mask4, off4); + *((int8_t*)pIn) = bitins(inA, n_mask6, *(out + 3), mask6, off6); + pIn++; + + pCom+=4; + cnt--; + } + + int left = length & 0x3; + while (left>0u) + { + int8_t inA0 = (int8_t) bitext((unsigned int) *pIn, 2, 0); + int8_t inA1 = (int8_t) bitext((unsigned int) *pIn, 2, 2); + int8_t inA2 = (int8_t) bitext((unsigned int) *pIn, 2, 4); + int8_t inA3 = (int8_t) bitext((unsigned int) *pIn, 2, 6); + v4s inA4 = pack((int8_t) inA0, (int8_t) inA1, (int8_t) inA2, (int8_t) inA3); + int8_t inB0 = (int8_t) bitext((unsigned int) *pCom, 2, 0); + int8_t inB1 = (int8_t) bitext((unsigned int) *pCom, 2, 2); + int8_t inB2 = (int8_t) bitext((unsigned int) *pCom, 2, 4); + int8_t inB3 = (int8_t) bitext((unsigned int) *pCom, 2, 6); + v4s inB4 = pack((int8_t) inB0, (int8_t) inB1, (int8_t) inB2, (int8_t) inB3); + + *((v4s*)out) = maxs4(inA4, inB4); + + int8_t inA = (int8_t) bitins(*out, n_mask2, *(out + 1), mask2, off2); + inA = bitins(inA, n_mask4, *(out + 2), mask4, off4); + *((int8_t*)pIn) = bitins(inA, n_mask6, *(out + 3), mask6, off6); + + pIn++; + pCom++; + left--; + } +} + +static void __attribute__((noinline)) pulp_nn_avg_and_replace_u2(uint8_t * base, + uint8_t * target, + uint16_t length) +{ + int8_t mask2 = 0x0c; + int8_t n_mask2 = ~ mask2; + int8_t mask4 = 0x30; + int8_t n_mask4 = ~ mask4; + int8_t mask6 = 0xc0; + int8_t n_mask6 = ~ mask6; + int8_t off2 = 2; + int8_t off4 = 4; + int8_t off6 = 6; + + uint8_t *pIn = base; + uint8_t *pCom = target; + + while (length>0u) + { + uint8_t inA0 = (uint8_t) bitextu((unsigned int) *pIn, 2, 0); + uint8_t inA1 = (uint8_t) bitextu((unsigned int) *pIn, 2, 2); + uint8_t inA2 = (uint8_t) bitextu((unsigned int) *pIn, 2, 4); + uint8_t inA3 = (uint8_t) bitextu((unsigned int) *pIn, 2, 6); + + uint8_t inB0 = (uint8_t) bitextu((unsigned int) *pCom, 2, 0); + uint8_t inB1 = (uint8_t) bitextu((unsigned int) *pCom, 2, 2); + uint8_t inB2 = (uint8_t) bitextu((unsigned int) *pCom, 2, 4); + uint8_t inB3 = (uint8_t) bitextu((unsigned int) *pCom, 2, 6); + + inA0 = ((inA0 + inB0) >> 1); + inA1 = ((inA1 + inB1) >> 1); + inA2 = ((inA2 + inB2) >> 1); + inA3 = ((inA3 + inB3) >> 1); + + uint8_t inA = (uint8_t) bitins(inA0, n_mask2, inA1, mask2, off2); + inA = bitins(inA, n_mask4, inA2, mask4, off4); + *((uint8_t*)pIn) = bitins(inA, n_mask6, inA3, mask6, off6); + + pIn++; + pCom++; + length--; + } +} + +/* + * XpulpNN + */ + +static void __attribute__((noinline)) xpulp_nn_zero_mem_u8(uint8_t * pBuffer, unsigned int size) +{ + int lfover = size &0x3; + for (int i=0; i<(size>>2); i++) + { + *((v4u *)pBuffer) = (v4u){0,0,0,0}; + MemoryFence(); + pBuffer+=4; + } + while(lfover) + { + *pBuffer++=0; + lfover--; + } +} + +static void __attribute__((noinline)) xpulp_nn_zero_mem_u4(uint8_t * pBuffer, unsigned int size) +{ + int lfover = size &0x7; + for (int i=0; i<(size>>3); i++) + { + *((v4u *)pBuffer) = (v4u){0,0,0,0}; + MemoryFence(); + pBuffer+=4; + } + while(lfover) + { + *pBuffer++=0; + lfover-=2; + } +} + +static void __attribute__((noinline)) xpulp_nn_zero_mem_u2(uint8_t * pBuffer, unsigned int size) +{ + int lfover = size &0xf; + for (int i=0; i<(size>>4); i++) + { + *((v4u *)pBuffer) = (v4u){0,0,0,0}; + MemoryFence(); + pBuffer+=4; + } + while(lfover) + { + *pBuffer++=0; + lfover-=4; + } +} + + +static void __attribute__((noinline)) xpulp_nn_compare_and_replace_if_larger_u4(uint8_t * base, + uint8_t * target, + uint16_t length) +{ + int8_t mask = 0xf0; + int8_t n_mask = ~ mask; + int8_t off = 0x04; + + uint8_t *pIn = base; + uint8_t *pCom = target; + + int cnt = length >> 2; + + while(cnt > 0u) + { + *((uint32_t *)pIn) = max8(*((uint32_t *)pIn), *((uint32_t *)pCom)); + + pIn+=4; + pCom+=4; + + cnt--; + } + + int left = length & 0x3; + while (left>0u) + { + uint8_t inA0 = (uint8_t) bitextu((unsigned int) *pIn, 4, 0); + uint8_t inA1 = (uint8_t) bitextu((unsigned int) *pIn, 4, 4); + uint8_t inB0 = (uint8_t) bitextu((unsigned int) *pCom, 4, 0); + uint8_t inB1 = (uint8_t) bitextu((unsigned int) *pCom, 4, 4); + + if(inA0> 2; + + while (cnt > 0u) { + *((int32_t *)pIn) = maxs8(*((int32_t *)pIn), *((int32_t *)pCom)); + + pIn += 4; + pCom += 4; + + cnt--; + } + + int left = length & 0x3; + while (left > 0u) { + int8_t inA0 = (int8_t)bitext((int)*pIn, 4, 0); + int8_t inA1 = (int8_t)bitext((int)*pIn, 4, 4); + int8_t inB0 = (int8_t)bitext((int)*pCom, 4, 0); + int8_t inB1 = (int8_t)bitext((int)*pCom, 4, 4); + + if (inA0 < inB0) + inA0 = inB0; + + if (inA1 < inB1) + inA1 = inB1; + + *((int8_t *)pIn) = bitins(inA0, n_mask, inA1, mask, off); + + pIn++; + pCom++; + left--; + } +} + +static void __attribute__((noinline)) xpulp_nn_avg_and_replace_u4(uint8_t * base, + uint8_t * target, + uint16_t length) +{ + int8_t mask = 0xf0; + int8_t n_mask = ~ mask; + int8_t off = 0x04; + + uint8_t *pIn = base; + uint8_t *pCom = target; + + int cnt = length >> 2; + + while (cnt > 0u) + { + *((uint32_t *)pIn) = avg8(*((uint32_t *)pIn), *((uint32_t *)pCom)); + + pIn+=4; + pCom+=4; + cnt--; + } + + int left = length & 0x3; + + while (left>0u) + { + uint8_t inA0 = (uint8_t) bitextu((unsigned int) *pIn, 4, 0); + uint8_t inA1 = (uint8_t) bitextu((unsigned int) *pIn, 4, 4); + uint8_t inB0 = (uint8_t) bitextu((unsigned int) *pCom, 4, 0); + uint8_t inB1 = (uint8_t) bitextu((unsigned int) *pCom, 4, 4); + + inA0 = ((inA0 + inB0) >> 1); + inA1 = ((inA1 + inB1) >> 1); + + *((uint8_t*)pIn) = bitins(inA0, n_mask, inA1, mask, off); + + pIn++; + pCom++; + length--; + } +} + +static void __attribute__((noinline)) xpulp_nn_compare_and_replace_if_larger_u2(uint8_t * base, + uint8_t * target, + uint16_t length) +{ + int8_t mask2 = 0x0c; + int8_t n_mask2 = ~ mask2; + int8_t mask4 = 0x30; + int8_t n_mask4 = ~ mask4; + int8_t mask6 = 0xc0; + int8_t n_mask6 = ~ mask6; + int8_t off2 = 2; + int8_t off4 = 4; + int8_t off6 = 6; + + uint8_t *pIn = base; + uint8_t *pCom = target; + uint8_t *out; + + int cnt = length >> 2; + + while(cnt > 0u) + { + *((uint32_t *)pIn) = max16(*((uint32_t *)pIn), *((uint32_t *)pCom)); + + pIn+=4; + pCom+=4; + cnt--; + } + + int left = length & 0x3; + while (left>0u) + { + uint8_t inA0 = (uint8_t) bitextu((unsigned int) *pIn, 2, 0); + uint8_t inA1 = (uint8_t) bitextu((unsigned int) *pIn, 2, 2); + uint8_t inA2 = (uint8_t) bitextu((unsigned int) *pIn, 2, 4); + uint8_t inA3 = (uint8_t) bitextu((unsigned int) *pIn, 2, 6); + v4u inA4 = pack((uint8_t) inA0, (uint8_t) inA1, (uint8_t) inA2, (uint8_t) inA3); + uint8_t inB0 = (uint8_t) bitextu((unsigned int) *pCom, 2, 0); + uint8_t inB1 = (uint8_t) bitextu((unsigned int) *pCom, 2, 2); + uint8_t inB2 = (uint8_t) bitextu((unsigned int) *pCom, 2, 4); + uint8_t inB3 = (uint8_t) bitextu((unsigned int) *pCom, 2, 6); + v4u inB4 = pack((uint8_t) inB0, (uint8_t) inB1, (uint8_t) inB2, (uint8_t) inB3); + + *((v4u*)out) = max4(inA4, inB4); + + uint8_t inA = (uint8_t) bitins(*out, n_mask2, *(out + 1), mask2, off2); + inA = bitins(inA, n_mask4, *(out + 2), mask4, off4); + *((uint8_t*)pIn) = bitins(inA, n_mask6, *(out + 3), mask6, off6); + + pIn++; + pCom++; + left--; + } +} +static void __attribute__((noinline)) xpulp_nn_compare_and_replace_if_larger_i2(int8_t * base, + int8_t * target, + uint16_t length) +{ + int8_t mask2 = 0x0c; + int8_t n_mask2 = ~ mask2; + int8_t mask4 = 0x30; + int8_t n_mask4 = ~ mask4; + int8_t mask6 = 0xc0; + int8_t n_mask6 = ~ mask6; + int8_t off2 = 2; + int8_t off4 = 4; + int8_t off6 = 6; + + int8_t *pIn = base; + int8_t *pCom = target; + int8_t *out; + + int cnt = length >> 2; + + while(cnt > 0u) + { + *((int32_t *)pIn) = maxs16(*((int32_t *)pIn), *((int32_t *)pCom)); + + pIn+=4; + pCom+=4; + cnt--; + } + + int left = length & 0x3; + while (left>0u) + { + int8_t inA0 = (int8_t) bitext((int) *pIn, 2, 0); + int8_t inA1 = (int8_t) bitext((int) *pIn, 2, 2); + int8_t inA2 = (int8_t) bitext((int) *pIn, 2, 4); + int8_t inA3 = (int8_t) bitext((int) *pIn, 2, 6); + v4s inA4 = pack((int8_t) inA0, (int8_t) inA1, (int8_t) inA2, (int8_t) inA3); + int8_t inB0 = (int8_t) bitext((int) *pCom, 2, 0); + int8_t inB1 = (int8_t) bitext((int) *pCom, 2, 2); + int8_t inB2 = (int8_t) bitext((int) *pCom, 2, 4); + int8_t inB3 = (int8_t) bitext((int) *pCom, 2, 6); + v4s inB4 = pack((int8_t) inB0, (int8_t) inB1, (int8_t) inB2, (int8_t) inB3); + + *((v4s*)out) = maxs4(inA4, inB4); + + int8_t inA = (int8_t) bitins(*out, n_mask2, *(out + 1), mask2, off2); + inA = bitins(inA, n_mask4, *(out + 2), mask4, off4); + *((int8_t*)pIn) = bitins(inA, n_mask6, *(out + 3), mask6, off6); + + pIn++; + pCom++; + left--; + } +} + +static void __attribute__((noinline)) xpulp_nn_avg_and_replace_u2(uint8_t * base, + uint8_t * target, + uint16_t length) +{ + int8_t mask2 = 0x0c; + int8_t n_mask2 = ~ mask2; + int8_t mask4 = 0x30; + int8_t n_mask4 = ~ mask4; + int8_t mask6 = 0xc0; + int8_t n_mask6 = ~ mask6; + int8_t off2 = 2; + int8_t off4 = 4; + int8_t off6 = 6; + + uint8_t *pIn = base; + uint8_t *pCom = target; + uint8_t *out; + + int cnt = length >> 2; + + while(cnt > 0u) + { + *((uint32_t *)pIn) = avg16(*((uint32_t *)pIn), *((uint32_t *)pCom)); + + pIn+=4; + pCom+=4; + cnt--; + } + + int left = length & 0x3; + while (left>0u) + { + uint8_t inA0 = (uint8_t) bitextu((unsigned int) *pIn, 2, 0); + uint8_t inA1 = (uint8_t) bitextu((unsigned int) *pIn, 2, 2); + uint8_t inA2 = (uint8_t) bitextu((unsigned int) *pIn, 2, 4); + uint8_t inA3 = (uint8_t) bitextu((unsigned int) *pIn, 2, 6); + v4u inA4 = pack((uint8_t) inA0, (uint8_t) inA1, (uint8_t) inA2, (uint8_t) inA3); + uint8_t inB0 = (uint8_t) bitextu((unsigned int) *pCom, 2, 0); + uint8_t inB1 = (uint8_t) bitextu((unsigned int) *pCom, 2, 2); + uint8_t inB2 = (uint8_t) bitextu((unsigned int) *pCom, 2, 4); + uint8_t inB3 = (uint8_t) bitextu((unsigned int) *pCom, 2, 6); + v4u inB4 = pack((uint8_t) inB0, (uint8_t) inB1, (uint8_t) inB2, (uint8_t) inB3); + + *((v4u*)out) = avg4(inA4, inB4); + + uint8_t inA = (uint8_t) bitins(*out, n_mask2, *(out + 1), mask2, off2); + inA = bitins(inA, n_mask4, *(out + 2), mask4, off4); + *((uint8_t*)pIn) = bitins(inA, n_mask6, *(out + 3), mask6, off6); + + pIn++; + pCom++; + left--; + } +} + + +#endif diff --git a/rt_nn_tests/xptnn_conv/test.c b/rt_nn_tests/xptnn_conv/test.c new file mode 100644 index 0000000..46d3fdd --- /dev/null +++ b/rt_nn_tests/xptnn_conv/test.c @@ -0,0 +1,234 @@ +// massive hack to enable rt compatibility +#define pi_core_id get_core_id +#include +#include +#include + +#include "dory_dma.h" + +#include "xpulp_tnn_matmul_ternary.h" +#include "xpulp_tnn_matmul_ternary_4x1.h" +#include "xpulp_tnn_conv_ternary.h" +#include "xpulp_tnn_conv_ternary_signed.h" +#ifndef PROFILE // HACKYTIME +#include "xpulp_tnn_conv1d_ternary.h" +#include "xpulp_tnn_conv1d_ternary_signed.h" +#endif +#include "xpulp_tnn_maxpool_ternary.h" +#include "xpulp_tnn_linear_ternary_i32_signed.h" +#include "xpulp_tnn_linear_ternary_i32.h" +#include "pmsis.h" + +#include "data_statstest.h" +//#include "pulp_nn_kernels.h" +#include "pulp_nn_mix_kernels.h" + + +#define start_cycle_counter() asm volatile("csrw 0xCC0, 0x01;") +#define stop_cycle_counter() asm volatile("csrw 0xCC0, 0x00;") +#define read_cycle_counter(x) asm volatile("csrr %0, 0x780;" : "=r" (x)) +#define reset_cycle_counter() asm volatile("csrw 0x780, 0x0;") + +uint8_t im2col[IM2COL_DIM] = {0}; +uint8_t outputs[OUTPUT_DIM] = {0}; + +int32_t outputs_fp[OUTPUT_DIM_FP] = {0}; + +#ifndef PROFILE +int num_cycles; +#else +int im2col_cycles; +int hotloop_prep_cycles; +int hotloop_cycles; +int threshold_cycles; +int requant_cycles; +int hotloop_leftover_cycles; +int matmul4x2_leftover_cycles; +#endif + +void call_krnl_0(); +void test_0(); + +int main(int argc, char *argv[]) +{ +#if KRAKEN_PTEST == 1 + kraken_padframe_aon_pad_gpioa_cfg_rxe_set(24, 0); + kraken_padframe_aon_pad_gpioa_cfg_trie_set(24, 0); + kraken_padframe_aon_pad_gpioa_cfg_chip2pad_set(24, 0); +#endif + int n_mismatches = 0; + int mismatches_tot = 0; + + + + #ifndef PROFILE + num_cycles = 0; + #endif + + if (get_core_id() == 0) { + printf("===> TEST 0: Running xpulp_tnn_conv_ternary_signed...\n"); + printf(" dims_in = [4, 4]\n"); + printf(" dims_kernel = [3, 3]\n"); + printf(" ch_in/out = [20, 40]\n"); + //printf(" padding_y_top = [%d]\n", padding_y_top); + //printf(" padding_y_bottom = [%d]\n", padding_y_bottom); + //printf(" padding_x_left = [%d]\n", padding_x_left); + //printf(" padding_x_right = [%d]\n", padding_x_right); + //printf(" stride_x = [%d]\n", stride_x); + //printf(" stride_y = [%d]\n", stride_y); + } + test_0(); + #ifndef PROFILE + stop_cycle_counter(); + read_cycle_counter(num_cycles); + if (get_core_id() == 0) { + printf("===> TEST 0: Finished running xpulp_tnn_conv_ternary_signed\n"); + printf("num_cycles = %d\n", num_cycles); + printf("MACs = 115200\n"); + printf("MACs/cycle = %.4f\n", 115200/num_cycles); + } + #endif + if (get_core_id() == 0) { + printf("Checking for mismatches..\n"); + n_mismatches = 0; + + for(int i=0; i < 128; i++) { + if (outputs[i] != exp_outp_0[i]){ + printf("***Mismatch in test 0 at iteration %d: Expected: %x, got: %x\n", i, exp_outp_0[i], outputs[i]); + n_mismatches++; + } + } + } + mismatches_tot += n_mismatches; + + if (get_core_id() == 0) { + printf("Got %d mismatches in %d tests\n", mismatches_tot, 1); + } + return mismatches_tot; +} + + +void call_krnl_0(void) { + uint8_t * pInp; + uint8_t * pIm2ColBuffer; + int8_t * pBias = NULL; + uint8_t * pOut; + int8_t * pWeight; + uint32_t * pThr; + int32_t * pKappa, pLambda; + #ifdef PROFILE + int32_t im2col_cycles = 0; + int32_t hotloop_prep_cycles = 0; + int32_t hotloop_cycles = 0; + int32_t threshold_cycles = 0; + int32_t requant_cycles = 0; + int32_t hotloop_leftover_cycles = 0; + int32_t matmul4x2_leftover_cycles = 0; + #endif + pInp = inp_l1; + + pOut = outp_l1; + pIm2ColBuffer = im2col_l1; + pWeight = wt_l1; + pThr = threshs_l1; + pKappa = kappa_l1; + pLambda = lambda_l1; +#if KRAKEN_PTEST == 1 + if (pi_core_id() == 0) { + kraken_padframe_aon_pad_gpioa_cfg_chip2pad_set(24, 1); + } +#endif + xpulp_tnn_conv_ternary_signed( + pInp, + pIm2ColBuffer, + pBias, + pOut, + pWeight, + pThr, + 4, + 4, + 20, + 4, + 4, + 40, + 3, + 3, + 1, + 1, + 1, + 1, + 1, +#ifndef PROFILE + 1 +#else + 1, + &im2col_cycles, + &hotloop_prep_cycles, + &hotloop_cycles, + &threshold_cycles, + &hotloop_leftover_cycles, + &matmul4x2_leftover_cycles +#endif + ); + +#if KRAKEN_PTEST == 1 + if (pi_core_id() == 0) { + kraken_padframe_aon_pad_gpioa_cfg_chip2pad_set(24, 0); + } +#endif + #ifdef PROFILE + if (pi_core_id() == 0) { + printf("im2col_cycles = %d\n", im2col_cycles); + printf("hotloop_prep_cycles = %d\n", hotloop_prep_cycles); + printf("hotloop_cycles = %d\n", hotloop_cycles); + printf("requant_cycles = %d\n", requant_cycles); + printf("threshold_cycles = %d\n", threshold_cycles); + printf("hotloop_leftover_cycles = %d\n", hotloop_leftover_cycles); + printf("matmul4x2_leftover_cycles = %d\n", matmul4x2_leftover_cycles); + } + #endif +} + +void test_0(void) { + uint32_t dma_channel = dory_dma_allocate(); + DMA_copy dma_tx = {0}; + // DMA transfer inputs from L2 to L1 + dma_tx.ext = pIn_0; + dma_tx.loc = inp_l1; + dma_tx.number_of_1d_copies = 1; + dma_tx.number_of_2d_copies = 1; + dma_tx.length_1d_copy = 64; + dma_tx.stride_1d = 1; + dma_tx.stride_2d = 1; + dma_tx.dir = 1; + dma_tx.tid = dma_channel; + dory_dma_memcpy_async(&dma_tx); + // transfer thresholds + dma_tx.ext = pThr_0; + dma_tx.loc = threshs_l1; + dma_tx.length_1d_copy = 40 * 4; // 4 bytes per set of 2 thresholds + dory_dma_memcpy_async(&dma_tx); + // transfer weights + dma_tx.ext = pWeight_0; + dma_tx.loc = wt_l1; + dma_tx.length_1d_copy = 1440; + dory_dma_memcpy_async(&dma_tx); + call_krnl_0(); + // get outputs back with DMA + dma_tx.dir = 0; + dma_tx.ext = outputs; + dma_tx.loc = outp_l1; + dma_tx.length_1d_copy = 128; + dory_dma_memcpy_async(&dma_tx); + dory_dma_free(&dma_tx); +} + + + + + + + + + + diff --git a/rt_nn_tests/xptnn_conv/xpulp_tnn_conv1d_ternary.h b/rt_nn_tests/xptnn_conv/xpulp_tnn_conv1d_ternary.h new file mode 100644 index 0000000..f1a08a6 --- /dev/null +++ b/rt_nn_tests/xptnn_conv/xpulp_tnn_conv1d_ternary.h @@ -0,0 +1,35 @@ +#ifndef __XPULP_NN_CONV1D_TERNARY_H +#define __XPULP_NN_CONV1D_TERNARY_H +#include +#include "pulp_nn_utils.h" + + + +// TODO: review argument order +void __attribute__((noinline)) xpulp_tnn_conv1d_ternary( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pWeight, + uint32_t *pThr, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, +#ifndef PROFILE + uint16_t dilation_x); +#else + uint16_t dilation_x, + uint32_t *im2col_cycles, + uint32_t *hotloop_prep_cycles, + uint32_t *hotloop_cycles, + uint32_t *threshold_cycles, + uint32_t *hotloop_leftover_cycles, + uint32_t *matmul4x2_leftover_cycles); +#endif +#endif diff --git a/rt_nn_tests/xptnn_conv/xpulp_tnn_conv1d_ternary_signed.h b/rt_nn_tests/xptnn_conv/xpulp_tnn_conv1d_ternary_signed.h new file mode 100644 index 0000000..0f8ba08 --- /dev/null +++ b/rt_nn_tests/xptnn_conv/xpulp_tnn_conv1d_ternary_signed.h @@ -0,0 +1,35 @@ +#ifndef __XPULP_NN_CONV1D_TERNARY_SIGNED_H +#define __XPULP_NN_CONV1D_TERNARY_SIGNED_H +#include +#include "pulp_nn_utils.h" + + + +// TODO: review argument order +void __attribute__((noinline)) xpulp_tnn_conv1d_ternary_signed( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pWeight, + uint32_t *pThr, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, +#ifndef PROFILE + uint16_t dilation_x); +#else + uint16_t dilation_x, + uint32_t *im2col_cycles, + uint32_t *hotloop_prep_cycles, + uint32_t *hotloop_cycles, + uint32_t *threshold_cycles, + uint32_t *hotloop_leftover_cycles, + uint32_t *matmul4x2_leftover_cycles); +#endif +#endif diff --git a/rt_nn_tests/xptnn_conv/xpulp_tnn_conv_ternary.h b/rt_nn_tests/xptnn_conv/xpulp_tnn_conv_ternary.h new file mode 100644 index 0000000..f4a8759 --- /dev/null +++ b/rt_nn_tests/xptnn_conv/xpulp_tnn_conv_ternary.h @@ -0,0 +1,40 @@ +#ifndef __XPULP_NN_CONV_TERNARY_H +#define __XPULP_NN_CONV_TERNARY_H +#include +#include "pulp_nn_utils.h" + + + +// TODO: review argument order +void __attribute__((noinline)) xpulp_tnn_conv_ternary( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pWeight, + uint32_t *pThr, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, +#ifndef PROFILE + uint16_t stride_y); +#else + uint16_t stride_y, + uint32_t *im2col_cycles, + uint32_t *hotloop_prep_cycles, + uint32_t *hotloop_cycles, + uint32_t *threshold_cycles, + uint32_t *hotloop_leftover_cycles, + uint32_t *matmul4x2_leftover_cycles); +#endif +#endif diff --git a/rt_nn_tests/xptnn_conv/xpulp_tnn_conv_ternary_signed.c b/rt_nn_tests/xptnn_conv/xpulp_tnn_conv_ternary_signed.c new file mode 100644 index 0000000..92ff6cd --- /dev/null +++ b/rt_nn_tests/xptnn_conv/xpulp_tnn_conv_ternary_signed.c @@ -0,0 +1,259 @@ +#include +#include "pmsis.h" +#include "pulp_nn_utils.h" +#include "xpulp_tnn_conv_ternary_signed.h" +#include "xpulp_tnn_matmul_ternary_signed.h" +#include "xpulp_tnn_matmul_ternary_signed_4x1.h" + +// TODO: review argument order +void __attribute__((noinline)) xpulp_tnn_conv_ternary_signed( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pWeight, + uint32_t *pThr, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, +#ifndef PROFILE + uint16_t stride_y) +{ +#else + uint16_t stride_y, + uint32_t *im2col_cycles, + uint32_t *hotloop_prep_cycles, + uint32_t *hotloop_cycles, + uint32_t *threshold_cycles, + uint32_t *hotloop_leftover_cycles, + uint32_t *matmul4x2_leftover_cycles) +{ + uint32_t im2col_add; + uint32_t hotloop_prep_add; + uint32_t hotloop_add; + uint32_t threshold_add; + uint32_t hotloop_leftover_add; + uint32_t matmul4x2_leftover_add; +#endif + //uint16_t ch_in_r = PACK_INT2_SIZE(ch_in); + uint16_t ch_in_r = ch_in/5; + uint16_t ch_out_r = ch_out/5; + uint16_t ch_in_c = ch_in_r * 4; + uint16_t ch_out_c = ch_out_r * 4; +#ifdef FC_TEST + int core_id = 0; +#else + int core_id = pi_core_id(); +#endif + uint8_t * pIm2ColBase = pIm2ColBuffer + (2 * core_id * ch_in_r * dim_kernel_x * dim_kernel_y); + int i_out_y, i_out_x, i_ker_y, i_ker_x; + int Log2Core; + + uint8_t extra_chunk = ((dim_out_y & (NUM_CORES-1)) != 0); + uint8_t extra_chunk_r; + uint16_t dim_out_x_r; + uint8_t section; + int core_id_r; + + if(extra_chunk && dim_out_x > 1) + { + Log2Core = log2(NUM_CORES >> 1); + core_id_r = (core_id >> 1); + dim_out_x_r = (dim_out_x >> 1); + section = (core_id & 0x1); + extra_chunk_r = ((dim_out_y & ((NUM_CORES >> 1) - 1)) != 0); + } + else + { + Log2Core = log2(NUM_CORES); + core_id_r = core_id; + dim_out_x_r = dim_out_x; + section = 0; + extra_chunk_r = extra_chunk; + extra_chunk = 0; + } + + uint8_t flag_dim_out_x_odd = dim_out_x & 0x01; + + int chunk = (dim_out_y >> Log2Core) + extra_chunk_r; + + int start_pixel = min((chunk * core_id_r), dim_out_y); + int stop_pixel = min(start_pixel + chunk, dim_out_y); + + uint8_t *pIm2Col = pIm2ColBase; + uint8_t *pOutBuffer = pOut + (start_pixel * ch_out_r * dim_out_x) + (section * ch_out_r * dim_out_x_r); + int thrc_res1 = 0, thrc_res2 = 0; + + for (i_out_y = start_pixel; i_out_y < stop_pixel; i_out_y++) + { + for(i_out_x=(section * dim_out_x_r); i_out_x<(dim_out_x_r + (section * (dim_out_x_r + flag_dim_out_x_odd))); i_out_x++) + { + #ifdef PROFILE + //printf("Started im2col counter\n"); + reset_cycle_counter(); + start_cycle_counter(); + #endif + if(i_out_y < padding_y_top) + { + for(i_ker_y=((i_out_y * stride_y) - padding_y_top); i_ker_y<((i_out_y * stride_y) - padding_y_top + dim_kernel_y); i_ker_y++) + { + for(i_ker_x=((i_out_x * stride_x) - padding_x_left); i_ker_x<((i_out_x * stride_x) - padding_x_left + dim_kernel_x); i_ker_x++) + { + if((i_ker_y < 0) || (i_ker_y >= dim_in_y) || (i_ker_x < 0) || (i_ker_x >= dim_in_x)) + { + xpulp_tnn_zero_mem_ternary(pIm2Col, ch_in_c, 0); + } + else + { + xpulp_nn_im2col_u2_to_u2((uint8_t*) (pIn + ((i_ker_y * dim_in_x + i_ker_x) * ch_in_r)), pIm2Col, ch_in_c); + } + pIm2Col+=ch_in_r; + } + } + } + else if(i_out_y < dim_out_y - padding_y_bottom) + { + if(i_out_x < padding_x_left) + { + for(i_ker_y=((i_out_y * stride_y) - padding_y_top); i_ker_y<((i_out_y * stride_y) - padding_y_top + dim_kernel_y); i_ker_y++) + { + for(i_ker_x=((i_out_x * stride_x) - padding_x_left); i_ker_x<((i_out_x * stride_x) - padding_x_left + dim_kernel_x); i_ker_x++) + { + if((i_ker_x < 0) || (i_ker_x >= dim_in_x)) + { + xpulp_tnn_zero_mem_ternary(pIm2Col, ch_in_c, 0); + } + else + { + xpulp_nn_im2col_u2_to_u2((uint8_t*) (pIn + ((i_ker_y * dim_in_x + i_ker_x) * ch_in_r)), pIm2Col, ch_in_c); + } + pIm2Col+=ch_in_r; + } + } + } + else if(i_out_x < (dim_out_x - padding_x_right)) + { + for(i_ker_y=((i_out_y * stride_y) - padding_y_top); i_ker_y<((i_out_y * stride_y) - padding_y_top + dim_kernel_y); i_ker_y++) + { + xpulp_nn_im2col_u2_to_u2((uint8_t*) pIn + (i_ker_y * dim_in_x + i_out_x * stride_x - padding_x_left)*ch_in_r,pIm2Col,ch_in_c * dim_kernel_x); + pIm2Col+= ch_in_r * dim_kernel_x; + } + } + else + { + for(i_ker_y=((i_out_y * stride_y) - padding_y_top); i_ker_y<((i_out_y * stride_y) - padding_y_top + dim_kernel_y); i_ker_y++) + { + for(i_ker_x = i_out_x * stride_x - padding_x_left; i_ker_x < i_out_x * stride_x - padding_x_left + dim_kernel_x; i_ker_x++) + { + if((i_ker_x < 0) || (i_ker_x >= dim_in_x)) + { + xpulp_tnn_zero_mem_ternary(pIm2Col, ch_in_c, 0); + } + else + { + xpulp_nn_im2col_u2_to_u2((uint8_t *)pIn + (i_ker_y*dim_in_x+i_ker_x)* ch_in_r, pIm2Col, ch_in_c); + } + pIm2Col += ch_in_r; + } + } + } + } + else + { + for(i_ker_y=((i_out_y * stride_y) - padding_y_top); i_ker_y<((i_out_y * stride_y) - padding_y_top + dim_kernel_y); i_ker_y++) + { + for(i_ker_x = i_out_x * stride_x - padding_x_left; i_ker_x < i_out_x * stride_x - padding_x_left + dim_kernel_x; i_ker_x++) + { + if(i_ker_y < 0 || (i_ker_y >= dim_in_y) || i_ker_x < 0 || i_ker_x >= dim_in_x) + { + xpulp_tnn_zero_mem_ternary(pIm2Col, ch_in_c, 0); + } + else + { + xpulp_nn_im2col_u2_to_u2((uint8_t *) pIn + (i_ker_y * dim_in_x + i_ker_x) * ch_in_r, pIm2Col, ch_in_c); + } + pIm2Col += ch_in_r; + } + } + } + #ifdef PROFILE + stop_cycle_counter(); + //printf("Stopped im2col counter\n"); + read_cycle_counter(im2col_add); + *im2col_cycles += im2col_add; + #endif + if(pIm2Col == (pIm2ColBase + ((ch_in_r * dim_kernel_x * dim_kernel_y) << 1))) + { + pOutBuffer = xpulp_tnn_matmul_ternary_signed( + pIm2ColBase, + pBias, + pThr, + pOutBuffer, + pOutBuffer + ch_out_r, + pWeight, + (ch_in * dim_kernel_x * dim_kernel_y), + ch_out, + &thrc_res1, + #ifndef PROFILE + &thrc_res2 + #else + &thrc_res2, + hotloop_prep_cycles, + hotloop_cycles, + threshold_cycles, + hotloop_leftover_cycles + #endif + ); + pIm2Col = pIm2ColBase; + } + } + thrc_res1 = 0; + if(pIm2Col != pIm2ColBase) + { + #ifdef PROFILE + //printf("Started matmul4x2_leftover counter\n"); + reset_cycle_counter(); + start_cycle_counter(); + #endif + pOutBuffer = xpulp_tnn_matmul_ternary_signed_4x1( + pIm2ColBase, + pBias, + pThr, + pOutBuffer, + pWeight, + (ch_in * dim_kernel_x * dim_kernel_y), + ch_out, +#ifndef PROFILE + &thrc_res1 +#else + &thrc_res1, + hotloop_prep_cycles, + hotloop_leftover_cycles, // everything done by the 4x1 hotloop is "hotloop leftover"! + threshold_cycles, + hotloop_leftover_cycles +#endif + ); + #ifdef PROFILE + stop_cycle_counter(); + //printf("Stopped matmul4x2_leftover counter\n"); + read_cycle_counter(matmul4x2_leftover_add); + *matmul4x2_leftover_cycles += matmul4x2_leftover_add; + #endif + } + pOutBuffer+=(extra_chunk * ((dim_out_x_r + ((1 - section) * flag_dim_out_x_odd)) * ch_out_r)); + pIm2Col = pIm2ColBase; + } +#ifndef FC_TEST + pi_cl_team_barrier(0); +#endif +} diff --git a/rt_nn_tests/xptnn_conv/xpulp_tnn_conv_ternary_signed.h b/rt_nn_tests/xptnn_conv/xpulp_tnn_conv_ternary_signed.h new file mode 100644 index 0000000..d05c2ab --- /dev/null +++ b/rt_nn_tests/xptnn_conv/xpulp_tnn_conv_ternary_signed.h @@ -0,0 +1,40 @@ +#ifndef __XPULP_NN_CONV_TERNARY_SIGNED_H +#define __XPULP_NN_CONV_TERNARY_SIGNED_H +#include +#include "pulp_nn_utils.h" + + + +// TODO: review argument order +void __attribute__((noinline)) xpulp_tnn_conv_ternary_signed( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pWeight, + uint32_t *pThr, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, +#ifndef PROFILE + uint16_t stride_y); +#else + uint16_t stride_y, + uint32_t *im2col_cycles, + uint32_t *hotloop_prep_cycles, + uint32_t *hotloop_cycles, + uint32_t *threshold_cycles, + uint32_t *hotloop_leftover_cycles, + uint32_t *matmul4x2_leftover_cycles); +#endif +#endif diff --git a/rt_nn_tests/xptnn_conv/xpulp_tnn_linear_ternary_i32.h b/rt_nn_tests/xptnn_conv/xpulp_tnn_linear_ternary_i32.h new file mode 100644 index 0000000..5c353d3 --- /dev/null +++ b/rt_nn_tests/xptnn_conv/xpulp_tnn_linear_ternary_i32.h @@ -0,0 +1,12 @@ +#ifndef __XPULP_TNN_LINEAR_TERNARY_I32_H +#define __XPULP_TNN_LINEAR_TERNARY_I32_H + +void __attribute__((noinline)) xpulp_tnn_linear_ternary_i32( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + uint16_t dim_vec, + uint16_t num_o_neurons); + +#endif \ No newline at end of file diff --git a/rt_nn_tests/xptnn_conv/xpulp_tnn_linear_ternary_i32_signed.h b/rt_nn_tests/xptnn_conv/xpulp_tnn_linear_ternary_i32_signed.h new file mode 100644 index 0000000..218c5c4 --- /dev/null +++ b/rt_nn_tests/xptnn_conv/xpulp_tnn_linear_ternary_i32_signed.h @@ -0,0 +1,12 @@ +#ifndef __XPULP_TNN_LINEAR_TERNARY_I32_SIGNED_H +#define __XPULP_TNN_LINEAR_TERNARY_I32_SIGNED_H + +void __attribute__((noinline)) xpulp_tnn_linear_ternary_i32_signed( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + uint16_t dim_vec, + uint16_t num_o_neurons); + +#endif \ No newline at end of file diff --git a/rt_nn_tests/xptnn_conv/xpulp_tnn_matmul_ternary.h b/rt_nn_tests/xptnn_conv/xpulp_tnn_matmul_ternary.h new file mode 100644 index 0000000..914daee --- /dev/null +++ b/rt_nn_tests/xptnn_conv/xpulp_tnn_matmul_ternary.h @@ -0,0 +1,113 @@ +#ifndef __XPULP_TNN_MATMUL_TERNARY_H +#define __XPULP_TNN_MATMUL_TERNARY_H + +#include "pulp_nn_utils.h" + +uint8_t * __attribute__((noinline)) xpulp_tnn_matmul_ternary( + uint8_t *pIn, + int8_t *pBias, + uint32_t *pThr, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pWeight, + uint16_t num_col_im2col, + uint16_t ch_out, +#ifndef PROFILE + uint32_t *thrc_res1, + uint32_t *thrc_res2); +#else + uint32_t *thrc_res1, + uint32_t *thrc_res2, + uint32_t *hotloop_prep_cycles, + uint32_t *hotloop_cycles, + uint32_t *threshold_cycles, + uint32_t *hotloop_leftover_cycles); +#endif + +inline void __attribute__((aligned(4))) hotloop_4x2( + int *sum, int *sum2, int *sum3, int *sum4, int *sum5, int *sum6, int *sum7, int *sum8, + uint32_t *ptrA, uint32_t *ptrA2, uint32_t *ptrA3, uint32_t *ptrA4, + uint32_t *ptrB, uint32_t *ptrB2, int num_col_im2col_words +){ + for (int j=0; j +#include +#include "pulp_nn_utils.h" +#include "xpulp_tnn_matmul_ternary_signed.h" + + + +// TODO: review argument order +uint8_t * __attribute__((noinline)) xpulp_tnn_matmul_ternary_signed( + uint8_t *pIn, + int8_t *pBias, + uint32_t *pThr, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pWeight, + uint16_t num_col_im2col, + uint16_t ch_out, +#ifndef PROFILE + uint32_t *thrc_res1, + uint32_t *thrc_res2) +{ +#else + uint32_t *thrc_res1, + uint32_t *thrc_res2, + uint32_t *hotloop_prep_cycles, + uint32_t *hotloop_cycles, + uint32_t *threshold_cycles, + uint32_t *hotloop_leftover_cycles) +{ + uint32_t hotloop_prep_add; + uint32_t hotloop_add; + uint32_t threshold_add; + uint32_t hotloop_leftover_add; +#endif + uint16_t ch_out_r = ch_out / 5; + + uint16_t num_col_im2col_w = num_col_im2col / 5; + uint16_t num_col_im2col_a = num_col_im2col_w; + uint16_t num_col_im2col_c = num_col_im2col_w << 2; + // used for hotloop calls + uint16_t num_col_im2col_words = num_col_im2col_w >> 2; + + uint8_t *pA = pWeight; + v2s *currThr = (v2s *) pThr; + + int res1, res2, incr_val; + res1 = *thrc_res1; + res2 = *thrc_res2; + incr_val = 0; + + for(int i=0; i < ch_out >> 2; i++) + { + #ifdef PROFILE + //printf("Started hotloop_prep counter\n"); + reset_cycle_counter(); + start_cycle_counter(); + #endif + uint8_t *pB = pIn; + uint8_t *pB2 = (pB + num_col_im2col_a); + + uint32_t *ptrB = (uint32_t *) pB; + uint32_t *ptrB2 = (uint32_t *) pB2; + + uint8_t *pA2 = (pA + num_col_im2col_w); + uint8_t *pA3 = (pA2 + num_col_im2col_w); + uint8_t *pA4 = (pA3 + num_col_im2col_w); + + uint32_t *ptrA = (uint32_t *) pA ; + uint32_t *ptrA2 = (uint32_t *) pA2; + uint32_t *ptrA3 = (uint32_t *) pA3; + uint32_t *ptrA4 = (uint32_t *) pA4; + + ptrA = MacLoadInit(1, 0, 0, 0, ptrA); + ptrA2 = MacLoadInit(1, 0, 1, 0, ptrA2); + ptrA3 = MacLoadInit(1, 0, 2, 0, ptrA3); + ptrA4 = MacLoadInit(1, 0, 3, 0, ptrA4); + + + ptrB = MacLoadInit(0, 1, 0, 0, ptrB); + ptrB2 = MacLoadInit(0, 1, 0, 1, ptrB2); + + int sum = 0; + int sum2 = 0; + int sum3 = 0; + int sum4 = 0; + int sum5 = 0; + int sum6 = 0; + int sum7 = 0; + int sum8 = 0; + + if (pBias != NULL) + { + sum = ((int) (*pBias++)); + sum2 = ((int) (*pBias++)); + sum3 = ((int) (*pBias++)); + sum4 = ((int) (*pBias++)); + + sum5 = sum; + sum6 = sum2; + sum7 = sum3; + sum8 = sum4; + } + #ifdef PROFILE + stop_cycle_counter(); + //printf("Stopped hotloop_prep counter\n"); + read_cycle_counter(hotloop_prep_add); + *hotloop_prep_cycles += hotloop_prep_add; + #endif + + #ifdef PROFILE + //printf("Started hotloop counter\n"); + reset_cycle_counter(); + start_cycle_counter(); + #endif + + hotloop_4x2( + &sum, &sum2, &sum3, &sum4, &sum5, &sum6, &sum7, &sum8, + ptrA, ptrA2, ptrA3, ptrA4, ptrB, ptrB2, num_col_im2col_words + ); + + #ifdef PROFILE + stop_cycle_counter(); + //printf("Stopped hotloop counter\n"); + read_cycle_counter(hotloop_add); + *hotloop_cycles += hotloop_add; + #endif + + #ifdef PROFILE + //printf("Started hotloop_leftover counter\n"); + reset_cycle_counter(); + start_cycle_counter(); + #endif + int col_cnt_im2col = num_col_im2col_c & 0xf; + + if (col_cnt_im2col) + { + uint16_t loop_cnt_im2col_w = (num_col_im2col_words) << 2; + pA+=loop_cnt_im2col_w; + pA2+=loop_cnt_im2col_w; + pA3+=loop_cnt_im2col_w; + pA4+=loop_cnt_im2col_w; + + uint16_t loop_cnt_im2col_a = (num_col_im2col_words) << 2; + pB+=loop_cnt_im2col_a; + pB2+=loop_cnt_im2col_a; + + volatile uint32_t valA, valA2, valA3, valA4, valB, valB2; + // pack the remaining weights and activations into 32-bit vectors + // padding with 0xd9 because ternary_decoder(0xd9) = 0000000000 + if (col_cnt_im2col == 4) + { + valA = 0xd9 << 24 | 0xd9 << 16 | 0xd9 << 8 | *pA; + valA2 = 0xd9 << 24 | 0xd9 << 16 | 0xd9 << 8 | *pA2; + valA3 = 0xd9 << 24 | 0xd9 << 16 | 0xd9 << 8 | *pA3; + valA4 = 0xd9 << 24 | 0xd9 << 16 | 0xd9 << 8 | *pA4; + + valB = 0xd9 << 24 | 0xd9 << 16 | 0xd9 << 8 | *pB; + valB2 = 0xd9 << 24 | 0xd9 << 16 | 0xd9 << 8 | *pB2; + } + else if (col_cnt_im2col == 8) + { + valA = 0xd9 << 24 | 0xd9 << 16 | *(pA + 1) << 8 | *pA; + valA2 = 0xd9 << 24 | 0xd9 << 16 | *(pA2 + 1) << 8 | *pA2; + valA3 = 0xd9 << 24 | 0xd9 << 16 | *(pA3 + 1) << 8 | *pA3; + valA4 = 0xd9 << 24 | 0xd9 << 16 | *(pA4 + 1) << 8 | *pA4; + + valB = 0xd9 << 24 | 0xd9 << 16 | *(pB + 1) << 8 | *pB; + valB2 = 0xd9 << 24 | 0xd9 << 16 | *(pB2 + 1) << 8 | *pB2; + } + else // col_cnt_im2col == 12 + { + valA = 0xd9 << 24 | *(pA + 2) << 16 | *(pA + 1) << 8 | *pA; + valA2 = 0xd9 << 24 | *(pA2 + 2) << 16 | *(pA2 + 1) << 8 | *pA2; + valA3 = 0xd9 << 24 | *(pA3 + 2) << 16 | *(pA3 + 1) << 8 | *pA3; + valA4 = 0xd9 << 24 | *(pA4 + 2) << 16 | *(pA4 + 1) << 8 | *pA4; + + valB = 0xd9 << 24 | *(pB + 2) << 16 | *(pB + 1) << 8 | *pB; + valB2 = 0xd9 << 24 | *(pB2 + 2) << 16 | *(pB2 + 1) << 8 | *pB2; + } + + uint32_t *pA_p = &valA; + uint32_t *pA2_p = &valA2; + uint32_t *pA3_p = &valA3; + uint32_t *pA4_p = &valA4; + + uint32_t *pB_p = &valB; + uint32_t *pB2_p = &valB2; + + pA_p = MacLoadInit(1, 0, 0, 0, pA_p); + pA2_p = MacLoadInit(1, 0, 1, 0, pA2_p); + pA3_p = MacLoadInit(1, 0, 2, 0, pA3_p); + pA4_p = MacLoadInit(1, 0, 3, 0, pA4_p); + pB_p = MacLoadInit(0, 1, 0, 0, pB_p); + pB2_p = MacLoadInit(0, 1, 0, 1, pB2_p); + + pA += PACK_INT2_SIZE(col_cnt_im2col); + + sum = MacLoads20(0, 0, 0, 0, pA_p, sum); + sum2 = MacLoads20(0, 0, 1, 0, pA2_p, sum2); + sum3 = MacLoads20(0, 0, 2, 0, pA3_p, sum3); + sum4 = MacLoads20(0, 0, 3, 0, pA4_p, sum4); + + sum5 = MacLoads20(0, 0, 0, 1, pA_p, sum5); + sum6 = MacLoads20(0, 0, 1, 1, pA2_p, sum6); + sum7 = MacLoads20(0, 0, 2, 1, pA3_p, sum7); + sum8 = MacLoads20(0, 0, 3, 1, pA4_p, sum8); + } + #ifdef PROFILE + stop_cycle_counter(); + //printf("Stopped hotloop_leftover counter\n"); + read_cycle_counter(hotloop_leftover_add); + *hotloop_leftover_cycles += hotloop_leftover_add; + #endif + + #ifdef PROFILE + //printf("Started threshold counter\n"); + reset_cycle_counter(); + start_cycle_counter(); + #endif + res1 = thr_cmp(res1, sum, *currThr); + check_store(res1, pOut); + res2 = thr_cmp(res2, sum5, *currThr++); + check_store(res2, pOut2); + reset_currThr(); + + res1 = thr_cmp(res1, sum2, *currThr); + check_store(res1, pOut); + res2 = thr_cmp(res2, sum6, *currThr++); + check_store(res2, pOut2); + reset_currThr(); + + res1 = thr_cmp(res1, sum3, *currThr); + check_store(res1, pOut); + res2 = thr_cmp(res2, sum7, *currThr++); + check_store(res2, pOut2); + reset_currThr(); + + res1 = thr_cmp(res1, sum4, *currThr); + check_store(res1, pOut); + res2 = thr_cmp(res2, sum8, *currThr++); + check_store(res2, pOut2); + reset_currThr(); + + #ifdef PROFILE + stop_cycle_counter(); + //printf("Stopped threshold counter\n"); + read_cycle_counter(threshold_add); + *threshold_cycles += threshold_add; + #endif + + if (!col_cnt_im2col) + { + pA+=(4*num_col_im2col_w); + } + else + { + pA+=(3*num_col_im2col_w); + } + } + + // leftover part : the hotloop above produces 4N output channels. If out_ch not divisible + // by 4, the remaining output channels are computed below + int out_ch_left = ch_out & 0x3; + + if (out_ch_left == 1) + { + #ifdef PROFILE + //printf("Started hotloop_prep counter\n"); + reset_cycle_counter(); + start_cycle_counter(); + #endif + uint8_t *pB = pIn; + uint8_t *pB2 = (pB + num_col_im2col_a); + + uint32_t *ptrB = (uint32_t *) pB; + uint32_t *ptrB2 = (uint32_t *) pB2; + + uint32_t *ptrA = (uint32_t *) pA ; + + ptrA = MacLoadInit(1, 0, 0, 0, ptrA); + + + ptrB = MacLoadInit(0, 1, 0, 0, ptrB); + ptrB2 = MacLoadInit(0, 1, 0, 1, ptrB2); + + int sum = 0; + int sum2 = 0; + + if (pBias != NULL) + { + sum = ((int) (*pBias++)); + sum2 = sum; + } + #ifdef PROFILE + stop_cycle_counter(); + //printf("Stopped hotloop_prep counter\n"); + read_cycle_counter(hotloop_prep_add); + *hotloop_prep_cycles += hotloop_prep_add; + #endif + + #ifdef PROFILE + //printf("Started hotloop counter\n"); + reset_cycle_counter(); + start_cycle_counter(); + #endif + + hotloop_1x2( + &sum, &sum2, ptrA, ptrB, ptrB2, num_col_im2col_words + ); + + #ifdef PROFILE + stop_cycle_counter(); + //printf("Stopped hotloop counter\n"); + read_cycle_counter(hotloop_add); + *hotloop_cycles += hotloop_add; + #endif + + #ifdef PROFILE + //printf("Started hotloop_leftover counter\n"); + reset_cycle_counter(); + start_cycle_counter(); + #endif + int col_cnt_im2col = num_col_im2col_c & 0xf; + + if (col_cnt_im2col) + { + uint16_t loop_cnt_im2col_w = (num_col_im2col_words) << 2; + pA+=loop_cnt_im2col_w; + + uint16_t loop_cnt_im2col_a = (num_col_im2col_words) << 2; + pB+=loop_cnt_im2col_a; + pB2+=loop_cnt_im2col_a; + + volatile uint32_t valA, valB, valB2; + // pack the remaining weights and activations into 32-bit vectors + // padding with 0xd9 because ternary_decoder(0xd9) = 0000000000 + if (col_cnt_im2col == 4) + { + valA = 0xd9 << 24 | 0xd9 << 16 | 0xd9 << 8 | *pA; + + valB = 0xd9 << 24 | 0xd9 << 16 | 0xd9 << 8 | *pB; + valB2 = 0xd9 << 24 | 0xd9 << 16 | 0xd9 << 8 | *pB2; + } + else if (col_cnt_im2col == 8) + { + valA = 0xd9 << 24 | 0xd9 << 16 | *(pA + 1) << 8 | *pA; + + valB = 0xd9 << 24 | 0xd9 << 16 | *(pB + 1) << 8 | *pB; + valB2 = 0xd9 << 24 | 0xd9 << 16 | *(pB2 + 1) << 8 | *pB2; + } + else // col_cnt_im2col == 12 + { + valA = 0xd9 << 24 | *(pA + 2) << 16 | *(pA + 1) << 8 | *pA; + + valB = 0xd9 << 24 | *(pB + 2) << 16 | *(pB + 1) << 8 | *pB; + valB2 = 0xd9 << 24 | *(pB2 + 2) << 16 | *(pB2 + 1) << 8 | *pB2; + } + + uint32_t *pA_p = &valA; + + uint32_t *pB_p = &valB; + uint32_t *pB2_p = &valB2; + + pA_p = MacLoadInit(1, 0, 0, 0, pA_p); + pB_p = MacLoadInit(0, 1, 0, 0, pB_p); + pB2_p = MacLoadInit(0, 1, 0, 1, pB2_p); + + pA += PACK_INT2_SIZE(col_cnt_im2col); + + sum = MacLoads20(0, 0, 0, 0, pA_p, sum); + + sum2 = MacLoads20(0, 0, 0, 1, pA_p, sum2); + } + #ifdef PROFILE + stop_cycle_counter(); + //printf("Stopped hotloop_leftover counter\n"); + read_cycle_counter(hotloop_leftover_add); + *hotloop_leftover_cycles += hotloop_leftover_add; + #endif + + #ifdef PROFILE + //printf("Started threshold counter\n"); + reset_cycle_counter(); + start_cycle_counter(); + #endif + res1 = thr_cmp(res1, sum, *currThr); + check_store(res1, pOut); + res2 = thr_cmp(res2, sum2, *currThr++); + check_store(res2, pOut2); + reset_currThr(); + + #ifdef PROFILE + stop_cycle_counter(); + //printf("Stopped threshold counter\n"); + read_cycle_counter(threshold_add); + *threshold_cycles += threshold_add; + #endif + + if (!col_cnt_im2col) + { + pA+=num_col_im2col_w; + } + } + else if (out_ch_left == 2) + { + #ifdef PROFILE + //printf("Started hotloop_prep counter\n"); + reset_cycle_counter(); + start_cycle_counter(); + #endif + uint8_t *pB = pIn; + uint8_t *pB2 = (pB + num_col_im2col_a); + + uint32_t *ptrB = (uint32_t *) pB; + uint32_t *ptrB2 = (uint32_t *) pB2; + + uint8_t *pA2 = (pA + num_col_im2col_w); + + uint32_t *ptrA = (uint32_t *) pA ; + uint32_t *ptrA2 = (uint32_t *) pA2; + + ptrA = MacLoadInit(1, 0, 0, 0, ptrA); + ptrA2 = MacLoadInit(1, 0, 1, 0, ptrA2); + + + ptrB = MacLoadInit(0, 1, 0, 0, ptrB); + ptrB2 = MacLoadInit(0, 1, 0, 1, ptrB2); + + int sum = 0; + int sum2 = 0; + int sum3 = 0; + int sum4 = 0; + + if (pBias != NULL) + { + sum = ((int) (*pBias++)); + sum2 = ((int) (*pBias++)); + + sum3 = sum; + sum4 = sum2; + } + #ifdef PROFILE + stop_cycle_counter(); + //printf("Stopped hotloop_prep counter\n"); + read_cycle_counter(hotloop_prep_add); + *hotloop_prep_cycles += hotloop_prep_add; + #endif + + #ifdef PROFILE + //printf("Started hotloop counter\n"); + reset_cycle_counter(); + start_cycle_counter(); + #endif + + hotloop_2x2( + &sum, &sum2, &sum3, &sum4, ptrA, ptrA2, ptrB, ptrB2, num_col_im2col_words + ); + + #ifdef PROFILE + stop_cycle_counter(); + //printf("Stopped hotloop counter\n"); + read_cycle_counter(hotloop_add); + *hotloop_cycles += hotloop_add; + #endif + + #ifdef PROFILE + //printf("Started hotloop_leftover counter\n"); + reset_cycle_counter(); + start_cycle_counter(); + #endif + int col_cnt_im2col = num_col_im2col_c & 0xf; + + if (col_cnt_im2col) + { + uint16_t loop_cnt_im2col_w = (num_col_im2col_words) << 2; + pA+=loop_cnt_im2col_w; + pA2+=loop_cnt_im2col_w; + + uint16_t loop_cnt_im2col_a = (num_col_im2col_words) << 2; + pB+=loop_cnt_im2col_a; + pB2+=loop_cnt_im2col_a; + + volatile uint32_t valA, valA2, valB, valB2; + // pack the remaining weights and activations into 32-bit vectors + // padding with 0xd9 because ternary_decoder(0xd9) = 0000000000 + if (col_cnt_im2col == 4) + { + valA = 0xd9 << 24 | 0xd9 << 16 | 0xd9 << 8 | *pA; + valA2 = 0xd9 << 24 | 0xd9 << 16 | 0xd9 << 8 | *pA2; + + valB = 0xd9 << 24 | 0xd9 << 16 | 0xd9 << 8 | *pB; + valB2 = 0xd9 << 24 | 0xd9 << 16 | 0xd9 << 8 | *pB2; + } + else if (col_cnt_im2col == 8) + { + valA = 0xd9 << 24 | 0xd9 << 16 | *(pA + 1) << 8 | *pA; + valA2 = 0xd9 << 24 | 0xd9 << 16 | *(pA2 + 1) << 8 | *pA2; + + valB = 0xd9 << 24 | 0xd9 << 16 | *(pB + 1) << 8 | *pB; + valB2 = 0xd9 << 24 | 0xd9 << 16 | *(pB2 + 1) << 8 | *pB2; + } + else // col_cnt_im2col == 12 + { + valA = 0xd9 << 24 | *(pA + 2) << 16 | *(pA + 1) << 8 | *pA; + valA2 = 0xd9 << 24 | *(pA2 + 2) << 16 | *(pA2 + 1) << 8 | *pA2; + + valB = 0xd9 << 24 | *(pB + 2) << 16 | *(pB + 1) << 8 | *pB; + valB2 = 0xd9 << 24 | *(pB2 + 2) << 16 | *(pB2 + 1) << 8 | *pB2; + } + + uint32_t *pA_p = &valA; + uint32_t *pA2_p = &valA2; + + uint32_t *pB_p = &valB; + uint32_t *pB2_p = &valB2; + + pA_p = MacLoadInit(1, 0, 0, 0, pA_p); + pA2_p = MacLoadInit(1, 0, 1, 0, pA2_p); + pB_p = MacLoadInit(0, 1, 0, 0, pB_p); + pB2_p = MacLoadInit(0, 1, 0, 1, pB2_p); + + pA += PACK_INT2_SIZE(col_cnt_im2col); + + sum = MacLoads20(0, 0, 0, 0, pA_p, sum); + sum2 = MacLoads20(0, 0, 1, 0, pA2_p, sum2); + + sum3 = MacLoads20(0, 0, 0, 1, pA_p, sum3); + sum4 = MacLoads20(0, 0, 1, 1, pA2_p, sum4); + } + #ifdef PROFILE + stop_cycle_counter(); + //printf("Stopped hotloop_leftover counter\n"); + read_cycle_counter(hotloop_leftover_add); + *hotloop_leftover_cycles += hotloop_leftover_add; + #endif + + #ifdef PROFILE + //printf("Started threshold counter\n"); + reset_cycle_counter(); + start_cycle_counter(); + #endif + res1 = thr_cmp(res1, sum, *currThr); + check_store(res1, pOut); + res2 = thr_cmp(res2, sum3, *currThr++); + check_store(res2, pOut2); + reset_currThr(); + + res1 = thr_cmp(res1, sum2, *currThr); + check_store(res1, pOut); + res2 = thr_cmp(res2, sum4, *currThr++); + check_store(res2, pOut2); + reset_currThr(); + + #ifdef PROFILE + stop_cycle_counter(); + //printf("Stopped threshold counter\n"); + read_cycle_counter(threshold_add); + *threshold_cycles += threshold_add; + #endif + + if (!col_cnt_im2col) + { + pA+=(2*num_col_im2col_w); + } + else + { + pA+=num_col_im2col_w; + } + } + else if (out_ch_left == 3) + { + #ifdef PROFILE + //printf("Started hotloop_prep counter\n"); + reset_cycle_counter(); + start_cycle_counter(); + #endif + uint8_t *pB = pIn; + uint8_t *pB2 = (pB + num_col_im2col_a); + + uint32_t *ptrB = (uint32_t *) pB; + uint32_t *ptrB2 = (uint32_t *) pB2; + + uint8_t *pA2 = (pA + num_col_im2col_w); + uint8_t *pA3 = (pA2 + num_col_im2col_w); + + uint32_t *ptrA = (uint32_t *) pA ; + uint32_t *ptrA2 = (uint32_t *) pA2; + uint32_t *ptrA3 = (uint32_t *) pA3; + ptrA = MacLoadInit(1, 0, 0, 0, ptrA); + ptrA2 = MacLoadInit(1, 0, 1, 0, ptrA2); + ptrA3 = MacLoadInit(1, 0, 2, 0, ptrA3); + + + ptrB = MacLoadInit(0, 1, 0, 0, ptrB); + ptrB2 = MacLoadInit(0, 1, 0, 1, ptrB2); + + int sum = 0; + int sum2 = 0; + int sum3 = 0; + int sum4 = 0; + int sum5 = 0; + int sum6 = 0; + + if (pBias != NULL) + { + sum = ((int) (*pBias++)); + sum2 = ((int) (*pBias++)); + sum3 = ((int) (*pBias++)); + + sum4 = sum; + sum5 = sum2; + sum6 = sum3; + } + #ifdef PROFILE + stop_cycle_counter(); + //printf("Stopped hotloop_prep counter\n"); + read_cycle_counter(hotloop_prep_add); + *hotloop_prep_cycles += hotloop_prep_add; + #endif + + #ifdef PROFILE + //printf("Started hotloop counter\n"); + reset_cycle_counter(); + start_cycle_counter(); + #endif + + hotloop_3x2( + &sum, &sum2, &sum3, &sum4, &sum5, &sum6, + ptrA, ptrA2, ptrA3, ptrB, ptrB2, num_col_im2col_words + ); + + #ifdef PROFILE + stop_cycle_counter(); + //printf("Stopped hotloop counter\n"); + read_cycle_counter(hotloop_add); + *hotloop_cycles += hotloop_add; + #endif + + #ifdef PROFILE + //printf("Started hotloop_leftover counter\n"); + reset_cycle_counter(); + start_cycle_counter(); + #endif + int col_cnt_im2col = num_col_im2col_c & 0xf; + + if (col_cnt_im2col) + { + uint16_t loop_cnt_im2col_w = (num_col_im2col_words) << 2; + pA+=loop_cnt_im2col_w; + pA2+=loop_cnt_im2col_w; + pA3+=loop_cnt_im2col_w; + + uint16_t loop_cnt_im2col_a = (num_col_im2col_words) << 2; + pB+=loop_cnt_im2col_a; + pB2+=loop_cnt_im2col_a; + + volatile uint32_t valA, valA2, valA3, valB, valB2; + // pack the remaining weights and activations into 32-bit vectors + // padding with 0xd9 because ternary_decoder(0xd9) = 0000000000 + if (col_cnt_im2col == 4) + { + valA = 0xd9 << 24 | 0xd9 << 16 | 0xd9 << 8 | *pA; + valA2 = 0xd9 << 24 | 0xd9 << 16 | 0xd9 << 8 | *pA2; + valA3 = 0xd9 << 24 | 0xd9 << 16 | 0xd9 << 8 | *pA3; + + valB = 0xd9 << 24 | 0xd9 << 16 | 0xd9 << 8 | *pB; + valB2 = 0xd9 << 24 | 0xd9 << 16 | 0xd9 << 8 | *pB2; + } + else if (col_cnt_im2col == 8) + { + valA = 0xd9 << 24 | 0xd9 << 16 | *(pA + 1) << 8 | *pA; + valA2 = 0xd9 << 24 | 0xd9 << 16 | *(pA2 + 1) << 8 | *pA2; + valA3 = 0xd9 << 24 | 0xd9 << 16 | *(pA3 + 1) << 8 | *pA3; + + valB = 0xd9 << 24 | 0xd9 << 16 | *(pB + 1) << 8 | *pB; + valB2 = 0xd9 << 24 | 0xd9 << 16 | *(pB2 + 1) << 8 | *pB2; + } + else // col_cnt_im2col == 12 + { + valA = 0xd9 << 24 | *(pA + 2) << 16 | *(pA + 1) << 8 | *pA; + valA2 = 0xd9 << 24 | *(pA2 + 2) << 16 | *(pA2 + 1) << 8 | *pA2; + valA3 = 0xd9 << 24 | *(pA3 + 2) << 16 | *(pA3 + 1) << 8 | *pA3; + + valB = 0xd9 << 24 | *(pB + 2) << 16 | *(pB + 1) << 8 | *pB; + valB2 = 0xd9 << 24 | *(pB2 + 2) << 16 | *(pB2 + 1) << 8 | *pB2; + } + + uint32_t *pA_p = &valA; + uint32_t *pA2_p = &valA2; + uint32_t *pA3_p = &valA3; + + uint32_t *pB_p = &valB; + uint32_t *pB2_p = &valB2; + + pA_p = MacLoadInit(1, 0, 0, 0, pA_p); + pA2_p = MacLoadInit(1, 0, 1, 0, pA2_p); + pA3_p = MacLoadInit(1, 0, 2, 0, pA3_p); + pB_p = MacLoadInit(0, 1, 0, 0, pB_p); + pB2_p = MacLoadInit(0, 1, 0, 1, pB2_p); + + pA += PACK_INT2_SIZE(col_cnt_im2col); + + sum = MacLoads20(0, 0, 0, 0, pA_p, sum); + sum2 = MacLoads20(0, 0, 1, 0, pA2_p, sum2); + sum3 = MacLoads20(0, 0, 2, 0, pA3_p, sum3); + + sum4 = MacLoads20(0, 0, 0, 1, pA_p, sum4); + sum5 = MacLoads20(0, 0, 1, 1, pA2_p, sum5); + sum6 = MacLoads20(0, 0, 2, 1, pA3_p, sum6); + } + #ifdef PROFILE + stop_cycle_counter(); + //printf("Stopped hotloop_leftover counter\n"); + read_cycle_counter(hotloop_leftover_add); + *hotloop_leftover_cycles += hotloop_leftover_add; + #endif + + #ifdef PROFILE + //printf("Started threshold counter\n"); + reset_cycle_counter(); + start_cycle_counter(); + #endif + res1 = thr_cmp(res1, sum, *currThr); + check_store(res1, pOut); + res2 = thr_cmp(res2, sum4, *currThr++); + check_store(res2, pOut2); + reset_currThr(); + + res1 = thr_cmp(res1, sum2, *currThr); + check_store(res1, pOut); + res2 = thr_cmp(res2, sum5, *currThr++); + check_store(res2, pOut2); + reset_currThr(); + + res1 = thr_cmp(res1, sum3, *currThr); + check_store(res1, pOut); + res2 = thr_cmp(res2, sum6, *currThr++); + check_store(res2, pOut2); + reset_currThr(); + + #ifdef PROFILE + stop_cycle_counter(); + //printf("Stopped threshold counter\n"); + read_cycle_counter(threshold_add); + *threshold_cycles += threshold_add; + #endif + + if (!col_cnt_im2col) + { + pA+=(3*num_col_im2col_w); + } + else + { + pA+=(2*num_col_im2col_w); + } + } + + *thrc_res1 = res1; + *thrc_res2 = res2; + + pOut+=incr_val; // ch_out_r if a store was performed, else 0 + return pOut; +} + + + + diff --git a/rt_nn_tests/xptnn_conv/xpulp_tnn_matmul_ternary_signed.h b/rt_nn_tests/xptnn_conv/xpulp_tnn_matmul_ternary_signed.h new file mode 100644 index 0000000..1493b5d --- /dev/null +++ b/rt_nn_tests/xptnn_conv/xpulp_tnn_matmul_ternary_signed.h @@ -0,0 +1,113 @@ +#ifndef __XPULP_TNN_MATMUL_TERNARY_SIGNED_H +#define __XPULP_TNN_MATMUL_TERNARY_SIGNED_H + +#include "pulp_nn_utils.h" + +uint8_t * __attribute__((noinline)) xpulp_tnn_matmul_ternary_signed( + uint8_t *pIn, + int8_t *pBias, + uint32_t *pThr, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pWeight, + uint16_t num_col_im2col, + uint16_t ch_out, +#ifndef PROFILE + uint32_t *thrc_res1, + uint32_t *thrc_res2); +#else + uint32_t *thrc_res1, + uint32_t *thrc_res2, + uint32_t *hotloop_prep_cycles, + uint32_t *hotloop_cycles, + uint32_t *threshold_cycles, + uint32_t *hotloop_leftover_cycles); +#endif + +inline void __attribute__((aligned(4))) hotloop_4x2( + int *sum, int *sum2, int *sum3, int *sum4, int *sum5, int *sum6, int *sum7, int *sum8, + uint32_t *ptrA, uint32_t *ptrA2, uint32_t *ptrA3, uint32_t *ptrA4, + uint32_t *ptrB, uint32_t *ptrB2, int num_col_im2col_words +){ + for (int j=0; j +#include +#include "pulp_nn_utils.h" +#include "xpulp_tnn_matmul_ternary_signed_4x1.h" + + + +// TODO: review argument order +uint8_t * __attribute__((noinline)) xpulp_tnn_matmul_ternary_signed_4x1( + uint8_t *pIn, + int8_t *pBias, + uint32_t *pThr, + uint8_t *pOut, + uint8_t *pWeight, + uint16_t num_col_im2col, + uint16_t ch_out, +#ifndef PROFILE + uint32_t *thrc_res) +{ +#else + uint32_t *thrc_res, + uint32_t *hotloop_prep_cycles, + uint32_t *hotloop_cycles, + uint32_t *threshold_cycles, + uint32_t *hotloop_leftover_cycles) +{ + uint32_t hotloop_prep_add; + uint32_t hotloop_add; + uint32_t threshold_add; + uint32_t hotloop_leftover_add; +#endif + uint16_t ch_out_r = ch_out / 5; + + uint16_t num_col_im2col_w = num_col_im2col / 5; + uint16_t num_col_im2col_a = num_col_im2col_w; + uint16_t num_col_im2col_c = num_col_im2col_w << 2; + // used for hotloop calls + uint16_t num_col_im2col_words = num_col_im2col_w >> 2; + + uint8_t *pA = pWeight; + v2s *currThr = (v2s *) pThr; + + int res; + res = *thrc_res; + + for(int i=0; i < ch_out >> 2; i++) + { + #ifdef PROFILE + //printf("Started hotloop_prep counter\n"); + reset_cycle_counter(); + start_cycle_counter(); + #endif + uint8_t *pB = pIn; + + uint32_t *ptrB = (uint32_t *) pB; + + uint8_t *pA2 = (pA + num_col_im2col_w); + uint8_t *pA3 = (pA2 + num_col_im2col_w); + uint8_t *pA4 = (pA3 + num_col_im2col_w); + + uint32_t *ptrA = (uint32_t *) pA ; + uint32_t *ptrA2 = (uint32_t *) pA2; + uint32_t *ptrA3 = (uint32_t *) pA3; + uint32_t *ptrA4 = (uint32_t *) pA4; + + ptrA = MacLoadInit(1, 0, 0, 0, ptrA); + ptrA2 = MacLoadInit(1, 0, 1, 0, ptrA2); + ptrA3 = MacLoadInit(1, 0, 2, 0, ptrA3); + ptrA4 = MacLoadInit(1, 0, 3, 0, ptrA4); + + + ptrB = MacLoadInit(0, 1, 0, 0, ptrB); + + int sum = 0; + int sum2 = 0; + int sum3 = 0; + int sum4 = 0; + + if (pBias != NULL) + { + sum = ((int) (*pBias++)); + sum2 = ((int) (*pBias++)); + sum3 = ((int) (*pBias++)); + sum4 = ((int) (*pBias++)); + } + #ifdef PROFILE + stop_cycle_counter(); + //printf("Stopped hotloop_prep counter\n"); + read_cycle_counter(hotloop_prep_add); + *hotloop_prep_cycles += hotloop_prep_add; + #endif + + #ifdef PROFILE + //printf("Started hotloop counter\n"); + reset_cycle_counter(); + start_cycle_counter(); + #endif + + hotloop_4x1( + &sum, &sum2, &sum3, &sum4, ptrA, ptrA2, ptrA3, ptrA4, ptrB, num_col_im2col_words + ); + + #ifdef PROFILE + stop_cycle_counter(); + //printf("Stopped hotloop counter\n"); + read_cycle_counter(hotloop_add); + *hotloop_cycles += hotloop_add; + #endif + + #ifdef PROFILE + //printf("Started hotloop_leftover counter\n"); + reset_cycle_counter(); + start_cycle_counter(); + #endif + int col_cnt_im2col = num_col_im2col_c & 0xf; + + if (col_cnt_im2col) + { + uint16_t loop_cnt_im2col_w = (num_col_im2col_words) << 2; + pA+=loop_cnt_im2col_w; + pA2+=loop_cnt_im2col_w; + pA3+=loop_cnt_im2col_w; + pA4+=loop_cnt_im2col_w; + + uint16_t loop_cnt_im2col_a = (num_col_im2col_words) << 2; + pB+=loop_cnt_im2col_a; + + volatile uint32_t valA, valA2, valA3, valA4, valB; + // pack the remaining weights and activations into 32-bit vectors + // padding with 0xd9 because ternary_decoder(0xd9) = 0000000000 + if (col_cnt_im2col == 4) + { + valA = 0xd9 << 24 | 0xd9 << 16 | 0xd9 << 8 | *pA; + valA2 = 0xd9 << 24 | 0xd9 << 16 | 0xd9 << 8 | *pA2; + valA3 = 0xd9 << 24 | 0xd9 << 16 | 0xd9 << 8 | *pA3; + valA4 = 0xd9 << 24 | 0xd9 << 16 | 0xd9 << 8 | *pA4; + + valB = 0xd9 << 24 | 0xd9 << 16 | 0xd9 << 8 | *pB; + } + else if (col_cnt_im2col == 8) + { + valA = 0xd9 << 24 | 0xd9 << 16 | *(pA + 1) << 8 | *pA; + valA2 = 0xd9 << 24 | 0xd9 << 16 | *(pA2 + 1) << 8 | *pA2; + valA3 = 0xd9 << 24 | 0xd9 << 16 | *(pA3 + 1) << 8 | *pA3; + valA4 = 0xd9 << 24 | 0xd9 << 16 | *(pA4 + 1) << 8 | *pA4; + + valB = 0xd9 << 24 | 0xd9 << 16 | *(pB + 1) << 8 | *pB; + } + else // col_cnt_im2col == 12 + { + valA = 0xd9 << 24 | *(pA + 2) << 16 | *(pA + 1) << 8 | *pA; + valA2 = 0xd9 << 24 | *(pA2 + 2) << 16 | *(pA2 + 1) << 8 | *pA2; + valA3 = 0xd9 << 24 | *(pA3 + 2) << 16 | *(pA3 + 1) << 8 | *pA3; + valA4 = 0xd9 << 24 | *(pA4 + 2) << 16 | *(pA4 + 1) << 8 | *pA4; + + valB = 0xd9 << 24 | *(pB + 2) << 16 | *(pB + 1) << 8 | *pB; + } + + uint32_t *pA_p = &valA; + uint32_t *pA2_p = &valA2; + uint32_t *pA3_p = &valA3; + uint32_t *pA4_p = &valA4; + + uint32_t *pB_p = &valB; + + pA_p = MacLoadInit(1, 0, 0, 0, pA_p); + pA2_p = MacLoadInit(1, 0, 1, 0, pA2_p); + pA3_p = MacLoadInit(1, 0, 2, 0, pA3_p); + pA4_p = MacLoadInit(1, 0, 3, 0, pA4_p); + pB_p = MacLoadInit(0, 1, 0, 0, pB_p); + + pA += PACK_INT2_SIZE(col_cnt_im2col); + + sum = MacLoads20(0, 0, 0, 0, pA_p, sum); + sum2 = MacLoads20(0, 0, 1, 0, pA2_p, sum2); + sum3 = MacLoads20(0, 0, 2, 0, pA3_p, sum3); + sum4 = MacLoads20(0, 0, 3, 0, pA4_p, sum4); + } + #ifdef PROFILE + stop_cycle_counter(); + //printf("Stopped hotloop_leftover counter\n"); + read_cycle_counter(hotloop_leftover_add); + *hotloop_leftover_cycles += hotloop_leftover_add; + #endif + + #ifdef PROFILE + //printf("Started threshold counter\n"); + reset_cycle_counter(); + start_cycle_counter(); + #endif + res = thr_cmp(res, sum, *currThr++); + check_store_4x1(res, pOut); + reset_currThr(); + + res = thr_cmp(res, sum2, *currThr++); + check_store_4x1(res, pOut); + reset_currThr(); + + res = thr_cmp(res, sum3, *currThr++); + check_store_4x1(res, pOut); + reset_currThr(); + + res = thr_cmp(res, sum4, *currThr++); + check_store_4x1(res, pOut); + reset_currThr(); + + #ifdef PROFILE + stop_cycle_counter(); + //printf("Stopped threshold counter\n"); + read_cycle_counter(threshold_add); + *threshold_cycles += threshold_add; + #endif + + if (!col_cnt_im2col) + { + pA+=(4*num_col_im2col_w); + } + else + { + pA+=(3*num_col_im2col_w); + } + } + + // leftover part : the hotloop above produces 4N output channels. If out_ch not divisible + // by 4, the remaining output channels are computed below + int out_ch_left = ch_out & 0x3; + + if (out_ch_left == 1) + { + #ifdef PROFILE + //printf("Started hotloop_prep counter\n"); + reset_cycle_counter(); + start_cycle_counter(); + #endif + uint8_t *pB = pIn; + + uint32_t *ptrB = (uint32_t *) pB; + + uint32_t *ptrA = (uint32_t *) pA ; + + ptrA = MacLoadInit(1, 0, 0, 0, ptrA); + + + ptrB = MacLoadInit(0, 1, 0, 0, ptrB); + + int sum = 0; + + if (pBias != NULL) + { + sum = ((int) (*pBias++)); + } + #ifdef PROFILE + stop_cycle_counter(); + //printf("Stopped hotloop_prep counter\n"); + read_cycle_counter(hotloop_prep_add); + *hotloop_prep_cycles += hotloop_prep_add; + #endif + + #ifdef PROFILE + //printf("Started hotloop counter\n"); + reset_cycle_counter(); + start_cycle_counter(); + #endif + + hotloop_1x1( + &sum, ptrA, ptrB, num_col_im2col_words + ); + + #ifdef PROFILE + stop_cycle_counter(); + //printf("Stopped hotloop counter\n"); + read_cycle_counter(hotloop_add); + *hotloop_cycles += hotloop_add; + #endif + + #ifdef PROFILE + //printf("Started hotloop_leftover counter\n"); + reset_cycle_counter(); + start_cycle_counter(); + #endif + int col_cnt_im2col = num_col_im2col_c & 0xf; + + if (col_cnt_im2col) + { + uint16_t loop_cnt_im2col_w = (num_col_im2col_words) << 2; + pA+=loop_cnt_im2col_w; + + uint16_t loop_cnt_im2col_a = (num_col_im2col_words) << 2; + pB+=loop_cnt_im2col_a; + + volatile uint32_t valA, valB; + // pack the remaining weights and activations into 32-bit vectors + // padding with 0xd9 because ternary_decoder(0xd9) = 0000000000 + if (col_cnt_im2col == 4) + { + valA = 0xd9 << 24 | 0xd9 << 16 | 0xd9 << 8 | *pA; + + valB = 0xd9 << 24 | 0xd9 << 16 | 0xd9 << 8 | *pB; + } + else if (col_cnt_im2col == 8) + { + valA = 0xd9 << 24 | 0xd9 << 16 | *(pA + 1) << 8 | *pA; + + valB = 0xd9 << 24 | 0xd9 << 16 | *(pB + 1) << 8 | *pB; + } + else // col_cnt_im2col == 12 + { + valA = 0xd9 << 24 | *(pA + 2) << 16 | *(pA + 1) << 8 | *pA; + + valB = 0xd9 << 24 | *(pB + 2) << 16 | *(pB + 1) << 8 | *pB; + } + + uint32_t *pA_p = &valA; + + uint32_t *pB_p = &valB; + + pA_p = MacLoadInit(1, 0, 0, 0, pA_p); + pB_p = MacLoadInit(0, 1, 0, 0, pB_p); + + pA += PACK_INT2_SIZE(col_cnt_im2col); + + sum = MacLoads20(0, 0, 0, 0, pA_p, sum); + } + #ifdef PROFILE + stop_cycle_counter(); + //printf("Stopped hotloop_leftover counter\n"); + read_cycle_counter(hotloop_leftover_add); + *hotloop_leftover_cycles += hotloop_leftover_add; + #endif + + #ifdef PROFILE + //printf("Started threshold counter\n"); + reset_cycle_counter(); + start_cycle_counter(); + #endif + res = thr_cmp(res, sum, *currThr++); + check_store_4x1(res, pOut); + reset_currThr(); + + #ifdef PROFILE + stop_cycle_counter(); + //printf("Stopped threshold counter\n"); + read_cycle_counter(threshold_add); + *threshold_cycles += threshold_add; + #endif + + if (!col_cnt_im2col) + { + pA+=num_col_im2col_w; + } + } + else if (out_ch_left == 2) + { + #ifdef PROFILE + //printf("Started hotloop_prep counter\n"); + reset_cycle_counter(); + start_cycle_counter(); + #endif + uint8_t *pB = pIn; + + uint32_t *ptrB = (uint32_t *) pB; + + uint8_t *pA2 = (pA + num_col_im2col_w); + + uint32_t *ptrA = (uint32_t *) pA ; + uint32_t *ptrA2 = (uint32_t *) pA2; + + ptrA = MacLoadInit(1, 0, 0, 0, ptrA); + ptrA2 = MacLoadInit(1, 0, 1, 0, ptrA2); + + + ptrB = MacLoadInit(0, 1, 0, 0, ptrB); + + int sum = 0; + int sum2 = 0; + + if (pBias != NULL) + { + sum = ((int) (*pBias++)); + sum2 = ((int) (*pBias++)); + } + #ifdef PROFILE + stop_cycle_counter(); + //printf("Stopped hotloop_prep counter\n"); + read_cycle_counter(hotloop_prep_add); + *hotloop_prep_cycles += hotloop_prep_add; + #endif + + #ifdef PROFILE + //printf("Started hotloop counter\n"); + reset_cycle_counter(); + start_cycle_counter(); + #endif + + hotloop_2x1( + &sum, &sum2, ptrA, ptrA2, ptrB, num_col_im2col_words + ); + + #ifdef PROFILE + stop_cycle_counter(); + //printf("Stopped hotloop counter\n"); + read_cycle_counter(hotloop_add); + *hotloop_cycles += hotloop_add; + #endif + + #ifdef PROFILE + //printf("Started hotloop_leftover counter\n"); + reset_cycle_counter(); + start_cycle_counter(); + #endif + int col_cnt_im2col = num_col_im2col_c & 0xf; + + if (col_cnt_im2col) + { + uint16_t loop_cnt_im2col_w = (num_col_im2col_words) << 2; + pA+=loop_cnt_im2col_w; + pA2+=loop_cnt_im2col_w; + + uint16_t loop_cnt_im2col_a = (num_col_im2col_words) << 2; + pB+=loop_cnt_im2col_a; + + volatile uint32_t valA, valA2, valB; + // pack the remaining weights and activations into 32-bit vectors + // padding with 0xd9 because ternary_decoder(0xd9) = 0000000000 + if (col_cnt_im2col == 4) + { + valA = 0xd9 << 24 | 0xd9 << 16 | 0xd9 << 8 | *pA; + valA2 = 0xd9 << 24 | 0xd9 << 16 | 0xd9 << 8 | *pA2; + + valB = 0xd9 << 24 | 0xd9 << 16 | 0xd9 << 8 | *pB; + } + else if (col_cnt_im2col == 8) + { + valA = 0xd9 << 24 | 0xd9 << 16 | *(pA + 1) << 8 | *pA; + valA2 = 0xd9 << 24 | 0xd9 << 16 | *(pA2 + 1) << 8 | *pA2; + + valB = 0xd9 << 24 | 0xd9 << 16 | *(pB + 1) << 8 | *pB; + } + else // col_cnt_im2col == 12 + { + valA = 0xd9 << 24 | *(pA + 2) << 16 | *(pA + 1) << 8 | *pA; + valA2 = 0xd9 << 24 | *(pA2 + 2) << 16 | *(pA2 + 1) << 8 | *pA2; + + valB = 0xd9 << 24 | *(pB + 2) << 16 | *(pB + 1) << 8 | *pB; + } + + uint32_t *pA_p = &valA; + uint32_t *pA2_p = &valA2; + + uint32_t *pB_p = &valB; + + pA_p = MacLoadInit(1, 0, 0, 0, pA_p); + pA2_p = MacLoadInit(1, 0, 1, 0, pA2_p); + pB_p = MacLoadInit(0, 1, 0, 0, pB_p); + + pA += PACK_INT2_SIZE(col_cnt_im2col); + + sum = MacLoads20(0, 0, 0, 0, pA_p, sum); + sum2 = MacLoads20(0, 0, 1, 0, pA2_p, sum2); + } + #ifdef PROFILE + stop_cycle_counter(); + //printf("Stopped hotloop_leftover counter\n"); + read_cycle_counter(hotloop_leftover_add); + *hotloop_leftover_cycles += hotloop_leftover_add; + #endif + + #ifdef PROFILE + //printf("Started threshold counter\n"); + reset_cycle_counter(); + start_cycle_counter(); + #endif + res = thr_cmp(res, sum, *currThr++); + check_store_4x1(res, pOut); + reset_currThr(); + + res = thr_cmp(res, sum2, *currThr++); + check_store_4x1(res, pOut); + reset_currThr(); + + #ifdef PROFILE + stop_cycle_counter(); + //printf("Stopped threshold counter\n"); + read_cycle_counter(threshold_add); + *threshold_cycles += threshold_add; + #endif + + if (!col_cnt_im2col) + { + pA+=(2*num_col_im2col_w); + } + else + { + pA+=num_col_im2col_w; + } + } + else if (out_ch_left == 3) + { + #ifdef PROFILE + //printf("Started hotloop_prep counter\n"); + reset_cycle_counter(); + start_cycle_counter(); + #endif + uint8_t *pB = pIn; + + uint32_t *ptrB = (uint32_t *) pB; + + uint8_t *pA2 = (pA + num_col_im2col_w); + uint8_t *pA3 = (pA2 + num_col_im2col_w); + + uint32_t *ptrA = (uint32_t *) pA ; + uint32_t *ptrA2 = (uint32_t *) pA2; + uint32_t *ptrA3 = (uint32_t *) pA3; + ptrA = MacLoadInit(1, 0, 0, 0, ptrA); + ptrA2 = MacLoadInit(1, 0, 1, 0, ptrA2); + ptrA3 = MacLoadInit(1, 0, 2, 0, ptrA3); + + + ptrB = MacLoadInit(0, 1, 0, 0, ptrB); + + int sum = 0; + int sum2 = 0; + int sum3 = 0; + + if (pBias != NULL) + { + sum = ((int) (*pBias++)); + sum2 = ((int) (*pBias++)); + sum3 = ((int) (*pBias++)); + } + #ifdef PROFILE + stop_cycle_counter(); + //printf("Stopped hotloop_prep counter\n"); + read_cycle_counter(hotloop_prep_add); + *hotloop_prep_cycles += hotloop_prep_add; + #endif + + #ifdef PROFILE + //printf("Started hotloop counter\n"); + reset_cycle_counter(); + start_cycle_counter(); + #endif + + hotloop_3x1( + &sum, &sum2, &sum3, + ptrA, ptrA2, ptrA3, ptrB, num_col_im2col_words + ); + + #ifdef PROFILE + stop_cycle_counter(); + //printf("Stopped hotloop counter\n"); + read_cycle_counter(hotloop_add); + *hotloop_cycles += hotloop_add; + #endif + + #ifdef PROFILE + //printf("Started hotloop_leftover counter\n"); + reset_cycle_counter(); + start_cycle_counter(); + #endif + int col_cnt_im2col = num_col_im2col_c & 0xf; + + if (col_cnt_im2col) + { + uint16_t loop_cnt_im2col_w = (num_col_im2col_words) << 2; + pA+=loop_cnt_im2col_w; + pA2+=loop_cnt_im2col_w; + pA3+=loop_cnt_im2col_w; + + uint16_t loop_cnt_im2col_a = (num_col_im2col_words) << 2; + pB+=loop_cnt_im2col_a; + + volatile uint32_t valA, valA2, valA3, valB; + // pack the remaining weights and activations into 32-bit vectors + // padding with 0xd9 because ternary_decoder(0xd9) = 0000000000 + if (col_cnt_im2col == 4) + { + valA = 0xd9 << 24 | 0xd9 << 16 | 0xd9 << 8 | *pA; + valA2 = 0xd9 << 24 | 0xd9 << 16 | 0xd9 << 8 | *pA2; + valA3 = 0xd9 << 24 | 0xd9 << 16 | 0xd9 << 8 | *pA3; + + valB = 0xd9 << 24 | 0xd9 << 16 | 0xd9 << 8 | *pB; + } + else if (col_cnt_im2col == 8) + { + valA = 0xd9 << 24 | 0xd9 << 16 | *(pA + 1) << 8 | *pA; + valA2 = 0xd9 << 24 | 0xd9 << 16 | *(pA2 + 1) << 8 | *pA2; + valA3 = 0xd9 << 24 | 0xd9 << 16 | *(pA3 + 1) << 8 | *pA3; + + valB = 0xd9 << 24 | 0xd9 << 16 | *(pB + 1) << 8 | *pB; + } + else // col_cnt_im2col == 12 + { + valA = 0xd9 << 24 | *(pA + 2) << 16 | *(pA + 1) << 8 | *pA; + valA2 = 0xd9 << 24 | *(pA2 + 2) << 16 | *(pA2 + 1) << 8 | *pA2; + valA3 = 0xd9 << 24 | *(pA3 + 2) << 16 | *(pA3 + 1) << 8 | *pA3; + + valB = 0xd9 << 24 | *(pB + 2) << 16 | *(pB + 1) << 8 | *pB; + } + + uint32_t *pA_p = &valA; + uint32_t *pA2_p = &valA2; + uint32_t *pA3_p = &valA3; + + uint32_t *pB_p = &valB; + + pA_p = MacLoadInit(1, 0, 0, 0, pA_p); + pA2_p = MacLoadInit(1, 0, 1, 0, pA2_p); + pA3_p = MacLoadInit(1, 0, 2, 0, pA3_p); + pB_p = MacLoadInit(0, 1, 0, 0, pB_p); + + pA += PACK_INT2_SIZE(col_cnt_im2col); + + sum = MacLoads20(0, 0, 0, 0, pA_p, sum); + sum2 = MacLoads20(0, 0, 1, 0, pA2_p, sum2); + sum3 = MacLoads20(0, 0, 2, 0, pA3_p, sum3); + } + #ifdef PROFILE + stop_cycle_counter(); + //printf("Stopped hotloop_leftover counter\n"); + read_cycle_counter(hotloop_leftover_add); + *hotloop_leftover_cycles += hotloop_leftover_add; + #endif + + #ifdef PROFILE + //printf("Started threshold counter\n"); + reset_cycle_counter(); + start_cycle_counter(); + #endif + res = thr_cmp(res, sum, *currThr++); + check_store_4x1(res, pOut); + reset_currThr(); + + res = thr_cmp(res, sum2, *currThr++); + check_store_4x1(res, pOut); + reset_currThr(); + + res = thr_cmp(res, sum3, *currThr++); + check_store_4x1(res, pOut); + reset_currThr(); + + #ifdef PROFILE + stop_cycle_counter(); + //printf("Stopped threshold counter\n"); + read_cycle_counter(threshold_add); + *threshold_cycles += threshold_add; + #endif + + if (!col_cnt_im2col) + { + pA+=(3*num_col_im2col_w); + } + else + { + pA+=(2*num_col_im2col_w); + } + } + + *thrc_res = res; + + return pOut; +} + + + + diff --git a/rt_nn_tests/xptnn_conv/xpulp_tnn_matmul_ternary_signed_4x1.h b/rt_nn_tests/xptnn_conv/xpulp_tnn_matmul_ternary_signed_4x1.h new file mode 100644 index 0000000..a847bfb --- /dev/null +++ b/rt_nn_tests/xptnn_conv/xpulp_tnn_matmul_ternary_signed_4x1.h @@ -0,0 +1,96 @@ +#ifndef __XPULP_TNN_MATMUL_TERNARY_SIGNED_4X1_H +#define __XPULP_TNN_MATMUL_TERNARY_SIGNED_4X1_H + +#include "pulp_nn_utils.h" + +uint8_t * __attribute__((noinline)) xpulp_tnn_matmul_ternary_signed_4x1( + uint8_t *pIn, + int8_t *pBias, + uint32_t *pThr, + uint8_t *pOut, + uint8_t *pWeight, + uint16_t num_col_im2col, + uint16_t ch_out, +#ifndef PROFILE + uint32_t *thrc_res); +#else + uint32_t *thrc_res, + uint32_t *hotloop_prep_cycles, + uint32_t *hotloop_cycles, + uint32_t *threshold_cycles, + uint32_t *hotloop_leftover_cycles); +#endif + +inline void __attribute__((aligned(4))) hotloop_4x1( + int *sum, int *sum2, int *sum3, int *sum4, + uint32_t *ptrA, uint32_t *ptrA2, uint32_t *ptrA3, uint32_t *ptrA4, + uint32_t *ptrB, int num_col_im2col_words +){ + for (int j=0; jlength_1d_copy >> Log2Core) + ((copy->length_1d_copy & (NUM_CORES-1))!=0); + start_pixel = MIN(number_of_copies_per_core * core_id, copy->length_1d_copy); + stop_pixel = MIN(start_pixel + number_of_copies_per_core, copy->length_1d_copy); +#else + start_pixel = 0; + stop_pixel = copy->length_1d_copy; +#endif + void * loc = copy->loc + copy->number_of_1d_copies*copy->number_of_2d_copies*start_pixel; + void * ext = copy->ext + start_pixel; + const int size_2d = copy->number_of_1d_copies * copy->number_of_2d_copies; + + for (int i=start_pixel; idir << MCHAN_CMD_SHIFT_DIRECTION | MCHAN_FLAGS_2D, + .size = size_2d, + .ext = ext, + .loc = loc, + .ext_size_1d = 1, // one byte at a time... + .ext_stride_1d = copy->stride_1d + }; +#ifdef SINGLE_CORE_DMA + if (pi_core_id() == 0) { +#endif + mchan_transfer_push_2d(trans); +#ifdef SINGLE_CORE_DMA + } +#endif +#ifdef ALWAYS_BLOCK_DMA_TRANSFERS // needed on GAP8 board + dory_dma_barrier(copy); +#endif + ext += 1; // next channel + loc += copy->number_of_1d_copies * copy->number_of_2d_copies; + } +} + +void dory_dma_memcpy_1d_async(DMA_copy *copy) { + if (pi_core_id() == 0) { + mchan_transfer_t trans = { + .cmd = copy->length_1d_copy * copy->number_of_1d_copies * copy->number_of_2d_copies | (copy->dir << MCHAN_CMD_SHIFT_DIRECTION) | MCHAN_FLAGS_1D, + .size = copy->length_1d_copy * copy->number_of_1d_copies * copy->number_of_2d_copies, + .ext = copy->ext, + .loc = copy->loc + }; + mchan_transfer_push_1d(trans); + } +} + +void dory_dma_memcpy_2d_async(DMA_copy *copy) { + if (pi_core_id() == 0) { + const int size_2d = copy->number_of_1d_copies * copy->length_1d_copy * copy->number_of_2d_copies; + const int stride = (copy->number_of_2d_copies == 1) ? copy->stride_1d : copy->stride_2d; + const int size_1d = (copy->number_of_2d_copies == 1) ? copy->length_1d_copy : copy->length_1d_copy * copy->number_of_1d_copies; + + mchan_transfer_t trans = { + .cmd = size_2d | copy->dir << MCHAN_CMD_SHIFT_DIRECTION | MCHAN_FLAGS_2D, + .size = size_2d, + .ext = copy->ext, + .loc = copy->loc, + .ext_size_1d = size_1d, + .ext_stride_1d = stride + }; + mchan_transfer_push_2d(trans); + } +} + +void dory_dma_memcpy_3d_async(DMA_copy *copy) { + int start_pixel, stop_pixel; +#ifndef SINGLE_CORE_DMA + int core_id = pi_core_id(); + int Log2Core = log2(NUM_CORES); + int number_of_2d_copies_per_core = (copy->number_of_2d_copies >> Log2Core) + ((copy->number_of_2d_copies & (NUM_CORES-1))!=0); + start_pixel = MIN(number_of_2d_copies_per_core * core_id, copy->number_of_2d_copies); + stop_pixel = MIN(start_pixel + number_of_2d_copies_per_core, copy->number_of_2d_copies); +#else + start_pixel = 0; + stop_pixel = copy->number_of_2d_copies; +#endif + void *ext = copy->ext + copy->stride_2d*start_pixel; + void *loc = copy->loc + copy->length_1d_copy*copy->number_of_1d_copies*start_pixel; + const int size_2d = copy->number_of_1d_copies * copy->length_1d_copy; + for (int i = start_pixel; i < stop_pixel; i++) { + mchan_transfer_t trans = { + .cmd = size_2d | copy->dir << MCHAN_CMD_SHIFT_DIRECTION | MCHAN_FLAGS_2D, + .size = size_2d, + .ext = ext, + .loc = loc, + .ext_size_1d = copy->length_1d_copy, + .ext_stride_1d = copy->stride_1d + }; +#ifdef SINGLE_CORE_DMA + if (pi_core_id() == 0) { +#endif + mchan_transfer_push_2d(trans); +#ifdef SINGLE_CORE_DMA + } +#endif +#ifdef ALWAYS_BLOCK_DMA_TRANSFERS // needed on GAP8 board + dory_dma_barrier(copy); +#endif + loc += size_2d; + ext += copy->stride_2d; + } +} + +void dory_dma_memcpy_async(DMA_copy *copy) { + if (copy->hwc_to_chw == 1) { + dory_dma_memcpy_hwc_to_chw(copy); + } + else if ((copy->number_of_2d_copies == 1 && copy->number_of_1d_copies == 1) || (copy->stride_1d == copy->length_1d_copy && copy->number_of_1d_copies * copy->length_1d_copy == copy->stride_2d) || (copy->number_of_2d_copies == 1 && copy->length_1d_copy == copy->stride_1d)) { + dory_dma_memcpy_1d_async(copy); + } else if ((copy->number_of_2d_copies == 1) || (copy->length_1d_copy == copy->stride_1d)) {// wrong! + dory_dma_memcpy_2d_async(copy); + } else { + dory_dma_memcpy_3d_async(copy); + } +#ifdef ALWAYS_BLOCK_DMA_TRANSFERS + dory_dma_barrier(copy); +#endif +} + +void dory_dma_free(DMA_copy *copy) { + mchan_transfer_free(copy->tid); +} + +void dory_dma_barrier(DMA_copy *copy) { +#ifdef SINGLE_CORE_DMA + // if DMA is only used by a single core (only 1 ctrl interface), other cores must not access its register file. Instead, they should all wait for core 0 to confirm the transfer is over. + if (pi_core_id() == 0) + mchan_transfer_wait(copy->tid); + pi_cl_team_barrier(0); +#else + mchan_transfer_wait(copy->tid); +#endif +} + +int dory_dma_allocate() { + return mchan_transfer_get_id(); +} diff --git a/rt_nn_tests/xptnn_linear/dory_dma.h b/rt_nn_tests/xptnn_linear/dory_dma.h new file mode 100644 index 0000000..e0b3ef3 --- /dev/null +++ b/rt_nn_tests/xptnn_linear/dory_dma.h @@ -0,0 +1,52 @@ +/* + * dory.h + * Alessio Burrello + * + * Copyright (C) 2019-2020 University of Bologna + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef _DORY_DMA_H +#define _DORY_DMA_H + +typedef struct +{ + void *ext; + void *loc; + unsigned short hwc_to_chw; + unsigned short stride_2d; + unsigned short number_of_2d_copies; + unsigned short stride_1d; + unsigned short number_of_1d_copies; + unsigned short length_1d_copy; + int dir; // 0 l1->l2, 1 l2->l1 + int tid; +} DMA_copy; + +void dory_dma_memcpy_hwc_to_chw(DMA_copy *copy); + +void dory_dma_memcpy_1d_async(DMA_copy *copy); + +void dory_dma_memcpy_2d_async(DMA_copy *copy); + +void dory_dma_memcpy_3d_async(DMA_copy *copy); + +void dory_dma_memcpy_async(DMA_copy *copy); + +void dory_dma_free(DMA_copy *copy); + +void dory_dma_barrier(DMA_copy *copy); + +int dory_dma_allocate(); +#endif diff --git a/rt_nn_tests/xptnn_linear/hsgs_wave.do b/rt_nn_tests/xptnn_linear/hsgs_wave.do new file mode 100644 index 0000000..03f59b7 --- /dev/null +++ b/rt_nn_tests/xptnn_linear/hsgs_wave.do @@ -0,0 +1,1384 @@ +onerror {resume} +quietly WaveActivateNextPane {} 0 +add wave -noupdate -expand -subitemconfig {/pulp_cluster_tb/i_mock_uart/i_axi_to_axi_lite_intf/full_req.w -expand} /pulp_cluster_tb/i_mock_uart/i_axi_to_axi_lite_intf/full_req +add wave -noupdate -group mchan /pulp_cluster_tb/cluster_i/dmac_wrap_i/s_tcdm_bus_wen +add wave -noupdate -group mchan /pulp_cluster_tb/cluster_i/dmac_wrap_i/s_tcdm_bus_wdata +add wave -noupdate -group mchan /pulp_cluster_tb/cluster_i/dmac_wrap_i/s_tcdm_bus_add +add wave -noupdate -group mchan /pulp_cluster_tb/cluster_i/dmac_wrap_i/s_tcdm_bus_req +add wave -noupdate -group mchan /pulp_cluster_tb/cluster_i/dmac_wrap_i/s_tcdm_bus_r_valid +add wave -noupdate -group mchan /pulp_cluster_tb/cluster_i/dmac_wrap_i/s_tcdm_bus_r_rdata +add wave -noupdate -group mchan /pulp_cluster_tb/cluster_i/dmac_wrap_i/s_tcdm_bus_gnt +add wave -noupdate -group mchan /pulp_cluster_tb/cluster_i/dmac_wrap_i/s_tcdm_bus_be +add wave -noupdate -group mchan -expand -subitemconfig {/pulp_cluster_tb/cluster_i/dmac_wrap_i/ext_master_req_o.ar -expand} /pulp_cluster_tb/cluster_i/dmac_wrap_i/ext_master_req_o +add wave -noupdate -group mchan -expand -subitemconfig {/pulp_cluster_tb/cluster_i/dmac_wrap_i/ext_master_resp_i.r -expand} /pulp_cluster_tb/cluster_i/dmac_wrap_i/ext_master_resp_i +add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/clk_i} +add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/rst_ni} +add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/clock_en_i} +add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/test_en_i} +add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/fregfile_disable_i} +add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/boot_addr_i} +add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/core_id_i} +add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/cluster_id_i} +add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/instr_req_o} +add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/instr_gnt_i} +add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/instr_rvalid_i} +add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/instr_addr_o} +add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/instr_rdata_i} +add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/data_req_o} +add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/data_gnt_i} +add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/data_rvalid_i} +add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/data_we_o} +add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/data_be_o} +add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/data_addr_o} +add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/data_wdata_o} +add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/data_rdata_i} +add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/data_unaligned_o} +add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/apu_master_req_o} +add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/apu_master_ready_o} +add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/apu_master_gnt_i} +add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/apu_master_operands_o} +add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/apu_master_op_o} +add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/apu_master_type_o} +add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/apu_master_flags_o} +add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/apu_master_valid_i} +add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/apu_master_result_i} +add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/apu_master_flags_i} +add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/irq_i} +add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/irq_id_i} +add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/irq_ack_o} +add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/irq_id_o} +add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/irq_sec_i} +add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/sec_lvl_o} +add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/debug_req_i} +add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/fetch_enable_i} +add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/core_busy_o} +add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/ext_perf_counters_i} +add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/is_hwlp_id} +add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/hwlp_dec_cnt_id} +add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/instr_valid_id} +add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/instr_rdata_id} +add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/is_compressed_id} +add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/is_fetch_failed_id} +add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/illegal_c_insn_id} +add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/pc_if} +add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/pc_id} +add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/clear_instr_valid} +add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/pc_set} +add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/pc_mux_id} +add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/exc_pc_mux_id} +add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/exc_cause} +add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/trap_addr_mux} +add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/lsu_load_err} +add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/lsu_store_err} +add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/lsu_tosprw_ex} +add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/lsu_tospra_ex} +add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/dot_spr_operand_ex} +add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/update_w_id} +add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/update_a_id} +add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/is_decoding} +add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/useincr_addr_ex} +add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/data_misaligned} +add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/mult_multicycle} +add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/jump_target_id} +add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/jump_target_ex} +add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/branch_in_ex} +add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/branch_decision} +add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/ctrl_busy} +add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/if_busy} +add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/lsu_busy} +add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/apu_busy} +add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/pc_ex} +add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/alu_en_ex} +add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/alu_operator_ex} +add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/alu_operand_a_ex} +add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/alu_operand_b_ex} +add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/alu_operand_c_ex} +add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/bmask_a_ex} +add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/bmask_b_ex} +add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/imm_vec_ext_ex} +add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/alu_vec_mode_ex} +add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/ivec_op_ex} +add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/alu_is_clpx_ex} +add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/alu_is_subrot_ex} +add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/alu_clpx_shift_ex} +add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/mult_operator_ex} +add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/mult_operand_a_ex} +add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/mult_operand_b_ex} +add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/mult_operand_c_ex} +add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/mult_en_ex} +add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/mult_sel_subword_ex} +add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/mult_signed_mode_ex} +add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/mult_imm_ex} +add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/mult_dot_op_h_a_ex} +add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/mult_dot_op_h_b_ex} +add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/mult_dot_op_b_a_ex} +add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/mult_dot_op_b_b_ex} +add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/mult_dot_op_n_a_ex} +add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/mult_dot_op_n_b_ex} +add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/mult_dot_op_c_a_ex} +add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/mult_dot_op_c_b_ex} +add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/mult_dot_op_c_ex} +add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/mult_dot_signed_ex} +add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/mult_is_clpx_ex_o} +add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/mult_clpx_shift_ex} +add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/mult_clpx_img_ex} +add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/fprec_csr} +add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/frm_csr} +add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/fflags} +add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/fflags_csr} +add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/fflags_we} +add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/apu_en_ex} +add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/apu_type_ex} +add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/apu_flags_ex} +add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/apu_op_ex} +add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/apu_lat_ex} +add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/apu_operands_ex} +add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/apu_waddr_ex} +add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/apu_read_regs} +add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/apu_read_regs_valid} +add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/apu_read_dep} +add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/apu_write_regs} +add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/apu_write_regs_valid} +add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/apu_write_dep} +add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/perf_apu_type} +add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/perf_apu_cont} +add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/perf_apu_dep} +add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/perf_apu_wb} +add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/regfile_waddr_ex} +add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/regfile_we_ex} +add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/regfile_waddr_fw_wb} +add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/regfile_we_wb} +add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/regfile_wdata} +add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/regfile_alu_waddr_ex} +add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/regfile_alu_waddr2_ex} +add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/regfile_alu_we_ex} +add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/regfile_alu_waddr_fw} +add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/regfile_alu_we_fw} +add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/regfile_alu_wdata_fw} +add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/ivec_fmt_csr} +add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/current_cycle_csr} +add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/current_cycle_ex} +add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/skip_size_csr} +add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/sb_legacy_mode} +add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/csr_access_ex} +add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/csr_op_ex} +add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/mtvec} +add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/utvec} +add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/csr_access} +add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/csr_op} +add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/csr_addr} +add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/csr_addr_int} +add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/csr_rdata} +add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/csr_wdata} +add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/current_priv_lvl} +add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/csr_macl_op} +add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/csr_macl_addr} +add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/csr_macl_wdata} +add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/a_address} +add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/w_address} +add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/a_stride} +add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/w_stride} +add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/a_rollback} +add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/w_rollback} +add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/a_skip} +add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/w_skip} +add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/macl_a_rstn} +add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/macl_w_rstn} +add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/curr_cyc_sel} +add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/data_we_ex} +add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/data_type_ex} +add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/data_sign_ext_ex} +add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/data_reg_offset_ex} +add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/data_req_ex} +add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/data_load_event_ex} +add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/data_misaligned_ex} +add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/lsu_rdata} +add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/data_rvalid_ex} +add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/loadComputeVLIW_ex} +add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/halt_if} +add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_ready} +add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/ex_ready} +add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_valid} +add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/ex_valid} +add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/wb_valid} +add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/lsu_ready_ex} +add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/lsu_ready_wb} +add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/apu_ready_wb} +add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/instr_req_int} +add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/m_irq_enable} +add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/u_irq_enable} +add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/csr_irq_sec} +add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/mepc} +add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/uepc} +add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/depc} +add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/csr_save_cause} +add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/csr_save_if} +add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/csr_save_id} +add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/csr_save_ex} +add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/csr_cause} +add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/csr_restore_mret_id} +add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/csr_restore_uret_id} +add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/csr_restore_dret_id} +add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/debug_mode} +add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/debug_cause} +add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/debug_csr_save} +add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/debug_single_step} +add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/debug_ebreakm} +add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/debug_ebreaku} +add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/hwlp_start} +add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/hwlp_end} +add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/hwlp_cnt} +add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/csr_hwlp_regid} +add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/csr_hwlp_we} +add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/csr_hwlp_data} +add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/perf_imiss} +add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/perf_jump} +add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/perf_jr_stall} +add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/perf_ld_stall} +add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/perf_pipeline_stall} +add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/core_ctrl_firstfetch} +add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/core_busy_int} +add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/core_busy_q} +add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/pmp_addr} +add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/pmp_cfg} +add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/data_req_pmp} +add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/data_addr_pmp} +add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/data_we_pmp} +add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/data_gnt_pmp} +add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/data_err_pmp} +add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/data_err_ack} +add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/instr_req_pmp} +add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/instr_gnt_pmp} +add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/instr_addr_pmp} +add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/instr_err_pmp} +add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/mpc_next_cycle} +add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/mux_sel_wcsr} +add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/is_interrupt} +add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/clk} +add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/clock_en} +add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/sleeping} +add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/mult_is_clpx_ex} +add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/tracer_clk} +add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/clk_i} +add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/rst_ni} +add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/clock_en_i} +add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/test_en_i} +add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/fregfile_disable_i} +add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/boot_addr_i} +add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/core_id_i} +add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/cluster_id_i} +add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/instr_req_o} +add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/instr_gnt_i} +add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/instr_rvalid_i} +add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/instr_addr_o} +add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/instr_rdata_i} +add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/data_req_o} +add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/data_gnt_i} +add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/data_rvalid_i} +add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/data_we_o} +add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/data_be_o} +add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/data_addr_o} +add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/data_wdata_o} +add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/data_rdata_i} +add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/data_unaligned_o} +add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/apu_master_req_o} +add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/apu_master_ready_o} +add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/apu_master_gnt_i} +add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/apu_master_operands_o} +add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/apu_master_op_o} +add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/apu_master_type_o} +add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/apu_master_flags_o} +add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/apu_master_valid_i} +add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/apu_master_result_i} +add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/apu_master_flags_i} +add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/irq_i} +add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/irq_id_i} +add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/irq_ack_o} +add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/irq_id_o} +add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/irq_sec_i} +add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/sec_lvl_o} +add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/debug_req_i} +add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/fetch_enable_i} +add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/core_busy_o} +add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/ext_perf_counters_i} +add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/is_hwlp_id} +add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/hwlp_dec_cnt_id} +add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/instr_valid_id} +add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/instr_rdata_id} +add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/is_compressed_id} +add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/is_fetch_failed_id} +add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/illegal_c_insn_id} +add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/pc_if} +add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/pc_id} +add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/clear_instr_valid} +add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/pc_set} +add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/pc_mux_id} +add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/exc_pc_mux_id} +add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/exc_cause} +add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/trap_addr_mux} +add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/lsu_load_err} +add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/lsu_store_err} +add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/lsu_tosprw_ex} +add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/lsu_tospra_ex} +add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/dot_spr_operand_ex} +add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/update_w_id} +add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/update_a_id} +add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/is_decoding} +add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/useincr_addr_ex} +add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/data_misaligned} +add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/mult_multicycle} +add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/jump_target_id} +add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/jump_target_ex} +add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/branch_in_ex} +add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/branch_decision} +add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/ctrl_busy} +add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/if_busy} +add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/lsu_busy} +add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/apu_busy} +add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/pc_ex} +add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/alu_en_ex} +add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/alu_operator_ex} +add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/alu_operand_a_ex} +add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/alu_operand_b_ex} +add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/alu_operand_c_ex} +add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/bmask_a_ex} +add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/bmask_b_ex} +add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/imm_vec_ext_ex} +add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/alu_vec_mode_ex} +add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/ivec_op_ex} +add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/alu_is_clpx_ex} +add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/alu_is_subrot_ex} +add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/alu_clpx_shift_ex} +add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/mult_operator_ex} +add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/mult_operand_a_ex} +add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/mult_operand_b_ex} +add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/mult_operand_c_ex} +add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/mult_en_ex} +add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/mult_sel_subword_ex} +add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/mult_signed_mode_ex} +add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/mult_imm_ex} +add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/mult_dot_op_h_a_ex} +add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/mult_dot_op_h_b_ex} +add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/mult_dot_op_b_a_ex} +add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/mult_dot_op_b_b_ex} +add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/mult_dot_op_n_a_ex} +add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/mult_dot_op_n_b_ex} +add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/mult_dot_op_c_a_ex} +add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/mult_dot_op_c_b_ex} +add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/mult_dot_op_c_ex} +add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/mult_dot_signed_ex} +add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/mult_is_clpx_ex_o} +add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/mult_clpx_shift_ex} +add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/mult_clpx_img_ex} +add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/fprec_csr} +add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/frm_csr} +add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/fflags} +add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/fflags_csr} +add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/fflags_we} +add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/apu_en_ex} +add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/apu_type_ex} +add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/apu_flags_ex} +add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/apu_op_ex} +add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/apu_lat_ex} +add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/apu_operands_ex} +add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/apu_waddr_ex} +add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/apu_read_regs} +add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/apu_read_regs_valid} +add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/apu_read_dep} +add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/apu_write_regs} +add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/apu_write_regs_valid} +add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/apu_write_dep} +add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/perf_apu_type} +add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/perf_apu_cont} +add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/perf_apu_dep} +add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/perf_apu_wb} +add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/regfile_waddr_ex} +add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/regfile_we_ex} +add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/regfile_waddr_fw_wb} +add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/regfile_we_wb} +add wave -noupdate -group core1 -radix decimal {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/regfile_wdata} +add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/regfile_alu_waddr_ex} +add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/regfile_alu_waddr2_ex} +add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/regfile_alu_we_ex} +add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/regfile_alu_waddr_fw} +add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/regfile_alu_we_fw} +add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/regfile_alu_wdata_fw} +add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/ivec_fmt_csr} +add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/current_cycle_csr} +add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/current_cycle_ex} +add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/skip_size_csr} +add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/sb_legacy_mode} +add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/csr_access_ex} +add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/csr_op_ex} +add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/mtvec} +add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/utvec} +add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/csr_access} +add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/csr_op} +add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/csr_addr} +add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/csr_addr_int} +add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/csr_rdata} +add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/csr_wdata} +add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/current_priv_lvl} +add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/csr_macl_op} +add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/csr_macl_addr} +add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/csr_macl_wdata} +add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/a_address} +add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/w_address} +add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/a_stride} +add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/w_stride} +add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/a_rollback} +add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/w_rollback} +add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/a_skip} +add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/w_skip} +add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/macl_a_rstn} +add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/macl_w_rstn} +add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/curr_cyc_sel} +add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/data_we_ex} +add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/data_type_ex} +add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/data_sign_ext_ex} +add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/data_reg_offset_ex} +add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/data_req_ex} +add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/data_load_event_ex} +add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/data_misaligned_ex} +add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/lsu_rdata} +add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/data_rvalid_ex} +add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/loadComputeVLIW_ex} +add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/halt_if} +add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/id_ready} +add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/ex_ready} +add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/id_valid} +add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/ex_valid} +add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/wb_valid} +add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/lsu_ready_ex} +add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/lsu_ready_wb} +add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/apu_ready_wb} +add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/instr_req_int} +add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/m_irq_enable} +add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/u_irq_enable} +add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/csr_irq_sec} +add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/mepc} +add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/uepc} +add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/depc} +add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/csr_save_cause} +add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/csr_save_if} +add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/csr_save_id} +add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/csr_save_ex} +add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/csr_cause} +add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/csr_restore_mret_id} +add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/csr_restore_uret_id} +add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/csr_restore_dret_id} +add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/debug_mode} +add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/debug_cause} +add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/debug_csr_save} +add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/debug_single_step} +add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/debug_ebreakm} +add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/debug_ebreaku} +add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/hwlp_start} +add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/hwlp_end} +add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/hwlp_cnt} +add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/csr_hwlp_regid} +add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/csr_hwlp_we} +add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/csr_hwlp_data} +add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/perf_imiss} +add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/perf_jump} +add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/perf_jr_stall} +add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/perf_ld_stall} +add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/perf_pipeline_stall} +add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/core_ctrl_firstfetch} +add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/core_busy_int} +add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/core_busy_q} +add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/pmp_addr} +add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/pmp_cfg} +add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/data_req_pmp} +add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/data_addr_pmp} +add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/data_we_pmp} +add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/data_gnt_pmp} +add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/data_err_pmp} +add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/data_err_ack} +add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/instr_req_pmp} +add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/instr_gnt_pmp} +add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/instr_addr_pmp} +add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/instr_err_pmp} +add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/mpc_next_cycle} +add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/mux_sel_wcsr} +add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/is_interrupt} +add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/clk} +add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/clock_en} +add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/sleeping} +add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/mult_is_clpx_ex} +add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/tracer_clk} +add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/clk_i} +add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/rst_ni} +add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/clock_en_i} +add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/test_en_i} +add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/fregfile_disable_i} +add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/boot_addr_i} +add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/core_id_i} +add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/cluster_id_i} +add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/instr_req_o} +add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/instr_gnt_i} +add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/instr_rvalid_i} +add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/instr_addr_o} +add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/instr_rdata_i} +add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/data_req_o} +add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/data_gnt_i} +add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/data_rvalid_i} +add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/data_we_o} +add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/data_be_o} +add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/data_addr_o} +add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/data_wdata_o} +add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/data_rdata_i} +add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/data_unaligned_o} +add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/apu_master_req_o} +add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/apu_master_ready_o} +add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/apu_master_gnt_i} +add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/apu_master_operands_o} +add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/apu_master_op_o} +add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/apu_master_type_o} +add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/apu_master_flags_o} +add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/apu_master_valid_i} +add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/apu_master_result_i} +add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/apu_master_flags_i} +add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/irq_i} +add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/irq_id_i} +add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/irq_ack_o} +add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/irq_id_o} +add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/irq_sec_i} +add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/sec_lvl_o} +add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/debug_req_i} +add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/fetch_enable_i} +add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/core_busy_o} +add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/ext_perf_counters_i} +add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/is_hwlp_id} +add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/hwlp_dec_cnt_id} +add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/instr_valid_id} +add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/instr_rdata_id} +add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/is_compressed_id} +add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/is_fetch_failed_id} +add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/illegal_c_insn_id} +add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/pc_if} +add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/pc_id} +add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/clear_instr_valid} +add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/pc_set} +add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/pc_mux_id} +add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/exc_pc_mux_id} +add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/exc_cause} +add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/trap_addr_mux} +add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/lsu_load_err} +add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/lsu_store_err} +add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/lsu_tosprw_ex} +add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/lsu_tospra_ex} +add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/dot_spr_operand_ex} +add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/update_w_id} +add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/update_a_id} +add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/is_decoding} +add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/useincr_addr_ex} +add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/data_misaligned} +add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/mult_multicycle} +add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/jump_target_id} +add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/jump_target_ex} +add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/branch_in_ex} +add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/branch_decision} +add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/ctrl_busy} +add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/if_busy} +add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/lsu_busy} +add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/apu_busy} +add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/pc_ex} +add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/alu_en_ex} +add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/alu_operator_ex} +add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/alu_operand_a_ex} +add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/alu_operand_b_ex} +add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/alu_operand_c_ex} +add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/bmask_a_ex} +add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/bmask_b_ex} +add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/imm_vec_ext_ex} +add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/alu_vec_mode_ex} +add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/ivec_op_ex} +add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/alu_is_clpx_ex} +add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/alu_is_subrot_ex} +add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/alu_clpx_shift_ex} +add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/mult_operator_ex} +add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/mult_operand_a_ex} +add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/mult_operand_b_ex} +add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/mult_operand_c_ex} +add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/mult_en_ex} +add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/mult_sel_subword_ex} +add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/mult_signed_mode_ex} +add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/mult_imm_ex} +add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/mult_dot_op_h_a_ex} +add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/mult_dot_op_h_b_ex} +add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/mult_dot_op_b_a_ex} +add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/mult_dot_op_b_b_ex} +add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/mult_dot_op_n_a_ex} +add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/mult_dot_op_n_b_ex} +add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/mult_dot_op_c_a_ex} +add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/mult_dot_op_c_b_ex} +add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/mult_dot_op_c_ex} +add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/mult_dot_signed_ex} +add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/mult_is_clpx_ex_o} +add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/mult_clpx_shift_ex} +add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/mult_clpx_img_ex} +add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/fprec_csr} +add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/frm_csr} +add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/fflags} +add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/fflags_csr} +add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/fflags_we} +add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/apu_en_ex} +add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/apu_type_ex} +add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/apu_flags_ex} +add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/apu_op_ex} +add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/apu_lat_ex} +add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/apu_operands_ex} +add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/apu_waddr_ex} +add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/apu_read_regs} +add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/apu_read_regs_valid} +add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/apu_read_dep} +add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/apu_write_regs} +add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/apu_write_regs_valid} +add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/apu_write_dep} +add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/perf_apu_type} +add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/perf_apu_cont} +add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/perf_apu_dep} +add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/perf_apu_wb} +add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/regfile_waddr_ex} +add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/regfile_we_ex} +add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/regfile_waddr_fw_wb} +add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/regfile_we_wb} +add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/regfile_wdata} +add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/regfile_alu_waddr_ex} +add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/regfile_alu_waddr2_ex} +add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/regfile_alu_we_ex} +add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/regfile_alu_waddr_fw} +add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/regfile_alu_we_fw} +add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/regfile_alu_wdata_fw} +add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/ivec_fmt_csr} +add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/current_cycle_csr} +add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/current_cycle_ex} +add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/skip_size_csr} +add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/sb_legacy_mode} +add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/csr_access_ex} +add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/csr_op_ex} +add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/mtvec} +add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/utvec} +add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/csr_access} +add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/csr_op} +add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/csr_addr} +add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/csr_addr_int} +add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/csr_rdata} +add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/csr_wdata} +add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/current_priv_lvl} +add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/csr_macl_op} +add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/csr_macl_addr} +add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/csr_macl_wdata} +add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/a_address} +add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/w_address} +add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/a_stride} +add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/w_stride} +add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/a_rollback} +add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/w_rollback} +add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/a_skip} +add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/w_skip} +add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/macl_a_rstn} +add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/macl_w_rstn} +add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/curr_cyc_sel} +add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/data_we_ex} +add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/data_type_ex} +add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/data_sign_ext_ex} +add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/data_reg_offset_ex} +add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/data_req_ex} +add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/data_load_event_ex} +add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/data_misaligned_ex} +add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/lsu_rdata} +add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/data_rvalid_ex} +add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/loadComputeVLIW_ex} +add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/halt_if} +add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/id_ready} +add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/ex_ready} +add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/id_valid} +add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/ex_valid} +add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/wb_valid} +add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/lsu_ready_ex} +add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/lsu_ready_wb} +add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/apu_ready_wb} +add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/instr_req_int} +add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/m_irq_enable} +add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/u_irq_enable} +add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/csr_irq_sec} +add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/mepc} +add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/uepc} +add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/depc} +add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/csr_save_cause} +add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/csr_save_if} +add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/csr_save_id} +add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/csr_save_ex} +add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/csr_cause} +add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/csr_restore_mret_id} +add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/csr_restore_uret_id} +add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/csr_restore_dret_id} +add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/debug_mode} +add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/debug_cause} +add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/debug_csr_save} +add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/debug_single_step} +add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/debug_ebreakm} +add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/debug_ebreaku} +add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/hwlp_start} +add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/hwlp_end} +add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/hwlp_cnt} +add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/csr_hwlp_regid} +add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/csr_hwlp_we} +add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/csr_hwlp_data} +add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/perf_imiss} +add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/perf_jump} +add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/perf_jr_stall} +add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/perf_ld_stall} +add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/perf_pipeline_stall} +add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/core_ctrl_firstfetch} +add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/core_busy_int} +add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/core_busy_q} +add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/pmp_addr} +add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/pmp_cfg} +add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/data_req_pmp} +add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/data_addr_pmp} +add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/data_we_pmp} +add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/data_gnt_pmp} +add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/data_err_pmp} +add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/data_err_ack} +add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/instr_req_pmp} +add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/instr_gnt_pmp} +add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/instr_addr_pmp} +add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/instr_err_pmp} +add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/mpc_next_cycle} +add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/mux_sel_wcsr} +add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/is_interrupt} +add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/clk} +add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/clock_en} +add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/sleeping} +add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/mult_is_clpx_ex} +add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/tracer_clk} +add wave -noupdate -group ctrl0 {/pulp_cluster_tb/cluster_i/dmac_wrap_i/ctrl_slave[0]/req} +add wave -noupdate -group ctrl0 {/pulp_cluster_tb/cluster_i/dmac_wrap_i/ctrl_slave[0]/add} +add wave -noupdate -group ctrl0 {/pulp_cluster_tb/cluster_i/dmac_wrap_i/ctrl_slave[0]/wen} +add wave -noupdate -group ctrl0 -expand {/pulp_cluster_tb/cluster_i/dmac_wrap_i/ctrl_slave[0]/wdata} +add wave -noupdate -group ctrl0 {/pulp_cluster_tb/cluster_i/dmac_wrap_i/ctrl_slave[0]/be} +add wave -noupdate -group ctrl0 {/pulp_cluster_tb/cluster_i/dmac_wrap_i/ctrl_slave[0]/gnt} +add wave -noupdate -group ctrl0 {/pulp_cluster_tb/cluster_i/dmac_wrap_i/ctrl_slave[0]/r_opc} +add wave -noupdate -group ctrl0 {/pulp_cluster_tb/cluster_i/dmac_wrap_i/ctrl_slave[0]/r_rdata} +add wave -noupdate -group ctrl0 {/pulp_cluster_tb/cluster_i/dmac_wrap_i/ctrl_slave[0]/r_valid} +add wave -noupdate -group ctrl1 {/pulp_cluster_tb/cluster_i/dmac_wrap_i/ctrl_slave[1]/req} +add wave -noupdate -group ctrl1 {/pulp_cluster_tb/cluster_i/dmac_wrap_i/ctrl_slave[1]/add} +add wave -noupdate -group ctrl1 {/pulp_cluster_tb/cluster_i/dmac_wrap_i/ctrl_slave[1]/wen} +add wave -noupdate -group ctrl1 {/pulp_cluster_tb/cluster_i/dmac_wrap_i/ctrl_slave[1]/wdata} +add wave -noupdate -group ctrl1 {/pulp_cluster_tb/cluster_i/dmac_wrap_i/ctrl_slave[1]/be} +add wave -noupdate -group ctrl1 {/pulp_cluster_tb/cluster_i/dmac_wrap_i/ctrl_slave[1]/gnt} +add wave -noupdate -group ctrl1 {/pulp_cluster_tb/cluster_i/dmac_wrap_i/ctrl_slave[1]/r_opc} +add wave -noupdate -group ctrl1 {/pulp_cluster_tb/cluster_i/dmac_wrap_i/ctrl_slave[1]/r_rdata} +add wave -noupdate -group ctrl1 {/pulp_cluster_tb/cluster_i/dmac_wrap_i/ctrl_slave[1]/r_valid} +add wave -noupdate -group ctrl2 {/pulp_cluster_tb/cluster_i/dmac_wrap_i/ctrl_slave[2]/req} +add wave -noupdate -group ctrl2 {/pulp_cluster_tb/cluster_i/dmac_wrap_i/ctrl_slave[2]/add} +add wave -noupdate -group ctrl2 {/pulp_cluster_tb/cluster_i/dmac_wrap_i/ctrl_slave[2]/wen} +add wave -noupdate -group ctrl2 {/pulp_cluster_tb/cluster_i/dmac_wrap_i/ctrl_slave[2]/wdata} +add wave -noupdate -group ctrl2 {/pulp_cluster_tb/cluster_i/dmac_wrap_i/ctrl_slave[2]/be} +add wave -noupdate -group ctrl2 {/pulp_cluster_tb/cluster_i/dmac_wrap_i/ctrl_slave[2]/gnt} +add wave -noupdate -group ctrl2 {/pulp_cluster_tb/cluster_i/dmac_wrap_i/ctrl_slave[2]/r_opc} +add wave -noupdate -group ctrl2 {/pulp_cluster_tb/cluster_i/dmac_wrap_i/ctrl_slave[2]/r_rdata} +add wave -noupdate -group ctrl2 {/pulp_cluster_tb/cluster_i/dmac_wrap_i/ctrl_slave[2]/r_valid} +add wave -noupdate -group mult1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/mult_i/genblk1/dot_char_op_a} +add wave -noupdate -group mult1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/mult_i/genblk1/dot_char_op_b} +add wave -noupdate -group mult1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/mult_i/genblk1/dot_char_mul} +add wave -noupdate -group mult1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/mult_i/genblk1/dot_nibble_op_a} +add wave -noupdate -group mult1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/mult_i/genblk1/dot_nibble_op_b} +add wave -noupdate -group mult1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/mult_i/genblk1/dot_nibble_mul} +add wave -noupdate -group mult1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/mult_i/genblk1/dot_crumble_op_a} +add wave -noupdate -group mult1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/mult_i/genblk1/dot_crumble_op_b} +add wave -noupdate -group mult1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/mult_i/genblk1/dot_crumble_mul} +add wave -noupdate -group mult1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/mult_i/genblk1/dot_short_op_a} +add wave -noupdate -group mult1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/mult_i/genblk1/dot_short_op_b} +add wave -noupdate -group mult1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/mult_i/genblk1/dot_short_mul} +add wave -noupdate -group mult1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/mult_i/genblk1/dot_short_op_a_1_neg} +add wave -noupdate -group mult1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/mult_i/genblk1/dot_short_op_b_ext} +add wave -noupdate -group mult1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/mult_i/clk} +add wave -noupdate -group mult1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/mult_i/rst_n} +add wave -noupdate -group mult1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/mult_i/enable_i} +add wave -noupdate -group mult1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/mult_i/operator_i} +add wave -noupdate -group mult1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/mult_i/short_subword_i} +add wave -noupdate -group mult1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/mult_i/short_signed_i} +add wave -noupdate -group mult1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/mult_i/op_a_i} +add wave -noupdate -group mult1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/mult_i/op_b_i} +add wave -noupdate -group mult1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/mult_i/op_c_i} +add wave -noupdate -group mult1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/mult_i/imm_i} +add wave -noupdate -group mult1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/mult_i/dot_signed_i} +add wave -noupdate -group mult1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/mult_i/dot_op_h_a_i} +add wave -noupdate -group mult1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/mult_i/dot_op_h_b_i} +add wave -noupdate -group mult1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/mult_i/dot_op_b_a_i} +add wave -noupdate -group mult1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/mult_i/dot_op_b_b_i} +add wave -noupdate -group mult1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/mult_i/dot_op_n_a_i} +add wave -noupdate -group mult1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/mult_i/dot_op_n_b_i} +add wave -noupdate -group mult1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/mult_i/dot_op_c_a_i} +add wave -noupdate -group mult1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/mult_i/dot_op_c_b_i} +add wave -noupdate -group mult1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/mult_i/dot_op_c_i} +add wave -noupdate -group mult1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/mult_i/current_cycle_i} +add wave -noupdate -group mult1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/mult_i/is_clpx_i} +add wave -noupdate -group mult1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/mult_i/clpx_shift_i} +add wave -noupdate -group mult1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/mult_i/clpx_img_i} +add wave -noupdate -group mult1 -radix decimal {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/mult_i/result_o} +add wave -noupdate -group mult1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/mult_i/multicycle_o} +add wave -noupdate -group mult1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/mult_i/ready_o} +add wave -noupdate -group mult1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/mult_i/ex_ready_i} +add wave -noupdate -group mult1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/mult_i/short_op_a} +add wave -noupdate -group mult1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/mult_i/short_op_b} +add wave -noupdate -group mult1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/mult_i/short_op_c} +add wave -noupdate -group mult1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/mult_i/short_mul} +add wave -noupdate -group mult1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/mult_i/short_mac} +add wave -noupdate -group mult1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/mult_i/short_round} +add wave -noupdate -group mult1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/mult_i/short_round_tmp} +add wave -noupdate -group mult1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/mult_i/short_result} +add wave -noupdate -group mult1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/mult_i/short_mac_msb1} +add wave -noupdate -group mult1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/mult_i/short_mac_msb0} +add wave -noupdate -group mult1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/mult_i/short_imm} +add wave -noupdate -group mult1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/mult_i/short_subword} +add wave -noupdate -group mult1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/mult_i/short_signed} +add wave -noupdate -group mult1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/mult_i/short_shift_arith} +add wave -noupdate -group mult1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/mult_i/mulh_imm} +add wave -noupdate -group mult1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/mult_i/mulh_subword} +add wave -noupdate -group mult1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/mult_i/mulh_signed} +add wave -noupdate -group mult1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/mult_i/mulh_shift_arith} +add wave -noupdate -group mult1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/mult_i/mulh_carry_q} +add wave -noupdate -group mult1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/mult_i/mulh_active} +add wave -noupdate -group mult1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/mult_i/mulh_save} +add wave -noupdate -group mult1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/mult_i/mulh_clearcarry} +add wave -noupdate -group mult1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/mult_i/mulh_ready} +add wave -noupdate -group mult1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/mult_i/mulh_CS} +add wave -noupdate -group mult1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/mult_i/mulh_NS} +add wave -noupdate -group mult1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/mult_i/int_op_a_msu} +add wave -noupdate -group mult1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/mult_i/int_op_b_msu} +add wave -noupdate -group mult1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/mult_i/int_result} +add wave -noupdate -group mult1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/mult_i/int_is_msu} +add wave -noupdate -group mult1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/mult_i/dot_char_result} +add wave -noupdate -group mult1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/mult_i/dot_nibble_result} +add wave -noupdate -group mult1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/mult_i/dot_crumble_result} +add wave -noupdate -group mult1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/mult_i/dot_short_result} +add wave -noupdate -group mult1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/mult_i/accumulator} +add wave -noupdate -group mult1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/mult_i/clpx_shift_result} +add wave -noupdate -group alu0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/alu_i/clk} +add wave -noupdate -group alu0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/alu_i/rst_n} +add wave -noupdate -group alu0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/alu_i/enable_i} +add wave -noupdate -group alu0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/alu_i/operator_i} +add wave -noupdate -group alu0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/alu_i/operand_a_i} +add wave -noupdate -group alu0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/alu_i/operand_b_i} +add wave -noupdate -group alu0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/alu_i/operand_c_i} +add wave -noupdate -group alu0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/alu_i/vector_mode_i} +add wave -noupdate -group alu0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/alu_i/ivec_op_i} +add wave -noupdate -group alu0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/alu_i/bmask_a_i} +add wave -noupdate -group alu0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/alu_i/bmask_b_i} +add wave -noupdate -group alu0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/alu_i/imm_vec_ext_i} +add wave -noupdate -group alu0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/alu_i/is_clpx_i} +add wave -noupdate -group alu0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/alu_i/is_subrot_i} +add wave -noupdate -group alu0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/alu_i/clpx_shift_i} +add wave -noupdate -group alu0 -expand {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/alu_i/result_o} +add wave -noupdate -group alu0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/alu_i/comparison_result_o} +add wave -noupdate -group alu0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/alu_i/ready_o} +add wave -noupdate -group alu0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/alu_i/ex_ready_i} +add wave -noupdate -group alu0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/alu_i/operand_a_rev} +add wave -noupdate -group alu0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/alu_i/operand_a_neg} +add wave -noupdate -group alu0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/alu_i/operand_a_neg_rev} +add wave -noupdate -group alu0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/alu_i/operand_b_neg} +add wave -noupdate -group alu0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/alu_i/div_shift} +add wave -noupdate -group alu0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/alu_i/div_valid} +add wave -noupdate -group alu0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/alu_i/bmask} +add wave -noupdate -group alu0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/alu_i/adder_op_b_negate} +add wave -noupdate -group alu0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/alu_i/adder_op_a} +add wave -noupdate -group alu0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/alu_i/adder_op_b} +add wave -noupdate -group alu0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/alu_i/adder_in_a} +add wave -noupdate -group alu0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/alu_i/adder_in_b} +add wave -noupdate -group alu0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/alu_i/adder_result} +add wave -noupdate -group alu0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/alu_i/adder_result_expanded} +add wave -noupdate -group alu0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/alu_i/adder_round_value} +add wave -noupdate -group alu0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/alu_i/adder_round_result} +add wave -noupdate -group alu0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/alu_i/shift_left} +add wave -noupdate -group alu0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/alu_i/shift_use_round} +add wave -noupdate -group alu0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/alu_i/shift_arithmetic} +add wave -noupdate -group alu0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/alu_i/shift_amt_left} +add wave -noupdate -group alu0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/alu_i/shift_amt} +add wave -noupdate -group alu0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/alu_i/shift_amt_int} +add wave -noupdate -group alu0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/alu_i/shift_amt_norm} +add wave -noupdate -group alu0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/alu_i/shift_op_a} +add wave -noupdate -group alu0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/alu_i/shift_result} +add wave -noupdate -group alu0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/alu_i/shift_right_result} +add wave -noupdate -group alu0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/alu_i/shift_left_result} +add wave -noupdate -group alu0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/alu_i/clpx_shift_ex} +add wave -noupdate -group alu0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/alu_i/bmask_b_norm} +add wave -noupdate -group alu0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/alu_i/shift_op_a_32} +add wave -noupdate -group alu0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/alu_i/is_equal} +add wave -noupdate -group alu0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/alu_i/is_greater} +add wave -noupdate -group alu0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/alu_i/f_is_greater} +add wave -noupdate -group alu0 -expand {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/alu_i/cmp_signed} +add wave -noupdate -group alu0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/alu_i/is_equal_vec} +add wave -noupdate -group alu0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/alu_i/is_greater_vec} +add wave -noupdate -group alu0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/alu_i/cmp_result} +add wave -noupdate -group alu0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/alu_i/f_is_qnan} +add wave -noupdate -group alu0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/alu_i/f_is_snan} +add wave -noupdate -group alu0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/alu_i/f_is_nan} +add wave -noupdate -group alu0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/alu_i/result_minmax} +add wave -noupdate -group alu0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/alu_i/fp_canonical_nan} +add wave -noupdate -group alu0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/alu_i/sel_minmax} +add wave -noupdate -group alu0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/alu_i/do_min} +add wave -noupdate -group alu0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/alu_i/minmax_is_fp_special} +add wave -noupdate -group alu0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/alu_i/minmax_b} +add wave -noupdate -group alu0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/alu_i/fclass_result} +add wave -noupdate -group alu0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/alu_i/f_sign_inject_result} +add wave -noupdate -group alu0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/alu_i/clip_result} +add wave -noupdate -group alu0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/alu_i/clip_is_lower_neg} +add wave -noupdate -group alu0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/alu_i/clip_is_lower_u} +add wave -noupdate -group alu0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/alu_i/shuffle_byte_sel} +add wave -noupdate -group alu0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/alu_i/shuffle_reg_sel} +add wave -noupdate -group alu0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/alu_i/shuffle_reg1_sel} +add wave -noupdate -group alu0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/alu_i/shuffle_reg0_sel} +add wave -noupdate -group alu0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/alu_i/shuffle_through} +add wave -noupdate -group alu0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/alu_i/shuffle_r1} +add wave -noupdate -group alu0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/alu_i/shuffle_r0} +add wave -noupdate -group alu0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/alu_i/shuffle_r1_in} +add wave -noupdate -group alu0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/alu_i/shuffle_r0_in} +add wave -noupdate -group alu0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/alu_i/shuffle_result} +add wave -noupdate -group alu0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/alu_i/pack_result} +add wave -noupdate -group alu0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/alu_i/ff_input} +add wave -noupdate -group alu0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/alu_i/cnt_result} +add wave -noupdate -group alu0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/alu_i/clb_result} +add wave -noupdate -group alu0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/alu_i/ff1_result} +add wave -noupdate -group alu0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/alu_i/ff_no_one} +add wave -noupdate -group alu0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/alu_i/fl1_result} +add wave -noupdate -group alu0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/alu_i/bitop_result} +add wave -noupdate -group alu0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/alu_i/extract_is_signed} +add wave -noupdate -group alu0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/alu_i/extract_sign} +add wave -noupdate -group alu0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/alu_i/bmask_first} +add wave -noupdate -group alu0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/alu_i/bmask_inv} +add wave -noupdate -group alu0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/alu_i/bextins_and} +add wave -noupdate -group alu0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/alu_i/bextins_result} +add wave -noupdate -group alu0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/alu_i/bclr_result} +add wave -noupdate -group alu0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/alu_i/bset_result} +add wave -noupdate -group alu0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/alu_i/radix_2_rev} +add wave -noupdate -group alu0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/alu_i/radix_4_rev} +add wave -noupdate -group alu0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/alu_i/radix_8_rev} +add wave -noupdate -group alu0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/alu_i/reverse_result} +add wave -noupdate -group alu0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/alu_i/radix_mux_sel} +add wave -noupdate -group alu0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/alu_i/result_div} +add wave -noupdate -group alu0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/alu_i/div_ready} +add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/clk} +add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/rst_n} +add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/test_en_i} +add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/fregfile_disable_i} +add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/fetch_enable_i} +add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/ctrl_busy_o} +add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/core_ctrl_firstfetch_o} +add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/is_decoding_o} +add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/hwlp_dec_cnt_i} +add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/is_hwlp_i} +add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/instr_valid_i} +add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/instr_rdata_i} +add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/instr_req_o} +add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/branch_in_ex_o} +add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/branch_decision_i} +add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/jump_target_o} +add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/clear_instr_valid_o} +add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/pc_set_o} +add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/pc_mux_o} +add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/exc_pc_mux_o} +add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/trap_addr_mux_o} +add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/illegal_c_insn_i} +add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/is_compressed_i} +add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/is_fetch_failed_i} +add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/pc_if_i} +add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/pc_id_i} +add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/halt_if_o} +add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/id_ready_o} +add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/ex_ready_i} +add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/wb_ready_i} +add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/id_valid_o} +add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/ex_valid_i} +add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/pc_ex_o} +add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/alu_operand_a_ex_o} +add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/alu_operand_b_ex_o} +add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/alu_operand_c_ex_o} +add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/bmask_a_ex_o} +add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/bmask_b_ex_o} +add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/imm_vec_ext_ex_o} +add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/alu_vec_mode_ex_o} +add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/curr_cyc_sel_o} +add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/regfile_waddr_ex_o} +add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/regfile_we_ex_o} +add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/regfile_alu_waddr_ex_o} +add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/regfile_alu_we_ex_o} +add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/regfile_alu_waddr2_ex_o} +add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/ivec_op_ex_o} +add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/alu_en_ex_o} +add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/alu_operator_ex_o} +add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/alu_is_clpx_ex_o} +add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/alu_is_subrot_ex_o} +add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/alu_clpx_shift_ex_o} +add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/mult_operator_ex_o} +add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/mult_operand_a_ex_o} +add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/mult_operand_b_ex_o} +add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/mult_operand_c_ex_o} +add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/mult_en_ex_o} +add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/mult_sel_subword_ex_o} +add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/mult_signed_mode_ex_o} +add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/mult_imm_ex_o} +add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/mult_dot_op_h_a_ex_o} +add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/mult_dot_op_h_b_ex_o} +add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/mult_dot_op_b_a_ex_o} +add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/mult_dot_op_b_b_ex_o} +add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/mult_dot_op_n_a_ex_o} +add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/mult_dot_op_n_b_ex_o} +add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/mult_dot_op_c_a_ex_o} +add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/mult_dot_op_c_b_ex_o} +add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/mult_dot_op_c_ex_o} +add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/mult_dot_signed_ex_o} +add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/mult_is_clpx_ex_o} +add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/mult_clpx_shift_ex_o} +add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/mult_clpx_img_ex_o} +add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/dot_spr_operand_ex_o} +add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/apu_en_ex_o} +add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/apu_type_ex_o} +add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/apu_op_ex_o} +add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/apu_lat_ex_o} +add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/apu_operands_ex_o} +add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/apu_flags_ex_o} +add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/apu_waddr_ex_o} +add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/apu_read_regs_o} +add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/apu_read_regs_valid_o} +add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/apu_read_dep_i} +add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/apu_write_regs_o} +add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/apu_write_regs_valid_o} +add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/apu_write_dep_i} +add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/apu_perf_dep_o} +add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/apu_busy_i} +add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/frm_i} +add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/csr_ivec_fmt_i} +add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/csr_current_cycle_i} +add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/csr_skip_size_i} +add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/next_cycle_ex_o} +add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/current_cycle_ex_o} +add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/mux_sel_wcsr_ex_o} +add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/sb_legacy_i} +add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/csr_access_ex_o} +add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/csr_op_ex_o} +add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/current_priv_lvl_i} +add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/csr_irq_sec_o} +add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/csr_cause_o} +add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/csr_save_if_o} +add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/csr_save_id_o} +add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/csr_save_ex_o} +add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/csr_restore_mret_id_o} +add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/csr_restore_uret_id_o} +add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/csr_restore_dret_id_o} +add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/csr_save_cause_o} +add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/hwlp_start_o} +add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/hwlp_end_o} +add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/hwlp_cnt_o} +add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/csr_hwlp_regid_i} +add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/csr_hwlp_we_i} +add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/csr_hwlp_data_i} +add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/data_req_ex_o} +add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/data_we_ex_o} +add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/data_type_ex_o} +add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/data_sign_ext_ex_o} +add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/data_reg_offset_ex_o} +add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/data_load_event_ex_o} +add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/data_misaligned_ex_o} +add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/prepost_useincr_ex_o} +add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/data_misaligned_i} +add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/data_err_i} +add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/data_err_ack_o} +add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/lsu_tosprw_ex_o} +add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/lsu_tospra_ex_o} +add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/loadComputeVLIW_ex_i} +add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/update_w_id_o} +add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/update_a_id_o} +add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/irq_i} +add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/irq_sec_i} +add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/irq_id_i} +add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/m_irq_enable_i} +add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/u_irq_enable_i} +add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/irq_ack_o} +add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/irq_id_o} +add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/exc_cause_o} +add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/debug_mode_o} +add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/debug_cause_o} +add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/debug_csr_save_o} +add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/debug_req_i} +add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/debug_single_step_i} +add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/debug_ebreakm_i} +add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/debug_ebreaku_i} +add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/regfile_waddr_wb_i} +add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/regfile_we_wb_i} +add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/regfile_wdata_wb_i} +add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/regfile_alu_waddr_fw_i} +add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/regfile_alu_we_fw_i} +add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/regfile_alu_wdata_fw_i} +add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/mult_multicycle_i} +add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/perf_jump_o} +add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/perf_jr_stall_o} +add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/perf_ld_stall_o} +add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/perf_pipeline_stall_o} +add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/instr} +add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/deassert_we} +add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/illegal_insn_dec} +add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/ebrk_insn} +add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/mret_insn_dec} +add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/uret_insn_dec} +add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/dret_insn_dec} +add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/ecall_insn_dec} +add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/pipe_flush_dec} +add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/fencei_insn_dec} +add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/rega_used_dec} +add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/regb_used_dec} +add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/regc_used_dec} +add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/branch_taken_ex} +add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/jump_in_id} +add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/jump_in_dec} +add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/misaligned_stall} +add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/jr_stall} +add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/load_stall} +add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/csr_apu_stall} +add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/instr_multicycle} +add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/hwloop_mask} +add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/halt_id} +add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/macload_update_ex} +add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/same_rnn_id} +add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/imm_i_type} +add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/imm_iz_type} +add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/imm_s_type} +add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/imm_sb_type} +add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/imm_u_type} +add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/imm_uj_type} +add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/imm_z_type} +add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/imm_s2_type} +add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/imm_bi_type} +add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/imm_s3_type} +add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/imm_vs_type} +add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/imm_vu_type} +add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/imm_shuffleb_type} +add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/imm_shuffleh_type} +add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/imm_shuffle_type} +add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/imm_clip_type} +add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/imm_macload_type} +add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/imm_a} +add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/imm_b} +add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/jump_target} +add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/irq_req_ctrl} +add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/irq_sec_ctrl} +add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/irq_id_ctrl} +add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/exc_ack} +add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/exc_kill} +add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/regfile_addr_ra_id} +add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/regfile_addr_rb_id} +add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/regfile_addr_rc_id} +add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/regfile_fp_a} +add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/regfile_fp_b} +add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/regfile_fp_c} +add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/regfile_fp_d} +add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/fregfile_ena} +add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/regfile_waddr_id} +add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/regfile_alu_waddr_id} +add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/regfile_alu_waddr2_id} +add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/regfile_alu_we_id} +add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/regfile_alu_we_dec_id} +add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/regfile_data_ra_id} +add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/regfile_data_rb_id} +add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/regfile_data_rc_id} +add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/alu_en} +add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/alu_operator} +add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/alu_op_a_mux_sel} +add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/alu_op_b_mux_sel} +add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/alu_op_c_mux_sel} +add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/regc_mux} +add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/imm_a_mux_sel} +add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/imm_b_mux_sel} +add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/jump_target_mux_sel} +add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/mult_operator} +add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/mult_en} +add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/mult_int_en} +add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/mult_sel_subword} +add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/mult_signed_mode} +add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/mult_dot_en} +add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/mult_dot_signed} +add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/dot_spr_operand} +add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/fpu_dst_fmt} +add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/fpu_src_fmt} +add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/fpu_int_fmt} +add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/apu_en} +add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/apu_type} +add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/apu_op} +add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/apu_lat} +add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/apu_operands} +add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/apu_flags} +add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/apu_waddr} +add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/apu_read_regs} +add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/apu_read_regs_valid} +add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/apu_write_regs} +add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/apu_write_regs_valid} +add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/apu_flags_src} +add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/apu_stall} +add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/fp_rnd_mode} +add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/regfile_we_id} +add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/regfile_alu_waddr_mux_sel} +add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/data_we_id} +add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/data_type_id} +add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/data_sign_ext_id} +add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/data_reg_offset_id} +add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/data_req_id} +add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/data_load_event_id} +add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/lsu_tosprw_id} +add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/lsu_tospra_id} +add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/hwloop_regid} +add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/hwloop_regid_int} +add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/hwloop_we} +add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/hwloop_we_int} +add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/hwloop_we_masked} +add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/hwloop_target_mux_sel} +add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/hwloop_start_mux_sel} +add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/hwloop_cnt_mux_sel} +add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/hwloop_target} +add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/hwloop_start} +add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/hwloop_start_int} +add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/hwloop_end} +add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/hwloop_cnt} +add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/hwloop_cnt_int} +add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/hwloop_valid} +add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/write_sb_csr_n} +add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/write_sb_csr_q} +add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/csr_ivec_fmt} +add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/ivec_fmt_fw} +add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/csr_access} +add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/csr_op} +add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/csr_status} +add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/prepost_useincr} +add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/operand_a_fw_mux_sel} +add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/operand_b_fw_mux_sel} +add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/operand_c_fw_mux_sel} +add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/operand_a_fw_id} +add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/operand_b_fw_id} +add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/operand_c_fw_id} +add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/operand_b} +add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/operand_b_vec} +add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/operand_c} +add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/operand_c_vec} +add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/alu_operand_a} +add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/alu_operand_b} +add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/alu_operand_c} +add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/bmask_a_mux} +add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/bmask_b_mux} +add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/alu_bmask_a_mux_sel} +add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/alu_bmask_b_mux_sel} +add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/mult_imm_mux} +add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/bmask_a_id_imm} +add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/bmask_b_id_imm} +add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/bmask_a_id} +add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/bmask_b_id} +add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/imm_vec_ext_id} +add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/mult_imm_id} +add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/alu_vec_mode} +add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/ivec_op} +add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/scalar_replication} +add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/scalar_replication_c} +add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/reg_d_ex_is_reg_a_id} +add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/reg_d_ex_is_reg_b_id} +add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/reg_d_ex_is_reg_c_id} +add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/reg_d_wb_is_reg_a_id} +add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/reg_d_wb_is_reg_b_id} +add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/reg_d_wb_is_reg_c_id} +add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/reg_d_alu_is_reg_a_id} +add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/reg_d_alu_is_reg_b_id} +add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/reg_d_alu_is_reg_c_id} +add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/is_clpx} +add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/is_subrot} +add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/mret_dec} +add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/uret_dec} +add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/dret_dec} +add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/current_cycle} +add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/next_cycle} +add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/cc_mux_sel_mpc} +add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/mux_sel_wcsr} +add wave -noupdate -group mult0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/mult_i/clk} +add wave -noupdate -group mult0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/mult_i/rst_n} +add wave -noupdate -group mult0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/mult_i/enable_i} +add wave -noupdate -group mult0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/mult_i/operator_i} +add wave -noupdate -group mult0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/mult_i/short_subword_i} +add wave -noupdate -group mult0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/mult_i/short_signed_i} +add wave -noupdate -group mult0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/mult_i/op_a_i} +add wave -noupdate -group mult0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/mult_i/op_b_i} +add wave -noupdate -group mult0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/mult_i/op_c_i} +add wave -noupdate -group mult0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/mult_i/imm_i} +add wave -noupdate -group mult0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/mult_i/dot_signed_i} +add wave -noupdate -group mult0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/mult_i/dot_op_h_a_i} +add wave -noupdate -group mult0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/mult_i/dot_op_h_b_i} +add wave -noupdate -group mult0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/mult_i/dot_op_b_a_i} +add wave -noupdate -group mult0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/mult_i/dot_op_b_b_i} +add wave -noupdate -group mult0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/mult_i/dot_op_n_b_i} +add wave -noupdate -group mult0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/mult_i/dot_op_n_a_i} +add wave -noupdate -group mult0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/mult_i/dot_op_c_a_i} +add wave -noupdate -group mult0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/mult_i/dot_op_c_b_i} +add wave -noupdate -group mult0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/mult_i/dot_op_t_a_i} +add wave -noupdate -group mult0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/mult_i/dot_op_t_b_i} +add wave -noupdate -group mult0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/mult_i/dot_op_c_i} +add wave -noupdate -group mult0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/mult_i/current_cycle_i} +add wave -noupdate -group mult0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/mult_i/is_clpx_i} +add wave -noupdate -group mult0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/mult_i/clpx_shift_i} +add wave -noupdate -group mult0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/mult_i/clpx_img_i} +add wave -noupdate -group mult0 -color Goldenrod {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/mult_i/result_o} +add wave -noupdate -group mult0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/mult_i/multicycle_o} +add wave -noupdate -group mult0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/mult_i/ready_o} +add wave -noupdate -group mult0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/mult_i/ex_ready_i} +add wave -noupdate -group mult0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/mult_i/short_op_a} +add wave -noupdate -group mult0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/mult_i/short_op_b} +add wave -noupdate -group mult0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/mult_i/short_op_c} +add wave -noupdate -group mult0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/mult_i/short_mul} +add wave -noupdate -group mult0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/mult_i/short_mac} +add wave -noupdate -group mult0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/mult_i/short_round} +add wave -noupdate -group mult0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/mult_i/short_round_tmp} +add wave -noupdate -group mult0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/mult_i/short_result} +add wave -noupdate -group mult0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/mult_i/short_mac_msb1} +add wave -noupdate -group mult0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/mult_i/short_mac_msb0} +add wave -noupdate -group mult0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/mult_i/short_imm} +add wave -noupdate -group mult0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/mult_i/short_subword} +add wave -noupdate -group mult0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/mult_i/short_signed} +add wave -noupdate -group mult0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/mult_i/short_shift_arith} +add wave -noupdate -group mult0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/mult_i/mulh_imm} +add wave -noupdate -group mult0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/mult_i/mulh_subword} +add wave -noupdate -group mult0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/mult_i/mulh_signed} +add wave -noupdate -group mult0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/mult_i/mulh_shift_arith} +add wave -noupdate -group mult0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/mult_i/mulh_carry_q} +add wave -noupdate -group mult0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/mult_i/mulh_active} +add wave -noupdate -group mult0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/mult_i/mulh_save} +add wave -noupdate -group mult0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/mult_i/mulh_clearcarry} +add wave -noupdate -group mult0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/mult_i/mulh_ready} +add wave -noupdate -group mult0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/mult_i/mulh_CS} +add wave -noupdate -group mult0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/mult_i/mulh_NS} +add wave -noupdate -group mult0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/mult_i/int_op_a_msu} +add wave -noupdate -group mult0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/mult_i/int_op_b_msu} +add wave -noupdate -group mult0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/mult_i/int_result} +add wave -noupdate -group mult0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/mult_i/int_is_msu} +add wave -noupdate -group mult0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/mult_i/dot_char_result} +add wave -noupdate -group mult0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/mult_i/dot_nibble_result} +add wave -noupdate -group mult0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/mult_i/dot_crumble_result} +add wave -noupdate -group mult0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/mult_i/dot_ternary_result} +add wave -noupdate -group mult0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/mult_i/dot_short_result} +add wave -noupdate -group mult0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/mult_i/accumulator} +add wave -noupdate -group mult0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/mult_i/clpx_shift_result} +TreeUpdate [SetDefaultTree] +WaveRestoreCursors {{Cursor 1} {233487895275 ps} 0} +quietly wave cursor active 1 +configure wave -namecolwidth 214 +configure wave -valuecolwidth 615 +configure wave -justifyvalue left +configure wave -signalnamewidth 1 +configure wave -snapdistance 10 +configure wave -datasetprefix 0 +configure wave -rowmargin 4 +configure wave -childrowmargin 2 +configure wave -gridoffset 0 +configure wave -gridperiod 1 +configure wave -griddelta 40 +configure wave -timeline 0 +configure wave -timelineunits ps +update +WaveRestoreZoom {233339187724 ps} {233564985239 ps} diff --git a/rt_nn_tests/xptnn_linear/mchan.h b/rt_nn_tests/xptnn_linear/mchan.h new file mode 100644 index 0000000..95882ab --- /dev/null +++ b/rt_nn_tests/xptnn_linear/mchan.h @@ -0,0 +1,137 @@ +#ifndef _MCHAN_H +#define _MCHAN_H + +// Requires to have MCHAN_BASE_ADDR, MCHAN_EVENT defined outside of header +#ifndef MCHAN_BASE_ADDR +#error "[mchan.h] MCHAN_BASE_ADDR not defined!" +#endif + +#if !defined(MCHAN_EVENT) && !defined(MCHAN_POLLED) +#error "[mchan.h] Nor MCHAN_EVENT nor MCHAN_POLLED defined!" +#endif + +#if defined(MCHAN_EVENT) && !defined(MCHAN_EVENT_BIT) +#error "[mchan.h] MCHAN_EVENT_BIT should be defined when using events as signalization!" +#endif + +#include "pmsis.h" + +#define MCHAN_CMD_OFFSET 0 +#define MCHAN_STATUS_OFFSET 4 + +#define MCHAN_CMD_ADDR (MCHAN_BASE_ADDR + MCHAN_CMD_OFFSET) +#define MCHAN_STATUS_ADDR (MCHAN_BASE_ADDR + MCHAN_STATUS_OFFSET) + +#define READ_REG(addr) (*(volatile int*)(addr)) +#define WRITE_REG(addr, value) do { *(volatile int*)(addr) = (int)value; } while (0) + +#define MCHAN_READ_CMD() READ_REG(MCHAN_CMD_ADDR) +#define MCHAN_WRITE_CMD(value) WRITE_REG(MCHAN_CMD_ADDR, value) + +#define MCHAN_READ_STATUS() READ_REG(MCHAN_STATUS_ADDR) +#define MCHAN_WRITE_STATUS(value) WRITE_REG(MCHAN_STATUS_ADDR, value) + +// MCHAN version 7 has 1 more bit for the transfer length, so all the flag offsets are shifted by 1. Also, LOC (TCDM) striding is not supported in v6. +#if MCHAN_VERSION==7 +#define MCHAN_TRANSFER_LEN_SIZE (17) +#else +#define MCHAN_TRANSFER_LEN_SIZE (16) +#endif + +#define MCHAN_CMD_FLAG_DIRECTION_LOC2EXT (0 << (MCHAN_TRANSFER_LEN_SIZE + 0)) +#define MCHAN_CMD_FLAG_DIRECTION_EXT2LOC (1 << (MCHAN_TRANSFER_LEN_SIZE + 0)) +#define MCHAN_CMD_FLAG_INCREMENTAL (1 << (MCHAN_TRANSFER_LEN_SIZE + 1)) +#define MCHAN_CMD_FLAG_2D_TRANSFER_EXTERNAL (1 << (MCHAN_TRANSFER_LEN_SIZE + 2)) +#define MCHAN_CMD_FLAG_EVENT_ENABLE (1 << (MCHAN_TRANSFER_LEN_SIZE + 3)) +#define MCHAN_CMD_FLAG_INTERRUPT_ENABLE (1 << (MCHAN_TRANSFER_LEN_SIZE + 4)) +#define MCHAN_CMD_FLAG_BROADCAST_FINISH (1 << (MCHAN_TRANSFER_LEN_SIZE + 5)) +#if MCHAN_VERSION==7 +#define MCHAN_CMD_FLAG_2D_TRANSFER_LOCAL (1 << (MCHAN_TRANSFER_LEN_SIZE + 6)) // can only be used with MCHAN v7 +#endif +#define MCHAN_CMD_SHIFT_DIRECTION MCHAN_TRANSFER_LEN_SIZE + + +#define MCHAN_CMD(len, dir, inc, loc_2d, ext_2d, int_en, event_en, broadcast) \ + (len | dir | inc | loc_2d | ext_2d | broadcast | int_en | event_en) + +typedef enum { + MCHAN_DMA_TRANSFER_DIRECTION_EXT2LOC = MCHAN_CMD_FLAG_DIRECTION_EXT2LOC, + MCHAN_DMA_TRANSFER_DIRECTION_LOC2EXT = MCHAN_CMD_FLAG_DIRECTION_LOC2EXT +} mchan_dma_transfer_direction_e; + +typedef struct { + int cmd; + int size; + + void *loc; + int loc_size_1d; + int loc_stride_1d; + + void *ext; + int ext_size_1d; + int ext_stride_1d; +} mchan_transfer_t; + +static int mchan_transfer_get_id() { + return MCHAN_READ_CMD(); +} + +static void mchan_transfer_push_1d(mchan_transfer_t trans) +{ + MCHAN_WRITE_CMD(trans.cmd); + MCHAN_WRITE_CMD(trans.loc); + MCHAN_WRITE_CMD(trans.ext); +} + +static void mchan_transfer_push_2d(mchan_transfer_t trans) +{ + MCHAN_WRITE_CMD(trans.cmd); + MCHAN_WRITE_CMD(trans.loc); + MCHAN_WRITE_CMD(trans.ext); +// MCHAN version 7 takes 2D "count" (length of 1D transfers) and stride in 2 steps, +// v7 takes it in 1 step with the stride shifted to the upper 16 bits. +#if MCHAN_VERSION==7 + MCHAN_WRITE_CMD(trans.ext_size_1d); + MCHAN_WRITE_CMD(trans.ext_stride_1d); +#else + MCHAN_WRITE_CMD(trans.ext_size_1d | (trans.ext_stride_1d << 16)); +#endif +} + +static void mchan_transfer_push(mchan_transfer_t trans) +{ + MCHAN_WRITE_CMD(trans.cmd); + MCHAN_WRITE_CMD(trans.loc); + MCHAN_WRITE_CMD(trans.ext); + + if (trans.ext_size_1d < trans.size) { + MCHAN_WRITE_CMD(trans.ext_size_1d); + MCHAN_WRITE_CMD(trans.ext_stride_1d); + } + + if (trans.loc_size_1d < trans.size) { + MCHAN_WRITE_CMD(trans.loc_size_1d); + MCHAN_WRITE_CMD(trans.loc_stride_1d); + } +} + +static void mchan_transfer_free(int tid) +{ + MCHAN_WRITE_STATUS(1 << tid); +} + +static int mchan_transfer_busy(int tid) +{ + return MCHAN_READ_STATUS() & (1 << tid); +} + +static void mchan_transfer_wait(int tid) +{ + #if defined(MCHAN_EVENT) + while(mchan_transfer_busy(tid)) eu_evt_maskWaitAndClr(1 << MCHAN_EVENT_BIT); + #elif defined(MCHAN_POLLED) + while(mchan_transfer_busy(tid)) ; + #endif +} + +#endif diff --git a/rt_nn_tests/xptnn_linear/pulp_nn_kernels.h b/rt_nn_tests/xptnn_linear/pulp_nn_kernels.h new file mode 100644 index 0000000..f4ec977 --- /dev/null +++ b/rt_nn_tests/xptnn_linear/pulp_nn_kernels.h @@ -0,0 +1,26528 @@ +/* + * pulp_nn_kernels.h + * Nazareno Bruschi + * + * Copyright (C) 2019-2020 University of Bologna + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef __XPULPNN_KERNELS__ +#define __XPULPNN_KERNELS__ + +void xpulp_nn_conv_u8_u8_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u8_u8_i8_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u8_i8_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u8_i8_i8_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i8_u8_i8( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i8_u8_i8_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i8_i8_i8( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i8_i8_i8_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u8_u8_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u8_u8_i4_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u8_i8_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u8_i8_i4_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i8_u8_i4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i8_u8_i4_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i8_i8_i4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i8_i8_i4_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u8_u8_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u8_u8_i2_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u8_i8_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u8_i8_i2_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i8_u8_i2( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i8_u8_i2_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i8_i8_i2( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i8_i8_i2_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u8_u4_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u8_u4_i8_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u8_i4_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u8_i4_i8_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i8_u4_i8( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i8_u4_i8_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i8_i4_i8( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i8_i4_i8_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u8_u4_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u8_u4_i4_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u8_i4_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u8_i4_i4_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i8_u4_i4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i8_u4_i4_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i8_i4_i4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i8_i4_i4_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u8_u4_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u8_u4_i2_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u8_i4_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u8_i4_i2_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i8_u4_i2( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i8_u4_i2_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i8_i4_i2( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i8_i4_i2_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u8_u2_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u8_u2_i8_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u8_i2_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u8_i2_i8_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i8_u2_i8( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i8_u2_i8_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i8_i2_i8( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i8_i2_i8_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u8_u2_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u8_u2_i4_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u8_i2_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u8_i2_i4_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i8_u2_i4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i8_u2_i4_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i8_i2_i4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i8_i2_i4_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u8_u2_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u8_u2_i2_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u8_i2_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u8_i2_i2_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i8_u2_i2( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i8_u2_i2_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i8_i2_i2( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i8_i2_i2_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u4_u8_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u4_u8_i8_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u4_i8_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u4_i8_i8_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i4_u8_i8( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i4_u8_i8_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i4_i8_i8( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i4_i8_i8_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u4_u8_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u4_u8_i4_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u4_i8_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u4_i8_i4_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i4_u8_i4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i4_u8_i4_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i4_i8_i4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i4_i8_i4_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u4_u8_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u4_u8_i2_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u4_i8_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u4_i8_i2_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i4_u8_i2( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i4_u8_i2_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i4_i8_i2( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i4_i8_i2_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u4_u4_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u4_u4_i8_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u4_i4_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u4_i4_i8_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i4_u4_i8( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i4_u4_i8_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i4_i4_i8( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i4_i4_i8_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u4_u4_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u4_u4_i4_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u4_i4_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u4_i4_i4_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i4_u4_i4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i4_u4_i4_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i4_i4_i4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i4_i4_i4_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u4_u4_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u4_u4_i2_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u4_i4_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u4_i4_i2_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i4_u4_i2( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i4_u4_i2_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i4_i4_i2( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i4_i4_i2_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u4_u2_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u4_u2_i8_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u4_i2_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u4_i2_i8_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i4_u2_i8( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i4_u2_i8_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i4_i2_i8( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i4_i2_i8_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u4_u2_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u4_u2_i4_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u4_i2_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u4_i2_i4_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i4_u2_i4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i4_u2_i4_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i4_i2_i4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i4_i2_i4_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u4_u2_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u4_u2_i2_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u4_i2_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u4_i2_i2_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i4_u2_i2( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i4_u2_i2_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i4_i2_i2( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i4_i2_i2_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u2_u8_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u2_u8_i8_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u2_i8_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u2_i8_i8_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i2_u8_i8( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i2_u8_i8_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i2_i8_i8( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i2_i8_i8_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u2_u8_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u2_u8_i4_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u2_i8_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u2_i8_i4_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i2_u8_i4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i2_u8_i4_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i2_i8_i4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i2_i8_i4_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u2_u8_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u2_u8_i2_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u2_i8_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u2_i8_i2_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i2_u8_i2( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i2_u8_i2_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i2_i8_i2( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i2_i8_i2_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u2_u4_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u2_u4_i8_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u2_i4_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u2_i4_i8_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i2_u4_i8( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i2_u4_i8_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i2_i4_i8( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i2_i4_i8_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u2_u4_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u2_u4_i4_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u2_i4_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u2_i4_i4_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i2_u4_i4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i2_u4_i4_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i2_i4_i4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i2_i4_i4_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u2_u4_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u2_u4_i2_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u2_i4_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u2_i4_i2_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i2_u4_i2( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i2_u4_i2_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i2_i4_i2( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i2_i4_i2_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u2_u2_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u2_u2_i8_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u2_i2_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u2_i2_i8_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i2_u2_i8( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i2_u2_i8_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i2_i2_i8( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i2_i2_i8_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u2_u2_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u2_u2_i4_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u2_i2_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u2_i2_i4_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i2_u2_i4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i2_u2_i4_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i2_i2_i4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i2_i2_i4_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u2_u2_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u2_u2_i2_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u2_i2_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u2_i2_i2_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i2_u2_i2( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i2_u2_i2_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i2_i2_i2( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, +#ifndef PROFILE + uint8_t flag_batch_norm); +#else + uint8_t flag_batch_norm, + uint32_t *im2col_cycles, + uint32_t *hotloop_prep_cycles, + uint32_t *hotloop_cycles, + uint32_t *requant_cycles, + uint32_t *hotloop_leftover_cycles, + uint32_t *matmul4x2_leftover_cycles); +#endif + + +void xpulp_nn_conv_i2_i2_i2_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u8_u8_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u8_u8_i8_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u8_i8_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u8_i8_i8_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i8_u8_i8( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i8_u8_i8_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i8_i8_i8( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i8_i8_i8_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u8_u8_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u8_u8_i4_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u8_i8_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u8_i8_i4_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i8_u8_i4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i8_u8_i4_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i8_i8_i4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i8_i8_i4_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u8_u8_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u8_u8_i2_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u8_i8_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u8_i8_i2_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i8_u8_i2( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i8_u8_i2_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i8_i8_i2( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i8_i8_i2_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u8_u4_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u8_u4_i8_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u8_i4_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u8_i4_i8_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i8_u4_i8( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i8_u4_i8_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i8_i4_i8( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i8_i4_i8_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u8_u4_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u8_u4_i4_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u8_i4_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u8_i4_i4_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i8_u4_i4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i8_u4_i4_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i8_i4_i4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i8_i4_i4_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u8_u4_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u8_u4_i2_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u8_i4_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u8_i4_i2_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i8_u4_i2( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i8_u4_i2_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i8_i4_i2( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i8_i4_i2_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u8_u2_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u8_u2_i8_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u8_i2_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u8_i2_i8_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i8_u2_i8( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i8_u2_i8_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i8_i2_i8( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i8_i2_i8_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u8_u2_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u8_u2_i4_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u8_i2_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u8_i2_i4_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i8_u2_i4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i8_u2_i4_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i8_i2_i4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i8_i2_i4_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u8_u2_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u8_u2_i2_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u8_i2_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u8_i2_i2_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i8_u2_i2( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i8_u2_i2_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i8_i2_i2( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i8_i2_i2_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u4_u8_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u4_u8_i8_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u4_i8_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u4_i8_i8_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i4_u8_i8( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i4_u8_i8_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i4_i8_i8( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i4_i8_i8_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u4_u8_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u4_u8_i4_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u4_i8_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u4_i8_i4_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i4_u8_i4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i4_u8_i4_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i4_i8_i4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i4_i8_i4_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u4_u8_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u4_u8_i2_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u4_i8_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u4_i8_i2_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i4_u8_i2( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i4_u8_i2_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i4_i8_i2( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i4_i8_i2_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u4_u4_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u4_u4_i8_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u4_i4_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u4_i4_i8_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i4_u4_i8( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i4_u4_i8_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i4_i4_i8( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i4_i4_i8_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u4_u4_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u4_u4_i4_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u4_i4_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u4_i4_i4_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i4_u4_i4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i4_u4_i4_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i4_i4_i4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i4_i4_i4_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u4_u4_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u4_u4_i2_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u4_i4_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u4_i4_i2_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i4_u4_i2( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i4_u4_i2_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i4_i4_i2( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i4_i4_i2_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u4_u2_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u4_u2_i8_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u4_i2_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u4_i2_i8_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i4_u2_i8( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i4_u2_i8_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i4_i2_i8( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i4_i2_i8_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u4_u2_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u4_u2_i4_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u4_i2_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u4_i2_i4_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i4_u2_i4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i4_u2_i4_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i4_i2_i4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i4_i2_i4_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u4_u2_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u4_u2_i2_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u4_i2_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u4_i2_i2_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i4_u2_i2( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i4_u2_i2_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i4_i2_i2( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i4_i2_i2_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u2_u8_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u2_u8_i8_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u2_i8_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u2_i8_i8_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i2_u8_i8( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i2_u8_i8_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i2_i8_i8( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i2_i8_i8_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u2_u8_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u2_u8_i4_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u2_i8_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u2_i8_i4_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i2_u8_i4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i2_u8_i4_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i2_i8_i4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i2_i8_i4_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u2_u8_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u2_u8_i2_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u2_i8_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u2_i8_i2_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i2_u8_i2( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i2_u8_i2_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i2_i8_i2( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i2_i8_i2_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u2_u4_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u2_u4_i8_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u2_i4_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u2_i4_i8_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i2_u4_i8( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i2_u4_i8_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i2_i4_i8( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i2_i4_i8_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u2_u4_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u2_u4_i4_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u2_i4_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u2_i4_i4_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i2_u4_i4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i2_u4_i4_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i2_i4_i4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i2_i4_i4_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u2_u4_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u2_u4_i2_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u2_i4_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u2_i4_i2_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i2_u4_i2( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i2_u4_i2_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i2_i4_i2( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i2_i4_i2_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u2_u2_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u2_u2_i8_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u2_i2_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u2_i2_i8_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i2_u2_i8( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i2_u2_i8_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i2_i2_i8( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i2_i2_i8_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u2_u2_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u2_u2_i4_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u2_i2_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u2_i2_i4_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i2_u2_i4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i2_u2_i4_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i2_i2_i4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i2_i2_i4_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u2_u2_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u2_u2_i2_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u2_i2_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u2_i2_i2_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i2_u2_i2( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i2_u2_i2_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i2_i2_i2( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i2_i2_i2_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_u8_u8_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_u8_i8_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_i8_u8_i8( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_i8_i8_i8( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_u8_u8_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_u8_i8_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_i8_u8_i4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_i8_i8_i4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_u8_u8_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_u8_i8_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_i8_u8_i2( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_i8_i8_i2( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_u8_u4_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_u8_i4_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_i8_u4_i8( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_i8_i4_i8( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_u8_u4_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_u8_i4_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_i8_u4_i4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_i8_i4_i4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_u8_u4_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_u8_i4_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_i8_u4_i2( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_i8_i4_i2( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_u8_u2_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_u8_i2_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_i8_u2_i8( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_i8_i2_i8( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_u8_u2_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_u8_i2_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_i8_u2_i4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_i8_i2_i4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_u8_u2_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_u8_i2_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_i8_u2_i2( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_i8_i2_i2( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_u4_u8_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_u4_i8_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_i4_u8_i8( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_i4_i8_i8( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_u4_u8_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_u4_i8_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_i4_u8_i4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_i4_i8_i4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_u4_u8_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_u4_i8_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_i4_u8_i2( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_i4_i8_i2( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_u4_u4_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_u4_i4_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_i4_u4_i8( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_i4_i4_i8( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_u4_u4_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_u4_i4_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_i4_u4_i4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_i4_i4_i4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_u4_u4_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_u4_i4_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_i4_u4_i2( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_i4_i4_i2( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_u4_u2_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_u4_i2_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_i4_u2_i8( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_i4_i2_i8( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_u4_u2_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_u4_i2_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_i4_u2_i4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_i4_i2_i4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_u4_u2_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_u4_i2_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_i4_u2_i2( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_i4_i2_i2( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_u2_u8_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_u2_i8_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_i2_u8_i8( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_i2_i8_i8( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_u2_u8_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_u2_i8_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_i2_u8_i4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_i2_i8_i4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_u2_u8_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_u2_i8_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_i2_u8_i2( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_i2_i8_i2( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_u2_u4_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_u2_i4_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_i2_u4_i8( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_i2_i4_i8( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_u2_u4_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_u2_i4_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_i2_u4_i4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_i2_i4_i4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_u2_u4_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_u2_i4_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_i2_u4_i2( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_i2_i4_i2( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_u2_u2_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_u2_i2_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_i2_u2_i8( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_i2_i2_i8( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_u2_u2_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_u2_i2_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_i2_u2_i4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_i2_i2_i4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_u2_u2_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_u2_i2_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_i2_u2_i2( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_i2_i2_i2( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u8_u8_i8( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u8_i8_i8( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i8_u8_i8( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i8_i8_i8( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u8_u8_i8_4x4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u8_i8_i8_4x4( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pOut3, + int8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i8_u8_i8_4x4( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i8_i8_i8_4x4( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pOut3, + int8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u8_u8_i4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u8_i8_i4( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i8_u8_i4( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i8_i8_i4( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u8_u8_i4_4x4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u8_i8_i4_4x4( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pOut3, + int8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i8_u8_i4_4x4( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i8_i8_i4_4x4( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pOut3, + int8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u8_u8_i2( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u8_i8_i2( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i8_u8_i2( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i8_i8_i2( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u8_u8_i2_4x4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u8_i8_i2_4x4( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pOut3, + int8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i8_u8_i2_4x4( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i8_i8_i2_4x4( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pOut3, + int8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u8_u4_i8( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u8_i4_i8( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i8_u4_i8( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i8_i4_i8( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u8_u4_i8_4x4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u8_i4_i8_4x4( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pOut3, + int8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i8_u4_i8_4x4( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i8_i4_i8_4x4( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pOut3, + int8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u8_u4_i4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u8_i4_i4( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i8_u4_i4( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i8_i4_i4( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u8_u4_i4_4x4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u8_i4_i4_4x4( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pOut3, + int8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i8_u4_i4_4x4( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i8_i4_i4_4x4( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pOut3, + int8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u8_u4_i2( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u8_i4_i2( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i8_u4_i2( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i8_i4_i2( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u8_u4_i2_4x4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u8_i4_i2_4x4( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pOut3, + int8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i8_u4_i2_4x4( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i8_i4_i2_4x4( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pOut3, + int8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u8_u2_i8( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u8_i2_i8( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i8_u2_i8( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i8_i2_i8( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u8_u2_i8_4x4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u8_i2_i8_4x4( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pOut3, + int8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i8_u2_i8_4x4( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i8_i2_i8_4x4( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pOut3, + int8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u8_u2_i4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u8_i2_i4( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i8_u2_i4( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i8_i2_i4( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u8_u2_i4_4x4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u8_i2_i4_4x4( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pOut3, + int8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i8_u2_i4_4x4( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i8_i2_i4_4x4( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pOut3, + int8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u8_u2_i2( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u8_i2_i2( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i8_u2_i2( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i8_i2_i2( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u8_u2_i2_4x4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u8_i2_i2_4x4( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pOut3, + int8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i8_u2_i2_4x4( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i8_i2_i2_4x4( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pOut3, + int8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u4_u8_i8( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u4_i8_i8( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i4_u8_i8( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i4_i8_i8( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u4_u8_i8_4x4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u4_i8_i8_4x4( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pOut3, + int8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i4_u8_i8_4x4( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i4_i8_i8_4x4( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pOut3, + int8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u4_u8_i4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u4_i8_i4( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i4_u8_i4( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i4_i8_i4( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u4_u8_i4_4x4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u4_i8_i4_4x4( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pOut3, + int8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i4_u8_i4_4x4( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i4_i8_i4_4x4( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pOut3, + int8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u4_u8_i2( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u4_i8_i2( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i4_u8_i2( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i4_i8_i2( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u4_u8_i2_4x4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u4_i8_i2_4x4( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pOut3, + int8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i4_u8_i2_4x4( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i4_i8_i2_4x4( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pOut3, + int8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u4_u4_i8( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u4_i4_i8( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i4_u4_i8( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i4_i4_i8( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u4_u4_i8_4x4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u4_i4_i8_4x4( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pOut3, + int8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i4_u4_i8_4x4( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i4_i4_i8_4x4( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pOut3, + int8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u4_u4_i4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u4_i4_i4( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i4_u4_i4( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i4_i4_i4( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u4_u4_i4_4x4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u4_i4_i4_4x4( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pOut3, + int8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i4_u4_i4_4x4( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i4_i4_i4_4x4( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pOut3, + int8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u4_u4_i2( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u4_i4_i2( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i4_u4_i2( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i4_i4_i2( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u4_u4_i2_4x4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u4_i4_i2_4x4( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pOut3, + int8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i4_u4_i2_4x4( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i4_i4_i2_4x4( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pOut3, + int8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u4_u2_i8( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u4_i2_i8( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i4_u2_i8( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i4_i2_i8( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u4_u2_i8_4x4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u4_i2_i8_4x4( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pOut3, + int8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i4_u2_i8_4x4( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i4_i2_i8_4x4( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pOut3, + int8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u4_u2_i4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u4_i2_i4( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i4_u2_i4( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i4_i2_i4( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u4_u2_i4_4x4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u4_i2_i4_4x4( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pOut3, + int8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i4_u2_i4_4x4( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i4_i2_i4_4x4( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pOut3, + int8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u4_u2_i2( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u4_i2_i2( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i4_u2_i2( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i4_i2_i2( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u4_u2_i2_4x4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u4_i2_i2_4x4( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pOut3, + int8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i4_u2_i2_4x4( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i4_i2_i2_4x4( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pOut3, + int8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u2_u8_i8( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u2_i8_i8( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i2_u8_i8( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i2_i8_i8( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u2_u8_i8_4x4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u2_i8_i8_4x4( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pOut3, + int8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i2_u8_i8_4x4( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i2_i8_i8_4x4( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pOut3, + int8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u2_u8_i4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u2_i8_i4( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i2_u8_i4( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i2_i8_i4( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u2_u8_i4_4x4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u2_i8_i4_4x4( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pOut3, + int8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i2_u8_i4_4x4( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i2_i8_i4_4x4( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pOut3, + int8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u2_u8_i2( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u2_i8_i2( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i2_u8_i2( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i2_i8_i2( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u2_u8_i2_4x4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u2_i8_i2_4x4( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pOut3, + int8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i2_u8_i2_4x4( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i2_i8_i2_4x4( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pOut3, + int8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u2_u4_i8( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u2_i4_i8( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i2_u4_i8( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i2_i4_i8( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u2_u4_i8_4x4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u2_i4_i8_4x4( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pOut3, + int8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i2_u4_i8_4x4( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i2_i4_i8_4x4( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pOut3, + int8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u2_u4_i4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u2_i4_i4( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i2_u4_i4( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i2_i4_i4( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u2_u4_i4_4x4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u2_i4_i4_4x4( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pOut3, + int8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i2_u4_i4_4x4( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i2_i4_i4_4x4( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pOut3, + int8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u2_u4_i2( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u2_i4_i2( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i2_u4_i2( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i2_i4_i2( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u2_u4_i2_4x4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u2_i4_i2_4x4( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pOut3, + int8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i2_u4_i2_4x4( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i2_i4_i2_4x4( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pOut3, + int8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u2_u2_i8( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u2_i2_i8( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i2_u2_i8( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i2_i2_i8( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u2_u2_i8_4x4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u2_i2_i8_4x4( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pOut3, + int8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i2_u2_i8_4x4( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i2_i2_i8_4x4( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pOut3, + int8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u2_u2_i4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u2_i2_i4( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i2_u2_i4( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i2_i2_i4( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u2_u2_i4_4x4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u2_i2_i4_4x4( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pOut3, + int8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i2_u2_i4_4x4( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i2_i2_i4_4x4( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pOut3, + int8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u2_u2_i2( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u2_i2_i2( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i2_u2_i2( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i2_i2_i2( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, +#ifndef PROFILE + uint8_t flag_batch_norm); +#else + uint8_t flag_batch_norm, + uint32_t *hotloop_prep_cycles, + uint32_t *hotloop_cycles, + uint32_t *requant_cycles, + uint32_t *hotloop_leftover_cycles); +#endif + +uint8_t *xpulp_nn_matmul_u2_u2_i2_4x4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u2_i2_i2_4x4( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pOut3, + int8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i2_u2_i2_4x4( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i2_i2_i2_4x4( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pOut3, + int8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_u8_u8_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_u8_i8_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_i8_u8_i8( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_i8_i8_i8( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_u8_u8_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_u8_i8_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_i8_u8_i4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_i8_i8_i4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_u8_u8_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_u8_i8_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_i8_u8_i2( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_i8_i8_i2( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_u8_u4_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_u8_i4_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_i8_u4_i8( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_i8_i4_i8( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_u8_u4_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_u8_i4_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_i8_u4_i4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_i8_i4_i4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_u8_u4_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_u8_i4_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_i8_u4_i2( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_i8_i4_i2( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_u8_u2_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_u8_i2_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_i8_u2_i8( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_i8_i2_i8( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_u8_u2_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_u8_i2_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_i8_u2_i4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_i8_i2_i4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_u8_u2_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_u8_i2_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_i8_u2_i2( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_i8_i2_i2( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_u4_u8_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_u4_i8_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_i4_u8_i8( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_i4_i8_i8( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_u4_u8_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_u4_i8_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_i4_u8_i4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_i4_i8_i4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_u4_u8_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_u4_i8_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_i4_u8_i2( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_i4_i8_i2( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_u4_u4_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_u4_i4_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_i4_u4_i8( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_i4_i4_i8( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_u4_u4_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_u4_i4_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_i4_u4_i4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_i4_i4_i4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_u4_u4_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_u4_i4_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_i4_u4_i2( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_i4_i4_i2( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_u4_u2_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_u4_i2_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_i4_u2_i8( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_i4_i2_i8( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_u4_u2_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_u4_i2_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_i4_u2_i4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_i4_i2_i4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_u4_u2_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_u4_i2_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_i4_u2_i2( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_i4_i2_i2( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_u2_u8_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_u2_i8_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_i2_u8_i8( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_i2_i8_i8( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_u2_u8_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_u2_i8_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_i2_u8_i4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_i2_i8_i4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_u2_u8_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_u2_i8_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_i2_u8_i2( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_i2_i8_i2( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_u2_u4_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_u2_i4_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_i2_u4_i8( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_i2_i4_i8( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_u2_u4_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_u2_i4_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_i2_u4_i4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_i2_i4_i4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_u2_u4_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_u2_i4_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_i2_u4_i2( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_i2_i4_i2( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_u2_u2_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_u2_i2_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_i2_u2_i8( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_i2_i2_i8( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_u2_u2_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_u2_i2_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_i2_u2_i4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_i2_i2_i4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_u2_u2_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_u2_i2_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_i2_u2_i2( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_i2_i2_i2( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_u8_i32_i8( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + uint16_t dim_vec, + uint16_t num_o_neurons); + +void xpulp_nn_linear_i8_i32_i8( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + uint16_t dim_vec, + uint16_t num_o_neurons); + +void xpulp_nn_linear_u8_i32_i4( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + uint16_t dim_vec, + uint16_t num_o_neurons); + +void xpulp_nn_linear_i8_i32_i4( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + uint16_t dim_vec, + uint16_t num_o_neurons); + +void xpulp_nn_linear_u8_i32_i2( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + uint16_t dim_vec, + uint16_t num_o_neurons); + +void xpulp_nn_linear_i8_i32_i2( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + uint16_t dim_vec, + uint16_t num_o_neurons); + +void xpulp_nn_linear_u4_i32_i8( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + uint16_t dim_vec, + uint16_t num_o_neurons); + +void xpulp_nn_linear_i4_i32_i8( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + uint16_t dim_vec, + uint16_t num_o_neurons); + +void xpulp_nn_linear_u4_i32_i4( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + uint16_t dim_vec, + uint16_t num_o_neurons); + +void xpulp_nn_linear_i4_i32_i4( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + uint16_t dim_vec, + uint16_t num_o_neurons); + +void xpulp_nn_linear_u4_i32_i2( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + uint16_t dim_vec, + uint16_t num_o_neurons); + +void xpulp_nn_linear_i4_i32_i2( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + uint16_t dim_vec, + uint16_t num_o_neurons); + +void xpulp_nn_linear_u2_i32_i8( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + uint16_t dim_vec, + uint16_t num_o_neurons); + +void xpulp_nn_linear_i2_i32_i8( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + uint16_t dim_vec, + uint16_t num_o_neurons); + +void xpulp_nn_linear_u2_i32_i4( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + uint16_t dim_vec, + uint16_t num_o_neurons); + +void xpulp_nn_linear_i2_i32_i4( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + uint16_t dim_vec, + uint16_t num_o_neurons); + +void xpulp_nn_linear_u2_i32_i2( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + uint16_t dim_vec, + uint16_t num_o_neurons); + +void xpulp_nn_linear_i2_i32_i2( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + uint16_t dim_vec, + uint16_t num_o_neurons); + +void xpulp_nn_linear_u8_u8_i8( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_u8_i8_i8( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_i8_u8_i8( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_i8_i8_i8( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_u8_u8_i4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_u8_i8_i4( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_i8_u8_i4( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_i8_i8_i4( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_u8_u8_i2( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_u8_i8_i2( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_i8_u8_i2( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_i8_i8_i2( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_u8_u4_i8( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_u8_i4_i8( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_i8_u4_i8( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_i8_i4_i8( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_u8_u4_i4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_u8_i4_i4( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_i8_u4_i4( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_i8_i4_i4( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_u8_u4_i2( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_u8_i4_i2( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_i8_u4_i2( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_i8_i4_i2( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_u8_u2_i8( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_u8_i2_i8( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_i8_u2_i8( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_i8_i2_i8( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_u8_u2_i4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_u8_i2_i4( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_i8_u2_i4( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_i8_i2_i4( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_u8_u2_i2( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_u8_i2_i2( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_i8_u2_i2( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_i8_i2_i2( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_u4_u8_i8( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_u4_i8_i8( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_i4_u8_i8( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_i4_i8_i8( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_u4_u8_i4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_u4_i8_i4( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_i4_u8_i4( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_i4_i8_i4( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_u4_u8_i2( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_u4_i8_i2( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_i4_u8_i2( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_i4_i8_i2( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_u4_u4_i8( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_u4_i4_i8( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_i4_u4_i8( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_i4_i4_i8( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_u4_u4_i4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_u4_i4_i4( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_i4_u4_i4( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_i4_i4_i4( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_u4_u4_i2( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_u4_i4_i2( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_i4_u4_i2( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_i4_i4_i2( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_u4_u2_i8( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_u4_i2_i8( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_i4_u2_i8( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_i4_i2_i8( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_u4_u2_i4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_u4_i2_i4( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_i4_u2_i4( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_i4_i2_i4( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_u4_u2_i2( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_u4_i2_i2( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_i4_u2_i2( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_i4_i2_i2( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_u2_u8_i8( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_u2_i8_i8( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_i2_u8_i8( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_i2_i8_i8( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_u2_u8_i4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_u2_i8_i4( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_i2_u8_i4( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_i2_i8_i4( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_u2_u8_i2( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_u2_i8_i2( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_i2_u8_i2( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_i2_i8_i2( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_u2_u4_i8( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_u2_i4_i8( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_i2_u4_i8( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_i2_i4_i8( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_u2_u4_i4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_u2_i4_i4( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_i2_u4_i4( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_i2_i4_i4( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_u2_u4_i2( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_u2_i4_i2( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_i2_u4_i2( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_i2_i4_i2( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_u2_u2_i8( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_u2_i2_i8( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_i2_u2_i8( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_i2_i2_i8( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_u2_u2_i4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_u2_i2_i4( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_i2_u2_i4( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_i2_i2_i4( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_u2_u2_i2( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_u2_i2_i2( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_i2_u2_i2( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_i2_i2_i2( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_maxpool_u8( + uint8_t * pIn, + uint8_t * pOut, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + uint16_t dim_im_out_x, + uint16_t dim_im_out_y, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_t, + uint16_t padding_b, + uint16_t padding_l, + uint16_t padding_r, + uint16_t stride_x, + uint16_t stride_y); + +void xpulp_nn_maxpool_i8( + int8_t * pIn, + int8_t * pOut, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + uint16_t dim_im_out_x, + uint16_t dim_im_out_y, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_t, + uint16_t padding_b, + uint16_t padding_l, + uint16_t padding_r, + uint16_t stride_x, + uint16_t stride_y); + +void xpulp_nn_maxpool_u4( + uint8_t * pIn, + uint8_t * pOut, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + uint16_t dim_im_out_x, + uint16_t dim_im_out_y, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_t, + uint16_t padding_b, + uint16_t padding_l, + uint16_t padding_r, + uint16_t stride_x, + uint16_t stride_y); + +void xpulp_nn_maxpool_i4( + int8_t * pIn, + int8_t * pOut, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + uint16_t dim_im_out_x, + uint16_t dim_im_out_y, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_t, + uint16_t padding_b, + uint16_t padding_l, + uint16_t padding_r, + uint16_t stride_x, + uint16_t stride_y); + +void xpulp_nn_maxpool_u2( + uint8_t * pIn, + uint8_t * pOut, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + uint16_t dim_im_out_x, + uint16_t dim_im_out_y, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_t, + uint16_t padding_b, + uint16_t padding_l, + uint16_t padding_r, + uint16_t stride_x, + uint16_t stride_y); + +void xpulp_nn_maxpool_i2( + int8_t * pIn, + int8_t * pOut, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + uint16_t dim_im_out_x, + uint16_t dim_im_out_y, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_t, + uint16_t padding_b, + uint16_t padding_l, + uint16_t padding_r, + uint16_t stride_x, + uint16_t stride_y); + +void xpulp_nn_avgpool_u8_u8( + uint8_t * pIn, + uint8_t * pOut, + int32_t lambda, + uint16_t out_shift, + int32_t out_add, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + uint16_t dim_im_out_x, + uint16_t dim_im_out_y, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_t, + uint16_t padding_b, + uint16_t padding_l, + uint16_t padding_r, + uint16_t stride_x, + uint16_t stride_y, + int flag_requant +); + +void xpulp_nn_avgpool_u8_i8( + uint8_t * pIn, + int8_t * pOut, + int32_t lambda, + uint16_t out_shift, + int32_t out_add, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + uint16_t dim_im_out_x, + uint16_t dim_im_out_y, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_t, + uint16_t padding_b, + uint16_t padding_l, + uint16_t padding_r, + uint16_t stride_x, + uint16_t stride_y, + int flag_requant +); + +void xpulp_nn_avgpool_i8_u8( + int8_t * pIn, + uint8_t * pOut, + int32_t lambda, + uint16_t out_shift, + int32_t out_add, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + uint16_t dim_im_out_x, + uint16_t dim_im_out_y, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_t, + uint16_t padding_b, + uint16_t padding_l, + uint16_t padding_r, + uint16_t stride_x, + uint16_t stride_y, + int flag_requant +); + +void xpulp_nn_avgpool_i8_i8( + int8_t * pIn, + int8_t * pOut, + int32_t lambda, + uint16_t out_shift, + int32_t out_add, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + uint16_t dim_im_out_x, + uint16_t dim_im_out_y, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_t, + uint16_t padding_b, + uint16_t padding_l, + uint16_t padding_r, + uint16_t stride_x, + uint16_t stride_y, + int flag_requant +); + +void xpulp_nn_avgpool_u8_u4( + uint8_t * pIn, + uint8_t * pOut, + int32_t lambda, + uint16_t out_shift, + int32_t out_add, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + uint16_t dim_im_out_x, + uint16_t dim_im_out_y, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_t, + uint16_t padding_b, + uint16_t padding_l, + uint16_t padding_r, + uint16_t stride_x, + uint16_t stride_y, + int flag_requant +); + +void xpulp_nn_avgpool_u8_i4( + uint8_t * pIn, + int8_t * pOut, + int32_t lambda, + uint16_t out_shift, + int32_t out_add, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + uint16_t dim_im_out_x, + uint16_t dim_im_out_y, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_t, + uint16_t padding_b, + uint16_t padding_l, + uint16_t padding_r, + uint16_t stride_x, + uint16_t stride_y, + int flag_requant +); + +void xpulp_nn_avgpool_i8_u4( + int8_t * pIn, + uint8_t * pOut, + int32_t lambda, + uint16_t out_shift, + int32_t out_add, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + uint16_t dim_im_out_x, + uint16_t dim_im_out_y, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_t, + uint16_t padding_b, + uint16_t padding_l, + uint16_t padding_r, + uint16_t stride_x, + uint16_t stride_y, + int flag_requant +); + +void xpulp_nn_avgpool_i8_i4( + int8_t * pIn, + int8_t * pOut, + int32_t lambda, + uint16_t out_shift, + int32_t out_add, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + uint16_t dim_im_out_x, + uint16_t dim_im_out_y, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_t, + uint16_t padding_b, + uint16_t padding_l, + uint16_t padding_r, + uint16_t stride_x, + uint16_t stride_y, + int flag_requant +); + +void xpulp_nn_avgpool_u8_u2( + uint8_t * pIn, + uint8_t * pOut, + int32_t lambda, + uint16_t out_shift, + int32_t out_add, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + uint16_t dim_im_out_x, + uint16_t dim_im_out_y, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_t, + uint16_t padding_b, + uint16_t padding_l, + uint16_t padding_r, + uint16_t stride_x, + uint16_t stride_y, + int flag_requant +); + +void xpulp_nn_avgpool_u8_i2( + uint8_t * pIn, + int8_t * pOut, + int32_t lambda, + uint16_t out_shift, + int32_t out_add, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + uint16_t dim_im_out_x, + uint16_t dim_im_out_y, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_t, + uint16_t padding_b, + uint16_t padding_l, + uint16_t padding_r, + uint16_t stride_x, + uint16_t stride_y, + int flag_requant +); + +void xpulp_nn_avgpool_i8_u2( + int8_t * pIn, + uint8_t * pOut, + int32_t lambda, + uint16_t out_shift, + int32_t out_add, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + uint16_t dim_im_out_x, + uint16_t dim_im_out_y, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_t, + uint16_t padding_b, + uint16_t padding_l, + uint16_t padding_r, + uint16_t stride_x, + uint16_t stride_y, + int flag_requant +); + +void xpulp_nn_avgpool_i8_i2( + int8_t * pIn, + int8_t * pOut, + int32_t lambda, + uint16_t out_shift, + int32_t out_add, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + uint16_t dim_im_out_x, + uint16_t dim_im_out_y, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_t, + uint16_t padding_b, + uint16_t padding_l, + uint16_t padding_r, + uint16_t stride_x, + uint16_t stride_y, + int flag_requant +); + +void xpulp_nn_avgpool_u4_u8( + uint8_t * pIn, + uint8_t * pOut, + int32_t lambda, + uint16_t out_shift, + int32_t out_add, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + uint16_t dim_im_out_x, + uint16_t dim_im_out_y, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_t, + uint16_t padding_b, + uint16_t padding_l, + uint16_t padding_r, + uint16_t stride_x, + uint16_t stride_y, + int flag_requant +); + +void xpulp_nn_avgpool_u4_i8( + uint8_t * pIn, + int8_t * pOut, + int32_t lambda, + uint16_t out_shift, + int32_t out_add, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + uint16_t dim_im_out_x, + uint16_t dim_im_out_y, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_t, + uint16_t padding_b, + uint16_t padding_l, + uint16_t padding_r, + uint16_t stride_x, + uint16_t stride_y, + int flag_requant +); + +void xpulp_nn_avgpool_i4_u8( + int8_t * pIn, + uint8_t * pOut, + int32_t lambda, + uint16_t out_shift, + int32_t out_add, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + uint16_t dim_im_out_x, + uint16_t dim_im_out_y, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_t, + uint16_t padding_b, + uint16_t padding_l, + uint16_t padding_r, + uint16_t stride_x, + uint16_t stride_y, + int flag_requant +); + +void xpulp_nn_avgpool_i4_i8( + int8_t * pIn, + int8_t * pOut, + int32_t lambda, + uint16_t out_shift, + int32_t out_add, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + uint16_t dim_im_out_x, + uint16_t dim_im_out_y, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_t, + uint16_t padding_b, + uint16_t padding_l, + uint16_t padding_r, + uint16_t stride_x, + uint16_t stride_y, + int flag_requant +); + +void xpulp_nn_avgpool_u4_u4( + uint8_t * pIn, + uint8_t * pOut, + int32_t lambda, + uint16_t out_shift, + int32_t out_add, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + uint16_t dim_im_out_x, + uint16_t dim_im_out_y, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_t, + uint16_t padding_b, + uint16_t padding_l, + uint16_t padding_r, + uint16_t stride_x, + uint16_t stride_y, + int flag_requant +); + +void xpulp_nn_avgpool_u4_i4( + uint8_t * pIn, + int8_t * pOut, + int32_t lambda, + uint16_t out_shift, + int32_t out_add, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + uint16_t dim_im_out_x, + uint16_t dim_im_out_y, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_t, + uint16_t padding_b, + uint16_t padding_l, + uint16_t padding_r, + uint16_t stride_x, + uint16_t stride_y, + int flag_requant +); + +void xpulp_nn_avgpool_i4_u4( + int8_t * pIn, + uint8_t * pOut, + int32_t lambda, + uint16_t out_shift, + int32_t out_add, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + uint16_t dim_im_out_x, + uint16_t dim_im_out_y, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_t, + uint16_t padding_b, + uint16_t padding_l, + uint16_t padding_r, + uint16_t stride_x, + uint16_t stride_y, + int flag_requant +); + +void xpulp_nn_avgpool_i4_i4( + int8_t * pIn, + int8_t * pOut, + int32_t lambda, + uint16_t out_shift, + int32_t out_add, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + uint16_t dim_im_out_x, + uint16_t dim_im_out_y, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_t, + uint16_t padding_b, + uint16_t padding_l, + uint16_t padding_r, + uint16_t stride_x, + uint16_t stride_y, + int flag_requant +); + +void xpulp_nn_avgpool_u4_u2( + uint8_t * pIn, + uint8_t * pOut, + int32_t lambda, + uint16_t out_shift, + int32_t out_add, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + uint16_t dim_im_out_x, + uint16_t dim_im_out_y, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_t, + uint16_t padding_b, + uint16_t padding_l, + uint16_t padding_r, + uint16_t stride_x, + uint16_t stride_y, + int flag_requant +); + +void xpulp_nn_avgpool_u4_i2( + uint8_t * pIn, + int8_t * pOut, + int32_t lambda, + uint16_t out_shift, + int32_t out_add, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + uint16_t dim_im_out_x, + uint16_t dim_im_out_y, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_t, + uint16_t padding_b, + uint16_t padding_l, + uint16_t padding_r, + uint16_t stride_x, + uint16_t stride_y, + int flag_requant +); + +void xpulp_nn_avgpool_i4_u2( + int8_t * pIn, + uint8_t * pOut, + int32_t lambda, + uint16_t out_shift, + int32_t out_add, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + uint16_t dim_im_out_x, + uint16_t dim_im_out_y, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_t, + uint16_t padding_b, + uint16_t padding_l, + uint16_t padding_r, + uint16_t stride_x, + uint16_t stride_y, + int flag_requant +); + +void xpulp_nn_avgpool_i4_i2( + int8_t * pIn, + int8_t * pOut, + int32_t lambda, + uint16_t out_shift, + int32_t out_add, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + uint16_t dim_im_out_x, + uint16_t dim_im_out_y, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_t, + uint16_t padding_b, + uint16_t padding_l, + uint16_t padding_r, + uint16_t stride_x, + uint16_t stride_y, + int flag_requant +); + +void xpulp_nn_avgpool_u2_u8( + uint8_t * pIn, + uint8_t * pOut, + int32_t lambda, + uint16_t out_shift, + int32_t out_add, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + uint16_t dim_im_out_x, + uint16_t dim_im_out_y, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_t, + uint16_t padding_b, + uint16_t padding_l, + uint16_t padding_r, + uint16_t stride_x, + uint16_t stride_y, + int flag_requant +); + +void xpulp_nn_avgpool_u2_i8( + uint8_t * pIn, + int8_t * pOut, + int32_t lambda, + uint16_t out_shift, + int32_t out_add, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + uint16_t dim_im_out_x, + uint16_t dim_im_out_y, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_t, + uint16_t padding_b, + uint16_t padding_l, + uint16_t padding_r, + uint16_t stride_x, + uint16_t stride_y, + int flag_requant +); + +void xpulp_nn_avgpool_i2_u8( + int8_t * pIn, + uint8_t * pOut, + int32_t lambda, + uint16_t out_shift, + int32_t out_add, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + uint16_t dim_im_out_x, + uint16_t dim_im_out_y, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_t, + uint16_t padding_b, + uint16_t padding_l, + uint16_t padding_r, + uint16_t stride_x, + uint16_t stride_y, + int flag_requant +); + +void xpulp_nn_avgpool_i2_i8( + int8_t * pIn, + int8_t * pOut, + int32_t lambda, + uint16_t out_shift, + int32_t out_add, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + uint16_t dim_im_out_x, + uint16_t dim_im_out_y, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_t, + uint16_t padding_b, + uint16_t padding_l, + uint16_t padding_r, + uint16_t stride_x, + uint16_t stride_y, + int flag_requant +); + +void xpulp_nn_avgpool_u2_u4( + uint8_t * pIn, + uint8_t * pOut, + int32_t lambda, + uint16_t out_shift, + int32_t out_add, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + uint16_t dim_im_out_x, + uint16_t dim_im_out_y, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_t, + uint16_t padding_b, + uint16_t padding_l, + uint16_t padding_r, + uint16_t stride_x, + uint16_t stride_y, + int flag_requant +); + +void xpulp_nn_avgpool_u2_i4( + uint8_t * pIn, + int8_t * pOut, + int32_t lambda, + uint16_t out_shift, + int32_t out_add, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + uint16_t dim_im_out_x, + uint16_t dim_im_out_y, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_t, + uint16_t padding_b, + uint16_t padding_l, + uint16_t padding_r, + uint16_t stride_x, + uint16_t stride_y, + int flag_requant +); + +void xpulp_nn_avgpool_i2_u4( + int8_t * pIn, + uint8_t * pOut, + int32_t lambda, + uint16_t out_shift, + int32_t out_add, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + uint16_t dim_im_out_x, + uint16_t dim_im_out_y, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_t, + uint16_t padding_b, + uint16_t padding_l, + uint16_t padding_r, + uint16_t stride_x, + uint16_t stride_y, + int flag_requant +); + +void xpulp_nn_avgpool_i2_i4( + int8_t * pIn, + int8_t * pOut, + int32_t lambda, + uint16_t out_shift, + int32_t out_add, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + uint16_t dim_im_out_x, + uint16_t dim_im_out_y, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_t, + uint16_t padding_b, + uint16_t padding_l, + uint16_t padding_r, + uint16_t stride_x, + uint16_t stride_y, + int flag_requant +); + +void xpulp_nn_avgpool_u2_u2( + uint8_t * pIn, + uint8_t * pOut, + int32_t lambda, + uint16_t out_shift, + int32_t out_add, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + uint16_t dim_im_out_x, + uint16_t dim_im_out_y, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_t, + uint16_t padding_b, + uint16_t padding_l, + uint16_t padding_r, + uint16_t stride_x, + uint16_t stride_y, + int flag_requant +); + +void xpulp_nn_avgpool_u2_i2( + uint8_t * pIn, + int8_t * pOut, + int32_t lambda, + uint16_t out_shift, + int32_t out_add, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + uint16_t dim_im_out_x, + uint16_t dim_im_out_y, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_t, + uint16_t padding_b, + uint16_t padding_l, + uint16_t padding_r, + uint16_t stride_x, + uint16_t stride_y, + int flag_requant +); + +void xpulp_nn_avgpool_i2_u2( + int8_t * pIn, + uint8_t * pOut, + int32_t lambda, + uint16_t out_shift, + int32_t out_add, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + uint16_t dim_im_out_x, + uint16_t dim_im_out_y, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_t, + uint16_t padding_b, + uint16_t padding_l, + uint16_t padding_r, + uint16_t stride_x, + uint16_t stride_y, + int flag_requant +); + +void xpulp_nn_avgpool_i2_i2( + int8_t * pIn, + int8_t * pOut, + int32_t lambda, + uint16_t out_shift, + int32_t out_add, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + uint16_t dim_im_out_x, + uint16_t dim_im_out_y, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_t, + uint16_t padding_b, + uint16_t padding_l, + uint16_t padding_r, + uint16_t stride_x, + uint16_t stride_y, + int flag_requant +); + +void xpulp_nn_add_u8_u8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + uint16_t out_mult1, + uint16_t out_mult2, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in); + +void xpulp_nn_add_u8_u8_u8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u8_u8_u4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u8_u8_u2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u8_u8_i8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u8_u8_i4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u8_u8_i2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u8_i8_u8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u8_i8_u4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u8_i8_u2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u8_i8_i8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u8_i8_i4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u8_i8_i2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i8_u8_u8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i8_u8_u4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i8_u8_u2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i8_u8_i8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i8_u8_i4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i8_u8_i2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i8_i8_u8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i8_i8_u4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i8_i8_u2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i8_i8_i8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i8_i8_i4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i8_i8_i2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u8_u4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + uint16_t out_mult1, + uint16_t out_mult2, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in); + +void xpulp_nn_add_u8_u4_u8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u8_u4_u4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u8_u4_u2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u8_u4_i8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u8_u4_i4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u8_u4_i2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u8_i4_u8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u8_i4_u4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u8_i4_u2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u8_i4_i8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u8_i4_i4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u8_i4_i2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i8_u4_u8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i8_u4_u4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i8_u4_u2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i8_u4_i8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i8_u4_i4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i8_u4_i2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i8_i4_u8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i8_i4_u4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i8_i4_u2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i8_i4_i8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i8_i4_i4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i8_i4_i2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u8_u2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + uint16_t out_mult1, + uint16_t out_mult2, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in); + +void xpulp_nn_add_u8_u2_u8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u8_u2_u4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u8_u2_u2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u8_u2_i8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u8_u2_i4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u8_u2_i2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u8_i2_u8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u8_i2_u4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u8_i2_u2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u8_i2_i8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u8_i2_i4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u8_i2_i2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i8_u2_u8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i8_u2_u4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i8_u2_u2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i8_u2_i8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i8_u2_i4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i8_u2_i2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i8_i2_u8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i8_i2_u4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i8_i2_u2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i8_i2_i8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i8_i2_i4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i8_i2_i2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u4_u8_u8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u4_u8_u4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u4_u8_u2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u4_u8_i8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u4_u8_i4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u4_u8_i2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u4_i8_u8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u4_i8_u4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u4_i8_u2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u4_i8_i8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u4_i8_i4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u4_i8_i2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i4_u8_u8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i4_u8_u4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i4_u8_u2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i4_u8_i8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i4_u8_i4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i4_u8_i2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i4_i8_u8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i4_i8_u4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i4_i8_u2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i4_i8_i8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i4_i8_i4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i4_i8_i2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u4_u4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + uint16_t out_mult1, + uint16_t out_mult2, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in); + +void xpulp_nn_add_u4_u4_u8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u4_u4_u4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u4_u4_u2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u4_u4_i8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u4_u4_i4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u4_u4_i2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u4_i4_u8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u4_i4_u4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u4_i4_u2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u4_i4_i8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u4_i4_i4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u4_i4_i2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i4_u4_u8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i4_u4_u4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i4_u4_u2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i4_u4_i8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i4_u4_i4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i4_u4_i2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i4_i4_u8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i4_i4_u4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i4_i4_u2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i4_i4_i8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i4_i4_i4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i4_i4_i2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u4_u2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + uint16_t out_mult1, + uint16_t out_mult2, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in); + +void xpulp_nn_add_u4_u2_u8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u4_u2_u4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u4_u2_u2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u4_u2_i8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u4_u2_i4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u4_u2_i2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u4_i2_u8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u4_i2_u4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u4_i2_u2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u4_i2_i8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u4_i2_i4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u4_i2_i2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i4_u2_u8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i4_u2_u4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i4_u2_u2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i4_u2_i8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i4_u2_i4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i4_u2_i2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i4_i2_u8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i4_i2_u4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i4_i2_u2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i4_i2_i8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i4_i2_i4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i4_i2_i2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u2_u8_u8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u2_u8_u4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u2_u8_u2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u2_u8_i8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u2_u8_i4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u2_u8_i2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u2_i8_u8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u2_i8_u4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u2_i8_u2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u2_i8_i8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u2_i8_i4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u2_i8_i2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i2_u8_u8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i2_u8_u4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i2_u8_u2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i2_u8_i8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i2_u8_i4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i2_u8_i2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i2_i8_u8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i2_i8_u4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i2_i8_u2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i2_i8_i8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i2_i8_i4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i2_i8_i2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u2_u4_u8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u2_u4_u4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u2_u4_u2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u2_u4_i8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u2_u4_i4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u2_u4_i2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u2_i4_u8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u2_i4_u4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u2_i4_u2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u2_i4_i8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u2_i4_i4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u2_i4_i2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i2_u4_u8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i2_u4_u4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i2_u4_u2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i2_u4_i8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i2_u4_i4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i2_u4_i2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i2_i4_u8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i2_i4_u4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i2_i4_u2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i2_i4_i8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i2_i4_i4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i2_i4_i2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u2_u2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + uint16_t out_mult1, + uint16_t out_mult2, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in); + +void xpulp_nn_add_u2_u2_u8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u2_u2_u4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u2_u2_u2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u2_u2_i8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u2_u2_i4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u2_u2_i2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u2_i2_u8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u2_i2_u4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u2_i2_u2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u2_i2_i8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u2_i2_i4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u2_i2_i2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i2_u2_u8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i2_u2_u4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i2_u2_u2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i2_u2_i8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i2_u2_i4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i2_u2_i2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i2_i2_u8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i2_i2_u4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i2_i2_u2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i2_i2_i8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i2_i2_i4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i2_i2_i2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + + + +#endif diff --git a/rt_nn_tests/xptnn_linear/pulp_nn_mix_kernels.h b/rt_nn_tests/xptnn_linear/pulp_nn_mix_kernels.h new file mode 100644 index 0000000..8b2a3c6 --- /dev/null +++ b/rt_nn_tests/xptnn_linear/pulp_nn_mix_kernels.h @@ -0,0 +1,7093 @@ +/* + * pulp_nn_kernels.h + * Nazareno Bruschi + * + * Copyright (C) 2019-2020 University of Bologna + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef __XPULPNN-MIXED_KERNELS__ +#define __XPULPNN-MIXED_KERNELS__ + +void xpulp_nn_mix_conv_u8_u8_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_mix_conv_u8_u8_i8_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_mix_conv_u8_u8_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_mix_conv_u8_u8_i4_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_mix_conv_u8_u8_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_mix_conv_u8_u8_i2_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_mix_conv_u8_u4_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_mix_conv_u8_u4_i8_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_mix_conv_u8_u4_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_mix_conv_u8_u4_i4_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_mix_conv_u8_u4_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_mix_conv_u8_u4_i2_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_mix_conv_u8_u2_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_mix_conv_u8_u2_i8_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_mix_conv_u8_u2_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_mix_conv_u8_u2_i4_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_mix_conv_u8_u2_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_mix_conv_u8_u2_i2_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_mix_conv_u4_u8_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_mix_conv_u4_u8_i8_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_mix_conv_u4_u8_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_mix_conv_u4_u8_i4_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_mix_conv_u4_u8_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_mix_conv_u4_u8_i2_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_mix_conv_u4_u4_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_mix_conv_u4_u4_i8_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_mix_conv_u4_u4_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_mix_conv_u4_u4_i4_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_mix_conv_u4_u4_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_mix_conv_u4_u4_i2_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_mix_conv_u4_u2_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_mix_conv_u4_u2_i8_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_mix_conv_u4_u2_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_mix_conv_u4_u2_i4_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_mix_conv_u4_u2_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_mix_conv_u4_u2_i2_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_mix_conv_u2_u8_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_mix_conv_u2_u8_i8_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_mix_conv_u2_u8_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_mix_conv_u2_u8_i4_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_mix_conv_u2_u8_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_mix_conv_u2_u8_i2_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_mix_conv_u2_u4_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_mix_conv_u2_u4_i8_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_mix_conv_u2_u4_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_mix_conv_u2_u4_i4_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_mix_conv_u2_u4_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_mix_conv_u2_u4_i2_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_mix_conv_u2_u2_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_mix_conv_u2_u2_i8_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_mix_conv_u2_u2_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_mix_conv_u2_u2_i4_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_mix_conv_u2_u2_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_mix_conv_u2_u2_i2_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_mix_matmul_u8_u8_i8( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_mix_matmul_u8_u8_i8_4x4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_mix_matmul_u8_u8_i4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_mix_matmul_u8_u8_i4_4x4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_mix_matmul_u8_u8_i2( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_mix_matmul_u8_u8_i2_4x4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_mix_matmul_u8_u4_i8( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_mix_matmul_u8_u4_i8_4x4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_mix_matmul_u8_u4_i4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_mix_matmul_u8_u4_i4_4x4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_mix_matmul_u8_u4_i2( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_mix_matmul_u8_u4_i2_4x4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_mix_matmul_u8_u2_i8( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_mix_matmul_u8_u2_i8_4x4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_mix_matmul_u8_u2_i4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_mix_matmul_u8_u2_i4_4x4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_mix_matmul_u8_u2_i2( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_mix_matmul_u8_u2_i2_4x4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_mix_matmul_u4_u8_i8( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_mix_matmul_u4_u8_i8_4x4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_mix_matmul_u4_u8_i4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_mix_matmul_u4_u8_i4_4x4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_mix_matmul_u4_u8_i2( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_mix_matmul_u4_u8_i2_4x4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_mix_matmul_u4_u4_i8( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_mix_matmul_u4_u4_i8_4x4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_mix_matmul_u4_u4_i4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_mix_matmul_u4_u4_i4_4x4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_mix_matmul_u4_u4_i2( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_mix_matmul_u4_u4_i2_4x4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_mix_matmul_u4_u2_i8( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_mix_matmul_u4_u2_i8_4x4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_mix_matmul_u4_u2_i4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_mix_matmul_u4_u2_i4_4x4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_mix_matmul_u4_u2_i2( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_mix_matmul_u4_u2_i2_4x4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_mix_matmul_u2_u8_i8( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_mix_matmul_u2_u8_i8_4x4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_mix_matmul_u2_u8_i4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_mix_matmul_u2_u8_i4_4x4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_mix_matmul_u2_u8_i2( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_mix_matmul_u2_u8_i2_4x4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_mix_matmul_u2_u4_i8( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_mix_matmul_u2_u4_i8_4x4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_mix_matmul_u2_u4_i4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_mix_matmul_u2_u4_i4_4x4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_mix_matmul_u2_u4_i2( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_mix_matmul_u2_u4_i2_4x4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_mix_matmul_u2_u2_i8( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_mix_matmul_u2_u2_i8_4x4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_mix_matmul_u2_u2_i4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_mix_matmul_u2_u2_i4_4x4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_mix_matmul_u2_u2_i2( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_mix_matmul_u2_u2_i2_4x4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_avgpool_u8_u8( + uint8_t * pIn, + uint8_t * pOut, + int32_t lambda, + uint16_t out_shift, + int32_t out_add, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + uint16_t dim_im_out_x, + uint16_t dim_im_out_y, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_t, + uint16_t padding_b, + uint16_t padding_l, + uint16_t padding_r, + uint16_t stride_x, + uint16_t stride_y, + int flag_requant +); + +void xpulp_nn_avgpool_u8_i8( + uint8_t * pIn, + int8_t * pOut, + int32_t lambda, + uint16_t out_shift, + int32_t out_add, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + uint16_t dim_im_out_x, + uint16_t dim_im_out_y, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_t, + uint16_t padding_b, + uint16_t padding_l, + uint16_t padding_r, + uint16_t stride_x, + uint16_t stride_y, + int flag_requant +); + +void xpulp_nn_avgpool_i8_u8( + int8_t * pIn, + uint8_t * pOut, + int32_t lambda, + uint16_t out_shift, + int32_t out_add, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + uint16_t dim_im_out_x, + uint16_t dim_im_out_y, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_t, + uint16_t padding_b, + uint16_t padding_l, + uint16_t padding_r, + uint16_t stride_x, + uint16_t stride_y, + int flag_requant +); + +void xpulp_nn_avgpool_i8_i8( + int8_t * pIn, + int8_t * pOut, + int32_t lambda, + uint16_t out_shift, + int32_t out_add, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + uint16_t dim_im_out_x, + uint16_t dim_im_out_y, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_t, + uint16_t padding_b, + uint16_t padding_l, + uint16_t padding_r, + uint16_t stride_x, + uint16_t stride_y, + int flag_requant +); + +void xpulp_nn_avgpool_u8_u4( + uint8_t * pIn, + uint8_t * pOut, + int32_t lambda, + uint16_t out_shift, + int32_t out_add, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + uint16_t dim_im_out_x, + uint16_t dim_im_out_y, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_t, + uint16_t padding_b, + uint16_t padding_l, + uint16_t padding_r, + uint16_t stride_x, + uint16_t stride_y, + int flag_requant +); + +void xpulp_nn_avgpool_u8_i4( + uint8_t * pIn, + int8_t * pOut, + int32_t lambda, + uint16_t out_shift, + int32_t out_add, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + uint16_t dim_im_out_x, + uint16_t dim_im_out_y, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_t, + uint16_t padding_b, + uint16_t padding_l, + uint16_t padding_r, + uint16_t stride_x, + uint16_t stride_y, + int flag_requant +); + +void xpulp_nn_avgpool_i8_u4( + int8_t * pIn, + uint8_t * pOut, + int32_t lambda, + uint16_t out_shift, + int32_t out_add, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + uint16_t dim_im_out_x, + uint16_t dim_im_out_y, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_t, + uint16_t padding_b, + uint16_t padding_l, + uint16_t padding_r, + uint16_t stride_x, + uint16_t stride_y, + int flag_requant +); + +void xpulp_nn_avgpool_i8_i4( + int8_t * pIn, + int8_t * pOut, + int32_t lambda, + uint16_t out_shift, + int32_t out_add, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + uint16_t dim_im_out_x, + uint16_t dim_im_out_y, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_t, + uint16_t padding_b, + uint16_t padding_l, + uint16_t padding_r, + uint16_t stride_x, + uint16_t stride_y, + int flag_requant +); + +void xpulp_nn_avgpool_u8_u2( + uint8_t * pIn, + uint8_t * pOut, + int32_t lambda, + uint16_t out_shift, + int32_t out_add, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + uint16_t dim_im_out_x, + uint16_t dim_im_out_y, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_t, + uint16_t padding_b, + uint16_t padding_l, + uint16_t padding_r, + uint16_t stride_x, + uint16_t stride_y, + int flag_requant +); + +void xpulp_nn_avgpool_u8_i2( + uint8_t * pIn, + int8_t * pOut, + int32_t lambda, + uint16_t out_shift, + int32_t out_add, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + uint16_t dim_im_out_x, + uint16_t dim_im_out_y, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_t, + uint16_t padding_b, + uint16_t padding_l, + uint16_t padding_r, + uint16_t stride_x, + uint16_t stride_y, + int flag_requant +); + +void xpulp_nn_avgpool_i8_u2( + int8_t * pIn, + uint8_t * pOut, + int32_t lambda, + uint16_t out_shift, + int32_t out_add, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + uint16_t dim_im_out_x, + uint16_t dim_im_out_y, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_t, + uint16_t padding_b, + uint16_t padding_l, + uint16_t padding_r, + uint16_t stride_x, + uint16_t stride_y, + int flag_requant +); + +void xpulp_nn_avgpool_i8_i2( + int8_t * pIn, + int8_t * pOut, + int32_t lambda, + uint16_t out_shift, + int32_t out_add, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + uint16_t dim_im_out_x, + uint16_t dim_im_out_y, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_t, + uint16_t padding_b, + uint16_t padding_l, + uint16_t padding_r, + uint16_t stride_x, + uint16_t stride_y, + int flag_requant +); + +void xpulp_nn_avgpool_u4_u8( + uint8_t * pIn, + uint8_t * pOut, + int32_t lambda, + uint16_t out_shift, + int32_t out_add, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + uint16_t dim_im_out_x, + uint16_t dim_im_out_y, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_t, + uint16_t padding_b, + uint16_t padding_l, + uint16_t padding_r, + uint16_t stride_x, + uint16_t stride_y, + int flag_requant +); + +void xpulp_nn_avgpool_u4_i8( + uint8_t * pIn, + int8_t * pOut, + int32_t lambda, + uint16_t out_shift, + int32_t out_add, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + uint16_t dim_im_out_x, + uint16_t dim_im_out_y, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_t, + uint16_t padding_b, + uint16_t padding_l, + uint16_t padding_r, + uint16_t stride_x, + uint16_t stride_y, + int flag_requant +); + +void xpulp_nn_avgpool_i4_u8( + int8_t * pIn, + uint8_t * pOut, + int32_t lambda, + uint16_t out_shift, + int32_t out_add, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + uint16_t dim_im_out_x, + uint16_t dim_im_out_y, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_t, + uint16_t padding_b, + uint16_t padding_l, + uint16_t padding_r, + uint16_t stride_x, + uint16_t stride_y, + int flag_requant +); + +void xpulp_nn_avgpool_i4_i8( + int8_t * pIn, + int8_t * pOut, + int32_t lambda, + uint16_t out_shift, + int32_t out_add, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + uint16_t dim_im_out_x, + uint16_t dim_im_out_y, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_t, + uint16_t padding_b, + uint16_t padding_l, + uint16_t padding_r, + uint16_t stride_x, + uint16_t stride_y, + int flag_requant +); + +void xpulp_nn_avgpool_u4_u4( + uint8_t * pIn, + uint8_t * pOut, + int32_t lambda, + uint16_t out_shift, + int32_t out_add, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + uint16_t dim_im_out_x, + uint16_t dim_im_out_y, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_t, + uint16_t padding_b, + uint16_t padding_l, + uint16_t padding_r, + uint16_t stride_x, + uint16_t stride_y, + int flag_requant +); + +void xpulp_nn_avgpool_u4_i4( + uint8_t * pIn, + int8_t * pOut, + int32_t lambda, + uint16_t out_shift, + int32_t out_add, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + uint16_t dim_im_out_x, + uint16_t dim_im_out_y, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_t, + uint16_t padding_b, + uint16_t padding_l, + uint16_t padding_r, + uint16_t stride_x, + uint16_t stride_y, + int flag_requant +); + +void xpulp_nn_avgpool_i4_u4( + int8_t * pIn, + uint8_t * pOut, + int32_t lambda, + uint16_t out_shift, + int32_t out_add, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + uint16_t dim_im_out_x, + uint16_t dim_im_out_y, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_t, + uint16_t padding_b, + uint16_t padding_l, + uint16_t padding_r, + uint16_t stride_x, + uint16_t stride_y, + int flag_requant +); + +void xpulp_nn_avgpool_i4_i4( + int8_t * pIn, + int8_t * pOut, + int32_t lambda, + uint16_t out_shift, + int32_t out_add, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + uint16_t dim_im_out_x, + uint16_t dim_im_out_y, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_t, + uint16_t padding_b, + uint16_t padding_l, + uint16_t padding_r, + uint16_t stride_x, + uint16_t stride_y, + int flag_requant +); + +void xpulp_nn_avgpool_u4_u2( + uint8_t * pIn, + uint8_t * pOut, + int32_t lambda, + uint16_t out_shift, + int32_t out_add, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + uint16_t dim_im_out_x, + uint16_t dim_im_out_y, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_t, + uint16_t padding_b, + uint16_t padding_l, + uint16_t padding_r, + uint16_t stride_x, + uint16_t stride_y, + int flag_requant +); + +void xpulp_nn_avgpool_u4_i2( + uint8_t * pIn, + int8_t * pOut, + int32_t lambda, + uint16_t out_shift, + int32_t out_add, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + uint16_t dim_im_out_x, + uint16_t dim_im_out_y, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_t, + uint16_t padding_b, + uint16_t padding_l, + uint16_t padding_r, + uint16_t stride_x, + uint16_t stride_y, + int flag_requant +); + +void xpulp_nn_avgpool_i4_u2( + int8_t * pIn, + uint8_t * pOut, + int32_t lambda, + uint16_t out_shift, + int32_t out_add, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + uint16_t dim_im_out_x, + uint16_t dim_im_out_y, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_t, + uint16_t padding_b, + uint16_t padding_l, + uint16_t padding_r, + uint16_t stride_x, + uint16_t stride_y, + int flag_requant +); + +void xpulp_nn_avgpool_i4_i2( + int8_t * pIn, + int8_t * pOut, + int32_t lambda, + uint16_t out_shift, + int32_t out_add, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + uint16_t dim_im_out_x, + uint16_t dim_im_out_y, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_t, + uint16_t padding_b, + uint16_t padding_l, + uint16_t padding_r, + uint16_t stride_x, + uint16_t stride_y, + int flag_requant +); + +void xpulp_nn_avgpool_u2_u8( + uint8_t * pIn, + uint8_t * pOut, + int32_t lambda, + uint16_t out_shift, + int32_t out_add, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + uint16_t dim_im_out_x, + uint16_t dim_im_out_y, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_t, + uint16_t padding_b, + uint16_t padding_l, + uint16_t padding_r, + uint16_t stride_x, + uint16_t stride_y, + int flag_requant +); + +void xpulp_nn_avgpool_u2_i8( + uint8_t * pIn, + int8_t * pOut, + int32_t lambda, + uint16_t out_shift, + int32_t out_add, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + uint16_t dim_im_out_x, + uint16_t dim_im_out_y, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_t, + uint16_t padding_b, + uint16_t padding_l, + uint16_t padding_r, + uint16_t stride_x, + uint16_t stride_y, + int flag_requant +); + +void xpulp_nn_avgpool_i2_u8( + int8_t * pIn, + uint8_t * pOut, + int32_t lambda, + uint16_t out_shift, + int32_t out_add, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + uint16_t dim_im_out_x, + uint16_t dim_im_out_y, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_t, + uint16_t padding_b, + uint16_t padding_l, + uint16_t padding_r, + uint16_t stride_x, + uint16_t stride_y, + int flag_requant +); + +void xpulp_nn_avgpool_i2_i8( + int8_t * pIn, + int8_t * pOut, + int32_t lambda, + uint16_t out_shift, + int32_t out_add, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + uint16_t dim_im_out_x, + uint16_t dim_im_out_y, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_t, + uint16_t padding_b, + uint16_t padding_l, + uint16_t padding_r, + uint16_t stride_x, + uint16_t stride_y, + int flag_requant +); + +void xpulp_nn_avgpool_u2_u4( + uint8_t * pIn, + uint8_t * pOut, + int32_t lambda, + uint16_t out_shift, + int32_t out_add, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + uint16_t dim_im_out_x, + uint16_t dim_im_out_y, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_t, + uint16_t padding_b, + uint16_t padding_l, + uint16_t padding_r, + uint16_t stride_x, + uint16_t stride_y, + int flag_requant +); + +void xpulp_nn_avgpool_u2_i4( + uint8_t * pIn, + int8_t * pOut, + int32_t lambda, + uint16_t out_shift, + int32_t out_add, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + uint16_t dim_im_out_x, + uint16_t dim_im_out_y, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_t, + uint16_t padding_b, + uint16_t padding_l, + uint16_t padding_r, + uint16_t stride_x, + uint16_t stride_y, + int flag_requant +); + +void xpulp_nn_avgpool_i2_u4( + int8_t * pIn, + uint8_t * pOut, + int32_t lambda, + uint16_t out_shift, + int32_t out_add, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + uint16_t dim_im_out_x, + uint16_t dim_im_out_y, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_t, + uint16_t padding_b, + uint16_t padding_l, + uint16_t padding_r, + uint16_t stride_x, + uint16_t stride_y, + int flag_requant +); + +void xpulp_nn_avgpool_i2_i4( + int8_t * pIn, + int8_t * pOut, + int32_t lambda, + uint16_t out_shift, + int32_t out_add, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + uint16_t dim_im_out_x, + uint16_t dim_im_out_y, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_t, + uint16_t padding_b, + uint16_t padding_l, + uint16_t padding_r, + uint16_t stride_x, + uint16_t stride_y, + int flag_requant +); + +void xpulp_nn_avgpool_u2_u2( + uint8_t * pIn, + uint8_t * pOut, + int32_t lambda, + uint16_t out_shift, + int32_t out_add, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + uint16_t dim_im_out_x, + uint16_t dim_im_out_y, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_t, + uint16_t padding_b, + uint16_t padding_l, + uint16_t padding_r, + uint16_t stride_x, + uint16_t stride_y, + int flag_requant +); + +void xpulp_nn_avgpool_u2_i2( + uint8_t * pIn, + int8_t * pOut, + int32_t lambda, + uint16_t out_shift, + int32_t out_add, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + uint16_t dim_im_out_x, + uint16_t dim_im_out_y, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_t, + uint16_t padding_b, + uint16_t padding_l, + uint16_t padding_r, + uint16_t stride_x, + uint16_t stride_y, + int flag_requant +); + +void xpulp_nn_avgpool_i2_u2( + int8_t * pIn, + uint8_t * pOut, + int32_t lambda, + uint16_t out_shift, + int32_t out_add, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + uint16_t dim_im_out_x, + uint16_t dim_im_out_y, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_t, + uint16_t padding_b, + uint16_t padding_l, + uint16_t padding_r, + uint16_t stride_x, + uint16_t stride_y, + int flag_requant +); + +void xpulp_nn_avgpool_i2_i2( + int8_t * pIn, + int8_t * pOut, + int32_t lambda, + uint16_t out_shift, + int32_t out_add, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + uint16_t dim_im_out_x, + uint16_t dim_im_out_y, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_t, + uint16_t padding_b, + uint16_t padding_l, + uint16_t padding_r, + uint16_t stride_x, + uint16_t stride_y, + int flag_requant +); + +void xpulp_nn_add_u8_u8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + uint16_t out_mult1, + uint16_t out_mult2, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in); + +void xpulp_nn_add_u8_u8_u8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u8_u8_u4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u8_u8_u2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u8_u8_i8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u8_u8_i4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u8_u8_i2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u8_i8_u8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u8_i8_u4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u8_i8_u2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u8_i8_i8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u8_i8_i4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u8_i8_i2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i8_u8_u8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i8_u8_u4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i8_u8_u2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i8_u8_i8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i8_u8_i4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i8_u8_i2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i8_i8_u8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i8_i8_u4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i8_i8_u2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i8_i8_i8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i8_i8_i4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i8_i8_i2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u8_u4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + uint16_t out_mult1, + uint16_t out_mult2, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in); + +void xpulp_nn_add_u8_u4_u8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u8_u4_u4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u8_u4_u2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u8_u4_i8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u8_u4_i4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u8_u4_i2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u8_i4_u8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u8_i4_u4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u8_i4_u2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u8_i4_i8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u8_i4_i4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u8_i4_i2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i8_u4_u8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i8_u4_u4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i8_u4_u2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i8_u4_i8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i8_u4_i4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i8_u4_i2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i8_i4_u8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i8_i4_u4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i8_i4_u2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i8_i4_i8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i8_i4_i4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i8_i4_i2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u8_u2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + uint16_t out_mult1, + uint16_t out_mult2, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in); + +void xpulp_nn_add_u8_u2_u8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u8_u2_u4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u8_u2_u2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u8_u2_i8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u8_u2_i4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u8_u2_i2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u8_i2_u8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u8_i2_u4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u8_i2_u2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u8_i2_i8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u8_i2_i4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u8_i2_i2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i8_u2_u8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i8_u2_u4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i8_u2_u2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i8_u2_i8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i8_u2_i4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i8_u2_i2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i8_i2_u8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i8_i2_u4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i8_i2_u2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i8_i2_i8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i8_i2_i4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i8_i2_i2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u4_u8_u8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u4_u8_u4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u4_u8_u2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u4_u8_i8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u4_u8_i4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u4_u8_i2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u4_i8_u8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u4_i8_u4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u4_i8_u2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u4_i8_i8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u4_i8_i4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u4_i8_i2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i4_u8_u8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i4_u8_u4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i4_u8_u2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i4_u8_i8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i4_u8_i4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i4_u8_i2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i4_i8_u8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i4_i8_u4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i4_i8_u2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i4_i8_i8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i4_i8_i4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i4_i8_i2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u4_u4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + uint16_t out_mult1, + uint16_t out_mult2, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in); + +void xpulp_nn_add_u4_u4_u8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u4_u4_u4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u4_u4_u2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u4_u4_i8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u4_u4_i4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u4_u4_i2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u4_i4_u8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u4_i4_u4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u4_i4_u2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u4_i4_i8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u4_i4_i4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u4_i4_i2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i4_u4_u8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i4_u4_u4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i4_u4_u2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i4_u4_i8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i4_u4_i4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i4_u4_i2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i4_i4_u8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i4_i4_u4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i4_i4_u2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i4_i4_i8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i4_i4_i4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i4_i4_i2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u4_u2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + uint16_t out_mult1, + uint16_t out_mult2, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in); + +void xpulp_nn_add_u4_u2_u8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u4_u2_u4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u4_u2_u2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u4_u2_i8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u4_u2_i4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u4_u2_i2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u4_i2_u8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u4_i2_u4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u4_i2_u2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u4_i2_i8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u4_i2_i4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u4_i2_i2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i4_u2_u8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i4_u2_u4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i4_u2_u2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i4_u2_i8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i4_u2_i4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i4_u2_i2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i4_i2_u8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i4_i2_u4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i4_i2_u2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i4_i2_i8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i4_i2_i4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i4_i2_i2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u2_u8_u8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u2_u8_u4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u2_u8_u2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u2_u8_i8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u2_u8_i4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u2_u8_i2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u2_i8_u8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u2_i8_u4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u2_i8_u2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u2_i8_i8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u2_i8_i4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u2_i8_i2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i2_u8_u8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i2_u8_u4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i2_u8_u2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i2_u8_i8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i2_u8_i4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i2_u8_i2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i2_i8_u8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i2_i8_u4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i2_i8_u2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i2_i8_i8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i2_i8_i4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i2_i8_i2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u2_u4_u8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u2_u4_u4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u2_u4_u2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u2_u4_i8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u2_u4_i4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u2_u4_i2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u2_i4_u8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u2_i4_u4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u2_i4_u2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u2_i4_i8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u2_i4_i4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u2_i4_i2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i2_u4_u8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i2_u4_u4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i2_u4_u2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i2_u4_i8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i2_u4_i4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i2_u4_i2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i2_i4_u8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i2_i4_u4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i2_i4_u2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i2_i4_i8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i2_i4_i4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i2_i4_i2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u2_u2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + uint16_t out_mult1, + uint16_t out_mult2, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in); + +void xpulp_nn_add_u2_u2_u8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u2_u2_u4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u2_u2_u2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u2_u2_i8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u2_u2_i4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u2_u2_i2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u2_i2_u8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u2_i2_u4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u2_i2_u2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u2_i2_i8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u2_i2_i4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u2_i2_i2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i2_u2_u8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i2_u2_u4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i2_u2_u2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i2_u2_i8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i2_u2_i4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i2_u2_i2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i2_i2_u8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i2_i2_u4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i2_i2_u2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i2_i2_i8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i2_i2_i4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i2_i2_i2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + + + +#endif \ No newline at end of file diff --git a/rt_nn_tests/xptnn_linear/pulp_nn_utils.h b/rt_nn_tests/xptnn_linear/pulp_nn_utils.h new file mode 100644 index 0000000..cb1f610 --- /dev/null +++ b/rt_nn_tests/xptnn_linear/pulp_nn_utils.h @@ -0,0 +1,2029 @@ +/* + * pulp_nn_utils.h + * Nazareno Bruschi + * Alessandro Nadalini + * Georg Rutishauser + * + * Copyright (C) 2019-2020 ETH Zurich & University of Bologna + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef __PULPNN_UTILS__ +#define __PULPNN_UTILS__ + +#include + +typedef signed short v2s __attribute__((vector_size (4))); + + + +#define min(a,b) ((a)<(b)?(a):(b)) +#define log2(x) __builtin_pulp_fl1(x) +#define PACK_INT2_SIZE(x) ((x) >> 2) + +#define MemoryFence() asm volatile("":::"memory") + +#define CHANS_DECOMPR(x) (5*x >> 2) // equivalent to division by 0.8 + +/* Functions for Compressed MAC */ +#define CompressedMAC(sum, ptr, config) asm volatile( \ + "pv.smlsdotsp.t %[shum], %[phtr], %[chonfig];" \ + : [shum] "+r" (sum), [phtr] "+r" (ptr): [chonfig] "I" (config)) + +#define CompressedMACUnsigned(sum, ptr, config) asm volatile( \ + "pv.smlsdotsup.t %[shum], %[phtr], %[chonfig];" \ + : [shum] "+r" (sum), [phtr] "+r" (ptr): [chonfig] "I" (config)) + +#define InitNNRF(ptr, config) asm volatile( \ + "pv.smlsdotsp.t x0, %[phtr], %[chonfig];" \ + : [phtr] "+r" (ptr) : [chonfig] "I" (config)) + +#define ThresholdCompress(res, val, thrs) asm volatile( \ + "pv.thrc %[rhes], %[vhal], %[thhrs];" : [rhes] "+r" (res) : [vhal] "r" (val), [thhrs] "r" (thrs)) + +#define GetConfig(a_update, b_update, a_reg, b_reg) a_update << 4 | b_update << 3 | a_reg << 1 | b_reg + +/* Functions for threshold&compress */ +#define check_store(res, pOut) \ + if ((res & 0xe0000000) == 0x00000000) { \ + *pOut = res & 0xff; \ + pOut++; \ + incr_val=ch_out_r; } + +#define check_store_4x1(res, pOut) \ + if ((res & 0xe0000000) == 0x00000000) { \ + *pOut = res & 0xff; \ + pOut++; } + +#define reset_currThr() \ + if ((uint32_t *) currThr == (uint32_t *) (pThr + ch_out)) { \ + currThr = (v2s *) pThr; \ + } + +#define MacLoads20(a_update, b_update, a_reg, b_reg, ptr, sum) __builtin_pulp_mlsdotsp20_v3(a_update, b_update, a_reg, b_reg, ptr, sum) + +#define MacLoad20(a_update, b_update, a_reg, b_reg, ptr, sum) __builtin_pulp_mlsdotsup20_v3(a_update, b_update, a_reg, b_reg, ptr, sum) + +/* Functions for compressed min/max */ +#define CompressedMax(res, in1, in2) asm volatile( \ + "pv.max.t %[res_], %[in1_], %[in2_];" : [res_] "=r" (res) : [in1_] "r" (in1), [in2_] "r" (in2)) + +#define CompressedMin(res, in1, in2) asm volatile( \ + "pv.min.t %[res_], %[in1_], %[in2_];" : [res_] "=r" (res) : [in1_] "r" (in1), [in2_] "r" (in2)) + +#define Max16(res, in1, in2) asm volatile( \ + "pv.max.c %[res_], %[in1_], %[in2_];" : [res_] "=r" (res) : [in1_] "r" (in1), [in2_] "r" (in2)) + +#define Min16(res, in1, in2) asm volatile( \ + "pv.min.c %[res_], %[in1_], %[in2_];" : [res_] "=r" (res) : [in1_] "r" (in1), [in2_] "r" (in2)) + +#define thr_cmp(state, val, threshs) __builtin_pulp_thresh_compr(state, val, threshs) + +typedef unsigned char v4u __attribute__((vector_size (4))); +typedef signed char v4s __attribute__((vector_size (4))); + +#define bitext(x,size,off) __builtin_pulp_bextract(x,size,off) +#define bitextu(x,size,off) __builtin_pulp_bextractu(x,size,off) +#ifdef __clang__ +#define bitins(dst,not_mask_imm,src,mask_imm,off) __builtin_binsert(dst,not_mask_imm,src,mask_imm,off) +#else +#define bitins(dst,not_mask_imm,src,mask_imm,off) __builtin_pulp_binsert(dst,not_mask_imm,src,mask_imm,off) +#endif +#define pack(x,y,z,t) __builtin_pulp_pack4(x,y,z,t) +#define max4(a,b) __builtin_pulp_maxu4(a,b) +#define maxs4(a, b) __builtin_pulp_max4(a, b) +#define max8(a, b) __builtin_pulp_maxu8(a, b) +#define maxs8(a, b) __builtin_pulp_max8(a, b) +#define max16(a, b) __builtin_pulp_maxu16(a, b) +#define maxs16(a, b) __builtin_pulp_max16(a, b) +#define max32(a,b) __builtin_pulp_maxusi(a,b) +#define maxs32(a,b) __builtin_pulp_maxsi(a,b) +#define min32(a,b) __builtin_pulp_minusi(a,b) +#define mins32(a,b) __builtin_pulp_minsi(a,b) +#define min4(a, b) __builtin_pulp_minu4(a, b) +#define mins4(a, b) __builtin_pulp_min4(a, b) +#define min8(a, b) __builtin_pulp_minu8(a, b) +#define mins8(a, b) __builtin_pulp_min8(a, b) +#define min16(a, b) __builtin_pulp_minu16(a, b) +#define mins16(a, b) __builtin_pulp_min16(a, b) +#define avg4(a,b) __builtin_pulp_avgu4(a,b) +#define avg8(a,b) __builtin_pulp_avgu8(a,b) +#define avg16(a,b) __builtin_pulp_avgu16(a,b) +#define log2(x) __builtin_pulp_fl1(x) +#define min(a,b) ((a)<(b)?(a):(b)) +#define SumDotp4(a, b, c) __builtin_pulp_sdotusp4(a, b, c) +#define SumDotp8(a, b, c) __builtin_pulp_sdotusp8(a, b, c) +#define SumDotp16(a, b, c) __builtin_pulp_sdotusp16(a, b, c) +#define SumDotps4(a, b, c) __builtin_pulp_sdotsp4(a, b, c) +#define SumDotps8(a, b, c) __builtin_pulp_sdotsp8(a, b, c) +#define SumDotps16(a, b, c) __builtin_pulp_sdotsp16(a, b, c) +#define clip4(x) __builtin_pulp_clipu_r(x, 15) +#define clip2(x) __builtin_pulp_clipu_r(x, 3) +#define clip8(x) __builtin_pulp_clipu_r(x, 255) + +#define clips4(x) __builtin_pulp_clip_r(x, 7) +#define clips2(x) __builtin_pulp_clip_r(x, 1) +#define clips8(x) __builtin_pulp_clip_r(x, 127) +#define MacLoadInit(a_update, b_update, a_reg, b_reg, ptr) __builtin_pulp_mlinitspr_v3(a_update, b_update, a_reg, b_reg, ptr) +#define MacLoadUpdate(ptr) __builtin_pulp_mlupdatespr_v3(ptr) +#define MacLoadAssign(ptr) __builtin_pulp_mlassignspr_v3(ptr) +#define MacLoad4(a_update, b_update, a_reg, b_reg, ptr, sum) __builtin_pulp_mlsdotsup4_v3(a_update, b_update, a_reg, b_reg, ptr, sum) +#define MacLoad8(a_update, b_update, a_reg, b_reg, ptr, sum) __builtin_pulp_mlsdotsup8_v3(a_update, b_update, a_reg, b_reg, ptr, sum) +#define MacLoad16(a_update, b_update, a_reg, b_reg, ptr, sum) __builtin_pulp_mlsdotsup16_v3(a_update, b_update, a_reg, b_reg, ptr, sum) +#define MacLoads4(a_update, b_update, a_reg, b_reg, ptr, sum) __builtin_pulp_mlsdotsp4_v3(a_update, b_update, a_reg, b_reg, ptr, sum) +#define MacLoads8(a_update, b_update, a_reg, b_reg, ptr, sum) __builtin_pulp_mlsdotsp8_v3(a_update, b_update, a_reg, b_reg, ptr, sum) +#define MacLoads16(a_update, b_update, a_reg, b_reg, ptr, sum) __builtin_pulp_mlsdotsp16_v3(a_update, b_update, a_reg, b_reg, ptr, sum) + +#define PACK_INT8_SIZE(x) (x) +#define PACK_INT4_SIZE(x) ((x) >> 1) +#define PACK_INT2_SIZE(x) ((x) >> 2) + +#define MemoryFence() asm volatile("":::"memory") + +#define LEGACY_MODE(x) asm volatile ("csrwi 0x010," x) +#define IVEC_FMT(x) asm volatile ("csrwi 0x00D," x) +#define MIXED_SKIP(x) asm volatile ("csrwi 0x00F," x) +#define A_ADDRESS(x) asm volatile ("csrw 0x100, %0" :: "r" (x)) +#define W_ADDRESS(x) asm volatile ("csrw 0x101, %0" :: "r" (x)) +#define A_STRIDE(x) asm volatile ("csrw 0x102, %0":: "r" (x)) +#define W_STRIDE(x) asm volatile ("csrw 0x103, %0":: "r" (x)) +#define A_ROLLBACK(x) asm volatile ("csrw 0x104, %0":: "r" (x)) +#define W_ROLLBACK(x) asm volatile ("csrw 0x105, %0":: "r" (x)) +#define A_SKIP(x) asm volatile ("csrwi 0x106," x) +#define W_SKIP(x) asm volatile ("csrwi 0x107," x) + +static uint8_t __attribute__((noinline)) pulp_nn_quant_u2 ( + int32_t phi, + int16_t m, + int8_t d + ) { + int32_t x = (m * phi) >> d; + uint8_t res = clip2(x); + return res; +} +static uint8_t __attribute__((noinline)) pulp_nn_bn_quant_u2 ( + int32_t phi, + int32_t k, + int32_t lambda, + int8_t d + ) { + int32_t integer_image_phi = (k * phi) + lambda; + int32_t x = (integer_image_phi) >> d; + uint8_t res = clip2(x); + return res; +} +static uint8_t __attribute__((noinline)) pulp_nn_add_quant_u2 ( + uint8_t pix1, + uint8_t pix2, + int16_t m1, + int16_t m2, + int8_t d + ) { + uint32_t integer_image = pix1*m1 + pix2*m2; + uint32_t x = (integer_image) >> d; + uint8_t res = clip2(x); + return res; +} + +static int8_t __attribute__((noinline)) pulp_nn_quant_i2 ( + int32_t phi, + int16_t m, + int8_t d + ) { + int32_t x = (m * phi) >> d; + int8_t res = clips2(x); + return res; +} +static int8_t __attribute__((noinline)) pulp_nn_bn_quant_i2 ( + int32_t phi, + int32_t k, + int32_t lambda, + int8_t d + ) { + int32_t integer_image_phi = (k * phi) + lambda; + int32_t x = (integer_image_phi) >> d; + int8_t res = clips2(x); + return res; +} +static int8_t __attribute__((noinline)) pulp_nn_add_quant_i2 ( + int8_t pix1, + int8_t pix2, + int16_t m1, + int16_t m2, + int8_t d + ) { + int32_t integer_image = pix1*m1 + pix2*m2; + int32_t x = (integer_image) >> d; + int8_t res = clips2(x); + return res; +} + +static uint8_t __attribute__((noinline)) pulp_nn_quant_u4 ( + int32_t phi, + int16_t m, + int8_t d + ) { + int32_t x = (m * phi) >> d; + uint8_t res = clip4(x); + return res; +} +static uint8_t __attribute__((noinline)) pulp_nn_bn_quant_u4 ( + int32_t phi, + int32_t k, + int32_t lambda, + int8_t d + ) { + int32_t integer_image_phi = (k * phi) + lambda; + int32_t x = (integer_image_phi) >> d; + uint8_t res = clip4(x); + return res; +} +static uint8_t __attribute__((noinline)) pulp_nn_add_quant_u4 ( + uint8_t pix1, + uint8_t pix2, + int16_t m1, + int16_t m2, + int8_t d + ) { + uint32_t integer_image = pix1*m1 + pix2*m2; + uint32_t x = (integer_image) >> d; + uint8_t res = clip4(x); + return res; +} + +static int8_t __attribute__((noinline)) pulp_nn_quant_i4 ( + int32_t phi, + int16_t m, + int8_t d + ) { + int32_t x = (m * phi) >> d; + int8_t res = clips4(x); + return res; +} +static int8_t __attribute__((noinline)) pulp_nn_bn_quant_i4 ( + int32_t phi, + int32_t k, + int32_t lambda, + int8_t d + ) { + int32_t integer_image_phi = (k * phi) + lambda; + int32_t x = (integer_image_phi) >> d; + int8_t res = clips4(x); + return res; +} +static int8_t __attribute__((noinline)) pulp_nn_add_quant_i4 ( + int8_t pix1, + int8_t pix2, + int16_t m1, + int16_t m2, + int8_t d + ) { + int32_t integer_image = pix1*m1 + pix2*m2; + int32_t x = (integer_image) >> d; + int8_t res = clips4(x); + return res; +} + +static uint8_t __attribute__((noinline)) pulp_nn_quant_u8 ( + int32_t phi, + int16_t m, + int8_t d + ) { + int32_t x = (m * phi) >> d; + uint8_t res = clip8(x); + return res; +} +static uint8_t __attribute__((noinline)) pulp_nn_bn_quant_u8 ( + int32_t phi, + int32_t k, + int32_t lambda, + int8_t d + ) { + int32_t integer_image_phi = (k * phi) + lambda; + int32_t x = (integer_image_phi) >> d; + uint8_t res = clip8(x); + return res; +} +static uint8_t __attribute__((noinline)) pulp_nn_add_quant_u8 ( + uint8_t pix1, + uint8_t pix2, + int16_t m1, + int16_t m2, + int8_t d + ) { + uint32_t integer_image = pix1*m1 + pix2*m2; + uint32_t x = (integer_image) >> d; + uint8_t res = clip8(x); + return res; +} + +static int8_t __attribute__((noinline)) pulp_nn_quant_i8 ( + int32_t phi, + int16_t m, + int8_t d + ) { + int32_t x = (m * phi) >> d; + int8_t res = clips8(x); + return res; +} +static int8_t __attribute__((noinline)) pulp_nn_bn_quant_i8 ( + int32_t phi, + int32_t k, + int32_t lambda, + int8_t d + ) { + int32_t integer_image_phi = (k * phi) + lambda; + int32_t x = (integer_image_phi) >> d; + int8_t res = clips8(x); + return res; +} +static int8_t __attribute__((noinline)) pulp_nn_add_quant_i8 ( + int8_t pix1, + int8_t pix2, + int16_t m1, + int16_t m2, + int8_t d + ) { + int32_t integer_image = pix1*m1 + pix2*m2; + int32_t x = (integer_image) >> d; + int8_t res = clips8(x); + return res; +} + + +static uint8_t __attribute__((noinline)) pulp_nn_u4_quant(int input, int16_t * pThr) +{ + if(input <= pThr[7] ) + { + if( input <= pThr[3]) + { + if( input <= pThr[1]) + { + if( input <= pThr[0]) + return 0; + else + return 1; + } + else + { + if( input <= pThr[2]) + return 2; + else + return 3; + } + } + else + { + if( input <= pThr[5]) + { + if( input <= pThr[4]) + return 4; + else + return 5; + } + else + { + if( input <= pThr[6]) + return 6; + else + return 7; + } + } + } + else + { + if( input <= pThr[11]) + { + if( input <= pThr[9]) + { + if( input <= pThr[8]) + return 8; + else + return 9; + } + else + { + if( input <= pThr[10]) + return 10; + else + return 11; + } + } + else + { + if( input <= pThr[13]) + { + if( input <= pThr[12]) + return 12; + else + return 13; + } + else + { + if( input <= pThr[14]) + return 14; + else + return 15; + } + } + } +} + +static uint8_t __attribute__((noinline)) pulp_nn_u2_quant(int input, int16_t * pThr) +{ + if( input <= pThr[1]) + { + if( input <= pThr[0]) + { + return 0; + } + else + { + return 1; + } + } + else + { + if( input <= pThr[2]) + { + return 2; + } + else + { + return 3; + } + } +} + +/* + * Common + */ + + +static v4s __attribute__((noinline)) pulp_nn_i4_to_i8_r( int8_t *pSrc) +{ + v4s Src = *((v4s*) pSrc); + int8_t bext1, bext2, bext3, bext4; + + bext1 = (int8_t) bitext((int) Src, 4, 0); + bext2 = (int8_t) bitext((int) Src, 4, 4); + bext3 = (int8_t) bitext((int) Src, 4, 8); + bext4 = (int8_t) bitext((int) Src, 4, 12); + v4s res = pack((int8_t) bext1, (int8_t) bext2, (int8_t) bext3, (int8_t) bext4); + + return res; +} + +static v4u __attribute__((noinline)) pulp_nn_u4_to_u8_r(uint8_t *pSrc) +{ + v4u Src = *((v4u*) pSrc); + uint8_t bext1, bext2, bext3, bext4; + + bext1 = (uint8_t) bitextu((unsigned int) Src, 4, 0); + bext2 = (uint8_t) bitextu((unsigned int) Src, 4, 4); + bext3 = (uint8_t) bitextu((unsigned int) Src, 4, 8); + bext4 = (uint8_t) bitextu((unsigned int) Src, 4, 12); + v4u res = pack((uint8_t) bext1, (uint8_t) bext2, (uint8_t) bext3, (uint8_t) bext4); + + return res; +} + +static v4s __attribute__((noinline)) pulp_nn_i2_to_i8_r( int8_t *pSrc) +{ + v4s Src = *((v4s*) pSrc); + int8_t bext1, bext2, bext3, bext4; + + bext1 = (int8_t) bitext((int) Src, 2, 0); + bext2 = (int8_t) bitext((int) Src, 2, 2); + bext3 = (int8_t) bitext((int) Src, 2, 4); + bext4 = (int8_t) bitext((int) Src, 2, 6); + v4s res = pack((int8_t) bext1, (int8_t) bext2, (int8_t) bext3, (int8_t) bext4); + + return res; +} + +static v4u __attribute__((noinline)) pulp_nn_u2_to_u8_r(uint8_t *pSrc) +{ + v4u Src = *((v4u*) pSrc); + uint8_t bext1, bext2, bext3, bext4; + + bext1 = (uint8_t) bitextu((unsigned int) Src, 2, 0); + bext2 = (uint8_t) bitextu((unsigned int) Src, 2, 2); + bext3 = (uint8_t) bitextu((unsigned int) Src, 2, 4); + bext4 = (uint8_t) bitextu((unsigned int) Src, 2, 6); + v4u res = pack((uint8_t) bext1, (uint8_t) bext2, (uint8_t) bext3, (uint8_t) bext4); + + return res; +} + +static v4s __attribute__((noinline)) pulp_nn_i2_to_i4_r(int8_t *pSrc) +{ + int8_t mask = 0xf0; + int8_t n_mask = ~ mask; + int8_t off = 0x04; + + v4s Src = *((v4s*) pSrc); + int8_t bext1, bext2, bext3, bext4; + int8_t out1, out2, out3, out4; + + bext1 = (int8_t) bitextu((int) Src, 2, 0); + bext2 = (int8_t) bitextu((int) Src, 2, 2); + bext3 = (int8_t) bitextu((int) Src, 2, 4); + bext4 = (int8_t) bitextu((int) Src, 2, 6); + + out1 = bitins(bext1, n_mask, bext2, mask, off); + out2 = bitins(bext3, n_mask, bext4, mask, off); + + bext1 = (int8_t) bitextu((int) Src, 2, 8); + bext2 = (int8_t) bitextu((int) Src, 2, 10); + bext3 = (int8_t) bitextu((int) Src, 2, 12); + bext4 = (int8_t) bitextu((int) Src, 2, 14); + + out3 = bitins(bext1, n_mask, bext2, mask, off); + out4 = bitins(bext3, n_mask, bext4, mask, off); + + v4s res = pack((int8_t) out1, (int8_t) out2, (int8_t) out3, (int8_t) out4); + + return res; +} + +static v4u __attribute__((noinline)) pulp_nn_u2_to_u4_r(uint8_t *pSrc) +{ + int8_t mask = 0xf0; + int8_t n_mask = ~ mask; + int8_t off = 0x04; + + v4u Src = *((v4u*) pSrc); + uint8_t bext1, bext2, bext3, bext4; + uint8_t out1, out2, out3, out4; + + bext1 = (uint8_t) bitextu((unsigned int) Src, 2, 0); + bext2 = (uint8_t) bitextu((unsigned int) Src, 2, 2); + bext3 = (uint8_t) bitextu((unsigned int) Src, 2, 4); + bext4 = (uint8_t) bitextu((unsigned int) Src, 2, 6); + + out1 = bitins(bext1, n_mask, bext2, mask, off); + out2 = bitins(bext3, n_mask, bext4, mask, off); + + bext1 = (uint8_t) bitextu((unsigned int) Src, 2, 8); + bext2 = (uint8_t) bitextu((unsigned int) Src, 2, 10); + bext3 = (uint8_t) bitextu((unsigned int) Src, 2, 12); + bext4 = (uint8_t) bitextu((unsigned int) Src, 2, 14); + + out3 = bitins(bext1, n_mask, bext2, mask, off); + out4 = bitins(bext3, n_mask, bext4, mask, off); + + v4u res = pack((uint8_t) out1, (uint8_t) out2, (uint8_t) out3, (uint8_t) out4); + + return res; +} + +static int8_t *__attribute__((always_inline)) pulp_nn_i4_to_i8( int8_t *pSrc, int8_t *pDst) +{ + v4s Src = *((v4s*) pSrc); + int8_t bext1, bext2, bext3, bext4; + + pSrc+=4; + + bext1 = (int8_t) bitext((int) Src, 4, 0); + bext2 = (int8_t) bitext((int) Src, 4, 4); + bext3 = (int8_t) bitext((int) Src, 4, 8); + bext4 = (int8_t) bitext((int) Src, 4, 12); + *((v4s*)pDst) = pack((int8_t) bext1, (int8_t) bext2, (int8_t) bext3, (int8_t) bext4); + MemoryFence(); + pDst+=4; + bext1 = (int8_t) bitext((int) Src, 4, 16); + bext2 = (int8_t) bitext((int) Src, 4, 20); + bext3 = (int8_t) bitext((int) Src, 4, 24); + bext4 = (int8_t) bitext((int) Src, 4, 28); + *((v4s*)pDst) = pack((int8_t) bext1, (int8_t) bext2, (int8_t) bext3, (int8_t) bext4); + + return pSrc; +} + +static uint8_t *__attribute__((always_inline)) pulp_nn_u4_to_u8(uint8_t *pSrc, uint8_t *pDst) +{ + v4u Src = *((v4u*) pSrc); + uint8_t bext1, bext2, bext3, bext4; + + pSrc+=4; + + bext1 = (uint8_t) bitextu((unsigned int) Src, 4, 0); + bext2 = (uint8_t) bitextu((unsigned int) Src, 4, 4); + bext3 = (uint8_t) bitextu((unsigned int) Src, 4, 8); + bext4 = (uint8_t) bitextu((unsigned int) Src, 4, 12); + *((v4u*)pDst) = pack((uint8_t) bext1, (uint8_t) bext2, (uint8_t) bext3, (uint8_t) bext4); + MemoryFence(); + pDst+=4; + bext1 = (uint8_t) bitextu((unsigned int) Src, 4, 16); + bext2 = (uint8_t) bitextu((unsigned int) Src, 4, 20); + bext3 = (uint8_t) bitextu((unsigned int) Src, 4, 24); + bext4 = (uint8_t) bitextu((unsigned int) Src, 4, 28); + *((v4u*)pDst) = pack((uint8_t) bext1, (uint8_t) bext2, (uint8_t) bext3, (uint8_t) bext4); + + return pSrc; +} + +static int8_t *__attribute__((always_inline)) pulp_nn_i2_to_i8( int8_t * pSrc, int8_t * pDst) +{ + v4s Src = *((v4s*) pSrc); + int8_t bext1, bext2, bext3, bext4; + + pSrc+=4; + + bext1 = (int8_t) bitext((int) Src, 2, 0); + bext2 = (int8_t) bitext((int) Src, 2, 2); + bext3 = (int8_t) bitext((int) Src, 2, 4); + bext4 = (int8_t) bitext((int) Src, 2, 6); + *((v4s*)pDst) = pack((int8_t) bext1, (int8_t) bext2, (int8_t) bext3, (int8_t) bext4); + MemoryFence(); + pDst+=4; + bext1 = (int8_t) bitext((int) Src, 2, 8); + bext2 = (int8_t) bitext((int) Src, 2, 10); + bext3 = (int8_t) bitext((int) Src, 2, 12); + bext4 = (int8_t) bitext((int) Src, 2, 14); + *((v4s*)pDst) = pack((int8_t) bext1, (int8_t) bext2, (int8_t) bext3, (int8_t) bext4); + MemoryFence(); + pDst+=4; + bext1 = (int8_t) bitext((int) Src, 2, 16); + bext2 = (int8_t) bitext((int) Src, 2, 18); + bext3 = (int8_t) bitext((int) Src, 2, 20); + bext4 = (int8_t) bitext((int) Src, 2, 22); + *((v4s*)pDst) = pack((int8_t) bext1, (int8_t) bext2, (int8_t) bext3, (int8_t) bext4); + MemoryFence(); + pDst+=4; + bext1 = (int8_t) bitext((int) Src, 2, 24); + bext2 = (int8_t) bitext((int) Src, 2, 26); + bext3 = (int8_t) bitext((int) Src, 2, 28); + bext4 = (int8_t) bitext((int) Src, 2, 30); + *((v4s*)pDst) = pack((int8_t) bext1, (int8_t) bext2, (int8_t) bext3, (int8_t) bext4); + + return pSrc; +} + +static uint8_t *__attribute__((always_inline)) pulp_nn_u2_to_u8(uint8_t * pSrc, uint8_t * pDst) +{ + v4u Src = *((v4u*) pSrc); + uint8_t bext1, bext2, bext3, bext4; + + pSrc+=4; + + bext1 = (uint8_t) bitextu((unsigned int) Src, 2, 0); + bext2 = (uint8_t) bitextu((unsigned int) Src, 2, 2); + bext3 = (uint8_t) bitextu((unsigned int) Src, 2, 4); + bext4 = (uint8_t) bitextu((unsigned int) Src, 2, 6); + *((v4u*)pDst) = pack((uint8_t) bext1, (uint8_t) bext2, (uint8_t) bext3, (uint8_t) bext4); + MemoryFence(); + pDst+=4; + bext1 = (uint8_t) bitextu((unsigned int) Src, 2, 8); + bext2 = (uint8_t) bitextu((unsigned int) Src, 2, 10); + bext3 = (uint8_t) bitextu((unsigned int) Src, 2, 12); + bext4 = (uint8_t) bitextu((unsigned int) Src, 2, 14); + *((v4u*)pDst) = pack((uint8_t) bext1, (uint8_t) bext2, (uint8_t) bext3, (uint8_t) bext4); + MemoryFence(); + pDst+=4; + bext1 = (uint8_t) bitextu((unsigned int) Src, 2, 16); + bext2 = (uint8_t) bitextu((unsigned int) Src, 2, 18); + bext3 = (uint8_t) bitextu((unsigned int) Src, 2, 20); + bext4 = (uint8_t) bitextu((unsigned int) Src, 2, 22); + *((v4u*)pDst) = pack((uint8_t) bext1, (uint8_t) bext2, (uint8_t) bext3, (uint8_t) bext4); + MemoryFence(); + pDst+=4; + bext1 = (uint8_t) bitextu((unsigned int) Src, 2, 24); + bext2 = (uint8_t) bitextu((unsigned int) Src, 2, 26); + bext3 = (uint8_t) bitextu((unsigned int) Src, 2, 28); + bext4 = (uint8_t) bitextu((unsigned int) Src, 2, 30); + *((v4u*)pDst) = pack((uint8_t) bext1, (uint8_t) bext2, (uint8_t) bext3, (uint8_t) bext4); + + return pSrc; +} + +static int8_t *__attribute__((always_inline)) pulp_nn_i2_to_i4( int8_t * pSrc, int8_t * pDst) +{ + int8_t mask = 0xf0; + int8_t n_mask = ~ mask; + int8_t off = 0x04; + + v4s Src = *((v4s*) pSrc); + int8_t bext1, bext2, bext3, bext4; + int8_t out1, out2, out3, out4; + + pSrc+=4; + + bext1 = (int8_t) bitext((int) Src, 2, 0); + bext2 = (int8_t) bitext((int) Src, 2, 2); + bext3 = (int8_t) bitext((int) Src, 2, 4); + bext4 = (int8_t) bitext((int) Src, 2, 6); + + out1 = bitins(bext1, n_mask, bext2, mask, off); + out2 = bitins(bext3, n_mask, bext4, mask, off); + MemoryFence(); + + bext1 = (int8_t) bitext((int) Src, 2, 8); + bext2 = (int8_t) bitext((int) Src, 2, 10); + bext3 = (int8_t) bitext((int) Src, 2, 12); + bext4 = (int8_t) bitext((int) Src, 2, 14); + + out3 = bitins(bext1, n_mask, bext2, mask, off); + out4 = bitins(bext3, n_mask, bext4, mask, off); + + *((v4s*)pDst) = pack((int8_t) out1, (int8_t) out2, (int8_t) out3, (int8_t) out4); + MemoryFence(); + + pDst+=4; + bext1 = (int8_t) bitext((int) Src, 2, 16); + bext2 = (int8_t) bitext((int) Src, 2, 18); + bext3 = (int8_t) bitext((int) Src, 2, 20); + bext4 = (int8_t) bitext((int) Src, 2, 22); + + out1 = bitins(bext1, n_mask, bext2, mask, off); + out2 = bitins(bext3, n_mask, bext4, mask, off); + MemoryFence(); + + bext1 = (int8_t) bitext((int) Src, 2, 24); + bext2 = (int8_t) bitext((int) Src, 2, 26); + bext3 = (int8_t) bitext((int) Src, 2, 28); + bext4 = (int8_t) bitext((int) Src, 2, 30); + + out3 = bitins(bext1, n_mask, bext2, mask, off); + out4 = bitins(bext3, n_mask, bext4, mask, off); + + *((v4s*)pDst) = pack((int8_t) out1, (int8_t) out2, (int8_t) out3, (int8_t) out4); + + return pSrc; +} + +static uint8_t *__attribute__((always_inline)) pulp_nn_u2_to_u4( uint8_t * pSrc, uint8_t * pDst) +{ + int8_t mask = 0xf0; + int8_t n_mask = ~ mask; + int8_t off = 0x04; + + v4u Src = *((v4u*) pSrc); + uint8_t bext1, bext2, bext3, bext4; + uint8_t out1, out2, out3, out4; + + pSrc+=4; + + bext1 = (uint8_t) bitextu((unsigned int) Src, 2, 0); + bext2 = (uint8_t) bitextu((unsigned int) Src, 2, 2); + bext3 = (uint8_t) bitextu((unsigned int) Src, 2, 4); + bext4 = (uint8_t) bitextu((unsigned int) Src, 2, 6); + + out1 = bitins(bext1, n_mask, bext2, mask, off); + out2 = bitins(bext3, n_mask, bext4, mask, off); + MemoryFence(); + + bext1 = (uint8_t) bitextu((unsigned int) Src, 2, 8); + bext2 = (uint8_t) bitextu((unsigned int) Src, 2, 10); + bext3 = (uint8_t) bitextu((unsigned int) Src, 2, 12); + bext4 = (uint8_t) bitextu((unsigned int) Src, 2, 14); + + out3 = bitins(bext1, n_mask, bext2, mask, off); + out4 = bitins(bext3, n_mask, bext4, mask, off); + + *((v4u*)pDst) = pack((uint8_t) out1, (uint8_t) out2, (uint8_t) out3, (uint8_t) out4); + MemoryFence(); + + pDst+=4; + bext1 = (uint8_t) bitextu((unsigned int) Src, 2, 16); + bext2 = (uint8_t) bitextu((unsigned int) Src, 2, 18); + bext3 = (uint8_t) bitextu((unsigned int) Src, 2, 20); + bext4 = (uint8_t) bitextu((unsigned int) Src, 2, 22); + + out1 = bitins(bext1, n_mask, bext2, mask, off); + out2 = bitins(bext3, n_mask, bext4, mask, off); + MemoryFence(); + + bext1 = (uint8_t) bitextu((unsigned int) Src, 2, 24); + bext2 = (uint8_t) bitextu((unsigned int) Src, 2, 26); + bext3 = (uint8_t) bitextu((unsigned int) Src, 2, 28); + bext4 = (uint8_t) bitextu((unsigned int) Src, 2, 30); + + out3 = bitins(bext1, n_mask, bext2, mask, off); + out4 = bitins(bext3, n_mask, bext4, mask, off); + + *((v4u*)pDst) = pack((uint8_t) out1, (uint8_t) out2, (uint8_t) out3, (uint8_t) out4); + + return pSrc; +} + +/* + * XpulpV2 + */ + +static void __attribute__((noinline)) pulp_zero_mem(uint8_t * pBuffer, unsigned int size) +{ + int lfover = size &0x3; + for (int i=0; i<(size>>2); i++) + { + *((v4u *)pBuffer) = (v4u){0,0,0,0}; + MemoryFence(); + pBuffer+=4; + } + while(lfover) + { + *pBuffer++=0; + lfover--; + } +} + +static void __attribute__((noinline)) pulp_nn_im2col_u2_to_u8(uint8_t * pInput, uint8_t * pOutput, unsigned int blockSize) +{ + unsigned int blkCnt = blockSize >> 4u; + int lfover = blockSize & 0x0f; + for (int i = 0; i> 4u; + int lfover = blockSize & 0x0f; + for (int i = 0; i> 3u; + int lfover = blockSize & 0x07; + for (int i = 0; i> 3u; + int lfover = blockSize & 0x07; + for (int i = 0; i> 2u; + int lfover = blockSize & 0x03; + for (int i = 0; i> 2u; + int lfover = blockSize & 0x03; + for (int i = 0; i> 4u; + int lfover = blockSize & 0x0f; + for (int i = 0; i> 4u; + int lfover = blockSize & 0x0f; + for (int i = 0; i> 4u; + int lfover = blockSize & 0x0f; + for (int i = 0; i> 4u; + int lfover = blockSize & 0x0f; + for (int i = 0; i> 4u; + int lfover = blockSize & 0x0f; + for (int i = 0; i> 4u; + int lfover = blockSize & 0x0f; + for (int i = 0; i> 3u; + int lfover = blockSize & 0x07; + for (int i = 0; i> 3u; + int lfover = blockSize & 0x07; + for (int i = 0; i> 3u; + int lfover = blockSize & 0x07; + for (int i = 0; i> 3u; + int lfover = blockSize & 0x07; + for (int i = 0; i> 2u; + int lfover = blockSize & 0x03; + for (int i = 0; i> 2u; + int lfover = blockSize & 0x03; + for (int i = 0; i> 2; + + while(cnt > 0u) + { + inp = *((v4u*)pIn); + com = *((v4u*)pCom); + + *((v4u*)pIn) = max4(inp, com); + + pCom+=4; + pIn+=4; + cnt--; + } + + int left = length & 0x3; + while (left>0u) + { + if(*pIn<*pCom) + *pIn=*pCom; + + pIn++; + pCom++; + left--; + } +} + +static void __attribute__((noinline)) pulp_nn_compare_and_replace_if_larger_i8( + int8_t * base, int8_t * target, uint16_t length) { + int8_t *pIn = base; + int8_t *pCom = target; + v4s inp; + v4s com; + int cnt = length >> 2; + + while (cnt > 0u) { + inp = *((v4s *)pIn); + com = *((v4s *)pCom); + + *((v4s *)pIn) = maxs4(inp, com); + + pCom += 4; + pIn += 4; + cnt--; + } + + int left = length & 0x3; + while (left > 0u) { + if (*pIn < *pCom) + *pIn = *pCom; + + pIn++; + pCom++; + left--; + } +} + +static void __attribute__((noinline)) pulp_nn_avg_and_replace_u8(uint8_t * base, + uint8_t * target, + uint16_t length) +{ + uint8_t *pIn = base; + uint8_t *pCom = target; + + while (length>0u) + { + *pIn = ((*pIn + *pCom) >> 1); + + pIn++; + pCom++; + length--; + } +} + +static void __attribute__((noinline)) pulp_nn_compare_and_replace_if_larger_u4(uint8_t * base, + uint8_t * target, + uint16_t length) +{ + int8_t mask = 0xf0; + int8_t n_mask = ~ mask; + int8_t off = 0x04; + + uint8_t *pIn = base; + uint8_t *pCom = target; + v4u inp[2]; + v4u com[2]; + uint8_t *out; + int cnt = length >> 2; + + while(cnt > 0u) + { + pulp_nn_u4_to_u8(pIn, (uint8_t *)inp); + pulp_nn_u4_to_u8(pCom, (uint8_t *)com); + + *((v4u *)out) = max4(inp[0], com[0]); + + *((uint8_t*)pIn) = bitins(*out, n_mask, *(out + 1), mask, off); + pIn++; + *((uint8_t*)pIn) = bitins(*(out + 2), n_mask, *(out + 3), mask, off); + pIn++; + + *((v4u *)out) = max4(inp[1], com[1]); + + *((uint8_t*)pIn) = bitins(*out, n_mask, *(out + 1), mask, off); + pIn++; + *((uint8_t*)pIn) = bitins(*(out + 2), n_mask, *(out + 3), mask, off); + pIn++; + + pCom+=4; + cnt--; + } + + int left = length & 0x3; + while (left>0u) + { + uint8_t inA0 = (uint8_t) bitextu((unsigned int) *pIn, 4, 0); + uint8_t inA1 = (uint8_t) bitextu((unsigned int) *pIn, 4, 4); + uint8_t inB0 = (uint8_t) bitextu((unsigned int) *pCom, 4, 0); + uint8_t inB1 = (uint8_t) bitextu((unsigned int) *pCom, 4, 4); + + if(inA0> 2; + + while(cnt > 0u) + { + pulp_nn_i4_to_i8(pIn, (int8_t *)inp); + pulp_nn_i4_to_i8(pCom, (int8_t *)com); + + *((v4s *)out) = maxs4(inp[0], com[0]); + + *((int8_t*)pIn) = bitins(*out, n_mask, *(out + 1), mask, off); + pIn++; + *((int8_t*)pIn) = bitins(*(out + 2), n_mask, *(out + 3), mask, off); + pIn++; + + *((v4s *)out) = maxs4(inp[1], com[1]); + + *((int8_t*)pIn) = bitins(*out, n_mask, *(out + 1), mask, off); + pIn++; + *((int8_t*)pIn) = bitins(*(out + 2), n_mask, *(out + 3), mask, off); + pIn++; + + pCom+=4; + cnt--; + } + + int left = length & 0x3; + while (left>0u) + { + int8_t inA0 = (int8_t) bitext((int) *pIn, 4, 0); + int8_t inA1 = (int8_t) bitext((int) *pIn, 4, 4); + int8_t inB0 = (int8_t) bitext((int) *pCom, 4, 0); + int8_t inB1 = (int8_t) bitext((int) *pCom, 4, 4); + + if(inA00u) + { + uint8_t inA0 = (uint8_t) bitextu((unsigned int) *pIn, 4, 0); + uint8_t inA1 = (uint8_t) bitextu((unsigned int) *pIn, 4, 4); + uint8_t inB0 = (uint8_t) bitextu((unsigned int) *pCom, 4, 0); + uint8_t inB1 = (uint8_t) bitextu((unsigned int) *pCom, 4, 4); + + inA0 = ((inA0 + inB0) >> 1); + inA1 = ((inA1 + inB1) >> 1); + + *((uint8_t*)pIn) = bitins(inA0, n_mask, inA1, mask, off); + + pIn++; + pCom++; + length--; + } +} + +static void __attribute__((noinline)) pulp_nn_compare_and_replace_if_larger_u2(uint8_t * base, + uint8_t * target, + uint16_t length) +{ + int8_t mask2 = 0x0c; + int8_t n_mask2 = ~ mask2; + int8_t mask4 = 0x30; + int8_t n_mask4 = ~ mask4; + int8_t mask6 = 0xc0; + int8_t n_mask6 = ~ mask6; + int8_t off2 = 2; + int8_t off4 = 4; + int8_t off6 = 6; + + uint8_t *pIn = base; + uint8_t *pCom = target; + v4u inp[4]; + v4u com[4]; + uint8_t *out; + int cnt = length >> 2; + + while(cnt > 0u) + { + pulp_nn_u2_to_u8(pIn, inp); + pulp_nn_u2_to_u8(pCom, com); + + *((v4u*)out) = max4(inp[0], com[0]); + + uint8_t inA = (uint8_t) bitins(*out, n_mask2, *(out + 1), mask2, off2); + inA = bitins(inA, n_mask4, *(out + 2), mask4, off4); + *((uint8_t*)pIn) = bitins(inA, n_mask6, *(out + 3), mask6, off6); + pIn++; + + *((v4u*)out) = max4(inp[1], com[1]); + + inA = (uint8_t) bitins(*out, n_mask2, *(out + 1), mask2, off2); + inA = bitins(inA, n_mask4, *(out + 2), mask4, off4); + *((uint8_t*)pIn) = bitins(inA, n_mask6, *(out + 3), mask6, off6); + pIn++; + + *((v4u*)out) = max4(inp[2], com[2]); + + inA = (uint8_t) bitins(*out, n_mask2, *(out + 1), mask2, off2); + inA = bitins(inA, n_mask4, *(out + 2), mask4, off4); + *((uint8_t*)pIn) = bitins(inA, n_mask6, *(out + 3), mask6, off6); + pIn++; + + *((v4u*)out) = max4(inp[3], com[3]); + + inA = (uint8_t) bitins(*out, n_mask2, *(out + 1), mask2, off2); + inA = bitins(inA, n_mask4, *(out + 2), mask4, off4); + *((uint8_t*)pIn) = bitins(inA, n_mask6, *(out + 3), mask6, off6); + pIn++; + + pCom+=4; + cnt--; + } + + int left = length & 0x3; + while (left>0u) + { + uint8_t inA0 = (uint8_t) bitextu((unsigned int) *pIn, 2, 0); + uint8_t inA1 = (uint8_t) bitextu((unsigned int) *pIn, 2, 2); + uint8_t inA2 = (uint8_t) bitextu((unsigned int) *pIn, 2, 4); + uint8_t inA3 = (uint8_t) bitextu((unsigned int) *pIn, 2, 6); + v4u inA4 = pack((uint8_t) inA0, (uint8_t) inA1, (uint8_t) inA2, (uint8_t) inA3); + uint8_t inB0 = (uint8_t) bitextu((unsigned int) *pCom, 2, 0); + uint8_t inB1 = (uint8_t) bitextu((unsigned int) *pCom, 2, 2); + uint8_t inB2 = (uint8_t) bitextu((unsigned int) *pCom, 2, 4); + uint8_t inB3 = (uint8_t) bitextu((unsigned int) *pCom, 2, 6); + v4u inB4 = pack((uint8_t) inB0, (uint8_t) inB1, (uint8_t) inB2, (uint8_t) inB3); + + *((v4u*)out) = max4(inA4, inB4); + + uint8_t inA = (uint8_t) bitins(*out, n_mask2, *(out + 1), mask2, off2); + inA = bitins(inA, n_mask4, *(out + 2), mask4, off4); + *((uint8_t*)pIn) = bitins(inA, n_mask6, *(out + 3), mask6, off6); + + pIn++; + pCom++; + left--; + } +} + + +static void __attribute__((noinline)) pulp_nn_compare_and_replace_if_larger_i2(int8_t * base, + int8_t * target, + uint16_t length) +{ + int8_t mask2 = 0x0c; + int8_t n_mask2 = ~ mask2; + int8_t mask4 = 0x30; + int8_t n_mask4 = ~ mask4; + int8_t mask6 = 0xc0; + int8_t n_mask6 = ~ mask6; + int8_t off2 = 2; + int8_t off4 = 4; + int8_t off6 = 6; + + int8_t *pIn = base; + int8_t *pCom = target; + v4s inp[4]; + v4s com[4]; + int8_t *out; + int cnt = length >> 2; + + while(cnt > 0u) + { + pulp_nn_i2_to_i8(pIn, inp); + pulp_nn_i2_to_i8(pCom, com); + + *((v4s*)out) = maxs4(inp[0], com[0]); + + int8_t inA = (int8_t) bitins(*out, n_mask2, *(out + 1), mask2, off2); + inA = bitins(inA, n_mask4, *(out + 2), mask4, off4); + *((int8_t*)pIn) = bitins(inA, n_mask6, *(out + 3), mask6, off6); + pIn++; + + *((v4s*)out) = maxs4(inp[1], com[1]); + + inA = (int8_t) bitins(*out, n_mask2, *(out + 1), mask2, off2); + inA = bitins(inA, n_mask4, *(out + 2), mask4, off4); + *((int8_t*)pIn) = bitins(inA, n_mask6, *(out + 3), mask6, off6); + pIn++; + + *((v4s*)out) = maxs4(inp[2], com[2]); + + inA = (int8_t) bitins(*out, n_mask2, *(out + 1), mask2, off2); + inA = bitins(inA, n_mask4, *(out + 2), mask4, off4); + *((int8_t*)pIn) = bitins(inA, n_mask6, *(out + 3), mask6, off6); + pIn++; + + *((v4s*)out) = maxs4(inp[3], com[3]); + + inA = (int8_t) bitins(*out, n_mask2, *(out + 1), mask2, off2); + inA = bitins(inA, n_mask4, *(out + 2), mask4, off4); + *((int8_t*)pIn) = bitins(inA, n_mask6, *(out + 3), mask6, off6); + pIn++; + + pCom+=4; + cnt--; + } + + int left = length & 0x3; + while (left>0u) + { + int8_t inA0 = (int8_t) bitext((unsigned int) *pIn, 2, 0); + int8_t inA1 = (int8_t) bitext((unsigned int) *pIn, 2, 2); + int8_t inA2 = (int8_t) bitext((unsigned int) *pIn, 2, 4); + int8_t inA3 = (int8_t) bitext((unsigned int) *pIn, 2, 6); + v4s inA4 = pack((int8_t) inA0, (int8_t) inA1, (int8_t) inA2, (int8_t) inA3); + int8_t inB0 = (int8_t) bitext((unsigned int) *pCom, 2, 0); + int8_t inB1 = (int8_t) bitext((unsigned int) *pCom, 2, 2); + int8_t inB2 = (int8_t) bitext((unsigned int) *pCom, 2, 4); + int8_t inB3 = (int8_t) bitext((unsigned int) *pCom, 2, 6); + v4s inB4 = pack((int8_t) inB0, (int8_t) inB1, (int8_t) inB2, (int8_t) inB3); + + *((v4s*)out) = maxs4(inA4, inB4); + + int8_t inA = (int8_t) bitins(*out, n_mask2, *(out + 1), mask2, off2); + inA = bitins(inA, n_mask4, *(out + 2), mask4, off4); + *((int8_t*)pIn) = bitins(inA, n_mask6, *(out + 3), mask6, off6); + + pIn++; + pCom++; + left--; + } +} + +static void __attribute__((noinline)) pulp_nn_avg_and_replace_u2(uint8_t * base, + uint8_t * target, + uint16_t length) +{ + int8_t mask2 = 0x0c; + int8_t n_mask2 = ~ mask2; + int8_t mask4 = 0x30; + int8_t n_mask4 = ~ mask4; + int8_t mask6 = 0xc0; + int8_t n_mask6 = ~ mask6; + int8_t off2 = 2; + int8_t off4 = 4; + int8_t off6 = 6; + + uint8_t *pIn = base; + uint8_t *pCom = target; + + while (length>0u) + { + uint8_t inA0 = (uint8_t) bitextu((unsigned int) *pIn, 2, 0); + uint8_t inA1 = (uint8_t) bitextu((unsigned int) *pIn, 2, 2); + uint8_t inA2 = (uint8_t) bitextu((unsigned int) *pIn, 2, 4); + uint8_t inA3 = (uint8_t) bitextu((unsigned int) *pIn, 2, 6); + + uint8_t inB0 = (uint8_t) bitextu((unsigned int) *pCom, 2, 0); + uint8_t inB1 = (uint8_t) bitextu((unsigned int) *pCom, 2, 2); + uint8_t inB2 = (uint8_t) bitextu((unsigned int) *pCom, 2, 4); + uint8_t inB3 = (uint8_t) bitextu((unsigned int) *pCom, 2, 6); + + inA0 = ((inA0 + inB0) >> 1); + inA1 = ((inA1 + inB1) >> 1); + inA2 = ((inA2 + inB2) >> 1); + inA3 = ((inA3 + inB3) >> 1); + + uint8_t inA = (uint8_t) bitins(inA0, n_mask2, inA1, mask2, off2); + inA = bitins(inA, n_mask4, inA2, mask4, off4); + *((uint8_t*)pIn) = bitins(inA, n_mask6, inA3, mask6, off6); + + pIn++; + pCom++; + length--; + } +} + +/* + * XpulpNN + */ + +static void __attribute__((noinline)) xpulp_nn_zero_mem_u8(uint8_t * pBuffer, unsigned int size) +{ + int lfover = size &0x3; + for (int i=0; i<(size>>2); i++) + { + *((v4u *)pBuffer) = (v4u){0,0,0,0}; + MemoryFence(); + pBuffer+=4; + } + while(lfover) + { + *pBuffer++=0; + lfover--; + } +} + +static void __attribute__((noinline)) xpulp_nn_zero_mem_u4(uint8_t * pBuffer, unsigned int size) +{ + int lfover = size &0x7; + for (int i=0; i<(size>>3); i++) + { + *((v4u *)pBuffer) = (v4u){0,0,0,0}; + MemoryFence(); + pBuffer+=4; + } + while(lfover) + { + *pBuffer++=0; + lfover-=2; + } +} + +static void __attribute__((noinline)) xpulp_nn_zero_mem_u2(uint8_t * pBuffer, unsigned int size) +{ + int lfover = size &0xf; + for (int i=0; i<(size>>4); i++) + { + *((v4u *)pBuffer) = (v4u){0,0,0,0}; + MemoryFence(); + pBuffer+=4; + } + while(lfover) + { + *pBuffer++=0; + lfover-=4; + } +} + + +static void __attribute__((noinline)) xpulp_tnn_zero_mem_ternary(uint8_t * pBuffer, unsigned int size, unsigned int uns) +{ + uint8_t pad_val = 0xd9; + uint32_t pad_vec = 0xd9d9d9d9; + if (uns) { + // if we are using an unsigned kernel, we need to pad with -1 because the hardware will add a +1 to ALL values! + pad_val = 0xff; + pad_vec = 0xffffffff; + } + int lfover = size &0xf; + for (int i=0; i<(size>>4); i++) + { + *((v4u *)pBuffer) = (v4u)pad_vec; + MemoryFence(); + pBuffer+=4; + } + while(lfover) + { + *pBuffer++=pad_val; + lfover-=4; + } +} + +static void __attribute__((noinline)) xpulp_nn_compare_and_replace_if_larger_u4(uint8_t * base, + uint8_t * target, + uint16_t length) +{ + int8_t mask = 0xf0; + int8_t n_mask = ~ mask; + int8_t off = 0x04; + + uint8_t *pIn = base; + uint8_t *pCom = target; + + int cnt = length >> 2; + + while(cnt > 0u) + { + *((uint32_t *)pIn) = max8(*((uint32_t *)pIn), *((uint32_t *)pCom)); + + pIn+=4; + pCom+=4; + + cnt--; + } + + int left = length & 0x3; + while (left>0u) + { + uint8_t inA0 = (uint8_t) bitextu((unsigned int) *pIn, 4, 0); + uint8_t inA1 = (uint8_t) bitextu((unsigned int) *pIn, 4, 4); + uint8_t inB0 = (uint8_t) bitextu((unsigned int) *pCom, 4, 0); + uint8_t inB1 = (uint8_t) bitextu((unsigned int) *pCom, 4, 4); + + if(inA0> 2; + + while (cnt > 0u) { + *((int32_t *)pIn) = maxs8(*((int32_t *)pIn), *((int32_t *)pCom)); + + pIn += 4; + pCom += 4; + + cnt--; + } + + int left = length & 0x3; + while (left > 0u) { + int8_t inA0 = (int8_t)bitext((int)*pIn, 4, 0); + int8_t inA1 = (int8_t)bitext((int)*pIn, 4, 4); + int8_t inB0 = (int8_t)bitext((int)*pCom, 4, 0); + int8_t inB1 = (int8_t)bitext((int)*pCom, 4, 4); + + if (inA0 < inB0) + inA0 = inB0; + + if (inA1 < inB1) + inA1 = inB1; + + *((int8_t *)pIn) = bitins(inA0, n_mask, inA1, mask, off); + + pIn++; + pCom++; + left--; + } +} + +static void __attribute__((noinline)) xpulp_nn_avg_and_replace_u4(uint8_t * base, + uint8_t * target, + uint16_t length) +{ + int8_t mask = 0xf0; + int8_t n_mask = ~ mask; + int8_t off = 0x04; + + uint8_t *pIn = base; + uint8_t *pCom = target; + + int cnt = length >> 2; + + while (cnt > 0u) + { + *((uint32_t *)pIn) = avg8(*((uint32_t *)pIn), *((uint32_t *)pCom)); + + pIn+=4; + pCom+=4; + cnt--; + } + + int left = length & 0x3; + + while (left>0u) + { + uint8_t inA0 = (uint8_t) bitextu((unsigned int) *pIn, 4, 0); + uint8_t inA1 = (uint8_t) bitextu((unsigned int) *pIn, 4, 4); + uint8_t inB0 = (uint8_t) bitextu((unsigned int) *pCom, 4, 0); + uint8_t inB1 = (uint8_t) bitextu((unsigned int) *pCom, 4, 4); + + inA0 = ((inA0 + inB0) >> 1); + inA1 = ((inA1 + inB1) >> 1); + + *((uint8_t*)pIn) = bitins(inA0, n_mask, inA1, mask, off); + + pIn++; + pCom++; + length--; + } +} + +static void __attribute__((noinline)) xpulp_nn_compare_and_replace_if_larger_u2(uint8_t * base, + uint8_t * target, + uint16_t length) +{ + int8_t mask2 = 0x0c; + int8_t n_mask2 = ~ mask2; + int8_t mask4 = 0x30; + int8_t n_mask4 = ~ mask4; + int8_t mask6 = 0xc0; + int8_t n_mask6 = ~ mask6; + int8_t off2 = 2; + int8_t off4 = 4; + int8_t off6 = 6; + + uint8_t *pIn = base; + uint8_t *pCom = target; + uint8_t *out; + + int cnt = length >> 2; + + while(cnt > 0u) + { + *((uint32_t *)pIn) = max16(*((uint32_t *)pIn), *((uint32_t *)pCom)); + + pIn+=4; + pCom+=4; + cnt--; + } + + int left = length & 0x3; + while (left>0u) + { + uint8_t inA0 = (uint8_t) bitextu((unsigned int) *pIn, 2, 0); + uint8_t inA1 = (uint8_t) bitextu((unsigned int) *pIn, 2, 2); + uint8_t inA2 = (uint8_t) bitextu((unsigned int) *pIn, 2, 4); + uint8_t inA3 = (uint8_t) bitextu((unsigned int) *pIn, 2, 6); + v4u inA4 = pack((uint8_t) inA0, (uint8_t) inA1, (uint8_t) inA2, (uint8_t) inA3); + uint8_t inB0 = (uint8_t) bitextu((unsigned int) *pCom, 2, 0); + uint8_t inB1 = (uint8_t) bitextu((unsigned int) *pCom, 2, 2); + uint8_t inB2 = (uint8_t) bitextu((unsigned int) *pCom, 2, 4); + uint8_t inB3 = (uint8_t) bitextu((unsigned int) *pCom, 2, 6); + v4u inB4 = pack((uint8_t) inB0, (uint8_t) inB1, (uint8_t) inB2, (uint8_t) inB3); + + *((v4u*)out) = max4(inA4, inB4); + + uint8_t inA = (uint8_t) bitins(*out, n_mask2, *(out + 1), mask2, off2); + inA = bitins(inA, n_mask4, *(out + 2), mask4, off4); + *((uint8_t*)pIn) = bitins(inA, n_mask6, *(out + 3), mask6, off6); + + pIn++; + pCom++; + left--; + } +} +static void __attribute__((noinline)) xpulp_nn_compare_and_replace_if_larger_i2(int8_t * base, + int8_t * target, + uint16_t length) +{ + int8_t mask2 = 0x0c; + int8_t n_mask2 = ~ mask2; + int8_t mask4 = 0x30; + int8_t n_mask4 = ~ mask4; + int8_t mask6 = 0xc0; + int8_t n_mask6 = ~ mask6; + int8_t off2 = 2; + int8_t off4 = 4; + int8_t off6 = 6; + + int8_t *pIn = base; + int8_t *pCom = target; + int8_t *out; + + int cnt = length >> 2; + + while(cnt > 0u) + { + *((int32_t *)pIn) = maxs16(*((int32_t *)pIn), *((int32_t *)pCom)); + + pIn+=4; + pCom+=4; + cnt--; + } + + int left = length & 0x3; + while (left>0u) + { + int8_t inA0 = (int8_t) bitext((int) *pIn, 2, 0); + int8_t inA1 = (int8_t) bitext((int) *pIn, 2, 2); + int8_t inA2 = (int8_t) bitext((int) *pIn, 2, 4); + int8_t inA3 = (int8_t) bitext((int) *pIn, 2, 6); + v4s inA4 = pack((int8_t) inA0, (int8_t) inA1, (int8_t) inA2, (int8_t) inA3); + int8_t inB0 = (int8_t) bitext((int) *pCom, 2, 0); + int8_t inB1 = (int8_t) bitext((int) *pCom, 2, 2); + int8_t inB2 = (int8_t) bitext((int) *pCom, 2, 4); + int8_t inB3 = (int8_t) bitext((int) *pCom, 2, 6); + v4s inB4 = pack((int8_t) inB0, (int8_t) inB1, (int8_t) inB2, (int8_t) inB3); + + *((v4s*)out) = maxs4(inA4, inB4); + + int8_t inA = (int8_t) bitins(*out, n_mask2, *(out + 1), mask2, off2); + inA = bitins(inA, n_mask4, *(out + 2), mask4, off4); + *((int8_t*)pIn) = bitins(inA, n_mask6, *(out + 3), mask6, off6); + + pIn++; + pCom++; + left--; + } +} + +static void __attribute__((noinline)) xpulp_nn_avg_and_replace_u2(uint8_t * base, + uint8_t * target, + uint16_t length) +{ + int8_t mask2 = 0x0c; + int8_t n_mask2 = ~ mask2; + int8_t mask4 = 0x30; + int8_t n_mask4 = ~ mask4; + int8_t mask6 = 0xc0; + int8_t n_mask6 = ~ mask6; + int8_t off2 = 2; + int8_t off4 = 4; + int8_t off6 = 6; + + uint8_t *pIn = base; + uint8_t *pCom = target; + uint8_t *out; + + int cnt = length >> 2; + + while(cnt > 0u) + { + *((uint32_t *)pIn) = avg16(*((uint32_t *)pIn), *((uint32_t *)pCom)); + + pIn+=4; + pCom+=4; + cnt--; + } + + int left = length & 0x3; + while (left>0u) + { + uint8_t inA0 = (uint8_t) bitextu((unsigned int) *pIn, 2, 0); + uint8_t inA1 = (uint8_t) bitextu((unsigned int) *pIn, 2, 2); + uint8_t inA2 = (uint8_t) bitextu((unsigned int) *pIn, 2, 4); + uint8_t inA3 = (uint8_t) bitextu((unsigned int) *pIn, 2, 6); + v4u inA4 = pack((uint8_t) inA0, (uint8_t) inA1, (uint8_t) inA2, (uint8_t) inA3); + uint8_t inB0 = (uint8_t) bitextu((unsigned int) *pCom, 2, 0); + uint8_t inB1 = (uint8_t) bitextu((unsigned int) *pCom, 2, 2); + uint8_t inB2 = (uint8_t) bitextu((unsigned int) *pCom, 2, 4); + uint8_t inB3 = (uint8_t) bitextu((unsigned int) *pCom, 2, 6); + v4u inB4 = pack((uint8_t) inB0, (uint8_t) inB1, (uint8_t) inB2, (uint8_t) inB3); + + *((v4u*)out) = avg4(inA4, inB4); + + uint8_t inA = (uint8_t) bitins(*out, n_mask2, *(out + 1), mask2, off2); + inA = bitins(inA, n_mask4, *(out + 2), mask4, off4); + *((uint8_t*)pIn) = bitins(inA, n_mask6, *(out + 3), mask6, off6); + + pIn++; + pCom++; + left--; + } +} + +#endif diff --git a/rt_nn_tests/xptnn_linear/pulp_nn_utils_xpnn.h b/rt_nn_tests/xptnn_linear/pulp_nn_utils_xpnn.h new file mode 100644 index 0000000..0c783ae --- /dev/null +++ b/rt_nn_tests/xptnn_linear/pulp_nn_utils_xpnn.h @@ -0,0 +1,1937 @@ +/* + * pulp_nn_utils.h + * Nazareno Bruschi + * Alessandro Nadalini + * Georg Rutishauser + * + * Copyright (C) 2019-2020 ETH Zurich & University of Bologna + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef __PULPNN_UTILS__ +#define __PULPNN_UTILS__ + +#include "pmsis.h" +#ifdef GAP_SDK +#include "pulp.h" +#endif + +#define bitext(x,size,off) __builtin_pulp_bextract(x,size,off) +#define bitextu(x,size,off) __builtin_pulp_bextractu(x,size,off) +#define bitins(dst,not_mask_imm,src,mask_imm,off) __builtin_pulp_binsert(dst,not_mask_imm,src,mask_imm,off) +#define pack(x,y,z,t) __builtin_pulp_pack4(x,y,z,t) +#define max4(a,b) __builtin_pulp_maxu4(a,b) +#define maxs4(a, b) __builtin_pulp_max4(a, b) +#define max8(a, b) __builtin_pulp_maxu8(a, b) +#define maxs8(a, b) __builtin_pulp_max8(a, b) +#define max16(a, b) __builtin_pulp_maxu16(a, b) +#define maxs16(a, b) __builtin_pulp_max16(a, b) +#define max32(a,b) __builtin_pulp_maxusi(a,b) +#define maxs32(a,b) __builtin_pulp_maxsi(a,b) +#define min32(a,b) __builtin_pulp_minusi(a,b) +#define mins32(a,b) __builtin_pulp_minsi(a,b) +#define min4(a, b) __builtin_pulp_minu4(a, b) +#define mins4(a, b) __builtin_pulp_min4(a, b) +#define min8(a, b) __builtin_pulp_minu8(a, b) +#define mins8(a, b) __builtin_pulp_min8(a, b) +#define min16(a, b) __builtin_pulp_minu16(a, b) +#define mins16(a, b) __builtin_pulp_min16(a, b) +#define avg4(a,b) __builtin_pulp_avgu4(a,b) +#define avg8(a,b) __builtin_pulp_avgu8(a,b) +#define avg16(a,b) __builtin_pulp_avgu16(a,b) +#define log2(x) __builtin_pulp_fl1(x) +#define min(a,b) ((a)<(b)?(a):(b)) +#define SumDotp4(a, b, c) __builtin_pulp_sdotusp4(a, b, c) +#define SumDotp8(a, b, c) __builtin_pulp_sdotusp8(a, b, c) +#define SumDotp16(a, b, c) __builtin_pulp_sdotusp16(a, b, c) +#define SumDotps4(a, b, c) __builtin_pulp_sdotsp4(a, b, c) +#define SumDotps8(a, b, c) __builtin_pulp_sdotsp8(a, b, c) +#define SumDotps16(a, b, c) __builtin_pulp_sdotsp16(a, b, c) +#define clip4(x) __builtin_pulp_clipu_r(x, 15) +#define clip2(x) __builtin_pulp_clipu_r(x, 3) +#define clip8(x) __builtin_pulp_clipu_r(x, 255) + +#define clips4(x) __builtin_pulp_clip_r(x, 7) +#define clips2(x) __builtin_pulp_clip_r(x, 1) +#define clips8(x) __builtin_pulp_clip_r(x, 127) +#define MacLoadInit(a_update, b_update, a_reg, b_reg, ptr) __builtin_pulp_mlinitspr_v3(a_update, b_update, a_reg, b_reg, ptr) +#define MacLoadUpdate(ptr) __builtin_pulp_mlupdatespr_v3(ptr) +#define MacLoadAssign(ptr) __builtin_pulp_mlassignspr_v3(ptr) +#define MacLoad4(a_update, b_update, a_reg, b_reg, ptr, sum) __builtin_pulp_mlsdotsup4_v3(a_update, b_update, a_reg, b_reg, ptr, sum) +#define MacLoad8(a_update, b_update, a_reg, b_reg, ptr, sum) __builtin_pulp_mlsdotsup8_v3(a_update, b_update, a_reg, b_reg, ptr, sum) +#define MacLoad16(a_update, b_update, a_reg, b_reg, ptr, sum) __builtin_pulp_mlsdotsup16_v3(a_update, b_update, a_reg, b_reg, ptr, sum) +#define MacLoads4(a_update, b_update, a_reg, b_reg, ptr, sum) __builtin_pulp_mlsdotsp4_v3(a_update, b_update, a_reg, b_reg, ptr, sum) +#define MacLoads8(a_update, b_update, a_reg, b_reg, ptr, sum) __builtin_pulp_mlsdotsp8_v3(a_update, b_update, a_reg, b_reg, ptr, sum) +#define MacLoads16(a_update, b_update, a_reg, b_reg, ptr, sum) __builtin_pulp_mlsdotsp16_v3(a_update, b_update, a_reg, b_reg, ptr, sum) + +#define PACK_INT8_SIZE(x) (x) +#define PACK_INT4_SIZE(x) ((x) >> 1) +#define PACK_INT2_SIZE(x) ((x) >> 2) + +#define MemoryFence() asm volatile("":::"memory") + +#define LEGACY_MODE(x) asm volatile ("csrwi 0x010," x) +#define IVEC_FMT(x) asm volatile ("csrwi 0x00D," x) +#define MIXED_SKIP(x) asm volatile ("csrwi 0x00F," x) +#define A_ADDRESS(x) asm volatile ("csrw 0x100, %0" :: "r" (x)) +#define W_ADDRESS(x) asm volatile ("csrw 0x101, %0" :: "r" (x)) +#define A_STRIDE(x) asm volatile ("csrw 0x102, %0":: "r" (x)) +#define W_STRIDE(x) asm volatile ("csrw 0x103, %0":: "r" (x)) +#define A_ROLLBACK(x) asm volatile ("csrw 0x104, %0":: "r" (x)) +#define W_ROLLBACK(x) asm volatile ("csrw 0x105, %0":: "r" (x)) +#define A_SKIP(x) asm volatile ("csrwi 0x106," x) +#define W_SKIP(x) asm volatile ("csrwi 0x107," x) + +static uint8_t __attribute__((noinline)) pulp_nn_quant_u2 ( + int32_t phi, + int16_t m, + int8_t d + ) { + int32_t x = (m * phi) >> d; + uint8_t res = clip2(x); + return res; +} +static uint8_t __attribute__((noinline)) pulp_nn_bn_quant_u2 ( + int32_t phi, + int32_t k, + int32_t lambda, + int8_t d + ) { + int32_t integer_image_phi = (k * phi) + lambda; + int32_t x = (integer_image_phi) >> d; + uint8_t res = clip2(x); + return res; +} +static uint8_t __attribute__((noinline)) pulp_nn_add_quant_u2 ( + uint8_t pix1, + uint8_t pix2, + int16_t m1, + int16_t m2, + int8_t d + ) { + uint32_t integer_image = pix1*m1 + pix2*m2; + uint32_t x = (integer_image) >> d; + uint8_t res = clip2(x); + return res; +} + +static int8_t __attribute__((noinline)) pulp_nn_quant_i2 ( + int32_t phi, + int16_t m, + int8_t d + ) { + int32_t x = (m * phi) >> d; + int8_t res = clips2(x); + return res; +} +static int8_t __attribute__((noinline)) pulp_nn_bn_quant_i2 ( + int32_t phi, + int32_t k, + int32_t lambda, + int8_t d + ) { + int32_t integer_image_phi = (k * phi) + lambda; + int32_t x = (integer_image_phi) >> d; + int8_t res = clips2(x); + return res; +} +static int8_t __attribute__((noinline)) pulp_nn_add_quant_i2 ( + int8_t pix1, + int8_t pix2, + int16_t m1, + int16_t m2, + int8_t d + ) { + int32_t integer_image = pix1*m1 + pix2*m2; + int32_t x = (integer_image) >> d; + int8_t res = clips2(x); + return res; +} + +static uint8_t __attribute__((noinline)) pulp_nn_quant_u4 ( + int32_t phi, + int16_t m, + int8_t d + ) { + int32_t x = (m * phi) >> d; + uint8_t res = clip4(x); + return res; +} +static uint8_t __attribute__((noinline)) pulp_nn_bn_quant_u4 ( + int32_t phi, + int32_t k, + int32_t lambda, + int8_t d + ) { + int32_t integer_image_phi = (k * phi) + lambda; + int32_t x = (integer_image_phi) >> d; + uint8_t res = clip4(x); + return res; +} +static uint8_t __attribute__((noinline)) pulp_nn_add_quant_u4 ( + uint8_t pix1, + uint8_t pix2, + int16_t m1, + int16_t m2, + int8_t d + ) { + uint32_t integer_image = pix1*m1 + pix2*m2; + uint32_t x = (integer_image) >> d; + uint8_t res = clip4(x); + return res; +} + +static int8_t __attribute__((noinline)) pulp_nn_quant_i4 ( + int32_t phi, + int16_t m, + int8_t d + ) { + int32_t x = (m * phi) >> d; + int8_t res = clips4(x); + return res; +} +static int8_t __attribute__((noinline)) pulp_nn_bn_quant_i4 ( + int32_t phi, + int32_t k, + int32_t lambda, + int8_t d + ) { + int32_t integer_image_phi = (k * phi) + lambda; + int32_t x = (integer_image_phi) >> d; + int8_t res = clips4(x); + return res; +} +static int8_t __attribute__((noinline)) pulp_nn_add_quant_i4 ( + int8_t pix1, + int8_t pix2, + int16_t m1, + int16_t m2, + int8_t d + ) { + int32_t integer_image = pix1*m1 + pix2*m2; + int32_t x = (integer_image) >> d; + int8_t res = clips4(x); + return res; +} + +static uint8_t __attribute__((noinline)) pulp_nn_quant_u8 ( + int32_t phi, + int16_t m, + int8_t d + ) { + int32_t x = (m * phi) >> d; + uint8_t res = clip8(x); + return res; +} +static uint8_t __attribute__((noinline)) pulp_nn_bn_quant_u8 ( + int32_t phi, + int32_t k, + int32_t lambda, + int8_t d + ) { + int32_t integer_image_phi = (k * phi) + lambda; + int32_t x = (integer_image_phi) >> d; + uint8_t res = clip8(x); + return res; +} +static uint8_t __attribute__((noinline)) pulp_nn_add_quant_u8 ( + uint8_t pix1, + uint8_t pix2, + int16_t m1, + int16_t m2, + int8_t d + ) { + uint32_t integer_image = pix1*m1 + pix2*m2; + uint32_t x = (integer_image) >> d; + uint8_t res = clip8(x); + return res; +} + +static int8_t __attribute__((noinline)) pulp_nn_quant_i8 ( + int32_t phi, + int16_t m, + int8_t d + ) { + int32_t x = (m * phi) >> d; + int8_t res = clips8(x); + return res; +} +static int8_t __attribute__((noinline)) pulp_nn_bn_quant_i8 ( + int32_t phi, + int32_t k, + int32_t lambda, + int8_t d + ) { + int32_t integer_image_phi = (k * phi) + lambda; + int32_t x = (integer_image_phi) >> d; + int8_t res = clips8(x); + return res; +} +static int8_t __attribute__((noinline)) pulp_nn_add_quant_i8 ( + int8_t pix1, + int8_t pix2, + int16_t m1, + int16_t m2, + int8_t d + ) { + int32_t integer_image = pix1*m1 + pix2*m2; + int32_t x = (integer_image) >> d; + int8_t res = clips8(x); + return res; +} + + +static uint8_t __attribute__((noinline)) pulp_nn_u4_quant(int input, int16_t * pThr) +{ + if(input <= pThr[7] ) + { + if( input <= pThr[3]) + { + if( input <= pThr[1]) + { + if( input <= pThr[0]) + return 0; + else + return 1; + } + else + { + if( input <= pThr[2]) + return 2; + else + return 3; + } + } + else + { + if( input <= pThr[5]) + { + if( input <= pThr[4]) + return 4; + else + return 5; + } + else + { + if( input <= pThr[6]) + return 6; + else + return 7; + } + } + } + else + { + if( input <= pThr[11]) + { + if( input <= pThr[9]) + { + if( input <= pThr[8]) + return 8; + else + return 9; + } + else + { + if( input <= pThr[10]) + return 10; + else + return 11; + } + } + else + { + if( input <= pThr[13]) + { + if( input <= pThr[12]) + return 12; + else + return 13; + } + else + { + if( input <= pThr[14]) + return 14; + else + return 15; + } + } + } +} + +static uint8_t __attribute__((noinline)) pulp_nn_u2_quant(int input, int16_t * pThr) +{ + if( input <= pThr[1]) + { + if( input <= pThr[0]) + { + return 0; + } + else + { + return 1; + } + } + else + { + if( input <= pThr[2]) + { + return 2; + } + else + { + return 3; + } + } +} + +/* + * Common + */ + + +static v4s __attribute__((noinline)) pulp_nn_i4_to_i8_r( int8_t *pSrc) +{ + v4s Src = *((v4s*) pSrc); + int8_t bext1, bext2, bext3, bext4; + + bext1 = (int8_t) bitext((int) Src, 4, 0); + bext2 = (int8_t) bitext((int) Src, 4, 4); + bext3 = (int8_t) bitext((int) Src, 4, 8); + bext4 = (int8_t) bitext((int) Src, 4, 12); + v4s res = pack((int8_t) bext1, (int8_t) bext2, (int8_t) bext3, (int8_t) bext4); + + return res; +} + +static v4u __attribute__((noinline)) pulp_nn_u4_to_u8_r(uint8_t *pSrc) +{ + v4u Src = *((v4u*) pSrc); + uint8_t bext1, bext2, bext3, bext4; + + bext1 = (uint8_t) bitextu((unsigned int) Src, 4, 0); + bext2 = (uint8_t) bitextu((unsigned int) Src, 4, 4); + bext3 = (uint8_t) bitextu((unsigned int) Src, 4, 8); + bext4 = (uint8_t) bitextu((unsigned int) Src, 4, 12); + v4u res = pack((uint8_t) bext1, (uint8_t) bext2, (uint8_t) bext3, (uint8_t) bext4); + + return res; +} + +static v4s __attribute__((noinline)) pulp_nn_i2_to_i8_r( int8_t *pSrc) +{ + v4s Src = *((v4s*) pSrc); + int8_t bext1, bext2, bext3, bext4; + + bext1 = (int8_t) bitext((int) Src, 2, 0); + bext2 = (int8_t) bitext((int) Src, 2, 2); + bext3 = (int8_t) bitext((int) Src, 2, 4); + bext4 = (int8_t) bitext((int) Src, 2, 6); + v4s res = pack((int8_t) bext1, (int8_t) bext2, (int8_t) bext3, (int8_t) bext4); + + return res; +} + +static v4u __attribute__((noinline)) pulp_nn_u2_to_u8_r(uint8_t *pSrc) +{ + v4u Src = *((v4u*) pSrc); + uint8_t bext1, bext2, bext3, bext4; + + bext1 = (uint8_t) bitextu((unsigned int) Src, 2, 0); + bext2 = (uint8_t) bitextu((unsigned int) Src, 2, 2); + bext3 = (uint8_t) bitextu((unsigned int) Src, 2, 4); + bext4 = (uint8_t) bitextu((unsigned int) Src, 2, 6); + v4u res = pack((uint8_t) bext1, (uint8_t) bext2, (uint8_t) bext3, (uint8_t) bext4); + + return res; +} + +static v4s __attribute__((noinline)) pulp_nn_i2_to_i4_r(int8_t *pSrc) +{ + int8_t mask = 0xf0; + int8_t n_mask = ~ mask; + int8_t off = 0x04; + + v4s Src = *((v4s*) pSrc); + int8_t bext1, bext2, bext3, bext4; + int8_t out1, out2, out3, out4; + + bext1 = (int8_t) bitextu((int) Src, 2, 0); + bext2 = (int8_t) bitextu((int) Src, 2, 2); + bext3 = (int8_t) bitextu((int) Src, 2, 4); + bext4 = (int8_t) bitextu((int) Src, 2, 6); + + out1 = bitins(bext1, n_mask, bext2, mask, off); + out2 = bitins(bext3, n_mask, bext4, mask, off); + + bext1 = (int8_t) bitextu((int) Src, 2, 8); + bext2 = (int8_t) bitextu((int) Src, 2, 10); + bext3 = (int8_t) bitextu((int) Src, 2, 12); + bext4 = (int8_t) bitextu((int) Src, 2, 14); + + out3 = bitins(bext1, n_mask, bext2, mask, off); + out4 = bitins(bext3, n_mask, bext4, mask, off); + + v4s res = pack((int8_t) out1, (int8_t) out2, (int8_t) out3, (int8_t) out4); + + return res; +} + +static v4u __attribute__((noinline)) pulp_nn_u2_to_u4_r(uint8_t *pSrc) +{ + int8_t mask = 0xf0; + int8_t n_mask = ~ mask; + int8_t off = 0x04; + + v4u Src = *((v4u*) pSrc); + uint8_t bext1, bext2, bext3, bext4; + uint8_t out1, out2, out3, out4; + + bext1 = (uint8_t) bitextu((unsigned int) Src, 2, 0); + bext2 = (uint8_t) bitextu((unsigned int) Src, 2, 2); + bext3 = (uint8_t) bitextu((unsigned int) Src, 2, 4); + bext4 = (uint8_t) bitextu((unsigned int) Src, 2, 6); + + out1 = bitins(bext1, n_mask, bext2, mask, off); + out2 = bitins(bext3, n_mask, bext4, mask, off); + + bext1 = (uint8_t) bitextu((unsigned int) Src, 2, 8); + bext2 = (uint8_t) bitextu((unsigned int) Src, 2, 10); + bext3 = (uint8_t) bitextu((unsigned int) Src, 2, 12); + bext4 = (uint8_t) bitextu((unsigned int) Src, 2, 14); + + out3 = bitins(bext1, n_mask, bext2, mask, off); + out4 = bitins(bext3, n_mask, bext4, mask, off); + + v4u res = pack((uint8_t) out1, (uint8_t) out2, (uint8_t) out3, (uint8_t) out4); + + return res; +} + +static int8_t *__attribute__((always_inline)) pulp_nn_i4_to_i8( int8_t *pSrc, int8_t *pDst) +{ + v4s Src = *((v4s*) pSrc); + int8_t bext1, bext2, bext3, bext4; + + pSrc+=4; + + bext1 = (int8_t) bitext((int) Src, 4, 0); + bext2 = (int8_t) bitext((int) Src, 4, 4); + bext3 = (int8_t) bitext((int) Src, 4, 8); + bext4 = (int8_t) bitext((int) Src, 4, 12); + *((v4s*)pDst) = pack((int8_t) bext1, (int8_t) bext2, (int8_t) bext3, (int8_t) bext4); + MemoryFence(); + pDst+=4; + bext1 = (int8_t) bitext((int) Src, 4, 16); + bext2 = (int8_t) bitext((int) Src, 4, 20); + bext3 = (int8_t) bitext((int) Src, 4, 24); + bext4 = (int8_t) bitext((int) Src, 4, 28); + *((v4s*)pDst) = pack((int8_t) bext1, (int8_t) bext2, (int8_t) bext3, (int8_t) bext4); + + return pSrc; +} + +static uint8_t *__attribute__((always_inline)) pulp_nn_u4_to_u8(uint8_t *pSrc, uint8_t *pDst) +{ + v4u Src = *((v4u*) pSrc); + uint8_t bext1, bext2, bext3, bext4; + + pSrc+=4; + + bext1 = (uint8_t) bitextu((unsigned int) Src, 4, 0); + bext2 = (uint8_t) bitextu((unsigned int) Src, 4, 4); + bext3 = (uint8_t) bitextu((unsigned int) Src, 4, 8); + bext4 = (uint8_t) bitextu((unsigned int) Src, 4, 12); + *((v4u*)pDst) = pack((uint8_t) bext1, (uint8_t) bext2, (uint8_t) bext3, (uint8_t) bext4); + MemoryFence(); + pDst+=4; + bext1 = (uint8_t) bitextu((unsigned int) Src, 4, 16); + bext2 = (uint8_t) bitextu((unsigned int) Src, 4, 20); + bext3 = (uint8_t) bitextu((unsigned int) Src, 4, 24); + bext4 = (uint8_t) bitextu((unsigned int) Src, 4, 28); + *((v4u*)pDst) = pack((uint8_t) bext1, (uint8_t) bext2, (uint8_t) bext3, (uint8_t) bext4); + + return pSrc; +} + +static int8_t *__attribute__((always_inline)) pulp_nn_i2_to_i8( int8_t * pSrc, int8_t * pDst) +{ + v4s Src = *((v4s*) pSrc); + int8_t bext1, bext2, bext3, bext4; + + pSrc+=4; + + bext1 = (int8_t) bitext((int) Src, 2, 0); + bext2 = (int8_t) bitext((int) Src, 2, 2); + bext3 = (int8_t) bitext((int) Src, 2, 4); + bext4 = (int8_t) bitext((int) Src, 2, 6); + *((v4s*)pDst) = pack((int8_t) bext1, (int8_t) bext2, (int8_t) bext3, (int8_t) bext4); + MemoryFence(); + pDst+=4; + bext1 = (int8_t) bitext((int) Src, 2, 8); + bext2 = (int8_t) bitext((int) Src, 2, 10); + bext3 = (int8_t) bitext((int) Src, 2, 12); + bext4 = (int8_t) bitext((int) Src, 2, 14); + *((v4s*)pDst) = pack((int8_t) bext1, (int8_t) bext2, (int8_t) bext3, (int8_t) bext4); + MemoryFence(); + pDst+=4; + bext1 = (int8_t) bitext((int) Src, 2, 16); + bext2 = (int8_t) bitext((int) Src, 2, 18); + bext3 = (int8_t) bitext((int) Src, 2, 20); + bext4 = (int8_t) bitext((int) Src, 2, 22); + *((v4s*)pDst) = pack((int8_t) bext1, (int8_t) bext2, (int8_t) bext3, (int8_t) bext4); + MemoryFence(); + pDst+=4; + bext1 = (int8_t) bitext((int) Src, 2, 24); + bext2 = (int8_t) bitext((int) Src, 2, 26); + bext3 = (int8_t) bitext((int) Src, 2, 28); + bext4 = (int8_t) bitext((int) Src, 2, 30); + *((v4s*)pDst) = pack((int8_t) bext1, (int8_t) bext2, (int8_t) bext3, (int8_t) bext4); + + return pSrc; +} + +static uint8_t *__attribute__((always_inline)) pulp_nn_u2_to_u8(uint8_t * pSrc, uint8_t * pDst) +{ + v4u Src = *((v4u*) pSrc); + uint8_t bext1, bext2, bext3, bext4; + + pSrc+=4; + + bext1 = (uint8_t) bitextu((unsigned int) Src, 2, 0); + bext2 = (uint8_t) bitextu((unsigned int) Src, 2, 2); + bext3 = (uint8_t) bitextu((unsigned int) Src, 2, 4); + bext4 = (uint8_t) bitextu((unsigned int) Src, 2, 6); + *((v4u*)pDst) = pack((uint8_t) bext1, (uint8_t) bext2, (uint8_t) bext3, (uint8_t) bext4); + MemoryFence(); + pDst+=4; + bext1 = (uint8_t) bitextu((unsigned int) Src, 2, 8); + bext2 = (uint8_t) bitextu((unsigned int) Src, 2, 10); + bext3 = (uint8_t) bitextu((unsigned int) Src, 2, 12); + bext4 = (uint8_t) bitextu((unsigned int) Src, 2, 14); + *((v4u*)pDst) = pack((uint8_t) bext1, (uint8_t) bext2, (uint8_t) bext3, (uint8_t) bext4); + MemoryFence(); + pDst+=4; + bext1 = (uint8_t) bitextu((unsigned int) Src, 2, 16); + bext2 = (uint8_t) bitextu((unsigned int) Src, 2, 18); + bext3 = (uint8_t) bitextu((unsigned int) Src, 2, 20); + bext4 = (uint8_t) bitextu((unsigned int) Src, 2, 22); + *((v4u*)pDst) = pack((uint8_t) bext1, (uint8_t) bext2, (uint8_t) bext3, (uint8_t) bext4); + MemoryFence(); + pDst+=4; + bext1 = (uint8_t) bitextu((unsigned int) Src, 2, 24); + bext2 = (uint8_t) bitextu((unsigned int) Src, 2, 26); + bext3 = (uint8_t) bitextu((unsigned int) Src, 2, 28); + bext4 = (uint8_t) bitextu((unsigned int) Src, 2, 30); + *((v4u*)pDst) = pack((uint8_t) bext1, (uint8_t) bext2, (uint8_t) bext3, (uint8_t) bext4); + + return pSrc; +} + +static int8_t *__attribute__((always_inline)) pulp_nn_i2_to_i4( int8_t * pSrc, int8_t * pDst) +{ + int8_t mask = 0xf0; + int8_t n_mask = ~ mask; + int8_t off = 0x04; + + v4s Src = *((v4s*) pSrc); + int8_t bext1, bext2, bext3, bext4; + int8_t out1, out2, out3, out4; + + pSrc+=4; + + bext1 = (int8_t) bitext((int) Src, 2, 0); + bext2 = (int8_t) bitext((int) Src, 2, 2); + bext3 = (int8_t) bitext((int) Src, 2, 4); + bext4 = (int8_t) bitext((int) Src, 2, 6); + + out1 = bitins(bext1, n_mask, bext2, mask, off); + out2 = bitins(bext3, n_mask, bext4, mask, off); + MemoryFence(); + + bext1 = (int8_t) bitext((int) Src, 2, 8); + bext2 = (int8_t) bitext((int) Src, 2, 10); + bext3 = (int8_t) bitext((int) Src, 2, 12); + bext4 = (int8_t) bitext((int) Src, 2, 14); + + out3 = bitins(bext1, n_mask, bext2, mask, off); + out4 = bitins(bext3, n_mask, bext4, mask, off); + + *((v4s*)pDst) = pack((int8_t) out1, (int8_t) out2, (int8_t) out3, (int8_t) out4); + MemoryFence(); + + pDst+=4; + bext1 = (int8_t) bitext((int) Src, 2, 16); + bext2 = (int8_t) bitext((int) Src, 2, 18); + bext3 = (int8_t) bitext((int) Src, 2, 20); + bext4 = (int8_t) bitext((int) Src, 2, 22); + + out1 = bitins(bext1, n_mask, bext2, mask, off); + out2 = bitins(bext3, n_mask, bext4, mask, off); + MemoryFence(); + + bext1 = (int8_t) bitext((int) Src, 2, 24); + bext2 = (int8_t) bitext((int) Src, 2, 26); + bext3 = (int8_t) bitext((int) Src, 2, 28); + bext4 = (int8_t) bitext((int) Src, 2, 30); + + out3 = bitins(bext1, n_mask, bext2, mask, off); + out4 = bitins(bext3, n_mask, bext4, mask, off); + + *((v4s*)pDst) = pack((int8_t) out1, (int8_t) out2, (int8_t) out3, (int8_t) out4); + + return pSrc; +} + +static uint8_t *__attribute__((always_inline)) pulp_nn_u2_to_u4( uint8_t * pSrc, uint8_t * pDst) +{ + int8_t mask = 0xf0; + int8_t n_mask = ~ mask; + int8_t off = 0x04; + + v4u Src = *((v4u*) pSrc); + uint8_t bext1, bext2, bext3, bext4; + uint8_t out1, out2, out3, out4; + + pSrc+=4; + + bext1 = (uint8_t) bitextu((unsigned int) Src, 2, 0); + bext2 = (uint8_t) bitextu((unsigned int) Src, 2, 2); + bext3 = (uint8_t) bitextu((unsigned int) Src, 2, 4); + bext4 = (uint8_t) bitextu((unsigned int) Src, 2, 6); + + out1 = bitins(bext1, n_mask, bext2, mask, off); + out2 = bitins(bext3, n_mask, bext4, mask, off); + MemoryFence(); + + bext1 = (uint8_t) bitextu((unsigned int) Src, 2, 8); + bext2 = (uint8_t) bitextu((unsigned int) Src, 2, 10); + bext3 = (uint8_t) bitextu((unsigned int) Src, 2, 12); + bext4 = (uint8_t) bitextu((unsigned int) Src, 2, 14); + + out3 = bitins(bext1, n_mask, bext2, mask, off); + out4 = bitins(bext3, n_mask, bext4, mask, off); + + *((v4u*)pDst) = pack((uint8_t) out1, (uint8_t) out2, (uint8_t) out3, (uint8_t) out4); + MemoryFence(); + + pDst+=4; + bext1 = (uint8_t) bitextu((unsigned int) Src, 2, 16); + bext2 = (uint8_t) bitextu((unsigned int) Src, 2, 18); + bext3 = (uint8_t) bitextu((unsigned int) Src, 2, 20); + bext4 = (uint8_t) bitextu((unsigned int) Src, 2, 22); + + out1 = bitins(bext1, n_mask, bext2, mask, off); + out2 = bitins(bext3, n_mask, bext4, mask, off); + MemoryFence(); + + bext1 = (uint8_t) bitextu((unsigned int) Src, 2, 24); + bext2 = (uint8_t) bitextu((unsigned int) Src, 2, 26); + bext3 = (uint8_t) bitextu((unsigned int) Src, 2, 28); + bext4 = (uint8_t) bitextu((unsigned int) Src, 2, 30); + + out3 = bitins(bext1, n_mask, bext2, mask, off); + out4 = bitins(bext3, n_mask, bext4, mask, off); + + *((v4u*)pDst) = pack((uint8_t) out1, (uint8_t) out2, (uint8_t) out3, (uint8_t) out4); + + return pSrc; +} + +/* + * XpulpV2 + */ + +static void __attribute__((noinline)) pulp_zero_mem(uint8_t * pBuffer, unsigned int size) +{ + int lfover = size &0x3; + for (int i=0; i<(size>>2); i++) + { + *((v4u *)pBuffer) = (v4u){0,0,0,0}; + MemoryFence(); + pBuffer+=4; + } + while(lfover) + { + *pBuffer++=0; + lfover--; + } +} + +static void __attribute__((noinline)) pulp_nn_im2col_u2_to_u8(uint8_t * pInput, uint8_t * pOutput, unsigned int blockSize) +{ + unsigned int blkCnt = blockSize >> 4u; + int lfover = blockSize & 0x0f; + for (int i = 0; i> 4u; + int lfover = blockSize & 0x0f; + for (int i = 0; i> 3u; + int lfover = blockSize & 0x07; + for (int i = 0; i> 3u; + int lfover = blockSize & 0x07; + for (int i = 0; i> 2u; + int lfover = blockSize & 0x03; + for (int i = 0; i> 2u; + int lfover = blockSize & 0x03; + for (int i = 0; i> 4u; + int lfover = blockSize & 0x0f; + for (int i = 0; i> 4u; + int lfover = blockSize & 0x0f; + for (int i = 0; i> 4u; + int lfover = blockSize & 0x0f; + for (int i = 0; i> 4u; + int lfover = blockSize & 0x0f; + for (int i = 0; i> 4u; + int lfover = blockSize & 0x0f; + for (int i = 0; i> 4u; + int lfover = blockSize & 0x0f; + for (int i = 0; i> 3u; + int lfover = blockSize & 0x07; + for (int i = 0; i> 3u; + int lfover = blockSize & 0x07; + for (int i = 0; i> 3u; + int lfover = blockSize & 0x07; + for (int i = 0; i> 3u; + int lfover = blockSize & 0x07; + for (int i = 0; i> 2u; + int lfover = blockSize & 0x03; + for (int i = 0; i> 2u; + int lfover = blockSize & 0x03; + for (int i = 0; i> 2; + + while(cnt > 0u) + { + inp = *((v4u*)pIn); + com = *((v4u*)pCom); + + *((v4u*)pIn) = max4(inp, com); + + pCom+=4; + pIn+=4; + cnt--; + } + + int left = length & 0x3; + while (left>0u) + { + if(*pIn<*pCom) + *pIn=*pCom; + + pIn++; + pCom++; + left--; + } +} + +static void __attribute__((noinline)) pulp_nn_compare_and_replace_if_larger_i8( + int8_t * base, int8_t * target, uint16_t length) { + int8_t *pIn = base; + int8_t *pCom = target; + v4s inp; + v4s com; + int cnt = length >> 2; + + while (cnt > 0u) { + inp = *((v4s *)pIn); + com = *((v4s *)pCom); + + *((v4s *)pIn) = maxs4(inp, com); + + pCom += 4; + pIn += 4; + cnt--; + } + + int left = length & 0x3; + while (left > 0u) { + if (*pIn < *pCom) + *pIn = *pCom; + + pIn++; + pCom++; + left--; + } +} + +static void __attribute__((noinline)) pulp_nn_avg_and_replace_u8(uint8_t * base, + uint8_t * target, + uint16_t length) +{ + uint8_t *pIn = base; + uint8_t *pCom = target; + + while (length>0u) + { + *pIn = ((*pIn + *pCom) >> 1); + + pIn++; + pCom++; + length--; + } +} + +static void __attribute__((noinline)) pulp_nn_compare_and_replace_if_larger_u4(uint8_t * base, + uint8_t * target, + uint16_t length) +{ + int8_t mask = 0xf0; + int8_t n_mask = ~ mask; + int8_t off = 0x04; + + uint8_t *pIn = base; + uint8_t *pCom = target; + v4u inp[2]; + v4u com[2]; + uint8_t *out; + int cnt = length >> 2; + + while(cnt > 0u) + { + pulp_nn_u4_to_u8(pIn, (uint8_t *)inp); + pulp_nn_u4_to_u8(pCom, (uint8_t *)com); + + *((v4u *)out) = max4(inp[0], com[0]); + + *((uint8_t*)pIn) = bitins(*out, n_mask, *(out + 1), mask, off); + pIn++; + *((uint8_t*)pIn) = bitins(*(out + 2), n_mask, *(out + 3), mask, off); + pIn++; + + *((v4u *)out) = max4(inp[1], com[1]); + + *((uint8_t*)pIn) = bitins(*out, n_mask, *(out + 1), mask, off); + pIn++; + *((uint8_t*)pIn) = bitins(*(out + 2), n_mask, *(out + 3), mask, off); + pIn++; + + pCom+=4; + cnt--; + } + + int left = length & 0x3; + while (left>0u) + { + uint8_t inA0 = (uint8_t) bitextu((unsigned int) *pIn, 4, 0); + uint8_t inA1 = (uint8_t) bitextu((unsigned int) *pIn, 4, 4); + uint8_t inB0 = (uint8_t) bitextu((unsigned int) *pCom, 4, 0); + uint8_t inB1 = (uint8_t) bitextu((unsigned int) *pCom, 4, 4); + + if(inA0> 2; + + while(cnt > 0u) + { + pulp_nn_i4_to_i8(pIn, (int8_t *)inp); + pulp_nn_i4_to_i8(pCom, (int8_t *)com); + + *((v4s *)out) = maxs4(inp[0], com[0]); + + *((int8_t*)pIn) = bitins(*out, n_mask, *(out + 1), mask, off); + pIn++; + *((int8_t*)pIn) = bitins(*(out + 2), n_mask, *(out + 3), mask, off); + pIn++; + + *((v4s *)out) = maxs4(inp[1], com[1]); + + *((int8_t*)pIn) = bitins(*out, n_mask, *(out + 1), mask, off); + pIn++; + *((int8_t*)pIn) = bitins(*(out + 2), n_mask, *(out + 3), mask, off); + pIn++; + + pCom+=4; + cnt--; + } + + int left = length & 0x3; + while (left>0u) + { + int8_t inA0 = (int8_t) bitext((int) *pIn, 4, 0); + int8_t inA1 = (int8_t) bitext((int) *pIn, 4, 4); + int8_t inB0 = (int8_t) bitext((int) *pCom, 4, 0); + int8_t inB1 = (int8_t) bitext((int) *pCom, 4, 4); + + if(inA00u) + { + uint8_t inA0 = (uint8_t) bitextu((unsigned int) *pIn, 4, 0); + uint8_t inA1 = (uint8_t) bitextu((unsigned int) *pIn, 4, 4); + uint8_t inB0 = (uint8_t) bitextu((unsigned int) *pCom, 4, 0); + uint8_t inB1 = (uint8_t) bitextu((unsigned int) *pCom, 4, 4); + + inA0 = ((inA0 + inB0) >> 1); + inA1 = ((inA1 + inB1) >> 1); + + *((uint8_t*)pIn) = bitins(inA0, n_mask, inA1, mask, off); + + pIn++; + pCom++; + length--; + } +} + +static void __attribute__((noinline)) pulp_nn_compare_and_replace_if_larger_u2(uint8_t * base, + uint8_t * target, + uint16_t length) +{ + int8_t mask2 = 0x0c; + int8_t n_mask2 = ~ mask2; + int8_t mask4 = 0x30; + int8_t n_mask4 = ~ mask4; + int8_t mask6 = 0xc0; + int8_t n_mask6 = ~ mask6; + int8_t off2 = 2; + int8_t off4 = 4; + int8_t off6 = 6; + + uint8_t *pIn = base; + uint8_t *pCom = target; + v4u inp[4]; + v4u com[4]; + uint8_t *out; + int cnt = length >> 2; + + while(cnt > 0u) + { + pulp_nn_u2_to_u8(pIn, inp); + pulp_nn_u2_to_u8(pCom, com); + + *((v4u*)out) = max4(inp[0], com[0]); + + uint8_t inA = (uint8_t) bitins(*out, n_mask2, *(out + 1), mask2, off2); + inA = bitins(inA, n_mask4, *(out + 2), mask4, off4); + *((uint8_t*)pIn) = bitins(inA, n_mask6, *(out + 3), mask6, off6); + pIn++; + + *((v4u*)out) = max4(inp[1], com[1]); + + inA = (uint8_t) bitins(*out, n_mask2, *(out + 1), mask2, off2); + inA = bitins(inA, n_mask4, *(out + 2), mask4, off4); + *((uint8_t*)pIn) = bitins(inA, n_mask6, *(out + 3), mask6, off6); + pIn++; + + *((v4u*)out) = max4(inp[2], com[2]); + + inA = (uint8_t) bitins(*out, n_mask2, *(out + 1), mask2, off2); + inA = bitins(inA, n_mask4, *(out + 2), mask4, off4); + *((uint8_t*)pIn) = bitins(inA, n_mask6, *(out + 3), mask6, off6); + pIn++; + + *((v4u*)out) = max4(inp[3], com[3]); + + inA = (uint8_t) bitins(*out, n_mask2, *(out + 1), mask2, off2); + inA = bitins(inA, n_mask4, *(out + 2), mask4, off4); + *((uint8_t*)pIn) = bitins(inA, n_mask6, *(out + 3), mask6, off6); + pIn++; + + pCom+=4; + cnt--; + } + + int left = length & 0x3; + while (left>0u) + { + uint8_t inA0 = (uint8_t) bitextu((unsigned int) *pIn, 2, 0); + uint8_t inA1 = (uint8_t) bitextu((unsigned int) *pIn, 2, 2); + uint8_t inA2 = (uint8_t) bitextu((unsigned int) *pIn, 2, 4); + uint8_t inA3 = (uint8_t) bitextu((unsigned int) *pIn, 2, 6); + v4u inA4 = pack((uint8_t) inA0, (uint8_t) inA1, (uint8_t) inA2, (uint8_t) inA3); + uint8_t inB0 = (uint8_t) bitextu((unsigned int) *pCom, 2, 0); + uint8_t inB1 = (uint8_t) bitextu((unsigned int) *pCom, 2, 2); + uint8_t inB2 = (uint8_t) bitextu((unsigned int) *pCom, 2, 4); + uint8_t inB3 = (uint8_t) bitextu((unsigned int) *pCom, 2, 6); + v4u inB4 = pack((uint8_t) inB0, (uint8_t) inB1, (uint8_t) inB2, (uint8_t) inB3); + + *((v4u*)out) = max4(inA4, inB4); + + uint8_t inA = (uint8_t) bitins(*out, n_mask2, *(out + 1), mask2, off2); + inA = bitins(inA, n_mask4, *(out + 2), mask4, off4); + *((uint8_t*)pIn) = bitins(inA, n_mask6, *(out + 3), mask6, off6); + + pIn++; + pCom++; + left--; + } +} + + +static void __attribute__((noinline)) pulp_nn_compare_and_replace_if_larger_i2(int8_t * base, + int8_t * target, + uint16_t length) +{ + int8_t mask2 = 0x0c; + int8_t n_mask2 = ~ mask2; + int8_t mask4 = 0x30; + int8_t n_mask4 = ~ mask4; + int8_t mask6 = 0xc0; + int8_t n_mask6 = ~ mask6; + int8_t off2 = 2; + int8_t off4 = 4; + int8_t off6 = 6; + + int8_t *pIn = base; + int8_t *pCom = target; + v4s inp[4]; + v4s com[4]; + int8_t *out; + int cnt = length >> 2; + + while(cnt > 0u) + { + pulp_nn_i2_to_i8(pIn, inp); + pulp_nn_i2_to_i8(pCom, com); + + *((v4s*)out) = maxs4(inp[0], com[0]); + + int8_t inA = (int8_t) bitins(*out, n_mask2, *(out + 1), mask2, off2); + inA = bitins(inA, n_mask4, *(out + 2), mask4, off4); + *((int8_t*)pIn) = bitins(inA, n_mask6, *(out + 3), mask6, off6); + pIn++; + + *((v4s*)out) = maxs4(inp[1], com[1]); + + inA = (int8_t) bitins(*out, n_mask2, *(out + 1), mask2, off2); + inA = bitins(inA, n_mask4, *(out + 2), mask4, off4); + *((int8_t*)pIn) = bitins(inA, n_mask6, *(out + 3), mask6, off6); + pIn++; + + *((v4s*)out) = maxs4(inp[2], com[2]); + + inA = (int8_t) bitins(*out, n_mask2, *(out + 1), mask2, off2); + inA = bitins(inA, n_mask4, *(out + 2), mask4, off4); + *((int8_t*)pIn) = bitins(inA, n_mask6, *(out + 3), mask6, off6); + pIn++; + + *((v4s*)out) = maxs4(inp[3], com[3]); + + inA = (int8_t) bitins(*out, n_mask2, *(out + 1), mask2, off2); + inA = bitins(inA, n_mask4, *(out + 2), mask4, off4); + *((int8_t*)pIn) = bitins(inA, n_mask6, *(out + 3), mask6, off6); + pIn++; + + pCom+=4; + cnt--; + } + + int left = length & 0x3; + while (left>0u) + { + int8_t inA0 = (int8_t) bitext((unsigned int) *pIn, 2, 0); + int8_t inA1 = (int8_t) bitext((unsigned int) *pIn, 2, 2); + int8_t inA2 = (int8_t) bitext((unsigned int) *pIn, 2, 4); + int8_t inA3 = (int8_t) bitext((unsigned int) *pIn, 2, 6); + v4s inA4 = pack((int8_t) inA0, (int8_t) inA1, (int8_t) inA2, (int8_t) inA3); + int8_t inB0 = (int8_t) bitext((unsigned int) *pCom, 2, 0); + int8_t inB1 = (int8_t) bitext((unsigned int) *pCom, 2, 2); + int8_t inB2 = (int8_t) bitext((unsigned int) *pCom, 2, 4); + int8_t inB3 = (int8_t) bitext((unsigned int) *pCom, 2, 6); + v4s inB4 = pack((int8_t) inB0, (int8_t) inB1, (int8_t) inB2, (int8_t) inB3); + + *((v4s*)out) = maxs4(inA4, inB4); + + int8_t inA = (int8_t) bitins(*out, n_mask2, *(out + 1), mask2, off2); + inA = bitins(inA, n_mask4, *(out + 2), mask4, off4); + *((int8_t*)pIn) = bitins(inA, n_mask6, *(out + 3), mask6, off6); + + pIn++; + pCom++; + left--; + } +} + +static void __attribute__((noinline)) pulp_nn_avg_and_replace_u2(uint8_t * base, + uint8_t * target, + uint16_t length) +{ + int8_t mask2 = 0x0c; + int8_t n_mask2 = ~ mask2; + int8_t mask4 = 0x30; + int8_t n_mask4 = ~ mask4; + int8_t mask6 = 0xc0; + int8_t n_mask6 = ~ mask6; + int8_t off2 = 2; + int8_t off4 = 4; + int8_t off6 = 6; + + uint8_t *pIn = base; + uint8_t *pCom = target; + + while (length>0u) + { + uint8_t inA0 = (uint8_t) bitextu((unsigned int) *pIn, 2, 0); + uint8_t inA1 = (uint8_t) bitextu((unsigned int) *pIn, 2, 2); + uint8_t inA2 = (uint8_t) bitextu((unsigned int) *pIn, 2, 4); + uint8_t inA3 = (uint8_t) bitextu((unsigned int) *pIn, 2, 6); + + uint8_t inB0 = (uint8_t) bitextu((unsigned int) *pCom, 2, 0); + uint8_t inB1 = (uint8_t) bitextu((unsigned int) *pCom, 2, 2); + uint8_t inB2 = (uint8_t) bitextu((unsigned int) *pCom, 2, 4); + uint8_t inB3 = (uint8_t) bitextu((unsigned int) *pCom, 2, 6); + + inA0 = ((inA0 + inB0) >> 1); + inA1 = ((inA1 + inB1) >> 1); + inA2 = ((inA2 + inB2) >> 1); + inA3 = ((inA3 + inB3) >> 1); + + uint8_t inA = (uint8_t) bitins(inA0, n_mask2, inA1, mask2, off2); + inA = bitins(inA, n_mask4, inA2, mask4, off4); + *((uint8_t*)pIn) = bitins(inA, n_mask6, inA3, mask6, off6); + + pIn++; + pCom++; + length--; + } +} + +/* + * XpulpNN + */ + +static void __attribute__((noinline)) xpulp_nn_zero_mem_u8(uint8_t * pBuffer, unsigned int size) +{ + int lfover = size &0x3; + for (int i=0; i<(size>>2); i++) + { + *((v4u *)pBuffer) = (v4u){0,0,0,0}; + MemoryFence(); + pBuffer+=4; + } + while(lfover) + { + *pBuffer++=0; + lfover--; + } +} + +static void __attribute__((noinline)) xpulp_nn_zero_mem_u4(uint8_t * pBuffer, unsigned int size) +{ + int lfover = size &0x7; + for (int i=0; i<(size>>3); i++) + { + *((v4u *)pBuffer) = (v4u){0,0,0,0}; + MemoryFence(); + pBuffer+=4; + } + while(lfover) + { + *pBuffer++=0; + lfover-=2; + } +} + +static void __attribute__((noinline)) xpulp_nn_zero_mem_u2(uint8_t * pBuffer, unsigned int size) +{ + int lfover = size &0xf; + for (int i=0; i<(size>>4); i++) + { + *((v4u *)pBuffer) = (v4u){0,0,0,0}; + MemoryFence(); + pBuffer+=4; + } + while(lfover) + { + *pBuffer++=0; + lfover-=4; + } +} + + +static void __attribute__((noinline)) xpulp_nn_compare_and_replace_if_larger_u4(uint8_t * base, + uint8_t * target, + uint16_t length) +{ + int8_t mask = 0xf0; + int8_t n_mask = ~ mask; + int8_t off = 0x04; + + uint8_t *pIn = base; + uint8_t *pCom = target; + + int cnt = length >> 2; + + while(cnt > 0u) + { + *((uint32_t *)pIn) = max8(*((uint32_t *)pIn), *((uint32_t *)pCom)); + + pIn+=4; + pCom+=4; + + cnt--; + } + + int left = length & 0x3; + while (left>0u) + { + uint8_t inA0 = (uint8_t) bitextu((unsigned int) *pIn, 4, 0); + uint8_t inA1 = (uint8_t) bitextu((unsigned int) *pIn, 4, 4); + uint8_t inB0 = (uint8_t) bitextu((unsigned int) *pCom, 4, 0); + uint8_t inB1 = (uint8_t) bitextu((unsigned int) *pCom, 4, 4); + + if(inA0> 2; + + while (cnt > 0u) { + *((int32_t *)pIn) = maxs8(*((int32_t *)pIn), *((int32_t *)pCom)); + + pIn += 4; + pCom += 4; + + cnt--; + } + + int left = length & 0x3; + while (left > 0u) { + int8_t inA0 = (int8_t)bitext((int)*pIn, 4, 0); + int8_t inA1 = (int8_t)bitext((int)*pIn, 4, 4); + int8_t inB0 = (int8_t)bitext((int)*pCom, 4, 0); + int8_t inB1 = (int8_t)bitext((int)*pCom, 4, 4); + + if (inA0 < inB0) + inA0 = inB0; + + if (inA1 < inB1) + inA1 = inB1; + + *((int8_t *)pIn) = bitins(inA0, n_mask, inA1, mask, off); + + pIn++; + pCom++; + left--; + } +} + +static void __attribute__((noinline)) xpulp_nn_avg_and_replace_u4(uint8_t * base, + uint8_t * target, + uint16_t length) +{ + int8_t mask = 0xf0; + int8_t n_mask = ~ mask; + int8_t off = 0x04; + + uint8_t *pIn = base; + uint8_t *pCom = target; + + int cnt = length >> 2; + + while (cnt > 0u) + { + *((uint32_t *)pIn) = avg8(*((uint32_t *)pIn), *((uint32_t *)pCom)); + + pIn+=4; + pCom+=4; + cnt--; + } + + int left = length & 0x3; + + while (left>0u) + { + uint8_t inA0 = (uint8_t) bitextu((unsigned int) *pIn, 4, 0); + uint8_t inA1 = (uint8_t) bitextu((unsigned int) *pIn, 4, 4); + uint8_t inB0 = (uint8_t) bitextu((unsigned int) *pCom, 4, 0); + uint8_t inB1 = (uint8_t) bitextu((unsigned int) *pCom, 4, 4); + + inA0 = ((inA0 + inB0) >> 1); + inA1 = ((inA1 + inB1) >> 1); + + *((uint8_t*)pIn) = bitins(inA0, n_mask, inA1, mask, off); + + pIn++; + pCom++; + length--; + } +} + +static void __attribute__((noinline)) xpulp_nn_compare_and_replace_if_larger_u2(uint8_t * base, + uint8_t * target, + uint16_t length) +{ + int8_t mask2 = 0x0c; + int8_t n_mask2 = ~ mask2; + int8_t mask4 = 0x30; + int8_t n_mask4 = ~ mask4; + int8_t mask6 = 0xc0; + int8_t n_mask6 = ~ mask6; + int8_t off2 = 2; + int8_t off4 = 4; + int8_t off6 = 6; + + uint8_t *pIn = base; + uint8_t *pCom = target; + uint8_t *out; + + int cnt = length >> 2; + + while(cnt > 0u) + { + *((uint32_t *)pIn) = max16(*((uint32_t *)pIn), *((uint32_t *)pCom)); + + pIn+=4; + pCom+=4; + cnt--; + } + + int left = length & 0x3; + while (left>0u) + { + uint8_t inA0 = (uint8_t) bitextu((unsigned int) *pIn, 2, 0); + uint8_t inA1 = (uint8_t) bitextu((unsigned int) *pIn, 2, 2); + uint8_t inA2 = (uint8_t) bitextu((unsigned int) *pIn, 2, 4); + uint8_t inA3 = (uint8_t) bitextu((unsigned int) *pIn, 2, 6); + v4u inA4 = pack((uint8_t) inA0, (uint8_t) inA1, (uint8_t) inA2, (uint8_t) inA3); + uint8_t inB0 = (uint8_t) bitextu((unsigned int) *pCom, 2, 0); + uint8_t inB1 = (uint8_t) bitextu((unsigned int) *pCom, 2, 2); + uint8_t inB2 = (uint8_t) bitextu((unsigned int) *pCom, 2, 4); + uint8_t inB3 = (uint8_t) bitextu((unsigned int) *pCom, 2, 6); + v4u inB4 = pack((uint8_t) inB0, (uint8_t) inB1, (uint8_t) inB2, (uint8_t) inB3); + + *((v4u*)out) = max4(inA4, inB4); + + uint8_t inA = (uint8_t) bitins(*out, n_mask2, *(out + 1), mask2, off2); + inA = bitins(inA, n_mask4, *(out + 2), mask4, off4); + *((uint8_t*)pIn) = bitins(inA, n_mask6, *(out + 3), mask6, off6); + + pIn++; + pCom++; + left--; + } +} +static void __attribute__((noinline)) xpulp_nn_compare_and_replace_if_larger_i2(int8_t * base, + int8_t * target, + uint16_t length) +{ + int8_t mask2 = 0x0c; + int8_t n_mask2 = ~ mask2; + int8_t mask4 = 0x30; + int8_t n_mask4 = ~ mask4; + int8_t mask6 = 0xc0; + int8_t n_mask6 = ~ mask6; + int8_t off2 = 2; + int8_t off4 = 4; + int8_t off6 = 6; + + int8_t *pIn = base; + int8_t *pCom = target; + int8_t *out; + + int cnt = length >> 2; + + while(cnt > 0u) + { + *((int32_t *)pIn) = maxs16(*((int32_t *)pIn), *((int32_t *)pCom)); + + pIn+=4; + pCom+=4; + cnt--; + } + + int left = length & 0x3; + while (left>0u) + { + int8_t inA0 = (int8_t) bitext((int) *pIn, 2, 0); + int8_t inA1 = (int8_t) bitext((int) *pIn, 2, 2); + int8_t inA2 = (int8_t) bitext((int) *pIn, 2, 4); + int8_t inA3 = (int8_t) bitext((int) *pIn, 2, 6); + v4s inA4 = pack((int8_t) inA0, (int8_t) inA1, (int8_t) inA2, (int8_t) inA3); + int8_t inB0 = (int8_t) bitext((int) *pCom, 2, 0); + int8_t inB1 = (int8_t) bitext((int) *pCom, 2, 2); + int8_t inB2 = (int8_t) bitext((int) *pCom, 2, 4); + int8_t inB3 = (int8_t) bitext((int) *pCom, 2, 6); + v4s inB4 = pack((int8_t) inB0, (int8_t) inB1, (int8_t) inB2, (int8_t) inB3); + + *((v4s*)out) = maxs4(inA4, inB4); + + int8_t inA = (int8_t) bitins(*out, n_mask2, *(out + 1), mask2, off2); + inA = bitins(inA, n_mask4, *(out + 2), mask4, off4); + *((int8_t*)pIn) = bitins(inA, n_mask6, *(out + 3), mask6, off6); + + pIn++; + pCom++; + left--; + } +} + +static void __attribute__((noinline)) xpulp_nn_avg_and_replace_u2(uint8_t * base, + uint8_t * target, + uint16_t length) +{ + int8_t mask2 = 0x0c; + int8_t n_mask2 = ~ mask2; + int8_t mask4 = 0x30; + int8_t n_mask4 = ~ mask4; + int8_t mask6 = 0xc0; + int8_t n_mask6 = ~ mask6; + int8_t off2 = 2; + int8_t off4 = 4; + int8_t off6 = 6; + + uint8_t *pIn = base; + uint8_t *pCom = target; + uint8_t *out; + + int cnt = length >> 2; + + while(cnt > 0u) + { + *((uint32_t *)pIn) = avg16(*((uint32_t *)pIn), *((uint32_t *)pCom)); + + pIn+=4; + pCom+=4; + cnt--; + } + + int left = length & 0x3; + while (left>0u) + { + uint8_t inA0 = (uint8_t) bitextu((unsigned int) *pIn, 2, 0); + uint8_t inA1 = (uint8_t) bitextu((unsigned int) *pIn, 2, 2); + uint8_t inA2 = (uint8_t) bitextu((unsigned int) *pIn, 2, 4); + uint8_t inA3 = (uint8_t) bitextu((unsigned int) *pIn, 2, 6); + v4u inA4 = pack((uint8_t) inA0, (uint8_t) inA1, (uint8_t) inA2, (uint8_t) inA3); + uint8_t inB0 = (uint8_t) bitextu((unsigned int) *pCom, 2, 0); + uint8_t inB1 = (uint8_t) bitextu((unsigned int) *pCom, 2, 2); + uint8_t inB2 = (uint8_t) bitextu((unsigned int) *pCom, 2, 4); + uint8_t inB3 = (uint8_t) bitextu((unsigned int) *pCom, 2, 6); + v4u inB4 = pack((uint8_t) inB0, (uint8_t) inB1, (uint8_t) inB2, (uint8_t) inB3); + + *((v4u*)out) = avg4(inA4, inB4); + + uint8_t inA = (uint8_t) bitins(*out, n_mask2, *(out + 1), mask2, off2); + inA = bitins(inA, n_mask4, *(out + 2), mask4, off4); + *((uint8_t*)pIn) = bitins(inA, n_mask6, *(out + 3), mask6, off6); + + pIn++; + pCom++; + left--; + } +} + + +#endif diff --git a/rt_nn_tests/xptnn_linear/test.c b/rt_nn_tests/xptnn_linear/test.c new file mode 100644 index 0000000..dac1c65 --- /dev/null +++ b/rt_nn_tests/xptnn_linear/test.c @@ -0,0 +1,182 @@ +// massive hack to enable rt compatibility +#define pi_core_id get_core_id +#include +#include +#include + +#include "dory_dma.h" + +#include "xpulp_tnn_matmul_ternary.h" +#include "xpulp_tnn_matmul_ternary_4x1.h" +#include "xpulp_tnn_conv_ternary.h" +#include "xpulp_tnn_conv_ternary_signed.h" +#ifndef PROFILE // HACKYTIME +#include "xpulp_tnn_conv1d_ternary.h" +#include "xpulp_tnn_conv1d_ternary_signed.h" +#endif +#include "xpulp_tnn_maxpool_ternary.h" +#include "xpulp_tnn_linear_ternary_i32_signed.h" +#include "xpulp_tnn_linear_ternary_i32.h" +#include "pmsis.h" + +#include "data_statstest.h" +//#include "pulp_nn_kernels.h" +#include "pulp_nn_mix_kernels.h" + + +#define start_cycle_counter() asm volatile("csrw 0xCC0, 0x01;") +#define stop_cycle_counter() asm volatile("csrw 0xCC0, 0x00;") +#define read_cycle_counter(x) asm volatile("csrr %0, 0x780;" : "=r" (x)) +#define reset_cycle_counter() asm volatile("csrw 0x780, 0x0;") + +uint8_t im2col[IM2COL_DIM] = {0}; +uint8_t outputs[OUTPUT_DIM] = {0}; + +int32_t outputs_fp[OUTPUT_DIM_FP] = {0}; + +#ifndef PROFILE +int num_cycles; +#else +int im2col_cycles; +int hotloop_prep_cycles; +int hotloop_cycles; +int threshold_cycles; +int requant_cycles; +int hotloop_leftover_cycles; +int matmul4x2_leftover_cycles; +#endif + +void call_krnl_0(); +void test_0(); + +int main(int argc, char *argv[]) +{ +#if KRAKEN_PTEST == 1 + kraken_padframe_aon_pad_gpioa_cfg_rxe_set(24, 0); + kraken_padframe_aon_pad_gpioa_cfg_trie_set(24, 0); + kraken_padframe_aon_pad_gpioa_cfg_chip2pad_set(24, 0); +#endif + int n_mismatches = 0; + int mismatches_tot = 0; + + + + #ifndef PROFILE + num_cycles = 0; + #endif + + if (get_core_id() == 0) { + printf("===> TEST 0: Running xpulp_tnn_linear_ternary_i32_signed...\n"); + printf(" ch_in/out = [100, 100]\n"); + //printf(" padding_y_top = [%d]\n", padding_y_top); + //printf(" padding_y_bottom = [%d]\n", padding_y_bottom); + //printf(" padding_x_left = [%d]\n", padding_x_left); + //printf(" padding_x_right = [%d]\n", padding_x_right); + //printf(" stride_x = [%d]\n", stride_x); + //printf(" stride_y = [%d]\n", stride_y); + } + test_0(); + #ifndef PROFILE + stop_cycle_counter(); + read_cycle_counter(num_cycles); + if (get_core_id() == 0) { + printf("===> TEST 0: Finished running xpulp_tnn_linear_ternary_i32_signed\n"); + printf("num_cycles = %d\n", num_cycles); + printf("MACs = 10000\n"); + printf("MACs/cycle = %.4f\n", 10000/num_cycles); + } + #endif + if (get_core_id() == 0) { + printf("Checking for mismatches..\n"); + n_mismatches = 0; + + for(int i=0; i < 100; i++) { + if (outputs_fp[i] != exp_outp_0[i]){ + printf("***Mismatch in test 0 at iteration %d: Expected: %x, got: %x\n", i, exp_outp_0[i], outputs_fp[i]); + n_mismatches++; + } + } + } + mismatches_tot += n_mismatches; + + if (get_core_id() == 0) { + printf("Got %d mismatches in %d tests\n", mismatches_tot, 1); + } + return mismatches_tot; +} + + +void call_krnl_0(void) { + uint8_t * pInp; + uint8_t * pIm2ColBuffer; + int8_t * pBias = NULL; + uint8_t * pOut; + int8_t * pWeight; + uint32_t * pThr; + int32_t * pKappa, pLambda; + pInp = inp_l1; + + pOut = outp_l1; + pIm2ColBuffer = im2col_l1; + pWeight = wt_l1; + pThr = threshs_l1; + pKappa = kappa_l1; + pLambda = lambda_l1; +#if KRAKEN_PTEST == 1 + if (pi_core_id() == 0) { + kraken_padframe_aon_pad_gpioa_cfg_chip2pad_set(24, 1); + } +#endif + xpulp_tnn_linear_ternary_i32_signed( + pInp, + pBias, + (int32_t *) pOut, + pWeight, + 100, + 100); + +#if KRAKEN_PTEST == 1 + if (pi_core_id() == 0) { + kraken_padframe_aon_pad_gpioa_cfg_chip2pad_set(24, 0); + } +#endif +} + +void test_0(void) { + uint32_t dma_channel = dory_dma_allocate(); + DMA_copy dma_tx = {0}; + // DMA transfer inputs from L2 to L1 + dma_tx.ext = pIn_0; + dma_tx.loc = inp_l1; + dma_tx.number_of_1d_copies = 1; + dma_tx.number_of_2d_copies = 1; + dma_tx.length_1d_copy = 20; + dma_tx.stride_1d = 1; + dma_tx.stride_2d = 1; + dma_tx.dir = 1; + dma_tx.tid = dma_channel; + dory_dma_memcpy_async(&dma_tx); + // transfer weights + dma_tx.ext = pWeight_0; + dma_tx.loc = wt_l1; + dma_tx.length_1d_copy = 2000; + dory_dma_memcpy_async(&dma_tx); + call_krnl_0(); + // get outputs back with DMA + dma_tx.dir = 0; + dma_tx.ext = outputs_fp; + dma_tx.loc = outp_l1; + dma_tx.length_1d_copy = 400; + dory_dma_memcpy_async(&dma_tx); + dory_dma_free(&dma_tx); +} + + + + + + + + + + diff --git a/rt_nn_tests/xptnn_linear/xpulp_tnn_conv1d_ternary.h b/rt_nn_tests/xptnn_linear/xpulp_tnn_conv1d_ternary.h new file mode 100644 index 0000000..f1a08a6 --- /dev/null +++ b/rt_nn_tests/xptnn_linear/xpulp_tnn_conv1d_ternary.h @@ -0,0 +1,35 @@ +#ifndef __XPULP_NN_CONV1D_TERNARY_H +#define __XPULP_NN_CONV1D_TERNARY_H +#include +#include "pulp_nn_utils.h" + + + +// TODO: review argument order +void __attribute__((noinline)) xpulp_tnn_conv1d_ternary( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pWeight, + uint32_t *pThr, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, +#ifndef PROFILE + uint16_t dilation_x); +#else + uint16_t dilation_x, + uint32_t *im2col_cycles, + uint32_t *hotloop_prep_cycles, + uint32_t *hotloop_cycles, + uint32_t *threshold_cycles, + uint32_t *hotloop_leftover_cycles, + uint32_t *matmul4x2_leftover_cycles); +#endif +#endif diff --git a/rt_nn_tests/xptnn_linear/xpulp_tnn_conv1d_ternary_signed.h b/rt_nn_tests/xptnn_linear/xpulp_tnn_conv1d_ternary_signed.h new file mode 100644 index 0000000..0f8ba08 --- /dev/null +++ b/rt_nn_tests/xptnn_linear/xpulp_tnn_conv1d_ternary_signed.h @@ -0,0 +1,35 @@ +#ifndef __XPULP_NN_CONV1D_TERNARY_SIGNED_H +#define __XPULP_NN_CONV1D_TERNARY_SIGNED_H +#include +#include "pulp_nn_utils.h" + + + +// TODO: review argument order +void __attribute__((noinline)) xpulp_tnn_conv1d_ternary_signed( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pWeight, + uint32_t *pThr, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, +#ifndef PROFILE + uint16_t dilation_x); +#else + uint16_t dilation_x, + uint32_t *im2col_cycles, + uint32_t *hotloop_prep_cycles, + uint32_t *hotloop_cycles, + uint32_t *threshold_cycles, + uint32_t *hotloop_leftover_cycles, + uint32_t *matmul4x2_leftover_cycles); +#endif +#endif diff --git a/rt_nn_tests/xptnn_linear/xpulp_tnn_conv_ternary.h b/rt_nn_tests/xptnn_linear/xpulp_tnn_conv_ternary.h new file mode 100644 index 0000000..f4a8759 --- /dev/null +++ b/rt_nn_tests/xptnn_linear/xpulp_tnn_conv_ternary.h @@ -0,0 +1,40 @@ +#ifndef __XPULP_NN_CONV_TERNARY_H +#define __XPULP_NN_CONV_TERNARY_H +#include +#include "pulp_nn_utils.h" + + + +// TODO: review argument order +void __attribute__((noinline)) xpulp_tnn_conv_ternary( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pWeight, + uint32_t *pThr, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, +#ifndef PROFILE + uint16_t stride_y); +#else + uint16_t stride_y, + uint32_t *im2col_cycles, + uint32_t *hotloop_prep_cycles, + uint32_t *hotloop_cycles, + uint32_t *threshold_cycles, + uint32_t *hotloop_leftover_cycles, + uint32_t *matmul4x2_leftover_cycles); +#endif +#endif diff --git a/rt_nn_tests/xptnn_linear/xpulp_tnn_conv_ternary_signed.h b/rt_nn_tests/xptnn_linear/xpulp_tnn_conv_ternary_signed.h new file mode 100644 index 0000000..d05c2ab --- /dev/null +++ b/rt_nn_tests/xptnn_linear/xpulp_tnn_conv_ternary_signed.h @@ -0,0 +1,40 @@ +#ifndef __XPULP_NN_CONV_TERNARY_SIGNED_H +#define __XPULP_NN_CONV_TERNARY_SIGNED_H +#include +#include "pulp_nn_utils.h" + + + +// TODO: review argument order +void __attribute__((noinline)) xpulp_tnn_conv_ternary_signed( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pWeight, + uint32_t *pThr, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, +#ifndef PROFILE + uint16_t stride_y); +#else + uint16_t stride_y, + uint32_t *im2col_cycles, + uint32_t *hotloop_prep_cycles, + uint32_t *hotloop_cycles, + uint32_t *threshold_cycles, + uint32_t *hotloop_leftover_cycles, + uint32_t *matmul4x2_leftover_cycles); +#endif +#endif diff --git a/rt_nn_tests/xptnn_linear/xpulp_tnn_linear_ternary_i32.c b/rt_nn_tests/xptnn_linear/xpulp_tnn_linear_ternary_i32.c new file mode 100644 index 0000000..fc6a6f4 --- /dev/null +++ b/rt_nn_tests/xptnn_linear/xpulp_tnn_linear_ternary_i32.c @@ -0,0 +1,95 @@ +#include "pmsis.h" +#include "pulp_nn_utils.h" +#include "xpulp_tnn_linear_ternary_i32.h" + +void __attribute__((noinline)) xpulp_tnn_linear_ternary_i32( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + uint16_t dim_vec, + uint16_t num_o_neurons) + +{ + uint16_t dim_vec_in = dim_vec/5; // number of bytes + uint16_t dim_vec_wt = dim_vec_in; + uint16_t dim_vec_words = dim_vec_in >> 2; // number of words + +#ifdef FC_TEST + int core_id = 0; +#else + int core_id = pi_core_id(); +#endif + + int Log2Core = log2(NUM_CORES); + int chunk = (num_o_neurons >> Log2Core) + ((num_o_neurons & (NUM_CORES-1))!=0); + int start = min(chunk * core_id, num_o_neurons); + int stop = min(start + chunk, num_o_neurons); + int32_t * pOutBuffer = ((int32_t *) pOut) + start; + + for(int i=start; i> 2; // number of words + +#ifdef FC_TEST + int core_id = 0; +#else + int core_id = pi_core_id(); +#endif + + int Log2Core = log2(NUM_CORES); + int chunk = (num_o_neurons >> Log2Core) + ((num_o_neurons & (NUM_CORES-1))!=0); + int start = min(chunk * core_id, num_o_neurons); + int stop = min(start + chunk, num_o_neurons); + int32_t * pOutBuffer = ((int32_t *) pOut) + start; + + for(int i=start; ilength_1d_copy >> Log2Core) + ((copy->length_1d_copy & (NUM_CORES-1))!=0); + start_pixel = MIN(number_of_copies_per_core * core_id, copy->length_1d_copy); + stop_pixel = MIN(start_pixel + number_of_copies_per_core, copy->length_1d_copy); +#else + start_pixel = 0; + stop_pixel = copy->length_1d_copy; +#endif + void * loc = copy->loc + copy->number_of_1d_copies*copy->number_of_2d_copies*start_pixel; + void * ext = copy->ext + start_pixel; + const int size_2d = copy->number_of_1d_copies * copy->number_of_2d_copies; + + for (int i=start_pixel; idir << MCHAN_CMD_SHIFT_DIRECTION | MCHAN_FLAGS_2D, + .size = size_2d, + .ext = ext, + .loc = loc, + .ext_size_1d = 1, // one byte at a time... + .ext_stride_1d = copy->stride_1d + }; +#ifdef SINGLE_CORE_DMA + if (pi_core_id() == 0) { +#endif + mchan_transfer_push_2d(trans); +#ifdef SINGLE_CORE_DMA + } +#endif +#ifdef ALWAYS_BLOCK_DMA_TRANSFERS // needed on GAP8 board + dory_dma_barrier(copy); +#endif + ext += 1; // next channel + loc += copy->number_of_1d_copies * copy->number_of_2d_copies; + } +} + +void dory_dma_memcpy_1d_async(DMA_copy *copy) { + if (pi_core_id() == 0) { + mchan_transfer_t trans = { + .cmd = copy->length_1d_copy * copy->number_of_1d_copies * copy->number_of_2d_copies | (copy->dir << MCHAN_CMD_SHIFT_DIRECTION) | MCHAN_FLAGS_1D, + .size = copy->length_1d_copy * copy->number_of_1d_copies * copy->number_of_2d_copies, + .ext = copy->ext, + .loc = copy->loc + }; + mchan_transfer_push_1d(trans); + } +} + +void dory_dma_memcpy_2d_async(DMA_copy *copy) { + if (pi_core_id() == 0) { + const int size_2d = copy->number_of_1d_copies * copy->length_1d_copy * copy->number_of_2d_copies; + const int stride = (copy->number_of_2d_copies == 1) ? copy->stride_1d : copy->stride_2d; + const int size_1d = (copy->number_of_2d_copies == 1) ? copy->length_1d_copy : copy->length_1d_copy * copy->number_of_1d_copies; + + mchan_transfer_t trans = { + .cmd = size_2d | copy->dir << MCHAN_CMD_SHIFT_DIRECTION | MCHAN_FLAGS_2D, + .size = size_2d, + .ext = copy->ext, + .loc = copy->loc, + .ext_size_1d = size_1d, + .ext_stride_1d = stride + }; + mchan_transfer_push_2d(trans); + } +} + +void dory_dma_memcpy_3d_async(DMA_copy *copy) { + int start_pixel, stop_pixel; +#ifndef SINGLE_CORE_DMA + int core_id = pi_core_id(); + int Log2Core = log2(NUM_CORES); + int number_of_2d_copies_per_core = (copy->number_of_2d_copies >> Log2Core) + ((copy->number_of_2d_copies & (NUM_CORES-1))!=0); + start_pixel = MIN(number_of_2d_copies_per_core * core_id, copy->number_of_2d_copies); + stop_pixel = MIN(start_pixel + number_of_2d_copies_per_core, copy->number_of_2d_copies); +#else + start_pixel = 0; + stop_pixel = copy->number_of_2d_copies; +#endif + void *ext = copy->ext + copy->stride_2d*start_pixel; + void *loc = copy->loc + copy->length_1d_copy*copy->number_of_1d_copies*start_pixel; + const int size_2d = copy->number_of_1d_copies * copy->length_1d_copy; + for (int i = start_pixel; i < stop_pixel; i++) { + mchan_transfer_t trans = { + .cmd = size_2d | copy->dir << MCHAN_CMD_SHIFT_DIRECTION | MCHAN_FLAGS_2D, + .size = size_2d, + .ext = ext, + .loc = loc, + .ext_size_1d = copy->length_1d_copy, + .ext_stride_1d = copy->stride_1d + }; +#ifdef SINGLE_CORE_DMA + if (pi_core_id() == 0) { +#endif + mchan_transfer_push_2d(trans); +#ifdef SINGLE_CORE_DMA + } +#endif +#ifdef ALWAYS_BLOCK_DMA_TRANSFERS // needed on GAP8 board + dory_dma_barrier(copy); +#endif + loc += size_2d; + ext += copy->stride_2d; + } +} + +void dory_dma_memcpy_async(DMA_copy *copy) { + if (copy->hwc_to_chw == 1) { + dory_dma_memcpy_hwc_to_chw(copy); + } + else if ((copy->number_of_2d_copies == 1 && copy->number_of_1d_copies == 1) || (copy->stride_1d == copy->length_1d_copy && copy->number_of_1d_copies * copy->length_1d_copy == copy->stride_2d) || (copy->number_of_2d_copies == 1 && copy->length_1d_copy == copy->stride_1d)) { + dory_dma_memcpy_1d_async(copy); + } else if ((copy->number_of_2d_copies == 1) || (copy->length_1d_copy == copy->stride_1d)) {// wrong! + dory_dma_memcpy_2d_async(copy); + } else { + dory_dma_memcpy_3d_async(copy); + } +#ifdef ALWAYS_BLOCK_DMA_TRANSFERS + dory_dma_barrier(copy); +#endif +} + +void dory_dma_free(DMA_copy *copy) { + mchan_transfer_free(copy->tid); +} + +void dory_dma_barrier(DMA_copy *copy) { +#ifdef SINGLE_CORE_DMA + // if DMA is only used by a single core (only 1 ctrl interface), other cores must not access its register file. Instead, they should all wait for core 0 to confirm the transfer is over. + if (pi_core_id() == 0) + mchan_transfer_wait(copy->tid); + pi_cl_team_barrier(0); +#else + mchan_transfer_wait(copy->tid); +#endif +} + +int dory_dma_allocate() { + return mchan_transfer_get_id(); +} diff --git a/rt_nn_tests/xptnn_maxpool/dory_dma.h b/rt_nn_tests/xptnn_maxpool/dory_dma.h new file mode 100644 index 0000000..e0b3ef3 --- /dev/null +++ b/rt_nn_tests/xptnn_maxpool/dory_dma.h @@ -0,0 +1,52 @@ +/* + * dory.h + * Alessio Burrello + * + * Copyright (C) 2019-2020 University of Bologna + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef _DORY_DMA_H +#define _DORY_DMA_H + +typedef struct +{ + void *ext; + void *loc; + unsigned short hwc_to_chw; + unsigned short stride_2d; + unsigned short number_of_2d_copies; + unsigned short stride_1d; + unsigned short number_of_1d_copies; + unsigned short length_1d_copy; + int dir; // 0 l1->l2, 1 l2->l1 + int tid; +} DMA_copy; + +void dory_dma_memcpy_hwc_to_chw(DMA_copy *copy); + +void dory_dma_memcpy_1d_async(DMA_copy *copy); + +void dory_dma_memcpy_2d_async(DMA_copy *copy); + +void dory_dma_memcpy_3d_async(DMA_copy *copy); + +void dory_dma_memcpy_async(DMA_copy *copy); + +void dory_dma_free(DMA_copy *copy); + +void dory_dma_barrier(DMA_copy *copy); + +int dory_dma_allocate(); +#endif diff --git a/rt_nn_tests/xptnn_maxpool/mchan.h b/rt_nn_tests/xptnn_maxpool/mchan.h new file mode 100644 index 0000000..95882ab --- /dev/null +++ b/rt_nn_tests/xptnn_maxpool/mchan.h @@ -0,0 +1,137 @@ +#ifndef _MCHAN_H +#define _MCHAN_H + +// Requires to have MCHAN_BASE_ADDR, MCHAN_EVENT defined outside of header +#ifndef MCHAN_BASE_ADDR +#error "[mchan.h] MCHAN_BASE_ADDR not defined!" +#endif + +#if !defined(MCHAN_EVENT) && !defined(MCHAN_POLLED) +#error "[mchan.h] Nor MCHAN_EVENT nor MCHAN_POLLED defined!" +#endif + +#if defined(MCHAN_EVENT) && !defined(MCHAN_EVENT_BIT) +#error "[mchan.h] MCHAN_EVENT_BIT should be defined when using events as signalization!" +#endif + +#include "pmsis.h" + +#define MCHAN_CMD_OFFSET 0 +#define MCHAN_STATUS_OFFSET 4 + +#define MCHAN_CMD_ADDR (MCHAN_BASE_ADDR + MCHAN_CMD_OFFSET) +#define MCHAN_STATUS_ADDR (MCHAN_BASE_ADDR + MCHAN_STATUS_OFFSET) + +#define READ_REG(addr) (*(volatile int*)(addr)) +#define WRITE_REG(addr, value) do { *(volatile int*)(addr) = (int)value; } while (0) + +#define MCHAN_READ_CMD() READ_REG(MCHAN_CMD_ADDR) +#define MCHAN_WRITE_CMD(value) WRITE_REG(MCHAN_CMD_ADDR, value) + +#define MCHAN_READ_STATUS() READ_REG(MCHAN_STATUS_ADDR) +#define MCHAN_WRITE_STATUS(value) WRITE_REG(MCHAN_STATUS_ADDR, value) + +// MCHAN version 7 has 1 more bit for the transfer length, so all the flag offsets are shifted by 1. Also, LOC (TCDM) striding is not supported in v6. +#if MCHAN_VERSION==7 +#define MCHAN_TRANSFER_LEN_SIZE (17) +#else +#define MCHAN_TRANSFER_LEN_SIZE (16) +#endif + +#define MCHAN_CMD_FLAG_DIRECTION_LOC2EXT (0 << (MCHAN_TRANSFER_LEN_SIZE + 0)) +#define MCHAN_CMD_FLAG_DIRECTION_EXT2LOC (1 << (MCHAN_TRANSFER_LEN_SIZE + 0)) +#define MCHAN_CMD_FLAG_INCREMENTAL (1 << (MCHAN_TRANSFER_LEN_SIZE + 1)) +#define MCHAN_CMD_FLAG_2D_TRANSFER_EXTERNAL (1 << (MCHAN_TRANSFER_LEN_SIZE + 2)) +#define MCHAN_CMD_FLAG_EVENT_ENABLE (1 << (MCHAN_TRANSFER_LEN_SIZE + 3)) +#define MCHAN_CMD_FLAG_INTERRUPT_ENABLE (1 << (MCHAN_TRANSFER_LEN_SIZE + 4)) +#define MCHAN_CMD_FLAG_BROADCAST_FINISH (1 << (MCHAN_TRANSFER_LEN_SIZE + 5)) +#if MCHAN_VERSION==7 +#define MCHAN_CMD_FLAG_2D_TRANSFER_LOCAL (1 << (MCHAN_TRANSFER_LEN_SIZE + 6)) // can only be used with MCHAN v7 +#endif +#define MCHAN_CMD_SHIFT_DIRECTION MCHAN_TRANSFER_LEN_SIZE + + +#define MCHAN_CMD(len, dir, inc, loc_2d, ext_2d, int_en, event_en, broadcast) \ + (len | dir | inc | loc_2d | ext_2d | broadcast | int_en | event_en) + +typedef enum { + MCHAN_DMA_TRANSFER_DIRECTION_EXT2LOC = MCHAN_CMD_FLAG_DIRECTION_EXT2LOC, + MCHAN_DMA_TRANSFER_DIRECTION_LOC2EXT = MCHAN_CMD_FLAG_DIRECTION_LOC2EXT +} mchan_dma_transfer_direction_e; + +typedef struct { + int cmd; + int size; + + void *loc; + int loc_size_1d; + int loc_stride_1d; + + void *ext; + int ext_size_1d; + int ext_stride_1d; +} mchan_transfer_t; + +static int mchan_transfer_get_id() { + return MCHAN_READ_CMD(); +} + +static void mchan_transfer_push_1d(mchan_transfer_t trans) +{ + MCHAN_WRITE_CMD(trans.cmd); + MCHAN_WRITE_CMD(trans.loc); + MCHAN_WRITE_CMD(trans.ext); +} + +static void mchan_transfer_push_2d(mchan_transfer_t trans) +{ + MCHAN_WRITE_CMD(trans.cmd); + MCHAN_WRITE_CMD(trans.loc); + MCHAN_WRITE_CMD(trans.ext); +// MCHAN version 7 takes 2D "count" (length of 1D transfers) and stride in 2 steps, +// v7 takes it in 1 step with the stride shifted to the upper 16 bits. +#if MCHAN_VERSION==7 + MCHAN_WRITE_CMD(trans.ext_size_1d); + MCHAN_WRITE_CMD(trans.ext_stride_1d); +#else + MCHAN_WRITE_CMD(trans.ext_size_1d | (trans.ext_stride_1d << 16)); +#endif +} + +static void mchan_transfer_push(mchan_transfer_t trans) +{ + MCHAN_WRITE_CMD(trans.cmd); + MCHAN_WRITE_CMD(trans.loc); + MCHAN_WRITE_CMD(trans.ext); + + if (trans.ext_size_1d < trans.size) { + MCHAN_WRITE_CMD(trans.ext_size_1d); + MCHAN_WRITE_CMD(trans.ext_stride_1d); + } + + if (trans.loc_size_1d < trans.size) { + MCHAN_WRITE_CMD(trans.loc_size_1d); + MCHAN_WRITE_CMD(trans.loc_stride_1d); + } +} + +static void mchan_transfer_free(int tid) +{ + MCHAN_WRITE_STATUS(1 << tid); +} + +static int mchan_transfer_busy(int tid) +{ + return MCHAN_READ_STATUS() & (1 << tid); +} + +static void mchan_transfer_wait(int tid) +{ + #if defined(MCHAN_EVENT) + while(mchan_transfer_busy(tid)) eu_evt_maskWaitAndClr(1 << MCHAN_EVENT_BIT); + #elif defined(MCHAN_POLLED) + while(mchan_transfer_busy(tid)) ; + #endif +} + +#endif diff --git a/rt_nn_tests/xptnn_maxpool/pulp_nn_kernels.h b/rt_nn_tests/xptnn_maxpool/pulp_nn_kernels.h new file mode 100644 index 0000000..f4ec977 --- /dev/null +++ b/rt_nn_tests/xptnn_maxpool/pulp_nn_kernels.h @@ -0,0 +1,26528 @@ +/* + * pulp_nn_kernels.h + * Nazareno Bruschi + * + * Copyright (C) 2019-2020 University of Bologna + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef __XPULPNN_KERNELS__ +#define __XPULPNN_KERNELS__ + +void xpulp_nn_conv_u8_u8_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u8_u8_i8_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u8_i8_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u8_i8_i8_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i8_u8_i8( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i8_u8_i8_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i8_i8_i8( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i8_i8_i8_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u8_u8_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u8_u8_i4_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u8_i8_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u8_i8_i4_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i8_u8_i4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i8_u8_i4_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i8_i8_i4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i8_i8_i4_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u8_u8_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u8_u8_i2_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u8_i8_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u8_i8_i2_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i8_u8_i2( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i8_u8_i2_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i8_i8_i2( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i8_i8_i2_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u8_u4_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u8_u4_i8_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u8_i4_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u8_i4_i8_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i8_u4_i8( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i8_u4_i8_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i8_i4_i8( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i8_i4_i8_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u8_u4_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u8_u4_i4_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u8_i4_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u8_i4_i4_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i8_u4_i4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i8_u4_i4_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i8_i4_i4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i8_i4_i4_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u8_u4_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u8_u4_i2_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u8_i4_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u8_i4_i2_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i8_u4_i2( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i8_u4_i2_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i8_i4_i2( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i8_i4_i2_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u8_u2_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u8_u2_i8_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u8_i2_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u8_i2_i8_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i8_u2_i8( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i8_u2_i8_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i8_i2_i8( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i8_i2_i8_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u8_u2_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u8_u2_i4_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u8_i2_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u8_i2_i4_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i8_u2_i4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i8_u2_i4_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i8_i2_i4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i8_i2_i4_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u8_u2_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u8_u2_i2_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u8_i2_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u8_i2_i2_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i8_u2_i2( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i8_u2_i2_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i8_i2_i2( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i8_i2_i2_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u4_u8_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u4_u8_i8_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u4_i8_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u4_i8_i8_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i4_u8_i8( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i4_u8_i8_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i4_i8_i8( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i4_i8_i8_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u4_u8_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u4_u8_i4_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u4_i8_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u4_i8_i4_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i4_u8_i4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i4_u8_i4_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i4_i8_i4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i4_i8_i4_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u4_u8_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u4_u8_i2_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u4_i8_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u4_i8_i2_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i4_u8_i2( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i4_u8_i2_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i4_i8_i2( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i4_i8_i2_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u4_u4_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u4_u4_i8_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u4_i4_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u4_i4_i8_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i4_u4_i8( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i4_u4_i8_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i4_i4_i8( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i4_i4_i8_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u4_u4_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u4_u4_i4_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u4_i4_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u4_i4_i4_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i4_u4_i4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i4_u4_i4_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i4_i4_i4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i4_i4_i4_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u4_u4_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u4_u4_i2_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u4_i4_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u4_i4_i2_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i4_u4_i2( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i4_u4_i2_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i4_i4_i2( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i4_i4_i2_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u4_u2_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u4_u2_i8_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u4_i2_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u4_i2_i8_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i4_u2_i8( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i4_u2_i8_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i4_i2_i8( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i4_i2_i8_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u4_u2_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u4_u2_i4_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u4_i2_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u4_i2_i4_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i4_u2_i4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i4_u2_i4_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i4_i2_i4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i4_i2_i4_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u4_u2_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u4_u2_i2_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u4_i2_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u4_i2_i2_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i4_u2_i2( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i4_u2_i2_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i4_i2_i2( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i4_i2_i2_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u2_u8_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u2_u8_i8_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u2_i8_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u2_i8_i8_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i2_u8_i8( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i2_u8_i8_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i2_i8_i8( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i2_i8_i8_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u2_u8_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u2_u8_i4_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u2_i8_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u2_i8_i4_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i2_u8_i4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i2_u8_i4_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i2_i8_i4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i2_i8_i4_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u2_u8_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u2_u8_i2_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u2_i8_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u2_i8_i2_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i2_u8_i2( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i2_u8_i2_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i2_i8_i2( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i2_i8_i2_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u2_u4_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u2_u4_i8_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u2_i4_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u2_i4_i8_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i2_u4_i8( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i2_u4_i8_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i2_i4_i8( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i2_i4_i8_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u2_u4_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u2_u4_i4_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u2_i4_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u2_i4_i4_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i2_u4_i4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i2_u4_i4_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i2_i4_i4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i2_i4_i4_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u2_u4_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u2_u4_i2_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u2_i4_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u2_i4_i2_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i2_u4_i2( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i2_u4_i2_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i2_i4_i2( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i2_i4_i2_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u2_u2_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u2_u2_i8_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u2_i2_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u2_i2_i8_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i2_u2_i8( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i2_u2_i8_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i2_i2_i8( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i2_i2_i8_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u2_u2_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u2_u2_i4_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u2_i2_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u2_i2_i4_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i2_u2_i4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i2_u2_i4_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i2_i2_i4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i2_i2_i4_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u2_u2_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u2_u2_i2_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u2_i2_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_u2_i2_i2_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i2_u2_i2( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i2_u2_i2_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv_i2_i2_i2( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, +#ifndef PROFILE + uint8_t flag_batch_norm); +#else + uint8_t flag_batch_norm, + uint32_t *im2col_cycles, + uint32_t *hotloop_prep_cycles, + uint32_t *hotloop_cycles, + uint32_t *requant_cycles, + uint32_t *hotloop_leftover_cycles, + uint32_t *matmul4x2_leftover_cycles); +#endif + + +void xpulp_nn_conv_i2_i2_i2_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u8_u8_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u8_u8_i8_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u8_i8_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u8_i8_i8_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i8_u8_i8( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i8_u8_i8_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i8_i8_i8( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i8_i8_i8_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u8_u8_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u8_u8_i4_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u8_i8_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u8_i8_i4_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i8_u8_i4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i8_u8_i4_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i8_i8_i4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i8_i8_i4_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u8_u8_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u8_u8_i2_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u8_i8_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u8_i8_i2_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i8_u8_i2( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i8_u8_i2_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i8_i8_i2( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i8_i8_i2_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u8_u4_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u8_u4_i8_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u8_i4_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u8_i4_i8_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i8_u4_i8( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i8_u4_i8_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i8_i4_i8( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i8_i4_i8_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u8_u4_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u8_u4_i4_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u8_i4_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u8_i4_i4_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i8_u4_i4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i8_u4_i4_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i8_i4_i4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i8_i4_i4_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u8_u4_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u8_u4_i2_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u8_i4_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u8_i4_i2_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i8_u4_i2( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i8_u4_i2_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i8_i4_i2( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i8_i4_i2_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u8_u2_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u8_u2_i8_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u8_i2_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u8_i2_i8_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i8_u2_i8( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i8_u2_i8_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i8_i2_i8( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i8_i2_i8_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u8_u2_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u8_u2_i4_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u8_i2_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u8_i2_i4_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i8_u2_i4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i8_u2_i4_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i8_i2_i4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i8_i2_i4_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u8_u2_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u8_u2_i2_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u8_i2_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u8_i2_i2_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i8_u2_i2( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i8_u2_i2_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i8_i2_i2( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i8_i2_i2_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u4_u8_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u4_u8_i8_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u4_i8_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u4_i8_i8_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i4_u8_i8( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i4_u8_i8_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i4_i8_i8( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i4_i8_i8_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u4_u8_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u4_u8_i4_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u4_i8_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u4_i8_i4_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i4_u8_i4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i4_u8_i4_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i4_i8_i4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i4_i8_i4_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u4_u8_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u4_u8_i2_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u4_i8_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u4_i8_i2_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i4_u8_i2( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i4_u8_i2_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i4_i8_i2( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i4_i8_i2_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u4_u4_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u4_u4_i8_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u4_i4_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u4_i4_i8_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i4_u4_i8( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i4_u4_i8_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i4_i4_i8( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i4_i4_i8_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u4_u4_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u4_u4_i4_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u4_i4_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u4_i4_i4_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i4_u4_i4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i4_u4_i4_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i4_i4_i4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i4_i4_i4_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u4_u4_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u4_u4_i2_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u4_i4_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u4_i4_i2_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i4_u4_i2( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i4_u4_i2_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i4_i4_i2( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i4_i4_i2_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u4_u2_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u4_u2_i8_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u4_i2_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u4_i2_i8_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i4_u2_i8( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i4_u2_i8_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i4_i2_i8( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i4_i2_i8_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u4_u2_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u4_u2_i4_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u4_i2_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u4_i2_i4_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i4_u2_i4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i4_u2_i4_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i4_i2_i4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i4_i2_i4_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u4_u2_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u4_u2_i2_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u4_i2_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u4_i2_i2_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i4_u2_i2( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i4_u2_i2_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i4_i2_i2( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i4_i2_i2_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u2_u8_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u2_u8_i8_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u2_i8_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u2_i8_i8_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i2_u8_i8( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i2_u8_i8_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i2_i8_i8( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i2_i8_i8_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u2_u8_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u2_u8_i4_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u2_i8_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u2_i8_i4_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i2_u8_i4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i2_u8_i4_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i2_i8_i4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i2_i8_i4_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u2_u8_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u2_u8_i2_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u2_i8_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u2_i8_i2_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i2_u8_i2( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i2_u8_i2_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i2_i8_i2( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i2_i8_i2_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u2_u4_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u2_u4_i8_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u2_i4_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u2_i4_i8_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i2_u4_i8( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i2_u4_i8_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i2_i4_i8( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i2_i4_i8_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u2_u4_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u2_u4_i4_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u2_i4_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u2_i4_i4_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i2_u4_i4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i2_u4_i4_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i2_i4_i4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i2_i4_i4_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u2_u4_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u2_u4_i2_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u2_i4_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u2_i4_i2_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i2_u4_i2( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i2_u4_i2_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i2_i4_i2( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i2_i4_i2_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u2_u2_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u2_u2_i8_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u2_i2_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u2_i2_i8_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i2_u2_i8( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i2_u2_i8_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i2_i2_i8( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i2_i2_i8_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u2_u2_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u2_u2_i4_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u2_i2_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u2_i2_i4_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i2_u2_i4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i2_u2_i4_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i2_i2_i4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i2_i2_i4_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u2_u2_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u2_u2_i2_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u2_i2_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_u2_i2_i2_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i2_u2_i2( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i2_u2_i2_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i2_i2_i2( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_conv1d_i2_i2_i2_4x4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t dilation_x, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_u8_u8_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_u8_i8_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_i8_u8_i8( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_i8_i8_i8( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_u8_u8_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_u8_i8_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_i8_u8_i4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_i8_i8_i4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_u8_u8_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_u8_i8_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_i8_u8_i2( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_i8_i8_i2( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_u8_u4_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_u8_i4_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_i8_u4_i8( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_i8_i4_i8( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_u8_u4_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_u8_i4_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_i8_u4_i4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_i8_i4_i4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_u8_u4_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_u8_i4_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_i8_u4_i2( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_i8_i4_i2( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_u8_u2_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_u8_i2_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_i8_u2_i8( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_i8_i2_i8( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_u8_u2_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_u8_i2_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_i8_u2_i4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_i8_i2_i4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_u8_u2_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_u8_i2_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_i8_u2_i2( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_i8_i2_i2( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_u4_u8_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_u4_i8_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_i4_u8_i8( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_i4_i8_i8( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_u4_u8_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_u4_i8_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_i4_u8_i4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_i4_i8_i4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_u4_u8_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_u4_i8_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_i4_u8_i2( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_i4_i8_i2( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_u4_u4_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_u4_i4_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_i4_u4_i8( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_i4_i4_i8( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_u4_u4_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_u4_i4_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_i4_u4_i4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_i4_i4_i4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_u4_u4_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_u4_i4_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_i4_u4_i2( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_i4_i4_i2( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_u4_u2_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_u4_i2_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_i4_u2_i8( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_i4_i2_i8( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_u4_u2_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_u4_i2_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_i4_u2_i4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_i4_i2_i4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_u4_u2_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_u4_i2_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_i4_u2_i2( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_i4_i2_i2( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_u2_u8_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_u2_i8_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_i2_u8_i8( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_i2_i8_i8( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_u2_u8_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_u2_i8_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_i2_u8_i4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_i2_i8_i4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_u2_u8_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_u2_i8_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_i2_u8_i2( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_i2_i8_i2( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_u2_u4_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_u2_i4_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_i2_u4_i8( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_i2_i4_i8( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_u2_u4_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_u2_i4_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_i2_u4_i4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_i2_i4_i4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_u2_u4_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_u2_i4_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_i2_u4_i2( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_i2_i4_i2( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_u2_u2_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_u2_i2_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_i2_u2_i8( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_i2_i2_i8( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_u2_u2_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_u2_i2_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_i2_u2_i4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_i2_i2_i4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_u2_u2_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_u2_i2_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_i2_u2_i2( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_pointwise_i2_i2_i2( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u8_u8_i8( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u8_i8_i8( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i8_u8_i8( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i8_i8_i8( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u8_u8_i8_4x4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u8_i8_i8_4x4( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pOut3, + int8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i8_u8_i8_4x4( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i8_i8_i8_4x4( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pOut3, + int8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u8_u8_i4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u8_i8_i4( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i8_u8_i4( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i8_i8_i4( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u8_u8_i4_4x4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u8_i8_i4_4x4( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pOut3, + int8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i8_u8_i4_4x4( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i8_i8_i4_4x4( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pOut3, + int8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u8_u8_i2( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u8_i8_i2( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i8_u8_i2( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i8_i8_i2( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u8_u8_i2_4x4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u8_i8_i2_4x4( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pOut3, + int8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i8_u8_i2_4x4( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i8_i8_i2_4x4( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pOut3, + int8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u8_u4_i8( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u8_i4_i8( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i8_u4_i8( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i8_i4_i8( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u8_u4_i8_4x4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u8_i4_i8_4x4( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pOut3, + int8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i8_u4_i8_4x4( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i8_i4_i8_4x4( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pOut3, + int8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u8_u4_i4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u8_i4_i4( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i8_u4_i4( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i8_i4_i4( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u8_u4_i4_4x4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u8_i4_i4_4x4( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pOut3, + int8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i8_u4_i4_4x4( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i8_i4_i4_4x4( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pOut3, + int8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u8_u4_i2( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u8_i4_i2( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i8_u4_i2( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i8_i4_i2( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u8_u4_i2_4x4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u8_i4_i2_4x4( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pOut3, + int8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i8_u4_i2_4x4( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i8_i4_i2_4x4( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pOut3, + int8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u8_u2_i8( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u8_i2_i8( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i8_u2_i8( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i8_i2_i8( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u8_u2_i8_4x4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u8_i2_i8_4x4( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pOut3, + int8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i8_u2_i8_4x4( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i8_i2_i8_4x4( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pOut3, + int8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u8_u2_i4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u8_i2_i4( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i8_u2_i4( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i8_i2_i4( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u8_u2_i4_4x4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u8_i2_i4_4x4( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pOut3, + int8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i8_u2_i4_4x4( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i8_i2_i4_4x4( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pOut3, + int8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u8_u2_i2( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u8_i2_i2( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i8_u2_i2( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i8_i2_i2( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u8_u2_i2_4x4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u8_i2_i2_4x4( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pOut3, + int8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i8_u2_i2_4x4( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i8_i2_i2_4x4( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pOut3, + int8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u4_u8_i8( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u4_i8_i8( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i4_u8_i8( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i4_i8_i8( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u4_u8_i8_4x4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u4_i8_i8_4x4( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pOut3, + int8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i4_u8_i8_4x4( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i4_i8_i8_4x4( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pOut3, + int8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u4_u8_i4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u4_i8_i4( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i4_u8_i4( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i4_i8_i4( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u4_u8_i4_4x4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u4_i8_i4_4x4( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pOut3, + int8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i4_u8_i4_4x4( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i4_i8_i4_4x4( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pOut3, + int8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u4_u8_i2( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u4_i8_i2( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i4_u8_i2( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i4_i8_i2( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u4_u8_i2_4x4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u4_i8_i2_4x4( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pOut3, + int8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i4_u8_i2_4x4( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i4_i8_i2_4x4( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pOut3, + int8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u4_u4_i8( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u4_i4_i8( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i4_u4_i8( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i4_i4_i8( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u4_u4_i8_4x4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u4_i4_i8_4x4( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pOut3, + int8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i4_u4_i8_4x4( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i4_i4_i8_4x4( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pOut3, + int8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u4_u4_i4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u4_i4_i4( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i4_u4_i4( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i4_i4_i4( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u4_u4_i4_4x4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u4_i4_i4_4x4( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pOut3, + int8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i4_u4_i4_4x4( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i4_i4_i4_4x4( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pOut3, + int8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u4_u4_i2( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u4_i4_i2( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i4_u4_i2( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i4_i4_i2( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u4_u4_i2_4x4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u4_i4_i2_4x4( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pOut3, + int8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i4_u4_i2_4x4( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i4_i4_i2_4x4( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pOut3, + int8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u4_u2_i8( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u4_i2_i8( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i4_u2_i8( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i4_i2_i8( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u4_u2_i8_4x4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u4_i2_i8_4x4( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pOut3, + int8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i4_u2_i8_4x4( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i4_i2_i8_4x4( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pOut3, + int8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u4_u2_i4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u4_i2_i4( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i4_u2_i4( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i4_i2_i4( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u4_u2_i4_4x4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u4_i2_i4_4x4( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pOut3, + int8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i4_u2_i4_4x4( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i4_i2_i4_4x4( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pOut3, + int8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u4_u2_i2( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u4_i2_i2( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i4_u2_i2( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i4_i2_i2( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u4_u2_i2_4x4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u4_i2_i2_4x4( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pOut3, + int8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i4_u2_i2_4x4( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i4_i2_i2_4x4( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pOut3, + int8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u2_u8_i8( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u2_i8_i8( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i2_u8_i8( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i2_i8_i8( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u2_u8_i8_4x4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u2_i8_i8_4x4( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pOut3, + int8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i2_u8_i8_4x4( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i2_i8_i8_4x4( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pOut3, + int8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u2_u8_i4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u2_i8_i4( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i2_u8_i4( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i2_i8_i4( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u2_u8_i4_4x4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u2_i8_i4_4x4( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pOut3, + int8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i2_u8_i4_4x4( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i2_i8_i4_4x4( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pOut3, + int8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u2_u8_i2( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u2_i8_i2( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i2_u8_i2( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i2_i8_i2( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u2_u8_i2_4x4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u2_i8_i2_4x4( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pOut3, + int8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i2_u8_i2_4x4( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i2_i8_i2_4x4( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pOut3, + int8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u2_u4_i8( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u2_i4_i8( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i2_u4_i8( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i2_i4_i8( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u2_u4_i8_4x4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u2_i4_i8_4x4( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pOut3, + int8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i2_u4_i8_4x4( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i2_i4_i8_4x4( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pOut3, + int8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u2_u4_i4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u2_i4_i4( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i2_u4_i4( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i2_i4_i4( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u2_u4_i4_4x4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u2_i4_i4_4x4( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pOut3, + int8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i2_u4_i4_4x4( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i2_i4_i4_4x4( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pOut3, + int8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u2_u4_i2( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u2_i4_i2( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i2_u4_i2( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i2_i4_i2( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u2_u4_i2_4x4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u2_i4_i2_4x4( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pOut3, + int8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i2_u4_i2_4x4( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i2_i4_i2_4x4( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pOut3, + int8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u2_u2_i8( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u2_i2_i8( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i2_u2_i8( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i2_i2_i8( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u2_u2_i8_4x4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u2_i2_i8_4x4( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pOut3, + int8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i2_u2_i8_4x4( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i2_i2_i8_4x4( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pOut3, + int8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u2_u2_i4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u2_i2_i4( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i2_u2_i4( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i2_i2_i4( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u2_u2_i4_4x4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u2_i2_i4_4x4( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pOut3, + int8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i2_u2_i4_4x4( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i2_i2_i4_4x4( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pOut3, + int8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u2_u2_i2( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u2_i2_i2( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i2_u2_i2( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i2_i2_i2( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, +#ifndef PROFILE + uint8_t flag_batch_norm); +#else + uint8_t flag_batch_norm, + uint32_t *hotloop_prep_cycles, + uint32_t *hotloop_cycles, + uint32_t *requant_cycles, + uint32_t *hotloop_leftover_cycles); +#endif + +uint8_t *xpulp_nn_matmul_u2_u2_i2_4x4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_u2_i2_i2_4x4( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pOut3, + int8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i2_u2_i2_4x4( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_matmul_i2_i2_i2_4x4( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pOut2, + int8_t *pOut3, + int8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_u8_u8_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_u8_i8_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_i8_u8_i8( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_i8_i8_i8( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_u8_u8_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_u8_i8_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_i8_u8_i4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_i8_i8_i4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_u8_u8_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_u8_i8_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_i8_u8_i2( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_i8_i8_i2( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_u8_u4_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_u8_i4_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_i8_u4_i8( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_i8_i4_i8( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_u8_u4_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_u8_i4_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_i8_u4_i4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_i8_i4_i4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_u8_u4_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_u8_i4_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_i8_u4_i2( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_i8_i4_i2( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_u8_u2_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_u8_i2_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_i8_u2_i8( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_i8_i2_i8( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_u8_u2_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_u8_i2_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_i8_u2_i4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_i8_i2_i4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_u8_u2_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_u8_i2_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_i8_u2_i2( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_i8_i2_i2( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_u4_u8_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_u4_i8_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_i4_u8_i8( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_i4_i8_i8( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_u4_u8_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_u4_i8_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_i4_u8_i4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_i4_i8_i4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_u4_u8_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_u4_i8_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_i4_u8_i2( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_i4_i8_i2( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_u4_u4_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_u4_i4_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_i4_u4_i8( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_i4_i4_i8( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_u4_u4_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_u4_i4_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_i4_u4_i4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_i4_i4_i4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_u4_u4_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_u4_i4_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_i4_u4_i2( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_i4_i4_i2( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_u4_u2_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_u4_i2_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_i4_u2_i8( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_i4_i2_i8( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_u4_u2_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_u4_i2_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_i4_u2_i4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_i4_i2_i4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_u4_u2_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_u4_i2_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_i4_u2_i2( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_i4_i2_i2( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_u2_u8_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_u2_i8_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_i2_u8_i8( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_i2_i8_i8( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_u2_u8_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_u2_i8_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_i2_u8_i4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_i2_i8_i4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_u2_u8_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_u2_i8_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_i2_u8_i2( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_i2_i8_i2( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_u2_u4_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_u2_i4_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_i2_u4_i8( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_i2_i4_i8( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_u2_u4_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_u2_i4_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_i2_u4_i4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_i2_i4_i4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_u2_u4_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_u2_i4_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_i2_u4_i2( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_i2_i4_i2( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_u2_u2_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_u2_i2_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_i2_u2_i8( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_i2_i2_i8( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_u2_u2_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_u2_i2_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_i2_u2_i4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_i2_i2_i4( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_u2_u2_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_u2_i2_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_i2_u2_i2( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_depthwise_i2_i2_i2( + int8_t *pIn, + int8_t *pIm2ColBuffer, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int8_t *pWtBuffer, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_u8_i32_i8( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + uint16_t dim_vec, + uint16_t num_o_neurons); + +void xpulp_nn_linear_i8_i32_i8( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + uint16_t dim_vec, + uint16_t num_o_neurons); + +void xpulp_nn_linear_u8_i32_i4( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + uint16_t dim_vec, + uint16_t num_o_neurons); + +void xpulp_nn_linear_i8_i32_i4( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + uint16_t dim_vec, + uint16_t num_o_neurons); + +void xpulp_nn_linear_u8_i32_i2( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + uint16_t dim_vec, + uint16_t num_o_neurons); + +void xpulp_nn_linear_i8_i32_i2( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + uint16_t dim_vec, + uint16_t num_o_neurons); + +void xpulp_nn_linear_u4_i32_i8( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + uint16_t dim_vec, + uint16_t num_o_neurons); + +void xpulp_nn_linear_i4_i32_i8( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + uint16_t dim_vec, + uint16_t num_o_neurons); + +void xpulp_nn_linear_u4_i32_i4( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + uint16_t dim_vec, + uint16_t num_o_neurons); + +void xpulp_nn_linear_i4_i32_i4( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + uint16_t dim_vec, + uint16_t num_o_neurons); + +void xpulp_nn_linear_u4_i32_i2( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + uint16_t dim_vec, + uint16_t num_o_neurons); + +void xpulp_nn_linear_i4_i32_i2( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + uint16_t dim_vec, + uint16_t num_o_neurons); + +void xpulp_nn_linear_u2_i32_i8( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + uint16_t dim_vec, + uint16_t num_o_neurons); + +void xpulp_nn_linear_i2_i32_i8( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + uint16_t dim_vec, + uint16_t num_o_neurons); + +void xpulp_nn_linear_u2_i32_i4( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + uint16_t dim_vec, + uint16_t num_o_neurons); + +void xpulp_nn_linear_i2_i32_i4( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + uint16_t dim_vec, + uint16_t num_o_neurons); + +void xpulp_nn_linear_u2_i32_i2( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + uint16_t dim_vec, + uint16_t num_o_neurons); + +void xpulp_nn_linear_i2_i32_i2( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + uint16_t dim_vec, + uint16_t num_o_neurons); + +void xpulp_nn_linear_u8_u8_i8( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_u8_i8_i8( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_i8_u8_i8( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_i8_i8_i8( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_u8_u8_i4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_u8_i8_i4( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_i8_u8_i4( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_i8_i8_i4( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_u8_u8_i2( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_u8_i8_i2( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_i8_u8_i2( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_i8_i8_i2( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_u8_u4_i8( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_u8_i4_i8( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_i8_u4_i8( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_i8_i4_i8( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_u8_u4_i4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_u8_i4_i4( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_i8_u4_i4( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_i8_i4_i4( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_u8_u4_i2( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_u8_i4_i2( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_i8_u4_i2( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_i8_i4_i2( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_u8_u2_i8( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_u8_i2_i8( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_i8_u2_i8( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_i8_i2_i8( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_u8_u2_i4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_u8_i2_i4( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_i8_u2_i4( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_i8_i2_i4( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_u8_u2_i2( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_u8_i2_i2( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_i8_u2_i2( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_i8_i2_i2( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_u4_u8_i8( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_u4_i8_i8( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_i4_u8_i8( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_i4_i8_i8( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_u4_u8_i4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_u4_i8_i4( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_i4_u8_i4( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_i4_i8_i4( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_u4_u8_i2( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_u4_i8_i2( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_i4_u8_i2( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_i4_i8_i2( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_u4_u4_i8( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_u4_i4_i8( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_i4_u4_i8( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_i4_i4_i8( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_u4_u4_i4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_u4_i4_i4( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_i4_u4_i4( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_i4_i4_i4( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_u4_u4_i2( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_u4_i4_i2( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_i4_u4_i2( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_i4_i4_i2( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_u4_u2_i8( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_u4_i2_i8( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_i4_u2_i8( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_i4_i2_i8( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_u4_u2_i4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_u4_i2_i4( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_i4_u2_i4( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_i4_i2_i4( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_u4_u2_i2( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_u4_i2_i2( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_i4_u2_i2( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_i4_i2_i2( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_u2_u8_i8( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_u2_i8_i8( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_i2_u8_i8( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_i2_i8_i8( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_u2_u8_i4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_u2_i8_i4( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_i2_u8_i4( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_i2_i8_i4( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_u2_u8_i2( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_u2_i8_i2( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_i2_u8_i2( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_i2_i8_i2( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_u2_u4_i8( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_u2_i4_i8( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_i2_u4_i8( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_i2_i4_i8( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_u2_u4_i4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_u2_i4_i4( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_i2_u4_i4( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_i2_i4_i4( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_u2_u4_i2( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_u2_i4_i2( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_i2_u4_i2( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_i2_i4_i2( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_u2_u2_i8( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_u2_i2_i8( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_i2_u2_i8( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_i2_i2_i8( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_u2_u2_i4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_u2_i2_i4( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_i2_u2_i4( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_i2_i2_i4( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_u2_u2_i2( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_u2_i2_i2( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_i2_u2_i2( + int8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_linear_i2_i2_i2( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_vec, + uint16_t num_o_neurons, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_maxpool_u8( + uint8_t * pIn, + uint8_t * pOut, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + uint16_t dim_im_out_x, + uint16_t dim_im_out_y, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_t, + uint16_t padding_b, + uint16_t padding_l, + uint16_t padding_r, + uint16_t stride_x, + uint16_t stride_y); + +void xpulp_nn_maxpool_i8( + int8_t * pIn, + int8_t * pOut, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + uint16_t dim_im_out_x, + uint16_t dim_im_out_y, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_t, + uint16_t padding_b, + uint16_t padding_l, + uint16_t padding_r, + uint16_t stride_x, + uint16_t stride_y); + +void xpulp_nn_maxpool_u4( + uint8_t * pIn, + uint8_t * pOut, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + uint16_t dim_im_out_x, + uint16_t dim_im_out_y, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_t, + uint16_t padding_b, + uint16_t padding_l, + uint16_t padding_r, + uint16_t stride_x, + uint16_t stride_y); + +void xpulp_nn_maxpool_i4( + int8_t * pIn, + int8_t * pOut, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + uint16_t dim_im_out_x, + uint16_t dim_im_out_y, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_t, + uint16_t padding_b, + uint16_t padding_l, + uint16_t padding_r, + uint16_t stride_x, + uint16_t stride_y); + +void xpulp_nn_maxpool_u2( + uint8_t * pIn, + uint8_t * pOut, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + uint16_t dim_im_out_x, + uint16_t dim_im_out_y, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_t, + uint16_t padding_b, + uint16_t padding_l, + uint16_t padding_r, + uint16_t stride_x, + uint16_t stride_y); + +void xpulp_nn_maxpool_i2( + int8_t * pIn, + int8_t * pOut, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + uint16_t dim_im_out_x, + uint16_t dim_im_out_y, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_t, + uint16_t padding_b, + uint16_t padding_l, + uint16_t padding_r, + uint16_t stride_x, + uint16_t stride_y); + +void xpulp_nn_avgpool_u8_u8( + uint8_t * pIn, + uint8_t * pOut, + int32_t lambda, + uint16_t out_shift, + int32_t out_add, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + uint16_t dim_im_out_x, + uint16_t dim_im_out_y, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_t, + uint16_t padding_b, + uint16_t padding_l, + uint16_t padding_r, + uint16_t stride_x, + uint16_t stride_y, + int flag_requant +); + +void xpulp_nn_avgpool_u8_i8( + uint8_t * pIn, + int8_t * pOut, + int32_t lambda, + uint16_t out_shift, + int32_t out_add, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + uint16_t dim_im_out_x, + uint16_t dim_im_out_y, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_t, + uint16_t padding_b, + uint16_t padding_l, + uint16_t padding_r, + uint16_t stride_x, + uint16_t stride_y, + int flag_requant +); + +void xpulp_nn_avgpool_i8_u8( + int8_t * pIn, + uint8_t * pOut, + int32_t lambda, + uint16_t out_shift, + int32_t out_add, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + uint16_t dim_im_out_x, + uint16_t dim_im_out_y, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_t, + uint16_t padding_b, + uint16_t padding_l, + uint16_t padding_r, + uint16_t stride_x, + uint16_t stride_y, + int flag_requant +); + +void xpulp_nn_avgpool_i8_i8( + int8_t * pIn, + int8_t * pOut, + int32_t lambda, + uint16_t out_shift, + int32_t out_add, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + uint16_t dim_im_out_x, + uint16_t dim_im_out_y, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_t, + uint16_t padding_b, + uint16_t padding_l, + uint16_t padding_r, + uint16_t stride_x, + uint16_t stride_y, + int flag_requant +); + +void xpulp_nn_avgpool_u8_u4( + uint8_t * pIn, + uint8_t * pOut, + int32_t lambda, + uint16_t out_shift, + int32_t out_add, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + uint16_t dim_im_out_x, + uint16_t dim_im_out_y, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_t, + uint16_t padding_b, + uint16_t padding_l, + uint16_t padding_r, + uint16_t stride_x, + uint16_t stride_y, + int flag_requant +); + +void xpulp_nn_avgpool_u8_i4( + uint8_t * pIn, + int8_t * pOut, + int32_t lambda, + uint16_t out_shift, + int32_t out_add, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + uint16_t dim_im_out_x, + uint16_t dim_im_out_y, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_t, + uint16_t padding_b, + uint16_t padding_l, + uint16_t padding_r, + uint16_t stride_x, + uint16_t stride_y, + int flag_requant +); + +void xpulp_nn_avgpool_i8_u4( + int8_t * pIn, + uint8_t * pOut, + int32_t lambda, + uint16_t out_shift, + int32_t out_add, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + uint16_t dim_im_out_x, + uint16_t dim_im_out_y, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_t, + uint16_t padding_b, + uint16_t padding_l, + uint16_t padding_r, + uint16_t stride_x, + uint16_t stride_y, + int flag_requant +); + +void xpulp_nn_avgpool_i8_i4( + int8_t * pIn, + int8_t * pOut, + int32_t lambda, + uint16_t out_shift, + int32_t out_add, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + uint16_t dim_im_out_x, + uint16_t dim_im_out_y, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_t, + uint16_t padding_b, + uint16_t padding_l, + uint16_t padding_r, + uint16_t stride_x, + uint16_t stride_y, + int flag_requant +); + +void xpulp_nn_avgpool_u8_u2( + uint8_t * pIn, + uint8_t * pOut, + int32_t lambda, + uint16_t out_shift, + int32_t out_add, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + uint16_t dim_im_out_x, + uint16_t dim_im_out_y, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_t, + uint16_t padding_b, + uint16_t padding_l, + uint16_t padding_r, + uint16_t stride_x, + uint16_t stride_y, + int flag_requant +); + +void xpulp_nn_avgpool_u8_i2( + uint8_t * pIn, + int8_t * pOut, + int32_t lambda, + uint16_t out_shift, + int32_t out_add, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + uint16_t dim_im_out_x, + uint16_t dim_im_out_y, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_t, + uint16_t padding_b, + uint16_t padding_l, + uint16_t padding_r, + uint16_t stride_x, + uint16_t stride_y, + int flag_requant +); + +void xpulp_nn_avgpool_i8_u2( + int8_t * pIn, + uint8_t * pOut, + int32_t lambda, + uint16_t out_shift, + int32_t out_add, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + uint16_t dim_im_out_x, + uint16_t dim_im_out_y, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_t, + uint16_t padding_b, + uint16_t padding_l, + uint16_t padding_r, + uint16_t stride_x, + uint16_t stride_y, + int flag_requant +); + +void xpulp_nn_avgpool_i8_i2( + int8_t * pIn, + int8_t * pOut, + int32_t lambda, + uint16_t out_shift, + int32_t out_add, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + uint16_t dim_im_out_x, + uint16_t dim_im_out_y, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_t, + uint16_t padding_b, + uint16_t padding_l, + uint16_t padding_r, + uint16_t stride_x, + uint16_t stride_y, + int flag_requant +); + +void xpulp_nn_avgpool_u4_u8( + uint8_t * pIn, + uint8_t * pOut, + int32_t lambda, + uint16_t out_shift, + int32_t out_add, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + uint16_t dim_im_out_x, + uint16_t dim_im_out_y, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_t, + uint16_t padding_b, + uint16_t padding_l, + uint16_t padding_r, + uint16_t stride_x, + uint16_t stride_y, + int flag_requant +); + +void xpulp_nn_avgpool_u4_i8( + uint8_t * pIn, + int8_t * pOut, + int32_t lambda, + uint16_t out_shift, + int32_t out_add, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + uint16_t dim_im_out_x, + uint16_t dim_im_out_y, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_t, + uint16_t padding_b, + uint16_t padding_l, + uint16_t padding_r, + uint16_t stride_x, + uint16_t stride_y, + int flag_requant +); + +void xpulp_nn_avgpool_i4_u8( + int8_t * pIn, + uint8_t * pOut, + int32_t lambda, + uint16_t out_shift, + int32_t out_add, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + uint16_t dim_im_out_x, + uint16_t dim_im_out_y, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_t, + uint16_t padding_b, + uint16_t padding_l, + uint16_t padding_r, + uint16_t stride_x, + uint16_t stride_y, + int flag_requant +); + +void xpulp_nn_avgpool_i4_i8( + int8_t * pIn, + int8_t * pOut, + int32_t lambda, + uint16_t out_shift, + int32_t out_add, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + uint16_t dim_im_out_x, + uint16_t dim_im_out_y, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_t, + uint16_t padding_b, + uint16_t padding_l, + uint16_t padding_r, + uint16_t stride_x, + uint16_t stride_y, + int flag_requant +); + +void xpulp_nn_avgpool_u4_u4( + uint8_t * pIn, + uint8_t * pOut, + int32_t lambda, + uint16_t out_shift, + int32_t out_add, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + uint16_t dim_im_out_x, + uint16_t dim_im_out_y, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_t, + uint16_t padding_b, + uint16_t padding_l, + uint16_t padding_r, + uint16_t stride_x, + uint16_t stride_y, + int flag_requant +); + +void xpulp_nn_avgpool_u4_i4( + uint8_t * pIn, + int8_t * pOut, + int32_t lambda, + uint16_t out_shift, + int32_t out_add, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + uint16_t dim_im_out_x, + uint16_t dim_im_out_y, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_t, + uint16_t padding_b, + uint16_t padding_l, + uint16_t padding_r, + uint16_t stride_x, + uint16_t stride_y, + int flag_requant +); + +void xpulp_nn_avgpool_i4_u4( + int8_t * pIn, + uint8_t * pOut, + int32_t lambda, + uint16_t out_shift, + int32_t out_add, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + uint16_t dim_im_out_x, + uint16_t dim_im_out_y, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_t, + uint16_t padding_b, + uint16_t padding_l, + uint16_t padding_r, + uint16_t stride_x, + uint16_t stride_y, + int flag_requant +); + +void xpulp_nn_avgpool_i4_i4( + int8_t * pIn, + int8_t * pOut, + int32_t lambda, + uint16_t out_shift, + int32_t out_add, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + uint16_t dim_im_out_x, + uint16_t dim_im_out_y, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_t, + uint16_t padding_b, + uint16_t padding_l, + uint16_t padding_r, + uint16_t stride_x, + uint16_t stride_y, + int flag_requant +); + +void xpulp_nn_avgpool_u4_u2( + uint8_t * pIn, + uint8_t * pOut, + int32_t lambda, + uint16_t out_shift, + int32_t out_add, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + uint16_t dim_im_out_x, + uint16_t dim_im_out_y, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_t, + uint16_t padding_b, + uint16_t padding_l, + uint16_t padding_r, + uint16_t stride_x, + uint16_t stride_y, + int flag_requant +); + +void xpulp_nn_avgpool_u4_i2( + uint8_t * pIn, + int8_t * pOut, + int32_t lambda, + uint16_t out_shift, + int32_t out_add, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + uint16_t dim_im_out_x, + uint16_t dim_im_out_y, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_t, + uint16_t padding_b, + uint16_t padding_l, + uint16_t padding_r, + uint16_t stride_x, + uint16_t stride_y, + int flag_requant +); + +void xpulp_nn_avgpool_i4_u2( + int8_t * pIn, + uint8_t * pOut, + int32_t lambda, + uint16_t out_shift, + int32_t out_add, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + uint16_t dim_im_out_x, + uint16_t dim_im_out_y, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_t, + uint16_t padding_b, + uint16_t padding_l, + uint16_t padding_r, + uint16_t stride_x, + uint16_t stride_y, + int flag_requant +); + +void xpulp_nn_avgpool_i4_i2( + int8_t * pIn, + int8_t * pOut, + int32_t lambda, + uint16_t out_shift, + int32_t out_add, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + uint16_t dim_im_out_x, + uint16_t dim_im_out_y, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_t, + uint16_t padding_b, + uint16_t padding_l, + uint16_t padding_r, + uint16_t stride_x, + uint16_t stride_y, + int flag_requant +); + +void xpulp_nn_avgpool_u2_u8( + uint8_t * pIn, + uint8_t * pOut, + int32_t lambda, + uint16_t out_shift, + int32_t out_add, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + uint16_t dim_im_out_x, + uint16_t dim_im_out_y, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_t, + uint16_t padding_b, + uint16_t padding_l, + uint16_t padding_r, + uint16_t stride_x, + uint16_t stride_y, + int flag_requant +); + +void xpulp_nn_avgpool_u2_i8( + uint8_t * pIn, + int8_t * pOut, + int32_t lambda, + uint16_t out_shift, + int32_t out_add, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + uint16_t dim_im_out_x, + uint16_t dim_im_out_y, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_t, + uint16_t padding_b, + uint16_t padding_l, + uint16_t padding_r, + uint16_t stride_x, + uint16_t stride_y, + int flag_requant +); + +void xpulp_nn_avgpool_i2_u8( + int8_t * pIn, + uint8_t * pOut, + int32_t lambda, + uint16_t out_shift, + int32_t out_add, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + uint16_t dim_im_out_x, + uint16_t dim_im_out_y, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_t, + uint16_t padding_b, + uint16_t padding_l, + uint16_t padding_r, + uint16_t stride_x, + uint16_t stride_y, + int flag_requant +); + +void xpulp_nn_avgpool_i2_i8( + int8_t * pIn, + int8_t * pOut, + int32_t lambda, + uint16_t out_shift, + int32_t out_add, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + uint16_t dim_im_out_x, + uint16_t dim_im_out_y, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_t, + uint16_t padding_b, + uint16_t padding_l, + uint16_t padding_r, + uint16_t stride_x, + uint16_t stride_y, + int flag_requant +); + +void xpulp_nn_avgpool_u2_u4( + uint8_t * pIn, + uint8_t * pOut, + int32_t lambda, + uint16_t out_shift, + int32_t out_add, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + uint16_t dim_im_out_x, + uint16_t dim_im_out_y, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_t, + uint16_t padding_b, + uint16_t padding_l, + uint16_t padding_r, + uint16_t stride_x, + uint16_t stride_y, + int flag_requant +); + +void xpulp_nn_avgpool_u2_i4( + uint8_t * pIn, + int8_t * pOut, + int32_t lambda, + uint16_t out_shift, + int32_t out_add, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + uint16_t dim_im_out_x, + uint16_t dim_im_out_y, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_t, + uint16_t padding_b, + uint16_t padding_l, + uint16_t padding_r, + uint16_t stride_x, + uint16_t stride_y, + int flag_requant +); + +void xpulp_nn_avgpool_i2_u4( + int8_t * pIn, + uint8_t * pOut, + int32_t lambda, + uint16_t out_shift, + int32_t out_add, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + uint16_t dim_im_out_x, + uint16_t dim_im_out_y, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_t, + uint16_t padding_b, + uint16_t padding_l, + uint16_t padding_r, + uint16_t stride_x, + uint16_t stride_y, + int flag_requant +); + +void xpulp_nn_avgpool_i2_i4( + int8_t * pIn, + int8_t * pOut, + int32_t lambda, + uint16_t out_shift, + int32_t out_add, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + uint16_t dim_im_out_x, + uint16_t dim_im_out_y, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_t, + uint16_t padding_b, + uint16_t padding_l, + uint16_t padding_r, + uint16_t stride_x, + uint16_t stride_y, + int flag_requant +); + +void xpulp_nn_avgpool_u2_u2( + uint8_t * pIn, + uint8_t * pOut, + int32_t lambda, + uint16_t out_shift, + int32_t out_add, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + uint16_t dim_im_out_x, + uint16_t dim_im_out_y, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_t, + uint16_t padding_b, + uint16_t padding_l, + uint16_t padding_r, + uint16_t stride_x, + uint16_t stride_y, + int flag_requant +); + +void xpulp_nn_avgpool_u2_i2( + uint8_t * pIn, + int8_t * pOut, + int32_t lambda, + uint16_t out_shift, + int32_t out_add, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + uint16_t dim_im_out_x, + uint16_t dim_im_out_y, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_t, + uint16_t padding_b, + uint16_t padding_l, + uint16_t padding_r, + uint16_t stride_x, + uint16_t stride_y, + int flag_requant +); + +void xpulp_nn_avgpool_i2_u2( + int8_t * pIn, + uint8_t * pOut, + int32_t lambda, + uint16_t out_shift, + int32_t out_add, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + uint16_t dim_im_out_x, + uint16_t dim_im_out_y, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_t, + uint16_t padding_b, + uint16_t padding_l, + uint16_t padding_r, + uint16_t stride_x, + uint16_t stride_y, + int flag_requant +); + +void xpulp_nn_avgpool_i2_i2( + int8_t * pIn, + int8_t * pOut, + int32_t lambda, + uint16_t out_shift, + int32_t out_add, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + uint16_t dim_im_out_x, + uint16_t dim_im_out_y, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_t, + uint16_t padding_b, + uint16_t padding_l, + uint16_t padding_r, + uint16_t stride_x, + uint16_t stride_y, + int flag_requant +); + +void xpulp_nn_add_u8_u8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + uint16_t out_mult1, + uint16_t out_mult2, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in); + +void xpulp_nn_add_u8_u8_u8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u8_u8_u4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u8_u8_u2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u8_u8_i8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u8_u8_i4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u8_u8_i2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u8_i8_u8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u8_i8_u4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u8_i8_u2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u8_i8_i8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u8_i8_i4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u8_i8_i2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i8_u8_u8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i8_u8_u4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i8_u8_u2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i8_u8_i8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i8_u8_i4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i8_u8_i2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i8_i8_u8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i8_i8_u4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i8_i8_u2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i8_i8_i8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i8_i8_i4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i8_i8_i2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u8_u4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + uint16_t out_mult1, + uint16_t out_mult2, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in); + +void xpulp_nn_add_u8_u4_u8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u8_u4_u4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u8_u4_u2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u8_u4_i8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u8_u4_i4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u8_u4_i2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u8_i4_u8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u8_i4_u4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u8_i4_u2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u8_i4_i8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u8_i4_i4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u8_i4_i2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i8_u4_u8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i8_u4_u4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i8_u4_u2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i8_u4_i8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i8_u4_i4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i8_u4_i2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i8_i4_u8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i8_i4_u4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i8_i4_u2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i8_i4_i8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i8_i4_i4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i8_i4_i2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u8_u2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + uint16_t out_mult1, + uint16_t out_mult2, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in); + +void xpulp_nn_add_u8_u2_u8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u8_u2_u4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u8_u2_u2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u8_u2_i8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u8_u2_i4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u8_u2_i2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u8_i2_u8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u8_i2_u4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u8_i2_u2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u8_i2_i8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u8_i2_i4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u8_i2_i2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i8_u2_u8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i8_u2_u4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i8_u2_u2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i8_u2_i8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i8_u2_i4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i8_u2_i2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i8_i2_u8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i8_i2_u4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i8_i2_u2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i8_i2_i8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i8_i2_i4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i8_i2_i2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u4_u8_u8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u4_u8_u4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u4_u8_u2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u4_u8_i8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u4_u8_i4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u4_u8_i2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u4_i8_u8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u4_i8_u4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u4_i8_u2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u4_i8_i8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u4_i8_i4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u4_i8_i2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i4_u8_u8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i4_u8_u4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i4_u8_u2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i4_u8_i8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i4_u8_i4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i4_u8_i2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i4_i8_u8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i4_i8_u4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i4_i8_u2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i4_i8_i8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i4_i8_i4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i4_i8_i2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u4_u4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + uint16_t out_mult1, + uint16_t out_mult2, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in); + +void xpulp_nn_add_u4_u4_u8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u4_u4_u4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u4_u4_u2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u4_u4_i8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u4_u4_i4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u4_u4_i2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u4_i4_u8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u4_i4_u4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u4_i4_u2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u4_i4_i8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u4_i4_i4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u4_i4_i2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i4_u4_u8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i4_u4_u4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i4_u4_u2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i4_u4_i8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i4_u4_i4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i4_u4_i2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i4_i4_u8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i4_i4_u4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i4_i4_u2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i4_i4_i8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i4_i4_i4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i4_i4_i2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u4_u2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + uint16_t out_mult1, + uint16_t out_mult2, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in); + +void xpulp_nn_add_u4_u2_u8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u4_u2_u4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u4_u2_u2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u4_u2_i8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u4_u2_i4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u4_u2_i2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u4_i2_u8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u4_i2_u4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u4_i2_u2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u4_i2_i8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u4_i2_i4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u4_i2_i2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i4_u2_u8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i4_u2_u4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i4_u2_u2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i4_u2_i8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i4_u2_i4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i4_u2_i2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i4_i2_u8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i4_i2_u4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i4_i2_u2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i4_i2_i8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i4_i2_i4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i4_i2_i2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u2_u8_u8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u2_u8_u4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u2_u8_u2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u2_u8_i8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u2_u8_i4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u2_u8_i2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u2_i8_u8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u2_i8_u4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u2_i8_u2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u2_i8_i8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u2_i8_i4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u2_i8_i2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i2_u8_u8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i2_u8_u4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i2_u8_u2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i2_u8_i8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i2_u8_i4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i2_u8_i2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i2_i8_u8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i2_i8_u4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i2_i8_u2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i2_i8_i8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i2_i8_i4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i2_i8_i2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u2_u4_u8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u2_u4_u4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u2_u4_u2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u2_u4_i8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u2_u4_i4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u2_u4_i2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u2_i4_u8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u2_i4_u4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u2_i4_u2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u2_i4_i8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u2_i4_i4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u2_i4_i2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i2_u4_u8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i2_u4_u4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i2_u4_u2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i2_u4_i8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i2_u4_i4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i2_u4_i2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i2_i4_u8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i2_i4_u4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i2_i4_u2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i2_i4_i8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i2_i4_i4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i2_i4_i2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u2_u2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + uint16_t out_mult1, + uint16_t out_mult2, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in); + +void xpulp_nn_add_u2_u2_u8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u2_u2_u4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u2_u2_u2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u2_u2_i8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u2_u2_i4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u2_u2_i2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u2_i2_u8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u2_i2_u4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u2_i2_u2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u2_i2_i8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u2_i2_i4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u2_i2_i2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i2_u2_u8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i2_u2_u4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i2_u2_u2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i2_u2_i8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i2_u2_i4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i2_u2_i2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i2_i2_u8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i2_i2_u4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i2_i2_u2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i2_i2_i8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i2_i2_i4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i2_i2_i2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + + + +#endif diff --git a/rt_nn_tests/xptnn_maxpool/pulp_nn_mix_kernels.h b/rt_nn_tests/xptnn_maxpool/pulp_nn_mix_kernels.h new file mode 100644 index 0000000..8b2a3c6 --- /dev/null +++ b/rt_nn_tests/xptnn_maxpool/pulp_nn_mix_kernels.h @@ -0,0 +1,7093 @@ +/* + * pulp_nn_kernels.h + * Nazareno Bruschi + * + * Copyright (C) 2019-2020 University of Bologna + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef __XPULPNN-MIXED_KERNELS__ +#define __XPULPNN-MIXED_KERNELS__ + +void xpulp_nn_mix_conv_u8_u8_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_mix_conv_u8_u8_i8_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_mix_conv_u8_u8_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_mix_conv_u8_u8_i4_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_mix_conv_u8_u8_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_mix_conv_u8_u8_i2_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_mix_conv_u8_u4_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_mix_conv_u8_u4_i8_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_mix_conv_u8_u4_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_mix_conv_u8_u4_i4_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_mix_conv_u8_u4_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_mix_conv_u8_u4_i2_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_mix_conv_u8_u2_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_mix_conv_u8_u2_i8_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_mix_conv_u8_u2_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_mix_conv_u8_u2_i4_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_mix_conv_u8_u2_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_mix_conv_u8_u2_i2_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_mix_conv_u4_u8_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_mix_conv_u4_u8_i8_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_mix_conv_u4_u8_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_mix_conv_u4_u8_i4_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_mix_conv_u4_u8_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_mix_conv_u4_u8_i2_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_mix_conv_u4_u4_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_mix_conv_u4_u4_i8_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_mix_conv_u4_u4_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_mix_conv_u4_u4_i4_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_mix_conv_u4_u4_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_mix_conv_u4_u4_i2_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_mix_conv_u4_u2_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_mix_conv_u4_u2_i8_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_mix_conv_u4_u2_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_mix_conv_u4_u2_i4_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_mix_conv_u4_u2_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_mix_conv_u4_u2_i2_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_mix_conv_u2_u8_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_mix_conv_u2_u8_i8_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_mix_conv_u2_u8_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_mix_conv_u2_u8_i4_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_mix_conv_u2_u8_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_mix_conv_u2_u8_i2_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_mix_conv_u2_u4_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_mix_conv_u2_u4_i8_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_mix_conv_u2_u4_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_mix_conv_u2_u4_i4_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_mix_conv_u2_u4_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_mix_conv_u2_u4_i2_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_mix_conv_u2_u2_i8( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_mix_conv_u2_u2_i8_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_mix_conv_u2_u2_i4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_mix_conv_u2_u2_i4_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_mix_conv_u2_u2_i2( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_mix_conv_u2_u2_i2_4x4( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, + uint16_t stride_y, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_mix_matmul_u8_u8_i8( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_mix_matmul_u8_u8_i8_4x4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_mix_matmul_u8_u8_i4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_mix_matmul_u8_u8_i4_4x4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_mix_matmul_u8_u8_i2( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_mix_matmul_u8_u8_i2_4x4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_mix_matmul_u8_u4_i8( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_mix_matmul_u8_u4_i8_4x4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_mix_matmul_u8_u4_i4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_mix_matmul_u8_u4_i4_4x4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_mix_matmul_u8_u4_i2( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_mix_matmul_u8_u4_i2_4x4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_mix_matmul_u8_u2_i8( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_mix_matmul_u8_u2_i8_4x4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_mix_matmul_u8_u2_i4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_mix_matmul_u8_u2_i4_4x4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_mix_matmul_u8_u2_i2( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_mix_matmul_u8_u2_i2_4x4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_mix_matmul_u4_u8_i8( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_mix_matmul_u4_u8_i8_4x4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_mix_matmul_u4_u8_i4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_mix_matmul_u4_u8_i4_4x4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_mix_matmul_u4_u8_i2( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_mix_matmul_u4_u8_i2_4x4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_mix_matmul_u4_u4_i8( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_mix_matmul_u4_u4_i8_4x4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_mix_matmul_u4_u4_i4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_mix_matmul_u4_u4_i4_4x4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_mix_matmul_u4_u4_i2( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_mix_matmul_u4_u4_i2_4x4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_mix_matmul_u4_u2_i8( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_mix_matmul_u4_u2_i8_4x4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_mix_matmul_u4_u2_i4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_mix_matmul_u4_u2_i4_4x4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_mix_matmul_u4_u2_i2( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_mix_matmul_u4_u2_i2_4x4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_mix_matmul_u2_u8_i8( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_mix_matmul_u2_u8_i8_4x4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_mix_matmul_u2_u8_i4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_mix_matmul_u2_u8_i4_4x4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_mix_matmul_u2_u8_i2( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_mix_matmul_u2_u8_i2_4x4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_mix_matmul_u2_u4_i8( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_mix_matmul_u2_u4_i8_4x4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_mix_matmul_u2_u4_i4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_mix_matmul_u2_u4_i4_4x4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_mix_matmul_u2_u4_i2( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_mix_matmul_u2_u4_i2_4x4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_mix_matmul_u2_u2_i8( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_mix_matmul_u2_u2_i8_4x4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_mix_matmul_u2_u2_i4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_mix_matmul_u2_u2_i4_4x4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_mix_matmul_u2_u2_i2( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +uint8_t *xpulp_nn_mix_matmul_u2_u2_i2_4x4( + uint8_t *pIn, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pOut3, + uint8_t *pOut4, + int8_t *pWeight, + int32_t *pKappa, + int32_t *pLambda, + uint16_t out_mul, + uint16_t out_shift, + uint16_t num_col_im2col, + uint16_t ch_out, + uint8_t flag_relu, + uint8_t flag_batchnorm); + +void xpulp_nn_avgpool_u8_u8( + uint8_t * pIn, + uint8_t * pOut, + int32_t lambda, + uint16_t out_shift, + int32_t out_add, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + uint16_t dim_im_out_x, + uint16_t dim_im_out_y, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_t, + uint16_t padding_b, + uint16_t padding_l, + uint16_t padding_r, + uint16_t stride_x, + uint16_t stride_y, + int flag_requant +); + +void xpulp_nn_avgpool_u8_i8( + uint8_t * pIn, + int8_t * pOut, + int32_t lambda, + uint16_t out_shift, + int32_t out_add, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + uint16_t dim_im_out_x, + uint16_t dim_im_out_y, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_t, + uint16_t padding_b, + uint16_t padding_l, + uint16_t padding_r, + uint16_t stride_x, + uint16_t stride_y, + int flag_requant +); + +void xpulp_nn_avgpool_i8_u8( + int8_t * pIn, + uint8_t * pOut, + int32_t lambda, + uint16_t out_shift, + int32_t out_add, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + uint16_t dim_im_out_x, + uint16_t dim_im_out_y, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_t, + uint16_t padding_b, + uint16_t padding_l, + uint16_t padding_r, + uint16_t stride_x, + uint16_t stride_y, + int flag_requant +); + +void xpulp_nn_avgpool_i8_i8( + int8_t * pIn, + int8_t * pOut, + int32_t lambda, + uint16_t out_shift, + int32_t out_add, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + uint16_t dim_im_out_x, + uint16_t dim_im_out_y, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_t, + uint16_t padding_b, + uint16_t padding_l, + uint16_t padding_r, + uint16_t stride_x, + uint16_t stride_y, + int flag_requant +); + +void xpulp_nn_avgpool_u8_u4( + uint8_t * pIn, + uint8_t * pOut, + int32_t lambda, + uint16_t out_shift, + int32_t out_add, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + uint16_t dim_im_out_x, + uint16_t dim_im_out_y, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_t, + uint16_t padding_b, + uint16_t padding_l, + uint16_t padding_r, + uint16_t stride_x, + uint16_t stride_y, + int flag_requant +); + +void xpulp_nn_avgpool_u8_i4( + uint8_t * pIn, + int8_t * pOut, + int32_t lambda, + uint16_t out_shift, + int32_t out_add, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + uint16_t dim_im_out_x, + uint16_t dim_im_out_y, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_t, + uint16_t padding_b, + uint16_t padding_l, + uint16_t padding_r, + uint16_t stride_x, + uint16_t stride_y, + int flag_requant +); + +void xpulp_nn_avgpool_i8_u4( + int8_t * pIn, + uint8_t * pOut, + int32_t lambda, + uint16_t out_shift, + int32_t out_add, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + uint16_t dim_im_out_x, + uint16_t dim_im_out_y, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_t, + uint16_t padding_b, + uint16_t padding_l, + uint16_t padding_r, + uint16_t stride_x, + uint16_t stride_y, + int flag_requant +); + +void xpulp_nn_avgpool_i8_i4( + int8_t * pIn, + int8_t * pOut, + int32_t lambda, + uint16_t out_shift, + int32_t out_add, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + uint16_t dim_im_out_x, + uint16_t dim_im_out_y, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_t, + uint16_t padding_b, + uint16_t padding_l, + uint16_t padding_r, + uint16_t stride_x, + uint16_t stride_y, + int flag_requant +); + +void xpulp_nn_avgpool_u8_u2( + uint8_t * pIn, + uint8_t * pOut, + int32_t lambda, + uint16_t out_shift, + int32_t out_add, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + uint16_t dim_im_out_x, + uint16_t dim_im_out_y, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_t, + uint16_t padding_b, + uint16_t padding_l, + uint16_t padding_r, + uint16_t stride_x, + uint16_t stride_y, + int flag_requant +); + +void xpulp_nn_avgpool_u8_i2( + uint8_t * pIn, + int8_t * pOut, + int32_t lambda, + uint16_t out_shift, + int32_t out_add, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + uint16_t dim_im_out_x, + uint16_t dim_im_out_y, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_t, + uint16_t padding_b, + uint16_t padding_l, + uint16_t padding_r, + uint16_t stride_x, + uint16_t stride_y, + int flag_requant +); + +void xpulp_nn_avgpool_i8_u2( + int8_t * pIn, + uint8_t * pOut, + int32_t lambda, + uint16_t out_shift, + int32_t out_add, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + uint16_t dim_im_out_x, + uint16_t dim_im_out_y, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_t, + uint16_t padding_b, + uint16_t padding_l, + uint16_t padding_r, + uint16_t stride_x, + uint16_t stride_y, + int flag_requant +); + +void xpulp_nn_avgpool_i8_i2( + int8_t * pIn, + int8_t * pOut, + int32_t lambda, + uint16_t out_shift, + int32_t out_add, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + uint16_t dim_im_out_x, + uint16_t dim_im_out_y, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_t, + uint16_t padding_b, + uint16_t padding_l, + uint16_t padding_r, + uint16_t stride_x, + uint16_t stride_y, + int flag_requant +); + +void xpulp_nn_avgpool_u4_u8( + uint8_t * pIn, + uint8_t * pOut, + int32_t lambda, + uint16_t out_shift, + int32_t out_add, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + uint16_t dim_im_out_x, + uint16_t dim_im_out_y, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_t, + uint16_t padding_b, + uint16_t padding_l, + uint16_t padding_r, + uint16_t stride_x, + uint16_t stride_y, + int flag_requant +); + +void xpulp_nn_avgpool_u4_i8( + uint8_t * pIn, + int8_t * pOut, + int32_t lambda, + uint16_t out_shift, + int32_t out_add, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + uint16_t dim_im_out_x, + uint16_t dim_im_out_y, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_t, + uint16_t padding_b, + uint16_t padding_l, + uint16_t padding_r, + uint16_t stride_x, + uint16_t stride_y, + int flag_requant +); + +void xpulp_nn_avgpool_i4_u8( + int8_t * pIn, + uint8_t * pOut, + int32_t lambda, + uint16_t out_shift, + int32_t out_add, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + uint16_t dim_im_out_x, + uint16_t dim_im_out_y, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_t, + uint16_t padding_b, + uint16_t padding_l, + uint16_t padding_r, + uint16_t stride_x, + uint16_t stride_y, + int flag_requant +); + +void xpulp_nn_avgpool_i4_i8( + int8_t * pIn, + int8_t * pOut, + int32_t lambda, + uint16_t out_shift, + int32_t out_add, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + uint16_t dim_im_out_x, + uint16_t dim_im_out_y, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_t, + uint16_t padding_b, + uint16_t padding_l, + uint16_t padding_r, + uint16_t stride_x, + uint16_t stride_y, + int flag_requant +); + +void xpulp_nn_avgpool_u4_u4( + uint8_t * pIn, + uint8_t * pOut, + int32_t lambda, + uint16_t out_shift, + int32_t out_add, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + uint16_t dim_im_out_x, + uint16_t dim_im_out_y, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_t, + uint16_t padding_b, + uint16_t padding_l, + uint16_t padding_r, + uint16_t stride_x, + uint16_t stride_y, + int flag_requant +); + +void xpulp_nn_avgpool_u4_i4( + uint8_t * pIn, + int8_t * pOut, + int32_t lambda, + uint16_t out_shift, + int32_t out_add, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + uint16_t dim_im_out_x, + uint16_t dim_im_out_y, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_t, + uint16_t padding_b, + uint16_t padding_l, + uint16_t padding_r, + uint16_t stride_x, + uint16_t stride_y, + int flag_requant +); + +void xpulp_nn_avgpool_i4_u4( + int8_t * pIn, + uint8_t * pOut, + int32_t lambda, + uint16_t out_shift, + int32_t out_add, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + uint16_t dim_im_out_x, + uint16_t dim_im_out_y, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_t, + uint16_t padding_b, + uint16_t padding_l, + uint16_t padding_r, + uint16_t stride_x, + uint16_t stride_y, + int flag_requant +); + +void xpulp_nn_avgpool_i4_i4( + int8_t * pIn, + int8_t * pOut, + int32_t lambda, + uint16_t out_shift, + int32_t out_add, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + uint16_t dim_im_out_x, + uint16_t dim_im_out_y, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_t, + uint16_t padding_b, + uint16_t padding_l, + uint16_t padding_r, + uint16_t stride_x, + uint16_t stride_y, + int flag_requant +); + +void xpulp_nn_avgpool_u4_u2( + uint8_t * pIn, + uint8_t * pOut, + int32_t lambda, + uint16_t out_shift, + int32_t out_add, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + uint16_t dim_im_out_x, + uint16_t dim_im_out_y, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_t, + uint16_t padding_b, + uint16_t padding_l, + uint16_t padding_r, + uint16_t stride_x, + uint16_t stride_y, + int flag_requant +); + +void xpulp_nn_avgpool_u4_i2( + uint8_t * pIn, + int8_t * pOut, + int32_t lambda, + uint16_t out_shift, + int32_t out_add, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + uint16_t dim_im_out_x, + uint16_t dim_im_out_y, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_t, + uint16_t padding_b, + uint16_t padding_l, + uint16_t padding_r, + uint16_t stride_x, + uint16_t stride_y, + int flag_requant +); + +void xpulp_nn_avgpool_i4_u2( + int8_t * pIn, + uint8_t * pOut, + int32_t lambda, + uint16_t out_shift, + int32_t out_add, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + uint16_t dim_im_out_x, + uint16_t dim_im_out_y, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_t, + uint16_t padding_b, + uint16_t padding_l, + uint16_t padding_r, + uint16_t stride_x, + uint16_t stride_y, + int flag_requant +); + +void xpulp_nn_avgpool_i4_i2( + int8_t * pIn, + int8_t * pOut, + int32_t lambda, + uint16_t out_shift, + int32_t out_add, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + uint16_t dim_im_out_x, + uint16_t dim_im_out_y, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_t, + uint16_t padding_b, + uint16_t padding_l, + uint16_t padding_r, + uint16_t stride_x, + uint16_t stride_y, + int flag_requant +); + +void xpulp_nn_avgpool_u2_u8( + uint8_t * pIn, + uint8_t * pOut, + int32_t lambda, + uint16_t out_shift, + int32_t out_add, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + uint16_t dim_im_out_x, + uint16_t dim_im_out_y, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_t, + uint16_t padding_b, + uint16_t padding_l, + uint16_t padding_r, + uint16_t stride_x, + uint16_t stride_y, + int flag_requant +); + +void xpulp_nn_avgpool_u2_i8( + uint8_t * pIn, + int8_t * pOut, + int32_t lambda, + uint16_t out_shift, + int32_t out_add, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + uint16_t dim_im_out_x, + uint16_t dim_im_out_y, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_t, + uint16_t padding_b, + uint16_t padding_l, + uint16_t padding_r, + uint16_t stride_x, + uint16_t stride_y, + int flag_requant +); + +void xpulp_nn_avgpool_i2_u8( + int8_t * pIn, + uint8_t * pOut, + int32_t lambda, + uint16_t out_shift, + int32_t out_add, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + uint16_t dim_im_out_x, + uint16_t dim_im_out_y, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_t, + uint16_t padding_b, + uint16_t padding_l, + uint16_t padding_r, + uint16_t stride_x, + uint16_t stride_y, + int flag_requant +); + +void xpulp_nn_avgpool_i2_i8( + int8_t * pIn, + int8_t * pOut, + int32_t lambda, + uint16_t out_shift, + int32_t out_add, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + uint16_t dim_im_out_x, + uint16_t dim_im_out_y, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_t, + uint16_t padding_b, + uint16_t padding_l, + uint16_t padding_r, + uint16_t stride_x, + uint16_t stride_y, + int flag_requant +); + +void xpulp_nn_avgpool_u2_u4( + uint8_t * pIn, + uint8_t * pOut, + int32_t lambda, + uint16_t out_shift, + int32_t out_add, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + uint16_t dim_im_out_x, + uint16_t dim_im_out_y, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_t, + uint16_t padding_b, + uint16_t padding_l, + uint16_t padding_r, + uint16_t stride_x, + uint16_t stride_y, + int flag_requant +); + +void xpulp_nn_avgpool_u2_i4( + uint8_t * pIn, + int8_t * pOut, + int32_t lambda, + uint16_t out_shift, + int32_t out_add, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + uint16_t dim_im_out_x, + uint16_t dim_im_out_y, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_t, + uint16_t padding_b, + uint16_t padding_l, + uint16_t padding_r, + uint16_t stride_x, + uint16_t stride_y, + int flag_requant +); + +void xpulp_nn_avgpool_i2_u4( + int8_t * pIn, + uint8_t * pOut, + int32_t lambda, + uint16_t out_shift, + int32_t out_add, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + uint16_t dim_im_out_x, + uint16_t dim_im_out_y, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_t, + uint16_t padding_b, + uint16_t padding_l, + uint16_t padding_r, + uint16_t stride_x, + uint16_t stride_y, + int flag_requant +); + +void xpulp_nn_avgpool_i2_i4( + int8_t * pIn, + int8_t * pOut, + int32_t lambda, + uint16_t out_shift, + int32_t out_add, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + uint16_t dim_im_out_x, + uint16_t dim_im_out_y, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_t, + uint16_t padding_b, + uint16_t padding_l, + uint16_t padding_r, + uint16_t stride_x, + uint16_t stride_y, + int flag_requant +); + +void xpulp_nn_avgpool_u2_u2( + uint8_t * pIn, + uint8_t * pOut, + int32_t lambda, + uint16_t out_shift, + int32_t out_add, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + uint16_t dim_im_out_x, + uint16_t dim_im_out_y, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_t, + uint16_t padding_b, + uint16_t padding_l, + uint16_t padding_r, + uint16_t stride_x, + uint16_t stride_y, + int flag_requant +); + +void xpulp_nn_avgpool_u2_i2( + uint8_t * pIn, + int8_t * pOut, + int32_t lambda, + uint16_t out_shift, + int32_t out_add, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + uint16_t dim_im_out_x, + uint16_t dim_im_out_y, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_t, + uint16_t padding_b, + uint16_t padding_l, + uint16_t padding_r, + uint16_t stride_x, + uint16_t stride_y, + int flag_requant +); + +void xpulp_nn_avgpool_i2_u2( + int8_t * pIn, + uint8_t * pOut, + int32_t lambda, + uint16_t out_shift, + int32_t out_add, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + uint16_t dim_im_out_x, + uint16_t dim_im_out_y, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_t, + uint16_t padding_b, + uint16_t padding_l, + uint16_t padding_r, + uint16_t stride_x, + uint16_t stride_y, + int flag_requant +); + +void xpulp_nn_avgpool_i2_i2( + int8_t * pIn, + int8_t * pOut, + int32_t lambda, + uint16_t out_shift, + int32_t out_add, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + uint16_t dim_im_out_x, + uint16_t dim_im_out_y, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_t, + uint16_t padding_b, + uint16_t padding_l, + uint16_t padding_r, + uint16_t stride_x, + uint16_t stride_y, + int flag_requant +); + +void xpulp_nn_add_u8_u8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + uint16_t out_mult1, + uint16_t out_mult2, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in); + +void xpulp_nn_add_u8_u8_u8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u8_u8_u4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u8_u8_u2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u8_u8_i8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u8_u8_i4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u8_u8_i2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u8_i8_u8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u8_i8_u4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u8_i8_u2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u8_i8_i8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u8_i8_i4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u8_i8_i2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i8_u8_u8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i8_u8_u4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i8_u8_u2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i8_u8_i8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i8_u8_i4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i8_u8_i2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i8_i8_u8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i8_i8_u4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i8_i8_u2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i8_i8_i8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i8_i8_i4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i8_i8_i2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u8_u4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + uint16_t out_mult1, + uint16_t out_mult2, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in); + +void xpulp_nn_add_u8_u4_u8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u8_u4_u4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u8_u4_u2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u8_u4_i8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u8_u4_i4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u8_u4_i2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u8_i4_u8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u8_i4_u4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u8_i4_u2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u8_i4_i8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u8_i4_i4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u8_i4_i2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i8_u4_u8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i8_u4_u4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i8_u4_u2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i8_u4_i8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i8_u4_i4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i8_u4_i2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i8_i4_u8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i8_i4_u4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i8_i4_u2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i8_i4_i8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i8_i4_i4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i8_i4_i2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u8_u2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + uint16_t out_mult1, + uint16_t out_mult2, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in); + +void xpulp_nn_add_u8_u2_u8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u8_u2_u4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u8_u2_u2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u8_u2_i8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u8_u2_i4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u8_u2_i2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u8_i2_u8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u8_i2_u4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u8_i2_u2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u8_i2_i8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u8_i2_i4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u8_i2_i2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i8_u2_u8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i8_u2_u4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i8_u2_u2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i8_u2_i8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i8_u2_i4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i8_u2_i2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i8_i2_u8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i8_i2_u4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i8_i2_u2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i8_i2_i8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i8_i2_i4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i8_i2_i2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u4_u8_u8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u4_u8_u4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u4_u8_u2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u4_u8_i8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u4_u8_i4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u4_u8_i2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u4_i8_u8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u4_i8_u4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u4_i8_u2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u4_i8_i8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u4_i8_i4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u4_i8_i2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i4_u8_u8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i4_u8_u4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i4_u8_u2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i4_u8_i8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i4_u8_i4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i4_u8_i2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i4_i8_u8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i4_i8_u4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i4_i8_u2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i4_i8_i8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i4_i8_i4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i4_i8_i2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u4_u4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + uint16_t out_mult1, + uint16_t out_mult2, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in); + +void xpulp_nn_add_u4_u4_u8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u4_u4_u4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u4_u4_u2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u4_u4_i8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u4_u4_i4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u4_u4_i2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u4_i4_u8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u4_i4_u4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u4_i4_u2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u4_i4_i8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u4_i4_i4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u4_i4_i2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i4_u4_u8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i4_u4_u4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i4_u4_u2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i4_u4_i8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i4_u4_i4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i4_u4_i2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i4_i4_u8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i4_i4_u4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i4_i4_u2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i4_i4_i8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i4_i4_i4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i4_i4_i2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u4_u2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + uint16_t out_mult1, + uint16_t out_mult2, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in); + +void xpulp_nn_add_u4_u2_u8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u4_u2_u4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u4_u2_u2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u4_u2_i8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u4_u2_i4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u4_u2_i2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u4_i2_u8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u4_i2_u4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u4_i2_u2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u4_i2_i8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u4_i2_i4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u4_i2_i2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i4_u2_u8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i4_u2_u4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i4_u2_u2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i4_u2_i8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i4_u2_i4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i4_u2_i2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i4_i2_u8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i4_i2_u4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i4_i2_u2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i4_i2_i8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i4_i2_i4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i4_i2_i2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u2_u8_u8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u2_u8_u4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u2_u8_u2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u2_u8_i8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u2_u8_i4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u2_u8_i2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u2_i8_u8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u2_i8_u4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u2_i8_u2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u2_i8_i8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u2_i8_i4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u2_i8_i2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i2_u8_u8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i2_u8_u4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i2_u8_u2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i2_u8_i8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i2_u8_i4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i2_u8_i2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i2_i8_u8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i2_i8_u4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i2_i8_u2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i2_i8_i8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i2_i8_i4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i2_i8_i2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u2_u4_u8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u2_u4_u4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u2_u4_u2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u2_u4_i8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u2_u4_i4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u2_u4_i2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u2_i4_u8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u2_i4_u4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u2_i4_u2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u2_i4_i8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u2_i4_i4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u2_i4_i2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i2_u4_u8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i2_u4_u4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i2_u4_u2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i2_u4_i8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i2_u4_i4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i2_u4_i2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i2_i4_u8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i2_i4_u4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i2_i4_u2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i2_i4_i8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i2_i4_i4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i2_i4_i2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u2_u2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + uint16_t out_mult1, + uint16_t out_mult2, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in); + +void xpulp_nn_add_u2_u2_u8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u2_u2_u4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u2_u2_u2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u2_u2_i8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u2_u2_i4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u2_u2_i2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u2_i2_u8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u2_i2_u4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u2_i2_u2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u2_i2_i8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u2_i2_i4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_u2_i2_i2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i2_u2_u8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i2_u2_u4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i2_u2_u2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i2_u2_i8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i2_u2_i4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i2_u2_i2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i2_i2_u8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i2_i2_u4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i2_i2_u2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i2_i2_i8( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i2_i2_i4( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + +void xpulp_nn_add_i2_i2_i2( + uint8_t * pIn1, + uint8_t * pIn2, + uint8_t * pOut, + int32_t in_mult1, + int32_t in_add1, + uint16_t in_shift1, + int32_t in_mult2, + int32_t in_add2, + uint16_t in_shift2, + int32_t out_mult, + int32_t out_add, + uint16_t out_shift, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + uint16_t ch_im_in, + int out_requant_flag); + + + +#endif \ No newline at end of file diff --git a/rt_nn_tests/xptnn_maxpool/pulp_nn_utils.h b/rt_nn_tests/xptnn_maxpool/pulp_nn_utils.h new file mode 100644 index 0000000..17661d8 --- /dev/null +++ b/rt_nn_tests/xptnn_maxpool/pulp_nn_utils.h @@ -0,0 +1,2088 @@ +/* + * pulp_nn_utils.h + * Nazareno Bruschi + * Alessandro Nadalini + * Georg Rutishauser + * + * Copyright (C) 2019-2020 ETH Zurich & University of Bologna + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef __PULPNN_UTILS__ +#define __PULPNN_UTILS__ + +#include + +typedef signed short v2s __attribute__((vector_size (4))); + + + +#define min(a,b) ((a)<(b)?(a):(b)) +#define log2(x) __builtin_pulp_fl1(x) +#define PACK_INT2_SIZE(x) ((x) >> 2) + +#define MemoryFence() asm volatile("":::"memory") + +#define CHANS_DECOMPR(x) (5*x >> 2) // equivalent to division by 0.8 + +/* Functions for Compressed MAC */ +#define CompressedMAC(sum, ptr, config) asm volatile( \ + "pv.smlsdotsp.t %[shum], %[phtr], %[chonfig];" \ + : [shum] "+r" (sum), [phtr] "+r" (ptr): [chonfig] "I" (config)) + +#define CompressedMACUnsigned(sum, ptr, config) asm volatile( \ + "pv.smlsdotsup.t %[shum], %[phtr], %[chonfig];" \ + : [shum] "+r" (sum), [phtr] "+r" (ptr): [chonfig] "I" (config)) + +#define InitNNRF(ptr, config) asm volatile( \ + "pv.smlsdotsp.t x0, %[phtr], %[chonfig];" \ + : [phtr] "+r" (ptr) : [chonfig] "I" (config)) + +#define ThresholdCompress(res, val, thrs) asm volatile( \ + "pv.thrc %[rhes], %[vhal], %[thhrs];" : [rhes] "+r" (res) : [vhal] "r" (val), [thhrs] "r" (thrs)) + +#define GetConfig(a_update, b_update, a_reg, b_reg) a_update << 4 | b_update << 3 | a_reg << 1 | b_reg + +/* Functions for threshold&compress */ +#define check_store(res, pOut) \ + if ((res & 0xe0000000) == 0x00000000) { \ + *pOut = res & 0xff; \ + pOut++; \ + incr_val=ch_out_r; } + +#define check_store_4x1(res, pOut) \ + if ((res & 0xe0000000) == 0x00000000) { \ + *pOut = res & 0xff; \ + pOut++; } + +#define reset_currThr() \ + if ((uint32_t *) currThr == (uint32_t *) (pThr + ch_out)) { \ + currThr = (v2s *) pThr; \ + } + +#define MacLoads20(a_update, b_update, a_reg, b_reg, ptr, sum) __builtin_pulp_mlsdotsp20_v3(a_update, b_update, a_reg, b_reg, ptr, sum) + +#define MacLoad20(a_update, b_update, a_reg, b_reg, ptr, sum) __builtin_pulp_mlsdotsup20_v3(a_update, b_update, a_reg, b_reg, ptr, sum) + +/* Functions for compressed min/max */ +#define CompressedMax(res, in1, in2) asm volatile( \ + "pv.max.t %[res_], %[in1_], %[in2_];" : [res_] "=r" (res) : [in1_] "r" (in1), [in2_] "r" (in2)) + +#define CompressedMin(res, in1, in2) asm volatile( \ + "pv.min.t %[res_], %[in1_], %[in2_];" : [res_] "=r" (res) : [in1_] "r" (in1), [in2_] "r" (in2)) + +#define Max16(res, in1, in2) asm volatile( \ + "pv.max.c %[res_], %[in1_], %[in2_];" : [res_] "=r" (res) : [in1_] "r" (in1), [in2_] "r" (in2)) + +#define Min16(res, in1, in2) asm volatile( \ + "pv.min.c %[res_], %[in1_], %[in2_];" : [res_] "=r" (res) : [in1_] "r" (in1), [in2_] "r" (in2)) + +#define thr_cmp(state, val, threshs) __builtin_pulp_thresh_compr(state, val, threshs) + +typedef unsigned char v4u __attribute__((vector_size (4))); +typedef signed char v4s __attribute__((vector_size (4))); + +#define bitext(x,size,off) __builtin_pulp_bextract(x,size,off) +#define bitextu(x,size,off) __builtin_pulp_bextractu(x,size,off) +#ifdef __clang__ +#define bitins(dst,not_mask_imm,src,mask_imm,off) __builtin_binsert(dst,not_mask_imm,src,mask_imm,off) +#else +#define bitins(dst,not_mask_imm,src,mask_imm,off) __builtin_pulp_binsert(dst,not_mask_imm,src,mask_imm,off) +#endif +#define pack(x,y,z,t) __builtin_pulp_pack4(x,y,z,t) +#define max4(a,b) __builtin_pulp_maxu4(a,b) +#define maxs4(a, b) __builtin_pulp_max4(a, b) +#define max8(a, b) __builtin_pulp_maxu8(a, b) +#define maxs8(a, b) __builtin_pulp_max8(a, b) +#define max16(a, b) __builtin_pulp_maxu16(a, b) +#define maxs16(a, b) __builtin_pulp_max16(a, b) +#define maxs20(a, b) __builtin_pulp_max20(a, b) +#define max32(a,b) __builtin_pulp_maxusi(a,b) +#define maxs32(a,b) __builtin_pulp_maxsi(a,b) +#define min32(a,b) __builtin_pulp_minusi(a,b) +#define mins32(a,b) __builtin_pulp_minsi(a,b) +#define min4(a, b) __builtin_pulp_minu4(a, b) +#define mins4(a, b) __builtin_pulp_min4(a, b) +#define min8(a, b) __builtin_pulp_minu8(a, b) +#define mins8(a, b) __builtin_pulp_min8(a, b) +#define min16(a, b) __builtin_pulp_minu16(a, b) +#define mins16(a, b) __builtin_pulp_min16(a, b) +#define mins20(a, b) __builtin_pulp_min20(a, b) +#define avg4(a,b) __builtin_pulp_avgu4(a,b) +#define avg8(a,b) __builtin_pulp_avgu8(a,b) +#define avg16(a,b) __builtin_pulp_avgu16(a,b) +#define log2(x) __builtin_pulp_fl1(x) +#define min(a,b) ((a)<(b)?(a):(b)) +#define SumDotp4(a, b, c) __builtin_pulp_sdotusp4(a, b, c) +#define SumDotp8(a, b, c) __builtin_pulp_sdotusp8(a, b, c) +#define SumDotp16(a, b, c) __builtin_pulp_sdotusp16(a, b, c) +#define SumDotps4(a, b, c) __builtin_pulp_sdotsp4(a, b, c) +#define SumDotps8(a, b, c) __builtin_pulp_sdotsp8(a, b, c) +#define SumDotps16(a, b, c) __builtin_pulp_sdotsp16(a, b, c) +#define clip4(x) __builtin_pulp_clipu_r(x, 15) +#define clip2(x) __builtin_pulp_clipu_r(x, 3) +#define clip8(x) __builtin_pulp_clipu_r(x, 255) + +#define clips4(x) __builtin_pulp_clip_r(x, 7) +#define clips2(x) __builtin_pulp_clip_r(x, 1) +#define clips8(x) __builtin_pulp_clip_r(x, 127) +#define MacLoadInit(a_update, b_update, a_reg, b_reg, ptr) __builtin_pulp_mlinitspr_v3(a_update, b_update, a_reg, b_reg, ptr) +#define MacLoadUpdate(ptr) __builtin_pulp_mlupdatespr_v3(ptr) +#define MacLoadAssign(ptr) __builtin_pulp_mlassignspr_v3(ptr) +#define MacLoad4(a_update, b_update, a_reg, b_reg, ptr, sum) __builtin_pulp_mlsdotsup4_v3(a_update, b_update, a_reg, b_reg, ptr, sum) +#define MacLoad8(a_update, b_update, a_reg, b_reg, ptr, sum) __builtin_pulp_mlsdotsup8_v3(a_update, b_update, a_reg, b_reg, ptr, sum) +#define MacLoad16(a_update, b_update, a_reg, b_reg, ptr, sum) __builtin_pulp_mlsdotsup16_v3(a_update, b_update, a_reg, b_reg, ptr, sum) +#define MacLoads4(a_update, b_update, a_reg, b_reg, ptr, sum) __builtin_pulp_mlsdotsp4_v3(a_update, b_update, a_reg, b_reg, ptr, sum) +#define MacLoads8(a_update, b_update, a_reg, b_reg, ptr, sum) __builtin_pulp_mlsdotsp8_v3(a_update, b_update, a_reg, b_reg, ptr, sum) +#define MacLoads16(a_update, b_update, a_reg, b_reg, ptr, sum) __builtin_pulp_mlsdotsp16_v3(a_update, b_update, a_reg, b_reg, ptr, sum) + +#define PACK_INT8_SIZE(x) (x) +#define PACK_INT4_SIZE(x) ((x) >> 1) +#define PACK_INT2_SIZE(x) ((x) >> 2) + +#define MemoryFence() asm volatile("":::"memory") + +#define LEGACY_MODE(x) asm volatile ("csrwi 0x010," x) +#define IVEC_FMT(x) asm volatile ("csrwi 0x00D," x) +#define MIXED_SKIP(x) asm volatile ("csrwi 0x00F," x) +#define A_ADDRESS(x) asm volatile ("csrw 0x100, %0" :: "r" (x)) +#define W_ADDRESS(x) asm volatile ("csrw 0x101, %0" :: "r" (x)) +#define A_STRIDE(x) asm volatile ("csrw 0x102, %0":: "r" (x)) +#define W_STRIDE(x) asm volatile ("csrw 0x103, %0":: "r" (x)) +#define A_ROLLBACK(x) asm volatile ("csrw 0x104, %0":: "r" (x)) +#define W_ROLLBACK(x) asm volatile ("csrw 0x105, %0":: "r" (x)) +#define A_SKIP(x) asm volatile ("csrwi 0x106," x) +#define W_SKIP(x) asm volatile ("csrwi 0x107," x) + +static uint8_t __attribute__((noinline)) pulp_nn_quant_u2 ( + int32_t phi, + int16_t m, + int8_t d + ) { + int32_t x = (m * phi) >> d; + uint8_t res = clip2(x); + return res; +} +static uint8_t __attribute__((noinline)) pulp_nn_bn_quant_u2 ( + int32_t phi, + int32_t k, + int32_t lambda, + int8_t d + ) { + int32_t integer_image_phi = (k * phi) + lambda; + int32_t x = (integer_image_phi) >> d; + uint8_t res = clip2(x); + return res; +} +static uint8_t __attribute__((noinline)) pulp_nn_add_quant_u2 ( + uint8_t pix1, + uint8_t pix2, + int16_t m1, + int16_t m2, + int8_t d + ) { + uint32_t integer_image = pix1*m1 + pix2*m2; + uint32_t x = (integer_image) >> d; + uint8_t res = clip2(x); + return res; +} + +static int8_t __attribute__((noinline)) pulp_nn_quant_i2 ( + int32_t phi, + int16_t m, + int8_t d + ) { + int32_t x = (m * phi) >> d; + int8_t res = clips2(x); + return res; +} +static int8_t __attribute__((noinline)) pulp_nn_bn_quant_i2 ( + int32_t phi, + int32_t k, + int32_t lambda, + int8_t d + ) { + int32_t integer_image_phi = (k * phi) + lambda; + int32_t x = (integer_image_phi) >> d; + int8_t res = clips2(x); + return res; +} +static int8_t __attribute__((noinline)) pulp_nn_add_quant_i2 ( + int8_t pix1, + int8_t pix2, + int16_t m1, + int16_t m2, + int8_t d + ) { + int32_t integer_image = pix1*m1 + pix2*m2; + int32_t x = (integer_image) >> d; + int8_t res = clips2(x); + return res; +} + +static uint8_t __attribute__((noinline)) pulp_nn_quant_u4 ( + int32_t phi, + int16_t m, + int8_t d + ) { + int32_t x = (m * phi) >> d; + uint8_t res = clip4(x); + return res; +} +static uint8_t __attribute__((noinline)) pulp_nn_bn_quant_u4 ( + int32_t phi, + int32_t k, + int32_t lambda, + int8_t d + ) { + int32_t integer_image_phi = (k * phi) + lambda; + int32_t x = (integer_image_phi) >> d; + uint8_t res = clip4(x); + return res; +} +static uint8_t __attribute__((noinline)) pulp_nn_add_quant_u4 ( + uint8_t pix1, + uint8_t pix2, + int16_t m1, + int16_t m2, + int8_t d + ) { + uint32_t integer_image = pix1*m1 + pix2*m2; + uint32_t x = (integer_image) >> d; + uint8_t res = clip4(x); + return res; +} + +static int8_t __attribute__((noinline)) pulp_nn_quant_i4 ( + int32_t phi, + int16_t m, + int8_t d + ) { + int32_t x = (m * phi) >> d; + int8_t res = clips4(x); + return res; +} +static int8_t __attribute__((noinline)) pulp_nn_bn_quant_i4 ( + int32_t phi, + int32_t k, + int32_t lambda, + int8_t d + ) { + int32_t integer_image_phi = (k * phi) + lambda; + int32_t x = (integer_image_phi) >> d; + int8_t res = clips4(x); + return res; +} +static int8_t __attribute__((noinline)) pulp_nn_add_quant_i4 ( + int8_t pix1, + int8_t pix2, + int16_t m1, + int16_t m2, + int8_t d + ) { + int32_t integer_image = pix1*m1 + pix2*m2; + int32_t x = (integer_image) >> d; + int8_t res = clips4(x); + return res; +} + +static uint8_t __attribute__((noinline)) pulp_nn_quant_u8 ( + int32_t phi, + int16_t m, + int8_t d + ) { + int32_t x = (m * phi) >> d; + uint8_t res = clip8(x); + return res; +} +static uint8_t __attribute__((noinline)) pulp_nn_bn_quant_u8 ( + int32_t phi, + int32_t k, + int32_t lambda, + int8_t d + ) { + int32_t integer_image_phi = (k * phi) + lambda; + int32_t x = (integer_image_phi) >> d; + uint8_t res = clip8(x); + return res; +} +static uint8_t __attribute__((noinline)) pulp_nn_add_quant_u8 ( + uint8_t pix1, + uint8_t pix2, + int16_t m1, + int16_t m2, + int8_t d + ) { + uint32_t integer_image = pix1*m1 + pix2*m2; + uint32_t x = (integer_image) >> d; + uint8_t res = clip8(x); + return res; +} + +static int8_t __attribute__((noinline)) pulp_nn_quant_i8 ( + int32_t phi, + int16_t m, + int8_t d + ) { + int32_t x = (m * phi) >> d; + int8_t res = clips8(x); + return res; +} +static int8_t __attribute__((noinline)) pulp_nn_bn_quant_i8 ( + int32_t phi, + int32_t k, + int32_t lambda, + int8_t d + ) { + int32_t integer_image_phi = (k * phi) + lambda; + int32_t x = (integer_image_phi) >> d; + int8_t res = clips8(x); + return res; +} +static int8_t __attribute__((noinline)) pulp_nn_add_quant_i8 ( + int8_t pix1, + int8_t pix2, + int16_t m1, + int16_t m2, + int8_t d + ) { + int32_t integer_image = pix1*m1 + pix2*m2; + int32_t x = (integer_image) >> d; + int8_t res = clips8(x); + return res; +} + + +static uint8_t __attribute__((noinline)) pulp_nn_u4_quant(int input, int16_t * pThr) +{ + if(input <= pThr[7] ) + { + if( input <= pThr[3]) + { + if( input <= pThr[1]) + { + if( input <= pThr[0]) + return 0; + else + return 1; + } + else + { + if( input <= pThr[2]) + return 2; + else + return 3; + } + } + else + { + if( input <= pThr[5]) + { + if( input <= pThr[4]) + return 4; + else + return 5; + } + else + { + if( input <= pThr[6]) + return 6; + else + return 7; + } + } + } + else + { + if( input <= pThr[11]) + { + if( input <= pThr[9]) + { + if( input <= pThr[8]) + return 8; + else + return 9; + } + else + { + if( input <= pThr[10]) + return 10; + else + return 11; + } + } + else + { + if( input <= pThr[13]) + { + if( input <= pThr[12]) + return 12; + else + return 13; + } + else + { + if( input <= pThr[14]) + return 14; + else + return 15; + } + } + } +} + +static uint8_t __attribute__((noinline)) pulp_nn_u2_quant(int input, int16_t * pThr) +{ + if( input <= pThr[1]) + { + if( input <= pThr[0]) + { + return 0; + } + else + { + return 1; + } + } + else + { + if( input <= pThr[2]) + { + return 2; + } + else + { + return 3; + } + } +} + +/* + * Common + */ + + +static v4s __attribute__((noinline)) pulp_nn_i4_to_i8_r( int8_t *pSrc) +{ + v4s Src = *((v4s*) pSrc); + int8_t bext1, bext2, bext3, bext4; + + bext1 = (int8_t) bitext((int) Src, 4, 0); + bext2 = (int8_t) bitext((int) Src, 4, 4); + bext3 = (int8_t) bitext((int) Src, 4, 8); + bext4 = (int8_t) bitext((int) Src, 4, 12); + v4s res = pack((int8_t) bext1, (int8_t) bext2, (int8_t) bext3, (int8_t) bext4); + + return res; +} + +static v4u __attribute__((noinline)) pulp_nn_u4_to_u8_r(uint8_t *pSrc) +{ + v4u Src = *((v4u*) pSrc); + uint8_t bext1, bext2, bext3, bext4; + + bext1 = (uint8_t) bitextu((unsigned int) Src, 4, 0); + bext2 = (uint8_t) bitextu((unsigned int) Src, 4, 4); + bext3 = (uint8_t) bitextu((unsigned int) Src, 4, 8); + bext4 = (uint8_t) bitextu((unsigned int) Src, 4, 12); + v4u res = pack((uint8_t) bext1, (uint8_t) bext2, (uint8_t) bext3, (uint8_t) bext4); + + return res; +} + +static v4s __attribute__((noinline)) pulp_nn_i2_to_i8_r( int8_t *pSrc) +{ + v4s Src = *((v4s*) pSrc); + int8_t bext1, bext2, bext3, bext4; + + bext1 = (int8_t) bitext((int) Src, 2, 0); + bext2 = (int8_t) bitext((int) Src, 2, 2); + bext3 = (int8_t) bitext((int) Src, 2, 4); + bext4 = (int8_t) bitext((int) Src, 2, 6); + v4s res = pack((int8_t) bext1, (int8_t) bext2, (int8_t) bext3, (int8_t) bext4); + + return res; +} + +static v4u __attribute__((noinline)) pulp_nn_u2_to_u8_r(uint8_t *pSrc) +{ + v4u Src = *((v4u*) pSrc); + uint8_t bext1, bext2, bext3, bext4; + + bext1 = (uint8_t) bitextu((unsigned int) Src, 2, 0); + bext2 = (uint8_t) bitextu((unsigned int) Src, 2, 2); + bext3 = (uint8_t) bitextu((unsigned int) Src, 2, 4); + bext4 = (uint8_t) bitextu((unsigned int) Src, 2, 6); + v4u res = pack((uint8_t) bext1, (uint8_t) bext2, (uint8_t) bext3, (uint8_t) bext4); + + return res; +} + +static v4s __attribute__((noinline)) pulp_nn_i2_to_i4_r(int8_t *pSrc) +{ + int8_t mask = 0xf0; + int8_t n_mask = ~ mask; + int8_t off = 0x04; + + v4s Src = *((v4s*) pSrc); + int8_t bext1, bext2, bext3, bext4; + int8_t out1, out2, out3, out4; + + bext1 = (int8_t) bitextu((int) Src, 2, 0); + bext2 = (int8_t) bitextu((int) Src, 2, 2); + bext3 = (int8_t) bitextu((int) Src, 2, 4); + bext4 = (int8_t) bitextu((int) Src, 2, 6); + + out1 = bitins(bext1, n_mask, bext2, mask, off); + out2 = bitins(bext3, n_mask, bext4, mask, off); + + bext1 = (int8_t) bitextu((int) Src, 2, 8); + bext2 = (int8_t) bitextu((int) Src, 2, 10); + bext3 = (int8_t) bitextu((int) Src, 2, 12); + bext4 = (int8_t) bitextu((int) Src, 2, 14); + + out3 = bitins(bext1, n_mask, bext2, mask, off); + out4 = bitins(bext3, n_mask, bext4, mask, off); + + v4s res = pack((int8_t) out1, (int8_t) out2, (int8_t) out3, (int8_t) out4); + + return res; +} + +static v4u __attribute__((noinline)) pulp_nn_u2_to_u4_r(uint8_t *pSrc) +{ + int8_t mask = 0xf0; + int8_t n_mask = ~ mask; + int8_t off = 0x04; + + v4u Src = *((v4u*) pSrc); + uint8_t bext1, bext2, bext3, bext4; + uint8_t out1, out2, out3, out4; + + bext1 = (uint8_t) bitextu((unsigned int) Src, 2, 0); + bext2 = (uint8_t) bitextu((unsigned int) Src, 2, 2); + bext3 = (uint8_t) bitextu((unsigned int) Src, 2, 4); + bext4 = (uint8_t) bitextu((unsigned int) Src, 2, 6); + + out1 = bitins(bext1, n_mask, bext2, mask, off); + out2 = bitins(bext3, n_mask, bext4, mask, off); + + bext1 = (uint8_t) bitextu((unsigned int) Src, 2, 8); + bext2 = (uint8_t) bitextu((unsigned int) Src, 2, 10); + bext3 = (uint8_t) bitextu((unsigned int) Src, 2, 12); + bext4 = (uint8_t) bitextu((unsigned int) Src, 2, 14); + + out3 = bitins(bext1, n_mask, bext2, mask, off); + out4 = bitins(bext3, n_mask, bext4, mask, off); + + v4u res = pack((uint8_t) out1, (uint8_t) out2, (uint8_t) out3, (uint8_t) out4); + + return res; +} + +static int8_t *__attribute__((always_inline)) pulp_nn_i4_to_i8( int8_t *pSrc, int8_t *pDst) +{ + v4s Src = *((v4s*) pSrc); + int8_t bext1, bext2, bext3, bext4; + + pSrc+=4; + + bext1 = (int8_t) bitext((int) Src, 4, 0); + bext2 = (int8_t) bitext((int) Src, 4, 4); + bext3 = (int8_t) bitext((int) Src, 4, 8); + bext4 = (int8_t) bitext((int) Src, 4, 12); + *((v4s*)pDst) = pack((int8_t) bext1, (int8_t) bext2, (int8_t) bext3, (int8_t) bext4); + MemoryFence(); + pDst+=4; + bext1 = (int8_t) bitext((int) Src, 4, 16); + bext2 = (int8_t) bitext((int) Src, 4, 20); + bext3 = (int8_t) bitext((int) Src, 4, 24); + bext4 = (int8_t) bitext((int) Src, 4, 28); + *((v4s*)pDst) = pack((int8_t) bext1, (int8_t) bext2, (int8_t) bext3, (int8_t) bext4); + + return pSrc; +} + +static uint8_t *__attribute__((always_inline)) pulp_nn_u4_to_u8(uint8_t *pSrc, uint8_t *pDst) +{ + v4u Src = *((v4u*) pSrc); + uint8_t bext1, bext2, bext3, bext4; + + pSrc+=4; + + bext1 = (uint8_t) bitextu((unsigned int) Src, 4, 0); + bext2 = (uint8_t) bitextu((unsigned int) Src, 4, 4); + bext3 = (uint8_t) bitextu((unsigned int) Src, 4, 8); + bext4 = (uint8_t) bitextu((unsigned int) Src, 4, 12); + *((v4u*)pDst) = pack((uint8_t) bext1, (uint8_t) bext2, (uint8_t) bext3, (uint8_t) bext4); + MemoryFence(); + pDst+=4; + bext1 = (uint8_t) bitextu((unsigned int) Src, 4, 16); + bext2 = (uint8_t) bitextu((unsigned int) Src, 4, 20); + bext3 = (uint8_t) bitextu((unsigned int) Src, 4, 24); + bext4 = (uint8_t) bitextu((unsigned int) Src, 4, 28); + *((v4u*)pDst) = pack((uint8_t) bext1, (uint8_t) bext2, (uint8_t) bext3, (uint8_t) bext4); + + return pSrc; +} + +static int8_t *__attribute__((always_inline)) pulp_nn_i2_to_i8( int8_t * pSrc, int8_t * pDst) +{ + v4s Src = *((v4s*) pSrc); + int8_t bext1, bext2, bext3, bext4; + + pSrc+=4; + + bext1 = (int8_t) bitext((int) Src, 2, 0); + bext2 = (int8_t) bitext((int) Src, 2, 2); + bext3 = (int8_t) bitext((int) Src, 2, 4); + bext4 = (int8_t) bitext((int) Src, 2, 6); + *((v4s*)pDst) = pack((int8_t) bext1, (int8_t) bext2, (int8_t) bext3, (int8_t) bext4); + MemoryFence(); + pDst+=4; + bext1 = (int8_t) bitext((int) Src, 2, 8); + bext2 = (int8_t) bitext((int) Src, 2, 10); + bext3 = (int8_t) bitext((int) Src, 2, 12); + bext4 = (int8_t) bitext((int) Src, 2, 14); + *((v4s*)pDst) = pack((int8_t) bext1, (int8_t) bext2, (int8_t) bext3, (int8_t) bext4); + MemoryFence(); + pDst+=4; + bext1 = (int8_t) bitext((int) Src, 2, 16); + bext2 = (int8_t) bitext((int) Src, 2, 18); + bext3 = (int8_t) bitext((int) Src, 2, 20); + bext4 = (int8_t) bitext((int) Src, 2, 22); + *((v4s*)pDst) = pack((int8_t) bext1, (int8_t) bext2, (int8_t) bext3, (int8_t) bext4); + MemoryFence(); + pDst+=4; + bext1 = (int8_t) bitext((int) Src, 2, 24); + bext2 = (int8_t) bitext((int) Src, 2, 26); + bext3 = (int8_t) bitext((int) Src, 2, 28); + bext4 = (int8_t) bitext((int) Src, 2, 30); + *((v4s*)pDst) = pack((int8_t) bext1, (int8_t) bext2, (int8_t) bext3, (int8_t) bext4); + + return pSrc; +} + +static uint8_t *__attribute__((always_inline)) pulp_nn_u2_to_u8(uint8_t * pSrc, uint8_t * pDst) +{ + v4u Src = *((v4u*) pSrc); + uint8_t bext1, bext2, bext3, bext4; + + pSrc+=4; + + bext1 = (uint8_t) bitextu((unsigned int) Src, 2, 0); + bext2 = (uint8_t) bitextu((unsigned int) Src, 2, 2); + bext3 = (uint8_t) bitextu((unsigned int) Src, 2, 4); + bext4 = (uint8_t) bitextu((unsigned int) Src, 2, 6); + *((v4u*)pDst) = pack((uint8_t) bext1, (uint8_t) bext2, (uint8_t) bext3, (uint8_t) bext4); + MemoryFence(); + pDst+=4; + bext1 = (uint8_t) bitextu((unsigned int) Src, 2, 8); + bext2 = (uint8_t) bitextu((unsigned int) Src, 2, 10); + bext3 = (uint8_t) bitextu((unsigned int) Src, 2, 12); + bext4 = (uint8_t) bitextu((unsigned int) Src, 2, 14); + *((v4u*)pDst) = pack((uint8_t) bext1, (uint8_t) bext2, (uint8_t) bext3, (uint8_t) bext4); + MemoryFence(); + pDst+=4; + bext1 = (uint8_t) bitextu((unsigned int) Src, 2, 16); + bext2 = (uint8_t) bitextu((unsigned int) Src, 2, 18); + bext3 = (uint8_t) bitextu((unsigned int) Src, 2, 20); + bext4 = (uint8_t) bitextu((unsigned int) Src, 2, 22); + *((v4u*)pDst) = pack((uint8_t) bext1, (uint8_t) bext2, (uint8_t) bext3, (uint8_t) bext4); + MemoryFence(); + pDst+=4; + bext1 = (uint8_t) bitextu((unsigned int) Src, 2, 24); + bext2 = (uint8_t) bitextu((unsigned int) Src, 2, 26); + bext3 = (uint8_t) bitextu((unsigned int) Src, 2, 28); + bext4 = (uint8_t) bitextu((unsigned int) Src, 2, 30); + *((v4u*)pDst) = pack((uint8_t) bext1, (uint8_t) bext2, (uint8_t) bext3, (uint8_t) bext4); + + return pSrc; +} + +static int8_t *__attribute__((always_inline)) pulp_nn_i2_to_i4( int8_t * pSrc, int8_t * pDst) +{ + int8_t mask = 0xf0; + int8_t n_mask = ~ mask; + int8_t off = 0x04; + + v4s Src = *((v4s*) pSrc); + int8_t bext1, bext2, bext3, bext4; + int8_t out1, out2, out3, out4; + + pSrc+=4; + + bext1 = (int8_t) bitext((int) Src, 2, 0); + bext2 = (int8_t) bitext((int) Src, 2, 2); + bext3 = (int8_t) bitext((int) Src, 2, 4); + bext4 = (int8_t) bitext((int) Src, 2, 6); + + out1 = bitins(bext1, n_mask, bext2, mask, off); + out2 = bitins(bext3, n_mask, bext4, mask, off); + MemoryFence(); + + bext1 = (int8_t) bitext((int) Src, 2, 8); + bext2 = (int8_t) bitext((int) Src, 2, 10); + bext3 = (int8_t) bitext((int) Src, 2, 12); + bext4 = (int8_t) bitext((int) Src, 2, 14); + + out3 = bitins(bext1, n_mask, bext2, mask, off); + out4 = bitins(bext3, n_mask, bext4, mask, off); + + *((v4s*)pDst) = pack((int8_t) out1, (int8_t) out2, (int8_t) out3, (int8_t) out4); + MemoryFence(); + + pDst+=4; + bext1 = (int8_t) bitext((int) Src, 2, 16); + bext2 = (int8_t) bitext((int) Src, 2, 18); + bext3 = (int8_t) bitext((int) Src, 2, 20); + bext4 = (int8_t) bitext((int) Src, 2, 22); + + out1 = bitins(bext1, n_mask, bext2, mask, off); + out2 = bitins(bext3, n_mask, bext4, mask, off); + MemoryFence(); + + bext1 = (int8_t) bitext((int) Src, 2, 24); + bext2 = (int8_t) bitext((int) Src, 2, 26); + bext3 = (int8_t) bitext((int) Src, 2, 28); + bext4 = (int8_t) bitext((int) Src, 2, 30); + + out3 = bitins(bext1, n_mask, bext2, mask, off); + out4 = bitins(bext3, n_mask, bext4, mask, off); + + *((v4s*)pDst) = pack((int8_t) out1, (int8_t) out2, (int8_t) out3, (int8_t) out4); + + return pSrc; +} + +static uint8_t *__attribute__((always_inline)) pulp_nn_u2_to_u4( uint8_t * pSrc, uint8_t * pDst) +{ + int8_t mask = 0xf0; + int8_t n_mask = ~ mask; + int8_t off = 0x04; + + v4u Src = *((v4u*) pSrc); + uint8_t bext1, bext2, bext3, bext4; + uint8_t out1, out2, out3, out4; + + pSrc+=4; + + bext1 = (uint8_t) bitextu((unsigned int) Src, 2, 0); + bext2 = (uint8_t) bitextu((unsigned int) Src, 2, 2); + bext3 = (uint8_t) bitextu((unsigned int) Src, 2, 4); + bext4 = (uint8_t) bitextu((unsigned int) Src, 2, 6); + + out1 = bitins(bext1, n_mask, bext2, mask, off); + out2 = bitins(bext3, n_mask, bext4, mask, off); + MemoryFence(); + + bext1 = (uint8_t) bitextu((unsigned int) Src, 2, 8); + bext2 = (uint8_t) bitextu((unsigned int) Src, 2, 10); + bext3 = (uint8_t) bitextu((unsigned int) Src, 2, 12); + bext4 = (uint8_t) bitextu((unsigned int) Src, 2, 14); + + out3 = bitins(bext1, n_mask, bext2, mask, off); + out4 = bitins(bext3, n_mask, bext4, mask, off); + + *((v4u*)pDst) = pack((uint8_t) out1, (uint8_t) out2, (uint8_t) out3, (uint8_t) out4); + MemoryFence(); + + pDst+=4; + bext1 = (uint8_t) bitextu((unsigned int) Src, 2, 16); + bext2 = (uint8_t) bitextu((unsigned int) Src, 2, 18); + bext3 = (uint8_t) bitextu((unsigned int) Src, 2, 20); + bext4 = (uint8_t) bitextu((unsigned int) Src, 2, 22); + + out1 = bitins(bext1, n_mask, bext2, mask, off); + out2 = bitins(bext3, n_mask, bext4, mask, off); + MemoryFence(); + + bext1 = (uint8_t) bitextu((unsigned int) Src, 2, 24); + bext2 = (uint8_t) bitextu((unsigned int) Src, 2, 26); + bext3 = (uint8_t) bitextu((unsigned int) Src, 2, 28); + bext4 = (uint8_t) bitextu((unsigned int) Src, 2, 30); + + out3 = bitins(bext1, n_mask, bext2, mask, off); + out4 = bitins(bext3, n_mask, bext4, mask, off); + + *((v4u*)pDst) = pack((uint8_t) out1, (uint8_t) out2, (uint8_t) out3, (uint8_t) out4); + + return pSrc; +} + +/* + * XpulpV2 + */ + +static void __attribute__((noinline)) pulp_zero_mem(uint8_t * pBuffer, unsigned int size) +{ + int lfover = size &0x3; + for (int i=0; i<(size>>2); i++) + { + *((v4u *)pBuffer) = (v4u){0,0,0,0}; + MemoryFence(); + pBuffer+=4; + } + while(lfover) + { + *pBuffer++=0; + lfover--; + } +} + +static void __attribute__((noinline)) pulp_nn_im2col_u2_to_u8(uint8_t * pInput, uint8_t * pOutput, unsigned int blockSize) +{ + unsigned int blkCnt = blockSize >> 4u; + int lfover = blockSize & 0x0f; + for (int i = 0; i> 4u; + int lfover = blockSize & 0x0f; + for (int i = 0; i> 3u; + int lfover = blockSize & 0x07; + for (int i = 0; i> 3u; + int lfover = blockSize & 0x07; + for (int i = 0; i> 2u; + int lfover = blockSize & 0x03; + for (int i = 0; i> 2u; + int lfover = blockSize & 0x03; + for (int i = 0; i> 4u; + int lfover = blockSize & 0x0f; + for (int i = 0; i> 4u; + int lfover = blockSize & 0x0f; + for (int i = 0; i> 4u; + int lfover = blockSize & 0x0f; + for (int i = 0; i> 4u; + int lfover = blockSize & 0x0f; + for (int i = 0; i> 4u; + int lfover = blockSize & 0x0f; + for (int i = 0; i> 4u; + int lfover = blockSize & 0x0f; + for (int i = 0; i> 3u; + int lfover = blockSize & 0x07; + for (int i = 0; i> 3u; + int lfover = blockSize & 0x07; + for (int i = 0; i> 3u; + int lfover = blockSize & 0x07; + for (int i = 0; i> 3u; + int lfover = blockSize & 0x07; + for (int i = 0; i> 2u; + int lfover = blockSize & 0x03; + for (int i = 0; i> 2u; + int lfover = blockSize & 0x03; + for (int i = 0; i> 2; + + while(cnt > 0u) + { + inp = *((v4u*)pIn); + com = *((v4u*)pCom); + + *((v4u*)pIn) = max4(inp, com); + + pCom+=4; + pIn+=4; + cnt--; + } + + int left = length & 0x3; + while (left>0u) + { + if(*pIn<*pCom) + *pIn=*pCom; + + pIn++; + pCom++; + left--; + } +} + +static void __attribute__((noinline)) pulp_nn_compare_and_replace_if_larger_i8( + int8_t * base, int8_t * target, uint16_t length) { + int8_t *pIn = base; + int8_t *pCom = target; + v4s inp; + v4s com; + int cnt = length >> 2; + + while (cnt > 0u) { + inp = *((v4s *)pIn); + com = *((v4s *)pCom); + + *((v4s *)pIn) = maxs4(inp, com); + + pCom += 4; + pIn += 4; + cnt--; + } + + int left = length & 0x3; + while (left > 0u) { + if (*pIn < *pCom) + *pIn = *pCom; + + pIn++; + pCom++; + left--; + } +} + +static void __attribute__((noinline)) pulp_nn_avg_and_replace_u8(uint8_t * base, + uint8_t * target, + uint16_t length) +{ + uint8_t *pIn = base; + uint8_t *pCom = target; + + while (length>0u) + { + *pIn = ((*pIn + *pCom) >> 1); + + pIn++; + pCom++; + length--; + } +} + +static void __attribute__((noinline)) pulp_nn_compare_and_replace_if_larger_u4(uint8_t * base, + uint8_t * target, + uint16_t length) +{ + int8_t mask = 0xf0; + int8_t n_mask = ~ mask; + int8_t off = 0x04; + + uint8_t *pIn = base; + uint8_t *pCom = target; + v4u inp[2]; + v4u com[2]; + uint8_t *out; + int cnt = length >> 2; + + while(cnt > 0u) + { + pulp_nn_u4_to_u8(pIn, (uint8_t *)inp); + pulp_nn_u4_to_u8(pCom, (uint8_t *)com); + + *((v4u *)out) = max4(inp[0], com[0]); + + *((uint8_t*)pIn) = bitins(*out, n_mask, *(out + 1), mask, off); + pIn++; + *((uint8_t*)pIn) = bitins(*(out + 2), n_mask, *(out + 3), mask, off); + pIn++; + + *((v4u *)out) = max4(inp[1], com[1]); + + *((uint8_t*)pIn) = bitins(*out, n_mask, *(out + 1), mask, off); + pIn++; + *((uint8_t*)pIn) = bitins(*(out + 2), n_mask, *(out + 3), mask, off); + pIn++; + + pCom+=4; + cnt--; + } + + int left = length & 0x3; + while (left>0u) + { + uint8_t inA0 = (uint8_t) bitextu((unsigned int) *pIn, 4, 0); + uint8_t inA1 = (uint8_t) bitextu((unsigned int) *pIn, 4, 4); + uint8_t inB0 = (uint8_t) bitextu((unsigned int) *pCom, 4, 0); + uint8_t inB1 = (uint8_t) bitextu((unsigned int) *pCom, 4, 4); + + if(inA0> 2; + + while(cnt > 0u) + { + pulp_nn_i4_to_i8(pIn, (int8_t *)inp); + pulp_nn_i4_to_i8(pCom, (int8_t *)com); + + *((v4s *)out) = maxs4(inp[0], com[0]); + + *((int8_t*)pIn) = bitins(*out, n_mask, *(out + 1), mask, off); + pIn++; + *((int8_t*)pIn) = bitins(*(out + 2), n_mask, *(out + 3), mask, off); + pIn++; + + *((v4s *)out) = maxs4(inp[1], com[1]); + + *((int8_t*)pIn) = bitins(*out, n_mask, *(out + 1), mask, off); + pIn++; + *((int8_t*)pIn) = bitins(*(out + 2), n_mask, *(out + 3), mask, off); + pIn++; + + pCom+=4; + cnt--; + } + + int left = length & 0x3; + while (left>0u) + { + int8_t inA0 = (int8_t) bitext((int) *pIn, 4, 0); + int8_t inA1 = (int8_t) bitext((int) *pIn, 4, 4); + int8_t inB0 = (int8_t) bitext((int) *pCom, 4, 0); + int8_t inB1 = (int8_t) bitext((int) *pCom, 4, 4); + + if(inA00u) + { + uint8_t inA0 = (uint8_t) bitextu((unsigned int) *pIn, 4, 0); + uint8_t inA1 = (uint8_t) bitextu((unsigned int) *pIn, 4, 4); + uint8_t inB0 = (uint8_t) bitextu((unsigned int) *pCom, 4, 0); + uint8_t inB1 = (uint8_t) bitextu((unsigned int) *pCom, 4, 4); + + inA0 = ((inA0 + inB0) >> 1); + inA1 = ((inA1 + inB1) >> 1); + + *((uint8_t*)pIn) = bitins(inA0, n_mask, inA1, mask, off); + + pIn++; + pCom++; + length--; + } +} + +static void __attribute__((noinline)) pulp_nn_compare_and_replace_if_larger_u2(uint8_t * base, + uint8_t * target, + uint16_t length) +{ + int8_t mask2 = 0x0c; + int8_t n_mask2 = ~ mask2; + int8_t mask4 = 0x30; + int8_t n_mask4 = ~ mask4; + int8_t mask6 = 0xc0; + int8_t n_mask6 = ~ mask6; + int8_t off2 = 2; + int8_t off4 = 4; + int8_t off6 = 6; + + uint8_t *pIn = base; + uint8_t *pCom = target; + v4u inp[4]; + v4u com[4]; + uint8_t *out; + int cnt = length >> 2; + + while(cnt > 0u) + { + pulp_nn_u2_to_u8(pIn, inp); + pulp_nn_u2_to_u8(pCom, com); + + *((v4u*)out) = max4(inp[0], com[0]); + + uint8_t inA = (uint8_t) bitins(*out, n_mask2, *(out + 1), mask2, off2); + inA = bitins(inA, n_mask4, *(out + 2), mask4, off4); + *((uint8_t*)pIn) = bitins(inA, n_mask6, *(out + 3), mask6, off6); + pIn++; + + *((v4u*)out) = max4(inp[1], com[1]); + + inA = (uint8_t) bitins(*out, n_mask2, *(out + 1), mask2, off2); + inA = bitins(inA, n_mask4, *(out + 2), mask4, off4); + *((uint8_t*)pIn) = bitins(inA, n_mask6, *(out + 3), mask6, off6); + pIn++; + + *((v4u*)out) = max4(inp[2], com[2]); + + inA = (uint8_t) bitins(*out, n_mask2, *(out + 1), mask2, off2); + inA = bitins(inA, n_mask4, *(out + 2), mask4, off4); + *((uint8_t*)pIn) = bitins(inA, n_mask6, *(out + 3), mask6, off6); + pIn++; + + *((v4u*)out) = max4(inp[3], com[3]); + + inA = (uint8_t) bitins(*out, n_mask2, *(out + 1), mask2, off2); + inA = bitins(inA, n_mask4, *(out + 2), mask4, off4); + *((uint8_t*)pIn) = bitins(inA, n_mask6, *(out + 3), mask6, off6); + pIn++; + + pCom+=4; + cnt--; + } + + int left = length & 0x3; + while (left>0u) + { + uint8_t inA0 = (uint8_t) bitextu((unsigned int) *pIn, 2, 0); + uint8_t inA1 = (uint8_t) bitextu((unsigned int) *pIn, 2, 2); + uint8_t inA2 = (uint8_t) bitextu((unsigned int) *pIn, 2, 4); + uint8_t inA3 = (uint8_t) bitextu((unsigned int) *pIn, 2, 6); + v4u inA4 = pack((uint8_t) inA0, (uint8_t) inA1, (uint8_t) inA2, (uint8_t) inA3); + uint8_t inB0 = (uint8_t) bitextu((unsigned int) *pCom, 2, 0); + uint8_t inB1 = (uint8_t) bitextu((unsigned int) *pCom, 2, 2); + uint8_t inB2 = (uint8_t) bitextu((unsigned int) *pCom, 2, 4); + uint8_t inB3 = (uint8_t) bitextu((unsigned int) *pCom, 2, 6); + v4u inB4 = pack((uint8_t) inB0, (uint8_t) inB1, (uint8_t) inB2, (uint8_t) inB3); + + *((v4u*)out) = max4(inA4, inB4); + + uint8_t inA = (uint8_t) bitins(*out, n_mask2, *(out + 1), mask2, off2); + inA = bitins(inA, n_mask4, *(out + 2), mask4, off4); + *((uint8_t*)pIn) = bitins(inA, n_mask6, *(out + 3), mask6, off6); + + pIn++; + pCom++; + left--; + } +} + + +static void __attribute__((noinline)) pulp_nn_compare_and_replace_if_larger_i2(int8_t * base, + int8_t * target, + uint16_t length) +{ + int8_t mask2 = 0x0c; + int8_t n_mask2 = ~ mask2; + int8_t mask4 = 0x30; + int8_t n_mask4 = ~ mask4; + int8_t mask6 = 0xc0; + int8_t n_mask6 = ~ mask6; + int8_t off2 = 2; + int8_t off4 = 4; + int8_t off6 = 6; + + int8_t *pIn = base; + int8_t *pCom = target; + v4s inp[4]; + v4s com[4]; + int8_t *out; + int cnt = length >> 2; + + while(cnt > 0u) + { + pulp_nn_i2_to_i8(pIn, inp); + pulp_nn_i2_to_i8(pCom, com); + + *((v4s*)out) = maxs4(inp[0], com[0]); + + int8_t inA = (int8_t) bitins(*out, n_mask2, *(out + 1), mask2, off2); + inA = bitins(inA, n_mask4, *(out + 2), mask4, off4); + *((int8_t*)pIn) = bitins(inA, n_mask6, *(out + 3), mask6, off6); + pIn++; + + *((v4s*)out) = maxs4(inp[1], com[1]); + + inA = (int8_t) bitins(*out, n_mask2, *(out + 1), mask2, off2); + inA = bitins(inA, n_mask4, *(out + 2), mask4, off4); + *((int8_t*)pIn) = bitins(inA, n_mask6, *(out + 3), mask6, off6); + pIn++; + + *((v4s*)out) = maxs4(inp[2], com[2]); + + inA = (int8_t) bitins(*out, n_mask2, *(out + 1), mask2, off2); + inA = bitins(inA, n_mask4, *(out + 2), mask4, off4); + *((int8_t*)pIn) = bitins(inA, n_mask6, *(out + 3), mask6, off6); + pIn++; + + *((v4s*)out) = maxs4(inp[3], com[3]); + + inA = (int8_t) bitins(*out, n_mask2, *(out + 1), mask2, off2); + inA = bitins(inA, n_mask4, *(out + 2), mask4, off4); + *((int8_t*)pIn) = bitins(inA, n_mask6, *(out + 3), mask6, off6); + pIn++; + + pCom+=4; + cnt--; + } + + int left = length & 0x3; + while (left>0u) + { + int8_t inA0 = (int8_t) bitext((unsigned int) *pIn, 2, 0); + int8_t inA1 = (int8_t) bitext((unsigned int) *pIn, 2, 2); + int8_t inA2 = (int8_t) bitext((unsigned int) *pIn, 2, 4); + int8_t inA3 = (int8_t) bitext((unsigned int) *pIn, 2, 6); + v4s inA4 = pack((int8_t) inA0, (int8_t) inA1, (int8_t) inA2, (int8_t) inA3); + int8_t inB0 = (int8_t) bitext((unsigned int) *pCom, 2, 0); + int8_t inB1 = (int8_t) bitext((unsigned int) *pCom, 2, 2); + int8_t inB2 = (int8_t) bitext((unsigned int) *pCom, 2, 4); + int8_t inB3 = (int8_t) bitext((unsigned int) *pCom, 2, 6); + v4s inB4 = pack((int8_t) inB0, (int8_t) inB1, (int8_t) inB2, (int8_t) inB3); + + *((v4s*)out) = maxs4(inA4, inB4); + + int8_t inA = (int8_t) bitins(*out, n_mask2, *(out + 1), mask2, off2); + inA = bitins(inA, n_mask4, *(out + 2), mask4, off4); + *((int8_t*)pIn) = bitins(inA, n_mask6, *(out + 3), mask6, off6); + + pIn++; + pCom++; + left--; + } +} + +static void __attribute__((noinline)) pulp_nn_avg_and_replace_u2(uint8_t * base, + uint8_t * target, + uint16_t length) +{ + int8_t mask2 = 0x0c; + int8_t n_mask2 = ~ mask2; + int8_t mask4 = 0x30; + int8_t n_mask4 = ~ mask4; + int8_t mask6 = 0xc0; + int8_t n_mask6 = ~ mask6; + int8_t off2 = 2; + int8_t off4 = 4; + int8_t off6 = 6; + + uint8_t *pIn = base; + uint8_t *pCom = target; + + while (length>0u) + { + uint8_t inA0 = (uint8_t) bitextu((unsigned int) *pIn, 2, 0); + uint8_t inA1 = (uint8_t) bitextu((unsigned int) *pIn, 2, 2); + uint8_t inA2 = (uint8_t) bitextu((unsigned int) *pIn, 2, 4); + uint8_t inA3 = (uint8_t) bitextu((unsigned int) *pIn, 2, 6); + + uint8_t inB0 = (uint8_t) bitextu((unsigned int) *pCom, 2, 0); + uint8_t inB1 = (uint8_t) bitextu((unsigned int) *pCom, 2, 2); + uint8_t inB2 = (uint8_t) bitextu((unsigned int) *pCom, 2, 4); + uint8_t inB3 = (uint8_t) bitextu((unsigned int) *pCom, 2, 6); + + inA0 = ((inA0 + inB0) >> 1); + inA1 = ((inA1 + inB1) >> 1); + inA2 = ((inA2 + inB2) >> 1); + inA3 = ((inA3 + inB3) >> 1); + + uint8_t inA = (uint8_t) bitins(inA0, n_mask2, inA1, mask2, off2); + inA = bitins(inA, n_mask4, inA2, mask4, off4); + *((uint8_t*)pIn) = bitins(inA, n_mask6, inA3, mask6, off6); + + pIn++; + pCom++; + length--; + } +} + +/* + * XpulpNN + */ + +static void __attribute__((noinline)) xpulp_nn_zero_mem_u8(uint8_t * pBuffer, unsigned int size) +{ + int lfover = size &0x3; + for (int i=0; i<(size>>2); i++) + { + *((v4u *)pBuffer) = (v4u){0,0,0,0}; + MemoryFence(); + pBuffer+=4; + } + while(lfover) + { + *pBuffer++=0; + lfover--; + } +} + +static void __attribute__((noinline)) xpulp_nn_zero_mem_u4(uint8_t * pBuffer, unsigned int size) +{ + int lfover = size &0x7; + for (int i=0; i<(size>>3); i++) + { + *((v4u *)pBuffer) = (v4u){0,0,0,0}; + MemoryFence(); + pBuffer+=4; + } + while(lfover) + { + *pBuffer++=0; + lfover-=2; + } +} + +static void __attribute__((noinline)) xpulp_nn_zero_mem_u2(uint8_t * pBuffer, unsigned int size) +{ + int lfover = size &0xf; + for (int i=0; i<(size>>4); i++) + { + *((v4u *)pBuffer) = (v4u){0,0,0,0}; + MemoryFence(); + pBuffer+=4; + } + while(lfover) + { + *pBuffer++=0; + lfover-=4; + } +} + + +static void __attribute__((noinline)) xpulp_tnn_zero_mem_ternary(uint8_t * pBuffer, unsigned int size, unsigned int uns) +{ + uint8_t pad_val = 0xd9; + uint32_t pad_vec = 0xd9d9d9d9; + if (uns) { + // if we are using an unsigned kernel, we need to pad with -1 because the hardware will add a +1 to ALL values! + pad_val = 0xff; + pad_vec = 0xffffffff; + } + int lfover = size &0xf; + for (int i=0; i<(size>>4); i++) + { + *((v4u *)pBuffer) = (v4u)pad_vec; + MemoryFence(); + pBuffer+=4; + } + while(lfover) + { + *pBuffer++=pad_val; + lfover-=4; + } +} + +static void __attribute__((noinline)) xpulp_nn_compare_and_replace_if_larger_u4(uint8_t * base, + uint8_t * target, + uint16_t length) +{ + int8_t mask = 0xf0; + int8_t n_mask = ~ mask; + int8_t off = 0x04; + + uint8_t *pIn = base; + uint8_t *pCom = target; + + int cnt = length >> 2; + + while(cnt > 0u) + { + *((uint32_t *)pIn) = max8(*((uint32_t *)pIn), *((uint32_t *)pCom)); + + pIn+=4; + pCom+=4; + + cnt--; + } + + int left = length & 0x3; + while (left>0u) + { + uint8_t inA0 = (uint8_t) bitextu((unsigned int) *pIn, 4, 0); + uint8_t inA1 = (uint8_t) bitextu((unsigned int) *pIn, 4, 4); + uint8_t inB0 = (uint8_t) bitextu((unsigned int) *pCom, 4, 0); + uint8_t inB1 = (uint8_t) bitextu((unsigned int) *pCom, 4, 4); + + if(inA0> 2; + + while (cnt > 0u) { + *((int32_t *)pIn) = maxs8(*((int32_t *)pIn), *((int32_t *)pCom)); + + pIn += 4; + pCom += 4; + + cnt--; + } + + int left = length & 0x3; + while (left > 0u) { + int8_t inA0 = (int8_t)bitext((int)*pIn, 4, 0); + int8_t inA1 = (int8_t)bitext((int)*pIn, 4, 4); + int8_t inB0 = (int8_t)bitext((int)*pCom, 4, 0); + int8_t inB1 = (int8_t)bitext((int)*pCom, 4, 4); + + if (inA0 < inB0) + inA0 = inB0; + + if (inA1 < inB1) + inA1 = inB1; + + *((int8_t *)pIn) = bitins(inA0, n_mask, inA1, mask, off); + + pIn++; + pCom++; + left--; + } +} + +static void __attribute__((noinline)) xpulp_nn_avg_and_replace_u4(uint8_t * base, + uint8_t * target, + uint16_t length) +{ + int8_t mask = 0xf0; + int8_t n_mask = ~ mask; + int8_t off = 0x04; + + uint8_t *pIn = base; + uint8_t *pCom = target; + + int cnt = length >> 2; + + while (cnt > 0u) + { + *((uint32_t *)pIn) = avg8(*((uint32_t *)pIn), *((uint32_t *)pCom)); + + pIn+=4; + pCom+=4; + cnt--; + } + + int left = length & 0x3; + + while (left>0u) + { + uint8_t inA0 = (uint8_t) bitextu((unsigned int) *pIn, 4, 0); + uint8_t inA1 = (uint8_t) bitextu((unsigned int) *pIn, 4, 4); + uint8_t inB0 = (uint8_t) bitextu((unsigned int) *pCom, 4, 0); + uint8_t inB1 = (uint8_t) bitextu((unsigned int) *pCom, 4, 4); + + inA0 = ((inA0 + inB0) >> 1); + inA1 = ((inA1 + inB1) >> 1); + + *((uint8_t*)pIn) = bitins(inA0, n_mask, inA1, mask, off); + + pIn++; + pCom++; + length--; + } +} + +static void __attribute__((noinline)) xpulp_nn_compare_and_replace_if_larger_u2(uint8_t * base, + uint8_t * target, + uint16_t length) +{ + int8_t mask2 = 0x0c; + int8_t n_mask2 = ~ mask2; + int8_t mask4 = 0x30; + int8_t n_mask4 = ~ mask4; + int8_t mask6 = 0xc0; + int8_t n_mask6 = ~ mask6; + int8_t off2 = 2; + int8_t off4 = 4; + int8_t off6 = 6; + + uint8_t *pIn = base; + uint8_t *pCom = target; + uint8_t *out; + + int cnt = length >> 2; + + while(cnt > 0u) + { + *((uint32_t *)pIn) = max16(*((uint32_t *)pIn), *((uint32_t *)pCom)); + + pIn+=4; + pCom+=4; + cnt--; + } + + int left = length & 0x3; + while (left>0u) + { + uint8_t inA0 = (uint8_t) bitextu((unsigned int) *pIn, 2, 0); + uint8_t inA1 = (uint8_t) bitextu((unsigned int) *pIn, 2, 2); + uint8_t inA2 = (uint8_t) bitextu((unsigned int) *pIn, 2, 4); + uint8_t inA3 = (uint8_t) bitextu((unsigned int) *pIn, 2, 6); + v4u inA4 = pack((uint8_t) inA0, (uint8_t) inA1, (uint8_t) inA2, (uint8_t) inA3); + uint8_t inB0 = (uint8_t) bitextu((unsigned int) *pCom, 2, 0); + uint8_t inB1 = (uint8_t) bitextu((unsigned int) *pCom, 2, 2); + uint8_t inB2 = (uint8_t) bitextu((unsigned int) *pCom, 2, 4); + uint8_t inB3 = (uint8_t) bitextu((unsigned int) *pCom, 2, 6); + v4u inB4 = pack((uint8_t) inB0, (uint8_t) inB1, (uint8_t) inB2, (uint8_t) inB3); + + *((v4u*)out) = max4(inA4, inB4); + + uint8_t inA = (uint8_t) bitins(*out, n_mask2, *(out + 1), mask2, off2); + inA = bitins(inA, n_mask4, *(out + 2), mask4, off4); + *((uint8_t*)pIn) = bitins(inA, n_mask6, *(out + 3), mask6, off6); + + pIn++; + pCom++; + left--; + } +} +static void __attribute__((noinline)) xpulp_nn_compare_and_replace_if_larger_i2(int8_t * base, + int8_t * target, + uint16_t length) +{ + int8_t mask2 = 0x0c; + int8_t n_mask2 = ~ mask2; + int8_t mask4 = 0x30; + int8_t n_mask4 = ~ mask4; + int8_t mask6 = 0xc0; + int8_t n_mask6 = ~ mask6; + int8_t off2 = 2; + int8_t off4 = 4; + int8_t off6 = 6; + + int8_t *pIn = base; + int8_t *pCom = target; + int8_t *out; + + int cnt = length >> 2; + + while(cnt > 0u) + { + *((int32_t *)pIn) = maxs16(*((int32_t *)pIn), *((int32_t *)pCom)); + + pIn+=4; + pCom+=4; + cnt--; + } + + int left = length & 0x3; + while (left>0u) + { + int8_t inA0 = (int8_t) bitext((int) *pIn, 2, 0); + int8_t inA1 = (int8_t) bitext((int) *pIn, 2, 2); + int8_t inA2 = (int8_t) bitext((int) *pIn, 2, 4); + int8_t inA3 = (int8_t) bitext((int) *pIn, 2, 6); + v4s inA4 = pack((int8_t) inA0, (int8_t) inA1, (int8_t) inA2, (int8_t) inA3); + int8_t inB0 = (int8_t) bitext((int) *pCom, 2, 0); + int8_t inB1 = (int8_t) bitext((int) *pCom, 2, 2); + int8_t inB2 = (int8_t) bitext((int) *pCom, 2, 4); + int8_t inB3 = (int8_t) bitext((int) *pCom, 2, 6); + v4s inB4 = pack((int8_t) inB0, (int8_t) inB1, (int8_t) inB2, (int8_t) inB3); + + *((v4s*)out) = maxs4(inA4, inB4); + + int8_t inA = (int8_t) bitins(*out, n_mask2, *(out + 1), mask2, off2); + inA = bitins(inA, n_mask4, *(out + 2), mask4, off4); + *((int8_t*)pIn) = bitins(inA, n_mask6, *(out + 3), mask6, off6); + + pIn++; + pCom++; + left--; + } +} + +static void __attribute__((noinline)) xpulp_tnn_compare_and_replace_if_larger_ternary(int8_t * base, + int8_t * target, + uint16_t length) +{ + int8_t mask2 = 0x0c; + int8_t n_mask2 = ~ mask2; + int8_t mask4 = 0x30; + int8_t n_mask4 = ~ mask4; + int8_t mask6 = 0xc0; + int8_t n_mask6 = ~ mask6; + int8_t off2 = 2; + int8_t off4 = 4; + int8_t off6 = 6; + + int8_t *pIn = base; + int8_t *pCom = target; + int8_t *out; + + int cnt = length >> 2; + int32_t result; + + while(cnt > 0u) + { + uint32_t in1 = *((uint32_t *)pIn); + uint32_t in2 = *((int32_t *)pCom); + //CompressedMax(result, in1, in2); + result = maxs20(in1, in2); + *((int32_t *)pIn) = result; + + pIn+=4; + pCom+=4; + cnt--; + } + + int left = length & 0x3; + if (left>0u) + { + uint32_t in1_padded = 0, in2_padded = 0; + // we take the <4 leftover bytes of each input and copy them into a 32-bit word + // TODO: just copy the whole word + for (int i=0; i> (8*i)); + + + } +} + +static void __attribute__((noinline)) xpulp_nn_avg_and_replace_u2(uint8_t * base, + uint8_t * target, + uint16_t length) +{ + int8_t mask2 = 0x0c; + int8_t n_mask2 = ~ mask2; + int8_t mask4 = 0x30; + int8_t n_mask4 = ~ mask4; + int8_t mask6 = 0xc0; + int8_t n_mask6 = ~ mask6; + int8_t off2 = 2; + int8_t off4 = 4; + int8_t off6 = 6; + + uint8_t *pIn = base; + uint8_t *pCom = target; + uint8_t *out; + + int cnt = length >> 2; + + while(cnt > 0u) + { + *((uint32_t *)pIn) = avg16(*((uint32_t *)pIn), *((uint32_t *)pCom)); + + pIn+=4; + pCom+=4; + cnt--; + } + + int left = length & 0x3; + while (left>0u) + { + uint8_t inA0 = (uint8_t) bitextu((unsigned int) *pIn, 2, 0); + uint8_t inA1 = (uint8_t) bitextu((unsigned int) *pIn, 2, 2); + uint8_t inA2 = (uint8_t) bitextu((unsigned int) *pIn, 2, 4); + uint8_t inA3 = (uint8_t) bitextu((unsigned int) *pIn, 2, 6); + v4u inA4 = pack((uint8_t) inA0, (uint8_t) inA1, (uint8_t) inA2, (uint8_t) inA3); + uint8_t inB0 = (uint8_t) bitextu((unsigned int) *pCom, 2, 0); + uint8_t inB1 = (uint8_t) bitextu((unsigned int) *pCom, 2, 2); + uint8_t inB2 = (uint8_t) bitextu((unsigned int) *pCom, 2, 4); + uint8_t inB3 = (uint8_t) bitextu((unsigned int) *pCom, 2, 6); + v4u inB4 = pack((uint8_t) inB0, (uint8_t) inB1, (uint8_t) inB2, (uint8_t) inB3); + + *((v4u*)out) = avg4(inA4, inB4); + + uint8_t inA = (uint8_t) bitins(*out, n_mask2, *(out + 1), mask2, off2); + inA = bitins(inA, n_mask4, *(out + 2), mask4, off4); + *((uint8_t*)pIn) = bitins(inA, n_mask6, *(out + 3), mask6, off6); + + pIn++; + pCom++; + left--; + } +} + +#endif diff --git a/rt_nn_tests/xptnn_maxpool/pulp_nn_utils_xpnn.h b/rt_nn_tests/xptnn_maxpool/pulp_nn_utils_xpnn.h new file mode 100644 index 0000000..0c783ae --- /dev/null +++ b/rt_nn_tests/xptnn_maxpool/pulp_nn_utils_xpnn.h @@ -0,0 +1,1937 @@ +/* + * pulp_nn_utils.h + * Nazareno Bruschi + * Alessandro Nadalini + * Georg Rutishauser + * + * Copyright (C) 2019-2020 ETH Zurich & University of Bologna + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef __PULPNN_UTILS__ +#define __PULPNN_UTILS__ + +#include "pmsis.h" +#ifdef GAP_SDK +#include "pulp.h" +#endif + +#define bitext(x,size,off) __builtin_pulp_bextract(x,size,off) +#define bitextu(x,size,off) __builtin_pulp_bextractu(x,size,off) +#define bitins(dst,not_mask_imm,src,mask_imm,off) __builtin_pulp_binsert(dst,not_mask_imm,src,mask_imm,off) +#define pack(x,y,z,t) __builtin_pulp_pack4(x,y,z,t) +#define max4(a,b) __builtin_pulp_maxu4(a,b) +#define maxs4(a, b) __builtin_pulp_max4(a, b) +#define max8(a, b) __builtin_pulp_maxu8(a, b) +#define maxs8(a, b) __builtin_pulp_max8(a, b) +#define max16(a, b) __builtin_pulp_maxu16(a, b) +#define maxs16(a, b) __builtin_pulp_max16(a, b) +#define max32(a,b) __builtin_pulp_maxusi(a,b) +#define maxs32(a,b) __builtin_pulp_maxsi(a,b) +#define min32(a,b) __builtin_pulp_minusi(a,b) +#define mins32(a,b) __builtin_pulp_minsi(a,b) +#define min4(a, b) __builtin_pulp_minu4(a, b) +#define mins4(a, b) __builtin_pulp_min4(a, b) +#define min8(a, b) __builtin_pulp_minu8(a, b) +#define mins8(a, b) __builtin_pulp_min8(a, b) +#define min16(a, b) __builtin_pulp_minu16(a, b) +#define mins16(a, b) __builtin_pulp_min16(a, b) +#define avg4(a,b) __builtin_pulp_avgu4(a,b) +#define avg8(a,b) __builtin_pulp_avgu8(a,b) +#define avg16(a,b) __builtin_pulp_avgu16(a,b) +#define log2(x) __builtin_pulp_fl1(x) +#define min(a,b) ((a)<(b)?(a):(b)) +#define SumDotp4(a, b, c) __builtin_pulp_sdotusp4(a, b, c) +#define SumDotp8(a, b, c) __builtin_pulp_sdotusp8(a, b, c) +#define SumDotp16(a, b, c) __builtin_pulp_sdotusp16(a, b, c) +#define SumDotps4(a, b, c) __builtin_pulp_sdotsp4(a, b, c) +#define SumDotps8(a, b, c) __builtin_pulp_sdotsp8(a, b, c) +#define SumDotps16(a, b, c) __builtin_pulp_sdotsp16(a, b, c) +#define clip4(x) __builtin_pulp_clipu_r(x, 15) +#define clip2(x) __builtin_pulp_clipu_r(x, 3) +#define clip8(x) __builtin_pulp_clipu_r(x, 255) + +#define clips4(x) __builtin_pulp_clip_r(x, 7) +#define clips2(x) __builtin_pulp_clip_r(x, 1) +#define clips8(x) __builtin_pulp_clip_r(x, 127) +#define MacLoadInit(a_update, b_update, a_reg, b_reg, ptr) __builtin_pulp_mlinitspr_v3(a_update, b_update, a_reg, b_reg, ptr) +#define MacLoadUpdate(ptr) __builtin_pulp_mlupdatespr_v3(ptr) +#define MacLoadAssign(ptr) __builtin_pulp_mlassignspr_v3(ptr) +#define MacLoad4(a_update, b_update, a_reg, b_reg, ptr, sum) __builtin_pulp_mlsdotsup4_v3(a_update, b_update, a_reg, b_reg, ptr, sum) +#define MacLoad8(a_update, b_update, a_reg, b_reg, ptr, sum) __builtin_pulp_mlsdotsup8_v3(a_update, b_update, a_reg, b_reg, ptr, sum) +#define MacLoad16(a_update, b_update, a_reg, b_reg, ptr, sum) __builtin_pulp_mlsdotsup16_v3(a_update, b_update, a_reg, b_reg, ptr, sum) +#define MacLoads4(a_update, b_update, a_reg, b_reg, ptr, sum) __builtin_pulp_mlsdotsp4_v3(a_update, b_update, a_reg, b_reg, ptr, sum) +#define MacLoads8(a_update, b_update, a_reg, b_reg, ptr, sum) __builtin_pulp_mlsdotsp8_v3(a_update, b_update, a_reg, b_reg, ptr, sum) +#define MacLoads16(a_update, b_update, a_reg, b_reg, ptr, sum) __builtin_pulp_mlsdotsp16_v3(a_update, b_update, a_reg, b_reg, ptr, sum) + +#define PACK_INT8_SIZE(x) (x) +#define PACK_INT4_SIZE(x) ((x) >> 1) +#define PACK_INT2_SIZE(x) ((x) >> 2) + +#define MemoryFence() asm volatile("":::"memory") + +#define LEGACY_MODE(x) asm volatile ("csrwi 0x010," x) +#define IVEC_FMT(x) asm volatile ("csrwi 0x00D," x) +#define MIXED_SKIP(x) asm volatile ("csrwi 0x00F," x) +#define A_ADDRESS(x) asm volatile ("csrw 0x100, %0" :: "r" (x)) +#define W_ADDRESS(x) asm volatile ("csrw 0x101, %0" :: "r" (x)) +#define A_STRIDE(x) asm volatile ("csrw 0x102, %0":: "r" (x)) +#define W_STRIDE(x) asm volatile ("csrw 0x103, %0":: "r" (x)) +#define A_ROLLBACK(x) asm volatile ("csrw 0x104, %0":: "r" (x)) +#define W_ROLLBACK(x) asm volatile ("csrw 0x105, %0":: "r" (x)) +#define A_SKIP(x) asm volatile ("csrwi 0x106," x) +#define W_SKIP(x) asm volatile ("csrwi 0x107," x) + +static uint8_t __attribute__((noinline)) pulp_nn_quant_u2 ( + int32_t phi, + int16_t m, + int8_t d + ) { + int32_t x = (m * phi) >> d; + uint8_t res = clip2(x); + return res; +} +static uint8_t __attribute__((noinline)) pulp_nn_bn_quant_u2 ( + int32_t phi, + int32_t k, + int32_t lambda, + int8_t d + ) { + int32_t integer_image_phi = (k * phi) + lambda; + int32_t x = (integer_image_phi) >> d; + uint8_t res = clip2(x); + return res; +} +static uint8_t __attribute__((noinline)) pulp_nn_add_quant_u2 ( + uint8_t pix1, + uint8_t pix2, + int16_t m1, + int16_t m2, + int8_t d + ) { + uint32_t integer_image = pix1*m1 + pix2*m2; + uint32_t x = (integer_image) >> d; + uint8_t res = clip2(x); + return res; +} + +static int8_t __attribute__((noinline)) pulp_nn_quant_i2 ( + int32_t phi, + int16_t m, + int8_t d + ) { + int32_t x = (m * phi) >> d; + int8_t res = clips2(x); + return res; +} +static int8_t __attribute__((noinline)) pulp_nn_bn_quant_i2 ( + int32_t phi, + int32_t k, + int32_t lambda, + int8_t d + ) { + int32_t integer_image_phi = (k * phi) + lambda; + int32_t x = (integer_image_phi) >> d; + int8_t res = clips2(x); + return res; +} +static int8_t __attribute__((noinline)) pulp_nn_add_quant_i2 ( + int8_t pix1, + int8_t pix2, + int16_t m1, + int16_t m2, + int8_t d + ) { + int32_t integer_image = pix1*m1 + pix2*m2; + int32_t x = (integer_image) >> d; + int8_t res = clips2(x); + return res; +} + +static uint8_t __attribute__((noinline)) pulp_nn_quant_u4 ( + int32_t phi, + int16_t m, + int8_t d + ) { + int32_t x = (m * phi) >> d; + uint8_t res = clip4(x); + return res; +} +static uint8_t __attribute__((noinline)) pulp_nn_bn_quant_u4 ( + int32_t phi, + int32_t k, + int32_t lambda, + int8_t d + ) { + int32_t integer_image_phi = (k * phi) + lambda; + int32_t x = (integer_image_phi) >> d; + uint8_t res = clip4(x); + return res; +} +static uint8_t __attribute__((noinline)) pulp_nn_add_quant_u4 ( + uint8_t pix1, + uint8_t pix2, + int16_t m1, + int16_t m2, + int8_t d + ) { + uint32_t integer_image = pix1*m1 + pix2*m2; + uint32_t x = (integer_image) >> d; + uint8_t res = clip4(x); + return res; +} + +static int8_t __attribute__((noinline)) pulp_nn_quant_i4 ( + int32_t phi, + int16_t m, + int8_t d + ) { + int32_t x = (m * phi) >> d; + int8_t res = clips4(x); + return res; +} +static int8_t __attribute__((noinline)) pulp_nn_bn_quant_i4 ( + int32_t phi, + int32_t k, + int32_t lambda, + int8_t d + ) { + int32_t integer_image_phi = (k * phi) + lambda; + int32_t x = (integer_image_phi) >> d; + int8_t res = clips4(x); + return res; +} +static int8_t __attribute__((noinline)) pulp_nn_add_quant_i4 ( + int8_t pix1, + int8_t pix2, + int16_t m1, + int16_t m2, + int8_t d + ) { + int32_t integer_image = pix1*m1 + pix2*m2; + int32_t x = (integer_image) >> d; + int8_t res = clips4(x); + return res; +} + +static uint8_t __attribute__((noinline)) pulp_nn_quant_u8 ( + int32_t phi, + int16_t m, + int8_t d + ) { + int32_t x = (m * phi) >> d; + uint8_t res = clip8(x); + return res; +} +static uint8_t __attribute__((noinline)) pulp_nn_bn_quant_u8 ( + int32_t phi, + int32_t k, + int32_t lambda, + int8_t d + ) { + int32_t integer_image_phi = (k * phi) + lambda; + int32_t x = (integer_image_phi) >> d; + uint8_t res = clip8(x); + return res; +} +static uint8_t __attribute__((noinline)) pulp_nn_add_quant_u8 ( + uint8_t pix1, + uint8_t pix2, + int16_t m1, + int16_t m2, + int8_t d + ) { + uint32_t integer_image = pix1*m1 + pix2*m2; + uint32_t x = (integer_image) >> d; + uint8_t res = clip8(x); + return res; +} + +static int8_t __attribute__((noinline)) pulp_nn_quant_i8 ( + int32_t phi, + int16_t m, + int8_t d + ) { + int32_t x = (m * phi) >> d; + int8_t res = clips8(x); + return res; +} +static int8_t __attribute__((noinline)) pulp_nn_bn_quant_i8 ( + int32_t phi, + int32_t k, + int32_t lambda, + int8_t d + ) { + int32_t integer_image_phi = (k * phi) + lambda; + int32_t x = (integer_image_phi) >> d; + int8_t res = clips8(x); + return res; +} +static int8_t __attribute__((noinline)) pulp_nn_add_quant_i8 ( + int8_t pix1, + int8_t pix2, + int16_t m1, + int16_t m2, + int8_t d + ) { + int32_t integer_image = pix1*m1 + pix2*m2; + int32_t x = (integer_image) >> d; + int8_t res = clips8(x); + return res; +} + + +static uint8_t __attribute__((noinline)) pulp_nn_u4_quant(int input, int16_t * pThr) +{ + if(input <= pThr[7] ) + { + if( input <= pThr[3]) + { + if( input <= pThr[1]) + { + if( input <= pThr[0]) + return 0; + else + return 1; + } + else + { + if( input <= pThr[2]) + return 2; + else + return 3; + } + } + else + { + if( input <= pThr[5]) + { + if( input <= pThr[4]) + return 4; + else + return 5; + } + else + { + if( input <= pThr[6]) + return 6; + else + return 7; + } + } + } + else + { + if( input <= pThr[11]) + { + if( input <= pThr[9]) + { + if( input <= pThr[8]) + return 8; + else + return 9; + } + else + { + if( input <= pThr[10]) + return 10; + else + return 11; + } + } + else + { + if( input <= pThr[13]) + { + if( input <= pThr[12]) + return 12; + else + return 13; + } + else + { + if( input <= pThr[14]) + return 14; + else + return 15; + } + } + } +} + +static uint8_t __attribute__((noinline)) pulp_nn_u2_quant(int input, int16_t * pThr) +{ + if( input <= pThr[1]) + { + if( input <= pThr[0]) + { + return 0; + } + else + { + return 1; + } + } + else + { + if( input <= pThr[2]) + { + return 2; + } + else + { + return 3; + } + } +} + +/* + * Common + */ + + +static v4s __attribute__((noinline)) pulp_nn_i4_to_i8_r( int8_t *pSrc) +{ + v4s Src = *((v4s*) pSrc); + int8_t bext1, bext2, bext3, bext4; + + bext1 = (int8_t) bitext((int) Src, 4, 0); + bext2 = (int8_t) bitext((int) Src, 4, 4); + bext3 = (int8_t) bitext((int) Src, 4, 8); + bext4 = (int8_t) bitext((int) Src, 4, 12); + v4s res = pack((int8_t) bext1, (int8_t) bext2, (int8_t) bext3, (int8_t) bext4); + + return res; +} + +static v4u __attribute__((noinline)) pulp_nn_u4_to_u8_r(uint8_t *pSrc) +{ + v4u Src = *((v4u*) pSrc); + uint8_t bext1, bext2, bext3, bext4; + + bext1 = (uint8_t) bitextu((unsigned int) Src, 4, 0); + bext2 = (uint8_t) bitextu((unsigned int) Src, 4, 4); + bext3 = (uint8_t) bitextu((unsigned int) Src, 4, 8); + bext4 = (uint8_t) bitextu((unsigned int) Src, 4, 12); + v4u res = pack((uint8_t) bext1, (uint8_t) bext2, (uint8_t) bext3, (uint8_t) bext4); + + return res; +} + +static v4s __attribute__((noinline)) pulp_nn_i2_to_i8_r( int8_t *pSrc) +{ + v4s Src = *((v4s*) pSrc); + int8_t bext1, bext2, bext3, bext4; + + bext1 = (int8_t) bitext((int) Src, 2, 0); + bext2 = (int8_t) bitext((int) Src, 2, 2); + bext3 = (int8_t) bitext((int) Src, 2, 4); + bext4 = (int8_t) bitext((int) Src, 2, 6); + v4s res = pack((int8_t) bext1, (int8_t) bext2, (int8_t) bext3, (int8_t) bext4); + + return res; +} + +static v4u __attribute__((noinline)) pulp_nn_u2_to_u8_r(uint8_t *pSrc) +{ + v4u Src = *((v4u*) pSrc); + uint8_t bext1, bext2, bext3, bext4; + + bext1 = (uint8_t) bitextu((unsigned int) Src, 2, 0); + bext2 = (uint8_t) bitextu((unsigned int) Src, 2, 2); + bext3 = (uint8_t) bitextu((unsigned int) Src, 2, 4); + bext4 = (uint8_t) bitextu((unsigned int) Src, 2, 6); + v4u res = pack((uint8_t) bext1, (uint8_t) bext2, (uint8_t) bext3, (uint8_t) bext4); + + return res; +} + +static v4s __attribute__((noinline)) pulp_nn_i2_to_i4_r(int8_t *pSrc) +{ + int8_t mask = 0xf0; + int8_t n_mask = ~ mask; + int8_t off = 0x04; + + v4s Src = *((v4s*) pSrc); + int8_t bext1, bext2, bext3, bext4; + int8_t out1, out2, out3, out4; + + bext1 = (int8_t) bitextu((int) Src, 2, 0); + bext2 = (int8_t) bitextu((int) Src, 2, 2); + bext3 = (int8_t) bitextu((int) Src, 2, 4); + bext4 = (int8_t) bitextu((int) Src, 2, 6); + + out1 = bitins(bext1, n_mask, bext2, mask, off); + out2 = bitins(bext3, n_mask, bext4, mask, off); + + bext1 = (int8_t) bitextu((int) Src, 2, 8); + bext2 = (int8_t) bitextu((int) Src, 2, 10); + bext3 = (int8_t) bitextu((int) Src, 2, 12); + bext4 = (int8_t) bitextu((int) Src, 2, 14); + + out3 = bitins(bext1, n_mask, bext2, mask, off); + out4 = bitins(bext3, n_mask, bext4, mask, off); + + v4s res = pack((int8_t) out1, (int8_t) out2, (int8_t) out3, (int8_t) out4); + + return res; +} + +static v4u __attribute__((noinline)) pulp_nn_u2_to_u4_r(uint8_t *pSrc) +{ + int8_t mask = 0xf0; + int8_t n_mask = ~ mask; + int8_t off = 0x04; + + v4u Src = *((v4u*) pSrc); + uint8_t bext1, bext2, bext3, bext4; + uint8_t out1, out2, out3, out4; + + bext1 = (uint8_t) bitextu((unsigned int) Src, 2, 0); + bext2 = (uint8_t) bitextu((unsigned int) Src, 2, 2); + bext3 = (uint8_t) bitextu((unsigned int) Src, 2, 4); + bext4 = (uint8_t) bitextu((unsigned int) Src, 2, 6); + + out1 = bitins(bext1, n_mask, bext2, mask, off); + out2 = bitins(bext3, n_mask, bext4, mask, off); + + bext1 = (uint8_t) bitextu((unsigned int) Src, 2, 8); + bext2 = (uint8_t) bitextu((unsigned int) Src, 2, 10); + bext3 = (uint8_t) bitextu((unsigned int) Src, 2, 12); + bext4 = (uint8_t) bitextu((unsigned int) Src, 2, 14); + + out3 = bitins(bext1, n_mask, bext2, mask, off); + out4 = bitins(bext3, n_mask, bext4, mask, off); + + v4u res = pack((uint8_t) out1, (uint8_t) out2, (uint8_t) out3, (uint8_t) out4); + + return res; +} + +static int8_t *__attribute__((always_inline)) pulp_nn_i4_to_i8( int8_t *pSrc, int8_t *pDst) +{ + v4s Src = *((v4s*) pSrc); + int8_t bext1, bext2, bext3, bext4; + + pSrc+=4; + + bext1 = (int8_t) bitext((int) Src, 4, 0); + bext2 = (int8_t) bitext((int) Src, 4, 4); + bext3 = (int8_t) bitext((int) Src, 4, 8); + bext4 = (int8_t) bitext((int) Src, 4, 12); + *((v4s*)pDst) = pack((int8_t) bext1, (int8_t) bext2, (int8_t) bext3, (int8_t) bext4); + MemoryFence(); + pDst+=4; + bext1 = (int8_t) bitext((int) Src, 4, 16); + bext2 = (int8_t) bitext((int) Src, 4, 20); + bext3 = (int8_t) bitext((int) Src, 4, 24); + bext4 = (int8_t) bitext((int) Src, 4, 28); + *((v4s*)pDst) = pack((int8_t) bext1, (int8_t) bext2, (int8_t) bext3, (int8_t) bext4); + + return pSrc; +} + +static uint8_t *__attribute__((always_inline)) pulp_nn_u4_to_u8(uint8_t *pSrc, uint8_t *pDst) +{ + v4u Src = *((v4u*) pSrc); + uint8_t bext1, bext2, bext3, bext4; + + pSrc+=4; + + bext1 = (uint8_t) bitextu((unsigned int) Src, 4, 0); + bext2 = (uint8_t) bitextu((unsigned int) Src, 4, 4); + bext3 = (uint8_t) bitextu((unsigned int) Src, 4, 8); + bext4 = (uint8_t) bitextu((unsigned int) Src, 4, 12); + *((v4u*)pDst) = pack((uint8_t) bext1, (uint8_t) bext2, (uint8_t) bext3, (uint8_t) bext4); + MemoryFence(); + pDst+=4; + bext1 = (uint8_t) bitextu((unsigned int) Src, 4, 16); + bext2 = (uint8_t) bitextu((unsigned int) Src, 4, 20); + bext3 = (uint8_t) bitextu((unsigned int) Src, 4, 24); + bext4 = (uint8_t) bitextu((unsigned int) Src, 4, 28); + *((v4u*)pDst) = pack((uint8_t) bext1, (uint8_t) bext2, (uint8_t) bext3, (uint8_t) bext4); + + return pSrc; +} + +static int8_t *__attribute__((always_inline)) pulp_nn_i2_to_i8( int8_t * pSrc, int8_t * pDst) +{ + v4s Src = *((v4s*) pSrc); + int8_t bext1, bext2, bext3, bext4; + + pSrc+=4; + + bext1 = (int8_t) bitext((int) Src, 2, 0); + bext2 = (int8_t) bitext((int) Src, 2, 2); + bext3 = (int8_t) bitext((int) Src, 2, 4); + bext4 = (int8_t) bitext((int) Src, 2, 6); + *((v4s*)pDst) = pack((int8_t) bext1, (int8_t) bext2, (int8_t) bext3, (int8_t) bext4); + MemoryFence(); + pDst+=4; + bext1 = (int8_t) bitext((int) Src, 2, 8); + bext2 = (int8_t) bitext((int) Src, 2, 10); + bext3 = (int8_t) bitext((int) Src, 2, 12); + bext4 = (int8_t) bitext((int) Src, 2, 14); + *((v4s*)pDst) = pack((int8_t) bext1, (int8_t) bext2, (int8_t) bext3, (int8_t) bext4); + MemoryFence(); + pDst+=4; + bext1 = (int8_t) bitext((int) Src, 2, 16); + bext2 = (int8_t) bitext((int) Src, 2, 18); + bext3 = (int8_t) bitext((int) Src, 2, 20); + bext4 = (int8_t) bitext((int) Src, 2, 22); + *((v4s*)pDst) = pack((int8_t) bext1, (int8_t) bext2, (int8_t) bext3, (int8_t) bext4); + MemoryFence(); + pDst+=4; + bext1 = (int8_t) bitext((int) Src, 2, 24); + bext2 = (int8_t) bitext((int) Src, 2, 26); + bext3 = (int8_t) bitext((int) Src, 2, 28); + bext4 = (int8_t) bitext((int) Src, 2, 30); + *((v4s*)pDst) = pack((int8_t) bext1, (int8_t) bext2, (int8_t) bext3, (int8_t) bext4); + + return pSrc; +} + +static uint8_t *__attribute__((always_inline)) pulp_nn_u2_to_u8(uint8_t * pSrc, uint8_t * pDst) +{ + v4u Src = *((v4u*) pSrc); + uint8_t bext1, bext2, bext3, bext4; + + pSrc+=4; + + bext1 = (uint8_t) bitextu((unsigned int) Src, 2, 0); + bext2 = (uint8_t) bitextu((unsigned int) Src, 2, 2); + bext3 = (uint8_t) bitextu((unsigned int) Src, 2, 4); + bext4 = (uint8_t) bitextu((unsigned int) Src, 2, 6); + *((v4u*)pDst) = pack((uint8_t) bext1, (uint8_t) bext2, (uint8_t) bext3, (uint8_t) bext4); + MemoryFence(); + pDst+=4; + bext1 = (uint8_t) bitextu((unsigned int) Src, 2, 8); + bext2 = (uint8_t) bitextu((unsigned int) Src, 2, 10); + bext3 = (uint8_t) bitextu((unsigned int) Src, 2, 12); + bext4 = (uint8_t) bitextu((unsigned int) Src, 2, 14); + *((v4u*)pDst) = pack((uint8_t) bext1, (uint8_t) bext2, (uint8_t) bext3, (uint8_t) bext4); + MemoryFence(); + pDst+=4; + bext1 = (uint8_t) bitextu((unsigned int) Src, 2, 16); + bext2 = (uint8_t) bitextu((unsigned int) Src, 2, 18); + bext3 = (uint8_t) bitextu((unsigned int) Src, 2, 20); + bext4 = (uint8_t) bitextu((unsigned int) Src, 2, 22); + *((v4u*)pDst) = pack((uint8_t) bext1, (uint8_t) bext2, (uint8_t) bext3, (uint8_t) bext4); + MemoryFence(); + pDst+=4; + bext1 = (uint8_t) bitextu((unsigned int) Src, 2, 24); + bext2 = (uint8_t) bitextu((unsigned int) Src, 2, 26); + bext3 = (uint8_t) bitextu((unsigned int) Src, 2, 28); + bext4 = (uint8_t) bitextu((unsigned int) Src, 2, 30); + *((v4u*)pDst) = pack((uint8_t) bext1, (uint8_t) bext2, (uint8_t) bext3, (uint8_t) bext4); + + return pSrc; +} + +static int8_t *__attribute__((always_inline)) pulp_nn_i2_to_i4( int8_t * pSrc, int8_t * pDst) +{ + int8_t mask = 0xf0; + int8_t n_mask = ~ mask; + int8_t off = 0x04; + + v4s Src = *((v4s*) pSrc); + int8_t bext1, bext2, bext3, bext4; + int8_t out1, out2, out3, out4; + + pSrc+=4; + + bext1 = (int8_t) bitext((int) Src, 2, 0); + bext2 = (int8_t) bitext((int) Src, 2, 2); + bext3 = (int8_t) bitext((int) Src, 2, 4); + bext4 = (int8_t) bitext((int) Src, 2, 6); + + out1 = bitins(bext1, n_mask, bext2, mask, off); + out2 = bitins(bext3, n_mask, bext4, mask, off); + MemoryFence(); + + bext1 = (int8_t) bitext((int) Src, 2, 8); + bext2 = (int8_t) bitext((int) Src, 2, 10); + bext3 = (int8_t) bitext((int) Src, 2, 12); + bext4 = (int8_t) bitext((int) Src, 2, 14); + + out3 = bitins(bext1, n_mask, bext2, mask, off); + out4 = bitins(bext3, n_mask, bext4, mask, off); + + *((v4s*)pDst) = pack((int8_t) out1, (int8_t) out2, (int8_t) out3, (int8_t) out4); + MemoryFence(); + + pDst+=4; + bext1 = (int8_t) bitext((int) Src, 2, 16); + bext2 = (int8_t) bitext((int) Src, 2, 18); + bext3 = (int8_t) bitext((int) Src, 2, 20); + bext4 = (int8_t) bitext((int) Src, 2, 22); + + out1 = bitins(bext1, n_mask, bext2, mask, off); + out2 = bitins(bext3, n_mask, bext4, mask, off); + MemoryFence(); + + bext1 = (int8_t) bitext((int) Src, 2, 24); + bext2 = (int8_t) bitext((int) Src, 2, 26); + bext3 = (int8_t) bitext((int) Src, 2, 28); + bext4 = (int8_t) bitext((int) Src, 2, 30); + + out3 = bitins(bext1, n_mask, bext2, mask, off); + out4 = bitins(bext3, n_mask, bext4, mask, off); + + *((v4s*)pDst) = pack((int8_t) out1, (int8_t) out2, (int8_t) out3, (int8_t) out4); + + return pSrc; +} + +static uint8_t *__attribute__((always_inline)) pulp_nn_u2_to_u4( uint8_t * pSrc, uint8_t * pDst) +{ + int8_t mask = 0xf0; + int8_t n_mask = ~ mask; + int8_t off = 0x04; + + v4u Src = *((v4u*) pSrc); + uint8_t bext1, bext2, bext3, bext4; + uint8_t out1, out2, out3, out4; + + pSrc+=4; + + bext1 = (uint8_t) bitextu((unsigned int) Src, 2, 0); + bext2 = (uint8_t) bitextu((unsigned int) Src, 2, 2); + bext3 = (uint8_t) bitextu((unsigned int) Src, 2, 4); + bext4 = (uint8_t) bitextu((unsigned int) Src, 2, 6); + + out1 = bitins(bext1, n_mask, bext2, mask, off); + out2 = bitins(bext3, n_mask, bext4, mask, off); + MemoryFence(); + + bext1 = (uint8_t) bitextu((unsigned int) Src, 2, 8); + bext2 = (uint8_t) bitextu((unsigned int) Src, 2, 10); + bext3 = (uint8_t) bitextu((unsigned int) Src, 2, 12); + bext4 = (uint8_t) bitextu((unsigned int) Src, 2, 14); + + out3 = bitins(bext1, n_mask, bext2, mask, off); + out4 = bitins(bext3, n_mask, bext4, mask, off); + + *((v4u*)pDst) = pack((uint8_t) out1, (uint8_t) out2, (uint8_t) out3, (uint8_t) out4); + MemoryFence(); + + pDst+=4; + bext1 = (uint8_t) bitextu((unsigned int) Src, 2, 16); + bext2 = (uint8_t) bitextu((unsigned int) Src, 2, 18); + bext3 = (uint8_t) bitextu((unsigned int) Src, 2, 20); + bext4 = (uint8_t) bitextu((unsigned int) Src, 2, 22); + + out1 = bitins(bext1, n_mask, bext2, mask, off); + out2 = bitins(bext3, n_mask, bext4, mask, off); + MemoryFence(); + + bext1 = (uint8_t) bitextu((unsigned int) Src, 2, 24); + bext2 = (uint8_t) bitextu((unsigned int) Src, 2, 26); + bext3 = (uint8_t) bitextu((unsigned int) Src, 2, 28); + bext4 = (uint8_t) bitextu((unsigned int) Src, 2, 30); + + out3 = bitins(bext1, n_mask, bext2, mask, off); + out4 = bitins(bext3, n_mask, bext4, mask, off); + + *((v4u*)pDst) = pack((uint8_t) out1, (uint8_t) out2, (uint8_t) out3, (uint8_t) out4); + + return pSrc; +} + +/* + * XpulpV2 + */ + +static void __attribute__((noinline)) pulp_zero_mem(uint8_t * pBuffer, unsigned int size) +{ + int lfover = size &0x3; + for (int i=0; i<(size>>2); i++) + { + *((v4u *)pBuffer) = (v4u){0,0,0,0}; + MemoryFence(); + pBuffer+=4; + } + while(lfover) + { + *pBuffer++=0; + lfover--; + } +} + +static void __attribute__((noinline)) pulp_nn_im2col_u2_to_u8(uint8_t * pInput, uint8_t * pOutput, unsigned int blockSize) +{ + unsigned int blkCnt = blockSize >> 4u; + int lfover = blockSize & 0x0f; + for (int i = 0; i> 4u; + int lfover = blockSize & 0x0f; + for (int i = 0; i> 3u; + int lfover = blockSize & 0x07; + for (int i = 0; i> 3u; + int lfover = blockSize & 0x07; + for (int i = 0; i> 2u; + int lfover = blockSize & 0x03; + for (int i = 0; i> 2u; + int lfover = blockSize & 0x03; + for (int i = 0; i> 4u; + int lfover = blockSize & 0x0f; + for (int i = 0; i> 4u; + int lfover = blockSize & 0x0f; + for (int i = 0; i> 4u; + int lfover = blockSize & 0x0f; + for (int i = 0; i> 4u; + int lfover = blockSize & 0x0f; + for (int i = 0; i> 4u; + int lfover = blockSize & 0x0f; + for (int i = 0; i> 4u; + int lfover = blockSize & 0x0f; + for (int i = 0; i> 3u; + int lfover = blockSize & 0x07; + for (int i = 0; i> 3u; + int lfover = blockSize & 0x07; + for (int i = 0; i> 3u; + int lfover = blockSize & 0x07; + for (int i = 0; i> 3u; + int lfover = blockSize & 0x07; + for (int i = 0; i> 2u; + int lfover = blockSize & 0x03; + for (int i = 0; i> 2u; + int lfover = blockSize & 0x03; + for (int i = 0; i> 2; + + while(cnt > 0u) + { + inp = *((v4u*)pIn); + com = *((v4u*)pCom); + + *((v4u*)pIn) = max4(inp, com); + + pCom+=4; + pIn+=4; + cnt--; + } + + int left = length & 0x3; + while (left>0u) + { + if(*pIn<*pCom) + *pIn=*pCom; + + pIn++; + pCom++; + left--; + } +} + +static void __attribute__((noinline)) pulp_nn_compare_and_replace_if_larger_i8( + int8_t * base, int8_t * target, uint16_t length) { + int8_t *pIn = base; + int8_t *pCom = target; + v4s inp; + v4s com; + int cnt = length >> 2; + + while (cnt > 0u) { + inp = *((v4s *)pIn); + com = *((v4s *)pCom); + + *((v4s *)pIn) = maxs4(inp, com); + + pCom += 4; + pIn += 4; + cnt--; + } + + int left = length & 0x3; + while (left > 0u) { + if (*pIn < *pCom) + *pIn = *pCom; + + pIn++; + pCom++; + left--; + } +} + +static void __attribute__((noinline)) pulp_nn_avg_and_replace_u8(uint8_t * base, + uint8_t * target, + uint16_t length) +{ + uint8_t *pIn = base; + uint8_t *pCom = target; + + while (length>0u) + { + *pIn = ((*pIn + *pCom) >> 1); + + pIn++; + pCom++; + length--; + } +} + +static void __attribute__((noinline)) pulp_nn_compare_and_replace_if_larger_u4(uint8_t * base, + uint8_t * target, + uint16_t length) +{ + int8_t mask = 0xf0; + int8_t n_mask = ~ mask; + int8_t off = 0x04; + + uint8_t *pIn = base; + uint8_t *pCom = target; + v4u inp[2]; + v4u com[2]; + uint8_t *out; + int cnt = length >> 2; + + while(cnt > 0u) + { + pulp_nn_u4_to_u8(pIn, (uint8_t *)inp); + pulp_nn_u4_to_u8(pCom, (uint8_t *)com); + + *((v4u *)out) = max4(inp[0], com[0]); + + *((uint8_t*)pIn) = bitins(*out, n_mask, *(out + 1), mask, off); + pIn++; + *((uint8_t*)pIn) = bitins(*(out + 2), n_mask, *(out + 3), mask, off); + pIn++; + + *((v4u *)out) = max4(inp[1], com[1]); + + *((uint8_t*)pIn) = bitins(*out, n_mask, *(out + 1), mask, off); + pIn++; + *((uint8_t*)pIn) = bitins(*(out + 2), n_mask, *(out + 3), mask, off); + pIn++; + + pCom+=4; + cnt--; + } + + int left = length & 0x3; + while (left>0u) + { + uint8_t inA0 = (uint8_t) bitextu((unsigned int) *pIn, 4, 0); + uint8_t inA1 = (uint8_t) bitextu((unsigned int) *pIn, 4, 4); + uint8_t inB0 = (uint8_t) bitextu((unsigned int) *pCom, 4, 0); + uint8_t inB1 = (uint8_t) bitextu((unsigned int) *pCom, 4, 4); + + if(inA0> 2; + + while(cnt > 0u) + { + pulp_nn_i4_to_i8(pIn, (int8_t *)inp); + pulp_nn_i4_to_i8(pCom, (int8_t *)com); + + *((v4s *)out) = maxs4(inp[0], com[0]); + + *((int8_t*)pIn) = bitins(*out, n_mask, *(out + 1), mask, off); + pIn++; + *((int8_t*)pIn) = bitins(*(out + 2), n_mask, *(out + 3), mask, off); + pIn++; + + *((v4s *)out) = maxs4(inp[1], com[1]); + + *((int8_t*)pIn) = bitins(*out, n_mask, *(out + 1), mask, off); + pIn++; + *((int8_t*)pIn) = bitins(*(out + 2), n_mask, *(out + 3), mask, off); + pIn++; + + pCom+=4; + cnt--; + } + + int left = length & 0x3; + while (left>0u) + { + int8_t inA0 = (int8_t) bitext((int) *pIn, 4, 0); + int8_t inA1 = (int8_t) bitext((int) *pIn, 4, 4); + int8_t inB0 = (int8_t) bitext((int) *pCom, 4, 0); + int8_t inB1 = (int8_t) bitext((int) *pCom, 4, 4); + + if(inA00u) + { + uint8_t inA0 = (uint8_t) bitextu((unsigned int) *pIn, 4, 0); + uint8_t inA1 = (uint8_t) bitextu((unsigned int) *pIn, 4, 4); + uint8_t inB0 = (uint8_t) bitextu((unsigned int) *pCom, 4, 0); + uint8_t inB1 = (uint8_t) bitextu((unsigned int) *pCom, 4, 4); + + inA0 = ((inA0 + inB0) >> 1); + inA1 = ((inA1 + inB1) >> 1); + + *((uint8_t*)pIn) = bitins(inA0, n_mask, inA1, mask, off); + + pIn++; + pCom++; + length--; + } +} + +static void __attribute__((noinline)) pulp_nn_compare_and_replace_if_larger_u2(uint8_t * base, + uint8_t * target, + uint16_t length) +{ + int8_t mask2 = 0x0c; + int8_t n_mask2 = ~ mask2; + int8_t mask4 = 0x30; + int8_t n_mask4 = ~ mask4; + int8_t mask6 = 0xc0; + int8_t n_mask6 = ~ mask6; + int8_t off2 = 2; + int8_t off4 = 4; + int8_t off6 = 6; + + uint8_t *pIn = base; + uint8_t *pCom = target; + v4u inp[4]; + v4u com[4]; + uint8_t *out; + int cnt = length >> 2; + + while(cnt > 0u) + { + pulp_nn_u2_to_u8(pIn, inp); + pulp_nn_u2_to_u8(pCom, com); + + *((v4u*)out) = max4(inp[0], com[0]); + + uint8_t inA = (uint8_t) bitins(*out, n_mask2, *(out + 1), mask2, off2); + inA = bitins(inA, n_mask4, *(out + 2), mask4, off4); + *((uint8_t*)pIn) = bitins(inA, n_mask6, *(out + 3), mask6, off6); + pIn++; + + *((v4u*)out) = max4(inp[1], com[1]); + + inA = (uint8_t) bitins(*out, n_mask2, *(out + 1), mask2, off2); + inA = bitins(inA, n_mask4, *(out + 2), mask4, off4); + *((uint8_t*)pIn) = bitins(inA, n_mask6, *(out + 3), mask6, off6); + pIn++; + + *((v4u*)out) = max4(inp[2], com[2]); + + inA = (uint8_t) bitins(*out, n_mask2, *(out + 1), mask2, off2); + inA = bitins(inA, n_mask4, *(out + 2), mask4, off4); + *((uint8_t*)pIn) = bitins(inA, n_mask6, *(out + 3), mask6, off6); + pIn++; + + *((v4u*)out) = max4(inp[3], com[3]); + + inA = (uint8_t) bitins(*out, n_mask2, *(out + 1), mask2, off2); + inA = bitins(inA, n_mask4, *(out + 2), mask4, off4); + *((uint8_t*)pIn) = bitins(inA, n_mask6, *(out + 3), mask6, off6); + pIn++; + + pCom+=4; + cnt--; + } + + int left = length & 0x3; + while (left>0u) + { + uint8_t inA0 = (uint8_t) bitextu((unsigned int) *pIn, 2, 0); + uint8_t inA1 = (uint8_t) bitextu((unsigned int) *pIn, 2, 2); + uint8_t inA2 = (uint8_t) bitextu((unsigned int) *pIn, 2, 4); + uint8_t inA3 = (uint8_t) bitextu((unsigned int) *pIn, 2, 6); + v4u inA4 = pack((uint8_t) inA0, (uint8_t) inA1, (uint8_t) inA2, (uint8_t) inA3); + uint8_t inB0 = (uint8_t) bitextu((unsigned int) *pCom, 2, 0); + uint8_t inB1 = (uint8_t) bitextu((unsigned int) *pCom, 2, 2); + uint8_t inB2 = (uint8_t) bitextu((unsigned int) *pCom, 2, 4); + uint8_t inB3 = (uint8_t) bitextu((unsigned int) *pCom, 2, 6); + v4u inB4 = pack((uint8_t) inB0, (uint8_t) inB1, (uint8_t) inB2, (uint8_t) inB3); + + *((v4u*)out) = max4(inA4, inB4); + + uint8_t inA = (uint8_t) bitins(*out, n_mask2, *(out + 1), mask2, off2); + inA = bitins(inA, n_mask4, *(out + 2), mask4, off4); + *((uint8_t*)pIn) = bitins(inA, n_mask6, *(out + 3), mask6, off6); + + pIn++; + pCom++; + left--; + } +} + + +static void __attribute__((noinline)) pulp_nn_compare_and_replace_if_larger_i2(int8_t * base, + int8_t * target, + uint16_t length) +{ + int8_t mask2 = 0x0c; + int8_t n_mask2 = ~ mask2; + int8_t mask4 = 0x30; + int8_t n_mask4 = ~ mask4; + int8_t mask6 = 0xc0; + int8_t n_mask6 = ~ mask6; + int8_t off2 = 2; + int8_t off4 = 4; + int8_t off6 = 6; + + int8_t *pIn = base; + int8_t *pCom = target; + v4s inp[4]; + v4s com[4]; + int8_t *out; + int cnt = length >> 2; + + while(cnt > 0u) + { + pulp_nn_i2_to_i8(pIn, inp); + pulp_nn_i2_to_i8(pCom, com); + + *((v4s*)out) = maxs4(inp[0], com[0]); + + int8_t inA = (int8_t) bitins(*out, n_mask2, *(out + 1), mask2, off2); + inA = bitins(inA, n_mask4, *(out + 2), mask4, off4); + *((int8_t*)pIn) = bitins(inA, n_mask6, *(out + 3), mask6, off6); + pIn++; + + *((v4s*)out) = maxs4(inp[1], com[1]); + + inA = (int8_t) bitins(*out, n_mask2, *(out + 1), mask2, off2); + inA = bitins(inA, n_mask4, *(out + 2), mask4, off4); + *((int8_t*)pIn) = bitins(inA, n_mask6, *(out + 3), mask6, off6); + pIn++; + + *((v4s*)out) = maxs4(inp[2], com[2]); + + inA = (int8_t) bitins(*out, n_mask2, *(out + 1), mask2, off2); + inA = bitins(inA, n_mask4, *(out + 2), mask4, off4); + *((int8_t*)pIn) = bitins(inA, n_mask6, *(out + 3), mask6, off6); + pIn++; + + *((v4s*)out) = maxs4(inp[3], com[3]); + + inA = (int8_t) bitins(*out, n_mask2, *(out + 1), mask2, off2); + inA = bitins(inA, n_mask4, *(out + 2), mask4, off4); + *((int8_t*)pIn) = bitins(inA, n_mask6, *(out + 3), mask6, off6); + pIn++; + + pCom+=4; + cnt--; + } + + int left = length & 0x3; + while (left>0u) + { + int8_t inA0 = (int8_t) bitext((unsigned int) *pIn, 2, 0); + int8_t inA1 = (int8_t) bitext((unsigned int) *pIn, 2, 2); + int8_t inA2 = (int8_t) bitext((unsigned int) *pIn, 2, 4); + int8_t inA3 = (int8_t) bitext((unsigned int) *pIn, 2, 6); + v4s inA4 = pack((int8_t) inA0, (int8_t) inA1, (int8_t) inA2, (int8_t) inA3); + int8_t inB0 = (int8_t) bitext((unsigned int) *pCom, 2, 0); + int8_t inB1 = (int8_t) bitext((unsigned int) *pCom, 2, 2); + int8_t inB2 = (int8_t) bitext((unsigned int) *pCom, 2, 4); + int8_t inB3 = (int8_t) bitext((unsigned int) *pCom, 2, 6); + v4s inB4 = pack((int8_t) inB0, (int8_t) inB1, (int8_t) inB2, (int8_t) inB3); + + *((v4s*)out) = maxs4(inA4, inB4); + + int8_t inA = (int8_t) bitins(*out, n_mask2, *(out + 1), mask2, off2); + inA = bitins(inA, n_mask4, *(out + 2), mask4, off4); + *((int8_t*)pIn) = bitins(inA, n_mask6, *(out + 3), mask6, off6); + + pIn++; + pCom++; + left--; + } +} + +static void __attribute__((noinline)) pulp_nn_avg_and_replace_u2(uint8_t * base, + uint8_t * target, + uint16_t length) +{ + int8_t mask2 = 0x0c; + int8_t n_mask2 = ~ mask2; + int8_t mask4 = 0x30; + int8_t n_mask4 = ~ mask4; + int8_t mask6 = 0xc0; + int8_t n_mask6 = ~ mask6; + int8_t off2 = 2; + int8_t off4 = 4; + int8_t off6 = 6; + + uint8_t *pIn = base; + uint8_t *pCom = target; + + while (length>0u) + { + uint8_t inA0 = (uint8_t) bitextu((unsigned int) *pIn, 2, 0); + uint8_t inA1 = (uint8_t) bitextu((unsigned int) *pIn, 2, 2); + uint8_t inA2 = (uint8_t) bitextu((unsigned int) *pIn, 2, 4); + uint8_t inA3 = (uint8_t) bitextu((unsigned int) *pIn, 2, 6); + + uint8_t inB0 = (uint8_t) bitextu((unsigned int) *pCom, 2, 0); + uint8_t inB1 = (uint8_t) bitextu((unsigned int) *pCom, 2, 2); + uint8_t inB2 = (uint8_t) bitextu((unsigned int) *pCom, 2, 4); + uint8_t inB3 = (uint8_t) bitextu((unsigned int) *pCom, 2, 6); + + inA0 = ((inA0 + inB0) >> 1); + inA1 = ((inA1 + inB1) >> 1); + inA2 = ((inA2 + inB2) >> 1); + inA3 = ((inA3 + inB3) >> 1); + + uint8_t inA = (uint8_t) bitins(inA0, n_mask2, inA1, mask2, off2); + inA = bitins(inA, n_mask4, inA2, mask4, off4); + *((uint8_t*)pIn) = bitins(inA, n_mask6, inA3, mask6, off6); + + pIn++; + pCom++; + length--; + } +} + +/* + * XpulpNN + */ + +static void __attribute__((noinline)) xpulp_nn_zero_mem_u8(uint8_t * pBuffer, unsigned int size) +{ + int lfover = size &0x3; + for (int i=0; i<(size>>2); i++) + { + *((v4u *)pBuffer) = (v4u){0,0,0,0}; + MemoryFence(); + pBuffer+=4; + } + while(lfover) + { + *pBuffer++=0; + lfover--; + } +} + +static void __attribute__((noinline)) xpulp_nn_zero_mem_u4(uint8_t * pBuffer, unsigned int size) +{ + int lfover = size &0x7; + for (int i=0; i<(size>>3); i++) + { + *((v4u *)pBuffer) = (v4u){0,0,0,0}; + MemoryFence(); + pBuffer+=4; + } + while(lfover) + { + *pBuffer++=0; + lfover-=2; + } +} + +static void __attribute__((noinline)) xpulp_nn_zero_mem_u2(uint8_t * pBuffer, unsigned int size) +{ + int lfover = size &0xf; + for (int i=0; i<(size>>4); i++) + { + *((v4u *)pBuffer) = (v4u){0,0,0,0}; + MemoryFence(); + pBuffer+=4; + } + while(lfover) + { + *pBuffer++=0; + lfover-=4; + } +} + + +static void __attribute__((noinline)) xpulp_nn_compare_and_replace_if_larger_u4(uint8_t * base, + uint8_t * target, + uint16_t length) +{ + int8_t mask = 0xf0; + int8_t n_mask = ~ mask; + int8_t off = 0x04; + + uint8_t *pIn = base; + uint8_t *pCom = target; + + int cnt = length >> 2; + + while(cnt > 0u) + { + *((uint32_t *)pIn) = max8(*((uint32_t *)pIn), *((uint32_t *)pCom)); + + pIn+=4; + pCom+=4; + + cnt--; + } + + int left = length & 0x3; + while (left>0u) + { + uint8_t inA0 = (uint8_t) bitextu((unsigned int) *pIn, 4, 0); + uint8_t inA1 = (uint8_t) bitextu((unsigned int) *pIn, 4, 4); + uint8_t inB0 = (uint8_t) bitextu((unsigned int) *pCom, 4, 0); + uint8_t inB1 = (uint8_t) bitextu((unsigned int) *pCom, 4, 4); + + if(inA0> 2; + + while (cnt > 0u) { + *((int32_t *)pIn) = maxs8(*((int32_t *)pIn), *((int32_t *)pCom)); + + pIn += 4; + pCom += 4; + + cnt--; + } + + int left = length & 0x3; + while (left > 0u) { + int8_t inA0 = (int8_t)bitext((int)*pIn, 4, 0); + int8_t inA1 = (int8_t)bitext((int)*pIn, 4, 4); + int8_t inB0 = (int8_t)bitext((int)*pCom, 4, 0); + int8_t inB1 = (int8_t)bitext((int)*pCom, 4, 4); + + if (inA0 < inB0) + inA0 = inB0; + + if (inA1 < inB1) + inA1 = inB1; + + *((int8_t *)pIn) = bitins(inA0, n_mask, inA1, mask, off); + + pIn++; + pCom++; + left--; + } +} + +static void __attribute__((noinline)) xpulp_nn_avg_and_replace_u4(uint8_t * base, + uint8_t * target, + uint16_t length) +{ + int8_t mask = 0xf0; + int8_t n_mask = ~ mask; + int8_t off = 0x04; + + uint8_t *pIn = base; + uint8_t *pCom = target; + + int cnt = length >> 2; + + while (cnt > 0u) + { + *((uint32_t *)pIn) = avg8(*((uint32_t *)pIn), *((uint32_t *)pCom)); + + pIn+=4; + pCom+=4; + cnt--; + } + + int left = length & 0x3; + + while (left>0u) + { + uint8_t inA0 = (uint8_t) bitextu((unsigned int) *pIn, 4, 0); + uint8_t inA1 = (uint8_t) bitextu((unsigned int) *pIn, 4, 4); + uint8_t inB0 = (uint8_t) bitextu((unsigned int) *pCom, 4, 0); + uint8_t inB1 = (uint8_t) bitextu((unsigned int) *pCom, 4, 4); + + inA0 = ((inA0 + inB0) >> 1); + inA1 = ((inA1 + inB1) >> 1); + + *((uint8_t*)pIn) = bitins(inA0, n_mask, inA1, mask, off); + + pIn++; + pCom++; + length--; + } +} + +static void __attribute__((noinline)) xpulp_nn_compare_and_replace_if_larger_u2(uint8_t * base, + uint8_t * target, + uint16_t length) +{ + int8_t mask2 = 0x0c; + int8_t n_mask2 = ~ mask2; + int8_t mask4 = 0x30; + int8_t n_mask4 = ~ mask4; + int8_t mask6 = 0xc0; + int8_t n_mask6 = ~ mask6; + int8_t off2 = 2; + int8_t off4 = 4; + int8_t off6 = 6; + + uint8_t *pIn = base; + uint8_t *pCom = target; + uint8_t *out; + + int cnt = length >> 2; + + while(cnt > 0u) + { + *((uint32_t *)pIn) = max16(*((uint32_t *)pIn), *((uint32_t *)pCom)); + + pIn+=4; + pCom+=4; + cnt--; + } + + int left = length & 0x3; + while (left>0u) + { + uint8_t inA0 = (uint8_t) bitextu((unsigned int) *pIn, 2, 0); + uint8_t inA1 = (uint8_t) bitextu((unsigned int) *pIn, 2, 2); + uint8_t inA2 = (uint8_t) bitextu((unsigned int) *pIn, 2, 4); + uint8_t inA3 = (uint8_t) bitextu((unsigned int) *pIn, 2, 6); + v4u inA4 = pack((uint8_t) inA0, (uint8_t) inA1, (uint8_t) inA2, (uint8_t) inA3); + uint8_t inB0 = (uint8_t) bitextu((unsigned int) *pCom, 2, 0); + uint8_t inB1 = (uint8_t) bitextu((unsigned int) *pCom, 2, 2); + uint8_t inB2 = (uint8_t) bitextu((unsigned int) *pCom, 2, 4); + uint8_t inB3 = (uint8_t) bitextu((unsigned int) *pCom, 2, 6); + v4u inB4 = pack((uint8_t) inB0, (uint8_t) inB1, (uint8_t) inB2, (uint8_t) inB3); + + *((v4u*)out) = max4(inA4, inB4); + + uint8_t inA = (uint8_t) bitins(*out, n_mask2, *(out + 1), mask2, off2); + inA = bitins(inA, n_mask4, *(out + 2), mask4, off4); + *((uint8_t*)pIn) = bitins(inA, n_mask6, *(out + 3), mask6, off6); + + pIn++; + pCom++; + left--; + } +} +static void __attribute__((noinline)) xpulp_nn_compare_and_replace_if_larger_i2(int8_t * base, + int8_t * target, + uint16_t length) +{ + int8_t mask2 = 0x0c; + int8_t n_mask2 = ~ mask2; + int8_t mask4 = 0x30; + int8_t n_mask4 = ~ mask4; + int8_t mask6 = 0xc0; + int8_t n_mask6 = ~ mask6; + int8_t off2 = 2; + int8_t off4 = 4; + int8_t off6 = 6; + + int8_t *pIn = base; + int8_t *pCom = target; + int8_t *out; + + int cnt = length >> 2; + + while(cnt > 0u) + { + *((int32_t *)pIn) = maxs16(*((int32_t *)pIn), *((int32_t *)pCom)); + + pIn+=4; + pCom+=4; + cnt--; + } + + int left = length & 0x3; + while (left>0u) + { + int8_t inA0 = (int8_t) bitext((int) *pIn, 2, 0); + int8_t inA1 = (int8_t) bitext((int) *pIn, 2, 2); + int8_t inA2 = (int8_t) bitext((int) *pIn, 2, 4); + int8_t inA3 = (int8_t) bitext((int) *pIn, 2, 6); + v4s inA4 = pack((int8_t) inA0, (int8_t) inA1, (int8_t) inA2, (int8_t) inA3); + int8_t inB0 = (int8_t) bitext((int) *pCom, 2, 0); + int8_t inB1 = (int8_t) bitext((int) *pCom, 2, 2); + int8_t inB2 = (int8_t) bitext((int) *pCom, 2, 4); + int8_t inB3 = (int8_t) bitext((int) *pCom, 2, 6); + v4s inB4 = pack((int8_t) inB0, (int8_t) inB1, (int8_t) inB2, (int8_t) inB3); + + *((v4s*)out) = maxs4(inA4, inB4); + + int8_t inA = (int8_t) bitins(*out, n_mask2, *(out + 1), mask2, off2); + inA = bitins(inA, n_mask4, *(out + 2), mask4, off4); + *((int8_t*)pIn) = bitins(inA, n_mask6, *(out + 3), mask6, off6); + + pIn++; + pCom++; + left--; + } +} + +static void __attribute__((noinline)) xpulp_nn_avg_and_replace_u2(uint8_t * base, + uint8_t * target, + uint16_t length) +{ + int8_t mask2 = 0x0c; + int8_t n_mask2 = ~ mask2; + int8_t mask4 = 0x30; + int8_t n_mask4 = ~ mask4; + int8_t mask6 = 0xc0; + int8_t n_mask6 = ~ mask6; + int8_t off2 = 2; + int8_t off4 = 4; + int8_t off6 = 6; + + uint8_t *pIn = base; + uint8_t *pCom = target; + uint8_t *out; + + int cnt = length >> 2; + + while(cnt > 0u) + { + *((uint32_t *)pIn) = avg16(*((uint32_t *)pIn), *((uint32_t *)pCom)); + + pIn+=4; + pCom+=4; + cnt--; + } + + int left = length & 0x3; + while (left>0u) + { + uint8_t inA0 = (uint8_t) bitextu((unsigned int) *pIn, 2, 0); + uint8_t inA1 = (uint8_t) bitextu((unsigned int) *pIn, 2, 2); + uint8_t inA2 = (uint8_t) bitextu((unsigned int) *pIn, 2, 4); + uint8_t inA3 = (uint8_t) bitextu((unsigned int) *pIn, 2, 6); + v4u inA4 = pack((uint8_t) inA0, (uint8_t) inA1, (uint8_t) inA2, (uint8_t) inA3); + uint8_t inB0 = (uint8_t) bitextu((unsigned int) *pCom, 2, 0); + uint8_t inB1 = (uint8_t) bitextu((unsigned int) *pCom, 2, 2); + uint8_t inB2 = (uint8_t) bitextu((unsigned int) *pCom, 2, 4); + uint8_t inB3 = (uint8_t) bitextu((unsigned int) *pCom, 2, 6); + v4u inB4 = pack((uint8_t) inB0, (uint8_t) inB1, (uint8_t) inB2, (uint8_t) inB3); + + *((v4u*)out) = avg4(inA4, inB4); + + uint8_t inA = (uint8_t) bitins(*out, n_mask2, *(out + 1), mask2, off2); + inA = bitins(inA, n_mask4, *(out + 2), mask4, off4); + *((uint8_t*)pIn) = bitins(inA, n_mask6, *(out + 3), mask6, off6); + + pIn++; + pCom++; + left--; + } +} + + +#endif diff --git a/rt_nn_tests/xptnn_maxpool/test.c b/rt_nn_tests/xptnn_maxpool/test.c new file mode 100644 index 0000000..3d78553 --- /dev/null +++ b/rt_nn_tests/xptnn_maxpool/test.c @@ -0,0 +1,183 @@ +// massive hack to enable rt compatibility +#define pi_core_id get_core_id +#include +#include +#include + +#include "dory_dma.h" + +#include "xpulp_tnn_matmul_ternary.h" +#include "xpulp_tnn_matmul_ternary_4x1.h" +#include "xpulp_tnn_conv_ternary.h" +#include "xpulp_tnn_conv_ternary_signed.h" +#ifndef PROFILE // HACKYTIME +#include "xpulp_tnn_conv1d_ternary.h" +#include "xpulp_tnn_conv1d_ternary_signed.h" +#endif +#include "xpulp_tnn_maxpool_ternary.h" +#include "xpulp_tnn_linear_ternary_i32_signed.h" +#include "xpulp_tnn_linear_ternary_i32.h" +#include "pmsis.h" + +#include "data_statstest.h" +//#include "pulp_nn_kernels.h" +#include "pulp_nn_mix_kernels.h" + + +#define start_cycle_counter() asm volatile("csrw 0xCC0, 0x01;") +#define stop_cycle_counter() asm volatile("csrw 0xCC0, 0x00;") +#define read_cycle_counter(x) asm volatile("csrr %0, 0x780;" : "=r" (x)) +#define reset_cycle_counter() asm volatile("csrw 0x780, 0x0;") + +uint8_t im2col[IM2COL_DIM] = {0}; +uint8_t outputs[OUTPUT_DIM] = {0}; + +int32_t outputs_fp[OUTPUT_DIM_FP] = {0}; + +#ifndef PROFILE +int num_cycles; +#else +int im2col_cycles; +int hotloop_prep_cycles; +int hotloop_cycles; +int threshold_cycles; +int requant_cycles; +int hotloop_leftover_cycles; +int matmul4x2_leftover_cycles; +#endif + +void call_krnl_0(); +void test_0(); + +int main(int argc, char *argv[]) +{ +#if KRAKEN_PTEST == 1 + kraken_padframe_aon_pad_gpioa_cfg_rxe_set(24, 0); + kraken_padframe_aon_pad_gpioa_cfg_trie_set(24, 0); + kraken_padframe_aon_pad_gpioa_cfg_chip2pad_set(24, 0); +#endif + int n_mismatches = 0; + int mismatches_tot = 0; + + + + #ifndef PROFILE + num_cycles = 0; + #endif + + if (get_core_id() == 0) { + printf("===> TEST 0: Running xpulp_tnn_maxpool_ternary...\n"); + printf(" dims_in = [32, 32]\n"); + printf(" dims_kernel = [2, 2]\n"); + printf(" ch_in/out = [40, 40]\n"); + //printf(" padding_y_top = [%d]\n", padding_y_top); + //printf(" padding_y_bottom = [%d]\n", padding_y_bottom); + //printf(" padding_x_left = [%d]\n", padding_x_left); + //printf(" padding_x_right = [%d]\n", padding_x_right); + //printf(" stride_x = [%d]\n", stride_x); + //printf(" stride_y = [%d]\n", stride_y); + } + test_0(); + #ifndef PROFILE + stop_cycle_counter(); + read_cycle_counter(num_cycles); + if (get_core_id() == 0) { + printf("===> TEST 0: Finished running xpulp_tnn_maxpool_ternary\n"); + printf("num_cycles = %d\n", num_cycles); + printf("MACs = 1638400\n"); + printf("MACs/cycle = %.4f\n", 1638400/num_cycles); + } + #endif + if (get_core_id() == 0) { + printf("Checking for mismatches..\n"); + n_mismatches = 0; + + for(int i=0; i < 2048; i++) { + if (outputs[i] != exp_outp_0[i]){ + printf("***Mismatch in test 0 at iteration %d: Expected: %x, got: %x\n", i, exp_outp_0[i], outputs[i]); + n_mismatches++; + } + } + } + mismatches_tot += n_mismatches; + + if (get_core_id() == 0) { + printf("Got %d mismatches in %d tests\n", mismatches_tot, 1); + } + return mismatches_tot; +} + + +void call_krnl_0(void) { + uint8_t * pInp; + uint8_t * pIm2ColBuffer; + int8_t * pBias = NULL; + uint8_t * pOut; + int8_t * pWeight; + uint32_t * pThr; + int32_t * pKappa, pLambda; + pInp = inp_l1; + + pOut = outp_l1; +#if KRAKEN_PTEST == 1 + if (pi_core_id() == 0) { + kraken_padframe_aon_pad_gpioa_cfg_chip2pad_set(24, 1); + } +#endif + xpulp_tnn_maxpool_ternary( + pInp, + pOut, + 32, + 32, + 40, + 16, + 16, + 2, + 2, + 0, + 0, + 0, + 0, + 2, + 2); + +#if KRAKEN_PTEST == 1 + if (pi_core_id() == 0) { + kraken_padframe_aon_pad_gpioa_cfg_chip2pad_set(24, 0); + } +#endif +} + +void test_0(void) { + uint32_t dma_channel = dory_dma_allocate(); + DMA_copy dma_tx = {0}; + // DMA transfer inputs from L2 to L1 + dma_tx.ext = pIn_0; + dma_tx.loc = inp_l1; + dma_tx.number_of_1d_copies = 1; + dma_tx.number_of_2d_copies = 1; + dma_tx.length_1d_copy = 8192; + dma_tx.stride_1d = 1; + dma_tx.stride_2d = 1; + dma_tx.dir = 1; + dma_tx.tid = dma_channel; + dory_dma_memcpy_async(&dma_tx); + call_krnl_0(); + // get outputs back with DMA + dma_tx.dir = 0; + dma_tx.ext = outputs; + dma_tx.loc = outp_l1; + dma_tx.length_1d_copy = 2048; + dory_dma_memcpy_async(&dma_tx); + dory_dma_free(&dma_tx); +} + + + + + + + + + + diff --git a/rt_nn_tests/xptnn_maxpool/xpulp_tnn_conv1d_ternary.h b/rt_nn_tests/xptnn_maxpool/xpulp_tnn_conv1d_ternary.h new file mode 100644 index 0000000..f1a08a6 --- /dev/null +++ b/rt_nn_tests/xptnn_maxpool/xpulp_tnn_conv1d_ternary.h @@ -0,0 +1,35 @@ +#ifndef __XPULP_NN_CONV1D_TERNARY_H +#define __XPULP_NN_CONV1D_TERNARY_H +#include +#include "pulp_nn_utils.h" + + + +// TODO: review argument order +void __attribute__((noinline)) xpulp_tnn_conv1d_ternary( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pWeight, + uint32_t *pThr, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, +#ifndef PROFILE + uint16_t dilation_x); +#else + uint16_t dilation_x, + uint32_t *im2col_cycles, + uint32_t *hotloop_prep_cycles, + uint32_t *hotloop_cycles, + uint32_t *threshold_cycles, + uint32_t *hotloop_leftover_cycles, + uint32_t *matmul4x2_leftover_cycles); +#endif +#endif diff --git a/rt_nn_tests/xptnn_maxpool/xpulp_tnn_conv1d_ternary_signed.h b/rt_nn_tests/xptnn_maxpool/xpulp_tnn_conv1d_ternary_signed.h new file mode 100644 index 0000000..0f8ba08 --- /dev/null +++ b/rt_nn_tests/xptnn_maxpool/xpulp_tnn_conv1d_ternary_signed.h @@ -0,0 +1,35 @@ +#ifndef __XPULP_NN_CONV1D_TERNARY_SIGNED_H +#define __XPULP_NN_CONV1D_TERNARY_SIGNED_H +#include +#include "pulp_nn_utils.h" + + + +// TODO: review argument order +void __attribute__((noinline)) xpulp_tnn_conv1d_ternary_signed( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pWeight, + uint32_t *pThr, + uint16_t dim_in_x, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, +#ifndef PROFILE + uint16_t dilation_x); +#else + uint16_t dilation_x, + uint32_t *im2col_cycles, + uint32_t *hotloop_prep_cycles, + uint32_t *hotloop_cycles, + uint32_t *threshold_cycles, + uint32_t *hotloop_leftover_cycles, + uint32_t *matmul4x2_leftover_cycles); +#endif +#endif diff --git a/rt_nn_tests/xptnn_maxpool/xpulp_tnn_conv_ternary.h b/rt_nn_tests/xptnn_maxpool/xpulp_tnn_conv_ternary.h new file mode 100644 index 0000000..f4a8759 --- /dev/null +++ b/rt_nn_tests/xptnn_maxpool/xpulp_tnn_conv_ternary.h @@ -0,0 +1,40 @@ +#ifndef __XPULP_NN_CONV_TERNARY_H +#define __XPULP_NN_CONV_TERNARY_H +#include +#include "pulp_nn_utils.h" + + + +// TODO: review argument order +void __attribute__((noinline)) xpulp_tnn_conv_ternary( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pWeight, + uint32_t *pThr, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, +#ifndef PROFILE + uint16_t stride_y); +#else + uint16_t stride_y, + uint32_t *im2col_cycles, + uint32_t *hotloop_prep_cycles, + uint32_t *hotloop_cycles, + uint32_t *threshold_cycles, + uint32_t *hotloop_leftover_cycles, + uint32_t *matmul4x2_leftover_cycles); +#endif +#endif diff --git a/rt_nn_tests/xptnn_maxpool/xpulp_tnn_conv_ternary_signed.h b/rt_nn_tests/xptnn_maxpool/xpulp_tnn_conv_ternary_signed.h new file mode 100644 index 0000000..d05c2ab --- /dev/null +++ b/rt_nn_tests/xptnn_maxpool/xpulp_tnn_conv_ternary_signed.h @@ -0,0 +1,40 @@ +#ifndef __XPULP_NN_CONV_TERNARY_SIGNED_H +#define __XPULP_NN_CONV_TERNARY_SIGNED_H +#include +#include "pulp_nn_utils.h" + + + +// TODO: review argument order +void __attribute__((noinline)) xpulp_tnn_conv_ternary_signed( + uint8_t *pIn, + uint8_t *pIm2ColBuffer, + int8_t *pBias, + uint8_t *pOut, + uint8_t *pWeight, + uint32_t *pThr, + uint16_t dim_in_x, + uint16_t dim_in_y, + uint16_t ch_in, + uint16_t dim_out_x, + uint16_t dim_out_y, + uint16_t ch_out, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_y_top, + uint16_t padding_y_bottom, + uint16_t padding_x_left, + uint16_t padding_x_right, + uint16_t stride_x, +#ifndef PROFILE + uint16_t stride_y); +#else + uint16_t stride_y, + uint32_t *im2col_cycles, + uint32_t *hotloop_prep_cycles, + uint32_t *hotloop_cycles, + uint32_t *threshold_cycles, + uint32_t *hotloop_leftover_cycles, + uint32_t *matmul4x2_leftover_cycles); +#endif +#endif diff --git a/rt_nn_tests/xptnn_maxpool/xpulp_tnn_linear_ternary_i32.h b/rt_nn_tests/xptnn_maxpool/xpulp_tnn_linear_ternary_i32.h new file mode 100644 index 0000000..5c353d3 --- /dev/null +++ b/rt_nn_tests/xptnn_maxpool/xpulp_tnn_linear_ternary_i32.h @@ -0,0 +1,12 @@ +#ifndef __XPULP_TNN_LINEAR_TERNARY_I32_H +#define __XPULP_TNN_LINEAR_TERNARY_I32_H + +void __attribute__((noinline)) xpulp_tnn_linear_ternary_i32( + uint8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + uint16_t dim_vec, + uint16_t num_o_neurons); + +#endif \ No newline at end of file diff --git a/rt_nn_tests/xptnn_maxpool/xpulp_tnn_linear_ternary_i32_signed.h b/rt_nn_tests/xptnn_maxpool/xpulp_tnn_linear_ternary_i32_signed.h new file mode 100644 index 0000000..218c5c4 --- /dev/null +++ b/rt_nn_tests/xptnn_maxpool/xpulp_tnn_linear_ternary_i32_signed.h @@ -0,0 +1,12 @@ +#ifndef __XPULP_TNN_LINEAR_TERNARY_I32_SIGNED_H +#define __XPULP_TNN_LINEAR_TERNARY_I32_SIGNED_H + +void __attribute__((noinline)) xpulp_tnn_linear_ternary_i32_signed( + int8_t *pIn, + int8_t *pBias, + int8_t *pOut, + int8_t *pWeight, + uint16_t dim_vec, + uint16_t num_o_neurons); + +#endif \ No newline at end of file diff --git a/rt_nn_tests/xptnn_maxpool/xpulp_tnn_matmul_ternary.h b/rt_nn_tests/xptnn_maxpool/xpulp_tnn_matmul_ternary.h new file mode 100644 index 0000000..914daee --- /dev/null +++ b/rt_nn_tests/xptnn_maxpool/xpulp_tnn_matmul_ternary.h @@ -0,0 +1,113 @@ +#ifndef __XPULP_TNN_MATMUL_TERNARY_H +#define __XPULP_TNN_MATMUL_TERNARY_H + +#include "pulp_nn_utils.h" + +uint8_t * __attribute__((noinline)) xpulp_tnn_matmul_ternary( + uint8_t *pIn, + int8_t *pBias, + uint32_t *pThr, + uint8_t *pOut, + uint8_t *pOut2, + uint8_t *pWeight, + uint16_t num_col_im2col, + uint16_t ch_out, +#ifndef PROFILE + uint32_t *thrc_res1, + uint32_t *thrc_res2); +#else + uint32_t *thrc_res1, + uint32_t *thrc_res2, + uint32_t *hotloop_prep_cycles, + uint32_t *hotloop_cycles, + uint32_t *threshold_cycles, + uint32_t *hotloop_leftover_cycles); +#endif + +inline void __attribute__((aligned(4))) hotloop_4x2( + int *sum, int *sum2, int *sum3, int *sum4, int *sum5, int *sum6, int *sum7, int *sum8, + uint32_t *ptrA, uint32_t *ptrA2, uint32_t *ptrA3, uint32_t *ptrA4, + uint32_t *ptrB, uint32_t *ptrB2, int num_col_im2col_words +){ + for (int j=0; j + * Nazareno Bruschi + * Angelo Garofalo + * + * Copyright (C) 2018-2020 University of Bologna + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "pmsis.h" +#include "pulp_nn_utils.h" + + +void __attribute__ ((noinline)) xpulp_tnn_maxpool_ternary( + int8_t * pIn, + int8_t * pOut, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + // ch_im_in: UNCOMPRESSED number of input/output channels + uint16_t ch_im_in, + uint16_t dim_im_out_x, + uint16_t dim_im_out_y, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_t, + uint16_t padding_b, + uint16_t padding_l, + uint16_t padding_r, + uint16_t stride_x, + uint16_t stride_y) + +{ + #ifdef FC_TEST + int n_cores = 1; + int core_id = 0; + # else + int n_cores = NUM_CORES; + int core_id = pi_core_id(); + if (dim_im_in_y < NUM_CORES) + { + n_cores = dim_im_in_y; + } + #endif + int Log2Core = log2(n_cores); + // number of bytes: 5 els per byte + int ch_im_in_r = ch_im_in/5; + + + int chunck = (dim_im_in_y >> Log2Core) + ((dim_im_in_y & (NUM_CORES-1))!=0); + + int start = min(chunck * core_id, dim_im_in_y); + int stop = min(start + chunck, dim_im_in_y); + int i_x, i_y; + + // logic is the same as for i2, except we use the ternary version of xpulp_nn_compare_and_replace... + for (i_y = start; i_y < stop; i_y++) + { + for (i_x = 0; i_x < dim_im_out_x; i_x++) + { + /* for each output pixel */ + int8_t *target = pIn + (i_y * dim_im_in_x + i_x) * ch_im_in_r; + uint8_t *win_start; + uint8_t *win_stop; + if (i_x * stride_x - padding_l < 0) + { + win_start = target; + } + else + { + win_start = pIn + (i_y * dim_im_in_x + i_x * stride_x - padding_l) * ch_im_in_r; + } + + if (i_x * stride_x - padding_l + dim_kernel_x >= dim_im_in_x) + { + win_stop = pIn + (i_y * dim_im_in_x + dim_im_in_x) * ch_im_in_r; + } + else + { + win_stop = pIn + (i_y * dim_im_in_x + i_x * stride_x - padding_l + dim_kernel_x) * ch_im_in_r; + } + + /* first step is to copy over initial data */ + for (int i = 0; i< ch_im_in_r; i++) target[i] = win_start[i]; + + /* start the max operation from the second part */ + win_start += ch_im_in_r; + for (; win_start < win_stop; win_start += ch_im_in_r) + { + xpulp_tnn_compare_and_replace_if_larger_ternary(target, win_start, ch_im_in_r); + } + } + } +#ifndef FC_TEST + pi_cl_team_barrier(0); +#endif + if (dim_im_out_y < NUM_CORES) + { + n_cores = dim_im_out_y; + } + Log2Core = log2(n_cores); + int chunck2 = (dim_im_out_y >> Log2Core) + ((dim_im_out_y & (NUM_CORES-1))!=0); + int start2 = chunck2 * core_id; + int stop2 = min(start2 + chunck2, dim_im_out_y); + + /* then does the pooling along y axis */ + for (i_y = start2; i_y < stop2; i_y++) + { + /* for each output row */ + int8_t *target = pOut + i_y * dim_im_out_x * ch_im_in_r; + int8_t *row_start; + int8_t *row_end; + /* setting the starting row */ + if (i_y * stride_y - padding_t < 0) + { + row_start = pIn; + } + else + { + row_start = pIn + (i_y * stride_y - padding_t) * dim_im_in_x * ch_im_in_r; + } + /* setting the stopping row */ + if (i_y * stride_y - padding_t + dim_kernel_y >= dim_im_in_y) + { + row_end = pIn + dim_im_in_y * dim_im_in_x * ch_im_in_r; + } + else + { + row_end = pIn + (i_y * stride_y - padding_t + dim_kernel_y) * dim_im_in_x * ch_im_in_r; + } + + /* copy over the first row */ + for (int i = 0; i< dim_im_out_x * ch_im_in_r; i++) + { + target[i] = (int8_t) row_start[i]; + } + /* move over to next row */ + row_start += ch_im_in_r * dim_im_in_x; + + for (; row_start < row_end; row_start += dim_im_in_x * ch_im_in_r) + { + xpulp_tnn_compare_and_replace_if_larger_ternary(target, row_start, dim_im_out_x * ch_im_in_r); + } + } + #ifndef FC_TEST + pi_cl_team_barrier(0); + #endif +} diff --git a/rt_nn_tests/xptnn_maxpool/xpulp_tnn_maxpool_ternary.h b/rt_nn_tests/xptnn_maxpool/xpulp_tnn_maxpool_ternary.h new file mode 100644 index 0000000..2b65fca --- /dev/null +++ b/rt_nn_tests/xptnn_maxpool/xpulp_tnn_maxpool_ternary.h @@ -0,0 +1,20 @@ +#ifndef __XPULP_TNN_MAXPOOL_TERNARY_H +#define __XPULP_TNN_MAXPOOL_TERNARY_H +void __attribute__ ((noinline)) xpulp_tnn_maxpool_ternary( + int8_t * pIn, + int8_t * pOut, + uint16_t dim_im_in_x, + uint16_t dim_im_in_y, + // ch_im_in: UNCOMPRESSED number of input/output channels + uint16_t ch_im_in, + uint16_t dim_im_out_x, + uint16_t dim_im_out_y, + uint16_t dim_kernel_x, + uint16_t dim_kernel_y, + uint16_t padding_t, + uint16_t padding_b, + uint16_t padding_l, + uint16_t padding_r, + uint16_t stride_x, + uint16_t stride_y); +#endif From 35005773709f592c84df7669ba21728997bf4ad0 Mon Sep 17 00:00:00 2001 From: Georg Rutishauser Date: Thu, 27 Jun 2024 17:52:21 +0200 Subject: [PATCH 48/71] add required utility functions to baremetal NN tests --- rt_nn_tests/xpnn_conv/pulp_nn_utils.h | 73 +++++++++++++++++++++ rt_nn_tests/xpnn_maxpool_2b/pulp_nn_utils.h | 73 +++++++++++++++++++++ rt_nn_tests/xpnnv2_conv/pulp_nn_utils.h | 73 +++++++++++++++++++++ rt_nn_tests/xptnn_conv/pulp_nn_utils.h | 50 ++++++++++++++ rt_nn_tests/xptnn_linear/pulp_nn_utils.h | 50 ++++++++++++++ rt_nn_tests/xptnn_maxpool/pulp_nn_utils.h | 49 ++++++-------- 6 files changed, 339 insertions(+), 29 deletions(-) diff --git a/rt_nn_tests/xpnn_conv/pulp_nn_utils.h b/rt_nn_tests/xpnn_conv/pulp_nn_utils.h index 86107a0..44d2251 100644 --- a/rt_nn_tests/xpnn_conv/pulp_nn_utils.h +++ b/rt_nn_tests/xpnn_conv/pulp_nn_utils.h @@ -107,6 +107,7 @@ typedef signed char v4s __attribute__((vector_size (4))); #define maxs8(a, b) __builtin_pulp_max8(a, b) #define max16(a, b) __builtin_pulp_maxu16(a, b) #define maxs16(a, b) __builtin_pulp_max16(a, b) +#define maxs20(a, b) __builtin_pulp_max20(a, b) #define max32(a,b) __builtin_pulp_maxusi(a,b) #define maxs32(a,b) __builtin_pulp_maxsi(a,b) #define min32(a,b) __builtin_pulp_minusi(a,b) @@ -117,6 +118,7 @@ typedef signed char v4s __attribute__((vector_size (4))); #define mins8(a, b) __builtin_pulp_min8(a, b) #define min16(a, b) __builtin_pulp_minu16(a, b) #define mins16(a, b) __builtin_pulp_min16(a, b) +#define mins20(a, b) __builtin_pulp_min20(a, b) #define avg4(a,b) __builtin_pulp_avgu4(a,b) #define avg8(a,b) __builtin_pulp_avgu8(a,b) #define avg16(a,b) __builtin_pulp_avgu16(a,b) @@ -1711,6 +1713,29 @@ static void __attribute__((noinline)) xpulp_nn_zero_mem_u2(uint8_t * pBuffer, un } +static void __attribute__((noinline)) xpulp_tnn_zero_mem_ternary(uint8_t * pBuffer, unsigned int size, unsigned int uns) +{ + uint8_t pad_val = 0xd9; + uint32_t pad_vec = 0xd9d9d9d9; + if (uns) { + // if we are using an unsigned kernel, we need to pad with -1 because the hardware will add a +1 to ALL values! + pad_val = 0xff; + pad_vec = 0xffffffff; + } + int lfover = size &0xf; + for (int i=0; i<(size>>4); i++) + { + *((v4u *)pBuffer) = (v4u)pad_vec; + MemoryFence(); + pBuffer+=4; + } + while(lfover) + { + *pBuffer++=pad_val; + lfover-=4; + } +} + static void __attribute__((noinline)) xpulp_nn_compare_and_replace_if_larger_u4(uint8_t * base, uint8_t * target, uint16_t length) @@ -1948,6 +1973,54 @@ static void __attribute__((noinline)) xpulp_nn_compare_and_replace_if_larger_i2( } } +static void __attribute__((noinline)) xpulp_tnn_compare_and_replace_if_larger_ternary(int8_t * base, + int8_t * target, + uint16_t length) +{ + uint8_t mask2 = 0x0c; + uint8_t n_mask2 = ~ mask2; + uint8_t mask4 = 0x30; + uint8_t n_mask4 = ~ mask4; + uint8_t mask6 = 0xc0; + uint8_t n_mask6 = ~ mask6; + uint8_t off2 = 2; + uint8_t off4 = 4; + uint8_t off6 = 6; + + uint8_t *pIn = (uint8_t *) base; + uint8_t *pCom = (uint8_t *) target; + uint8_t *out; + + int cnt = length >> 2; + uint32_t result; + + while(cnt > 0u) + { + uint32_t in1 = *((uint32_t *)pIn); + uint32_t in2 = *((int32_t *)pCom); + result = maxs20(in1, in2); + *((uint32_t *)pIn) = result; + + pIn+=4; + pCom+=4; + cnt--; + } + + int left = length & 0x3; + if (left>0u) + { + // do the vector max on the whole word - we won't use the leftover bytes + uint32_t in1 = *((uint32_t *)pIn); + uint32_t in2 = *((int32_t *)pCom); + result = maxs20(in1, in2); + + // ...and copy back the relevant bytes of the result to pIn + for (int i=0; i> (8*i)); + + } +} + static void __attribute__((noinline)) xpulp_nn_avg_and_replace_u2(uint8_t * base, uint8_t * target, uint16_t length) diff --git a/rt_nn_tests/xpnn_maxpool_2b/pulp_nn_utils.h b/rt_nn_tests/xpnn_maxpool_2b/pulp_nn_utils.h index 86107a0..44d2251 100644 --- a/rt_nn_tests/xpnn_maxpool_2b/pulp_nn_utils.h +++ b/rt_nn_tests/xpnn_maxpool_2b/pulp_nn_utils.h @@ -107,6 +107,7 @@ typedef signed char v4s __attribute__((vector_size (4))); #define maxs8(a, b) __builtin_pulp_max8(a, b) #define max16(a, b) __builtin_pulp_maxu16(a, b) #define maxs16(a, b) __builtin_pulp_max16(a, b) +#define maxs20(a, b) __builtin_pulp_max20(a, b) #define max32(a,b) __builtin_pulp_maxusi(a,b) #define maxs32(a,b) __builtin_pulp_maxsi(a,b) #define min32(a,b) __builtin_pulp_minusi(a,b) @@ -117,6 +118,7 @@ typedef signed char v4s __attribute__((vector_size (4))); #define mins8(a, b) __builtin_pulp_min8(a, b) #define min16(a, b) __builtin_pulp_minu16(a, b) #define mins16(a, b) __builtin_pulp_min16(a, b) +#define mins20(a, b) __builtin_pulp_min20(a, b) #define avg4(a,b) __builtin_pulp_avgu4(a,b) #define avg8(a,b) __builtin_pulp_avgu8(a,b) #define avg16(a,b) __builtin_pulp_avgu16(a,b) @@ -1711,6 +1713,29 @@ static void __attribute__((noinline)) xpulp_nn_zero_mem_u2(uint8_t * pBuffer, un } +static void __attribute__((noinline)) xpulp_tnn_zero_mem_ternary(uint8_t * pBuffer, unsigned int size, unsigned int uns) +{ + uint8_t pad_val = 0xd9; + uint32_t pad_vec = 0xd9d9d9d9; + if (uns) { + // if we are using an unsigned kernel, we need to pad with -1 because the hardware will add a +1 to ALL values! + pad_val = 0xff; + pad_vec = 0xffffffff; + } + int lfover = size &0xf; + for (int i=0; i<(size>>4); i++) + { + *((v4u *)pBuffer) = (v4u)pad_vec; + MemoryFence(); + pBuffer+=4; + } + while(lfover) + { + *pBuffer++=pad_val; + lfover-=4; + } +} + static void __attribute__((noinline)) xpulp_nn_compare_and_replace_if_larger_u4(uint8_t * base, uint8_t * target, uint16_t length) @@ -1948,6 +1973,54 @@ static void __attribute__((noinline)) xpulp_nn_compare_and_replace_if_larger_i2( } } +static void __attribute__((noinline)) xpulp_tnn_compare_and_replace_if_larger_ternary(int8_t * base, + int8_t * target, + uint16_t length) +{ + uint8_t mask2 = 0x0c; + uint8_t n_mask2 = ~ mask2; + uint8_t mask4 = 0x30; + uint8_t n_mask4 = ~ mask4; + uint8_t mask6 = 0xc0; + uint8_t n_mask6 = ~ mask6; + uint8_t off2 = 2; + uint8_t off4 = 4; + uint8_t off6 = 6; + + uint8_t *pIn = (uint8_t *) base; + uint8_t *pCom = (uint8_t *) target; + uint8_t *out; + + int cnt = length >> 2; + uint32_t result; + + while(cnt > 0u) + { + uint32_t in1 = *((uint32_t *)pIn); + uint32_t in2 = *((int32_t *)pCom); + result = maxs20(in1, in2); + *((uint32_t *)pIn) = result; + + pIn+=4; + pCom+=4; + cnt--; + } + + int left = length & 0x3; + if (left>0u) + { + // do the vector max on the whole word - we won't use the leftover bytes + uint32_t in1 = *((uint32_t *)pIn); + uint32_t in2 = *((int32_t *)pCom); + result = maxs20(in1, in2); + + // ...and copy back the relevant bytes of the result to pIn + for (int i=0; i> (8*i)); + + } +} + static void __attribute__((noinline)) xpulp_nn_avg_and_replace_u2(uint8_t * base, uint8_t * target, uint16_t length) diff --git a/rt_nn_tests/xpnnv2_conv/pulp_nn_utils.h b/rt_nn_tests/xpnnv2_conv/pulp_nn_utils.h index 86107a0..44d2251 100644 --- a/rt_nn_tests/xpnnv2_conv/pulp_nn_utils.h +++ b/rt_nn_tests/xpnnv2_conv/pulp_nn_utils.h @@ -107,6 +107,7 @@ typedef signed char v4s __attribute__((vector_size (4))); #define maxs8(a, b) __builtin_pulp_max8(a, b) #define max16(a, b) __builtin_pulp_maxu16(a, b) #define maxs16(a, b) __builtin_pulp_max16(a, b) +#define maxs20(a, b) __builtin_pulp_max20(a, b) #define max32(a,b) __builtin_pulp_maxusi(a,b) #define maxs32(a,b) __builtin_pulp_maxsi(a,b) #define min32(a,b) __builtin_pulp_minusi(a,b) @@ -117,6 +118,7 @@ typedef signed char v4s __attribute__((vector_size (4))); #define mins8(a, b) __builtin_pulp_min8(a, b) #define min16(a, b) __builtin_pulp_minu16(a, b) #define mins16(a, b) __builtin_pulp_min16(a, b) +#define mins20(a, b) __builtin_pulp_min20(a, b) #define avg4(a,b) __builtin_pulp_avgu4(a,b) #define avg8(a,b) __builtin_pulp_avgu8(a,b) #define avg16(a,b) __builtin_pulp_avgu16(a,b) @@ -1711,6 +1713,29 @@ static void __attribute__((noinline)) xpulp_nn_zero_mem_u2(uint8_t * pBuffer, un } +static void __attribute__((noinline)) xpulp_tnn_zero_mem_ternary(uint8_t * pBuffer, unsigned int size, unsigned int uns) +{ + uint8_t pad_val = 0xd9; + uint32_t pad_vec = 0xd9d9d9d9; + if (uns) { + // if we are using an unsigned kernel, we need to pad with -1 because the hardware will add a +1 to ALL values! + pad_val = 0xff; + pad_vec = 0xffffffff; + } + int lfover = size &0xf; + for (int i=0; i<(size>>4); i++) + { + *((v4u *)pBuffer) = (v4u)pad_vec; + MemoryFence(); + pBuffer+=4; + } + while(lfover) + { + *pBuffer++=pad_val; + lfover-=4; + } +} + static void __attribute__((noinline)) xpulp_nn_compare_and_replace_if_larger_u4(uint8_t * base, uint8_t * target, uint16_t length) @@ -1948,6 +1973,54 @@ static void __attribute__((noinline)) xpulp_nn_compare_and_replace_if_larger_i2( } } +static void __attribute__((noinline)) xpulp_tnn_compare_and_replace_if_larger_ternary(int8_t * base, + int8_t * target, + uint16_t length) +{ + uint8_t mask2 = 0x0c; + uint8_t n_mask2 = ~ mask2; + uint8_t mask4 = 0x30; + uint8_t n_mask4 = ~ mask4; + uint8_t mask6 = 0xc0; + uint8_t n_mask6 = ~ mask6; + uint8_t off2 = 2; + uint8_t off4 = 4; + uint8_t off6 = 6; + + uint8_t *pIn = (uint8_t *) base; + uint8_t *pCom = (uint8_t *) target; + uint8_t *out; + + int cnt = length >> 2; + uint32_t result; + + while(cnt > 0u) + { + uint32_t in1 = *((uint32_t *)pIn); + uint32_t in2 = *((int32_t *)pCom); + result = maxs20(in1, in2); + *((uint32_t *)pIn) = result; + + pIn+=4; + pCom+=4; + cnt--; + } + + int left = length & 0x3; + if (left>0u) + { + // do the vector max on the whole word - we won't use the leftover bytes + uint32_t in1 = *((uint32_t *)pIn); + uint32_t in2 = *((int32_t *)pCom); + result = maxs20(in1, in2); + + // ...and copy back the relevant bytes of the result to pIn + for (int i=0; i> (8*i)); + + } +} + static void __attribute__((noinline)) xpulp_nn_avg_and_replace_u2(uint8_t * base, uint8_t * target, uint16_t length) diff --git a/rt_nn_tests/xptnn_conv/pulp_nn_utils.h b/rt_nn_tests/xptnn_conv/pulp_nn_utils.h index cb1f610..44d2251 100644 --- a/rt_nn_tests/xptnn_conv/pulp_nn_utils.h +++ b/rt_nn_tests/xptnn_conv/pulp_nn_utils.h @@ -107,6 +107,7 @@ typedef signed char v4s __attribute__((vector_size (4))); #define maxs8(a, b) __builtin_pulp_max8(a, b) #define max16(a, b) __builtin_pulp_maxu16(a, b) #define maxs16(a, b) __builtin_pulp_max16(a, b) +#define maxs20(a, b) __builtin_pulp_max20(a, b) #define max32(a,b) __builtin_pulp_maxusi(a,b) #define maxs32(a,b) __builtin_pulp_maxsi(a,b) #define min32(a,b) __builtin_pulp_minusi(a,b) @@ -117,6 +118,7 @@ typedef signed char v4s __attribute__((vector_size (4))); #define mins8(a, b) __builtin_pulp_min8(a, b) #define min16(a, b) __builtin_pulp_minu16(a, b) #define mins16(a, b) __builtin_pulp_min16(a, b) +#define mins20(a, b) __builtin_pulp_min20(a, b) #define avg4(a,b) __builtin_pulp_avgu4(a,b) #define avg8(a,b) __builtin_pulp_avgu8(a,b) #define avg16(a,b) __builtin_pulp_avgu16(a,b) @@ -1971,6 +1973,54 @@ static void __attribute__((noinline)) xpulp_nn_compare_and_replace_if_larger_i2( } } +static void __attribute__((noinline)) xpulp_tnn_compare_and_replace_if_larger_ternary(int8_t * base, + int8_t * target, + uint16_t length) +{ + uint8_t mask2 = 0x0c; + uint8_t n_mask2 = ~ mask2; + uint8_t mask4 = 0x30; + uint8_t n_mask4 = ~ mask4; + uint8_t mask6 = 0xc0; + uint8_t n_mask6 = ~ mask6; + uint8_t off2 = 2; + uint8_t off4 = 4; + uint8_t off6 = 6; + + uint8_t *pIn = (uint8_t *) base; + uint8_t *pCom = (uint8_t *) target; + uint8_t *out; + + int cnt = length >> 2; + uint32_t result; + + while(cnt > 0u) + { + uint32_t in1 = *((uint32_t *)pIn); + uint32_t in2 = *((int32_t *)pCom); + result = maxs20(in1, in2); + *((uint32_t *)pIn) = result; + + pIn+=4; + pCom+=4; + cnt--; + } + + int left = length & 0x3; + if (left>0u) + { + // do the vector max on the whole word - we won't use the leftover bytes + uint32_t in1 = *((uint32_t *)pIn); + uint32_t in2 = *((int32_t *)pCom); + result = maxs20(in1, in2); + + // ...and copy back the relevant bytes of the result to pIn + for (int i=0; i> (8*i)); + + } +} + static void __attribute__((noinline)) xpulp_nn_avg_and_replace_u2(uint8_t * base, uint8_t * target, uint16_t length) diff --git a/rt_nn_tests/xptnn_linear/pulp_nn_utils.h b/rt_nn_tests/xptnn_linear/pulp_nn_utils.h index cb1f610..44d2251 100644 --- a/rt_nn_tests/xptnn_linear/pulp_nn_utils.h +++ b/rt_nn_tests/xptnn_linear/pulp_nn_utils.h @@ -107,6 +107,7 @@ typedef signed char v4s __attribute__((vector_size (4))); #define maxs8(a, b) __builtin_pulp_max8(a, b) #define max16(a, b) __builtin_pulp_maxu16(a, b) #define maxs16(a, b) __builtin_pulp_max16(a, b) +#define maxs20(a, b) __builtin_pulp_max20(a, b) #define max32(a,b) __builtin_pulp_maxusi(a,b) #define maxs32(a,b) __builtin_pulp_maxsi(a,b) #define min32(a,b) __builtin_pulp_minusi(a,b) @@ -117,6 +118,7 @@ typedef signed char v4s __attribute__((vector_size (4))); #define mins8(a, b) __builtin_pulp_min8(a, b) #define min16(a, b) __builtin_pulp_minu16(a, b) #define mins16(a, b) __builtin_pulp_min16(a, b) +#define mins20(a, b) __builtin_pulp_min20(a, b) #define avg4(a,b) __builtin_pulp_avgu4(a,b) #define avg8(a,b) __builtin_pulp_avgu8(a,b) #define avg16(a,b) __builtin_pulp_avgu16(a,b) @@ -1971,6 +1973,54 @@ static void __attribute__((noinline)) xpulp_nn_compare_and_replace_if_larger_i2( } } +static void __attribute__((noinline)) xpulp_tnn_compare_and_replace_if_larger_ternary(int8_t * base, + int8_t * target, + uint16_t length) +{ + uint8_t mask2 = 0x0c; + uint8_t n_mask2 = ~ mask2; + uint8_t mask4 = 0x30; + uint8_t n_mask4 = ~ mask4; + uint8_t mask6 = 0xc0; + uint8_t n_mask6 = ~ mask6; + uint8_t off2 = 2; + uint8_t off4 = 4; + uint8_t off6 = 6; + + uint8_t *pIn = (uint8_t *) base; + uint8_t *pCom = (uint8_t *) target; + uint8_t *out; + + int cnt = length >> 2; + uint32_t result; + + while(cnt > 0u) + { + uint32_t in1 = *((uint32_t *)pIn); + uint32_t in2 = *((int32_t *)pCom); + result = maxs20(in1, in2); + *((uint32_t *)pIn) = result; + + pIn+=4; + pCom+=4; + cnt--; + } + + int left = length & 0x3; + if (left>0u) + { + // do the vector max on the whole word - we won't use the leftover bytes + uint32_t in1 = *((uint32_t *)pIn); + uint32_t in2 = *((int32_t *)pCom); + result = maxs20(in1, in2); + + // ...and copy back the relevant bytes of the result to pIn + for (int i=0; i> (8*i)); + + } +} + static void __attribute__((noinline)) xpulp_nn_avg_and_replace_u2(uint8_t * base, uint8_t * target, uint16_t length) diff --git a/rt_nn_tests/xptnn_maxpool/pulp_nn_utils.h b/rt_nn_tests/xptnn_maxpool/pulp_nn_utils.h index 17661d8..44d2251 100644 --- a/rt_nn_tests/xptnn_maxpool/pulp_nn_utils.h +++ b/rt_nn_tests/xptnn_maxpool/pulp_nn_utils.h @@ -1977,30 +1977,29 @@ static void __attribute__((noinline)) xpulp_tnn_compare_and_replace_if_larger_te int8_t * target, uint16_t length) { - int8_t mask2 = 0x0c; - int8_t n_mask2 = ~ mask2; - int8_t mask4 = 0x30; - int8_t n_mask4 = ~ mask4; - int8_t mask6 = 0xc0; - int8_t n_mask6 = ~ mask6; - int8_t off2 = 2; - int8_t off4 = 4; - int8_t off6 = 6; - - int8_t *pIn = base; - int8_t *pCom = target; - int8_t *out; + uint8_t mask2 = 0x0c; + uint8_t n_mask2 = ~ mask2; + uint8_t mask4 = 0x30; + uint8_t n_mask4 = ~ mask4; + uint8_t mask6 = 0xc0; + uint8_t n_mask6 = ~ mask6; + uint8_t off2 = 2; + uint8_t off4 = 4; + uint8_t off6 = 6; + + uint8_t *pIn = (uint8_t *) base; + uint8_t *pCom = (uint8_t *) target; + uint8_t *out; int cnt = length >> 2; - int32_t result; + uint32_t result; while(cnt > 0u) { uint32_t in1 = *((uint32_t *)pIn); uint32_t in2 = *((int32_t *)pCom); - //CompressedMax(result, in1, in2); result = maxs20(in1, in2); - *((int32_t *)pIn) = result; + *((uint32_t *)pIn) = result; pIn+=4; pCom+=4; @@ -2010,22 +2009,14 @@ static void __attribute__((noinline)) xpulp_tnn_compare_and_replace_if_larger_te int left = length & 0x3; if (left>0u) { - uint32_t in1_padded = 0, in2_padded = 0; - // we take the <4 leftover bytes of each input and copy them into a 32-bit word - // TODO: just copy the whole word - for (int i=0; i> (8*i)); - + *((uint8_t*)(pIn + i)) = (uint8_t) (result >> (8*i)); } } From 66f9b1d821e6e63ed01193385cfff3347cdb6994 Mon Sep 17 00:00:00 2001 From: Georg Rutishauser Date: Thu, 27 Jun 2024 17:53:13 +0200 Subject: [PATCH 49/71] add a first (almost trivial) iDMA test --- idma-tests.yaml | 4 + idma_tests/idma_simple/Makefile | 22 +++++ idma_tests/idma_simple/dma_wave.do | 97 +++++++++++++++++++++ idma_tests/idma_simple/simple_tx.c | 133 +++++++++++++++++++++++++++++ 4 files changed, 256 insertions(+) create mode 100644 idma-tests.yaml create mode 100755 idma_tests/idma_simple/Makefile create mode 100644 idma_tests/idma_simple/dma_wave.do create mode 100644 idma_tests/idma_simple/simple_tx.c diff --git a/idma-tests.yaml b/idma-tests.yaml new file mode 100644 index 0000000..0da40e7 --- /dev/null +++ b/idma-tests.yaml @@ -0,0 +1,4 @@ +idma_tests: + idma_simple: + path: ./idma_tests/idma_simple + command: make clean all run diff --git a/idma_tests/idma_simple/Makefile b/idma_tests/idma_simple/Makefile new file mode 100755 index 0000000..15ad295 --- /dev/null +++ b/idma_tests/idma_simple/Makefile @@ -0,0 +1,22 @@ +PULP_APP = test + +TEST_SRCS ?= simple_tx.c +PULP_APP_SRCS = $(TEST_SRCS) +PULP_APP_FC_SRCS = $(TEST_FC_SRCS) +ifdef TEST_FC_SRCS +pulpFc=1 +endif + +space := +space += + +#BUILD_DIR = $(subst $(space),_,$(CURDIR)/build/$(TEST_SRCS)) + +ifdef VERBOSE +PULP_CFLAGS += -DVERBOSE +endif + +PULP_CFLAGS += -O3 +stackSize = 4096 + +include $(PULP_SDK_HOME)/install/rules/pulp.mk diff --git a/idma_tests/idma_simple/dma_wave.do b/idma_tests/idma_simple/dma_wave.do new file mode 100644 index 0000000..abac7ca --- /dev/null +++ b/idma_tests/idma_simple/dma_wave.do @@ -0,0 +1,97 @@ +onerror {resume} +quietly WaveActivateNextPane {} 0 +add wave -noupdate -group {iDMA Wrap} /pulp_cluster_tb/cluster_i/genblk2/dmac_wrap_i/clk_i +add wave -noupdate -group {iDMA Wrap} /pulp_cluster_tb/cluster_i/genblk2/dmac_wrap_i/rst_ni +add wave -noupdate -group {iDMA Wrap} /pulp_cluster_tb/cluster_i/genblk2/dmac_wrap_i/test_mode_i +add wave -noupdate -group {iDMA Wrap} /pulp_cluster_tb/cluster_i/genblk2/dmac_wrap_i/ext_master_req_o +add wave -noupdate -group {iDMA Wrap} /pulp_cluster_tb/cluster_i/genblk2/dmac_wrap_i/ext_master_resp_i +add wave -noupdate -group {iDMA Wrap} /pulp_cluster_tb/cluster_i/genblk2/dmac_wrap_i/term_event_o +add wave -noupdate -group {iDMA Wrap} /pulp_cluster_tb/cluster_i/genblk2/dmac_wrap_i/term_irq_o +add wave -noupdate -group {iDMA Wrap} /pulp_cluster_tb/cluster_i/genblk2/dmac_wrap_i/term_event_pe_o +add wave -noupdate -group {iDMA Wrap} /pulp_cluster_tb/cluster_i/genblk2/dmac_wrap_i/term_irq_pe_o +add wave -noupdate -group {iDMA Wrap} /pulp_cluster_tb/cluster_i/genblk2/dmac_wrap_i/busy_o +add wave -noupdate -group {iDMA Wrap} /pulp_cluster_tb/cluster_i/genblk2/dmac_wrap_i/config_wdata +add wave -noupdate -group {iDMA Wrap} /pulp_cluster_tb/cluster_i/genblk2/dmac_wrap_i/config_add +add wave -noupdate -group {iDMA Wrap} /pulp_cluster_tb/cluster_i/genblk2/dmac_wrap_i/config_req +add wave -noupdate -group {iDMA Wrap} /pulp_cluster_tb/cluster_i/genblk2/dmac_wrap_i/config_wen +add wave -noupdate -group {iDMA Wrap} /pulp_cluster_tb/cluster_i/genblk2/dmac_wrap_i/config_be +add wave -noupdate -group {iDMA Wrap} /pulp_cluster_tb/cluster_i/genblk2/dmac_wrap_i/config_id +add wave -noupdate -group {iDMA Wrap} /pulp_cluster_tb/cluster_i/genblk2/dmac_wrap_i/config_gnt +add wave -noupdate -group {iDMA Wrap} /pulp_cluster_tb/cluster_i/genblk2/dmac_wrap_i/config_r_rdata +add wave -noupdate -group {iDMA Wrap} /pulp_cluster_tb/cluster_i/genblk2/dmac_wrap_i/config_r_valid +add wave -noupdate -group {iDMA Wrap} /pulp_cluster_tb/cluster_i/genblk2/dmac_wrap_i/config_r_opc +add wave -noupdate -group {iDMA Wrap} /pulp_cluster_tb/cluster_i/genblk2/dmac_wrap_i/config_r_id +add wave -noupdate -group {iDMA Wrap} -expand -subitemconfig {{/pulp_cluster_tb/cluster_i/genblk2/dmac_wrap_i/obi_read_req_from_dma[0]} -expand} /pulp_cluster_tb/cluster_i/genblk2/dmac_wrap_i/obi_read_req_from_dma +add wave -noupdate -group {iDMA Wrap} /pulp_cluster_tb/cluster_i/genblk2/dmac_wrap_i/obi_reorg_req +add wave -noupdate -group {iDMA Wrap} /pulp_cluster_tb/cluster_i/genblk2/dmac_wrap_i/obi_write_req +add wave -noupdate -group {iDMA Wrap} -expand -subitemconfig {{/pulp_cluster_tb/cluster_i/genblk2/dmac_wrap_i/obi_read_req_muxed[0]} -expand} /pulp_cluster_tb/cluster_i/genblk2/dmac_wrap_i/obi_read_req_muxed +add wave -noupdate -group {iDMA Wrap} /pulp_cluster_tb/cluster_i/genblk2/dmac_wrap_i/obi_read_rsp_to_dma +add wave -noupdate -group {iDMA Wrap} /pulp_cluster_tb/cluster_i/genblk2/dmac_wrap_i/obi_reorg_rsp +add wave -noupdate -group {iDMA Wrap} /pulp_cluster_tb/cluster_i/genblk2/dmac_wrap_i/obi_write_rsp +add wave -noupdate -group {iDMA Wrap} -expand -subitemconfig {{/pulp_cluster_tb/cluster_i/genblk2/dmac_wrap_i/obi_read_rsp_to_mux[0]} -expand {/pulp_cluster_tb/cluster_i/genblk2/dmac_wrap_i/obi_read_rsp_to_mux[0].r} -expand} /pulp_cluster_tb/cluster_i/genblk2/dmac_wrap_i/obi_read_rsp_to_mux +add wave -noupdate -group {iDMA Wrap} /pulp_cluster_tb/cluster_i/genblk2/dmac_wrap_i/soc_req +add wave -noupdate -group {iDMA Wrap} /pulp_cluster_tb/cluster_i/genblk2/dmac_wrap_i/soc_rsp +add wave -noupdate -group {iDMA Wrap} /pulp_cluster_tb/cluster_i/genblk2/dmac_wrap_i/dma_req +add wave -noupdate -group {iDMA Wrap} /pulp_cluster_tb/cluster_i/genblk2/dmac_wrap_i/dma_rsp +add wave -noupdate -group {iDMA Wrap} /pulp_cluster_tb/cluster_i/genblk2/dmac_wrap_i/dma_regs_req +add wave -noupdate -group {iDMA Wrap} /pulp_cluster_tb/cluster_i/genblk2/dmac_wrap_i/dma_regs_rsp +add wave -noupdate -group {iDMA Wrap} /pulp_cluster_tb/cluster_i/genblk2/dmac_wrap_i/stream_idx +add wave -noupdate -group {iDMA Wrap} /pulp_cluster_tb/cluster_i/genblk2/dmac_wrap_i/twod_req +add wave -noupdate -group {iDMA Wrap} /pulp_cluster_tb/cluster_i/genblk2/dmac_wrap_i/twod_req_queue +add wave -noupdate -group {iDMA Wrap} /pulp_cluster_tb/cluster_i/genblk2/dmac_wrap_i/idma_req +add wave -noupdate -group {iDMA Wrap} /pulp_cluster_tb/cluster_i/genblk2/dmac_wrap_i/idma_rsp +add wave -noupdate -group {iDMA Wrap} /pulp_cluster_tb/cluster_i/genblk2/dmac_wrap_i/one_fe_valid +add wave -noupdate -group {iDMA Wrap} /pulp_cluster_tb/cluster_i/genblk2/dmac_wrap_i/fe_valid +add wave -noupdate -group {iDMA Wrap} /pulp_cluster_tb/cluster_i/genblk2/dmac_wrap_i/twod_queue_valid +add wave -noupdate -group {iDMA Wrap} /pulp_cluster_tb/cluster_i/genblk2/dmac_wrap_i/be_valid +add wave -noupdate -group {iDMA Wrap} /pulp_cluster_tb/cluster_i/genblk2/dmac_wrap_i/be_rsp_valid +add wave -noupdate -group {iDMA Wrap} /pulp_cluster_tb/cluster_i/genblk2/dmac_wrap_i/fe_ready +add wave -noupdate -group {iDMA Wrap} /pulp_cluster_tb/cluster_i/genblk2/dmac_wrap_i/twod_queue_ready +add wave -noupdate -group {iDMA Wrap} /pulp_cluster_tb/cluster_i/genblk2/dmac_wrap_i/be_ready +add wave -noupdate -group {iDMA Wrap} /pulp_cluster_tb/cluster_i/genblk2/dmac_wrap_i/be_rsp_ready +add wave -noupdate -group {iDMA Wrap} /pulp_cluster_tb/cluster_i/genblk2/dmac_wrap_i/trans_complete +add wave -noupdate -group {iDMA Wrap} /pulp_cluster_tb/cluster_i/genblk2/dmac_wrap_i/midend_busy +add wave -noupdate -group {iDMA Wrap} /pulp_cluster_tb/cluster_i/genblk2/dmac_wrap_i/idma_busy +add wave -noupdate -group {iDMA Wrap} /pulp_cluster_tb/cluster_i/genblk2/dmac_wrap_i/done_id +add wave -noupdate -group {iDMA Wrap} /pulp_cluster_tb/cluster_i/genblk2/dmac_wrap_i/next_id +add wave -noupdate -expand -group {dma ctrl 0} {/pulp_cluster_tb/cluster_i/genblk2/dmac_wrap_i/gen_core_regs[0]/i_pe_translate/clk_i} +add wave -noupdate -expand -group {dma ctrl 0} {/pulp_cluster_tb/cluster_i/genblk2/dmac_wrap_i/gen_core_regs[0]/i_pe_translate/rst_ni} +add wave -noupdate -expand -group {dma ctrl 0} {/pulp_cluster_tb/cluster_i/genblk2/dmac_wrap_i/gen_core_regs[0]/i_pe_translate/req_i} +add wave -noupdate -expand -group {dma ctrl 0} {/pulp_cluster_tb/cluster_i/genblk2/dmac_wrap_i/gen_core_regs[0]/i_pe_translate/add_i} +add wave -noupdate -expand -group {dma ctrl 0} {/pulp_cluster_tb/cluster_i/genblk2/dmac_wrap_i/gen_core_regs[0]/i_pe_translate/wen_i} +add wave -noupdate -expand -group {dma ctrl 0} {/pulp_cluster_tb/cluster_i/genblk2/dmac_wrap_i/gen_core_regs[0]/i_pe_translate/wdata_i} +add wave -noupdate -expand -group {dma ctrl 0} {/pulp_cluster_tb/cluster_i/genblk2/dmac_wrap_i/gen_core_regs[0]/i_pe_translate/be_i} +add wave -noupdate -expand -group {dma ctrl 0} {/pulp_cluster_tb/cluster_i/genblk2/dmac_wrap_i/gen_core_regs[0]/i_pe_translate/id_i} +add wave -noupdate -expand -group {dma ctrl 0} {/pulp_cluster_tb/cluster_i/genblk2/dmac_wrap_i/gen_core_regs[0]/i_pe_translate/gnt_o} +add wave -noupdate -expand -group {dma ctrl 0} {/pulp_cluster_tb/cluster_i/genblk2/dmac_wrap_i/gen_core_regs[0]/i_pe_translate/r_rdata_o} +add wave -noupdate -expand -group {dma ctrl 0} {/pulp_cluster_tb/cluster_i/genblk2/dmac_wrap_i/gen_core_regs[0]/i_pe_translate/r_opc_o} +add wave -noupdate -expand -group {dma ctrl 0} {/pulp_cluster_tb/cluster_i/genblk2/dmac_wrap_i/gen_core_regs[0]/i_pe_translate/r_id_o} +add wave -noupdate -expand -group {dma ctrl 0} {/pulp_cluster_tb/cluster_i/genblk2/dmac_wrap_i/gen_core_regs[0]/i_pe_translate/r_valid_o} +add wave -noupdate -expand -group {dma ctrl 0} {/pulp_cluster_tb/cluster_i/genblk2/dmac_wrap_i/gen_core_regs[0]/i_pe_translate/reg_req_o} +add wave -noupdate -expand -group {dma ctrl 0} {/pulp_cluster_tb/cluster_i/genblk2/dmac_wrap_i/gen_core_regs[0]/i_pe_translate/reg_rsp_i} +add wave -noupdate -expand -group {dma ctrl 0} {/pulp_cluster_tb/cluster_i/genblk2/dmac_wrap_i/gen_core_regs[0]/i_pe_translate/r_id_d} +add wave -noupdate -expand -group {dma ctrl 0} {/pulp_cluster_tb/cluster_i/genblk2/dmac_wrap_i/gen_core_regs[0]/i_pe_translate/r_id_q} +add wave -noupdate -expand -group {dma ctrl 0} {/pulp_cluster_tb/cluster_i/genblk2/dmac_wrap_i/gen_core_regs[0]/i_pe_translate/r_opc_d} +add wave -noupdate -expand -group {dma ctrl 0} {/pulp_cluster_tb/cluster_i/genblk2/dmac_wrap_i/gen_core_regs[0]/i_pe_translate/r_opc_q} +add wave -noupdate -expand -group {dma ctrl 0} {/pulp_cluster_tb/cluster_i/genblk2/dmac_wrap_i/gen_core_regs[0]/i_pe_translate/r_valid_d} +add wave -noupdate -expand -group {dma ctrl 0} {/pulp_cluster_tb/cluster_i/genblk2/dmac_wrap_i/gen_core_regs[0]/i_pe_translate/r_valid_q} +add wave -noupdate -expand -group {dma ctrl 0} {/pulp_cluster_tb/cluster_i/genblk2/dmac_wrap_i/gen_core_regs[0]/i_pe_translate/r_rdata_d} +add wave -noupdate -expand -group {dma ctrl 0} {/pulp_cluster_tb/cluster_i/genblk2/dmac_wrap_i/gen_core_regs[0]/i_pe_translate/r_rdata_q} +TreeUpdate [SetDefaultTree] +WaveRestoreCursors {{Cursor 1} {254164744503 ps} 0} +quietly wave cursor active 1 +configure wave -namecolwidth 252 +configure wave -valuecolwidth 100 +configure wave -justifyvalue left +configure wave -signalnamewidth 1 +configure wave -snapdistance 10 +configure wave -datasetprefix 0 +configure wave -rowmargin 4 +configure wave -childrowmargin 2 +configure wave -gridoffset 0 +configure wave -gridperiod 1 +configure wave -griddelta 40 +configure wave -timeline 0 +configure wave -timelineunits ns +update +WaveRestoreZoom {255222984954 ps} {255848503895 ps} diff --git a/idma_tests/idma_simple/simple_tx.c b/idma_tests/idma_simple/simple_tx.c new file mode 100644 index 0000000..b662dec --- /dev/null +++ b/idma_tests/idma_simple/simple_tx.c @@ -0,0 +1,133 @@ +#include +#include "pulp.h" +//#include "mchan_tests.h" + +#define VERBOSE + +#define MAX_BUFFER_SIZE 0x2000 + +//static unsigned char *ext; +//static unsigned char *loc; + +//#define EXT_DATA_ADDR ((unsigned int)ext) +//#define TCDM_DATA_ADDR ((unsigned int)loc) + +L2_DATA static unsigned char ext[MAX_BUFFER_SIZE]; +L1_DATA static unsigned char loc[MAX_BUFFER_SIZE]; + +#define EXT_DATA_ADDR ((unsigned int) ext) +#define TCDM_DATA_ADDR ((unsigned int) loc) +typedef enum {RX, TX} test_type_t; + +int testMCHAN(unsigned int len, test_type_t type, unsigned int ext_addr, unsigned int tcdm_addr); +int main() +{ + + if (rt_cluster_id() != 0) + return bench_cluster_forward(0); + + + int error_count = 0; + + + /* if (rt_core_id() == 0) */ +/* { */ +/* if ((ext = rt_alloc(RT_ALLOC_L2_CL_DATA, MAX_BUFFER_SIZE)) == 0) return -1; */ +/* if ((loc = rt_alloc(RT_ALLOC_CL_DATA, MAX_BUFFER_SIZE)) == 0) return -1; */ +/* } */ + + if (get_core_id() == 0){ + + + for ( int i = 5; i < 8045; i=5*i) { + error_count += testMCHAN(i, TX, ext, loc); + } + for ( int i = 5; i < 8045; i=5*i ) { + error_count += testMCHAN(i, RX, ext, loc); + } + + } + + return error_count; + +} + +int testMCHAN(unsigned int len, test_type_t type, unsigned int ext_addr, unsigned int tcdm_addr){ + + volatile unsigned int i,j,id; + volatile unsigned int test,read,error=0; + + if (type == RX){ + +#ifdef VERBOSE + printf ("STARTING TEST FOR RX %d OPERATION: \n", len); +#endif + + for (i=0; i Date: Fri, 28 Jun 2024 15:34:18 +0200 Subject: [PATCH 50/71] update NN tests to use generic runtime DMA functions --- rt_nn_tests/xpnn_conv/Makefile | 1 - rt_nn_tests/xpnn_conv/dory_dma.c | 176 --- rt_nn_tests/xpnn_conv/dory_dma.h | 52 - rt_nn_tests/xpnn_conv/mchan.h | 137 -- rt_nn_tests/xpnn_conv/test.c | 55 +- rt_nn_tests/xpnn_maxpool_2b/Makefile | 1 - rt_nn_tests/xpnn_maxpool_2b/dory_dma.c | 176 --- rt_nn_tests/xpnn_maxpool_2b/dory_dma.h | 52 - rt_nn_tests/xpnn_maxpool_2b/mchan.h | 137 -- rt_nn_tests/xpnn_maxpool_2b/test.c | 30 +- rt_nn_tests/xpnnv2_conv/Makefile | 1 - rt_nn_tests/xpnnv2_conv/dory_dma.c | 176 --- rt_nn_tests/xpnnv2_conv/dory_dma.h | 52 - rt_nn_tests/xpnnv2_conv/mchan.h | 137 -- rt_nn_tests/xpnnv2_conv/test.c | 55 +- rt_nn_tests/xptnn_conv/Makefile | 1 - rt_nn_tests/xptnn_conv/dory_dma.c | 176 --- rt_nn_tests/xptnn_conv/dory_dma.h | 52 - rt_nn_tests/xptnn_conv/mchan.h | 137 -- rt_nn_tests/xptnn_conv/test.c | 48 +- rt_nn_tests/xptnn_linear/Makefile | 1 - rt_nn_tests/xptnn_linear/dory_dma.c | 176 --- rt_nn_tests/xptnn_linear/dory_dma.h | 52 - rt_nn_tests/xptnn_linear/hsgs_wave.do | 1384 ----------------- rt_nn_tests/xptnn_linear/mchan.h | 137 -- rt_nn_tests/xptnn_linear/test.c | 39 +- .../xpulp_tnn_linear_ternary_i32.c | 95 -- rt_nn_tests/xptnn_maxpool/Makefile | 1 - rt_nn_tests/xptnn_maxpool/dory_dma.c | 176 --- rt_nn_tests/xptnn_maxpool/dory_dma.h | 52 - rt_nn_tests/xptnn_maxpool/mchan.h | 137 -- rt_nn_tests/xptnn_maxpool/test.c | 30 +- 32 files changed, 97 insertions(+), 3835 deletions(-) delete mode 100644 rt_nn_tests/xpnn_conv/dory_dma.c delete mode 100644 rt_nn_tests/xpnn_conv/dory_dma.h delete mode 100644 rt_nn_tests/xpnn_conv/mchan.h delete mode 100644 rt_nn_tests/xpnn_maxpool_2b/dory_dma.c delete mode 100644 rt_nn_tests/xpnn_maxpool_2b/dory_dma.h delete mode 100644 rt_nn_tests/xpnn_maxpool_2b/mchan.h delete mode 100644 rt_nn_tests/xpnnv2_conv/dory_dma.c delete mode 100644 rt_nn_tests/xpnnv2_conv/dory_dma.h delete mode 100644 rt_nn_tests/xpnnv2_conv/mchan.h delete mode 100644 rt_nn_tests/xptnn_conv/dory_dma.c delete mode 100644 rt_nn_tests/xptnn_conv/dory_dma.h delete mode 100644 rt_nn_tests/xptnn_conv/mchan.h delete mode 100644 rt_nn_tests/xptnn_linear/dory_dma.c delete mode 100644 rt_nn_tests/xptnn_linear/dory_dma.h delete mode 100644 rt_nn_tests/xptnn_linear/hsgs_wave.do delete mode 100644 rt_nn_tests/xptnn_linear/mchan.h delete mode 100644 rt_nn_tests/xptnn_linear/xpulp_tnn_linear_ternary_i32.c delete mode 100644 rt_nn_tests/xptnn_maxpool/dory_dma.c delete mode 100644 rt_nn_tests/xptnn_maxpool/dory_dma.h delete mode 100644 rt_nn_tests/xptnn_maxpool/mchan.h diff --git a/rt_nn_tests/xpnn_conv/Makefile b/rt_nn_tests/xpnn_conv/Makefile index 3d1d03f..a180c60 100644 --- a/rt_nn_tests/xpnn_conv/Makefile +++ b/rt_nn_tests/xpnn_conv/Makefile @@ -1,7 +1,6 @@ APP = test PULP_APP = test PULP_APP_SRCS = test.c -PULP_APP_SRCS += dory_dma.c PULP_APP_SRCS += xpulp_nn_conv_u4_u8_i2.c PULP_APP_SRCS += xpulp_nn_matmul_u4_u8_i2.c diff --git a/rt_nn_tests/xpnn_conv/dory_dma.c b/rt_nn_tests/xpnn_conv/dory_dma.c deleted file mode 100644 index 61c9116..0000000 --- a/rt_nn_tests/xpnn_conv/dory_dma.c +++ /dev/null @@ -1,176 +0,0 @@ -#include "dory_dma.h" - -#include "pmsis.h" - -#ifndef MCHAN_BASE_ADDR -// FIXME: For GAP9, this must point to ARCHI_MCHAN_EXT_ADDR!!! -// In PULP-SDK for Kraken, this is fixed. -// GAP8 hardware to be tested... -#define MCHAN_BASE_ADDR (ARCHI_MCHAN_DEMUX_ADDR) // CLUSTER_MCHAN_ADDR -#endif -#define MCHAN_EVENT -//#define MCHAN_POLLED -#ifdef MCHAN_EVENT -#define MCHAN_EVENT_BIT (ARCHI_CL_EVT_DMA0) // 8 -#endif -#include "mchan.h" - - -#if defined(MCHAN_POLLED) -#define MCHAN_FLAGS (MCHAN_CMD_FLAG_INCREMENTAL) -#elif defined(MCHAN_EVENT) -#define MCHAN_FLAGS (MCHAN_CMD_FLAG_EVENT_ENABLE | MCHAN_CMD_FLAG_INCREMENTAL) -#elif defined(MCHAN_INTERRUPT) -#define MCHAN_FLAGS (MCHAN_CMD_FLAG_INTERRUPT_ENABLE | MCHAN_CMD_FLAG_INCREMENTAL) -#endif - -#define MCHAN_FLAGS_1D (MCHAN_FLAGS) -#define MCHAN_FLAGS_2D (MCHAN_FLAGS | MCHAN_CMD_FLAG_2D_TRANSFER_EXTERNAL) - -#define MIN(a,b) ((a)<(b)?(a):(b)) - -void dory_dma_memcpy_hwc_to_chw(DMA_copy *copy){ - int start_pixel, stop_pixel; // "pixel" is a misnomer; the CHANNELS are divided between the cores - // this function assumes that a DW tile is always as wide as the complete feature map (this is enforced by DORY's tiler) - // if there is only 1 DMA control unit for the cluster (e.g., Kraken), we can't execute DMA calls on multiple clusters. -#ifndef SINGLE_CORE_DMA - int core_id = pi_core_id(); - int Log2Core = log2(NUM_CORES); - int number_of_copies_per_core = (copy->length_1d_copy >> Log2Core) + ((copy->length_1d_copy & (NUM_CORES-1))!=0); - start_pixel = MIN(number_of_copies_per_core * core_id, copy->length_1d_copy); - stop_pixel = MIN(start_pixel + number_of_copies_per_core, copy->length_1d_copy); -#else - start_pixel = 0; - stop_pixel = copy->length_1d_copy; -#endif - void * loc = copy->loc + copy->number_of_1d_copies*copy->number_of_2d_copies*start_pixel; - void * ext = copy->ext + start_pixel; - const int size_2d = copy->number_of_1d_copies * copy->number_of_2d_copies; - - for (int i=start_pixel; idir << MCHAN_CMD_SHIFT_DIRECTION | MCHAN_FLAGS_2D, - .size = size_2d, - .ext = ext, - .loc = loc, - .ext_size_1d = 1, // one byte at a time... - .ext_stride_1d = copy->stride_1d - }; -#ifdef SINGLE_CORE_DMA - if (pi_core_id() == 0) { -#endif - mchan_transfer_push_2d(trans); -#ifdef SINGLE_CORE_DMA - } -#endif -#ifdef ALWAYS_BLOCK_DMA_TRANSFERS // needed on GAP8 board - dory_dma_barrier(copy); -#endif - ext += 1; // next channel - loc += copy->number_of_1d_copies * copy->number_of_2d_copies; - } -} - -void dory_dma_memcpy_1d_async(DMA_copy *copy) { - if (pi_core_id() == 0) { - mchan_transfer_t trans = { - .cmd = copy->length_1d_copy * copy->number_of_1d_copies * copy->number_of_2d_copies | (copy->dir << MCHAN_CMD_SHIFT_DIRECTION) | MCHAN_FLAGS_1D, - .size = copy->length_1d_copy * copy->number_of_1d_copies * copy->number_of_2d_copies, - .ext = copy->ext, - .loc = copy->loc - }; - mchan_transfer_push_1d(trans); - } -} - -void dory_dma_memcpy_2d_async(DMA_copy *copy) { - if (pi_core_id() == 0) { - const int size_2d = copy->number_of_1d_copies * copy->length_1d_copy * copy->number_of_2d_copies; - const int stride = (copy->number_of_2d_copies == 1) ? copy->stride_1d : copy->stride_2d; - const int size_1d = (copy->number_of_2d_copies == 1) ? copy->length_1d_copy : copy->length_1d_copy * copy->number_of_1d_copies; - - mchan_transfer_t trans = { - .cmd = size_2d | copy->dir << MCHAN_CMD_SHIFT_DIRECTION | MCHAN_FLAGS_2D, - .size = size_2d, - .ext = copy->ext, - .loc = copy->loc, - .ext_size_1d = size_1d, - .ext_stride_1d = stride - }; - mchan_transfer_push_2d(trans); - } -} - -void dory_dma_memcpy_3d_async(DMA_copy *copy) { - int start_pixel, stop_pixel; -#ifndef SINGLE_CORE_DMA - int core_id = pi_core_id(); - int Log2Core = log2(NUM_CORES); - int number_of_2d_copies_per_core = (copy->number_of_2d_copies >> Log2Core) + ((copy->number_of_2d_copies & (NUM_CORES-1))!=0); - start_pixel = MIN(number_of_2d_copies_per_core * core_id, copy->number_of_2d_copies); - stop_pixel = MIN(start_pixel + number_of_2d_copies_per_core, copy->number_of_2d_copies); -#else - start_pixel = 0; - stop_pixel = copy->number_of_2d_copies; -#endif - void *ext = copy->ext + copy->stride_2d*start_pixel; - void *loc = copy->loc + copy->length_1d_copy*copy->number_of_1d_copies*start_pixel; - const int size_2d = copy->number_of_1d_copies * copy->length_1d_copy; - for (int i = start_pixel; i < stop_pixel; i++) { - mchan_transfer_t trans = { - .cmd = size_2d | copy->dir << MCHAN_CMD_SHIFT_DIRECTION | MCHAN_FLAGS_2D, - .size = size_2d, - .ext = ext, - .loc = loc, - .ext_size_1d = copy->length_1d_copy, - .ext_stride_1d = copy->stride_1d - }; -#ifdef SINGLE_CORE_DMA - if (pi_core_id() == 0) { -#endif - mchan_transfer_push_2d(trans); -#ifdef SINGLE_CORE_DMA - } -#endif -#ifdef ALWAYS_BLOCK_DMA_TRANSFERS // needed on GAP8 board - dory_dma_barrier(copy); -#endif - loc += size_2d; - ext += copy->stride_2d; - } -} - -void dory_dma_memcpy_async(DMA_copy *copy) { - if (copy->hwc_to_chw == 1) { - dory_dma_memcpy_hwc_to_chw(copy); - } - else if ((copy->number_of_2d_copies == 1 && copy->number_of_1d_copies == 1) || (copy->stride_1d == copy->length_1d_copy && copy->number_of_1d_copies * copy->length_1d_copy == copy->stride_2d) || (copy->number_of_2d_copies == 1 && copy->length_1d_copy == copy->stride_1d)) { - dory_dma_memcpy_1d_async(copy); - } else if ((copy->number_of_2d_copies == 1) || (copy->length_1d_copy == copy->stride_1d)) {// wrong! - dory_dma_memcpy_2d_async(copy); - } else { - dory_dma_memcpy_3d_async(copy); - } -#ifdef ALWAYS_BLOCK_DMA_TRANSFERS - dory_dma_barrier(copy); -#endif -} - -void dory_dma_free(DMA_copy *copy) { - mchan_transfer_free(copy->tid); -} - -void dory_dma_barrier(DMA_copy *copy) { -#ifdef SINGLE_CORE_DMA - // if DMA is only used by a single core (only 1 ctrl interface), other cores must not access its register file. Instead, they should all wait for core 0 to confirm the transfer is over. - if (pi_core_id() == 0) - mchan_transfer_wait(copy->tid); - pi_cl_team_barrier(0); -#else - mchan_transfer_wait(copy->tid); -#endif -} - -int dory_dma_allocate() { - return mchan_transfer_get_id(); -} diff --git a/rt_nn_tests/xpnn_conv/dory_dma.h b/rt_nn_tests/xpnn_conv/dory_dma.h deleted file mode 100644 index e0b3ef3..0000000 --- a/rt_nn_tests/xpnn_conv/dory_dma.h +++ /dev/null @@ -1,52 +0,0 @@ -/* - * dory.h - * Alessio Burrello - * - * Copyright (C) 2019-2020 University of Bologna - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef _DORY_DMA_H -#define _DORY_DMA_H - -typedef struct -{ - void *ext; - void *loc; - unsigned short hwc_to_chw; - unsigned short stride_2d; - unsigned short number_of_2d_copies; - unsigned short stride_1d; - unsigned short number_of_1d_copies; - unsigned short length_1d_copy; - int dir; // 0 l1->l2, 1 l2->l1 - int tid; -} DMA_copy; - -void dory_dma_memcpy_hwc_to_chw(DMA_copy *copy); - -void dory_dma_memcpy_1d_async(DMA_copy *copy); - -void dory_dma_memcpy_2d_async(DMA_copy *copy); - -void dory_dma_memcpy_3d_async(DMA_copy *copy); - -void dory_dma_memcpy_async(DMA_copy *copy); - -void dory_dma_free(DMA_copy *copy); - -void dory_dma_barrier(DMA_copy *copy); - -int dory_dma_allocate(); -#endif diff --git a/rt_nn_tests/xpnn_conv/mchan.h b/rt_nn_tests/xpnn_conv/mchan.h deleted file mode 100644 index 95882ab..0000000 --- a/rt_nn_tests/xpnn_conv/mchan.h +++ /dev/null @@ -1,137 +0,0 @@ -#ifndef _MCHAN_H -#define _MCHAN_H - -// Requires to have MCHAN_BASE_ADDR, MCHAN_EVENT defined outside of header -#ifndef MCHAN_BASE_ADDR -#error "[mchan.h] MCHAN_BASE_ADDR not defined!" -#endif - -#if !defined(MCHAN_EVENT) && !defined(MCHAN_POLLED) -#error "[mchan.h] Nor MCHAN_EVENT nor MCHAN_POLLED defined!" -#endif - -#if defined(MCHAN_EVENT) && !defined(MCHAN_EVENT_BIT) -#error "[mchan.h] MCHAN_EVENT_BIT should be defined when using events as signalization!" -#endif - -#include "pmsis.h" - -#define MCHAN_CMD_OFFSET 0 -#define MCHAN_STATUS_OFFSET 4 - -#define MCHAN_CMD_ADDR (MCHAN_BASE_ADDR + MCHAN_CMD_OFFSET) -#define MCHAN_STATUS_ADDR (MCHAN_BASE_ADDR + MCHAN_STATUS_OFFSET) - -#define READ_REG(addr) (*(volatile int*)(addr)) -#define WRITE_REG(addr, value) do { *(volatile int*)(addr) = (int)value; } while (0) - -#define MCHAN_READ_CMD() READ_REG(MCHAN_CMD_ADDR) -#define MCHAN_WRITE_CMD(value) WRITE_REG(MCHAN_CMD_ADDR, value) - -#define MCHAN_READ_STATUS() READ_REG(MCHAN_STATUS_ADDR) -#define MCHAN_WRITE_STATUS(value) WRITE_REG(MCHAN_STATUS_ADDR, value) - -// MCHAN version 7 has 1 more bit for the transfer length, so all the flag offsets are shifted by 1. Also, LOC (TCDM) striding is not supported in v6. -#if MCHAN_VERSION==7 -#define MCHAN_TRANSFER_LEN_SIZE (17) -#else -#define MCHAN_TRANSFER_LEN_SIZE (16) -#endif - -#define MCHAN_CMD_FLAG_DIRECTION_LOC2EXT (0 << (MCHAN_TRANSFER_LEN_SIZE + 0)) -#define MCHAN_CMD_FLAG_DIRECTION_EXT2LOC (1 << (MCHAN_TRANSFER_LEN_SIZE + 0)) -#define MCHAN_CMD_FLAG_INCREMENTAL (1 << (MCHAN_TRANSFER_LEN_SIZE + 1)) -#define MCHAN_CMD_FLAG_2D_TRANSFER_EXTERNAL (1 << (MCHAN_TRANSFER_LEN_SIZE + 2)) -#define MCHAN_CMD_FLAG_EVENT_ENABLE (1 << (MCHAN_TRANSFER_LEN_SIZE + 3)) -#define MCHAN_CMD_FLAG_INTERRUPT_ENABLE (1 << (MCHAN_TRANSFER_LEN_SIZE + 4)) -#define MCHAN_CMD_FLAG_BROADCAST_FINISH (1 << (MCHAN_TRANSFER_LEN_SIZE + 5)) -#if MCHAN_VERSION==7 -#define MCHAN_CMD_FLAG_2D_TRANSFER_LOCAL (1 << (MCHAN_TRANSFER_LEN_SIZE + 6)) // can only be used with MCHAN v7 -#endif -#define MCHAN_CMD_SHIFT_DIRECTION MCHAN_TRANSFER_LEN_SIZE - - -#define MCHAN_CMD(len, dir, inc, loc_2d, ext_2d, int_en, event_en, broadcast) \ - (len | dir | inc | loc_2d | ext_2d | broadcast | int_en | event_en) - -typedef enum { - MCHAN_DMA_TRANSFER_DIRECTION_EXT2LOC = MCHAN_CMD_FLAG_DIRECTION_EXT2LOC, - MCHAN_DMA_TRANSFER_DIRECTION_LOC2EXT = MCHAN_CMD_FLAG_DIRECTION_LOC2EXT -} mchan_dma_transfer_direction_e; - -typedef struct { - int cmd; - int size; - - void *loc; - int loc_size_1d; - int loc_stride_1d; - - void *ext; - int ext_size_1d; - int ext_stride_1d; -} mchan_transfer_t; - -static int mchan_transfer_get_id() { - return MCHAN_READ_CMD(); -} - -static void mchan_transfer_push_1d(mchan_transfer_t trans) -{ - MCHAN_WRITE_CMD(trans.cmd); - MCHAN_WRITE_CMD(trans.loc); - MCHAN_WRITE_CMD(trans.ext); -} - -static void mchan_transfer_push_2d(mchan_transfer_t trans) -{ - MCHAN_WRITE_CMD(trans.cmd); - MCHAN_WRITE_CMD(trans.loc); - MCHAN_WRITE_CMD(trans.ext); -// MCHAN version 7 takes 2D "count" (length of 1D transfers) and stride in 2 steps, -// v7 takes it in 1 step with the stride shifted to the upper 16 bits. -#if MCHAN_VERSION==7 - MCHAN_WRITE_CMD(trans.ext_size_1d); - MCHAN_WRITE_CMD(trans.ext_stride_1d); -#else - MCHAN_WRITE_CMD(trans.ext_size_1d | (trans.ext_stride_1d << 16)); -#endif -} - -static void mchan_transfer_push(mchan_transfer_t trans) -{ - MCHAN_WRITE_CMD(trans.cmd); - MCHAN_WRITE_CMD(trans.loc); - MCHAN_WRITE_CMD(trans.ext); - - if (trans.ext_size_1d < trans.size) { - MCHAN_WRITE_CMD(trans.ext_size_1d); - MCHAN_WRITE_CMD(trans.ext_stride_1d); - } - - if (trans.loc_size_1d < trans.size) { - MCHAN_WRITE_CMD(trans.loc_size_1d); - MCHAN_WRITE_CMD(trans.loc_stride_1d); - } -} - -static void mchan_transfer_free(int tid) -{ - MCHAN_WRITE_STATUS(1 << tid); -} - -static int mchan_transfer_busy(int tid) -{ - return MCHAN_READ_STATUS() & (1 << tid); -} - -static void mchan_transfer_wait(int tid) -{ - #if defined(MCHAN_EVENT) - while(mchan_transfer_busy(tid)) eu_evt_maskWaitAndClr(1 << MCHAN_EVENT_BIT); - #elif defined(MCHAN_POLLED) - while(mchan_transfer_busy(tid)) ; - #endif -} - -#endif diff --git a/rt_nn_tests/xpnn_conv/test.c b/rt_nn_tests/xpnn_conv/test.c index 07d841b..5ce4bde 100644 --- a/rt_nn_tests/xpnn_conv/test.c +++ b/rt_nn_tests/xpnn_conv/test.c @@ -1,10 +1,7 @@ -// massive hack to enable rt compatibility -#define pi_core_id get_core_id #include #include #include -#include "dory_dma.h" #include "pmsis.h" @@ -184,39 +181,33 @@ void call_krnl_0(void) { } void test_0(void) { - uint32_t dma_channel = dory_dma_allocate(); - DMA_copy dma_tx = {0}; // DMA transfer inputs from L2 to L1 - dma_tx.ext = pIn_0; - dma_tx.loc = inp_l1; - dma_tx.number_of_1d_copies = 1; - dma_tx.number_of_2d_copies = 1; - dma_tx.length_1d_copy = 128; - dma_tx.stride_1d = 1; - dma_tx.stride_2d = 1; - dma_tx.dir = 1; - dma_tx.tid = dma_channel; - dory_dma_memcpy_async(&dma_tx); - dma_tx.ext = pLambda_0; - dma_tx.loc = lambda_l1; - dma_tx.length_1d_copy = 32 * 4; // 4 bytes per lambda item - dory_dma_memcpy_async(&dma_tx); - dma_tx.ext = pKappa_0; - dma_tx.loc = kappa_l1; - dory_dma_memcpy_async(&dma_tx); + if (pi_core_id() == 0) { + plp_dma_memcpy(pIn_0, inp_l1, 128, 1); + plp_dma_barrier(); + } + pi_cl_team_barrier(0); + if (pi_core_id() == 0) { + plp_dma_memcpy(pLambda_0, lambda_l1, 32 * 4, 1); // 4 bytes per lambda item + plp_dma_barrier(); + } + if (pi_core_id() == 0) { + plp_dma_memcpy(pKappa_0, kappa_l1, 32 * 4, 1); // 4 bytes per lambda item + plp_dma_barrier(); + } + pi_cl_team_barrier(0); // transfer weights - dma_tx.ext = pWeight_0; - dma_tx.loc = wt_l1; - dma_tx.length_1d_copy = 1152; - dory_dma_memcpy_async(&dma_tx); + if (pi_core_id() == 0) { + plp_dma_memcpy(pWeight_0, wt_l1, 1152, 1); + plp_dma_barrier(); + } + pi_cl_team_barrier(0); call_krnl_0(); // get outputs back with DMA - dma_tx.dir = 0; - dma_tx.ext = outputs; - dma_tx.loc = outp_l1; - dma_tx.length_1d_copy = 512; - dory_dma_memcpy_async(&dma_tx); - dory_dma_free(&dma_tx); + if (pi_core_id() == 0) { + plp_dma_memcpy(outputs, outp_l1, 512, 0); + plp_dma_barrier(); + } } diff --git a/rt_nn_tests/xpnn_maxpool_2b/Makefile b/rt_nn_tests/xpnn_maxpool_2b/Makefile index 72619b7..ed30544 100644 --- a/rt_nn_tests/xpnn_maxpool_2b/Makefile +++ b/rt_nn_tests/xpnn_maxpool_2b/Makefile @@ -1,7 +1,6 @@ APP = test PULP_APP = test PULP_APP_SRCS = test.c -PULP_APP_SRCS += dory_dma.c PULP_APP_SRCS += xpulp_nn_maxpool_i2.c CORE=8 diff --git a/rt_nn_tests/xpnn_maxpool_2b/dory_dma.c b/rt_nn_tests/xpnn_maxpool_2b/dory_dma.c deleted file mode 100644 index 61c9116..0000000 --- a/rt_nn_tests/xpnn_maxpool_2b/dory_dma.c +++ /dev/null @@ -1,176 +0,0 @@ -#include "dory_dma.h" - -#include "pmsis.h" - -#ifndef MCHAN_BASE_ADDR -// FIXME: For GAP9, this must point to ARCHI_MCHAN_EXT_ADDR!!! -// In PULP-SDK for Kraken, this is fixed. -// GAP8 hardware to be tested... -#define MCHAN_BASE_ADDR (ARCHI_MCHAN_DEMUX_ADDR) // CLUSTER_MCHAN_ADDR -#endif -#define MCHAN_EVENT -//#define MCHAN_POLLED -#ifdef MCHAN_EVENT -#define MCHAN_EVENT_BIT (ARCHI_CL_EVT_DMA0) // 8 -#endif -#include "mchan.h" - - -#if defined(MCHAN_POLLED) -#define MCHAN_FLAGS (MCHAN_CMD_FLAG_INCREMENTAL) -#elif defined(MCHAN_EVENT) -#define MCHAN_FLAGS (MCHAN_CMD_FLAG_EVENT_ENABLE | MCHAN_CMD_FLAG_INCREMENTAL) -#elif defined(MCHAN_INTERRUPT) -#define MCHAN_FLAGS (MCHAN_CMD_FLAG_INTERRUPT_ENABLE | MCHAN_CMD_FLAG_INCREMENTAL) -#endif - -#define MCHAN_FLAGS_1D (MCHAN_FLAGS) -#define MCHAN_FLAGS_2D (MCHAN_FLAGS | MCHAN_CMD_FLAG_2D_TRANSFER_EXTERNAL) - -#define MIN(a,b) ((a)<(b)?(a):(b)) - -void dory_dma_memcpy_hwc_to_chw(DMA_copy *copy){ - int start_pixel, stop_pixel; // "pixel" is a misnomer; the CHANNELS are divided between the cores - // this function assumes that a DW tile is always as wide as the complete feature map (this is enforced by DORY's tiler) - // if there is only 1 DMA control unit for the cluster (e.g., Kraken), we can't execute DMA calls on multiple clusters. -#ifndef SINGLE_CORE_DMA - int core_id = pi_core_id(); - int Log2Core = log2(NUM_CORES); - int number_of_copies_per_core = (copy->length_1d_copy >> Log2Core) + ((copy->length_1d_copy & (NUM_CORES-1))!=0); - start_pixel = MIN(number_of_copies_per_core * core_id, copy->length_1d_copy); - stop_pixel = MIN(start_pixel + number_of_copies_per_core, copy->length_1d_copy); -#else - start_pixel = 0; - stop_pixel = copy->length_1d_copy; -#endif - void * loc = copy->loc + copy->number_of_1d_copies*copy->number_of_2d_copies*start_pixel; - void * ext = copy->ext + start_pixel; - const int size_2d = copy->number_of_1d_copies * copy->number_of_2d_copies; - - for (int i=start_pixel; idir << MCHAN_CMD_SHIFT_DIRECTION | MCHAN_FLAGS_2D, - .size = size_2d, - .ext = ext, - .loc = loc, - .ext_size_1d = 1, // one byte at a time... - .ext_stride_1d = copy->stride_1d - }; -#ifdef SINGLE_CORE_DMA - if (pi_core_id() == 0) { -#endif - mchan_transfer_push_2d(trans); -#ifdef SINGLE_CORE_DMA - } -#endif -#ifdef ALWAYS_BLOCK_DMA_TRANSFERS // needed on GAP8 board - dory_dma_barrier(copy); -#endif - ext += 1; // next channel - loc += copy->number_of_1d_copies * copy->number_of_2d_copies; - } -} - -void dory_dma_memcpy_1d_async(DMA_copy *copy) { - if (pi_core_id() == 0) { - mchan_transfer_t trans = { - .cmd = copy->length_1d_copy * copy->number_of_1d_copies * copy->number_of_2d_copies | (copy->dir << MCHAN_CMD_SHIFT_DIRECTION) | MCHAN_FLAGS_1D, - .size = copy->length_1d_copy * copy->number_of_1d_copies * copy->number_of_2d_copies, - .ext = copy->ext, - .loc = copy->loc - }; - mchan_transfer_push_1d(trans); - } -} - -void dory_dma_memcpy_2d_async(DMA_copy *copy) { - if (pi_core_id() == 0) { - const int size_2d = copy->number_of_1d_copies * copy->length_1d_copy * copy->number_of_2d_copies; - const int stride = (copy->number_of_2d_copies == 1) ? copy->stride_1d : copy->stride_2d; - const int size_1d = (copy->number_of_2d_copies == 1) ? copy->length_1d_copy : copy->length_1d_copy * copy->number_of_1d_copies; - - mchan_transfer_t trans = { - .cmd = size_2d | copy->dir << MCHAN_CMD_SHIFT_DIRECTION | MCHAN_FLAGS_2D, - .size = size_2d, - .ext = copy->ext, - .loc = copy->loc, - .ext_size_1d = size_1d, - .ext_stride_1d = stride - }; - mchan_transfer_push_2d(trans); - } -} - -void dory_dma_memcpy_3d_async(DMA_copy *copy) { - int start_pixel, stop_pixel; -#ifndef SINGLE_CORE_DMA - int core_id = pi_core_id(); - int Log2Core = log2(NUM_CORES); - int number_of_2d_copies_per_core = (copy->number_of_2d_copies >> Log2Core) + ((copy->number_of_2d_copies & (NUM_CORES-1))!=0); - start_pixel = MIN(number_of_2d_copies_per_core * core_id, copy->number_of_2d_copies); - stop_pixel = MIN(start_pixel + number_of_2d_copies_per_core, copy->number_of_2d_copies); -#else - start_pixel = 0; - stop_pixel = copy->number_of_2d_copies; -#endif - void *ext = copy->ext + copy->stride_2d*start_pixel; - void *loc = copy->loc + copy->length_1d_copy*copy->number_of_1d_copies*start_pixel; - const int size_2d = copy->number_of_1d_copies * copy->length_1d_copy; - for (int i = start_pixel; i < stop_pixel; i++) { - mchan_transfer_t trans = { - .cmd = size_2d | copy->dir << MCHAN_CMD_SHIFT_DIRECTION | MCHAN_FLAGS_2D, - .size = size_2d, - .ext = ext, - .loc = loc, - .ext_size_1d = copy->length_1d_copy, - .ext_stride_1d = copy->stride_1d - }; -#ifdef SINGLE_CORE_DMA - if (pi_core_id() == 0) { -#endif - mchan_transfer_push_2d(trans); -#ifdef SINGLE_CORE_DMA - } -#endif -#ifdef ALWAYS_BLOCK_DMA_TRANSFERS // needed on GAP8 board - dory_dma_barrier(copy); -#endif - loc += size_2d; - ext += copy->stride_2d; - } -} - -void dory_dma_memcpy_async(DMA_copy *copy) { - if (copy->hwc_to_chw == 1) { - dory_dma_memcpy_hwc_to_chw(copy); - } - else if ((copy->number_of_2d_copies == 1 && copy->number_of_1d_copies == 1) || (copy->stride_1d == copy->length_1d_copy && copy->number_of_1d_copies * copy->length_1d_copy == copy->stride_2d) || (copy->number_of_2d_copies == 1 && copy->length_1d_copy == copy->stride_1d)) { - dory_dma_memcpy_1d_async(copy); - } else if ((copy->number_of_2d_copies == 1) || (copy->length_1d_copy == copy->stride_1d)) {// wrong! - dory_dma_memcpy_2d_async(copy); - } else { - dory_dma_memcpy_3d_async(copy); - } -#ifdef ALWAYS_BLOCK_DMA_TRANSFERS - dory_dma_barrier(copy); -#endif -} - -void dory_dma_free(DMA_copy *copy) { - mchan_transfer_free(copy->tid); -} - -void dory_dma_barrier(DMA_copy *copy) { -#ifdef SINGLE_CORE_DMA - // if DMA is only used by a single core (only 1 ctrl interface), other cores must not access its register file. Instead, they should all wait for core 0 to confirm the transfer is over. - if (pi_core_id() == 0) - mchan_transfer_wait(copy->tid); - pi_cl_team_barrier(0); -#else - mchan_transfer_wait(copy->tid); -#endif -} - -int dory_dma_allocate() { - return mchan_transfer_get_id(); -} diff --git a/rt_nn_tests/xpnn_maxpool_2b/dory_dma.h b/rt_nn_tests/xpnn_maxpool_2b/dory_dma.h deleted file mode 100644 index e0b3ef3..0000000 --- a/rt_nn_tests/xpnn_maxpool_2b/dory_dma.h +++ /dev/null @@ -1,52 +0,0 @@ -/* - * dory.h - * Alessio Burrello - * - * Copyright (C) 2019-2020 University of Bologna - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef _DORY_DMA_H -#define _DORY_DMA_H - -typedef struct -{ - void *ext; - void *loc; - unsigned short hwc_to_chw; - unsigned short stride_2d; - unsigned short number_of_2d_copies; - unsigned short stride_1d; - unsigned short number_of_1d_copies; - unsigned short length_1d_copy; - int dir; // 0 l1->l2, 1 l2->l1 - int tid; -} DMA_copy; - -void dory_dma_memcpy_hwc_to_chw(DMA_copy *copy); - -void dory_dma_memcpy_1d_async(DMA_copy *copy); - -void dory_dma_memcpy_2d_async(DMA_copy *copy); - -void dory_dma_memcpy_3d_async(DMA_copy *copy); - -void dory_dma_memcpy_async(DMA_copy *copy); - -void dory_dma_free(DMA_copy *copy); - -void dory_dma_barrier(DMA_copy *copy); - -int dory_dma_allocate(); -#endif diff --git a/rt_nn_tests/xpnn_maxpool_2b/mchan.h b/rt_nn_tests/xpnn_maxpool_2b/mchan.h deleted file mode 100644 index 95882ab..0000000 --- a/rt_nn_tests/xpnn_maxpool_2b/mchan.h +++ /dev/null @@ -1,137 +0,0 @@ -#ifndef _MCHAN_H -#define _MCHAN_H - -// Requires to have MCHAN_BASE_ADDR, MCHAN_EVENT defined outside of header -#ifndef MCHAN_BASE_ADDR -#error "[mchan.h] MCHAN_BASE_ADDR not defined!" -#endif - -#if !defined(MCHAN_EVENT) && !defined(MCHAN_POLLED) -#error "[mchan.h] Nor MCHAN_EVENT nor MCHAN_POLLED defined!" -#endif - -#if defined(MCHAN_EVENT) && !defined(MCHAN_EVENT_BIT) -#error "[mchan.h] MCHAN_EVENT_BIT should be defined when using events as signalization!" -#endif - -#include "pmsis.h" - -#define MCHAN_CMD_OFFSET 0 -#define MCHAN_STATUS_OFFSET 4 - -#define MCHAN_CMD_ADDR (MCHAN_BASE_ADDR + MCHAN_CMD_OFFSET) -#define MCHAN_STATUS_ADDR (MCHAN_BASE_ADDR + MCHAN_STATUS_OFFSET) - -#define READ_REG(addr) (*(volatile int*)(addr)) -#define WRITE_REG(addr, value) do { *(volatile int*)(addr) = (int)value; } while (0) - -#define MCHAN_READ_CMD() READ_REG(MCHAN_CMD_ADDR) -#define MCHAN_WRITE_CMD(value) WRITE_REG(MCHAN_CMD_ADDR, value) - -#define MCHAN_READ_STATUS() READ_REG(MCHAN_STATUS_ADDR) -#define MCHAN_WRITE_STATUS(value) WRITE_REG(MCHAN_STATUS_ADDR, value) - -// MCHAN version 7 has 1 more bit for the transfer length, so all the flag offsets are shifted by 1. Also, LOC (TCDM) striding is not supported in v6. -#if MCHAN_VERSION==7 -#define MCHAN_TRANSFER_LEN_SIZE (17) -#else -#define MCHAN_TRANSFER_LEN_SIZE (16) -#endif - -#define MCHAN_CMD_FLAG_DIRECTION_LOC2EXT (0 << (MCHAN_TRANSFER_LEN_SIZE + 0)) -#define MCHAN_CMD_FLAG_DIRECTION_EXT2LOC (1 << (MCHAN_TRANSFER_LEN_SIZE + 0)) -#define MCHAN_CMD_FLAG_INCREMENTAL (1 << (MCHAN_TRANSFER_LEN_SIZE + 1)) -#define MCHAN_CMD_FLAG_2D_TRANSFER_EXTERNAL (1 << (MCHAN_TRANSFER_LEN_SIZE + 2)) -#define MCHAN_CMD_FLAG_EVENT_ENABLE (1 << (MCHAN_TRANSFER_LEN_SIZE + 3)) -#define MCHAN_CMD_FLAG_INTERRUPT_ENABLE (1 << (MCHAN_TRANSFER_LEN_SIZE + 4)) -#define MCHAN_CMD_FLAG_BROADCAST_FINISH (1 << (MCHAN_TRANSFER_LEN_SIZE + 5)) -#if MCHAN_VERSION==7 -#define MCHAN_CMD_FLAG_2D_TRANSFER_LOCAL (1 << (MCHAN_TRANSFER_LEN_SIZE + 6)) // can only be used with MCHAN v7 -#endif -#define MCHAN_CMD_SHIFT_DIRECTION MCHAN_TRANSFER_LEN_SIZE - - -#define MCHAN_CMD(len, dir, inc, loc_2d, ext_2d, int_en, event_en, broadcast) \ - (len | dir | inc | loc_2d | ext_2d | broadcast | int_en | event_en) - -typedef enum { - MCHAN_DMA_TRANSFER_DIRECTION_EXT2LOC = MCHAN_CMD_FLAG_DIRECTION_EXT2LOC, - MCHAN_DMA_TRANSFER_DIRECTION_LOC2EXT = MCHAN_CMD_FLAG_DIRECTION_LOC2EXT -} mchan_dma_transfer_direction_e; - -typedef struct { - int cmd; - int size; - - void *loc; - int loc_size_1d; - int loc_stride_1d; - - void *ext; - int ext_size_1d; - int ext_stride_1d; -} mchan_transfer_t; - -static int mchan_transfer_get_id() { - return MCHAN_READ_CMD(); -} - -static void mchan_transfer_push_1d(mchan_transfer_t trans) -{ - MCHAN_WRITE_CMD(trans.cmd); - MCHAN_WRITE_CMD(trans.loc); - MCHAN_WRITE_CMD(trans.ext); -} - -static void mchan_transfer_push_2d(mchan_transfer_t trans) -{ - MCHAN_WRITE_CMD(trans.cmd); - MCHAN_WRITE_CMD(trans.loc); - MCHAN_WRITE_CMD(trans.ext); -// MCHAN version 7 takes 2D "count" (length of 1D transfers) and stride in 2 steps, -// v7 takes it in 1 step with the stride shifted to the upper 16 bits. -#if MCHAN_VERSION==7 - MCHAN_WRITE_CMD(trans.ext_size_1d); - MCHAN_WRITE_CMD(trans.ext_stride_1d); -#else - MCHAN_WRITE_CMD(trans.ext_size_1d | (trans.ext_stride_1d << 16)); -#endif -} - -static void mchan_transfer_push(mchan_transfer_t trans) -{ - MCHAN_WRITE_CMD(trans.cmd); - MCHAN_WRITE_CMD(trans.loc); - MCHAN_WRITE_CMD(trans.ext); - - if (trans.ext_size_1d < trans.size) { - MCHAN_WRITE_CMD(trans.ext_size_1d); - MCHAN_WRITE_CMD(trans.ext_stride_1d); - } - - if (trans.loc_size_1d < trans.size) { - MCHAN_WRITE_CMD(trans.loc_size_1d); - MCHAN_WRITE_CMD(trans.loc_stride_1d); - } -} - -static void mchan_transfer_free(int tid) -{ - MCHAN_WRITE_STATUS(1 << tid); -} - -static int mchan_transfer_busy(int tid) -{ - return MCHAN_READ_STATUS() & (1 << tid); -} - -static void mchan_transfer_wait(int tid) -{ - #if defined(MCHAN_EVENT) - while(mchan_transfer_busy(tid)) eu_evt_maskWaitAndClr(1 << MCHAN_EVENT_BIT); - #elif defined(MCHAN_POLLED) - while(mchan_transfer_busy(tid)) ; - #endif -} - -#endif diff --git a/rt_nn_tests/xpnn_maxpool_2b/test.c b/rt_nn_tests/xpnn_maxpool_2b/test.c index 24edee2..d946a63 100644 --- a/rt_nn_tests/xpnn_maxpool_2b/test.c +++ b/rt_nn_tests/xpnn_maxpool_2b/test.c @@ -1,10 +1,7 @@ -// massive hack to enable rt compatibility -#define pi_core_id get_core_id #include #include #include -#include "dory_dma.h" #include "pmsis.h" @@ -138,27 +135,18 @@ void call_krnl_0(void) { } void test_0(void) { - uint32_t dma_channel = dory_dma_allocate(); - DMA_copy dma_tx = {0}; // DMA transfer inputs from L2 to L1 - dma_tx.ext = pIn_0; - dma_tx.loc = inp_l1; - dma_tx.number_of_1d_copies = 1; - dma_tx.number_of_2d_copies = 1; - dma_tx.length_1d_copy = 8192; - dma_tx.stride_1d = 1; - dma_tx.stride_2d = 1; - dma_tx.dir = 1; - dma_tx.tid = dma_channel; - dory_dma_memcpy_async(&dma_tx); + if (pi_core_id() == 0) { + plp_dma_memcpy(pIn_0, inp_l1, 8192, 1); + plp_dma_barrier(); + } + pi_cl_team_barrier(0); call_krnl_0(); // get outputs back with DMA - dma_tx.dir = 0; - dma_tx.ext = outputs; - dma_tx.loc = outp_l1; - dma_tx.length_1d_copy = 2048; - dory_dma_memcpy_async(&dma_tx); - dory_dma_free(&dma_tx); + if (pi_core_id() == 0) { + plp_dma_memcpy(outputs, outp_l1, 2048, 0); + plp_dma_barrier(); + } } diff --git a/rt_nn_tests/xpnnv2_conv/Makefile b/rt_nn_tests/xpnnv2_conv/Makefile index 19948cc..73b2b32 100644 --- a/rt_nn_tests/xpnnv2_conv/Makefile +++ b/rt_nn_tests/xpnnv2_conv/Makefile @@ -1,7 +1,6 @@ APP = test PULP_APP = test PULP_APP_SRCS = test.c -PULP_APP_SRCS += dory_dma.c PULP_APP_SRCS += xpulp_nn_mix_conv_u4_u8_i2.c PULP_APP_SRCS += xpulp_nn_mix_matmul_u4_u8_i2.c diff --git a/rt_nn_tests/xpnnv2_conv/dory_dma.c b/rt_nn_tests/xpnnv2_conv/dory_dma.c deleted file mode 100644 index 61c9116..0000000 --- a/rt_nn_tests/xpnnv2_conv/dory_dma.c +++ /dev/null @@ -1,176 +0,0 @@ -#include "dory_dma.h" - -#include "pmsis.h" - -#ifndef MCHAN_BASE_ADDR -// FIXME: For GAP9, this must point to ARCHI_MCHAN_EXT_ADDR!!! -// In PULP-SDK for Kraken, this is fixed. -// GAP8 hardware to be tested... -#define MCHAN_BASE_ADDR (ARCHI_MCHAN_DEMUX_ADDR) // CLUSTER_MCHAN_ADDR -#endif -#define MCHAN_EVENT -//#define MCHAN_POLLED -#ifdef MCHAN_EVENT -#define MCHAN_EVENT_BIT (ARCHI_CL_EVT_DMA0) // 8 -#endif -#include "mchan.h" - - -#if defined(MCHAN_POLLED) -#define MCHAN_FLAGS (MCHAN_CMD_FLAG_INCREMENTAL) -#elif defined(MCHAN_EVENT) -#define MCHAN_FLAGS (MCHAN_CMD_FLAG_EVENT_ENABLE | MCHAN_CMD_FLAG_INCREMENTAL) -#elif defined(MCHAN_INTERRUPT) -#define MCHAN_FLAGS (MCHAN_CMD_FLAG_INTERRUPT_ENABLE | MCHAN_CMD_FLAG_INCREMENTAL) -#endif - -#define MCHAN_FLAGS_1D (MCHAN_FLAGS) -#define MCHAN_FLAGS_2D (MCHAN_FLAGS | MCHAN_CMD_FLAG_2D_TRANSFER_EXTERNAL) - -#define MIN(a,b) ((a)<(b)?(a):(b)) - -void dory_dma_memcpy_hwc_to_chw(DMA_copy *copy){ - int start_pixel, stop_pixel; // "pixel" is a misnomer; the CHANNELS are divided between the cores - // this function assumes that a DW tile is always as wide as the complete feature map (this is enforced by DORY's tiler) - // if there is only 1 DMA control unit for the cluster (e.g., Kraken), we can't execute DMA calls on multiple clusters. -#ifndef SINGLE_CORE_DMA - int core_id = pi_core_id(); - int Log2Core = log2(NUM_CORES); - int number_of_copies_per_core = (copy->length_1d_copy >> Log2Core) + ((copy->length_1d_copy & (NUM_CORES-1))!=0); - start_pixel = MIN(number_of_copies_per_core * core_id, copy->length_1d_copy); - stop_pixel = MIN(start_pixel + number_of_copies_per_core, copy->length_1d_copy); -#else - start_pixel = 0; - stop_pixel = copy->length_1d_copy; -#endif - void * loc = copy->loc + copy->number_of_1d_copies*copy->number_of_2d_copies*start_pixel; - void * ext = copy->ext + start_pixel; - const int size_2d = copy->number_of_1d_copies * copy->number_of_2d_copies; - - for (int i=start_pixel; idir << MCHAN_CMD_SHIFT_DIRECTION | MCHAN_FLAGS_2D, - .size = size_2d, - .ext = ext, - .loc = loc, - .ext_size_1d = 1, // one byte at a time... - .ext_stride_1d = copy->stride_1d - }; -#ifdef SINGLE_CORE_DMA - if (pi_core_id() == 0) { -#endif - mchan_transfer_push_2d(trans); -#ifdef SINGLE_CORE_DMA - } -#endif -#ifdef ALWAYS_BLOCK_DMA_TRANSFERS // needed on GAP8 board - dory_dma_barrier(copy); -#endif - ext += 1; // next channel - loc += copy->number_of_1d_copies * copy->number_of_2d_copies; - } -} - -void dory_dma_memcpy_1d_async(DMA_copy *copy) { - if (pi_core_id() == 0) { - mchan_transfer_t trans = { - .cmd = copy->length_1d_copy * copy->number_of_1d_copies * copy->number_of_2d_copies | (copy->dir << MCHAN_CMD_SHIFT_DIRECTION) | MCHAN_FLAGS_1D, - .size = copy->length_1d_copy * copy->number_of_1d_copies * copy->number_of_2d_copies, - .ext = copy->ext, - .loc = copy->loc - }; - mchan_transfer_push_1d(trans); - } -} - -void dory_dma_memcpy_2d_async(DMA_copy *copy) { - if (pi_core_id() == 0) { - const int size_2d = copy->number_of_1d_copies * copy->length_1d_copy * copy->number_of_2d_copies; - const int stride = (copy->number_of_2d_copies == 1) ? copy->stride_1d : copy->stride_2d; - const int size_1d = (copy->number_of_2d_copies == 1) ? copy->length_1d_copy : copy->length_1d_copy * copy->number_of_1d_copies; - - mchan_transfer_t trans = { - .cmd = size_2d | copy->dir << MCHAN_CMD_SHIFT_DIRECTION | MCHAN_FLAGS_2D, - .size = size_2d, - .ext = copy->ext, - .loc = copy->loc, - .ext_size_1d = size_1d, - .ext_stride_1d = stride - }; - mchan_transfer_push_2d(trans); - } -} - -void dory_dma_memcpy_3d_async(DMA_copy *copy) { - int start_pixel, stop_pixel; -#ifndef SINGLE_CORE_DMA - int core_id = pi_core_id(); - int Log2Core = log2(NUM_CORES); - int number_of_2d_copies_per_core = (copy->number_of_2d_copies >> Log2Core) + ((copy->number_of_2d_copies & (NUM_CORES-1))!=0); - start_pixel = MIN(number_of_2d_copies_per_core * core_id, copy->number_of_2d_copies); - stop_pixel = MIN(start_pixel + number_of_2d_copies_per_core, copy->number_of_2d_copies); -#else - start_pixel = 0; - stop_pixel = copy->number_of_2d_copies; -#endif - void *ext = copy->ext + copy->stride_2d*start_pixel; - void *loc = copy->loc + copy->length_1d_copy*copy->number_of_1d_copies*start_pixel; - const int size_2d = copy->number_of_1d_copies * copy->length_1d_copy; - for (int i = start_pixel; i < stop_pixel; i++) { - mchan_transfer_t trans = { - .cmd = size_2d | copy->dir << MCHAN_CMD_SHIFT_DIRECTION | MCHAN_FLAGS_2D, - .size = size_2d, - .ext = ext, - .loc = loc, - .ext_size_1d = copy->length_1d_copy, - .ext_stride_1d = copy->stride_1d - }; -#ifdef SINGLE_CORE_DMA - if (pi_core_id() == 0) { -#endif - mchan_transfer_push_2d(trans); -#ifdef SINGLE_CORE_DMA - } -#endif -#ifdef ALWAYS_BLOCK_DMA_TRANSFERS // needed on GAP8 board - dory_dma_barrier(copy); -#endif - loc += size_2d; - ext += copy->stride_2d; - } -} - -void dory_dma_memcpy_async(DMA_copy *copy) { - if (copy->hwc_to_chw == 1) { - dory_dma_memcpy_hwc_to_chw(copy); - } - else if ((copy->number_of_2d_copies == 1 && copy->number_of_1d_copies == 1) || (copy->stride_1d == copy->length_1d_copy && copy->number_of_1d_copies * copy->length_1d_copy == copy->stride_2d) || (copy->number_of_2d_copies == 1 && copy->length_1d_copy == copy->stride_1d)) { - dory_dma_memcpy_1d_async(copy); - } else if ((copy->number_of_2d_copies == 1) || (copy->length_1d_copy == copy->stride_1d)) {// wrong! - dory_dma_memcpy_2d_async(copy); - } else { - dory_dma_memcpy_3d_async(copy); - } -#ifdef ALWAYS_BLOCK_DMA_TRANSFERS - dory_dma_barrier(copy); -#endif -} - -void dory_dma_free(DMA_copy *copy) { - mchan_transfer_free(copy->tid); -} - -void dory_dma_barrier(DMA_copy *copy) { -#ifdef SINGLE_CORE_DMA - // if DMA is only used by a single core (only 1 ctrl interface), other cores must not access its register file. Instead, they should all wait for core 0 to confirm the transfer is over. - if (pi_core_id() == 0) - mchan_transfer_wait(copy->tid); - pi_cl_team_barrier(0); -#else - mchan_transfer_wait(copy->tid); -#endif -} - -int dory_dma_allocate() { - return mchan_transfer_get_id(); -} diff --git a/rt_nn_tests/xpnnv2_conv/dory_dma.h b/rt_nn_tests/xpnnv2_conv/dory_dma.h deleted file mode 100644 index e0b3ef3..0000000 --- a/rt_nn_tests/xpnnv2_conv/dory_dma.h +++ /dev/null @@ -1,52 +0,0 @@ -/* - * dory.h - * Alessio Burrello - * - * Copyright (C) 2019-2020 University of Bologna - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef _DORY_DMA_H -#define _DORY_DMA_H - -typedef struct -{ - void *ext; - void *loc; - unsigned short hwc_to_chw; - unsigned short stride_2d; - unsigned short number_of_2d_copies; - unsigned short stride_1d; - unsigned short number_of_1d_copies; - unsigned short length_1d_copy; - int dir; // 0 l1->l2, 1 l2->l1 - int tid; -} DMA_copy; - -void dory_dma_memcpy_hwc_to_chw(DMA_copy *copy); - -void dory_dma_memcpy_1d_async(DMA_copy *copy); - -void dory_dma_memcpy_2d_async(DMA_copy *copy); - -void dory_dma_memcpy_3d_async(DMA_copy *copy); - -void dory_dma_memcpy_async(DMA_copy *copy); - -void dory_dma_free(DMA_copy *copy); - -void dory_dma_barrier(DMA_copy *copy); - -int dory_dma_allocate(); -#endif diff --git a/rt_nn_tests/xpnnv2_conv/mchan.h b/rt_nn_tests/xpnnv2_conv/mchan.h deleted file mode 100644 index 95882ab..0000000 --- a/rt_nn_tests/xpnnv2_conv/mchan.h +++ /dev/null @@ -1,137 +0,0 @@ -#ifndef _MCHAN_H -#define _MCHAN_H - -// Requires to have MCHAN_BASE_ADDR, MCHAN_EVENT defined outside of header -#ifndef MCHAN_BASE_ADDR -#error "[mchan.h] MCHAN_BASE_ADDR not defined!" -#endif - -#if !defined(MCHAN_EVENT) && !defined(MCHAN_POLLED) -#error "[mchan.h] Nor MCHAN_EVENT nor MCHAN_POLLED defined!" -#endif - -#if defined(MCHAN_EVENT) && !defined(MCHAN_EVENT_BIT) -#error "[mchan.h] MCHAN_EVENT_BIT should be defined when using events as signalization!" -#endif - -#include "pmsis.h" - -#define MCHAN_CMD_OFFSET 0 -#define MCHAN_STATUS_OFFSET 4 - -#define MCHAN_CMD_ADDR (MCHAN_BASE_ADDR + MCHAN_CMD_OFFSET) -#define MCHAN_STATUS_ADDR (MCHAN_BASE_ADDR + MCHAN_STATUS_OFFSET) - -#define READ_REG(addr) (*(volatile int*)(addr)) -#define WRITE_REG(addr, value) do { *(volatile int*)(addr) = (int)value; } while (0) - -#define MCHAN_READ_CMD() READ_REG(MCHAN_CMD_ADDR) -#define MCHAN_WRITE_CMD(value) WRITE_REG(MCHAN_CMD_ADDR, value) - -#define MCHAN_READ_STATUS() READ_REG(MCHAN_STATUS_ADDR) -#define MCHAN_WRITE_STATUS(value) WRITE_REG(MCHAN_STATUS_ADDR, value) - -// MCHAN version 7 has 1 more bit for the transfer length, so all the flag offsets are shifted by 1. Also, LOC (TCDM) striding is not supported in v6. -#if MCHAN_VERSION==7 -#define MCHAN_TRANSFER_LEN_SIZE (17) -#else -#define MCHAN_TRANSFER_LEN_SIZE (16) -#endif - -#define MCHAN_CMD_FLAG_DIRECTION_LOC2EXT (0 << (MCHAN_TRANSFER_LEN_SIZE + 0)) -#define MCHAN_CMD_FLAG_DIRECTION_EXT2LOC (1 << (MCHAN_TRANSFER_LEN_SIZE + 0)) -#define MCHAN_CMD_FLAG_INCREMENTAL (1 << (MCHAN_TRANSFER_LEN_SIZE + 1)) -#define MCHAN_CMD_FLAG_2D_TRANSFER_EXTERNAL (1 << (MCHAN_TRANSFER_LEN_SIZE + 2)) -#define MCHAN_CMD_FLAG_EVENT_ENABLE (1 << (MCHAN_TRANSFER_LEN_SIZE + 3)) -#define MCHAN_CMD_FLAG_INTERRUPT_ENABLE (1 << (MCHAN_TRANSFER_LEN_SIZE + 4)) -#define MCHAN_CMD_FLAG_BROADCAST_FINISH (1 << (MCHAN_TRANSFER_LEN_SIZE + 5)) -#if MCHAN_VERSION==7 -#define MCHAN_CMD_FLAG_2D_TRANSFER_LOCAL (1 << (MCHAN_TRANSFER_LEN_SIZE + 6)) // can only be used with MCHAN v7 -#endif -#define MCHAN_CMD_SHIFT_DIRECTION MCHAN_TRANSFER_LEN_SIZE - - -#define MCHAN_CMD(len, dir, inc, loc_2d, ext_2d, int_en, event_en, broadcast) \ - (len | dir | inc | loc_2d | ext_2d | broadcast | int_en | event_en) - -typedef enum { - MCHAN_DMA_TRANSFER_DIRECTION_EXT2LOC = MCHAN_CMD_FLAG_DIRECTION_EXT2LOC, - MCHAN_DMA_TRANSFER_DIRECTION_LOC2EXT = MCHAN_CMD_FLAG_DIRECTION_LOC2EXT -} mchan_dma_transfer_direction_e; - -typedef struct { - int cmd; - int size; - - void *loc; - int loc_size_1d; - int loc_stride_1d; - - void *ext; - int ext_size_1d; - int ext_stride_1d; -} mchan_transfer_t; - -static int mchan_transfer_get_id() { - return MCHAN_READ_CMD(); -} - -static void mchan_transfer_push_1d(mchan_transfer_t trans) -{ - MCHAN_WRITE_CMD(trans.cmd); - MCHAN_WRITE_CMD(trans.loc); - MCHAN_WRITE_CMD(trans.ext); -} - -static void mchan_transfer_push_2d(mchan_transfer_t trans) -{ - MCHAN_WRITE_CMD(trans.cmd); - MCHAN_WRITE_CMD(trans.loc); - MCHAN_WRITE_CMD(trans.ext); -// MCHAN version 7 takes 2D "count" (length of 1D transfers) and stride in 2 steps, -// v7 takes it in 1 step with the stride shifted to the upper 16 bits. -#if MCHAN_VERSION==7 - MCHAN_WRITE_CMD(trans.ext_size_1d); - MCHAN_WRITE_CMD(trans.ext_stride_1d); -#else - MCHAN_WRITE_CMD(trans.ext_size_1d | (trans.ext_stride_1d << 16)); -#endif -} - -static void mchan_transfer_push(mchan_transfer_t trans) -{ - MCHAN_WRITE_CMD(trans.cmd); - MCHAN_WRITE_CMD(trans.loc); - MCHAN_WRITE_CMD(trans.ext); - - if (trans.ext_size_1d < trans.size) { - MCHAN_WRITE_CMD(trans.ext_size_1d); - MCHAN_WRITE_CMD(trans.ext_stride_1d); - } - - if (trans.loc_size_1d < trans.size) { - MCHAN_WRITE_CMD(trans.loc_size_1d); - MCHAN_WRITE_CMD(trans.loc_stride_1d); - } -} - -static void mchan_transfer_free(int tid) -{ - MCHAN_WRITE_STATUS(1 << tid); -} - -static int mchan_transfer_busy(int tid) -{ - return MCHAN_READ_STATUS() & (1 << tid); -} - -static void mchan_transfer_wait(int tid) -{ - #if defined(MCHAN_EVENT) - while(mchan_transfer_busy(tid)) eu_evt_maskWaitAndClr(1 << MCHAN_EVENT_BIT); - #elif defined(MCHAN_POLLED) - while(mchan_transfer_busy(tid)) ; - #endif -} - -#endif diff --git a/rt_nn_tests/xpnnv2_conv/test.c b/rt_nn_tests/xpnnv2_conv/test.c index 19e7161..a332ad8 100644 --- a/rt_nn_tests/xpnnv2_conv/test.c +++ b/rt_nn_tests/xpnnv2_conv/test.c @@ -1,10 +1,7 @@ -// massive hack to enable rt compatibility -#define pi_core_id get_core_id #include #include #include -#include "dory_dma.h" #include "pmsis.h" @@ -184,39 +181,33 @@ void call_krnl_0(void) { } void test_0(void) { - uint32_t dma_channel = dory_dma_allocate(); - DMA_copy dma_tx = {0}; // DMA transfer inputs from L2 to L1 - dma_tx.ext = pIn_0; - dma_tx.loc = inp_l1; - dma_tx.number_of_1d_copies = 1; - dma_tx.number_of_2d_copies = 1; - dma_tx.length_1d_copy = 128; - dma_tx.stride_1d = 1; - dma_tx.stride_2d = 1; - dma_tx.dir = 1; - dma_tx.tid = dma_channel; - dory_dma_memcpy_async(&dma_tx); - dma_tx.ext = pLambda_0; - dma_tx.loc = lambda_l1; - dma_tx.length_1d_copy = 32 * 4; // 4 bytes per lambda item - dory_dma_memcpy_async(&dma_tx); - dma_tx.ext = pKappa_0; - dma_tx.loc = kappa_l1; - dory_dma_memcpy_async(&dma_tx); + if (pi_core_id() == 0) { + plp_dma_memcpy(pIn_0, inp_l1, 128, 1); + plp_dma_barrier(); + } + pi_cl_team_barrier(0); + if (pi_core_id() == 0) { + plp_dma_memcpy(pLambda_0, lambda_l1, 32 * 4, 1); // 4 bytes per lambda item + plp_dma_barrier(); + } + if (pi_core_id() == 0) { + plp_dma_memcpy(pKappa_0, kappa_l1, 32 * 4, 1); // 4 bytes per lambda item + plp_dma_barrier(); + } + pi_cl_team_barrier(0); // transfer weights - dma_tx.ext = pWeight_0; - dma_tx.loc = wt_l1; - dma_tx.length_1d_copy = 1152; - dory_dma_memcpy_async(&dma_tx); + if (pi_core_id() == 0) { + plp_dma_memcpy(pWeight_0, wt_l1, 1152, 1); + plp_dma_barrier(); + } + pi_cl_team_barrier(0); call_krnl_0(); // get outputs back with DMA - dma_tx.dir = 0; - dma_tx.ext = outputs; - dma_tx.loc = outp_l1; - dma_tx.length_1d_copy = 512; - dory_dma_memcpy_async(&dma_tx); - dory_dma_free(&dma_tx); + if (pi_core_id() == 0) { + plp_dma_memcpy(outputs, outp_l1, 512, 0); + plp_dma_barrier(); + } } diff --git a/rt_nn_tests/xptnn_conv/Makefile b/rt_nn_tests/xptnn_conv/Makefile index b728623..ea4fb4e 100644 --- a/rt_nn_tests/xptnn_conv/Makefile +++ b/rt_nn_tests/xptnn_conv/Makefile @@ -1,7 +1,6 @@ APP = test PULP_APP = test PULP_APP_SRCS = test.c -PULP_APP_SRCS += dory_dma.c PULP_APP_SRCS += xpulp_tnn_conv_ternary_signed.c PULP_APP_SRCS += xpulp_tnn_matmul_ternary_signed.c PULP_APP_SRCS += xpulp_tnn_matmul_ternary_signed_4x1.c diff --git a/rt_nn_tests/xptnn_conv/dory_dma.c b/rt_nn_tests/xptnn_conv/dory_dma.c deleted file mode 100644 index 61c9116..0000000 --- a/rt_nn_tests/xptnn_conv/dory_dma.c +++ /dev/null @@ -1,176 +0,0 @@ -#include "dory_dma.h" - -#include "pmsis.h" - -#ifndef MCHAN_BASE_ADDR -// FIXME: For GAP9, this must point to ARCHI_MCHAN_EXT_ADDR!!! -// In PULP-SDK for Kraken, this is fixed. -// GAP8 hardware to be tested... -#define MCHAN_BASE_ADDR (ARCHI_MCHAN_DEMUX_ADDR) // CLUSTER_MCHAN_ADDR -#endif -#define MCHAN_EVENT -//#define MCHAN_POLLED -#ifdef MCHAN_EVENT -#define MCHAN_EVENT_BIT (ARCHI_CL_EVT_DMA0) // 8 -#endif -#include "mchan.h" - - -#if defined(MCHAN_POLLED) -#define MCHAN_FLAGS (MCHAN_CMD_FLAG_INCREMENTAL) -#elif defined(MCHAN_EVENT) -#define MCHAN_FLAGS (MCHAN_CMD_FLAG_EVENT_ENABLE | MCHAN_CMD_FLAG_INCREMENTAL) -#elif defined(MCHAN_INTERRUPT) -#define MCHAN_FLAGS (MCHAN_CMD_FLAG_INTERRUPT_ENABLE | MCHAN_CMD_FLAG_INCREMENTAL) -#endif - -#define MCHAN_FLAGS_1D (MCHAN_FLAGS) -#define MCHAN_FLAGS_2D (MCHAN_FLAGS | MCHAN_CMD_FLAG_2D_TRANSFER_EXTERNAL) - -#define MIN(a,b) ((a)<(b)?(a):(b)) - -void dory_dma_memcpy_hwc_to_chw(DMA_copy *copy){ - int start_pixel, stop_pixel; // "pixel" is a misnomer; the CHANNELS are divided between the cores - // this function assumes that a DW tile is always as wide as the complete feature map (this is enforced by DORY's tiler) - // if there is only 1 DMA control unit for the cluster (e.g., Kraken), we can't execute DMA calls on multiple clusters. -#ifndef SINGLE_CORE_DMA - int core_id = pi_core_id(); - int Log2Core = log2(NUM_CORES); - int number_of_copies_per_core = (copy->length_1d_copy >> Log2Core) + ((copy->length_1d_copy & (NUM_CORES-1))!=0); - start_pixel = MIN(number_of_copies_per_core * core_id, copy->length_1d_copy); - stop_pixel = MIN(start_pixel + number_of_copies_per_core, copy->length_1d_copy); -#else - start_pixel = 0; - stop_pixel = copy->length_1d_copy; -#endif - void * loc = copy->loc + copy->number_of_1d_copies*copy->number_of_2d_copies*start_pixel; - void * ext = copy->ext + start_pixel; - const int size_2d = copy->number_of_1d_copies * copy->number_of_2d_copies; - - for (int i=start_pixel; idir << MCHAN_CMD_SHIFT_DIRECTION | MCHAN_FLAGS_2D, - .size = size_2d, - .ext = ext, - .loc = loc, - .ext_size_1d = 1, // one byte at a time... - .ext_stride_1d = copy->stride_1d - }; -#ifdef SINGLE_CORE_DMA - if (pi_core_id() == 0) { -#endif - mchan_transfer_push_2d(trans); -#ifdef SINGLE_CORE_DMA - } -#endif -#ifdef ALWAYS_BLOCK_DMA_TRANSFERS // needed on GAP8 board - dory_dma_barrier(copy); -#endif - ext += 1; // next channel - loc += copy->number_of_1d_copies * copy->number_of_2d_copies; - } -} - -void dory_dma_memcpy_1d_async(DMA_copy *copy) { - if (pi_core_id() == 0) { - mchan_transfer_t trans = { - .cmd = copy->length_1d_copy * copy->number_of_1d_copies * copy->number_of_2d_copies | (copy->dir << MCHAN_CMD_SHIFT_DIRECTION) | MCHAN_FLAGS_1D, - .size = copy->length_1d_copy * copy->number_of_1d_copies * copy->number_of_2d_copies, - .ext = copy->ext, - .loc = copy->loc - }; - mchan_transfer_push_1d(trans); - } -} - -void dory_dma_memcpy_2d_async(DMA_copy *copy) { - if (pi_core_id() == 0) { - const int size_2d = copy->number_of_1d_copies * copy->length_1d_copy * copy->number_of_2d_copies; - const int stride = (copy->number_of_2d_copies == 1) ? copy->stride_1d : copy->stride_2d; - const int size_1d = (copy->number_of_2d_copies == 1) ? copy->length_1d_copy : copy->length_1d_copy * copy->number_of_1d_copies; - - mchan_transfer_t trans = { - .cmd = size_2d | copy->dir << MCHAN_CMD_SHIFT_DIRECTION | MCHAN_FLAGS_2D, - .size = size_2d, - .ext = copy->ext, - .loc = copy->loc, - .ext_size_1d = size_1d, - .ext_stride_1d = stride - }; - mchan_transfer_push_2d(trans); - } -} - -void dory_dma_memcpy_3d_async(DMA_copy *copy) { - int start_pixel, stop_pixel; -#ifndef SINGLE_CORE_DMA - int core_id = pi_core_id(); - int Log2Core = log2(NUM_CORES); - int number_of_2d_copies_per_core = (copy->number_of_2d_copies >> Log2Core) + ((copy->number_of_2d_copies & (NUM_CORES-1))!=0); - start_pixel = MIN(number_of_2d_copies_per_core * core_id, copy->number_of_2d_copies); - stop_pixel = MIN(start_pixel + number_of_2d_copies_per_core, copy->number_of_2d_copies); -#else - start_pixel = 0; - stop_pixel = copy->number_of_2d_copies; -#endif - void *ext = copy->ext + copy->stride_2d*start_pixel; - void *loc = copy->loc + copy->length_1d_copy*copy->number_of_1d_copies*start_pixel; - const int size_2d = copy->number_of_1d_copies * copy->length_1d_copy; - for (int i = start_pixel; i < stop_pixel; i++) { - mchan_transfer_t trans = { - .cmd = size_2d | copy->dir << MCHAN_CMD_SHIFT_DIRECTION | MCHAN_FLAGS_2D, - .size = size_2d, - .ext = ext, - .loc = loc, - .ext_size_1d = copy->length_1d_copy, - .ext_stride_1d = copy->stride_1d - }; -#ifdef SINGLE_CORE_DMA - if (pi_core_id() == 0) { -#endif - mchan_transfer_push_2d(trans); -#ifdef SINGLE_CORE_DMA - } -#endif -#ifdef ALWAYS_BLOCK_DMA_TRANSFERS // needed on GAP8 board - dory_dma_barrier(copy); -#endif - loc += size_2d; - ext += copy->stride_2d; - } -} - -void dory_dma_memcpy_async(DMA_copy *copy) { - if (copy->hwc_to_chw == 1) { - dory_dma_memcpy_hwc_to_chw(copy); - } - else if ((copy->number_of_2d_copies == 1 && copy->number_of_1d_copies == 1) || (copy->stride_1d == copy->length_1d_copy && copy->number_of_1d_copies * copy->length_1d_copy == copy->stride_2d) || (copy->number_of_2d_copies == 1 && copy->length_1d_copy == copy->stride_1d)) { - dory_dma_memcpy_1d_async(copy); - } else if ((copy->number_of_2d_copies == 1) || (copy->length_1d_copy == copy->stride_1d)) {// wrong! - dory_dma_memcpy_2d_async(copy); - } else { - dory_dma_memcpy_3d_async(copy); - } -#ifdef ALWAYS_BLOCK_DMA_TRANSFERS - dory_dma_barrier(copy); -#endif -} - -void dory_dma_free(DMA_copy *copy) { - mchan_transfer_free(copy->tid); -} - -void dory_dma_barrier(DMA_copy *copy) { -#ifdef SINGLE_CORE_DMA - // if DMA is only used by a single core (only 1 ctrl interface), other cores must not access its register file. Instead, they should all wait for core 0 to confirm the transfer is over. - if (pi_core_id() == 0) - mchan_transfer_wait(copy->tid); - pi_cl_team_barrier(0); -#else - mchan_transfer_wait(copy->tid); -#endif -} - -int dory_dma_allocate() { - return mchan_transfer_get_id(); -} diff --git a/rt_nn_tests/xptnn_conv/dory_dma.h b/rt_nn_tests/xptnn_conv/dory_dma.h deleted file mode 100644 index e0b3ef3..0000000 --- a/rt_nn_tests/xptnn_conv/dory_dma.h +++ /dev/null @@ -1,52 +0,0 @@ -/* - * dory.h - * Alessio Burrello - * - * Copyright (C) 2019-2020 University of Bologna - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef _DORY_DMA_H -#define _DORY_DMA_H - -typedef struct -{ - void *ext; - void *loc; - unsigned short hwc_to_chw; - unsigned short stride_2d; - unsigned short number_of_2d_copies; - unsigned short stride_1d; - unsigned short number_of_1d_copies; - unsigned short length_1d_copy; - int dir; // 0 l1->l2, 1 l2->l1 - int tid; -} DMA_copy; - -void dory_dma_memcpy_hwc_to_chw(DMA_copy *copy); - -void dory_dma_memcpy_1d_async(DMA_copy *copy); - -void dory_dma_memcpy_2d_async(DMA_copy *copy); - -void dory_dma_memcpy_3d_async(DMA_copy *copy); - -void dory_dma_memcpy_async(DMA_copy *copy); - -void dory_dma_free(DMA_copy *copy); - -void dory_dma_barrier(DMA_copy *copy); - -int dory_dma_allocate(); -#endif diff --git a/rt_nn_tests/xptnn_conv/mchan.h b/rt_nn_tests/xptnn_conv/mchan.h deleted file mode 100644 index 95882ab..0000000 --- a/rt_nn_tests/xptnn_conv/mchan.h +++ /dev/null @@ -1,137 +0,0 @@ -#ifndef _MCHAN_H -#define _MCHAN_H - -// Requires to have MCHAN_BASE_ADDR, MCHAN_EVENT defined outside of header -#ifndef MCHAN_BASE_ADDR -#error "[mchan.h] MCHAN_BASE_ADDR not defined!" -#endif - -#if !defined(MCHAN_EVENT) && !defined(MCHAN_POLLED) -#error "[mchan.h] Nor MCHAN_EVENT nor MCHAN_POLLED defined!" -#endif - -#if defined(MCHAN_EVENT) && !defined(MCHAN_EVENT_BIT) -#error "[mchan.h] MCHAN_EVENT_BIT should be defined when using events as signalization!" -#endif - -#include "pmsis.h" - -#define MCHAN_CMD_OFFSET 0 -#define MCHAN_STATUS_OFFSET 4 - -#define MCHAN_CMD_ADDR (MCHAN_BASE_ADDR + MCHAN_CMD_OFFSET) -#define MCHAN_STATUS_ADDR (MCHAN_BASE_ADDR + MCHAN_STATUS_OFFSET) - -#define READ_REG(addr) (*(volatile int*)(addr)) -#define WRITE_REG(addr, value) do { *(volatile int*)(addr) = (int)value; } while (0) - -#define MCHAN_READ_CMD() READ_REG(MCHAN_CMD_ADDR) -#define MCHAN_WRITE_CMD(value) WRITE_REG(MCHAN_CMD_ADDR, value) - -#define MCHAN_READ_STATUS() READ_REG(MCHAN_STATUS_ADDR) -#define MCHAN_WRITE_STATUS(value) WRITE_REG(MCHAN_STATUS_ADDR, value) - -// MCHAN version 7 has 1 more bit for the transfer length, so all the flag offsets are shifted by 1. Also, LOC (TCDM) striding is not supported in v6. -#if MCHAN_VERSION==7 -#define MCHAN_TRANSFER_LEN_SIZE (17) -#else -#define MCHAN_TRANSFER_LEN_SIZE (16) -#endif - -#define MCHAN_CMD_FLAG_DIRECTION_LOC2EXT (0 << (MCHAN_TRANSFER_LEN_SIZE + 0)) -#define MCHAN_CMD_FLAG_DIRECTION_EXT2LOC (1 << (MCHAN_TRANSFER_LEN_SIZE + 0)) -#define MCHAN_CMD_FLAG_INCREMENTAL (1 << (MCHAN_TRANSFER_LEN_SIZE + 1)) -#define MCHAN_CMD_FLAG_2D_TRANSFER_EXTERNAL (1 << (MCHAN_TRANSFER_LEN_SIZE + 2)) -#define MCHAN_CMD_FLAG_EVENT_ENABLE (1 << (MCHAN_TRANSFER_LEN_SIZE + 3)) -#define MCHAN_CMD_FLAG_INTERRUPT_ENABLE (1 << (MCHAN_TRANSFER_LEN_SIZE + 4)) -#define MCHAN_CMD_FLAG_BROADCAST_FINISH (1 << (MCHAN_TRANSFER_LEN_SIZE + 5)) -#if MCHAN_VERSION==7 -#define MCHAN_CMD_FLAG_2D_TRANSFER_LOCAL (1 << (MCHAN_TRANSFER_LEN_SIZE + 6)) // can only be used with MCHAN v7 -#endif -#define MCHAN_CMD_SHIFT_DIRECTION MCHAN_TRANSFER_LEN_SIZE - - -#define MCHAN_CMD(len, dir, inc, loc_2d, ext_2d, int_en, event_en, broadcast) \ - (len | dir | inc | loc_2d | ext_2d | broadcast | int_en | event_en) - -typedef enum { - MCHAN_DMA_TRANSFER_DIRECTION_EXT2LOC = MCHAN_CMD_FLAG_DIRECTION_EXT2LOC, - MCHAN_DMA_TRANSFER_DIRECTION_LOC2EXT = MCHAN_CMD_FLAG_DIRECTION_LOC2EXT -} mchan_dma_transfer_direction_e; - -typedef struct { - int cmd; - int size; - - void *loc; - int loc_size_1d; - int loc_stride_1d; - - void *ext; - int ext_size_1d; - int ext_stride_1d; -} mchan_transfer_t; - -static int mchan_transfer_get_id() { - return MCHAN_READ_CMD(); -} - -static void mchan_transfer_push_1d(mchan_transfer_t trans) -{ - MCHAN_WRITE_CMD(trans.cmd); - MCHAN_WRITE_CMD(trans.loc); - MCHAN_WRITE_CMD(trans.ext); -} - -static void mchan_transfer_push_2d(mchan_transfer_t trans) -{ - MCHAN_WRITE_CMD(trans.cmd); - MCHAN_WRITE_CMD(trans.loc); - MCHAN_WRITE_CMD(trans.ext); -// MCHAN version 7 takes 2D "count" (length of 1D transfers) and stride in 2 steps, -// v7 takes it in 1 step with the stride shifted to the upper 16 bits. -#if MCHAN_VERSION==7 - MCHAN_WRITE_CMD(trans.ext_size_1d); - MCHAN_WRITE_CMD(trans.ext_stride_1d); -#else - MCHAN_WRITE_CMD(trans.ext_size_1d | (trans.ext_stride_1d << 16)); -#endif -} - -static void mchan_transfer_push(mchan_transfer_t trans) -{ - MCHAN_WRITE_CMD(trans.cmd); - MCHAN_WRITE_CMD(trans.loc); - MCHAN_WRITE_CMD(trans.ext); - - if (trans.ext_size_1d < trans.size) { - MCHAN_WRITE_CMD(trans.ext_size_1d); - MCHAN_WRITE_CMD(trans.ext_stride_1d); - } - - if (trans.loc_size_1d < trans.size) { - MCHAN_WRITE_CMD(trans.loc_size_1d); - MCHAN_WRITE_CMD(trans.loc_stride_1d); - } -} - -static void mchan_transfer_free(int tid) -{ - MCHAN_WRITE_STATUS(1 << tid); -} - -static int mchan_transfer_busy(int tid) -{ - return MCHAN_READ_STATUS() & (1 << tid); -} - -static void mchan_transfer_wait(int tid) -{ - #if defined(MCHAN_EVENT) - while(mchan_transfer_busy(tid)) eu_evt_maskWaitAndClr(1 << MCHAN_EVENT_BIT); - #elif defined(MCHAN_POLLED) - while(mchan_transfer_busy(tid)) ; - #endif -} - -#endif diff --git a/rt_nn_tests/xptnn_conv/test.c b/rt_nn_tests/xptnn_conv/test.c index 46d3fdd..ea71523 100644 --- a/rt_nn_tests/xptnn_conv/test.c +++ b/rt_nn_tests/xptnn_conv/test.c @@ -1,10 +1,7 @@ -// massive hack to enable rt compatibility -#define pi_core_id get_core_id #include #include #include -#include "dory_dma.h" #include "xpulp_tnn_matmul_ternary.h" #include "xpulp_tnn_matmul_ternary_4x1.h" @@ -190,37 +187,30 @@ void call_krnl_0(void) { } void test_0(void) { - uint32_t dma_channel = dory_dma_allocate(); - DMA_copy dma_tx = {0}; // DMA transfer inputs from L2 to L1 - dma_tx.ext = pIn_0; - dma_tx.loc = inp_l1; - dma_tx.number_of_1d_copies = 1; - dma_tx.number_of_2d_copies = 1; - dma_tx.length_1d_copy = 64; - dma_tx.stride_1d = 1; - dma_tx.stride_2d = 1; - dma_tx.dir = 1; - dma_tx.tid = dma_channel; - dory_dma_memcpy_async(&dma_tx); + if (pi_core_id() == 0) { + plp_dma_memcpy(pIn_0, inp_l1, 64, 1); + plp_dma_barrier(); + } + pi_cl_team_barrier(0); // transfer thresholds - dma_tx.ext = pThr_0; - dma_tx.loc = threshs_l1; - dma_tx.length_1d_copy = 40 * 4; // 4 bytes per set of 2 thresholds - dory_dma_memcpy_async(&dma_tx); + if (pi_core_id() == 0) { + plp_dma_memcpy(pThr_0, threshs_l1, 40 * 4, 1); // 4 bytes per set of 2 thresholds + plp_dma_barrier(); + } + pi_cl_team_barrier(0); // transfer weights - dma_tx.ext = pWeight_0; - dma_tx.loc = wt_l1; - dma_tx.length_1d_copy = 1440; - dory_dma_memcpy_async(&dma_tx); + if (pi_core_id() == 0) { + plp_dma_memcpy(pWeight_0, wt_l1, 1440, 1); + plp_dma_barrier(); + } + pi_cl_team_barrier(0); call_krnl_0(); // get outputs back with DMA - dma_tx.dir = 0; - dma_tx.ext = outputs; - dma_tx.loc = outp_l1; - dma_tx.length_1d_copy = 128; - dory_dma_memcpy_async(&dma_tx); - dory_dma_free(&dma_tx); + if (pi_core_id() == 0) { + plp_dma_memcpy(outputs, outp_l1, 128, 0); + plp_dma_barrier(); + } } diff --git a/rt_nn_tests/xptnn_linear/Makefile b/rt_nn_tests/xptnn_linear/Makefile index 4cb7f4f..3bcbb3d 100644 --- a/rt_nn_tests/xptnn_linear/Makefile +++ b/rt_nn_tests/xptnn_linear/Makefile @@ -1,7 +1,6 @@ APP = test PULP_APP = test PULP_APP_SRCS = test.c -PULP_APP_SRCS += dory_dma.c PULP_APP_SRCS += xpulp_tnn_linear_ternary_i32_signed.c CORE=8 diff --git a/rt_nn_tests/xptnn_linear/dory_dma.c b/rt_nn_tests/xptnn_linear/dory_dma.c deleted file mode 100644 index 61c9116..0000000 --- a/rt_nn_tests/xptnn_linear/dory_dma.c +++ /dev/null @@ -1,176 +0,0 @@ -#include "dory_dma.h" - -#include "pmsis.h" - -#ifndef MCHAN_BASE_ADDR -// FIXME: For GAP9, this must point to ARCHI_MCHAN_EXT_ADDR!!! -// In PULP-SDK for Kraken, this is fixed. -// GAP8 hardware to be tested... -#define MCHAN_BASE_ADDR (ARCHI_MCHAN_DEMUX_ADDR) // CLUSTER_MCHAN_ADDR -#endif -#define MCHAN_EVENT -//#define MCHAN_POLLED -#ifdef MCHAN_EVENT -#define MCHAN_EVENT_BIT (ARCHI_CL_EVT_DMA0) // 8 -#endif -#include "mchan.h" - - -#if defined(MCHAN_POLLED) -#define MCHAN_FLAGS (MCHAN_CMD_FLAG_INCREMENTAL) -#elif defined(MCHAN_EVENT) -#define MCHAN_FLAGS (MCHAN_CMD_FLAG_EVENT_ENABLE | MCHAN_CMD_FLAG_INCREMENTAL) -#elif defined(MCHAN_INTERRUPT) -#define MCHAN_FLAGS (MCHAN_CMD_FLAG_INTERRUPT_ENABLE | MCHAN_CMD_FLAG_INCREMENTAL) -#endif - -#define MCHAN_FLAGS_1D (MCHAN_FLAGS) -#define MCHAN_FLAGS_2D (MCHAN_FLAGS | MCHAN_CMD_FLAG_2D_TRANSFER_EXTERNAL) - -#define MIN(a,b) ((a)<(b)?(a):(b)) - -void dory_dma_memcpy_hwc_to_chw(DMA_copy *copy){ - int start_pixel, stop_pixel; // "pixel" is a misnomer; the CHANNELS are divided between the cores - // this function assumes that a DW tile is always as wide as the complete feature map (this is enforced by DORY's tiler) - // if there is only 1 DMA control unit for the cluster (e.g., Kraken), we can't execute DMA calls on multiple clusters. -#ifndef SINGLE_CORE_DMA - int core_id = pi_core_id(); - int Log2Core = log2(NUM_CORES); - int number_of_copies_per_core = (copy->length_1d_copy >> Log2Core) + ((copy->length_1d_copy & (NUM_CORES-1))!=0); - start_pixel = MIN(number_of_copies_per_core * core_id, copy->length_1d_copy); - stop_pixel = MIN(start_pixel + number_of_copies_per_core, copy->length_1d_copy); -#else - start_pixel = 0; - stop_pixel = copy->length_1d_copy; -#endif - void * loc = copy->loc + copy->number_of_1d_copies*copy->number_of_2d_copies*start_pixel; - void * ext = copy->ext + start_pixel; - const int size_2d = copy->number_of_1d_copies * copy->number_of_2d_copies; - - for (int i=start_pixel; idir << MCHAN_CMD_SHIFT_DIRECTION | MCHAN_FLAGS_2D, - .size = size_2d, - .ext = ext, - .loc = loc, - .ext_size_1d = 1, // one byte at a time... - .ext_stride_1d = copy->stride_1d - }; -#ifdef SINGLE_CORE_DMA - if (pi_core_id() == 0) { -#endif - mchan_transfer_push_2d(trans); -#ifdef SINGLE_CORE_DMA - } -#endif -#ifdef ALWAYS_BLOCK_DMA_TRANSFERS // needed on GAP8 board - dory_dma_barrier(copy); -#endif - ext += 1; // next channel - loc += copy->number_of_1d_copies * copy->number_of_2d_copies; - } -} - -void dory_dma_memcpy_1d_async(DMA_copy *copy) { - if (pi_core_id() == 0) { - mchan_transfer_t trans = { - .cmd = copy->length_1d_copy * copy->number_of_1d_copies * copy->number_of_2d_copies | (copy->dir << MCHAN_CMD_SHIFT_DIRECTION) | MCHAN_FLAGS_1D, - .size = copy->length_1d_copy * copy->number_of_1d_copies * copy->number_of_2d_copies, - .ext = copy->ext, - .loc = copy->loc - }; - mchan_transfer_push_1d(trans); - } -} - -void dory_dma_memcpy_2d_async(DMA_copy *copy) { - if (pi_core_id() == 0) { - const int size_2d = copy->number_of_1d_copies * copy->length_1d_copy * copy->number_of_2d_copies; - const int stride = (copy->number_of_2d_copies == 1) ? copy->stride_1d : copy->stride_2d; - const int size_1d = (copy->number_of_2d_copies == 1) ? copy->length_1d_copy : copy->length_1d_copy * copy->number_of_1d_copies; - - mchan_transfer_t trans = { - .cmd = size_2d | copy->dir << MCHAN_CMD_SHIFT_DIRECTION | MCHAN_FLAGS_2D, - .size = size_2d, - .ext = copy->ext, - .loc = copy->loc, - .ext_size_1d = size_1d, - .ext_stride_1d = stride - }; - mchan_transfer_push_2d(trans); - } -} - -void dory_dma_memcpy_3d_async(DMA_copy *copy) { - int start_pixel, stop_pixel; -#ifndef SINGLE_CORE_DMA - int core_id = pi_core_id(); - int Log2Core = log2(NUM_CORES); - int number_of_2d_copies_per_core = (copy->number_of_2d_copies >> Log2Core) + ((copy->number_of_2d_copies & (NUM_CORES-1))!=0); - start_pixel = MIN(number_of_2d_copies_per_core * core_id, copy->number_of_2d_copies); - stop_pixel = MIN(start_pixel + number_of_2d_copies_per_core, copy->number_of_2d_copies); -#else - start_pixel = 0; - stop_pixel = copy->number_of_2d_copies; -#endif - void *ext = copy->ext + copy->stride_2d*start_pixel; - void *loc = copy->loc + copy->length_1d_copy*copy->number_of_1d_copies*start_pixel; - const int size_2d = copy->number_of_1d_copies * copy->length_1d_copy; - for (int i = start_pixel; i < stop_pixel; i++) { - mchan_transfer_t trans = { - .cmd = size_2d | copy->dir << MCHAN_CMD_SHIFT_DIRECTION | MCHAN_FLAGS_2D, - .size = size_2d, - .ext = ext, - .loc = loc, - .ext_size_1d = copy->length_1d_copy, - .ext_stride_1d = copy->stride_1d - }; -#ifdef SINGLE_CORE_DMA - if (pi_core_id() == 0) { -#endif - mchan_transfer_push_2d(trans); -#ifdef SINGLE_CORE_DMA - } -#endif -#ifdef ALWAYS_BLOCK_DMA_TRANSFERS // needed on GAP8 board - dory_dma_barrier(copy); -#endif - loc += size_2d; - ext += copy->stride_2d; - } -} - -void dory_dma_memcpy_async(DMA_copy *copy) { - if (copy->hwc_to_chw == 1) { - dory_dma_memcpy_hwc_to_chw(copy); - } - else if ((copy->number_of_2d_copies == 1 && copy->number_of_1d_copies == 1) || (copy->stride_1d == copy->length_1d_copy && copy->number_of_1d_copies * copy->length_1d_copy == copy->stride_2d) || (copy->number_of_2d_copies == 1 && copy->length_1d_copy == copy->stride_1d)) { - dory_dma_memcpy_1d_async(copy); - } else if ((copy->number_of_2d_copies == 1) || (copy->length_1d_copy == copy->stride_1d)) {// wrong! - dory_dma_memcpy_2d_async(copy); - } else { - dory_dma_memcpy_3d_async(copy); - } -#ifdef ALWAYS_BLOCK_DMA_TRANSFERS - dory_dma_barrier(copy); -#endif -} - -void dory_dma_free(DMA_copy *copy) { - mchan_transfer_free(copy->tid); -} - -void dory_dma_barrier(DMA_copy *copy) { -#ifdef SINGLE_CORE_DMA - // if DMA is only used by a single core (only 1 ctrl interface), other cores must not access its register file. Instead, they should all wait for core 0 to confirm the transfer is over. - if (pi_core_id() == 0) - mchan_transfer_wait(copy->tid); - pi_cl_team_barrier(0); -#else - mchan_transfer_wait(copy->tid); -#endif -} - -int dory_dma_allocate() { - return mchan_transfer_get_id(); -} diff --git a/rt_nn_tests/xptnn_linear/dory_dma.h b/rt_nn_tests/xptnn_linear/dory_dma.h deleted file mode 100644 index e0b3ef3..0000000 --- a/rt_nn_tests/xptnn_linear/dory_dma.h +++ /dev/null @@ -1,52 +0,0 @@ -/* - * dory.h - * Alessio Burrello - * - * Copyright (C) 2019-2020 University of Bologna - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef _DORY_DMA_H -#define _DORY_DMA_H - -typedef struct -{ - void *ext; - void *loc; - unsigned short hwc_to_chw; - unsigned short stride_2d; - unsigned short number_of_2d_copies; - unsigned short stride_1d; - unsigned short number_of_1d_copies; - unsigned short length_1d_copy; - int dir; // 0 l1->l2, 1 l2->l1 - int tid; -} DMA_copy; - -void dory_dma_memcpy_hwc_to_chw(DMA_copy *copy); - -void dory_dma_memcpy_1d_async(DMA_copy *copy); - -void dory_dma_memcpy_2d_async(DMA_copy *copy); - -void dory_dma_memcpy_3d_async(DMA_copy *copy); - -void dory_dma_memcpy_async(DMA_copy *copy); - -void dory_dma_free(DMA_copy *copy); - -void dory_dma_barrier(DMA_copy *copy); - -int dory_dma_allocate(); -#endif diff --git a/rt_nn_tests/xptnn_linear/hsgs_wave.do b/rt_nn_tests/xptnn_linear/hsgs_wave.do deleted file mode 100644 index 03f59b7..0000000 --- a/rt_nn_tests/xptnn_linear/hsgs_wave.do +++ /dev/null @@ -1,1384 +0,0 @@ -onerror {resume} -quietly WaveActivateNextPane {} 0 -add wave -noupdate -expand -subitemconfig {/pulp_cluster_tb/i_mock_uart/i_axi_to_axi_lite_intf/full_req.w -expand} /pulp_cluster_tb/i_mock_uart/i_axi_to_axi_lite_intf/full_req -add wave -noupdate -group mchan /pulp_cluster_tb/cluster_i/dmac_wrap_i/s_tcdm_bus_wen -add wave -noupdate -group mchan /pulp_cluster_tb/cluster_i/dmac_wrap_i/s_tcdm_bus_wdata -add wave -noupdate -group mchan /pulp_cluster_tb/cluster_i/dmac_wrap_i/s_tcdm_bus_add -add wave -noupdate -group mchan /pulp_cluster_tb/cluster_i/dmac_wrap_i/s_tcdm_bus_req -add wave -noupdate -group mchan /pulp_cluster_tb/cluster_i/dmac_wrap_i/s_tcdm_bus_r_valid -add wave -noupdate -group mchan /pulp_cluster_tb/cluster_i/dmac_wrap_i/s_tcdm_bus_r_rdata -add wave -noupdate -group mchan /pulp_cluster_tb/cluster_i/dmac_wrap_i/s_tcdm_bus_gnt -add wave -noupdate -group mchan /pulp_cluster_tb/cluster_i/dmac_wrap_i/s_tcdm_bus_be -add wave -noupdate -group mchan -expand -subitemconfig {/pulp_cluster_tb/cluster_i/dmac_wrap_i/ext_master_req_o.ar -expand} /pulp_cluster_tb/cluster_i/dmac_wrap_i/ext_master_req_o -add wave -noupdate -group mchan -expand -subitemconfig {/pulp_cluster_tb/cluster_i/dmac_wrap_i/ext_master_resp_i.r -expand} /pulp_cluster_tb/cluster_i/dmac_wrap_i/ext_master_resp_i -add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/clk_i} -add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/rst_ni} -add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/clock_en_i} -add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/test_en_i} -add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/fregfile_disable_i} -add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/boot_addr_i} -add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/core_id_i} -add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/cluster_id_i} -add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/instr_req_o} -add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/instr_gnt_i} -add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/instr_rvalid_i} -add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/instr_addr_o} -add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/instr_rdata_i} -add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/data_req_o} -add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/data_gnt_i} -add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/data_rvalid_i} -add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/data_we_o} -add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/data_be_o} -add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/data_addr_o} -add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/data_wdata_o} -add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/data_rdata_i} -add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/data_unaligned_o} -add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/apu_master_req_o} -add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/apu_master_ready_o} -add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/apu_master_gnt_i} -add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/apu_master_operands_o} -add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/apu_master_op_o} -add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/apu_master_type_o} -add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/apu_master_flags_o} -add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/apu_master_valid_i} -add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/apu_master_result_i} -add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/apu_master_flags_i} -add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/irq_i} -add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/irq_id_i} -add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/irq_ack_o} -add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/irq_id_o} -add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/irq_sec_i} -add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/sec_lvl_o} -add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/debug_req_i} -add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/fetch_enable_i} -add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/core_busy_o} -add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/ext_perf_counters_i} -add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/is_hwlp_id} -add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/hwlp_dec_cnt_id} -add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/instr_valid_id} -add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/instr_rdata_id} -add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/is_compressed_id} -add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/is_fetch_failed_id} -add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/illegal_c_insn_id} -add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/pc_if} -add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/pc_id} -add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/clear_instr_valid} -add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/pc_set} -add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/pc_mux_id} -add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/exc_pc_mux_id} -add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/exc_cause} -add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/trap_addr_mux} -add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/lsu_load_err} -add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/lsu_store_err} -add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/lsu_tosprw_ex} -add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/lsu_tospra_ex} -add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/dot_spr_operand_ex} -add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/update_w_id} -add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/update_a_id} -add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/is_decoding} -add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/useincr_addr_ex} -add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/data_misaligned} -add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/mult_multicycle} -add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/jump_target_id} -add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/jump_target_ex} -add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/branch_in_ex} -add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/branch_decision} -add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/ctrl_busy} -add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/if_busy} -add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/lsu_busy} -add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/apu_busy} -add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/pc_ex} -add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/alu_en_ex} -add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/alu_operator_ex} -add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/alu_operand_a_ex} -add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/alu_operand_b_ex} -add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/alu_operand_c_ex} -add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/bmask_a_ex} -add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/bmask_b_ex} -add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/imm_vec_ext_ex} -add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/alu_vec_mode_ex} -add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/ivec_op_ex} -add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/alu_is_clpx_ex} -add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/alu_is_subrot_ex} -add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/alu_clpx_shift_ex} -add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/mult_operator_ex} -add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/mult_operand_a_ex} -add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/mult_operand_b_ex} -add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/mult_operand_c_ex} -add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/mult_en_ex} -add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/mult_sel_subword_ex} -add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/mult_signed_mode_ex} -add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/mult_imm_ex} -add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/mult_dot_op_h_a_ex} -add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/mult_dot_op_h_b_ex} -add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/mult_dot_op_b_a_ex} -add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/mult_dot_op_b_b_ex} -add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/mult_dot_op_n_a_ex} -add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/mult_dot_op_n_b_ex} -add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/mult_dot_op_c_a_ex} -add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/mult_dot_op_c_b_ex} -add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/mult_dot_op_c_ex} -add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/mult_dot_signed_ex} -add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/mult_is_clpx_ex_o} -add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/mult_clpx_shift_ex} -add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/mult_clpx_img_ex} -add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/fprec_csr} -add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/frm_csr} -add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/fflags} -add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/fflags_csr} -add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/fflags_we} -add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/apu_en_ex} -add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/apu_type_ex} -add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/apu_flags_ex} -add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/apu_op_ex} -add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/apu_lat_ex} -add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/apu_operands_ex} -add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/apu_waddr_ex} -add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/apu_read_regs} -add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/apu_read_regs_valid} -add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/apu_read_dep} -add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/apu_write_regs} -add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/apu_write_regs_valid} -add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/apu_write_dep} -add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/perf_apu_type} -add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/perf_apu_cont} -add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/perf_apu_dep} -add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/perf_apu_wb} -add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/regfile_waddr_ex} -add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/regfile_we_ex} -add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/regfile_waddr_fw_wb} -add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/regfile_we_wb} -add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/regfile_wdata} -add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/regfile_alu_waddr_ex} -add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/regfile_alu_waddr2_ex} -add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/regfile_alu_we_ex} -add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/regfile_alu_waddr_fw} -add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/regfile_alu_we_fw} -add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/regfile_alu_wdata_fw} -add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/ivec_fmt_csr} -add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/current_cycle_csr} -add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/current_cycle_ex} -add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/skip_size_csr} -add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/sb_legacy_mode} -add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/csr_access_ex} -add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/csr_op_ex} -add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/mtvec} -add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/utvec} -add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/csr_access} -add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/csr_op} -add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/csr_addr} -add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/csr_addr_int} -add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/csr_rdata} -add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/csr_wdata} -add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/current_priv_lvl} -add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/csr_macl_op} -add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/csr_macl_addr} -add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/csr_macl_wdata} -add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/a_address} -add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/w_address} -add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/a_stride} -add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/w_stride} -add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/a_rollback} -add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/w_rollback} -add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/a_skip} -add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/w_skip} -add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/macl_a_rstn} -add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/macl_w_rstn} -add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/curr_cyc_sel} -add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/data_we_ex} -add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/data_type_ex} -add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/data_sign_ext_ex} -add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/data_reg_offset_ex} -add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/data_req_ex} -add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/data_load_event_ex} -add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/data_misaligned_ex} -add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/lsu_rdata} -add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/data_rvalid_ex} -add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/loadComputeVLIW_ex} -add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/halt_if} -add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_ready} -add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/ex_ready} -add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_valid} -add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/ex_valid} -add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/wb_valid} -add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/lsu_ready_ex} -add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/lsu_ready_wb} -add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/apu_ready_wb} -add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/instr_req_int} -add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/m_irq_enable} -add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/u_irq_enable} -add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/csr_irq_sec} -add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/mepc} -add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/uepc} -add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/depc} -add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/csr_save_cause} -add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/csr_save_if} -add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/csr_save_id} -add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/csr_save_ex} -add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/csr_cause} -add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/csr_restore_mret_id} -add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/csr_restore_uret_id} -add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/csr_restore_dret_id} -add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/debug_mode} -add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/debug_cause} -add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/debug_csr_save} -add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/debug_single_step} -add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/debug_ebreakm} -add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/debug_ebreaku} -add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/hwlp_start} -add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/hwlp_end} -add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/hwlp_cnt} -add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/csr_hwlp_regid} -add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/csr_hwlp_we} -add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/csr_hwlp_data} -add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/perf_imiss} -add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/perf_jump} -add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/perf_jr_stall} -add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/perf_ld_stall} -add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/perf_pipeline_stall} -add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/core_ctrl_firstfetch} -add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/core_busy_int} -add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/core_busy_q} -add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/pmp_addr} -add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/pmp_cfg} -add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/data_req_pmp} -add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/data_addr_pmp} -add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/data_we_pmp} -add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/data_gnt_pmp} -add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/data_err_pmp} -add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/data_err_ack} -add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/instr_req_pmp} -add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/instr_gnt_pmp} -add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/instr_addr_pmp} -add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/instr_err_pmp} -add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/mpc_next_cycle} -add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/mux_sel_wcsr} -add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/is_interrupt} -add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/clk} -add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/clock_en} -add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/sleeping} -add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/mult_is_clpx_ex} -add wave -noupdate -group core0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/tracer_clk} -add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/clk_i} -add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/rst_ni} -add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/clock_en_i} -add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/test_en_i} -add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/fregfile_disable_i} -add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/boot_addr_i} -add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/core_id_i} -add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/cluster_id_i} -add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/instr_req_o} -add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/instr_gnt_i} -add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/instr_rvalid_i} -add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/instr_addr_o} -add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/instr_rdata_i} -add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/data_req_o} -add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/data_gnt_i} -add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/data_rvalid_i} -add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/data_we_o} -add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/data_be_o} -add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/data_addr_o} -add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/data_wdata_o} -add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/data_rdata_i} -add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/data_unaligned_o} -add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/apu_master_req_o} -add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/apu_master_ready_o} -add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/apu_master_gnt_i} -add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/apu_master_operands_o} -add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/apu_master_op_o} -add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/apu_master_type_o} -add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/apu_master_flags_o} -add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/apu_master_valid_i} -add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/apu_master_result_i} -add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/apu_master_flags_i} -add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/irq_i} -add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/irq_id_i} -add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/irq_ack_o} -add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/irq_id_o} -add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/irq_sec_i} -add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/sec_lvl_o} -add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/debug_req_i} -add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/fetch_enable_i} -add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/core_busy_o} -add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/ext_perf_counters_i} -add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/is_hwlp_id} -add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/hwlp_dec_cnt_id} -add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/instr_valid_id} -add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/instr_rdata_id} -add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/is_compressed_id} -add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/is_fetch_failed_id} -add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/illegal_c_insn_id} -add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/pc_if} -add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/pc_id} -add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/clear_instr_valid} -add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/pc_set} -add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/pc_mux_id} -add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/exc_pc_mux_id} -add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/exc_cause} -add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/trap_addr_mux} -add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/lsu_load_err} -add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/lsu_store_err} -add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/lsu_tosprw_ex} -add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/lsu_tospra_ex} -add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/dot_spr_operand_ex} -add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/update_w_id} -add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/update_a_id} -add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/is_decoding} -add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/useincr_addr_ex} -add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/data_misaligned} -add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/mult_multicycle} -add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/jump_target_id} -add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/jump_target_ex} -add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/branch_in_ex} -add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/branch_decision} -add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/ctrl_busy} -add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/if_busy} -add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/lsu_busy} -add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/apu_busy} -add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/pc_ex} -add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/alu_en_ex} -add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/alu_operator_ex} -add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/alu_operand_a_ex} -add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/alu_operand_b_ex} -add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/alu_operand_c_ex} -add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/bmask_a_ex} -add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/bmask_b_ex} -add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/imm_vec_ext_ex} -add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/alu_vec_mode_ex} -add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/ivec_op_ex} -add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/alu_is_clpx_ex} -add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/alu_is_subrot_ex} -add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/alu_clpx_shift_ex} -add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/mult_operator_ex} -add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/mult_operand_a_ex} -add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/mult_operand_b_ex} -add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/mult_operand_c_ex} -add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/mult_en_ex} -add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/mult_sel_subword_ex} -add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/mult_signed_mode_ex} -add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/mult_imm_ex} -add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/mult_dot_op_h_a_ex} -add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/mult_dot_op_h_b_ex} -add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/mult_dot_op_b_a_ex} -add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/mult_dot_op_b_b_ex} -add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/mult_dot_op_n_a_ex} -add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/mult_dot_op_n_b_ex} -add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/mult_dot_op_c_a_ex} -add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/mult_dot_op_c_b_ex} -add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/mult_dot_op_c_ex} -add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/mult_dot_signed_ex} -add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/mult_is_clpx_ex_o} -add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/mult_clpx_shift_ex} -add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/mult_clpx_img_ex} -add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/fprec_csr} -add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/frm_csr} -add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/fflags} -add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/fflags_csr} -add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/fflags_we} -add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/apu_en_ex} -add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/apu_type_ex} -add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/apu_flags_ex} -add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/apu_op_ex} -add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/apu_lat_ex} -add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/apu_operands_ex} -add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/apu_waddr_ex} -add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/apu_read_regs} -add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/apu_read_regs_valid} -add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/apu_read_dep} -add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/apu_write_regs} -add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/apu_write_regs_valid} -add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/apu_write_dep} -add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/perf_apu_type} -add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/perf_apu_cont} -add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/perf_apu_dep} -add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/perf_apu_wb} -add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/regfile_waddr_ex} -add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/regfile_we_ex} -add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/regfile_waddr_fw_wb} -add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/regfile_we_wb} -add wave -noupdate -group core1 -radix decimal {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/regfile_wdata} -add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/regfile_alu_waddr_ex} -add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/regfile_alu_waddr2_ex} -add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/regfile_alu_we_ex} -add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/regfile_alu_waddr_fw} -add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/regfile_alu_we_fw} -add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/regfile_alu_wdata_fw} -add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/ivec_fmt_csr} -add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/current_cycle_csr} -add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/current_cycle_ex} -add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/skip_size_csr} -add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/sb_legacy_mode} -add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/csr_access_ex} -add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/csr_op_ex} -add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/mtvec} -add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/utvec} -add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/csr_access} -add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/csr_op} -add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/csr_addr} -add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/csr_addr_int} -add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/csr_rdata} -add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/csr_wdata} -add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/current_priv_lvl} -add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/csr_macl_op} -add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/csr_macl_addr} -add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/csr_macl_wdata} -add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/a_address} -add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/w_address} -add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/a_stride} -add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/w_stride} -add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/a_rollback} -add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/w_rollback} -add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/a_skip} -add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/w_skip} -add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/macl_a_rstn} -add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/macl_w_rstn} -add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/curr_cyc_sel} -add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/data_we_ex} -add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/data_type_ex} -add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/data_sign_ext_ex} -add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/data_reg_offset_ex} -add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/data_req_ex} -add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/data_load_event_ex} -add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/data_misaligned_ex} -add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/lsu_rdata} -add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/data_rvalid_ex} -add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/loadComputeVLIW_ex} -add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/halt_if} -add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/id_ready} -add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/ex_ready} -add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/id_valid} -add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/ex_valid} -add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/wb_valid} -add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/lsu_ready_ex} -add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/lsu_ready_wb} -add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/apu_ready_wb} -add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/instr_req_int} -add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/m_irq_enable} -add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/u_irq_enable} -add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/csr_irq_sec} -add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/mepc} -add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/uepc} -add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/depc} -add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/csr_save_cause} -add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/csr_save_if} -add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/csr_save_id} -add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/csr_save_ex} -add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/csr_cause} -add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/csr_restore_mret_id} -add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/csr_restore_uret_id} -add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/csr_restore_dret_id} -add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/debug_mode} -add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/debug_cause} -add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/debug_csr_save} -add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/debug_single_step} -add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/debug_ebreakm} -add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/debug_ebreaku} -add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/hwlp_start} -add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/hwlp_end} -add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/hwlp_cnt} -add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/csr_hwlp_regid} -add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/csr_hwlp_we} -add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/csr_hwlp_data} -add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/perf_imiss} -add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/perf_jump} -add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/perf_jr_stall} -add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/perf_ld_stall} -add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/perf_pipeline_stall} -add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/core_ctrl_firstfetch} -add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/core_busy_int} -add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/core_busy_q} -add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/pmp_addr} -add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/pmp_cfg} -add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/data_req_pmp} -add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/data_addr_pmp} -add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/data_we_pmp} -add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/data_gnt_pmp} -add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/data_err_pmp} -add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/data_err_ack} -add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/instr_req_pmp} -add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/instr_gnt_pmp} -add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/instr_addr_pmp} -add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/instr_err_pmp} -add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/mpc_next_cycle} -add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/mux_sel_wcsr} -add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/is_interrupt} -add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/clk} -add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/clock_en} -add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/sleeping} -add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/mult_is_clpx_ex} -add wave -noupdate -group core1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/tracer_clk} -add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/clk_i} -add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/rst_ni} -add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/clock_en_i} -add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/test_en_i} -add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/fregfile_disable_i} -add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/boot_addr_i} -add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/core_id_i} -add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/cluster_id_i} -add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/instr_req_o} -add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/instr_gnt_i} -add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/instr_rvalid_i} -add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/instr_addr_o} -add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/instr_rdata_i} -add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/data_req_o} -add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/data_gnt_i} -add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/data_rvalid_i} -add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/data_we_o} -add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/data_be_o} -add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/data_addr_o} -add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/data_wdata_o} -add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/data_rdata_i} -add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/data_unaligned_o} -add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/apu_master_req_o} -add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/apu_master_ready_o} -add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/apu_master_gnt_i} -add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/apu_master_operands_o} -add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/apu_master_op_o} -add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/apu_master_type_o} -add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/apu_master_flags_o} -add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/apu_master_valid_i} -add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/apu_master_result_i} -add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/apu_master_flags_i} -add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/irq_i} -add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/irq_id_i} -add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/irq_ack_o} -add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/irq_id_o} -add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/irq_sec_i} -add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/sec_lvl_o} -add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/debug_req_i} -add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/fetch_enable_i} -add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/core_busy_o} -add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/ext_perf_counters_i} -add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/is_hwlp_id} -add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/hwlp_dec_cnt_id} -add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/instr_valid_id} -add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/instr_rdata_id} -add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/is_compressed_id} -add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/is_fetch_failed_id} -add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/illegal_c_insn_id} -add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/pc_if} -add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/pc_id} -add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/clear_instr_valid} -add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/pc_set} -add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/pc_mux_id} -add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/exc_pc_mux_id} -add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/exc_cause} -add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/trap_addr_mux} -add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/lsu_load_err} -add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/lsu_store_err} -add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/lsu_tosprw_ex} -add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/lsu_tospra_ex} -add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/dot_spr_operand_ex} -add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/update_w_id} -add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/update_a_id} -add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/is_decoding} -add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/useincr_addr_ex} -add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/data_misaligned} -add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/mult_multicycle} -add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/jump_target_id} -add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/jump_target_ex} -add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/branch_in_ex} -add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/branch_decision} -add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/ctrl_busy} -add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/if_busy} -add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/lsu_busy} -add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/apu_busy} -add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/pc_ex} -add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/alu_en_ex} -add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/alu_operator_ex} -add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/alu_operand_a_ex} -add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/alu_operand_b_ex} -add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/alu_operand_c_ex} -add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/bmask_a_ex} -add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/bmask_b_ex} -add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/imm_vec_ext_ex} -add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/alu_vec_mode_ex} -add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/ivec_op_ex} -add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/alu_is_clpx_ex} -add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/alu_is_subrot_ex} -add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/alu_clpx_shift_ex} -add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/mult_operator_ex} -add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/mult_operand_a_ex} -add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/mult_operand_b_ex} -add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/mult_operand_c_ex} -add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/mult_en_ex} -add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/mult_sel_subword_ex} -add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/mult_signed_mode_ex} -add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/mult_imm_ex} -add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/mult_dot_op_h_a_ex} -add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/mult_dot_op_h_b_ex} -add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/mult_dot_op_b_a_ex} -add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/mult_dot_op_b_b_ex} -add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/mult_dot_op_n_a_ex} -add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/mult_dot_op_n_b_ex} -add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/mult_dot_op_c_a_ex} -add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/mult_dot_op_c_b_ex} -add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/mult_dot_op_c_ex} -add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/mult_dot_signed_ex} -add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/mult_is_clpx_ex_o} -add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/mult_clpx_shift_ex} -add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/mult_clpx_img_ex} -add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/fprec_csr} -add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/frm_csr} -add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/fflags} -add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/fflags_csr} -add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/fflags_we} -add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/apu_en_ex} -add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/apu_type_ex} -add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/apu_flags_ex} -add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/apu_op_ex} -add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/apu_lat_ex} -add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/apu_operands_ex} -add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/apu_waddr_ex} -add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/apu_read_regs} -add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/apu_read_regs_valid} -add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/apu_read_dep} -add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/apu_write_regs} -add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/apu_write_regs_valid} -add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/apu_write_dep} -add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/perf_apu_type} -add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/perf_apu_cont} -add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/perf_apu_dep} -add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/perf_apu_wb} -add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/regfile_waddr_ex} -add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/regfile_we_ex} -add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/regfile_waddr_fw_wb} -add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/regfile_we_wb} -add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/regfile_wdata} -add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/regfile_alu_waddr_ex} -add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/regfile_alu_waddr2_ex} -add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/regfile_alu_we_ex} -add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/regfile_alu_waddr_fw} -add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/regfile_alu_we_fw} -add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/regfile_alu_wdata_fw} -add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/ivec_fmt_csr} -add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/current_cycle_csr} -add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/current_cycle_ex} -add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/skip_size_csr} -add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/sb_legacy_mode} -add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/csr_access_ex} -add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/csr_op_ex} -add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/mtvec} -add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/utvec} -add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/csr_access} -add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/csr_op} -add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/csr_addr} -add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/csr_addr_int} -add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/csr_rdata} -add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/csr_wdata} -add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/current_priv_lvl} -add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/csr_macl_op} -add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/csr_macl_addr} -add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/csr_macl_wdata} -add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/a_address} -add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/w_address} -add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/a_stride} -add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/w_stride} -add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/a_rollback} -add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/w_rollback} -add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/a_skip} -add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/w_skip} -add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/macl_a_rstn} -add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/macl_w_rstn} -add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/curr_cyc_sel} -add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/data_we_ex} -add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/data_type_ex} -add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/data_sign_ext_ex} -add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/data_reg_offset_ex} -add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/data_req_ex} -add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/data_load_event_ex} -add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/data_misaligned_ex} -add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/lsu_rdata} -add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/data_rvalid_ex} -add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/loadComputeVLIW_ex} -add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/halt_if} -add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/id_ready} -add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/ex_ready} -add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/id_valid} -add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/ex_valid} -add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/wb_valid} -add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/lsu_ready_ex} -add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/lsu_ready_wb} -add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/apu_ready_wb} -add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/instr_req_int} -add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/m_irq_enable} -add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/u_irq_enable} -add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/csr_irq_sec} -add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/mepc} -add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/uepc} -add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/depc} -add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/csr_save_cause} -add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/csr_save_if} -add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/csr_save_id} -add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/csr_save_ex} -add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/csr_cause} -add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/csr_restore_mret_id} -add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/csr_restore_uret_id} -add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/csr_restore_dret_id} -add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/debug_mode} -add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/debug_cause} -add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/debug_csr_save} -add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/debug_single_step} -add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/debug_ebreakm} -add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/debug_ebreaku} -add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/hwlp_start} -add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/hwlp_end} -add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/hwlp_cnt} -add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/csr_hwlp_regid} -add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/csr_hwlp_we} -add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/csr_hwlp_data} -add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/perf_imiss} -add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/perf_jump} -add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/perf_jr_stall} -add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/perf_ld_stall} -add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/perf_pipeline_stall} -add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/core_ctrl_firstfetch} -add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/core_busy_int} -add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/core_busy_q} -add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/pmp_addr} -add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/pmp_cfg} -add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/data_req_pmp} -add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/data_addr_pmp} -add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/data_we_pmp} -add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/data_gnt_pmp} -add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/data_err_pmp} -add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/data_err_ack} -add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/instr_req_pmp} -add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/instr_gnt_pmp} -add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/instr_addr_pmp} -add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/instr_err_pmp} -add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/mpc_next_cycle} -add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/mux_sel_wcsr} -add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/is_interrupt} -add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/clk} -add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/clock_en} -add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/sleeping} -add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/mult_is_clpx_ex} -add wave -noupdate -group core2 {/pulp_cluster_tb/cluster_i/CORE[2]/core_region_i/CL_CORE/RISCV_CORE/tracer_clk} -add wave -noupdate -group ctrl0 {/pulp_cluster_tb/cluster_i/dmac_wrap_i/ctrl_slave[0]/req} -add wave -noupdate -group ctrl0 {/pulp_cluster_tb/cluster_i/dmac_wrap_i/ctrl_slave[0]/add} -add wave -noupdate -group ctrl0 {/pulp_cluster_tb/cluster_i/dmac_wrap_i/ctrl_slave[0]/wen} -add wave -noupdate -group ctrl0 -expand {/pulp_cluster_tb/cluster_i/dmac_wrap_i/ctrl_slave[0]/wdata} -add wave -noupdate -group ctrl0 {/pulp_cluster_tb/cluster_i/dmac_wrap_i/ctrl_slave[0]/be} -add wave -noupdate -group ctrl0 {/pulp_cluster_tb/cluster_i/dmac_wrap_i/ctrl_slave[0]/gnt} -add wave -noupdate -group ctrl0 {/pulp_cluster_tb/cluster_i/dmac_wrap_i/ctrl_slave[0]/r_opc} -add wave -noupdate -group ctrl0 {/pulp_cluster_tb/cluster_i/dmac_wrap_i/ctrl_slave[0]/r_rdata} -add wave -noupdate -group ctrl0 {/pulp_cluster_tb/cluster_i/dmac_wrap_i/ctrl_slave[0]/r_valid} -add wave -noupdate -group ctrl1 {/pulp_cluster_tb/cluster_i/dmac_wrap_i/ctrl_slave[1]/req} -add wave -noupdate -group ctrl1 {/pulp_cluster_tb/cluster_i/dmac_wrap_i/ctrl_slave[1]/add} -add wave -noupdate -group ctrl1 {/pulp_cluster_tb/cluster_i/dmac_wrap_i/ctrl_slave[1]/wen} -add wave -noupdate -group ctrl1 {/pulp_cluster_tb/cluster_i/dmac_wrap_i/ctrl_slave[1]/wdata} -add wave -noupdate -group ctrl1 {/pulp_cluster_tb/cluster_i/dmac_wrap_i/ctrl_slave[1]/be} -add wave -noupdate -group ctrl1 {/pulp_cluster_tb/cluster_i/dmac_wrap_i/ctrl_slave[1]/gnt} -add wave -noupdate -group ctrl1 {/pulp_cluster_tb/cluster_i/dmac_wrap_i/ctrl_slave[1]/r_opc} -add wave -noupdate -group ctrl1 {/pulp_cluster_tb/cluster_i/dmac_wrap_i/ctrl_slave[1]/r_rdata} -add wave -noupdate -group ctrl1 {/pulp_cluster_tb/cluster_i/dmac_wrap_i/ctrl_slave[1]/r_valid} -add wave -noupdate -group ctrl2 {/pulp_cluster_tb/cluster_i/dmac_wrap_i/ctrl_slave[2]/req} -add wave -noupdate -group ctrl2 {/pulp_cluster_tb/cluster_i/dmac_wrap_i/ctrl_slave[2]/add} -add wave -noupdate -group ctrl2 {/pulp_cluster_tb/cluster_i/dmac_wrap_i/ctrl_slave[2]/wen} -add wave -noupdate -group ctrl2 {/pulp_cluster_tb/cluster_i/dmac_wrap_i/ctrl_slave[2]/wdata} -add wave -noupdate -group ctrl2 {/pulp_cluster_tb/cluster_i/dmac_wrap_i/ctrl_slave[2]/be} -add wave -noupdate -group ctrl2 {/pulp_cluster_tb/cluster_i/dmac_wrap_i/ctrl_slave[2]/gnt} -add wave -noupdate -group ctrl2 {/pulp_cluster_tb/cluster_i/dmac_wrap_i/ctrl_slave[2]/r_opc} -add wave -noupdate -group ctrl2 {/pulp_cluster_tb/cluster_i/dmac_wrap_i/ctrl_slave[2]/r_rdata} -add wave -noupdate -group ctrl2 {/pulp_cluster_tb/cluster_i/dmac_wrap_i/ctrl_slave[2]/r_valid} -add wave -noupdate -group mult1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/mult_i/genblk1/dot_char_op_a} -add wave -noupdate -group mult1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/mult_i/genblk1/dot_char_op_b} -add wave -noupdate -group mult1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/mult_i/genblk1/dot_char_mul} -add wave -noupdate -group mult1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/mult_i/genblk1/dot_nibble_op_a} -add wave -noupdate -group mult1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/mult_i/genblk1/dot_nibble_op_b} -add wave -noupdate -group mult1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/mult_i/genblk1/dot_nibble_mul} -add wave -noupdate -group mult1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/mult_i/genblk1/dot_crumble_op_a} -add wave -noupdate -group mult1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/mult_i/genblk1/dot_crumble_op_b} -add wave -noupdate -group mult1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/mult_i/genblk1/dot_crumble_mul} -add wave -noupdate -group mult1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/mult_i/genblk1/dot_short_op_a} -add wave -noupdate -group mult1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/mult_i/genblk1/dot_short_op_b} -add wave -noupdate -group mult1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/mult_i/genblk1/dot_short_mul} -add wave -noupdate -group mult1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/mult_i/genblk1/dot_short_op_a_1_neg} -add wave -noupdate -group mult1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/mult_i/genblk1/dot_short_op_b_ext} -add wave -noupdate -group mult1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/mult_i/clk} -add wave -noupdate -group mult1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/mult_i/rst_n} -add wave -noupdate -group mult1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/mult_i/enable_i} -add wave -noupdate -group mult1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/mult_i/operator_i} -add wave -noupdate -group mult1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/mult_i/short_subword_i} -add wave -noupdate -group mult1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/mult_i/short_signed_i} -add wave -noupdate -group mult1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/mult_i/op_a_i} -add wave -noupdate -group mult1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/mult_i/op_b_i} -add wave -noupdate -group mult1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/mult_i/op_c_i} -add wave -noupdate -group mult1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/mult_i/imm_i} -add wave -noupdate -group mult1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/mult_i/dot_signed_i} -add wave -noupdate -group mult1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/mult_i/dot_op_h_a_i} -add wave -noupdate -group mult1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/mult_i/dot_op_h_b_i} -add wave -noupdate -group mult1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/mult_i/dot_op_b_a_i} -add wave -noupdate -group mult1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/mult_i/dot_op_b_b_i} -add wave -noupdate -group mult1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/mult_i/dot_op_n_a_i} -add wave -noupdate -group mult1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/mult_i/dot_op_n_b_i} -add wave -noupdate -group mult1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/mult_i/dot_op_c_a_i} -add wave -noupdate -group mult1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/mult_i/dot_op_c_b_i} -add wave -noupdate -group mult1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/mult_i/dot_op_c_i} -add wave -noupdate -group mult1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/mult_i/current_cycle_i} -add wave -noupdate -group mult1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/mult_i/is_clpx_i} -add wave -noupdate -group mult1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/mult_i/clpx_shift_i} -add wave -noupdate -group mult1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/mult_i/clpx_img_i} -add wave -noupdate -group mult1 -radix decimal {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/mult_i/result_o} -add wave -noupdate -group mult1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/mult_i/multicycle_o} -add wave -noupdate -group mult1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/mult_i/ready_o} -add wave -noupdate -group mult1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/mult_i/ex_ready_i} -add wave -noupdate -group mult1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/mult_i/short_op_a} -add wave -noupdate -group mult1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/mult_i/short_op_b} -add wave -noupdate -group mult1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/mult_i/short_op_c} -add wave -noupdate -group mult1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/mult_i/short_mul} -add wave -noupdate -group mult1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/mult_i/short_mac} -add wave -noupdate -group mult1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/mult_i/short_round} -add wave -noupdate -group mult1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/mult_i/short_round_tmp} -add wave -noupdate -group mult1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/mult_i/short_result} -add wave -noupdate -group mult1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/mult_i/short_mac_msb1} -add wave -noupdate -group mult1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/mult_i/short_mac_msb0} -add wave -noupdate -group mult1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/mult_i/short_imm} -add wave -noupdate -group mult1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/mult_i/short_subword} -add wave -noupdate -group mult1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/mult_i/short_signed} -add wave -noupdate -group mult1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/mult_i/short_shift_arith} -add wave -noupdate -group mult1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/mult_i/mulh_imm} -add wave -noupdate -group mult1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/mult_i/mulh_subword} -add wave -noupdate -group mult1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/mult_i/mulh_signed} -add wave -noupdate -group mult1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/mult_i/mulh_shift_arith} -add wave -noupdate -group mult1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/mult_i/mulh_carry_q} -add wave -noupdate -group mult1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/mult_i/mulh_active} -add wave -noupdate -group mult1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/mult_i/mulh_save} -add wave -noupdate -group mult1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/mult_i/mulh_clearcarry} -add wave -noupdate -group mult1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/mult_i/mulh_ready} -add wave -noupdate -group mult1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/mult_i/mulh_CS} -add wave -noupdate -group mult1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/mult_i/mulh_NS} -add wave -noupdate -group mult1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/mult_i/int_op_a_msu} -add wave -noupdate -group mult1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/mult_i/int_op_b_msu} -add wave -noupdate -group mult1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/mult_i/int_result} -add wave -noupdate -group mult1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/mult_i/int_is_msu} -add wave -noupdate -group mult1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/mult_i/dot_char_result} -add wave -noupdate -group mult1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/mult_i/dot_nibble_result} -add wave -noupdate -group mult1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/mult_i/dot_crumble_result} -add wave -noupdate -group mult1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/mult_i/dot_short_result} -add wave -noupdate -group mult1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/mult_i/accumulator} -add wave -noupdate -group mult1 {/pulp_cluster_tb/cluster_i/CORE[1]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/mult_i/clpx_shift_result} -add wave -noupdate -group alu0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/alu_i/clk} -add wave -noupdate -group alu0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/alu_i/rst_n} -add wave -noupdate -group alu0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/alu_i/enable_i} -add wave -noupdate -group alu0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/alu_i/operator_i} -add wave -noupdate -group alu0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/alu_i/operand_a_i} -add wave -noupdate -group alu0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/alu_i/operand_b_i} -add wave -noupdate -group alu0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/alu_i/operand_c_i} -add wave -noupdate -group alu0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/alu_i/vector_mode_i} -add wave -noupdate -group alu0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/alu_i/ivec_op_i} -add wave -noupdate -group alu0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/alu_i/bmask_a_i} -add wave -noupdate -group alu0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/alu_i/bmask_b_i} -add wave -noupdate -group alu0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/alu_i/imm_vec_ext_i} -add wave -noupdate -group alu0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/alu_i/is_clpx_i} -add wave -noupdate -group alu0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/alu_i/is_subrot_i} -add wave -noupdate -group alu0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/alu_i/clpx_shift_i} -add wave -noupdate -group alu0 -expand {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/alu_i/result_o} -add wave -noupdate -group alu0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/alu_i/comparison_result_o} -add wave -noupdate -group alu0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/alu_i/ready_o} -add wave -noupdate -group alu0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/alu_i/ex_ready_i} -add wave -noupdate -group alu0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/alu_i/operand_a_rev} -add wave -noupdate -group alu0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/alu_i/operand_a_neg} -add wave -noupdate -group alu0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/alu_i/operand_a_neg_rev} -add wave -noupdate -group alu0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/alu_i/operand_b_neg} -add wave -noupdate -group alu0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/alu_i/div_shift} -add wave -noupdate -group alu0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/alu_i/div_valid} -add wave -noupdate -group alu0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/alu_i/bmask} -add wave -noupdate -group alu0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/alu_i/adder_op_b_negate} -add wave -noupdate -group alu0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/alu_i/adder_op_a} -add wave -noupdate -group alu0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/alu_i/adder_op_b} -add wave -noupdate -group alu0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/alu_i/adder_in_a} -add wave -noupdate -group alu0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/alu_i/adder_in_b} -add wave -noupdate -group alu0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/alu_i/adder_result} -add wave -noupdate -group alu0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/alu_i/adder_result_expanded} -add wave -noupdate -group alu0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/alu_i/adder_round_value} -add wave -noupdate -group alu0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/alu_i/adder_round_result} -add wave -noupdate -group alu0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/alu_i/shift_left} -add wave -noupdate -group alu0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/alu_i/shift_use_round} -add wave -noupdate -group alu0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/alu_i/shift_arithmetic} -add wave -noupdate -group alu0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/alu_i/shift_amt_left} -add wave -noupdate -group alu0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/alu_i/shift_amt} -add wave -noupdate -group alu0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/alu_i/shift_amt_int} -add wave -noupdate -group alu0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/alu_i/shift_amt_norm} -add wave -noupdate -group alu0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/alu_i/shift_op_a} -add wave -noupdate -group alu0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/alu_i/shift_result} -add wave -noupdate -group alu0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/alu_i/shift_right_result} -add wave -noupdate -group alu0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/alu_i/shift_left_result} -add wave -noupdate -group alu0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/alu_i/clpx_shift_ex} -add wave -noupdate -group alu0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/alu_i/bmask_b_norm} -add wave -noupdate -group alu0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/alu_i/shift_op_a_32} -add wave -noupdate -group alu0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/alu_i/is_equal} -add wave -noupdate -group alu0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/alu_i/is_greater} -add wave -noupdate -group alu0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/alu_i/f_is_greater} -add wave -noupdate -group alu0 -expand {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/alu_i/cmp_signed} -add wave -noupdate -group alu0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/alu_i/is_equal_vec} -add wave -noupdate -group alu0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/alu_i/is_greater_vec} -add wave -noupdate -group alu0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/alu_i/cmp_result} -add wave -noupdate -group alu0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/alu_i/f_is_qnan} -add wave -noupdate -group alu0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/alu_i/f_is_snan} -add wave -noupdate -group alu0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/alu_i/f_is_nan} -add wave -noupdate -group alu0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/alu_i/result_minmax} -add wave -noupdate -group alu0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/alu_i/fp_canonical_nan} -add wave -noupdate -group alu0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/alu_i/sel_minmax} -add wave -noupdate -group alu0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/alu_i/do_min} -add wave -noupdate -group alu0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/alu_i/minmax_is_fp_special} -add wave -noupdate -group alu0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/alu_i/minmax_b} -add wave -noupdate -group alu0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/alu_i/fclass_result} -add wave -noupdate -group alu0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/alu_i/f_sign_inject_result} -add wave -noupdate -group alu0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/alu_i/clip_result} -add wave -noupdate -group alu0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/alu_i/clip_is_lower_neg} -add wave -noupdate -group alu0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/alu_i/clip_is_lower_u} -add wave -noupdate -group alu0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/alu_i/shuffle_byte_sel} -add wave -noupdate -group alu0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/alu_i/shuffle_reg_sel} -add wave -noupdate -group alu0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/alu_i/shuffle_reg1_sel} -add wave -noupdate -group alu0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/alu_i/shuffle_reg0_sel} -add wave -noupdate -group alu0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/alu_i/shuffle_through} -add wave -noupdate -group alu0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/alu_i/shuffle_r1} -add wave -noupdate -group alu0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/alu_i/shuffle_r0} -add wave -noupdate -group alu0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/alu_i/shuffle_r1_in} -add wave -noupdate -group alu0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/alu_i/shuffle_r0_in} -add wave -noupdate -group alu0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/alu_i/shuffle_result} -add wave -noupdate -group alu0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/alu_i/pack_result} -add wave -noupdate -group alu0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/alu_i/ff_input} -add wave -noupdate -group alu0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/alu_i/cnt_result} -add wave -noupdate -group alu0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/alu_i/clb_result} -add wave -noupdate -group alu0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/alu_i/ff1_result} -add wave -noupdate -group alu0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/alu_i/ff_no_one} -add wave -noupdate -group alu0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/alu_i/fl1_result} -add wave -noupdate -group alu0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/alu_i/bitop_result} -add wave -noupdate -group alu0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/alu_i/extract_is_signed} -add wave -noupdate -group alu0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/alu_i/extract_sign} -add wave -noupdate -group alu0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/alu_i/bmask_first} -add wave -noupdate -group alu0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/alu_i/bmask_inv} -add wave -noupdate -group alu0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/alu_i/bextins_and} -add wave -noupdate -group alu0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/alu_i/bextins_result} -add wave -noupdate -group alu0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/alu_i/bclr_result} -add wave -noupdate -group alu0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/alu_i/bset_result} -add wave -noupdate -group alu0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/alu_i/radix_2_rev} -add wave -noupdate -group alu0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/alu_i/radix_4_rev} -add wave -noupdate -group alu0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/alu_i/radix_8_rev} -add wave -noupdate -group alu0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/alu_i/reverse_result} -add wave -noupdate -group alu0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/alu_i/radix_mux_sel} -add wave -noupdate -group alu0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/alu_i/result_div} -add wave -noupdate -group alu0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/alu_i/div_ready} -add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/clk} -add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/rst_n} -add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/test_en_i} -add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/fregfile_disable_i} -add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/fetch_enable_i} -add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/ctrl_busy_o} -add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/core_ctrl_firstfetch_o} -add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/is_decoding_o} -add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/hwlp_dec_cnt_i} -add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/is_hwlp_i} -add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/instr_valid_i} -add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/instr_rdata_i} -add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/instr_req_o} -add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/branch_in_ex_o} -add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/branch_decision_i} -add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/jump_target_o} -add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/clear_instr_valid_o} -add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/pc_set_o} -add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/pc_mux_o} -add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/exc_pc_mux_o} -add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/trap_addr_mux_o} -add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/illegal_c_insn_i} -add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/is_compressed_i} -add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/is_fetch_failed_i} -add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/pc_if_i} -add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/pc_id_i} -add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/halt_if_o} -add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/id_ready_o} -add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/ex_ready_i} -add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/wb_ready_i} -add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/id_valid_o} -add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/ex_valid_i} -add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/pc_ex_o} -add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/alu_operand_a_ex_o} -add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/alu_operand_b_ex_o} -add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/alu_operand_c_ex_o} -add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/bmask_a_ex_o} -add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/bmask_b_ex_o} -add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/imm_vec_ext_ex_o} -add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/alu_vec_mode_ex_o} -add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/curr_cyc_sel_o} -add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/regfile_waddr_ex_o} -add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/regfile_we_ex_o} -add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/regfile_alu_waddr_ex_o} -add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/regfile_alu_we_ex_o} -add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/regfile_alu_waddr2_ex_o} -add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/ivec_op_ex_o} -add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/alu_en_ex_o} -add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/alu_operator_ex_o} -add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/alu_is_clpx_ex_o} -add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/alu_is_subrot_ex_o} -add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/alu_clpx_shift_ex_o} -add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/mult_operator_ex_o} -add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/mult_operand_a_ex_o} -add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/mult_operand_b_ex_o} -add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/mult_operand_c_ex_o} -add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/mult_en_ex_o} -add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/mult_sel_subword_ex_o} -add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/mult_signed_mode_ex_o} -add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/mult_imm_ex_o} -add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/mult_dot_op_h_a_ex_o} -add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/mult_dot_op_h_b_ex_o} -add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/mult_dot_op_b_a_ex_o} -add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/mult_dot_op_b_b_ex_o} -add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/mult_dot_op_n_a_ex_o} -add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/mult_dot_op_n_b_ex_o} -add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/mult_dot_op_c_a_ex_o} -add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/mult_dot_op_c_b_ex_o} -add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/mult_dot_op_c_ex_o} -add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/mult_dot_signed_ex_o} -add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/mult_is_clpx_ex_o} -add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/mult_clpx_shift_ex_o} -add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/mult_clpx_img_ex_o} -add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/dot_spr_operand_ex_o} -add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/apu_en_ex_o} -add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/apu_type_ex_o} -add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/apu_op_ex_o} -add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/apu_lat_ex_o} -add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/apu_operands_ex_o} -add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/apu_flags_ex_o} -add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/apu_waddr_ex_o} -add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/apu_read_regs_o} -add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/apu_read_regs_valid_o} -add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/apu_read_dep_i} -add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/apu_write_regs_o} -add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/apu_write_regs_valid_o} -add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/apu_write_dep_i} -add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/apu_perf_dep_o} -add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/apu_busy_i} -add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/frm_i} -add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/csr_ivec_fmt_i} -add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/csr_current_cycle_i} -add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/csr_skip_size_i} -add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/next_cycle_ex_o} -add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/current_cycle_ex_o} -add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/mux_sel_wcsr_ex_o} -add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/sb_legacy_i} -add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/csr_access_ex_o} -add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/csr_op_ex_o} -add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/current_priv_lvl_i} -add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/csr_irq_sec_o} -add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/csr_cause_o} -add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/csr_save_if_o} -add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/csr_save_id_o} -add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/csr_save_ex_o} -add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/csr_restore_mret_id_o} -add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/csr_restore_uret_id_o} -add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/csr_restore_dret_id_o} -add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/csr_save_cause_o} -add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/hwlp_start_o} -add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/hwlp_end_o} -add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/hwlp_cnt_o} -add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/csr_hwlp_regid_i} -add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/csr_hwlp_we_i} -add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/csr_hwlp_data_i} -add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/data_req_ex_o} -add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/data_we_ex_o} -add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/data_type_ex_o} -add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/data_sign_ext_ex_o} -add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/data_reg_offset_ex_o} -add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/data_load_event_ex_o} -add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/data_misaligned_ex_o} -add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/prepost_useincr_ex_o} -add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/data_misaligned_i} -add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/data_err_i} -add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/data_err_ack_o} -add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/lsu_tosprw_ex_o} -add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/lsu_tospra_ex_o} -add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/loadComputeVLIW_ex_i} -add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/update_w_id_o} -add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/update_a_id_o} -add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/irq_i} -add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/irq_sec_i} -add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/irq_id_i} -add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/m_irq_enable_i} -add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/u_irq_enable_i} -add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/irq_ack_o} -add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/irq_id_o} -add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/exc_cause_o} -add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/debug_mode_o} -add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/debug_cause_o} -add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/debug_csr_save_o} -add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/debug_req_i} -add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/debug_single_step_i} -add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/debug_ebreakm_i} -add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/debug_ebreaku_i} -add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/regfile_waddr_wb_i} -add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/regfile_we_wb_i} -add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/regfile_wdata_wb_i} -add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/regfile_alu_waddr_fw_i} -add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/regfile_alu_we_fw_i} -add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/regfile_alu_wdata_fw_i} -add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/mult_multicycle_i} -add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/perf_jump_o} -add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/perf_jr_stall_o} -add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/perf_ld_stall_o} -add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/perf_pipeline_stall_o} -add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/instr} -add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/deassert_we} -add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/illegal_insn_dec} -add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/ebrk_insn} -add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/mret_insn_dec} -add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/uret_insn_dec} -add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/dret_insn_dec} -add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/ecall_insn_dec} -add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/pipe_flush_dec} -add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/fencei_insn_dec} -add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/rega_used_dec} -add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/regb_used_dec} -add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/regc_used_dec} -add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/branch_taken_ex} -add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/jump_in_id} -add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/jump_in_dec} -add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/misaligned_stall} -add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/jr_stall} -add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/load_stall} -add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/csr_apu_stall} -add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/instr_multicycle} -add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/hwloop_mask} -add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/halt_id} -add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/macload_update_ex} -add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/same_rnn_id} -add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/imm_i_type} -add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/imm_iz_type} -add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/imm_s_type} -add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/imm_sb_type} -add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/imm_u_type} -add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/imm_uj_type} -add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/imm_z_type} -add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/imm_s2_type} -add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/imm_bi_type} -add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/imm_s3_type} -add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/imm_vs_type} -add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/imm_vu_type} -add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/imm_shuffleb_type} -add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/imm_shuffleh_type} -add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/imm_shuffle_type} -add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/imm_clip_type} -add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/imm_macload_type} -add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/imm_a} -add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/imm_b} -add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/jump_target} -add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/irq_req_ctrl} -add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/irq_sec_ctrl} -add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/irq_id_ctrl} -add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/exc_ack} -add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/exc_kill} -add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/regfile_addr_ra_id} -add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/regfile_addr_rb_id} -add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/regfile_addr_rc_id} -add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/regfile_fp_a} -add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/regfile_fp_b} -add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/regfile_fp_c} -add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/regfile_fp_d} -add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/fregfile_ena} -add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/regfile_waddr_id} -add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/regfile_alu_waddr_id} -add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/regfile_alu_waddr2_id} -add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/regfile_alu_we_id} -add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/regfile_alu_we_dec_id} -add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/regfile_data_ra_id} -add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/regfile_data_rb_id} -add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/regfile_data_rc_id} -add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/alu_en} -add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/alu_operator} -add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/alu_op_a_mux_sel} -add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/alu_op_b_mux_sel} -add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/alu_op_c_mux_sel} -add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/regc_mux} -add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/imm_a_mux_sel} -add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/imm_b_mux_sel} -add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/jump_target_mux_sel} -add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/mult_operator} -add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/mult_en} -add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/mult_int_en} -add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/mult_sel_subword} -add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/mult_signed_mode} -add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/mult_dot_en} -add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/mult_dot_signed} -add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/dot_spr_operand} -add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/fpu_dst_fmt} -add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/fpu_src_fmt} -add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/fpu_int_fmt} -add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/apu_en} -add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/apu_type} -add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/apu_op} -add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/apu_lat} -add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/apu_operands} -add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/apu_flags} -add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/apu_waddr} -add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/apu_read_regs} -add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/apu_read_regs_valid} -add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/apu_write_regs} -add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/apu_write_regs_valid} -add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/apu_flags_src} -add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/apu_stall} -add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/fp_rnd_mode} -add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/regfile_we_id} -add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/regfile_alu_waddr_mux_sel} -add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/data_we_id} -add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/data_type_id} -add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/data_sign_ext_id} -add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/data_reg_offset_id} -add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/data_req_id} -add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/data_load_event_id} -add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/lsu_tosprw_id} -add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/lsu_tospra_id} -add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/hwloop_regid} -add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/hwloop_regid_int} -add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/hwloop_we} -add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/hwloop_we_int} -add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/hwloop_we_masked} -add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/hwloop_target_mux_sel} -add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/hwloop_start_mux_sel} -add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/hwloop_cnt_mux_sel} -add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/hwloop_target} -add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/hwloop_start} -add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/hwloop_start_int} -add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/hwloop_end} -add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/hwloop_cnt} -add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/hwloop_cnt_int} -add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/hwloop_valid} -add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/write_sb_csr_n} -add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/write_sb_csr_q} -add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/csr_ivec_fmt} -add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/ivec_fmt_fw} -add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/csr_access} -add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/csr_op} -add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/csr_status} -add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/prepost_useincr} -add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/operand_a_fw_mux_sel} -add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/operand_b_fw_mux_sel} -add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/operand_c_fw_mux_sel} -add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/operand_a_fw_id} -add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/operand_b_fw_id} -add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/operand_c_fw_id} -add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/operand_b} -add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/operand_b_vec} -add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/operand_c} -add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/operand_c_vec} -add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/alu_operand_a} -add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/alu_operand_b} -add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/alu_operand_c} -add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/bmask_a_mux} -add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/bmask_b_mux} -add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/alu_bmask_a_mux_sel} -add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/alu_bmask_b_mux_sel} -add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/mult_imm_mux} -add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/bmask_a_id_imm} -add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/bmask_b_id_imm} -add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/bmask_a_id} -add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/bmask_b_id} -add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/imm_vec_ext_id} -add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/mult_imm_id} -add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/alu_vec_mode} -add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/ivec_op} -add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/scalar_replication} -add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/scalar_replication_c} -add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/reg_d_ex_is_reg_a_id} -add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/reg_d_ex_is_reg_b_id} -add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/reg_d_ex_is_reg_c_id} -add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/reg_d_wb_is_reg_a_id} -add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/reg_d_wb_is_reg_b_id} -add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/reg_d_wb_is_reg_c_id} -add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/reg_d_alu_is_reg_a_id} -add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/reg_d_alu_is_reg_b_id} -add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/reg_d_alu_is_reg_c_id} -add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/is_clpx} -add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/is_subrot} -add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/mret_dec} -add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/uret_dec} -add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/dret_dec} -add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/current_cycle} -add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/next_cycle} -add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/cc_mux_sel_mpc} -add wave -noupdate -group id0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/id_stage_i/mux_sel_wcsr} -add wave -noupdate -group mult0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/mult_i/clk} -add wave -noupdate -group mult0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/mult_i/rst_n} -add wave -noupdate -group mult0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/mult_i/enable_i} -add wave -noupdate -group mult0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/mult_i/operator_i} -add wave -noupdate -group mult0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/mult_i/short_subword_i} -add wave -noupdate -group mult0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/mult_i/short_signed_i} -add wave -noupdate -group mult0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/mult_i/op_a_i} -add wave -noupdate -group mult0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/mult_i/op_b_i} -add wave -noupdate -group mult0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/mult_i/op_c_i} -add wave -noupdate -group mult0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/mult_i/imm_i} -add wave -noupdate -group mult0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/mult_i/dot_signed_i} -add wave -noupdate -group mult0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/mult_i/dot_op_h_a_i} -add wave -noupdate -group mult0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/mult_i/dot_op_h_b_i} -add wave -noupdate -group mult0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/mult_i/dot_op_b_a_i} -add wave -noupdate -group mult0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/mult_i/dot_op_b_b_i} -add wave -noupdate -group mult0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/mult_i/dot_op_n_b_i} -add wave -noupdate -group mult0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/mult_i/dot_op_n_a_i} -add wave -noupdate -group mult0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/mult_i/dot_op_c_a_i} -add wave -noupdate -group mult0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/mult_i/dot_op_c_b_i} -add wave -noupdate -group mult0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/mult_i/dot_op_t_a_i} -add wave -noupdate -group mult0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/mult_i/dot_op_t_b_i} -add wave -noupdate -group mult0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/mult_i/dot_op_c_i} -add wave -noupdate -group mult0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/mult_i/current_cycle_i} -add wave -noupdate -group mult0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/mult_i/is_clpx_i} -add wave -noupdate -group mult0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/mult_i/clpx_shift_i} -add wave -noupdate -group mult0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/mult_i/clpx_img_i} -add wave -noupdate -group mult0 -color Goldenrod {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/mult_i/result_o} -add wave -noupdate -group mult0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/mult_i/multicycle_o} -add wave -noupdate -group mult0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/mult_i/ready_o} -add wave -noupdate -group mult0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/mult_i/ex_ready_i} -add wave -noupdate -group mult0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/mult_i/short_op_a} -add wave -noupdate -group mult0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/mult_i/short_op_b} -add wave -noupdate -group mult0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/mult_i/short_op_c} -add wave -noupdate -group mult0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/mult_i/short_mul} -add wave -noupdate -group mult0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/mult_i/short_mac} -add wave -noupdate -group mult0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/mult_i/short_round} -add wave -noupdate -group mult0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/mult_i/short_round_tmp} -add wave -noupdate -group mult0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/mult_i/short_result} -add wave -noupdate -group mult0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/mult_i/short_mac_msb1} -add wave -noupdate -group mult0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/mult_i/short_mac_msb0} -add wave -noupdate -group mult0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/mult_i/short_imm} -add wave -noupdate -group mult0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/mult_i/short_subword} -add wave -noupdate -group mult0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/mult_i/short_signed} -add wave -noupdate -group mult0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/mult_i/short_shift_arith} -add wave -noupdate -group mult0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/mult_i/mulh_imm} -add wave -noupdate -group mult0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/mult_i/mulh_subword} -add wave -noupdate -group mult0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/mult_i/mulh_signed} -add wave -noupdate -group mult0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/mult_i/mulh_shift_arith} -add wave -noupdate -group mult0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/mult_i/mulh_carry_q} -add wave -noupdate -group mult0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/mult_i/mulh_active} -add wave -noupdate -group mult0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/mult_i/mulh_save} -add wave -noupdate -group mult0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/mult_i/mulh_clearcarry} -add wave -noupdate -group mult0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/mult_i/mulh_ready} -add wave -noupdate -group mult0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/mult_i/mulh_CS} -add wave -noupdate -group mult0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/mult_i/mulh_NS} -add wave -noupdate -group mult0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/mult_i/int_op_a_msu} -add wave -noupdate -group mult0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/mult_i/int_op_b_msu} -add wave -noupdate -group mult0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/mult_i/int_result} -add wave -noupdate -group mult0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/mult_i/int_is_msu} -add wave -noupdate -group mult0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/mult_i/dot_char_result} -add wave -noupdate -group mult0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/mult_i/dot_nibble_result} -add wave -noupdate -group mult0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/mult_i/dot_crumble_result} -add wave -noupdate -group mult0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/mult_i/dot_ternary_result} -add wave -noupdate -group mult0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/mult_i/dot_short_result} -add wave -noupdate -group mult0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/mult_i/accumulator} -add wave -noupdate -group mult0 {/pulp_cluster_tb/cluster_i/CORE[0]/core_region_i/CL_CORE/RISCV_CORE/ex_stage_i/mult_i/clpx_shift_result} -TreeUpdate [SetDefaultTree] -WaveRestoreCursors {{Cursor 1} {233487895275 ps} 0} -quietly wave cursor active 1 -configure wave -namecolwidth 214 -configure wave -valuecolwidth 615 -configure wave -justifyvalue left -configure wave -signalnamewidth 1 -configure wave -snapdistance 10 -configure wave -datasetprefix 0 -configure wave -rowmargin 4 -configure wave -childrowmargin 2 -configure wave -gridoffset 0 -configure wave -gridperiod 1 -configure wave -griddelta 40 -configure wave -timeline 0 -configure wave -timelineunits ps -update -WaveRestoreZoom {233339187724 ps} {233564985239 ps} diff --git a/rt_nn_tests/xptnn_linear/mchan.h b/rt_nn_tests/xptnn_linear/mchan.h deleted file mode 100644 index 95882ab..0000000 --- a/rt_nn_tests/xptnn_linear/mchan.h +++ /dev/null @@ -1,137 +0,0 @@ -#ifndef _MCHAN_H -#define _MCHAN_H - -// Requires to have MCHAN_BASE_ADDR, MCHAN_EVENT defined outside of header -#ifndef MCHAN_BASE_ADDR -#error "[mchan.h] MCHAN_BASE_ADDR not defined!" -#endif - -#if !defined(MCHAN_EVENT) && !defined(MCHAN_POLLED) -#error "[mchan.h] Nor MCHAN_EVENT nor MCHAN_POLLED defined!" -#endif - -#if defined(MCHAN_EVENT) && !defined(MCHAN_EVENT_BIT) -#error "[mchan.h] MCHAN_EVENT_BIT should be defined when using events as signalization!" -#endif - -#include "pmsis.h" - -#define MCHAN_CMD_OFFSET 0 -#define MCHAN_STATUS_OFFSET 4 - -#define MCHAN_CMD_ADDR (MCHAN_BASE_ADDR + MCHAN_CMD_OFFSET) -#define MCHAN_STATUS_ADDR (MCHAN_BASE_ADDR + MCHAN_STATUS_OFFSET) - -#define READ_REG(addr) (*(volatile int*)(addr)) -#define WRITE_REG(addr, value) do { *(volatile int*)(addr) = (int)value; } while (0) - -#define MCHAN_READ_CMD() READ_REG(MCHAN_CMD_ADDR) -#define MCHAN_WRITE_CMD(value) WRITE_REG(MCHAN_CMD_ADDR, value) - -#define MCHAN_READ_STATUS() READ_REG(MCHAN_STATUS_ADDR) -#define MCHAN_WRITE_STATUS(value) WRITE_REG(MCHAN_STATUS_ADDR, value) - -// MCHAN version 7 has 1 more bit for the transfer length, so all the flag offsets are shifted by 1. Also, LOC (TCDM) striding is not supported in v6. -#if MCHAN_VERSION==7 -#define MCHAN_TRANSFER_LEN_SIZE (17) -#else -#define MCHAN_TRANSFER_LEN_SIZE (16) -#endif - -#define MCHAN_CMD_FLAG_DIRECTION_LOC2EXT (0 << (MCHAN_TRANSFER_LEN_SIZE + 0)) -#define MCHAN_CMD_FLAG_DIRECTION_EXT2LOC (1 << (MCHAN_TRANSFER_LEN_SIZE + 0)) -#define MCHAN_CMD_FLAG_INCREMENTAL (1 << (MCHAN_TRANSFER_LEN_SIZE + 1)) -#define MCHAN_CMD_FLAG_2D_TRANSFER_EXTERNAL (1 << (MCHAN_TRANSFER_LEN_SIZE + 2)) -#define MCHAN_CMD_FLAG_EVENT_ENABLE (1 << (MCHAN_TRANSFER_LEN_SIZE + 3)) -#define MCHAN_CMD_FLAG_INTERRUPT_ENABLE (1 << (MCHAN_TRANSFER_LEN_SIZE + 4)) -#define MCHAN_CMD_FLAG_BROADCAST_FINISH (1 << (MCHAN_TRANSFER_LEN_SIZE + 5)) -#if MCHAN_VERSION==7 -#define MCHAN_CMD_FLAG_2D_TRANSFER_LOCAL (1 << (MCHAN_TRANSFER_LEN_SIZE + 6)) // can only be used with MCHAN v7 -#endif -#define MCHAN_CMD_SHIFT_DIRECTION MCHAN_TRANSFER_LEN_SIZE - - -#define MCHAN_CMD(len, dir, inc, loc_2d, ext_2d, int_en, event_en, broadcast) \ - (len | dir | inc | loc_2d | ext_2d | broadcast | int_en | event_en) - -typedef enum { - MCHAN_DMA_TRANSFER_DIRECTION_EXT2LOC = MCHAN_CMD_FLAG_DIRECTION_EXT2LOC, - MCHAN_DMA_TRANSFER_DIRECTION_LOC2EXT = MCHAN_CMD_FLAG_DIRECTION_LOC2EXT -} mchan_dma_transfer_direction_e; - -typedef struct { - int cmd; - int size; - - void *loc; - int loc_size_1d; - int loc_stride_1d; - - void *ext; - int ext_size_1d; - int ext_stride_1d; -} mchan_transfer_t; - -static int mchan_transfer_get_id() { - return MCHAN_READ_CMD(); -} - -static void mchan_transfer_push_1d(mchan_transfer_t trans) -{ - MCHAN_WRITE_CMD(trans.cmd); - MCHAN_WRITE_CMD(trans.loc); - MCHAN_WRITE_CMD(trans.ext); -} - -static void mchan_transfer_push_2d(mchan_transfer_t trans) -{ - MCHAN_WRITE_CMD(trans.cmd); - MCHAN_WRITE_CMD(trans.loc); - MCHAN_WRITE_CMD(trans.ext); -// MCHAN version 7 takes 2D "count" (length of 1D transfers) and stride in 2 steps, -// v7 takes it in 1 step with the stride shifted to the upper 16 bits. -#if MCHAN_VERSION==7 - MCHAN_WRITE_CMD(trans.ext_size_1d); - MCHAN_WRITE_CMD(trans.ext_stride_1d); -#else - MCHAN_WRITE_CMD(trans.ext_size_1d | (trans.ext_stride_1d << 16)); -#endif -} - -static void mchan_transfer_push(mchan_transfer_t trans) -{ - MCHAN_WRITE_CMD(trans.cmd); - MCHAN_WRITE_CMD(trans.loc); - MCHAN_WRITE_CMD(trans.ext); - - if (trans.ext_size_1d < trans.size) { - MCHAN_WRITE_CMD(trans.ext_size_1d); - MCHAN_WRITE_CMD(trans.ext_stride_1d); - } - - if (trans.loc_size_1d < trans.size) { - MCHAN_WRITE_CMD(trans.loc_size_1d); - MCHAN_WRITE_CMD(trans.loc_stride_1d); - } -} - -static void mchan_transfer_free(int tid) -{ - MCHAN_WRITE_STATUS(1 << tid); -} - -static int mchan_transfer_busy(int tid) -{ - return MCHAN_READ_STATUS() & (1 << tid); -} - -static void mchan_transfer_wait(int tid) -{ - #if defined(MCHAN_EVENT) - while(mchan_transfer_busy(tid)) eu_evt_maskWaitAndClr(1 << MCHAN_EVENT_BIT); - #elif defined(MCHAN_POLLED) - while(mchan_transfer_busy(tid)) ; - #endif -} - -#endif diff --git a/rt_nn_tests/xptnn_linear/test.c b/rt_nn_tests/xptnn_linear/test.c index dac1c65..51cc048 100644 --- a/rt_nn_tests/xptnn_linear/test.c +++ b/rt_nn_tests/xptnn_linear/test.c @@ -1,10 +1,7 @@ -// massive hack to enable rt compatibility -#define pi_core_id get_core_id #include #include #include -#include "dory_dma.h" #include "xpulp_tnn_matmul_ternary.h" #include "xpulp_tnn_matmul_ternary_4x1.h" @@ -143,32 +140,24 @@ void call_krnl_0(void) { } void test_0(void) { - uint32_t dma_channel = dory_dma_allocate(); - DMA_copy dma_tx = {0}; // DMA transfer inputs from L2 to L1 - dma_tx.ext = pIn_0; - dma_tx.loc = inp_l1; - dma_tx.number_of_1d_copies = 1; - dma_tx.number_of_2d_copies = 1; - dma_tx.length_1d_copy = 20; - dma_tx.stride_1d = 1; - dma_tx.stride_2d = 1; - dma_tx.dir = 1; - dma_tx.tid = dma_channel; - dory_dma_memcpy_async(&dma_tx); + if (pi_core_id() == 0) { + plp_dma_memcpy(pIn_0, inp_l1, 20, 1); + plp_dma_barrier(); + } + pi_cl_team_barrier(0); // transfer weights - dma_tx.ext = pWeight_0; - dma_tx.loc = wt_l1; - dma_tx.length_1d_copy = 2000; - dory_dma_memcpy_async(&dma_tx); + if (pi_core_id() == 0) { + plp_dma_memcpy(pWeight_0, wt_l1, 2000, 1); + plp_dma_barrier(); + } + pi_cl_team_barrier(0); call_krnl_0(); // get outputs back with DMA - dma_tx.dir = 0; - dma_tx.ext = outputs_fp; - dma_tx.loc = outp_l1; - dma_tx.length_1d_copy = 400; - dory_dma_memcpy_async(&dma_tx); - dory_dma_free(&dma_tx); + if (pi_core_id() == 0) { + plp_dma_memcpy(outputs_fp, outp_l1, 400, 0); + plp_dma_barrier(); + } } diff --git a/rt_nn_tests/xptnn_linear/xpulp_tnn_linear_ternary_i32.c b/rt_nn_tests/xptnn_linear/xpulp_tnn_linear_ternary_i32.c deleted file mode 100644 index fc6a6f4..0000000 --- a/rt_nn_tests/xptnn_linear/xpulp_tnn_linear_ternary_i32.c +++ /dev/null @@ -1,95 +0,0 @@ -#include "pmsis.h" -#include "pulp_nn_utils.h" -#include "xpulp_tnn_linear_ternary_i32.h" - -void __attribute__((noinline)) xpulp_tnn_linear_ternary_i32( - uint8_t *pIn, - int8_t *pBias, - int8_t *pOut, - int8_t *pWeight, - uint16_t dim_vec, - uint16_t num_o_neurons) - -{ - uint16_t dim_vec_in = dim_vec/5; // number of bytes - uint16_t dim_vec_wt = dim_vec_in; - uint16_t dim_vec_words = dim_vec_in >> 2; // number of words - -#ifdef FC_TEST - int core_id = 0; -#else - int core_id = pi_core_id(); -#endif - - int Log2Core = log2(NUM_CORES); - int chunk = (num_o_neurons >> Log2Core) + ((num_o_neurons & (NUM_CORES-1))!=0); - int start = min(chunk * core_id, num_o_neurons); - int stop = min(start + chunk, num_o_neurons); - int32_t * pOutBuffer = ((int32_t *) pOut) + start; - - for(int i=start; ilength_1d_copy >> Log2Core) + ((copy->length_1d_copy & (NUM_CORES-1))!=0); - start_pixel = MIN(number_of_copies_per_core * core_id, copy->length_1d_copy); - stop_pixel = MIN(start_pixel + number_of_copies_per_core, copy->length_1d_copy); -#else - start_pixel = 0; - stop_pixel = copy->length_1d_copy; -#endif - void * loc = copy->loc + copy->number_of_1d_copies*copy->number_of_2d_copies*start_pixel; - void * ext = copy->ext + start_pixel; - const int size_2d = copy->number_of_1d_copies * copy->number_of_2d_copies; - - for (int i=start_pixel; idir << MCHAN_CMD_SHIFT_DIRECTION | MCHAN_FLAGS_2D, - .size = size_2d, - .ext = ext, - .loc = loc, - .ext_size_1d = 1, // one byte at a time... - .ext_stride_1d = copy->stride_1d - }; -#ifdef SINGLE_CORE_DMA - if (pi_core_id() == 0) { -#endif - mchan_transfer_push_2d(trans); -#ifdef SINGLE_CORE_DMA - } -#endif -#ifdef ALWAYS_BLOCK_DMA_TRANSFERS // needed on GAP8 board - dory_dma_barrier(copy); -#endif - ext += 1; // next channel - loc += copy->number_of_1d_copies * copy->number_of_2d_copies; - } -} - -void dory_dma_memcpy_1d_async(DMA_copy *copy) { - if (pi_core_id() == 0) { - mchan_transfer_t trans = { - .cmd = copy->length_1d_copy * copy->number_of_1d_copies * copy->number_of_2d_copies | (copy->dir << MCHAN_CMD_SHIFT_DIRECTION) | MCHAN_FLAGS_1D, - .size = copy->length_1d_copy * copy->number_of_1d_copies * copy->number_of_2d_copies, - .ext = copy->ext, - .loc = copy->loc - }; - mchan_transfer_push_1d(trans); - } -} - -void dory_dma_memcpy_2d_async(DMA_copy *copy) { - if (pi_core_id() == 0) { - const int size_2d = copy->number_of_1d_copies * copy->length_1d_copy * copy->number_of_2d_copies; - const int stride = (copy->number_of_2d_copies == 1) ? copy->stride_1d : copy->stride_2d; - const int size_1d = (copy->number_of_2d_copies == 1) ? copy->length_1d_copy : copy->length_1d_copy * copy->number_of_1d_copies; - - mchan_transfer_t trans = { - .cmd = size_2d | copy->dir << MCHAN_CMD_SHIFT_DIRECTION | MCHAN_FLAGS_2D, - .size = size_2d, - .ext = copy->ext, - .loc = copy->loc, - .ext_size_1d = size_1d, - .ext_stride_1d = stride - }; - mchan_transfer_push_2d(trans); - } -} - -void dory_dma_memcpy_3d_async(DMA_copy *copy) { - int start_pixel, stop_pixel; -#ifndef SINGLE_CORE_DMA - int core_id = pi_core_id(); - int Log2Core = log2(NUM_CORES); - int number_of_2d_copies_per_core = (copy->number_of_2d_copies >> Log2Core) + ((copy->number_of_2d_copies & (NUM_CORES-1))!=0); - start_pixel = MIN(number_of_2d_copies_per_core * core_id, copy->number_of_2d_copies); - stop_pixel = MIN(start_pixel + number_of_2d_copies_per_core, copy->number_of_2d_copies); -#else - start_pixel = 0; - stop_pixel = copy->number_of_2d_copies; -#endif - void *ext = copy->ext + copy->stride_2d*start_pixel; - void *loc = copy->loc + copy->length_1d_copy*copy->number_of_1d_copies*start_pixel; - const int size_2d = copy->number_of_1d_copies * copy->length_1d_copy; - for (int i = start_pixel; i < stop_pixel; i++) { - mchan_transfer_t trans = { - .cmd = size_2d | copy->dir << MCHAN_CMD_SHIFT_DIRECTION | MCHAN_FLAGS_2D, - .size = size_2d, - .ext = ext, - .loc = loc, - .ext_size_1d = copy->length_1d_copy, - .ext_stride_1d = copy->stride_1d - }; -#ifdef SINGLE_CORE_DMA - if (pi_core_id() == 0) { -#endif - mchan_transfer_push_2d(trans); -#ifdef SINGLE_CORE_DMA - } -#endif -#ifdef ALWAYS_BLOCK_DMA_TRANSFERS // needed on GAP8 board - dory_dma_barrier(copy); -#endif - loc += size_2d; - ext += copy->stride_2d; - } -} - -void dory_dma_memcpy_async(DMA_copy *copy) { - if (copy->hwc_to_chw == 1) { - dory_dma_memcpy_hwc_to_chw(copy); - } - else if ((copy->number_of_2d_copies == 1 && copy->number_of_1d_copies == 1) || (copy->stride_1d == copy->length_1d_copy && copy->number_of_1d_copies * copy->length_1d_copy == copy->stride_2d) || (copy->number_of_2d_copies == 1 && copy->length_1d_copy == copy->stride_1d)) { - dory_dma_memcpy_1d_async(copy); - } else if ((copy->number_of_2d_copies == 1) || (copy->length_1d_copy == copy->stride_1d)) {// wrong! - dory_dma_memcpy_2d_async(copy); - } else { - dory_dma_memcpy_3d_async(copy); - } -#ifdef ALWAYS_BLOCK_DMA_TRANSFERS - dory_dma_barrier(copy); -#endif -} - -void dory_dma_free(DMA_copy *copy) { - mchan_transfer_free(copy->tid); -} - -void dory_dma_barrier(DMA_copy *copy) { -#ifdef SINGLE_CORE_DMA - // if DMA is only used by a single core (only 1 ctrl interface), other cores must not access its register file. Instead, they should all wait for core 0 to confirm the transfer is over. - if (pi_core_id() == 0) - mchan_transfer_wait(copy->tid); - pi_cl_team_barrier(0); -#else - mchan_transfer_wait(copy->tid); -#endif -} - -int dory_dma_allocate() { - return mchan_transfer_get_id(); -} diff --git a/rt_nn_tests/xptnn_maxpool/dory_dma.h b/rt_nn_tests/xptnn_maxpool/dory_dma.h deleted file mode 100644 index e0b3ef3..0000000 --- a/rt_nn_tests/xptnn_maxpool/dory_dma.h +++ /dev/null @@ -1,52 +0,0 @@ -/* - * dory.h - * Alessio Burrello - * - * Copyright (C) 2019-2020 University of Bologna - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef _DORY_DMA_H -#define _DORY_DMA_H - -typedef struct -{ - void *ext; - void *loc; - unsigned short hwc_to_chw; - unsigned short stride_2d; - unsigned short number_of_2d_copies; - unsigned short stride_1d; - unsigned short number_of_1d_copies; - unsigned short length_1d_copy; - int dir; // 0 l1->l2, 1 l2->l1 - int tid; -} DMA_copy; - -void dory_dma_memcpy_hwc_to_chw(DMA_copy *copy); - -void dory_dma_memcpy_1d_async(DMA_copy *copy); - -void dory_dma_memcpy_2d_async(DMA_copy *copy); - -void dory_dma_memcpy_3d_async(DMA_copy *copy); - -void dory_dma_memcpy_async(DMA_copy *copy); - -void dory_dma_free(DMA_copy *copy); - -void dory_dma_barrier(DMA_copy *copy); - -int dory_dma_allocate(); -#endif diff --git a/rt_nn_tests/xptnn_maxpool/mchan.h b/rt_nn_tests/xptnn_maxpool/mchan.h deleted file mode 100644 index 95882ab..0000000 --- a/rt_nn_tests/xptnn_maxpool/mchan.h +++ /dev/null @@ -1,137 +0,0 @@ -#ifndef _MCHAN_H -#define _MCHAN_H - -// Requires to have MCHAN_BASE_ADDR, MCHAN_EVENT defined outside of header -#ifndef MCHAN_BASE_ADDR -#error "[mchan.h] MCHAN_BASE_ADDR not defined!" -#endif - -#if !defined(MCHAN_EVENT) && !defined(MCHAN_POLLED) -#error "[mchan.h] Nor MCHAN_EVENT nor MCHAN_POLLED defined!" -#endif - -#if defined(MCHAN_EVENT) && !defined(MCHAN_EVENT_BIT) -#error "[mchan.h] MCHAN_EVENT_BIT should be defined when using events as signalization!" -#endif - -#include "pmsis.h" - -#define MCHAN_CMD_OFFSET 0 -#define MCHAN_STATUS_OFFSET 4 - -#define MCHAN_CMD_ADDR (MCHAN_BASE_ADDR + MCHAN_CMD_OFFSET) -#define MCHAN_STATUS_ADDR (MCHAN_BASE_ADDR + MCHAN_STATUS_OFFSET) - -#define READ_REG(addr) (*(volatile int*)(addr)) -#define WRITE_REG(addr, value) do { *(volatile int*)(addr) = (int)value; } while (0) - -#define MCHAN_READ_CMD() READ_REG(MCHAN_CMD_ADDR) -#define MCHAN_WRITE_CMD(value) WRITE_REG(MCHAN_CMD_ADDR, value) - -#define MCHAN_READ_STATUS() READ_REG(MCHAN_STATUS_ADDR) -#define MCHAN_WRITE_STATUS(value) WRITE_REG(MCHAN_STATUS_ADDR, value) - -// MCHAN version 7 has 1 more bit for the transfer length, so all the flag offsets are shifted by 1. Also, LOC (TCDM) striding is not supported in v6. -#if MCHAN_VERSION==7 -#define MCHAN_TRANSFER_LEN_SIZE (17) -#else -#define MCHAN_TRANSFER_LEN_SIZE (16) -#endif - -#define MCHAN_CMD_FLAG_DIRECTION_LOC2EXT (0 << (MCHAN_TRANSFER_LEN_SIZE + 0)) -#define MCHAN_CMD_FLAG_DIRECTION_EXT2LOC (1 << (MCHAN_TRANSFER_LEN_SIZE + 0)) -#define MCHAN_CMD_FLAG_INCREMENTAL (1 << (MCHAN_TRANSFER_LEN_SIZE + 1)) -#define MCHAN_CMD_FLAG_2D_TRANSFER_EXTERNAL (1 << (MCHAN_TRANSFER_LEN_SIZE + 2)) -#define MCHAN_CMD_FLAG_EVENT_ENABLE (1 << (MCHAN_TRANSFER_LEN_SIZE + 3)) -#define MCHAN_CMD_FLAG_INTERRUPT_ENABLE (1 << (MCHAN_TRANSFER_LEN_SIZE + 4)) -#define MCHAN_CMD_FLAG_BROADCAST_FINISH (1 << (MCHAN_TRANSFER_LEN_SIZE + 5)) -#if MCHAN_VERSION==7 -#define MCHAN_CMD_FLAG_2D_TRANSFER_LOCAL (1 << (MCHAN_TRANSFER_LEN_SIZE + 6)) // can only be used with MCHAN v7 -#endif -#define MCHAN_CMD_SHIFT_DIRECTION MCHAN_TRANSFER_LEN_SIZE - - -#define MCHAN_CMD(len, dir, inc, loc_2d, ext_2d, int_en, event_en, broadcast) \ - (len | dir | inc | loc_2d | ext_2d | broadcast | int_en | event_en) - -typedef enum { - MCHAN_DMA_TRANSFER_DIRECTION_EXT2LOC = MCHAN_CMD_FLAG_DIRECTION_EXT2LOC, - MCHAN_DMA_TRANSFER_DIRECTION_LOC2EXT = MCHAN_CMD_FLAG_DIRECTION_LOC2EXT -} mchan_dma_transfer_direction_e; - -typedef struct { - int cmd; - int size; - - void *loc; - int loc_size_1d; - int loc_stride_1d; - - void *ext; - int ext_size_1d; - int ext_stride_1d; -} mchan_transfer_t; - -static int mchan_transfer_get_id() { - return MCHAN_READ_CMD(); -} - -static void mchan_transfer_push_1d(mchan_transfer_t trans) -{ - MCHAN_WRITE_CMD(trans.cmd); - MCHAN_WRITE_CMD(trans.loc); - MCHAN_WRITE_CMD(trans.ext); -} - -static void mchan_transfer_push_2d(mchan_transfer_t trans) -{ - MCHAN_WRITE_CMD(trans.cmd); - MCHAN_WRITE_CMD(trans.loc); - MCHAN_WRITE_CMD(trans.ext); -// MCHAN version 7 takes 2D "count" (length of 1D transfers) and stride in 2 steps, -// v7 takes it in 1 step with the stride shifted to the upper 16 bits. -#if MCHAN_VERSION==7 - MCHAN_WRITE_CMD(trans.ext_size_1d); - MCHAN_WRITE_CMD(trans.ext_stride_1d); -#else - MCHAN_WRITE_CMD(trans.ext_size_1d | (trans.ext_stride_1d << 16)); -#endif -} - -static void mchan_transfer_push(mchan_transfer_t trans) -{ - MCHAN_WRITE_CMD(trans.cmd); - MCHAN_WRITE_CMD(trans.loc); - MCHAN_WRITE_CMD(trans.ext); - - if (trans.ext_size_1d < trans.size) { - MCHAN_WRITE_CMD(trans.ext_size_1d); - MCHAN_WRITE_CMD(trans.ext_stride_1d); - } - - if (trans.loc_size_1d < trans.size) { - MCHAN_WRITE_CMD(trans.loc_size_1d); - MCHAN_WRITE_CMD(trans.loc_stride_1d); - } -} - -static void mchan_transfer_free(int tid) -{ - MCHAN_WRITE_STATUS(1 << tid); -} - -static int mchan_transfer_busy(int tid) -{ - return MCHAN_READ_STATUS() & (1 << tid); -} - -static void mchan_transfer_wait(int tid) -{ - #if defined(MCHAN_EVENT) - while(mchan_transfer_busy(tid)) eu_evt_maskWaitAndClr(1 << MCHAN_EVENT_BIT); - #elif defined(MCHAN_POLLED) - while(mchan_transfer_busy(tid)) ; - #endif -} - -#endif diff --git a/rt_nn_tests/xptnn_maxpool/test.c b/rt_nn_tests/xptnn_maxpool/test.c index 3d78553..d9186c0 100644 --- a/rt_nn_tests/xptnn_maxpool/test.c +++ b/rt_nn_tests/xptnn_maxpool/test.c @@ -1,10 +1,7 @@ -// massive hack to enable rt compatibility -#define pi_core_id get_core_id #include #include #include -#include "dory_dma.h" #include "xpulp_tnn_matmul_ternary.h" #include "xpulp_tnn_matmul_ternary_4x1.h" @@ -149,27 +146,18 @@ void call_krnl_0(void) { } void test_0(void) { - uint32_t dma_channel = dory_dma_allocate(); - DMA_copy dma_tx = {0}; // DMA transfer inputs from L2 to L1 - dma_tx.ext = pIn_0; - dma_tx.loc = inp_l1; - dma_tx.number_of_1d_copies = 1; - dma_tx.number_of_2d_copies = 1; - dma_tx.length_1d_copy = 8192; - dma_tx.stride_1d = 1; - dma_tx.stride_2d = 1; - dma_tx.dir = 1; - dma_tx.tid = dma_channel; - dory_dma_memcpy_async(&dma_tx); + if (pi_core_id() == 0) { + plp_dma_memcpy(pIn_0, inp_l1, 8192, 1); + plp_dma_barrier(); + } + pi_cl_team_barrier(0); call_krnl_0(); // get outputs back with DMA - dma_tx.dir = 0; - dma_tx.ext = outputs; - dma_tx.loc = outp_l1; - dma_tx.length_1d_copy = 2048; - dory_dma_memcpy_async(&dma_tx); - dory_dma_free(&dma_tx); + if (pi_core_id() == 0) { + plp_dma_memcpy(outputs, outp_l1, 2048, 0); + plp_dma_barrier(); + } } From ee2dd1cd1cfabd77eb58a8f23acf447b4bd20815 Mon Sep 17 00:00:00 2001 From: Georg Rutishauser Date: Fri, 28 Jun 2024 15:42:09 +0200 Subject: [PATCH 51/71] fix iDMA test dma calls --- idma_tests/idma_simple/simple_tx.c | 78 +++++++++++++++--------------- 1 file changed, 39 insertions(+), 39 deletions(-) diff --git a/idma_tests/idma_simple/simple_tx.c b/idma_tests/idma_simple/simple_tx.c index b662dec..5156078 100644 --- a/idma_tests/idma_simple/simple_tx.c +++ b/idma_tests/idma_simple/simple_tx.c @@ -26,10 +26,10 @@ int main() if (rt_cluster_id() != 0) return bench_cluster_forward(0); - + int error_count = 0; - - + + /* if (rt_core_id() == 0) */ /* { */ /* if ((ext = rt_alloc(RT_ALLOC_L2_CL_DATA, MAX_BUFFER_SIZE)) == 0) return -1; */ @@ -41,93 +41,93 @@ int main() for ( int i = 5; i < 8045; i=5*i) { error_count += testMCHAN(i, TX, ext, loc); - } + } for ( int i = 5; i < 8045; i=5*i ) { error_count += testMCHAN(i, RX, ext, loc); } - + } - + return error_count; - + } int testMCHAN(unsigned int len, test_type_t type, unsigned int ext_addr, unsigned int tcdm_addr){ - + volatile unsigned int i,j,id; volatile unsigned int test,read,error=0; - + if (type == RX){ - + #ifdef VERBOSE printf ("STARTING TEST FOR RX %d OPERATION: \n", len); #endif - + for (i=0; i Date: Mon, 1 Jul 2024 18:19:56 +0200 Subject: [PATCH 52/71] add iDMA zeroMem test --- idma-tests.yaml | 4 + idma_tests/idma_simple/dma_wave.do | 482 ++++++++++++++++++++++++----- 2 files changed, 406 insertions(+), 80 deletions(-) diff --git a/idma-tests.yaml b/idma-tests.yaml index 0da40e7..6bef5c3 100644 --- a/idma-tests.yaml +++ b/idma-tests.yaml @@ -2,3 +2,7 @@ idma_tests: idma_simple: path: ./idma_tests/idma_simple command: make clean all run + idma_zeromem: + path: ./idma_tests/idma_zeromem + command: make clean all run + diff --git a/idma_tests/idma_simple/dma_wave.do b/idma_tests/idma_simple/dma_wave.do index abac7ca..df25845 100644 --- a/idma_tests/idma_simple/dma_wave.do +++ b/idma_tests/idma_simple/dma_wave.do @@ -1,87 +1,409 @@ onerror {resume} quietly WaveActivateNextPane {} 0 -add wave -noupdate -group {iDMA Wrap} /pulp_cluster_tb/cluster_i/genblk2/dmac_wrap_i/clk_i -add wave -noupdate -group {iDMA Wrap} /pulp_cluster_tb/cluster_i/genblk2/dmac_wrap_i/rst_ni -add wave -noupdate -group {iDMA Wrap} /pulp_cluster_tb/cluster_i/genblk2/dmac_wrap_i/test_mode_i -add wave -noupdate -group {iDMA Wrap} /pulp_cluster_tb/cluster_i/genblk2/dmac_wrap_i/ext_master_req_o -add wave -noupdate -group {iDMA Wrap} /pulp_cluster_tb/cluster_i/genblk2/dmac_wrap_i/ext_master_resp_i -add wave -noupdate -group {iDMA Wrap} /pulp_cluster_tb/cluster_i/genblk2/dmac_wrap_i/term_event_o -add wave -noupdate -group {iDMA Wrap} /pulp_cluster_tb/cluster_i/genblk2/dmac_wrap_i/term_irq_o -add wave -noupdate -group {iDMA Wrap} /pulp_cluster_tb/cluster_i/genblk2/dmac_wrap_i/term_event_pe_o -add wave -noupdate -group {iDMA Wrap} /pulp_cluster_tb/cluster_i/genblk2/dmac_wrap_i/term_irq_pe_o -add wave -noupdate -group {iDMA Wrap} /pulp_cluster_tb/cluster_i/genblk2/dmac_wrap_i/busy_o -add wave -noupdate -group {iDMA Wrap} /pulp_cluster_tb/cluster_i/genblk2/dmac_wrap_i/config_wdata -add wave -noupdate -group {iDMA Wrap} /pulp_cluster_tb/cluster_i/genblk2/dmac_wrap_i/config_add -add wave -noupdate -group {iDMA Wrap} /pulp_cluster_tb/cluster_i/genblk2/dmac_wrap_i/config_req -add wave -noupdate -group {iDMA Wrap} /pulp_cluster_tb/cluster_i/genblk2/dmac_wrap_i/config_wen -add wave -noupdate -group {iDMA Wrap} /pulp_cluster_tb/cluster_i/genblk2/dmac_wrap_i/config_be -add wave -noupdate -group {iDMA Wrap} /pulp_cluster_tb/cluster_i/genblk2/dmac_wrap_i/config_id -add wave -noupdate -group {iDMA Wrap} /pulp_cluster_tb/cluster_i/genblk2/dmac_wrap_i/config_gnt -add wave -noupdate -group {iDMA Wrap} /pulp_cluster_tb/cluster_i/genblk2/dmac_wrap_i/config_r_rdata -add wave -noupdate -group {iDMA Wrap} /pulp_cluster_tb/cluster_i/genblk2/dmac_wrap_i/config_r_valid -add wave -noupdate -group {iDMA Wrap} /pulp_cluster_tb/cluster_i/genblk2/dmac_wrap_i/config_r_opc -add wave -noupdate -group {iDMA Wrap} /pulp_cluster_tb/cluster_i/genblk2/dmac_wrap_i/config_r_id -add wave -noupdate -group {iDMA Wrap} -expand -subitemconfig {{/pulp_cluster_tb/cluster_i/genblk2/dmac_wrap_i/obi_read_req_from_dma[0]} -expand} /pulp_cluster_tb/cluster_i/genblk2/dmac_wrap_i/obi_read_req_from_dma -add wave -noupdate -group {iDMA Wrap} /pulp_cluster_tb/cluster_i/genblk2/dmac_wrap_i/obi_reorg_req -add wave -noupdate -group {iDMA Wrap} /pulp_cluster_tb/cluster_i/genblk2/dmac_wrap_i/obi_write_req -add wave -noupdate -group {iDMA Wrap} -expand -subitemconfig {{/pulp_cluster_tb/cluster_i/genblk2/dmac_wrap_i/obi_read_req_muxed[0]} -expand} /pulp_cluster_tb/cluster_i/genblk2/dmac_wrap_i/obi_read_req_muxed -add wave -noupdate -group {iDMA Wrap} /pulp_cluster_tb/cluster_i/genblk2/dmac_wrap_i/obi_read_rsp_to_dma -add wave -noupdate -group {iDMA Wrap} /pulp_cluster_tb/cluster_i/genblk2/dmac_wrap_i/obi_reorg_rsp -add wave -noupdate -group {iDMA Wrap} /pulp_cluster_tb/cluster_i/genblk2/dmac_wrap_i/obi_write_rsp -add wave -noupdate -group {iDMA Wrap} -expand -subitemconfig {{/pulp_cluster_tb/cluster_i/genblk2/dmac_wrap_i/obi_read_rsp_to_mux[0]} -expand {/pulp_cluster_tb/cluster_i/genblk2/dmac_wrap_i/obi_read_rsp_to_mux[0].r} -expand} /pulp_cluster_tb/cluster_i/genblk2/dmac_wrap_i/obi_read_rsp_to_mux -add wave -noupdate -group {iDMA Wrap} /pulp_cluster_tb/cluster_i/genblk2/dmac_wrap_i/soc_req -add wave -noupdate -group {iDMA Wrap} /pulp_cluster_tb/cluster_i/genblk2/dmac_wrap_i/soc_rsp -add wave -noupdate -group {iDMA Wrap} /pulp_cluster_tb/cluster_i/genblk2/dmac_wrap_i/dma_req -add wave -noupdate -group {iDMA Wrap} /pulp_cluster_tb/cluster_i/genblk2/dmac_wrap_i/dma_rsp -add wave -noupdate -group {iDMA Wrap} /pulp_cluster_tb/cluster_i/genblk2/dmac_wrap_i/dma_regs_req -add wave -noupdate -group {iDMA Wrap} /pulp_cluster_tb/cluster_i/genblk2/dmac_wrap_i/dma_regs_rsp -add wave -noupdate -group {iDMA Wrap} /pulp_cluster_tb/cluster_i/genblk2/dmac_wrap_i/stream_idx -add wave -noupdate -group {iDMA Wrap} /pulp_cluster_tb/cluster_i/genblk2/dmac_wrap_i/twod_req -add wave -noupdate -group {iDMA Wrap} /pulp_cluster_tb/cluster_i/genblk2/dmac_wrap_i/twod_req_queue -add wave -noupdate -group {iDMA Wrap} /pulp_cluster_tb/cluster_i/genblk2/dmac_wrap_i/idma_req -add wave -noupdate -group {iDMA Wrap} /pulp_cluster_tb/cluster_i/genblk2/dmac_wrap_i/idma_rsp -add wave -noupdate -group {iDMA Wrap} /pulp_cluster_tb/cluster_i/genblk2/dmac_wrap_i/one_fe_valid -add wave -noupdate -group {iDMA Wrap} /pulp_cluster_tb/cluster_i/genblk2/dmac_wrap_i/fe_valid -add wave -noupdate -group {iDMA Wrap} /pulp_cluster_tb/cluster_i/genblk2/dmac_wrap_i/twod_queue_valid -add wave -noupdate -group {iDMA Wrap} /pulp_cluster_tb/cluster_i/genblk2/dmac_wrap_i/be_valid -add wave -noupdate -group {iDMA Wrap} /pulp_cluster_tb/cluster_i/genblk2/dmac_wrap_i/be_rsp_valid -add wave -noupdate -group {iDMA Wrap} /pulp_cluster_tb/cluster_i/genblk2/dmac_wrap_i/fe_ready -add wave -noupdate -group {iDMA Wrap} /pulp_cluster_tb/cluster_i/genblk2/dmac_wrap_i/twod_queue_ready -add wave -noupdate -group {iDMA Wrap} /pulp_cluster_tb/cluster_i/genblk2/dmac_wrap_i/be_ready -add wave -noupdate -group {iDMA Wrap} /pulp_cluster_tb/cluster_i/genblk2/dmac_wrap_i/be_rsp_ready -add wave -noupdate -group {iDMA Wrap} /pulp_cluster_tb/cluster_i/genblk2/dmac_wrap_i/trans_complete -add wave -noupdate -group {iDMA Wrap} /pulp_cluster_tb/cluster_i/genblk2/dmac_wrap_i/midend_busy -add wave -noupdate -group {iDMA Wrap} /pulp_cluster_tb/cluster_i/genblk2/dmac_wrap_i/idma_busy -add wave -noupdate -group {iDMA Wrap} /pulp_cluster_tb/cluster_i/genblk2/dmac_wrap_i/done_id -add wave -noupdate -group {iDMA Wrap} /pulp_cluster_tb/cluster_i/genblk2/dmac_wrap_i/next_id -add wave -noupdate -expand -group {dma ctrl 0} {/pulp_cluster_tb/cluster_i/genblk2/dmac_wrap_i/gen_core_regs[0]/i_pe_translate/clk_i} -add wave -noupdate -expand -group {dma ctrl 0} {/pulp_cluster_tb/cluster_i/genblk2/dmac_wrap_i/gen_core_regs[0]/i_pe_translate/rst_ni} -add wave -noupdate -expand -group {dma ctrl 0} {/pulp_cluster_tb/cluster_i/genblk2/dmac_wrap_i/gen_core_regs[0]/i_pe_translate/req_i} -add wave -noupdate -expand -group {dma ctrl 0} {/pulp_cluster_tb/cluster_i/genblk2/dmac_wrap_i/gen_core_regs[0]/i_pe_translate/add_i} -add wave -noupdate -expand -group {dma ctrl 0} {/pulp_cluster_tb/cluster_i/genblk2/dmac_wrap_i/gen_core_regs[0]/i_pe_translate/wen_i} -add wave -noupdate -expand -group {dma ctrl 0} {/pulp_cluster_tb/cluster_i/genblk2/dmac_wrap_i/gen_core_regs[0]/i_pe_translate/wdata_i} -add wave -noupdate -expand -group {dma ctrl 0} {/pulp_cluster_tb/cluster_i/genblk2/dmac_wrap_i/gen_core_regs[0]/i_pe_translate/be_i} -add wave -noupdate -expand -group {dma ctrl 0} {/pulp_cluster_tb/cluster_i/genblk2/dmac_wrap_i/gen_core_regs[0]/i_pe_translate/id_i} -add wave -noupdate -expand -group {dma ctrl 0} {/pulp_cluster_tb/cluster_i/genblk2/dmac_wrap_i/gen_core_regs[0]/i_pe_translate/gnt_o} -add wave -noupdate -expand -group {dma ctrl 0} {/pulp_cluster_tb/cluster_i/genblk2/dmac_wrap_i/gen_core_regs[0]/i_pe_translate/r_rdata_o} -add wave -noupdate -expand -group {dma ctrl 0} {/pulp_cluster_tb/cluster_i/genblk2/dmac_wrap_i/gen_core_regs[0]/i_pe_translate/r_opc_o} -add wave -noupdate -expand -group {dma ctrl 0} {/pulp_cluster_tb/cluster_i/genblk2/dmac_wrap_i/gen_core_regs[0]/i_pe_translate/r_id_o} -add wave -noupdate -expand -group {dma ctrl 0} {/pulp_cluster_tb/cluster_i/genblk2/dmac_wrap_i/gen_core_regs[0]/i_pe_translate/r_valid_o} -add wave -noupdate -expand -group {dma ctrl 0} {/pulp_cluster_tb/cluster_i/genblk2/dmac_wrap_i/gen_core_regs[0]/i_pe_translate/reg_req_o} -add wave -noupdate -expand -group {dma ctrl 0} {/pulp_cluster_tb/cluster_i/genblk2/dmac_wrap_i/gen_core_regs[0]/i_pe_translate/reg_rsp_i} -add wave -noupdate -expand -group {dma ctrl 0} {/pulp_cluster_tb/cluster_i/genblk2/dmac_wrap_i/gen_core_regs[0]/i_pe_translate/r_id_d} -add wave -noupdate -expand -group {dma ctrl 0} {/pulp_cluster_tb/cluster_i/genblk2/dmac_wrap_i/gen_core_regs[0]/i_pe_translate/r_id_q} -add wave -noupdate -expand -group {dma ctrl 0} {/pulp_cluster_tb/cluster_i/genblk2/dmac_wrap_i/gen_core_regs[0]/i_pe_translate/r_opc_d} -add wave -noupdate -expand -group {dma ctrl 0} {/pulp_cluster_tb/cluster_i/genblk2/dmac_wrap_i/gen_core_regs[0]/i_pe_translate/r_opc_q} -add wave -noupdate -expand -group {dma ctrl 0} {/pulp_cluster_tb/cluster_i/genblk2/dmac_wrap_i/gen_core_regs[0]/i_pe_translate/r_valid_d} -add wave -noupdate -expand -group {dma ctrl 0} {/pulp_cluster_tb/cluster_i/genblk2/dmac_wrap_i/gen_core_regs[0]/i_pe_translate/r_valid_q} -add wave -noupdate -expand -group {dma ctrl 0} {/pulp_cluster_tb/cluster_i/genblk2/dmac_wrap_i/gen_core_regs[0]/i_pe_translate/r_rdata_d} -add wave -noupdate -expand -group {dma ctrl 0} {/pulp_cluster_tb/cluster_i/genblk2/dmac_wrap_i/gen_core_regs[0]/i_pe_translate/r_rdata_q} +add wave -noupdate -expand -group {iDMA wrap} /pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/rst_ni +add wave -noupdate -expand -group {iDMA wrap} /pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/test_mode_i +add wave -noupdate -expand -group {iDMA wrap} /pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/ext_master_req_o +add wave -noupdate -expand -group {iDMA wrap} /pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/ext_master_resp_i +add wave -noupdate -expand -group {iDMA wrap} /pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/term_event_o +add wave -noupdate -expand -group {iDMA wrap} /pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/term_irq_o +add wave -noupdate -expand -group {iDMA wrap} /pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/term_event_pe_o +add wave -noupdate -expand -group {iDMA wrap} /pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/term_irq_pe_o +add wave -noupdate -expand -group {iDMA wrap} /pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/busy_o +add wave -noupdate -expand -group {iDMA wrap} /pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/config_wdata +add wave -noupdate -expand -group {iDMA wrap} /pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/config_add +add wave -noupdate -expand -group {iDMA wrap} /pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/config_req +add wave -noupdate -expand -group {iDMA wrap} /pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/config_wen +add wave -noupdate -expand -group {iDMA wrap} /pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/config_be +add wave -noupdate -expand -group {iDMA wrap} /pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/config_id +add wave -noupdate -expand -group {iDMA wrap} /pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/config_gnt +add wave -noupdate -expand -group {iDMA wrap} /pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/config_r_rdata +add wave -noupdate -expand -group {iDMA wrap} /pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/config_r_valid +add wave -noupdate -expand -group {iDMA wrap} /pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/config_r_opc +add wave -noupdate -expand -group {iDMA wrap} /pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/config_r_id +add wave -noupdate -expand -group {iDMA wrap} /pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/obi_read_req_from_dma +add wave -noupdate -expand -group {iDMA wrap} /pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/obi_read_req_from_rrc +add wave -noupdate -expand -group {iDMA wrap} /pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/obi_reorg_req_from_dma +add wave -noupdate -expand -group {iDMA wrap} /pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/obi_reorg_req_from_rrc +add wave -noupdate -expand -group {iDMA wrap} /pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/obi_write_req_from_dma +add wave -noupdate -expand -group {iDMA wrap} /pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/obi_write_req_from_rrc +add wave -noupdate -expand -group {iDMA wrap} /pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/obi_read_req_muxed +add wave -noupdate -expand -group {iDMA wrap} /pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/obi_read_rsp_to_dma +add wave -noupdate -expand -group {iDMA wrap} /pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/obi_read_rsp_to_rrc +add wave -noupdate -expand -group {iDMA wrap} /pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/obi_reorg_rsp_to_dma +add wave -noupdate -expand -group {iDMA wrap} /pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/obi_reorg_rsp_to_rrc +add wave -noupdate -expand -group {iDMA wrap} -subitemconfig {{/pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/obi_write_rsp_to_dma[0]} -expand} /pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/obi_write_rsp_to_dma +add wave -noupdate -expand -group {iDMA wrap} -subitemconfig {{/pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/obi_write_rsp_to_rrc[0]} -expand} /pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/obi_write_rsp_to_rrc +add wave -noupdate -expand -group {iDMA wrap} /pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/obi_read_rsp_to_mux +add wave -noupdate -expand -group {iDMA wrap} /pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/soc_req +add wave -noupdate -expand -group {iDMA wrap} /pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/soc_rsp +add wave -noupdate -expand -group {iDMA wrap} /pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/dma_req +add wave -noupdate -expand -group {iDMA wrap} /pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/dma_rsp +add wave -noupdate -expand -group {iDMA wrap} /pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/dma_regs_req +add wave -noupdate -expand -group {iDMA wrap} /pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/dma_regs_rsp +add wave -noupdate -expand -group {iDMA wrap} /pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/stream_idx +add wave -noupdate -expand -group {iDMA wrap} /pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/twod_req +add wave -noupdate -expand -group {iDMA wrap} /pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/twod_req_queue +add wave -noupdate -expand -group {iDMA wrap} /pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/idma_req +add wave -noupdate -expand -group {iDMA wrap} /pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/idma_rsp +add wave -noupdate -expand -group {iDMA wrap} /pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/one_fe_valid +add wave -noupdate -expand -group {iDMA wrap} /pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/fe_valid +add wave -noupdate -expand -group {iDMA wrap} /pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/twod_queue_valid +add wave -noupdate -expand -group {iDMA wrap} /pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/be_valid +add wave -noupdate -expand -group {iDMA wrap} /pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/be_rsp_valid +add wave -noupdate -expand -group {iDMA wrap} /pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/fe_ready +add wave -noupdate -expand -group {iDMA wrap} /pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/twod_queue_ready +add wave -noupdate -expand -group {iDMA wrap} /pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/be_ready +add wave -noupdate -expand -group {iDMA wrap} /pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/be_rsp_ready +add wave -noupdate -expand -group {iDMA wrap} /pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/trans_complete +add wave -noupdate -expand -group {iDMA wrap} /pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/midend_busy +add wave -noupdate -expand -group {iDMA wrap} -expand /pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/idma_busy +add wave -noupdate -expand -group {iDMA wrap} /pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/done_id +add wave -noupdate -expand -group {iDMA wrap} /pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/next_id +add wave -noupdate -group {init strm1} /pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/clk_i +add wave -noupdate -group {init strm1} {/pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/gen_streams[1]/gen_cpy_in/init_write_rsp} +add wave -noupdate -group {init strm1} {/pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/gen_streams[1]/gen_cpy_in/init_write_req} +add wave -noupdate -group {init strm1} {/pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/gen_streams[1]/gen_cpy_in/init_read_req.req_valid} +add wave -noupdate -group {init strm1} {/pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/gen_streams[1]/gen_cpy_in/init_read_rsp.req_ready} +add wave -noupdate -group {init strm1} {/pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/gen_streams[1]/gen_cpy_in/init_read_rsp.rsp_valid} +add wave -noupdate -group {init strm1} {/pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/gen_streams[1]/gen_cpy_in/init_read_req.rsp_ready} +add wave -noupdate -group {init strm1} -expand {/pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/gen_streams[1]/gen_cpy_in/init_read_rsp} +add wave -noupdate -group {init strm1} -expand {/pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/gen_streams[1]/gen_cpy_in/init_read_req} +add wave -noupdate -group {to OBI transport layer} {/pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/gen_streams[1]/gen_cpy_in/i_idma_backend_r_axi_rw_init_rw_obi/i_idma_transport_layer/clk_i} +add wave -noupdate -group {to OBI transport layer} {/pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/gen_streams[1]/gen_cpy_in/i_idma_backend_r_axi_rw_init_rw_obi/i_idma_transport_layer/rst_ni} +add wave -noupdate -group {to OBI transport layer} {/pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/gen_streams[1]/gen_cpy_in/i_idma_backend_r_axi_rw_init_rw_obi/i_idma_transport_layer/testmode_i} +add wave -noupdate -group {to OBI transport layer} {/pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/gen_streams[1]/gen_cpy_in/i_idma_backend_r_axi_rw_init_rw_obi/i_idma_transport_layer/axi_read_req_o} +add wave -noupdate -group {to OBI transport layer} {/pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/gen_streams[1]/gen_cpy_in/i_idma_backend_r_axi_rw_init_rw_obi/i_idma_transport_layer/axi_read_rsp_i} +add wave -noupdate -group {to OBI transport layer} {/pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/gen_streams[1]/gen_cpy_in/i_idma_backend_r_axi_rw_init_rw_obi/i_idma_transport_layer/init_read_req_o} +add wave -noupdate -group {to OBI transport layer} {/pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/gen_streams[1]/gen_cpy_in/i_idma_backend_r_axi_rw_init_rw_obi/i_idma_transport_layer/init_read_rsp_i} +add wave -noupdate -group {to OBI transport layer} {/pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/gen_streams[1]/gen_cpy_in/i_idma_backend_r_axi_rw_init_rw_obi/i_idma_transport_layer/obi_read_req_o} +add wave -noupdate -group {to OBI transport layer} {/pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/gen_streams[1]/gen_cpy_in/i_idma_backend_r_axi_rw_init_rw_obi/i_idma_transport_layer/obi_read_rsp_i} +add wave -noupdate -group {to OBI transport layer} {/pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/gen_streams[1]/gen_cpy_in/i_idma_backend_r_axi_rw_init_rw_obi/i_idma_transport_layer/init_write_req_o} +add wave -noupdate -group {to OBI transport layer} {/pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/gen_streams[1]/gen_cpy_in/i_idma_backend_r_axi_rw_init_rw_obi/i_idma_transport_layer/init_write_rsp_i} +add wave -noupdate -group {to OBI transport layer} {/pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/gen_streams[1]/gen_cpy_in/i_idma_backend_r_axi_rw_init_rw_obi/i_idma_transport_layer/obi_write_req_o} +add wave -noupdate -group {to OBI transport layer} {/pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/gen_streams[1]/gen_cpy_in/i_idma_backend_r_axi_rw_init_rw_obi/i_idma_transport_layer/obi_write_rsp_i} +add wave -noupdate -group {to OBI transport layer} {/pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/gen_streams[1]/gen_cpy_in/i_idma_backend_r_axi_rw_init_rw_obi/i_idma_transport_layer/r_dp_req_i} +add wave -noupdate -group {to OBI transport layer} {/pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/gen_streams[1]/gen_cpy_in/i_idma_backend_r_axi_rw_init_rw_obi/i_idma_transport_layer/r_dp_valid_i} +add wave -noupdate -group {to OBI transport layer} {/pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/gen_streams[1]/gen_cpy_in/i_idma_backend_r_axi_rw_init_rw_obi/i_idma_transport_layer/r_dp_ready_o} +add wave -noupdate -group {to OBI transport layer} {/pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/gen_streams[1]/gen_cpy_in/i_idma_backend_r_axi_rw_init_rw_obi/i_idma_transport_layer/r_dp_rsp_o} +add wave -noupdate -group {to OBI transport layer} {/pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/gen_streams[1]/gen_cpy_in/i_idma_backend_r_axi_rw_init_rw_obi/i_idma_transport_layer/r_dp_valid_o} +add wave -noupdate -group {to OBI transport layer} {/pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/gen_streams[1]/gen_cpy_in/i_idma_backend_r_axi_rw_init_rw_obi/i_idma_transport_layer/r_dp_ready_i} +add wave -noupdate -group {to OBI transport layer} {/pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/gen_streams[1]/gen_cpy_in/i_idma_backend_r_axi_rw_init_rw_obi/i_idma_transport_layer/w_dp_req_i} +add wave -noupdate -group {to OBI transport layer} {/pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/gen_streams[1]/gen_cpy_in/i_idma_backend_r_axi_rw_init_rw_obi/i_idma_transport_layer/w_dp_valid_i} +add wave -noupdate -group {to OBI transport layer} {/pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/gen_streams[1]/gen_cpy_in/i_idma_backend_r_axi_rw_init_rw_obi/i_idma_transport_layer/w_dp_ready_o} +add wave -noupdate -group {to OBI transport layer} {/pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/gen_streams[1]/gen_cpy_in/i_idma_backend_r_axi_rw_init_rw_obi/i_idma_transport_layer/w_dp_rsp_o} +add wave -noupdate -group {to OBI transport layer} {/pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/gen_streams[1]/gen_cpy_in/i_idma_backend_r_axi_rw_init_rw_obi/i_idma_transport_layer/w_dp_valid_o} +add wave -noupdate -group {to OBI transport layer} {/pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/gen_streams[1]/gen_cpy_in/i_idma_backend_r_axi_rw_init_rw_obi/i_idma_transport_layer/w_dp_ready_i} +add wave -noupdate -group {to OBI transport layer} {/pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/gen_streams[1]/gen_cpy_in/i_idma_backend_r_axi_rw_init_rw_obi/i_idma_transport_layer/ar_req_i} +add wave -noupdate -group {to OBI transport layer} {/pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/gen_streams[1]/gen_cpy_in/i_idma_backend_r_axi_rw_init_rw_obi/i_idma_transport_layer/ar_valid_i} +add wave -noupdate -group {to OBI transport layer} {/pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/gen_streams[1]/gen_cpy_in/i_idma_backend_r_axi_rw_init_rw_obi/i_idma_transport_layer/ar_ready_o} +add wave -noupdate -group {to OBI transport layer} {/pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/gen_streams[1]/gen_cpy_in/i_idma_backend_r_axi_rw_init_rw_obi/i_idma_transport_layer/aw_req_i} +add wave -noupdate -group {to OBI transport layer} {/pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/gen_streams[1]/gen_cpy_in/i_idma_backend_r_axi_rw_init_rw_obi/i_idma_transport_layer/aw_valid_i} +add wave -noupdate -group {to OBI transport layer} {/pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/gen_streams[1]/gen_cpy_in/i_idma_backend_r_axi_rw_init_rw_obi/i_idma_transport_layer/aw_ready_o} +add wave -noupdate -group {to OBI transport layer} {/pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/gen_streams[1]/gen_cpy_in/i_idma_backend_r_axi_rw_init_rw_obi/i_idma_transport_layer/dp_poison_i} +add wave -noupdate -group {to OBI transport layer} {/pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/gen_streams[1]/gen_cpy_in/i_idma_backend_r_axi_rw_init_rw_obi/i_idma_transport_layer/r_chan_ready_o} +add wave -noupdate -group {to OBI transport layer} {/pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/gen_streams[1]/gen_cpy_in/i_idma_backend_r_axi_rw_init_rw_obi/i_idma_transport_layer/r_chan_valid_o} +add wave -noupdate -group {to OBI transport layer} {/pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/gen_streams[1]/gen_cpy_in/i_idma_backend_r_axi_rw_init_rw_obi/i_idma_transport_layer/r_dp_busy_o} +add wave -noupdate -group {to OBI transport layer} {/pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/gen_streams[1]/gen_cpy_in/i_idma_backend_r_axi_rw_init_rw_obi/i_idma_transport_layer/w_dp_busy_o} +add wave -noupdate -group {to OBI transport layer} {/pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/gen_streams[1]/gen_cpy_in/i_idma_backend_r_axi_rw_init_rw_obi/i_idma_transport_layer/buffer_busy_o} +add wave -noupdate -group {to OBI transport layer} {/pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/gen_streams[1]/gen_cpy_in/i_idma_backend_r_axi_rw_init_rw_obi/i_idma_transport_layer/axi_buffer_in_valid} +add wave -noupdate -group {to OBI transport layer} {/pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/gen_streams[1]/gen_cpy_in/i_idma_backend_r_axi_rw_init_rw_obi/i_idma_transport_layer/init_buffer_in_valid} +add wave -noupdate -group {to OBI transport layer} {/pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/gen_streams[1]/gen_cpy_in/i_idma_backend_r_axi_rw_init_rw_obi/i_idma_transport_layer/obi_buffer_in_valid} +add wave -noupdate -group {to OBI transport layer} -expand {/pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/gen_streams[1]/gen_cpy_in/i_idma_backend_r_axi_rw_init_rw_obi/i_idma_transport_layer/buffer_in_valid} +add wave -noupdate -group {to OBI transport layer} {/pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/gen_streams[1]/gen_cpy_in/i_idma_backend_r_axi_rw_init_rw_obi/i_idma_transport_layer/buffer_in_ready} +add wave -noupdate -group {to OBI transport layer} {/pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/gen_streams[1]/gen_cpy_in/i_idma_backend_r_axi_rw_init_rw_obi/i_idma_transport_layer/buffer_out_valid} +add wave -noupdate -group {to OBI transport layer} {/pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/gen_streams[1]/gen_cpy_in/i_idma_backend_r_axi_rw_init_rw_obi/i_idma_transport_layer/buffer_out_valid_shifted} +add wave -noupdate -group {to OBI transport layer} {/pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/gen_streams[1]/gen_cpy_in/i_idma_backend_r_axi_rw_init_rw_obi/i_idma_transport_layer/init_buffer_out_ready} +add wave -noupdate -group {to OBI transport layer} {/pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/gen_streams[1]/gen_cpy_in/i_idma_backend_r_axi_rw_init_rw_obi/i_idma_transport_layer/obi_buffer_out_ready} +add wave -noupdate -group {to OBI transport layer} {/pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/gen_streams[1]/gen_cpy_in/i_idma_backend_r_axi_rw_init_rw_obi/i_idma_transport_layer/buffer_out_ready} +add wave -noupdate -group {to OBI transport layer} {/pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/gen_streams[1]/gen_cpy_in/i_idma_backend_r_axi_rw_init_rw_obi/i_idma_transport_layer/buffer_out_ready_shifted} +add wave -noupdate -group {to OBI transport layer} {/pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/gen_streams[1]/gen_cpy_in/i_idma_backend_r_axi_rw_init_rw_obi/i_idma_transport_layer/axi_buffer_in} +add wave -noupdate -group {to OBI transport layer} {/pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/gen_streams[1]/gen_cpy_in/i_idma_backend_r_axi_rw_init_rw_obi/i_idma_transport_layer/init_buffer_in} +add wave -noupdate -group {to OBI transport layer} {/pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/gen_streams[1]/gen_cpy_in/i_idma_backend_r_axi_rw_init_rw_obi/i_idma_transport_layer/obi_buffer_in} +add wave -noupdate -group {to OBI transport layer} {/pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/gen_streams[1]/gen_cpy_in/i_idma_backend_r_axi_rw_init_rw_obi/i_idma_transport_layer/buffer_in} +add wave -noupdate -group {to OBI transport layer} {/pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/gen_streams[1]/gen_cpy_in/i_idma_backend_r_axi_rw_init_rw_obi/i_idma_transport_layer/buffer_in_shifted} +add wave -noupdate -group {to OBI transport layer} {/pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/gen_streams[1]/gen_cpy_in/i_idma_backend_r_axi_rw_init_rw_obi/i_idma_transport_layer/buffer_out} +add wave -noupdate -group {to OBI transport layer} {/pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/gen_streams[1]/gen_cpy_in/i_idma_backend_r_axi_rw_init_rw_obi/i_idma_transport_layer/buffer_out_shifted} +add wave -noupdate -group {to OBI transport layer} {/pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/gen_streams[1]/gen_cpy_in/i_idma_backend_r_axi_rw_init_rw_obi/i_idma_transport_layer/axi_r_chan_valid} +add wave -noupdate -group {to OBI transport layer} {/pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/gen_streams[1]/gen_cpy_in/i_idma_backend_r_axi_rw_init_rw_obi/i_idma_transport_layer/init_r_chan_valid} +add wave -noupdate -group {to OBI transport layer} {/pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/gen_streams[1]/gen_cpy_in/i_idma_backend_r_axi_rw_init_rw_obi/i_idma_transport_layer/obi_r_chan_valid} +add wave -noupdate -group {to OBI transport layer} {/pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/gen_streams[1]/gen_cpy_in/i_idma_backend_r_axi_rw_init_rw_obi/i_idma_transport_layer/axi_r_chan_ready} +add wave -noupdate -group {to OBI transport layer} {/pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/gen_streams[1]/gen_cpy_in/i_idma_backend_r_axi_rw_init_rw_obi/i_idma_transport_layer/init_r_chan_ready} +add wave -noupdate -group {to OBI transport layer} {/pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/gen_streams[1]/gen_cpy_in/i_idma_backend_r_axi_rw_init_rw_obi/i_idma_transport_layer/obi_r_chan_ready} +add wave -noupdate -group {to OBI transport layer} {/pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/gen_streams[1]/gen_cpy_in/i_idma_backend_r_axi_rw_init_rw_obi/i_idma_transport_layer/axi_r_dp_valid} +add wave -noupdate -group {to OBI transport layer} {/pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/gen_streams[1]/gen_cpy_in/i_idma_backend_r_axi_rw_init_rw_obi/i_idma_transport_layer/init_r_dp_valid} +add wave -noupdate -group {to OBI transport layer} {/pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/gen_streams[1]/gen_cpy_in/i_idma_backend_r_axi_rw_init_rw_obi/i_idma_transport_layer/obi_r_dp_valid} +add wave -noupdate -group {to OBI transport layer} {/pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/gen_streams[1]/gen_cpy_in/i_idma_backend_r_axi_rw_init_rw_obi/i_idma_transport_layer/axi_r_dp_ready} +add wave -noupdate -group {to OBI transport layer} {/pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/gen_streams[1]/gen_cpy_in/i_idma_backend_r_axi_rw_init_rw_obi/i_idma_transport_layer/init_r_dp_ready} +add wave -noupdate -group {to OBI transport layer} {/pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/gen_streams[1]/gen_cpy_in/i_idma_backend_r_axi_rw_init_rw_obi/i_idma_transport_layer/obi_r_dp_ready} +add wave -noupdate -group {to OBI transport layer} {/pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/gen_streams[1]/gen_cpy_in/i_idma_backend_r_axi_rw_init_rw_obi/i_idma_transport_layer/axi_r_dp_rsp} +add wave -noupdate -group {to OBI transport layer} {/pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/gen_streams[1]/gen_cpy_in/i_idma_backend_r_axi_rw_init_rw_obi/i_idma_transport_layer/init_r_dp_rsp} +add wave -noupdate -group {to OBI transport layer} {/pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/gen_streams[1]/gen_cpy_in/i_idma_backend_r_axi_rw_init_rw_obi/i_idma_transport_layer/obi_r_dp_rsp} +add wave -noupdate -group {to OBI transport layer} {/pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/gen_streams[1]/gen_cpy_in/i_idma_backend_r_axi_rw_init_rw_obi/i_idma_transport_layer/axi_ar_ready} +add wave -noupdate -group {to OBI transport layer} {/pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/gen_streams[1]/gen_cpy_in/i_idma_backend_r_axi_rw_init_rw_obi/i_idma_transport_layer/init_ar_ready} +add wave -noupdate -group {to OBI transport layer} {/pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/gen_streams[1]/gen_cpy_in/i_idma_backend_r_axi_rw_init_rw_obi/i_idma_transport_layer/obi_ar_ready} +add wave -noupdate -group {to OBI transport layer} {/pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/gen_streams[1]/gen_cpy_in/i_idma_backend_r_axi_rw_init_rw_obi/i_idma_transport_layer/init_w_dp_rsp_valid} +add wave -noupdate -group {to OBI transport layer} {/pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/gen_streams[1]/gen_cpy_in/i_idma_backend_r_axi_rw_init_rw_obi/i_idma_transport_layer/obi_w_dp_rsp_valid} +add wave -noupdate -group {to OBI transport layer} {/pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/gen_streams[1]/gen_cpy_in/i_idma_backend_r_axi_rw_init_rw_obi/i_idma_transport_layer/init_w_dp_rsp_ready} +add wave -noupdate -group {to OBI transport layer} {/pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/gen_streams[1]/gen_cpy_in/i_idma_backend_r_axi_rw_init_rw_obi/i_idma_transport_layer/obi_w_dp_rsp_ready} +add wave -noupdate -group {to OBI transport layer} {/pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/gen_streams[1]/gen_cpy_in/i_idma_backend_r_axi_rw_init_rw_obi/i_idma_transport_layer/init_w_dp_ready} +add wave -noupdate -group {to OBI transport layer} {/pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/gen_streams[1]/gen_cpy_in/i_idma_backend_r_axi_rw_init_rw_obi/i_idma_transport_layer/obi_w_dp_ready} +add wave -noupdate -group {to OBI transport layer} {/pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/gen_streams[1]/gen_cpy_in/i_idma_backend_r_axi_rw_init_rw_obi/i_idma_transport_layer/init_w_dp_rsp} +add wave -noupdate -group {to OBI transport layer} {/pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/gen_streams[1]/gen_cpy_in/i_idma_backend_r_axi_rw_init_rw_obi/i_idma_transport_layer/obi_w_dp_rsp} +add wave -noupdate -group {to OBI transport layer} {/pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/gen_streams[1]/gen_cpy_in/i_idma_backend_r_axi_rw_init_rw_obi/i_idma_transport_layer/init_aw_ready} +add wave -noupdate -group {to OBI transport layer} {/pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/gen_streams[1]/gen_cpy_in/i_idma_backend_r_axi_rw_init_rw_obi/i_idma_transport_layer/obi_aw_ready} +add wave -noupdate -group {to OBI transport layer} {/pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/gen_streams[1]/gen_cpy_in/i_idma_backend_r_axi_rw_init_rw_obi/i_idma_transport_layer/w_dp_req_valid} +add wave -noupdate -group {to OBI transport layer} {/pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/gen_streams[1]/gen_cpy_in/i_idma_backend_r_axi_rw_init_rw_obi/i_idma_transport_layer/w_dp_req_ready} +add wave -noupdate -group {to OBI transport layer} {/pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/gen_streams[1]/gen_cpy_in/i_idma_backend_r_axi_rw_init_rw_obi/i_idma_transport_layer/w_dp_rsp_mux_valid} +add wave -noupdate -group {to OBI transport layer} {/pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/gen_streams[1]/gen_cpy_in/i_idma_backend_r_axi_rw_init_rw_obi/i_idma_transport_layer/w_dp_rsp_mux_ready} +add wave -noupdate -group {to OBI transport layer} {/pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/gen_streams[1]/gen_cpy_in/i_idma_backend_r_axi_rw_init_rw_obi/i_idma_transport_layer/w_dp_rsp_valid} +add wave -noupdate -group {to OBI transport layer} {/pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/gen_streams[1]/gen_cpy_in/i_idma_backend_r_axi_rw_init_rw_obi/i_idma_transport_layer/w_dp_rsp_ready} +add wave -noupdate -group {to OBI transport layer} {/pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/gen_streams[1]/gen_cpy_in/i_idma_backend_r_axi_rw_init_rw_obi/i_idma_transport_layer/w_dp_rsp_mux} +add wave -noupdate -group {to OBI transport layer} {/pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/gen_streams[1]/gen_cpy_in/i_idma_backend_r_axi_rw_init_rw_obi/i_idma_transport_layer/w_resp_fifo_in_valid} +add wave -noupdate -group {to OBI transport layer} {/pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/gen_streams[1]/gen_cpy_in/i_idma_backend_r_axi_rw_init_rw_obi/i_idma_transport_layer/w_resp_fifo_in_ready} +add wave -noupdate -group {to OBI transport layer} {/pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/gen_streams[1]/gen_cpy_in/i_idma_backend_r_axi_rw_init_rw_obi/i_idma_transport_layer/w_resp_fifo_out_protocol} +add wave -noupdate -group {to OBI transport layer} {/pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/gen_streams[1]/gen_cpy_in/i_idma_backend_r_axi_rw_init_rw_obi/i_idma_transport_layer/w_resp_fifo_out_valid} +add wave -noupdate -group {to OBI transport layer} {/pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/gen_streams[1]/gen_cpy_in/i_idma_backend_r_axi_rw_init_rw_obi/i_idma_transport_layer/w_resp_fifo_out_ready} +add wave -noupdate -group {backend 1} {/pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/gen_streams[1]/gen_cpy_in/i_idma_backend_r_axi_rw_init_rw_obi/rst_ni} +add wave -noupdate -group {backend 1} {/pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/gen_streams[1]/gen_cpy_in/i_idma_backend_r_axi_rw_init_rw_obi/testmode_i} +add wave -noupdate -group {backend 1} {/pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/gen_streams[1]/gen_cpy_in/i_idma_backend_r_axi_rw_init_rw_obi/idma_req_i} +add wave -noupdate -group {backend 1} {/pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/gen_streams[1]/gen_cpy_in/i_idma_backend_r_axi_rw_init_rw_obi/req_valid_i} +add wave -noupdate -group {backend 1} {/pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/gen_streams[1]/gen_cpy_in/i_idma_backend_r_axi_rw_init_rw_obi/req_ready_o} +add wave -noupdate -group {backend 1} {/pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/gen_streams[1]/gen_cpy_in/i_idma_backend_r_axi_rw_init_rw_obi/idma_rsp_o} +add wave -noupdate -group {backend 1} {/pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/gen_streams[1]/gen_cpy_in/i_idma_backend_r_axi_rw_init_rw_obi/rsp_valid_o} +add wave -noupdate -group {backend 1} {/pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/gen_streams[1]/gen_cpy_in/i_idma_backend_r_axi_rw_init_rw_obi/rsp_ready_i} +add wave -noupdate -group {backend 1} {/pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/gen_streams[1]/gen_cpy_in/i_idma_backend_r_axi_rw_init_rw_obi/idma_eh_req_i} +add wave -noupdate -group {backend 1} {/pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/gen_streams[1]/gen_cpy_in/i_idma_backend_r_axi_rw_init_rw_obi/eh_req_valid_i} +add wave -noupdate -group {backend 1} {/pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/gen_streams[1]/gen_cpy_in/i_idma_backend_r_axi_rw_init_rw_obi/eh_req_ready_o} +add wave -noupdate -group {backend 1} {/pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/gen_streams[1]/gen_cpy_in/i_idma_backend_r_axi_rw_init_rw_obi/axi_read_req_o} +add wave -noupdate -group {backend 1} {/pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/gen_streams[1]/gen_cpy_in/i_idma_backend_r_axi_rw_init_rw_obi/axi_read_rsp_i} +add wave -noupdate -group {backend 1} {/pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/gen_streams[1]/gen_cpy_in/i_idma_backend_r_axi_rw_init_rw_obi/init_read_req_o} +add wave -noupdate -group {backend 1} -expand {/pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/gen_streams[1]/gen_cpy_in/i_idma_backend_r_axi_rw_init_rw_obi/init_read_rsp_i} +add wave -noupdate -group {backend 1} {/pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/gen_streams[1]/gen_cpy_in/i_idma_backend_r_axi_rw_init_rw_obi/obi_read_req_o} +add wave -noupdate -group {backend 1} {/pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/gen_streams[1]/gen_cpy_in/i_idma_backend_r_axi_rw_init_rw_obi/obi_read_rsp_i} +add wave -noupdate -group {backend 1} {/pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/gen_streams[1]/gen_cpy_in/i_idma_backend_r_axi_rw_init_rw_obi/init_write_req_o} +add wave -noupdate -group {backend 1} {/pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/gen_streams[1]/gen_cpy_in/i_idma_backend_r_axi_rw_init_rw_obi/init_write_rsp_i} +add wave -noupdate -group {backend 1} {/pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/gen_streams[1]/gen_cpy_in/i_idma_backend_r_axi_rw_init_rw_obi/obi_write_req_o} +add wave -noupdate -group {backend 1} {/pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/gen_streams[1]/gen_cpy_in/i_idma_backend_r_axi_rw_init_rw_obi/obi_write_rsp_i} +add wave -noupdate -group {backend 1} {/pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/gen_streams[1]/gen_cpy_in/i_idma_backend_r_axi_rw_init_rw_obi/busy_o} +add wave -noupdate -group {backend 1} {/pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/gen_streams[1]/gen_cpy_in/i_idma_backend_r_axi_rw_init_rw_obi/dp_busy} +add wave -noupdate -group {backend 1} {/pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/gen_streams[1]/gen_cpy_in/i_idma_backend_r_axi_rw_init_rw_obi/dp_poison} +add wave -noupdate -group {backend 1} {/pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/gen_streams[1]/gen_cpy_in/i_idma_backend_r_axi_rw_init_rw_obi/r_req} +add wave -noupdate -group {backend 1} {/pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/gen_streams[1]/gen_cpy_in/i_idma_backend_r_axi_rw_init_rw_obi/w_req} +add wave -noupdate -group {backend 1} {/pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/gen_streams[1]/gen_cpy_in/i_idma_backend_r_axi_rw_init_rw_obi/r_valid} +add wave -noupdate -group {backend 1} {/pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/gen_streams[1]/gen_cpy_in/i_idma_backend_r_axi_rw_init_rw_obi/w_valid} +add wave -noupdate -group {backend 1} {/pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/gen_streams[1]/gen_cpy_in/i_idma_backend_r_axi_rw_init_rw_obi/r_ready} +add wave -noupdate -group {backend 1} {/pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/gen_streams[1]/gen_cpy_in/i_idma_backend_r_axi_rw_init_rw_obi/w_ready} +add wave -noupdate -group {backend 1} {/pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/gen_streams[1]/gen_cpy_in/i_idma_backend_r_axi_rw_init_rw_obi/r_meta_req_tagged} +add wave -noupdate -group {backend 1} {/pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/gen_streams[1]/gen_cpy_in/i_idma_backend_r_axi_rw_init_rw_obi/w_meta_req_tagged} +add wave -noupdate -group {backend 1} {/pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/gen_streams[1]/gen_cpy_in/i_idma_backend_r_axi_rw_init_rw_obi/w_last_burst} +add wave -noupdate -group {backend 1} {/pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/gen_streams[1]/gen_cpy_in/i_idma_backend_r_axi_rw_init_rw_obi/w_last_ready} +add wave -noupdate -group {backend 1} {/pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/gen_streams[1]/gen_cpy_in/i_idma_backend_r_axi_rw_init_rw_obi/w_super_last} +add wave -noupdate -group {backend 1} {/pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/gen_streams[1]/gen_cpy_in/i_idma_backend_r_axi_rw_init_rw_obi/r_dp_req_in_ready} +add wave -noupdate -group {backend 1} {/pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/gen_streams[1]/gen_cpy_in/i_idma_backend_r_axi_rw_init_rw_obi/w_dp_req_in_ready} +add wave -noupdate -group {backend 1} {/pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/gen_streams[1]/gen_cpy_in/i_idma_backend_r_axi_rw_init_rw_obi/w_dp_req_out_valid} +add wave -noupdate -group {backend 1} {/pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/gen_streams[1]/gen_cpy_in/i_idma_backend_r_axi_rw_init_rw_obi/w_dp_req_out_ready} +add wave -noupdate -group {backend 1} {/pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/gen_streams[1]/gen_cpy_in/i_idma_backend_r_axi_rw_init_rw_obi/r_dp_req_out} +add wave -noupdate -group {backend 1} {/pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/gen_streams[1]/gen_cpy_in/i_idma_backend_r_axi_rw_init_rw_obi/r_dp_req_out_valid} +add wave -noupdate -group {backend 1} {/pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/gen_streams[1]/gen_cpy_in/i_idma_backend_r_axi_rw_init_rw_obi/r_dp_req_out_ready} +add wave -noupdate -group {backend 1} {/pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/gen_streams[1]/gen_cpy_in/i_idma_backend_r_axi_rw_init_rw_obi/w_dp_req_out} +add wave -noupdate -group {backend 1} {/pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/gen_streams[1]/gen_cpy_in/i_idma_backend_r_axi_rw_init_rw_obi/r_dp_rsp} +add wave -noupdate -group {backend 1} {/pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/gen_streams[1]/gen_cpy_in/i_idma_backend_r_axi_rw_init_rw_obi/w_dp_rsp} +add wave -noupdate -group {backend 1} {/pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/gen_streams[1]/gen_cpy_in/i_idma_backend_r_axi_rw_init_rw_obi/r_dp_rsp_valid} +add wave -noupdate -group {backend 1} {/pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/gen_streams[1]/gen_cpy_in/i_idma_backend_r_axi_rw_init_rw_obi/w_dp_rsp_valid} +add wave -noupdate -group {backend 1} {/pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/gen_streams[1]/gen_cpy_in/i_idma_backend_r_axi_rw_init_rw_obi/r_dp_rsp_ready} +add wave -noupdate -group {backend 1} {/pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/gen_streams[1]/gen_cpy_in/i_idma_backend_r_axi_rw_init_rw_obi/w_dp_rsp_ready} +add wave -noupdate -group {backend 1} {/pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/gen_streams[1]/gen_cpy_in/i_idma_backend_r_axi_rw_init_rw_obi/ar_ready} +add wave -noupdate -group {backend 1} {/pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/gen_streams[1]/gen_cpy_in/i_idma_backend_r_axi_rw_init_rw_obi/ar_ready_dp} +add wave -noupdate -group {backend 1} {/pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/gen_streams[1]/gen_cpy_in/i_idma_backend_r_axi_rw_init_rw_obi/aw_ready} +add wave -noupdate -group {backend 1} {/pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/gen_streams[1]/gen_cpy_in/i_idma_backend_r_axi_rw_init_rw_obi/aw_ready_dp} +add wave -noupdate -group {backend 1} {/pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/gen_streams[1]/gen_cpy_in/i_idma_backend_r_axi_rw_init_rw_obi/aw_valid_dp} +add wave -noupdate -group {backend 1} {/pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/gen_streams[1]/gen_cpy_in/i_idma_backend_r_axi_rw_init_rw_obi/ar_valid_dp} +add wave -noupdate -group {backend 1} {/pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/gen_streams[1]/gen_cpy_in/i_idma_backend_r_axi_rw_init_rw_obi/aw_req_dp} +add wave -noupdate -group {backend 1} {/pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/gen_streams[1]/gen_cpy_in/i_idma_backend_r_axi_rw_init_rw_obi/ar_req_dp} +add wave -noupdate -group {backend 1} {/pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/gen_streams[1]/gen_cpy_in/i_idma_backend_r_axi_rw_init_rw_obi/legalizer_flush} +add wave -noupdate -group {backend 1} {/pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/gen_streams[1]/gen_cpy_in/i_idma_backend_r_axi_rw_init_rw_obi/legalizer_kill} +add wave -noupdate -group {backend 1} {/pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/gen_streams[1]/gen_cpy_in/i_idma_backend_r_axi_rw_init_rw_obi/is_length_zero} +add wave -noupdate -group {backend 1} {/pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/gen_streams[1]/gen_cpy_in/i_idma_backend_r_axi_rw_init_rw_obi/req_valid} +add wave -noupdate -group {backend 1} {/pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/gen_streams[1]/gen_cpy_in/i_idma_backend_r_axi_rw_init_rw_obi/idma_rsp} +add wave -noupdate -group {backend 1} {/pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/gen_streams[1]/gen_cpy_in/i_idma_backend_r_axi_rw_init_rw_obi/rsp_valid} +add wave -noupdate -group {backend 1} {/pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/gen_streams[1]/gen_cpy_in/i_idma_backend_r_axi_rw_init_rw_obi/rsp_ready} +add wave -noupdate -group {backend 1} {/pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/gen_streams[1]/gen_cpy_in/i_idma_backend_r_axi_rw_init_rw_obi/r_chan_valid} +add wave -noupdate -group {backend 1} {/pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/gen_streams[1]/gen_cpy_in/i_idma_backend_r_axi_rw_init_rw_obi/r_chan_ready} +add wave -noupdate -group {legalizer 1} {/pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/gen_streams[1]/gen_cpy_in/i_idma_backend_r_axi_rw_init_rw_obi/gen_hw_legalizer/i_idma_legalizer/clk_i} +add wave -noupdate -group {legalizer 1} {/pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/gen_streams[1]/gen_cpy_in/i_idma_backend_r_axi_rw_init_rw_obi/gen_hw_legalizer/i_idma_legalizer/rst_ni} +add wave -noupdate -group {legalizer 1} {/pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/gen_streams[1]/gen_cpy_in/i_idma_backend_r_axi_rw_init_rw_obi/gen_hw_legalizer/i_idma_legalizer/req_i} +add wave -noupdate -group {legalizer 1} {/pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/gen_streams[1]/gen_cpy_in/i_idma_backend_r_axi_rw_init_rw_obi/gen_hw_legalizer/i_idma_legalizer/valid_i} +add wave -noupdate -group {legalizer 1} {/pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/gen_streams[1]/gen_cpy_in/i_idma_backend_r_axi_rw_init_rw_obi/gen_hw_legalizer/i_idma_legalizer/ready_o} +add wave -noupdate -group {legalizer 1} {/pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/gen_streams[1]/gen_cpy_in/i_idma_backend_r_axi_rw_init_rw_obi/gen_hw_legalizer/i_idma_legalizer/r_req_o} +add wave -noupdate -group {legalizer 1} {/pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/gen_streams[1]/gen_cpy_in/i_idma_backend_r_axi_rw_init_rw_obi/gen_hw_legalizer/i_idma_legalizer/r_valid_o} +add wave -noupdate -group {legalizer 1} {/pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/gen_streams[1]/gen_cpy_in/i_idma_backend_r_axi_rw_init_rw_obi/gen_hw_legalizer/i_idma_legalizer/r_ready_i} +add wave -noupdate -group {legalizer 1} -expand -subitemconfig {{/pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/gen_streams[1]/gen_cpy_in/i_idma_backend_r_axi_rw_init_rw_obi/gen_hw_legalizer/i_idma_legalizer/w_req_o.w_dp_req} -expand {/pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/gen_streams[1]/gen_cpy_in/i_idma_backend_r_axi_rw_init_rw_obi/gen_hw_legalizer/i_idma_legalizer/w_req_o.aw_req} -expand} {/pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/gen_streams[1]/gen_cpy_in/i_idma_backend_r_axi_rw_init_rw_obi/gen_hw_legalizer/i_idma_legalizer/w_req_o} +add wave -noupdate -group {legalizer 1} {/pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/gen_streams[1]/gen_cpy_in/i_idma_backend_r_axi_rw_init_rw_obi/gen_hw_legalizer/i_idma_legalizer/w_valid_o} +add wave -noupdate -group {legalizer 1} {/pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/gen_streams[1]/gen_cpy_in/i_idma_backend_r_axi_rw_init_rw_obi/gen_hw_legalizer/i_idma_legalizer/w_ready_i} +add wave -noupdate -group {legalizer 1} {/pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/gen_streams[1]/gen_cpy_in/i_idma_backend_r_axi_rw_init_rw_obi/gen_hw_legalizer/i_idma_legalizer/flush_i} +add wave -noupdate -group {legalizer 1} {/pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/gen_streams[1]/gen_cpy_in/i_idma_backend_r_axi_rw_init_rw_obi/gen_hw_legalizer/i_idma_legalizer/kill_i} +add wave -noupdate -group {legalizer 1} {/pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/gen_streams[1]/gen_cpy_in/i_idma_backend_r_axi_rw_init_rw_obi/gen_hw_legalizer/i_idma_legalizer/r_busy_o} +add wave -noupdate -group {legalizer 1} {/pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/gen_streams[1]/gen_cpy_in/i_idma_backend_r_axi_rw_init_rw_obi/gen_hw_legalizer/i_idma_legalizer/w_busy_o} +add wave -noupdate -group {legalizer 1} -expand {/pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/gen_streams[1]/gen_cpy_in/i_idma_backend_r_axi_rw_init_rw_obi/gen_hw_legalizer/i_idma_legalizer/r_tf_d} +add wave -noupdate -group {legalizer 1} -childformat {{{/pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/gen_streams[1]/gen_cpy_in/i_idma_backend_r_axi_rw_init_rw_obi/gen_hw_legalizer/i_idma_legalizer/r_tf_q.length} -radix unsigned}} -subitemconfig {{/pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/gen_streams[1]/gen_cpy_in/i_idma_backend_r_axi_rw_init_rw_obi/gen_hw_legalizer/i_idma_legalizer/r_tf_q.length} {-height 16 -radix unsigned}} {/pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/gen_streams[1]/gen_cpy_in/i_idma_backend_r_axi_rw_init_rw_obi/gen_hw_legalizer/i_idma_legalizer/r_tf_q} +add wave -noupdate -group {legalizer 1} {/pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/gen_streams[1]/gen_cpy_in/i_idma_backend_r_axi_rw_init_rw_obi/gen_hw_legalizer/i_idma_legalizer/w_tf_d} +add wave -noupdate -group {legalizer 1} {/pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/gen_streams[1]/gen_cpy_in/i_idma_backend_r_axi_rw_init_rw_obi/gen_hw_legalizer/i_idma_legalizer/w_tf_q} +add wave -noupdate -group {legalizer 1} {/pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/gen_streams[1]/gen_cpy_in/i_idma_backend_r_axi_rw_init_rw_obi/gen_hw_legalizer/i_idma_legalizer/opt_tf_d} +add wave -noupdate -group {legalizer 1} -expand {/pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/gen_streams[1]/gen_cpy_in/i_idma_backend_r_axi_rw_init_rw_obi/gen_hw_legalizer/i_idma_legalizer/opt_tf_q} +add wave -noupdate -group {legalizer 1} {/pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/gen_streams[1]/gen_cpy_in/i_idma_backend_r_axi_rw_init_rw_obi/gen_hw_legalizer/i_idma_legalizer/r_tf_ena} +add wave -noupdate -group {legalizer 1} {/pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/gen_streams[1]/gen_cpy_in/i_idma_backend_r_axi_rw_init_rw_obi/gen_hw_legalizer/i_idma_legalizer/w_tf_ena} +add wave -noupdate -group {legalizer 1} {/pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/gen_streams[1]/gen_cpy_in/i_idma_backend_r_axi_rw_init_rw_obi/gen_hw_legalizer/i_idma_legalizer/r_page_num_bytes_to_pb} +add wave -noupdate -group {legalizer 1} {/pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/gen_streams[1]/gen_cpy_in/i_idma_backend_r_axi_rw_init_rw_obi/gen_hw_legalizer/i_idma_legalizer/r_num_bytes_to_pb} +add wave -noupdate -group {legalizer 1} {/pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/gen_streams[1]/gen_cpy_in/i_idma_backend_r_axi_rw_init_rw_obi/gen_hw_legalizer/i_idma_legalizer/w_page_num_bytes_to_pb} +add wave -noupdate -group {legalizer 1} {/pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/gen_streams[1]/gen_cpy_in/i_idma_backend_r_axi_rw_init_rw_obi/gen_hw_legalizer/i_idma_legalizer/w_num_bytes_to_pb} +add wave -noupdate -group {legalizer 1} {/pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/gen_streams[1]/gen_cpy_in/i_idma_backend_r_axi_rw_init_rw_obi/gen_hw_legalizer/i_idma_legalizer/c_num_bytes_to_pb} +add wave -noupdate -group {legalizer 1} {/pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/gen_streams[1]/gen_cpy_in/i_idma_backend_r_axi_rw_init_rw_obi/gen_hw_legalizer/i_idma_legalizer/r_num_bytes_possible} +add wave -noupdate -group {legalizer 1} {/pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/gen_streams[1]/gen_cpy_in/i_idma_backend_r_axi_rw_init_rw_obi/gen_hw_legalizer/i_idma_legalizer/r_num_bytes} +add wave -noupdate -group {legalizer 1} {/pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/gen_streams[1]/gen_cpy_in/i_idma_backend_r_axi_rw_init_rw_obi/gen_hw_legalizer/i_idma_legalizer/r_addr_offset} +add wave -noupdate -group {legalizer 1} {/pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/gen_streams[1]/gen_cpy_in/i_idma_backend_r_axi_rw_init_rw_obi/gen_hw_legalizer/i_idma_legalizer/r_done} +add wave -noupdate -group {legalizer 1} {/pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/gen_streams[1]/gen_cpy_in/i_idma_backend_r_axi_rw_init_rw_obi/gen_hw_legalizer/i_idma_legalizer/w_num_bytes_possible} +add wave -noupdate -group {legalizer 1} {/pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/gen_streams[1]/gen_cpy_in/i_idma_backend_r_axi_rw_init_rw_obi/gen_hw_legalizer/i_idma_legalizer/w_num_bytes} +add wave -noupdate -group {legalizer 1} {/pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/gen_streams[1]/gen_cpy_in/i_idma_backend_r_axi_rw_init_rw_obi/gen_hw_legalizer/i_idma_legalizer/w_addr_offset} +add wave -noupdate -group {legalizer 1} {/pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/gen_streams[1]/gen_cpy_in/i_idma_backend_r_axi_rw_init_rw_obi/gen_hw_legalizer/i_idma_legalizer/w_done} +add wave -noupdate -group {rd page splitter 1} {/pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/gen_streams[1]/gen_cpy_in/i_idma_backend_r_axi_rw_init_rw_obi/gen_hw_legalizer/i_idma_legalizer/i_read_page_splitter/addr_i} +add wave -noupdate -group {rd page splitter 1} {/pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/gen_streams[1]/gen_cpy_in/i_idma_backend_r_axi_rw_init_rw_obi/gen_hw_legalizer/i_idma_legalizer/i_read_page_splitter/not_bursting_i} +add wave -noupdate -group {rd page splitter 1} {/pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/gen_streams[1]/gen_cpy_in/i_idma_backend_r_axi_rw_init_rw_obi/gen_hw_legalizer/i_idma_legalizer/i_read_page_splitter/reduce_len_i} +add wave -noupdate -group {rd page splitter 1} {/pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/gen_streams[1]/gen_cpy_in/i_idma_backend_r_axi_rw_init_rw_obi/gen_hw_legalizer/i_idma_legalizer/i_read_page_splitter/max_llen_i} +add wave -noupdate -group {rd page splitter 1} {/pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/gen_streams[1]/gen_cpy_in/i_idma_backend_r_axi_rw_init_rw_obi/gen_hw_legalizer/i_idma_legalizer/i_read_page_splitter/num_bytes_to_pb_o} +add wave -noupdate -group {rd page splitter 1} {/pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/gen_streams[1]/gen_cpy_in/i_idma_backend_r_axi_rw_init_rw_obi/gen_hw_legalizer/i_idma_legalizer/i_read_page_splitter/page_addr_width} +add wave -noupdate -group {rd page splitter 1} {/pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/gen_streams[1]/gen_cpy_in/i_idma_backend_r_axi_rw_init_rw_obi/gen_hw_legalizer/i_idma_legalizer/i_read_page_splitter/page_size} +add wave -noupdate -group {rd page splitter 1} {/pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/gen_streams[1]/gen_cpy_in/i_idma_backend_r_axi_rw_init_rw_obi/gen_hw_legalizer/i_idma_legalizer/i_read_page_splitter/page_offset} +add wave -noupdate -group {wr page splitter 1} {/pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/gen_streams[1]/gen_cpy_in/i_idma_backend_r_axi_rw_init_rw_obi/gen_hw_legalizer/i_idma_legalizer/i_write_page_splitter/addr_i} +add wave -noupdate -group {wr page splitter 1} {/pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/gen_streams[1]/gen_cpy_in/i_idma_backend_r_axi_rw_init_rw_obi/gen_hw_legalizer/i_idma_legalizer/i_write_page_splitter/not_bursting_i} +add wave -noupdate -group {wr page splitter 1} {/pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/gen_streams[1]/gen_cpy_in/i_idma_backend_r_axi_rw_init_rw_obi/gen_hw_legalizer/i_idma_legalizer/i_write_page_splitter/reduce_len_i} +add wave -noupdate -group {wr page splitter 1} {/pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/gen_streams[1]/gen_cpy_in/i_idma_backend_r_axi_rw_init_rw_obi/gen_hw_legalizer/i_idma_legalizer/i_write_page_splitter/max_llen_i} +add wave -noupdate -group {wr page splitter 1} {/pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/gen_streams[1]/gen_cpy_in/i_idma_backend_r_axi_rw_init_rw_obi/gen_hw_legalizer/i_idma_legalizer/i_write_page_splitter/num_bytes_to_pb_o} +add wave -noupdate -group {wr page splitter 1} {/pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/gen_streams[1]/gen_cpy_in/i_idma_backend_r_axi_rw_init_rw_obi/gen_hw_legalizer/i_idma_legalizer/i_write_page_splitter/page_addr_width} +add wave -noupdate -group {wr page splitter 1} {/pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/gen_streams[1]/gen_cpy_in/i_idma_backend_r_axi_rw_init_rw_obi/gen_hw_legalizer/i_idma_legalizer/i_write_page_splitter/page_size} +add wave -noupdate -group {wr page splitter 1} {/pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/gen_streams[1]/gen_cpy_in/i_idma_backend_r_axi_rw_init_rw_obi/gen_hw_legalizer/i_idma_legalizer/i_write_page_splitter/page_offset} +add wave -noupdate -group {transport layer 1} {/pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/gen_streams[1]/gen_cpy_in/i_idma_backend_r_axi_rw_init_rw_obi/i_idma_transport_layer/clk_i} +add wave -noupdate -group {transport layer 1} {/pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/gen_streams[1]/gen_cpy_in/i_idma_backend_r_axi_rw_init_rw_obi/i_idma_transport_layer/rst_ni} +add wave -noupdate -group {transport layer 1} {/pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/gen_streams[1]/gen_cpy_in/i_idma_backend_r_axi_rw_init_rw_obi/i_idma_transport_layer/testmode_i} +add wave -noupdate -group {transport layer 1} {/pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/gen_streams[1]/gen_cpy_in/i_idma_backend_r_axi_rw_init_rw_obi/i_idma_transport_layer/axi_read_req_o} +add wave -noupdate -group {transport layer 1} {/pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/gen_streams[1]/gen_cpy_in/i_idma_backend_r_axi_rw_init_rw_obi/i_idma_transport_layer/axi_read_rsp_i} +add wave -noupdate -group {transport layer 1} {/pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/gen_streams[1]/gen_cpy_in/i_idma_backend_r_axi_rw_init_rw_obi/i_idma_transport_layer/init_read_req_o} +add wave -noupdate -group {transport layer 1} {/pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/gen_streams[1]/gen_cpy_in/i_idma_backend_r_axi_rw_init_rw_obi/i_idma_transport_layer/init_read_rsp_i} +add wave -noupdate -group {transport layer 1} {/pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/gen_streams[1]/gen_cpy_in/i_idma_backend_r_axi_rw_init_rw_obi/i_idma_transport_layer/obi_read_req_o} +add wave -noupdate -group {transport layer 1} {/pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/gen_streams[1]/gen_cpy_in/i_idma_backend_r_axi_rw_init_rw_obi/i_idma_transport_layer/obi_read_rsp_i} +add wave -noupdate -group {transport layer 1} {/pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/gen_streams[1]/gen_cpy_in/i_idma_backend_r_axi_rw_init_rw_obi/i_idma_transport_layer/init_write_req_o} +add wave -noupdate -group {transport layer 1} {/pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/gen_streams[1]/gen_cpy_in/i_idma_backend_r_axi_rw_init_rw_obi/i_idma_transport_layer/init_write_rsp_i} +add wave -noupdate -group {transport layer 1} -expand {/pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/gen_streams[1]/gen_cpy_in/i_idma_backend_r_axi_rw_init_rw_obi/i_idma_transport_layer/obi_write_req_o} +add wave -noupdate -group {transport layer 1} {/pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/gen_streams[1]/gen_cpy_in/i_idma_backend_r_axi_rw_init_rw_obi/i_idma_transport_layer/obi_write_rsp_i} +add wave -noupdate -group {transport layer 1} {/pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/gen_streams[1]/gen_cpy_in/i_idma_backend_r_axi_rw_init_rw_obi/i_idma_transport_layer/r_dp_req_i} +add wave -noupdate -group {transport layer 1} {/pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/gen_streams[1]/gen_cpy_in/i_idma_backend_r_axi_rw_init_rw_obi/i_idma_transport_layer/r_dp_valid_i} +add wave -noupdate -group {transport layer 1} {/pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/gen_streams[1]/gen_cpy_in/i_idma_backend_r_axi_rw_init_rw_obi/i_idma_transport_layer/r_dp_ready_o} +add wave -noupdate -group {transport layer 1} {/pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/gen_streams[1]/gen_cpy_in/i_idma_backend_r_axi_rw_init_rw_obi/i_idma_transport_layer/r_dp_rsp_o} +add wave -noupdate -group {transport layer 1} {/pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/gen_streams[1]/gen_cpy_in/i_idma_backend_r_axi_rw_init_rw_obi/i_idma_transport_layer/r_dp_valid_o} +add wave -noupdate -group {transport layer 1} {/pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/gen_streams[1]/gen_cpy_in/i_idma_backend_r_axi_rw_init_rw_obi/i_idma_transport_layer/r_dp_ready_i} +add wave -noupdate -group {transport layer 1} -expand {/pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/gen_streams[1]/gen_cpy_in/i_idma_backend_r_axi_rw_init_rw_obi/i_idma_transport_layer/w_dp_req_i} +add wave -noupdate -group {transport layer 1} {/pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/gen_streams[1]/gen_cpy_in/i_idma_backend_r_axi_rw_init_rw_obi/i_idma_transport_layer/w_dp_valid_i} +add wave -noupdate -group {transport layer 1} {/pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/gen_streams[1]/gen_cpy_in/i_idma_backend_r_axi_rw_init_rw_obi/i_idma_transport_layer/w_dp_ready_o} +add wave -noupdate -group {transport layer 1} {/pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/gen_streams[1]/gen_cpy_in/i_idma_backend_r_axi_rw_init_rw_obi/i_idma_transport_layer/w_dp_rsp_o} +add wave -noupdate -group {transport layer 1} {/pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/gen_streams[1]/gen_cpy_in/i_idma_backend_r_axi_rw_init_rw_obi/i_idma_transport_layer/w_dp_valid_o} +add wave -noupdate -group {transport layer 1} {/pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/gen_streams[1]/gen_cpy_in/i_idma_backend_r_axi_rw_init_rw_obi/i_idma_transport_layer/w_dp_ready_i} +add wave -noupdate -group {transport layer 1} {/pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/gen_streams[1]/gen_cpy_in/i_idma_backend_r_axi_rw_init_rw_obi/i_idma_transport_layer/ar_req_i} +add wave -noupdate -group {transport layer 1} {/pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/gen_streams[1]/gen_cpy_in/i_idma_backend_r_axi_rw_init_rw_obi/i_idma_transport_layer/ar_valid_i} +add wave -noupdate -group {transport layer 1} {/pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/gen_streams[1]/gen_cpy_in/i_idma_backend_r_axi_rw_init_rw_obi/i_idma_transport_layer/ar_ready_o} +add wave -noupdate -group {transport layer 1} {/pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/gen_streams[1]/gen_cpy_in/i_idma_backend_r_axi_rw_init_rw_obi/i_idma_transport_layer/aw_req_i} +add wave -noupdate -group {transport layer 1} {/pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/gen_streams[1]/gen_cpy_in/i_idma_backend_r_axi_rw_init_rw_obi/i_idma_transport_layer/aw_valid_i} +add wave -noupdate -group {transport layer 1} {/pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/gen_streams[1]/gen_cpy_in/i_idma_backend_r_axi_rw_init_rw_obi/i_idma_transport_layer/aw_ready_o} +add wave -noupdate -group {transport layer 1} {/pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/gen_streams[1]/gen_cpy_in/i_idma_backend_r_axi_rw_init_rw_obi/i_idma_transport_layer/dp_poison_i} +add wave -noupdate -group {transport layer 1} {/pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/gen_streams[1]/gen_cpy_in/i_idma_backend_r_axi_rw_init_rw_obi/i_idma_transport_layer/r_chan_ready_o} +add wave -noupdate -group {transport layer 1} {/pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/gen_streams[1]/gen_cpy_in/i_idma_backend_r_axi_rw_init_rw_obi/i_idma_transport_layer/r_chan_valid_o} +add wave -noupdate -group {transport layer 1} {/pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/gen_streams[1]/gen_cpy_in/i_idma_backend_r_axi_rw_init_rw_obi/i_idma_transport_layer/r_dp_busy_o} +add wave -noupdate -group {transport layer 1} {/pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/gen_streams[1]/gen_cpy_in/i_idma_backend_r_axi_rw_init_rw_obi/i_idma_transport_layer/w_dp_busy_o} +add wave -noupdate -group {transport layer 1} {/pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/gen_streams[1]/gen_cpy_in/i_idma_backend_r_axi_rw_init_rw_obi/i_idma_transport_layer/buffer_busy_o} +add wave -noupdate -group {transport layer 1} {/pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/gen_streams[1]/gen_cpy_in/i_idma_backend_r_axi_rw_init_rw_obi/i_idma_transport_layer/axi_buffer_in_valid} +add wave -noupdate -group {transport layer 1} {/pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/gen_streams[1]/gen_cpy_in/i_idma_backend_r_axi_rw_init_rw_obi/i_idma_transport_layer/init_buffer_in_valid} +add wave -noupdate -group {transport layer 1} {/pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/gen_streams[1]/gen_cpy_in/i_idma_backend_r_axi_rw_init_rw_obi/i_idma_transport_layer/obi_buffer_in_valid} +add wave -noupdate -group {transport layer 1} {/pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/gen_streams[1]/gen_cpy_in/i_idma_backend_r_axi_rw_init_rw_obi/i_idma_transport_layer/buffer_in_valid} +add wave -noupdate -group {transport layer 1} {/pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/gen_streams[1]/gen_cpy_in/i_idma_backend_r_axi_rw_init_rw_obi/i_idma_transport_layer/buffer_in_ready} +add wave -noupdate -group {transport layer 1} {/pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/gen_streams[1]/gen_cpy_in/i_idma_backend_r_axi_rw_init_rw_obi/i_idma_transport_layer/buffer_out_valid} +add wave -noupdate -group {transport layer 1} {/pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/gen_streams[1]/gen_cpy_in/i_idma_backend_r_axi_rw_init_rw_obi/i_idma_transport_layer/buffer_out_valid_shifted} +add wave -noupdate -group {transport layer 1} {/pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/gen_streams[1]/gen_cpy_in/i_idma_backend_r_axi_rw_init_rw_obi/i_idma_transport_layer/init_buffer_out_ready} +add wave -noupdate -group {transport layer 1} {/pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/gen_streams[1]/gen_cpy_in/i_idma_backend_r_axi_rw_init_rw_obi/i_idma_transport_layer/obi_buffer_out_ready} +add wave -noupdate -group {transport layer 1} {/pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/gen_streams[1]/gen_cpy_in/i_idma_backend_r_axi_rw_init_rw_obi/i_idma_transport_layer/buffer_out_ready} +add wave -noupdate -group {transport layer 1} {/pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/gen_streams[1]/gen_cpy_in/i_idma_backend_r_axi_rw_init_rw_obi/i_idma_transport_layer/buffer_out_ready_shifted} +add wave -noupdate -group {transport layer 1} {/pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/gen_streams[1]/gen_cpy_in/i_idma_backend_r_axi_rw_init_rw_obi/i_idma_transport_layer/axi_buffer_in} +add wave -noupdate -group {transport layer 1} {/pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/gen_streams[1]/gen_cpy_in/i_idma_backend_r_axi_rw_init_rw_obi/i_idma_transport_layer/init_buffer_in} +add wave -noupdate -group {transport layer 1} {/pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/gen_streams[1]/gen_cpy_in/i_idma_backend_r_axi_rw_init_rw_obi/i_idma_transport_layer/obi_buffer_in} +add wave -noupdate -group {transport layer 1} {/pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/gen_streams[1]/gen_cpy_in/i_idma_backend_r_axi_rw_init_rw_obi/i_idma_transport_layer/buffer_in} +add wave -noupdate -group {transport layer 1} {/pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/gen_streams[1]/gen_cpy_in/i_idma_backend_r_axi_rw_init_rw_obi/i_idma_transport_layer/buffer_in_shifted} +add wave -noupdate -group {transport layer 1} {/pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/gen_streams[1]/gen_cpy_in/i_idma_backend_r_axi_rw_init_rw_obi/i_idma_transport_layer/buffer_out} +add wave -noupdate -group {transport layer 1} {/pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/gen_streams[1]/gen_cpy_in/i_idma_backend_r_axi_rw_init_rw_obi/i_idma_transport_layer/buffer_out_shifted} +add wave -noupdate -group {transport layer 1} {/pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/gen_streams[1]/gen_cpy_in/i_idma_backend_r_axi_rw_init_rw_obi/i_idma_transport_layer/axi_r_chan_valid} +add wave -noupdate -group {transport layer 1} {/pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/gen_streams[1]/gen_cpy_in/i_idma_backend_r_axi_rw_init_rw_obi/i_idma_transport_layer/init_r_chan_valid} +add wave -noupdate -group {transport layer 1} {/pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/gen_streams[1]/gen_cpy_in/i_idma_backend_r_axi_rw_init_rw_obi/i_idma_transport_layer/obi_r_chan_valid} +add wave -noupdate -group {transport layer 1} {/pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/gen_streams[1]/gen_cpy_in/i_idma_backend_r_axi_rw_init_rw_obi/i_idma_transport_layer/axi_r_chan_ready} +add wave -noupdate -group {transport layer 1} {/pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/gen_streams[1]/gen_cpy_in/i_idma_backend_r_axi_rw_init_rw_obi/i_idma_transport_layer/init_r_chan_ready} +add wave -noupdate -group {transport layer 1} {/pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/gen_streams[1]/gen_cpy_in/i_idma_backend_r_axi_rw_init_rw_obi/i_idma_transport_layer/obi_r_chan_ready} +add wave -noupdate -group {transport layer 1} {/pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/gen_streams[1]/gen_cpy_in/i_idma_backend_r_axi_rw_init_rw_obi/i_idma_transport_layer/axi_r_dp_valid} +add wave -noupdate -group {transport layer 1} {/pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/gen_streams[1]/gen_cpy_in/i_idma_backend_r_axi_rw_init_rw_obi/i_idma_transport_layer/init_r_dp_valid} +add wave -noupdate -group {transport layer 1} {/pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/gen_streams[1]/gen_cpy_in/i_idma_backend_r_axi_rw_init_rw_obi/i_idma_transport_layer/obi_r_dp_valid} +add wave -noupdate -group {transport layer 1} {/pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/gen_streams[1]/gen_cpy_in/i_idma_backend_r_axi_rw_init_rw_obi/i_idma_transport_layer/axi_r_dp_ready} +add wave -noupdate -group {transport layer 1} {/pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/gen_streams[1]/gen_cpy_in/i_idma_backend_r_axi_rw_init_rw_obi/i_idma_transport_layer/init_r_dp_ready} +add wave -noupdate -group {transport layer 1} {/pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/gen_streams[1]/gen_cpy_in/i_idma_backend_r_axi_rw_init_rw_obi/i_idma_transport_layer/obi_r_dp_ready} +add wave -noupdate -group {transport layer 1} {/pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/gen_streams[1]/gen_cpy_in/i_idma_backend_r_axi_rw_init_rw_obi/i_idma_transport_layer/axi_r_dp_rsp} +add wave -noupdate -group {transport layer 1} {/pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/gen_streams[1]/gen_cpy_in/i_idma_backend_r_axi_rw_init_rw_obi/i_idma_transport_layer/init_r_dp_rsp} +add wave -noupdate -group {transport layer 1} {/pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/gen_streams[1]/gen_cpy_in/i_idma_backend_r_axi_rw_init_rw_obi/i_idma_transport_layer/obi_r_dp_rsp} +add wave -noupdate -group {transport layer 1} {/pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/gen_streams[1]/gen_cpy_in/i_idma_backend_r_axi_rw_init_rw_obi/i_idma_transport_layer/axi_ar_ready} +add wave -noupdate -group {transport layer 1} {/pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/gen_streams[1]/gen_cpy_in/i_idma_backend_r_axi_rw_init_rw_obi/i_idma_transport_layer/init_ar_ready} +add wave -noupdate -group {transport layer 1} {/pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/gen_streams[1]/gen_cpy_in/i_idma_backend_r_axi_rw_init_rw_obi/i_idma_transport_layer/obi_ar_ready} +add wave -noupdate -group {transport layer 1} {/pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/gen_streams[1]/gen_cpy_in/i_idma_backend_r_axi_rw_init_rw_obi/i_idma_transport_layer/init_w_dp_rsp_valid} +add wave -noupdate -group {transport layer 1} {/pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/gen_streams[1]/gen_cpy_in/i_idma_backend_r_axi_rw_init_rw_obi/i_idma_transport_layer/obi_w_dp_rsp_valid} +add wave -noupdate -group {transport layer 1} {/pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/gen_streams[1]/gen_cpy_in/i_idma_backend_r_axi_rw_init_rw_obi/i_idma_transport_layer/init_w_dp_rsp_ready} +add wave -noupdate -group {transport layer 1} {/pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/gen_streams[1]/gen_cpy_in/i_idma_backend_r_axi_rw_init_rw_obi/i_idma_transport_layer/obi_w_dp_rsp_ready} +add wave -noupdate -group {transport layer 1} {/pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/gen_streams[1]/gen_cpy_in/i_idma_backend_r_axi_rw_init_rw_obi/i_idma_transport_layer/init_w_dp_ready} +add wave -noupdate -group {transport layer 1} {/pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/gen_streams[1]/gen_cpy_in/i_idma_backend_r_axi_rw_init_rw_obi/i_idma_transport_layer/obi_w_dp_ready} +add wave -noupdate -group {transport layer 1} {/pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/gen_streams[1]/gen_cpy_in/i_idma_backend_r_axi_rw_init_rw_obi/i_idma_transport_layer/init_w_dp_rsp} +add wave -noupdate -group {transport layer 1} {/pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/gen_streams[1]/gen_cpy_in/i_idma_backend_r_axi_rw_init_rw_obi/i_idma_transport_layer/obi_w_dp_rsp} +add wave -noupdate -group {transport layer 1} {/pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/gen_streams[1]/gen_cpy_in/i_idma_backend_r_axi_rw_init_rw_obi/i_idma_transport_layer/init_aw_ready} +add wave -noupdate -group {transport layer 1} {/pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/gen_streams[1]/gen_cpy_in/i_idma_backend_r_axi_rw_init_rw_obi/i_idma_transport_layer/obi_aw_ready} +add wave -noupdate -group {transport layer 1} {/pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/gen_streams[1]/gen_cpy_in/i_idma_backend_r_axi_rw_init_rw_obi/i_idma_transport_layer/w_dp_req_valid} +add wave -noupdate -group {transport layer 1} {/pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/gen_streams[1]/gen_cpy_in/i_idma_backend_r_axi_rw_init_rw_obi/i_idma_transport_layer/w_dp_req_ready} +add wave -noupdate -group {transport layer 1} {/pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/gen_streams[1]/gen_cpy_in/i_idma_backend_r_axi_rw_init_rw_obi/i_idma_transport_layer/w_dp_rsp_mux_valid} +add wave -noupdate -group {transport layer 1} {/pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/gen_streams[1]/gen_cpy_in/i_idma_backend_r_axi_rw_init_rw_obi/i_idma_transport_layer/w_dp_rsp_mux_ready} +add wave -noupdate -group {transport layer 1} {/pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/gen_streams[1]/gen_cpy_in/i_idma_backend_r_axi_rw_init_rw_obi/i_idma_transport_layer/w_dp_rsp_valid} +add wave -noupdate -group {transport layer 1} {/pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/gen_streams[1]/gen_cpy_in/i_idma_backend_r_axi_rw_init_rw_obi/i_idma_transport_layer/w_dp_rsp_ready} +add wave -noupdate -group {transport layer 1} {/pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/gen_streams[1]/gen_cpy_in/i_idma_backend_r_axi_rw_init_rw_obi/i_idma_transport_layer/w_dp_rsp_mux} +add wave -noupdate -group {transport layer 1} {/pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/gen_streams[1]/gen_cpy_in/i_idma_backend_r_axi_rw_init_rw_obi/i_idma_transport_layer/w_resp_fifo_in_valid} +add wave -noupdate -group {transport layer 1} {/pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/gen_streams[1]/gen_cpy_in/i_idma_backend_r_axi_rw_init_rw_obi/i_idma_transport_layer/w_resp_fifo_in_ready} +add wave -noupdate -group {transport layer 1} {/pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/gen_streams[1]/gen_cpy_in/i_idma_backend_r_axi_rw_init_rw_obi/i_idma_transport_layer/w_resp_fifo_out_protocol} +add wave -noupdate -group {transport layer 1} {/pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/gen_streams[1]/gen_cpy_in/i_idma_backend_r_axi_rw_init_rw_obi/i_idma_transport_layer/w_resp_fifo_out_valid} +add wave -noupdate -group {transport layer 1} {/pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/gen_streams[1]/gen_cpy_in/i_idma_backend_r_axi_rw_init_rw_obi/i_idma_transport_layer/w_resp_fifo_out_ready} +add wave -noupdate -group {strm1 init read} -expand {/pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/gen_streams[1]/gen_cpy_in/i_idma_backend_r_axi_rw_init_rw_obi/i_idma_transport_layer/i_idma_init_read/r_dp_req_i} +add wave -noupdate -group {strm1 init read} {/pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/gen_streams[1]/gen_cpy_in/i_idma_backend_r_axi_rw_init_rw_obi/i_idma_transport_layer/i_idma_init_read/r_dp_valid_i} +add wave -noupdate -group {strm1 init read} {/pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/gen_streams[1]/gen_cpy_in/i_idma_backend_r_axi_rw_init_rw_obi/i_idma_transport_layer/i_idma_init_read/r_dp_ready_o} +add wave -noupdate -group {strm1 init read} {/pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/gen_streams[1]/gen_cpy_in/i_idma_backend_r_axi_rw_init_rw_obi/i_idma_transport_layer/i_idma_init_read/r_dp_rsp_o} +add wave -noupdate -group {strm1 init read} {/pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/gen_streams[1]/gen_cpy_in/i_idma_backend_r_axi_rw_init_rw_obi/i_idma_transport_layer/i_idma_init_read/r_dp_valid_o} +add wave -noupdate -group {strm1 init read} {/pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/gen_streams[1]/gen_cpy_in/i_idma_backend_r_axi_rw_init_rw_obi/i_idma_transport_layer/i_idma_init_read/r_dp_ready_i} +add wave -noupdate -group {strm1 init read} {/pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/gen_streams[1]/gen_cpy_in/i_idma_backend_r_axi_rw_init_rw_obi/i_idma_transport_layer/i_idma_init_read/read_meta_req_i} +add wave -noupdate -group {strm1 init read} {/pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/gen_streams[1]/gen_cpy_in/i_idma_backend_r_axi_rw_init_rw_obi/i_idma_transport_layer/i_idma_init_read/read_meta_valid_i} +add wave -noupdate -group {strm1 init read} {/pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/gen_streams[1]/gen_cpy_in/i_idma_backend_r_axi_rw_init_rw_obi/i_idma_transport_layer/i_idma_init_read/read_meta_ready_o} +add wave -noupdate -group {strm1 init read} -expand {/pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/gen_streams[1]/gen_cpy_in/i_idma_backend_r_axi_rw_init_rw_obi/i_idma_transport_layer/i_idma_init_read/read_req_o} +add wave -noupdate -group {strm1 init read} -expand {/pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/gen_streams[1]/gen_cpy_in/i_idma_backend_r_axi_rw_init_rw_obi/i_idma_transport_layer/i_idma_init_read/read_rsp_i} +add wave -noupdate -group {strm1 init read} {/pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/gen_streams[1]/gen_cpy_in/i_idma_backend_r_axi_rw_init_rw_obi/i_idma_transport_layer/i_idma_init_read/r_chan_ready_o} +add wave -noupdate -group {strm1 init read} {/pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/gen_streams[1]/gen_cpy_in/i_idma_backend_r_axi_rw_init_rw_obi/i_idma_transport_layer/i_idma_init_read/r_chan_valid_o} +add wave -noupdate -group {strm1 init read} {/pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/gen_streams[1]/gen_cpy_in/i_idma_backend_r_axi_rw_init_rw_obi/i_idma_transport_layer/i_idma_init_read/buffer_in_o} +add wave -noupdate -group {strm1 init read} {/pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/gen_streams[1]/gen_cpy_in/i_idma_backend_r_axi_rw_init_rw_obi/i_idma_transport_layer/i_idma_init_read/buffer_in_valid_o} +add wave -noupdate -group {strm1 init read} {/pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/gen_streams[1]/gen_cpy_in/i_idma_backend_r_axi_rw_init_rw_obi/i_idma_transport_layer/i_idma_init_read/buffer_in_ready_i} +add wave -noupdate -group {strm1 init read} {/pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/gen_streams[1]/gen_cpy_in/i_idma_backend_r_axi_rw_init_rw_obi/i_idma_transport_layer/i_idma_init_read/read_aligned_in_mask} +add wave -noupdate -group {strm1 init read} {/pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/gen_streams[1]/gen_cpy_in/i_idma_backend_r_axi_rw_init_rw_obi/i_idma_transport_layer/i_idma_init_read/mask_in} +add wave -noupdate -group {strm1 init read} {/pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/gen_streams[1]/gen_cpy_in/i_idma_backend_r_axi_rw_init_rw_obi/i_idma_transport_layer/i_idma_init_read/in_valid} +add wave -noupdate -group {strm1 init read} {/pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/gen_streams[1]/gen_cpy_in/i_idma_backend_r_axi_rw_init_rw_obi/i_idma_transport_layer/i_idma_init_read/in_ready} TreeUpdate [SetDefaultTree] -WaveRestoreCursors {{Cursor 1} {254164744503 ps} 0} +quietly WaveActivateNextPane +add wave -noupdate -color Gold {/pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/gen_streams[1]/gen_cpy_in/i_idma_backend_r_axi_rw_init_rw_obi/clk_i} +TreeUpdate [SetDefaultTree] +WaveRestoreCursors {{Cursor 1} {1574893420000 ps} 0} quietly wave cursor active 1 configure wave -namecolwidth 252 -configure wave -valuecolwidth 100 +configure wave -valuecolwidth 224 configure wave -justifyvalue left configure wave -signalnamewidth 1 configure wave -snapdistance 10 @@ -94,4 +416,4 @@ configure wave -griddelta 40 configure wave -timeline 0 configure wave -timelineunits ns update -WaveRestoreZoom {255222984954 ps} {255848503895 ps} +WaveRestoreZoom {248010100 ns} {3541692100 ns} From acf08a7bdc9b59ca2b80a6b24f639ef1d16d2643 Mon Sep 17 00:00:00 2001 From: Georg Rutishauser Date: Tue, 2 Jul 2024 10:30:20 +0200 Subject: [PATCH 53/71] add forgotten iDMA ZeroMem test :^) --- idma_tests/idma_zeromem/Makefile | 22 ++++ idma_tests/idma_zeromem/dma_wave.do | 179 ++++++++++++++++++++++++++++ idma_tests/idma_zeromem/zeromem.c | 81 +++++++++++++ 3 files changed, 282 insertions(+) create mode 100755 idma_tests/idma_zeromem/Makefile create mode 100644 idma_tests/idma_zeromem/dma_wave.do create mode 100644 idma_tests/idma_zeromem/zeromem.c diff --git a/idma_tests/idma_zeromem/Makefile b/idma_tests/idma_zeromem/Makefile new file mode 100755 index 0000000..d896e12 --- /dev/null +++ b/idma_tests/idma_zeromem/Makefile @@ -0,0 +1,22 @@ +PULP_APP = test + +TEST_SRCS ?= zeromem.c +PULP_APP_SRCS = $(TEST_SRCS) +PULP_APP_FC_SRCS = $(TEST_FC_SRCS) +ifdef TEST_FC_SRCS +pulpFc=1 +endif + +space := +space += + +#BUILD_DIR = $(subst $(space),_,$(CURDIR)/build/$(TEST_SRCS)) + +ifdef VERBOSE +PULP_CFLAGS += -DVERBOSE +endif + +PULP_CFLAGS += -O3 +stackSize = 4096 + +include $(PULP_SDK_HOME)/install/rules/pulp.mk diff --git a/idma_tests/idma_zeromem/dma_wave.do b/idma_tests/idma_zeromem/dma_wave.do new file mode 100644 index 0000000..ab54467 --- /dev/null +++ b/idma_tests/idma_zeromem/dma_wave.do @@ -0,0 +1,179 @@ +onerror {resume} +quietly WaveActivateNextPane {} 0 +add wave -noupdate -expand -group {iDMA wrap} /pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/clk_i +add wave -noupdate -expand -group {iDMA wrap} /pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/rst_ni +add wave -noupdate -expand -group {iDMA wrap} /pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/test_mode_i +add wave -noupdate -expand -group {iDMA wrap} /pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/ext_master_req_o +add wave -noupdate -expand -group {iDMA wrap} /pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/ext_master_resp_i +add wave -noupdate -expand -group {iDMA wrap} /pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/term_event_o +add wave -noupdate -expand -group {iDMA wrap} /pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/term_irq_o +add wave -noupdate -expand -group {iDMA wrap} /pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/term_event_pe_o +add wave -noupdate -expand -group {iDMA wrap} /pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/term_irq_pe_o +add wave -noupdate -expand -group {iDMA wrap} /pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/busy_o +add wave -noupdate -expand -group {iDMA wrap} /pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/config_wdata +add wave -noupdate -expand -group {iDMA wrap} /pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/config_add +add wave -noupdate -expand -group {iDMA wrap} /pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/config_req +add wave -noupdate -expand -group {iDMA wrap} /pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/config_wen +add wave -noupdate -expand -group {iDMA wrap} /pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/config_be +add wave -noupdate -expand -group {iDMA wrap} /pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/config_id +add wave -noupdate -expand -group {iDMA wrap} /pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/config_gnt +add wave -noupdate -expand -group {iDMA wrap} /pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/config_r_rdata +add wave -noupdate -expand -group {iDMA wrap} /pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/config_r_valid +add wave -noupdate -expand -group {iDMA wrap} /pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/config_r_opc +add wave -noupdate -expand -group {iDMA wrap} /pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/config_r_id +add wave -noupdate -expand -group {iDMA wrap} /pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/obi_read_req_from_dma +add wave -noupdate -expand -group {iDMA wrap} /pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/obi_read_req_from_rrc +add wave -noupdate -expand -group {iDMA wrap} /pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/obi_reorg_req_from_dma +add wave -noupdate -expand -group {iDMA wrap} /pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/obi_reorg_req_from_rrc +add wave -noupdate -expand -group {iDMA wrap} -expand -subitemconfig {{/pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/obi_write_req_from_dma[0]} -expand} /pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/obi_write_req_from_dma +add wave -noupdate -expand -group {iDMA wrap} -expand -subitemconfig {{/pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/obi_write_req_from_rrc[0]} -expand {/pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/obi_write_req_from_rrc[0].a} -expand} /pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/obi_write_req_from_rrc +add wave -noupdate -expand -group {iDMA wrap} /pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/obi_read_req_muxed +add wave -noupdate -expand -group {iDMA wrap} /pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/obi_read_rsp_to_dma +add wave -noupdate -expand -group {iDMA wrap} /pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/obi_read_rsp_to_rrc +add wave -noupdate -expand -group {iDMA wrap} /pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/obi_reorg_rsp_to_dma +add wave -noupdate -expand -group {iDMA wrap} -subitemconfig {{/pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/obi_reorg_rsp_to_rrc[0]} -expand {/pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/obi_reorg_rsp_to_rrc[0].r} -expand} /pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/obi_reorg_rsp_to_rrc +add wave -noupdate -expand -group {iDMA wrap} -expand -subitemconfig {{/pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/obi_write_rsp_to_dma[0]} -expand {/pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/obi_write_rsp_to_dma[0].r} -expand} /pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/obi_write_rsp_to_dma +add wave -noupdate -expand -group {iDMA wrap} -expand -subitemconfig {{/pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/obi_write_rsp_to_rrc[0]} -expand {/pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/obi_write_rsp_to_rrc[0].r} -expand} /pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/obi_write_rsp_to_rrc +add wave -noupdate -expand -group {iDMA wrap} /pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/obi_read_rsp_to_mux +add wave -noupdate -expand -group {iDMA wrap} /pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/soc_req +add wave -noupdate -expand -group {iDMA wrap} /pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/soc_rsp +add wave -noupdate -expand -group {iDMA wrap} /pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/dma_req +add wave -noupdate -expand -group {iDMA wrap} /pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/dma_rsp +add wave -noupdate -expand -group {iDMA wrap} /pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/dma_regs_req +add wave -noupdate -expand -group {iDMA wrap} /pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/dma_regs_rsp +add wave -noupdate -expand -group {iDMA wrap} /pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/stream_idx +add wave -noupdate -expand -group {iDMA wrap} /pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/twod_req +add wave -noupdate -expand -group {iDMA wrap} /pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/twod_req_queue +add wave -noupdate -expand -group {iDMA wrap} /pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/idma_req +add wave -noupdate -expand -group {iDMA wrap} /pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/idma_rsp +add wave -noupdate -expand -group {iDMA wrap} /pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/one_fe_valid +add wave -noupdate -expand -group {iDMA wrap} /pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/fe_valid +add wave -noupdate -expand -group {iDMA wrap} /pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/twod_queue_valid +add wave -noupdate -expand -group {iDMA wrap} /pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/be_valid +add wave -noupdate -expand -group {iDMA wrap} /pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/be_rsp_valid +add wave -noupdate -expand -group {iDMA wrap} /pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/fe_ready +add wave -noupdate -expand -group {iDMA wrap} /pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/twod_queue_ready +add wave -noupdate -expand -group {iDMA wrap} /pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/be_ready +add wave -noupdate -expand -group {iDMA wrap} /pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/be_rsp_ready +add wave -noupdate -expand -group {iDMA wrap} /pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/trans_complete +add wave -noupdate -expand -group {iDMA wrap} /pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/midend_busy +add wave -noupdate -expand -group {iDMA wrap} -expand /pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/idma_busy +add wave -noupdate -expand -group {iDMA wrap} /pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/done_id +add wave -noupdate -expand -group {iDMA wrap} /pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/next_id +add wave -noupdate -expand -group {init strm1} -subitemconfig {{/pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/gen_streams[1]/gen_cpy_in/init_write_rsp.rsp_chan} -expand} {/pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/gen_streams[1]/gen_cpy_in/init_write_rsp} +add wave -noupdate -expand -group {init strm1} {/pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/gen_streams[1]/gen_cpy_in/init_write_req} +add wave -noupdate -expand -group {init strm1} -expand {/pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/gen_streams[1]/gen_cpy_in/init_read_rsp} +add wave -noupdate -expand -group {init strm1} -expand {/pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/gen_streams[1]/gen_cpy_in/init_read_req} +add wave -noupdate -expand -group {to OBI transport layer} {/pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/gen_streams[1]/gen_cpy_in/i_idma_backend_r_axi_rw_init_rw_obi/i_idma_transport_layer/clk_i} +add wave -noupdate -expand -group {to OBI transport layer} {/pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/gen_streams[1]/gen_cpy_in/i_idma_backend_r_axi_rw_init_rw_obi/i_idma_transport_layer/rst_ni} +add wave -noupdate -expand -group {to OBI transport layer} {/pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/gen_streams[1]/gen_cpy_in/i_idma_backend_r_axi_rw_init_rw_obi/i_idma_transport_layer/testmode_i} +add wave -noupdate -expand -group {to OBI transport layer} {/pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/gen_streams[1]/gen_cpy_in/i_idma_backend_r_axi_rw_init_rw_obi/i_idma_transport_layer/axi_read_req_o} +add wave -noupdate -expand -group {to OBI transport layer} {/pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/gen_streams[1]/gen_cpy_in/i_idma_backend_r_axi_rw_init_rw_obi/i_idma_transport_layer/axi_read_rsp_i} +add wave -noupdate -expand -group {to OBI transport layer} {/pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/gen_streams[1]/gen_cpy_in/i_idma_backend_r_axi_rw_init_rw_obi/i_idma_transport_layer/init_read_req_o} +add wave -noupdate -expand -group {to OBI transport layer} {/pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/gen_streams[1]/gen_cpy_in/i_idma_backend_r_axi_rw_init_rw_obi/i_idma_transport_layer/init_read_rsp_i} +add wave -noupdate -expand -group {to OBI transport layer} {/pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/gen_streams[1]/gen_cpy_in/i_idma_backend_r_axi_rw_init_rw_obi/i_idma_transport_layer/obi_read_req_o} +add wave -noupdate -expand -group {to OBI transport layer} {/pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/gen_streams[1]/gen_cpy_in/i_idma_backend_r_axi_rw_init_rw_obi/i_idma_transport_layer/obi_read_rsp_i} +add wave -noupdate -expand -group {to OBI transport layer} {/pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/gen_streams[1]/gen_cpy_in/i_idma_backend_r_axi_rw_init_rw_obi/i_idma_transport_layer/init_write_req_o} +add wave -noupdate -expand -group {to OBI transport layer} {/pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/gen_streams[1]/gen_cpy_in/i_idma_backend_r_axi_rw_init_rw_obi/i_idma_transport_layer/init_write_rsp_i} +add wave -noupdate -expand -group {to OBI transport layer} {/pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/gen_streams[1]/gen_cpy_in/i_idma_backend_r_axi_rw_init_rw_obi/i_idma_transport_layer/obi_write_req_o} +add wave -noupdate -expand -group {to OBI transport layer} {/pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/gen_streams[1]/gen_cpy_in/i_idma_backend_r_axi_rw_init_rw_obi/i_idma_transport_layer/obi_write_rsp_i} +add wave -noupdate -expand -group {to OBI transport layer} {/pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/gen_streams[1]/gen_cpy_in/i_idma_backend_r_axi_rw_init_rw_obi/i_idma_transport_layer/r_dp_req_i} +add wave -noupdate -expand -group {to OBI transport layer} {/pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/gen_streams[1]/gen_cpy_in/i_idma_backend_r_axi_rw_init_rw_obi/i_idma_transport_layer/r_dp_valid_i} +add wave -noupdate -expand -group {to OBI transport layer} {/pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/gen_streams[1]/gen_cpy_in/i_idma_backend_r_axi_rw_init_rw_obi/i_idma_transport_layer/r_dp_ready_o} +add wave -noupdate -expand -group {to OBI transport layer} {/pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/gen_streams[1]/gen_cpy_in/i_idma_backend_r_axi_rw_init_rw_obi/i_idma_transport_layer/r_dp_rsp_o} +add wave -noupdate -expand -group {to OBI transport layer} {/pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/gen_streams[1]/gen_cpy_in/i_idma_backend_r_axi_rw_init_rw_obi/i_idma_transport_layer/r_dp_valid_o} +add wave -noupdate -expand -group {to OBI transport layer} {/pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/gen_streams[1]/gen_cpy_in/i_idma_backend_r_axi_rw_init_rw_obi/i_idma_transport_layer/r_dp_ready_i} +add wave -noupdate -expand -group {to OBI transport layer} {/pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/gen_streams[1]/gen_cpy_in/i_idma_backend_r_axi_rw_init_rw_obi/i_idma_transport_layer/w_dp_req_i} +add wave -noupdate -expand -group {to OBI transport layer} {/pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/gen_streams[1]/gen_cpy_in/i_idma_backend_r_axi_rw_init_rw_obi/i_idma_transport_layer/w_dp_valid_i} +add wave -noupdate -expand -group {to OBI transport layer} {/pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/gen_streams[1]/gen_cpy_in/i_idma_backend_r_axi_rw_init_rw_obi/i_idma_transport_layer/w_dp_ready_o} +add wave -noupdate -expand -group {to OBI transport layer} {/pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/gen_streams[1]/gen_cpy_in/i_idma_backend_r_axi_rw_init_rw_obi/i_idma_transport_layer/w_dp_rsp_o} +add wave -noupdate -expand -group {to OBI transport layer} {/pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/gen_streams[1]/gen_cpy_in/i_idma_backend_r_axi_rw_init_rw_obi/i_idma_transport_layer/w_dp_valid_o} +add wave -noupdate -expand -group {to OBI transport layer} {/pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/gen_streams[1]/gen_cpy_in/i_idma_backend_r_axi_rw_init_rw_obi/i_idma_transport_layer/w_dp_ready_i} +add wave -noupdate -expand -group {to OBI transport layer} {/pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/gen_streams[1]/gen_cpy_in/i_idma_backend_r_axi_rw_init_rw_obi/i_idma_transport_layer/ar_req_i} +add wave -noupdate -expand -group {to OBI transport layer} {/pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/gen_streams[1]/gen_cpy_in/i_idma_backend_r_axi_rw_init_rw_obi/i_idma_transport_layer/ar_valid_i} +add wave -noupdate -expand -group {to OBI transport layer} {/pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/gen_streams[1]/gen_cpy_in/i_idma_backend_r_axi_rw_init_rw_obi/i_idma_transport_layer/ar_ready_o} +add wave -noupdate -expand -group {to OBI transport layer} {/pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/gen_streams[1]/gen_cpy_in/i_idma_backend_r_axi_rw_init_rw_obi/i_idma_transport_layer/aw_req_i} +add wave -noupdate -expand -group {to OBI transport layer} {/pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/gen_streams[1]/gen_cpy_in/i_idma_backend_r_axi_rw_init_rw_obi/i_idma_transport_layer/aw_valid_i} +add wave -noupdate -expand -group {to OBI transport layer} {/pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/gen_streams[1]/gen_cpy_in/i_idma_backend_r_axi_rw_init_rw_obi/i_idma_transport_layer/aw_ready_o} +add wave -noupdate -expand -group {to OBI transport layer} {/pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/gen_streams[1]/gen_cpy_in/i_idma_backend_r_axi_rw_init_rw_obi/i_idma_transport_layer/dp_poison_i} +add wave -noupdate -expand -group {to OBI transport layer} {/pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/gen_streams[1]/gen_cpy_in/i_idma_backend_r_axi_rw_init_rw_obi/i_idma_transport_layer/r_chan_ready_o} +add wave -noupdate -expand -group {to OBI transport layer} {/pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/gen_streams[1]/gen_cpy_in/i_idma_backend_r_axi_rw_init_rw_obi/i_idma_transport_layer/r_chan_valid_o} +add wave -noupdate -expand -group {to OBI transport layer} {/pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/gen_streams[1]/gen_cpy_in/i_idma_backend_r_axi_rw_init_rw_obi/i_idma_transport_layer/r_dp_busy_o} +add wave -noupdate -expand -group {to OBI transport layer} {/pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/gen_streams[1]/gen_cpy_in/i_idma_backend_r_axi_rw_init_rw_obi/i_idma_transport_layer/w_dp_busy_o} +add wave -noupdate -expand -group {to OBI transport layer} {/pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/gen_streams[1]/gen_cpy_in/i_idma_backend_r_axi_rw_init_rw_obi/i_idma_transport_layer/buffer_busy_o} +add wave -noupdate -expand -group {to OBI transport layer} {/pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/gen_streams[1]/gen_cpy_in/i_idma_backend_r_axi_rw_init_rw_obi/i_idma_transport_layer/axi_buffer_in_valid} +add wave -noupdate -expand -group {to OBI transport layer} {/pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/gen_streams[1]/gen_cpy_in/i_idma_backend_r_axi_rw_init_rw_obi/i_idma_transport_layer/init_buffer_in_valid} +add wave -noupdate -expand -group {to OBI transport layer} {/pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/gen_streams[1]/gen_cpy_in/i_idma_backend_r_axi_rw_init_rw_obi/i_idma_transport_layer/obi_buffer_in_valid} +add wave -noupdate -expand -group {to OBI transport layer} -expand {/pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/gen_streams[1]/gen_cpy_in/i_idma_backend_r_axi_rw_init_rw_obi/i_idma_transport_layer/buffer_in_valid} +add wave -noupdate -expand -group {to OBI transport layer} {/pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/gen_streams[1]/gen_cpy_in/i_idma_backend_r_axi_rw_init_rw_obi/i_idma_transport_layer/buffer_in_ready} +add wave -noupdate -expand -group {to OBI transport layer} {/pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/gen_streams[1]/gen_cpy_in/i_idma_backend_r_axi_rw_init_rw_obi/i_idma_transport_layer/buffer_out_valid} +add wave -noupdate -expand -group {to OBI transport layer} {/pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/gen_streams[1]/gen_cpy_in/i_idma_backend_r_axi_rw_init_rw_obi/i_idma_transport_layer/buffer_out_valid_shifted} +add wave -noupdate -expand -group {to OBI transport layer} {/pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/gen_streams[1]/gen_cpy_in/i_idma_backend_r_axi_rw_init_rw_obi/i_idma_transport_layer/init_buffer_out_ready} +add wave -noupdate -expand -group {to OBI transport layer} {/pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/gen_streams[1]/gen_cpy_in/i_idma_backend_r_axi_rw_init_rw_obi/i_idma_transport_layer/obi_buffer_out_ready} +add wave -noupdate -expand -group {to OBI transport layer} {/pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/gen_streams[1]/gen_cpy_in/i_idma_backend_r_axi_rw_init_rw_obi/i_idma_transport_layer/buffer_out_ready} +add wave -noupdate -expand -group {to OBI transport layer} {/pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/gen_streams[1]/gen_cpy_in/i_idma_backend_r_axi_rw_init_rw_obi/i_idma_transport_layer/buffer_out_ready_shifted} +add wave -noupdate -expand -group {to OBI transport layer} {/pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/gen_streams[1]/gen_cpy_in/i_idma_backend_r_axi_rw_init_rw_obi/i_idma_transport_layer/axi_buffer_in} +add wave -noupdate -expand -group {to OBI transport layer} {/pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/gen_streams[1]/gen_cpy_in/i_idma_backend_r_axi_rw_init_rw_obi/i_idma_transport_layer/init_buffer_in} +add wave -noupdate -expand -group {to OBI transport layer} {/pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/gen_streams[1]/gen_cpy_in/i_idma_backend_r_axi_rw_init_rw_obi/i_idma_transport_layer/obi_buffer_in} +add wave -noupdate -expand -group {to OBI transport layer} {/pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/gen_streams[1]/gen_cpy_in/i_idma_backend_r_axi_rw_init_rw_obi/i_idma_transport_layer/buffer_in} +add wave -noupdate -expand -group {to OBI transport layer} {/pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/gen_streams[1]/gen_cpy_in/i_idma_backend_r_axi_rw_init_rw_obi/i_idma_transport_layer/buffer_in_shifted} +add wave -noupdate -expand -group {to OBI transport layer} {/pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/gen_streams[1]/gen_cpy_in/i_idma_backend_r_axi_rw_init_rw_obi/i_idma_transport_layer/buffer_out} +add wave -noupdate -expand -group {to OBI transport layer} {/pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/gen_streams[1]/gen_cpy_in/i_idma_backend_r_axi_rw_init_rw_obi/i_idma_transport_layer/buffer_out_shifted} +add wave -noupdate -expand -group {to OBI transport layer} {/pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/gen_streams[1]/gen_cpy_in/i_idma_backend_r_axi_rw_init_rw_obi/i_idma_transport_layer/axi_r_chan_valid} +add wave -noupdate -expand -group {to OBI transport layer} {/pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/gen_streams[1]/gen_cpy_in/i_idma_backend_r_axi_rw_init_rw_obi/i_idma_transport_layer/init_r_chan_valid} +add wave -noupdate -expand -group {to OBI transport layer} {/pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/gen_streams[1]/gen_cpy_in/i_idma_backend_r_axi_rw_init_rw_obi/i_idma_transport_layer/obi_r_chan_valid} +add wave -noupdate -expand -group {to OBI transport layer} {/pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/gen_streams[1]/gen_cpy_in/i_idma_backend_r_axi_rw_init_rw_obi/i_idma_transport_layer/axi_r_chan_ready} +add wave -noupdate -expand -group {to OBI transport layer} {/pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/gen_streams[1]/gen_cpy_in/i_idma_backend_r_axi_rw_init_rw_obi/i_idma_transport_layer/init_r_chan_ready} +add wave -noupdate -expand -group {to OBI transport layer} {/pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/gen_streams[1]/gen_cpy_in/i_idma_backend_r_axi_rw_init_rw_obi/i_idma_transport_layer/obi_r_chan_ready} +add wave -noupdate -expand -group {to OBI transport layer} {/pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/gen_streams[1]/gen_cpy_in/i_idma_backend_r_axi_rw_init_rw_obi/i_idma_transport_layer/axi_r_dp_valid} +add wave -noupdate -expand -group {to OBI transport layer} {/pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/gen_streams[1]/gen_cpy_in/i_idma_backend_r_axi_rw_init_rw_obi/i_idma_transport_layer/init_r_dp_valid} +add wave -noupdate -expand -group {to OBI transport layer} {/pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/gen_streams[1]/gen_cpy_in/i_idma_backend_r_axi_rw_init_rw_obi/i_idma_transport_layer/obi_r_dp_valid} +add wave -noupdate -expand -group {to OBI transport layer} {/pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/gen_streams[1]/gen_cpy_in/i_idma_backend_r_axi_rw_init_rw_obi/i_idma_transport_layer/axi_r_dp_ready} +add wave -noupdate -expand -group {to OBI transport layer} {/pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/gen_streams[1]/gen_cpy_in/i_idma_backend_r_axi_rw_init_rw_obi/i_idma_transport_layer/init_r_dp_ready} +add wave -noupdate -expand -group {to OBI transport layer} {/pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/gen_streams[1]/gen_cpy_in/i_idma_backend_r_axi_rw_init_rw_obi/i_idma_transport_layer/obi_r_dp_ready} +add wave -noupdate -expand -group {to OBI transport layer} {/pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/gen_streams[1]/gen_cpy_in/i_idma_backend_r_axi_rw_init_rw_obi/i_idma_transport_layer/axi_r_dp_rsp} +add wave -noupdate -expand -group {to OBI transport layer} {/pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/gen_streams[1]/gen_cpy_in/i_idma_backend_r_axi_rw_init_rw_obi/i_idma_transport_layer/init_r_dp_rsp} +add wave -noupdate -expand -group {to OBI transport layer} {/pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/gen_streams[1]/gen_cpy_in/i_idma_backend_r_axi_rw_init_rw_obi/i_idma_transport_layer/obi_r_dp_rsp} +add wave -noupdate -expand -group {to OBI transport layer} {/pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/gen_streams[1]/gen_cpy_in/i_idma_backend_r_axi_rw_init_rw_obi/i_idma_transport_layer/axi_ar_ready} +add wave -noupdate -expand -group {to OBI transport layer} {/pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/gen_streams[1]/gen_cpy_in/i_idma_backend_r_axi_rw_init_rw_obi/i_idma_transport_layer/init_ar_ready} +add wave -noupdate -expand -group {to OBI transport layer} {/pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/gen_streams[1]/gen_cpy_in/i_idma_backend_r_axi_rw_init_rw_obi/i_idma_transport_layer/obi_ar_ready} +add wave -noupdate -expand -group {to OBI transport layer} {/pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/gen_streams[1]/gen_cpy_in/i_idma_backend_r_axi_rw_init_rw_obi/i_idma_transport_layer/init_w_dp_rsp_valid} +add wave -noupdate -expand -group {to OBI transport layer} {/pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/gen_streams[1]/gen_cpy_in/i_idma_backend_r_axi_rw_init_rw_obi/i_idma_transport_layer/obi_w_dp_rsp_valid} +add wave -noupdate -expand -group {to OBI transport layer} {/pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/gen_streams[1]/gen_cpy_in/i_idma_backend_r_axi_rw_init_rw_obi/i_idma_transport_layer/init_w_dp_rsp_ready} +add wave -noupdate -expand -group {to OBI transport layer} {/pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/gen_streams[1]/gen_cpy_in/i_idma_backend_r_axi_rw_init_rw_obi/i_idma_transport_layer/obi_w_dp_rsp_ready} +add wave -noupdate -expand -group {to OBI transport layer} {/pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/gen_streams[1]/gen_cpy_in/i_idma_backend_r_axi_rw_init_rw_obi/i_idma_transport_layer/init_w_dp_ready} +add wave -noupdate -expand -group {to OBI transport layer} {/pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/gen_streams[1]/gen_cpy_in/i_idma_backend_r_axi_rw_init_rw_obi/i_idma_transport_layer/obi_w_dp_ready} +add wave -noupdate -expand -group {to OBI transport layer} {/pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/gen_streams[1]/gen_cpy_in/i_idma_backend_r_axi_rw_init_rw_obi/i_idma_transport_layer/init_w_dp_rsp} +add wave -noupdate -expand -group {to OBI transport layer} {/pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/gen_streams[1]/gen_cpy_in/i_idma_backend_r_axi_rw_init_rw_obi/i_idma_transport_layer/obi_w_dp_rsp} +add wave -noupdate -expand -group {to OBI transport layer} {/pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/gen_streams[1]/gen_cpy_in/i_idma_backend_r_axi_rw_init_rw_obi/i_idma_transport_layer/init_aw_ready} +add wave -noupdate -expand -group {to OBI transport layer} {/pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/gen_streams[1]/gen_cpy_in/i_idma_backend_r_axi_rw_init_rw_obi/i_idma_transport_layer/obi_aw_ready} +add wave -noupdate -expand -group {to OBI transport layer} {/pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/gen_streams[1]/gen_cpy_in/i_idma_backend_r_axi_rw_init_rw_obi/i_idma_transport_layer/w_dp_req_valid} +add wave -noupdate -expand -group {to OBI transport layer} {/pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/gen_streams[1]/gen_cpy_in/i_idma_backend_r_axi_rw_init_rw_obi/i_idma_transport_layer/w_dp_req_ready} +add wave -noupdate -expand -group {to OBI transport layer} {/pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/gen_streams[1]/gen_cpy_in/i_idma_backend_r_axi_rw_init_rw_obi/i_idma_transport_layer/w_dp_rsp_mux_valid} +add wave -noupdate -expand -group {to OBI transport layer} {/pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/gen_streams[1]/gen_cpy_in/i_idma_backend_r_axi_rw_init_rw_obi/i_idma_transport_layer/w_dp_rsp_mux_ready} +add wave -noupdate -expand -group {to OBI transport layer} {/pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/gen_streams[1]/gen_cpy_in/i_idma_backend_r_axi_rw_init_rw_obi/i_idma_transport_layer/w_dp_rsp_valid} +add wave -noupdate -expand -group {to OBI transport layer} {/pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/gen_streams[1]/gen_cpy_in/i_idma_backend_r_axi_rw_init_rw_obi/i_idma_transport_layer/w_dp_rsp_ready} +add wave -noupdate -expand -group {to OBI transport layer} {/pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/gen_streams[1]/gen_cpy_in/i_idma_backend_r_axi_rw_init_rw_obi/i_idma_transport_layer/w_dp_rsp_mux} +add wave -noupdate -expand -group {to OBI transport layer} {/pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/gen_streams[1]/gen_cpy_in/i_idma_backend_r_axi_rw_init_rw_obi/i_idma_transport_layer/w_resp_fifo_in_valid} +add wave -noupdate -expand -group {to OBI transport layer} {/pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/gen_streams[1]/gen_cpy_in/i_idma_backend_r_axi_rw_init_rw_obi/i_idma_transport_layer/w_resp_fifo_in_ready} +add wave -noupdate -expand -group {to OBI transport layer} {/pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/gen_streams[1]/gen_cpy_in/i_idma_backend_r_axi_rw_init_rw_obi/i_idma_transport_layer/w_resp_fifo_out_protocol} +add wave -noupdate -expand -group {to OBI transport layer} {/pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/gen_streams[1]/gen_cpy_in/i_idma_backend_r_axi_rw_init_rw_obi/i_idma_transport_layer/w_resp_fifo_out_valid} +add wave -noupdate -expand -group {to OBI transport layer} {/pulp_cluster_tb/cluster_i/inst_idma/dmac_wrap_i/gen_streams[1]/gen_cpy_in/i_idma_backend_r_axi_rw_init_rw_obi/i_idma_transport_layer/w_resp_fifo_out_ready} +TreeUpdate [SetDefaultTree] +WaveRestoreCursors {{Cursor 1} {226792000000 ps} 0} +quietly wave cursor active 1 +configure wave -namecolwidth 252 +configure wave -valuecolwidth 120 +configure wave -justifyvalue left +configure wave -signalnamewidth 1 +configure wave -snapdistance 10 +configure wave -datasetprefix 0 +configure wave -rowmargin 4 +configure wave -childrowmargin 2 +configure wave -gridoffset 0 +configure wave -gridperiod 1 +configure wave -griddelta 40 +configure wave -timeline 0 +configure wave -timelineunits ns +update +WaveRestoreZoom {226663267749 ps} {227016368236 ps} diff --git a/idma_tests/idma_zeromem/zeromem.c b/idma_tests/idma_zeromem/zeromem.c new file mode 100644 index 0000000..993e457 --- /dev/null +++ b/idma_tests/idma_zeromem/zeromem.c @@ -0,0 +1,81 @@ +#include +#include "pulp.h" +//#include "mchan_tests.h" + +#define VERBOSE + +#define MAX_BUFFER_SIZE 0x2000 + +//static unsigned char *ext; +//static unsigned char *loc; + +//#define EXT_DATA_ADDR ((unsigned int)ext) +//#define TCDM_DATA_ADDR ((unsigned int)loc) + +L2_DATA static unsigned char ext[MAX_BUFFER_SIZE]; +L1_DATA static unsigned char loc[MAX_BUFFER_SIZE]; + +#define EXT_DATA_ADDR ((unsigned int) ext) +#define TCDM_DATA_ADDR ((unsigned int) loc) +typedef enum {L1_TEST, L2_TEST} test_type_t; + +int zeromem_test(unsigned int len, test_type_t type, unsigned int buf); +int main() +{ + + if (rt_cluster_id() != 0) + return bench_cluster_forward(0); + + + int error_count_l2 = 0; + int error_count_l1 = 0; + + + + if (get_core_id() == 0){ + + + for ( int i = 5; i < 8045; i=4*i) { + error_count_l1 += zeromem_test(i, L1_TEST, loc); + } + + if (error_count_l1) + printf("OOPS -- got %d errors in L1 zeromem tests!\n", error_count_l1); + else + printf("L1 zeromem tests passed!\n"); + for ( int i = 5; i < 8045; i=4*i ) { + error_count_l2 += zeromem_test(i, L2_TEST, ext); + } + if (error_count_l2) + printf("OOPS -- got %d errors in L2 zeromem tests!\n", error_count_l2); + else + printf("L2 zeromem tests passed!\n"); + + } + + return error_count_l1 + error_count_l2; +} + + +int zeromem_test(unsigned int len, test_type_t type, unsigned int buf) { + unsigned int tx_id; + int error_cnt = 0; + uint8_t * buf_ptr = (uint8_t *) buf; + // fill the buffer with data to make sure it gets erased + for (int i=0; i Date: Tue, 2 Jul 2024 11:30:09 +0200 Subject: [PATCH 54/71] add iDMA test using all cores in all directions --- idma_tests/idma_allcores/Makefile | 22 ++++ idma_tests/idma_allcores/allcores.c | 112 +++++++++++++++++ idma_tests/idma_allcores/dma_wave.do | 179 +++++++++++++++++++++++++++ 3 files changed, 313 insertions(+) create mode 100755 idma_tests/idma_allcores/Makefile create mode 100644 idma_tests/idma_allcores/allcores.c create mode 100644 idma_tests/idma_allcores/dma_wave.do diff --git a/idma_tests/idma_allcores/Makefile b/idma_tests/idma_allcores/Makefile new file mode 100755 index 0000000..ea1e235 --- /dev/null +++ b/idma_tests/idma_allcores/Makefile @@ -0,0 +1,22 @@ +PULP_APP = test + +TEST_SRCS ?= allcores.c +PULP_APP_SRCS = $(TEST_SRCS) +PULP_APP_FC_SRCS = $(TEST_FC_SRCS) +ifdef TEST_FC_SRCS +pulpFc=1 +endif + +space := +space += + +#BUILD_DIR = $(subst $(space),_,$(CURDIR)/build/$(TEST_SRCS)) + +ifdef VERBOSE +PULP_CFLAGS += -DVERBOSE +endif + +PULP_CFLAGS += -O3 +stackSize = 4096 + +include $(PULP_SDK_HOME)/install/rules/pulp.mk diff --git a/idma_tests/idma_allcores/allcores.c b/idma_tests/idma_allcores/allcores.c new file mode 100644 index 0000000..f833dd5 --- /dev/null +++ b/idma_tests/idma_allcores/allcores.c @@ -0,0 +1,112 @@ +#include +#include "pulp.h" +//#include "mchan_tests.h" + +#define VERBOSE + +#define MAX_BUFFER_SIZE 0x2200 + +//static unsigned char *ext; +//static unsigned char *loc; + +//#define EXT_DATA_ADDR ((unsigned int)ext) +//#define TCDM_DATA_ADDR ((unsigned int)loc) + +L2_DATA static unsigned char ext[MAX_BUFFER_SIZE]; +L1_DATA static unsigned char loc[MAX_BUFFER_SIZE]; +L1_DATA static int error_count = 0; +#define EXT_DATA_ADDR ((unsigned int) ext) +#define TCDM_DATA_ADDR ((unsigned int) loc) +typedef enum {RX, TX, TCDM} test_type_t; + +int test_idma_1d(unsigned int len, test_type_t type, unsigned int ext_addr, unsigned int tcdm_addr); +int main() +{ + + if (rt_cluster_id() != 0) + return bench_cluster_forward(0); + + int n_bytes [] = {5, 19, 400}; + + for (int core=0; core Date: Tue, 16 Jul 2024 16:42:43 +0200 Subject: [PATCH 55/71] [update] add neureka tests to regression --- neureka/app/Makefile | 55 + neureka/app/bsp/neureka_bsp.h | 13 + .../app/bsp/siracusa/neureka_siracusa_bsp.c | 78 + .../app/bsp/siracusa/neureka_siracusa_bsp.h | 69 + .../app/bsp/testbench/neureka_testbench_bsp.c | 48 + .../app/bsp/testbench/neureka_testbench_bsp.h | 37 + neureka/app/gvsoc/neureka_gvsoc.h | 54 + neureka/app/hal/neureka.c | 37 + neureka/app/hal/neureka.h | 37 + neureka/app/hal/neureka_task.c | 248 ++ neureka/app/hal/neureka_task.h | 192 ++ neureka/app/hal/neureka_task_defs.h | 131 + neureka/app/inc/layer_util.h | 40 + neureka/app/inc/nnx_layer.h | 26 + neureka/app/inc/pmsis.h | 5 + neureka/app/inc/tinyprintf.h | 248 ++ neureka/app/pulp_nnx_neureka.c | 76 + neureka/app/pulp_nnx_neureka.h | 61 + neureka/app/src/main.c | 56 + neureka/app/src/nnx_layer.c | 168 + neureka/app/util/hwpe.c | 85 + neureka/app/util/hwpe.h | 43 + neureka/app/util/pulp_nnx_util.c | 35 + neureka/app/util/pulp_nnx_util.h | 51 + neureka/dense/Makefile | 3 + neureka/dense/inc/bias.h | 9 + neureka/dense/inc/input.h | 9 + neureka/dense/inc/layer_conf.h | 42 + neureka/dense/inc/output.h | 14 + neureka/dense/inc/scale.h | 9 + neureka/dense/inc/weight.h | 9 + neureka/dense/src/bias.c | 10 + neureka/dense/src/input.c | 147 + neureka/dense/src/output.c | 46 + neureka/dense/src/scale.c | 10 + neureka/dense/src/weight.c | 3030 +++++++++++++++++ neureka/depthwise/Makefile | 3 + neureka/depthwise/inc/bias.h | 9 + neureka/depthwise/inc/input.h | 9 + neureka/depthwise/inc/layer_conf.h | 42 + neureka/depthwise/inc/output.h | 14 + neureka/depthwise/inc/scale.h | 9 + neureka/depthwise/inc/weight.h | 9 + neureka/depthwise/src/bias.c | 13 + neureka/depthwise/src/input.c | 147 + neureka/depthwise/src/output.c | 62 + neureka/depthwise/src/scale.c | 13 + neureka/depthwise/src/weight.c | 93 + neureka/pointwise/Makefile | 3 + neureka/pointwise/inc/bias.h | 9 + neureka/pointwise/inc/input.h | 9 + neureka/pointwise/inc/layer_conf.h | 42 + neureka/pointwise/inc/output.h | 14 + neureka/pointwise/inc/scale.h | 9 + neureka/pointwise/inc/weight.h | 9 + neureka/pointwise/src/bias.c | 10 + neureka/pointwise/src/input.c | 906 +++++ neureka/pointwise/src/output.c | 165 + neureka/pointwise/src/scale.c | 10 + neureka/pointwise/src/weight.c | 1130 ++++++ 60 files changed, 7970 insertions(+) create mode 100644 neureka/app/Makefile create mode 100644 neureka/app/bsp/neureka_bsp.h create mode 100644 neureka/app/bsp/siracusa/neureka_siracusa_bsp.c create mode 100644 neureka/app/bsp/siracusa/neureka_siracusa_bsp.h create mode 100644 neureka/app/bsp/testbench/neureka_testbench_bsp.c create mode 100644 neureka/app/bsp/testbench/neureka_testbench_bsp.h create mode 100644 neureka/app/gvsoc/neureka_gvsoc.h create mode 100644 neureka/app/hal/neureka.c create mode 100644 neureka/app/hal/neureka.h create mode 100644 neureka/app/hal/neureka_task.c create mode 100644 neureka/app/hal/neureka_task.h create mode 100644 neureka/app/hal/neureka_task_defs.h create mode 100644 neureka/app/inc/layer_util.h create mode 100644 neureka/app/inc/nnx_layer.h create mode 100644 neureka/app/inc/pmsis.h create mode 100644 neureka/app/inc/tinyprintf.h create mode 100644 neureka/app/pulp_nnx_neureka.c create mode 100644 neureka/app/pulp_nnx_neureka.h create mode 100644 neureka/app/src/main.c create mode 100644 neureka/app/src/nnx_layer.c create mode 100644 neureka/app/util/hwpe.c create mode 100644 neureka/app/util/hwpe.h create mode 100644 neureka/app/util/pulp_nnx_util.c create mode 100644 neureka/app/util/pulp_nnx_util.h create mode 100644 neureka/dense/Makefile create mode 100644 neureka/dense/inc/bias.h create mode 100644 neureka/dense/inc/input.h create mode 100644 neureka/dense/inc/layer_conf.h create mode 100644 neureka/dense/inc/output.h create mode 100644 neureka/dense/inc/scale.h create mode 100644 neureka/dense/inc/weight.h create mode 100644 neureka/dense/src/bias.c create mode 100644 neureka/dense/src/input.c create mode 100644 neureka/dense/src/output.c create mode 100644 neureka/dense/src/scale.c create mode 100644 neureka/dense/src/weight.c create mode 100644 neureka/depthwise/Makefile create mode 100644 neureka/depthwise/inc/bias.h create mode 100644 neureka/depthwise/inc/input.h create mode 100644 neureka/depthwise/inc/layer_conf.h create mode 100644 neureka/depthwise/inc/output.h create mode 100644 neureka/depthwise/inc/scale.h create mode 100644 neureka/depthwise/inc/weight.h create mode 100644 neureka/depthwise/src/bias.c create mode 100644 neureka/depthwise/src/input.c create mode 100644 neureka/depthwise/src/output.c create mode 100644 neureka/depthwise/src/scale.c create mode 100644 neureka/depthwise/src/weight.c create mode 100644 neureka/pointwise/Makefile create mode 100644 neureka/pointwise/inc/bias.h create mode 100644 neureka/pointwise/inc/input.h create mode 100644 neureka/pointwise/inc/layer_conf.h create mode 100644 neureka/pointwise/inc/output.h create mode 100644 neureka/pointwise/inc/scale.h create mode 100644 neureka/pointwise/inc/weight.h create mode 100644 neureka/pointwise/src/bias.c create mode 100644 neureka/pointwise/src/input.c create mode 100644 neureka/pointwise/src/output.c create mode 100644 neureka/pointwise/src/scale.c create mode 100644 neureka/pointwise/src/weight.c diff --git a/neureka/app/Makefile b/neureka/app/Makefile new file mode 100644 index 0000000..f2f4067 --- /dev/null +++ b/neureka/app/Makefile @@ -0,0 +1,55 @@ +# Copyright (C) 2022-2023 ETH Zurich and University of Bologna +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# SPDX-License-Identifier: Apache-2.0 +# +# Author: Yvan Tortorella (yvan.tortorella@unibo.it) +# Francesco Conti (f.conti@unibo.it) +# Arpan Suravi Prasad (prasadar@iis.ee.ethz.ch) +# + + +LIBDIR := ../app +ACCELERATOR := neureka +STIM_DIR := ./ + +INC_DIRS += $(LIBDIR)/inc +APP_SRCS += $(wildcard $(LIBDIR)/src/*.c) $(wildcard $(LIBDIR)/*.c) + +## Library +INC_DIRS += $(LIBDIR) $(LIBDIR)/util +APP_SRCS += $(wildcard $(LIBDIR)/util/*.c) + +## Accelerator +INC_DIRS += $(LIBDIR)/hal $(LIBDIR)/gvsoc $(LIBDIR)/bsp $(LIBDIR)/bsp/testbench +APP_SRCS += $(wildcard $(LIBDIR)/hal/*.c) $(wildcard $(LIBDIR)/gvsoc/*.c) $(wildcard $(LIBDIR)/bsp/testbench/*.c) + + +## Generated +INC_DIRS += inc +APP_SRCS += $(wildcard src/*.c) + +INC_FLAGS += $(addprefix -I,$(INC_DIRS)) + +# Flags +ACCELERATOR_UPPERCASE := $(shell echo $(ACCELERATOR) | tr [:lower:] [:upper:]) +APP_CFLAGS += -DNNX_ACCELERATOR=\"$(ACCELERATOR)\" -DNNX_$(ACCELERATOR_UPPERCASE) -DNNX_NEUREKA_TESTBENCH -DNNX_NEUREKA_PE_H=4 -DNNX_NEUREKA_PE_W=4 +APP_CFLAGS += $(INC_FLAGS) + +PULP_CFLAGS = $(APP_CFLAGS) + +PULP_APP = test +PULP_APP_FC_SRCS = $(APP_SRCS) +PULP_APP_HOST_SRCS = $(APP_SRCS) + +include $(PULP_SDK_HOME)/install/rules/pulp_rt.mk \ No newline at end of file diff --git a/neureka/app/bsp/neureka_bsp.h b/neureka/app/bsp/neureka_bsp.h new file mode 100644 index 0000000..41df5c7 --- /dev/null +++ b/neureka/app/bsp/neureka_bsp.h @@ -0,0 +1,13 @@ +#ifdef NNX_NEUREKA_TESTBENCH + #include "neureka_testbench_bsp.h" + #define neureka_bsp_conf_t neureka_testbench_conf_t + #define neureka_bsp_open neureka_testbench_open + #define neureka_bsp_close neureka_testbench_close + #define neureka_bsp_event_wait_and_clear neureka_testbench_event_wait_and_clear +#else + #include "neureka_siracusa_bsp.h" + #define neureka_bsp_conf_t neureka_siracusa_conf_t + #define neureka_bsp_open neureka_siracusa_open + #define neureka_bsp_close neureka_siracusa_close + #define neureka_bsp_event_wait_and_clear neureka_siracusa_event_wait_and_clear +#endif \ No newline at end of file diff --git a/neureka/app/bsp/siracusa/neureka_siracusa_bsp.c b/neureka/app/bsp/siracusa/neureka_siracusa_bsp.c new file mode 100644 index 0000000..57136fd --- /dev/null +++ b/neureka/app/bsp/siracusa/neureka_siracusa_bsp.c @@ -0,0 +1,78 @@ +/* + * Luka Macan + * + * Copyright 2023 ETH Zurich and University of Bologna + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * SPDX-License-Identifier: Apache-2.0 + */ + +#include "neureka_siracusa_bsp.h" +#include + +#define NEUREKA_SIRACUSA_CLUSTER_CTRL_BASE_ADDR (0x00200000) +#define NEUREKA_SIRACUSA_CLUSTER_CTRL_HWPE_OFFS 0x18 +#define NEUREKA_SIRACUSA_CLUSTER_CTRL_HWPE_ADDR \ + (NEUREKA_SIRACUSA_CLUSTER_CTRL_BASE_ADDR + \ + NEUREKA_SIRACUSA_CLUSTER_CTRL_HWPE_OFFS) +#define NEUREKA_SIRACUSA_CLUSTER_CTRL_HWPE_MASK_HCI_PRIO 0x100 +#define NEUREKA_SIRACUSA_CLUSTER_CTRL_HWPE_MASK_HCI_MAXSTALL 0xff +#define NEUREKA_SIRACUSA_MAX_STALL (8) +#define NEUREKA_SIRACUSA_EVENT (1 << 12) +#define NEUREKA_SIRACUSA_BASE_ADDR (0x00201000) +#define NEUREKA_SIRACUSA_WEIGHT_MEM_BASE_ADDR (0x10400000) +#define NEUREKA_SIRACUSA_WEIGHT_MEM_MRAM_OFFSET (0x00000000) +#define NEUREKA_SIRACUSA_WEIGHT_MEM_SRAM_OFFSET (0x00400000) + +void neureka_siracusa_hci_setpriority_neureka() { + *(volatile uint32_t *)NEUREKA_SIRACUSA_CLUSTER_CTRL_HWPE_ADDR |= + NEUREKA_SIRACUSA_CLUSTER_CTRL_HWPE_MASK_HCI_PRIO; +} + +void neureka_siracusa_hci_setpriority_core() { + *(volatile uint32_t *)NEUREKA_SIRACUSA_CLUSTER_CTRL_HWPE_ADDR &= + ~NEUREKA_SIRACUSA_CLUSTER_CTRL_HWPE_MASK_HCI_PRIO; +} + +void neureka_siracusa_hci_reset_max_stall() { + *(volatile uint32_t *)NEUREKA_SIRACUSA_CLUSTER_CTRL_HWPE_ADDR &= + ~NEUREKA_SIRACUSA_CLUSTER_CTRL_HWPE_MASK_HCI_MAXSTALL; +} + +void neureka_siracusa_hci_set_max_stall(uint32_t max_stall) { + *(volatile uint32_t *)NEUREKA_SIRACUSA_CLUSTER_CTRL_HWPE_ADDR |= + max_stall & NEUREKA_SIRACUSA_CLUSTER_CTRL_HWPE_MASK_HCI_MAXSTALL; +} + +void neureka_siracusa_open(neureka_siracusa_conf_t *conf) { + neureka_siracusa_hci_setpriority_neureka(); + neureka_siracusa_hci_set_max_stall(conf->max_stall); +} + +void neureka_siracusa_close() { + neureka_siracusa_hci_reset_max_stall(); + neureka_siracusa_hci_setpriority_core(); +} + +void neureka_siracusa_event_wait_and_clear() { + eu_evt_maskWaitAndClr(NEUREKA_SIRACUSA_EVENT); +} + +static const neureka_dev_t neureka_siracusa_dev = { + .hwpe_dev = (struct hwpe_dev_t){ + .base_addr = (volatile uint32_t *)NEUREKA_SIRACUSA_BASE_ADDR}}; + +const neureka_dev_t *neureka_siracusa_get_dev() { + return &neureka_siracusa_dev; +} diff --git a/neureka/app/bsp/siracusa/neureka_siracusa_bsp.h b/neureka/app/bsp/siracusa/neureka_siracusa_bsp.h new file mode 100644 index 0000000..458fae7 --- /dev/null +++ b/neureka/app/bsp/siracusa/neureka_siracusa_bsp.h @@ -0,0 +1,69 @@ +/* + * Luka Macan + * + * Copyright 2023 ETH Zurich and University of Bologna + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * SPDX-License-Identifier: Apache-2.0 + */ + +#ifndef __NEUREKA_SIRACUSA_BSP_H__ +#define __NEUREKA_SIRACUSA_BSP_H__ + +#include + +#include "neureka.h" +#include + +/** + * neureka_siracusa_setpriority_neureka + * + * Set HCI interconnect bus priority to prioritize neureka. + */ +void neureka_siracusa_hci_setpriority_neureka(); + +/** + * neureka_siracusa_setpriority_core + * + * Set HCI bus priority to prioritize cores. + */ +void neureka_siracusa_hci_setpriority_core(); + +/** + * neureka_siracusa_hci_reset_maxstall + * + * Reset the HCI bus maxstall parameter. + * TODO: Check if it disables it also or just resets? + */ +void neureka_siracusa_hci_reset_max_stall(); + +/** + * neureka_siracusa_hci_set_maxstall + * + * Set the HCI bus maxstall. Maxstall defines how many cycles + * will the HCI bus stall the lower priority master, i.e. neureka or core, + * before letting it do a transaction. + */ +void neureka_siracusa_hci_set_max_stall(uint32_t max_stall); + +typedef struct neureka_siracusa_conf_t { + int max_stall; +} neureka_siracusa_conf_t; + +void neureka_siracusa_open(neureka_siracusa_conf_t *conf); +void neureka_siracusa_close(); +void neureka_siracusa_event_wait_and_clear(); +const neureka_dev_t *neureka_siracusa_get_dev(); + +#endif // !__NEUREKA_SIRACUSA_BSP_H__ diff --git a/neureka/app/bsp/testbench/neureka_testbench_bsp.c b/neureka/app/bsp/testbench/neureka_testbench_bsp.c new file mode 100644 index 0000000..2a5d4a1 --- /dev/null +++ b/neureka/app/bsp/testbench/neureka_testbench_bsp.c @@ -0,0 +1,48 @@ +/* + * Luka Macan + * Francesco Conti + * Arpan Suravi Prasad + * + * Copyright 2023 ETH Zurich and University of Bologna + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * SPDX-License-Identifier: Apache-2.0 + */ + +#include "neureka_testbench_bsp.h" +#include + +#define NEUREKA_TESTBENCH_CLUSTER_CTRL_BASE_ADDR (0x00100000) +#define NEUREKA_TESTBENCH_BASE_ADDR (0x10201000) +#define NEUREKA_TESTBENCH_EVENT (1 << 12) + +void neureka_testbench_open(neureka_testbench_conf_t *conf) { + return; +} + +void neureka_testbench_close() { + return; +} + +void neureka_testbench_event_wait_and_clear() { + eu_evt_maskWaitAndClr(NEUREKA_TESTBENCH_EVENT); +} + +static const neureka_dev_t neureka_testbench_dev = { + .hwpe_dev = (struct hwpe_dev_t){ + .base_addr = (volatile uint32_t *)NEUREKA_TESTBENCH_BASE_ADDR}}; + +const neureka_dev_t *neureka_testbench_get_dev() { + return &neureka_testbench_dev; +} diff --git a/neureka/app/bsp/testbench/neureka_testbench_bsp.h b/neureka/app/bsp/testbench/neureka_testbench_bsp.h new file mode 100644 index 0000000..a6d4bd1 --- /dev/null +++ b/neureka/app/bsp/testbench/neureka_testbench_bsp.h @@ -0,0 +1,37 @@ +/* + * Luka Macan + * + * Copyright 2023 ETH Zurich and University of Bologna + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * SPDX-License-Identifier: Apache-2.0 + */ + +#ifndef __NEUREKA_TESTBENCH_BSP_H__ +#define __NEUREKA_TESTBENCH_BSP_H__ + +#include "pulp.h" +#include "neureka.h" +#include + +typedef struct neureka_testbench_conf_t { + int max_stall; +} neureka_testbench_conf_t; + +void neureka_testbench_open(neureka_testbench_conf_t *conf); +void neureka_testbench_close(); +void neureka_testbench_event_wait_and_clear(); +const neureka_dev_t *neureka_testbench_get_dev(); + +#endif // !__NEUREKA_TESTBENCH_BSP_H__ diff --git a/neureka/app/gvsoc/neureka_gvsoc.h b/neureka/app/gvsoc/neureka_gvsoc.h new file mode 100644 index 0000000..37eeab0 --- /dev/null +++ b/neureka/app/gvsoc/neureka_gvsoc.h @@ -0,0 +1,54 @@ +/* + * Luka Macan + * + * Copyright 2023 ETH Zurich and University of Bologna + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * SPDX-License-Identifier: Apache-2.0 + */ + +#ifndef __NEUREKA_GVSOC_H__ +#define __NEUREKA_GVSOC_H__ + +#include "neureka.h" +#include "neureka_task.h" + +#define NEUREKA_REG_GVSOC_LOG_LEVEL 24 +#define NEUREKA_REG_GVSOC_LOG_FORMAT 25 + +typedef enum neureka_gvsoc_log_format_e { + NEUREKA_GVSOC_LOG_FORMAT_DECIMAL = 0, + NEUREKA_GVSOC_LOG_FORMAT_HEXADECIMAL = 3 +} neureka_gvsoc_log_format_e; + +typedef enum neureka_gvsoc_log_level_e { + NEUREKA_GVSOC_LOG_LEVEL_JOB_START_END = 0, + NEUREKA_GVSOC_LOG_LEVEL_CONFIG = 1, + NEUREKA_GVSOC_LOG_LEVEL_ACTIV_INOUT = 2, + NEUREKA_GVSOC_LOG_LEVEL_ALL = 3 +} neureka_gvsoc_log_level_e; + +static void neureka_gvsoc_log_activate(neureka_dev_t *dev, + neureka_gvsoc_log_level_e log_level, + neureka_gvsoc_log_format_e format) { + hwpe_task_reg_write(&dev->hwpe_dev, NEUREKA_REG_GVSOC_LOG_LEVEL, log_level); + hwpe_task_reg_write(&dev->hwpe_dev, NEUREKA_REG_GVSOC_LOG_FORMAT, format); +} + +static void neureka_gvsoc_log_deactivate(neureka_dev_t *dev) { + hwpe_task_reg_write(&dev->hwpe_dev, NEUREKA_REG_GVSOC_LOG_LEVEL, + NEUREKA_GVSOC_LOG_LEVEL_JOB_START_END); +} + +#endif // __NEUREKA_GVSOC_H__ diff --git a/neureka/app/hal/neureka.c b/neureka/app/hal/neureka.c new file mode 100644 index 0000000..dc829d9 --- /dev/null +++ b/neureka/app/hal/neureka.c @@ -0,0 +1,37 @@ +/* + * Luka Macan + * + * Copyright 2023 ETH Zurich and University of Bologna + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * SPDX-License-Identifier: Apache-2.0 + */ + +#include "neureka.h" + +#define NEUREKA_STATUS_EMPTY (0x000) +#define NEUREKA_STATUS_FULL (0x101) + +inline int neureka_task_queue_tasks_in_flight(neureka_dev_t *dev) { + uint32_t status = hwpe_task_queue_status(&dev->hwpe_dev); + return (status & 0x1) + ((status >> 8) & 0x1); +} + +inline int neureka_task_queue_empty(neureka_dev_t *dev) { + return hwpe_task_queue_status(&dev->hwpe_dev) == NEUREKA_STATUS_EMPTY; +} + +inline int neureka_task_queue_full(neureka_dev_t *dev) { + return hwpe_task_queue_status(&dev->hwpe_dev) == NEUREKA_STATUS_FULL; +} diff --git a/neureka/app/hal/neureka.h b/neureka/app/hal/neureka.h new file mode 100644 index 0000000..eae77a1 --- /dev/null +++ b/neureka/app/hal/neureka.h @@ -0,0 +1,37 @@ +/* + * Luka Macan + * + * Copyright 2023 ETH Zurich and University of Bologna + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * SPDX-License-Identifier: Apache-2.0 + */ + +#ifndef __NEUREKA_H__ +#define __NEUREKA_H__ + +#include "hwpe.h" +#include + +#define NEUREKA_TASK_QUEUE_SIZE (2) + +typedef struct neureka_dev_t { + hwpe_dev_t hwpe_dev; /* Implements the HWPE device interface */ +} neureka_dev_t; + +int neureka_task_queue_tasks_in_flight(neureka_dev_t *dev); +int neureka_task_queue_empty(neureka_dev_t *dev); +int neureka_task_queue_full(neureka_dev_t *dev); + +#endif // __NEUREKA_H__ diff --git a/neureka/app/hal/neureka_task.c b/neureka/app/hal/neureka_task.c new file mode 100644 index 0000000..d31c934 --- /dev/null +++ b/neureka/app/hal/neureka_task.c @@ -0,0 +1,248 @@ +/* + * Luka Macan + * + * Copyright 2023 ETH Zurich and University of Bologna + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * SPDX-License-Identifier: Apache-2.0 + */ + +#include "neureka_task.h" +#include "neureka_task_defs.h" +#include "pulp_nnx_util.h" + +uint32_t neureka_get_tile_padding(uint32_t padding, uint32_t i_height, + uint32_t i_width, uint32_t n_height, + uint32_t n_width) { + uint32_t tile_padding = padding; + if (i_height > 0) { + tile_padding &= ~(0xf << 28); + } + if (i_width < n_width - 1) { + tile_padding &= ~(0xf << 24); + } + if (i_height < n_height - 1) { + tile_padding &= ~(0xf << 20); + } + if (i_width > 0) { + tile_padding &= ~(0xf << 16); + } + return tile_padding; +} + +void neureka_task_init(neureka_task_t *task) { + *task = (neureka_task_t){.data = {0}}; +} + +void neureka_task_set_op_to_conv(neureka_task_t *task, + const uint8_t kernel_shape, + const uint8_t depthwise) { + task->depthwise = depthwise; + task->kernel_shape = kernel_shape; + task->subtile_output_channel = depthwise ? NEUREKA_SUBTILE_INPUT_CHANNEL_3x3 + : NEUREKA_SUBTILE_OUTPUT_CHANNEL; + task->subtile_input_channel = kernel_shape == 3 + ? NEUREKA_SUBTILE_INPUT_CHANNEL_3x3 + : NEUREKA_SUBTILE_INPUT_CHANNEL_1x1; + + const int flag_mode = kernel_shape == 1 ? NEUREKA_FLAG_MODE_1x1 + : depthwise == 1 ? NEUREKA_FLAG_MODE_3x3_DW + : NEUREKA_FLAG_MODE_3x3; + + task->data.cfg.conf0 &= ~(NEUREKA_MASK_FLAG_MODE); + task->data.cfg.conf0 |= flag_mode; +} + +void neureka_task_set_bits(neureka_task_t *task, const uint8_t input_bits, + const uint8_t output_bits, + const uint8_t weight_bits) { + neureka_quant_mode_e quantMode; + if (output_bits == 8) { + quantMode = quantMode8Bit; + } else { + quantMode = quantMode32Bit; + } + + task->qw = weight_bits; + task->data.cfg.conf0 &= + ~(NEUREKA_MASK_QUANT_MODE | NEUREKA_MASK_FLAG_WEIGHT_BITS); + task->data.cfg.conf0 |= quantMode | (weight_bits - 1); +} + +void neureka_task_set_norm_quant(neureka_task_t *task, neureka_quant_t quant, + neureka_norm_t norm) { + task->data.cfg.conf0 &= + ~(NEUREKA_MASK_QUANT_FUNCTION | NEUREKA_MASK_SHIFT_AMOUNT | + NEUREKA_MASK_NORM_MODE | NEUREKA_MASK_FLAG_NORM_BIAS | + NEUREKA_MASK_FLAG_NORM_SHIFT); + task->data.cfg.conf0 |= NEUREKA_FLAG_NORM_QUANT | quant.function | + (quant.shift_amount << 16) | norm.mode | + norm.flag_bias << NEUREKA_SHIFT_FLAG_NORM_BIAS | + norm.flag_shift << NEUREKA_SHIFT_FLAG_NORM_SHIFT; +} + +void neureka_task_set_weight_offset( + neureka_task_t *task, neureka_weight_offset_mode_e weight_offset_mode, + const int32_t weight_offset) { + task->data.cfg.conf0 &= ~NEUREKA_MASK_WEIGHT_OFFSET_MODE; + task->data.cfg.conf0 |= weight_offset_mode; + task->data.cfg.weight_offset_factor = weight_offset; +} + +void neureka_task_set_input_signed(neureka_task_t *task) { + task->data.cfg.conf0 |= NEUREKA_FLAG_INPUT_SIGNED; +} + +void neureka_task_set_input_unsigned(neureka_task_t *task) { + task->data.cfg.conf0 &= ~NEUREKA_FLAG_INPUT_SIGNED; +} + +void neureka_task_set_weight_source(neureka_task_t *task, + neureka_weight_source_e weight_source) { + task->data.cfg.conf0 &= ~NEUREKA_MASK_FLAG_WEIGHT_SOURCE; + task->data.cfg.conf0 |= weight_source; +} + +void neureka_task_set_activation_prefetch(neureka_task_t *task, + neureka_activation_prefetch_e activation_prefetch) { + task->data.cfg.conf0 &= ~NEUREKA_MASK_FLAG_ACTIVATION_PREFETCH; + task->data.cfg.conf0 |= activation_prefetch; +} + +/** neureka_pad_ptr + * + * Calculate the pointer to the start of the ptr as if + * it was the start to the padded data. + * Necessary for input pointer when it's padded. + */ +uint32_t neureka_pad_ptr(uint32_t ptr, const uint32_t width, + const uint32_t width_stride, const uint8_t padding_top, + const uint8_t padding_left) { + return ptr - (padding_top * width + padding_left) * width_stride; +} + +void neureka_task_set_ptrs_conv(neureka_task_t *task, uint32_t input_ptr, + uint32_t w_in, uint32_t w_in_stride, + uint8_t padding_top, uint8_t padding_left, + uint32_t output_ptr, uint32_t weights_ptr) { + task->data.infeat_ptr = + neureka_pad_ptr(input_ptr, w_in, w_in_stride, padding_top, padding_left); + task->data.outfeat_ptr = output_ptr; + task->data.weights_ptr = weights_ptr; +} + +void neureka_task_set_ptrs_norm_quant(neureka_task_t *task, uint32_t scale_ptr, + uint32_t shift_ptr, uint32_t bias_ptr) { + task->data.scale_ptr = scale_ptr; + task->data.scale_shift_ptr = shift_ptr; + task->data.scale_bias_ptr = bias_ptr; +} + +void neureka_task_set_strides(neureka_task_t *task, const uint32_t k_in, + const uint32_t h_in_stride, + const uint32_t w_in_stride, + const uint32_t h_out_stride, + const uint32_t w_out_stride) { + const uint32_t num_k_in = + nnx_calculate_number_of_tiles(k_in, task->subtile_input_channel); + + const neureka_stride_t input_stride = { + .d0 = w_in_stride, .d1 = h_in_stride, .d2 = 0}; + task->data.cfg.input_stride = input_stride; + + const neureka_stride_t output_stride = {.d0 = NEUREKA_OUTPUT_BANDWIDTH_BYTES, + .d1 = w_out_stride, + .d2 = h_out_stride}; + task->data.cfg.output_stride = output_stride; + + if (task->kernel_shape == 1) { // 1x1 + task->data.cfg.weights_stride.d0 = NEUREKA_WEIGHT_BANDWIDTH_BYTES_1x1; + task->data.cfg.weights_stride.d1 = + NEUREKA_WEIGHT_BANDWIDTH_BYTES_1x1 * num_k_in; + } else if (!task->depthwise) { // 3x3 + task->data.cfg.weights_stride.d0 = NEUREKA_WEIGHT_BANDWIDTH_BYTES_3x3; + task->data.cfg.weights_stride.d1 = + NEUREKA_WEIGHT_BANDWIDTH_BYTES_3x3 * task->qw * num_k_in; + } else { // 3x3 depthwise + task->data.cfg.weights_stride.d0 = NEUREKA_WEIGHT_BANDWIDTH_BYTES_3x3; + task->data.cfg.weights_stride.d1 = 0; + } + task->data.cfg.weights_stride.d2 = 0; +} + +void neureka_task_set_counters(neureka_task_t *task, const uint32_t k_in, + const uint32_t h_out, const uint32_t w_out, + const uint32_t k_out, + const uint8_t padding_bottom, + const uint8_t padding_right) { + const uint16_t num_Ko = + nnx_calculate_number_of_tiles(k_out, task->subtile_output_channel); + const uint16_t num_Ki = + nnx_calculate_number_of_tiles(k_in, task->subtile_input_channel); + const uint16_t num_Ho = + nnx_calculate_number_of_tiles(h_out, NEUREKA_SUBTILE_OUTPUT_HEIGHT); + const uint16_t num_Wo = + nnx_calculate_number_of_tiles(w_out, NEUREKA_SUBTILE_OUTPUT_WIDTH); + + const uint16_t rem_Ko = + nnx_calculate_last_tile_size(k_out, task->subtile_output_channel); + const uint16_t rem_Ki = + nnx_calculate_last_tile_size(k_in, task->subtile_input_channel); + const uint16_t rem_Ho = + nnx_calculate_last_tile_size(h_out, NEUREKA_SUBTILE_OUTPUT_HEIGHT); + const uint16_t rem_Wo = + nnx_calculate_last_tile_size(w_out, NEUREKA_SUBTILE_OUTPUT_WIDTH); + const uint16_t rem_Hi = + (task->kernel_shape == 1 ? rem_Ho : rem_Ho + 2) - padding_bottom; + const uint16_t rem_Wi = + (task->kernel_shape == 1 ? rem_Wo : rem_Wo + 2) - padding_right; + + const neureka_subtile_t subtile = { + .number = {.KoKi = nnx_concat_half(num_Ko, num_Ki), + .HoWo = nnx_concat_half(num_Ho, num_Wo)}, + .remainder = {.KoKi = nnx_concat_half(rem_Ko, rem_Ki), + .HoWo = nnx_concat_half(rem_Ho, rem_Wo), + .HiWi = nnx_concat_half(rem_Hi, rem_Wi)}}; + task->data.cfg.subtile = subtile; +} + +void neureka_task_set_padding(neureka_task_t *task, const uint8_t top, + const uint8_t bottom, const uint8_t left, + const uint8_t right, const uint8_t value) { + task->data.cfg.padding = ((top & 0xf) << 28) | ((right & 0xf) << 24) | + ((bottom & 0xf) << 20) | ((left & 0xf) << 16) | + (value & 0xff); +} + +void neureka_task_set_mask_filter(neureka_task_t *task, const uint8_t top, + const uint8_t bottom, const uint8_t left, + const uint8_t right) { + task->data.cfg.filter_mask = ((top & 0xff) << 24) | ((right & 0xff) << 16) | + ((bottom & 0xff) << 8) | ((left & 0xff) << 0); +} + +void neureka_task_set_dims( + neureka_task_t *task, const uint32_t w_in, const uint32_t k_in, + const uint32_t h_in_stride, const uint32_t w_in_stride, + const uint32_t h_out, const uint32_t w_out, const uint32_t k_out, + const uint32_t h_out_stride, const uint32_t w_out_stride, + const uint8_t padding_top, const uint8_t padding_bottom, + const uint8_t padding_left, const uint8_t padding_right) { + neureka_task_set_strides(task, k_in, h_in_stride, w_in_stride, h_out_stride, + w_out_stride); + neureka_task_set_counters(task, k_in, h_out, w_out, k_out, padding_bottom, + padding_right); + neureka_task_set_padding(task, padding_top, padding_bottom, padding_left, + padding_right, 0); +} diff --git a/neureka/app/hal/neureka_task.h b/neureka/app/hal/neureka_task.h new file mode 100644 index 0000000..4022fc0 --- /dev/null +++ b/neureka/app/hal/neureka_task.h @@ -0,0 +1,192 @@ +/* + * Luka Macan + * + * Copyright 2023 ETH Zurich and University of Bologna + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * SPDX-License-Identifier: Apache-2.0 + */ + +#ifndef __NEUREKA_TASK_H__ +#define __NEUREKA_TASK_H__ + +#include "neureka_task_defs.h" +#include + +typedef enum neureka_task_flag_e { + neurekaTaskFlagFalse = 0, + neurekaTaskFlagTrue = 1 +} neureka_task_flag_e; + +typedef enum neureka_weight_source_e { + neurekaWeightSourceTcdm = NEUREKA_FLAG_WEIGHT_SOURCE_TCDM, + neurekaWeightSourceWmem = NEUREKA_FLAG_WEIGHT_SOURCE_WMEM +} neureka_weight_source_e; + +typedef enum neureka_weight_offset_mode_e { + weightOffsetModeSymmetric = NEUREKA_FLAG_WEIGHT_OFFSET_SYMMETRIC, + weightOffsetModeLayerWise = NEUREKA_FLAG_WEIGHT_OFFSET_LAYER_WISE +} neureka_weight_offset_mode_e; + +typedef enum neureka_activation_prefetch_e { + activationPrefetchOn = NEUREKA_FLAG_ACTIVATION_PREFETCH_ON, + activationPrefetchOff = NEUREKA_FLAG_ACTIVATION_PREFETCH_OFF +} neureka_activation_prefetch_e; + +typedef enum { + normMode8Bit = NEUREKA_NORM_MODE_8BIT, + normMode32Bit = NEUREKA_NORM_MODE_32BIT +} neureka_norm_mode_e; + +typedef struct neureka_norm_t { + neureka_norm_mode_e mode; + neureka_task_flag_e flag_bias; + neureka_task_flag_e flag_shift; +} neureka_norm_t; + +typedef enum neureka_quant_mode_e { + quantMode8Bit = NEUREKA_QUANT_MODE_8BIT, + quantMode32Bit = NEUREKA_QUANT_MODE_32BIT +} neureka_quant_mode_e; + +typedef enum neureka_quant_function_e { + quantFunctionIdentity = NEUREKA_FLAG_QUANT_FUNCTION_IDENTITY, + quantFunctionRelu = NEUREKA_FLAG_QUANT_FUNCTION_RELU +} neureka_quant_function_e; + +typedef struct neureka_quant_t { + // Shift amount must be in range 0x00-0x1F + uint8_t shift_amount; + neureka_quant_function_e function; + neureka_task_flag_e flag_rounding; +} neureka_quant_t; + +typedef struct neureka_stride_t { + uint32_t d0; + uint32_t d1; + uint32_t d2; +} neureka_stride_t; + +typedef struct neureka_subtile_remainder_t { + uint32_t KoKi; + uint32_t HoWo; + uint32_t HiWi; +} neureka_subtile_remainder_t; + +typedef struct neureka_subtile_number_t { + uint32_t KoKi; + uint32_t HoWo; +} neureka_subtile_number_t; + +typedef struct neureka_subtile_t { + neureka_subtile_remainder_t remainder; + neureka_subtile_number_t number; +} neureka_subtile_t; + +typedef struct neureka_cfg_t { + neureka_stride_t input_stride; + neureka_stride_t output_stride; + neureka_stride_t weights_stride; + neureka_subtile_t subtile; + uint32_t padding; + uint32_t weight_offset_factor; + uint32_t filter_mask; + uint32_t conf0; +} neureka_cfg_t; + +typedef struct neureka_task_data_t { + uint32_t weights_ptr; + uint32_t infeat_ptr; + uint32_t outfeat_ptr; + uint32_t scale_ptr; + uint32_t scale_shift_ptr; + uint32_t scale_bias_ptr; + neureka_cfg_t cfg; +} neureka_task_data_t; + +typedef struct neureka_task_t { + neureka_task_data_t data; + uint8_t qw; + uint8_t subtile_output_channel; + uint8_t subtile_input_channel; + uint8_t kernel_shape; + uint8_t depthwise; + uint8_t id; +} neureka_task_t; + +void neureka_task_init(neureka_task_t *task); +void neureka_task_set_op_to_conv(neureka_task_t *task, + const uint8_t kernel_shape, + const uint8_t depthwise); +void neureka_task_set_bits(neureka_task_t *task, const uint8_t input_bits, + const uint8_t output_bits, + const uint8_t weight_bits); +void neureka_task_set_norm_quant(neureka_task_t *task, neureka_quant_t quant, + neureka_norm_t norm); +void neureka_task_set_weight_offset( + neureka_task_t *task, neureka_weight_offset_mode_e weight_offset_mode, + const int32_t weight_offset); +void neureka_task_set_input_signed(neureka_task_t *task); +void neureka_task_set_input_unsigned(neureka_task_t *task); +void neureka_task_set_weight_source(neureka_task_t *task, + neureka_weight_source_e weight_source); +uint32_t neureka_get_tile_padding(uint32_t padding, uint32_t i_height, + uint32_t i_width, uint32_t n_height, + uint32_t n_width); +uint32_t neureka_pad_ptr(uint32_t ptr, const uint32_t width, + const uint32_t width_stride, const uint8_t padding_top, + const uint8_t padding_left); +void neureka_task_set_ptrs_conv(neureka_task_t *task, uint32_t input_ptr, + uint32_t w_in, uint32_t w_in_stride, + uint8_t padding_top, uint8_t padding_left, + uint32_t output_ptr, uint32_t weights_ptr); +void neureka_task_set_ptrs_norm_quant(neureka_task_t *task, uint32_t scale_ptr, + uint32_t shift_ptr, uint32_t bias_ptr); +/** neureka_task_set_strides + * + * All the strides variables are strides between elements alongside that + * dimension and expressed in bytes. There is no stride variable for the channel + * dimension because the N-EUREKA requires the channels to be contiguous. + */ +void neureka_task_set_strides(neureka_task_t *task, const uint32_t k_in, + const uint32_t h_in_stride, + const uint32_t w_in_stride, + const uint32_t h_out_stride, + const uint32_t w_out_stride); +void neureka_task_set_counters(neureka_task_t *task, const uint32_t k_in, + const uint32_t h_out, const uint32_t w_out, + const uint32_t k_out, + const uint8_t padding_bottom, + const uint8_t padding_right); +void neureka_task_set_padding(neureka_task_t *task, const uint8_t top, + const uint8_t bottom, const uint8_t left, + const uint8_t right, const uint8_t value); +void neureka_task_set_mask_filter(neureka_task_t *task, const uint8_t top, + const uint8_t bottom, const uint8_t left, + const uint8_t right); +/** neureka_task_set_dims + * + * All the strides variables are strides between elements alongside that + * dimension and expressed in bytes. There is no stride variable for the channel + * dimension because the N-EUREKA requires the channels to be contiguous. + */ +void neureka_task_set_dims( + neureka_task_t *task, const uint32_t w_in, const uint32_t k_in, + const uint32_t h_in_stride, const uint32_t w_in_stride, + const uint32_t h_out, const uint32_t w_out, const uint32_t k_out, + const uint32_t h_out_stride, const uint32_t w_out_stride, + const uint8_t padding_top, const uint8_t padding_bottom, + const uint8_t padding_left, const uint8_t padding_right); + +#endif // !__NEUREKA_TASK_H__ diff --git a/neureka/app/hal/neureka_task_defs.h b/neureka/app/hal/neureka_task_defs.h new file mode 100644 index 0000000..7417347 --- /dev/null +++ b/neureka/app/hal/neureka_task_defs.h @@ -0,0 +1,131 @@ +/* + * Luka Macan + * + * Copyright 2023 ETH Zurich and University of Bologna + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * SPDX-License-Identifier: Apache-2.0 + */ + +#ifndef __NEUREKA_DEFS_H__ +#define __NEUREKA_DEFS_H__ + +/* ARCHITECTURE */ + +#define NNX_NEUREKA_PE_H (4) +#define NNX_NEUREKA_PE_W (4) +#define NNX_NEUREKA_BANDWIDTH_1x1 (256) +#define NNX_NEUREKA_BANDWIDTH_3x3 (288) + +#define NEUREKA_SUBTILE_INPUT_HEIGHT_1x1 (NNX_NEUREKA_PE_H) +#define NEUREKA_SUBTILE_INPUT_WIDTH_1x1 (NNX_NEUREKA_PE_W) +#define NEUREKA_SUBTILE_INPUT_CHANNEL_1x1 (32) + +#define NEUREKA_SUBTILE_INPUT_HEIGHT_3x3 (NNX_NEUREKA_PE_H+2) +#define NEUREKA_SUBTILE_INPUT_WIDTH_3x3 (NNX_NEUREKA_PE_W+2) +#define NEUREKA_SUBTILE_INPUT_CHANNEL_3x3 (32) + +#define NEUREKA_SUBTILE_OUTPUT_HEIGHT (NNX_NEUREKA_PE_H) +#define NEUREKA_SUBTILE_OUTPUT_WIDTH (NNX_NEUREKA_PE_W) +#define NEUREKA_SUBTILE_OUTPUT_CHANNEL (32) + +#define NEUREKA_OUTPUT_BANDWIDTH_BYTES (32) +#define NEUREKA_WEIGHT_BANDWIDTH_BYTES_1x1 (NNX_NEUREKA_BANDWIDTH_1x1/8) +#define NEUREKA_WEIGHT_BANDWIDTH_BYTES_3x3 (NNX_NEUREKA_BANDWIDTH_3x3/8) + +/* TASK REGISTERS */ + +// job configuration +#define NEUREKA_REG_WEIGHTS_PTR 0 +#define NEUREKA_REG_INFEAT_PTR 1 +#define NEUREKA_REG_OUTFEAT_PTR 2 +#define NEUREKA_REG_SCALE_PTR 3 +#define NEUREKA_REG_SCALE_SHIFT_PTR 4 +#define NEUREKA_REG_SCALE_BIAS_PTR 5 +#define NEUREKA_REG_INFEAT_D0_STRIDE 6 +#define NEUREKA_REG_INFEAT_D1_STRIDE 7 +#define NEUREKA_REG_INFEAT_D2_STRIDE 8 +#define NEUREKA_REG_OUTFEAT_D0_STRIDE 9 +#define NEUREKA_REG_OUTFEAT_D1_STRIDE 10 +#define NEUREKA_REG_OUTFEAT_D2_STRIDE 11 +#define NEUREKA_REG_WEIGHTS_D0_STRIDE 12 +#define NEUREKA_REG_WEIGHTS_D1_STRIDE 13 +#define NEUREKA_REG_WEIGHTS_D2_STRIDE 14 +#define NEUREKA_REG_SUBTILE_REMAINDER_0 15 +#define NEUREKA_REG_SUBTILE_REMAINDER_1 16 +#define NEUREKA_REG_SUBTILE_REMAINDER_2 17 +#define NEUREKA_REG_SUBTILE_NUMBER_0 18 +#define NEUREKA_REG_SUBTILE_NUMBER_1 19 +#define NEUREKA_REG_PADDING 20 +#define NEUREKA_REG_WEIGHT_OFFSET_FACTOR 21 +#define NEUREKA_REG_FILTER_MASKING 22 +#define NEUREKA_REG_CONF0 23 + +/* SHIFT */ + +#define NEUREKA_SHIFT_FLAG_INPUT_SIGNED (26) +#define NEUREKA_SHIFT_FLAG_NORM_BIAS (25) +#define NEUREKA_SHIFT_FLAG_NORM_SHIFT (24) +#define NEUREKA_SHIFT_QUANT_SHIFT (16) + +/* CONF0 FLAGS */ + +#define NEUREKA_FLAG_INPUT_SIGNED (1 << 26) +#define NEUREKA_FLAG_NORM_BIAS (1 << 25) +#define NEUREKA_FLAG_NORM_SHIFT (1 << 24) +#define NEUREKA_FLAG_QUANT_FUNCTION_IDENTITY (1 << 23) +#define NEUREKA_FLAG_QUANT_FUNCTION_RELU (0 << 23) +#define NEUREKA_QUANT_MODE_8BIT (0 << 21) +#define NEUREKA_QUANT_MODE_32BIT (2 << 21) +// conf0[20:16] - quantization shift amount +#define NEUREKA_FLAG_WEIGHT_OFFSET_SYMMETRIC (0 << 15) // Unimplemented in gvsoc +#define NEUREKA_FLAG_WEIGHT_OFFSET_LAYER_WISE \ + (1 << 15) // Unimplemented in gvsoc +#define NEUREKA_FLAG_STREAMIN (1 << 14) +#define NEUREKA_NORM_MODE_8BIT (0 << 12) +#define NEUREKA_NORM_MODE_32BIT (2 << 12) +#define NEUREKA_FLAG_ACTIVATION_PREFETCH_ON (1 << 10) +#define NEUREKA_FLAG_ACTIVATION_PREFETCH_OFF (0 << 10) +#define NEUREKA_FLAG_WEIGHT_SOURCE_WMEM (1 << 9) +#define NEUREKA_FLAG_WEIGHT_SOURCE_TCDM (0 << 9) +#define NEUREKA_FLAG_LINEAR_MODE (1 << 7) // not tested +#define NEUREKA_FLAG_MODE_3x3 (0 << 5) +#define NEUREKA_FLAG_MODE_3x3_DW (1 << 5) +#define NEUREKA_FLAG_MODE_1x1 (2 << 5) +#define NEUREKA_FLAG_NORM_QUANT (1 << 4) + +/* Masks */ + +#define NEUREKA_MASK_FLAG_INPUT_SIGNED (0x1 << 26) +#define NEUREKA_MASK_FLAG_NORM_BIAS (0x1 << 25) +#define NEUREKA_MASK_FLAG_NORM_SHIFT (0x1 << 24) +#define NEUREKA_MASK_QUANT_FUNCTION (0x1 << 23) +#define NEUREKA_MASK_QUANT_MODE (0x3 << 21) +#define NEUREKA_MASK_SHIFT_AMOUNT (0x1f << 16) +#define NEUREKA_MASK_WEIGHT_OFFSET_MODE (0x1 << 15) +#define NEUREKA_MASK_NORM_MODE (0x3 << 12) +#define NEUREKA_MASK_FLAG_ACTIVATION_PREFETCH (0x1 << 10) +#define NEUREKA_MASK_FLAG_WEIGHT_SOURCE (0x1 << 9) +#define NEUREKA_MASK_FLAG_MODE (0x3 << 5) +#define NEUREKA_MASK_FLAG_WEIGHT_BITS (0x7 << 0) + +/* PADDING */ + +#define NEUREKA_DONT_PAD (0) +#define NEUREKA_MAX_PAD (2) + +/* NORM */ +#define NEUREKA_NORM_MAX_LEN (32) + +#endif // __NEUREKA_DEFS_H__ diff --git a/neureka/app/inc/layer_util.h b/neureka/app/inc/layer_util.h new file mode 100644 index 0000000..e44ede9 --- /dev/null +++ b/neureka/app/inc/layer_util.h @@ -0,0 +1,40 @@ +/* + * Luka Macan + * + * Copyright 2023 ETH Zurich and University of Bologna + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * SPDX-License-Identifier: Apache-2.0 + */ + +#ifndef __LAYER_UTIL_H__ +#define __LAYER_UTIL_H__ + +#include "layer_conf.h" +#include + +static void layer_info() { + printf("Layer info:\n" + " - input: (%dx%dx%d)\n" + " - output: (%dx%dx%d)\n" + " - weight: (%dx%dx%dx%d)\n" + " - stride: (%dx%d)\n" + " - padding: (%dx%dx%dx%d)\n", + INPUT_HEIGHT, INPUT_WIDTH, INPUT_CHANNEL, OUTPUT_HEIGHT, OUTPUT_WIDTH, + OUTPUT_CHANNEL, WEIGHT_CHANNEL_OUT, WEIGHT_HEIGHT, WEIGHT_WIDTH, + WEIGHT_CHANNEL_IN, STRIDE_HEIGHT, STRIDE_WIDTH, PADDING_TOP, + PADDING_BOTTOM, PADDING_LEFT, PADDING_RIGHT); +} + +#endif // __LAYER_UTIL_H__ diff --git a/neureka/app/inc/nnx_layer.h b/neureka/app/inc/nnx_layer.h new file mode 100644 index 0000000..cbaf4b9 --- /dev/null +++ b/neureka/app/inc/nnx_layer.h @@ -0,0 +1,26 @@ +/* + * Luka Macan + * + * Copyright 2023 ETH Zurich and University of Bologna + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * SPDX-License-Identifier: Apache-2.0 + */ + +#ifndef __NNX_LAYER_H__ +#define __NNX_LAYER_H__ + +void execute_nnx_layer(void *unused_args); + +#endif // __NNX_LAYER_H__ diff --git a/neureka/app/inc/pmsis.h b/neureka/app/inc/pmsis.h new file mode 100644 index 0000000..1f16f1b --- /dev/null +++ b/neureka/app/inc/pmsis.h @@ -0,0 +1,5 @@ +// fake pmsis.h +#include +#define PI_L1 __attribute__((section(".data_l1"))) +#define PI_L2 __attribute__((section(".data_l1"))) +// #include "tinyprintf.h" \ No newline at end of file diff --git a/neureka/app/inc/tinyprintf.h b/neureka/app/inc/tinyprintf.h new file mode 100644 index 0000000..0af0609 --- /dev/null +++ b/neureka/app/inc/tinyprintf.h @@ -0,0 +1,248 @@ +/* + +Copyright (c) 2004,2012 Kustaa Nyholm / SpareTimeLabs + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + * Neither the name of Kustaa Nyholm or SpareTimeLabs nor the + names of its contributors may be used to endorse or promote products + derived from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL COPYRIGHT HOLDER BE LIABLE FOR ANY +DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +This modified tinyprintf is distributed under the conditions of the BSD-new license +as explicitly allowed: + -> https://github.com/cjlano/tinyprintf commit 2ee3012 + +They provide a simple and small (+400 loc) printf functionality to +be used in embedded systems. + +I've found them so useful in debugging that I do not bother with a +debugger at all. + +They are distributed in source form, so to use them, just compile them +into your project. + +Two printf variants are provided: printf and the 'sprintf' family of +functions ('snprintf', 'sprintf', 'vsnprintf', 'vsprintf'). + +The formats supported by this implementation are: +'c' 'd' 'i' 'o' 'p' 'u' 's' 'x' 'X'. + +Zero padding and field width are also supported. + +If the library is compiled with 'PRINTF_SUPPORT_LONG' defined, then +the long specifier is also supported. Note that this will pull in some +long math routines (pun intended!) and thus make your executable +noticeably longer. Likewise with 'PRINTF_LONG_LONG_SUPPORT' for the +long long specifier, and with 'PRINTF_SIZE_T_SUPPORT' for the size_t +specifier. + +The memory footprint of course depends on the target CPU, compiler and +compiler options, but a rough guesstimate (based on a H8S target) is about +1.4 kB for code and some twenty 'int's and 'char's, say 60 bytes of stack space. +Not too bad. Your mileage may vary. By hacking the source code you can +get rid of some hundred bytes, I'm sure, but personally I feel the balance of +functionality and flexibility versus code size is close to optimal for +many embedded systems. + +To use the printf, you need to supply your own character output function, +something like : + +void putc ( void* p, char c) +{ + while (!SERIAL_PORT_EMPTY) ; + SERIAL_PORT_TX_REGISTER = c; +} + +Before you can call printf, you need to initialize it to use your +character output function with something like: + +init_printf(NULL,putc); + +Notice the 'NULL' in 'init_printf' and the parameter 'void* p' in 'putc', +the NULL (or any pointer) you pass into the 'init_printf' will eventually be +passed to your 'putc' routine. This allows you to pass some storage space (or +anything really) to the character output function, if necessary. +This is not often needed but it was implemented like that because it made +implementing the sprintf function so neat (look at the source code). + +The code is re-entrant, except for the 'init_printf' function, so it is safe +to call it from interrupts too, although this may result in mixed output. +If you rely on re-entrancy, take care that your 'putc' function is re-entrant! + +The printf and sprintf functions are actually macros that translate to +'tfp_printf' and 'tfp_sprintf' when 'TINYPRINTF_OVERRIDE_LIBC' is set +(default). Setting it to 0 makes it possible to use them along with +'stdio.h' printf's in a single source file. When +'TINYPRINTF_OVERRIDE_LIBC' is set, please note that printf/sprintf are +not function-like macros, so if you have variables or struct members +with these names, things will explode in your face. Without variadic +macros this is the best we can do to wrap these function. If it is a +problem, just give up the macros and use the functions directly, or +rename them. + +It is also possible to avoid defining tfp_printf and/or tfp_sprintf by +clearing 'TINYPRINTF_DEFINE_TFP_PRINTF' and/or +'TINYPRINTF_DEFINE_TFP_SPRINTF' to 0. This allows for example to +export only tfp_format, which is at the core of all the other +functions. + +For further details see source code. + +regs Kusti, 23.10.2004 +*/ + +#ifndef __TFP_PRINTF__ +#define __TFP_PRINTF__ + +#include + +void putf(char *null, char c); + +/* Global configuration */ + +/* Set this to 0 if you do not want to provide tfp_printf */ +#ifndef TINYPRINTF_DEFINE_TFP_PRINTF +# define TINYPRINTF_DEFINE_TFP_PRINTF 1 +#endif + +/* Set this to 0 if you do not want to provide + tfp_sprintf/snprintf/vsprintf/vsnprintf */ +#ifndef TINYPRINTF_DEFINE_TFP_SPRINTF +# define TINYPRINTF_DEFINE_TFP_SPRINTF 1 +#endif + +/* Set this to 0 if you do not want tfp_printf and + tfp_{vsn,sn,vs,s}printf to be also available as + printf/{vsn,sn,vs,s}printf */ +#ifndef TINYPRINTF_OVERRIDE_LIBC +# define TINYPRINTF_OVERRIDE_LIBC 1 +#endif + +/* Optional external types dependencies */ + +#if TINYPRINTF_DEFINE_TFP_SPRINTF +# include /* size_t */ +#endif + +/* Declarations */ + +#ifdef __GNUC__ +# define _TFP_SPECIFY_PRINTF_FMT(fmt_idx,arg1_idx) \ + __attribute__((format (printf, fmt_idx, arg1_idx))) +#else +# define _TFP_SPECIFY_PRINTF_FMT(fmt_idx,arg1_idx) +#endif + +#ifdef __cplusplus +extern "C" { +#endif + +typedef void (*putcf) (void *, char); + +/* + 'tfp_format' really is the central function for all tinyprintf. For + each output character after formatting, the 'putf' callback is + called with 2 args: + - an arbitrary void* 'putp' param defined by the user and + passed unmodified from 'tfp_format', + - the character. + The 'tfp_printf' and 'tfp_sprintf' functions simply define their own + callback and pass to it the right 'putp' it is expecting. +*/ +void tfp_format(void *putp, putcf putf, const char *fmt, va_list va); + +#if TINYPRINTF_DEFINE_TFP_SPRINTF +int tfp_vsnprintf(char *str, size_t size, const char *fmt, va_list ap); +int tfp_snprintf(char *str, size_t size, const char *fmt, ...) \ + _TFP_SPECIFY_PRINTF_FMT(3, 4); +int tfp_vsprintf(char *str, const char *fmt, va_list ap); +int tfp_sprintf(char *str, const char *fmt, ...) \ + _TFP_SPECIFY_PRINTF_FMT(2, 3); +# if TINYPRINTF_OVERRIDE_LIBC +# define vsnprintf tfp_vsnprintf +# define snprintf tfp_snprintf +# define vsprintf tfp_vsprintf +# define sprintf tfp_sprintf +# endif +#endif + +#if TINYPRINTF_DEFINE_TFP_PRINTF +void init_printf(void *putp, putcf putf); +void tfp_printf(char *fmt, ...) _TFP_SPECIFY_PRINTF_FMT(1, 2); +# if TINYPRINTF_OVERRIDE_LIBC +# ifndef DISABLE_PRINTF +# define printf tfp_printf +# else +# define printf(...) +# endif +# endif +#endif + +#ifdef __cplusplus +} +#endif + +#endif + + + +/* + * Configuration + */ + +/* Enable long int support */ +// #define PRINTF_LONG_SUPPORT + +/* Enable long long int support (implies long int support) */ +// #define PRINTF_LONG_LONG_SUPPORT + +/* Enable %z (size_t) support */ +// #define PRINTF_SIZE_T_SUPPORT + +/* + * Configuration adjustments + */ +#ifdef PRINTF_SIZE_T_SUPPORT +#include +#endif + +#ifdef PRINTF_LONG_LONG_SUPPORT +# define PRINTF_LONG_SUPPORT +#endif + +/* __SIZEOF___ defined at least by gcc */ +#ifdef __SIZEOF_POINTER__ +# define SIZEOF_POINTER __SIZEOF_POINTER__ +#endif +#ifdef __SIZEOF_LONG_LONG__ +# define SIZEOF_LONG_LONG __SIZEOF_LONG_LONG__ +#endif +#ifdef __SIZEOF_LONG__ +# define SIZEOF_LONG __SIZEOF_LONG__ +#endif +#ifdef __SIZEOF_INT__ +# define SIZEOF_INT __SIZEOF_INT__ +#endif + +#ifdef __GNUC__ +# define _TFP_GCC_NO_INLINE_ __attribute__ ((noinline)) +#else +# define _TFP_GCC_NO_INLINE_ +#endif + diff --git a/neureka/app/pulp_nnx_neureka.c b/neureka/app/pulp_nnx_neureka.c new file mode 100644 index 0000000..b814f23 --- /dev/null +++ b/neureka/app/pulp_nnx_neureka.c @@ -0,0 +1,76 @@ +/* + * Luka Macan + * + * Copyright 2023 ETH Zurich and University of Bologna + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * SPDX-License-Identifier: Apache-2.0 + */ + +#include "pulp_nnx_neureka.h" +#include "hwpe.h" +#include "neureka.h" +#include "pulp_nnx_util.h" +#include +#include +#include + +void neureka_nnx_init(neureka_dev_t *dev, neureka_bsp_conf_t *conf) { + neureka_bsp_open(conf); + hwpe_soft_clear(&dev->hwpe_dev); +} + +void neureka_nnx_term(neureka_dev_t *dev) { + hwpe_soft_clear(&dev->hwpe_dev); + neureka_bsp_close(); +} + +int neureka_nnx_dispatch_check(neureka_dev_t *dev) { + return !neureka_task_queue_full(dev); +} + +void neureka_nnx_dispatch_wait(neureka_dev_t *dev) { + while (!neureka_nnx_dispatch_check(dev)) { + neureka_bsp_event_wait_and_clear(); + } +} + +int neureka_nnx_dispatch(neureka_dev_t *dev, neureka_task_t *task) { + if (hwpe_task_queue_acquire_task(&dev->hwpe_dev, &task->id)) { + return 1; + } + hwpe_task_queue_write_task(&dev->hwpe_dev, (uint32_t *)&task->data, + (int)(sizeof(neureka_task_data_t) / 4)); + hwpe_task_queue_release_and_run(&dev->hwpe_dev); + return 0; +} + +int neureka_nnx_resolve_check(neureka_dev_t *dev, neureka_task_t *task) { +#if __PLATFORM__ == ARCHI_PLATFORM_GVSOC + // GVSOC model has a broken running_id so resolve_check + // conservativly looks if the task queue is empty. + return neureka_task_queue_empty(dev); +#else + uint8_t prev_task_id = task->id - 1; + return !(hwpe_last_task_id(&dev->hwpe_dev) == prev_task_id || + (hwpe_last_task_id(&dev->hwpe_dev) == task->id && + !neureka_task_queue_empty(dev))); +#endif +} + +void neureka_nnx_resolve_wait(neureka_dev_t *dev, neureka_task_t *task) { + while (!neureka_nnx_resolve_check(dev, task)) { + neureka_bsp_event_wait_and_clear(); + } +} diff --git a/neureka/app/pulp_nnx_neureka.h b/neureka/app/pulp_nnx_neureka.h new file mode 100644 index 0000000..80096c8 --- /dev/null +++ b/neureka/app/pulp_nnx_neureka.h @@ -0,0 +1,61 @@ +/* + * Luka Macan + * + * Copyright 2023 ETH Zurich and University of Bologna + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * SPDX-License-Identifier: Apache-2.0 + */ + +#include "neureka.h" +#include "neureka_bsp.h" +#include "neureka_task.h" +#include + +/* PULP-NNX interface */ + +void neureka_nnx_init(neureka_dev_t *dev, neureka_bsp_conf_t *conf); +void neureka_nnx_term(neureka_dev_t *dev); + +/** neureka_nnx_dispatch_check + * + * Check whether you can dispatch to the accelerator. + */ +int neureka_nnx_dispatch_check(neureka_dev_t *dev); + +/** neureka_nnx_dispatch_wait + * + * Block until you can dispatch to the accelerator. + */ +void neureka_nnx_dispatch_wait(neureka_dev_t *dev); + +/** neureka_nnx_dispatch + * + * Dispatch a task to the accelerator. + * Fails with return code 1 if the task cannot be dispatched. Otherwise returns + * 0. + */ +int neureka_nnx_dispatch(neureka_dev_t *dev, neureka_task_t *task); + +/** neureka_nnx_resolve_check + * + * Check whether the task has been resolved. + */ +int neureka_nnx_resolve_check(neureka_dev_t *dev, neureka_task_t *task); + +/** neureka_nnx_resolve_wait + * + * Block until you can resolve the task. + */ +void neureka_nnx_resolve_wait(neureka_dev_t *dev, neureka_task_t *task); diff --git a/neureka/app/src/main.c b/neureka/app/src/main.c new file mode 100644 index 0000000..818ddf7 --- /dev/null +++ b/neureka/app/src/main.c @@ -0,0 +1,56 @@ +/* + * Copyright (C) 2020-2024 ETH Zurich and University of Bologna + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/* + * Authors: Francesco Conti + * Gianna Paulin + * Renzo Andri + * Arpan Suravi Prasad + * Luka Macan + * Main Test Program for N-EUREKA + */ + +#include +#include +#include +#include + +#include "layer_util.h" +#include "nnx_layer.h" +#include "output.h" +#include "input.h" +#include "weight.h" + +int main() { + if (rt_cluster_id() != 0) + return bench_cluster_forward(0); + + int err = 0; + if(rt_core_id()==0) + { + // execute NNX layer + execute_nnx_layer(NULL); + + printf("Checking outputs"); + + // output checking + err = check_output(); + + } + synch_barrier(); + return err; + +} diff --git a/neureka/app/src/nnx_layer.c b/neureka/app/src/nnx_layer.c new file mode 100644 index 0000000..f38e830 --- /dev/null +++ b/neureka/app/src/nnx_layer.c @@ -0,0 +1,168 @@ +/* + * Luka Macan + * + * Copyright 2023 ETH Zurich and University of Bologna + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * SPDX-License-Identifier: Apache-2.0 + */ + +#include "nnx_layer.h" +#include + +#include "neureka.h" +#include "neureka_gvsoc.h" +#include "neureka_testbench_bsp.h" +#include "neureka_task.h" +#include "pulp_nnx_neureka.h" + +#define NULL 0 + +typedef neureka_norm_mode_e nnx_norm_mode_e; +typedef neureka_quant_t nnx_quant_t; +typedef neureka_quant_function_e nnx_quant_function_e; +typedef neureka_norm_t nnx_norm_t; +typedef neureka_task_t nnx_task_t; +typedef neureka_dev_t nnx_dev_t; +typedef neureka_testbench_conf_t nnx_bsp_conf_t; +typedef neureka_task_flag_e nnx_task_flag_e; + +#define nnxTaskFlagTrue neurekaTaskFlagTrue +#define nnxTaskFlagFalse neurekaTaskFlagFalse + +#define nnx_task_init neureka_task_init +#define nnx_task_set_op_to_conv neureka_task_set_op_to_conv +#define nnx_task_set_bits neureka_task_set_bits +#define nnx_task_set_norm_quant neureka_task_set_norm_quant +#define nnx_task_set_weight_offset neureka_task_set_weight_offset +#define nnx_task_set_weight_source neureka_task_set_weight_source +#define nnx_task_set_activation_prefetch neureka_task_set_activation_prefetch +#define nnx_task_set_dims neureka_task_set_dims +#define nnx_task_set_ptrs_conv neureka_task_set_ptrs_conv +#define nnx_task_set_ptrs_norm_quant neureka_task_set_ptrs_norm_quant + +#define nnx_bsp_get_dev neureka_testbench_get_dev + +#define nnx_init neureka_nnx_init +#define nnx_dispatch_wait neureka_nnx_dispatch_wait +#define nnx_dispatch neureka_nnx_dispatch +#define nnx_resolve_wait neureka_nnx_resolve_wait +#define nnx_term neureka_nnx_term + +// Generated headers +#include "bias.h" +#include "input.h" +#include "layer_conf.h" +#include "output.h" +#include "scale.h" +#include "weight.h" + +static void task_prepare(nnx_task_t *task) { + nnx_task_init(task); + nnx_task_set_op_to_conv(task, WEIGHT_HEIGHT, GROUPS > 1); + nnx_task_set_bits(task, INPUT_BITS, OUTPUT_BITS, WEIGHT_BITS); + + nnx_task_set_weight_offset(task, weightOffsetModeLayerWise, WEIGHT_OFFSET); + +#ifdef NEUREKA_WEIGHT_SOURCE_WMEM + nnx_task_set_weight_source(task, neurekaWeightSourceWmem); + nnx_task_set_activation_prefetch(task, activationPrefetchOn); +#else + neureka_task_set_weight_source(task, neurekaWeightSourceTcdm); + nnx_task_set_activation_prefetch(task, activationPrefetchOff); +#endif +#if INPUT_SIGNED == 1 + neureka_task_set_input_signed(task); +#else + neureka_task_set_input_unsigned(task); +#endif + + const uint32_t w_in_stride = INPUT_CHANNEL * INPUT_BITS / 8; + const uint32_t h_in_stride = INPUT_WIDTH * w_in_stride; + const uint32_t w_out_stride = OUTPUT_CHANNEL * OUTPUT_BITS / 8; + const uint32_t h_out_stride = OUTPUT_WIDTH * w_out_stride; + +#if STRIDE_HEIGHT == 2 && STRIDE_WIDTH == 2 + nnx_task_set_dims_stride2x2( + task, INPUT_HEIGHT, INPUT_WIDTH, INPUT_CHANNEL, h_in_stride, w_in_stride, + OUTPUT_HEIGHT, OUTPUT_WIDTH, OUTPUT_CHANNEL, h_out_stride, w_out_stride, + WEIGHT_HEIGHT, WEIGHT_WIDTH, PADDING_TOP, PADDING_BOTTOM, PADDING_LEFT, + PADDING_RIGHT); +#else + nnx_task_set_dims(task, INPUT_WIDTH, INPUT_CHANNEL, h_in_stride, w_in_stride, + OUTPUT_HEIGHT, OUTPUT_WIDTH, OUTPUT_CHANNEL, h_out_stride, + w_out_stride, PADDING_TOP, PADDING_BOTTOM, PADDING_LEFT, + PADDING_RIGHT); +#endif + + nnx_task_set_ptrs_conv(task, (uint32_t)input, INPUT_WIDTH, w_in_stride, + PADDING_TOP, PADDING_LEFT, (uint32_t)output, + (uint32_t)weight); +#if HAS_NORM_QUANT == 1 +#if SCALE_BITS == 8 + const nnx_norm_mode_e normMode = normMode8Bit; +#elif SCALE_BITS == 32 + const nnx_norm_mode_e normMode = normMode32Bit; +#endif + + const nnx_task_flag_e flag_bias = + HAS_BIAS ? nnxTaskFlagTrue : nnxTaskFlagFalse; + const uint32_t bias_ptr = (uint32_t)(HAS_BIAS ? bias : NULL); + + nnx_quant_function_e quant_function = + HAS_RELU ? quantFunctionRelu : quantFunctionIdentity; + + nnx_task_set_norm_quant(task, + (nnx_quant_t){.shift_amount = OUTSHIFT, + .function = quant_function, + .flag_rounding = nnxTaskFlagFalse}, + (nnx_norm_t){.mode = normMode, + .flag_bias = flag_bias, + .flag_shift = nnxTaskFlagFalse}); + + nnx_task_set_ptrs_norm_quant(task, (uint32_t)scale, NULL, bias_ptr); +#endif // HAS_NORM_QUANT +} + +static void task_execute(nnx_task_t *task) { + nnx_dev_t *dev = nnx_bsp_get_dev(); + + nnx_bsp_conf_t conf = {.max_stall = 8}; + nnx_init(dev, &conf); + + nnx_dispatch_wait(dev); + + // printf("CFG:\n"); + // for (int i=0; idata)[i]); + // } +#if STRIDE_HEIGHT == 2 && STRIDE_WIDTH == 2 + nnx_dispatch_stride2x2(dev, task, INPUT_WIDTH, INPUT_CHANNEL, OUTPUT_HEIGHT, + OUTPUT_WIDTH, OUTPUT_CHANNEL, WEIGHT_HEIGHT, + WEIGHT_WIDTH); +#else + nnx_dispatch(dev, task); +#endif + + nnx_resolve_wait(dev, task); + + nnx_term(dev); + +} + +void execute_nnx_layer(void *args) { + nnx_task_t task; + task_prepare(&task); + task_execute(&task); +} diff --git a/neureka/app/util/hwpe.c b/neureka/app/util/hwpe.c new file mode 100644 index 0000000..0430081 --- /dev/null +++ b/neureka/app/util/hwpe.c @@ -0,0 +1,85 @@ +/* + * Luka Macan + * + * Copyright 2023 ETH Zurich and University of Bologna + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * SPDX-License-Identifier: Apache-2.0 + */ + +#include "hwpe.h" +#include + +#define HWPE_TRIGGER 0 +#define HWPE_ACQUIRE 1 +#define HWPE_FINISHED 2 +#define HWPE_STATUS 3 +#define HWPE_RUNNING_JOB 4 +#define HWPE_SOFT_CLEAR 5 +#define HWPE_SWSYNC 6 +#define HWPE_TASK_REG_OFFSET 8 + +inline void hwpe_reg_write(hwpe_dev_t *dev, int reg, uint32_t value) { + dev->base_addr[reg] = value; +} + +inline uint32_t hwpe_reg_read(hwpe_dev_t *dev, int reg) { + return dev->base_addr[reg]; +} + +inline void hwpe_task_reg_write(hwpe_dev_t *dev, int reg, uint32_t value) { + hwpe_reg_write(dev, HWPE_TASK_REG_OFFSET + reg, value); +} + +inline uint32_t hwpe_task_reg_read(hwpe_dev_t *dev, int reg) { + return hwpe_reg_read(dev, HWPE_TASK_REG_OFFSET + reg); +} + +void hwpe_soft_clear(hwpe_dev_t *dev) { + hwpe_reg_write(dev, HWPE_SOFT_CLEAR, 0); + for (volatile int i = 0; i < 10; i++) + ; +} + +uint32_t hwpe_task_queue_status(hwpe_dev_t *dev) { + return hwpe_reg_read(dev, HWPE_STATUS); +} + +int hwpe_task_queue_acquire_task(hwpe_dev_t *dev, uint8_t *id) { + uint32_t read_value = (int32_t)hwpe_reg_read(dev, HWPE_ACQUIRE); + if (read_value >= 256) { + return 1; + } else { + *id = (uint8_t)read_value; + return 0; + } +} + +void hwpe_task_queue_write_task(hwpe_dev_t *dev, uint32_t *data, int len) { + for (int i = 0; i < len; i++) { + hwpe_task_reg_write(dev, i, data[i]); + } +} + +void hwpe_task_queue_release_and_run(hwpe_dev_t *dev) { + hwpe_reg_write(dev, HWPE_TRIGGER, 0); +} + +void hwpe_task_queue_release(hwpe_dev_t *dev) { + hwpe_reg_write(dev, HWPE_TRIGGER, 1); +} + +uint8_t hwpe_last_task_id(hwpe_dev_t *dev) { + return (uint8_t)hwpe_reg_read(dev, HWPE_RUNNING_JOB); +} diff --git a/neureka/app/util/hwpe.h b/neureka/app/util/hwpe.h new file mode 100644 index 0000000..52bf912 --- /dev/null +++ b/neureka/app/util/hwpe.h @@ -0,0 +1,43 @@ +/* + * Luka Macan + * + * Copyright 2023 ETH Zurich and University of Bologna + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * SPDX-License-Identifier: Apache-2.0 + */ + +#ifndef __HWPE_H__ +#define __HWPE_H__ + +#include + +/* HWPE device */ +typedef struct hwpe_dev_t { + volatile uint32_t *base_addr; +} hwpe_dev_t; + +void hwpe_reg_write(hwpe_dev_t *dev, int reg, uint32_t value); +uint32_t hwpe_reg_read(hwpe_dev_t *dev, int reg); +void hwpe_task_reg_write(hwpe_dev_t *dev, int reg, uint32_t value); +uint32_t hwpe_task_reg_read(hwpe_dev_t *dev, int reg); +void hwpe_soft_clear(hwpe_dev_t *dev); +uint32_t hwpe_task_queue_status(hwpe_dev_t *dev); +int hwpe_task_queue_acquire_task(hwpe_dev_t *dev, uint8_t *id); +void hwpe_task_queue_write_task(hwpe_dev_t *dev, uint32_t *data, int len); +void hwpe_task_queue_release_and_run(hwpe_dev_t *dev); +void hwpe_task_queue_release(hwpe_dev_t *dev); +uint8_t hwpe_last_task_id(hwpe_dev_t *dev); + +#endif // !__HWPE_H__ diff --git a/neureka/app/util/pulp_nnx_util.c b/neureka/app/util/pulp_nnx_util.c new file mode 100644 index 0000000..0107fc1 --- /dev/null +++ b/neureka/app/util/pulp_nnx_util.c @@ -0,0 +1,35 @@ +/* + * Luka Macan + * + * Copyright 2023 ETH Zurich and University of Bologna + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * SPDX-License-Identifier: Apache-2.0 + */ + +#include "pulp_nnx_util.h" + +inline int nnx_calculate_number_of_tiles(const int dim_size, + const int tile_size) { + return ((dim_size - 1) / tile_size) + 1; +} + +inline int nnx_calculate_last_tile_size(const int dim_size, + const int tile_size) { + return ((dim_size - 1) % tile_size) + 1; +} + +inline uint32_t nnx_concat_half(const uint16_t high, const uint16_t low) { + return ((uint32_t)high << 16) | low; +} diff --git a/neureka/app/util/pulp_nnx_util.h b/neureka/app/util/pulp_nnx_util.h new file mode 100644 index 0000000..d167f6d --- /dev/null +++ b/neureka/app/util/pulp_nnx_util.h @@ -0,0 +1,51 @@ +/* + * Luka Macan + * + * Copyright 2023 ETH Zurich and University of Bologna + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * SPDX-License-Identifier: Apache-2.0 + */ + +#ifndef __NNX_UTIL_H__ +#define __NNX_UTIL_H__ + +#include + +/** + * nnx_calculate_number_of_iterations + * + * Calculates the number of iterations to go through a dimension. + * It does it by dividing the dimension with the tile size and doing a ceiling + * the result. + */ +int nnx_calculate_number_of_tiles(const int dim_size, const int tile_size); + +/** + * nnx_calculate_last_tile_size + * + * Calculates the size of the last executed tile by calculating the remainder of + * the dim_size and the tile_size. In case the remainder is 0, it returns the + * full tile_size. + */ +int nnx_calculate_last_tile_size(const int dim_size, const int tile_size); + +/** + * concat_half + * + * Concatenate 2 16-bit numbers into a 32-bit number. + */ +uint32_t nnx_concat_half(const uint16_t high, const uint16_t low); + +#endif // __NNX_UTIL_H__ diff --git a/neureka/dense/Makefile b/neureka/dense/Makefile new file mode 100644 index 0000000..edb77cb --- /dev/null +++ b/neureka/dense/Makefile @@ -0,0 +1,3 @@ +include ../app/Makefile + +STIM_DIR := ../dense/ \ No newline at end of file diff --git a/neureka/dense/inc/bias.h b/neureka/dense/inc/bias.h new file mode 100644 index 0000000..0cc75d8 --- /dev/null +++ b/neureka/dense/inc/bias.h @@ -0,0 +1,9 @@ +#ifndef __BIAS_H__ +#define __BIAS_H__ + +#include + +#define BIAS_SIZE (35) +extern int32_t bias[BIAS_SIZE]; + +#endif // __BIAS_H__ diff --git a/neureka/dense/inc/input.h b/neureka/dense/inc/input.h new file mode 100644 index 0000000..ddb3845 --- /dev/null +++ b/neureka/dense/inc/input.h @@ -0,0 +1,9 @@ +#ifndef __INPUT_H__ +#define __INPUT_H__ + +#include + +#define INPUT_SIZE (1407) +extern uint8_t input[INPUT_SIZE]; + +#endif // __INPUT_H__ diff --git a/neureka/dense/inc/layer_conf.h b/neureka/dense/inc/layer_conf.h new file mode 100644 index 0000000..d005132 --- /dev/null +++ b/neureka/dense/inc/layer_conf.h @@ -0,0 +1,42 @@ +#ifndef __LAYER_CONF_H__ +#define __LAYER_CONF_H__ + +#define TEST_NAME "test" +#define INPUT_HEIGHT (7) +#define INPUT_WIDTH (3) +#define INPUT_CHANNEL (67) +#define INPUT_SIGNED (0) +#define INPUT_BITS (8) + +#define OUTPUT_HEIGHT (5) +#define OUTPUT_WIDTH (1) +#define OUTPUT_CHANNEL (35) +#define OUTPUT_BITS (8) + +#define WEIGHT_HEIGHT (3) +#define WEIGHT_WIDTH (3) +#define WEIGHT_CHANNEL_IN (67) +#define WEIGHT_CHANNEL_OUT (35) +#define WEIGHT_BITS (8) +#define WEIGHT_OFFSET (-128) + +#define SCALE_BITS (8) + +#define BIAS_BITS (32) + +#define PADDING_TOP (0) +#define PADDING_BOTTOM (0) +#define PADDING_LEFT (0) +#define PADDING_RIGHT (0) +#define PADDING_VALUE (0) + +#define STRIDE_HEIGHT (1) +#define STRIDE_WIDTH (1) + +#define GROUPS (1) +#define OUTSHIFT (12) +#define HAS_NORM_QUANT (1) +#define HAS_BIAS (1) +#define HAS_RELU (1) + +#endif // __LAYER_CONF_H__ diff --git a/neureka/dense/inc/output.h b/neureka/dense/inc/output.h new file mode 100644 index 0000000..cb7abf6 --- /dev/null +++ b/neureka/dense/inc/output.h @@ -0,0 +1,14 @@ +#ifndef __OUTPUT_H__ +#define __OUTPUT_H__ + +#include + +#define OUTPUT_SIZE (175) +extern uint8_t output[OUTPUT_SIZE]; + +#define GOLDEN_OUTPUT_SIZE (175) +extern uint8_t golden_output[GOLDEN_OUTPUT_SIZE]; + +int check_output(); + +#endif // __OUTPUT_H__ diff --git a/neureka/dense/inc/scale.h b/neureka/dense/inc/scale.h new file mode 100644 index 0000000..3c546a5 --- /dev/null +++ b/neureka/dense/inc/scale.h @@ -0,0 +1,9 @@ +#ifndef __SCALE_H__ +#define __SCALE_H__ + +#include + +#define SCALE_SIZE (35) +extern uint8_t scale[SCALE_SIZE]; + +#endif // __SCALE_H__ diff --git a/neureka/dense/inc/weight.h b/neureka/dense/inc/weight.h new file mode 100644 index 0000000..635a7b4 --- /dev/null +++ b/neureka/dense/inc/weight.h @@ -0,0 +1,9 @@ +#ifndef __WEIGHT_H__ +#define __WEIGHT_H__ + +#include + +#define WEIGHT_SIZE (30240) +extern uint8_t weight[WEIGHT_SIZE]; + +#endif // __WEIGHT_H__ diff --git a/neureka/dense/src/bias.c b/neureka/dense/src/bias.c new file mode 100644 index 0000000..f6deb22 --- /dev/null +++ b/neureka/dense/src/bias.c @@ -0,0 +1,10 @@ +#include "bias.h" + +#define BIAS_SIZE (35) +PI_L1 int32_t bias[BIAS_SIZE] = { + 0x34f1, 0x26e29, -0x13522, -0x16519, -0x29e74, -0x26137, -0xa2d1, 0x224b4, -0x2b112, -0x5691, + 0x288e, -0x2eec7, 0x31b00, -0x13b14, 0x19292, 0x10f19, 0x2e986, 0x3492f, 0x6d7c, 0x19cbd, + 0x11dd9, -0xecc1, -0x9d88, 0xa5fb, -0x28ff8, -0x24d17, -0x1c933, 0x32120, -0x2ad82, -0x2f262, + -0x14bbf, -0x155b3, 0x18b39, 0x1e105, 0x3041c +}; + diff --git a/neureka/dense/src/input.c b/neureka/dense/src/input.c new file mode 100644 index 0000000..7d83843 --- /dev/null +++ b/neureka/dense/src/input.c @@ -0,0 +1,147 @@ +#include "input.h" + +#define INPUT_SIZE (1407) +PI_L1 uint8_t input[INPUT_SIZE] = { + 0xc2, 0x2c, 0xe2, 0x81, 0x81, 0x2d, 0xa9, 0xb3, 0x4c, 0x8a, + 0x32, 0x75, 0x40, 0xc1, 0xed, 0x7a, 0x9a, 0x7d, 0x5e, 0xdf, + 0xc8, 0x44, 0x83, 0xe8, 0x1e, 0x1b, 0xd2, 0x84, 0x39, 0xc5, + 0x2c, 0x27, 0x9b, 0x78, 0xb3, 0x70, 0x5a, 0x5b, 0xb5, 0x95, + 0x3c, 0x8f, 0xe4, 0x32, 0xfa, 0x12, 0xb7, 0xc7, 0x48, 0x91, + 0x02, 0x33, 0xd0, 0xbe, 0x57, 0xae, 0x61, 0xd0, 0x8a, 0x5d, + 0xd1, 0x72, 0x25, 0x0a, 0x81, 0x35, 0xd7, 0x36, 0xec, 0x04, + 0x37, 0xda, 0x99, 0xf4, 0x28, 0x46, 0xc8, 0xdd, 0x25, 0xae, + 0x37, 0x78, 0xf2, 0x15, 0x48, 0x57, 0xc2, 0x5b, 0xe1, 0x63, + 0x07, 0xab, 0xac, 0x7c, 0x2a, 0xe0, 0xbc, 0x75, 0xa8, 0xf0, + 0x48, 0x74, 0xe1, 0xad, 0xce, 0x17, 0x21, 0xf1, 0x72, 0x3d, + 0x08, 0x00, 0x44, 0x04, 0x46, 0xc7, 0x35, 0x39, 0x5f, 0xf9, + 0xdc, 0xad, 0x25, 0x23, 0xd5, 0x0f, 0xf0, 0x5c, 0x23, 0x08, + 0x25, 0x82, 0xd9, 0x76, 0xe9, 0xd1, 0x10, 0x9b, 0x13, 0x38, + 0x67, 0x8b, 0x96, 0x80, 0x7f, 0xe8, 0x58, 0xbf, 0x9e, 0xf3, + 0x34, 0x20, 0x06, 0xb6, 0xcd, 0x80, 0x3f, 0xf5, 0x2b, 0x95, + 0x90, 0x66, 0xa7, 0xc3, 0xf0, 0x01, 0x13, 0x11, 0x09, 0xbd, + 0x94, 0xfe, 0x52, 0x98, 0xda, 0x19, 0x19, 0x1a, 0x47, 0xca, + 0x5f, 0x7b, 0x64, 0xd8, 0x15, 0xb1, 0xcd, 0x3a, 0xe0, 0x29, + 0x61, 0x93, 0xa6, 0xb9, 0x99, 0x3b, 0x66, 0x46, 0x37, 0x4f, + 0x64, 0x87, 0xb3, 0xe3, 0x1c, 0xdf, 0x20, 0xc4, 0x48, 0xca, + 0x9c, 0xa8, 0x48, 0xd0, 0x52, 0x06, 0x3d, 0x87, 0x29, 0x23, + 0x99, 0x68, 0xed, 0x0a, 0x5c, 0xee, 0x5a, 0xec, 0xd6, 0x6e, + 0x65, 0x75, 0xa7, 0x0f, 0x17, 0x4b, 0xa0, 0xcf, 0xc4, 0xdc, + 0x28, 0xc2, 0x69, 0x4a, 0x61, 0x24, 0x55, 0xa2, 0x0c, 0xcd, + 0x6c, 0x79, 0xf8, 0xa1, 0xc9, 0x39, 0xc0, 0xe2, 0xc8, 0x00, + 0xe5, 0xbe, 0xf0, 0x81, 0x2c, 0xc4, 0xa9, 0x0c, 0xdf, 0xce, + 0xee, 0xe8, 0xb8, 0x62, 0x49, 0x07, 0xaa, 0x3c, 0xed, 0x30, + 0xd9, 0x77, 0x10, 0xd7, 0x32, 0x5e, 0x3d, 0xef, 0x27, 0x13, + 0x50, 0xb5, 0xb5, 0x21, 0x76, 0x14, 0x8f, 0x77, 0x7d, 0xb1, + 0xf8, 0xc3, 0x45, 0xfd, 0x35, 0x59, 0xa4, 0xca, 0xca, 0xbd, + 0x8d, 0xea, 0x83, 0x78, 0xa2, 0x6b, 0x11, 0xef, 0xae, 0x9d, + 0x1f, 0x9d, 0xcc, 0x98, 0x89, 0x22, 0x8b, 0x7d, 0xe8, 0xa7, + 0x61, 0x9e, 0x0c, 0xe3, 0x7e, 0xcc, 0x6d, 0x19, 0xbc, 0x71, + 0x8c, 0x01, 0x2a, 0x03, 0xa7, 0x81, 0x99, 0x12, 0x93, 0xc7, + 0x18, 0x3d, 0x66, 0x37, 0x98, 0x08, 0xf2, 0xb6, 0x0b, 0xa2, + 0x89, 0x65, 0x34, 0x07, 0x6e, 0x09, 0x84, 0xfe, 0x73, 0xf8, + 0x96, 0xbd, 0x09, 0x5c, 0x47, 0x1e, 0x0e, 0xa9, 0x58, 0xe7, + 0x5d, 0xc1, 0xdb, 0xe8, 0x67, 0x40, 0x21, 0x2b, 0x6a, 0x00, + 0x49, 0x57, 0xd1, 0x67, 0x18, 0xfa, 0x79, 0x87, 0xd1, 0x45, + 0x5a, 0xbb, 0x43, 0x3b, 0x2f, 0xd9, 0xbe, 0x8b, 0x61, 0x1f, + 0xc9, 0xa9, 0xe9, 0x10, 0xcb, 0x5b, 0x24, 0x82, 0x30, 0x5a, + 0x77, 0xe4, 0x2f, 0x40, 0x67, 0x55, 0xd1, 0x84, 0x29, 0x91, + 0x6f, 0x4b, 0x21, 0x94, 0xaa, 0x1f, 0x50, 0x1c, 0xc0, 0xb9, + 0x19, 0x0a, 0xd2, 0xe3, 0x7f, 0x91, 0x4d, 0x26, 0x93, 0x3b, + 0x01, 0xfd, 0x69, 0xba, 0x5d, 0xd0, 0x2b, 0x53, 0x6e, 0xd6, + 0x0f, 0x95, 0xde, 0x25, 0xbb, 0x3a, 0x6b, 0x36, 0x50, 0xa3, + 0xf9, 0x3d, 0x4d, 0xb2, 0x59, 0x49, 0xd1, 0xf3, 0x5c, 0x4e, + 0xd4, 0xb9, 0x6d, 0x1a, 0x72, 0x5e, 0x42, 0x92, 0x5b, 0xc8, + 0xdc, 0x89, 0x28, 0xe2, 0xae, 0xee, 0x61, 0xe5, 0x79, 0x3e, + 0x10, 0x7c, 0x62, 0x2b, 0x9b, 0xf6, 0x0c, 0x6e, 0x61, 0xc1, + 0xf1, 0x34, 0x77, 0x52, 0x0f, 0xa2, 0xce, 0x21, 0x27, 0x62, + 0xc6, 0xb3, 0xc1, 0x74, 0x43, 0xeb, 0xcb, 0x74, 0x82, 0x91, + 0xf9, 0x38, 0x81, 0x76, 0x91, 0x50, 0x8e, 0x96, 0x73, 0x14, + 0x61, 0x62, 0x95, 0x6d, 0x01, 0x16, 0x24, 0xb2, 0x66, 0x30, + 0x0e, 0x33, 0x47, 0x37, 0xa4, 0xc8, 0x0f, 0xc7, 0x1d, 0xed, + 0xc4, 0x01, 0x54, 0xa2, 0xbb, 0xfe, 0x15, 0x0c, 0x0d, 0x64, + 0xd5, 0x09, 0x59, 0xf4, 0x3d, 0x46, 0xfb, 0x0c, 0xc6, 0x6d, + 0x46, 0x2e, 0x84, 0x28, 0x4a, 0xed, 0x33, 0xad, 0xfd, 0x9b, + 0xfd, 0x99, 0xd8, 0x17, 0x89, 0xe0, 0x42, 0x71, 0x39, 0xba, + 0xa1, 0xfe, 0x23, 0xf3, 0x88, 0x95, 0xc3, 0x3a, 0xb8, 0x5b, + 0x0b, 0x5c, 0x0c, 0x23, 0x64, 0x4b, 0xe9, 0x0d, 0x0f, 0x33, + 0xd2, 0x20, 0x0d, 0x1f, 0x7a, 0x39, 0x2d, 0x8f, 0xc5, 0xd1, + 0x48, 0x85, 0xba, 0x06, 0x4c, 0xbe, 0xd4, 0xfb, 0x8d, 0x6a, + 0xd3, 0xe5, 0x3b, 0xeb, 0xa0, 0xfa, 0x1b, 0x30, 0xd3, 0x08, + 0x26, 0x2e, 0x0b, 0x11, 0x43, 0x46, 0xba, 0x8d, 0x4d, 0xf2, + 0x6e, 0xc0, 0x99, 0x63, 0xc8, 0x54, 0x0f, 0xbe, 0xcd, 0xd0, + 0x65, 0xc0, 0xad, 0x19, 0xcd, 0xdb, 0x9b, 0x29, 0x3a, 0xef, + 0xc6, 0x0a, 0x0d, 0xd1, 0xe7, 0x0a, 0xbe, 0x6d, 0xb9, 0x46, + 0x76, 0xdc, 0x51, 0x63, 0xbf, 0x08, 0x41, 0x47, 0xbc, 0x30, + 0x50, 0x00, 0xf8, 0xc6, 0x92, 0x30, 0xec, 0xf0, 0x31, 0xa2, + 0x4e, 0xac, 0xc8, 0x63, 0x14, 0x05, 0x62, 0x22, 0x5e, 0x29, + 0x6b, 0x5e, 0x73, 0xdb, 0x7e, 0x5a, 0xf8, 0x9f, 0xd6, 0xfc, + 0x05, 0x50, 0x14, 0xa9, 0xf3, 0x66, 0xe5, 0x92, 0xad, 0x1f, + 0xe4, 0x65, 0x8b, 0x3b, 0xf5, 0x46, 0x13, 0x71, 0x19, 0x2a, + 0xc2, 0xb4, 0x51, 0xb8, 0xd7, 0x99, 0x23, 0xe5, 0x2b, 0xb2, + 0xfc, 0xb9, 0x1e, 0xd9, 0x5a, 0x3c, 0x7d, 0x4d, 0x33, 0x61, + 0x2a, 0xdf, 0x1a, 0xb5, 0x1f, 0x6a, 0x82, 0x9b, 0xcc, 0xe0, + 0x90, 0x6a, 0x6d, 0x41, 0x11, 0xe7, 0x5c, 0xf1, 0x09, 0x3d, + 0x04, 0xe0, 0x61, 0x64, 0xba, 0x01, 0x89, 0xa4, 0xee, 0x49, + 0x6f, 0x16, 0x8d, 0x72, 0x51, 0x87, 0x1a, 0x56, 0x88, 0x5a, + 0x3c, 0x8f, 0xc6, 0xe9, 0xc8, 0xb2, 0xf4, 0x3b, 0x56, 0x19, + 0x8c, 0x44, 0x04, 0xe4, 0xa6, 0xb2, 0x05, 0xdd, 0x2b, 0xc0, + 0x26, 0x92, 0x6a, 0xe0, 0xe9, 0x43, 0xb4, 0xd6, 0x31, 0x03, + 0xfc, 0xd8, 0x60, 0xd8, 0xbe, 0x5d, 0x09, 0x5b, 0xea, 0x2e, + 0x3d, 0x19, 0x6a, 0x0b, 0xdb, 0xfc, 0x1a, 0x4c, 0xe7, 0xc4, + 0xe0, 0x3a, 0xed, 0xa3, 0xf3, 0x05, 0x29, 0x59, 0xf7, 0x49, + 0x45, 0x09, 0x82, 0xb9, 0x54, 0x64, 0x61, 0x5e, 0x73, 0x03, + 0xa5, 0xe1, 0x5a, 0x7f, 0x27, 0x3f, 0x9c, 0xf6, 0x11, 0x38, + 0xa3, 0x09, 0xc1, 0x2e, 0x2b, 0xb4, 0xed, 0x5a, 0xc9, 0x4b, + 0x9b, 0x4b, 0x9a, 0xfa, 0x73, 0xe5, 0xa1, 0xc2, 0x9c, 0xfb, + 0x7f, 0x15, 0x54, 0xc0, 0xfe, 0x13, 0xa6, 0x1d, 0x0a, 0xed, + 0xb2, 0x79, 0xcb, 0xcc, 0x04, 0xb8, 0x05, 0x99, 0x62, 0x98, + 0x43, 0xe8, 0x7d, 0xd0, 0xd1, 0xb1, 0xc1, 0x81, 0xb2, 0xe1, + 0x17, 0x2e, 0xd4, 0x54, 0x90, 0x65, 0xf9, 0x5b, 0xc4, 0xc8, + 0xee, 0x9a, 0x14, 0x0a, 0x72, 0x65, 0xa5, 0x3c, 0xc5, 0x2d, + 0xd5, 0xc1, 0x7d, 0x3f, 0x48, 0xd5, 0x41, 0xe6, 0x1e, 0x55, + 0x53, 0xa6, 0x7e, 0x3d, 0xd0, 0xe5, 0xf9, 0xb2, 0x55, 0x2b, + 0x21, 0xad, 0xac, 0x18, 0xdf, 0x7a, 0x3a, 0xc4, 0x5e, 0x62, + 0x94, 0x0b, 0x0d, 0xfd, 0x33, 0x0b, 0x59, 0x53, 0xaa, 0xbd, + 0xc6, 0x26, 0x6f, 0xae, 0xb8, 0x29, 0x43, 0xc4, 0x6a, 0x61, + 0x2d, 0x7f, 0x3e, 0x39, 0x81, 0xd0, 0xad, 0x34, 0xa9, 0x50, + 0x69, 0x46, 0x07, 0x69, 0xf3, 0xd3, 0x74, 0x74, 0x65, 0xb1, + 0x5d, 0x90, 0x8c, 0xb6, 0x39, 0xd5, 0xd1, 0x1b, 0x73, 0xd7, + 0xd4, 0x5d, 0xbb, 0x81, 0x37, 0x86, 0x29, 0x6b, 0x81, 0x1b, + 0x56, 0xb2, 0x90, 0x35, 0xc1, 0xc1, 0x8c, 0x64, 0x59, 0x3a, + 0x6b, 0xa2, 0x35, 0x33, 0x77, 0xf4, 0x14, 0xda, 0xbd, 0x92, + 0x3b, 0xa0, 0x9c, 0x68, 0xce, 0xb9, 0x6e, 0x58, 0x5a, 0x56, + 0x93, 0x26, 0x41, 0x0b, 0x23, 0x18, 0x35, 0x56, 0x6e, 0x1e, + 0x87, 0x16, 0x81, 0xca, 0x03, 0x5e, 0x43, 0x94, 0xec, 0xc5, + 0xdd, 0xb9, 0x81, 0xcd, 0x43, 0x54, 0x91, 0x1a, 0x1f, 0x99, + 0x83, 0x21, 0xb2, 0xf2, 0x13, 0x3e, 0x23, 0x1b, 0x43, 0xd8, + 0x51, 0x51, 0xe2, 0x06, 0x10, 0xc8, 0xb9, 0x46, 0x8e, 0x20, + 0x50, 0xa2, 0x6a, 0x5e, 0x2d, 0xa7, 0xf1, 0xa5, 0x47, 0x6c, + 0x65, 0x2f, 0xd4, 0xc9, 0x76, 0xe1, 0xef, 0xd7, 0x53, 0x21, + 0x52, 0x28, 0xc8, 0x3d, 0x61, 0x77, 0x11, 0x01, 0x71, 0x3b, + 0xdc, 0xac, 0x7f, 0xf8, 0xb0, 0xc0, 0x69, 0xda, 0xb1, 0x61, + 0x94, 0x61, 0x37, 0x96, 0xc7, 0xc7, 0x5b, 0xdd, 0xfb, 0x7f, + 0x00, 0xe0, 0x1f, 0xb4, 0x80, 0x74, 0xf9, 0x30, 0x97, 0xc9, + 0x12, 0xc5, 0x55, 0x82, 0x9b, 0xbf, 0xf0, 0x1d, 0xc7, 0x93, + 0x5a, 0x32, 0xc6, 0xf5, 0x7c, 0xbd, 0xfe, 0x67, 0x8b, 0x68, + 0x3d, 0x70, 0xd8, 0x24, 0x71, 0xc2, 0x01, 0x2a, 0x44, 0x93, + 0x84, 0x9d, 0x91, 0x69, 0xb4, 0x6d, 0xa7, 0x7a, 0xab, 0x12, + 0xcf, 0xab, 0xaf, 0x7c, 0x7b, 0x75, 0x53, 0xc9, 0x14, 0xb0, + 0x04, 0x9f, 0x40, 0x72, 0x96, 0xf8, 0x95, 0xb4, 0xda, 0x3e, + 0x1b, 0xf7, 0x3c, 0x91, 0x8d, 0x18, 0x52, 0x62, 0x2a, 0x4f, + 0xf4, 0x55, 0x7b, 0x4d, 0x15, 0x59, 0x71, 0xed, 0xf4, 0x25, + 0xf8, 0x26, 0x3f, 0xc6, 0x8f, 0x5b, 0x1d, 0x96, 0x3a, 0x13, + 0x24, 0x08, 0x5f, 0x5b, 0x69, 0x27, 0x5a, 0xbb, 0xb0, 0x86, + 0xdc, 0x84, 0x9d, 0x4a, 0x6b, 0x41, 0xd3, 0x87, 0x57, 0x08, + 0x1f, 0x22, 0x32, 0xc1, 0x7f, 0x2f, 0x84, 0xcb, 0xba, 0x86, + 0x27, 0x87, 0xa6, 0xa4, 0x1a, 0x99, 0xb5, 0xa5, 0xa1, 0xc3, + 0xa9, 0xa4, 0x03, 0x45, 0xc8, 0x2a, 0x94, 0xdf, 0x5c, 0x3b, + 0xc0, 0x72, 0x85, 0xf3, 0xe0, 0x1f, 0xad, 0x44, 0x66, 0x85, + 0xdd, 0x7b, 0xf3, 0x3a, 0x59, 0xd7, 0x81, 0x27, 0x65, 0xcf, + 0xba, 0xf0, 0x74, 0xfd, 0xf5, 0xf5, 0x12, 0xce, 0x31, 0xdf, + 0xf1, 0xdf, 0x22, 0x93, 0x6d, 0x23, 0x7f, 0xa3, 0xa7, 0x54, + 0xa0, 0x05, 0x10, 0xe5, 0x2d, 0x49, 0x14, 0x8f, 0x99, 0xe1, + 0xf5, 0x8e, 0x51, 0xe0, 0xe3, 0xcf, 0x56, 0x2f, 0x6e, 0xae, + 0xa5, 0x91, 0x4e, 0xe2, 0x73, 0x4c, 0xea, 0xc2, 0x25, 0x6a, + 0x8c, 0x6a, 0xb6, 0x26, 0x88, 0x28, 0xb5 +}; + diff --git a/neureka/dense/src/output.c b/neureka/dense/src/output.c new file mode 100644 index 0000000..ab9b752 --- /dev/null +++ b/neureka/dense/src/output.c @@ -0,0 +1,46 @@ +#include "output.h" + +#define OUTPUT_SIZE (175) +PI_L1 uint8_t output[OUTPUT_SIZE]; + +#define GOLDEN_OUTPUT_SIZE (175) +PI_L2 uint8_t golden_output[GOLDEN_OUTPUT_SIZE] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0xa0, 0x00, 0xdc, + 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0x43, + 0x2d, 0x28, 0x00, 0xba, 0xad, 0x00, 0x00, 0x00, 0x05, 0x80, + 0x00, 0x1b, 0x00, 0x1a, 0xa1, 0x00, 0x6f, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x6b, 0x00, 0x96, 0x00, 0x00, 0x00, 0x00, 0x28, + 0x00, 0x1e, 0xff, 0x51, 0x35, 0x0f, 0x00, 0x00, 0x00, 0xff, + 0x00, 0x00, 0x00, 0x00, 0x5b, 0x00, 0x00, 0x00, 0x1f, 0x00, + 0x00, 0x00, 0x00, 0x52, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xba, 0x06, 0x1b, + 0x13, 0x00, 0x00, 0xa6, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc3, + 0x00, 0x00, 0x22, 0x26, 0xa2, 0x00, 0x44, 0x00, 0x0c, 0x00, + 0x3a, 0x00, 0x00, 0x00, 0xf7, 0x00, 0x00, 0x84, 0x00, 0x00, + 0x00, 0x00, 0xec, 0x03, 0x62, 0x2c, 0x00, 0x00, 0x00, 0xa9, + 0x00, 0x00, 0x00, 0x01, 0x09, 0x00, 0x0b, 0x00, 0x25, 0xa0, + 0x00, 0x00, 0x00, 0x13, 0x00, 0x17, 0x00, 0x00, 0x00, 0xff, + 0x00, 0x00, 0x00, 0x47, 0x00, 0x00, 0x00, 0xff, 0x00, 0x78, + 0x17, 0x04, 0x00, 0xdc, 0x76, 0x00, 0x00, 0x00, 0x00, 0xcd, + 0x00, 0x00, 0x06, 0x1b, 0x48 +}; + +int check_output() { + printf("Checking the output vector:\n"); + + int n_err = 0; + for (int i = 0; i < OUTPUT_SIZE; i++) { + if (output[i] != golden_output[i]) { + printf("ERROR: wrong value of output @ %d: %d vs. golden: %d\n", i, output[i], golden_output[i]); + n_err++; + } + } + + if (n_err == 0) + printf("> Success! No errors found.\n"); + else + printf("> Failure! Found %d/%d errors.\n", n_err, OUTPUT_SIZE); + return n_err; + } + + \ No newline at end of file diff --git a/neureka/dense/src/scale.c b/neureka/dense/src/scale.c new file mode 100644 index 0000000..33769cd --- /dev/null +++ b/neureka/dense/src/scale.c @@ -0,0 +1,10 @@ +#include "scale.h" + +#define SCALE_SIZE (35) +PI_L1 uint8_t scale[SCALE_SIZE] = { + 0x06, 0x07, 0x14, 0x06, 0x10, 0x0b, 0x1d, 0x14, 0x01, 0x1b, + 0x03, 0x04, 0x17, 0x1c, 0x05, 0x13, 0x06, 0x0f, 0x0c, 0x0c, + 0x02, 0x04, 0x0e, 0x19, 0x0b, 0x1a, 0x12, 0x10, 0x06, 0x0b, + 0x09, 0x16, 0x06, 0x01, 0x0c +}; + diff --git a/neureka/dense/src/weight.c b/neureka/dense/src/weight.c new file mode 100644 index 0000000..811eb11 --- /dev/null +++ b/neureka/dense/src/weight.c @@ -0,0 +1,3030 @@ +#include "weight.h" + +#define WEIGHT_SIZE (30240) +PI_L1 uint8_t weight[WEIGHT_SIZE] = { + 0xfa, 0x5e, 0x7d, 0x0e, 0x0d, 0x0d, 0x03, 0xc1, 0x56, 0x6a, + 0x95, 0x9e, 0x1e, 0xdf, 0x88, 0x4d, 0xbe, 0x88, 0xc4, 0x67, + 0x6e, 0x2e, 0x9e, 0x60, 0xcc, 0xb4, 0x25, 0x04, 0xe5, 0xfc, + 0x82, 0x6b, 0x1e, 0x34, 0x8a, 0x08, 0x47, 0xda, 0xe8, 0xeb, + 0x39, 0x54, 0x10, 0x81, 0x36, 0x76, 0x53, 0xa3, 0x87, 0x45, + 0x86, 0xd4, 0x9b, 0xb1, 0x58, 0xb8, 0xad, 0xa8, 0x47, 0x0a, + 0x0c, 0xde, 0x20, 0xc5, 0xae, 0xf5, 0xaa, 0xaf, 0x29, 0x92, + 0x48, 0x40, 0xd2, 0x79, 0x9d, 0x5c, 0xa5, 0x8e, 0x6d, 0x1a, + 0x0b, 0x12, 0xf4, 0x03, 0xa3, 0x1f, 0x45, 0x3c, 0x16, 0xd5, + 0xb6, 0xe1, 0x25, 0xce, 0x4a, 0x1d, 0xe4, 0xc8, 0xd6, 0xda, + 0x54, 0xfa, 0x6c, 0x63, 0x35, 0x4b, 0x0b, 0x3a, 0x84, 0xe5, + 0x8c, 0x89, 0x18, 0xb9, 0x94, 0x6d, 0x01, 0xf2, 0x5d, 0x39, + 0xc0, 0x2d, 0x4d, 0x97, 0x42, 0xaa, 0x49, 0x6b, 0x2b, 0xa0, + 0xd4, 0x4b, 0x06, 0xeb, 0x48, 0xab, 0xc5, 0x11, 0x2b, 0xf8, + 0xb9, 0xc8, 0xa7, 0xb0, 0xe5, 0xe8, 0x69, 0x5b, 0xe8, 0xaf, + 0xdf, 0xa2, 0x32, 0x3a, 0xc6, 0x20, 0x86, 0xc9, 0x2d, 0x81, + 0xa3, 0xd2, 0x07, 0xd2, 0x43, 0x24, 0xd8, 0x02, 0x0c, 0x37, + 0x48, 0x6f, 0x5f, 0x83, 0x47, 0x76, 0xd5, 0xf6, 0xe6, 0xb1, + 0xef, 0xcb, 0x5a, 0x39, 0xc0, 0x85, 0x0e, 0xa9, 0x30, 0x39, + 0x75, 0x01, 0x06, 0xc7, 0x29, 0x35, 0xa3, 0x98, 0x56, 0xd9, + 0x40, 0x54, 0xe8, 0x0d, 0x4f, 0xb7, 0x68, 0xfb, 0x57, 0x82, + 0x2f, 0x56, 0x91, 0x70, 0xe2, 0xab, 0xe7, 0xcb, 0x5a, 0x19, + 0xc0, 0xa5, 0x0f, 0xa9, 0xb0, 0x39, 0x75, 0x01, 0x06, 0xcf, + 0x2d, 0xb5, 0xa3, 0x98, 0x56, 0xd9, 0x49, 0x54, 0xe8, 0x0b, + 0x4c, 0x37, 0x68, 0xfb, 0x57, 0x83, 0x2f, 0x56, 0x91, 0x70, + 0xe2, 0xbb, 0x18, 0x34, 0xa5, 0xe6, 0x3f, 0x5a, 0xf0, 0x56, + 0xcf, 0xc6, 0x8a, 0xfe, 0xf9, 0x30, 0xd2, 0x4a, 0x5c, 0x67, + 0xa9, 0x26, 0xb6, 0xab, 0x17, 0xf4, 0xb3, 0xc8, 0x97, 0x04, + 0xa8, 0x7c, 0xd0, 0xa9, 0x6e, 0x8f, 0x1d, 0x44, 0xe0, 0x3e, + 0x07, 0xbc, 0x00, 0x64, 0x58, 0x14, 0x26, 0xc1, 0x52, 0x73, + 0x88, 0xf8, 0x22, 0xa9, 0x3c, 0x42, 0x0d, 0x4a, 0xec, 0xf8, + 0xc2, 0xd7, 0x29, 0x6d, 0x02, 0x04, 0xc4, 0x15, 0x40, 0x12, + 0xe1, 0xc4, 0x5c, 0x34, 0x8f, 0x46, 0x86, 0xbc, 0x93, 0xf4, + 0xeb, 0x2d, 0xcb, 0x67, 0xb6, 0x56, 0x32, 0x8c, 0xe0, 0x87, + 0x3e, 0x17, 0x06, 0xe6, 0x57, 0xf9, 0xfc, 0x7f, 0x6d, 0x3d, + 0x08, 0x83, 0x1c, 0x36, 0x47, 0x2b, 0x55, 0xf5, 0x89, 0x66, + 0xcf, 0xf5, 0x5a, 0x34, 0x95, 0x7b, 0x6f, 0xfa, 0x1a, 0x5b, + 0x1b, 0x05, 0x62, 0x8d, 0x0a, 0x21, 0x83, 0x83, 0x22, 0x3c, + 0x39, 0x47, 0x24, 0x17, 0x8f, 0xea, 0xce, 0x2d, 0xdf, 0x47, + 0x86, 0x49, 0x4f, 0xba, 0x0e, 0x2f, 0xa5, 0xa5, 0x1b, 0x3d, + 0xc6, 0x20, 0x4f, 0xf0, 0x86, 0x62, 0x47, 0xed, 0x22, 0x19, + 0x71, 0xad, 0x27, 0xaf, 0xe9, 0x56, 0x93, 0xf5, 0x5c, 0x47, + 0xff, 0xce, 0xbf, 0x2a, 0xa8, 0x95, 0x9a, 0xb5, 0x17, 0xc1, + 0xa6, 0x3b, 0x6e, 0xd9, 0x6a, 0xde, 0xf3, 0x7d, 0xd8, 0x33, + 0xca, 0x0d, 0xa9, 0xd2, 0x48, 0x38, 0x3b, 0x84, 0x48, 0x60, + 0xb7, 0x2c, 0x8a, 0x85, 0xb8, 0xcb, 0x01, 0xe5, 0xe5, 0x94, + 0xbf, 0xb4, 0x5b, 0x60, 0x98, 0xfb, 0xe6, 0xae, 0x45, 0xf1, + 0x6b, 0xbe, 0x65, 0x49, 0x54, 0x33, 0xd7, 0x32, 0x2f, 0xc0, + 0x5c, 0x2a, 0x31, 0xa7, 0x0c, 0xe6, 0xaf, 0x2a, 0x9f, 0x64, + 0x7c, 0x57, 0xab, 0xbb, 0xa7, 0x15, 0xbc, 0x92, 0x84, 0x2f, + 0x81, 0x87, 0xe3, 0x8f, 0x45, 0xf1, 0x6b, 0xbe, 0x65, 0x69, + 0x5c, 0x33, 0xc6, 0x32, 0x2f, 0xc0, 0x5c, 0x28, 0x39, 0xa5, + 0x0c, 0xe4, 0xaf, 0x2e, 0x9b, 0x64, 0x78, 0x47, 0xab, 0xbf, + 0xe7, 0x15, 0xbc, 0x94, 0xc0, 0x2f, 0x90, 0x87, 0xe3, 0x8f, + 0xba, 0x0e, 0x94, 0x41, 0x9a, 0x96, 0xa3, 0xcc, 0x39, 0xcd, + 0xd0, 0x3f, 0xa3, 0xd7, 0xc6, 0x5a, 0xf3, 0x1b, 0x50, 0xd1, + 0x64, 0x9b, 0x87, 0xb8, 0x54, 0x40, 0x18, 0xea, 0x43, 0x6b, + 0x3f, 0xd0, 0x6f, 0x78, 0x1c, 0x70, 0x07, 0x00, 0x00, 0x00, + 0x03, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x03, 0x00, + 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, + 0x06, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x06, 0x00, + 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, + 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x05, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x06, 0x00, + 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, + 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, + 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x06, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x05, 0x00, + 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, + 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, + 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x07, 0x00, + 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x02, 0x00, + 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x06, 0x00, + 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x05, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x06, 0x00, + 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, + 0x03, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x05, 0x00, + 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x05, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x04, 0x00, + 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0xfd, 0x34, 0x94, 0x6f, 0x49, 0x64, + 0x1b, 0xa1, 0xe6, 0x63, 0x32, 0x22, 0xb6, 0xbd, 0xf8, 0x2e, + 0xe9, 0x90, 0x26, 0xe4, 0xd1, 0x61, 0x06, 0x16, 0x02, 0x9c, + 0x3f, 0xb4, 0xc2, 0x90, 0x37, 0x4c, 0xdc, 0xbf, 0x0e, 0xf0, + 0x93, 0x83, 0x4c, 0x08, 0xfd, 0x5a, 0x0f, 0x36, 0xec, 0x00, + 0x02, 0x9d, 0xb8, 0xcf, 0xfa, 0x1e, 0x66, 0xfc, 0x57, 0x69, + 0x08, 0xaa, 0x8a, 0x14, 0x6d, 0x0b, 0x05, 0xc9, 0x9a, 0xb5, + 0xd9, 0xf6, 0x16, 0x84, 0xb7, 0xae, 0x0e, 0xd9, 0x94, 0x25, + 0xce, 0x28, 0xde, 0xbf, 0x96, 0xb2, 0xa5, 0x89, 0x31, 0xa3, + 0xd8, 0x32, 0xe6, 0x63, 0x4c, 0x89, 0x37, 0xd7, 0x84, 0x2e, + 0x4a, 0x5f, 0x4b, 0xcb, 0x0c, 0x0c, 0x51, 0x4d, 0x94, 0x97, + 0x6a, 0xc4, 0x02, 0xf8, 0x74, 0xee, 0xaa, 0x26, 0x41, 0xc2, + 0xbd, 0xc2, 0xe5, 0x68, 0x98, 0xfd, 0x8e, 0xe2, 0x90, 0x24, + 0xe4, 0x1b, 0x25, 0x4a, 0xbe, 0xd3, 0xde, 0xad, 0x63, 0x39, + 0x76, 0x6b, 0x4a, 0xbe, 0xbf, 0x16, 0xc9, 0xb2, 0xcb, 0x32, + 0x3d, 0x82, 0xf6, 0xaa, 0xec, 0x36, 0x21, 0x4d, 0x0b, 0x87, + 0x87, 0x90, 0x2c, 0x82, 0x47, 0xbb, 0x5c, 0xd0, 0x9b, 0xc5, + 0x19, 0xb8, 0x3b, 0xa6, 0xfd, 0x00, 0x16, 0x9a, 0x84, 0xa6, + 0xcc, 0x84, 0xd6, 0x44, 0x1a, 0xe8, 0x0d, 0xfb, 0xb7, 0x8b, + 0x6c, 0x32, 0x20, 0x4c, 0x03, 0x3f, 0x83, 0xc8, 0xa2, 0xa2, + 0x65, 0x2f, 0x2d, 0x72, 0xbf, 0xc5, 0x19, 0xaa, 0x7b, 0x8c, + 0xae, 0x01, 0x5b, 0x9e, 0xcc, 0xce, 0x9c, 0xb6, 0xc4, 0xf4, + 0x9a, 0xe8, 0x0d, 0xea, 0xb7, 0x8a, 0x6c, 0x32, 0x20, 0x4c, + 0x03, 0x3e, 0x87, 0xd8, 0xa2, 0xa2, 0x65, 0x2f, 0x2c, 0x72, + 0xbf, 0xc5, 0x19, 0xba, 0x7b, 0x8c, 0xef, 0x01, 0x5b, 0x9a, + 0xcc, 0xce, 0x9c, 0xb6, 0xc4, 0xf4, 0x65, 0x17, 0xf2, 0x15, + 0x48, 0x75, 0x93, 0xcd, 0xdf, 0xb3, 0xfc, 0xc1, 0x78, 0x27, + 0x5d, 0x5d, 0x9a, 0xd0, 0xd3, 0x8d, 0x40, 0x3a, 0xe6, 0x45, + 0x84, 0x73, 0x10, 0xfe, 0xa4, 0x65, 0x33, 0x31, 0x63, 0x49, + 0x3b, 0x0b, 0xd1, 0xe4, 0x92, 0xa8, 0x5e, 0x6f, 0x63, 0xa3, + 0x75, 0xb2, 0xa0, 0x2d, 0xaf, 0x91, 0x08, 0x93, 0x07, 0xff, + 0xd8, 0x41, 0xe7, 0x59, 0x5d, 0xad, 0xd4, 0x72, 0xc4, 0x0d, + 0x48, 0x2b, 0xfc, 0xc2, 0xa0, 0x27, 0xdf, 0x1c, 0x6b, 0xcb, + 0x67, 0xc3, 0x6e, 0x6f, 0xf7, 0xf5, 0x85, 0x76, 0x87, 0xec, + 0xd9, 0xb0, 0x1f, 0xdd, 0xe5, 0xa6, 0x32, 0x8a, 0x6c, 0xdb, + 0x74, 0xe0, 0x58, 0x5e, 0xce, 0x0e, 0xa2, 0x69, 0xa4, 0x5d, + 0x7e, 0x26, 0x1f, 0x16, 0x22, 0xbd, 0x01, 0x57, 0x83, 0x76, + 0x5c, 0x81, 0x35, 0x06, 0x15, 0xcd, 0x59, 0xf3, 0x3b, 0xbf, + 0x03, 0xaa, 0x51, 0xd7, 0x74, 0xf8, 0x8c, 0x8c, 0xd7, 0x5e, + 0x4a, 0xa1, 0x3f, 0x3b, 0x3f, 0xca, 0x38, 0xd5, 0xf3, 0x7b, + 0x65, 0x34, 0xf7, 0x9a, 0x58, 0x66, 0xe8, 0xc6, 0xb1, 0x3b, + 0x4d, 0x19, 0xfe, 0xcb, 0xd7, 0xb2, 0xa2, 0xdf, 0x51, 0x59, + 0xb1, 0x73, 0x2e, 0xd5, 0x92, 0xfc, 0x05, 0x60, 0xe0, 0x6a, + 0x2e, 0x7d, 0x12, 0x2d, 0x66, 0xfc, 0x28, 0xf2, 0x44, 0x64, + 0xd4, 0xac, 0x8a, 0x94, 0x4f, 0x80, 0xc7, 0x0d, 0xaa, 0xcd, + 0xc1, 0x90, 0xd5, 0x43, 0x2a, 0xbc, 0x91, 0xd6, 0x30, 0x89, + 0xea, 0x79, 0x48, 0xcb, 0xa0, 0xb0, 0x4f, 0x20, 0xc1, 0x7d, + 0xd1, 0x70, 0x65, 0xfa, 0xc6, 0x70, 0xca, 0x26, 0x93, 0x1a, + 0x3a, 0x33, 0xc2, 0x49, 0x3a, 0x01, 0x11, 0xb2, 0x9e, 0x4b, + 0xa4, 0x78, 0x7c, 0xf5, 0x3c, 0xd4, 0xc6, 0x71, 0x40, 0xc2, + 0x62, 0xea, 0xcf, 0x63, 0x11, 0xfd, 0x8a, 0xf8, 0x65, 0xfa, + 0x46, 0x70, 0xca, 0xa6, 0x92, 0x12, 0x3a, 0x22, 0xc6, 0x49, + 0x2a, 0x01, 0x11, 0xb2, 0x9e, 0x4b, 0xa0, 0x78, 0x7c, 0xf5, + 0x3c, 0xd4, 0xc6, 0x71, 0x40, 0xc2, 0xe2, 0xea, 0xcf, 0x63, + 0x11, 0xfd, 0x82, 0xf8, 0x9a, 0x05, 0xb9, 0x8f, 0x35, 0x59, + 0x6d, 0xed, 0xc5, 0xdd, 0x39, 0xb6, 0xd5, 0xfe, 0xee, 0x4d, + 0x61, 0xb4, 0x5f, 0x87, 0x83, 0x0a, 0xc3, 0x2b, 0x39, 0x8e, + 0xbf, 0x3d, 0x1d, 0x15, 0x30, 0x9c, 0xee, 0x02, 0x7d, 0x07, + 0x06, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x05, 0x00, + 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, + 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, + 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, + 0x03, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x07, 0x00, + 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, + 0x06, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x03, 0x00, + 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x04, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x01, 0x00, + 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x03, 0x00, + 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, + 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x03, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x05, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x06, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x06, 0x00, + 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, + 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x07, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x03, 0x00, + 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, + 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, + 0x07, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0xe7, 0xf1, + 0xe5, 0x0b, 0xa8, 0xa0, 0x23, 0x89, 0xee, 0xe0, 0x4c, 0x00, + 0x99, 0xe0, 0xeb, 0xdd, 0x41, 0x87, 0x83, 0x61, 0x4c, 0x85, + 0xcb, 0x5d, 0x7a, 0xfe, 0xe6, 0x2c, 0x49, 0x58, 0xc0, 0xc1, + 0xb3, 0xbe, 0xdc, 0xd4, 0xce, 0xbe, 0x81, 0x22, 0xc2, 0x79, + 0x13, 0x7c, 0xd4, 0x38, 0xaa, 0x8d, 0x91, 0x64, 0xbb, 0x29, + 0xd4, 0xff, 0x36, 0x9c, 0x66, 0xc0, 0x19, 0x0d, 0x36, 0x82, + 0x49, 0x39, 0xfd, 0xd8, 0xf7, 0xa0, 0xd4, 0xa8, 0xa7, 0x44, + 0xdd, 0x66, 0x47, 0xd9, 0x12, 0x58, 0x50, 0x11, 0x5c, 0x9b, + 0x0c, 0xd5, 0x06, 0xb0, 0xab, 0xac, 0x44, 0xb3, 0xb5, 0xb9, + 0x7f, 0x03, 0x67, 0x35, 0x7b, 0xed, 0xe2, 0xb0, 0xf4, 0xbc, + 0x42, 0xf1, 0x60, 0x64, 0x26, 0x22, 0xc3, 0xf3, 0x20, 0x89, + 0x94, 0xcc, 0x12, 0xcf, 0x3d, 0x25, 0x3c, 0xc3, 0x57, 0xa1, + 0xd9, 0x8e, 0xfc, 0x32, 0xd8, 0xc8, 0x95, 0x72, 0xb2, 0xd9, + 0xf0, 0xbc, 0x72, 0x61, 0x54, 0x64, 0xed, 0xce, 0x34, 0x7b, + 0x38, 0xf8, 0xd6, 0x11, 0xce, 0x37, 0x0a, 0xd0, 0x6e, 0x84, + 0xae, 0xa6, 0xfa, 0x88, 0xb2, 0x77, 0x28, 0x57, 0x0c, 0x80, + 0xc2, 0x7e, 0xe1, 0xc9, 0x03, 0xd5, 0x6f, 0xa6, 0xfc, 0x1a, + 0xee, 0x64, 0x7b, 0x27, 0x6f, 0xf0, 0x73, 0x98, 0x33, 0xc3, + 0xe3, 0x1c, 0xba, 0xd8, 0x24, 0xd4, 0x7c, 0xb7, 0xfc, 0x8b, + 0xf2, 0xe0, 0x81, 0x5d, 0x26, 0x9c, 0xf6, 0xf9, 0x39, 0x43, + 0x13, 0xdc, 0x7f, 0xa2, 0x75, 0x81, 0xfc, 0xa4, 0x79, 0x45, + 0x2f, 0x83, 0x76, 0x74, 0x33, 0xc3, 0xe7, 0x1c, 0xba, 0xd8, + 0x24, 0x54, 0x7c, 0xa7, 0xfc, 0x8b, 0xf2, 0xe0, 0x81, 0x5d, + 0x26, 0x92, 0xf6, 0xf8, 0x31, 0x43, 0x13, 0xdc, 0x7f, 0xa2, + 0x74, 0x81, 0xfc, 0x24, 0x79, 0x45, 0x2f, 0xb3, 0x76, 0xf4, + 0xcc, 0x3c, 0x18, 0xe3, 0x45, 0x27, 0xdb, 0x2b, 0x83, 0x58, + 0x03, 0x74, 0x0d, 0x1f, 0x7e, 0xa2, 0xd9, 0x6d, 0x09, 0x07, + 0xce, 0xbc, 0xec, 0x23, 0x80, 0x5d, 0x8b, 0x7e, 0x03, 0xdb, + 0x86, 0xba, 0xd0, 0x4c, 0x89, 0x0b, 0x15, 0xd9, 0x6c, 0x4d, + 0xa7, 0xc9, 0x3c, 0x21, 0xe9, 0x81, 0xdb, 0xba, 0x86, 0xbf, + 0xb7, 0x72, 0x99, 0xf6, 0x0c, 0xe0, 0xf9, 0x8b, 0x46, 0x87, + 0x1a, 0xdd, 0xd5, 0x0e, 0x1c, 0x00, 0x19, 0x56, 0xbe, 0xfe, + 0xa6, 0x6c, 0xdb, 0xe8, 0x2c, 0x4e, 0x09, 0x19, 0x79, 0x66, + 0x9b, 0x44, 0xe7, 0xb3, 0x7d, 0x70, 0x3f, 0x2b, 0x7b, 0xe1, + 0x65, 0xf3, 0x3f, 0x30, 0x0b, 0x42, 0x5e, 0x90, 0x23, 0x62, + 0x98, 0x4d, 0x10, 0x90, 0x92, 0x62, 0xb8, 0x31, 0x2c, 0x9b, + 0x15, 0xb8, 0x38, 0x53, 0x89, 0x9f, 0xdd, 0xff, 0x79, 0x16, + 0xd7, 0x54, 0xc5, 0x7c, 0x51, 0xd5, 0xdf, 0x9b, 0xa0, 0x1a, + 0xf5, 0x15, 0x95, 0x2d, 0x0c, 0xc4, 0xcb, 0x48, 0x5c, 0xf0, + 0x2b, 0x13, 0xa8, 0x00, 0xda, 0x48, 0xf8, 0x96, 0x3a, 0x81, + 0x7b, 0x53, 0x91, 0x49, 0xe8, 0x83, 0xba, 0x8c, 0x59, 0xca, + 0x12, 0xe0, 0x23, 0xf4, 0x5b, 0xd7, 0xb5, 0xff, 0xc2, 0xc5, + 0xa0, 0xb9, 0xed, 0xa3, 0x5e, 0x9c, 0x9e, 0x37, 0x66, 0xa1, + 0x8b, 0xd5, 0x3e, 0xfd, 0x0a, 0x15, 0x3f, 0xb5, 0x71, 0x3c, + 0x3b, 0xbf, 0xff, 0xde, 0xe4, 0x8b, 0x6a, 0xf1, 0x34, 0x35, + 0x9a, 0x32, 0xe5, 0xd2, 0x6b, 0x10, 0xdf, 0xe7, 0x8b, 0xaf, + 0x5a, 0x5c, 0x23, 0xc9, 0x07, 0xa6, 0x73, 0x71, 0xe2, 0x96, + 0x9f, 0x14, 0x9a, 0xf5, 0xb0, 0xa4, 0x1d, 0x13, 0xef, 0xff, + 0x64, 0x3b, 0xf4, 0xf9, 0xb8, 0x31, 0x9b, 0x71, 0xf1, 0x52, + 0xfe, 0x92, 0xdf, 0xe7, 0x81, 0xe7, 0xf6, 0x71, 0x2e, 0xca, + 0x1f, 0xa2, 0x53, 0x71, 0xfa, 0x96, 0x9f, 0x14, 0x9a, 0xf5, + 0xb1, 0xa4, 0x1d, 0x13, 0xef, 0xfe, 0x64, 0x3a, 0xf0, 0xf9, + 0x38, 0x31, 0x9b, 0x71, 0xf5, 0x52, 0xfa, 0x92, 0xdf, 0xe3, + 0x81, 0xa7, 0x76, 0x75, 0x2a, 0xc2, 0x1f, 0xa6, 0xac, 0x8e, + 0x05, 0x69, 0x60, 0xeb, 0x65, 0x0a, 0x4e, 0x5b, 0xe2, 0xec, + 0x10, 0x01, 0x9b, 0xc5, 0x0f, 0x06, 0xc7, 0xce, 0x64, 0x8e, + 0x0a, 0xad, 0x05, 0x6d, 0x20, 0x1c, 0x7e, 0x58, 0x89, 0x8a, + 0xd5, 0x3d, 0xe0, 0x59, 0x05, 0x00, 0x00, 0x00, 0x04, 0x00, + 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x06, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, + 0x05, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x01, 0x00, + 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x06, 0x00, + 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x04, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, + 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x06, 0x00, + 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x03, 0x00, + 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, + 0x05, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, + 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x05, 0x00, + 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, + 0x05, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, + 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, + 0x03, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x06, 0x00, + 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, + 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, + 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, + 0x06, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0xc4, 0x5f, 0xfb, 0xa9, 0x84, 0x01, 0x52, 0x16, + 0x8c, 0xdd, 0x09, 0x32, 0xb6, 0x6b, 0xbb, 0x8f, 0xda, 0x5e, + 0x28, 0x68, 0x75, 0xbe, 0x9e, 0xcb, 0x7e, 0xf3, 0x20, 0x46, + 0xdf, 0x94, 0xfe, 0x87, 0x86, 0xd0, 0xf0, 0x44, 0x53, 0xa8, + 0x66, 0x05, 0x1c, 0xf5, 0x14, 0xfb, 0xae, 0xff, 0x1b, 0xac, + 0xfd, 0xe5, 0x68, 0x14, 0x46, 0x87, 0x11, 0x9c, 0x72, 0x2a, + 0xa9, 0x3e, 0xd9, 0x2b, 0x54, 0xfc, 0x3f, 0x82, 0x84, 0xfb, + 0xc3, 0x27, 0x8e, 0x93, 0xff, 0x3d, 0x67, 0x9e, 0x1c, 0xbc, + 0x05, 0x23, 0xf7, 0xc3, 0x16, 0x4f, 0x1e, 0x38, 0x72, 0x0c, + 0x83, 0x05, 0x1e, 0xb1, 0x64, 0x9f, 0x80, 0xd2, 0x58, 0xde, + 0x02, 0xd9, 0x6f, 0x7b, 0x8c, 0x3f, 0x74, 0x86, 0x90, 0xcf, + 0x54, 0xa1, 0x90, 0x64, 0x3b, 0x31, 0xef, 0x18, 0x11, 0xee, + 0x18, 0xb2, 0xf6, 0x85, 0x03, 0x2f, 0xb3, 0x61, 0x79, 0xb7, + 0x84, 0x2d, 0xef, 0xdc, 0xb8, 0xdb, 0x0a, 0xc9, 0xae, 0x8e, + 0x2f, 0x9b, 0x61, 0x01, 0xd0, 0x0f, 0x5f, 0xb2, 0x41, 0x00, + 0x30, 0x2c, 0x43, 0x29, 0x64, 0x47, 0xe0, 0x2c, 0x3f, 0x77, + 0xd0, 0xb3, 0x26, 0x43, 0x13, 0x00, 0x88, 0x03, 0x0e, 0x37, + 0x9b, 0x47, 0xfd, 0x50, 0xe3, 0x62, 0x6b, 0x63, 0x98, 0x53, + 0xdc, 0xd4, 0x5c, 0xb1, 0x71, 0x03, 0x1a, 0x2d, 0x8f, 0x19, + 0x27, 0xdd, 0x78, 0xa8, 0x03, 0xf5, 0x9c, 0x26, 0x80, 0xc1, + 0x11, 0x07, 0x8a, 0x2f, 0x6e, 0xf2, 0x83, 0xf1, 0x23, 0x50, + 0x61, 0x6e, 0x62, 0x61, 0x3c, 0x43, 0xd6, 0xc6, 0x5c, 0xb1, + 0x71, 0x00, 0x1a, 0x2c, 0xcf, 0x19, 0x27, 0xdf, 0x78, 0xa8, + 0x33, 0xf5, 0x90, 0x27, 0x02, 0xc1, 0x11, 0x07, 0x8a, 0x2b, + 0x4e, 0xf2, 0x83, 0xd1, 0x23, 0x50, 0x63, 0x6a, 0x26, 0x61, + 0x3c, 0x43, 0xd6, 0xc6, 0xa3, 0x4e, 0x8e, 0xff, 0xe5, 0xd3, + 0x30, 0xe6, 0xd8, 0x20, 0x87, 0x57, 0xcc, 0x0a, 0x6f, 0xd8, + 0xfd, 0x3e, 0xee, 0xf8, 0x75, 0xd4, 0xb1, 0x0d, 0x7c, 0x2e, + 0xdc, 0xaf, 0x9c, 0x95, 0xd9, 0x9e, 0xc3, 0xbc, 0x29, 0x39, + 0x6d, 0xb7, 0x3d, 0x1e, 0x6e, 0x69, 0xa5, 0xf0, 0xbf, 0x8b, + 0xe6, 0x03, 0x2f, 0x9f, 0x76, 0xe9, 0xb9, 0x2a, 0x5b, 0x16, + 0x0c, 0xee, 0x65, 0xca, 0x7f, 0x9d, 0x44, 0xc1, 0x39, 0x2e, + 0x8e, 0xbe, 0xae, 0xa6, 0x16, 0x8b, 0xe9, 0x61, 0x8a, 0xe8, + 0x93, 0xaf, 0x0f, 0x08, 0x9b, 0xbf, 0xa4, 0xec, 0xae, 0x62, + 0x3d, 0xe4, 0xab, 0x70, 0x3a, 0x2b, 0x0d, 0xd6, 0x80, 0xa8, + 0x5f, 0xf7, 0x83, 0x3a, 0xfd, 0x41, 0xdf, 0xec, 0xc6, 0x5c, + 0x32, 0xd7, 0xce, 0x7d, 0xe2, 0x8d, 0x8d, 0xb0, 0xec, 0xdc, + 0xfc, 0x16, 0x4f, 0x58, 0x5e, 0x6b, 0x34, 0x38, 0x9f, 0xf9, + 0x64, 0xdd, 0x43, 0x35, 0xdf, 0x01, 0x04, 0xa9, 0xb9, 0xd7, + 0x43, 0x89, 0x7d, 0x78, 0x05, 0x65, 0x1a, 0x13, 0x37, 0x0f, + 0x22, 0xb7, 0x8e, 0xe8, 0xe2, 0x3a, 0x42, 0xa3, 0x3e, 0x11, + 0xae, 0x4f, 0x7e, 0x15, 0xcd, 0x34, 0xc6, 0xd4, 0x53, 0xa7, + 0xdb, 0xfe, 0x0c, 0xe2, 0x82, 0x82, 0x9d, 0x52, 0x8d, 0xb1, + 0x5a, 0x61, 0xfb, 0xba, 0x77, 0xc3, 0x4f, 0xcf, 0x20, 0x12, + 0x99, 0x56, 0x67, 0x0f, 0x56, 0x8c, 0x0c, 0xbc, 0x0c, 0x25, + 0x2a, 0xbe, 0x77, 0x22, 0xc6, 0xb4, 0x50, 0xb7, 0xe2, 0x10, + 0xca, 0x2c, 0xff, 0x97, 0xe6, 0xc8, 0x58, 0x75, 0x07, 0x5c, + 0x55, 0x77, 0xd2, 0xdb, 0x30, 0x2a, 0x5e, 0x18, 0x4f, 0x5b, + 0x4e, 0x1f, 0x2d, 0x6d, 0x1e, 0x3c, 0x8e, 0x9a, 0x73, 0x4e, + 0x57, 0x85, 0x59, 0x86, 0x84, 0x30, 0x08, 0x8e, 0xf9, 0x97, + 0xca, 0x91, 0x58, 0x6d, 0x93, 0x0f, 0x75, 0x77, 0xd2, 0xdf, + 0x30, 0x2a, 0x1f, 0x18, 0x4f, 0x4b, 0x4e, 0x1f, 0x2d, 0x6d, + 0x1c, 0x3c, 0x8e, 0x9a, 0x73, 0x4e, 0x57, 0x85, 0x59, 0x86, + 0x44, 0x10, 0x0a, 0x8e, 0xfb, 0x97, 0xce, 0x91, 0x58, 0x65, + 0x13, 0x0f, 0x8a, 0x88, 0x2d, 0x20, 0xcf, 0xd5, 0xe0, 0xe7, + 0xb0, 0xb4, 0xb1, 0xe0, 0xd2, 0x92, 0xe3, 0xc3, 0x71, 0x65, + 0x8c, 0xb1, 0xa8, 0x7a, 0xa6, 0x79, 0xbb, 0xef, 0xf5, 0x71, + 0x04, 0x68, 0x31, 0x6e, 0xa7, 0x9a, 0xec, 0xf0, 0x04, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, + 0x04, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x05, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x03, 0x00, + 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, + 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, + 0x04, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, + 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, + 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, + 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, + 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x04, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x07, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, + 0x04, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x02, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x07, 0x00, + 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x04, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x01, 0x00, + 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, + 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x03, 0x00, + 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, + 0x07, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x05, 0x00, + 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x06, 0x49, 0x9e, 0x07, + 0xe9, 0x01, 0x2d, 0x8a, 0xb5, 0xeb, 0x9d, 0x21, 0x31, 0xbb, + 0x4c, 0x26, 0xee, 0xda, 0xae, 0x11, 0x8f, 0x95, 0x1a, 0xa9, + 0x74, 0xae, 0xda, 0x53, 0x58, 0xd8, 0x92, 0x81, 0x55, 0xaf, + 0x14, 0x79, 0x72, 0x01, 0xff, 0xb4, 0xac, 0xc4, 0x33, 0xa8, + 0xc0, 0xea, 0xee, 0xe4, 0x8f, 0xe7, 0xfc, 0xbf, 0x3a, 0xd5, + 0x17, 0x01, 0x0d, 0xb3, 0x21, 0x52, 0x58, 0x58, 0x53, 0x44, + 0x71, 0x0b, 0xf0, 0x6d, 0x90, 0xb6, 0x1d, 0x86, 0x3c, 0x9d, + 0xa1, 0xa3, 0xa6, 0xcd, 0xfc, 0x03, 0xd3, 0x50, 0x63, 0xf0, + 0xd0, 0x0c, 0x31, 0x6e, 0x9d, 0x8c, 0xdc, 0x4d, 0xde, 0x0d, + 0x0c, 0xb2, 0x30, 0xdf, 0xe2, 0x05, 0x56, 0x09, 0x3c, 0x37, + 0x81, 0x81, 0x7c, 0x37, 0x94, 0x6f, 0x2e, 0x96, 0x18, 0xa6, + 0xe7, 0x7e, 0x50, 0xc8, 0x49, 0x51, 0x6d, 0x25, 0x1f, 0x47, + 0xae, 0x18, 0xf8, 0xc1, 0x9f, 0x12, 0xdb, 0x04, 0xe9, 0x45, + 0xde, 0x93, 0x20, 0x63, 0xa9, 0xaa, 0x22, 0xf8, 0x42, 0x0d, + 0x84, 0x73, 0x47, 0xc5, 0xbc, 0x83, 0xf9, 0x53, 0x05, 0xdb, + 0x7c, 0xbe, 0x9c, 0xb0, 0xd5, 0x4a, 0x1c, 0xcd, 0xba, 0xa8, + 0xb2, 0xf6, 0x0a, 0x36, 0x70, 0x17, 0x1b, 0x9d, 0x4e, 0x8c, + 0xb0, 0xae, 0xdf, 0x75, 0x35, 0xdb, 0xf4, 0x93, 0x7f, 0x9f, + 0x3a, 0xaa, 0xa0, 0x59, 0x61, 0xdf, 0x6b, 0x23, 0xff, 0x36, + 0x4d, 0x2a, 0xbc, 0x80, 0x9a, 0x08, 0x8e, 0x67, 0x68, 0x72, + 0x3c, 0x14, 0x1b, 0xbd, 0x0c, 0x08, 0xd1, 0xcb, 0xfa, 0xf8, + 0x64, 0x9f, 0xf4, 0x93, 0x6f, 0x9f, 0x3a, 0xaa, 0xa0, 0x59, + 0x61, 0xdf, 0x69, 0x23, 0xbe, 0x36, 0x5d, 0x4a, 0xbc, 0x80, + 0xba, 0x48, 0x8e, 0x76, 0x68, 0x72, 0x3c, 0x17, 0x1b, 0xbd, + 0x0c, 0x88, 0xf1, 0xaa, 0xfa, 0xf8, 0x64, 0x9f, 0x0b, 0x6c, + 0x90, 0x60, 0xc5, 0x55, 0x5f, 0xa6, 0x9e, 0x20, 0x96, 0xdc, + 0x41, 0xc9, 0xa2, 0xb5, 0x43, 0x7f, 0x45, 0xb7, 0x71, 0x89, + 0x97, 0x8d, 0xc3, 0xe8, 0xe4, 0x42, 0xf3, 0x77, 0x0e, 0x55, + 0x05, 0x07, 0x9b, 0x60, 0x3b, 0xc3, 0x20, 0x74, 0xc0, 0x66, + 0xcf, 0xb0, 0x7c, 0xde, 0x76, 0x5a, 0xef, 0xaa, 0x0d, 0x0f, + 0xe7, 0xb8, 0x08, 0x58, 0xc1, 0x83, 0x67, 0x7e, 0x5b, 0x56, + 0x69, 0x45, 0x8b, 0xa6, 0x5f, 0xa5, 0x0c, 0xd4, 0x59, 0x3b, + 0xe7, 0xd5, 0x8a, 0xae, 0xd8, 0xe5, 0x09, 0xfc, 0xbf, 0xe6, + 0x48, 0x83, 0x51, 0x7e, 0xbb, 0x65, 0x2d, 0x3a, 0xc3, 0xfb, + 0xee, 0x3c, 0x9b, 0x34, 0x52, 0xed, 0x53, 0x3c, 0xeb, 0x3c, + 0x7f, 0x12, 0xc9, 0xf7, 0xb3, 0x6c, 0x44, 0x19, 0x41, 0x57, + 0xa8, 0x34, 0x45, 0x50, 0x01, 0x73, 0x85, 0x1c, 0x34, 0x7f, + 0x05, 0xf5, 0x0d, 0x13, 0x6f, 0xee, 0x7c, 0xe4, 0x7e, 0xbd, + 0xae, 0xf4, 0xc5, 0x12, 0xa4, 0xa2, 0xc6, 0x82, 0x3f, 0x4f, + 0x9c, 0xe4, 0xd8, 0xfa, 0x83, 0xa5, 0xaa, 0xf3, 0x56, 0x6e, + 0xe1, 0x36, 0x4e, 0x44, 0x8e, 0x94, 0xbf, 0x39, 0xb2, 0xfb, + 0x43, 0xc4, 0x28, 0xa1, 0x79, 0xad, 0x14, 0x94, 0xc9, 0xd9, + 0x32, 0x2d, 0x67, 0xc1, 0x39, 0x8e, 0x1e, 0xea, 0x0a, 0xf6, + 0x52, 0x72, 0x50, 0x2e, 0xea, 0xc5, 0x26, 0x8a, 0xd0, 0x1f, + 0x58, 0xb6, 0xb0, 0x63, 0x9f, 0x80, 0xf1, 0x75, 0xfc, 0xb0, + 0x0b, 0xf3, 0xfb, 0xf4, 0x3c, 0xc1, 0xa7, 0xf2, 0x97, 0xe8, + 0x7d, 0x73, 0x2e, 0xdd, 0x4f, 0x9e, 0xd3, 0x6c, 0x7a, 0x2c, + 0xe2, 0xc4, 0xb4, 0x72, 0xe6, 0x08, 0xb8, 0x3c, 0xfa, 0x10, + 0xbf, 0xd1, 0x77, 0x78, 0xfe, 0xa2, 0x9b, 0xfd, 0x3c, 0xf5, + 0xcd, 0x40, 0xa6, 0xe3, 0x16, 0xc9, 0x34, 0xb6, 0x17, 0xcb, + 0x4f, 0xde, 0xd2, 0x6c, 0x7a, 0x2c, 0xe2, 0xc4, 0xb4, 0x12, + 0xe6, 0x0b, 0xb8, 0x3c, 0xfa, 0x70, 0x9f, 0xd1, 0x75, 0x70, + 0xfe, 0xa2, 0x1b, 0xfd, 0x3c, 0xf4, 0xcd, 0x40, 0xa6, 0xe3, + 0x16, 0xc9, 0x3c, 0xb6, 0x1f, 0xcb, 0xb0, 0x21, 0x2d, 0x93, + 0x85, 0xd3, 0x1d, 0x3b, 0x4b, 0xed, 0x19, 0xf4, 0x47, 0xc3, + 0x05, 0x8f, 0x60, 0x2e, 0x8a, 0x8f, 0x01, 0x5d, 0xe4, 0x02, + 0xc3, 0x0b, 0x32, 0xbf, 0x59, 0x1c, 0xe9, 0x36, 0xc3, 0x49, + 0xe0, 0x34, 0x02, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, + 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, + 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x04, 0x00, + 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, + 0x07, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x05, 0x00, + 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x05, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x02, 0x00, + 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, + 0x03, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x06, 0x00, + 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x00, + 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, + 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, + 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x01, 0x00, + 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x05, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x07, 0x00, + 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, + 0x04, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x05, 0x00, + 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, + 0xe8, 0x14, 0x48, 0x7f, 0x8b, 0xeb, 0x9f, 0x7c, 0xca, 0xb0, + 0x52, 0x6e, 0x5f, 0x99, 0x14, 0xd0, 0xb5, 0x63, 0x02, 0x98, + 0x38, 0x27, 0xae, 0x2e, 0xe6, 0x53, 0xc4, 0x0b, 0x29, 0x25, + 0x51, 0xc9, 0x66, 0x59, 0x26, 0x57, 0x90, 0xd1, 0x8e, 0x40, + 0xf1, 0x46, 0x29, 0x9f, 0xce, 0xd6, 0xa1, 0xb5, 0x35, 0x3e, + 0xd6, 0x11, 0x29, 0x73, 0xba, 0xeb, 0x85, 0x88, 0x07, 0x27, + 0x45, 0x47, 0xdd, 0xac, 0xcc, 0xe8, 0x0b, 0x7e, 0x94, 0x62, + 0xbd, 0x9a, 0x4f, 0x9c, 0xe8, 0x8f, 0xa1, 0x8a, 0x0d, 0x8c, + 0xbb, 0x30, 0x7a, 0x90, 0xcb, 0x26, 0x0f, 0xd8, 0x5b, 0x4f, + 0x2b, 0x3a, 0xb3, 0xee, 0x82, 0x4c, 0xe8, 0xd1, 0x04, 0xcd, + 0xa4, 0x34, 0xbd, 0x08, 0xd9, 0x4e, 0x8b, 0xf2, 0x3b, 0x17, + 0xb9, 0x7d, 0x9a, 0xc5, 0xa8, 0x8c, 0xd3, 0xf7, 0x47, 0x26, + 0xa0, 0xb2, 0x1b, 0xb9, 0x6b, 0x33, 0xbe, 0x76, 0x5a, 0x6d, + 0xdb, 0x31, 0x29, 0x79, 0xd5, 0x8c, 0x9b, 0x5c, 0xd1, 0xce, + 0xc0, 0x60, 0xee, 0x26, 0x8a, 0xd1, 0x76, 0x1e, 0x0e, 0xcf, + 0xa9, 0xe0, 0xc7, 0xf8, 0x36, 0x5f, 0x58, 0xaa, 0xd4, 0xcd, + 0x4c, 0x21, 0x60, 0xaf, 0xaf, 0x69, 0x16, 0x92, 0x3a, 0xf3, + 0x55, 0xf5, 0x5f, 0x39, 0xec, 0x41, 0x1f, 0x0b, 0xf4, 0xc3, + 0x4c, 0x17, 0x60, 0x1c, 0xb6, 0xcf, 0x09, 0x9e, 0x56, 0x9c, + 0xba, 0x86, 0xfa, 0xab, 0xd4, 0x9e, 0x5e, 0x9a, 0xa1, 0x97, + 0xaf, 0xa3, 0x24, 0xb5, 0x1a, 0xfb, 0x65, 0x9d, 0xe9, 0x2f, + 0xb8, 0x08, 0x8d, 0x08, 0x45, 0x43, 0x4c, 0x17, 0x60, 0x1c, + 0xb6, 0xcf, 0x89, 0x8e, 0x77, 0xd8, 0xba, 0x86, 0xfa, 0xaa, + 0xd6, 0x9e, 0x5e, 0x3a, 0xa0, 0x97, 0xaf, 0xa3, 0x14, 0xb5, + 0x1a, 0xfb, 0x45, 0x9d, 0xf9, 0x2f, 0xb8, 0x08, 0x8f, 0x0a, + 0xe5, 0x43, 0xb3, 0xe8, 0x9f, 0xe3, 0x49, 0x30, 0x76, 0x71, + 0x88, 0x27, 0x45, 0x79, 0x05, 0x55, 0x29, 0x61, 0xa1, 0xc5, + 0x5f, 0x68, 0x50, 0x5c, 0xeb, 0x4a, 0xe5, 0x04, 0xba, 0x62, + 0x06, 0xd0, 0x47, 0xf7, 0x70, 0xf5, 0x1a, 0xbc, 0xa2, 0x30, + 0x75, 0x19, 0x16, 0x9a, 0x6f, 0x93, 0x72, 0xeb, 0x7a, 0x9b, + 0x3c, 0xa4, 0xd0, 0xb3, 0x5f, 0x0f, 0x74, 0xa4, 0x89, 0xab, + 0xe4, 0x58, 0x80, 0x28, 0x1c, 0xb6, 0x1e, 0x71, 0xd8, 0x1f, + 0xac, 0xe1, 0x14, 0x0b, 0x7d, 0xce, 0xdd, 0x0d, 0xf3, 0x9e, + 0xb7, 0x29, 0x53, 0xc4, 0x92, 0x28, 0xfc, 0xb8, 0x43, 0x55, + 0x31, 0xee, 0x42, 0x18, 0xb9, 0x6d, 0xb2, 0xe0, 0x74, 0x7a, + 0x86, 0x52, 0xf7, 0x71, 0x2c, 0x21, 0x6f, 0x4e, 0xad, 0x80, + 0xf4, 0xa9, 0xc8, 0xd7, 0xbf, 0x8b, 0x95, 0x27, 0xfd, 0x2e, + 0x88, 0x84, 0xeb, 0x0b, 0x45, 0xbb, 0xf0, 0x0c, 0x16, 0x00, + 0x89, 0x96, 0xa5, 0x39, 0xee, 0x7c, 0xbe, 0x7b, 0xbf, 0xec, + 0xfa, 0xe4, 0xa4, 0xde, 0x0d, 0x00, 0xf4, 0xa1, 0xc6, 0xb4, + 0x38, 0xc5, 0xa8, 0xd5, 0x26, 0x5c, 0xc5, 0x89, 0x78, 0x0c, + 0x64, 0xdb, 0x9b, 0x3b, 0x7f, 0x9d, 0x30, 0x9f, 0xe0, 0xa9, + 0x8a, 0xdb, 0xa3, 0x66, 0x5f, 0x47, 0x6e, 0x25, 0x6e, 0x07, + 0x1d, 0x3f, 0x0e, 0xae, 0x85, 0x10, 0x2c, 0x79, 0x84, 0xa7, + 0xe7, 0xc0, 0xf4, 0x04, 0xc0, 0xae, 0xc1, 0xe0, 0x5b, 0x20, + 0x64, 0x30, 0xe2, 0x3c, 0x85, 0x8b, 0xeb, 0x0f, 0x9d, 0xcc, + 0x60, 0xe8, 0xc0, 0x7e, 0xd0, 0x82, 0x2b, 0xd3, 0x8c, 0xa7, + 0xc4, 0x5d, 0x2e, 0xd1, 0xa4, 0xeb, 0x83, 0xa0, 0xa4, 0x17, + 0x89, 0x9f, 0xdd, 0x61, 0xcb, 0x11, 0x62, 0x31, 0xb2, 0x8d, + 0x90, 0x89, 0xb0, 0x8a, 0x88, 0xe8, 0xe3, 0xfb, 0xc5, 0x3e, + 0x48, 0x96, 0x2f, 0xd8, 0x8c, 0xa3, 0xc4, 0x5d, 0x2e, 0xd1, + 0xa4, 0xa3, 0xc3, 0x80, 0xa4, 0x05, 0xc8, 0x8f, 0xd5, 0x61, + 0xcb, 0x11, 0x66, 0x31, 0xb0, 0x8d, 0x90, 0x89, 0xb8, 0x0a, + 0x88, 0xc8, 0xe3, 0xfb, 0xc5, 0x3e, 0x48, 0xb6, 0x2f, 0xda, + 0x73, 0x5c, 0x3b, 0xa2, 0xd1, 0x2e, 0x5b, 0x5c, 0x3c, 0x7f, + 0x5b, 0xfa, 0x37, 0x70, 0x2a, 0x9e, 0x34, 0xee, 0x99, 0xce, + 0x4f, 0x72, 0x6f, 0x76, 0x47, 0xf5, 0x77, 0x37, 0x1c, 0x04, + 0x3a, 0xc1, 0xb7, 0x69, 0xd0, 0x25, 0x07, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, + 0x03, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x07, 0x00, + 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x04, 0x00, + 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x05, 0x00, + 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x04, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x07, 0x00, + 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, + 0x03, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, + 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x06, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x06, 0x00, + 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x01, 0x00, + 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, + 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x04, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x04, 0x00, + 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, + 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, + 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, + 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x07, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x05, 0x00, + 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, + 0x07, 0x00, 0x00, 0x00, 0x6d, 0x7e, 0xe7, 0x0c, 0xf1, 0xbe, + 0xc7, 0x85, 0x6a, 0xb1, 0x59, 0xe4, 0xba, 0x42, 0x1d, 0xfb, + 0x49, 0xf7, 0xb7, 0x21, 0x84, 0x1b, 0x90, 0xd9, 0x66, 0xa9, + 0x39, 0x79, 0xab, 0x89, 0xfb, 0x16, 0x68, 0x18, 0xd1, 0x2a, + 0x23, 0xda, 0xf3, 0xb2, 0xb5, 0xae, 0x1c, 0xd5, 0xed, 0x91, + 0xf7, 0xe3, 0x67, 0x09, 0x0a, 0x11, 0xf0, 0xf1, 0x92, 0x9d, + 0xde, 0xc4, 0x9a, 0x32, 0xa4, 0xb5, 0xa2, 0xa6, 0x68, 0x73, + 0xd3, 0xe3, 0x12, 0x0c, 0x93, 0x8f, 0x6f, 0x4f, 0x5b, 0xac, + 0xd0, 0x65, 0xb7, 0x72, 0xc7, 0x23, 0xb4, 0xa8, 0x10, 0x30, + 0x58, 0x32, 0xad, 0x3c, 0x7d, 0x86, 0xd0, 0xbe, 0xc6, 0x1d, + 0x3f, 0x04, 0xdb, 0xbc, 0x56, 0x74, 0x20, 0x4f, 0xa4, 0xc6, + 0x9e, 0x7a, 0xc5, 0xea, 0x03, 0xa1, 0x21, 0x5e, 0x2e, 0xe9, + 0xd3, 0xad, 0xc2, 0xd2, 0xf4, 0xd2, 0xe7, 0x33, 0xe3, 0x1c, + 0xb5, 0xbc, 0x26, 0x4b, 0x0c, 0x8f, 0x3d, 0xbd, 0x6c, 0x21, + 0xc2, 0x98, 0xc7, 0x5d, 0x65, 0x7a, 0x46, 0x71, 0x7b, 0xe3, + 0xa5, 0xe4, 0xd2, 0x2d, 0x10, 0xe7, 0x29, 0x36, 0x44, 0x2e, + 0x56, 0x79, 0x52, 0xad, 0xb4, 0x60, 0x7f, 0xb6, 0x5a, 0x48, + 0x03, 0x09, 0x98, 0x74, 0x73, 0x7c, 0xab, 0xc1, 0x09, 0x21, + 0x21, 0x7c, 0x48, 0x6c, 0x81, 0x42, 0x89, 0x94, 0xf4, 0x7d, + 0x1e, 0xdf, 0x8b, 0xd3, 0x80, 0xbb, 0x79, 0x96, 0xd9, 0x15, + 0x38, 0x41, 0x2f, 0x21, 0xc8, 0x09, 0x04, 0x88, 0xb8, 0x24, + 0x20, 0x78, 0x92, 0x65, 0x7d, 0x75, 0x1f, 0xfb, 0xfa, 0x6d, + 0x81, 0xe2, 0xa9, 0xd4, 0xf4, 0x7d, 0x1e, 0xdf, 0x8b, 0xf7, + 0x84, 0xbb, 0x79, 0xd6, 0xdb, 0x15, 0xa8, 0x60, 0x2f, 0x30, + 0x5a, 0x09, 0x0c, 0x88, 0xb8, 0x24, 0x28, 0x78, 0x9a, 0x65, + 0x6d, 0x75, 0x0d, 0xff, 0xfa, 0x6d, 0x7e, 0x1d, 0x56, 0x2b, + 0x0b, 0x82, 0xe1, 0x20, 0x74, 0x08, 0x7b, 0x44, 0x86, 0x29, + 0x24, 0xea, 0x57, 0x9f, 0xd0, 0xcf, 0xa5, 0xf6, 0xf3, 0x77, + 0x47, 0xdb, 0xd7, 0x87, 0x65, 0x9a, 0x92, 0x8a, 0xf2, 0x00, + 0x05, 0x92, 0x19, 0x2a, 0x53, 0x46, 0x71, 0x4d, 0x03, 0xf2, + 0x9c, 0x90, 0x95, 0x6a, 0x26, 0x2b, 0x66, 0xae, 0x2d, 0x89, + 0x0e, 0x1e, 0x95, 0x73, 0x1c, 0xbe, 0x89, 0xa0, 0x3d, 0x24, + 0x04, 0x0c, 0x06, 0xc0, 0x6e, 0x21, 0x92, 0x1c, 0xd4, 0x81, + 0x43, 0xd5, 0xbe, 0xdb, 0xda, 0x11, 0xf5, 0x7d, 0xaf, 0x66, + 0xe2, 0xd7, 0x14, 0xc6, 0x1a, 0x47, 0x1c, 0xe0, 0x12, 0x4b, + 0xb9, 0x3b, 0xe6, 0xe5, 0x6b, 0x3b, 0x63, 0x11, 0x9a, 0x48, + 0xd3, 0xe7, 0xd4, 0xb5, 0xd9, 0xdf, 0x5c, 0xb3, 0x8e, 0x17, + 0x04, 0xbc, 0x54, 0x55, 0x02, 0xb8, 0x28, 0x6f, 0x54, 0x4b, + 0x9b, 0x67, 0x6a, 0x98, 0xe7, 0xb3, 0x1c, 0x2f, 0xf5, 0x5a, + 0x10, 0x18, 0x48, 0x77, 0x67, 0x9f, 0xbe, 0x88, 0xdc, 0xa3, + 0xb4, 0xcb, 0x64, 0x20, 0x98, 0xfb, 0x64, 0x78, 0x11, 0xaa, + 0x31, 0x7a, 0x3c, 0x2b, 0x25, 0x9a, 0x15, 0xc6, 0xc8, 0x69, + 0x5e, 0xc3, 0x9b, 0x4c, 0xe4, 0xec, 0x58, 0xfa, 0x08, 0x71, + 0xa1, 0x79, 0x8f, 0xeb, 0xd8, 0x41, 0xf2, 0x1f, 0xe0, 0x32, + 0x0a, 0x08, 0x1c, 0x90, 0x7f, 0xf7, 0x6c, 0xf5, 0x31, 0x4d, + 0x55, 0x5c, 0xc0, 0x9c, 0xdb, 0x94, 0x14, 0xac, 0x32, 0xd2, + 0xbf, 0xf8, 0xb4, 0x29, 0x4a, 0xec, 0x1e, 0xc4, 0x3a, 0xfc, + 0x34, 0x74, 0x36, 0x0e, 0xe0, 0xb1, 0x3a, 0x09, 0x82, 0xfa, + 0x5d, 0x6d, 0x33, 0x99, 0x65, 0x0f, 0x79, 0x0e, 0xf2, 0x27, + 0x03, 0xa7, 0x14, 0xa0, 0x18, 0xe3, 0x8d, 0xe4, 0xb0, 0x2b, + 0x68, 0x99, 0x09, 0xa6, 0xdb, 0xd2, 0x12, 0x3a, 0xb6, 0x0f, + 0xe0, 0xb1, 0x1a, 0x09, 0x80, 0xfa, 0x5d, 0xed, 0x31, 0x99, + 0x65, 0x4f, 0x7d, 0x0e, 0xf1, 0x27, 0x03, 0xb5, 0x14, 0xa0, + 0x18, 0xe3, 0x8d, 0xe4, 0xb0, 0x2b, 0x68, 0x99, 0x0b, 0xa4, + 0xdb, 0xd8, 0x12, 0x3a, 0x49, 0xf0, 0x1f, 0x4e, 0xe5, 0xf6, + 0x7f, 0x05, 0xa2, 0x12, 0xce, 0x66, 0x9a, 0xb0, 0x82, 0xf1, + 0x0e, 0xd8, 0xfc, 0x4a, 0xeb, 0x5f, 0xe7, 0x1c, 0x72, 0x1b, + 0x4f, 0xd4, 0x97, 0x66, 0xf4, 0x5b, 0x24, 0x27, 0xed, 0xc5, + 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x00, + 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x01, 0x00, + 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, + 0x05, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x07, 0x00, + 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x05, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x06, 0x00, + 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, + 0x05, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x05, 0x00, + 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, + 0x03, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x04, 0x00, + 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, + 0x03, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x04, 0x00, + 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0xd2, 0xc2, + 0x63, 0x6b, 0x40, 0x0d, 0x57, 0xed, 0x9b, 0xb6, 0x8f, 0x44, + 0xcb, 0x86, 0x60, 0x0a, 0xc3, 0xcd, 0xc2, 0x66, 0x23, 0xbf, + 0xa1, 0x17, 0x66, 0x3e, 0xb9, 0xb6, 0x91, 0xc0, 0x53, 0x8a, + 0xf6, 0x70, 0x08, 0x76, 0xb0, 0x07, 0x46, 0xe9, 0xec, 0x5d, + 0x6e, 0x02, 0x4e, 0x89, 0x69, 0x25, 0x9c, 0x53, 0xd7, 0x41, + 0x04, 0x51, 0x55, 0xfa, 0x4b, 0x8e, 0x37, 0x44, 0xbf, 0xe5, + 0x14, 0x86, 0xfd, 0x64, 0x5b, 0x61, 0x5c, 0x65, 0x06, 0x48, + 0x3d, 0x26, 0x86, 0x06, 0x34, 0x34, 0x61, 0x70, 0x7b, 0x09, + 0x1b, 0xb1, 0xf2, 0xaa, 0xd8, 0x0d, 0xa1, 0x23, 0x73, 0xdb, + 0x28, 0x32, 0xac, 0x3d, 0x81, 0x5e, 0x1f, 0x9d, 0xa0, 0x98, + 0xb3, 0xf9, 0xf3, 0xba, 0xbd, 0xff, 0x74, 0x50, 0x3a, 0x55, + 0x6d, 0xae, 0x0e, 0xbc, 0xc8, 0x92, 0x1f, 0x02, 0x78, 0xe2, + 0xd3, 0xbe, 0xcf, 0xc7, 0xa2, 0x19, 0x11, 0x2c, 0x47, 0x97, + 0x28, 0xc8, 0x38, 0xc6, 0xd8, 0x1e, 0xb2, 0x7e, 0xdf, 0x70, + 0xde, 0x20, 0x62, 0x29, 0x96, 0x83, 0x8c, 0x32, 0x7f, 0x45, + 0x18, 0x6f, 0xff, 0xae, 0x49, 0xb8, 0x2d, 0x0d, 0xe1, 0xd3, + 0xaf, 0x66, 0x7e, 0x79, 0x59, 0x0e, 0xa3, 0xfb, 0x07, 0x13, + 0x6d, 0x8c, 0xa0, 0x6f, 0x7a, 0x4c, 0x81, 0x4d, 0x24, 0x41, + 0xff, 0x02, 0x49, 0x1e, 0x6d, 0x4e, 0x8b, 0x17, 0xf6, 0xac, + 0x40, 0x8b, 0xfd, 0x2d, 0x04, 0xf0, 0x07, 0x49, 0x01, 0x78, + 0x53, 0x09, 0x09, 0xeb, 0x1d, 0x13, 0xa9, 0xc9, 0xa0, 0x3c, + 0x56, 0xfc, 0x25, 0x4f, 0x24, 0x41, 0xbe, 0x03, 0x4d, 0x1e, + 0x6d, 0x4c, 0x89, 0x17, 0xf6, 0xad, 0x40, 0x8b, 0xfd, 0x2d, + 0x05, 0xf0, 0x27, 0x69, 0x01, 0x78, 0x53, 0x09, 0x09, 0xeb, + 0x1d, 0x13, 0xe9, 0xcc, 0xa0, 0x3c, 0x5e, 0xfc, 0xa1, 0x4f, + 0xdb, 0xbe, 0x41, 0xfc, 0xb2, 0xe1, 0x92, 0xb3, 0x76, 0xe8, + 0x09, 0x52, 0xbf, 0x74, 0x02, 0xd2, 0xfa, 0x0f, 0xd8, 0x96, + 0xfe, 0x87, 0xac, 0xf6, 0xf6, 0x14, 0xe2, 0xec, 0x16, 0x33, + 0x5f, 0xc3, 0xa1, 0x03, 0x5e, 0xb0, 0x92, 0xd5, 0x27, 0x71, + 0x63, 0x8b, 0x06, 0xbe, 0x52, 0xdb, 0x4b, 0x28, 0xb4, 0x83, + 0xee, 0x62, 0xd4, 0xdc, 0x85, 0xfc, 0x1f, 0xcb, 0xb5, 0x3a, + 0x39, 0x42, 0x2e, 0xa4, 0x6a, 0x78, 0xe5, 0x10, 0xe6, 0x6b, + 0xe2, 0x7f, 0x03, 0xcf, 0xbd, 0x9f, 0x0c, 0x9a, 0x6e, 0x07, + 0x4b, 0x42, 0xb8, 0x5f, 0x12, 0x6e, 0x90, 0x2e, 0xf4, 0xce, + 0x22, 0xbe, 0x18, 0x05, 0x85, 0x0d, 0xb4, 0xe7, 0x53, 0xbb, + 0x9b, 0x4f, 0x52, 0x29, 0xbf, 0x72, 0x14, 0x24, 0x28, 0x36, + 0x20, 0xe6, 0x9f, 0x5a, 0xb2, 0xa4, 0xdf, 0x4a, 0xf7, 0xf9, + 0xb8, 0xd7, 0x0c, 0x42, 0x99, 0xad, 0x58, 0xae, 0x70, 0x06, + 0x97, 0xde, 0x39, 0x3d, 0x20, 0xca, 0xbc, 0x36, 0xd4, 0x74, + 0x81, 0xa6, 0x1c, 0x47, 0x85, 0x65, 0xde, 0xb5, 0xe1, 0x92, + 0x8c, 0x4f, 0x67, 0x39, 0x61, 0x83, 0xff, 0x36, 0x25, 0xee, + 0x15, 0x45, 0x78, 0x52, 0xca, 0xdc, 0x9a, 0xee, 0x10, 0xda, + 0xd9, 0x09, 0x1a, 0xc6, 0x7a, 0xfb, 0x57, 0xc1, 0x95, 0x5c, + 0x1b, 0x35, 0xc6, 0x95, 0xd3, 0x37, 0xed, 0xe6, 0xd9, 0xf9, + 0x4f, 0x9a, 0x7e, 0x9d, 0x0f, 0x2c, 0x6b, 0xde, 0x8c, 0x39, + 0x6d, 0x7e, 0x74, 0xe1, 0x4b, 0x7b, 0xaf, 0xbd, 0x08, 0xa9, + 0x9d, 0x1b, 0x85, 0x60, 0x19, 0xac, 0x54, 0x55, 0x43, 0x1d, + 0x53, 0x76, 0xf2, 0xae, 0xbd, 0x59, 0x66, 0x92, 0x99, 0x66, + 0x52, 0xe8, 0x55, 0x9f, 0x2d, 0x2c, 0x0b, 0xbf, 0xa4, 0x60, + 0x56, 0xf9, 0x6f, 0x6f, 0x40, 0xa4, 0xb5, 0x5b, 0xb3, 0xc1, + 0x23, 0x85, 0x54, 0x51, 0x42, 0x15, 0x53, 0x36, 0xfe, 0xae, + 0xbf, 0x59, 0x6f, 0x92, 0x9f, 0x74, 0x46, 0xa8, 0x55, 0x9f, + 0x2d, 0x2c, 0x0b, 0x7f, 0xb4, 0xe0, 0x12, 0xf9, 0x6f, 0x2f, + 0x48, 0xa4, 0xb5, 0x5b, 0xb3, 0xc0, 0x13, 0x85, 0xab, 0xae, + 0xbd, 0xea, 0xac, 0xc9, 0x01, 0x51, 0x40, 0xa6, 0x90, 0x6d, + 0x60, 0x8b, 0xb9, 0x57, 0xaa, 0x60, 0xd2, 0xd3, 0xf4, 0x80, + 0x4b, 0x1f, 0xed, 0x06, 0x90, 0xd0, 0xb7, 0x5b, 0x4a, 0xa4, + 0x4c, 0x3f, 0xec, 0x7a, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, + 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x07, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x06, 0x00, + 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x04, 0x00, + 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x06, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, + 0x05, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x06, 0x00, + 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x05, 0x00, + 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x05, 0x00, + 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x04, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x05, 0x00, + 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x07, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, + 0x04, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x07, 0x00, + 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x05, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, + 0x05, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x02, 0x00, + 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x03, 0x00, + 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x05, 0x00, + 0x00, 0x00, 0x62, 0x0f, 0xc7, 0x45, 0x3e, 0x48, 0xc7, 0x20, + 0xaf, 0x96, 0x33, 0x26, 0xd7, 0xfc, 0x52, 0x2f, 0x0d, 0x11, + 0xc7, 0x22, 0x77, 0xb8, 0x15, 0x45, 0x6c, 0x66, 0x0e, 0x3b, + 0x26, 0x6e, 0xd1, 0x3c, 0x09, 0xa2, 0x73, 0xc4, 0x59, 0x82, + 0xe4, 0xb3, 0xae, 0x9f, 0x02, 0xd3, 0x05, 0xb2, 0xef, 0xdd, + 0x24, 0x38, 0xc0, 0x21, 0xf4, 0x84, 0xd7, 0x8b, 0xa3, 0xcb, + 0x3a, 0x55, 0x86, 0xa8, 0x18, 0xab, 0xc0, 0x22, 0xcb, 0x11, + 0x10, 0x5b, 0x61, 0x5b, 0xfa, 0x8b, 0x12, 0x0c, 0x82, 0x01, + 0xab, 0x48, 0x78, 0x53, 0x88, 0x71, 0x6a, 0x84, 0x11, 0x29, + 0xc5, 0x19, 0x70, 0x48, 0xae, 0x6b, 0x30, 0xcc, 0xfe, 0xd9, + 0xe1, 0xf2, 0x02, 0xab, 0x28, 0x15, 0x87, 0x30, 0xb7, 0xba, + 0xa7, 0x80, 0xb4, 0x52, 0x08, 0x9f, 0xf6, 0xf1, 0xbc, 0x9a, + 0xfc, 0x33, 0xac, 0xa1, 0x35, 0x92, 0xb9, 0x72, 0xb2, 0x5a, + 0xab, 0x89, 0x5c, 0xfc, 0x39, 0xac, 0x88, 0xac, 0x87, 0xb6, + 0xbf, 0x55, 0x95, 0xa9, 0x01, 0xcf, 0x76, 0xc3, 0x6b, 0x8e, + 0xbd, 0x4b, 0x6f, 0x31, 0x57, 0xd9, 0x0a, 0x25, 0x48, 0xfd, + 0xe6, 0x88, 0x8b, 0xc1, 0xfd, 0xd2, 0xfd, 0xc4, 0x49, 0x8c, + 0xf3, 0x84, 0xfb, 0xfe, 0x46, 0x8f, 0xf6, 0xea, 0x0d, 0xc3, + 0x60, 0xd4, 0xb7, 0xc7, 0x6b, 0x4e, 0xc0, 0x03, 0xd2, 0xa3, + 0x9d, 0xaa, 0x1a, 0x26, 0x2e, 0xdd, 0xbd, 0x08, 0xab, 0xdc, + 0xf5, 0x56, 0xba, 0xc8, 0xda, 0xcc, 0xf3, 0xad, 0xfd, 0xed, + 0xa6, 0xfe, 0xf1, 0x38, 0x4f, 0x64, 0x20, 0xd2, 0xb7, 0xc3, + 0x6b, 0x4e, 0xd4, 0x03, 0xf2, 0x21, 0x9d, 0x8a, 0x1a, 0x27, + 0x2e, 0xdd, 0x2d, 0x08, 0xab, 0xd8, 0xf5, 0x56, 0xba, 0xc8, + 0x58, 0xcc, 0xf3, 0xac, 0xfd, 0xee, 0xa6, 0xbe, 0xf1, 0x38, + 0x4d, 0xe9, 0x20, 0xd2, 0x48, 0x3c, 0x94, 0xb1, 0x2b, 0xfc, + 0x0d, 0xde, 0x62, 0x75, 0xe5, 0xd8, 0xd1, 0x22, 0xd2, 0xf7, + 0x54, 0x27, 0x0a, 0xa9, 0x45, 0x37, 0xa7, 0x33, 0x0c, 0x53, + 0x02, 0x11, 0x59, 0x41, 0x0e, 0xc7, 0xb2, 0x16, 0xdf, 0x2d, + 0x69, 0xe7, 0x0a, 0x57, 0x1c, 0x6d, 0xd2, 0x4f, 0xd9, 0xaf, + 0x9e, 0x36, 0xf2, 0x12, 0x55, 0x57, 0x3b, 0x05, 0x04, 0x1c, + 0xad, 0xc6, 0x81, 0xd1, 0x14, 0x65, 0x28, 0x4c, 0x1a, 0x9d, + 0x7a, 0x13, 0x56, 0x12, 0xd3, 0x30, 0x15, 0x82, 0xcf, 0x21, + 0x4f, 0x8e, 0x2c, 0x6e, 0x02, 0x3f, 0x0a, 0x1e, 0xd3, 0x08, + 0x47, 0x51, 0x1a, 0x30, 0x88, 0xcd, 0xba, 0xbb, 0x8e, 0xde, + 0x2c, 0xbf, 0x02, 0xd6, 0xa8, 0xcc, 0x17, 0xe8, 0xc7, 0xb0, + 0xf9, 0x06, 0x8e, 0xe5, 0xcc, 0xfb, 0x7b, 0x02, 0xb7, 0x5a, + 0x7a, 0x81, 0x57, 0x40, 0x74, 0x6a, 0xe1, 0x60, 0xf5, 0x94, + 0x90, 0x32, 0x2b, 0xba, 0x6f, 0x67, 0x05, 0xa6, 0xe9, 0xc5, + 0x12, 0xb1, 0x62, 0xa7, 0xe5, 0xdb, 0xa9, 0xb0, 0x79, 0xf4, + 0x93, 0x4b, 0x38, 0xd4, 0x59, 0x72, 0xba, 0x97, 0x67, 0x9c, + 0x47, 0x65, 0xe2, 0x06, 0x19, 0x4c, 0x22, 0xfc, 0x66, 0x4e, + 0x4e, 0x17, 0xb1, 0x64, 0x3c, 0x99, 0x7d, 0xce, 0xd9, 0x80, + 0xb1, 0xde, 0xb0, 0x70, 0xb6, 0x1a, 0x36, 0x91, 0x7c, 0x88, + 0xe4, 0x49, 0x18, 0x7d, 0x0f, 0xfc, 0x56, 0xb3, 0x25, 0xb1, + 0x12, 0x00, 0xf3, 0x77, 0x7a, 0xe7, 0xe4, 0xd2, 0xd8, 0x99, + 0xdb, 0x21, 0x91, 0x0a, 0x0e, 0xef, 0xb2, 0x44, 0x61, 0x6d, + 0x26, 0xb2, 0x3a, 0xca, 0x28, 0x50, 0x84, 0x6d, 0x0b, 0xb8, + 0x47, 0x58, 0x19, 0x86, 0xf3, 0x65, 0x12, 0x96, 0x55, 0xef, + 0xe2, 0xd3, 0x8c, 0xe0, 0xe1, 0x53, 0xbd, 0x00, 0x93, 0xc3, + 0x4a, 0x6f, 0xb2, 0xd8, 0x80, 0x6d, 0x26, 0xb2, 0x32, 0xdb, + 0x28, 0xd0, 0x84, 0x69, 0x1b, 0x39, 0x47, 0xdc, 0x14, 0xa6, + 0xf3, 0x65, 0x12, 0x14, 0x55, 0xff, 0x62, 0xf3, 0x8c, 0xc2, + 0xe1, 0x51, 0xbd, 0x00, 0x93, 0x8b, 0x0a, 0x6f, 0xb2, 0xd8, + 0x00, 0x6d, 0xd9, 0x4d, 0xcd, 0x24, 0xd7, 0x2f, 0x7b, 0x96, + 0xe4, 0xc6, 0xb8, 0x23, 0xeb, 0x59, 0x0c, 0x9a, 0xed, 0xeb, + 0xaa, 0x00, 0x9d, 0x0c, 0x73, 0x3d, 0x1e, 0xae, 0x42, 0xff, + 0x6c, 0x74, 0xf5, 0x90, 0x4d, 0x27, 0xff, 0x92, 0x04, 0x00, + 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, + 0x05, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x04, 0x00, + 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x06, 0x00, + 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x06, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x04, 0x00, + 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x05, 0x00, + 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x07, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x06, 0x00, + 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x06, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x04, 0x00, + 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x07, 0x00, + 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, + 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x04, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x05, 0x00, + 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x04, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x02, 0x00, + 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x07, 0x00, + 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x05, 0x00, + 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0xff, 0x2a, 0x32, 0x76, + 0x13, 0x21, 0x2b, 0x93, 0x80, 0xbd, 0xb3, 0x32, 0x28, 0xa0, + 0x66, 0x6d, 0x12, 0x27, 0xce, 0xb5, 0x07, 0x1c, 0x6c, 0x5d, + 0x87, 0x15, 0x2c, 0xf5, 0x4d, 0x69, 0xd3, 0x9c, 0x4b, 0xb8, + 0x54, 0xa5, 0x1b, 0xcc, 0x35, 0x97, 0x07, 0xb8, 0x7e, 0xb9, + 0xca, 0xa6, 0xb8, 0x31, 0x84, 0x7f, 0x18, 0x5c, 0x4a, 0x62, + 0xfe, 0x8b, 0xe3, 0x8d, 0x7b, 0x9d, 0x97, 0x62, 0xc3, 0x53, + 0xf0, 0x8d, 0x8d, 0x98, 0x37, 0x96, 0xd2, 0xea, 0x5e, 0x2d, + 0xe9, 0xb8, 0x10, 0xc2, 0x40, 0x1b, 0xac, 0x2e, 0xb5, 0x88, + 0x7c, 0x5a, 0x9a, 0x06, 0xcf, 0x6b, 0x91, 0xd1, 0x9f, 0xc5, + 0x3c, 0x62, 0x6c, 0x84, 0xc2, 0x59, 0xe9, 0xad, 0x2d, 0x31, + 0xf3, 0x38, 0x36, 0xaf, 0xd4, 0x11, 0x37, 0x09, 0xee, 0x89, + 0x0e, 0x57, 0x00, 0xca, 0xb4, 0x98, 0x1d, 0x94, 0xad, 0x8c, + 0x62, 0x8b, 0x53, 0x40, 0xf5, 0x27, 0x59, 0x82, 0x58, 0x63, + 0xc2, 0x63, 0x56, 0x6f, 0x16, 0x89, 0x63, 0xd6, 0x21, 0xbc, + 0xe7, 0xf4, 0xef, 0x86, 0x04, 0xff, 0xb2, 0xcf, 0x97, 0x03, + 0xa3, 0xc1, 0xc9, 0xb3, 0x93, 0xeb, 0xc9, 0x49, 0x38, 0x12, + 0xb9, 0x73, 0x5a, 0x7c, 0xf9, 0x7a, 0xc8, 0x05, 0x30, 0x64, + 0x3d, 0xf8, 0x2f, 0xc2, 0x85, 0xe2, 0xe4, 0xb0, 0x66, 0x8b, + 0xb4, 0xda, 0x6f, 0xde, 0x98, 0x63, 0xab, 0x89, 0x9b, 0x3a, + 0x16, 0xda, 0x79, 0x0f, 0x59, 0x12, 0x03, 0x57, 0xd1, 0x94, + 0x1a, 0x7a, 0xc2, 0x61, 0x20, 0xe5, 0xb1, 0x9e, 0x26, 0x9e, + 0x76, 0xe8, 0xe4, 0xb0, 0x67, 0x8b, 0x94, 0x9a, 0x6e, 0xde, + 0x98, 0x23, 0xab, 0x81, 0x99, 0xb2, 0x16, 0xda, 0x79, 0x0f, + 0x79, 0x12, 0x03, 0x57, 0xd9, 0x94, 0x5a, 0x7a, 0xca, 0x61, + 0x30, 0xe5, 0xb1, 0x9c, 0x26, 0x9e, 0x75, 0xe8, 0x1b, 0x4f, + 0x98, 0x74, 0x6b, 0x65, 0x91, 0x21, 0x67, 0xdc, 0x54, 0x7e, + 0x66, 0x4d, 0xe9, 0x25, 0x86, 0xf0, 0x86, 0xed, 0xfc, 0xa8, + 0x26, 0x6b, 0xa5, 0x85, 0x35, 0x9e, 0xcf, 0x1a, 0x4e, 0x63, + 0xd9, 0x61, 0x8a, 0x17, 0x86, 0x89, 0x67, 0x5a, 0x21, 0x61, + 0xee, 0xf3, 0xd1, 0x93, 0x30, 0x01, 0x34, 0xeb, 0xd1, 0x76, + 0x6b, 0x92, 0x6f, 0x67, 0x13, 0xdd, 0x5f, 0x33, 0x15, 0xda, + 0x42, 0x4c, 0x5b, 0xae, 0x0f, 0xa7, 0xb2, 0x5e, 0x1c, 0x71, + 0xfa, 0x4c, 0xe9, 0x5f, 0x35, 0xcb, 0x64, 0xe4, 0x2b, 0x3d, + 0xc8, 0xc1, 0xc5, 0xa1, 0x6a, 0x32, 0xd7, 0x48, 0x9f, 0xe3, + 0xd6, 0xba, 0xdc, 0x7d, 0x8d, 0x3f, 0x82, 0x6f, 0xbf, 0x42, + 0x57, 0xa1, 0x10, 0xf7, 0x98, 0x3e, 0x37, 0x3c, 0xcb, 0x03, + 0x9d, 0x83, 0x3f, 0xe3, 0xae, 0x92, 0x50, 0x49, 0xc6, 0x01, + 0x40, 0xd2, 0xbc, 0xb7, 0xb5, 0xce, 0xac, 0x3e, 0x79, 0x2b, + 0xe4, 0x3d, 0x16, 0xec, 0x3f, 0x69, 0xa9, 0xe9, 0x3f, 0xd7, + 0x9e, 0x79, 0xa7, 0xe7, 0x12, 0x01, 0xae, 0x3b, 0x70, 0x5b, + 0x98, 0x13, 0x53, 0xe6, 0x92, 0x69, 0xcc, 0xe3, 0x4c, 0xe4, + 0x01, 0x47, 0x75, 0x90, 0x2a, 0x69, 0xef, 0x5a, 0xfa, 0xa4, + 0x3d, 0x3b, 0x0c, 0x2f, 0xa9, 0xdf, 0xdc, 0x8f, 0x9a, 0x8f, + 0x2c, 0x9b, 0x7a, 0x1d, 0x91, 0xd0, 0x63, 0x1a, 0xfe, 0xce, + 0xf9, 0x9b, 0xf7, 0x05, 0xf6, 0xef, 0x82, 0xc3, 0xe1, 0x19, + 0x10, 0x16, 0x13, 0xe8, 0x8e, 0x71, 0x88, 0xfc, 0xe6, 0x00, + 0x18, 0xe2, 0xdf, 0xec, 0x8e, 0xed, 0x4f, 0x03, 0xff, 0x8f, + 0x90, 0xfb, 0x2e, 0x22, 0xc5, 0x04, 0x9d, 0x38, 0xb6, 0x66, + 0xb6, 0x37, 0x91, 0xd5, 0x51, 0xf3, 0x38, 0x22, 0xae, 0x60, + 0x92, 0xa0, 0xc8, 0x5c, 0x0e, 0x25, 0x3a, 0x52, 0x54, 0x5c, + 0x8e, 0xed, 0x0e, 0x03, 0xfe, 0x8f, 0x90, 0xda, 0x2b, 0x32, + 0xc5, 0x04, 0x9d, 0x39, 0xb6, 0xe6, 0xb6, 0x37, 0x91, 0xd5, + 0x51, 0xf9, 0x38, 0x22, 0xae, 0x60, 0x9a, 0xa1, 0xc8, 0x5c, + 0x0e, 0x25, 0x3a, 0x52, 0xd4, 0x6c, 0x71, 0x12, 0xf1, 0xfc, + 0x01, 0x70, 0x6f, 0x25, 0xd4, 0xcd, 0x3a, 0xfb, 0x62, 0xc6, + 0x49, 0x19, 0x49, 0xc8, 0x6e, 0x2a, 0xae, 0x06, 0xc7, 0xdd, + 0x51, 0x9f, 0x65, 0x5e, 0x37, 0xa3, 0xf1, 0xda, 0xc5, 0xad, + 0x2b, 0x93, 0x07, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, + 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x01, 0x00, + 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, + 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, + 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, + 0x04, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, + 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, + 0x05, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x07, 0x00, + 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, + 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, + 0x03, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, + 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, + 0x07, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x03, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x05, 0x00, + 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, + 0x03, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x01, 0x00, + 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, + 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, + 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x04, 0x00, + 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x07, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x07, 0x00, + 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, + 0x74, 0x73, 0xb9, 0x06, 0xb5, 0x76, 0x7e, 0x6b, 0x7f, 0xb0, + 0xef, 0x45, 0xc3, 0x06, 0x30, 0x8c, 0x41, 0x38, 0xa6, 0x8a, + 0xec, 0xb8, 0x23, 0xef, 0xa0, 0xec, 0x44, 0x5f, 0x61, 0xbc, + 0xa9, 0xe5, 0x94, 0x5a, 0xba, 0x8f, 0x1e, 0xc6, 0xaf, 0x7f, + 0x39, 0xc0, 0xc2, 0x07, 0xd9, 0x84, 0x3f, 0x77, 0x43, 0xb5, + 0xbc, 0xce, 0x03, 0x25, 0x76, 0x4b, 0x98, 0xd0, 0x0e, 0x53, + 0x79, 0x78, 0x81, 0x7c, 0xcc, 0x99, 0x7f, 0x1d, 0x5c, 0x13, + 0x7a, 0xda, 0x43, 0xd3, 0xda, 0x1a, 0x2f, 0xe8, 0x6b, 0x3d, + 0x21, 0xde, 0xf5, 0x92, 0xcc, 0xe1, 0x12, 0xfd, 0xd9, 0x40, + 0xd2, 0x25, 0xee, 0x85, 0x06, 0x13, 0xd7, 0x64, 0xfb, 0xda, + 0xdd, 0xba, 0xb3, 0xfc, 0x7f, 0x17, 0x2f, 0xe9, 0x26, 0xf2, + 0x20, 0x78, 0xcb, 0xfd, 0x6b, 0x01, 0x18, 0x93, 0x79, 0xf4, + 0xb1, 0x6b, 0x4f, 0xdd, 0x06, 0x0f, 0x84, 0x55, 0x6e, 0xa4, + 0xe9, 0x2e, 0x15, 0xe5, 0x36, 0xf6, 0x99, 0x9d, 0x68, 0x0e, + 0xd0, 0xf1, 0xd1, 0xaa, 0x2b, 0x99, 0x89, 0x25, 0x2b, 0xa6, + 0xcc, 0xa8, 0x1d, 0x91, 0x3d, 0x5f, 0x2c, 0xae, 0x22, 0xfc, + 0x1d, 0x03, 0xd2, 0x34, 0xc3, 0x60, 0xa6, 0x8b, 0x25, 0x8b, + 0x21, 0x0b, 0xc1, 0x85, 0x00, 0xf7, 0x7a, 0xaa, 0x60, 0x66, + 0x3a, 0x7a, 0x3c, 0x39, 0xeb, 0x66, 0x5f, 0x39, 0x5f, 0x47, + 0x1f, 0x5d, 0xfb, 0xbf, 0x34, 0xfc, 0x18, 0x0a, 0xd6, 0x3c, + 0xa2, 0xf4, 0x08, 0x1b, 0x5e, 0x48, 0x61, 0x72, 0xa1, 0xb3, + 0x08, 0x55, 0x7a, 0xfa, 0x72, 0xf0, 0x3a, 0xfa, 0x30, 0x3d, + 0xab, 0x26, 0x5f, 0x39, 0x5f, 0x07, 0x1d, 0x5d, 0xed, 0xbf, + 0x34, 0xfc, 0x18, 0x0a, 0xd6, 0x3c, 0xa6, 0xe4, 0x08, 0x0b, + 0x54, 0x48, 0x61, 0x72, 0xa1, 0xb3, 0x08, 0x55, 0x7a, 0xfa, + 0x72, 0xf0, 0xc5, 0x05, 0xcf, 0xc2, 0x54, 0xd9, 0xa0, 0xc6, + 0xa0, 0xf8, 0xe2, 0xa2, 0x12, 0x40, 0xcb, 0x03, 0xe7, 0xf5, + 0x29, 0xc3, 0x59, 0x1b, 0xf7, 0xf4, 0xab, 0xb7, 0x9e, 0x8d, + 0x5e, 0x4c, 0xf7, 0xaa, 0x85, 0x05, 0x8d, 0x0f, 0x14, 0x0b, + 0x10, 0x78, 0x94, 0x13, 0x6f, 0xe0, 0xe2, 0x54, 0xe6, 0x89, + 0xdb, 0x06, 0x47, 0xb6, 0x59, 0x03, 0x86, 0xb5, 0xf0, 0x63, + 0xc8, 0xc1, 0x57, 0xb8, 0x70, 0xd7, 0x43, 0xda, 0xe3, 0x1c, + 0x61, 0xb1, 0xd3, 0xeb, 0xa3, 0x85, 0x5c, 0x88, 0xe0, 0x7e, + 0xca, 0x55, 0x6d, 0x13, 0x9f, 0x04, 0xb5, 0xd5, 0xc3, 0x30, + 0xb0, 0x5e, 0xe4, 0x3e, 0xaf, 0xbc, 0x50, 0xa2, 0x70, 0xcd, + 0x93, 0x3a, 0x19, 0x1e, 0x2b, 0x26, 0xcb, 0x83, 0xcb, 0xb2, + 0x74, 0xc6, 0xa9, 0x1b, 0xca, 0x13, 0x1a, 0x6e, 0x9c, 0x46, + 0x4c, 0x1d, 0x6a, 0xd3, 0x06, 0x83, 0xb6, 0x19, 0x60, 0xc2, + 0x2e, 0xbb, 0x70, 0x4c, 0xd2, 0x4b, 0x34, 0x33, 0xb6, 0xb1, + 0x6a, 0x7b, 0xb5, 0x05, 0x68, 0x0d, 0xf1, 0x93, 0xd9, 0x71, + 0x53, 0x8d, 0x59, 0x87, 0x33, 0xe1, 0xab, 0xec, 0x2f, 0x7f, + 0x04, 0x48, 0x3d, 0xf5, 0xe4, 0x5b, 0x07, 0x84, 0xd3, 0x1e, + 0x77, 0xe8, 0x37, 0x18, 0xcb, 0xf8, 0x60, 0x19, 0xc7, 0x01, + 0x94, 0xc9, 0xa7, 0x22, 0x59, 0x4b, 0x91, 0x13, 0xcd, 0x88, + 0x7d, 0x84, 0xb1, 0x42, 0xa0, 0x21, 0xca, 0x78, 0x52, 0x3c, + 0x4c, 0x7f, 0x16, 0x57, 0xcf, 0x91, 0xe5, 0x7b, 0x52, 0x56, + 0x31, 0xa0, 0x7e, 0x16, 0x9b, 0xcb, 0xea, 0x57, 0xa5, 0x33, + 0x18, 0x28, 0xb5, 0x06, 0x09, 0xd5, 0x7d, 0x90, 0x9c, 0x13, + 0xa8, 0x7b, 0x9a, 0x5e, 0x1d, 0x6d, 0xc5, 0xce, 0x07, 0xd2, + 0x59, 0xfd, 0x65, 0xf9, 0x7b, 0x01, 0xed, 0x0f, 0x4d, 0x36, + 0xd3, 0xce, 0xf0, 0x01, 0xa5, 0x33, 0x58, 0x29, 0x95, 0x06, + 0x09, 0xdd, 0x7d, 0x90, 0x9d, 0x13, 0xa8, 0x31, 0x9a, 0x5c, + 0x1d, 0x2d, 0xc4, 0xcf, 0x07, 0xf2, 0x59, 0xdd, 0x65, 0xf9, + 0x73, 0x11, 0xe9, 0xa3, 0x6f, 0x16, 0xd3, 0xcb, 0xf0, 0x03, + 0x5a, 0xcc, 0xa7, 0xd6, 0x6a, 0xf9, 0xf6, 0x22, 0x82, 0x6f, + 0x62, 0xec, 0x57, 0xce, 0x65, 0xa3, 0xe2, 0xd2, 0x3b, 0x30, + 0xf8, 0x0d, 0xa6, 0x22, 0x9a, 0x06, 0x8c, 0xee, 0x16, 0x5c, + 0x90, 0xe9, 0x2c, 0x34, 0x0f, 0xfc, 0x01, 0x00, 0x00, 0x00, + 0x03, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x05, 0x00, + 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, + 0x04, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x07, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x07, 0x00, + 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x07, 0x00, + 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x04, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x02, 0x00, + 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x03, 0x00, + 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, + 0x05, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, + 0x06, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x02, 0x00, + 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x07, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x01, 0x00, + 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x04, 0x00, + 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x05, 0x00, + 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x00, + 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, + 0x06, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x04, 0x00, + 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, + 0x03, 0x00, 0x00, 0x00, 0xfd, 0xac, 0x75, 0x65, 0xb1, 0x2c, + 0x0f, 0xdc, 0x3e, 0x6e, 0xce, 0xd6, 0x91, 0x02, 0x81, 0x8a, + 0x5f, 0xb3, 0xb4, 0xae, 0x73, 0x6d, 0xe5, 0x3e, 0xf5, 0xb5, + 0xe2, 0xa1, 0x35, 0x8f, 0x0f, 0xdf, 0x10, 0x68, 0x8d, 0xc3, + 0x48, 0x7d, 0xae, 0x89, 0x4d, 0xc2, 0x61, 0x2c, 0xfe, 0x69, + 0x4d, 0x59, 0x3e, 0x62, 0xe5, 0x51, 0x72, 0x6d, 0xa1, 0xb9, + 0xa3, 0xe2, 0xed, 0x80, 0xfd, 0xff, 0xdd, 0xb2, 0x4a, 0x4f, + 0xff, 0xb6, 0xab, 0x9e, 0xac, 0x93, 0xf5, 0x8c, 0xf4, 0x69, + 0xa8, 0xdb, 0xed, 0x4e, 0x1f, 0x2f, 0xf3, 0x6c, 0x7e, 0xe5, + 0xd8, 0xa1, 0x81, 0x1c, 0x1a, 0x4e, 0xe3, 0xcf, 0xe0, 0x39, + 0xda, 0x5d, 0xd1, 0x74, 0x65, 0x3b, 0x21, 0x91, 0x7f, 0xd7, + 0x2d, 0x19, 0x84, 0x9c, 0x6d, 0x47, 0x80, 0x9a, 0x28, 0xa2, + 0x60, 0x7c, 0x32, 0x59, 0xb2, 0x18, 0x4d, 0x29, 0x51, 0x14, + 0x2b, 0xab, 0x1f, 0x6c, 0xe2, 0x5e, 0x0b, 0x3d, 0x01, 0x39, + 0x2d, 0xb7, 0x5d, 0xd9, 0xf5, 0xcb, 0x6e, 0x64, 0x6d, 0xed, + 0x32, 0xdd, 0x81, 0x08, 0x87, 0xcf, 0x5c, 0x49, 0xf3, 0xee, + 0xa5, 0x08, 0x13, 0xc6, 0x97, 0x37, 0x22, 0x54, 0x25, 0xc0, + 0x15, 0x42, 0x8a, 0x33, 0x3a, 0x0b, 0x3b, 0xda, 0xc6, 0xd1, + 0x0d, 0x6d, 0x80, 0x6a, 0x0c, 0xac, 0xaa, 0x2f, 0xd6, 0x90, + 0x25, 0xac, 0x5e, 0xf2, 0x73, 0xe2, 0x27, 0x98, 0x01, 0xe2, + 0xd7, 0x16, 0x22, 0x30, 0x23, 0xb5, 0x17, 0x42, 0x8c, 0x73, + 0x0f, 0xd8, 0x33, 0x86, 0xcc, 0x9d, 0x29, 0xa9, 0xfa, 0x7a, + 0x0c, 0xac, 0xaa, 0x2f, 0x96, 0x90, 0x25, 0x8e, 0x5e, 0x71, + 0x73, 0xe2, 0x27, 0x98, 0x01, 0xe2, 0xd7, 0x16, 0x22, 0x30, + 0x23, 0xb5, 0x17, 0x42, 0x8e, 0x73, 0x0f, 0xc8, 0x33, 0x86, + 0xcc, 0xdd, 0x29, 0xa9, 0xea, 0x7a, 0xf3, 0x53, 0x55, 0xd0, + 0x69, 0x6f, 0xda, 0x71, 0xa1, 0x8e, 0x8c, 0x1d, 0xd8, 0x67, + 0xfe, 0x1d, 0x28, 0xe9, 0xdd, 0xcf, 0xdc, 0x4a, 0xe8, 0xbd, + 0x71, 0x8c, 0xf0, 0x37, 0xcc, 0x79, 0x33, 0x22, 0xd6, 0x56, + 0x15, 0x85, 0x7b, 0xd1, 0xb0, 0x41, 0xac, 0x2b, 0xf2, 0x96, + 0x64, 0xca, 0x03, 0xf7, 0x91, 0xa3, 0x2e, 0x39, 0xe3, 0x29, + 0x10, 0x60, 0xa3, 0x96, 0x48, 0x67, 0x3c, 0xd1, 0x45, 0x98, + 0x9f, 0x62, 0x01, 0xa9, 0x63, 0xaa, 0x0c, 0xe4, 0x4c, 0x52, + 0xbc, 0xe9, 0xfe, 0x6c, 0x59, 0x0f, 0x9a, 0x31, 0x72, 0x3f, + 0xd6, 0xba, 0x1b, 0xd8, 0xff, 0x2e, 0xec, 0xeb, 0x82, 0xcb, + 0x57, 0xa5, 0x89, 0x7a, 0xdb, 0x8c, 0x18, 0xff, 0x1e, 0xf8, + 0x47, 0x05, 0x9f, 0x48, 0x07, 0xe8, 0xac, 0x14, 0xcd, 0xcc, + 0xd8, 0xac, 0x21, 0xaf, 0x22, 0x81, 0x2b, 0x81, 0x8a, 0xb3, + 0x51, 0x14, 0xc3, 0x2d, 0xc9, 0xa9, 0x5b, 0xd2, 0xf5, 0x74, + 0x52, 0xeb, 0x4f, 0x99, 0x18, 0x17, 0x87, 0xfa, 0x16, 0x88, + 0xa3, 0xd5, 0x17, 0xe8, 0xd1, 0x52, 0x59, 0x10, 0xb3, 0xa8, + 0xa6, 0xdc, 0x3d, 0x55, 0xa3, 0x89, 0x35, 0x91, 0x3b, 0x3c, + 0x45, 0x32, 0xfe, 0x33, 0xcc, 0x6a, 0x1d, 0x0f, 0x24, 0x21, + 0x7b, 0xab, 0x59, 0x6b, 0x92, 0x38, 0x9b, 0x65, 0x82, 0x8f, + 0xfa, 0x91, 0x5e, 0x2c, 0xeb, 0xb0, 0x89, 0x2f, 0xd3, 0x1e, + 0x06, 0x52, 0x0b, 0xdf, 0x16, 0x66, 0x1f, 0xe2, 0x96, 0xcf, + 0x28, 0x29, 0x0e, 0xad, 0xe2, 0x88, 0x0c, 0x81, 0xa9, 0x69, + 0x8c, 0x0c, 0x8e, 0xf5, 0xae, 0xeb, 0x76, 0x80, 0xf8, 0x86, + 0xbe, 0xa8, 0x24, 0x2f, 0xa3, 0xff, 0x80, 0xea, 0x0d, 0xbf, + 0x9d, 0x6d, 0xdf, 0xa2, 0x73, 0x43, 0x09, 0x44, 0x3b, 0x66, + 0x64, 0x8f, 0x2c, 0xc4, 0x77, 0x69, 0xcc, 0x3d, 0x8f, 0xe5, + 0xae, 0xca, 0x76, 0x80, 0xd8, 0x84, 0xbf, 0xa8, 0xa1, 0x2f, + 0x83, 0xff, 0x82, 0xea, 0x0d, 0x9f, 0x9d, 0x6d, 0xcf, 0xa2, + 0xf3, 0x53, 0x09, 0x60, 0x3f, 0x64, 0x64, 0x8f, 0x2c, 0x84, + 0x7b, 0x69, 0x8c, 0x3c, 0x70, 0x1a, 0x51, 0x35, 0x89, 0x7f, + 0x27, 0x7b, 0x40, 0x57, 0x5e, 0xd0, 0x7c, 0x00, 0x7d, 0x15, + 0xf2, 0x60, 0x62, 0x92, 0x30, 0x5d, 0x0c, 0xac, 0xf6, 0x9f, + 0xc0, 0x9b, 0x9b, 0x70, 0xd3, 0x7b, 0x84, 0x96, 0x73, 0xc3, + 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x07, 0x00, + 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x05, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x03, 0x00, + 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, + 0x07, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x03, 0x00, + 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, + 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x03, 0x00, + 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x07, 0x00, + 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x05, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x06, 0x00, + 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, + 0x06, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x03, 0x00, + 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, + 0x03, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x02, 0x00, + 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, + 0x07, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x07, 0x00, + 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x07, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x03, 0x00, + 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, + 0x03, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x07, 0x00, + 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, + 0x05, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x07, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x96, 0x8f, + 0xda, 0xe7, 0x48, 0x5f, 0xd5, 0xda, 0x90, 0x1b, 0x02, 0x32, + 0x10, 0x49, 0xd0, 0x0d, 0xcd, 0xee, 0xd8, 0x87, 0xeb, 0xc0, + 0x98, 0x49, 0x3b, 0x22, 0x39, 0x13, 0x41, 0xb4, 0x1b, 0x84, + 0xdb, 0x75, 0xca, 0xf6, 0xd3, 0x69, 0xe2, 0x6d, 0x10, 0xb7, + 0xca, 0xf3, 0xc3, 0xbc, 0xfa, 0xfb, 0x64, 0x4b, 0x91, 0xc3, + 0x7a, 0xa0, 0xb8, 0xd3, 0x2a, 0x15, 0x5e, 0x5b, 0x48, 0x80, + 0x7f, 0xea, 0xee, 0x96, 0x31, 0x6a, 0x31, 0x60, 0x3d, 0x94, + 0xb3, 0x55, 0x82, 0x3b, 0x77, 0xe3, 0x19, 0xdb, 0x6a, 0x0e, + 0x55, 0x73, 0xba, 0x5f, 0xfb, 0xae, 0xdf, 0x52, 0x7e, 0xd6, + 0xf4, 0xb8, 0x3c, 0x81, 0x60, 0x08, 0xcb, 0xdc, 0x68, 0xb8, + 0xc2, 0xd2, 0x02, 0x67, 0x6f, 0x8a, 0x5f, 0xd1, 0x15, 0x42, + 0x02, 0xc3, 0x9e, 0x35, 0x66, 0xaa, 0x11, 0xe2, 0xfe, 0xca, + 0x46, 0x55, 0x25, 0x3b, 0xfe, 0x9c, 0x2c, 0xa3, 0xd7, 0xe1, + 0x70, 0x77, 0xa3, 0xbb, 0x52, 0xdd, 0x9d, 0xb7, 0x32, 0x4f, + 0x36, 0xd2, 0x91, 0x13, 0x34, 0x9b, 0x06, 0x29, 0xb4, 0x81, + 0xa3, 0xab, 0x24, 0xfd, 0x95, 0x06, 0x7d, 0x25, 0x33, 0x11, + 0x17, 0x98, 0x3d, 0xea, 0xf5, 0xda, 0xe8, 0x40, 0xc8, 0xe7, + 0x3a, 0xe2, 0x1a, 0x26, 0xdf, 0xbe, 0xdb, 0x29, 0x13, 0x33, + 0x70, 0x17, 0x42, 0x2b, 0x70, 0x44, 0x0f, 0xae, 0x24, 0x67, + 0xf5, 0x24, 0x76, 0x6d, 0x06, 0xbb, 0x14, 0x90, 0x58, 0xbe, + 0x55, 0x08, 0xbd, 0x00, 0x8f, 0x89, 0x7f, 0xc6, 0x03, 0x6b, + 0xba, 0x98, 0x35, 0xea, 0x13, 0xb3, 0x30, 0x17, 0x42, 0x2b, + 0x70, 0x45, 0x07, 0xae, 0x24, 0x67, 0xf5, 0x04, 0x76, 0x65, + 0x06, 0x39, 0x16, 0x90, 0x7c, 0xba, 0x55, 0x48, 0xfd, 0x00, + 0x8e, 0xcb, 0x7f, 0xc6, 0x03, 0x63, 0xba, 0x9e, 0x37, 0xea, + 0xec, 0x4c, 0xcf, 0xe8, 0xbd, 0xd4, 0x8f, 0xba, 0xf8, 0x51, + 0xdb, 0x98, 0x0a, 0xfb, 0x89, 0x9a, 0xf9, 0xc6, 0xe9, 0x6f, + 0x83, 0x45, 0xaa, 0xb7, 0x02, 0xff, 0x71, 0x34, 0x80, 0x39, + 0xfc, 0x9c, 0x45, 0x61, 0xc8, 0x15, 0x11, 0x4b, 0xa5, 0xdf, + 0xa7, 0xd1, 0x37, 0xdb, 0x89, 0x22, 0x9d, 0x72, 0xb9, 0x15, + 0xc0, 0xa8, 0xe4, 0xb1, 0x1b, 0x5f, 0xf3, 0xf5, 0x01, 0xd1, + 0x3f, 0x1b, 0x5c, 0x29, 0x4b, 0x59, 0x55, 0x06, 0xfe, 0xf2, + 0xcf, 0x60, 0x8f, 0xf9, 0x49, 0x88, 0xea, 0x3d, 0xbc, 0x86, + 0xcc, 0x70, 0x0f, 0x3f, 0xd3, 0x98, 0x43, 0x32, 0x16, 0x9c, + 0x13, 0x85, 0x4c, 0xcf, 0xff, 0x2f, 0xe4, 0xd4, 0x65, 0x3f, + 0x1a, 0xa2, 0xd5, 0xdc, 0x79, 0x30, 0xb9, 0x89, 0xb0, 0x55, + 0x59, 0xdf, 0xbc, 0xd8, 0x86, 0x63, 0x79, 0x22, 0x4b, 0xa3, + 0x76, 0xf1, 0x96, 0xd9, 0x42, 0x11, 0x4f, 0x6e, 0xac, 0x60, + 0x8a, 0x0d, 0xe2, 0xd3, 0x96, 0xfc, 0xb9, 0xf6, 0x48, 0x51, + 0xb8, 0x5f, 0xe3, 0x86, 0x13, 0x6d, 0x3c, 0x92, 0xdd, 0xb3, + 0xea, 0x49, 0xf0, 0x7c, 0x33, 0x2b, 0x9f, 0x0b, 0x95, 0xc9, + 0x4b, 0xe7, 0x0f, 0x3c, 0x27, 0xff, 0xf5, 0xde, 0xc4, 0xfc, + 0x61, 0x1f, 0xb0, 0x53, 0x6c, 0x9b, 0x0a, 0x87, 0x05, 0xb1, + 0xf7, 0x82, 0x9f, 0x19, 0xec, 0x77, 0x1c, 0xbe, 0x9c, 0x98, + 0x23, 0xeb, 0xbf, 0xf5, 0x2a, 0x8b, 0x44, 0x82, 0x82, 0xa2, + 0x3a, 0x4a, 0xf5, 0xd7, 0x7f, 0xe3, 0xa7, 0xab, 0xd7, 0xa5, + 0xa2, 0x25, 0x4e, 0x49, 0x0c, 0x4a, 0x1b, 0xdc, 0x9f, 0x19, + 0xdc, 0x75, 0x98, 0x98, 0x78, 0x54, 0xab, 0xeb, 0x8f, 0x9e, + 0x7a, 0xea, 0x66, 0xe7, 0xc7, 0xe8, 0x6f, 0xfe, 0x72, 0xdf, + 0xf3, 0x27, 0xa3, 0xeb, 0xee, 0xf6, 0x20, 0xb7, 0x50, 0xe7, + 0x16, 0x19, 0x13, 0xcc, 0x1f, 0x19, 0xdc, 0x35, 0x98, 0x98, + 0xf8, 0x54, 0xa3, 0xeb, 0x9e, 0x9e, 0x7a, 0xca, 0x46, 0xe7, + 0xc7, 0xa8, 0x6f, 0xfe, 0xf6, 0xdf, 0xf3, 0xe7, 0xa3, 0xeb, + 0xc6, 0xf6, 0x20, 0xb7, 0x50, 0x47, 0x16, 0x09, 0xec, 0x33, + 0xe0, 0xe6, 0x23, 0x8a, 0x67, 0x67, 0x07, 0xab, 0x5c, 0x14, + 0x61, 0x61, 0x85, 0x35, 0xb9, 0x18, 0x38, 0x57, 0x90, 0x01, + 0x09, 0x20, 0x0c, 0x18, 0x5c, 0x14, 0x39, 0x09, 0xdf, 0x48, + 0xaf, 0xb8, 0xe9, 0xf6, 0x01, 0x00, 0x00, 0x00, 0x05, 0x00, + 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x01, 0x00, + 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x03, 0x00, + 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, + 0x04, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x06, 0x00, + 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, + 0x04, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, + 0x03, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x05, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x07, 0x00, + 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, + 0x04, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x05, 0x00, + 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x03, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x06, 0x00, + 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, + 0x03, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x05, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x05, 0x00, + 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x05, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x02, 0x00, + 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, + 0x06, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x04, 0x00, + 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x03, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x05, 0x00, + 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x05, 0x00, + 0x00, 0x00, 0x7b, 0x74, 0x95, 0x3b, 0xd3, 0x34, 0x8d, 0x2b, + 0x05, 0x8a, 0x6e, 0x6c, 0x05, 0x69, 0xbe, 0xc1, 0xe7, 0xf0, + 0x22, 0x2f, 0xaa, 0x5c, 0x4c, 0xb6, 0x21, 0x28, 0x43, 0x4c, + 0x31, 0x06, 0x88, 0xcb, 0x47, 0x6d, 0x2d, 0x26, 0x28, 0x37, + 0x81, 0xc1, 0xeb, 0x2a, 0x46, 0x8e, 0x76, 0x0d, 0xa4, 0x4a, + 0xd9, 0x0b, 0xe5, 0x82, 0x98, 0x35, 0xdd, 0xc8, 0x75, 0xec, + 0x8d, 0x35, 0xa4, 0xea, 0x73, 0x48, 0x7f, 0xdf, 0xaf, 0xf2, + 0xa7, 0x50, 0x60, 0x2b, 0x9b, 0x7c, 0xb8, 0xc5, 0xd4, 0x8b, + 0x7e, 0x7e, 0x64, 0x47, 0x8b, 0x99, 0xfa, 0x74, 0xff, 0x36, + 0xfa, 0x97, 0x5f, 0x24, 0x5d, 0x2b, 0x90, 0x72, 0x14, 0xac, + 0x3e, 0xc4, 0xf2, 0xda, 0x37, 0x9b, 0xc0, 0x38, 0xbf, 0xdf, + 0xbe, 0x30, 0xe9, 0x06, 0xd2, 0x8a, 0x30, 0x3c, 0xd7, 0x4f, + 0x99, 0xa3, 0xc5, 0x63, 0x15, 0x42, 0xff, 0x1a, 0x14, 0x6b, + 0xea, 0x5a, 0x1a, 0xeb, 0xa6, 0x8f, 0x8a, 0x5b, 0x21, 0x15, + 0x67, 0xe5, 0x73, 0x2e, 0xb0, 0xb3, 0x7f, 0x52, 0x99, 0xda, + 0x84, 0x93, 0xf3, 0x9b, 0x9b, 0xea, 0x30, 0x16, 0x9d, 0x47, + 0x58, 0xcd, 0x14, 0x52, 0x7e, 0x14, 0x32, 0x56, 0x6b, 0x89, + 0xb6, 0x32, 0x6b, 0xba, 0xc5, 0x56, 0x6c, 0xc5, 0xde, 0x2e, + 0x0f, 0xfd, 0x6d, 0x76, 0x85, 0xba, 0x90, 0x7b, 0xf2, 0x39, + 0xd6, 0x4b, 0x93, 0x34, 0xdf, 0x6f, 0x7e, 0xdd, 0xd2, 0x70, + 0x2e, 0x31, 0x6b, 0x4d, 0x6a, 0xc1, 0xbe, 0x27, 0x2b, 0x90, + 0xa7, 0x7e, 0x39, 0xbd, 0xcd, 0x3a, 0xaf, 0x9d, 0x7f, 0x56, + 0x89, 0xba, 0x90, 0x7a, 0xf2, 0x39, 0xd6, 0x4b, 0x93, 0x34, + 0xdf, 0x67, 0x7e, 0xdd, 0x52, 0x50, 0x2e, 0x31, 0x6b, 0x4c, + 0x6a, 0xc1, 0xbe, 0x23, 0x2b, 0x90, 0xa7, 0x5e, 0x79, 0xb5, + 0xcd, 0x3a, 0xaf, 0xbd, 0x80, 0xa9, 0x76, 0x45, 0x6f, 0x85, + 0x0d, 0xc6, 0x29, 0xb4, 0x6c, 0xcb, 0x20, 0x98, 0x81, 0x22, + 0xad, 0xaf, 0xd1, 0xce, 0x94, 0xb3, 0x95, 0x3e, 0x41, 0xdc, + 0xd4, 0x6f, 0x58, 0xa1, 0x86, 0x4a, 0x32, 0xc5, 0x50, 0x42, + 0xf3, 0x49, 0x33, 0x45, 0x53, 0x14, 0xcf, 0x66, 0xde, 0xa9, + 0x44, 0xe2, 0x96, 0xff, 0xdc, 0xe2, 0x42, 0x25, 0x7e, 0x0f, + 0xb5, 0x4c, 0x16, 0xca, 0x47, 0x40, 0x04, 0x18, 0xf9, 0xb6, + 0x70, 0x56, 0x3c, 0x47, 0xa3, 0xe0, 0x6f, 0x27, 0x18, 0x56, + 0xe5, 0x6d, 0xea, 0x04, 0xfb, 0x04, 0x60, 0x9a, 0xcb, 0xa7, + 0x60, 0xda, 0xaf, 0xe4, 0xd2, 0x10, 0xca, 0xba, 0xd1, 0x4e, + 0x3d, 0xbb, 0x0b, 0xe6, 0x63, 0xce, 0x28, 0x4b, 0x49, 0xe2, + 0xfa, 0x19, 0xcd, 0xd1, 0xed, 0xc6, 0xa7, 0x73, 0x3f, 0xc4, + 0xe3, 0xf0, 0x54, 0xb7, 0xa8, 0x9d, 0xc4, 0x65, 0xf2, 0xcd, + 0x04, 0x49, 0xd7, 0x9b, 0xda, 0x9e, 0xb4, 0xeb, 0xa1, 0xe2, + 0xb5, 0x6a, 0x84, 0x0d, 0xb0, 0xc1, 0xd7, 0x9f, 0x2d, 0x08, + 0xdf, 0x69, 0x7f, 0xc0, 0xcb, 0xca, 0xf0, 0x0c, 0x33, 0x73, + 0x2f, 0xbe, 0xe6, 0xb9, 0x0d, 0xcc, 0x11, 0x9f, 0x86, 0xa6, + 0xbf, 0xa4, 0x68, 0xa4, 0x57, 0x55, 0x80, 0x2a, 0x26, 0x24, + 0x87, 0xf7, 0x55, 0x17, 0x9e, 0x41, 0x95, 0x09, 0xcc, 0x5a, + 0x17, 0xd0, 0x6f, 0xaa, 0xbb, 0x35, 0x22, 0x56, 0xb3, 0x8d, + 0xc9, 0xb6, 0xc5, 0x51, 0x5a, 0x3e, 0x15, 0x22, 0x56, 0x67, + 0x20, 0xf4, 0x09, 0x40, 0x8a, 0x65, 0x37, 0x60, 0xb6, 0x3c, + 0x27, 0x19, 0x55, 0x2d, 0xcc, 0x61, 0xcc, 0xd2, 0x62, 0x19, + 0x72, 0xf3, 0xa2, 0x9a, 0xeb, 0x22, 0x2d, 0x94, 0xd5, 0x19, + 0xd2, 0x7a, 0x55, 0x06, 0xae, 0xad, 0x75, 0xb4, 0xad, 0x60, + 0xb4, 0x52, 0xb5, 0x3d, 0x97, 0x96, 0x0f, 0x51, 0x55, 0x29, + 0xcc, 0x40, 0xcc, 0xd2, 0x62, 0x18, 0x72, 0xb3, 0xa2, 0x9e, + 0xe3, 0x29, 0x2d, 0x94, 0xd5, 0x59, 0xf2, 0x5a, 0x55, 0x06, + 0x2e, 0xa5, 0x75, 0xb4, 0xad, 0x60, 0xb4, 0x42, 0xb5, 0x65, + 0x97, 0x96, 0xf0, 0xae, 0xaa, 0xd6, 0x33, 0xbf, 0x33, 0x2d, + 0x9d, 0xe7, 0x8d, 0x4c, 0x5d, 0x61, 0x1c, 0xd6, 0xd2, 0x6b, + 0x2a, 0xa6, 0x0d, 0xa5, 0xaa, 0xf9, 0xd1, 0x5a, 0x8a, 0x4b, + 0x52, 0x9f, 0x4b, 0xbd, 0x4a, 0x9a, 0x68, 0x69, 0x00, 0x00, + 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x04, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x03, 0x00, + 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, + 0x06, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x07, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x03, 0x00, + 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x06, 0x00, + 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, + 0x07, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x05, 0x00, + 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, + 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, + 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x02, 0x00, + 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, + 0x06, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x05, 0x00, + 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x03, 0x00, + 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x01, 0x00, + 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x05, 0x00, + 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x04, 0x00, + 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, + 0x04, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x01, 0x00, + 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x73, 0x6c, 0xfd, 0x2c, + 0x58, 0xf8, 0x2a, 0x03, 0x14, 0xff, 0x58, 0xaf, 0x67, 0x3c, + 0x45, 0xe6, 0x67, 0x4a, 0xfe, 0x67, 0x79, 0x72, 0x8a, 0x8d, + 0x19, 0xf7, 0x7b, 0xc9, 0x0c, 0xa3, 0x88, 0xc2, 0x4a, 0x4e, + 0x1b, 0xc7, 0x76, 0xbe, 0xf8, 0xf0, 0x34, 0x5b, 0xbf, 0x88, + 0xef, 0xf8, 0x28, 0xd7, 0x37, 0xf5, 0x15, 0x06, 0x53, 0x06, + 0x0a, 0xbd, 0xa0, 0x30, 0x6e, 0x9e, 0x07, 0x62, 0x64, 0x04, + 0x9f, 0x85, 0x11, 0x9c, 0xa3, 0xfa, 0x63, 0xa9, 0x30, 0xcc, + 0x6f, 0x54, 0x8f, 0x44, 0x2d, 0x16, 0xaa, 0xbe, 0xef, 0x6f, + 0x26, 0x6c, 0x59, 0x00, 0x26, 0x7b, 0x84, 0x38, 0x39, 0x55, + 0xd9, 0xfc, 0xe2, 0xa8, 0x4a, 0xeb, 0x7c, 0xa4, 0xa7, 0xd5, + 0x4e, 0x82, 0xe8, 0x99, 0xbe, 0xe3, 0x7f, 0x14, 0xb3, 0x7a, + 0x89, 0x88, 0x9e, 0x16, 0x7e, 0x22, 0x46, 0xd8, 0x2a, 0xe1, + 0x29, 0x0b, 0x6c, 0xbc, 0xf8, 0x45, 0xb6, 0x95, 0xfd, 0x17, + 0x9e, 0xe8, 0x18, 0xa8, 0x29, 0xa3, 0xb8, 0x96, 0x0b, 0xa9, + 0xca, 0xb2, 0x92, 0xb9, 0xf0, 0x51, 0x95, 0x8c, 0x48, 0x91, + 0x55, 0x81, 0x56, 0x16, 0x5c, 0x0d, 0xae, 0xbc, 0x11, 0x06, + 0xaf, 0x2f, 0x23, 0x9f, 0x83, 0x5f, 0xa0, 0xd0, 0x51, 0xf4, + 0x47, 0x01, 0x0f, 0x09, 0xc0, 0xb8, 0xfe, 0x8b, 0x5b, 0xb4, + 0x50, 0x73, 0x9d, 0x88, 0xd8, 0xb9, 0x5f, 0x42, 0x87, 0x56, + 0x1e, 0x41, 0x99, 0x09, 0x10, 0x12, 0xe4, 0x49, 0xe8, 0x9f, + 0xd7, 0xdc, 0xcd, 0x60, 0x5d, 0xe0, 0x2a, 0x09, 0x0b, 0x30, + 0xcc, 0xb9, 0xee, 0xab, 0x5b, 0xb4, 0x50, 0x73, 0x9d, 0x88, + 0xd8, 0xb9, 0x5f, 0x02, 0x87, 0x56, 0x1e, 0x41, 0x09, 0x09, + 0x14, 0x12, 0xa4, 0x4d, 0xe2, 0x9f, 0xd7, 0xdc, 0xcd, 0xe0, + 0x59, 0xe0, 0x2b, 0x09, 0x0b, 0x31, 0xcc, 0xb9, 0x11, 0x54, + 0xa4, 0x4b, 0xaf, 0x8c, 0x62, 0x77, 0x27, 0x46, 0xa0, 0xfd, + 0x78, 0xa9, 0xe1, 0xbe, 0xf6, 0xf6, 0xeb, 0xed, 0x5b, 0xb2, + 0x1d, 0x60, 0x28, 0x23, 0x32, 0x1f, 0xa6, 0x1f, 0xd4, 0xf6, + 0xf4, 0xce, 0x33, 0x46, 0x45, 0xf5, 0x65, 0xb7, 0x61, 0xa5, + 0x71, 0x0b, 0x11, 0x01, 0x73, 0xd9, 0xb1, 0x1d, 0xa0, 0xb5, + 0xbe, 0x21, 0x9e, 0x05, 0xf1, 0x20, 0x7b, 0x3d, 0x8c, 0x85, + 0x23, 0x3b, 0x5f, 0x98, 0xc6, 0x31, 0xc9, 0x21, 0x91, 0xd7, + 0xb7, 0xf6, 0x87, 0xd0, 0x41, 0xf1, 0x28, 0xbe, 0xf5, 0x1c, + 0x1a, 0x70, 0x69, 0x81, 0x53, 0x69, 0xd8, 0xcf, 0xa9, 0x51, + 0x0d, 0x1d, 0xf8, 0x52, 0x94, 0x22, 0xf5, 0xf7, 0x1c, 0xe5, + 0xcb, 0x62, 0x37, 0x42, 0x1b, 0x9a, 0x61, 0xa2, 0xc8, 0xc5, + 0xe7, 0x62, 0xab, 0x14, 0x6a, 0x9f, 0xfc, 0x73, 0x2c, 0xa3, + 0x41, 0xe0, 0xee, 0x90, 0xed, 0xfd, 0xf0, 0xea, 0x06, 0x2d, + 0x37, 0x8e, 0x8d, 0xfb, 0xfc, 0xe1, 0x21, 0x90, 0x1c, 0x1a, + 0x26, 0x9f, 0x66, 0xde, 0xa0, 0x74, 0x3d, 0xb8, 0x26, 0x82, + 0x62, 0x2a, 0xc8, 0xa0, 0x04, 0x73, 0xe7, 0xd3, 0xa1, 0xfc, + 0x39, 0x58, 0x49, 0x1f, 0xb5, 0x7e, 0x41, 0xd6, 0x58, 0xb8, + 0x45, 0xed, 0x90, 0xea, 0x4d, 0xdf, 0x99, 0x47, 0x08, 0x10, + 0x00, 0xe4, 0x10, 0xfa, 0x67, 0x03, 0x5e, 0xef, 0xcd, 0xfe, + 0xfc, 0x1b, 0x61, 0xb6, 0x2d, 0x24, 0x6e, 0xfe, 0x7b, 0xfc, + 0x10, 0x46, 0xcd, 0x37, 0xc7, 0x02, 0xd8, 0x06, 0x7e, 0xf2, + 0xf1, 0x5c, 0xac, 0x91, 0xf0, 0x14, 0xc8, 0xc4, 0x93, 0x78, + 0x0e, 0x20, 0xa8, 0xbc, 0x3d, 0xee, 0xfc, 0x03, 0x4a, 0xbe, + 0x28, 0x18, 0xbd, 0xa0, 0xff, 0xfe, 0x59, 0x72, 0xcb, 0xb7, + 0x4f, 0x32, 0xf0, 0x34, 0x78, 0xf6, 0x78, 0x58, 0xb0, 0x97, + 0x60, 0x14, 0xc8, 0xc4, 0x13, 0x78, 0x2e, 0x22, 0x78, 0xac, + 0xbd, 0xee, 0xfc, 0x03, 0x4b, 0xbe, 0x29, 0x38, 0x3d, 0xe0, + 0x7f, 0xfe, 0x51, 0x72, 0xc3, 0xb7, 0x4f, 0x32, 0xf0, 0x34, + 0x78, 0xf6, 0x78, 0x58, 0xb0, 0x97, 0x9f, 0xeb, 0x37, 0x3b, + 0xec, 0x87, 0xd1, 0xdd, 0x87, 0x53, 0x42, 0x11, 0x03, 0xfc, + 0xb4, 0x41, 0xd6, 0xc7, 0xc2, 0x1f, 0x80, 0x01, 0xae, 0x8d, + 0x3c, 0x48, 0xb0, 0xcd, 0x0f, 0xcb, 0x87, 0x09, 0x87, 0xa7, + 0x4f, 0x68, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x04, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x04, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x05, 0x00, + 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, + 0x04, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x05, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x03, 0x00, + 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, + 0x07, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x04, 0x00, + 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x06, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x04, 0x00, + 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x00, + 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, + 0x04, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x04, 0x00, + 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x02, 0x00, + 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x02, 0x00, + 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x04, 0x00, + 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x04, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x03, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x01, 0x00, + 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, + 0x05, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x07, 0x00, + 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, + 0x43, 0x48, 0x28, 0xff, 0x98, 0x33, 0x51, 0x26, 0x05, 0x65, + 0x55, 0x2f, 0x33, 0xf0, 0x8e, 0x61, 0xe5, 0xc1, 0x91, 0x02, + 0xb2, 0x8e, 0x82, 0x4b, 0xbc, 0xc7, 0xe5, 0x5e, 0x96, 0x25, + 0xe2, 0xeb, 0x5f, 0x79, 0x0f, 0x18, 0x52, 0x8c, 0x3d, 0x42, + 0xf7, 0x97, 0xa9, 0xd8, 0xf0, 0xcd, 0xaf, 0xe5, 0xa7, 0x3a, + 0x8b, 0x93, 0x26, 0x96, 0xc4, 0xb3, 0xd5, 0x2e, 0xbf, 0x9d, + 0x9b, 0xd6, 0x12, 0x60, 0xc9, 0x22, 0x3d, 0x93, 0xe3, 0xa0, + 0x3c, 0x8d, 0x78, 0xf3, 0x99, 0x27, 0x9f, 0xf3, 0xaf, 0xad, + 0x35, 0x4f, 0xd6, 0x5b, 0xf7, 0x78, 0xd5, 0xf5, 0x95, 0x0c, + 0xd5, 0x35, 0xbf, 0x67, 0x0b, 0xc2, 0x20, 0x5f, 0x6d, 0x87, + 0x2f, 0xbf, 0xf7, 0x8e, 0xe4, 0x70, 0x62, 0x2d, 0x1c, 0x45, + 0xbc, 0x04, 0x2d, 0x3f, 0x19, 0x6f, 0x14, 0xf3, 0xb6, 0x72, + 0x7a, 0x5e, 0x99, 0x48, 0x0e, 0xc3, 0x07, 0x2f, 0xcf, 0x91, + 0xc7, 0x21, 0x80, 0x75, 0x00, 0x94, 0xc5, 0xea, 0x5f, 0x27, + 0x97, 0x81, 0xda, 0xa0, 0x13, 0x88, 0x68, 0x0c, 0x82, 0x92, + 0xf0, 0x44, 0xff, 0xfa, 0xef, 0x52, 0xe2, 0x69, 0xe5, 0x9a, + 0x4e, 0x85, 0x31, 0x71, 0xa3, 0xbf, 0xe6, 0x8b, 0xe9, 0x03, + 0x00, 0x99, 0xd9, 0x8b, 0x74, 0xb1, 0x55, 0x8a, 0x75, 0x8f, + 0xb2, 0x8a, 0x70, 0x0c, 0x85, 0x32, 0xda, 0x53, 0xbd, 0xbb, + 0xf0, 0xfa, 0xd0, 0x79, 0xe9, 0x68, 0x56, 0xa5, 0x07, 0x75, + 0x92, 0xbe, 0xa8, 0x99, 0xbb, 0x40, 0x8e, 0x81, 0xcd, 0xf8, + 0xdc, 0x77, 0x1a, 0x30, 0x96, 0xce, 0x12, 0x8a, 0x78, 0x0c, + 0x84, 0xb2, 0xf8, 0x53, 0xbd, 0xfb, 0xf4, 0x7a, 0xf2, 0x79, + 0xe9, 0x68, 0x5e, 0xa5, 0x07, 0x75, 0x83, 0xbf, 0xaa, 0x9b, + 0xbb, 0x43, 0x86, 0x81, 0xcd, 0xf9, 0xdc, 0x77, 0x12, 0x20, + 0x96, 0xcf, 0xed, 0x75, 0x87, 0xf3, 0x7b, 0x4d, 0x07, 0xac, + 0x42, 0x04, 0x0b, 0x85, 0x0d, 0x86, 0x16, 0x97, 0xa1, 0x5a, + 0xf8, 0x8a, 0x7c, 0x40, 0x55, 0x64, 0x44, 0xbc, 0x79, 0x7e, + 0x32, 0x06, 0x23, 0x88, 0xed, 0xdf, 0x69, 0x30, 0x1a, 0xe2, + 0xe7, 0xea, 0x99, 0x16, 0x58, 0x84, 0x8e, 0x2e, 0x60, 0xe4, + 0x63, 0x5b, 0x41, 0x45, 0x47, 0x94, 0x08, 0x23, 0x72, 0xfb, + 0x96, 0x58, 0x29, 0xb6, 0x7c, 0x1e, 0xb1, 0x3b, 0x9f, 0x1b, + 0x2b, 0x28, 0x45, 0x1b, 0xf9, 0x9d, 0xf9, 0xb3, 0xd4, 0x0f, + 0x54, 0x94, 0x9d, 0x8f, 0xc1, 0x5c, 0x7e, 0x71, 0xb4, 0xd0, + 0xb4, 0x60, 0x84, 0xa2, 0x9d, 0x33, 0x32, 0xa9, 0x24, 0x97, + 0x62, 0xd0, 0xc6, 0x38, 0xdb, 0xe9, 0x5d, 0x52, 0xc7, 0xd5, + 0x06, 0x63, 0x1d, 0x18, 0x20, 0x36, 0x30, 0x7b, 0xf1, 0x0c, + 0x7f, 0xad, 0x8d, 0x9a, 0xfa, 0xfa, 0x2e, 0x56, 0x0a, 0xbc, + 0xb2, 0xcf, 0x38, 0x23, 0x1d, 0xf8, 0xb9, 0x12, 0x6e, 0x3f, + 0x44, 0x81, 0xab, 0x59, 0x87, 0x12, 0xe7, 0x9e, 0xfc, 0x9a, + 0x19, 0x97, 0x7c, 0x53, 0xda, 0xe7, 0xd0, 0x32, 0xea, 0xb6, + 0x36, 0x36, 0x84, 0xad, 0x54, 0x76, 0x14, 0x8d, 0x79, 0x15, + 0x2f, 0xe3, 0xae, 0x36, 0xbb, 0xa1, 0x83, 0xb7, 0xc6, 0xaf, + 0x81, 0x9d, 0x7b, 0x53, 0x52, 0xfc, 0x74, 0x8d, 0x2f, 0xb1, + 0x5c, 0x03, 0xa3, 0xe4, 0x1d, 0x06, 0x2d, 0x56, 0x98, 0x36, + 0x38, 0xfa, 0xe6, 0x96, 0x19, 0x7d, 0x27, 0x08, 0xae, 0x91, + 0xc3, 0x1c, 0xcd, 0x2e, 0x32, 0xa6, 0xfb, 0x77, 0x2f, 0x52, + 0xe2, 0xde, 0x13, 0x41, 0x61, 0x33, 0xed, 0xc3, 0xb3, 0x0c, + 0xcd, 0x02, 0x5c, 0xfe, 0x1c, 0x1d, 0xf7, 0x7a, 0x93, 0x8e, + 0xd1, 0x74, 0xa7, 0x58, 0x29, 0x94, 0x86, 0x15, 0x2f, 0x3d, + 0x62, 0x3e, 0xd3, 0x24, 0x2f, 0x52, 0x62, 0xde, 0x11, 0x41, + 0x61, 0x33, 0xdd, 0xc3, 0xb3, 0xac, 0xcd, 0x02, 0x5c, 0xf6, + 0x1c, 0x1d, 0xb0, 0x7a, 0x92, 0x8e, 0x19, 0x74, 0x27, 0x58, + 0xab, 0x94, 0x86, 0x15, 0xaf, 0xbd, 0x62, 0x3e, 0xc3, 0x34, + 0xd0, 0xad, 0x9d, 0x21, 0xee, 0xbe, 0x9e, 0xcc, 0x22, 0x3c, + 0x4c, 0x53, 0x32, 0xfd, 0xa3, 0x09, 0xe3, 0xe2, 0x4f, 0x85, + 0x6d, 0x71, 0xe6, 0x8b, 0xd8, 0xa7, 0x54, 0x6b, 0x79, 0xea, + 0x50, 0x42, 0x9d, 0xc1, 0x3c, 0xcb, 0x06, 0x00, 0x00, 0x00, + 0x05, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x05, 0x00, + 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x05, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x01, 0x00, + 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, + 0x05, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x03, 0x00, + 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, + 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, + 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, + 0x07, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x05, 0x00, + 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x06, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, + 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x07, 0x00, + 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x06, 0x00, + 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x04, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x05, 0x00, + 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x03, 0x00, + 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xed, 0x2a, 0x5a, 0x40, 0x7a, 0x0f, + 0xcb, 0x42, 0x80, 0x94, 0xe0, 0x5c, 0x86, 0x3c, 0x5a, 0x0e, + 0x52, 0x63, 0x2b, 0x66, 0xc5, 0x7d, 0x67, 0xb9, 0x1d, 0x88, + 0x03, 0x2f, 0x46, 0x8b, 0x8d, 0x5f, 0x3b, 0x2a, 0xe8, 0xed, + 0x25, 0x8e, 0xf1, 0x6d, 0x7e, 0xa1, 0x26, 0xa1, 0x09, 0x3a, + 0xc0, 0xff, 0x73, 0x3f, 0x61, 0x3d, 0x92, 0x64, 0x1e, 0x4a, + 0xec, 0x0a, 0x75, 0x9f, 0x0e, 0xe2, 0xd7, 0x39, 0x7b, 0x78, + 0xfc, 0xc0, 0x18, 0xf5, 0x57, 0x16, 0x4d, 0x46, 0x6a, 0x3d, + 0xa8, 0x04, 0xd8, 0xaa, 0x45, 0xaa, 0x10, 0xc1, 0xd7, 0x58, + 0x22, 0x79, 0x30, 0x02, 0xb1, 0x3f, 0x01, 0x07, 0xc0, 0x96, + 0x3e, 0x33, 0xd0, 0x27, 0xaf, 0x49, 0x7b, 0xca, 0x3f, 0x1c, + 0x26, 0x6a, 0x69, 0x50, 0xd0, 0x3e, 0x27, 0x0f, 0x6f, 0x50, + 0xd0, 0x79, 0x83, 0x86, 0xa4, 0xdd, 0xbc, 0x7d, 0x03, 0xac, + 0x4e, 0x7d, 0xb6, 0x8e, 0x65, 0x17, 0x43, 0x26, 0x71, 0x53, + 0x4e, 0xc7, 0x93, 0xea, 0xd2, 0xe8, 0x53, 0xa1, 0xfe, 0xc7, + 0x24, 0x66, 0x50, 0xcc, 0xa4, 0x80, 0x05, 0x2a, 0x50, 0x48, + 0xe4, 0xac, 0xf7, 0xa7, 0xc9, 0x0a, 0x55, 0xea, 0x61, 0x1c, + 0x9e, 0xce, 0x61, 0x5b, 0x74, 0xf9, 0x31, 0x4a, 0x94, 0xc3, + 0x58, 0x55, 0x8a, 0xcc, 0xe6, 0x14, 0x52, 0x45, 0xe2, 0xc9, + 0xff, 0x4a, 0x72, 0x7e, 0x93, 0xd8, 0x92, 0xed, 0x67, 0x57, + 0xe7, 0x12, 0x79, 0x62, 0x6f, 0x12, 0x5d, 0x07, 0x6e, 0x08, + 0x72, 0x1b, 0xb2, 0xc9, 0xfd, 0x66, 0x84, 0x5d, 0x9d, 0xfc, + 0xee, 0x14, 0x52, 0x47, 0xe2, 0xcd, 0xef, 0x08, 0x12, 0x7e, + 0x93, 0xd8, 0x86, 0xed, 0x67, 0x57, 0xe7, 0x02, 0x7d, 0x6a, + 0x6f, 0x12, 0x5d, 0x07, 0x62, 0x0a, 0x72, 0x5b, 0xb3, 0xc9, + 0xdd, 0xe6, 0x84, 0x5d, 0x9d, 0xfc, 0x11, 0xeb, 0xad, 0xb8, + 0x1d, 0x32, 0x10, 0xf7, 0xed, 0x81, 0x6c, 0x27, 0x79, 0x12, + 0x98, 0xa8, 0x18, 0xfd, 0x82, 0x95, 0x90, 0xed, 0xa2, 0xf8, + 0x9d, 0xf5, 0x8d, 0xa4, 0x4c, 0x36, 0x22, 0x19, 0x7b, 0xa2, + 0x62, 0x03, 0x09, 0x8c, 0xf2, 0xb7, 0x04, 0x41, 0x19, 0xad, + 0x82, 0x1f, 0x29, 0x91, 0x1e, 0x0e, 0xe5, 0x78, 0xdd, 0x58, + 0x70, 0x01, 0x11, 0x06, 0x6d, 0xb0, 0x5f, 0x14, 0x3a, 0x22, + 0xd8, 0xb0, 0x0b, 0xcc, 0x82, 0x4d, 0x2b, 0x54, 0x19, 0xd5, + 0xd7, 0x6f, 0xc1, 0x0f, 0x01, 0x16, 0x15, 0x8f, 0x49, 0x5f, + 0xe6, 0x26, 0xd4, 0x98, 0xe0, 0x08, 0x48, 0x18, 0x36, 0x53, + 0x8d, 0x1a, 0x07, 0xb6, 0xe7, 0x07, 0x71, 0x81, 0x19, 0x82, + 0xf3, 0xe7, 0x1e, 0x49, 0xd3, 0x19, 0x1e, 0xac, 0x91, 0x7e, + 0x98, 0x24, 0x8e, 0xcc, 0x61, 0x80, 0xa4, 0x9d, 0xd5, 0x0f, + 0x1f, 0x53, 0xaa, 0xad, 0xce, 0x22, 0x8a, 0xf6, 0x0d, 0x93, + 0xcc, 0x21, 0xf2, 0x61, 0xd8, 0x4a, 0x17, 0x84, 0xcd, 0x19, + 0xd1, 0x3a, 0xd0, 0x3a, 0xd0, 0x45, 0x32, 0x43, 0x6b, 0x01, + 0x78, 0xf7, 0xa4, 0xe7, 0x05, 0x12, 0xd2, 0x2a, 0xd4, 0x80, + 0xc5, 0x77, 0x10, 0xbd, 0x15, 0xe7, 0x0c, 0x68, 0x78, 0xef, + 0x64, 0x65, 0x8e, 0x02, 0x02, 0xf0, 0xcb, 0x02, 0xf4, 0x82, + 0x77, 0xda, 0x4e, 0x89, 0x23, 0xd2, 0x1d, 0xbd, 0x60, 0xc1, + 0x71, 0x94, 0xef, 0xbc, 0x2f, 0x13, 0x2b, 0xb4, 0x22, 0xbd, + 0xa6, 0xe8, 0xa3, 0x8c, 0xb9, 0x1c, 0x34, 0x43, 0x8b, 0x11, + 0x3e, 0xdd, 0x0d, 0x03, 0xd0, 0x31, 0x76, 0xfe, 0x00, 0x8c, + 0xa2, 0x3a, 0x7c, 0xc5, 0x45, 0x6d, 0x84, 0x52, 0xf7, 0x34, + 0xaa, 0x22, 0x03, 0x16, 0x23, 0xef, 0x8d, 0xee, 0xc1, 0x8d, + 0x20, 0x6c, 0x14, 0x43, 0x9d, 0x5c, 0xb6, 0xed, 0x49, 0x02, + 0xd0, 0xb3, 0x76, 0xfe, 0x06, 0x8c, 0xa2, 0x3a, 0x7c, 0xc5, + 0x44, 0xed, 0xc4, 0x52, 0xf7, 0x34, 0xaa, 0x02, 0x03, 0x16, + 0x23, 0xaf, 0x8d, 0xee, 0xc1, 0x8d, 0x30, 0x6c, 0x14, 0x43, + 0x8d, 0x5c, 0xb6, 0xdd, 0xb6, 0xfd, 0x2f, 0x4c, 0x89, 0x01, + 0xf9, 0x73, 0x5d, 0xc5, 0x83, 0x3a, 0xbb, 0x12, 0x3b, 0xad, + 0x08, 0xcb, 0x55, 0xfd, 0xfc, 0xe9, 0xdc, 0x50, 0x72, 0x11, + 0x3e, 0x72, 0xcf, 0x93, 0xeb, 0xbc, 0x72, 0xa3, 0x49, 0x22, + 0x02, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x03, 0x00, + 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, + 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, + 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x07, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, + 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, + 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, + 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, + 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, + 0x05, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, + 0x03, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x02, 0x00, + 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x05, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x05, 0x00, + 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, + 0x04, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x07, 0x00, + 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, + 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, + 0x03, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x13, 0x21, + 0xa0, 0x85, 0xd1, 0x3e, 0xe6, 0x79, 0x69, 0x7e, 0x19, 0x19, + 0x83, 0xd5, 0x6f, 0x58, 0xdc, 0xa4, 0x1e, 0x7f, 0x8a, 0x1e, + 0x02, 0x9e, 0x23, 0x7f, 0xb8, 0x41, 0xdd, 0x32, 0xa9, 0x88, + 0x97, 0xd3, 0x7a, 0xec, 0x32, 0x78, 0x6d, 0x9e, 0x17, 0x3a, + 0x8e, 0x75, 0x79, 0xe0, 0x1d, 0x86, 0x7d, 0x17, 0x8a, 0xbc, + 0xca, 0x8f, 0x2b, 0xcd, 0x8e, 0x6b, 0x44, 0xcb, 0x8f, 0x5b, + 0xf6, 0xe5, 0xf2, 0xee, 0xda, 0xc0, 0x24, 0x2c, 0x72, 0xe9, + 0xff, 0x6c, 0xb3, 0x82, 0x1b, 0x50, 0x0b, 0xee, 0xa9, 0x50, + 0xc4, 0x0e, 0x5f, 0x9b, 0x76, 0xfb, 0x22, 0xe2, 0x55, 0x39, + 0x6e, 0xb5, 0xcc, 0xa3, 0x80, 0x96, 0x6b, 0xac, 0x63, 0x96, + 0x43, 0x9c, 0xe5, 0x49, 0xa9, 0x2e, 0xf6, 0x58, 0x09, 0x70, + 0xed, 0xb2, 0x89, 0x48, 0xc7, 0xed, 0x74, 0xaf, 0x43, 0x37, + 0x79, 0x89, 0x73, 0xe1, 0x86, 0x47, 0x4b, 0x7b, 0xed, 0xd7, + 0x9e, 0xe9, 0xaa, 0x68, 0xc6, 0xaa, 0xde, 0xbe, 0xcd, 0x33, + 0xaf, 0xa3, 0x6f, 0x18, 0x35, 0x3c, 0x8f, 0x0a, 0x1d, 0x14, + 0x92, 0x9b, 0xbe, 0x12, 0x8e, 0xc3, 0x13, 0x00, 0x7c, 0xbd, + 0x60, 0x5e, 0x45, 0x7d, 0xcd, 0x16, 0x77, 0xa5, 0xfd, 0xe1, + 0x78, 0xec, 0xb9, 0x9a, 0x06, 0xc3, 0x27, 0xaa, 0x6b, 0x9a, + 0x64, 0x37, 0x49, 0x70, 0x94, 0x50, 0xfd, 0x99, 0x34, 0xf8, + 0x8b, 0x72, 0x73, 0xd4, 0x50, 0xd0, 0x28, 0x5d, 0x05, 0xb1, + 0xd3, 0x16, 0x97, 0xe5, 0xf9, 0xa1, 0x30, 0x5d, 0xcb, 0x88, + 0xe7, 0x40, 0x20, 0xe9, 0x6b, 0x98, 0x24, 0x34, 0x49, 0x72, + 0x9d, 0x50, 0xff, 0x99, 0x34, 0x78, 0x8b, 0x72, 0x53, 0xd0, + 0x50, 0xd1, 0x28, 0x5c, 0x05, 0x39, 0xc7, 0x16, 0xb7, 0xe5, + 0xf9, 0xe1, 0x78, 0x59, 0xcb, 0x88, 0xe7, 0x41, 0x22, 0xe9, + 0x94, 0x67, 0xdb, 0xcb, 0xb6, 0x8d, 0x62, 0xaf, 0x00, 0x66, + 0xcb, 0x87, 0x74, 0x8d, 0xac, 0x2f, 0xaf, 0x2e, 0xd7, 0xa3, + 0xfa, 0xc6, 0x38, 0xe9, 0x48, 0x1a, 0x06, 0x1e, 0x87, 0xa6, + 0x34, 0x77, 0x18, 0xbe, 0xdd, 0x16, 0xaa, 0xc0, 0x05, 0xc9, + 0x74, 0xd5, 0x2a, 0xb9, 0x7d, 0xea, 0xa1, 0xcc, 0xd2, 0x6e, + 0xb0, 0xd3, 0xb4, 0x15, 0x6f, 0x7f, 0x3c, 0xba, 0x30, 0xe4, + 0x11, 0x5e, 0x15, 0xc4, 0x0d, 0x3e, 0x65, 0x16, 0x58, 0x71, + 0x37, 0xcb, 0x92, 0x21, 0x23, 0xbf, 0xef, 0x18, 0x5b, 0x32, + 0x38, 0xeb, 0x27, 0x2c, 0x72, 0xc7, 0xa0, 0x39, 0x3a, 0x91, + 0x47, 0x91, 0xf7, 0xb3, 0xd4, 0x3f, 0x2e, 0x54, 0xa1, 0x46, + 0xcd, 0x3b, 0x34, 0x6f, 0xd9, 0x7a, 0x64, 0xf0, 0xb9, 0x87, + 0x09, 0xd8, 0x3d, 0x01, 0xc9, 0x36, 0x67, 0x2b, 0x49, 0xe2, + 0xf5, 0xf9, 0xb0, 0xdc, 0xb8, 0x69, 0xda, 0x93, 0xe0, 0x3c, + 0xd0, 0xaa, 0xc2, 0x9b, 0xea, 0x7e, 0xb7, 0x64, 0x46, 0xae, + 0x1a, 0x62, 0x31, 0x33, 0xc7, 0x53, 0xbb, 0x0d, 0x8d, 0x89, + 0x59, 0xda, 0xb5, 0xba, 0x9b, 0xd9, 0xda, 0x99, 0x48, 0x96, + 0x00, 0x1d, 0x53, 0x48, 0x77, 0xe4, 0x58, 0x39, 0xad, 0xa9, + 0x43, 0xe6, 0x5f, 0xc7, 0x88, 0xd8, 0x67, 0x34, 0x00, 0x22, + 0x8a, 0x55, 0xeb, 0x31, 0x8d, 0xb9, 0x2d, 0x31, 0x5d, 0x6b, + 0xc2, 0x7a, 0x38, 0x1d, 0xfb, 0x98, 0x13, 0x67, 0xe2, 0x7d, + 0x78, 0xba, 0x16, 0xab, 0xfb, 0x6e, 0x5f, 0xb7, 0xf8, 0xd4, + 0x4f, 0x59, 0x1b, 0x16, 0xac, 0xbf, 0xcf, 0x59, 0xb0, 0x3b, + 0x3d, 0xd9, 0x43, 0x70, 0xd8, 0x2a, 0x8b, 0xf1, 0x5f, 0x1c, + 0xf4, 0xdd, 0x71, 0x09, 0xae, 0x6d, 0x81, 0x1e, 0xe7, 0x48, + 0xa9, 0xd2, 0x7d, 0xbe, 0x78, 0xa0, 0x5e, 0x99, 0x8b, 0x17, + 0x26, 0x00, 0x8b, 0x59, 0xb0, 0x3b, 0x3d, 0xd9, 0x43, 0x70, + 0xdc, 0x2a, 0x8b, 0xf1, 0x5b, 0x1d, 0xf0, 0xdc, 0x31, 0x09, + 0xae, 0x4d, 0xa1, 0x3a, 0xf6, 0xe8, 0xa9, 0xd2, 0x7d, 0xbe, + 0x78, 0xa4, 0x5e, 0x99, 0x0b, 0x16, 0x24, 0x20, 0x74, 0xa6, + 0x4f, 0xc4, 0xc2, 0x26, 0xbc, 0x8f, 0x23, 0xd5, 0x74, 0x0e, + 0xa4, 0xe2, 0x0f, 0x23, 0xce, 0xf6, 0x51, 0xb2, 0x5e, 0xc5, + 0x09, 0x17, 0x56, 0x2d, 0x82, 0x41, 0x87, 0x5b, 0xa1, 0x66, + 0xf4, 0xe9, 0xdb, 0xdf, 0x07, 0x00, 0x00, 0x00, 0x03, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x04, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, + 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, + 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, + 0x07, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x05, 0x00, + 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, + 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, + 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, + 0x03, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x06, 0x00, + 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, + 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, + 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, + 0x05, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x07, 0x00, + 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x07, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x06, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x04, 0x00, + 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, + 0x06, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, + 0x03, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x02, 0x00, + 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, + 0x03, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, + 0x03, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x02, 0x00, + 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, + 0x06, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x04, 0x00, + 0x00, 0x00, 0x5c, 0x2d, 0xcc, 0xff, 0x03, 0xa7, 0x5b, 0x18, + 0x1b, 0x43, 0xa3, 0x52, 0x04, 0x96, 0x90, 0x8a, 0x25, 0x56, + 0xa2, 0x7d, 0x61, 0x0f, 0xc2, 0x83, 0x7d, 0x32, 0x9b, 0x3f, + 0x94, 0xb8, 0xdc, 0x89, 0x7c, 0x5a, 0x75, 0xcd, 0x10, 0xef, + 0x9b, 0xb9, 0xe6, 0x46, 0x09, 0x92, 0x7c, 0xa0, 0xe0, 0x5e, + 0xf0, 0x61, 0xab, 0xc8, 0xe2, 0x41, 0x04, 0x7e, 0x2b, 0x26, + 0x7a, 0x33, 0xa2, 0x33, 0xa8, 0x2d, 0xe5, 0x55, 0x5b, 0x1e, + 0xfe, 0x1b, 0xd2, 0xdd, 0xde, 0x3f, 0x98, 0xcd, 0x70, 0x1f, + 0x62, 0x03, 0x94, 0xd6, 0xe0, 0x30, 0xd3, 0xbd, 0x5d, 0xdd, + 0x25, 0xc1, 0x98, 0x12, 0x39, 0xf6, 0x44, 0x2c, 0xdd, 0x42, + 0x89, 0x2f, 0x8d, 0xc9, 0x2b, 0x6f, 0x13, 0xf9, 0x9b, 0x65, + 0xdf, 0x3c, 0x9d, 0x50, 0xe5, 0x3f, 0x5e, 0x51, 0xa5, 0x4b, + 0x5e, 0x02, 0x35, 0xcc, 0x73, 0xf4, 0x91, 0x8f, 0x71, 0x8c, + 0xe0, 0x9c, 0xb6, 0xc4, 0xa9, 0xde, 0x37, 0x3c, 0x8c, 0x56, + 0x40, 0x9f, 0xfc, 0x07, 0x2a, 0xb6, 0x81, 0xf3, 0x2c, 0x02, + 0x7c, 0x1f, 0x60, 0xfe, 0x96, 0x7f, 0x2d, 0xa4, 0x55, 0xae, + 0xc6, 0xf1, 0xfb, 0x47, 0x22, 0x27, 0x0f, 0xf6, 0x40, 0xe5, + 0x37, 0x51, 0xaa, 0x27, 0x9a, 0xfd, 0xf4, 0x5b, 0x64, 0x6c, + 0x6c, 0x0e, 0x8b, 0x83, 0x9c, 0x43, 0xac, 0x0b, 0x7e, 0x71, + 0xb0, 0x79, 0x6a, 0xb3, 0x15, 0xfd, 0x4e, 0xe3, 0x10, 0x42, + 0xba, 0xae, 0xc1, 0xf6, 0x30, 0xc9, 0xf1, 0x3f, 0xaa, 0x16, + 0xcf, 0xb9, 0x90, 0x0b, 0x71, 0x31, 0x35, 0x06, 0x89, 0x83, + 0x9c, 0x43, 0x8c, 0x0f, 0x78, 0x79, 0xb0, 0x7b, 0x6a, 0xb2, + 0x15, 0xaf, 0x46, 0xf3, 0xd0, 0x43, 0x3a, 0xae, 0x41, 0xf6, + 0x30, 0xc1, 0xf1, 0x77, 0xaa, 0x36, 0xcf, 0xb9, 0x90, 0x1b, + 0x71, 0x31, 0x3d, 0x0e, 0x76, 0x7c, 0x63, 0xbc, 0x53, 0xf0, + 0x87, 0x86, 0x4f, 0x84, 0x95, 0x4d, 0xea, 0x50, 0xb9, 0x0c, + 0x2f, 0xbc, 0xc5, 0x51, 0xbe, 0x09, 0xcf, 0x3e, 0x0e, 0x88, + 0x55, 0xc9, 0x30, 0x46, 0x6f, 0xe4, 0x8e, 0xce, 0xc2, 0xf1, + 0x21, 0x92, 0xb3, 0x12, 0x7a, 0xad, 0x8c, 0x5f, 0x0c, 0x90, + 0x8f, 0x40, 0xb9, 0x15, 0xf8, 0x7a, 0x36, 0x2d, 0x59, 0xb5, + 0xfb, 0xee, 0xa9, 0x1c, 0xa1, 0x03, 0xea, 0xf6, 0x9d, 0xa4, + 0x79, 0x8a, 0xb3, 0x20, 0x50, 0x1c, 0x68, 0x85, 0x7d, 0x3d, + 0x84, 0x94, 0x21, 0x1b, 0x3a, 0x20, 0xf3, 0xcd, 0x71, 0x95, + 0x73, 0xa7, 0x78, 0x09, 0x52, 0x9a, 0x7f, 0x22, 0x1f, 0xbf, + 0x85, 0x14, 0xe2, 0x28, 0xf2, 0xf7, 0x67, 0x3a, 0x14, 0xc3, + 0x4f, 0xd0, 0x85, 0x79, 0x63, 0xdc, 0x80, 0x86, 0x53, 0x8f, + 0xf9, 0x2d, 0xc4, 0x85, 0x65, 0xdc, 0xe6, 0x95, 0x88, 0xc8, + 0x38, 0x98, 0xcc, 0x28, 0xfd, 0xac, 0x74, 0x14, 0x91, 0x96, + 0x30, 0x08, 0x26, 0xe8, 0x7f, 0xe8, 0xc6, 0x97, 0xb7, 0xa7, + 0x7e, 0x07, 0xca, 0x63, 0xb1, 0x71, 0x11, 0xb6, 0xe4, 0x27, + 0xa5, 0x5e, 0x69, 0x25, 0x56, 0x72, 0xcd, 0x6b, 0xfc, 0xef, + 0xa0, 0x7a, 0x13, 0xb6, 0x9e, 0xdd, 0xf4, 0x68, 0xd3, 0x4c, + 0xec, 0x73, 0x03, 0x99, 0x3f, 0x05, 0x6c, 0xed, 0x71, 0xe2, + 0x8a, 0x69, 0x9f, 0x92, 0xe4, 0xa1, 0xbe, 0x2e, 0x8e, 0xc0, + 0xc8, 0x1f, 0xf9, 0xe0, 0x7f, 0x17, 0xe3, 0x15, 0x97, 0x28, + 0x53, 0x65, 0x60, 0x98, 0xd0, 0x32, 0xe2, 0x78, 0x78, 0x7b, + 0xfe, 0xcd, 0x66, 0xe5, 0xd8, 0x87, 0xc0, 0xf5, 0xd1, 0x52, + 0xe0, 0x26, 0x91, 0x1a, 0x21, 0xb5, 0x4a, 0x1a, 0x74, 0xaa, + 0x9c, 0x56, 0x03, 0x55, 0x17, 0x1c, 0x9b, 0xc6, 0x70, 0x58, + 0xd9, 0xc3, 0xac, 0x50, 0xe2, 0x3a, 0xbf, 0x8d, 0x6e, 0xe5, + 0xd8, 0xc7, 0x80, 0xe5, 0xd1, 0x52, 0xe0, 0x27, 0xb0, 0x1a, + 0x25, 0xa5, 0x08, 0x1a, 0x7c, 0xe8, 0xdc, 0x56, 0x23, 0x55, + 0x17, 0x1c, 0x9b, 0x46, 0x70, 0x58, 0xd9, 0xc3, 0xac, 0x70, + 0xf2, 0x3b, 0x40, 0x72, 0x91, 0x1a, 0x27, 0x38, 0x7f, 0x1a, + 0x2e, 0xad, 0x1f, 0xd8, 0x4f, 0xe5, 0xda, 0x5a, 0xf7, 0xe5, + 0x83, 0x17, 0x23, 0xa9, 0xdc, 0xaa, 0xe8, 0xe3, 0x64, 0xb9, + 0x8f, 0xa7, 0x26, 0x3c, 0x53, 0x8f, 0x0d, 0xc4, 0x06, 0x00, + 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x06, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x07, 0x00, + 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x03, 0x00, + 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, + 0x05, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x06, 0x00, + 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, + 0x06, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x04, 0x00, + 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x05, 0x00, + 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x02, 0x00, + 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x06, 0x00, + 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x04, 0x00, + 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, + 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x05, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x03, 0x00, + 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x03, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, + 0x03, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x02, 0x00, + 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, + 0x06, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x07, 0x00, + 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0xac, 0x1e, 0xa9, 0xe7, + 0x99, 0xc5, 0x06, 0x78, 0x7f, 0x8d, 0xe2, 0xef, 0xa4, 0x88, + 0xdb, 0x2a, 0x8e, 0xcd, 0xc2, 0x31, 0x58, 0xac, 0xa0, 0x96, + 0xb7, 0xd2, 0x12, 0x40, 0x46, 0x86, 0xcd, 0xc6, 0x51, 0x6d, + 0xd0, 0x52, 0x73, 0x0b, 0xff, 0x9f, 0x07, 0x0a, 0xaa, 0x6b, + 0x58, 0xbd, 0xba, 0xb2, 0x29, 0x62, 0x87, 0xaa, 0xa3, 0x5c, + 0x79, 0x7d, 0x73, 0x97, 0x50, 0x7c, 0x3a, 0x05, 0x67, 0x50, + 0x8d, 0x6a, 0xa1, 0xfc, 0xc0, 0x92, 0x85, 0x19, 0xbb, 0xac, + 0x3b, 0x85, 0x31, 0xe1, 0x53, 0x7c, 0x46, 0xdc, 0xca, 0xe3, + 0x77, 0x89, 0xcf, 0xa7, 0x31, 0x02, 0x5b, 0x50, 0xbd, 0x68, + 0x22, 0xc0, 0x3d, 0x0d, 0xd4, 0x76, 0x55, 0x5c, 0x9a, 0xd0, + 0x9d, 0x7a, 0x6b, 0xf7, 0x7f, 0x7e, 0xfd, 0xaf, 0xff, 0xd8, + 0xeb, 0x25, 0x26, 0xe8, 0xf6, 0x4b, 0xf4, 0x2c, 0x96, 0xf7, + 0xe1, 0xb9, 0xac, 0xe4, 0xaa, 0x17, 0x7a, 0x3f, 0x0e, 0x6a, + 0x2c, 0x3b, 0xfe, 0x37, 0xc6, 0xc5, 0xfc, 0x19, 0xe8, 0x76, + 0xf1, 0xf6, 0xbc, 0x8c, 0xee, 0x52, 0x7c, 0x09, 0xdb, 0xa4, + 0x04, 0x0f, 0xb5, 0x0b, 0x8d, 0x19, 0x0b, 0x0b, 0xd7, 0xa7, + 0xf0, 0x2e, 0x02, 0x0e, 0x1e, 0x4a, 0x47, 0x4d, 0x36, 0xc6, + 0x29, 0xbc, 0x9f, 0xd7, 0x16, 0x73, 0xd3, 0x34, 0x9c, 0xcd, + 0x7d, 0x53, 0xfb, 0x4b, 0x0f, 0x04, 0x0c, 0x07, 0x73, 0x2b, + 0x95, 0x95, 0xa3, 0x0f, 0xde, 0x90, 0xf6, 0x3f, 0x32, 0x6e, + 0x17, 0x5f, 0x8c, 0xed, 0x38, 0x06, 0x39, 0x0d, 0x8d, 0x7c, + 0x85, 0xf1, 0xf3, 0x34, 0xbc, 0xcd, 0x7d, 0x52, 0xf9, 0x4b, + 0x0f, 0x84, 0x04, 0x07, 0x73, 0x2b, 0x95, 0x95, 0xa3, 0x0b, + 0xde, 0x90, 0xf6, 0x3f, 0x32, 0x6e, 0x1f, 0x4b, 0x8c, 0x6d, + 0x3c, 0x06, 0x2d, 0x0d, 0x9d, 0x7e, 0x85, 0x73, 0x0c, 0xcb, + 0x43, 0x32, 0x82, 0xad, 0x06, 0xb4, 0xf0, 0x7b, 0xfb, 0xf8, + 0x8c, 0xd4, 0x6a, 0x6a, 0x5c, 0xf4, 0x21, 0x6f, 0x09, 0xc0, + 0xcd, 0x91, 0xe0, 0xb4, 0x73, 0x92, 0xc3, 0xf9, 0xd2, 0xf2, + 0x62, 0x81, 0x7a, 0x8c, 0x6b, 0x8a, 0xee, 0xf0, 0x45, 0x3f, + 0xeb, 0xf5, 0x64, 0xb0, 0xd1, 0x54, 0x04, 0xe7, 0x16, 0x02, + 0x74, 0xa4, 0x8b, 0xbd, 0x35, 0xa4, 0x33, 0xa1, 0x00, 0x39, + 0x16, 0x16, 0x2a, 0x0f, 0xfa, 0xb6, 0x95, 0x11, 0x71, 0xb5, + 0x34, 0x1b, 0xbe, 0x28, 0x96, 0xa7, 0xe9, 0x64, 0x0c, 0x04, + 0xf2, 0xf4, 0xd6, 0x0e, 0xe7, 0xdd, 0x59, 0xef, 0x79, 0x29, + 0x7c, 0x68, 0x49, 0xf4, 0x66, 0xde, 0x44, 0x93, 0x33, 0xab, + 0xd1, 0x05, 0x83, 0x6e, 0xb0, 0x84, 0xc3, 0xa6, 0xc3, 0x84, + 0x5f, 0xdd, 0xee, 0x1a, 0x65, 0x57, 0xb9, 0xee, 0xfe, 0x82, + 0xf4, 0xd8, 0x8e, 0x8b, 0xbc, 0x84, 0x5e, 0xa1, 0x0c, 0x4f, + 0x40, 0x81, 0xda, 0x2d, 0xf0, 0xd3, 0x1a, 0x87, 0xff, 0x7e, + 0xd0, 0x9f, 0x39, 0xbc, 0x9f, 0x0f, 0x05, 0x06, 0x6e, 0x5b, + 0xc7, 0x4a, 0xfa, 0x89, 0xc3, 0xcf, 0x3d, 0xe2, 0x5f, 0x4f, + 0x80, 0x15, 0x93, 0xa5, 0x22, 0x12, 0x61, 0xae, 0x57, 0xe2, + 0x02, 0x40, 0x07, 0xd4, 0xb8, 0xf9, 0x33, 0x47, 0x1a, 0x42, + 0x4e, 0x84, 0xa2, 0xb0, 0x86, 0xf4, 0x07, 0x96, 0xf5, 0x37, + 0x84, 0x37, 0x2c, 0xa6, 0xc5, 0x0d, 0xf1, 0xf6, 0x56, 0x59, + 0x3a, 0xe6, 0xf6, 0x73, 0xf1, 0x1f, 0x9d, 0xe1, 0x81, 0x1d, + 0x36, 0x42, 0x85, 0x59, 0x2a, 0xee, 0x73, 0xc0, 0xa1, 0x8c, + 0xd7, 0x50, 0x0e, 0x1e, 0x5a, 0x57, 0x8c, 0x33, 0xbd, 0x0c, + 0x1d, 0x0b, 0x03, 0xc4, 0x37, 0xfd, 0xbb, 0x36, 0xea, 0x67, + 0xd9, 0x7c, 0x9f, 0x02, 0x11, 0x04, 0x37, 0x47, 0x89, 0x01, + 0x2a, 0xe6, 0x5b, 0x80, 0xa1, 0x84, 0xd6, 0xd0, 0x0e, 0x1e, + 0xf8, 0x57, 0x8c, 0x37, 0xbd, 0x0c, 0x5d, 0x0f, 0x01, 0xc4, + 0x17, 0xf9, 0xbb, 0x36, 0xe2, 0x67, 0xd9, 0x74, 0x9d, 0x43, + 0x11, 0x04, 0x37, 0x4e, 0x99, 0x01, 0xd5, 0x19, 0xa4, 0x7f, + 0x5e, 0x7b, 0x29, 0x2f, 0xf1, 0xe1, 0x07, 0xa8, 0x73, 0xc8, + 0x42, 0xf3, 0xa2, 0xf0, 0xfe, 0x3b, 0xe8, 0x06, 0x44, 0xc9, + 0x1d, 0x98, 0x26, 0x8b, 0x62, 0xbc, 0xee, 0xfb, 0xc8, 0xb1, + 0x66, 0xfe, 0x04, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, + 0x07, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x02, 0x00, + 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x04, 0x00, + 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x03, 0x00, + 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x06, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x02, 0x00, + 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, + 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, + 0x06, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x01, 0x00, + 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x06, 0x00, + 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, + 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, + 0x06, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x07, 0x00, + 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, + 0x03, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x05, 0x00, + 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, + 0x07, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x05, 0x00, + 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x02, 0x00, + 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, + 0x06, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x05, 0x00, + 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x03, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x03, 0xad, 0x91, 0xce, 0xbd, 0x79, 0xce, 0x17, 0xea, 0x0b, + 0x09, 0xf1, 0xf1, 0xb6, 0xab, 0x71, 0x10, 0xb8, 0xb7, 0xae, + 0xf9, 0x51, 0x02, 0x8c, 0xc5, 0x3d, 0xd7, 0x67, 0x02, 0x4f, + 0xcd, 0x2d, 0x06, 0xdc, 0x9d, 0x63, 0x59, 0xbf, 0xe1, 0xfe, + 0xab, 0x2b, 0x85, 0xf5, 0x90, 0x24, 0x89, 0xe1, 0xcb, 0xc9, + 0x91, 0x08, 0x98, 0x58, 0x12, 0xb5, 0xd8, 0xb7, 0x89, 0x14, + 0x23, 0x99, 0x5f, 0x4f, 0x46, 0x14, 0x08, 0xc5, 0xa2, 0xea, + 0xf8, 0xf2, 0x7d, 0xd5, 0xc3, 0x73, 0x7a, 0x4e, 0xe0, 0x46, + 0xaf, 0x98, 0xdd, 0xe2, 0x4a, 0x2d, 0x4f, 0xf5, 0xe6, 0x9b, + 0xfe, 0x13, 0xae, 0xaa, 0x71, 0x9e, 0xdb, 0xe6, 0xcd, 0xe6, + 0x63, 0x45, 0xc5, 0x88, 0x2f, 0x02, 0x72, 0x95, 0xb3, 0x33, + 0xa2, 0xd2, 0x08, 0xa0, 0x92, 0x82, 0x4f, 0x0d, 0x97, 0x21, + 0xa2, 0x1f, 0x8d, 0x14, 0x1a, 0x77, 0x30, 0x76, 0x5e, 0x62, + 0x36, 0x39, 0x94, 0xd3, 0xa0, 0x8a, 0x4a, 0xe4, 0x31, 0x33, + 0xe9, 0xac, 0x5b, 0xb3, 0x2e, 0x9d, 0xce, 0x19, 0xfc, 0xcf, + 0x7f, 0xd6, 0xd6, 0x0b, 0x17, 0x3d, 0x90, 0xea, 0x2b, 0x0b, + 0x00, 0x4f, 0x1b, 0x2e, 0x8c, 0x2f, 0x20, 0xdd, 0x6f, 0xf1, + 0x08, 0x2c, 0xd1, 0x87, 0x8e, 0x5a, 0xab, 0x02, 0xa1, 0x25, + 0x31, 0x1e, 0x8d, 0x75, 0xbd, 0x6d, 0x72, 0xd6, 0x5a, 0x0f, + 0x51, 0x0d, 0xf0, 0x83, 0xef, 0xb1, 0x3a, 0x83, 0x1a, 0x2f, + 0x1e, 0x2a, 0x62, 0x4d, 0x5f, 0xdf, 0x48, 0xb2, 0x34, 0xdf, + 0x14, 0x14, 0x68, 0x6a, 0xe2, 0x87, 0x31, 0x9f, 0xcd, 0x71, + 0xbd, 0x6d, 0x72, 0xd6, 0x5e, 0x0d, 0x55, 0x05, 0x90, 0x83, + 0xaf, 0xb1, 0x2a, 0x0b, 0x1a, 0x2f, 0x1e, 0x2a, 0x22, 0x5d, + 0x7f, 0xff, 0x48, 0xb2, 0x74, 0xc7, 0x14, 0x10, 0x68, 0x0a, + 0xe2, 0x87, 0xce, 0x60, 0x32, 0x8e, 0x42, 0x92, 0x8d, 0x29, + 0xa1, 0xf2, 0xaa, 0xfa, 0x6f, 0x7c, 0x50, 0x4e, 0xd5, 0xf4, + 0xe5, 0xd0, 0xe1, 0xd5, 0xdd, 0xa2, 0x80, 0x00, 0xb7, 0x4d, + 0x8b, 0x38, 0xeb, 0xef, 0x97, 0xf5, 0x1d, 0x78, 0x6f, 0x53, + 0x3a, 0xfe, 0x44, 0x3f, 0x84, 0x8a, 0x82, 0xf2, 0x95, 0x36, + 0x4d, 0xa7, 0x56, 0x12, 0x01, 0xa4, 0x57, 0x40, 0xf6, 0x1f, + 0x88, 0x33, 0xae, 0x10, 0xec, 0xe2, 0x06, 0x5d, 0x0f, 0xb9, + 0x5d, 0xfd, 0x04, 0x19, 0xd4, 0x9b, 0x6f, 0xf8, 0x33, 0x60, + 0xec, 0xdb, 0xd9, 0x57, 0xe0, 0x8f, 0xe5, 0xc4, 0x71, 0x50, + 0x9f, 0x62, 0x54, 0xd3, 0xda, 0x6c, 0xdd, 0x5f, 0x63, 0x39, + 0xff, 0x58, 0xde, 0xa9, 0xbf, 0xfe, 0x0b, 0x23, 0x0e, 0xb9, + 0xd3, 0x8c, 0x3d, 0xf9, 0x78, 0xb1, 0xef, 0xee, 0xb9, 0x8f, + 0xce, 0x78, 0x29, 0x03, 0xe4, 0x8b, 0x0c, 0x7c, 0x3e, 0x25, + 0x96, 0xe5, 0x4e, 0x31, 0xae, 0x18, 0x76, 0xc1, 0xfe, 0x84, + 0xe7, 0x70, 0xfb, 0x2b, 0x89, 0x15, 0x6d, 0xef, 0x28, 0xdd, + 0xd1, 0x58, 0x02, 0xb0, 0x80, 0x39, 0xb5, 0xe9, 0xa6, 0xd0, + 0x7e, 0x27, 0x54, 0xe9, 0xbd, 0xf6, 0xf8, 0x8f, 0x80, 0x29, + 0x88, 0x22, 0xda, 0xde, 0xa7, 0xa4, 0xd2, 0x63, 0x46, 0xca, + 0xd0, 0x95, 0x8e, 0xf3, 0x67, 0xfc, 0x7c, 0xd3, 0x97, 0x5a, + 0x7c, 0x3b, 0xf2, 0xa9, 0x8a, 0x34, 0x64, 0xf1, 0xa0, 0x3c, + 0x66, 0x43, 0x1b, 0xba, 0xb0, 0x8a, 0x1c, 0x68, 0x53, 0x43, + 0xd0, 0x24, 0x25, 0xcc, 0x42, 0x72, 0x49, 0x54, 0xd0, 0x77, + 0xef, 0xfb, 0xc6, 0xd1, 0x93, 0xf0, 0x72, 0x39, 0x1a, 0xab, + 0xb8, 0x74, 0x65, 0x4c, 0x8e, 0x6e, 0x62, 0xe7, 0xd2, 0xe6, + 0x78, 0x2a, 0x88, 0x31, 0x03, 0x62, 0x66, 0x3f, 0x65, 0x68, + 0x42, 0xf3, 0x1a, 0x50, 0xc0, 0x77, 0xef, 0xfb, 0xce, 0xd1, + 0x93, 0xf0, 0x70, 0x39, 0x12, 0xa1, 0xb8, 0x74, 0x65, 0x45, + 0x86, 0x6e, 0x66, 0xe7, 0xd2, 0xe6, 0x78, 0x2a, 0x88, 0x31, + 0x53, 0x62, 0x62, 0x34, 0x65, 0x68, 0x42, 0xf2, 0x1a, 0x54, + 0x3f, 0x88, 0x10, 0x04, 0x31, 0x2e, 0x6c, 0x0f, 0x8f, 0xc6, + 0xed, 0x56, 0x47, 0x8b, 0x9a, 0xba, 0x79, 0x91, 0x99, 0x18, + 0x2d, 0x19, 0x87, 0xd5, 0x77, 0xce, 0xac, 0x9d, 0x9d, 0xcb, + 0x9a, 0x97, 0xbd, 0x0d, 0xe5, 0xab, 0x02, 0x00, 0x00, 0x00, + 0x05, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x04, 0x00, + 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x05, 0x00, + 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, + 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, + 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x05, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, + 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, + 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, + 0x05, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x03, 0x00, + 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, + 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, + 0x06, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x07, 0x00, + 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x05, 0x00, + 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x04, 0x00, + 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x03, 0x00, + 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x06, 0x00, + 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, + 0x02, 0x00, 0x00, 0x00, 0xe5, 0x77, 0xae, 0xd6, 0x41, 0x1e, + 0x28, 0x48, 0x6f, 0x6d, 0x57, 0x6e, 0x48, 0x31, 0x03, 0x78, + 0xa6, 0x49, 0x91, 0x1a, 0xf2, 0x2b, 0x28, 0x7c, 0x2a, 0xa5, + 0x1c, 0xd1, 0x1e, 0x0f, 0xe7, 0x40, 0xcc, 0x52, 0xcc, 0xa3, + 0x90, 0x42, 0x99, 0xdc, 0xfe, 0xdd, 0xff, 0xea, 0x35, 0xf8, + 0x60, 0xe0, 0x78, 0xf4, 0x7d, 0x92, 0x2d, 0xbc, 0xc2, 0x1a, + 0x63, 0x59, 0x06, 0xf6, 0x41, 0xdd, 0x9d, 0xb8, 0xcf, 0xfa, + 0xf0, 0xe5, 0xd6, 0x9c, 0x68, 0x52, 0x5d, 0x05, 0x43, 0x36, + 0xa1, 0x1c, 0x39, 0x73, 0xa9, 0xca, 0xb1, 0x3c, 0xbf, 0xca, + 0x0f, 0x18, 0xfd, 0xe4, 0x44, 0x5c, 0xf1, 0x8b, 0xd2, 0xef, + 0xe3, 0x83, 0xb1, 0xc4, 0xb8, 0xf4, 0x21, 0xe8, 0xab, 0x37, + 0x6b, 0x8f, 0xa7, 0x58, 0xe4, 0xca, 0x54, 0x8f, 0x8c, 0x4e, + 0x28, 0x23, 0x95, 0xf4, 0xa5, 0x5b, 0xb2, 0x29, 0x87, 0x06, + 0x30, 0xcd, 0x51, 0xad, 0x2f, 0xd2, 0xf6, 0xe7, 0x0b, 0xa9, + 0xc5, 0x57, 0xe8, 0x36, 0x5d, 0x2d, 0xe0, 0x18, 0x52, 0xfa, + 0x2e, 0x02, 0xf7, 0xf8, 0xd8, 0x76, 0x0e, 0x6e, 0x0d, 0x15, + 0xd4, 0x9c, 0x04, 0xc9, 0x50, 0xbd, 0xed, 0x69, 0x33, 0x41, + 0x67, 0xdd, 0xa2, 0xd9, 0x64, 0x20, 0xb1, 0x60, 0xf5, 0xb1, + 0xd1, 0xe3, 0x94, 0x86, 0x5b, 0xfb, 0x3f, 0x04, 0xfd, 0x7d, + 0x58, 0x72, 0x8f, 0x66, 0x87, 0x07, 0x08, 0x68, 0x60, 0x38, + 0x9f, 0xaf, 0xee, 0x6d, 0xf5, 0x11, 0xeb, 0xcb, 0xba, 0x51, + 0x31, 0x90, 0x8b, 0xb2, 0xd0, 0xbb, 0x57, 0x53, 0x34, 0xda, + 0x53, 0xfb, 0x3f, 0x06, 0xfd, 0x7d, 0x58, 0x72, 0x0f, 0x6e, + 0x85, 0x07, 0x08, 0x68, 0x20, 0x38, 0x97, 0xae, 0x6f, 0x6d, + 0xf1, 0x01, 0xe3, 0xca, 0xba, 0x51, 0x31, 0x90, 0x8d, 0xb2, + 0xd0, 0xbb, 0xd7, 0x53, 0xb4, 0x9a, 0xac, 0x04, 0xc0, 0xf9, + 0x02, 0x82, 0xa7, 0x8d, 0xf0, 0x91, 0x7a, 0xf8, 0xf7, 0x97, + 0xdf, 0xc7, 0x68, 0x51, 0x90, 0x92, 0x0e, 0xfe, 0x1c, 0x35, + 0x45, 0xae, 0xce, 0x6f, 0x72, 0x4d, 0x2f, 0x44, 0x28, 0xac, + 0x4b, 0x65, 0x01, 0x35, 0x1e, 0xf1, 0x97, 0xb5, 0x9d, 0xa3, + 0x4a, 0xe5, 0x7e, 0x81, 0x1a, 0x37, 0xca, 0x9d, 0xb3, 0x10, + 0x96, 0x34, 0x1f, 0xf7, 0x3d, 0x26, 0xb2, 0x7d, 0x02, 0x8c, + 0x75, 0xd7, 0xb6, 0x19, 0xaf, 0x81, 0xa9, 0x4d, 0xe9, 0xbc, + 0xe6, 0x04, 0x48, 0x74, 0x67, 0x72, 0xe0, 0x93, 0x99, 0x05, + 0x55, 0x3f, 0xdb, 0xeb, 0x87, 0x17, 0x04, 0xc1, 0x5b, 0xd6, + 0xb8, 0xd7, 0x7b, 0x7f, 0xf6, 0x26, 0xeb, 0xb4, 0x23, 0x40, + 0xe4, 0x25, 0x48, 0xfb, 0x44, 0xbd, 0xc0, 0x71, 0x9e, 0xe8, + 0x93, 0x50, 0x80, 0x98, 0xcd, 0x52, 0xf3, 0x62, 0x2a, 0x92, + 0x1e, 0x67, 0x79, 0x8e, 0x4b, 0xd4, 0x02, 0xab, 0xa0, 0x48, + 0xda, 0x69, 0xf2, 0x35, 0x1d, 0xda, 0x02, 0x39, 0xaf, 0x76, + 0xe9, 0xda, 0xfa, 0x22, 0x0b, 0xfb, 0x7e, 0x5b, 0xce, 0x7d, + 0x46, 0xc0, 0x59, 0x18, 0x71, 0x36, 0x34, 0xea, 0xcb, 0x5f, + 0x86, 0x0c, 0xea, 0xff, 0x9b, 0x47, 0xd2, 0xf5, 0x05, 0x21, + 0x73, 0xe2, 0xdf, 0x92, 0x58, 0x51, 0x2a, 0x8e, 0x69, 0xd7, + 0xa6, 0xac, 0x81, 0xb0, 0xa5, 0xe8, 0x62, 0x32, 0xc0, 0xbe, + 0x84, 0x09, 0xac, 0x84, 0x75, 0xbe, 0xbc, 0x9c, 0x67, 0x98, + 0x6c, 0xc0, 0xd6, 0xa1, 0x38, 0x74, 0xab, 0xcd, 0x1e, 0xcf, + 0x5a, 0x02, 0x60, 0x45, 0x81, 0x40, 0x8e, 0x6c, 0xdb, 0x1c, + 0x10, 0xea, 0x27, 0x32, 0xc0, 0x9e, 0x45, 0x13, 0x74, 0x43, + 0x0f, 0xbe, 0xa8, 0x9c, 0x62, 0x98, 0x6d, 0x06, 0xda, 0xe6, + 0xf9, 0x75, 0x0a, 0x4c, 0x5f, 0x87, 0xce, 0x02, 0x60, 0x0f, + 0xc1, 0x42, 0x8e, 0xec, 0xdb, 0x38, 0x94, 0xe8, 0x26, 0x30, + 0xc0, 0x9e, 0x45, 0x13, 0x74, 0x43, 0x4f, 0xbe, 0xa8, 0x9c, + 0x62, 0x98, 0x6c, 0x06, 0xda, 0xa4, 0xf9, 0x75, 0x0a, 0x4c, + 0x5f, 0x87, 0x4e, 0x02, 0x9f, 0xf0, 0x3e, 0xbd, 0x71, 0x13, + 0x24, 0xc7, 0x6b, 0x17, 0xd9, 0xcf, 0x3f, 0x61, 0xba, 0xec, + 0x8b, 0xbc, 0xb0, 0x41, 0x57, 0x63, 0x9d, 0x67, 0x93, 0xf9, + 0x25, 0x5b, 0x06, 0x8a, 0xf5, 0xb3, 0xa0, 0x78, 0xb1, 0xfd, + 0x05, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x07, 0x00, + 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x03, 0x00, + 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x03, 0x00, + 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x03, 0x00, + 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, + 0x03, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, + 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, + 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, + 0x03, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x01, 0x00, + 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x05, 0x00, + 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, + 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x02, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x07, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x03, 0x00, + 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, + 0x04, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, + 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, + 0x05, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x98, 0xf7, + 0x0d, 0xd2, 0x0d, 0x3f, 0x4e, 0x78, 0xf9, 0x4b, 0x87, 0xe3, + 0x44, 0xb1, 0x82, 0x58, 0x68, 0x8c, 0x3a, 0xc1, 0x10, 0x7a, + 0x7f, 0x83, 0xa0, 0x9e, 0x69, 0xf5, 0x5a, 0x88, 0x16, 0x72, + 0x68, 0x29, 0x6f, 0x44, 0x72, 0x7b, 0x1e, 0x93, 0x0b, 0x39, + 0x43, 0xfa, 0x25, 0xa6, 0x57, 0x55, 0x84, 0x08, 0xd5, 0x31, + 0x4a, 0xc5, 0x59, 0xdf, 0x99, 0x59, 0xc8, 0x61, 0x45, 0x5a, + 0xc7, 0x7d, 0xea, 0xdb, 0x36, 0x80, 0x54, 0xa7, 0x49, 0x5b, + 0xdc, 0x92, 0xca, 0x77, 0x48, 0x1d, 0x27, 0xd5, 0x99, 0xee, + 0x9a, 0x0c, 0x7e, 0xb4, 0x60, 0x0a, 0xaf, 0x17, 0x49, 0xa9, + 0x7e, 0xce, 0xab, 0x39, 0x39, 0x91, 0x87, 0x78, 0x8d, 0x8c, + 0x31, 0x02, 0x18, 0x8b, 0x54, 0xb9, 0x2f, 0x29, 0x3d, 0xcd, + 0x35, 0x13, 0xa8, 0x20, 0x88, 0xce, 0xff, 0x2e, 0x9c, 0xc1, + 0x34, 0xc0, 0x65, 0x1d, 0x61, 0xc4, 0x2c, 0xa9, 0x23, 0x93, + 0xa6, 0xf0, 0x6f, 0xad, 0x5d, 0xeb, 0x74, 0x27, 0xac, 0x64, + 0xfd, 0x1d, 0x88, 0x89, 0xf7, 0x86, 0x2a, 0x17, 0x5d, 0xf3, + 0x06, 0x1a, 0xa3, 0xa3, 0x28, 0x9b, 0xb9, 0xae, 0x36, 0x46, + 0xf1, 0x75, 0xa0, 0x4c, 0xa3, 0x1c, 0x7d, 0x33, 0x69, 0x23, + 0xc1, 0xe1, 0xb3, 0x23, 0xdf, 0x0a, 0xad, 0x54, 0x34, 0xcb, + 0xb5, 0x91, 0x6b, 0x93, 0xbd, 0x57, 0x84, 0x6b, 0x26, 0xf7, + 0xfc, 0x99, 0x78, 0x87, 0xb7, 0x2e, 0x63, 0xe6, 0xf4, 0xcc, + 0xa3, 0x10, 0x75, 0x1b, 0x67, 0x43, 0xc6, 0xe1, 0xa7, 0x32, + 0xfc, 0x10, 0xab, 0x5c, 0x24, 0x8b, 0xbf, 0x95, 0x6b, 0x93, + 0xbd, 0x57, 0x84, 0x6b, 0xa7, 0xa7, 0xfc, 0x99, 0x58, 0x8e, + 0xb7, 0x0e, 0x63, 0xe4, 0xf0, 0xcc, 0xa3, 0x10, 0x75, 0x13, + 0x67, 0x63, 0xc6, 0xe9, 0xb7, 0x32, 0xfc, 0x02, 0xab, 0x5c, + 0xdb, 0x74, 0x40, 0x6a, 0x94, 0x6c, 0x42, 0xa8, 0x7b, 0x94, + 0x58, 0x58, 0x03, 0x66, 0xa7, 0x71, 0x48, 0xf1, 0x9c, 0x1b, + 0x0f, 0x33, 0x5c, 0xef, 0x8a, 0xec, 0x98, 0x9c, 0x39, 0x16, + 0x48, 0xcd, 0x03, 0xfd, 0x54, 0xa3, 0x60, 0x88, 0xe3, 0x0b, + 0x99, 0x43, 0xc0, 0x55, 0x98, 0x74, 0xd2, 0x8d, 0xbb, 0x82, + 0x99, 0x0b, 0xa9, 0x1e, 0xbf, 0x1c, 0xff, 0x1a, 0x09, 0xaf, + 0x5b, 0xbf, 0xc9, 0x4d, 0x10, 0xaf, 0x90, 0x1a, 0x18, 0x41, + 0xc9, 0x59, 0xce, 0xb2, 0x76, 0x43, 0x5d, 0x59, 0xfa, 0x1f, + 0x4c, 0x22, 0xec, 0x98, 0x1f, 0x68, 0x39, 0xea, 0x11, 0x6b, + 0xd1, 0xd0, 0x88, 0x59, 0xa7, 0x16, 0xb7, 0x4e, 0x13, 0x18, + 0x1b, 0xc9, 0xc2, 0xb5, 0xb0, 0x1d, 0xde, 0x51, 0xf3, 0xca, + 0x83, 0x51, 0x42, 0xc2, 0x90, 0x1d, 0xd3, 0x5b, 0x58, 0x41, + 0x92, 0xea, 0x8c, 0x84, 0xc9, 0x9d, 0x2c, 0x15, 0x44, 0x7e, + 0x67, 0xb9, 0xc2, 0x9f, 0xac, 0x35, 0xe5, 0x21, 0xbc, 0x7a, + 0x97, 0xe3, 0x79, 0x47, 0x54, 0x97, 0x65, 0x06, 0x96, 0xfa, + 0x73, 0xd3, 0xca, 0x49, 0x74, 0x28, 0x9e, 0xb0, 0xc3, 0x4f, + 0x5a, 0xc1, 0x22, 0x8f, 0x93, 0x1d, 0xd5, 0x9c, 0x52, 0x01, + 0xce, 0x8f, 0x8e, 0x40, 0xb4, 0x0b, 0xe2, 0x48, 0x6c, 0x91, + 0x3e, 0xd8, 0x76, 0xe3, 0x21, 0x12, 0xc0, 0xfe, 0xd0, 0xe5, + 0xc4, 0x16, 0x23, 0x90, 0x89, 0x93, 0xcd, 0xc5, 0xe0, 0xf3, + 0x39, 0x44, 0x00, 0xe8, 0xe1, 0x19, 0xc1, 0xc3, 0x4e, 0xfc, + 0x22, 0xfe, 0x6f, 0x7c, 0xf6, 0x91, 0x49, 0xd9, 0x37, 0xd3, + 0x21, 0x70, 0xfa, 0x0a, 0x50, 0xfc, 0xe4, 0x16, 0x82, 0x90, + 0xb5, 0x9f, 0xc8, 0x41, 0x21, 0xbf, 0xbf, 0x04, 0x04, 0x79, + 0x61, 0x1c, 0x0f, 0xc3, 0xcd, 0xbd, 0xb2, 0xe5, 0xc2, 0x7a, + 0x31, 0x03, 0x49, 0xd1, 0x37, 0xd3, 0x21, 0x72, 0xf2, 0x0a, + 0x52, 0xfd, 0xe4, 0x16, 0x82, 0x90, 0x95, 0x9f, 0xc8, 0x41, + 0x21, 0xbf, 0xbf, 0x44, 0x04, 0xf9, 0x61, 0x1d, 0x0f, 0xc3, + 0xcd, 0xbd, 0xb2, 0xe5, 0xe2, 0x78, 0x35, 0x03, 0xb6, 0x2e, + 0xc8, 0x2c, 0xde, 0x8d, 0x0d, 0xf5, 0xad, 0x02, 0x1b, 0xe9, + 0x7d, 0x6f, 0x6a, 0x60, 0x37, 0xbe, 0xde, 0x40, 0x40, 0xbb, + 0xfb, 0x06, 0x9e, 0xe2, 0xf0, 0x3c, 0x32, 0x42, 0x4d, 0x1a, + 0x1d, 0x87, 0xca, 0xfc, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, + 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x07, 0x00, + 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, + 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x05, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x07, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x07, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x07, 0x00, + 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, + 0x06, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x01, 0x00, + 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, + 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x02, 0x00, + 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x06, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x03, 0x00, + 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x03, 0x00, + 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, + 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x05, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x07, 0x00, + 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x03, 0x00, + 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, + 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x05, 0x00, + 0x00, 0x00, 0x93, 0x95, 0x7e, 0xa4, 0x96, 0xce, 0x6b, 0x84, + 0x5f, 0x8f, 0xd6, 0x62, 0x1c, 0x75, 0xd9, 0x0f, 0x4f, 0xe8, + 0x67, 0xbe, 0xf4, 0xa7, 0xd9, 0xf9, 0x69, 0x68, 0xff, 0x61, + 0x0f, 0x86, 0x93, 0x8c, 0xdf, 0x2e, 0xbd, 0xd4, 0x73, 0x04, + 0x68, 0x85, 0x2e, 0xe4, 0xff, 0x6c, 0x95, 0x04, 0xab, 0x8e, + 0x6d, 0xf6, 0x08, 0xdf, 0x90, 0xed, 0xfe, 0xf4, 0x44, 0x7d, + 0xed, 0x8c, 0xaf, 0x85, 0x02, 0x63, 0xb0, 0xc3, 0xff, 0x97, + 0xbe, 0x31, 0x20, 0x0c, 0x48, 0x08, 0x2e, 0x28, 0xa0, 0xd8, + 0x5d, 0xb8, 0xea, 0xaa, 0x00, 0x25, 0x7d, 0xf2, 0x06, 0xe1, + 0x0f, 0x5e, 0xfe, 0x68, 0x27, 0xcc, 0x9e, 0xb4, 0x65, 0x14, + 0x1e, 0xd1, 0x52, 0x11, 0xdd, 0x4e, 0x7b, 0x3f, 0xb1, 0xaf, + 0xc6, 0x5d, 0x01, 0x8a, 0x82, 0x5c, 0xd0, 0xb0, 0x55, 0x95, + 0xbc, 0x7b, 0x09, 0xa7, 0x63, 0x9d, 0xdd, 0x98, 0x0c, 0x0d, + 0xb3, 0x07, 0x63, 0x08, 0x8c, 0xd6, 0xc5, 0x36, 0xe4, 0x05, + 0x96, 0x90, 0xaf, 0x2e, 0xde, 0xe3, 0x8e, 0xec, 0xfd, 0x5f, + 0x46, 0xfa, 0x2a, 0x92, 0x4f, 0x41, 0x50, 0xcc, 0xcc, 0xa9, + 0x34, 0xb3, 0xa1, 0x7c, 0xd4, 0x7f, 0x51, 0xc4, 0x71, 0x63, + 0xf1, 0x5e, 0x4c, 0xf7, 0xe1, 0x0d, 0xe6, 0x25, 0x9d, 0x4b, + 0x6b, 0xc6, 0x4c, 0x23, 0x6f, 0x09, 0x04, 0x1a, 0x3e, 0x90, + 0x47, 0xe7, 0xdd, 0xcc, 0x8c, 0xc7, 0x16, 0xa7, 0x27, 0x18, + 0x9c, 0x6f, 0x71, 0xfc, 0x79, 0x69, 0x81, 0xc7, 0xde, 0x2f, + 0xaa, 0x44, 0x9d, 0xd8, 0x9c, 0xae, 0x1a, 0x46, 0x4e, 0x21, + 0x6d, 0x09, 0x06, 0x5a, 0x7e, 0x90, 0x47, 0xe7, 0xdc, 0xcc, + 0x8c, 0xc7, 0x16, 0xa7, 0x27, 0x38, 0x9c, 0x6f, 0x71, 0xfc, + 0x59, 0x69, 0x81, 0xc7, 0xce, 0x27, 0xe9, 0x45, 0x95, 0xd8, + 0x9c, 0x2e, 0x1b, 0xc6, 0xb1, 0xde, 0x92, 0xf6, 0xf9, 0xa5, + 0x81, 0x6f, 0xb8, 0x18, 0x23, 0x33, 0x73, 0x38, 0xe9, 0x58, + 0xd8, 0xc7, 0x63, 0x90, 0x8e, 0x03, 0xa6, 0x96, 0x7e, 0x38, + 0x31, 0xd8, 0x16, 0xba, 0x6a, 0x27, 0x63, 0xd1, 0xe4, 0x39, + 0xa5, 0xd1, 0x26, 0xe4, 0xca, 0x7a, 0x4f, 0x67, 0x90, 0xd2, + 0xb7, 0xfb, 0x20, 0xb7, 0x9d, 0xeb, 0xd4, 0xe8, 0x94, 0x13, + 0x7a, 0x9a, 0xb6, 0x93, 0x8c, 0x02, 0x39, 0xa1, 0x0b, 0x6b, + 0x1f, 0x1d, 0x33, 0xeb, 0x64, 0x00, 0xa6, 0x62, 0x12, 0xa2, + 0xd0, 0xd8, 0xeb, 0x9e, 0x7b, 0x50, 0xf8, 0x6f, 0xbc, 0x0e, + 0x50, 0xa4, 0xf9, 0x7d, 0x41, 0xf3, 0xbb, 0x2c, 0x5d, 0xd7, + 0x72, 0x39, 0x25, 0x12, 0xff, 0x33, 0x0c, 0x9b, 0x9c, 0x8a, + 0x68, 0xd5, 0xfe, 0x46, 0x62, 0xf1, 0x32, 0x94, 0x3d, 0xce, + 0xc0, 0x33, 0xfb, 0x3c, 0x61, 0xe0, 0xaa, 0x3c, 0xb5, 0x77, + 0x3c, 0x96, 0x47, 0x46, 0xa0, 0x6f, 0x9e, 0x68, 0xf2, 0x4a, + 0x53, 0xd5, 0x82, 0xf0, 0x4e, 0x2e, 0x4e, 0x55, 0x1b, 0x89, + 0xaf, 0x00, 0x06, 0xdd, 0x91, 0x56, 0xf8, 0x3a, 0x4e, 0xbf, + 0xa8, 0x08, 0x20, 0x0a, 0xe5, 0x33, 0x9f, 0xe2, 0x13, 0xc3, + 0x9e, 0xa4, 0x1d, 0x19, 0x8c, 0x97, 0x6b, 0xae, 0xba, 0x14, + 0x9f, 0x0c, 0xf4, 0x41, 0xe7, 0x99, 0x3d, 0xde, 0xdb, 0x56, + 0x92, 0x68, 0x5e, 0x8c, 0xde, 0x97, 0xe7, 0x4c, 0x13, 0x25, + 0xae, 0xc6, 0x38, 0x9e, 0xb6, 0xa3, 0xe4, 0x8d, 0xa2, 0x77, + 0xee, 0xd8, 0xd0, 0x54, 0x20, 0xd4, 0x6a, 0x3d, 0xbd, 0xb9, + 0xae, 0x13, 0xb5, 0x4e, 0x93, 0x66, 0xd0, 0xed, 0x7d, 0x1c, + 0x5c, 0xb5, 0xe3, 0x8c, 0x26, 0x77, 0x98, 0x97, 0x1c, 0x83, + 0x8d, 0x43, 0xbe, 0x35, 0x96, 0x2a, 0xbf, 0xfc, 0x10, 0x94, + 0x02, 0xa0, 0x13, 0x10, 0xb5, 0xf5, 0xa7, 0x13, 0xb5, 0x4e, + 0x93, 0x72, 0x90, 0xed, 0x7c, 0x1c, 0x5e, 0xb7, 0xa3, 0x4c, + 0x26, 0x77, 0x88, 0x87, 0x1c, 0x83, 0x8d, 0x43, 0xae, 0xa5, + 0x9e, 0x2a, 0xbf, 0xdc, 0x10, 0x94, 0x32, 0xb0, 0x13, 0x10, + 0xb5, 0xf1, 0x58, 0xec, 0x4a, 0xb1, 0x6c, 0x8d, 0x6f, 0x12, + 0x83, 0xe3, 0xa1, 0x48, 0x5c, 0xb3, 0xd9, 0x88, 0x77, 0x78, + 0xe3, 0x7c, 0x72, 0xbc, 0x51, 0x5a, 0x61, 0xd5, 0x40, 0x23, + 0xef, 0x6b, 0xcd, 0x4f, 0xec, 0xef, 0x4a, 0x0e, 0x02, 0x00, + 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x04, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x05, 0x00, + 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, + 0x03, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, + 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x07, 0x00, + 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, + 0x06, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x02, 0x00, + 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x05, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x06, 0x00, + 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x01, 0x00, + 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x04, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x03, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x05, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x01, 0x00, + 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, + 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x04, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x04, 0x00, + 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x03, 0x00, + 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x04, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, + 0x06, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x05, 0x00, + 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x2a, 0xbf, 0x90, 0xb2, + 0xd0, 0x0d, 0x6d, 0x55, 0x3d, 0x93, 0x08, 0x8e, 0xde, 0xf2, + 0x8a, 0x38, 0xda, 0x6c, 0x3f, 0x12, 0xfe, 0x62, 0xb9, 0xa9, + 0xa4, 0x1e, 0x6a, 0x23, 0xfc, 0x16, 0xf0, 0x37, 0xb0, 0xe4, + 0xeb, 0x72, 0xa8, 0xa0, 0xc7, 0x7e, 0x0e, 0xa3, 0xae, 0x25, + 0xff, 0xee, 0xdb, 0x54, 0x83, 0x82, 0xd2, 0x9c, 0xbf, 0x2e, + 0x78, 0xc4, 0x32, 0x08, 0xf4, 0x60, 0x88, 0xa6, 0xcd, 0x1f, + 0x91, 0x50, 0x71, 0x26, 0x9a, 0x9a, 0x98, 0x2a, 0xc6, 0x53, + 0x15, 0xc9, 0xcc, 0x47, 0x3b, 0x64, 0xd6, 0x21, 0xe3, 0x9b, + 0x13, 0x27, 0x81, 0x43, 0x86, 0xc3, 0xe8, 0xd2, 0x62, 0xfb, + 0xae, 0x5b, 0xc5, 0x5b, 0x55, 0x45, 0xa5, 0x64, 0xb2, 0x8c, + 0xf8, 0x9c, 0x78, 0x51, 0x7e, 0x95, 0x39, 0x7d, 0x8f, 0x95, + 0x10, 0x4b, 0xa3, 0xba, 0x45, 0x0b, 0xc4, 0x1f, 0x4f, 0xf0, + 0x89, 0x75, 0x97, 0x1a, 0x16, 0x5a, 0x1d, 0x21, 0xc8, 0xb1, + 0x24, 0xd7, 0x9d, 0xe8, 0x1e, 0x99, 0x32, 0xfa, 0xed, 0x16, + 0xc3, 0x97, 0x5d, 0x64, 0xbf, 0x16, 0xdb, 0x60, 0x1e, 0x58, + 0x62, 0xc3, 0xfb, 0x17, 0x09, 0xb9, 0x68, 0x58, 0xee, 0x75, + 0xfd, 0x98, 0x74, 0xea, 0x1e, 0x38, 0x66, 0x5a, 0x1f, 0xd9, + 0x19, 0x43, 0x48, 0xdc, 0x98, 0x66, 0x02, 0xd7, 0xfc, 0x47, + 0x0f, 0x06, 0xd6, 0xee, 0x26, 0x9a, 0xe1, 0x01, 0x1b, 0x13, + 0x47, 0xc3, 0xf0, 0x42, 0xa4, 0x10, 0xbd, 0x7c, 0x74, 0x4e, + 0x15, 0xf1, 0x45, 0x5f, 0x8f, 0x89, 0xc5, 0x13, 0x48, 0xd9, + 0x53, 0x26, 0x82, 0xd7, 0xfc, 0x65, 0x0f, 0x06, 0xd6, 0x6a, + 0x26, 0x98, 0xe1, 0x01, 0x1b, 0x13, 0x4f, 0xd3, 0xf0, 0x42, + 0xa4, 0x10, 0xbd, 0x7c, 0x74, 0x4e, 0x14, 0xf1, 0x45, 0x5f, + 0x8f, 0x89, 0xc5, 0x13, 0x48, 0xd8, 0x5a, 0x26, 0x7d, 0x28, + 0x03, 0x9a, 0xf0, 0xf9, 0x29, 0x95, 0xd9, 0x67, 0x1e, 0xfe, + 0xe4, 0xec, 0xb0, 0x2c, 0x0f, 0xbd, 0x5b, 0xef, 0x42, 0x83, + 0x8b, 0xb1, 0xeb, 0x0e, 0xba, 0xa0, 0x70, 0x76, 0x3a, 0xec, + 0xb7, 0x27, 0xa5, 0xd9, 0x8b, 0x03, 0xb2, 0xa5, 0x06, 0x4e, + 0x04, 0x58, 0x73, 0x6b, 0x76, 0x95, 0xe1, 0x26, 0x04, 0xd1, + 0x68, 0x1d, 0x52, 0x58, 0x2b, 0x67, 0x02, 0xcb, 0x77, 0xc3, + 0x62, 0x17, 0xc7, 0x85, 0x2e, 0xc3, 0x09, 0x60, 0x78, 0x56, + 0x3d, 0x31, 0xfd, 0x95, 0xd1, 0x36, 0x78, 0x01, 0x1d, 0x1c, + 0xda, 0x0b, 0xa3, 0x4f, 0x7f, 0xe2, 0x0b, 0xaa, 0x96, 0x81, + 0xa0, 0x62, 0x0d, 0x7a, 0x09, 0xd2, 0x9e, 0x41, 0xb1, 0x01, + 0xa8, 0x71, 0x50, 0x85, 0x4c, 0xf5, 0x75, 0xdf, 0xd0, 0x16, + 0x1d, 0x14, 0x3f, 0x0f, 0x76, 0x9c, 0xd3, 0x76, 0xdc, 0x31, + 0xb5, 0x32, 0x22, 0xf3, 0x12, 0x7c, 0x2e, 0xbc, 0xaa, 0xdb, + 0xbe, 0x45, 0xd6, 0x95, 0x83, 0x7d, 0x54, 0x1f, 0x8c, 0x94, + 0x4e, 0xa1, 0x6d, 0x93, 0x58, 0x3e, 0x08, 0x6a, 0xee, 0xfc, + 0x58, 0x31, 0x0d, 0x07, 0x13, 0xd5, 0x40, 0xb8, 0x9d, 0x9a, + 0x08, 0x92, 0x3c, 0x17, 0x6e, 0x0c, 0x39, 0x94, 0x9d, 0xb3, + 0xb7, 0x88, 0x6a, 0x87, 0x3b, 0x90, 0x91, 0xf5, 0x88, 0xd6, + 0x19, 0x48, 0xf3, 0xcf, 0x80, 0x05, 0x76, 0x6e, 0x5b, 0x85, + 0xc9, 0xeb, 0x4a, 0x97, 0xfe, 0xc3, 0xe8, 0x79, 0xd4, 0x63, + 0x0c, 0x55, 0x6c, 0xc3, 0x67, 0x55, 0x3c, 0xbe, 0x7e, 0x83, + 0x1b, 0xbb, 0x35, 0x22, 0xe7, 0x12, 0xb8, 0x79, 0xf4, 0xec, + 0xa0, 0x45, 0x74, 0x62, 0x73, 0x4e, 0x49, 0x87, 0xc0, 0x32, + 0xdd, 0x00, 0xca, 0xff, 0xb4, 0x27, 0x06, 0x4f, 0x7c, 0xd6, + 0xe7, 0x15, 0x3d, 0x44, 0x7a, 0x49, 0x3b, 0xe1, 0x86, 0xb3, + 0xed, 0x92, 0x19, 0x69, 0xf4, 0xec, 0xa0, 0x45, 0x74, 0x60, + 0x73, 0x4e, 0x09, 0xc7, 0xc0, 0x32, 0xdd, 0x02, 0xc8, 0xfd, + 0xb4, 0x27, 0x0e, 0x4e, 0x7c, 0xd2, 0xe5, 0x15, 0x3d, 0x24, + 0x7a, 0x43, 0x3b, 0xa1, 0x86, 0xb3, 0x12, 0x6d, 0xe6, 0x96, + 0x0b, 0x13, 0x5f, 0xba, 0x8b, 0x9f, 0x8c, 0xb1, 0xf6, 0x38, + 0x3f, 0xcd, 0x22, 0xfd, 0x37, 0x02, 0x4b, 0xd8, 0xf1, 0xb1, + 0x83, 0x2d, 0x1a, 0xea, 0xc2, 0xdb, 0x85, 0xbc, 0xc4, 0x5e, + 0x79, 0x4c, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x05, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, + 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, + 0x07, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x04, 0x00, + 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x07, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x01, 0x00, + 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x01, 0x00, + 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x06, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x04, 0x00, + 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, + 0x03, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x01, 0x00, + 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x04, 0x00, + 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x07, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x00, + 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, + 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, + 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, + 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, + 0x05, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x06, 0x00, + 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, + 0x06, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x05, 0x00, + 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x08, 0xb0, 0x69, 0x3d, 0xf0, 0x30, 0x89, 0x7c, 0x2a, 0x99, + 0x41, 0xf5, 0x62, 0xf2, 0x31, 0xc9, 0x5e, 0xe5, 0x5a, 0x83, + 0x52, 0x81, 0x5a, 0x27, 0xfc, 0xd7, 0x96, 0x34, 0xa1, 0xe5, + 0x6f, 0xa1, 0xec, 0xf3, 0x8d, 0x5d, 0x2d, 0xf9, 0x52, 0x0c, + 0x06, 0x21, 0x95, 0xab, 0x7f, 0xc9, 0xd2, 0x18, 0x1a, 0x70, + 0x9b, 0x03, 0x52, 0xf4, 0x78, 0x1a, 0x7c, 0x38, 0xaf, 0xe5, + 0x95, 0x74, 0xf2, 0x12, 0x9c, 0x75, 0x92, 0x8a, 0x48, 0xec, + 0x73, 0x21, 0x61, 0xbc, 0x75, 0x18, 0xc6, 0x46, 0xee, 0xf5, + 0xbb, 0x5b, 0xb2, 0x03, 0x39, 0x1f, 0x3c, 0x31, 0xba, 0x49, + 0xf0, 0xfb, 0xe4, 0x19, 0x99, 0x17, 0x46, 0x47, 0x4a, 0x46, + 0x98, 0x10, 0x46, 0x8a, 0x7a, 0x76, 0xdf, 0x94, 0x83, 0x20, + 0x27, 0x27, 0x68, 0xc4, 0x9b, 0x4a, 0x56, 0x2c, 0x2d, 0xb5, + 0x14, 0xe0, 0xc6, 0x60, 0x08, 0x08, 0xd2, 0xa8, 0xca, 0xad, + 0x65, 0x6f, 0xa4, 0xf5, 0x63, 0xd1, 0x6a, 0x85, 0xa9, 0xb2, + 0x87, 0x0c, 0xad, 0xe9, 0x8a, 0xc8, 0x2e, 0x39, 0xaa, 0x20, + 0xfa, 0xf7, 0xd7, 0x6d, 0x70, 0x5f, 0xbc, 0x8f, 0x91, 0xaf, + 0xff, 0x60, 0xdc, 0x75, 0x0d, 0x72, 0xe7, 0x79, 0xba, 0x59, + 0x6d, 0x38, 0x8e, 0xce, 0x9e, 0xa4, 0x64, 0x46, 0xf4, 0x22, + 0xfc, 0x28, 0x39, 0x3a, 0xae, 0x3a, 0xba, 0xff, 0x57, 0xe8, + 0x99, 0xbf, 0xfc, 0xe4, 0xc9, 0x8e, 0x2f, 0x60, 0xde, 0x70, + 0xd7, 0xe5, 0xc3, 0x7d, 0x99, 0x1b, 0x00, 0x05, 0xbc, 0x64, + 0xd3, 0xac, 0x04, 0xef, 0xfa, 0x38, 0xfc, 0xa8, 0x3b, 0x3b, + 0xae, 0x2a, 0xba, 0xff, 0x57, 0xa8, 0xb1, 0xbf, 0xfc, 0xe5, + 0xc9, 0xae, 0x2f, 0x60, 0xd8, 0x71, 0xc7, 0xe5, 0xc3, 0x7d, + 0x99, 0x1b, 0x00, 0x05, 0xbc, 0xc4, 0xdb, 0xac, 0x04, 0xee, + 0xfa, 0x38, 0x03, 0x57, 0xc4, 0xc4, 0x51, 0xd5, 0x45, 0x00, + 0xa8, 0x57, 0x4e, 0x40, 0x03, 0x1a, 0x36, 0x51, 0xd0, 0x9f, + 0x27, 0x8e, 0x38, 0x1a, 0x3c, 0x82, 0x66, 0xe4, 0xff, 0xfa, + 0x43, 0x3b, 0x24, 0x53, 0xfb, 0x11, 0x05, 0xc7, 0x02, 0xb3, + 0x45, 0x5e, 0x4a, 0xbb, 0x70, 0x66, 0xcc, 0x3c, 0xf1, 0xbc, + 0xd4, 0x95, 0xc9, 0x36, 0x85, 0x7b, 0xc5, 0xb3, 0xf7, 0xdb, + 0x65, 0xbb, 0xd2, 0xed, 0xb2, 0xae, 0x40, 0x6b, 0x45, 0x46, + 0xd5, 0x07, 0xf4, 0xa7, 0x20, 0x11, 0xe8, 0xaf, 0x4c, 0x8c, + 0x7a, 0xa8, 0xc7, 0x26, 0x74, 0x84, 0x29, 0x59, 0x08, 0x70, + 0xcf, 0x46, 0xf5, 0xd2, 0x99, 0x60, 0x0f, 0x19, 0x5b, 0xf5, + 0x32, 0xc5, 0x4e, 0xf8, 0x76, 0x13, 0x18, 0x00, 0x56, 0x02, + 0x32, 0x2a, 0x78, 0xb5, 0x85, 0xcb, 0x29, 0x91, 0x42, 0xa8, + 0xf1, 0xd7, 0xd5, 0x41, 0x43, 0x87, 0xd2, 0x4a, 0xa3, 0x25, + 0x40, 0x5d, 0x95, 0xf9, 0xe5, 0x01, 0x9e, 0xe0, 0x49, 0xac, + 0x9e, 0x99, 0x85, 0xdf, 0x4b, 0xb3, 0x4f, 0xce, 0x86, 0x49, + 0xb3, 0x3c, 0x59, 0x44, 0x7b, 0x87, 0xb3, 0x30, 0x31, 0xeb, + 0xe5, 0x1c, 0x72, 0x29, 0x8e, 0x80, 0xe1, 0x16, 0xf9, 0x25, + 0xa3, 0xe6, 0xa8, 0x03, 0xfe, 0x25, 0x0f, 0xbf, 0x13, 0x5c, + 0x03, 0x1d, 0xc5, 0xf7, 0x17, 0x9e, 0xa9, 0x18, 0x03, 0x35, + 0x38, 0x17, 0xa7, 0xe8, 0x54, 0x6b, 0x0b, 0xbd, 0xc9, 0x15, + 0xb6, 0x64, 0x2a, 0xe3, 0x08, 0x0a, 0x6a, 0x96, 0x00, 0x5a, + 0xdc, 0x8c, 0x08, 0x17, 0xb6, 0x3d, 0x83, 0x44, 0xdd, 0xca, + 0x60, 0xba, 0x45, 0x10, 0x71, 0x20, 0xf1, 0xaf, 0xd7, 0xc5, + 0x56, 0x6f, 0x8a, 0xa5, 0x80, 0x32, 0xb4, 0x40, 0x2a, 0x67, + 0xe6, 0x25, 0x6b, 0xc7, 0x00, 0x40, 0xd2, 0x85, 0x03, 0xb5, + 0xd2, 0x1f, 0x81, 0x5f, 0xdd, 0xca, 0x62, 0xba, 0x25, 0x10, + 0x79, 0x20, 0xf0, 0xaf, 0xd7, 0xe5, 0x54, 0x6f, 0x8b, 0xa5, + 0x80, 0x20, 0xb6, 0x40, 0x2a, 0xe7, 0xe4, 0x25, 0x6b, 0xc6, + 0x00, 0x40, 0xda, 0x85, 0x03, 0xb7, 0xd2, 0x1f, 0xc1, 0x5f, + 0x22, 0x35, 0x9d, 0x45, 0xda, 0xef, 0x86, 0xdf, 0x0f, 0x50, + 0x28, 0x1a, 0xab, 0x90, 0x74, 0x5a, 0x7f, 0xdf, 0x49, 0xbf, + 0xd5, 0x18, 0x1b, 0xda, 0x94, 0x39, 0xff, 0xbf, 0x25, 0x7a, + 0xfc, 0x48, 0x2d, 0xe0, 0x3e, 0xa0, 0x05, 0x00, 0x00, 0x00, + 0x04, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x05, 0x00, + 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x05, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, + 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, + 0x05, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x03, 0x00, + 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, + 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, + 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x01, 0x00, + 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x06, 0x00, + 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x04, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x05, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x07, 0x00, + 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x07, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x04, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x02, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, + 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, + 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x06, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x07, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x07, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x06, 0x00, + 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x05, 0x00, 0x00, 0x00, 0x5e, 0x8c, 0xe5, 0x94, 0x09, 0xbf, + 0x89, 0x20, 0xb5, 0xdd, 0x62, 0x7d, 0xab, 0x5e, 0xe2, 0xe9, + 0x9e, 0x0e, 0x41, 0x1b, 0x0d, 0xd5, 0xd6, 0x27, 0xe3, 0x4b, + 0x6f, 0xd3, 0x1b, 0xa4, 0x66, 0x57, 0xfd, 0x22, 0xad, 0x00, + 0x00, 0xa6, 0xe4, 0x7b, 0xe0, 0x76, 0xc0, 0xaa, 0x0c, 0x8e, + 0x84, 0xbf, 0x9c, 0xb9, 0x19, 0x24, 0x53, 0x97, 0x41, 0x8f, + 0x38, 0x30, 0xcd, 0x4c, 0x35, 0x1d, 0xb0, 0x02, 0x8b, 0x64, + 0x0d, 0x6c, 0x1c, 0x60, 0x79, 0x8a, 0x7f, 0x02, 0x13, 0x63, + 0xd8, 0xe3, 0x2a, 0x48, 0x5c, 0x0f, 0x11, 0xaf, 0xc9, 0xc8, + 0x60, 0x87, 0xef, 0x22, 0xc9, 0x53, 0x5f, 0x3f, 0x5c, 0x21, + 0x07, 0x73, 0x3d, 0xd2, 0xc1, 0x55, 0x21, 0x33, 0xd9, 0xa4, + 0xda, 0xa6, 0x43, 0xd6, 0xa7, 0x23, 0xb2, 0x84, 0x33, 0xa4, + 0x26, 0xf5, 0x10, 0x51, 0x26, 0x1b, 0x75, 0x2f, 0x5d, 0xde, + 0x61, 0x26, 0xf1, 0x1d, 0x48, 0x5c, 0x70, 0x37, 0x35, 0x49, + 0x8f, 0x9d, 0xe1, 0x11, 0xf2, 0x07, 0xde, 0x6b, 0xcd, 0xf2, + 0xfe, 0xf9, 0xc4, 0xae, 0x35, 0x67, 0x57, 0xc3, 0xbf, 0x5d, + 0xd1, 0x56, 0x96, 0x1c, 0x44, 0x99, 0x9d, 0x32, 0x76, 0xf4, + 0x03, 0x36, 0x46, 0x97, 0xfc, 0x92, 0x93, 0xce, 0xf4, 0xb6, + 0xb0, 0x15, 0xd1, 0x1e, 0xce, 0xf2, 0xfd, 0xbb, 0xec, 0xb2, + 0x37, 0x27, 0xc3, 0xf3, 0x99, 0xfd, 0xe3, 0x77, 0x18, 0x53, + 0xc4, 0x83, 0x01, 0x68, 0x7e, 0x5f, 0x77, 0x70, 0x66, 0x93, + 0xae, 0x50, 0x09, 0x17, 0xe0, 0x5a, 0xc0, 0x03, 0xf9, 0xdc, + 0xcf, 0xf2, 0xfd, 0xbb, 0xe4, 0xb2, 0x37, 0x27, 0x47, 0xf3, + 0x99, 0xdd, 0xe3, 0x77, 0x18, 0x17, 0xc4, 0x83, 0x41, 0x22, + 0x7e, 0x5f, 0x65, 0x70, 0x66, 0x93, 0xac, 0x52, 0x0b, 0x17, + 0xe0, 0x3a, 0x90, 0x03, 0xf1, 0xde, 0x30, 0x0d, 0x02, 0x44, + 0x1b, 0x4d, 0xc8, 0xd8, 0xb8, 0x0c, 0x66, 0x22, 0x1c, 0x88, + 0xe7, 0xe8, 0x3b, 0x7c, 0xbe, 0xdd, 0x81, 0xa0, 0x9a, 0x8f, + 0x99, 0x6c, 0x53, 0xad, 0xf4, 0xe8, 0x1f, 0xc5, 0x6f, 0xfc, + 0x0e, 0x21, 0xc4, 0xe9, 0x80, 0x29, 0x1b, 0x9a, 0x33, 0xcd, + 0x51, 0x7f, 0xdf, 0x12, 0x1f, 0x1d, 0xcb, 0xcc, 0x75, 0xe6, + 0x78, 0x04, 0x30, 0x24, 0x24, 0x52, 0xbd, 0x34, 0x79, 0x7f, + 0x4a, 0x8a, 0xd0, 0x42, 0xa3, 0x91, 0xc6, 0x25, 0xec, 0xce, + 0x34, 0xc9, 0x0c, 0x1e, 0x70, 0xa9, 0xd2, 0xcb, 0xcc, 0xe7, + 0xd4, 0xfd, 0x83, 0x48, 0xc6, 0x7b, 0x7e, 0x42, 0x19, 0x3b, + 0x3c, 0x05, 0xa9, 0x40, 0xa6, 0xaf, 0x74, 0xfa, 0x59, 0x73, + 0x5f, 0x09, 0x6c, 0x6f, 0x8c, 0x3e, 0x04, 0xb7, 0xf8, 0xd4, + 0xef, 0xda, 0x6a, 0xe2, 0x17, 0x4a, 0x18, 0x38, 0xae, 0x29, + 0xf9, 0x3c, 0x57, 0x0b, 0xcd, 0x64, 0x32, 0x53, 0x32, 0xd8, + 0xd1, 0x68, 0x32, 0xc6, 0x9c, 0x9d, 0x2d, 0x37, 0x81, 0x42, + 0xf8, 0x11, 0xf9, 0x95, 0xe5, 0x21, 0xe1, 0x26, 0x38, 0x18, + 0x4e, 0xcc, 0x17, 0xb0, 0x2a, 0x1e, 0x80, 0x10, 0x36, 0xfd, + 0x42, 0x1b, 0xf6, 0x4c, 0x8d, 0x9a, 0x55, 0x0a, 0x0f, 0x7e, + 0x76, 0xe8, 0xc6, 0x6f, 0x7a, 0x63, 0xd1, 0xe4, 0x58, 0x95, + 0x85, 0x12, 0x02, 0x02, 0xc3, 0xb7, 0x4e, 0x96, 0x4c, 0x8b, + 0xd8, 0xf6, 0xce, 0xd4, 0x89, 0xee, 0xa4, 0x4b, 0xd7, 0x00, + 0x50, 0x98, 0x94, 0x99, 0x26, 0x01, 0xa2, 0x38, 0x0d, 0x80, + 0xb7, 0x13, 0xfd, 0xe0, 0x78, 0x37, 0x29, 0x92, 0x39, 0x0a, + 0xc3, 0xa7, 0x96, 0x8a, 0x44, 0x0d, 0x5b, 0xde, 0xde, 0x52, + 0x8a, 0xae, 0xb0, 0x48, 0x97, 0x10, 0x7c, 0x81, 0x50, 0xbc, + 0x06, 0x1a, 0xb9, 0xaa, 0x44, 0x63, 0x2a, 0x61, 0xf9, 0xe0, + 0x78, 0xb5, 0x2d, 0x92, 0x38, 0x0a, 0xc3, 0xa7, 0xd6, 0xca, + 0x44, 0x19, 0xda, 0xde, 0xde, 0x50, 0x8a, 0xae, 0xb0, 0x48, + 0x97, 0x10, 0x7c, 0x81, 0x50, 0xbc, 0x06, 0x1a, 0xbb, 0xa8, + 0x44, 0x63, 0x3f, 0x61, 0x06, 0x1f, 0x87, 0x4a, 0xd2, 0x6d, + 0xc7, 0xf5, 0x3c, 0x58, 0x29, 0x35, 0xbb, 0xe6, 0x25, 0x21, + 0x21, 0xaf, 0x75, 0x51, 0x4f, 0xb7, 0x68, 0xef, 0x83, 0x7e, + 0xaf, 0x43, 0xf9, 0xe5, 0x44, 0x57, 0xbb, 0x9c, 0xc0, 0x9e, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, + 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, + 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, + 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x04, 0x00, + 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x06, 0x00, + 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, + 0x07, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x03, 0x00, + 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, + 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, + 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, + 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x06, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x06, 0x00, + 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, + 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x05, 0x00, + 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x04, 0x00, + 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x06, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x05, 0x00, + 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x03, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x07, 0x00, + 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x05, 0x00, + 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xa1, 0x4c, + 0xe2, 0xf8, 0xca, 0x04, 0xba, 0x55, 0x88, 0x7c, 0xb0, 0x5a, + 0x80, 0x66, 0x17, 0x3f, 0x3e, 0x3a, 0xdd, 0x3e, 0xbd, 0x7d, + 0x53, 0x7e, 0xf5, 0x2d, 0xfd, 0xd3, 0xc0, 0x78, 0xba, 0xf6, + 0x0b, 0xe0, 0xca, 0x1d, 0xcd, 0x1a, 0xe1, 0x6c, 0xc2, 0x50, + 0x84, 0xec, 0x3f, 0xfb, 0xe1, 0x09, 0x88, 0x60, 0x0c, 0x6b, + 0xa8, 0x58, 0x3b, 0x3b, 0x06, 0x5a, 0x5a, 0xa4, 0x5d, 0x0c, + 0xd0, 0xe4, 0x7c, 0x57, 0x06, 0xdc, 0xc4, 0x4c, 0xe6, 0x0d, + 0xc4, 0x5e, 0xec, 0x2a, 0x7b, 0xf9, 0x03, 0x5e, 0x21, 0xe2, + 0xd9, 0x52, 0x05, 0x7c, 0xb6, 0xa9, 0x8c, 0x47, 0x18, 0x2f, + 0x2a, 0x56, 0xb1, 0xcc, 0x6c, 0xf4, 0xfa, 0x3c, 0xd9, 0xe4, + 0x40, 0x55, 0x9d, 0x81, 0x45, 0x65, 0xe8, 0x0d, 0x52, 0xca, + 0x75, 0x4e, 0x49, 0xb4, 0xf6, 0xe0, 0x24, 0x97, 0x9d, 0xff, + 0x10, 0x01, 0x4a, 0xce, 0x58, 0x55, 0x91, 0x2c, 0x19, 0x78, + 0xfe, 0x75, 0x21, 0x56, 0x32, 0xe2, 0x4f, 0x00, 0x85, 0x23, + 0x7d, 0x12, 0x9e, 0xfa, 0xcc, 0xcc, 0xab, 0x02, 0x71, 0xe0, + 0x7f, 0x82, 0x78, 0x0b, 0x47, 0x22, 0x70, 0xa2, 0xd8, 0xa7, + 0x54, 0xec, 0x0b, 0x8f, 0x8a, 0x1b, 0xd8, 0x74, 0xdb, 0xc4, + 0x68, 0xdb, 0xa4, 0xb1, 0xf6, 0x07, 0x48, 0x6d, 0xd8, 0xa2, + 0xec, 0xcc, 0x16, 0xda, 0xaf, 0xc4, 0x35, 0xf2, 0x58, 0x83, + 0x43, 0xf6, 0x30, 0xa8, 0xdb, 0x25, 0x76, 0x3d, 0xa3, 0xba, + 0x2d, 0xd9, 0xf8, 0x58, 0x5d, 0x94, 0xaa, 0x53, 0xe4, 0xb0, + 0x36, 0x07, 0x7d, 0xa4, 0xd8, 0xe2, 0xec, 0xcc, 0x16, 0xda, + 0xa7, 0xe4, 0x37, 0xe2, 0x58, 0x83, 0x47, 0xf6, 0x10, 0xa0, + 0xdb, 0xa5, 0x56, 0x3d, 0x83, 0xbe, 0xad, 0xd9, 0xf8, 0x5c, + 0xdd, 0xc4, 0xaa, 0x53, 0xe4, 0xb0, 0x36, 0x07, 0x6d, 0x24, + 0x27, 0x1d, 0x13, 0x33, 0xe9, 0x25, 0x58, 0x1b, 0xc8, 0x1d, + 0xa7, 0x7c, 0xb8, 0x09, 0xef, 0x5f, 0x24, 0x5a, 0xa9, 0xc2, + 0x7c, 0x41, 0x52, 0x26, 0x07, 0xa3, 0x22, 0x3b, 0x55, 0xac, + 0x1b, 0x4f, 0xc9, 0xf8, 0x92, 0xdb, 0xf5, 0xc8, 0x2c, 0x56, + 0x56, 0x94, 0x49, 0x68, 0xc1, 0xf7, 0x03, 0x1d, 0x14, 0x4b, + 0x24, 0xd7, 0xb0, 0x02, 0x28, 0x24, 0x23, 0x70, 0x83, 0x59, + 0x14, 0x49, 0x2f, 0xcf, 0xb7, 0x13, 0xf0, 0xac, 0x7b, 0x4f, + 0xcb, 0x65, 0xbb, 0x3a, 0xf8, 0x25, 0x4c, 0x22, 0x6c, 0xa1, + 0x46, 0xd3, 0x61, 0xdb, 0xf6, 0x42, 0xcd, 0x5e, 0x96, 0x6d, + 0x2a, 0xb1, 0xdd, 0x01, 0x43, 0xce, 0xf7, 0x2c, 0x4e, 0x37, + 0x50, 0xcb, 0xe9, 0x5d, 0x80, 0x7a, 0x4f, 0x16, 0x12, 0x7f, + 0xe6, 0x9c, 0x31, 0xe7, 0x1e, 0xff, 0xbc, 0x52, 0x6d, 0x11, + 0xf2, 0xae, 0x59, 0x96, 0x55, 0x8a, 0x2e, 0xa2, 0x98, 0x4a, + 0xe4, 0x24, 0x89, 0x55, 0xb0, 0x67, 0x21, 0x73, 0x12, 0x47, + 0x42, 0x66, 0x01, 0xca, 0x66, 0xa2, 0x2c, 0x07, 0x2b, 0xc5, + 0x5e, 0x5c, 0x8a, 0xca, 0xdf, 0x2e, 0x02, 0xaf, 0x43, 0xcd, + 0xb0, 0x83, 0x8b, 0xdb, 0x51, 0x75, 0xf6, 0xca, 0x43, 0x63, + 0x3a, 0x93, 0x40, 0x02, 0x52, 0x60, 0x7c, 0x50, 0x37, 0x79, + 0x0a, 0xaa, 0x0c, 0x20, 0x4e, 0xde, 0xd0, 0x6a, 0xda, 0xfe, + 0xef, 0xb6, 0x88, 0x87, 0x01, 0xb5, 0x4c, 0xda, 0x94, 0x6c, + 0xaa, 0xc6, 0x58, 0x8b, 0x16, 0xc7, 0x7d, 0x6e, 0x6d, 0x0a, + 0x79, 0x76, 0x01, 0x07, 0xb9, 0x85, 0x0c, 0xaf, 0xa4, 0xc2, + 0x4a, 0xeb, 0xbd, 0x78, 0xc1, 0xc3, 0xae, 0x37, 0x08, 0x0f, + 0x61, 0x93, 0x4e, 0xd1, 0x1e, 0x79, 0xd7, 0x82, 0xf1, 0x82, + 0xd7, 0x86, 0xfc, 0x12, 0xc1, 0x02, 0x79, 0x47, 0xd1, 0x87, + 0x3d, 0xdf, 0x4c, 0xae, 0xa4, 0xc2, 0x4e, 0xef, 0xfc, 0x78, + 0xc3, 0xeb, 0xaf, 0x37, 0x00, 0x0f, 0x61, 0x93, 0x4e, 0xd1, + 0x1e, 0x79, 0xb3, 0xc2, 0xf1, 0x82, 0xd3, 0x86, 0xfc, 0x12, + 0xc1, 0x02, 0x79, 0x66, 0x51, 0x87, 0x3d, 0x9f, 0xb3, 0x51, + 0x5b, 0x3d, 0xb1, 0x10, 0x03, 0x87, 0x3c, 0x14, 0x50, 0xc8, + 0xff, 0xf0, 0x9e, 0x6c, 0xb1, 0x2e, 0xe1, 0x86, 0x4c, 0x3d, + 0x0e, 0x7d, 0x2c, 0x79, 0x03, 0xed, 0x3e, 0xfd, 0x86, 0x99, + 0xae, 0x78, 0xc2, 0x60, 0x03, 0x00, 0x00, 0x00, 0x07, 0x00, + 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x06, 0x00, + 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, + 0x04, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x02, 0x00, + 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x06, 0x00, + 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x07, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x07, 0x00, + 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, + 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, + 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, + 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x03, 0x00, + 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x04, 0x00, + 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, + 0x04, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x01, 0x00, + 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x00, + 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, + 0x04, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x04, 0x00, + 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, + 0x03, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x01, 0x00, + 0x00, 0x00, 0x39, 0x04, 0xdf, 0x14, 0x5d, 0x57, 0x3d, 0xb9, + 0x1c, 0xc3, 0x1b, 0x0a, 0x74, 0xb8, 0x81, 0x09, 0x55, 0x55, + 0xb3, 0x9d, 0x0d, 0x7a, 0x83, 0xa8, 0x48, 0x47, 0x7a, 0x3d, + 0xff, 0xd1, 0xaf, 0xe1, 0xec, 0x2b, 0xe7, 0x67, 0xed, 0xe9, + 0xef, 0x2b, 0xdf, 0x10, 0x57, 0x78, 0x04, 0x1e, 0x3e, 0xcf, + 0x50, 0xe1, 0x5b, 0x41, 0xe2, 0x52, 0x56, 0x24, 0xac, 0x0f, + 0x43, 0x6d, 0x6b, 0x5e, 0x23, 0x1e, 0x96, 0xb2, 0x9e, 0x1a, + 0xd6, 0xa2, 0xfb, 0x90, 0x79, 0x04, 0x6d, 0xc4, 0x80, 0xc3, + 0x6d, 0x1f, 0x16, 0xee, 0x1c, 0x59, 0xf2, 0x6f, 0x7c, 0x15, + 0xbb, 0x4d, 0x5d, 0x24, 0x92, 0xfd, 0x4f, 0x3f, 0x05, 0xc2, + 0x9e, 0x5b, 0x78, 0x08, 0x84, 0x9a, 0x46, 0x82, 0xf4, 0x41, + 0x9a, 0x79, 0x68, 0x08, 0x61, 0x1e, 0x95, 0x67, 0x8d, 0x77, + 0xc9, 0x33, 0xbf, 0x7b, 0xa7, 0x00, 0x34, 0xf8, 0x26, 0x0b, + 0x66, 0x59, 0xf7, 0x75, 0xbd, 0x65, 0x79, 0xf1, 0x8b, 0xf1, + 0x18, 0x86, 0x04, 0x91, 0x54, 0xa0, 0xfa, 0x30, 0xaf, 0x3a, + 0xce, 0xad, 0x0c, 0xc3, 0x3d, 0x11, 0x01, 0x12, 0xa6, 0x9e, + 0x5b, 0xa8, 0xf0, 0x6e, 0x7f, 0x49, 0x25, 0x3c, 0x70, 0x87, + 0xb8, 0xae, 0x22, 0xff, 0xc3, 0xbf, 0xab, 0xf0, 0x3b, 0xb6, + 0x52, 0xc3, 0x8a, 0x62, 0xeb, 0x8a, 0x45, 0x88, 0xc6, 0xde, + 0x5f, 0x02, 0xc8, 0xe8, 0x97, 0x7c, 0x82, 0x38, 0x73, 0x60, + 0x4b, 0x40, 0x42, 0x38, 0xf0, 0x15, 0x3a, 0x26, 0x7a, 0xf5, + 0xad, 0xaf, 0xcb, 0x42, 0xf3, 0xb4, 0xd4, 0xc3, 0x9a, 0x62, + 0xeb, 0x8a, 0x45, 0x8c, 0x84, 0xde, 0x5f, 0x02, 0x48, 0xf8, + 0x97, 0x3e, 0x92, 0x38, 0x71, 0x60, 0x4b, 0x40, 0x06, 0x38, + 0xf0, 0x15, 0xb8, 0x26, 0x7a, 0xf5, 0xaf, 0xaf, 0xcb, 0x42, + 0xf3, 0xb4, 0x54, 0xc1, 0x65, 0x9d, 0x14, 0x75, 0xba, 0x73, + 0x7b, 0x21, 0xa0, 0xfd, 0xb7, 0x07, 0x68, 0xc1, 0x6d, 0xc7, + 0x8e, 0x9f, 0xb4, 0xbf, 0xf9, 0xc7, 0x0f, 0xea, 0x47, 0xd9, + 0x85, 0x0a, 0x50, 0x50, 0x34, 0xbd, 0x0c, 0x4b, 0xab, 0x3e, + 0xce, 0x72, 0x02, 0x24, 0x61, 0x4e, 0x7e, 0xfc, 0xd1, 0x99, + 0x90, 0x8e, 0xb5, 0x9d, 0x51, 0x96, 0xbb, 0x0b, 0x61, 0x9e, + 0xf3, 0xfa, 0x25, 0xb1, 0x9c, 0xdd, 0xb1, 0xb3, 0x09, 0xf4, + 0xe1, 0x35, 0xce, 0xa4, 0xa8, 0xf5, 0xd3, 0x3f, 0xb6, 0xad, + 0x39, 0x9b, 0x18, 0x35, 0x41, 0x6f, 0xb5, 0x3a, 0x72, 0x1b, + 0xac, 0x28, 0x6c, 0xeb, 0x2c, 0xc4, 0xdd, 0x1f, 0x90, 0xa6, + 0xbb, 0xef, 0xa3, 0x50, 0xbd, 0x26, 0xf0, 0xb5, 0x69, 0x45, + 0xd3, 0x1f, 0xff, 0x94, 0xb6, 0x12, 0x13, 0xfc, 0x50, 0x7f, + 0xff, 0x03, 0x41, 0x2b, 0x3b, 0x9f, 0x0a, 0x29, 0x9d, 0x82, + 0x7d, 0xc7, 0x92, 0x2f, 0x42, 0xd1, 0x7a, 0xbd, 0x32, 0x94, + 0x41, 0x64, 0xd1, 0xf3, 0x07, 0x9c, 0xd5, 0xb9, 0x33, 0xda, + 0x2f, 0x3e, 0xe0, 0x74, 0xb6, 0x7f, 0x82, 0x05, 0x02, 0x8d, + 0x57, 0x1e, 0x80, 0xd3, 0x02, 0xa3, 0x40, 0x87, 0x4d, 0x62, + 0xa6, 0xc6, 0x09, 0x7b, 0x10, 0xcd, 0x67, 0xec, 0x50, 0x17, + 0x21, 0xc8, 0xeb, 0x05, 0xc7, 0xb0, 0xc6, 0x60, 0x4a, 0xa2, + 0xaa, 0xbf, 0x4e, 0xfe, 0x9b, 0x2f, 0x83, 0x7c, 0xcc, 0x67, + 0xb3, 0xfa, 0x6b, 0x81, 0x5d, 0x92, 0x08, 0x2c, 0x0c, 0x5c, + 0x45, 0x91, 0x11, 0x91, 0x33, 0x1e, 0x2e, 0xf8, 0xf5, 0x2c, + 0xb7, 0x98, 0x8e, 0xc0, 0x87, 0x97, 0x8c, 0x36, 0x43, 0x8e, + 0xaf, 0x2f, 0x13, 0x90, 0xed, 0x6c, 0x87, 0x71, 0x76, 0xa7, + 0x49, 0xc0, 0x22, 0x1a, 0x0d, 0x39, 0x5c, 0x81, 0xb3, 0x81, + 0x39, 0xb6, 0x2a, 0xb2, 0xa3, 0xa5, 0xb7, 0x98, 0x8e, 0xc0, + 0x83, 0x9e, 0xac, 0x37, 0x43, 0x8e, 0xaf, 0x2f, 0x12, 0x98, + 0xec, 0x6e, 0x87, 0x71, 0x76, 0xa7, 0x49, 0xc0, 0x22, 0x1a, + 0x0d, 0x39, 0x5c, 0x89, 0xb3, 0x91, 0x31, 0x96, 0x2a, 0xb0, + 0xa3, 0xa5, 0x48, 0x67, 0x71, 0x3f, 0x7c, 0x61, 0x53, 0xc8, + 0xbc, 0x71, 0x50, 0xd0, 0xec, 0x67, 0x13, 0x91, 0x78, 0x8e, + 0x89, 0x58, 0xb6, 0x3f, 0xdd, 0xe5, 0xf2, 0xc6, 0xa3, 0x76, + 0x4c, 0x6e, 0xce, 0x69, 0xd5, 0x4f, 0x5c, 0x5a, 0x05, 0x00, + 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x04, 0x00, + 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x03, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x07, 0x00, + 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, + 0x07, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x04, 0x00, + 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x07, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x06, 0x00, + 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x05, 0x00, + 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, + 0x05, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x03, 0x00, + 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x05, 0x00, + 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x01, 0x00, + 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x05, 0x00, + 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, + 0x06, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x06, 0x00, + 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x02, 0x00, + 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, + 0x04, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x02, 0x00, + 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x16, 0xdf, 0x9b, 0x40, + 0x89, 0x8e, 0xcc, 0x66, 0x93, 0xa9, 0xbd, 0xc9, 0x51, 0xde, + 0x26, 0x23, 0x0e, 0x6b, 0x72, 0x28, 0x09, 0x13, 0xf0, 0x3a, + 0x26, 0x29, 0x3a, 0xc5, 0xf1, 0xd7, 0xf1, 0x1e, 0x68, 0x03, + 0xb1, 0xb1, 0x8e, 0xe3, 0xbf, 0x49, 0xad, 0xaf, 0xac, 0xe0, + 0x23, 0x27, 0x87, 0xe9, 0x5e, 0x0d, 0x21, 0xc6, 0xa6, 0xa0, + 0x07, 0xcd, 0x90, 0x2e, 0x90, 0x5b, 0x29, 0x0b, 0xcb, 0x15, + 0x0c, 0xf9, 0xab, 0xc8, 0xe0, 0x54, 0x48, 0x54, 0x34, 0x8b, + 0xa7, 0x9e, 0x52, 0xde, 0x11, 0x4b, 0x30, 0x43, 0xf3, 0x5e, + 0xdd, 0x08, 0x16, 0x48, 0x36, 0x71, 0xb8, 0x05, 0x3a, 0x14, + 0x2e, 0x5b, 0xcc, 0x2a, 0xd4, 0x88, 0x4e, 0x0f, 0x7e, 0xbc, + 0x0c, 0x48, 0x8a, 0x49, 0xbb, 0xbf, 0x92, 0xa8, 0xa7, 0x5c, + 0x3b, 0x19, 0x81, 0x9b, 0xac, 0xe8, 0x62, 0x5c, 0xa3, 0x4a, + 0x93, 0x0a, 0x74, 0xb9, 0x28, 0x91, 0x2b, 0xae, 0xf6, 0xb7, + 0x70, 0x96, 0x6e, 0xd1, 0xa2, 0x39, 0xd1, 0x5d, 0x8a, 0x42, + 0x1a, 0xe9, 0x55, 0x84, 0x90, 0xf4, 0xbd, 0x85, 0xcd, 0xcb, + 0xa7, 0xfc, 0x36, 0xbf, 0x80, 0xaa, 0x3a, 0x64, 0xd5, 0x6f, + 0xeb, 0x2c, 0x31, 0x07, 0xe4, 0xbb, 0x93, 0xcf, 0xc9, 0x89, + 0xd9, 0xda, 0xb3, 0x54, 0xc1, 0x97, 0x3a, 0x33, 0xdd, 0x2c, + 0x25, 0xd4, 0xfd, 0xf9, 0x91, 0xda, 0xee, 0xea, 0x2a, 0xde, + 0x54, 0x48, 0x31, 0xc4, 0xd9, 0xbb, 0x79, 0x2d, 0x36, 0xef, + 0x04, 0xa3, 0x02, 0x96, 0x48, 0x49, 0x88, 0xe8, 0x53, 0x65, + 0xe3, 0xe2, 0x3b, 0x23, 0xdd, 0x0c, 0x25, 0xd4, 0xfd, 0xb9, + 0x81, 0xca, 0xee, 0xea, 0x2a, 0xfe, 0x44, 0x48, 0x31, 0x44, + 0xd9, 0xab, 0x69, 0x2d, 0x36, 0xef, 0x04, 0xa3, 0x02, 0x96, + 0x48, 0x49, 0x98, 0xf8, 0x53, 0x75, 0xc3, 0xc2, 0xc4, 0xdc, + 0x22, 0xf3, 0xda, 0x2b, 0x02, 0x46, 0x7e, 0x35, 0x11, 0x15, + 0xd5, 0x01, 0xbb, 0xb7, 0xce, 0xbb, 0x26, 0x54, 0x96, 0xd2, + 0xc9, 0x10, 0xfb, 0x5c, 0xfd, 0x69, 0xb7, 0xb6, 0x67, 0x07, + 0xac, 0x8a, 0x3c, 0x3d, 0xb8, 0x6d, 0x43, 0x90, 0x58, 0xb3, + 0x49, 0xe2, 0x24, 0x01, 0x45, 0x8b, 0x83, 0x6a, 0x73, 0x6b, + 0xff, 0x8c, 0xec, 0x11, 0x8b, 0x61, 0xb8, 0x95, 0x7c, 0xe9, + 0x20, 0x71, 0xa6, 0x3f, 0x20, 0xd0, 0xb8, 0xa9, 0xd3, 0xf3, + 0x97, 0xf1, 0x5d, 0x0f, 0xcd, 0xc2, 0x4b, 0x15, 0x11, 0x7e, + 0xca, 0x46, 0xf0, 0xea, 0x90, 0x7d, 0x93, 0x28, 0xb2, 0x0f, + 0x6f, 0x63, 0x79, 0x74, 0x3a, 0x3b, 0x07, 0x73, 0x6a, 0x77, + 0xba, 0x1c, 0x16, 0xca, 0x3f, 0xde, 0xd9, 0x97, 0x8d, 0x7c, + 0x1b, 0xbf, 0xb6, 0x77, 0x21, 0x17, 0x62, 0xc5, 0x8b, 0xce, + 0xbc, 0xc6, 0x09, 0xd1, 0xae, 0x1e, 0xd1, 0x5b, 0x2d, 0x7d, + 0xa1, 0xad, 0xb5, 0x14, 0x18, 0xef, 0x86, 0xb2, 0xbe, 0x99, + 0x46, 0x5f, 0x39, 0x95, 0xfa, 0x67, 0xe6, 0x08, 0xcd, 0xf4, + 0xa3, 0x5b, 0x58, 0xa4, 0x3c, 0x71, 0x63, 0xf1, 0x36, 0xcc, + 0xaa, 0x5f, 0xda, 0xe4, 0x53, 0x4f, 0x34, 0x15, 0x78, 0xd0, + 0xc4, 0xb4, 0x60, 0x91, 0xbb, 0x29, 0x03, 0xb9, 0xf3, 0xf7, + 0xc1, 0x96, 0x60, 0xbb, 0xa0, 0x4a, 0xb3, 0xb8, 0x7f, 0x07, + 0x30, 0xa8, 0xfb, 0x7f, 0x1d, 0xcb, 0x70, 0x61, 0x52, 0x75, + 0x46, 0xb1, 0x2d, 0x47, 0x3d, 0x2f, 0x8a, 0x03, 0x96, 0x1e, + 0x2e, 0x13, 0x7b, 0x03, 0xf7, 0xd5, 0xc9, 0xb0, 0x6c, 0xaa, + 0x20, 0xc6, 0x86, 0xe2, 0xfe, 0x50, 0xf2, 0x2b, 0x6e, 0xaf, + 0x9b, 0xfb, 0xda, 0x41, 0x17, 0xd3, 0x5a, 0x37, 0x30, 0x46, + 0xac, 0x70, 0x9a, 0x7b, 0x00, 0x1e, 0x3b, 0x93, 0x77, 0x0e, + 0xf3, 0xd5, 0xc9, 0xb0, 0x6c, 0xba, 0x20, 0x46, 0x83, 0xaa, + 0xf6, 0x00, 0xf2, 0x2b, 0x6a, 0xaf, 0x9f, 0xcb, 0xda, 0x41, + 0x17, 0xd3, 0x5a, 0x37, 0x34, 0x46, 0xac, 0x70, 0x9a, 0x73, + 0x00, 0x1e, 0x3b, 0x93, 0x77, 0x0b, 0x0c, 0x2a, 0x36, 0x4f, + 0x93, 0x45, 0xdf, 0xb9, 0x7c, 0x55, 0x09, 0xff, 0x0d, 0xd4, + 0x95, 0x50, 0x60, 0x34, 0x25, 0xbe, 0xe8, 0x2c, 0xa5, 0xc8, + 0xcb, 0xb9, 0x53, 0x8f, 0x65, 0x8c, 0xff, 0xe1, 0xc4, 0x6c, + 0x88, 0xf4, 0x05, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, + 0x07, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x02, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, + 0x04, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x06, 0x00, + 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, + 0x05, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x05, 0x00, + 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, + 0x06, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x05, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, + 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, + 0x04, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x00, + 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, + 0x06, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x04, 0x00, + 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x04, 0x00, + 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x03, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x07, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x02, 0x00, + 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, + 0x04, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x07, 0x00, + 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x03, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x05, 0x00, + 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, + 0x0a, 0xa0, 0x1d, 0x4e, 0xe6, 0xac, 0xf3, 0xf3, 0xb4, 0xe8, + 0x06, 0x13, 0x46, 0x9b, 0x76, 0xee, 0x9a, 0x6c, 0x83, 0x07, + 0x09, 0xd8, 0xd2, 0x20, 0x34, 0xcd, 0xb8, 0x6b, 0x07, 0x94, + 0x8b, 0x1c, 0x02, 0x95, 0xb5, 0xb7, 0x20, 0x48, 0x98, 0xfe, + 0x48, 0xbf, 0x08, 0xcb, 0x1e, 0xbf, 0x1a, 0x00, 0x72, 0x8e, + 0xd9, 0x6f, 0x47, 0xe5, 0xa9, 0x37, 0x64, 0xc4, 0xbf, 0xa4, + 0x52, 0x17, 0x27, 0x45, 0x40, 0x43, 0x21, 0xb6, 0x3a, 0xe0, + 0xfa, 0x06, 0x9b, 0x43, 0x09, 0x6c, 0x22, 0x64, 0x42, 0xde, + 0x3f, 0xdc, 0x6c, 0xd0, 0xcd, 0xac, 0x5d, 0xe7, 0x01, 0x69, + 0x01, 0x8f, 0x69, 0x02, 0xdb, 0xa9, 0xc9, 0x93, 0xd7, 0x71, + 0x8a, 0x5c, 0xf1, 0x25, 0x3d, 0x34, 0x80, 0x59, 0xeb, 0x54, + 0x01, 0x59, 0x52, 0x54, 0x3f, 0x70, 0xa6, 0xd5, 0x56, 0x06, + 0x96, 0x0e, 0x1b, 0xb1, 0xc1, 0xe6, 0x95, 0xc5, 0x6e, 0x51, + 0xe1, 0x08, 0x77, 0x72, 0x5e, 0xbf, 0xaf, 0xdc, 0x84, 0x51, + 0xe1, 0x4c, 0x16, 0xac, 0xcd, 0x34, 0x63, 0x94, 0xc3, 0x56, + 0x6b, 0x69, 0x6b, 0x92, 0x7e, 0xa2, 0x96, 0x28, 0xea, 0xa6, + 0x21, 0x85, 0x14, 0xee, 0xe9, 0xa3, 0xc5, 0x94, 0x39, 0x60, + 0x42, 0xa9, 0xfd, 0xb8, 0x88, 0x45, 0x57, 0x37, 0xad, 0x60, + 0xcc, 0x7e, 0x03, 0xa4, 0x61, 0x16, 0x43, 0x2e, 0xf9, 0x99, + 0x7e, 0xaa, 0xd3, 0xad, 0xd8, 0xa5, 0x44, 0x83, 0x15, 0xd7, + 0xad, 0x85, 0xf7, 0x02, 0x3a, 0x83, 0x96, 0xa3, 0x8c, 0xde, + 0x98, 0x35, 0x6d, 0x2c, 0x0d, 0x25, 0xcc, 0x7e, 0x03, 0xa4, + 0x61, 0x16, 0x4b, 0x2a, 0xfb, 0x99, 0x7e, 0xa2, 0xd7, 0xad, + 0xd8, 0xa5, 0x41, 0x83, 0x15, 0xc7, 0xad, 0x85, 0xf7, 0x02, + 0x3a, 0x83, 0x96, 0xab, 0x8c, 0xde, 0x98, 0x75, 0x6d, 0x2c, + 0x0d, 0x25, 0x33, 0x81, 0xfc, 0x5b, 0x9e, 0xe9, 0xb4, 0xd5, + 0x04, 0x66, 0x81, 0x5d, 0x28, 0x52, 0x27, 0x5a, 0xbe, 0x7c, + 0xea, 0x38, 0x52, 0x7a, 0x08, 0xfd, 0xc5, 0x7c, 0x69, 0x54, + 0x73, 0x21, 0x67, 0x8a, 0x92, 0xd3, 0xf2, 0xda, 0xbd, 0x2e, + 0x77, 0x1e, 0x9e, 0x27, 0x73, 0xb7, 0x0d, 0xb4, 0xcb, 0x16, + 0x65, 0x21, 0x94, 0xed, 0xa8, 0x68, 0x2f, 0xa9, 0x0d, 0x6e, + 0x15, 0x96, 0x9d, 0xdd, 0x42, 0xba, 0xae, 0x1a, 0x87, 0x6a, + 0x1d, 0x5e, 0x58, 0xb9, 0x6d, 0x59, 0xc0, 0x0e, 0xb6, 0x5c, + 0x6b, 0x5e, 0xab, 0xc3, 0x99, 0xf5, 0xd2, 0x13, 0xa2, 0xf7, + 0x71, 0x1b, 0x54, 0x51, 0x88, 0xe7, 0x2a, 0xab, 0xa6, 0x87, + 0x82, 0xf8, 0x80, 0xe6, 0xc7, 0x0d, 0x10, 0x9f, 0xc4, 0x94, + 0xfe, 0xd6, 0x92, 0x91, 0x1e, 0x22, 0x92, 0x2c, 0x80, 0xf2, + 0xf7, 0x22, 0x55, 0x89, 0x62, 0xd5, 0xcc, 0x31, 0x68, 0xbc, + 0x4a, 0x37, 0xc2, 0xd4, 0x90, 0xe1, 0xb4, 0x33, 0x8e, 0xd8, + 0x1e, 0x02, 0x42, 0x8a, 0xa3, 0x1d, 0x08, 0x0b, 0x46, 0x78, + 0xa9, 0x6c, 0x6d, 0x67, 0x4e, 0x18, 0x36, 0x67, 0x54, 0xf4, + 0x3b, 0x2a, 0xf6, 0xf4, 0xd7, 0x6f, 0x49, 0xbb, 0xfa, 0xfa, + 0x22, 0xb3, 0x06, 0x05, 0x50, 0xe8, 0x62, 0xc6, 0x4e, 0x50, + 0x33, 0x97, 0x38, 0x8d, 0xaa, 0x40, 0xad, 0x7d, 0x70, 0xe0, + 0x24, 0x37, 0x34, 0xfa, 0x28, 0x2c, 0xa7, 0x0b, 0xfb, 0x34, + 0x42, 0xb2, 0x89, 0x6a, 0xb7, 0x82, 0x87, 0x5d, 0x7b, 0x93, + 0x8f, 0xbd, 0xf5, 0x04, 0x15, 0xa9, 0xfb, 0x70, 0x82, 0x85, + 0x9b, 0xdc, 0xbd, 0x75, 0xff, 0xf2, 0x03, 0xf3, 0x76, 0xf6, + 0x69, 0x2c, 0x10, 0x4a, 0xc6, 0xf4, 0x64, 0x3c, 0x0b, 0x33, + 0x37, 0x42, 0xd7, 0x39, 0xfe, 0x92, 0x1d, 0xbf, 0x66, 0x8c, + 0xd5, 0x8b, 0x03, 0x76, 0x02, 0x85, 0x8a, 0x58, 0xbd, 0x75, + 0xfd, 0xe2, 0x07, 0xf3, 0x36, 0xf6, 0x69, 0x2c, 0x13, 0x4a, + 0xc6, 0xb4, 0x66, 0x3c, 0x0b, 0x33, 0x37, 0xc2, 0xd7, 0x39, + 0x7a, 0x92, 0x1f, 0xbf, 0x66, 0x8c, 0xd5, 0x8b, 0x23, 0x76, + 0xfd, 0x7a, 0x75, 0xa7, 0x42, 0x8a, 0x02, 0x1d, 0xf8, 0x0c, + 0xc9, 0x09, 0x96, 0xd3, 0xec, 0xb5, 0x39, 0x4b, 0x99, 0xc3, + 0xf4, 0xcc, 0xc8, 0x3d, 0x28, 0xc6, 0x85, 0x6d, 0xe0, 0x40, + 0x99, 0x73, 0x2a, 0x74, 0xdc, 0x89, 0x07, 0x00, 0x00, 0x00, + 0x07, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x02, 0x00, + 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x06, 0x00, + 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, + 0x05, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x04, 0x00, + 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x03, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x07, 0x00, + 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, + 0x03, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x07, 0x00, + 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, + 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x03, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x02, 0x00, + 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, + 0x06, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x03, 0x00, + 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, + 0x07, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, + 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x03, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x03, 0x00, + 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, + 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x07, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, + 0x04, 0x00, 0x00, 0x00, 0xe6, 0x0d, 0x2b, 0x9a, 0x9b, 0xc4, + 0xaf, 0xd4, 0x6b, 0x51, 0xfb, 0x3e, 0x14, 0x46, 0xe3, 0xa2, + 0xc3, 0xc8, 0x07, 0xb3, 0xd5, 0x54, 0xc4, 0x0a, 0xe0, 0xf5, + 0x9c, 0x3c, 0xec, 0xd0, 0x4d, 0x38, 0x79, 0x6a, 0xdf, 0xd3, + 0x83, 0xc6, 0xbe, 0x9c, 0xb5, 0xc0, 0xe0, 0x79, 0xc1, 0x85, + 0xae, 0x15, 0xe7, 0x14, 0x57, 0x7f, 0x43, 0x67, 0xc8, 0x40, + 0x7f, 0xb5, 0xed, 0xa4, 0xd3, 0x44, 0x59, 0x84, 0xef, 0xfc, + 0xf1, 0x40, 0x39, 0x7b, 0xd9, 0x17, 0x6e, 0x12, 0xbf, 0x77, + 0x61, 0xd1, 0x23, 0x22, 0x36, 0x29, 0x59, 0x45, 0x98, 0x18, + 0xc1, 0x0b, 0xad, 0x22, 0x80, 0xf6, 0x46, 0x54, 0xf2, 0x58, + 0x98, 0x8b, 0xe5, 0xe3, 0x9c, 0x65, 0x23, 0x6c, 0x27, 0x89, + 0xcb, 0xa5, 0x87, 0x94, 0x78, 0x8d, 0x1b, 0xc3, 0x2a, 0x9c, + 0xa3, 0xd3, 0x78, 0x32, 0xe1, 0xd1, 0x6d, 0x66, 0x1a, 0x5b, + 0xc6, 0xbb, 0x22, 0xa0, 0xbd, 0x40, 0xb4, 0x36, 0x93, 0x61, + 0x86, 0x11, 0x7c, 0x11, 0xac, 0xd1, 0x60, 0xec, 0x8d, 0x06, + 0xb6, 0x95, 0x7e, 0x78, 0x98, 0x95, 0x14, 0xbe, 0x77, 0x16, + 0xf9, 0x64, 0xcd, 0xd8, 0x1d, 0x8a, 0x75, 0x94, 0x69, 0x2e, + 0x75, 0x49, 0xa6, 0xe9, 0xb9, 0x8b, 0x84, 0xa1, 0xb4, 0x1a, + 0xd7, 0x68, 0xa0, 0xf4, 0x9f, 0x75, 0x30, 0x95, 0xb9, 0x4d, + 0x9a, 0xd7, 0x36, 0x92, 0x76, 0x76, 0xb6, 0x50, 0xe8, 0x4e, + 0x17, 0x1a, 0x40, 0xfd, 0x69, 0x7a, 0xef, 0x6a, 0xba, 0x66, + 0xf5, 0xc9, 0x14, 0xd5, 0xfc, 0x52, 0x0f, 0x29, 0xc5, 0xf4, + 0x8f, 0x55, 0x30, 0x95, 0xb9, 0x4d, 0x9a, 0xd5, 0x36, 0x92, + 0x76, 0x76, 0xb6, 0x50, 0xc9, 0x4e, 0x17, 0x1a, 0x44, 0xbd, + 0x69, 0x78, 0xef, 0x6b, 0xba, 0x66, 0xf5, 0xc9, 0x84, 0xd5, + 0xfc, 0x52, 0x07, 0x29, 0xc5, 0xf4, 0x70, 0xaa, 0xcf, 0x6a, + 0x46, 0xb2, 0x65, 0x2a, 0xc9, 0x6d, 0x89, 0x89, 0x49, 0xaf, + 0x36, 0xb1, 0xe8, 0xe5, 0xbb, 0x42, 0x96, 0x87, 0x10, 0x94, + 0x45, 0x99, 0x0a, 0x36, 0x7b, 0x2a, 0x03, 0xad, 0xf8, 0xd6, + 0x3a, 0x0b, 0x0f, 0x22, 0x47, 0x5f, 0x03, 0x9b, 0x47, 0xe0, + 0x43, 0x0a, 0x79, 0x2a, 0x0a, 0xf2, 0xa5, 0x57, 0xcf, 0x22, + 0x3f, 0x66, 0x7d, 0x8e, 0x5c, 0x5a, 0xd2, 0x27, 0x86, 0x41, + 0x21, 0x57, 0x9d, 0xed, 0xdc, 0xe4, 0x1a, 0xfd, 0x53, 0x00, + 0x25, 0x92, 0x34, 0x4c, 0x02, 0xd9, 0x43, 0x12, 0x39, 0x07, + 0x3f, 0x8c, 0xd6, 0x65, 0xe0, 0xed, 0xf3, 0xae, 0x6b, 0x7c, + 0x7e, 0xb3, 0x17, 0x8d, 0xce, 0xc7, 0xc8, 0x69, 0x3f, 0x94, + 0x20, 0x21, 0xdf, 0xee, 0x37, 0x57, 0x27, 0x50, 0x30, 0x8a, + 0x21, 0x06, 0x49, 0xbd, 0xbc, 0x9e, 0x0b, 0xb5, 0x0e, 0x37, + 0xda, 0x4d, 0x41, 0xa0, 0xfd, 0xbe, 0xf2, 0x48, 0x70, 0x55, + 0x49, 0x31, 0xb8, 0x74, 0xda, 0x09, 0x67, 0xbb, 0x1c, 0xd8, + 0x51, 0xfb, 0xf8, 0xdd, 0xef, 0x02, 0xb2, 0x84, 0x3e, 0xcb, + 0x6c, 0x51, 0x03, 0xd2, 0xfd, 0xde, 0x48, 0x37, 0x39, 0x2c, + 0xff, 0x1a, 0x94, 0x15, 0x66, 0x3d, 0x99, 0xcb, 0x7b, 0xcd, + 0xfb, 0x77, 0x15, 0xcc, 0x5d, 0x81, 0xc8, 0x28, 0x65, 0x78, + 0x6d, 0xc0, 0x35, 0xa0, 0xd8, 0xaa, 0xea, 0xa0, 0xf4, 0xa6, + 0x85, 0xed, 0x44, 0x8b, 0x5a, 0x08, 0xf6, 0x13, 0x8c, 0x47, + 0xbc, 0x9f, 0xdb, 0x24, 0x25, 0x25, 0xe7, 0x67, 0xda, 0x22, + 0x0a, 0xb7, 0xc2, 0x07, 0xed, 0x49, 0x69, 0x00, 0x25, 0x21, + 0xeb, 0x8e, 0x64, 0x30, 0x6d, 0xc6, 0xb5, 0xf7, 0x75, 0x83, + 0x96, 0xa9, 0xd3, 0x6b, 0x96, 0x37, 0x5c, 0x3f, 0x7b, 0x2a, + 0x68, 0x64, 0x07, 0xec, 0xdd, 0x22, 0x1d, 0xe5, 0x42, 0x2b, + 0xed, 0x49, 0x69, 0x00, 0x35, 0x20, 0xeb, 0x8e, 0x6c, 0x20, + 0x6d, 0xc6, 0xb5, 0xe7, 0x75, 0x03, 0x12, 0xa8, 0xf7, 0x6b, + 0x86, 0x07, 0x5c, 0x3f, 0x7b, 0x2a, 0x68, 0x64, 0x27, 0xee, + 0xdd, 0x22, 0x1d, 0xe5, 0xbd, 0xd4, 0x12, 0xb6, 0x96, 0xff, + 0xca, 0xdf, 0x14, 0x71, 0x93, 0xdf, 0x92, 0x39, 0x4a, 0x18, + 0x8a, 0xfc, 0xed, 0x57, 0x08, 0x94, 0x79, 0xf8, 0xa3, 0xc0, + 0x84, 0xd5, 0x97, 0x9b, 0xd8, 0x11, 0x22, 0xdd, 0xe2, 0x1a, + 0x06, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, + 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, + 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, + 0x05, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x06, 0x00, + 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, + 0x03, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x01, 0x00, + 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, + 0x07, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x05, 0x00, + 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, + 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x04, 0x00, + 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x04, 0x00, + 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, + 0x05, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x02, 0x00, + 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, + 0x03, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x07, 0x00, + 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x04, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x04, 0x00, + 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, + 0x05, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, + 0x05, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x02, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x04, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x37, 0x30, + 0x87, 0xb8, 0xd1, 0x6b, 0x60, 0x87, 0x74, 0x62, 0x3a, 0xcd, + 0x13, 0x86, 0xf1, 0x2d, 0x3e, 0xb6, 0x4c, 0x04, 0x70, 0xd9, + 0xbc, 0xc0, 0xd7, 0x77, 0x23, 0xca, 0x07, 0x13, 0x84, 0xe6, + 0xd1, 0xe1, 0x7a, 0x7a, 0xc3, 0xa7, 0x72, 0xc1, 0x9a, 0x72, + 0x48, 0xb3, 0x4d, 0x66, 0xfd, 0xdd, 0x81, 0x56, 0xc8, 0x6f, + 0x47, 0xf5, 0x76, 0x9c, 0xd0, 0xe5, 0x60, 0x12, 0x5d, 0x90, + 0xab, 0xbf, 0xb8, 0x32, 0x2e, 0xc0, 0x97, 0xa7, 0x1f, 0x94, + 0x95, 0xe2, 0x05, 0x00, 0x80, 0x35, 0x03, 0xf8, 0x2e, 0x5f, + 0xb1, 0xde, 0xa7, 0xbf, 0x81, 0xa9, 0xe6, 0xe4, 0x23, 0xe7, + 0x88, 0xac, 0x87, 0x05, 0x33, 0x8c, 0x9b, 0xaa, 0x29, 0x5a, + 0x92, 0xb4, 0x59, 0x8c, 0x94, 0xbe, 0xe7, 0x13, 0x82, 0xef, + 0x8f, 0x87, 0x0d, 0x92, 0xbb, 0xa8, 0xdb, 0x22, 0x0f, 0x92, + 0x19, 0x50, 0xaa, 0xfd, 0x02, 0x04, 0x0b, 0x56, 0x15, 0xd5, + 0x7d, 0x22, 0xa6, 0x70, 0x30, 0xf8, 0x83, 0x31, 0x36, 0x37, + 0xaa, 0x13, 0xb0, 0xf7, 0xbb, 0xad, 0xa8, 0x84, 0x18, 0x40, + 0xad, 0xe7, 0x83, 0x34, 0xec, 0x97, 0x5d, 0x51, 0x49, 0x85, + 0xc9, 0x75, 0xc1, 0xda, 0x49, 0x48, 0xd6, 0x84, 0xb6, 0x7c, + 0x9b, 0x28, 0xae, 0xe4, 0x51, 0xdf, 0x98, 0xec, 0x84, 0xf3, + 0x9a, 0xc4, 0x8a, 0xc0, 0xfa, 0xd8, 0x89, 0xf7, 0x83, 0x26, + 0xca, 0xa7, 0xdf, 0xd5, 0x4e, 0xa6, 0x92, 0x35, 0xc5, 0x72, + 0x25, 0x6e, 0xc2, 0x04, 0xf6, 0x6c, 0x3e, 0x59, 0x89, 0x8c, + 0x5b, 0x5c, 0xb0, 0x97, 0x84, 0xf7, 0xba, 0xc5, 0x8a, 0x80, + 0x3a, 0xda, 0x89, 0xf3, 0x83, 0x26, 0xca, 0x87, 0xdd, 0xd5, + 0x4e, 0xa4, 0x92, 0x75, 0xc5, 0x72, 0x25, 0x4e, 0xc2, 0x04, + 0xf6, 0x6c, 0x3a, 0x59, 0x89, 0xa4, 0x5b, 0x5e, 0xb0, 0x97, + 0x7b, 0x08, 0x45, 0x3a, 0x75, 0x7f, 0xc5, 0x25, 0x76, 0x0c, + 0x7c, 0xd9, 0x35, 0x78, 0x22, 0x2a, 0xb1, 0x5b, 0x6d, 0x8a, + 0x3a, 0x8d, 0xda, 0xb1, 0x3d, 0xfb, 0x09, 0x93, 0xc5, 0xa6, + 0x76, 0x5b, 0xa4, 0xa1, 0x4f, 0x68, 0x9f, 0x12, 0x29, 0xa2, + 0xd0, 0x4a, 0x7a, 0xc4, 0xdb, 0x8f, 0xbc, 0x33, 0x80, 0x1b, + 0x55, 0xb1, 0x91, 0xf3, 0x20, 0xbd, 0x25, 0x9e, 0x26, 0x00, + 0x84, 0xf7, 0x17, 0x6a, 0xbc, 0xda, 0x4a, 0xc8, 0x9b, 0x14, + 0xf6, 0xc5, 0xe2, 0xff, 0xd2, 0x57, 0x2d, 0xd8, 0xd0, 0x45, + 0x87, 0xee, 0xfc, 0x05, 0xa7, 0x7b, 0x64, 0x52, 0x7c, 0xde, + 0xfb, 0x86, 0x11, 0x25, 0xb2, 0x09, 0x4c, 0xa7, 0x35, 0x2d, + 0x67, 0xa4, 0xe6, 0xd0, 0xad, 0x6c, 0xeb, 0xd0, 0x8e, 0x86, + 0x1b, 0xf4, 0x5f, 0x02, 0xd5, 0x8c, 0xc1, 0xf5, 0x48, 0x63, + 0x07, 0x70, 0x68, 0x78, 0x16, 0xca, 0x2c, 0x51, 0xf6, 0x95, + 0xc4, 0x20, 0x0f, 0xa6, 0x13, 0x7b, 0xf9, 0x81, 0x10, 0xd1, + 0x86, 0x66, 0x92, 0xd9, 0x95, 0x64, 0xfc, 0x9e, 0xfa, 0x2e, + 0x71, 0x1c, 0x00, 0xd4, 0x86, 0x91, 0xfd, 0xf7, 0x4b, 0x24, + 0x97, 0x8f, 0x6c, 0x0d, 0x5a, 0x48, 0xc7, 0xc0, 0xa8, 0x4e, + 0xaf, 0xf9, 0x50, 0xa4, 0xa3, 0x48, 0x90, 0xb6, 0x71, 0x41, + 0xb5, 0xea, 0x77, 0x50, 0x72, 0x66, 0x7c, 0xfb, 0xcb, 0x82, + 0x71, 0x8a, 0x01, 0xcb, 0xcf, 0x6a, 0x4b, 0x16, 0x33, 0x50, + 0x27, 0xf8, 0xde, 0xbc, 0xdc, 0xb1, 0x2a, 0xe9, 0x3a, 0xdb, + 0x7a, 0xe9, 0xac, 0x90, 0x24, 0x18, 0x18, 0xb7, 0x37, 0x14, + 0xe6, 0x5c, 0xec, 0xec, 0x9a, 0x5e, 0xa1, 0xa3, 0x01, 0x9b, + 0x4f, 0x7a, 0x5f, 0xdc, 0x2b, 0x78, 0xe0, 0xd8, 0x0e, 0xb1, + 0xd8, 0xa7, 0xea, 0xe9, 0xab, 0x92, 0x22, 0xeb, 0x95, 0xdc, + 0x26, 0x19, 0x9c, 0xb7, 0x37, 0x54, 0xf6, 0x5c, 0xec, 0xec, + 0x8a, 0x16, 0xe1, 0x83, 0x01, 0xdb, 0x4f, 0x7a, 0x5f, 0x9e, + 0x2b, 0x58, 0x60, 0xd8, 0x8e, 0xb1, 0xd8, 0xa7, 0x6a, 0xe9, + 0x2b, 0x92, 0x22, 0xeb, 0x94, 0xdc, 0x26, 0x08, 0x63, 0x48, + 0xc8, 0xab, 0x09, 0xa3, 0x13, 0x13, 0x75, 0xe9, 0x1e, 0x7c, + 0xfe, 0x24, 0xb0, 0x85, 0xa0, 0x61, 0xd4, 0xa7, 0x9f, 0x27, + 0x71, 0x4e, 0x27, 0x58, 0x95, 0x16, 0xd4, 0x6d, 0xdd, 0x14, + 0x6b, 0x23, 0xd9, 0xf7, 0x03, 0x00, 0x00, 0x00, 0x06, 0x00, + 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x05, 0x00, + 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, + 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x03, 0x00, + 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x03, 0x00, + 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x05, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, + 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x07, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x01, 0x00, + 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x07, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, + 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, + 0x05, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x04, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, + 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, + 0x06, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, + 0x05, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x01, 0x00, + 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x03, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x01, 0x00, + 0x00, 0x00, 0xac, 0xab, 0x1b, 0x4d, 0x4b, 0x09, 0x00, 0x7c, + 0x35, 0x9c, 0x96, 0x3f, 0x7b, 0x0a, 0x7b, 0x5b, 0xbe, 0x6b, + 0x2b, 0x18, 0x85, 0x78, 0x28, 0x62, 0x3d, 0x42, 0x2c, 0x48, + 0x22, 0x69, 0x4b, 0xaf, 0xa9, 0xa4, 0x1d, 0xb5, 0x60, 0xeb, + 0x29, 0x4f, 0xc6, 0x73, 0x44, 0x78, 0x46, 0x62, 0xeb, 0x40, + 0xfe, 0xf7, 0x05, 0x44, 0xe6, 0xc3, 0xf6, 0x68, 0x70, 0x6d, + 0x7a, 0x41, 0xc8, 0x18, 0x6f, 0xc1, 0x5e, 0x4b, 0x46, 0xad, + 0x55, 0x4e, 0xd1, 0x40, 0x1e, 0x80, 0x5f, 0x0d, 0xbf, 0xe5, + 0x4e, 0x79, 0x10, 0x68, 0x39, 0xfb, 0x27, 0x1b, 0x25, 0x25, + 0x99, 0xd3, 0x26, 0xed, 0x83, 0xfd, 0x75, 0x94, 0xf9, 0xe3, + 0xca, 0x09, 0xa7, 0xd9, 0xa6, 0xc6, 0x9f, 0x26, 0xc9, 0x0a, + 0xe5, 0x42, 0xea, 0x88, 0x85, 0xf8, 0xbf, 0xc6, 0xcb, 0xb5, + 0x05, 0x1b, 0xfb, 0x89, 0xef, 0x1c, 0xd6, 0x91, 0x62, 0xef, + 0x26, 0x52, 0x13, 0x3c, 0x94, 0x8b, 0xd9, 0x93, 0x37, 0x16, + 0xb0, 0xa9, 0x17, 0x89, 0x95, 0xa4, 0xc9, 0xa6, 0x44, 0x9f, + 0x23, 0x54, 0xa7, 0x66, 0x21, 0x79, 0x66, 0x39, 0x2a, 0x95, + 0x25, 0xb1, 0x6d, 0x8c, 0x3f, 0x1e, 0x90, 0x94, 0x2f, 0xe1, + 0x5a, 0x40, 0xb5, 0x18, 0x67, 0x51, 0x4a, 0xec, 0xf0, 0xae, + 0xc3, 0xb6, 0xcc, 0xcc, 0xc8, 0x9e, 0xe1, 0x56, 0x8f, 0xf6, + 0x73, 0xbb, 0x70, 0x6b, 0x68, 0x18, 0xad, 0x16, 0x3c, 0x84, + 0x6e, 0xc5, 0x98, 0x50, 0x2f, 0x3b, 0x9f, 0x0a, 0x98, 0x19, + 0x77, 0x79, 0x4a, 0xac, 0xd3, 0xef, 0xc4, 0xe1, 0xcd, 0xcc, + 0xcc, 0x9f, 0xe1, 0x54, 0x8f, 0xf6, 0x73, 0xb9, 0x70, 0x6b, + 0x68, 0x18, 0xad, 0x14, 0x3c, 0x84, 0x7e, 0xcd, 0x90, 0x50, + 0x2f, 0x72, 0x9e, 0x0b, 0x98, 0x19, 0x67, 0x79, 0x4a, 0xac, + 0xd3, 0xee, 0xc5, 0xa0, 0x32, 0x33, 0x33, 0x60, 0x1e, 0xab, + 0x70, 0x09, 0x8c, 0x46, 0x8f, 0x94, 0x97, 0xe7, 0x52, 0xeb, + 0xc3, 0x7b, 0x81, 0x32, 0x6f, 0xaf, 0xd0, 0x8d, 0x61, 0xf4, + 0x67, 0xe6, 0x98, 0x86, 0xb5, 0x53, 0x2c, 0x11, 0x3a, 0x5f, + 0x7d, 0xdf, 0x3e, 0xa5, 0x71, 0x07, 0xbd, 0x83, 0x2b, 0x76, + 0x2d, 0xd9, 0x10, 0x4c, 0x3f, 0xda, 0x5c, 0x20, 0xab, 0x77, + 0x67, 0x93, 0x85, 0xd5, 0x10, 0x6d, 0x4b, 0xaf, 0x32, 0x3a, + 0x4d, 0x79, 0x2b, 0xbc, 0x6c, 0xd7, 0x9d, 0x18, 0x35, 0x0a, + 0xe3, 0x8b, 0x5d, 0xa2, 0x47, 0x43, 0xd2, 0xd7, 0xe6, 0xb3, + 0xe6, 0x47, 0xe4, 0x74, 0xae, 0x7d, 0x74, 0xd1, 0x74, 0x64, + 0x0d, 0xe7, 0xc6, 0xc2, 0xcf, 0x2e, 0x78, 0xa6, 0xd5, 0xa2, + 0x0b, 0x32, 0x57, 0x13, 0xbf, 0xc1, 0x6b, 0x4e, 0x63, 0x24, + 0xd1, 0x8e, 0x53, 0x09, 0x48, 0x85, 0x2d, 0x3f, 0x0e, 0x15, + 0xd8, 0x20, 0x69, 0xb2, 0x06, 0xe4, 0xca, 0x11, 0x40, 0xdb, + 0x48, 0xef, 0x01, 0x5f, 0xbe, 0x8e, 0x31, 0xf6, 0x93, 0x1d, + 0xa7, 0x0f, 0x7a, 0x41, 0x7e, 0x00, 0x4c, 0x65, 0xb0, 0x2b, + 0x4a, 0xed, 0x1b, 0xe2, 0x80, 0x4a, 0x1c, 0x8b, 0x92, 0x66, + 0x20, 0x36, 0x23, 0xfe, 0x28, 0x14, 0xb6, 0x00, 0x6a, 0x7d, + 0xfd, 0x61, 0x18, 0x44, 0x0f, 0xcb, 0x28, 0xc6, 0x9f, 0x27, + 0x5d, 0xa2, 0x1c, 0xf2, 0x6c, 0x45, 0x28, 0x67, 0xdd, 0xbe, + 0x7f, 0xf4, 0x9e, 0x2d, 0x25, 0xd3, 0xa7, 0xad, 0x60, 0xce, + 0x4f, 0x4e, 0xa8, 0x3b, 0x6d, 0x37, 0xb6, 0x36, 0x94, 0x0c, + 0x8e, 0x39, 0xf2, 0xa2, 0xdf, 0x39, 0x57, 0xb0, 0x6d, 0x7e, + 0x8b, 0x41, 0x69, 0xd3, 0xdd, 0xee, 0x14, 0x70, 0x3a, 0x7d, + 0x21, 0xd0, 0x83, 0x85, 0x20, 0xec, 0x02, 0x4c, 0xae, 0x36, + 0x69, 0xbe, 0x16, 0x3f, 0x90, 0x17, 0x8e, 0x19, 0xf2, 0x22, + 0xdf, 0x39, 0x57, 0xb0, 0x4d, 0x7e, 0x8a, 0x41, 0x6b, 0xd3, + 0xdd, 0xee, 0x14, 0x70, 0x3a, 0x3d, 0x21, 0xd1, 0x8b, 0xa4, + 0x20, 0xcc, 0x02, 0x4c, 0xac, 0x36, 0x69, 0xbe, 0x16, 0x3f, + 0x90, 0x17, 0x71, 0xe6, 0x0d, 0xdd, 0x20, 0xc6, 0xa8, 0x4f, + 0xb2, 0x81, 0x75, 0xbe, 0x94, 0x2c, 0x22, 0x11, 0xeb, 0x8f, + 0xc5, 0xc2, 0xde, 0x2e, 0x7c, 0x5b, 0xdf, 0x33, 0xfd, 0xb3, + 0x53, 0xc9, 0x96, 0x41, 0xe9, 0xc0, 0x6f, 0xe8, 0x02, 0x00, + 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, + 0x07, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x03, 0x00, + 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, + 0x06, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x05, 0x00, + 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, + 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, + 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x01, 0x00, + 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, + 0x05, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x06, 0x00, + 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, + 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, + 0x05, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x05, 0x00, + 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x06, 0x00, + 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x03, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x03, 0x00, + 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x05, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x06, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x02, 0x00, + 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x07, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1b, 0xd1, 0x2c, 0xe5, + 0xf5, 0xbc, 0x58, 0x46, 0x30, 0xa8, 0xaa, 0x6f, 0xfe, 0x37, + 0x2c, 0x5c, 0xd3, 0xb0, 0x2d, 0x72, 0x3f, 0x29, 0xbd, 0xe5, + 0x53, 0x02, 0x3e, 0x51, 0xec, 0x64, 0x98, 0xe2, 0x6f, 0xfa, + 0x73, 0x17, 0xf2, 0x84, 0x08, 0x4b, 0x51, 0xb1, 0xbf, 0xf1, + 0xc5, 0x81, 0x01, 0x8a, 0xb4, 0x78, 0x42, 0x06, 0x62, 0x09, + 0x9b, 0x93, 0x7f, 0xaa, 0xc6, 0xb1, 0x49, 0x66, 0x44, 0x00, + 0xa0, 0xd5, 0x04, 0x34, 0x1d, 0x06, 0x4f, 0xc9, 0xea, 0x5c, + 0x7d, 0x7b, 0x22, 0x96, 0xc8, 0x26, 0x93, 0xe7, 0x5a, 0xc0, + 0xd4, 0x67, 0x1c, 0x39, 0xf1, 0x7f, 0x86, 0x4e, 0xd3, 0x76, + 0xd9, 0x62, 0xcc, 0x7c, 0x6f, 0xc3, 0x9a, 0x61, 0xf7, 0xb3, + 0x23, 0x67, 0x25, 0x46, 0xea, 0xcf, 0x62, 0x04, 0x8e, 0x9d, + 0x16, 0xac, 0x93, 0xec, 0x38, 0x41, 0xa5, 0xd1, 0xfc, 0x77, + 0x51, 0x11, 0x9f, 0x55, 0x2a, 0x4e, 0x2d, 0xd9, 0x4d, 0xb7, + 0xed, 0x50, 0x69, 0x9e, 0x94, 0x94, 0x1c, 0x50, 0x1e, 0xbe, + 0x28, 0x51, 0x32, 0x72, 0x8a, 0xa2, 0xfb, 0xe1, 0x27, 0x05, + 0xc6, 0x56, 0x2a, 0x22, 0xfd, 0xac, 0x4f, 0x78, 0x13, 0xca, + 0xda, 0x10, 0x07, 0x92, 0x50, 0xf4, 0xd9, 0x5a, 0x02, 0x03, + 0x9d, 0x8e, 0x94, 0x56, 0x2a, 0xc0, 0xa0, 0x54, 0x31, 0x52, + 0x8a, 0xa3, 0xde, 0x68, 0x97, 0x1f, 0x6c, 0x66, 0xad, 0x83, + 0x9c, 0xfc, 0x1c, 0xb9, 0x61, 0x21, 0xca, 0xdc, 0x05, 0xda, + 0x49, 0x50, 0xf0, 0x5c, 0x1f, 0xf0, 0x1c, 0x9d, 0x80, 0x1a, + 0x80, 0x2b, 0xa0, 0x50, 0x30, 0x52, 0x8a, 0xa3, 0xde, 0xe8, + 0x97, 0x1f, 0x6c, 0x66, 0xad, 0x83, 0x9c, 0xfc, 0x5d, 0xb9, + 0x61, 0x21, 0xca, 0xdc, 0x05, 0xda, 0x41, 0x50, 0xf9, 0x5c, + 0x1f, 0xf0, 0x9c, 0x9c, 0x14, 0x12, 0x08, 0x2b, 0x5f, 0xaf, + 0xcf, 0xad, 0x75, 0x5c, 0x21, 0x17, 0x68, 0xe0, 0x93, 0x99, + 0x52, 0x7c, 0x63, 0x03, 0xa2, 0x46, 0x9e, 0xde, 0x35, 0x23, + 0xfa, 0x25, 0xbe, 0xaf, 0x06, 0xa3, 0xe0, 0x0f, 0x63, 0x63, + 0xeb, 0xed, 0xf7, 0xd4, 0x69, 0x1a, 0x0a, 0x90, 0x22, 0x49, + 0x3c, 0x6b, 0xb2, 0x1b, 0xe8, 0x9e, 0x45, 0x99, 0xb1, 0x2c, + 0x17, 0x5c, 0x01, 0xb4, 0x58, 0xa9, 0x7b, 0x49, 0x2d, 0xab, + 0xd7, 0x25, 0x7b, 0x99, 0xa0, 0x97, 0x8a, 0xc3, 0x7b, 0x7b, + 0x18, 0xcc, 0x39, 0x37, 0xc0, 0x2e, 0x2d, 0xbc, 0xe9, 0x24, + 0xd8, 0xc8, 0x2b, 0x01, 0xb9, 0xe2, 0x06, 0x27, 0x71, 0x7c, + 0xef, 0x08, 0x9a, 0x2d, 0x42, 0xb7, 0x6f, 0x4b, 0x86, 0x93, + 0xfa, 0xeb, 0xf7, 0x9e, 0x75, 0x3f, 0xea, 0x7b, 0xbc, 0xbe, + 0xb2, 0x5e, 0xe9, 0x69, 0xa8, 0x60, 0x46, 0x05, 0xb5, 0xaa, + 0x2d, 0xd3, 0xfa, 0x47, 0x6e, 0x48, 0xed, 0x9f, 0xd8, 0x33, + 0xe1, 0xf8, 0xda, 0x57, 0x6a, 0xf4, 0x8e, 0x18, 0x2c, 0xf0, + 0x1a, 0xe8, 0x67, 0xc9, 0x03, 0x2c, 0x23, 0x46, 0xd1, 0x5b, + 0xac, 0x4c, 0xd5, 0x4a, 0x2c, 0xfb, 0x9c, 0x2e, 0x27, 0xd3, + 0x51, 0x94, 0x14, 0x25, 0x4a, 0xaf, 0x7e, 0xb8, 0xbe, 0x0b, + 0x3f, 0x3d, 0x33, 0x71, 0x15, 0x2b, 0x13, 0xf9, 0x42, 0x37, + 0xb6, 0xe9, 0x3c, 0x1b, 0x26, 0xe2, 0x32, 0xd8, 0xaa, 0x05, + 0xe5, 0x27, 0xc3, 0x9f, 0x80, 0x03, 0xf8, 0x55, 0x50, 0x1c, + 0x31, 0x74, 0x85, 0x29, 0x98, 0x71, 0xcd, 0x75, 0xf8, 0xf3, + 0xf5, 0xd6, 0x65, 0xb4, 0x4a, 0x1c, 0x2f, 0xed, 0xa5, 0xfb, + 0x60, 0xe1, 0x70, 0x91, 0xb2, 0x07, 0x3f, 0x63, 0x89, 0xdd, + 0xce, 0xc9, 0x79, 0x5e, 0x74, 0x01, 0x10, 0x75, 0x03, 0x3c, + 0xbc, 0x25, 0x06, 0x0d, 0x2d, 0xf1, 0x15, 0x82, 0xe9, 0x36, + 0x4a, 0x1c, 0x2f, 0xed, 0xac, 0x7b, 0x60, 0xe1, 0x70, 0xd0, + 0xb2, 0x07, 0x37, 0x63, 0x89, 0xdf, 0xc6, 0xcb, 0x78, 0x5e, + 0x74, 0x01, 0x10, 0x75, 0x03, 0x38, 0xbc, 0x27, 0x07, 0x0d, + 0x2d, 0xf1, 0x15, 0x82, 0x69, 0x36, 0xb5, 0xe3, 0xd0, 0x12, + 0x53, 0x84, 0x9f, 0x1e, 0x8f, 0x2f, 0x4d, 0xf8, 0xc8, 0x9c, + 0x76, 0x20, 0x39, 0x34, 0x87, 0xa1, 0x8b, 0xfe, 0xef, 0x8a, + 0xfc, 0xc7, 0x43, 0xd8, 0xf8, 0xf2, 0xd2, 0x0e, 0xea, 0x7d, + 0x96, 0xc9, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x07, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x06, 0x00, + 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, + 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, + 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x02, 0x00, + 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x00, + 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x07, 0x00, + 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, + 0x06, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x03, 0x00, + 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, + 0x05, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x03, 0x00, + 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x01, 0x00, + 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, + 0x07, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x05, 0x00, + 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, + 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, + 0x03, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x03, 0x00, + 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, + 0x06, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00 +}; + diff --git a/neureka/depthwise/Makefile b/neureka/depthwise/Makefile new file mode 100644 index 0000000..9c8efb5 --- /dev/null +++ b/neureka/depthwise/Makefile @@ -0,0 +1,3 @@ +include ../app/Makefile + +STIM_DIR := ../depthwise/ \ No newline at end of file diff --git a/neureka/depthwise/inc/bias.h b/neureka/depthwise/inc/bias.h new file mode 100644 index 0000000..7466de0 --- /dev/null +++ b/neureka/depthwise/inc/bias.h @@ -0,0 +1,9 @@ +#ifndef __BIAS_H__ +#define __BIAS_H__ + +#include + +#define BIAS_SIZE (67) +extern int32_t bias[BIAS_SIZE]; + +#endif // __BIAS_H__ diff --git a/neureka/depthwise/inc/input.h b/neureka/depthwise/inc/input.h new file mode 100644 index 0000000..ddb3845 --- /dev/null +++ b/neureka/depthwise/inc/input.h @@ -0,0 +1,9 @@ +#ifndef __INPUT_H__ +#define __INPUT_H__ + +#include + +#define INPUT_SIZE (1407) +extern uint8_t input[INPUT_SIZE]; + +#endif // __INPUT_H__ diff --git a/neureka/depthwise/inc/layer_conf.h b/neureka/depthwise/inc/layer_conf.h new file mode 100644 index 0000000..a1e9326 --- /dev/null +++ b/neureka/depthwise/inc/layer_conf.h @@ -0,0 +1,42 @@ +#ifndef __LAYER_CONF_H__ +#define __LAYER_CONF_H__ + +#define TEST_NAME "test" +#define INPUT_HEIGHT (7) +#define INPUT_WIDTH (3) +#define INPUT_CHANNEL (67) +#define INPUT_SIGNED (0) +#define INPUT_BITS (8) + +#define OUTPUT_HEIGHT (5) +#define OUTPUT_WIDTH (1) +#define OUTPUT_CHANNEL (67) +#define OUTPUT_BITS (8) + +#define WEIGHT_HEIGHT (3) +#define WEIGHT_WIDTH (3) +#define WEIGHT_CHANNEL_IN (1) +#define WEIGHT_CHANNEL_OUT (67) +#define WEIGHT_BITS (8) +#define WEIGHT_OFFSET (-128) + +#define SCALE_BITS (8) + +#define BIAS_BITS (32) + +#define PADDING_TOP (0) +#define PADDING_BOTTOM (0) +#define PADDING_LEFT (0) +#define PADDING_RIGHT (0) +#define PADDING_VALUE (0) + +#define STRIDE_HEIGHT (1) +#define STRIDE_WIDTH (1) + +#define GROUPS (67) +#define OUTSHIFT (10) +#define HAS_NORM_QUANT (1) +#define HAS_BIAS (1) +#define HAS_RELU (1) + +#endif // __LAYER_CONF_H__ diff --git a/neureka/depthwise/inc/output.h b/neureka/depthwise/inc/output.h new file mode 100644 index 0000000..43b9b83 --- /dev/null +++ b/neureka/depthwise/inc/output.h @@ -0,0 +1,14 @@ +#ifndef __OUTPUT_H__ +#define __OUTPUT_H__ + +#include + +#define OUTPUT_SIZE (335) +extern uint8_t output[OUTPUT_SIZE]; + +#define GOLDEN_OUTPUT_SIZE (335) +extern uint8_t golden_output[GOLDEN_OUTPUT_SIZE]; + +int check_output(); + +#endif // __OUTPUT_H__ diff --git a/neureka/depthwise/inc/scale.h b/neureka/depthwise/inc/scale.h new file mode 100644 index 0000000..cced0eb --- /dev/null +++ b/neureka/depthwise/inc/scale.h @@ -0,0 +1,9 @@ +#ifndef __SCALE_H__ +#define __SCALE_H__ + +#include + +#define SCALE_SIZE (67) +extern uint8_t scale[SCALE_SIZE]; + +#endif // __SCALE_H__ diff --git a/neureka/depthwise/inc/weight.h b/neureka/depthwise/inc/weight.h new file mode 100644 index 0000000..82efe1e --- /dev/null +++ b/neureka/depthwise/inc/weight.h @@ -0,0 +1,9 @@ +#ifndef __WEIGHT_H__ +#define __WEIGHT_H__ + +#include + +#define WEIGHT_SIZE (864) +extern uint8_t weight[WEIGHT_SIZE]; + +#endif // __WEIGHT_H__ diff --git a/neureka/depthwise/src/bias.c b/neureka/depthwise/src/bias.c new file mode 100644 index 0000000..32abcea --- /dev/null +++ b/neureka/depthwise/src/bias.c @@ -0,0 +1,13 @@ +#include "bias.h" + +#define BIAS_SIZE (67) +PI_L1 int32_t bias[BIAS_SIZE] = { + 0x13874, 0x26f67, -0x101fd, 0x2f1b9, -0x1b8ff, 0x1ff5c, -0x109c8, -0x378c4, 0xa964, 0x14edd, + -0x18c81, 0x349c8, 0x1fcf, -0x34b55, -0x11ff6, 0x343b6, -0x38662, 0x304d8, 0x103ff, 0x16f6f, + -0x1cc56, 0x1fad4, 0x2ca7e, -0x4851, -0x8866, 0x840c, -0x7ef2, 0x3906f, -0x22218, -0x298f, + 0x3705d, 0x06, -0xf641, -0x3d441, -0x38f1f, 0x37eb9, 0x1b5ce, -0x16e86, 0x32a32, -0xb606, + -0x129fc, 0x3812, 0x2ee55, 0x3b457, -0x16ad9, -0xb971, -0x4571, -0x784b, -0x15e15, -0x2bdda, + -0x22b2b, -0x3a365, -0x27563, 0x3021a, -0x173c7, 0x2c311, -0x2c268, -0x2dee9, -0x165f6, -0x3e422, + -0x15221, 0x3ed37, 0x164d9, -0x167b, -0x34c83, -0xcb89, 0x262d5 +}; + diff --git a/neureka/depthwise/src/input.c b/neureka/depthwise/src/input.c new file mode 100644 index 0000000..7d83843 --- /dev/null +++ b/neureka/depthwise/src/input.c @@ -0,0 +1,147 @@ +#include "input.h" + +#define INPUT_SIZE (1407) +PI_L1 uint8_t input[INPUT_SIZE] = { + 0xc2, 0x2c, 0xe2, 0x81, 0x81, 0x2d, 0xa9, 0xb3, 0x4c, 0x8a, + 0x32, 0x75, 0x40, 0xc1, 0xed, 0x7a, 0x9a, 0x7d, 0x5e, 0xdf, + 0xc8, 0x44, 0x83, 0xe8, 0x1e, 0x1b, 0xd2, 0x84, 0x39, 0xc5, + 0x2c, 0x27, 0x9b, 0x78, 0xb3, 0x70, 0x5a, 0x5b, 0xb5, 0x95, + 0x3c, 0x8f, 0xe4, 0x32, 0xfa, 0x12, 0xb7, 0xc7, 0x48, 0x91, + 0x02, 0x33, 0xd0, 0xbe, 0x57, 0xae, 0x61, 0xd0, 0x8a, 0x5d, + 0xd1, 0x72, 0x25, 0x0a, 0x81, 0x35, 0xd7, 0x36, 0xec, 0x04, + 0x37, 0xda, 0x99, 0xf4, 0x28, 0x46, 0xc8, 0xdd, 0x25, 0xae, + 0x37, 0x78, 0xf2, 0x15, 0x48, 0x57, 0xc2, 0x5b, 0xe1, 0x63, + 0x07, 0xab, 0xac, 0x7c, 0x2a, 0xe0, 0xbc, 0x75, 0xa8, 0xf0, + 0x48, 0x74, 0xe1, 0xad, 0xce, 0x17, 0x21, 0xf1, 0x72, 0x3d, + 0x08, 0x00, 0x44, 0x04, 0x46, 0xc7, 0x35, 0x39, 0x5f, 0xf9, + 0xdc, 0xad, 0x25, 0x23, 0xd5, 0x0f, 0xf0, 0x5c, 0x23, 0x08, + 0x25, 0x82, 0xd9, 0x76, 0xe9, 0xd1, 0x10, 0x9b, 0x13, 0x38, + 0x67, 0x8b, 0x96, 0x80, 0x7f, 0xe8, 0x58, 0xbf, 0x9e, 0xf3, + 0x34, 0x20, 0x06, 0xb6, 0xcd, 0x80, 0x3f, 0xf5, 0x2b, 0x95, + 0x90, 0x66, 0xa7, 0xc3, 0xf0, 0x01, 0x13, 0x11, 0x09, 0xbd, + 0x94, 0xfe, 0x52, 0x98, 0xda, 0x19, 0x19, 0x1a, 0x47, 0xca, + 0x5f, 0x7b, 0x64, 0xd8, 0x15, 0xb1, 0xcd, 0x3a, 0xe0, 0x29, + 0x61, 0x93, 0xa6, 0xb9, 0x99, 0x3b, 0x66, 0x46, 0x37, 0x4f, + 0x64, 0x87, 0xb3, 0xe3, 0x1c, 0xdf, 0x20, 0xc4, 0x48, 0xca, + 0x9c, 0xa8, 0x48, 0xd0, 0x52, 0x06, 0x3d, 0x87, 0x29, 0x23, + 0x99, 0x68, 0xed, 0x0a, 0x5c, 0xee, 0x5a, 0xec, 0xd6, 0x6e, + 0x65, 0x75, 0xa7, 0x0f, 0x17, 0x4b, 0xa0, 0xcf, 0xc4, 0xdc, + 0x28, 0xc2, 0x69, 0x4a, 0x61, 0x24, 0x55, 0xa2, 0x0c, 0xcd, + 0x6c, 0x79, 0xf8, 0xa1, 0xc9, 0x39, 0xc0, 0xe2, 0xc8, 0x00, + 0xe5, 0xbe, 0xf0, 0x81, 0x2c, 0xc4, 0xa9, 0x0c, 0xdf, 0xce, + 0xee, 0xe8, 0xb8, 0x62, 0x49, 0x07, 0xaa, 0x3c, 0xed, 0x30, + 0xd9, 0x77, 0x10, 0xd7, 0x32, 0x5e, 0x3d, 0xef, 0x27, 0x13, + 0x50, 0xb5, 0xb5, 0x21, 0x76, 0x14, 0x8f, 0x77, 0x7d, 0xb1, + 0xf8, 0xc3, 0x45, 0xfd, 0x35, 0x59, 0xa4, 0xca, 0xca, 0xbd, + 0x8d, 0xea, 0x83, 0x78, 0xa2, 0x6b, 0x11, 0xef, 0xae, 0x9d, + 0x1f, 0x9d, 0xcc, 0x98, 0x89, 0x22, 0x8b, 0x7d, 0xe8, 0xa7, + 0x61, 0x9e, 0x0c, 0xe3, 0x7e, 0xcc, 0x6d, 0x19, 0xbc, 0x71, + 0x8c, 0x01, 0x2a, 0x03, 0xa7, 0x81, 0x99, 0x12, 0x93, 0xc7, + 0x18, 0x3d, 0x66, 0x37, 0x98, 0x08, 0xf2, 0xb6, 0x0b, 0xa2, + 0x89, 0x65, 0x34, 0x07, 0x6e, 0x09, 0x84, 0xfe, 0x73, 0xf8, + 0x96, 0xbd, 0x09, 0x5c, 0x47, 0x1e, 0x0e, 0xa9, 0x58, 0xe7, + 0x5d, 0xc1, 0xdb, 0xe8, 0x67, 0x40, 0x21, 0x2b, 0x6a, 0x00, + 0x49, 0x57, 0xd1, 0x67, 0x18, 0xfa, 0x79, 0x87, 0xd1, 0x45, + 0x5a, 0xbb, 0x43, 0x3b, 0x2f, 0xd9, 0xbe, 0x8b, 0x61, 0x1f, + 0xc9, 0xa9, 0xe9, 0x10, 0xcb, 0x5b, 0x24, 0x82, 0x30, 0x5a, + 0x77, 0xe4, 0x2f, 0x40, 0x67, 0x55, 0xd1, 0x84, 0x29, 0x91, + 0x6f, 0x4b, 0x21, 0x94, 0xaa, 0x1f, 0x50, 0x1c, 0xc0, 0xb9, + 0x19, 0x0a, 0xd2, 0xe3, 0x7f, 0x91, 0x4d, 0x26, 0x93, 0x3b, + 0x01, 0xfd, 0x69, 0xba, 0x5d, 0xd0, 0x2b, 0x53, 0x6e, 0xd6, + 0x0f, 0x95, 0xde, 0x25, 0xbb, 0x3a, 0x6b, 0x36, 0x50, 0xa3, + 0xf9, 0x3d, 0x4d, 0xb2, 0x59, 0x49, 0xd1, 0xf3, 0x5c, 0x4e, + 0xd4, 0xb9, 0x6d, 0x1a, 0x72, 0x5e, 0x42, 0x92, 0x5b, 0xc8, + 0xdc, 0x89, 0x28, 0xe2, 0xae, 0xee, 0x61, 0xe5, 0x79, 0x3e, + 0x10, 0x7c, 0x62, 0x2b, 0x9b, 0xf6, 0x0c, 0x6e, 0x61, 0xc1, + 0xf1, 0x34, 0x77, 0x52, 0x0f, 0xa2, 0xce, 0x21, 0x27, 0x62, + 0xc6, 0xb3, 0xc1, 0x74, 0x43, 0xeb, 0xcb, 0x74, 0x82, 0x91, + 0xf9, 0x38, 0x81, 0x76, 0x91, 0x50, 0x8e, 0x96, 0x73, 0x14, + 0x61, 0x62, 0x95, 0x6d, 0x01, 0x16, 0x24, 0xb2, 0x66, 0x30, + 0x0e, 0x33, 0x47, 0x37, 0xa4, 0xc8, 0x0f, 0xc7, 0x1d, 0xed, + 0xc4, 0x01, 0x54, 0xa2, 0xbb, 0xfe, 0x15, 0x0c, 0x0d, 0x64, + 0xd5, 0x09, 0x59, 0xf4, 0x3d, 0x46, 0xfb, 0x0c, 0xc6, 0x6d, + 0x46, 0x2e, 0x84, 0x28, 0x4a, 0xed, 0x33, 0xad, 0xfd, 0x9b, + 0xfd, 0x99, 0xd8, 0x17, 0x89, 0xe0, 0x42, 0x71, 0x39, 0xba, + 0xa1, 0xfe, 0x23, 0xf3, 0x88, 0x95, 0xc3, 0x3a, 0xb8, 0x5b, + 0x0b, 0x5c, 0x0c, 0x23, 0x64, 0x4b, 0xe9, 0x0d, 0x0f, 0x33, + 0xd2, 0x20, 0x0d, 0x1f, 0x7a, 0x39, 0x2d, 0x8f, 0xc5, 0xd1, + 0x48, 0x85, 0xba, 0x06, 0x4c, 0xbe, 0xd4, 0xfb, 0x8d, 0x6a, + 0xd3, 0xe5, 0x3b, 0xeb, 0xa0, 0xfa, 0x1b, 0x30, 0xd3, 0x08, + 0x26, 0x2e, 0x0b, 0x11, 0x43, 0x46, 0xba, 0x8d, 0x4d, 0xf2, + 0x6e, 0xc0, 0x99, 0x63, 0xc8, 0x54, 0x0f, 0xbe, 0xcd, 0xd0, + 0x65, 0xc0, 0xad, 0x19, 0xcd, 0xdb, 0x9b, 0x29, 0x3a, 0xef, + 0xc6, 0x0a, 0x0d, 0xd1, 0xe7, 0x0a, 0xbe, 0x6d, 0xb9, 0x46, + 0x76, 0xdc, 0x51, 0x63, 0xbf, 0x08, 0x41, 0x47, 0xbc, 0x30, + 0x50, 0x00, 0xf8, 0xc6, 0x92, 0x30, 0xec, 0xf0, 0x31, 0xa2, + 0x4e, 0xac, 0xc8, 0x63, 0x14, 0x05, 0x62, 0x22, 0x5e, 0x29, + 0x6b, 0x5e, 0x73, 0xdb, 0x7e, 0x5a, 0xf8, 0x9f, 0xd6, 0xfc, + 0x05, 0x50, 0x14, 0xa9, 0xf3, 0x66, 0xe5, 0x92, 0xad, 0x1f, + 0xe4, 0x65, 0x8b, 0x3b, 0xf5, 0x46, 0x13, 0x71, 0x19, 0x2a, + 0xc2, 0xb4, 0x51, 0xb8, 0xd7, 0x99, 0x23, 0xe5, 0x2b, 0xb2, + 0xfc, 0xb9, 0x1e, 0xd9, 0x5a, 0x3c, 0x7d, 0x4d, 0x33, 0x61, + 0x2a, 0xdf, 0x1a, 0xb5, 0x1f, 0x6a, 0x82, 0x9b, 0xcc, 0xe0, + 0x90, 0x6a, 0x6d, 0x41, 0x11, 0xe7, 0x5c, 0xf1, 0x09, 0x3d, + 0x04, 0xe0, 0x61, 0x64, 0xba, 0x01, 0x89, 0xa4, 0xee, 0x49, + 0x6f, 0x16, 0x8d, 0x72, 0x51, 0x87, 0x1a, 0x56, 0x88, 0x5a, + 0x3c, 0x8f, 0xc6, 0xe9, 0xc8, 0xb2, 0xf4, 0x3b, 0x56, 0x19, + 0x8c, 0x44, 0x04, 0xe4, 0xa6, 0xb2, 0x05, 0xdd, 0x2b, 0xc0, + 0x26, 0x92, 0x6a, 0xe0, 0xe9, 0x43, 0xb4, 0xd6, 0x31, 0x03, + 0xfc, 0xd8, 0x60, 0xd8, 0xbe, 0x5d, 0x09, 0x5b, 0xea, 0x2e, + 0x3d, 0x19, 0x6a, 0x0b, 0xdb, 0xfc, 0x1a, 0x4c, 0xe7, 0xc4, + 0xe0, 0x3a, 0xed, 0xa3, 0xf3, 0x05, 0x29, 0x59, 0xf7, 0x49, + 0x45, 0x09, 0x82, 0xb9, 0x54, 0x64, 0x61, 0x5e, 0x73, 0x03, + 0xa5, 0xe1, 0x5a, 0x7f, 0x27, 0x3f, 0x9c, 0xf6, 0x11, 0x38, + 0xa3, 0x09, 0xc1, 0x2e, 0x2b, 0xb4, 0xed, 0x5a, 0xc9, 0x4b, + 0x9b, 0x4b, 0x9a, 0xfa, 0x73, 0xe5, 0xa1, 0xc2, 0x9c, 0xfb, + 0x7f, 0x15, 0x54, 0xc0, 0xfe, 0x13, 0xa6, 0x1d, 0x0a, 0xed, + 0xb2, 0x79, 0xcb, 0xcc, 0x04, 0xb8, 0x05, 0x99, 0x62, 0x98, + 0x43, 0xe8, 0x7d, 0xd0, 0xd1, 0xb1, 0xc1, 0x81, 0xb2, 0xe1, + 0x17, 0x2e, 0xd4, 0x54, 0x90, 0x65, 0xf9, 0x5b, 0xc4, 0xc8, + 0xee, 0x9a, 0x14, 0x0a, 0x72, 0x65, 0xa5, 0x3c, 0xc5, 0x2d, + 0xd5, 0xc1, 0x7d, 0x3f, 0x48, 0xd5, 0x41, 0xe6, 0x1e, 0x55, + 0x53, 0xa6, 0x7e, 0x3d, 0xd0, 0xe5, 0xf9, 0xb2, 0x55, 0x2b, + 0x21, 0xad, 0xac, 0x18, 0xdf, 0x7a, 0x3a, 0xc4, 0x5e, 0x62, + 0x94, 0x0b, 0x0d, 0xfd, 0x33, 0x0b, 0x59, 0x53, 0xaa, 0xbd, + 0xc6, 0x26, 0x6f, 0xae, 0xb8, 0x29, 0x43, 0xc4, 0x6a, 0x61, + 0x2d, 0x7f, 0x3e, 0x39, 0x81, 0xd0, 0xad, 0x34, 0xa9, 0x50, + 0x69, 0x46, 0x07, 0x69, 0xf3, 0xd3, 0x74, 0x74, 0x65, 0xb1, + 0x5d, 0x90, 0x8c, 0xb6, 0x39, 0xd5, 0xd1, 0x1b, 0x73, 0xd7, + 0xd4, 0x5d, 0xbb, 0x81, 0x37, 0x86, 0x29, 0x6b, 0x81, 0x1b, + 0x56, 0xb2, 0x90, 0x35, 0xc1, 0xc1, 0x8c, 0x64, 0x59, 0x3a, + 0x6b, 0xa2, 0x35, 0x33, 0x77, 0xf4, 0x14, 0xda, 0xbd, 0x92, + 0x3b, 0xa0, 0x9c, 0x68, 0xce, 0xb9, 0x6e, 0x58, 0x5a, 0x56, + 0x93, 0x26, 0x41, 0x0b, 0x23, 0x18, 0x35, 0x56, 0x6e, 0x1e, + 0x87, 0x16, 0x81, 0xca, 0x03, 0x5e, 0x43, 0x94, 0xec, 0xc5, + 0xdd, 0xb9, 0x81, 0xcd, 0x43, 0x54, 0x91, 0x1a, 0x1f, 0x99, + 0x83, 0x21, 0xb2, 0xf2, 0x13, 0x3e, 0x23, 0x1b, 0x43, 0xd8, + 0x51, 0x51, 0xe2, 0x06, 0x10, 0xc8, 0xb9, 0x46, 0x8e, 0x20, + 0x50, 0xa2, 0x6a, 0x5e, 0x2d, 0xa7, 0xf1, 0xa5, 0x47, 0x6c, + 0x65, 0x2f, 0xd4, 0xc9, 0x76, 0xe1, 0xef, 0xd7, 0x53, 0x21, + 0x52, 0x28, 0xc8, 0x3d, 0x61, 0x77, 0x11, 0x01, 0x71, 0x3b, + 0xdc, 0xac, 0x7f, 0xf8, 0xb0, 0xc0, 0x69, 0xda, 0xb1, 0x61, + 0x94, 0x61, 0x37, 0x96, 0xc7, 0xc7, 0x5b, 0xdd, 0xfb, 0x7f, + 0x00, 0xe0, 0x1f, 0xb4, 0x80, 0x74, 0xf9, 0x30, 0x97, 0xc9, + 0x12, 0xc5, 0x55, 0x82, 0x9b, 0xbf, 0xf0, 0x1d, 0xc7, 0x93, + 0x5a, 0x32, 0xc6, 0xf5, 0x7c, 0xbd, 0xfe, 0x67, 0x8b, 0x68, + 0x3d, 0x70, 0xd8, 0x24, 0x71, 0xc2, 0x01, 0x2a, 0x44, 0x93, + 0x84, 0x9d, 0x91, 0x69, 0xb4, 0x6d, 0xa7, 0x7a, 0xab, 0x12, + 0xcf, 0xab, 0xaf, 0x7c, 0x7b, 0x75, 0x53, 0xc9, 0x14, 0xb0, + 0x04, 0x9f, 0x40, 0x72, 0x96, 0xf8, 0x95, 0xb4, 0xda, 0x3e, + 0x1b, 0xf7, 0x3c, 0x91, 0x8d, 0x18, 0x52, 0x62, 0x2a, 0x4f, + 0xf4, 0x55, 0x7b, 0x4d, 0x15, 0x59, 0x71, 0xed, 0xf4, 0x25, + 0xf8, 0x26, 0x3f, 0xc6, 0x8f, 0x5b, 0x1d, 0x96, 0x3a, 0x13, + 0x24, 0x08, 0x5f, 0x5b, 0x69, 0x27, 0x5a, 0xbb, 0xb0, 0x86, + 0xdc, 0x84, 0x9d, 0x4a, 0x6b, 0x41, 0xd3, 0x87, 0x57, 0x08, + 0x1f, 0x22, 0x32, 0xc1, 0x7f, 0x2f, 0x84, 0xcb, 0xba, 0x86, + 0x27, 0x87, 0xa6, 0xa4, 0x1a, 0x99, 0xb5, 0xa5, 0xa1, 0xc3, + 0xa9, 0xa4, 0x03, 0x45, 0xc8, 0x2a, 0x94, 0xdf, 0x5c, 0x3b, + 0xc0, 0x72, 0x85, 0xf3, 0xe0, 0x1f, 0xad, 0x44, 0x66, 0x85, + 0xdd, 0x7b, 0xf3, 0x3a, 0x59, 0xd7, 0x81, 0x27, 0x65, 0xcf, + 0xba, 0xf0, 0x74, 0xfd, 0xf5, 0xf5, 0x12, 0xce, 0x31, 0xdf, + 0xf1, 0xdf, 0x22, 0x93, 0x6d, 0x23, 0x7f, 0xa3, 0xa7, 0x54, + 0xa0, 0x05, 0x10, 0xe5, 0x2d, 0x49, 0x14, 0x8f, 0x99, 0xe1, + 0xf5, 0x8e, 0x51, 0xe0, 0xe3, 0xcf, 0x56, 0x2f, 0x6e, 0xae, + 0xa5, 0x91, 0x4e, 0xe2, 0x73, 0x4c, 0xea, 0xc2, 0x25, 0x6a, + 0x8c, 0x6a, 0xb6, 0x26, 0x88, 0x28, 0xb5 +}; + diff --git a/neureka/depthwise/src/output.c b/neureka/depthwise/src/output.c new file mode 100644 index 0000000..196105c --- /dev/null +++ b/neureka/depthwise/src/output.c @@ -0,0 +1,62 @@ +#include "output.h" + +#define OUTPUT_SIZE (335) +PI_L1 uint8_t output[OUTPUT_SIZE]; + +#define GOLDEN_OUTPUT_SIZE (335) +PI_L2 uint8_t golden_output[GOLDEN_OUTPUT_SIZE] = { + 0x26, 0xff, 0x00, 0x8c, 0x00, 0x92, 0x00, 0x54, 0x00, 0x5e, + 0x00, 0xcd, 0x04, 0x00, 0x00, 0xf8, 0x00, 0x7d, 0x7b, 0x00, + 0x00, 0x00, 0xb2, 0xc4, 0x00, 0x15, 0x00, 0xdb, 0x00, 0x9d, + 0xfe, 0x00, 0x00, 0x00, 0x00, 0xd9, 0x44, 0x00, 0xaf, 0x00, + 0x00, 0xb6, 0x4b, 0xfb, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0xa9, 0x00, 0x00, 0x00, 0x00, + 0xff, 0x68, 0x69, 0x32, 0x00, 0x00, 0x90, 0x58, 0xff, 0x00, + 0xff, 0x00, 0x8e, 0x00, 0x00, 0x00, 0x06, 0x00, 0xca, 0x00, + 0x00, 0x00, 0xd3, 0x00, 0xad, 0x0b, 0x00, 0x00, 0x0d, 0xb0, + 0x43, 0x00, 0x87, 0x00, 0xd7, 0x00, 0x3c, 0xff, 0x00, 0xff, + 0x00, 0x00, 0xea, 0x2f, 0x00, 0xc9, 0x10, 0x00, 0xd4, 0x08, + 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x3b, 0x00, 0x00, + 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00, 0x99, 0xff, 0x77, + 0x35, 0x00, 0x00, 0xff, 0x4a, 0xff, 0x00, 0xa9, 0x00, 0x7f, + 0x00, 0x00, 0x00, 0x81, 0x00, 0xdc, 0x00, 0x00, 0x00, 0xd1, + 0x00, 0xa0, 0x7a, 0x00, 0x00, 0x18, 0xb0, 0x7d, 0x00, 0x3d, + 0x00, 0xd5, 0x00, 0x4c, 0xcc, 0x00, 0x51, 0x00, 0x00, 0xd9, + 0x42, 0x00, 0xce, 0x00, 0x00, 0xac, 0x86, 0xff, 0x00, 0x00, + 0x08, 0x00, 0x00, 0x00, 0xd5, 0x00, 0x00, 0x18, 0x00, 0xff, + 0x00, 0x00, 0x00, 0x00, 0x72, 0xff, 0x9d, 0x56, 0x00, 0x00, + 0xff, 0x2d, 0xff, 0x00, 0xff, 0x00, 0x89, 0x00, 0xef, 0x00, + 0xb6, 0x00, 0xc9, 0x00, 0x00, 0x00, 0xff, 0x00, 0x8a, 0x2d, + 0x13, 0x00, 0x38, 0xaf, 0xaf, 0x00, 0x46, 0x00, 0xd1, 0x00, + 0x88, 0xcc, 0x00, 0x32, 0x1e, 0x00, 0xe5, 0x37, 0x00, 0xf2, + 0x00, 0x00, 0x8c, 0x92, 0xfb, 0x70, 0x00, 0x08, 0x00, 0x00, + 0x00, 0x62, 0x00, 0x00, 0x68, 0x00, 0xff, 0x00, 0x00, 0x00, + 0x00, 0xe7, 0xfd, 0x78, 0x40, 0x00, 0x00, 0xe0, 0x56, 0xff, + 0x00, 0x7c, 0x00, 0x8e, 0x00, 0x00, 0x00, 0x45, 0x00, 0xcb, + 0x05, 0x00, 0x00, 0xff, 0x00, 0xa3, 0x00, 0x00, 0x00, 0x29, + 0xb4, 0xb2, 0x00, 0x5d, 0x00, 0xcc, 0x00, 0xc2, 0xff, 0x00, + 0x00, 0x00, 0x00, 0xc2, 0x8f, 0x01, 0xab, 0x00, 0x00, 0x5e, + 0x3d, 0xff, 0x00, 0x00, 0x09, 0x0b, 0x00, 0x00, 0x71, 0x00, + 0x00, 0x30, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00, 0xeb, 0xff, + 0x77, 0x70, 0x00, 0x00, 0xff +}; + +int check_output() { + printf("Checking the output vector:\n"); + + int n_err = 0; + for (int i = 0; i < OUTPUT_SIZE; i++) { + if (output[i] != golden_output[i]) { + printf("ERROR: wrong value of output @ %d: %d vs. golden: %d\n", i, output[i], golden_output[i]); + n_err++; + } + } + + if (n_err == 0) + printf("> Success! No errors found.\n"); + else + printf("> Failure! Found %d/%d errors.\n", n_err, OUTPUT_SIZE); + return n_err; + } + + \ No newline at end of file diff --git a/neureka/depthwise/src/scale.c b/neureka/depthwise/src/scale.c new file mode 100644 index 0000000..8ade6da --- /dev/null +++ b/neureka/depthwise/src/scale.c @@ -0,0 +1,13 @@ +#include "scale.h" + +#define SCALE_SIZE (67) +PI_L1 uint8_t scale[SCALE_SIZE] = { + 0x05, 0x1c, 0x06, 0x0c, 0x02, 0x04, 0x0b, 0x1b, 0x0e, 0x1b, + 0x15, 0x02, 0x04, 0x08, 0x12, 0x07, 0x03, 0x0e, 0x19, 0x1b, + 0x04, 0x07, 0x01, 0x1a, 0x03, 0x0f, 0x01, 0x02, 0x14, 0x0f, + 0x16, 0x1d, 0x18, 0x15, 0x1e, 0x05, 0x09, 0x12, 0x0f, 0x19, + 0x06, 0x0a, 0x0b, 0x05, 0x1b, 0x02, 0x06, 0x1d, 0x0d, 0x19, + 0x1b, 0x10, 0x15, 0x19, 0x02, 0x1c, 0x04, 0x12, 0x05, 0x09, + 0x1e, 0x1e, 0x09, 0x17, 0x09, 0x08, 0x1a +}; + diff --git a/neureka/depthwise/src/weight.c b/neureka/depthwise/src/weight.c new file mode 100644 index 0000000..b473481 --- /dev/null +++ b/neureka/depthwise/src/weight.c @@ -0,0 +1,93 @@ +#include "weight.h" + +#define WEIGHT_SIZE (864) +PI_L1 uint8_t weight[WEIGHT_SIZE] = { + 0xfa, 0x5e, 0x7d, 0x0e, 0x0d, 0x0d, 0x03, 0xc1, 0x56, 0x6a, + 0x95, 0x9e, 0x1e, 0xdf, 0x88, 0x4d, 0xbe, 0x88, 0xc4, 0x67, + 0x6e, 0x2e, 0x9e, 0x60, 0xcc, 0xb4, 0x25, 0x04, 0xe5, 0xfc, + 0x82, 0x6b, 0x1e, 0x34, 0x8a, 0x08, 0x47, 0xda, 0xe8, 0xeb, + 0x39, 0x54, 0x10, 0x81, 0x36, 0x76, 0x53, 0xa3, 0x87, 0x45, + 0x86, 0xd4, 0x9b, 0xb1, 0x58, 0xb8, 0xad, 0xa8, 0x47, 0x0a, + 0x0c, 0xde, 0x20, 0xc5, 0xae, 0xf5, 0xaa, 0xaf, 0x29, 0x92, + 0x48, 0x40, 0xd2, 0x79, 0x9d, 0x5c, 0xa5, 0x8e, 0x6d, 0x1a, + 0x0b, 0x12, 0xf4, 0x03, 0xa3, 0x1f, 0x45, 0x3c, 0x16, 0xd5, + 0xb6, 0xe1, 0x25, 0xce, 0x4a, 0x1d, 0xe4, 0xc8, 0xd6, 0xda, + 0x54, 0xfa, 0x6c, 0x63, 0x35, 0x4b, 0x0b, 0x3a, 0x84, 0xe5, + 0x8c, 0x89, 0x18, 0xb9, 0x94, 0x6d, 0x01, 0xf2, 0x5d, 0x39, + 0xc0, 0x2d, 0x4d, 0x97, 0x42, 0xaa, 0x49, 0x6b, 0x2b, 0xa0, + 0xd4, 0x4b, 0x06, 0xeb, 0x48, 0xab, 0xc5, 0x11, 0x2b, 0xf8, + 0xb9, 0xc8, 0xa7, 0xb0, 0xe5, 0xe8, 0x69, 0x5b, 0xe8, 0xaf, + 0xdf, 0xa2, 0x32, 0x3a, 0xc6, 0x20, 0x86, 0xc9, 0x2d, 0x81, + 0xa3, 0xd2, 0x07, 0xd2, 0x43, 0x24, 0xd8, 0x02, 0x0c, 0x37, + 0x48, 0x6f, 0x5f, 0x83, 0x47, 0x76, 0xd5, 0xf6, 0xe6, 0xb1, + 0xef, 0xcb, 0x5a, 0x39, 0xc0, 0x85, 0x0e, 0xa9, 0x30, 0x39, + 0x75, 0x01, 0x06, 0xc7, 0x29, 0x35, 0xa3, 0x98, 0x56, 0xd9, + 0x40, 0x54, 0xe8, 0x0d, 0x4f, 0xb7, 0x68, 0xfb, 0x57, 0x82, + 0x2f, 0x56, 0x91, 0x70, 0xe2, 0xab, 0xe7, 0xcb, 0x5a, 0x19, + 0xc0, 0xa5, 0x0f, 0xa9, 0xb0, 0x39, 0x75, 0x01, 0x06, 0xcf, + 0x2d, 0xb5, 0xa3, 0x98, 0x56, 0xd9, 0x49, 0x54, 0xe8, 0x0b, + 0x4c, 0x37, 0x68, 0xfb, 0x57, 0x83, 0x2f, 0x56, 0x91, 0x70, + 0xe2, 0xbb, 0x18, 0x34, 0xa5, 0xe6, 0x3f, 0x5a, 0xf0, 0x56, + 0xcf, 0xc6, 0x8a, 0xfe, 0xf9, 0x30, 0xd2, 0x4a, 0x5c, 0x67, + 0xa9, 0x26, 0xb6, 0xab, 0x17, 0xf4, 0xb3, 0xc8, 0x97, 0x04, + 0xa8, 0x7c, 0xd0, 0xa9, 0x6e, 0x8f, 0x1d, 0x44, 0xe0, 0x3e, + 0x07, 0xbc, 0x00, 0x64, 0x58, 0x14, 0x26, 0xc1, 0x52, 0x73, + 0x88, 0xf8, 0x22, 0xa9, 0x3c, 0x42, 0x0d, 0x4a, 0xec, 0xf8, + 0xc2, 0xd7, 0x29, 0x6d, 0x02, 0x04, 0xc4, 0x15, 0x40, 0x12, + 0xe1, 0xc4, 0x5c, 0x34, 0x8f, 0x46, 0x86, 0xbc, 0x93, 0xf4, + 0xeb, 0x2d, 0xcb, 0x67, 0xb6, 0x56, 0x32, 0x8c, 0xe0, 0x87, + 0x3e, 0x17, 0x06, 0xe6, 0x57, 0xf9, 0xfc, 0x7f, 0x6d, 0x3d, + 0x08, 0x83, 0x1c, 0x36, 0x47, 0x2b, 0x55, 0xf5, 0x89, 0x66, + 0xcf, 0xf5, 0x5a, 0x34, 0x95, 0x7b, 0x6f, 0xfa, 0x1a, 0x5b, + 0x1b, 0x05, 0x62, 0x8d, 0x0a, 0x21, 0x83, 0x83, 0x22, 0x3c, + 0x39, 0x47, 0x24, 0x17, 0x8f, 0xea, 0xce, 0x2d, 0xdf, 0x47, + 0x86, 0x49, 0x4f, 0xba, 0x0e, 0x2f, 0xa5, 0xa5, 0x1b, 0x3d, + 0xc6, 0x20, 0x4f, 0xf0, 0x86, 0x62, 0x47, 0xed, 0x22, 0x19, + 0x71, 0xad, 0x27, 0xaf, 0xe9, 0x56, 0x93, 0xf5, 0x5c, 0x47, + 0xff, 0xce, 0xbf, 0x2a, 0xa8, 0x95, 0x9a, 0xb5, 0x17, 0xc1, + 0xa6, 0x3b, 0x6e, 0xd9, 0x6a, 0xde, 0xf3, 0x7d, 0xd8, 0x33, + 0xca, 0x0d, 0xa9, 0xd2, 0x48, 0x38, 0x3b, 0x84, 0x48, 0x60, + 0xb7, 0x2c, 0x8a, 0x85, 0xb8, 0xcb, 0x01, 0xe5, 0xe5, 0x94, + 0xbf, 0xb4, 0x5b, 0x60, 0x98, 0xfb, 0xe6, 0xae, 0x45, 0xf1, + 0x6b, 0xbe, 0x65, 0x49, 0x54, 0x33, 0xd7, 0x32, 0x2f, 0xc0, + 0x5c, 0x2a, 0x31, 0xa7, 0x0c, 0xe6, 0xaf, 0x2a, 0x9f, 0x64, + 0x7c, 0x57, 0xab, 0xbb, 0xa7, 0x15, 0xbc, 0x92, 0x84, 0x2f, + 0x81, 0x87, 0xe3, 0x8f, 0x45, 0xf1, 0x6b, 0xbe, 0x65, 0x69, + 0x5c, 0x33, 0xc6, 0x32, 0x2f, 0xc0, 0x5c, 0x28, 0x39, 0xa5, + 0x0c, 0xe4, 0xaf, 0x2e, 0x9b, 0x64, 0x78, 0x47, 0xab, 0xbf, + 0xe7, 0x15, 0xbc, 0x94, 0xc0, 0x2f, 0x90, 0x87, 0xe3, 0x8f, + 0xba, 0x0e, 0x94, 0x41, 0x9a, 0x96, 0xa3, 0xcc, 0x39, 0xcd, + 0xd0, 0x3f, 0xa3, 0xd7, 0xc6, 0x5a, 0xf3, 0x1b, 0x50, 0xd1, + 0x64, 0x9b, 0x87, 0xb8, 0x54, 0x40, 0x18, 0xea, 0x43, 0x6b, + 0x3f, 0xd0, 0x6f, 0x78, 0x1c, 0x70, 0x03, 0x00, 0x00, 0x00, + 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, + 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x04, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, + 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, + 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, + 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, + 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x06, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x03, 0x00, + 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, + 0x04, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x07, 0x00, + 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x06, 0x00, + 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, + 0x07, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x01, 0x00, + 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, + 0x07, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x02, 0x00, + 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00 +}; + diff --git a/neureka/pointwise/Makefile b/neureka/pointwise/Makefile new file mode 100644 index 0000000..ad8dc3b --- /dev/null +++ b/neureka/pointwise/Makefile @@ -0,0 +1,3 @@ +include ../app/Makefile + +STIM_DIR := ../pointwise/ \ No newline at end of file diff --git a/neureka/pointwise/inc/bias.h b/neureka/pointwise/inc/bias.h new file mode 100644 index 0000000..f28d0f5 --- /dev/null +++ b/neureka/pointwise/inc/bias.h @@ -0,0 +1,9 @@ +#ifndef __BIAS_H__ +#define __BIAS_H__ + +#include + +#define BIAS_SIZE (39) +extern int32_t bias[BIAS_SIZE]; + +#endif // __BIAS_H__ diff --git a/neureka/pointwise/inc/input.h b/neureka/pointwise/inc/input.h new file mode 100644 index 0000000..985f9a9 --- /dev/null +++ b/neureka/pointwise/inc/input.h @@ -0,0 +1,9 @@ +#ifndef __INPUT_H__ +#define __INPUT_H__ + +#include + +#define INPUT_SIZE (8995) +extern uint8_t input[INPUT_SIZE]; + +#endif // __INPUT_H__ diff --git a/neureka/pointwise/inc/layer_conf.h b/neureka/pointwise/inc/layer_conf.h new file mode 100644 index 0000000..e5e4812 --- /dev/null +++ b/neureka/pointwise/inc/layer_conf.h @@ -0,0 +1,42 @@ +#ifndef __LAYER_CONF_H__ +#define __LAYER_CONF_H__ + +#define TEST_NAME "test" +#define INPUT_HEIGHT (7) +#define INPUT_WIDTH (5) +#define INPUT_CHANNEL (257) +#define INPUT_SIGNED (0) +#define INPUT_BITS (8) + +#define OUTPUT_HEIGHT (7) +#define OUTPUT_WIDTH (5) +#define OUTPUT_CHANNEL (39) +#define OUTPUT_BITS (8) + +#define WEIGHT_HEIGHT (1) +#define WEIGHT_WIDTH (1) +#define WEIGHT_CHANNEL_IN (257) +#define WEIGHT_CHANNEL_OUT (39) +#define WEIGHT_BITS (8) +#define WEIGHT_OFFSET (-128) + +#define SCALE_BITS (8) + +#define BIAS_BITS (32) + +#define PADDING_TOP (0) +#define PADDING_BOTTOM (0) +#define PADDING_LEFT (0) +#define PADDING_RIGHT (0) +#define PADDING_VALUE (0) + +#define STRIDE_HEIGHT (1) +#define STRIDE_WIDTH (1) + +#define GROUPS (1) +#define OUTSHIFT (12) +#define HAS_NORM_QUANT (1) +#define HAS_BIAS (1) +#define HAS_RELU (1) + +#endif // __LAYER_CONF_H__ diff --git a/neureka/pointwise/inc/output.h b/neureka/pointwise/inc/output.h new file mode 100644 index 0000000..68c6c11 --- /dev/null +++ b/neureka/pointwise/inc/output.h @@ -0,0 +1,14 @@ +#ifndef __OUTPUT_H__ +#define __OUTPUT_H__ + +#include + +#define OUTPUT_SIZE (1365) +extern uint8_t output[OUTPUT_SIZE]; + +#define GOLDEN_OUTPUT_SIZE (1365) +extern uint8_t golden_output[GOLDEN_OUTPUT_SIZE]; + +int check_output(); + +#endif // __OUTPUT_H__ diff --git a/neureka/pointwise/inc/scale.h b/neureka/pointwise/inc/scale.h new file mode 100644 index 0000000..67dea26 --- /dev/null +++ b/neureka/pointwise/inc/scale.h @@ -0,0 +1,9 @@ +#ifndef __SCALE_H__ +#define __SCALE_H__ + +#include + +#define SCALE_SIZE (39) +extern uint8_t scale[SCALE_SIZE]; + +#endif // __SCALE_H__ diff --git a/neureka/pointwise/inc/weight.h b/neureka/pointwise/inc/weight.h new file mode 100644 index 0000000..ba39fae --- /dev/null +++ b/neureka/pointwise/inc/weight.h @@ -0,0 +1,9 @@ +#ifndef __WEIGHT_H__ +#define __WEIGHT_H__ + +#include + +#define WEIGHT_SIZE (11232) +extern uint8_t weight[WEIGHT_SIZE]; + +#endif // __WEIGHT_H__ diff --git a/neureka/pointwise/src/bias.c b/neureka/pointwise/src/bias.c new file mode 100644 index 0000000..55b2013 --- /dev/null +++ b/neureka/pointwise/src/bias.c @@ -0,0 +1,10 @@ +#include "bias.h" + +#define BIAS_SIZE (39) +PI_L1 int32_t bias[BIAS_SIZE] = { + 0x36dfa, -0xec5f, 0x3ee6f, -0x23173, -0xb8b1, -0x236a3, -0x3fe84, 0x1285e, 0x9a43, -0xfb97, + 0x396a7, -0x16b65, 0x5527, 0xb8f, 0xe316, 0x3c2e1, 0x2bf5e, -0x1adf0, -0x486, 0x1ed7d, + 0x3a88e, 0x8e46, -0x3e8ef, 0xcbee, 0x65e5, 0x2426b, 0x298f4, 0x205dc, 0x2598, -0x2151c, + 0x390ef, -0x2318f, 0x1bc1, 0xe222, 0x1a09e, -0x1f3fd, 0x3d956, -0x12e4d, 0x33ee0 +}; + diff --git a/neureka/pointwise/src/input.c b/neureka/pointwise/src/input.c new file mode 100644 index 0000000..b6afde2 --- /dev/null +++ b/neureka/pointwise/src/input.c @@ -0,0 +1,906 @@ +#include "input.h" + +#define INPUT_SIZE (8995) +PI_L1 uint8_t input[INPUT_SIZE] = { + 0xc2, 0xe1, 0x4d, 0x2d, 0x90, 0xf3, 0x32, 0xc8, 0x6d, 0x7a, + 0x72, 0x92, 0xc8, 0x2d, 0x28, 0x1b, 0x48, 0xe5, 0x2c, 0x55, + 0x62, 0x70, 0xd0, 0x6e, 0x3c, 0x2b, 0x77, 0x12, 0xdf, 0x21, + 0x02, 0x62, 0xc1, 0xae, 0x33, 0x74, 0xd1, 0xbd, 0x81, 0x35, + 0xb8, 0xf3, 0x0b, 0xb3, 0x5f, 0x10, 0x9c, 0xe5, 0x2d, 0x8d, + 0xa2, 0x92, 0x94, 0xbb, 0x8e, 0xda, 0x96, 0xf8, 0xe2, 0x45, + 0x7f, 0xb6, 0x04, 0x30, 0x4b, 0x00, 0x06, 0x95, 0x77, 0x44, + 0x1f, 0x66, 0xaf, 0x5d, 0x95, 0xb9, 0x4e, 0xcd, 0xde, 0x94, + 0x7f, 0x2e, 0x93, 0x3b, 0xec, 0x87, 0x51, 0xd8, 0x96, 0x02, + 0x91, 0x96, 0x18, 0x23, 0x4c, 0xd1, 0x04, 0x66, 0xde, 0xf6, + 0xc6, 0x32, 0xec, 0x4c, 0x59, 0x75, 0xd6, 0x30, 0x17, 0xc5, + 0xe6, 0xc4, 0xe7, 0x8e, 0x65, 0x02, 0x1d, 0x3a, 0xd9, 0x3c, + 0x8f, 0xe2, 0xf4, 0xcc, 0x88, 0xc6, 0xea, 0xc3, 0xaf, 0x4b, + 0xb6, 0x48, 0x01, 0xaf, 0x0f, 0xfa, 0xdc, 0x74, 0x1c, 0x29, + 0x31, 0xf8, 0x9c, 0x54, 0xa4, 0xf0, 0xb5, 0xbe, 0xe4, 0x43, + 0xaf, 0x5a, 0x62, 0x55, 0x69, 0x89, 0x53, 0x0c, 0xc7, 0x1a, + 0x70, 0xb0, 0x1f, 0xe7, 0x91, 0x60, 0x08, 0x51, 0xd8, 0xc6, + 0x8e, 0x37, 0x48, 0x64, 0x57, 0x90, 0xef, 0x85, 0xb6, 0x1d, + 0xc9, 0x95, 0x47, 0x9f, 0xd8, 0xe3, 0xd0, 0x77, 0x1a, 0x59, + 0x1c, 0x4f, 0x1e, 0x65, 0x08, 0xba, 0x3a, 0xc4, 0xd0, 0x29, + 0x98, 0x72, 0x2f, 0x54, 0x3f, 0x2d, 0xd0, 0x00, 0xbd, 0x4d, + 0xad, 0x8a, 0x99, 0xe8, 0x75, 0x42, 0x32, 0xc7, 0x01, 0xf3, + 0xf9, 0xbe, 0x66, 0x2a, 0x77, 0x93, 0x90, 0x69, 0x55, 0x34, + 0x6e, 0x48, 0x1a, 0x9b, 0xc6, 0xbb, 0x35, 0x5d, 0x64, 0xd8, + 0xe0, 0x86, 0x1a, 0x2f, 0xa1, 0x5f, 0xd9, 0x07, 0xb8, 0x42, + 0x49, 0xac, 0x6c, 0x0f, 0xdd, 0x27, 0x69, 0x36, 0x43, 0x14, + 0x99, 0x7f, 0x01, 0xdd, 0xad, 0x30, 0xf2, 0x46, 0xa4, 0x5b, + 0x74, 0xed, 0xac, 0x90, 0xbb, 0x75, 0xd1, 0x64, 0xe1, 0x5d, + 0x3d, 0xf1, 0x29, 0x6d, 0x44, 0xb2, 0x4a, 0x39, 0x8c, 0x9b, + 0x25, 0xa2, 0x89, 0x5c, 0x14, 0xba, 0xd9, 0xa0, 0x0b, 0x22, + 0x84, 0xfb, 0xd5, 0xe9, 0xe2, 0x42, 0x0c, 0xe8, 0x5d, 0x0a, + 0x99, 0xf7, 0x61, 0x35, 0xe5, 0x7b, 0x8c, 0x2c, 0x38, 0x1a, + 0xca, 0x94, 0x66, 0xae, 0x45, 0xa9, 0x4c, 0x52, 0x18, 0x1f, + 0x08, 0xf8, 0xfd, 0x9c, 0x03, 0xf2, 0xfb, 0xfe, 0xa9, 0x55, + 0xae, 0x69, 0x2c, 0x93, 0xd7, 0x8d, 0x2f, 0x63, 0xf7, 0x17, + 0x37, 0xe3, 0xeb, 0x0f, 0x2e, 0x2b, 0x33, 0x53, 0xcc, 0xfb, + 0x4d, 0x4f, 0x7f, 0x85, 0xcf, 0x16, 0x34, 0x88, 0x2d, 0x44, + 0x58, 0xda, 0x76, 0xca, 0xc3, 0xa8, 0x45, 0xc7, 0x9a, 0x25, + 0xd8, 0x59, 0x83, 0x5b, 0x21, 0xcd, 0x00, 0x2b, 0xcc, 0xa7, + 0x24, 0x45, 0x98, 0x02, 0x64, 0x7d, 0x18, 0x19, 0xe0, 0x03, + 0x0d, 0xc9, 0x1a, 0x5b, 0x29, 0x61, 0x46, 0xb4, 0x54, 0xe4, + 0x20, 0xb0, 0xcd, 0xa3, 0xf6, 0xb9, 0x43, 0x91, 0xcc, 0xc8, + 0x2b, 0xea, 0x49, 0xce, 0x83, 0x12, 0xb6, 0xc2, 0x38, 0x36, + 0x0b, 0x71, 0x22, 0x72, 0x78, 0x77, 0x01, 0xf0, 0xd3, 0x74, + 0x53, 0x70, 0x19, 0xf8, 0xac, 0x70, 0xf1, 0xd0, 0xdc, 0xea, + 0x71, 0x3b, 0xa8, 0xfc, 0x12, 0x3b, 0x06, 0x5c, 0x7d, 0x21, + 0x6e, 0x1b, 0xbf, 0xea, 0x79, 0x84, 0x19, 0x42, 0xf3, 0xbd, + 0xc1, 0x0e, 0xf8, 0x31, 0x3c, 0xfc, 0x34, 0x7f, 0xf6, 0x34, + 0xad, 0x0d, 0x01, 0x19, 0xa0, 0x61, 0x1e, 0xe8, 0xc6, 0x56, + 0x42, 0xf5, 0xb2, 0xa4, 0x90, 0x6e, 0x59, 0x3f, 0x89, 0x92, + 0x8d, 0x5d, 0x17, 0x69, 0x41, 0x19, 0x17, 0xca, 0xbd, 0x5b, + 0xb1, 0x4f, 0xd7, 0xcb, 0xe9, 0x68, 0xc3, 0x38, 0x5a, 0x5c, + 0x7f, 0x0b, 0xe9, 0xf3, 0x6e, 0x20, 0xcd, 0xca, 0x2d, 0x95, + 0xec, 0x85, 0xf0, 0xcd, 0xd4, 0xbd, 0x1f, 0xe5, 0xda, 0xf2, + 0x1b, 0xca, 0x43, 0x2e, 0x15, 0x06, 0xba, 0x29, 0x8e, 0xc0, + 0x99, 0x5e, 0x0f, 0x4f, 0x47, 0x41, 0xac, 0x69, 0xb4, 0xcd, + 0x00, 0x10, 0x21, 0xfc, 0x6b, 0xe2, 0x3e, 0x9b, 0xc6, 0xaa, + 0x5d, 0x8c, 0x28, 0x54, 0x36, 0xdc, 0x6a, 0xbc, 0xa6, 0x8d, + 0xf2, 0x07, 0x3b, 0x1c, 0x33, 0x05, 0x82, 0xd4, 0xaa, 0x5c, + 0xd4, 0xc6, 0x8d, 0x2d, 0x1e, 0x2c, 0xe4, 0xed, 0x12, 0x75, + 0x14, 0xbb, 0xf6, 0x04, 0x21, 0xc6, 0xdd, 0xc6, 0x52, 0xd5, + 0x71, 0x8b, 0x83, 0x0b, 0x89, 0x41, 0xe3, 0x36, 0x12, 0xef, + 0xdd, 0xce, 0x03, 0xdd, 0x7e, 0xef, 0x93, 0x22, 0x63, 0x25, + 0xb7, 0x1f, 0x4c, 0x17, 0x4e, 0x2e, 0x14, 0x1f, 0xc3, 0x6e, + 0xd7, 0x3c, 0x69, 0x15, 0xb7, 0xe8, 0x62, 0x2c, 0x7a, 0xbf, + 0x24, 0xe4, 0xa5, 0x50, 0xef, 0xa0, 0x53, 0x7c, 0x49, 0x20, + 0x37, 0x46, 0x27, 0x5f, 0x81, 0x1f, 0xb9, 0x08, 0x3b, 0x8f, + 0xcc, 0x13, 0xf6, 0x4c, 0x2f, 0x17, 0x68, 0x04, 0x7b, 0xd6, + 0x93, 0x1a, 0x50, 0x38, 0x2e, 0xda, 0x0a, 0x21, 0x4e, 0xf1, + 0x03, 0xea, 0xeb, 0x59, 0x63, 0xef, 0xf9, 0xf2, 0xcf, 0xa0, + 0x43, 0xc3, 0x6b, 0x9e, 0x07, 0x70, 0x05, 0x7d, 0xa5, 0x88, + 0x81, 0x45, 0xf1, 0x77, 0x5b, 0xd3, 0xc7, 0x3c, 0x0e, 0x3c, + 0xc5, 0x12, 0xc6, 0x37, 0xa9, 0xc7, 0x97, 0x84, 0xcf, 0x77, + 0xd1, 0x25, 0x98, 0x69, 0xf8, 0x1d, 0x8e, 0x97, 0xea, 0x8b, + 0xdb, 0xba, 0x02, 0x66, 0xee, 0x60, 0xea, 0x5b, 0x00, 0x7e, + 0xef, 0xed, 0x99, 0x1d, 0x97, 0xc5, 0x78, 0x53, 0x95, 0x7e, + 0xc6, 0xb2, 0x99, 0x51, 0xfa, 0xac, 0x55, 0xbe, 0x59, 0x1a, + 0xba, 0x87, 0x65, 0x19, 0x20, 0xe1, 0x3a, 0xa8, 0x52, 0xd1, + 0x3d, 0x77, 0xb9, 0x68, 0xdc, 0x63, 0x5a, 0xc0, 0xbc, 0x75, + 0x94, 0xc6, 0xa0, 0xc7, 0x31, 0xc2, 0x00, 0x63, 0x55, 0x74, + 0x5e, 0x79, 0x12, 0xdb, 0xc0, 0xbf, 0xd6, 0xbe, 0x5a, 0xa9, + 0xa9, 0xbd, 0xf2, 0xf8, 0x76, 0x1e, 0xfc, 0xc8, 0x77, 0x3b, + 0xb1, 0xc0, 0x4c, 0xa0, 0xa2, 0x92, 0xb5, 0x37, 0x63, 0x38, + 0x64, 0xf5, 0x06, 0xee, 0x53, 0x08, 0xc2, 0x70, 0xdc, 0x34, + 0x60, 0xa8, 0x23, 0x78, 0xb3, 0xed, 0xe6, 0x1d, 0x6a, 0x7e, + 0xbf, 0x88, 0x4c, 0x01, 0x9f, 0x52, 0x1a, 0xac, 0xa6, 0x57, + 0x6f, 0xb7, 0xae, 0x02, 0x4d, 0x96, 0x8b, 0xfe, 0x92, 0x09, + 0x01, 0xb5, 0xa2, 0x9e, 0x45, 0x09, 0x61, 0xbc, 0xa7, 0x70, + 0x4e, 0x5a, 0x0d, 0x88, 0xc2, 0xe0, 0xdd, 0x81, 0xf7, 0x6b, + 0xa8, 0x2d, 0xc7, 0xd9, 0x32, 0x8b, 0x29, 0x35, 0x65, 0x10, + 0xb2, 0x4a, 0xe9, 0xb0, 0x58, 0xd7, 0x78, 0xae, 0x66, 0x6c, + 0xd0, 0x6f, 0x4c, 0xfe, 0x5c, 0x09, 0xee, 0xb1, 0x99, 0xdd, + 0x67, 0xa2, 0x01, 0x87, 0xe8, 0xe1, 0xd5, 0x8e, 0xf3, 0x4c, + 0x68, 0x67, 0x4b, 0xb8, 0x73, 0x9a, 0xa9, 0x5c, 0x8a, 0x37, + 0x6b, 0xb9, 0xf0, 0x42, 0xb5, 0xbe, 0x69, 0x83, 0x60, 0x8c, + 0xdb, 0x33, 0xf0, 0x74, 0x57, 0x3b, 0x81, 0xee, 0xb2, 0x2b, + 0xf2, 0xf3, 0xad, 0xe0, 0x68, 0x94, 0xb4, 0xaa, 0x33, 0x43, + 0xe0, 0x3e, 0xbe, 0x7d, 0x58, 0xb9, 0xa2, 0x44, 0x80, 0x6f, + 0x63, 0xbe, 0xf9, 0xc3, 0x5a, 0x84, 0xfe, 0xbd, 0xbe, 0xcb, + 0xad, 0x3a, 0x77, 0x6c, 0x36, 0xc9, 0x94, 0x61, 0x17, 0xd8, + 0xa2, 0x5d, 0xe0, 0x60, 0xfa, 0xa5, 0xc3, 0x68, 0x73, 0xb8, + 0x81, 0xbb, 0x00, 0x6a, 0xc4, 0xdd, 0xb9, 0x10, 0x25, 0x75, + 0x93, 0xb6, 0x51, 0xca, 0xbf, 0x75, 0xca, 0x64, 0xdf, 0x67, + 0xe4, 0x62, 0xd8, 0x46, 0xed, 0x2a, 0xc2, 0xd7, 0x91, 0x99, + 0x27, 0x7a, 0xfc, 0x21, 0xaf, 0x3c, 0x7d, 0xc9, 0x2a, 0xfd, + 0x40, 0x6a, 0xca, 0xb4, 0x90, 0x78, 0x3c, 0xe7, 0xae, 0x62, + 0x04, 0x98, 0x7b, 0x01, 0xe8, 0xed, 0x6f, 0xe3, 0x3f, 0xed, + 0xc9, 0xee, 0x98, 0x66, 0x3a, 0xde, 0x89, 0xd6, 0xb8, 0x25, + 0xf0, 0x09, 0xd1, 0xa4, 0x77, 0xec, 0xa3, 0xd6, 0xdb, 0x15, + 0xe5, 0x3b, 0xdd, 0x36, 0x96, 0x69, 0x26, 0x99, 0x86, 0xcf, + 0x32, 0x6e, 0x4b, 0x57, 0x00, 0x52, 0x12, 0xa4, 0xf8, 0x37, + 0xf5, 0x27, 0x70, 0xc7, 0x4e, 0xb8, 0x09, 0xe5, 0x18, 0xaf, + 0x23, 0x59, 0xa6, 0xbe, 0xa5, 0x25, 0x37, 0xb1, 0xf0, 0x60, + 0x95, 0xcf, 0x6a, 0x8c, 0x96, 0xd8, 0x1c, 0x02, 0xd5, 0x5d, + 0x32, 0x44, 0x2b, 0x75, 0x52, 0xcf, 0x08, 0x74, 0x2e, 0x1c, + 0xfa, 0x91, 0x7e, 0xd5, 0x36, 0xe7, 0xfe, 0x85, 0x68, 0x09, + 0x45, 0xdb, 0x7e, 0x98, 0x2a, 0x7b, 0x6f, 0xe8, 0x04, 0x6c, + 0xf1, 0xb0, 0xda, 0x5d, 0x9c, 0xb1, 0x81, 0xe7, 0x1d, 0x16, + 0x33, 0xb6, 0xb8, 0x10, 0xf0, 0xfd, 0x25, 0x1f, 0xb8, 0xf1, + 0xea, 0x60, 0x58, 0xe5, 0x3a, 0xf0, 0x6a, 0xbd, 0x05, 0xc1, + 0xe1, 0x5c, 0x8e, 0x16, 0xdb, 0x61, 0xb8, 0x07, 0x97, 0x1d, + 0x84, 0x76, 0x44, 0x43, 0x55, 0xc5, 0x2f, 0x07, 0x39, 0x76, + 0xfb, 0x7d, 0x65, 0xb2, 0xdc, 0xdc, 0x9e, 0xed, 0x17, 0x38, + 0xdf, 0x1b, 0xb9, 0x27, 0xe1, 0xbb, 0x7d, 0x17, 0x23, 0xd1, + 0x9b, 0x49, 0x20, 0xb2, 0x3b, 0x86, 0x9e, 0xae, 0x86, 0xfd, + 0xc1, 0xbf, 0x4d, 0x31, 0x35, 0xc7, 0xd1, 0x49, 0xe7, 0x8d, + 0x83, 0xd2, 0xcc, 0x75, 0x3a, 0x25, 0x69, 0x82, 0x68, 0x72, + 0x46, 0x3f, 0x6d, 0xa4, 0xfa, 0x73, 0xa5, 0x30, 0x5c, 0x2f, + 0xd8, 0x61, 0xa0, 0x1e, 0x75, 0xcc, 0x8f, 0x56, 0x8c, 0x13, + 0xc6, 0x81, 0x69, 0x3b, 0x18, 0x86, 0x04, 0x08, 0x6b, 0xdd, + 0x89, 0x08, 0x6a, 0x09, 0x7f, 0xd6, 0x96, 0x86, 0x60, 0x1e, + 0x1a, 0x5b, 0x5d, 0xc3, 0x6a, 0x40, 0xc8, 0x4c, 0x49, 0x3b, + 0xed, 0xfa, 0xe0, 0x59, 0x5a, 0x85, 0x62, 0xa2, 0xce, 0x1b, + 0x02, 0xa0, 0x8f, 0x3b, 0xdb, 0x54, 0xe4, 0x83, 0x99, 0xb5, + 0xdd, 0xb0, 0xb0, 0x0b, 0xb0, 0xfa, 0x63, 0x5c, 0xab, 0x9b, + 0xe7, 0x21, 0xa4, 0x31, 0xa9, 0x59, 0x62, 0x07, 0x6f, 0x9c, + 0x01, 0x4a, 0x33, 0xe3, 0xa4, 0xba, 0xae, 0x8a, 0xf7, 0x4c, + 0x3f, 0x06, 0xa1, 0x61, 0x2b, 0xa5, 0xc3, 0xb1, 0xe0, 0xe6, + 0x42, 0x40, 0x21, 0x3b, 0x00, 0x3f, 0xbd, 0x2e, 0xfd, 0xfc, + 0xa8, 0x93, 0x2c, 0x9f, 0x33, 0x1b, 0x1b, 0xe0, 0x59, 0xa5, + 0xf6, 0xf4, 0x6b, 0x79, 0x07, 0x95, 0x55, 0x0e, 0x4c, 0x2c, + 0x9c, 0x65, 0xca, 0xb5, 0x0b, 0x5e, 0x8a, 0xaf, 0xf9, 0x48, + 0xad, 0xee, 0x75, 0x5d, 0xf4, 0x18, 0xf2, 0x24, 0x80, 0xd1, + 0x84, 0xd5, 0x72, 0x1e, 0xe9, 0x1a, 0xbc, 0x08, 0x44, 0xbd, + 0x4c, 0xf3, 0xa9, 0xaa, 0x83, 0xe2, 0xb8, 0x75, 0x89, 0x00, + 0x22, 0x84, 0x76, 0x0b, 0xf9, 0x11, 0xd9, 0x23, 0xd6, 0xc3, + 0x02, 0x5d, 0x80, 0xc9, 0x0d, 0xa0, 0x01, 0xf1, 0xfe, 0x5c, + 0x70, 0xad, 0x47, 0x58, 0xb4, 0x0b, 0x6e, 0xe6, 0xd6, 0xbc, + 0x21, 0xfd, 0xd6, 0x2d, 0x8c, 0x98, 0x56, 0x57, 0x6a, 0xaa, + 0x3f, 0xf2, 0x72, 0x68, 0x97, 0x8a, 0x38, 0x8b, 0xd4, 0xf6, + 0xe7, 0x97, 0x77, 0xf5, 0xfe, 0x3f, 0x74, 0x1b, 0xfa, 0xbc, + 0x43, 0xc9, 0xc5, 0x46, 0x3c, 0xa1, 0x1f, 0x20, 0x9a, 0xe0, + 0xcb, 0xa4, 0x92, 0x3e, 0xd4, 0xf7, 0xdb, 0x72, 0x17, 0x6a, + 0x7c, 0xb5, 0xed, 0x96, 0xf8, 0x08, 0xf9, 0x95, 0x1f, 0xa4, + 0xb1, 0xeb, 0x43, 0x7b, 0x54, 0x8b, 0x81, 0x03, 0xe9, 0xf0, + 0x27, 0x82, 0x12, 0x38, 0x2f, 0xdf, 0x2b, 0x84, 0x7f, 0x4b, + 0x21, 0x05, 0x73, 0x1c, 0x14, 0xfb, 0xd2, 0x8e, 0xfe, 0x26, + 0x56, 0xed, 0x69, 0x91, 0x04, 0x53, 0xea, 0x98, 0xde, 0x6a, + 0xd1, 0x36, 0xb5, 0x8e, 0x63, 0x85, 0xf1, 0x3c, 0xcb, 0xe5, + 0x10, 0x4e, 0xd3, 0x36, 0xb9, 0xab, 0x03, 0x39, 0x09, 0x8e, + 0xf5, 0xd3, 0xf7, 0x35, 0x70, 0x3b, 0x0b, 0x98, 0xb7, 0xb6, + 0x58, 0x31, 0x20, 0xed, 0x10, 0x7a, 0x63, 0x9a, 0x3c, 0x3d, + 0x4e, 0x34, 0x40, 0x1d, 0xdb, 0x43, 0x2f, 0x6f, 0x74, 0x51, + 0xc3, 0x77, 0x76, 0xe8, 0x5d, 0x0d, 0x0f, 0x22, 0xd7, 0x3f, + 0xfb, 0xf5, 0xce, 0x6a, 0x60, 0x81, 0x42, 0x64, 0x81, 0x45, + 0x24, 0xeb, 0x81, 0xf8, 0xe5, 0x13, 0xd7, 0xec, 0x07, 0x1d, + 0x5c, 0x42, 0xe2, 0x9b, 0x98, 0x9e, 0x57, 0x0f, 0xed, 0xd8, + 0x26, 0x91, 0x8c, 0x50, 0x69, 0x5b, 0x3a, 0x0a, 0x8e, 0x23, + 0x20, 0xaa, 0x3e, 0x3d, 0xd5, 0x83, 0x87, 0x8c, 0xe2, 0xe7, + 0xbc, 0x24, 0x90, 0x4e, 0x1a, 0x69, 0x18, 0x0a, 0x7e, 0x68, + 0x1c, 0x6f, 0xd2, 0x26, 0x76, 0x37, 0xe5, 0x1d, 0xe1, 0x96, + 0x42, 0x74, 0x72, 0x16, 0x8b, 0xa3, 0x90, 0xa1, 0x91, 0x48, + 0x4b, 0x56, 0x09, 0x2e, 0xea, 0xa3, 0x08, 0xd9, 0x2f, 0x04, + 0x51, 0x60, 0x65, 0x3b, 0x4b, 0x95, 0xba, 0xe8, 0x87, 0x16, + 0xe5, 0x3f, 0xb8, 0x42, 0x08, 0xdb, 0x82, 0x7b, 0xe7, 0xf6, + 0xb7, 0x6d, 0xc2, 0x82, 0xb6, 0x4f, 0xac, 0xcc, 0x70, 0x2f, + 0x56, 0xbc, 0xd4, 0x79, 0x96, 0xca, 0x02, 0x38, 0x40, 0xd3, + 0x0d, 0x8b, 0xd9, 0x53, 0x4d, 0xd7, 0xe6, 0x96, 0x70, 0x71, + 0x6a, 0xf5, 0xd3, 0xdb, 0xa7, 0x42, 0xe7, 0x6c, 0x04, 0xf1, + 0x8c, 0xe4, 0xf4, 0x57, 0x32, 0xf6, 0x94, 0x80, 0x5e, 0xa3, + 0xe2, 0x2e, 0x59, 0xb3, 0xf9, 0x4e, 0x40, 0x9a, 0x72, 0x7d, + 0xa5, 0xc8, 0x83, 0xc1, 0xae, 0x84, 0x41, 0x3e, 0x9b, 0xa6, + 0x9b, 0x5b, 0xf9, 0xc1, 0xe4, 0xad, 0x0f, 0xc7, 0x3a, 0x62, + 0xd0, 0x0b, 0x43, 0xd0, 0x59, 0x91, 0x25, 0x26, 0x91, 0x0a, + 0xe1, 0x44, 0xdf, 0xdf, 0xbb, 0xca, 0xec, 0x04, 0x8a, 0xb7, + 0x21, 0x18, 0x93, 0x5a, 0xac, 0x03, 0xe4, 0x6a, 0xf5, 0x2b, + 0x2b, 0xb5, 0xc9, 0x07, 0x62, 0x44, 0xf6, 0x2e, 0xc5, 0x03, + 0xb7, 0xb1, 0xd3, 0x18, 0xe9, 0xd3, 0x93, 0xd1, 0x52, 0x8c, + 0x36, 0xd1, 0x89, 0xfd, 0xca, 0x71, 0x42, 0x36, 0xd0, 0x3b, + 0x7b, 0x9b, 0xcb, 0x22, 0xf8, 0x52, 0xcc, 0x56, 0xb8, 0xfe, + 0x0d, 0xc2, 0x49, 0x0a, 0x4d, 0xc6, 0x66, 0x52, 0xa4, 0x31, + 0x3c, 0x79, 0x9c, 0xd4, 0x9b, 0x84, 0x13, 0xec, 0x8f, 0xa1, + 0x70, 0xd2, 0xf7, 0x73, 0x71, 0x47, 0x58, 0xef, 0x29, 0x40, + 0x48, 0x76, 0x11, 0x49, 0x9f, 0xf9, 0x6f, 0x93, 0xcd, 0xa4, + 0x3e, 0xea, 0xf3, 0xfd, 0x14, 0xa0, 0xce, 0x0e, 0x29, 0x53, + 0xfb, 0xbc, 0xfe, 0xcf, 0x1f, 0x62, 0x26, 0x65, 0xd1, 0x57, + 0x6e, 0x6f, 0xac, 0x29, 0x83, 0x44, 0x2e, 0x56, 0x48, 0xba, + 0xca, 0x1f, 0x60, 0x54, 0xd6, 0x50, 0xf9, 0xc8, 0xdf, 0xd0, + 0xa4, 0xe1, 0x49, 0x0e, 0x30, 0x1b, 0x7b, 0xb5, 0x78, 0x17, + 0xa4, 0x94, 0x0a, 0x5f, 0xd3, 0x12, 0x4a, 0x0c, 0xb1, 0x35, + 0xdd, 0x1c, 0x54, 0x83, 0xc3, 0x85, 0x06, 0x4b, 0x18, 0x46, + 0x20, 0xf4, 0x24, 0x77, 0x22, 0x34, 0x58, 0x93, 0xf2, 0xd8, + 0x03, 0xac, 0x64, 0x08, 0x88, 0xb8, 0x9a, 0x21, 0x94, 0xda, + 0xe1, 0x64, 0xc8, 0x2b, 0x30, 0xa8, 0xc4, 0xb9, 0x54, 0x6e, + 0xef, 0x5b, 0x5d, 0x62, 0x6e, 0xda, 0x76, 0xf6, 0x59, 0x54, + 0x1f, 0x62, 0x1c, 0xcf, 0xef, 0x84, 0x8e, 0x04, 0x6a, 0x62, + 0x28, 0x39, 0x24, 0xae, 0xa9, 0x33, 0x48, 0x69, 0x0f, 0x63, + 0x65, 0x01, 0x2a, 0xb6, 0x15, 0xf0, 0x73, 0x09, 0xce, 0x81, + 0xfb, 0x3d, 0x81, 0x2e, 0x46, 0x35, 0x33, 0xf9, 0x59, 0x99, + 0xd5, 0x33, 0x42, 0x08, 0xbd, 0xfe, 0x59, 0xe1, 0x98, 0x7d, + 0xdd, 0x46, 0x44, 0x6e, 0x6d, 0x08, 0xf2, 0xfa, 0xdd, 0xce, + 0xb1, 0x94, 0x09, 0x6c, 0x21, 0xb2, 0x37, 0xf4, 0x46, 0x36, + 0xdc, 0xb5, 0xcc, 0xd5, 0x68, 0x5d, 0x8a, 0x0e, 0xc3, 0xa4, + 0xab, 0xd5, 0xf0, 0x70, 0xe7, 0x80, 0xdc, 0xcb, 0xe2, 0xba, + 0x79, 0xa9, 0xed, 0x91, 0x4b, 0x20, 0x5e, 0xab, 0x6f, 0xb7, + 0xa2, 0x09, 0x18, 0x57, 0xad, 0xee, 0xc9, 0xa1, 0x4e, 0xa0, + 0x78, 0xb5, 0x37, 0x87, 0xad, 0xee, 0xf0, 0x5e, 0x28, 0x40, + 0x4b, 0xab, 0x86, 0xb4, 0x36, 0x83, 0x48, 0xe5, 0xc0, 0x9f, + 0x1d, 0x3f, 0xdc, 0x19, 0xf7, 0xd1, 0x7b, 0x9c, 0xe5, 0xe6, + 0x06, 0xbb, 0x95, 0xae, 0x8d, 0xea, 0x22, 0x3e, 0x49, 0x23, + 0xf0, 0x9c, 0xa4, 0x10, 0x41, 0x12, 0x59, 0x60, 0xad, 0xbb, + 0xa6, 0xf1, 0xec, 0xb2, 0xb5, 0xfe, 0x2e, 0x35, 0x26, 0x7e, + 0x6e, 0x06, 0xc7, 0xa2, 0x61, 0xe3, 0x22, 0x3f, 0x89, 0x8e, + 0x6a, 0xeb, 0xe3, 0x2c, 0xcf, 0xcd, 0xb0, 0xd6, 0x65, 0xd0, + 0x9b, 0xd5, 0x6a, 0x79, 0xd6, 0xf7, 0x3e, 0x87, 0xde, 0x15, + 0xb6, 0x19, 0x79, 0xc3, 0xbf, 0x7b, 0xc0, 0xf6, 0x90, 0x5c, + 0x50, 0x2a, 0x85, 0x03, 0x82, 0x56, 0x31, 0x62, 0x78, 0x84, + 0x14, 0x8e, 0x3e, 0x0c, 0x3f, 0x6d, 0x49, 0x9b, 0x33, 0x82, + 0x19, 0x39, 0x2f, 0x40, 0x8e, 0x20, 0x71, 0x64, 0x6a, 0x07, + 0x55, 0xed, 0xd4, 0xc9, 0x77, 0xa8, 0xf2, 0xb2, 0x40, 0xb3, + 0x91, 0xa1, 0xa5, 0xcf, 0x4d, 0x43, 0x3a, 0x7c, 0xa7, 0xa9, + 0xe0, 0x10, 0x60, 0xf3, 0x10, 0xb9, 0xb8, 0x8b, 0x93, 0x23, + 0x58, 0x18, 0x0f, 0x20, 0x87, 0x1f, 0x3f, 0x5e, 0xc5, 0x66, + 0xdd, 0x06, 0x13, 0x54, 0x8d, 0xfe, 0x83, 0xeb, 0x19, 0x3e, + 0xd3, 0x7b, 0x51, 0x11, 0xcd, 0xc8, 0x4d, 0x93, 0x50, 0x63, + 0x66, 0xa7, 0xcd, 0x61, 0x1a, 0x03, 0xdb, 0xcf, 0x7d, 0x4a, + 0x88, 0xd3, 0xa4, 0x10, 0x1f, 0x28, 0x31, 0xe0, 0x8a, 0xdf, + 0xd2, 0xac, 0x48, 0xd3, 0x8e, 0x79, 0x69, 0xd3, 0xf5, 0xc1, + 0x86, 0x79, 0x71, 0x73, 0x1f, 0x47, 0x7e, 0x8b, 0x3c, 0x12, + 0x24, 0xfe, 0x98, 0xdf, 0xc4, 0x10, 0xae, 0x84, 0xb8, 0xfe, + 0xa4, 0x49, 0x67, 0xf9, 0xbd, 0xa7, 0x03, 0x1b, 0xd5, 0x40, + 0x3a, 0xd5, 0xb7, 0x5c, 0xd4, 0x94, 0x1e, 0x96, 0x46, 0x01, + 0xf8, 0xb0, 0x20, 0xcf, 0x02, 0x59, 0xcf, 0x11, 0x37, 0xd2, + 0xe7, 0x56, 0xc9, 0x89, 0xc7, 0x77, 0x0b, 0x24, 0x04, 0xca, + 0xa6, 0x44, 0x43, 0xda, 0x28, 0x86, 0x9f, 0x5b, 0x06, 0x1b, + 0xc4, 0xcd, 0xa0, 0x9c, 0x89, 0x18, 0x03, 0x47, 0x50, 0x6d, + 0xe8, 0xcd, 0x18, 0x53, 0x10, 0xef, 0xa2, 0xa2, 0xf6, 0xcf, + 0xdf, 0x92, 0x1a, 0x50, 0x3f, 0xdb, 0x8e, 0x58, 0x40, 0x24, + 0xeb, 0xd0, 0xbd, 0x5f, 0x8b, 0x01, 0xb1, 0x65, 0x59, 0x18, + 0xd9, 0x62, 0xda, 0x70, 0x64, 0x10, 0x15, 0xce, 0x0b, 0x26, + 0xc0, 0x98, 0xd2, 0xa9, 0x19, 0x65, 0xdb, 0x22, 0x77, 0x8f, + 0x80, 0x79, 0x51, 0xc4, 0xa4, 0x67, 0xcf, 0x89, 0x8c, 0x9a, + 0xd3, 0x80, 0x2f, 0x18, 0x78, 0x26, 0x16, 0xeb, 0xe0, 0x17, + 0x69, 0xa5, 0x17, 0x9c, 0xa2, 0x8f, 0x08, 0x74, 0xad, 0x67, + 0x8f, 0xaa, 0x91, 0x0a, 0x9e, 0x56, 0x83, 0x14, 0x36, 0x34, + 0xcc, 0xef, 0xfe, 0x17, 0x9f, 0xc3, 0xdd, 0x12, 0x5c, 0x23, + 0xa7, 0x70, 0x58, 0x48, 0x06, 0x9c, 0x36, 0xe5, 0x2a, 0xfa, + 0x65, 0xe3, 0xd4, 0xdb, 0x48, 0xd7, 0xc6, 0xd0, 0xc8, 0x0a, + 0x29, 0x01, 0x76, 0x0a, 0x7f, 0x08, 0xd6, 0xda, 0x50, 0x0f, + 0x37, 0x30, 0xc4, 0xdd, 0x4e, 0x4a, 0x1f, 0x05, 0x0c, 0x30, + 0x6b, 0xa1, 0x55, 0x5a, 0xc8, 0x1d, 0x05, 0x81, 0xc6, 0x66, + 0xc0, 0x05, 0xd6, 0x65, 0xde, 0x29, 0x8e, 0xf3, 0xc7, 0x50, + 0x9a, 0x0e, 0x70, 0xbf, 0x32, 0xec, 0xa9, 0x3e, 0xf2, 0x09, + 0x36, 0xdb, 0xd9, 0x6f, 0xfc, 0x95, 0xb4, 0x8b, 0x4d, 0x4a, + 0x1a, 0xce, 0x31, 0x3f, 0xf3, 0x8b, 0x2f, 0x86, 0xb0, 0x34, + 0xa8, 0x0d, 0x5f, 0x19, 0x16, 0x18, 0x57, 0xf0, 0xa7, 0x4d, + 0x00, 0xc7, 0x81, 0x4a, 0x38, 0x5a, 0x3e, 0x03, 0x53, 0x87, + 0xd1, 0x55, 0xc8, 0x9b, 0xe7, 0xe5, 0x2f, 0xd8, 0x22, 0x3d, + 0xe2, 0xe2, 0xa1, 0x09, 0xf7, 0xc3, 0x77, 0x18, 0x06, 0xd6, + 0x45, 0x65, 0x3c, 0x53, 0xe0, 0x49, 0x80, 0x83, 0x52, 0x95, + 0x91, 0x51, 0x03, 0xb4, 0x06, 0x43, 0x84, 0x75, 0x90, 0xd9, + 0xfe, 0x3e, 0xc4, 0x0f, 0xee, 0x2d, 0x5e, 0xdc, 0x40, 0xaf, + 0x83, 0xb8, 0x77, 0x70, 0x7d, 0x68, 0xef, 0xe8, 0x58, 0x4a, + 0x2d, 0x15, 0xba, 0x41, 0x22, 0xd4, 0xc0, 0xf3, 0x00, 0x3f, + 0xb3, 0x13, 0x06, 0xe5, 0xe8, 0xfe, 0xfc, 0x40, 0xda, 0x39, + 0x38, 0x74, 0x87, 0xf2, 0x55, 0x01, 0x7c, 0x84, 0x0f, 0x16, + 0x52, 0x80, 0x0a, 0x91, 0xe8, 0x0d, 0xde, 0xc6, 0xeb, 0x5d, + 0x06, 0x5e, 0x89, 0x98, 0x60, 0xc9, 0x31, 0x38, 0x20, 0x29, + 0xe1, 0xcc, 0x1c, 0x29, 0xc8, 0xb6, 0xf3, 0x6b, 0x9b, 0x84, + 0xf6, 0x62, 0x4e, 0x5c, 0xa2, 0x2a, 0x7a, 0x71, 0xf6, 0x6f, + 0xb0, 0xa3, 0x8e, 0x37, 0x79, 0xa7, 0x35, 0x85, 0xbf, 0xc4, + 0x59, 0x51, 0xb8, 0x50, 0x1a, 0xd4, 0x30, 0x88, 0x14, 0x0d, + 0x21, 0x7f, 0x5c, 0xe0, 0xf3, 0x5d, 0x02, 0x92, 0xee, 0x68, + 0x8b, 0x07, 0x71, 0x71, 0xd9, 0x93, 0x51, 0x5e, 0xb4, 0xe5, + 0x50, 0x12, 0x1e, 0x14, 0x7b, 0x4d, 0xf8, 0xb0, 0x1a, 0x59, + 0x96, 0x9b, 0x8d, 0x3e, 0x6d, 0x6b, 0x8d, 0xf1, 0x1f, 0x4f, + 0x61, 0x22, 0x15, 0xa4, 0x61, 0x25, 0x8d, 0x4d, 0x86, 0xa8, + 0xfd, 0xf4, 0x7a, 0xdb, 0x50, 0x9c, 0xce, 0xe8, 0x9e, 0x19, + 0xe7, 0x4e, 0x28, 0x7b, 0x06, 0xab, 0x56, 0x22, 0xea, 0xa0, + 0xb2, 0x33, 0xb1, 0x4f, 0x6e, 0x29, 0xa4, 0x40, 0x3d, 0xa3, + 0x0e, 0x5b, 0x0e, 0xdc, 0x4b, 0x63, 0x66, 0xee, 0x0f, 0x1b, + 0xee, 0x74, 0x04, 0xd9, 0x23, 0x76, 0xf7, 0x01, 0x2e, 0x91, + 0x48, 0x2e, 0xc1, 0x02, 0x7b, 0x97, 0xde, 0x27, 0x81, 0x53, + 0x29, 0xd7, 0x6c, 0xe4, 0x9d, 0x42, 0xcf, 0xea, 0x3d, 0xf8, + 0xbb, 0xf2, 0x58, 0x7b, 0x06, 0x09, 0x57, 0xb8, 0xb2, 0x37, + 0x62, 0xc1, 0x92, 0xd9, 0xea, 0x0c, 0x54, 0xe6, 0xcd, 0x05, + 0x78, 0xe3, 0x90, 0x0d, 0x1e, 0xeb, 0x8e, 0x80, 0x9b, 0x14, + 0x0a, 0xae, 0xa7, 0x5c, 0xab, 0x91, 0x55, 0x6f, 0x8c, 0x24, + 0xe8, 0x13, 0x78, 0x39, 0x7f, 0x85, 0x22, 0xcc, 0xde, 0x6a, + 0x3a, 0x6a, 0x7b, 0x9e, 0x07, 0x2d, 0xb9, 0x7c, 0x01, 0x17, + 0x59, 0x2a, 0x7f, 0xd6, 0x0c, 0xe0, 0xdc, 0xc4, 0x55, 0xdd, + 0x1c, 0x30, 0x75, 0xdb, 0x81, 0x96, 0xe9, 0x90, 0xa6, 0x48, + 0x4a, 0x88, 0x76, 0xdb, 0x3a, 0xc7, 0xd0, 0x1b, 0x9f, 0x9d, + 0x39, 0xba, 0x70, 0x8a, 0xbe, 0xdc, 0x8f, 0xd0, 0x42, 0x6c, + 0x67, 0xf8, 0x7f, 0x49, 0x4e, 0x5d, 0x22, 0xee, 0x02, 0xec, + 0x29, 0xb0, 0xb1, 0xf8, 0x06, 0x16, 0x67, 0xd2, 0x3f, 0x8e, + 0x88, 0x25, 0x3b, 0x96, 0x89, 0x49, 0xf4, 0x58, 0xb0, 0xd4, + 0x05, 0xfa, 0x48, 0x8f, 0x40, 0xcd, 0xa5, 0xae, 0x3d, 0xec, + 0x3a, 0x26, 0xa4, 0x71, 0x51, 0x19, 0x1d, 0x5a, 0x2a, 0x08, + 0xc8, 0x12, 0x5a, 0x19, 0x66, 0x84, 0xa6, 0xb6, 0xd3, 0xc0, + 0x34, 0x22, 0xe9, 0xfe, 0x84, 0x03, 0x09, 0x87, 0xbe, 0xa9, + 0xb5, 0x2e, 0xdb, 0xa4, 0xdb, 0x2b, 0x94, 0xc4, 0xd1, 0x72, + 0xf3, 0x87, 0xad, 0x49, 0x10, 0x8d, 0x65, 0x27, 0x82, 0x12, + 0x96, 0x3d, 0x7c, 0x6f, 0xd2, 0xad, 0x9d, 0xfb, 0x0e, 0x51, + 0x3e, 0x5a, 0x4d, 0x0f, 0xb9, 0x3e, 0x67, 0xce, 0x2b, 0x90, + 0xbe, 0x11, 0x9f, 0xd2, 0x42, 0x15, 0x57, 0x31, 0x9a, 0x40, + 0x98, 0x60, 0x24, 0xce, 0x95, 0x9e, 0x06, 0xeb, 0x09, 0xd1, + 0x16, 0x9b, 0x3b, 0xbf, 0x8c, 0x55, 0x90, 0x90, 0x63, 0x4b, + 0x4e, 0x6b, 0xc2, 0x50, 0xe2, 0x5f, 0x48, 0x8d, 0xc2, 0x3f, + 0xc4, 0xf0, 0x19, 0xbe, 0x6c, 0xb2, 0x1b, 0xe7, 0xcd, 0xa5, + 0x1f, 0xa6, 0x10, 0xeb, 0x33, 0x41, 0xf9, 0x30, 0x4c, 0x8d, + 0x23, 0xc3, 0xa0, 0xee, 0x77, 0x90, 0x93, 0x75, 0x8d, 0x6b, + 0x8f, 0xea, 0x33, 0xf3, 0xc1, 0xea, 0x57, 0x72, 0x39, 0x2d, + 0x5c, 0xa6, 0xb8, 0xe6, 0x9e, 0x5d, 0x89, 0x2f, 0xbe, 0xf5, + 0x1f, 0x67, 0x8c, 0xf0, 0x06, 0x74, 0x3a, 0x83, 0x24, 0x63, + 0xf7, 0x41, 0x36, 0xa3, 0x6e, 0x4c, 0x3a, 0xe6, 0x45, 0x92, + 0xe7, 0x54, 0x28, 0xe2, 0x25, 0xaf, 0x3a, 0xd8, 0xe4, 0x29, + 0x32, 0x43, 0x67, 0x12, 0x34, 0x34, 0x3b, 0x34, 0xea, 0xed, + 0x7d, 0xd6, 0x1d, 0x86, 0x22, 0xd8, 0x89, 0xb5, 0xdc, 0x23, + 0x57, 0x75, 0x50, 0xc5, 0x08, 0x24, 0xc7, 0x1a, 0x94, 0xbe, + 0x30, 0x35, 0x7d, 0x53, 0x55, 0x5f, 0xe0, 0x16, 0x43, 0x1c, + 0x82, 0xa6, 0x83, 0xfb, 0x57, 0x5b, 0x38, 0x8f, 0x43, 0xc7, + 0x17, 0x0b, 0x33, 0x3c, 0x96, 0x7e, 0xce, 0x10, 0x8b, 0x60, + 0xab, 0xa2, 0x26, 0x6d, 0x78, 0x26, 0x5b, 0xb8, 0xd7, 0x58, + 0x8c, 0x09, 0x2f, 0x3a, 0x61, 0x1f, 0x65, 0xe1, 0xcb, 0xfd, + 0x9c, 0x5a, 0x31, 0x09, 0x67, 0x93, 0xed, 0x91, 0xa7, 0x4b, + 0xaa, 0xe5, 0xa1, 0xb9, 0x99, 0x15, 0x7f, 0xe0, 0xa6, 0x3b, + 0x6e, 0x79, 0x5d, 0xe2, 0x05, 0xd6, 0x25, 0xe8, 0xbb, 0x26, + 0xc1, 0x0f, 0x88, 0xce, 0xd7, 0xfd, 0xcf, 0x34, 0x89, 0xd1, + 0xb2, 0xdb, 0xf6, 0xba, 0xc0, 0x81, 0x67, 0x8f, 0x9a, 0xdf, + 0x05, 0xe2, 0x56, 0xdd, 0xdd, 0xee, 0xa5, 0x4c, 0x74, 0xc6, + 0x7b, 0x99, 0xec, 0xf5, 0x0b, 0x6c, 0xd1, 0xbc, 0x1c, 0x29, + 0x58, 0x0a, 0x13, 0xe3, 0x13, 0xb9, 0x77, 0x4c, 0xc1, 0x96, + 0xb7, 0xa8, 0x3f, 0x6d, 0x1a, 0x8c, 0x9d, 0xae, 0xa2, 0x08, + 0x09, 0x1c, 0x52, 0xe2, 0xa4, 0xd8, 0x67, 0x6a, 0xdf, 0x73, + 0xfc, 0x2a, 0x26, 0xce, 0x29, 0x5e, 0x06, 0x38, 0x43, 0xcc, + 0xb8, 0x34, 0xe0, 0x57, 0xbb, 0x15, 0x11, 0xf7, 0x64, 0x5c, + 0x36, 0x7a, 0x71, 0x92, 0x9d, 0xb2, 0x83, 0xb1, 0xa1, 0xdb, + 0xbd, 0xe5, 0xcd, 0xe1, 0x0b, 0x73, 0x71, 0x98, 0x34, 0xde, + 0x2d, 0x4d, 0x57, 0x10, 0x83, 0xe2, 0x6f, 0xe0, 0x77, 0xa1, + 0x7c, 0x75, 0x8e, 0x92, 0xea, 0xec, 0x40, 0x8d, 0xc2, 0x86, + 0x6b, 0x09, 0xd5, 0x30, 0x97, 0xb5, 0xc3, 0x1a, 0x79, 0x41, + 0x37, 0x87, 0x2e, 0xcc, 0x08, 0xb0, 0x04, 0xf2, 0x24, 0x04, + 0x23, 0xab, 0x6a, 0x0d, 0xf6, 0x5d, 0x41, 0xfb, 0x9d, 0x2b, + 0x0e, 0xf9, 0xee, 0x49, 0x53, 0x59, 0x8b, 0xc4, 0x9c, 0x42, + 0xcf, 0xec, 0x60, 0xb3, 0xd1, 0xe6, 0x74, 0x5a, 0xd3, 0x2e, + 0x85, 0xbe, 0x86, 0xb1, 0x94, 0x4e, 0x2b, 0xaf, 0x1b, 0xc3, + 0xe6, 0xdd, 0x0f, 0x5e, 0x6d, 0x46, 0x86, 0x8a, 0xe4, 0x32, + 0x93, 0x46, 0x32, 0x12, 0x48, 0x16, 0x2a, 0x81, 0x50, 0x95, + 0x40, 0xaf, 0x2a, 0xe6, 0x3b, 0x2e, 0xab, 0x91, 0xb2, 0x3d, + 0x81, 0x54, 0xd1, 0x8a, 0xc4, 0xb9, 0xed, 0x0a, 0x42, 0xdf, + 0xc5, 0x89, 0x1e, 0x3f, 0x61, 0xc5, 0x1e, 0x7c, 0xb3, 0x3d, + 0x0c, 0x95, 0x55, 0x34, 0xfa, 0x18, 0xce, 0x91, 0x5e, 0xb3, + 0x57, 0xfd, 0xcb, 0x5d, 0xaa, 0x38, 0x81, 0xae, 0xf4, 0xbf, + 0xf4, 0xc2, 0x38, 0x41, 0x68, 0x2c, 0x27, 0xeb, 0xfc, 0xc5, + 0xa2, 0x5c, 0x51, 0x92, 0x65, 0xf1, 0x45, 0xf9, 0xbd, 0x55, + 0x31, 0xb3, 0xa4, 0x56, 0x14, 0x92, 0xa7, 0x18, 0xcd, 0x54, + 0x80, 0x6e, 0x68, 0x39, 0xec, 0x7f, 0x3e, 0x91, 0x52, 0xfd, + 0xca, 0x05, 0x10, 0xb5, 0xe2, 0x23, 0x4e, 0x3f, 0xe7, 0xc6, + 0xef, 0xa0, 0x06, 0xe0, 0x6f, 0x36, 0x2b, 0xd1, 0xf7, 0x7d, + 0x07, 0xcd, 0xa9, 0xaf, 0xca, 0x46, 0xf2, 0x5b, 0x75, 0x25, + 0xa6, 0xba, 0x16, 0xa8, 0x28, 0xb5, 0xb3, 0x4f, 0xcc, 0x0a, + 0xf3, 0xaf, 0x60, 0xbd, 0x8d, 0x50, 0xb3, 0xbd, 0x29, 0xe2, + 0x43, 0xd8, 0xbf, 0x68, 0xec, 0x86, 0x3b, 0xac, 0xcc, 0xaa, + 0x70, 0xb8, 0x5b, 0xc3, 0xa4, 0xfc, 0xfb, 0x5d, 0x5c, 0x38, + 0x09, 0xcf, 0xee, 0x27, 0x87, 0x3c, 0x88, 0x48, 0xa0, 0x67, + 0x24, 0xf5, 0xcb, 0x60, 0xae, 0x8c, 0x7c, 0xe6, 0x23, 0x1d, + 0x23, 0x67, 0xa5, 0xb9, 0x20, 0xc1, 0xed, 0xae, 0xfd, 0xe9, + 0x35, 0x43, 0x99, 0x39, 0x27, 0x55, 0x7c, 0xe4, 0x30, 0x76, + 0xc7, 0x68, 0xc2, 0xb9, 0x95, 0xc6, 0x9a, 0x3f, 0x14, 0x1e, + 0xd5, 0x1a, 0x7e, 0xf9, 0x76, 0x99, 0x4b, 0x42, 0x5b, 0xfa, + 0x78, 0x4a, 0x15, 0xa3, 0xef, 0x2e, 0xae, 0x58, 0x2a, 0x81, + 0xb8, 0xf2, 0xb4, 0x49, 0x13, 0x32, 0x20, 0xd2, 0x8d, 0x66, + 0xc9, 0x21, 0xf9, 0x1a, 0x60, 0x75, 0x47, 0xc7, 0xab, 0x00, + 0xe8, 0xe7, 0xd8, 0xa2, 0x2b, 0x01, 0x48, 0x0d, 0x93, 0xfc, + 0x40, 0xc8, 0x88, 0x73, 0xd3, 0x29, 0x73, 0xda, 0x2d, 0x6d, + 0xc8, 0xd0, 0x66, 0x78, 0x69, 0x37, 0xc2, 0xd3, 0x1d, 0xab, + 0x5d, 0xa2, 0xbc, 0xd5, 0x0d, 0x74, 0xd4, 0xf4, 0x21, 0x86, + 0xc6, 0x00, 0x56, 0x28, 0x35, 0xc1, 0xfd, 0xad, 0x6b, 0x17, + 0xf0, 0xf4, 0x39, 0x82, 0x3b, 0xd6, 0xce, 0xbc, 0xa0, 0x59, + 0xcb, 0xec, 0xe6, 0xf2, 0xb9, 0xcb, 0x0e, 0x56, 0x58, 0x2e, + 0x11, 0xf6, 0x4e, 0x0b, 0xa6, 0xde, 0xb5, 0xde, 0x76, 0x32, + 0xbf, 0xa3, 0x52, 0x62, 0xbf, 0x3e, 0x13, 0x81, 0x4e, 0x2e, + 0xb7, 0x0b, 0xe4, 0xa3, 0x4e, 0xf1, 0x8f, 0x4d, 0x62, 0x2a, + 0x0a, 0x5e, 0xe9, 0xe3, 0xf7, 0x7b, 0x81, 0x52, 0xd5, 0x38, + 0x6d, 0x1f, 0x21, 0x41, 0x82, 0xbf, 0x58, 0x03, 0x94, 0xa0, + 0x89, 0x77, 0xac, 0x02, 0xe5, 0x51, 0x80, 0xd4, 0x37, 0xa7, + 0x90, 0x43, 0x47, 0x8d, 0x54, 0xf1, 0xe3, 0xce, 0x84, 0x28, + 0xb5, 0xb1, 0xef, 0xf2, 0x03, 0x26, 0xb9, 0x61, 0x8c, 0x74, + 0xed, 0x9b, 0xd7, 0x1e, 0xf3, 0x45, 0xe0, 0x8b, 0xa1, 0x8c, + 0xfc, 0xb4, 0x9b, 0x4e, 0x42, 0x92, 0x0c, 0xf2, 0x35, 0xf6, + 0x1b, 0x3f, 0x21, 0xea, 0x88, 0x8c, 0xce, 0x17, 0x1b, 0x99, + 0x13, 0x48, 0xe3, 0x66, 0x6a, 0x2f, 0xf6, 0x9b, 0x18, 0xf3, + 0xa3, 0x1c, 0x8c, 0x11, 0x93, 0xfe, 0x98, 0x85, 0x5c, 0x6e, + 0x84, 0x6e, 0x53, 0xbc, 0x46, 0xd7, 0x99, 0xea, 0xc1, 0xab, + 0x91, 0x61, 0x8f, 0xf5, 0xe6, 0xe7, 0xd1, 0x97, 0x43, 0x44, + 0xe7, 0x3a, 0x3c, 0x24, 0xe6, 0x30, 0x9a, 0x2d, 0x3f, 0x4f, + 0x67, 0x14, 0x73, 0x4c, 0x87, 0x70, 0xb8, 0x98, 0x03, 0xc8, + 0xf1, 0x83, 0x07, 0x93, 0xb4, 0x36, 0xdb, 0xd8, 0xce, 0x39, + 0x0d, 0xc3, 0x29, 0x50, 0x08, 0xe7, 0xb5, 0x51, 0xed, 0xb6, + 0xca, 0x0d, 0x67, 0x45, 0xed, 0x61, 0xdf, 0x39, 0x3a, 0x63, + 0xd6, 0x9a, 0x9c, 0x95, 0x13, 0x58, 0x0b, 0x80, 0x41, 0x4b, + 0x9e, 0x56, 0xd2, 0xb6, 0x81, 0x39, 0x2b, 0x94, 0x48, 0xc3, + 0x81, 0xbe, 0x09, 0x1a, 0xd3, 0x98, 0xb2, 0xfa, 0x47, 0x1b, + 0x26, 0xd8, 0xe2, 0x46, 0xe0, 0x46, 0x6e, 0xb9, 0x6a, 0x54, + 0x37, 0xa5, 0x67, 0x11, 0xfc, 0xca, 0x2b, 0xe3, 0xb6, 0xd1, + 0x4a, 0x99, 0x32, 0x28, 0x0a, 0xdb, 0xfd, 0x6a, 0xb1, 0xab, + 0xd5, 0x93, 0x39, 0x24, 0x0c, 0x7a, 0xb4, 0xb5, 0xe1, 0x1e, + 0x8c, 0x53, 0x65, 0xca, 0x2c, 0x17, 0x63, 0xba, 0x45, 0x00, + 0xdd, 0xbc, 0x60, 0xda, 0x76, 0x20, 0x7b, 0x99, 0xe2, 0xa2, + 0x03, 0x8b, 0xb5, 0x44, 0xa3, 0xae, 0x82, 0x8c, 0xdd, 0xfb, + 0xbd, 0xb3, 0xc6, 0x04, 0xa6, 0x52, 0x6e, 0x37, 0x3f, 0x92, + 0x64, 0x26, 0xc8, 0x0e, 0xd3, 0x8e, 0x71, 0x85, 0x0b, 0x6c, + 0xf2, 0x15, 0x78, 0x0a, 0x44, 0x84, 0xcf, 0xd8, 0x9c, 0x88, + 0x6a, 0x53, 0x1f, 0x74, 0xd5, 0xdd, 0xb1, 0x4a, 0x11, 0x18, + 0xb1, 0x72, 0xc4, 0x7c, 0xe9, 0x83, 0x30, 0x4f, 0xdd, 0xf5, + 0x74, 0xb5, 0x5c, 0xa7, 0x07, 0xfc, 0xe5, 0xd8, 0x1f, 0xf2, + 0x4a, 0x71, 0xe6, 0x8d, 0xf8, 0xbc, 0x91, 0x8e, 0x1d, 0x12, + 0x11, 0xca, 0xf2, 0x17, 0x76, 0x29, 0x03, 0x92, 0x24, 0x17, + 0xba, 0xcc, 0x1f, 0x3e, 0xb3, 0xdb, 0xbf, 0xe4, 0x04, 0xd6, + 0x12, 0xa2, 0xb2, 0x2e, 0x93, 0x89, 0x5e, 0x8f, 0xb6, 0x8c, + 0xf7, 0x80, 0xfc, 0x17, 0xf7, 0x3f, 0x28, 0xaa, 0xc5, 0x8b, + 0xa2, 0x84, 0x9a, 0x9f, 0xde, 0x05, 0x0f, 0xa1, 0x2d, 0x05, + 0x75, 0xed, 0x53, 0x96, 0xbc, 0xba, 0xcd, 0x99, 0xf7, 0xbb, + 0xe0, 0x47, 0x02, 0xb4, 0x4c, 0x10, 0xce, 0xd9, 0x6a, 0x27, + 0xbe, 0x35, 0x4d, 0xf8, 0x5c, 0x2b, 0xfb, 0x82, 0x72, 0x0c, + 0xec, 0x29, 0x95, 0xab, 0xa2, 0x52, 0xe4, 0x54, 0x30, 0x6c, + 0xad, 0xdf, 0x76, 0x29, 0x9c, 0x21, 0x0d, 0x06, 0x61, 0x6d, + 0x99, 0x3b, 0x51, 0xee, 0xb0, 0x47, 0x65, 0x61, 0xf8, 0x4b, + 0xc7, 0xf0, 0x28, 0x7f, 0xc8, 0x24, 0x80, 0x22, 0x6c, 0xc9, + 0x73, 0x39, 0x9b, 0x9f, 0xe5, 0x93, 0x14, 0xc4, 0x7c, 0x91, + 0x35, 0xec, 0x04, 0xa6, 0x5c, 0xaa, 0xe5, 0xfd, 0x35, 0x81, + 0x05, 0x83, 0x54, 0xc4, 0xad, 0x47, 0x0e, 0x60, 0x6c, 0x52, + 0x7d, 0x06, 0x76, 0x9e, 0xe6, 0x91, 0xc3, 0xf4, 0x5b, 0xf1, + 0xad, 0x1a, 0x51, 0xac, 0x49, 0x10, 0xb2, 0x18, 0x25, 0x06, + 0x90, 0x29, 0x46, 0xe3, 0xd5, 0xe1, 0xca, 0x56, 0x1a, 0x6b, + 0x24, 0x52, 0xf8, 0x08, 0xab, 0x52, 0x6c, 0x8d, 0xf7, 0x59, + 0xaa, 0x0a, 0xf5, 0x37, 0x31, 0x64, 0x3b, 0xb7, 0x12, 0x76, + 0xc4, 0xb4, 0x83, 0x9d, 0x76, 0x39, 0x1f, 0x64, 0x85, 0xed, + 0x67, 0x98, 0x97, 0x57, 0x76, 0xe9, 0x0d, 0xc8, 0x4f, 0xc4, + 0xc7, 0xf8, 0xad, 0x1d, 0x6f, 0xf3, 0xae, 0x4a, 0xf0, 0x3d, + 0x71, 0x73, 0xba, 0x74, 0xa7, 0xd0, 0xc7, 0x62, 0x69, 0xb0, + 0x5e, 0x25, 0x87, 0xe8, 0xb7, 0xa5, 0x54, 0x54, 0xe2, 0x7e, + 0x13, 0xd1, 0x6d, 0x70, 0x5b, 0x65, 0x49, 0x7c, 0x40, 0xdd, + 0xba, 0x95, 0x34, 0xc6, 0xa1, 0x01, 0x47, 0x67, 0xa9, 0x42, + 0xde, 0xc7, 0xb1, 0x1e, 0x2e, 0xd6, 0x83, 0x1e, 0x34, 0x30, + 0xd1, 0x76, 0x85, 0x33, 0x41, 0x72, 0xd5, 0x28, 0xc4, 0xdd, + 0x41, 0x78, 0x6a, 0x64, 0xee, 0x45, 0xa1, 0x90, 0x9e, 0xf2, + 0x16, 0xb1, 0x4d, 0xd1, 0xbc, 0x11, 0x2b, 0x0b, 0x19, 0xbf, + 0x7e, 0x63, 0xf1, 0x40, 0xbd, 0x16, 0x96, 0xb3, 0xa7, 0x1e, + 0x0e, 0x8a, 0x92, 0xbb, 0x7d, 0xcd, 0x03, 0x6e, 0x1c, 0x0a, + 0x58, 0x46, 0x88, 0xac, 0x80, 0x63, 0xd5, 0x92, 0xa9, 0xeb, + 0xec, 0x17, 0x9a, 0x0a, 0xe3, 0x75, 0xfe, 0x1f, 0xb8, 0x70, + 0xf5, 0x3c, 0x01, 0x2a, 0x10, 0x9d, 0xd7, 0xef, 0xa7, 0xb2, + 0xb5, 0xab, 0x5a, 0x77, 0x53, 0x61, 0x45, 0x9f, 0x1f, 0xca, + 0x95, 0xe0, 0x83, 0xf7, 0x11, 0xef, 0x52, 0x3d, 0xcc, 0x55, + 0xba, 0x7d, 0x71, 0x49, 0x0c, 0x26, 0x76, 0x89, 0x4c, 0x44, + 0x10, 0xbf, 0x64, 0xad, 0x56, 0x16, 0xb1, 0x83, 0xd0, 0x59, + 0xa5, 0x2a, 0x6a, 0x94, 0x78, 0xd4, 0x0f, 0x78, 0x1b, 0x28, + 0x15, 0xed, 0x05, 0x14, 0x38, 0xbe, 0x67, 0x76, 0x13, 0x83, + 0x6b, 0xca, 0x16, 0xd3, 0x38, 0xf2, 0x57, 0xb7, 0x72, 0x21, + 0xa6, 0x1e, 0x94, 0x3f, 0x61, 0x0b, 0x34, 0x9b, 0x30, 0x39, + 0x4e, 0x3a, 0x89, 0x03, 0x9c, 0x99, 0x2b, 0x9f, 0x28, 0x3f, + 0xde, 0x15, 0xbf, 0xb0, 0xfd, 0x3a, 0xda, 0x58, 0x73, 0x25, + 0x05, 0xab, 0x1d, 0xcf, 0xbf, 0xe5, 0x76, 0x30, 0xb5, 0x75, + 0x22, 0x3e, 0x6b, 0xfb, 0x59, 0x30, 0xe3, 0x3a, 0x62, 0x72, + 0xf8, 0xf5, 0x5a, 0xa7, 0x76, 0xbd, 0xef, 0xa4, 0x7b, 0x7e, + 0xdf, 0x4f, 0x94, 0x52, 0xd7, 0x1d, 0x12, 0xb2, 0x00, 0x56, + 0xa8, 0x55, 0x3c, 0x49, 0x7c, 0x48, 0x10, 0x9b, 0x97, 0x9a, + 0xd7, 0xa3, 0xfa, 0x54, 0xbc, 0xf6, 0x53, 0x56, 0x98, 0x7e, + 0xce, 0xab, 0x5b, 0x85, 0xe2, 0x2f, 0x95, 0x8c, 0x36, 0xbd, + 0x78, 0xe8, 0x13, 0xc5, 0x9b, 0x16, 0x72, 0xea, 0xba, 0x13, + 0x36, 0xfb, 0xda, 0xf2, 0x2c, 0x3f, 0x2d, 0x94, 0x1b, 0xf6, + 0x18, 0x83, 0x8d, 0x06, 0x30, 0xaa, 0x59, 0x52, 0x9b, 0xbc, + 0xbe, 0xe1, 0x79, 0x22, 0xb0, 0xe4, 0xd8, 0x37, 0xad, 0xe9, + 0x86, 0xc6, 0x67, 0x73, 0x1c, 0x2b, 0xda, 0x1f, 0xa5, 0x8e, + 0x48, 0x42, 0x52, 0x55, 0x34, 0x59, 0x12, 0xfa, 0x4f, 0xfb, + 0xb6, 0x6f, 0xb7, 0x9d, 0x7d, 0x2c, 0x0d, 0xc3, 0x2c, 0x25, + 0xd5, 0xb3, 0x90, 0xc6, 0x1a, 0x71, 0x3a, 0x8f, 0xa7, 0x5b, + 0xf4, 0xc7, 0xb0, 0x44, 0x98, 0x4a, 0x05, 0xa2, 0x57, 0x92, + 0x6e, 0xc1, 0xb4, 0xf8, 0xba, 0xd8, 0x47, 0xa4, 0x09, 0xe7, + 0xa1, 0x19, 0x67, 0x45, 0x1a, 0x00, 0x5c, 0x3a, 0x18, 0xf3, + 0x29, 0x45, 0x66, 0x3d, 0xfd, 0xc6, 0xa6, 0x67, 0x2f, 0xa5, + 0xc6, 0xcb, 0x6e, 0xe7, 0x01, 0xab, 0xd3, 0x39, 0xa9, 0x1e, + 0x52, 0x64, 0xd6, 0x30, 0x6c, 0x99, 0x4c, 0x24, 0x5e, 0xed, + 0x75, 0xe7, 0xb3, 0x94, 0x60, 0xf4, 0x75, 0xfe, 0x4f, 0xc1, + 0x6b, 0xe5, 0x2c, 0x11, 0xd3, 0x08, 0xa2, 0x3b, 0x86, 0x48, + 0x7a, 0xb6, 0xbf, 0x91, 0x08, 0x12, 0x71, 0x65, 0xa9, 0xbf, + 0x3e, 0xb8, 0xba, 0x9e, 0x07, 0x70, 0x66, 0xdc, 0xab, 0x92, + 0x88, 0x25, 0x3e, 0x71, 0xdb, 0x90, 0x29, 0x5f, 0xad, 0xa3, + 0x51, 0xc2, 0x82, 0x4c, 0xdb, 0x8f, 0xdf, 0x72, 0x1f, 0xd0, + 0x37, 0x75, 0x01, 0xa3, 0x38, 0xed, 0x36, 0x0a, 0x1b, 0xdf, + 0xa0, 0x1a, 0x60, 0x65, 0x54, 0xc7, 0x65, 0xd2, 0xc5, 0xe2, + 0x78, 0xce, 0xb6, 0x51, 0xe4, 0x84, 0xb0, 0x67, 0x90, 0x85, + 0x80, 0x30, 0xdb, 0x88, 0x17, 0x29, 0x0b, 0x36, 0x5a, 0x40, + 0x85, 0x80, 0xaa, 0x9c, 0xb8, 0x6d, 0x06, 0xc5, 0xd6, 0xcc, + 0xd7, 0x25, 0x83, 0xd1, 0xb2, 0x4d, 0x1e, 0x0d, 0x89, 0x68, + 0x26, 0x07, 0x94, 0x92, 0x97, 0x21, 0xda, 0xa4, 0x7e, 0xc7, + 0x05, 0x10, 0x1a, 0x98, 0x08, 0xae, 0xb4, 0xf3, 0x33, 0x20, + 0xe4, 0xd0, 0x65, 0x94, 0x4c, 0x05, 0xa9, 0xec, 0xec, 0x7f, + 0x76, 0x31, 0xe0, 0x33, 0x33, 0x17, 0x0b, 0x6f, 0xb8, 0x8c, + 0x8e, 0xb3, 0x54, 0x54, 0x39, 0x91, 0xfe, 0x6e, 0x90, 0xf5, + 0x5c, 0x73, 0xbc, 0x2b, 0xb5, 0x1e, 0x7b, 0x2a, 0x7d, 0x83, + 0x80, 0x26, 0x8e, 0x9e, 0x41, 0x5c, 0x30, 0x56, 0x12, 0xf8, + 0xdd, 0xb9, 0xbe, 0xd7, 0x73, 0xa9, 0xba, 0x7f, 0x24, 0xf5, + 0x11, 0xe4, 0xf1, 0x2e, 0xd1, 0x23, 0xc9, 0x4b, 0xa0, 0xfa, + 0x50, 0x49, 0x9c, 0x0a, 0xf5, 0xc0, 0x4d, 0xcf, 0x0a, 0xfd, + 0xa5, 0xcc, 0x2b, 0x4c, 0x62, 0x95, 0x8c, 0xd0, 0x6b, 0x28, + 0x20, 0xf3, 0xdc, 0xec, 0xa4, 0x7b, 0xd6, 0xea, 0xb2, 0x03, + 0xaf, 0x31, 0x68, 0x0f, 0xed, 0xe6, 0x05, 0x67, 0xf2, 0x35, + 0x87, 0xd6, 0xb2, 0xb0, 0x9b, 0x20, 0x1e, 0xf3, 0x1e, 0x0f, + 0x6d, 0x18, 0x91, 0xdd, 0x1f, 0x49, 0xb4, 0x63, 0x8d, 0x92, + 0x01, 0x2d, 0x14, 0x70, 0x81, 0x60, 0x60, 0x85, 0xe5, 0xdf, + 0x84, 0x10, 0x27, 0xfc, 0x83, 0x9e, 0x89, 0x06, 0x79, 0x0c, + 0x38, 0xbe, 0x4d, 0xca, 0xa5, 0xc7, 0x55, 0x82, 0x6c, 0x22, + 0x90, 0x11, 0x6c, 0xc6, 0x74, 0xe7, 0x19, 0x26, 0xb5, 0xc0, + 0x3b, 0x4e, 0x7c, 0x58, 0xf5, 0xd4, 0xce, 0x5e, 0xcd, 0x1b, + 0x8e, 0xb8, 0xe2, 0x17, 0xec, 0xf5, 0xaa, 0x00, 0x58, 0x1d, + 0x6f, 0xa0, 0x2a, 0xf4, 0x59, 0x0a, 0xa2, 0x48, 0xa0, 0x28, + 0xbb, 0x9a, 0x60, 0x84, 0x58, 0x88, 0x0f, 0xdd, 0x2e, 0x59, + 0x6b, 0x0d, 0x10, 0x04, 0x2b, 0x9a, 0x16, 0x5e, 0x2d, 0xed, + 0x87, 0x55, 0x4b, 0xd2, 0x41, 0x4d, 0xfe, 0x1e, 0x7e, 0x44, + 0xa9, 0xbf, 0xdf, 0x61, 0x9f, 0x8c, 0xad, 0x21, 0xfe, 0x03, + 0x84, 0xb5, 0xdc, 0x47, 0x02, 0x33, 0xc5, 0x54, 0xa5, 0xdc, + 0x99, 0x45, 0x3e, 0x20, 0x4d, 0xb3, 0x31, 0x37, 0x64, 0xd7, + 0xab, 0x7b, 0x3e, 0x1b, 0x76, 0xdc, 0x66, 0xa0, 0xa2, 0x9c, + 0x59, 0xbd, 0xe9, 0xcc, 0xe0, 0xae, 0x2a, 0x78, 0xc0, 0x10, + 0x85, 0x5a, 0x3c, 0x35, 0x75, 0x1e, 0xe6, 0x97, 0x68, 0x62, + 0x10, 0xb4, 0x77, 0xdf, 0xc2, 0x81, 0xe7, 0x53, 0x79, 0xdb, + 0x8e, 0xc3, 0x01, 0x19, 0xc3, 0xbc, 0xd9, 0x2c, 0x17, 0xb2, + 0xa9, 0x65, 0x5c, 0x75, 0xee, 0x1a, 0x9a, 0x65, 0x5b, 0x44, + 0xd5, 0xe2, 0xd2, 0xd5, 0x79, 0x27, 0x53, 0x2b, 0x5a, 0xe5, + 0x61, 0x8f, 0x21, 0x52, 0xb7, 0x7a, 0x27, 0x33, 0x94, 0x74, + 0x61, 0x0b, 0x82, 0x72, 0xc6, 0x76, 0xd7, 0x67, 0x1b, 0x18, + 0x88, 0x2a, 0x67, 0xf3, 0xea, 0x45, 0x8a, 0x38, 0x82, 0x61, + 0xbb, 0x02, 0x5b, 0x1f, 0x93, 0xa4, 0xa4, 0x55, 0x3c, 0x83, + 0x67, 0x43, 0xb2, 0x0f, 0xb6, 0x9c, 0x88, 0x9b, 0x4b, 0xa8, + 0x3c, 0xdc, 0xa1, 0x88, 0x08, 0xf7, 0x16, 0x29, 0xef, 0x36, + 0xab, 0x69, 0x09, 0x08, 0xa9, 0x4c, 0xb0, 0x0b, 0x21, 0xc9, + 0xc6, 0x12, 0xf3, 0xfa, 0x2a, 0x92, 0x17, 0xc3, 0xf4, 0xe7, + 0x71, 0x1e, 0xab, 0x4b, 0x78, 0xdd, 0x65, 0xa8, 0xb7, 0x63, + 0xf8, 0xe4, 0x82, 0x5e, 0x21, 0xa9, 0xc8, 0x87, 0x0f, 0x15, + 0xf3, 0xf2, 0x8e, 0x44, 0xf3, 0x73, 0x21, 0xfe, 0x52, 0x43, + 0x2b, 0xe7, 0xae, 0x14, 0x50, 0xaa, 0x3d, 0x07, 0x91, 0x1d, + 0xc1, 0x37, 0xcd, 0xd1, 0x45, 0x36, 0xa1, 0x68, 0xe9, 0x67, + 0x5c, 0x38, 0x9e, 0xcb, 0xf2, 0x09, 0x5c, 0xf8, 0x86, 0xfe, + 0x46, 0x53, 0xcc, 0x96, 0xbb, 0xd6, 0xca, 0xc1, 0x8d, 0x55, + 0xe2, 0xc6, 0x26, 0xba, 0x4f, 0xab, 0x65, 0x0a, 0x65, 0x55, + 0xf1, 0x0d, 0x6c, 0xbe, 0x31, 0x05, 0xab, 0xa1, 0xec, 0x1d, + 0xc9, 0x76, 0xf6, 0x26, 0xc7, 0x15, 0x8a, 0xf9, 0x8c, 0x23, + 0x7a, 0x0b, 0x66, 0xc5, 0xb5, 0x2a, 0xf2, 0x16, 0x84, 0xef, + 0x44, 0x94, 0x4b, 0xcb, 0x18, 0x96, 0x05, 0x44, 0xb8, 0xe3, + 0xa3, 0xe5, 0x5a, 0x98, 0x3b, 0xd3, 0x3f, 0x4a, 0x80, 0xbc, + 0x12, 0x51, 0x92, 0xc6, 0x1d, 0xeb, 0x44, 0x1d, 0x6e, 0x80, + 0xfe, 0x3c, 0x7f, 0x89, 0x6d, 0xaf, 0xc3, 0x71, 0xdb, 0xcf, + 0xc5, 0xa9, 0x81, 0x87, 0xec, 0xc4, 0x61, 0xf4, 0x3e, 0x16, + 0x25, 0x34, 0x0e, 0x15, 0x07, 0xc8, 0xe1, 0x74, 0xc4, 0x7c, + 0x8c, 0xfe, 0xa8, 0x1b, 0xd5, 0xad, 0xbb, 0x46, 0x72, 0x6b, + 0x46, 0x04, 0x90, 0xed, 0x5f, 0x64, 0xfd, 0x23, 0x35, 0xe0, + 0x23, 0xda, 0xa1, 0x76, 0xb0, 0x73, 0xb3, 0x7b, 0xf7, 0xa3, + 0x6a, 0xd2, 0xb8, 0x2f, 0xc2, 0x6b, 0xe3, 0x01, 0xd2, 0x28, + 0xcd, 0xf4, 0xd2, 0xc2, 0x6c, 0x75, 0xec, 0xc1, 0x76, 0x8f, + 0xd4, 0x4c, 0xc0, 0xe0, 0xd6, 0x33, 0x45, 0xbb, 0x21, 0xe7, + 0x1f, 0xf9, 0x9e, 0x66, 0x18, 0x52, 0xfa, 0x35, 0x7b, 0x33, + 0x75, 0x6d, 0x3b, 0x39, 0xf8, 0xce, 0x75, 0x22, 0x57, 0x65, + 0x6a, 0x34, 0x1e, 0xe9, 0x99, 0x66, 0x78, 0xa1, 0xbc, 0xfd, + 0xb7, 0xab, 0x98, 0xa7, 0x4b, 0x62, 0x45, 0x10, 0xc4, 0xf4, + 0xb0, 0xc2, 0xf1, 0x6d, 0xd3, 0x31, 0x19, 0x8b, 0xc4, 0xa3, + 0x36, 0x7e, 0xf4, 0x7f, 0xf4, 0x72, 0xb3, 0xae, 0x75, 0xdb, + 0x5b, 0xf6, 0x5d, 0xe7, 0xf3, 0x23, 0x90, 0xf3, 0x0d, 0x5c, + 0x0d, 0x54, 0x62, 0x51, 0xbc, 0x20, 0xf2, 0x45, 0x10, 0xb6, + 0x3c, 0x93, 0xb6, 0x01, 0x6c, 0x7e, 0x45, 0xc1, 0xad, 0xe2, + 0xe1, 0x1c, 0x15, 0x37, 0x30, 0x1f, 0x90, 0x62, 0x6e, 0x6d, + 0x6a, 0x83, 0xfd, 0xca, 0xd7, 0x76, 0x2b, 0xb6, 0xc5, 0xf9, + 0x1d, 0x54, 0x28, 0xd8, 0xcf, 0xa8, 0xac, 0xf8, 0xc1, 0x54, + 0xf8, 0x5c, 0x23, 0x48, 0x6e, 0xb8, 0x7a, 0x02, 0x72, 0x30, + 0x0e, 0x11, 0x83, 0xb5, 0x2d, 0x83, 0xad, 0xc3, 0x3e, 0xf6, + 0x8f, 0xf3, 0xb6, 0xa0, 0xd7, 0xbb, 0x43, 0xc1, 0x75, 0xfe, + 0x9e, 0x1d, 0x69, 0x2e, 0x83, 0x03, 0x43, 0x43, 0xf6, 0xfa, + 0x43, 0x54, 0xd3, 0xab, 0xfc, 0x53, 0xde, 0x87, 0x92, 0x7b, + 0xc4, 0x3a, 0x5a, 0xe4, 0xee, 0xef, 0x18, 0x96, 0x9c, 0xe0, + 0xea, 0xd1, 0xce, 0x3a, 0x67, 0x56, 0x0c, 0xe8, 0x23, 0x0d, + 0x34, 0x1e, 0x0d, 0x80, 0x03, 0x8f, 0x90, 0xc5, 0xba, 0x01, + 0x43, 0xfb, 0x94, 0x99, 0x3b, 0x19, 0x13, 0x30, 0x5f, 0xd8, + 0x0b, 0xb1, 0x10, 0x8d, 0x61, 0x20, 0x99, 0x3b, 0x2d, 0xbe, + 0x64, 0xf7, 0x7a, 0x97, 0x84, 0x12, 0xc0, 0x44, 0x85, 0x0b, + 0x4b, 0x2c, 0x1c, 0x83, 0x7f, 0x6a, 0xd7, 0x71, 0x6b, 0x5b, + 0x71, 0xf0, 0xc2, 0xbb, 0x9a, 0xfb, 0xad, 0x5c, 0x27, 0x07, + 0x02, 0x5f, 0x54, 0xd7, 0xb5, 0x5f, 0x95, 0xd1, 0x15, 0xb0, + 0x27, 0x1d, 0xda, 0x3f, 0x87, 0x5d, 0x8b, 0x20, 0x2c, 0x12, + 0x6b, 0x11, 0x67, 0xcb, 0xd7, 0xa7, 0xc5, 0xa1, 0x55, 0x91, + 0xed, 0x2a, 0x11, 0xc4, 0x84, 0x1c, 0xab, 0xeb, 0x68, 0x84, + 0x18, 0x94, 0x5b, 0xb1, 0x39, 0x65, 0xca, 0x6c, 0x14, 0xe1, + 0x65, 0xec, 0x18, 0xea, 0x7c, 0x5c, 0x7f, 0x4f, 0xda, 0xe9, + 0x4d, 0x30, 0xaf, 0x96, 0x47, 0x01, 0x7a, 0xfa, 0xd2, 0x97, + 0x37, 0x73, 0xa6, 0xd5, 0x4b, 0x36, 0xb4, 0xda, 0xa7, 0x69, + 0x43, 0x38, 0xa6, 0x59, 0x20, 0x4b, 0xd4, 0x1c, 0x2e, 0xbb, + 0x18, 0xed, 0xd3, 0x3e, 0xef, 0xd2, 0xac, 0xb1, 0xac, 0x51, + 0x23, 0x8b, 0xbc, 0xc3, 0x01, 0x99, 0xd4, 0x2c, 0x6c, 0x33, + 0xf5, 0xe4, 0x3d, 0x3e, 0x6d, 0xae, 0x05, 0x62, 0xeb, 0xb3, + 0xb6, 0x66, 0x64, 0x42, 0x32, 0xba, 0x81, 0xd0, 0xa1, 0x03, + 0xef, 0xc9, 0x4b, 0xee, 0x22, 0x0a, 0x64, 0x08, 0x8a, 0x99, + 0xf1, 0xc0, 0x4e, 0x9e, 0x79, 0x4a, 0xa0, 0x9b, 0xb1, 0xba, + 0x84, 0xbd, 0xe9, 0x5b, 0xec, 0x24, 0x4b, 0x34, 0x5d, 0x2a, + 0xcc, 0xd2, 0x5f, 0xc7, 0x58, 0xe6, 0x47, 0xbb, 0xb9, 0xf7, + 0xb4, 0xc0, 0x1d, 0x2b, 0x21, 0xc0, 0x7d, 0x76, 0xd5, 0xc2, + 0x40, 0xa5, 0xe4, 0x9b, 0x13, 0x0d, 0xb9, 0xb7, 0xb3, 0x2f, + 0xcd, 0xc4, 0xef, 0xef, 0x48, 0x28, 0xe7, 0x87, 0x11, 0x46, + 0xed, 0xac, 0xbf, 0xec, 0x69, 0x30, 0xa7, 0x61, 0x92, 0xcf, + 0x5b, 0xa2, 0x69, 0xe0, 0x14, 0xa2, 0xf9, 0x29, 0xf8, 0xc5, + 0x7e, 0xe2, 0xf0, 0xfc, 0xf0, 0x32, 0xf3, 0x0c, 0xab, 0x7d, + 0xbb, 0xbd, 0x89, 0x54, 0x98, 0x47, 0x6a, 0xb2, 0x87, 0x45, + 0xd6, 0x06, 0xd4, 0xbf, 0x77, 0x95, 0xf4, 0x61, 0x38, 0x96, + 0xad, 0x56, 0xfa, 0x71, 0x9b, 0xde, 0x15, 0x0f, 0xc3, 0x3d, + 0xf5, 0x21, 0x63, 0x9b, 0xfe, 0x70, 0x2d, 0xfe, 0xc2, 0xcf, + 0x26, 0xfd, 0xd6, 0xb6, 0x3e, 0xcc, 0x05, 0x36, 0x11, 0xe2, + 0xb7, 0xdd, 0xc4, 0x6f, 0xc7, 0xac, 0xfe, 0x6f, 0x5b, 0xb4, + 0xe6, 0x47, 0x53, 0x30, 0x69, 0x56, 0x5b, 0x5c, 0xee, 0xc4, + 0xd0, 0x5b, 0x1e, 0x1b, 0xb8, 0xbe, 0xcd, 0xde, 0x28, 0xe6, + 0x90, 0x2d, 0xcf, 0xa0, 0xfb, 0x11, 0x3b, 0xda, 0xba, 0x2e, + 0x05, 0xa8, 0x9e, 0x3b, 0x07, 0xce, 0x87, 0xf0, 0xc4, 0xb4, + 0x2c, 0x33, 0x32, 0xda, 0x5a, 0x86, 0xba, 0x97, 0x1a, 0xf4, + 0xbf, 0xbf, 0x7c, 0x0c, 0xa8, 0xf1, 0x17, 0x99, 0x59, 0xa5, + 0x32, 0xc2, 0x48, 0x2d, 0xa6, 0x02, 0x18, 0xc1, 0x97, 0x95, + 0x7b, 0x6f, 0x62, 0xf8, 0xbb, 0x80, 0x83, 0xb9, 0xe3, 0x27, + 0xdd, 0x38, 0xb0, 0x26, 0xea, 0xde, 0xa5, 0x45, 0xf3, 0x05, + 0xde, 0x51, 0x36, 0x97, 0xc2, 0x80, 0x13, 0x9d, 0xd8, 0x58, + 0xd8, 0xc3, 0xac, 0xaf, 0xfd, 0xf5, 0x19, 0x21, 0x26, 0x9d, + 0xe8, 0xeb, 0xc5, 0x94, 0xd2, 0xb2, 0x56, 0x7e, 0xe6, 0xab, + 0x3c, 0x9d, 0x17, 0xaa, 0x8a, 0x15, 0x6d, 0xd0, 0x01, 0x20, + 0x01, 0xe0, 0x76, 0x44, 0x9c, 0xd0, 0x36, 0x56, 0xbf, 0xc2, + 0x3d, 0xee, 0x5a, 0x11, 0x22, 0xbf, 0x05, 0xf5, 0x98, 0xfe, + 0x88, 0x86, 0x9f, 0x5b, 0x55, 0xce, 0x8b, 0x65, 0x49, 0x24, + 0x13, 0x30, 0x44, 0xb4, 0x32, 0x69, 0x23, 0x13, 0xab, 0xb9, + 0x76, 0x7c, 0x7d, 0xb1, 0x14, 0xdf, 0x35, 0x72, 0x82, 0xbd, + 0xda, 0x6a, 0xa2, 0x91, 0x5c, 0x9d, 0x2a, 0xe0, 0x89, 0x4d, + 0x89, 0xa7, 0xf4, 0x16, 0x7e, 0xc0, 0x74, 0x7e, 0x7d, 0xcc, + 0x2f, 0xf5, 0x63, 0x1a, 0xcb, 0x03, 0x18, 0x17, 0x2a, 0x21, + 0x10, 0x47, 0x83, 0x77, 0x71, 0x2a, 0xdb, 0x82, 0x09, 0xb8, + 0x0e, 0x5c, 0x2d, 0x9d, 0x56, 0x12, 0x20, 0x3d, 0x7c, 0xea, + 0xb1, 0x2f, 0x2a, 0x65, 0xc3, 0xb3, 0xc1, 0xc8, 0x03, 0x74, + 0xe4, 0xe9, 0x24, 0x3a, 0x31, 0xcf, 0x5b, 0x66, 0x3d, 0x23, + 0x1c, 0x39, 0x3b, 0x8b, 0x66, 0x46, 0x0b, 0xcc, 0x57, 0xe7, + 0xb5, 0xe7, 0x35, 0x7c, 0xd0, 0xe2, 0x94, 0x22, 0x33, 0x2a, + 0xb4, 0x01, 0x70, 0x1f, 0x03, 0x8c, 0xde, 0x3b, 0x70, 0x13, + 0x11, 0x1b, 0xe4, 0x22, 0xf3, 0x2b, 0x1f, 0x9d, 0x76, 0x08, + 0xec, 0x7c, 0x88, 0x19, 0xc0, 0x73, 0xef, 0x23, 0x94, 0xda, + 0xa5, 0xa2, 0x2d, 0xf4, 0xd9, 0xc5, 0x60, 0x87, 0x23, 0xb7, + 0x35, 0x29, 0x37, 0x04, 0xae, 0x7f, 0x7c, 0x81, 0x78, 0x49, + 0x30, 0xfc, 0x27, 0x98, 0x83, 0xa9, 0xf2, 0xcc, 0xe3, 0x45, + 0xa1, 0xe2, 0xe9, 0xf2, 0x36, 0x3b, 0x43, 0x8d, 0xe9, 0x39, + 0xa6, 0x2f, 0x00, 0xed, 0xf4, 0x88, 0x61, 0xd7, 0xfc, 0xad, + 0x5a, 0x94, 0x8f, 0x84, 0xc3, 0x38, 0xa0, 0x4e, 0xc3, 0x0d, + 0x30, 0xe1, 0x39, 0x36, 0xc8, 0x86, 0x41, 0xb8, 0x72, 0xd8, + 0x48, 0x4a, 0x08, 0x56, 0xa1, 0xbc, 0x52, 0x94, 0xee, 0x36, + 0x7f, 0xc4, 0xf3, 0x73, 0x59, 0x12, 0x0a, 0x03, 0x4c, 0xbe, + 0x10, 0x96, 0xdd, 0x37, 0xdd, 0x48, 0x41, 0xab, 0xcd, 0xf7, + 0x99, 0xc8, 0xac, 0x23, 0x23, 0x56, 0xba, 0x8b, 0x24, 0x0d, + 0x18, 0x15, 0x6d, 0x5b, 0x88, 0x01, 0x24, 0xe9, 0x99, 0x27, + 0x56, 0x3d, 0xdc, 0xe4, 0xf2, 0x41, 0x2b, 0x65, 0x1f, 0xe0, + 0x84, 0x2f, 0x31, 0xbd, 0x27, 0xd8, 0x0e, 0x99, 0xea, 0xc1, + 0xa9, 0x0b, 0x21, 0x2a, 0xe7, 0x57, 0xc0, 0xa3, 0x79, 0x1f, + 0xf7, 0xbb, 0x4e, 0x50, 0xf2, 0x37, 0x53, 0xed, 0x73, 0xb2, + 0xde, 0x08, 0xef, 0xa5, 0x9e, 0xcd, 0x38, 0x51, 0x55, 0xa1, + 0xf6, 0xac, 0x78, 0xf5, 0xd6, 0xd9, 0x7d, 0x92, 0x34, 0x57, + 0x78, 0xd1, 0x47, 0x17, 0xde, 0x10, 0x7e, 0xce, 0xf8, 0x1c, + 0x09, 0xcc, 0xe0, 0xea, 0x6d, 0x55, 0xec, 0xcb, 0x49, 0xaa, + 0x22, 0x5a, 0x18, 0xe7, 0x10, 0xb2, 0xb5, 0xf0, 0x9d, 0xdf, + 0xc5, 0x49, 0xe8, 0x4d, 0x9d, 0xcd, 0x51, 0x53, 0xf5, 0x95, + 0x37, 0x4b, 0xe4, 0x57, 0xca, 0x3f, 0x55, 0x68, 0x75, 0xc1, + 0xcb, 0xd6, 0x5b, 0xb7, 0x4b, 0x62, 0xb5, 0xce, 0x74, 0x98, + 0x84, 0x01, 0x28, 0xc8, 0x1c, 0x21, 0xc2, 0xc5, 0xa8, 0xdf, + 0x69, 0xd8, 0xd5, 0xe2, 0x4d, 0x72, 0xc1, 0xd5, 0x2f, 0x13, + 0x94, 0x6d, 0x1c, 0xc6, 0x46, 0xdf, 0x70, 0x57, 0xdd, 0x9b, + 0xb8, 0x90, 0x37, 0xad, 0xe9, 0xf0, 0x09, 0x1f, 0xfb, 0xb1, + 0x99, 0x6e, 0xa5, 0xe7, 0x9f, 0x94, 0xf1, 0xd4, 0xbd, 0x85, + 0x13, 0xfd, 0xbf, 0x18, 0x86, 0xc2, 0xb7, 0x95, 0xa9, 0x4c, + 0x26, 0x2f, 0x54, 0xcf, 0xc1, 0x64, 0xf6, 0x85, 0x13, 0xc9, + 0xd7, 0xd2, 0xef, 0xd7, 0xf0, 0x38, 0xf9, 0x19, 0x10, 0x88, + 0xd6, 0x13, 0x93, 0xc5, 0xb4, 0xc3, 0x58, 0x2e, 0x38, 0xbf, + 0xa9, 0xf7, 0x7d, 0xbc, 0x6d, 0xb6, 0x08, 0x3e, 0xd4, 0xab, + 0x7b, 0xd1, 0xe0, 0x68, 0x5c, 0xc7, 0xa8, 0x6a, 0xab, 0x9c, + 0x86, 0xe9, 0x0a, 0x7d, 0x71, 0x92, 0xdb, 0xd3, 0xa3, 0x8f, + 0x0e, 0x5c, 0xad, 0x86, 0xac, 0x5f, 0x9d, 0xd6, 0x75, 0x3b, + 0xf3, 0x64, 0x61, 0x27, 0xa5, 0x10, 0x74, 0x3f, 0x30, 0xce, + 0xa3, 0x40, 0x22, 0xb4, 0x29, 0xa3, 0x9b, 0x94, 0x10, 0xe5, + 0xc0, 0x8f, 0x7f, 0xe3, 0x51, 0x13, 0x93, 0x2f, 0xb2, 0xba, + 0x4e, 0xb8, 0x6e, 0xc2, 0x43, 0x25, 0xb6, 0xb1, 0x50, 0xe2, + 0xe6, 0x8a, 0xbe, 0x1c, 0xc6, 0x0a, 0x49, 0xcd, 0x87, 0xa4, + 0x36, 0x8b, 0xcf, 0x8c, 0xa1, 0xf3, 0x69, 0x3a, 0x73, 0x04, + 0x9d, 0xde, 0xf1, 0x8e, 0x7d, 0x62, 0x43, 0xf5, 0x38, 0x4b, + 0x81, 0x1f, 0xb7, 0xac, 0x06, 0x29, 0x08, 0xd3, 0x06, 0xd0, + 0x67, 0x7f, 0xf4, 0x25, 0x53, 0x54, 0x20, 0x2e, 0xdf, 0x6b, + 0x33, 0x03, 0x64, 0x04, 0x36, 0xd0, 0x25, 0x02, 0x2a, 0x6e, + 0xa6, 0xfc, 0xd5, 0x36, 0x6b, 0x55, 0x6c, 0x9f, 0x43, 0x34, + 0x29, 0xc7, 0xe9, 0xe2, 0xe4, 0x9a, 0x28, 0xbb, 0x40, 0x8d, + 0x4d, 0x99, 0x13, 0x84, 0x71, 0x31, 0x6d, 0xaa, 0x99, 0x34, + 0xb0, 0x9a, 0x7d, 0x16, 0xe6, 0xdf, 0x83, 0xaf, 0xbd, 0xf8, + 0x77, 0x88, 0xb1, 0x4b, 0x18, 0xa8, 0x62, 0xe2, 0xb5, 0xdb, + 0x17, 0x31, 0x47, 0xeb, 0xca, 0x9e, 0x9e, 0xe7, 0x19, 0x99, + 0x09, 0x00, 0x9a, 0x40, 0x55, 0x38, 0xc4, 0xea, 0xd7, 0xbf, + 0xae, 0x00, 0x95, 0x8b, 0x78, 0x01, 0x60, 0x01, 0xf9, 0xa3, + 0xac, 0x49, 0xc8, 0xdd, 0xc5, 0x78, 0xc2, 0x69, 0xf2, 0x2c, + 0x2b, 0x7a, 0x2f, 0x01, 0x09, 0x13, 0xe9, 0x85, 0x3e, 0xb9, + 0x63, 0xd9, 0x48, 0xea, 0xd1, 0x9e, 0x21, 0xda, 0x4b, 0x26, + 0xc7, 0xc9, 0xfd, 0xb5, 0x42, 0x37, 0x24, 0x1a, 0x97, 0x51, + 0x8c, 0x20, 0x51, 0xfe, 0x0d, 0x14, 0x0c, 0xc8, 0x50, 0x74, + 0xb5, 0x1d, 0xba, 0x8c, 0xd5, 0x8a, 0x80, 0xf4, 0x1e, 0x37, + 0xf2, 0x6a, 0x3c, 0x31, 0xf3, 0x90, 0xb4, 0x0b, 0xab, 0x7f, + 0x44, 0x2c, 0xe1, 0x09, 0x25, 0x42, 0xf9, 0x81, 0xd4, 0x49, + 0x4c, 0x5b, 0xd4, 0xc1, 0x14, 0x5e, 0x5e, 0x3c, 0xdc, 0xe8, + 0x7d, 0xee, 0x39, 0xe6, 0x10, 0x78, 0x7e, 0xf6, 0xb5, 0xb2, + 0xf1, 0x32, 0xac, 0xa2, 0x48, 0xc4, 0xc6, 0xbe, 0x0d, 0xeb, + 0x8a, 0x53, 0xf9, 0x0a, 0x6f, 0x50, 0x71, 0x36, 0x10, 0x88, + 0xc5, 0x8c, 0xda, 0xb9, 0x99, 0xe3, 0x56, 0xb6, 0xad, 0x59, + 0x1e, 0x42, 0x72, 0x97, 0x53, 0x75, 0x2f, 0x4e, 0x08, 0x43, + 0x53, 0xb1, 0x02, 0xbc, 0xd7, 0xc9, 0x13, 0x7a, 0x05, 0x84, + 0x8c, 0x0a, 0xf3, 0x62, 0x11, 0x5d, 0x0d, 0x56, 0x2a, 0x5a, + 0x7e, 0x05, 0x62, 0x57, 0xe5, 0x05, 0xb7, 0x5a, 0xf7, 0x69, + 0x39, 0xd7, 0xf2, 0x0d, 0x93, 0x82, 0x0c, 0x9a, 0xa4, 0xc8, + 0x77, 0x6c, 0xe3, 0x60, 0x21, 0x6c, 0x1b, 0x5e, 0xe2, 0xf1, + 0xb6, 0xbb, 0x69, 0x21, 0xca, 0xf6, 0xf0, 0x5f, 0xb4, 0xdb, + 0xeb, 0x20, 0x47, 0xa9, 0x82, 0x11, 0x0d, 0x72, 0xde, 0xd1, + 0xa4, 0xda, 0x6c, 0xfa, 0xaa, 0xe9, 0x2b, 0x30, 0xab, 0x6a, + 0x83, 0x48, 0xea, 0xfd, 0xf9, 0xaa, 0x76, 0x93, 0xe6, 0xe2, + 0x25, 0xb0, 0x6d, 0x4f, 0x11, 0xd4, 0xee, 0x9e, 0x6d, 0x72, + 0x20, 0x00, 0x8e, 0x90, 0x62, 0x0a, 0x57, 0x57, 0x08, 0x1f, + 0xfd, 0x24, 0x64, 0x69, 0x6e, 0x8e, 0x76, 0x8c, 0xbb, 0x8d, + 0x42, 0x8d, 0xd9, 0x94, 0xbf, 0xf2, 0x20, 0x6e, 0xcd, 0xca, + 0xdd, 0x0a, 0x4b, 0x5c, 0xb7, 0xa7, 0x36, 0x8f, 0xea, 0x51, + 0x2c, 0x3f, 0x59, 0x66, 0xa1, 0x8a, 0x8b, 0xba, 0x4c, 0x6c, + 0xc3, 0x63, 0x5b, 0x6d, 0x29, 0x2f, 0xc2, 0xd1, 0x99, 0x34, + 0x23, 0xf0, 0x81, 0x5c, 0xf7, 0x6e, 0xea, 0x84, 0x65, 0x9c, + 0x7f, 0x88, 0x1e, 0x8c, 0xf9, 0xaf, 0x57, 0x52, 0x58, 0x4a, + 0xd9, 0x3b, 0x6a, 0xf1, 0x02, 0xa6, 0xe0, 0xfe, 0x9b, 0xdf, + 0x7e, 0xa1, 0x74, 0x96, 0x37, 0x61, 0x95, 0x46, 0x81, 0xb2, + 0x37, 0x50, 0x47, 0x57, 0xf3, 0xc7, 0x07, 0xb1, 0x54, 0xe0, + 0x39, 0x0c, 0x48, 0xd7, 0x59, 0x17, 0x37, 0x0c, 0x08, 0x1b, + 0x84, 0xc7, 0xc1, 0xad, 0xdc, 0x3a, 0xd8, 0x0f, 0x77, 0x71, + 0x25, 0x92, 0x23, 0x1f, 0x51, 0xe6, 0x8d, 0x94, 0x8e, 0xc8, + 0xbe, 0x31, 0xbf, 0xce, 0x30, 0xc9, 0x3e, 0xe0, 0x65, 0x71, + 0xa2, 0x50, 0xb7, 0xab, 0x1a, 0x81, 0x3c, 0x8e, 0x3c, 0xe4, + 0xc3, 0xaa, 0x16, 0xe4, 0x0b, 0x41, 0xdd, 0x7f, 0x76, 0x06, + 0xad, 0x82, 0x19, 0x6e, 0x37, 0x9d, 0xc4, 0x3c, 0x26, 0x3a, + 0xa1, 0x13, 0x93, 0xbc, 0x9b, 0x6a, 0xd1, 0xb1, 0x03, 0x75, + 0xbd, 0x3a, 0x9d, 0x6c, 0x0f, 0xe3, 0x78, 0xf6, 0x12, 0x73, + 0x29, 0xef, 0x10, 0xdf, 0xfb, 0xfb, 0x58, 0xd6, 0xd8, 0x14, + 0xd7, 0xa2, 0xdb, 0x5f, 0x71, 0x49, 0x98, 0x5d, 0x3f, 0xb5, + 0xed, 0xc3, 0x1e, 0x77, 0xec, 0x3f, 0x5e, 0x99, 0x15, 0x41, + 0xc5, 0xb0, 0x82, 0xe5, 0x1c, 0x81, 0x85, 0x9e, 0xf1, 0x5a, + 0x58, 0x80, 0xb2, 0x27, 0x2b, 0x19, 0xb7, 0xf4, 0x29, 0x79, + 0x01, 0x41, 0x3e, 0x9c, 0x7a, 0x76, 0x49, 0x53, 0xaa, 0x8c, + 0xd1, 0x2f, 0xc5, 0x72, 0xdb, 0x2a, 0x4b, 0x2b, 0x9e, 0x76, + 0x20, 0x08, 0xfd, 0x3e, 0xb9, 0x97, 0xda, 0x6c, 0xdb, 0xf1, + 0x48, 0x6a, 0x3e, 0xbd, 0x8a, 0x15, 0x22, 0xbc, 0x13, 0x67, + 0xe1, 0xd4, 0x1a, 0xa3, 0xc1, 0xdb, 0xa4, 0x54, 0x16, 0x05, + 0x79, 0x13, 0x2d, 0x8e, 0x7c, 0x85, 0xc9, 0x4e, 0x4b, 0x00, + 0xc7, 0xc5, 0x7f, 0x47, 0xf0, 0xee, 0x3a, 0x36, 0x8f, 0x96, + 0xfe, 0x2a, 0x77, 0x48, 0x45, 0x3b, 0x52, 0x8d, 0x6d, 0x21, + 0x3f, 0x40, 0x52, 0x22, 0x83, 0x26, 0x06, 0xd3, 0x81, 0x53, + 0x18, 0x4f, 0xeb, 0xc8, 0x20, 0x1f, 0xc8, 0xab, 0x7b, 0x40, + 0x88, 0x9b, 0x6e, 0x5b, 0x96, 0x26, 0x64, 0xbf, 0x35, 0x33, + 0x06, 0x16, 0x7a, 0xf5, 0x43, 0xd1, 0xa7, 0xb9, 0x4c, 0x11, + 0x91, 0x6a, 0x52, 0x21, 0xa0, 0x1a, 0x23, 0x08, 0x64, 0x51, + 0x43, 0x3a, 0xb9, 0xf2, 0xa6, 0xa2, 0xc8, 0x46, 0xf1, 0xd0, + 0x8f, 0x0d, 0xe0, 0xd0, 0x1a, 0xf8, 0xcd, 0xcf, 0xaa, 0xaa, + 0x81, 0xa5, 0x69, 0xab, 0x53, 0xd6, 0xfb, 0x63, 0xe0, 0x9e, + 0xc6, 0x27, 0xc6, 0xb1, 0xf6, 0x49, 0x96, 0xea, 0x80, 0x19, + 0xf9, 0xe4, 0xb6, 0xec, 0x6b, 0x77, 0x14, 0xee, 0x93, 0xa3, + 0xa1, 0xd9, 0xac, 0x83, 0x63, 0xa1, 0x31, 0x1d, 0x5e, 0x8b, + 0x86, 0x1f, 0xa2, 0xc0, 0x97, 0x3a, 0x4a, 0xeb, 0xc3, 0xbb, + 0x1a, 0x30, 0xd3, 0xcd, 0x75, 0x8c, 0x93, 0x66, 0x3b, 0xdb, + 0x93, 0xfa, 0xf1, 0x62, 0xeb, 0xd7, 0x81, 0xb5, 0xe4, 0xba, + 0xdc, 0x7a, 0x11, 0x4c, 0x79, 0x6c, 0xe5, 0xdd, 0x69, 0x71, + 0x77, 0xf0, 0x4f, 0x90, 0x4b, 0x00, 0xa5, 0xd3, 0xe7, 0xba, + 0xad, 0x32, 0x5b, 0x34, 0x07, 0x0a, 0x70, 0x1f, 0xe1, 0xd8, + 0xb0, 0x9b, 0xc2, 0x35, 0x9c, 0x8c, 0x2b, 0xe2, 0xdd, 0x31, + 0x48, 0xcd, 0xf1, 0x8b, 0x18, 0xfa, 0x21, 0x9a, 0x2a, 0x3e, + 0xcd, 0xeb, 0x5e, 0x06, 0xfc, 0xf6, 0x9e, 0x41, 0x5f, 0xc8, + 0x7b, 0x13, 0xaf, 0x91, 0xac, 0xe6, 0xe9, 0xcd, 0xc1, 0x7c, + 0x84, 0x81, 0xaf, 0x75, 0x0a, 0xe9, 0x30, 0x6d, 0xfa, 0x02, + 0x2a, 0x1f, 0x13, 0x2e, 0x2d, 0x34, 0x7b, 0x87, 0x6c, 0x5a, + 0x43, 0xaa, 0x7d, 0x25, 0xd0, 0xc3, 0xcf, 0x32, 0x8b, 0x3f, + 0x28, 0xb5, 0x0b, 0xa8, 0x7d, 0x06, 0x8e, 0x04, 0x39, 0xd0, + 0x96, 0x6a, 0xa2, 0x26, 0x64, 0xe1, 0xdc, 0xcb, 0xcc, 0xd5, + 0xfe, 0x33, 0xef, 0x9c, 0xba, 0xdb, 0xb8, 0xe1, 0xf2, 0x2a, + 0xb8, 0x5c, 0x50, 0xb8, 0x2a, 0xc8, 0x82, 0xc0, 0x1c, 0xc9, + 0x9b, 0xca, 0x53, 0x0a, 0x52, 0x3d, 0xbe, 0x23, 0x71, 0xdc, + 0x5c, 0xf8, 0x41, 0x6e, 0xb1, 0x00, 0x17, 0x96, 0xec, 0xdc, + 0xfb, 0xac, 0x61, 0xb4, 0x62, 0xcd, 0x97, 0x5e, 0xc9, 0x82, + 0xf8, 0x00, 0xc7, 0x50, 0x2c, 0xf5, 0xe5, 0x6b, 0xd8, 0xe1, + 0x2c, 0x65, 0x50, 0x46, 0xbd, 0x1e, 0x4f, 0xe3, 0x5c, 0x3b, + 0x90, 0x22, 0xf4, 0x24, 0x4f, 0x4f, 0x8f, 0x08, 0x3a, 0x8e, + 0x02, 0x9c, 0x99, 0xf9, 0xe4, 0x0b, 0x34, 0x37, 0x66, 0x0b, + 0x29, 0x36, 0xa6, 0xde, 0x8a, 0x9d, 0x21, 0x2b, 0xab, 0x6a, + 0x0f, 0xe3, 0x55, 0x2c, 0xb9, 0xa7, 0x35, 0x68, 0x5e, 0xf4, + 0xaf, 0x38, 0x66, 0x1d, 0x2a, 0xcc, 0xe9, 0x26, 0x7a, 0x72, + 0xb4, 0x16, 0xde, 0x98, 0x4a, 0xe0, 0x01, 0xa4, 0x36, 0x11, + 0x00, 0x26, 0xc6, 0x08, 0xeb, 0x7e, 0xfd, 0x2f, 0x1a, 0xe7, + 0x8d, 0x17, 0xe2, 0xb4, 0xf3, 0x41, 0x53, 0xc5, 0x56, 0x64, + 0x92, 0x1f, 0xcf, 0x7f, 0xf2, 0xf6, 0x2c, 0x06, 0x10, 0x5e, + 0x21, 0xd1, 0xc6, 0x22, 0x66, 0x66, 0x5b, 0x70, 0x97, 0xbc, + 0xbf, 0x9f, 0x16, 0x92, 0x95, 0x66, 0xfb, 0xe3, 0x8b, 0xf6, + 0x36, 0xb7, 0x53, 0x8a, 0xd3, 0xbe, 0xa3, 0x3b, 0xa4, 0xc3, + 0x10, 0xc0, 0x7c, 0x28, 0xea, 0x7c, 0xa7, 0x35, 0x79, 0x0a, + 0x67, 0xe4, 0x47, 0xa0, 0x13, 0xea, 0xe8, 0x2e, 0x36, 0xbe, + 0xae, 0x83, 0x5f, 0xdc, 0xad, 0x35, 0x7b, 0xcd, 0x6d, 0x44, + 0x35, 0x40, 0xd7, 0xbf, 0x3a, 0xd0, 0xb9, 0x3d, 0xdc, 0xed, + 0x14, 0x4b, 0xcd, 0x34, 0x2c, 0x06, 0xd9, 0x61, 0x18, 0x80, + 0xe1, 0x06, 0x41, 0xb1, 0x9e, 0x46, 0x44, 0xa5, 0xb0, 0xaf, + 0xc9, 0x26, 0xa0, 0x7a, 0xca, 0xf5, 0x8a, 0xee, 0x37, 0xa6, + 0xc2, 0xd2, 0x04, 0x12, 0xc7, 0x1e, 0x0c, 0x69, 0x35, 0x61, + 0xe3, 0x61, 0x73, 0xdf, 0xad, 0xe8, 0x3d, 0x3b, 0xaa, 0xc2, + 0x19, 0x77, 0x84, 0xb8, 0x3d, 0x6d, 0x2b, 0xb5, 0xcf, 0xd9, + 0x8f, 0x75, 0x33, 0xc3, 0x04, 0xb5, 0xa4, 0xf8, 0xcc, 0xea, + 0x1b, 0x41, 0x11, 0x18, 0x09, 0x9d, 0xf4, 0x64, 0x8b, 0x59, + 0xee, 0x9e, 0xf8, 0x72, 0xdf, 0x97, 0x1d, 0xca, 0x4e, 0x55, + 0xca, 0x2b, 0xe0, 0x95, 0x9c, 0x0e, 0x91, 0xf5, 0xbf, 0x76, + 0x58, 0x57, 0xbc, 0xa0, 0xc0, 0xd1, 0x01, 0xef, 0x8f, 0x3b, + 0x21, 0x0d, 0x18, 0x4d, 0x1f, 0x98, 0x59, 0x2b, 0x94, 0xc4, + 0x0b, 0xb6, 0x26, 0x93, 0xcc, 0xe5, 0x43, 0x5c, 0xf5, 0xb5, + 0x48, 0x4d, 0x1e, 0xdd, 0x6c, 0x3f, 0x65, 0x5c, 0xb1, 0x00, + 0x62, 0x79, 0xf2, 0xf9, 0xaa, 0xb5, 0xbc, 0x36, 0x17, 0x0d, + 0x80, 0xc3, 0xcc, 0xc3, 0x13, 0x17, 0x5b, 0x90, 0xbc, 0xe8, + 0x6b, 0xbd, 0x9e, 0x8d, 0x15, 0x23, 0xd8, 0x2a, 0x54, 0x37, + 0x2d, 0x04, 0x3c, 0xeb, 0xe4, 0x22, 0x7c, 0x2f, 0x14, 0x8e, + 0xca, 0xbc, 0xbd, 0x8a, 0xb2, 0xd3, 0x85, 0xb4, 0xd3, 0x88, + 0x96, 0x9e, 0x45, 0xdb, 0xd0, 0xd9, 0xf4, 0x8e, 0x8a, 0x80, + 0x7b, 0xb0, 0xfb, 0x2a, 0xed, 0x9d, 0xb5, 0x96, 0xac, 0x96, + 0xcf, 0x0d, 0xfb, 0x82, 0x38, 0x41, 0xbb, 0x48, 0x38, 0x59, + 0x03, 0xb8, 0x41, 0xac, 0xbb, 0x91, 0x82, 0x9c, 0x2c, 0x17, + 0x8b, 0xe2, 0x71, 0x51, 0xdd, 0xe1, 0x14, 0x36, 0x7a, 0xc7, + 0xb0, 0x19, 0x5c, 0x75, 0xca, 0x6a, 0xf4, 0x65, 0x9e, 0xab, + 0xfb, 0x9e, 0xaf, 0x7b, 0x87, 0x96, 0xf5, 0xbf, 0x42, 0xf9, + 0x26, 0x69, 0xfd, 0xfb, 0x52, 0x11, 0x81, 0xb0, 0x52, 0x4a, + 0x24, 0xa8, 0x2d, 0xa0, 0x31, 0x2b, 0xcf, 0x7a, 0x0b, 0xd2, + 0x5b, 0x21, 0xfb, 0x20, 0x28, 0xac, 0x68, 0xd1, 0x11, 0x4e, + 0xe0, 0x35, 0x3c, 0xad, 0x51, 0x56, 0xdc, 0x5c, 0x8d, 0x8e, + 0x13, 0x87, 0xbc, 0x96, 0x3c, 0x03, 0x5f, 0xb2, 0x93, 0xbb, + 0x8c, 0x37, 0x9d, 0xb2, 0x0b, 0x87, 0x26, 0x07, 0x32, 0x43, + 0x73, 0xcb, 0xfc, 0x5c, 0xa6, 0x5d, 0x58, 0xa5, 0x3d, 0xe8, + 0x03, 0xfc, 0x6a, 0xdf, 0xe0, 0x67, 0x85, 0x05, 0xd1, 0x44, + 0x45, 0xbf, 0x2d, 0xd5, 0xa6, 0xd1, 0x7d, 0xa7, 0x5a, 0x82, + 0x44, 0x07, 0x02, 0x70, 0x07, 0x08, 0x86, 0x37, 0x23, 0x98, + 0x50, 0x54, 0x95, 0x99, 0x68, 0xa8, 0x3d, 0xb6, 0x23, 0x5c, + 0x7c, 0x38, 0x74, 0x77, 0x6b, 0xc4, 0xcf, 0xda, 0x6b, 0x7a, + 0x19, 0x20, 0xe1, 0x29, 0xdb, 0xf6, 0xe2, 0x3e, 0x43, 0x56, + 0x87, 0xeb, 0x12, 0x83, 0xb6, 0x0a, 0xcc, 0x20, 0x68, 0xdf, + 0x5b, 0xf8, 0xe0, 0x35, 0x65, 0x2e, 0xb8, 0xce, 0xa2, 0xa0, + 0x7d, 0xa0, 0x58, 0x36, 0xa6, 0x97, 0x4d, 0x3f, 0x55, 0x3f, + 0x30, 0x6f, 0x66, 0x06, 0x2f, 0x22, 0xd3, 0x6c, 0xab, 0x52, + 0x81, 0x51, 0x88, 0xdb, 0x9c, 0x3c, 0x2d, 0xce, 0xe0, 0x67, + 0x98, 0x00, 0x6e, 0xbb, 0xb7, 0xc6, 0x82, 0xb2, 0x7b, 0x41, + 0x41, 0xe6, 0x62, 0x99, 0x84, 0xe5, 0x58, 0xc5, 0xc9, 0xf0, + 0x5b, 0xc6, 0x2b, 0x2b, 0x75, 0x1d, 0xfe, 0x5b, 0x86, 0x9a, + 0x09, 0xdd, 0x60, 0x39, 0x50, 0xa0, 0xdb, 0xc5, 0x32, 0x7e, + 0x54, 0xc5, 0xad, 0xde, 0x65, 0x37, 0x1e, 0xf2, 0x71, 0x05, + 0x9a, 0x24, 0x24, 0xbb, 0x3f, 0x94, 0x6c, 0x7e, 0x46, 0x54, + 0x05, 0x8f, 0x49, 0x48, 0x29, 0x5e, 0x1a, 0x2b, 0x28, 0xca, + 0xbf, 0xb2, 0x56, 0x97, 0x01, 0x18, 0x7a, 0xf1, 0x22, 0xb6, + 0x72, 0x88, 0x76, 0xb2, 0x72, 0x70, 0x47, 0x6e, 0x74, 0x19, + 0x36, 0x76, 0x50, 0x99, 0x7e, 0x8e, 0x61, 0x54, 0x2c, 0x55, + 0xef, 0xf7, 0x27, 0x62, 0x2f, 0x7a, 0xa6, 0x0b, 0x33, 0xb3, + 0x21, 0xec, 0xde, 0xaf, 0x1e, 0x5d, 0x30, 0x42, 0x82, 0xd9, + 0x59, 0x5e, 0xc9, 0xcf, 0x5a, 0x5b, 0xf5, 0xf6, 0x77, 0xdf, + 0xc1, 0x55, 0x6d, 0x5a, 0x6f, 0x54, 0x9a, 0x1f, 0x2d, 0xc2, + 0x19, 0xe1, 0x54, 0x91, 0xe3, 0x1d, 0x01, 0xae, 0xcb, 0xd0, + 0x73, 0x99, 0x0f, 0x6a, 0x7d, 0x3a, 0x88, 0x81, 0x90, 0xf6, + 0x15, 0xb9, 0x80, 0xf8, 0x2f, 0x4b, 0x39, 0x85, 0x17, 0xc5, + 0xf9, 0x76, 0x1d, 0x35, 0x2e, 0xbf, 0x68, 0x12, 0x6a, 0xb2, + 0xee, 0xc2, 0x4f, 0xa0, 0x1b, 0xa8, 0xad, 0xb9, 0x58, 0x3f, + 0x3b, 0xbb, 0x38, 0x21, 0x29, 0xa4, 0xf5, 0x53, 0xc7, 0x10, + 0xb7, 0x64, 0x52, 0xa4, 0x8b, 0xda, 0x22, 0x0d, 0xc5, 0xbc, + 0xb0, 0xb5, 0xea, 0x3c, 0x15, 0x6e, 0x18, 0x3a, 0x03, 0x92, + 0x49, 0xd5, 0x07, 0xdc, 0x30, 0x93, 0xb8, 0x8c, 0x3b, 0x38, + 0xc4, 0x96, 0xef, 0x7f, 0xb6, 0x6f, 0x0a, 0xe4, 0x8e, 0x4c, + 0xbb, 0x15, 0x87, 0x2a, 0xa5, 0x97, 0xfe, 0xb1, 0xdf, 0x65, + 0xb4, 0xed, 0x9b, 0x1d, 0x7e, 0x6c, 0xa4, 0xa5, 0x20, 0x8f, + 0x09, 0xd6, 0x14, 0x33, 0xad, 0xcd, 0x25, 0xe8, 0x3b, 0x74, + 0x8e, 0x3b, 0x67, 0x07, 0x0f, 0x2b, 0x19, 0x35, 0x10, 0x98, + 0xab, 0x33, 0xaa, 0x8f, 0xa6, 0xf3, 0x9a, 0xc2, 0x89, 0x94, + 0xfd, 0x72, 0xb2, 0x94, 0x64, 0x77, 0x74, 0x84, 0xf7, 0x0a, + 0x47, 0xc9, 0x14, 0x5c, 0xe0, 0x19, 0xc6, 0xa8, 0xf0, 0xb9, + 0x13, 0x98, 0x11, 0xae, 0x76, 0x85, 0xc8, 0x38, 0xda, 0xe8, + 0x55, 0xb8, 0x1f, 0xe1, 0xf0, 0xfe, 0x77, 0x1c, 0x53, 0xb3, + 0xe9, 0x57, 0x1c, 0x2b, 0x08, 0x89, 0xe1, 0x88, 0x13, 0x24, + 0x57, 0x83, 0x9c, 0x85, 0xd1, 0x14, 0xf8, 0xf9, 0xdd, 0x29, + 0x30, 0x73, 0xae, 0xcd, 0xd0, 0x2a, 0xec, 0xa7, 0x44, 0x75, + 0x8a, 0x38, 0x3e, 0xd3, 0x5b, 0x24, 0x2b, 0xe0, 0x5a, 0x85, + 0x39, 0x8c, 0x0c, 0x51, 0x9b +}; + diff --git a/neureka/pointwise/src/output.c b/neureka/pointwise/src/output.c new file mode 100644 index 0000000..0172aeb --- /dev/null +++ b/neureka/pointwise/src/output.c @@ -0,0 +1,165 @@ +#include "output.h" + +#define OUTPUT_SIZE (1365) +PI_L1 uint8_t output[OUTPUT_SIZE]; + +#define GOLDEN_OUTPUT_SIZE (1365) +PI_L2 uint8_t golden_output[GOLDEN_OUTPUT_SIZE] = { + 0xcd, 0x00, 0x00, 0x00, 0x63, 0x15, 0x00, 0x00, 0x00, 0x00, + 0x36, 0x6f, 0x00, 0x00, 0x27, 0x6d, 0x00, 0x2a, 0xff, 0x31, + 0xff, 0x8f, 0x00, 0x00, 0x01, 0x64, 0x55, 0x16, 0xb8, 0x0a, + 0x00, 0x00, 0x57, 0x00, 0x00, 0x00, 0x8c, 0x00, 0x00, 0x77, + 0x00, 0x1b, 0x00, 0x9b, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x30, + 0x60, 0x9b, 0x37, 0x1b, 0xff, 0x00, 0x00, 0xff, 0x00, 0xff, + 0xbf, 0x00, 0x00, 0x00, 0xff, 0x3d, 0x22, 0x00, 0x00, 0x00, + 0x00, 0x4e, 0x00, 0x00, 0x45, 0xe0, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x93, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3b, 0xff, + 0x00, 0x28, 0x00, 0xff, 0x00, 0x00, 0xff, 0x77, 0xf8, 0x4b, + 0x00, 0x00, 0x00, 0x8d, 0x37, 0x1c, 0x65, 0x00, 0x05, 0x00, + 0x8d, 0x00, 0x01, 0x50, 0xce, 0x00, 0x00, 0x8c, 0x00, 0x93, + 0x00, 0x17, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3b, 0x2f, 0x6e, + 0x21, 0x00, 0xff, 0x00, 0x00, 0xff, 0x00, 0x4b, 0xcd, 0x00, + 0x00, 0x00, 0xff, 0x44, 0x0c, 0x5d, 0x00, 0x2f, 0x00, 0x7c, + 0x00, 0x00, 0x1d, 0xf9, 0x00, 0x00, 0x5b, 0x00, 0xd8, 0x00, + 0xf6, 0xdc, 0x00, 0x00, 0x00, 0x00, 0x33, 0x34, 0x00, 0x21, + 0x19, 0xe8, 0x95, 0x4e, 0xff, 0x00, 0xff, 0x9e, 0x00, 0x00, + 0x00, 0x9b, 0x41, 0x23, 0x47, 0x2c, 0x00, 0x00, 0x7d, 0x00, + 0x00, 0x00, 0x49, 0x00, 0x00, 0xee, 0x00, 0xee, 0x00, 0x86, + 0x71, 0x00, 0x00, 0x00, 0x00, 0x2e, 0x2d, 0xe3, 0x7a, 0x53, + 0xdc, 0x74, 0x14, 0xff, 0x66, 0xff, 0xcc, 0x13, 0x00, 0x00, + 0xce, 0x2e, 0x15, 0x93, 0x09, 0x24, 0x00, 0x70, 0x00, 0x00, + 0x00, 0xe9, 0x0e, 0x00, 0x3a, 0x00, 0x25, 0x00, 0x02, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x34, 0x93, 0xea, 0xc3, 0x59, 0x8a, + 0x00, 0xbb, 0xda, 0x3e, 0xff, 0xc3, 0x00, 0x00, 0x00, 0xff, + 0x4a, 0x12, 0x00, 0x34, 0x00, 0x00, 0x70, 0x00, 0x00, 0x00, + 0xeb, 0x00, 0x00, 0x00, 0x00, 0x1c, 0x08, 0x86, 0xb1, 0x14, + 0x14, 0x00, 0x00, 0x30, 0x5a, 0xad, 0x48, 0x00, 0xff, 0x00, + 0x00, 0xff, 0x00, 0xff, 0xda, 0x00, 0x00, 0x00, 0x62, 0x4b, + 0x22, 0x49, 0x00, 0x00, 0x00, 0x8a, 0x00, 0x00, 0x24, 0x64, + 0x00, 0x00, 0xff, 0x00, 0x9d, 0x00, 0x4b, 0xc1, 0x00, 0x00, + 0x00, 0x00, 0x2e, 0x00, 0x11, 0x2b, 0x8f, 0xff, 0x63, 0x00, + 0xd4, 0x12, 0xff, 0xcc, 0x00, 0x00, 0x00, 0x93, 0x5f, 0x1b, + 0x0c, 0x00, 0x43, 0x00, 0x6f, 0x00, 0x00, 0x00, 0xff, 0x00, + 0x00, 0x55, 0x00, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x35, 0xff, 0x00, 0x00, 0x15, 0xf9, 0x00, 0x00, 0xe8, + 0x00, 0xff, 0xff, 0x00, 0x00, 0x02, 0x4f, 0x4a, 0x18, 0xc4, + 0x22, 0x09, 0x00, 0x6b, 0x00, 0x00, 0x08, 0xff, 0x00, 0x00, + 0x8c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x74, 0x00, 0x00, 0x00, + 0x2f, 0xdf, 0x00, 0x00, 0x97, 0xff, 0x00, 0x00, 0xba, 0x00, + 0xff, 0xa5, 0x00, 0x00, 0x00, 0x9c, 0x13, 0x12, 0xbb, 0x00, + 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x11, + 0x00, 0x00, 0x00, 0x8a, 0x07, 0x00, 0x00, 0x00, 0x00, 0x36, + 0xd2, 0x8a, 0x6b, 0x00, 0xa2, 0x08, 0x33, 0xf1, 0x0d, 0x2a, + 0xc6, 0x00, 0x00, 0x00, 0x36, 0x54, 0x1a, 0x9e, 0x00, 0x10, + 0x00, 0x59, 0x00, 0x00, 0x00, 0xa0, 0x00, 0x00, 0x00, 0x00, + 0x4b, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2e, 0xaf, + 0x56, 0x36, 0x18, 0xb5, 0x00, 0x00, 0x87, 0x00, 0x09, 0xaf, + 0x00, 0x00, 0x00, 0xec, 0x3b, 0x22, 0x64, 0x00, 0x47, 0x00, + 0xb7, 0x00, 0x00, 0x00, 0x9e, 0x15, 0x00, 0x3b, 0x00, 0x00, + 0x00, 0x63, 0xa5, 0x00, 0x18, 0x00, 0x00, 0x34, 0x97, 0x00, + 0x9e, 0x23, 0xa2, 0x64, 0x57, 0xff, 0x00, 0xf2, 0xef, 0x00, + 0x00, 0x00, 0xf2, 0x4f, 0x1b, 0x5e, 0x06, 0x00, 0x00, 0x8c, + 0x00, 0x00, 0x0a, 0xd6, 0x00, 0x00, 0x38, 0x00, 0x61, 0x00, + 0x90, 0xbf, 0x00, 0x00, 0x00, 0x00, 0x2d, 0x00, 0xc8, 0x80, + 0x00, 0xa9, 0x01, 0x01, 0xfb, 0x4b, 0xff, 0xcb, 0x20, 0x00, + 0x00, 0xff, 0x4e, 0x13, 0x94, 0x00, 0x00, 0x00, 0x54, 0x00, + 0x00, 0x00, 0xff, 0x00, 0x00, 0xe9, 0x00, 0x14, 0x31, 0x0c, + 0xd1, 0x00, 0x00, 0x00, 0x00, 0x35, 0x97, 0x46, 0x00, 0x0d, + 0xff, 0x00, 0x00, 0xff, 0x00, 0xb7, 0xbf, 0x00, 0x00, 0x00, + 0xa0, 0x3d, 0x11, 0x9f, 0x00, 0x51, 0x00, 0x7f, 0x00, 0x00, + 0x00, 0x96, 0x00, 0x00, 0x82, 0x00, 0x6a, 0x00, 0x51, 0xae, + 0x00, 0x00, 0x00, 0x00, 0x31, 0xff, 0x00, 0xae, 0x00, 0xf2, + 0x79, 0x00, 0xd7, 0x00, 0xff, 0xef, 0x05, 0x00, 0x00, 0xf0, + 0x44, 0x20, 0xff, 0xed, 0x4d, 0x00, 0x63, 0x00, 0x00, 0x81, + 0xff, 0x00, 0x00, 0xda, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x35, 0x95, 0xff, 0x9d, 0x00, 0xff, 0x00, + 0x00, 0xff, 0x62, 0xff, 0xbb, 0x00, 0x00, 0x00, 0x9e, 0x3c, + 0x1e, 0x97, 0x1f, 0x52, 0x00, 0x53, 0x00, 0x00, 0x43, 0xff, + 0x00, 0x00, 0xa6, 0x00, 0x72, 0x00, 0xfb, 0x4b, 0x01, 0x00, + 0x00, 0x00, 0x31, 0x86, 0x00, 0x36, 0x00, 0xf9, 0x00, 0xa3, + 0xff, 0xed, 0xff, 0xb5, 0x00, 0x00, 0x00, 0x6a, 0x3c, 0x19, + 0x8c, 0x63, 0x00, 0x00, 0x57, 0x00, 0x00, 0x00, 0xff, 0x00, + 0x00, 0xff, 0x00, 0x00, 0x00, 0x00, 0xc9, 0x00, 0x00, 0x00, + 0x00, 0x34, 0x9e, 0x11, 0x2b, 0x00, 0x36, 0x00, 0x00, 0xd6, + 0x30, 0xff, 0x96, 0x00, 0x00, 0x00, 0x4b, 0x27, 0x1d, 0x31, + 0x00, 0x25, 0x00, 0x53, 0x00, 0x00, 0x00, 0xad, 0x00, 0x6c, + 0x70, 0x00, 0x0a, 0x00, 0x62, 0x28, 0x00, 0x00, 0x00, 0x00, + 0x32, 0xba, 0x49, 0x3e, 0x13, 0xeb, 0x27, 0x14, 0xff, 0x11, + 0x09, 0xdd, 0x00, 0x00, 0x00, 0xff, 0x3e, 0x1b, 0x92, 0x00, + 0x00, 0x00, 0x9b, 0x00, 0x00, 0x00, 0xf2, 0x00, 0x00, 0xf5, + 0x00, 0x16, 0x00, 0x00, 0xb4, 0x00, 0x00, 0x00, 0x00, 0x33, + 0x45, 0x01, 0x37, 0x96, 0xff, 0x00, 0xa8, 0xff, 0x00, 0xff, + 0xd5, 0x00, 0x00, 0x00, 0xb0, 0x2e, 0x19, 0xbe, 0x00, 0x00, + 0x00, 0x80, 0x00, 0x00, 0x3e, 0xf9, 0x00, 0x00, 0x69, 0x00, + 0x3d, 0x00, 0x7e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x36, 0xd3, + 0x0e, 0x2a, 0x3c, 0xc3, 0x00, 0x32, 0xff, 0x71, 0xff, 0x77, + 0x00, 0x00, 0x00, 0xff, 0x56, 0x23, 0x9c, 0x00, 0x52, 0x00, + 0x7d, 0x00, 0x16, 0x5d, 0xa2, 0x00, 0x00, 0x77, 0x00, 0x16, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x33, 0x46, 0x00, + 0x2c, 0x17, 0xdc, 0x0a, 0x00, 0xff, 0x00, 0xff, 0xba, 0x00, + 0x00, 0x00, 0x9e, 0x33, 0x27, 0x5f, 0x3f, 0x00, 0x00, 0x75, + 0x00, 0x00, 0xbd, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x36, 0xe6, 0x00, 0x00, + 0x00, 0xc2, 0xbb, 0x00, 0xff, 0x2a, 0xff, 0xff, 0x00, 0x00, + 0x00, 0x47, 0x51, 0x15, 0x71, 0x00, 0x00, 0x00, 0x8a, 0x00, + 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, + 0x6b, 0x00, 0x00, 0x00, 0x00, 0x30, 0x3e, 0x5d, 0x8b, 0x32, + 0xde, 0x00, 0x00, 0xff, 0x49, 0xff, 0x92, 0x00, 0x00, 0x00, + 0x08, 0x4f, 0x12, 0xb3, 0x00, 0x71, 0x00, 0x83, 0x00, 0x0c, + 0x00, 0xe1, 0x00, 0x00, 0x00, 0x00, 0x3f, 0x00, 0x00, 0x57, + 0x00, 0x18, 0x00, 0x00, 0x2f, 0xd2, 0x00, 0x00, 0x55, 0xd9, + 0x5c, 0x26, 0xff, 0x00, 0xff, 0xc0, 0x00, 0x00, 0x00, 0xe2, + 0x3c, 0x23, 0x18, 0x0e, 0x28, 0x00, 0x66, 0x00, 0x00, 0x00, + 0xff, 0x00, 0x00, 0x26, 0x00, 0xb4, 0x00, 0x5f, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x35, 0xc6, 0x84, 0x01, 0x53, 0xff, 0x00, + 0x00, 0xff, 0x00, 0xfe, 0x7f, 0x10, 0x00, 0x00, 0xed, 0x2d, + 0x1d, 0xb2, 0x55, 0x00, 0x00, 0x5e, 0x00, 0x26, 0xd2, 0xff, + 0x00, 0x00, 0x03, 0x00, 0x5b, 0x00, 0x2e, 0x20, 0x00, 0x00, + 0x00, 0x00, 0x34, 0xff, 0x9a, 0x3e, 0x00, 0xff, 0x00, 0x00, + 0xff, 0x00, 0xff, 0xff, 0x00, 0x00, 0x00, 0x26, 0x55, 0x08, + 0x6a, 0x00, 0x1d, 0x00, 0x83, 0x00, 0x00, 0x7a, 0xff, 0x00, + 0x00, 0x28, 0x00, 0xe7, 0x00, 0x08, 0x0b, 0x0b, 0x00, 0x00, + 0x00, 0x30, 0xab, 0x00, 0x00, 0x00, 0x64, 0x0c, 0x1e, 0xe4, + 0x27, 0xff, 0x93, 0x05, 0x00, 0x00, 0xff, 0x00, 0x2b, 0x8a, + 0x65, 0x0a, 0x00, 0x5f, 0x00, 0x00, 0x30, 0xff, 0x00, 0x00, + 0x45, 0x00, 0x7d, 0x00, 0x19, 0x6c, 0x00, 0x00, 0x00, 0x00, + 0x3b, 0xf9, 0x00, 0x00, 0x06, 0xa7, 0x00, 0x6f, 0xfd, 0x40, + 0xff, 0xb7, 0x00, 0x00, 0x00, 0xff, 0x22, 0x1e, 0xb5, 0x00, + 0x15, 0x00, 0x92, 0x00, 0x00, 0x54, 0xff, 0x00, 0x00, 0x66, + 0x00, 0x00, 0x00, 0x62, 0x00, 0x00, 0x00, 0x00, 0x00, 0x33, + 0x5b, 0x82, 0x26, 0x60, 0xff, 0x00, 0x00, 0xff, 0x6c, 0xff, + 0xfe, 0x00, 0x00, 0x00, 0x89, 0x63, 0x14, 0x69, 0xe5, 0x00, + 0x00, 0x80, 0x00, 0x00, 0x2b, 0xcf, 0x00, 0x00, 0x00, 0x00, + 0x3d, 0x00, 0x84, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x37, 0xaf, + 0x00, 0x00, 0x3e, 0xff, 0x00, 0x42, 0xff, 0x00, 0xff, 0xff, + 0x00, 0x00, 0x04, 0x09, 0x3f, 0x1e, 0xaf, 0x17, 0x00, 0x00, + 0x5d, 0x00, 0x00, 0x22, 0xff, 0x00, 0x1c, 0x56, 0x00, 0x00, + 0x00, 0xd5, 0x19, 0x00, 0x00, 0x00, 0x00, 0x35, 0xc9, 0xff, + 0x00, 0x00, 0x88, 0x00, 0x0b, 0xff, 0x23, 0xff, 0xff, 0x00, + 0x00, 0x00, 0x0b, 0x4e, 0x17, 0x3c, 0x00, 0x00, 0x00, 0x61, + 0x00, 0x00, 0x00, 0x52, 0x00, 0x00, 0xb8, 0x00, 0xff, 0x00, + 0x45, 0x07, 0x00, 0x00, 0x00, 0x00, 0x2d, 0xe5, 0x00, 0x47, + 0x01, 0xff, 0x00, 0x00, 0xf7, 0x27, 0xff, 0x44, 0x00, 0x00, + 0x00, 0x4e, 0x5e, 0x17, 0xb2, 0x00, 0x00, 0x00, 0x5a, 0x00, + 0x00, 0x00, 0xff, 0x00, 0x36 +}; + +int check_output() { + printf("Checking the output vector:\n"); + + int n_err = 0; + for (int i = 0; i < OUTPUT_SIZE; i++) { + if (output[i] != golden_output[i]) { + printf("ERROR: wrong value of output @ %d: %d vs. golden: %d\n", i, output[i], golden_output[i]); + n_err++; + } + } + + if (n_err == 0) + printf("> Success! No errors found.\n"); + else + printf("> Failure! Found %d/%d errors.\n", n_err, OUTPUT_SIZE); + return n_err; + } + + \ No newline at end of file diff --git a/neureka/pointwise/src/scale.c b/neureka/pointwise/src/scale.c new file mode 100644 index 0000000..5eb2c42 --- /dev/null +++ b/neureka/pointwise/src/scale.c @@ -0,0 +1,10 @@ +#include "scale.h" + +#define SCALE_SIZE (39) +PI_L1 uint8_t scale[SCALE_SIZE] = { + 0x1e, 0x02, 0x1a, 0x1d, 0x15, 0x1b, 0x13, 0x07, 0x15, 0x0e, + 0x01, 0x11, 0x1b, 0x11, 0x0e, 0x11, 0x19, 0x13, 0x0d, 0x13, + 0x1e, 0x0f, 0x0b, 0x0b, 0x05, 0x1b, 0x04, 0x02, 0x0c, 0x14, + 0x0c, 0x04, 0x05, 0x0f, 0x07, 0x0f, 0x0f, 0x16, 0x1c +}; + diff --git a/neureka/pointwise/src/weight.c b/neureka/pointwise/src/weight.c new file mode 100644 index 0000000..140952b --- /dev/null +++ b/neureka/pointwise/src/weight.c @@ -0,0 +1,1130 @@ +#include "weight.h" + +#define WEIGHT_SIZE (11232) +PI_L1 uint8_t weight[WEIGHT_SIZE] = { + 0x9f, 0x3b, 0x8a, 0x72, 0xf7, 0x43, 0x00, 0x69, 0xa1, 0xc9, + 0x09, 0x17, 0xa7, 0xab, 0xc5, 0xf7, 0xa7, 0xfa, 0x97, 0xa8, + 0xa5, 0x92, 0x11, 0xdf, 0xa7, 0x92, 0x91, 0xff, 0x58, 0x6d, + 0x6e, 0x00, 0x18, 0xb6, 0x1f, 0x16, 0x49, 0x91, 0x15, 0x60, + 0x06, 0x38, 0x2d, 0x55, 0x2d, 0xa3, 0x6e, 0x7e, 0xd2, 0x59, + 0x80, 0x79, 0x8f, 0x11, 0x4a, 0x7e, 0x8f, 0x11, 0x4a, 0x7e, + 0x70, 0xee, 0xb5, 0x81, 0x68, 0x39, 0xc7, 0xb5, 0x59, 0x5c, + 0xcd, 0x89, 0xfa, 0x75, 0x35, 0xdd, 0x0d, 0x89, 0x5c, 0xcd, + 0x9a, 0xee, 0x05, 0xba, 0x3d, 0xbc, 0x05, 0xca, 0x1d, 0xbc, + 0x05, 0xca, 0xe2, 0x43, 0xfa, 0x35, 0xee, 0xf7, 0xfa, 0x2d, + 0x88, 0xfb, 0x79, 0x5b, 0x2a, 0xc9, 0x15, 0x24, 0xe4, 0xbe, + 0x84, 0x12, 0x1d, 0x2d, 0x28, 0x42, 0xc6, 0xac, 0x00, 0xb2, + 0xc6, 0xac, 0x00, 0x12, 0x39, 0x53, 0xff, 0xed, 0xe0, 0x32, + 0xc6, 0x63, 0x0c, 0xea, 0x91, 0xf4, 0x00, 0x85, 0x05, 0x7f, + 0x6c, 0x88, 0x55, 0x3e, 0xfd, 0x98, 0x18, 0x1d, 0x6d, 0x9e, + 0x3b, 0x25, 0x6d, 0x9e, 0x3b, 0x25, 0x92, 0x61, 0xc4, 0xda, + 0x1e, 0x15, 0x6a, 0x82, 0x3d, 0x68, 0xeb, 0x2f, 0x6e, 0x76, + 0x1d, 0x53, 0xbb, 0x91, 0x91, 0xa7, 0x5c, 0x4a, 0xfa, 0x3a, + 0xc9, 0x01, 0x2a, 0x1b, 0xc9, 0x01, 0x6a, 0x1b, 0x36, 0xfe, + 0x95, 0xe4, 0x13, 0x69, 0xdd, 0xf5, 0xdc, 0xed, 0xb0, 0x39, + 0xdc, 0xda, 0xf6, 0x76, 0xaf, 0x02, 0xaa, 0xc4, 0x42, 0x3a, + 0xe9, 0x4f, 0x4a, 0x1b, 0xff, 0x4f, 0xca, 0x1a, 0xfb, 0x4f, + 0x35, 0xe5, 0x04, 0xb0, 0x2f, 0x58, 0xab, 0xfa, 0x4c, 0x98, + 0x7f, 0x23, 0x21, 0xa9, 0xfd, 0xce, 0x34, 0xf0, 0x3a, 0x67, + 0x5b, 0x89, 0x6f, 0x3b, 0x01, 0x88, 0x26, 0x3b, 0x01, 0x88, + 0x2e, 0xbb, 0xfe, 0x77, 0xd1, 0x44, 0x00, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf7, 0xd1, + 0x59, 0xb4, 0x26, 0x04, 0x6e, 0x6b, 0xb0, 0x5c, 0x36, 0xaf, + 0xde, 0x83, 0x05, 0xfe, 0x12, 0xc3, 0xe5, 0x71, 0xf6, 0x8f, + 0x0c, 0xcd, 0xf6, 0x8f, 0x24, 0xcd, 0x09, 0x70, 0xdb, 0x32, + 0xb0, 0x48, 0x23, 0x45, 0xb7, 0x93, 0xae, 0xcc, 0x66, 0x56, + 0x86, 0x3f, 0xa5, 0xe8, 0x76, 0xbf, 0xcf, 0x08, 0xa1, 0xed, + 0xff, 0x08, 0x1d, 0xad, 0xff, 0x08, 0x15, 0xad, 0x00, 0xf7, + 0xea, 0x52, 0x78, 0x44, 0x14, 0xba, 0x06, 0x42, 0x66, 0xcb, + 0xc3, 0xe8, 0x9d, 0x75, 0x48, 0x9b, 0x03, 0x94, 0x7b, 0x80, + 0xff, 0x8a, 0xfb, 0x11, 0xce, 0x96, 0x5b, 0x11, 0xce, 0x92, + 0xa4, 0xee, 0x31, 0x6d, 0xe5, 0xe4, 0x8d, 0x49, 0x4d, 0xb4, + 0x11, 0x98, 0x0c, 0x8e, 0x94, 0xbd, 0x3e, 0xfc, 0xbc, 0x24, + 0xe0, 0x7c, 0xfa, 0x85, 0x95, 0xcc, 0x9d, 0x87, 0x94, 0x4c, + 0x9d, 0x87, 0x6b, 0xb3, 0x62, 0x78, 0x01, 0x54, 0xa5, 0xaa, + 0xd9, 0xdd, 0x03, 0xe6, 0xfc, 0x51, 0xce, 0x8e, 0xd4, 0x0c, + 0x6a, 0xe7, 0x4c, 0xf4, 0xfd, 0x13, 0x58, 0x74, 0x87, 0xb3, + 0x58, 0x74, 0x87, 0xbb, 0xa7, 0x8b, 0x78, 0x44, 0x8a, 0x0d, + 0x4a, 0xe6, 0x03, 0x6e, 0x2c, 0xfe, 0xb5, 0x8b, 0x96, 0xbd, + 0xc1, 0xdc, 0xf7, 0xb1, 0x51, 0xc7, 0x5f, 0x03, 0x51, 0xf7, + 0x7b, 0x95, 0x51, 0xe7, 0x7b, 0x95, 0xae, 0x18, 0x84, 0x6a, + 0x54, 0x66, 0x1d, 0xda, 0x22, 0x63, 0xdd, 0x34, 0x7a, 0x6a, + 0x2e, 0x56, 0x99, 0x82, 0x9a, 0xc7, 0xf2, 0x7e, 0x90, 0x5e, + 0x7a, 0x4e, 0xda, 0x76, 0xfa, 0x4e, 0xda, 0x76, 0x05, 0xb1, + 0x25, 0x89, 0x0d, 0xef, 0x72, 0xd8, 0x3c, 0xe2, 0x2a, 0x60, + 0x9d, 0xd5, 0xf0, 0x43, 0x2b, 0x50, 0x86, 0x30, 0xea, 0x59, + 0x9d, 0x45, 0xe8, 0x18, 0xd9, 0xe7, 0xe8, 0x18, 0xd9, 0xe7, + 0x17, 0xe7, 0x26, 0x18, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x69, 0x4a, 0x80, 0xce, + 0xd0, 0x4e, 0x9b, 0x8a, 0xba, 0xa5, 0xd9, 0x53, 0x75, 0x4c, + 0x98, 0x23, 0xcc, 0xe4, 0xd7, 0x31, 0x3d, 0x00, 0xfd, 0x0b, + 0x7d, 0x00, 0xdd, 0x0b, 0x82, 0xff, 0x22, 0xf4, 0x75, 0x49, + 0x5f, 0xcc, 0xdb, 0xae, 0xde, 0xab, 0xdd, 0x30, 0x8b, 0x2c, + 0xa6, 0xc4, 0xb5, 0xf1, 0x97, 0x01, 0x7a, 0x23, 0xa3, 0x95, + 0x0e, 0x2d, 0xa3, 0x95, 0x2e, 0x2d, 0x5c, 0x6a, 0xd1, 0xd2, + 0x65, 0xf0, 0x53, 0x99, 0xf0, 0x91, 0xef, 0x32, 0x96, 0xf7, + 0x12, 0xc3, 0xe0, 0x17, 0x13, 0xac, 0x3c, 0x53, 0x2f, 0x1f, + 0x54, 0x77, 0x33, 0xde, 0x14, 0x77, 0x33, 0x9e, 0xeb, 0x88, + 0xcc, 0x61, 0x02, 0x02, 0xca, 0xed, 0xa2, 0xa4, 0xcf, 0x20, + 0xf7, 0x92, 0xdb, 0x88, 0x11, 0x86, 0xee, 0xcf, 0x9a, 0xe0, + 0xc9, 0x6f, 0x9b, 0x82, 0x88, 0xee, 0x9b, 0x82, 0xc8, 0xee, + 0x64, 0x7d, 0x37, 0x11, 0x46, 0x01, 0xa3, 0xbc, 0x0e, 0xc4, + 0x72, 0xd1, 0xc3, 0x85, 0xad, 0xcb, 0x11, 0x25, 0x56, 0x89, + 0x4e, 0x27, 0xcd, 0xcd, 0xa6, 0xa7, 0x6c, 0x7d, 0x86, 0x27, + 0xec, 0xfd, 0x79, 0xd8, 0x13, 0x02, 0xa0, 0x26, 0xfe, 0xe8, + 0xfc, 0xf5, 0x64, 0x2d, 0x59, 0xa7, 0x92, 0xd4, 0x5a, 0xd3, + 0xbe, 0x77, 0x08, 0x4e, 0x04, 0x86, 0x50, 0xce, 0x36, 0x84, + 0x50, 0xce, 0x36, 0x84, 0xaf, 0x31, 0xc9, 0x7b, 0xbb, 0x25, + 0x67, 0x70, 0x0c, 0x20, 0x92, 0x7f, 0x30, 0xc2, 0xd0, 0x88, + 0x27, 0xaa, 0x32, 0xaf, 0x65, 0xd0, 0x19, 0x4f, 0x83, 0x98, + 0x1e, 0xb3, 0x03, 0x98, 0x1e, 0xb3, 0xfc, 0x67, 0xe1, 0x4c, + 0x73, 0x1e, 0x1f, 0xd8, 0xb7, 0x16, 0x15, 0x8b, 0x96, 0xc5, + 0x15, 0xa3, 0xa5, 0x2b, 0xae, 0x7a, 0x30, 0xb5, 0x0f, 0x89, + 0x2f, 0x92, 0x37, 0xa8, 0x27, 0x92, 0x17, 0xa8, 0xd8, 0x6d, + 0xe8, 0x57, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x4b, 0x8a, 0x05, 0xdc, 0x97, 0x61, + 0xcf, 0x05, 0xb4, 0x98, 0x55, 0x98, 0xc4, 0xc5, 0xd8, 0xb1, + 0x28, 0x49, 0x74, 0x9d, 0x89, 0x8b, 0x74, 0xbd, 0x89, 0xcb, + 0x74, 0xbd, 0x76, 0x34, 0x8b, 0x42, 0xe3, 0x67, 0x8e, 0x28, + 0x5e, 0x2e, 0x32, 0x1f, 0xdf, 0x9e, 0xa1, 0x1f, 0xcf, 0x0f, + 0x1b, 0x16, 0xaa, 0x3e, 0x33, 0x31, 0x83, 0x37, 0xb1, 0x75, + 0x83, 0x36, 0xb1, 0x75, 0x7c, 0xc9, 0x4e, 0x8a, 0xe4, 0x3f, + 0xc5, 0x8b, 0xd2, 0x10, 0xf2, 0xc2, 0x99, 0x4f, 0x15, 0xe1, + 0x72, 0xfc, 0x83, 0xf4, 0x79, 0x03, 0x05, 0x83, 0x79, 0x0f, + 0xc7, 0x80, 0x79, 0x0f, 0xc7, 0x80, 0x86, 0xf0, 0x38, 0x7f, + 0x91, 0x81, 0xee, 0x27, 0xf3, 0x13, 0xbd, 0x47, 0x55, 0xbf, + 0xe1, 0x5e, 0xa4, 0x47, 0xed, 0xf3, 0x1b, 0x7b, 0x41, 0x5b, + 0x26, 0x5b, 0xe5, 0x7b, 0x26, 0x5b, 0x65, 0x7b, 0xd9, 0xa4, + 0x9a, 0x84, 0x3b, 0x70, 0x1e, 0x38, 0x31, 0x21, 0x9c, 0x48, + 0xe7, 0x9c, 0x1b, 0x8d, 0x67, 0xc9, 0x9c, 0x89, 0x26, 0x1a, + 0xc3, 0x2f, 0x27, 0xd8, 0xf3, 0xbb, 0x27, 0x98, 0xb3, 0xab, + 0xd8, 0x67, 0x4c, 0x54, 0x48, 0xbd, 0xf9, 0x4f, 0x2c, 0x37, + 0xc9, 0xdd, 0x4d, 0xef, 0x59, 0x09, 0x73, 0x9d, 0xb8, 0x36, + 0x9b, 0x06, 0x11, 0xc0, 0xb3, 0x16, 0x5d, 0x09, 0xb3, 0x16, + 0x59, 0x09, 0x4c, 0xe9, 0xa6, 0xf6, 0x25, 0xf5, 0xf8, 0x08, + 0x9b, 0x75, 0x87, 0x32, 0x0a, 0xd0, 0x64, 0x04, 0xbb, 0x9d, + 0x5c, 0x30, 0x75, 0xa3, 0x9e, 0x55, 0xb7, 0x94, 0xcd, 0x01, + 0xb7, 0x97, 0xcd, 0x01, 0x48, 0x68, 0x32, 0xfe, 0x4f, 0x22, + 0x33, 0xd1, 0x46, 0x2a, 0x5d, 0xc7, 0x69, 0x59, 0xf0, 0xc2, + 0x1e, 0xc6, 0xb6, 0xca, 0xa0, 0x1f, 0xd6, 0x1f, 0x2b, 0xc6, + 0xdc, 0xfb, 0x29, 0xc6, 0xd4, 0xfb, 0xd6, 0x39, 0x2b, 0x04, + 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, + 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x78, 0xdb, 0x23, 0x5a, 0xc8, 0xac, 0xb1, 0x69, + 0x2d, 0x8a, 0xc1, 0x6a, 0x7b, 0x9c, 0x59, 0x1c, 0xc6, 0x09, + 0x3e, 0x88, 0xfe, 0x00, 0x5b, 0x68, 0xfe, 0x00, 0x5b, 0x68, + 0x01, 0xff, 0xa4, 0x97, 0x62, 0xd2, 0xf9, 0xdf, 0x04, 0x54, + 0x66, 0xcf, 0x69, 0x13, 0x3e, 0x79, 0xc4, 0xa3, 0x28, 0x1c, + 0x81, 0xb4, 0x86, 0xa5, 0xc4, 0xa4, 0xa8, 0x11, 0xc4, 0xa4, + 0xa0, 0x11, 0x3b, 0x5b, 0x5f, 0xee, 0xbe, 0x03, 0x85, 0x09, + 0x4c, 0x70, 0xa5, 0x8a, 0x8a, 0xe9, 0x64, 0x34, 0x4d, 0x6b, + 0x08, 0xe0, 0x6f, 0x60, 0xdc, 0x8c, 0x4f, 0x72, 0xc8, 0xa4, + 0x4f, 0x70, 0xc8, 0xac, 0xb0, 0x8f, 0x37, 0x53, 0xd0, 0xd6, + 0xbe, 0x82, 0x0b, 0x60, 0xbc, 0x0b, 0xea, 0xc9, 0x00, 0xb8, + 0x4d, 0xf7, 0xc5, 0x2b, 0x43, 0xc2, 0xcd, 0x2c, 0x4b, 0x4a, + 0x85, 0x16, 0x4b, 0xc8, 0xc5, 0x16, 0xb4, 0x37, 0x3a, 0xe9, + 0x1f, 0x07, 0x35, 0x29, 0x54, 0x16, 0x57, 0xfc, 0xac, 0x94, + 0x3b, 0xf2, 0xb7, 0x54, 0xa6, 0x89, 0xc4, 0xa5, 0x94, 0x63, + 0x85, 0x87, 0xe3, 0xe7, 0x85, 0x87, 0xa2, 0xe3, 0x7a, 0x78, + 0x5d, 0x1c, 0x11, 0xa7, 0xf8, 0x78, 0x8c, 0x11, 0xa1, 0xe8, + 0x75, 0xbf, 0x6e, 0x3f, 0x05, 0xe7, 0x2d, 0xae, 0x9e, 0xed, + 0x9a, 0x32, 0xd1, 0xef, 0xdb, 0x22, 0xd1, 0xef, 0x9b, 0x22, + 0x2e, 0x10, 0x64, 0xdd, 0x00, 0xb6, 0x03, 0x5d, 0x88, 0x5b, + 0x8f, 0xc7, 0x71, 0x40, 0x83, 0x28, 0x6f, 0x1d, 0xf3, 0xf3, + 0x7c, 0x40, 0xd4, 0xe9, 0x4c, 0x51, 0xc8, 0xe3, 0x4c, 0x51, + 0xc4, 0xe3, 0xb3, 0xae, 0x3b, 0x1c, 0xa8, 0x94, 0x08, 0x8f, + 0x88, 0x6d, 0x96, 0x3d, 0xcd, 0x50, 0xa6, 0xf4, 0x58, 0x41, + 0xd7, 0xa1, 0x58, 0x3a, 0x2d, 0x4e, 0x74, 0x78, 0x2f, 0xcc, + 0x74, 0x78, 0x2f, 0xcc, 0x8b, 0x87, 0xd0, 0x33, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0xca, 0xd3, 0x0c, 0x83, 0x34, 0xb6, 0x8c, 0x65, 0xb7, 0x0f, + 0x20, 0x7d, 0xf7, 0xaa, 0x57, 0xc3, 0x1b, 0x4a, 0xb4, 0xcf, + 0x6b, 0x2a, 0xb4, 0x76, 0x7b, 0x2a, 0xb4, 0x76, 0x84, 0xd5, + 0x4b, 0x89, 0x47, 0xe6, 0x1e, 0xd2, 0x99, 0x2c, 0x18, 0xf7, + 0x80, 0x02, 0x61, 0x8a, 0x12, 0xfc, 0x89, 0xa3, 0x99, 0x93, + 0x64, 0xec, 0x8d, 0xb2, 0xe1, 0xf7, 0x89, 0xb3, 0xe1, 0xf7, + 0x76, 0x4c, 0x1e, 0x08, 0x1f, 0xff, 0x88, 0x4b, 0x72, 0x31, + 0x0e, 0x14, 0xd1, 0x68, 0x91, 0x9d, 0x2d, 0x90, 0xa8, 0x8d, + 0xc1, 0x85, 0xf8, 0x6e, 0x14, 0x80, 0xb2, 0x6d, 0x04, 0x80, + 0xb8, 0x6d, 0xfb, 0x7f, 0x47, 0x92, 0x6c, 0x25, 0xfe, 0xbb, + 0x22, 0x74, 0xac, 0x32, 0x08, 0xd0, 0xb9, 0x98, 0x8a, 0x2c, + 0xc9, 0xba, 0xc4, 0x03, 0x70, 0x24, 0xcc, 0x07, 0xbd, 0x38, + 0xcc, 0x07, 0xbc, 0x38, 0x33, 0xf8, 0x43, 0xc7, 0x03, 0x8f, + 0x12, 0x85, 0x7e, 0xc2, 0xa2, 0x58, 0x2e, 0xdf, 0xee, 0xd9, + 0x5a, 0x4e, 0x35, 0x0f, 0xdc, 0x19, 0x68, 0xc3, 0x56, 0x9a, + 0x01, 0x5b, 0x5e, 0x1a, 0x41, 0x5b, 0xa1, 0xe5, 0xbe, 0xa4, + 0x61, 0x55, 0xb5, 0x36, 0x7c, 0xaf, 0x79, 0x28, 0xee, 0x65, + 0x4c, 0x17, 0x29, 0xa6, 0x9a, 0xe1, 0xdb, 0xd6, 0xfa, 0x83, + 0x5f, 0xe8, 0xac, 0x29, 0x5d, 0xc6, 0xa8, 0x29, 0xa2, 0x39, + 0x57, 0xd6, 0xf4, 0xa1, 0x69, 0x75, 0x8b, 0x66, 0x66, 0xbd, + 0xe9, 0xd5, 0x3f, 0xda, 0x69, 0x1e, 0x0a, 0x95, 0x47, 0xe9, + 0x00, 0x5b, 0xa3, 0xe0, 0x79, 0x0e, 0xa3, 0xe8, 0x58, 0x1a, + 0x5c, 0x17, 0xa7, 0xe5, 0xc2, 0x17, 0xe0, 0xda, 0x9e, 0x76, + 0x68, 0x43, 0x21, 0xd1, 0xff, 0x6c, 0x24, 0x85, 0x79, 0x50, + 0x75, 0xf4, 0x02, 0xcb, 0xe5, 0xfc, 0x44, 0xe7, 0x65, 0xf4, + 0x40, 0xee, 0x9a, 0x0b, 0xbf, 0x11, 0x01, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x07, 0x5f, + 0x4b, 0x87, 0xac, 0x0d, 0xca, 0xed, 0x8e, 0x1c, 0x34, 0xe7, + 0xaa, 0x88, 0xa2, 0x36, 0x5c, 0x47, 0xa8, 0xd2, 0x00, 0x04, + 0xeb, 0x96, 0x04, 0x04, 0xea, 0x96, 0xfb, 0xfb, 0x15, 0x69, + 0x0c, 0x78, 0xa1, 0x71, 0x29, 0x4b, 0x5e, 0x7f, 0x2a, 0xdd, + 0x8e, 0x99, 0xc7, 0x3a, 0x91, 0x94, 0xee, 0x9b, 0x1d, 0x25, + 0xbe, 0x11, 0x15, 0x00, 0xbe, 0x19, 0x1d, 0x00, 0x41, 0xe6, + 0xe2, 0xff, 0x88, 0xdb, 0x6b, 0x02, 0x47, 0xe6, 0x35, 0xe8, + 0xa7, 0x9b, 0x5b, 0x99, 0xc6, 0xb8, 0xd7, 0xa2, 0x08, 0x03, + 0x76, 0x40, 0xe0, 0x97, 0xfb, 0xba, 0xc0, 0x97, 0xfb, 0xaa, + 0x3f, 0x68, 0x04, 0x55, 0x4a, 0x42, 0x8e, 0xa3, 0x33, 0x66, + 0xa3, 0x39, 0x4e, 0xc0, 0xf9, 0x7e, 0x05, 0x86, 0x00, 0x34, + 0x8b, 0x7f, 0x5e, 0x3b, 0x80, 0x6f, 0x5c, 0xbb, 0x81, 0x6f, + 0x5c, 0xbb, 0x7e, 0x90, 0xa3, 0x44, 0xea, 0xb7, 0xac, 0x08, + 0x62, 0x5d, 0x4a, 0x25, 0x38, 0xd8, 0xef, 0xb8, 0x15, 0xa7, + 0xe9, 0xda, 0x80, 0xcf, 0x71, 0x23, 0x16, 0xa6, 0x3b, 0x73, + 0x14, 0xae, 0x7b, 0x73, 0xeb, 0x51, 0x84, 0x8c, 0x7a, 0x61, + 0x8d, 0x92, 0x48, 0x9f, 0xd7, 0x0e, 0x62, 0x8e, 0x5a, 0x58, + 0x47, 0x60, 0x35, 0x9c, 0x5a, 0x6e, 0x10, 0x2f, 0x0a, 0x19, + 0x1c, 0x3f, 0x0a, 0x19, 0x1c, 0x3f, 0xf5, 0xe6, 0xe3, 0xc0, + 0x07, 0x93, 0x9e, 0x91, 0x7b, 0x6d, 0x0a, 0x4a, 0x2a, 0x21, + 0xdb, 0xfb, 0x40, 0x1c, 0x96, 0xff, 0xa1, 0x8e, 0x14, 0xde, + 0x12, 0xff, 0x30, 0x7e, 0x02, 0xff, 0x12, 0xfe, 0xfd, 0x00, + 0xed, 0x01, 0x42, 0x11, 0x91, 0xaa, 0xfe, 0x89, 0x1f, 0x1a, + 0x9b, 0xb7, 0xb2, 0xf6, 0xef, 0x73, 0x92, 0x49, 0x8d, 0x84, + 0xcc, 0x21, 0x98, 0x86, 0x98, 0x06, 0x98, 0x86, 0x98, 0x02, + 0x67, 0x79, 0x67, 0xfd, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, + 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x38, 0xcd, 0x21, 0x7b, + 0x6a, 0xaf, 0x7c, 0xf0, 0xc4, 0x58, 0x07, 0x7f, 0x2d, 0xfb, + 0xdb, 0xfe, 0xa7, 0x81, 0x9d, 0x89, 0x8d, 0xd9, 0xd9, 0xca, + 0xad, 0xd9, 0xd9, 0xca, 0x52, 0x26, 0x26, 0x35, 0x26, 0xe5, + 0xf5, 0xfe, 0x3b, 0xa4, 0x71, 0x1b, 0x44, 0xcb, 0xfd, 0xb6, + 0x9a, 0xf3, 0x27, 0x22, 0xc8, 0xfa, 0x78, 0x6c, 0xe9, 0xfa, + 0x6e, 0x74, 0xe8, 0xfa, 0x6e, 0x74, 0x17, 0x05, 0x91, 0x8b, + 0x93, 0x49, 0xa2, 0x64, 0xfc, 0x78, 0x4b, 0xb5, 0x20, 0x51, + 0x90, 0xb5, 0x4e, 0x65, 0x9e, 0xa3, 0x28, 0xa0, 0x04, 0xba, + 0x40, 0xa6, 0x48, 0x39, 0x40, 0xa6, 0x48, 0x39, 0xbf, 0x59, + 0xb7, 0xc6, 0x2f, 0xf4, 0xdf, 0x7b, 0x46, 0x8f, 0x30, 0x10, + 0x65, 0x59, 0x79, 0x8e, 0xc7, 0x96, 0xe4, 0xed, 0x3f, 0x2b, + 0x6d, 0x9f, 0xae, 0xad, 0xe9, 0x99, 0xae, 0xaf, 0x69, 0x9d, + 0x51, 0x50, 0x96, 0x62, 0xb9, 0x23, 0x8e, 0xa3, 0x0b, 0x15, + 0x87, 0x3a, 0x9b, 0x56, 0x2d, 0x71, 0x0e, 0x35, 0xb6, 0xea, + 0x8d, 0xce, 0xa1, 0x29, 0x8e, 0x2a, 0xfa, 0x0b, 0x8e, 0x0a, + 0xea, 0x09, 0x71, 0xf5, 0x15, 0xf6, 0x61, 0x8e, 0xce, 0xa5, + 0x47, 0xce, 0x20, 0x70, 0x3b, 0xb3, 0x8b, 0xa1, 0x0b, 0xbe, + 0x46, 0x5f, 0x2a, 0x45, 0xdc, 0x1b, 0x8b, 0x9a, 0x10, 0xbf, + 0x8b, 0x9a, 0x90, 0xbf, 0x74, 0x65, 0x6f, 0x40, 0xfd, 0x99, + 0x2b, 0x2c, 0x34, 0xd2, 0x98, 0x6c, 0xa2, 0x96, 0x7f, 0xeb, + 0x01, 0x7f, 0xce, 0xf3, 0x57, 0xde, 0x3a, 0xbc, 0x73, 0xbe, + 0x1d, 0xd9, 0x73, 0xbe, 0x1f, 0xd9, 0x8c, 0x41, 0xe0, 0x26, + 0xce, 0xa8, 0xec, 0x37, 0xd6, 0x13, 0x47, 0xb2, 0x58, 0xbd, + 0x88, 0xa5, 0x22, 0xbb, 0x85, 0x61, 0xaf, 0xbd, 0x6d, 0x5a, + 0x32, 0x89, 0xed, 0x6b, 0x3a, 0x99, 0xed, 0x6b, 0xc5, 0x66, + 0x12, 0x94, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x7c, 0x06, 0x63, 0x8a, 0x5e, 0x18, + 0xbb, 0x88, 0x3a, 0x7a, 0xf9, 0xd3, 0x4d, 0x85, 0xfe, 0x2a, + 0x19, 0x8f, 0x50, 0xc3, 0xcd, 0x23, 0x9f, 0xcc, 0xcd, 0x2b, + 0xdf, 0xce, 0x32, 0xd4, 0x20, 0x31, 0x81, 0x32, 0xe7, 0x3e, + 0x93, 0x3a, 0x17, 0x89, 0x21, 0x48, 0xf5, 0xd7, 0x60, 0x44, + 0x37, 0x04, 0x78, 0x53, 0xb3, 0xed, 0xb0, 0xcc, 0x3e, 0xad, + 0xb0, 0xc4, 0x36, 0xad, 0x4f, 0x3b, 0xc9, 0x52, 0x3a, 0x01, + 0x6b, 0xa2, 0xf2, 0x11, 0x50, 0x3d, 0x30, 0xb4, 0x5e, 0xfe, + 0x87, 0x19, 0x58, 0x7c, 0x7d, 0x90, 0xa4, 0x7a, 0xb9, 0x3c, + 0xb8, 0xf6, 0xb9, 0x3c, 0xb8, 0xfe, 0x46, 0xc3, 0x47, 0x01, + 0xbb, 0xb5, 0xfc, 0x72, 0xc6, 0x36, 0x7c, 0xbd, 0x08, 0x16, + 0xf8, 0x39, 0x0e, 0xcf, 0xed, 0xa8, 0x1a, 0x8f, 0xd0, 0x19, + 0x53, 0xe7, 0x55, 0x39, 0x13, 0xe7, 0x55, 0x39, 0xec, 0x18, + 0xaa, 0xc6, 0xc2, 0x10, 0x66, 0xbf, 0x83, 0xbf, 0x7a, 0x46, + 0x84, 0xe2, 0x90, 0xf9, 0x16, 0xf6, 0x0d, 0x2e, 0x1c, 0x8f, + 0xb0, 0x81, 0x08, 0x96, 0xf4, 0x1b, 0x18, 0x96, 0xf4, 0x1b, + 0xe7, 0x69, 0x0b, 0xe4, 0x7f, 0x88, 0xfd, 0xa9, 0xaa, 0x9c, + 0xb8, 0x31, 0x91, 0xf0, 0xe1, 0xa6, 0xe2, 0x4e, 0x8d, 0x99, + 0x15, 0xbe, 0x00, 0x0c, 0x79, 0xfa, 0x69, 0x97, 0x79, 0xfe, + 0x49, 0x95, 0x86, 0x01, 0xb6, 0x6a, 0xc8, 0xde, 0x64, 0x2c, + 0x07, 0x35, 0xdf, 0x26, 0x62, 0x1f, 0xa3, 0xc3, 0x95, 0xfc, + 0x2d, 0x04, 0x46, 0x90, 0x31, 0xbd, 0x25, 0x7d, 0x73, 0x0c, + 0x25, 0x7c, 0x73, 0x0c, 0xda, 0x83, 0x8c, 0xf3, 0xfe, 0x6b, + 0xd7, 0x46, 0x86, 0xf6, 0x0b, 0x5e, 0x55, 0xde, 0x4c, 0x5d, + 0x67, 0xec, 0x0f, 0x6c, 0x7c, 0x97, 0x6a, 0x2a, 0xe6, 0x8f, + 0x2a, 0xa3, 0x66, 0xdf, 0x2a, 0xab, 0x99, 0x20, 0xd5, 0x54, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, + 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, + 0x00, 0x00, 0x12, 0x00, 0x77, 0x8b, 0xee, 0x27, 0x42, 0x81, + 0x7c, 0x43, 0x31, 0xf3, 0x45, 0x89, 0xed, 0x09, 0x18, 0x79, + 0xda, 0x83, 0xce, 0xf8, 0x4f, 0x03, 0xce, 0xf8, 0xdb, 0x03, + 0x31, 0x07, 0x24, 0xfc, 0x84, 0xb3, 0x04, 0x7b, 0x22, 0xf6, + 0xa6, 0x45, 0x8a, 0x6a, 0xcb, 0x6f, 0x5e, 0x6b, 0x31, 0x55, + 0xe7, 0x2d, 0x17, 0x2a, 0xf4, 0x03, 0x33, 0x3b, 0xf6, 0x43, + 0x33, 0x3b, 0x09, 0xbc, 0xcc, 0xc4, 0x16, 0x4c, 0x18, 0xd8, + 0xc8, 0xa2, 0xa8, 0x45, 0xed, 0xd9, 0xc8, 0x6a, 0xe1, 0x39, + 0x8c, 0x26, 0x2c, 0x21, 0x8e, 0x26, 0x40, 0xf1, 0x86, 0x04, + 0x78, 0x71, 0x8e, 0x26, 0x87, 0x8e, 0x71, 0xd9, 0x61, 0x1e, + 0xb0, 0x82, 0x4b, 0x54, 0xb5, 0xde, 0x8d, 0xba, 0x26, 0xc7, + 0xbd, 0x54, 0xc7, 0x6f, 0x2c, 0x1f, 0x50, 0x38, 0x18, 0x5d, + 0x40, 0x3e, 0x18, 0x5d, 0x40, 0x3e, 0xe7, 0xa2, 0xbf, 0xc1, + 0x2d, 0x17, 0x5a, 0xb0, 0xa9, 0xdd, 0x60, 0x10, 0xe9, 0xd3, + 0x15, 0x8a, 0x7d, 0x94, 0x20, 0xf1, 0x8e, 0x0c, 0xdb, 0x48, + 0xef, 0x4b, 0xab, 0x9e, 0xef, 0x4b, 0xab, 0xde, 0x10, 0xb4, + 0x54, 0x21, 0x2c, 0x3e, 0x3a, 0x45, 0x53, 0x0e, 0x7f, 0x2f, + 0x44, 0x31, 0x55, 0x48, 0xec, 0x31, 0x2b, 0x38, 0xb4, 0xa0, + 0xe1, 0x0a, 0xbc, 0x0b, 0x61, 0x2b, 0xbc, 0x03, 0x61, 0x6b, + 0x43, 0xfc, 0x9e, 0xd4, 0x6c, 0x85, 0xa1, 0x59, 0x6c, 0x25, + 0x95, 0x9c, 0x63, 0xd9, 0xbc, 0x35, 0x18, 0x03, 0x89, 0x6b, + 0xc7, 0xd2, 0xf5, 0xee, 0xe3, 0x71, 0xc5, 0xaa, 0xe3, 0x51, + 0xc5, 0xea, 0x1c, 0xae, 0x3a, 0x15, 0x05, 0x1b, 0x2c, 0xd0, + 0x30, 0xc2, 0x94, 0x31, 0x54, 0xc8, 0x8b, 0x8f, 0xde, 0x62, + 0x1d, 0x58, 0x99, 0x77, 0x2c, 0xc9, 0x1c, 0xf3, 0x34, 0x4d, + 0x1c, 0xf3, 0x3c, 0x4d, 0xe3, 0x0c, 0xc3, 0xb2, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, + 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x14, 0x2e, 0x50, 0x55, 0x21, 0x4f, 0xb4, 0x93, 0x75, 0x95, + 0x3f, 0x2f, 0x6e, 0x70, 0x02, 0x44, 0x9e, 0xd4, 0xee, 0x10, + 0xeb, 0x75, 0x42, 0x4c, 0xeb, 0x75, 0x42, 0x44, 0x14, 0x8a, + 0xbd, 0xbb, 0xef, 0x2d, 0xb8, 0x77, 0x9f, 0x2c, 0x1d, 0x29, + 0xe0, 0x05, 0x9c, 0x5a, 0xcf, 0xf6, 0xf6, 0x79, 0x4b, 0x06, + 0xac, 0xef, 0xaa, 0x94, 0xac, 0xed, 0xca, 0x14, 0xac, 0xef, + 0x35, 0xeb, 0x53, 0x10, 0xb9, 0x22, 0x21, 0xcc, 0x95, 0x41, + 0x36, 0xec, 0x7c, 0x83, 0x66, 0xe0, 0x36, 0x48, 0x65, 0xe4, + 0x7a, 0xf2, 0xe2, 0x56, 0xb6, 0xf0, 0xe0, 0xee, 0xb6, 0xf0, + 0xe0, 0xee, 0x49, 0x0f, 0x1f, 0x11, 0x7d, 0x76, 0xd8, 0xa0, + 0xc1, 0x10, 0xb9, 0x4c, 0xcd, 0xb2, 0xa4, 0x27, 0x53, 0x97, + 0xe3, 0x7e, 0xe0, 0xfb, 0x95, 0x97, 0x61, 0x6a, 0x96, 0x1b, + 0x61, 0x7b, 0x96, 0x9b, 0x9e, 0x84, 0x69, 0x64, 0x3e, 0x37, + 0xa1, 0xb8, 0x3a, 0x09, 0xee, 0x34, 0x2a, 0xd8, 0x7a, 0x51, + 0x8b, 0x6c, 0xe8, 0x7d, 0x9c, 0x51, 0x8f, 0xc3, 0x90, 0x1d, + 0xbe, 0xc4, 0x90, 0x19, 0xbf, 0xc4, 0x6f, 0xe6, 0x40, 0x3b, + 0x13, 0xa1, 0x45, 0x1b, 0x0b, 0x8b, 0x22, 0xec, 0x34, 0x25, + 0x8e, 0x44, 0x8c, 0x9b, 0x72, 0x12, 0xb8, 0x8b, 0x5f, 0x54, + 0xb0, 0x70, 0x1a, 0x74, 0xb0, 0xba, 0x1a, 0x14, 0x4f, 0x45, + 0xe5, 0xeb, 0x52, 0xdc, 0x5b, 0x77, 0xdb, 0xa7, 0xac, 0x22, + 0x15, 0xf9, 0xd9, 0xa4, 0xc9, 0x6a, 0xf6, 0x9f, 0xb3, 0x62, + 0xd4, 0x57, 0xb1, 0x6a, 0xa9, 0xc5, 0xb1, 0x6a, 0xb9, 0xc5, + 0x4e, 0x95, 0x46, 0x3a, 0x82, 0xa5, 0x81, 0x62, 0x47, 0xa5, + 0xa6, 0xca, 0x90, 0x67, 0xee, 0x22, 0x57, 0x4d, 0x11, 0x48, + 0xe9, 0x55, 0x2d, 0xf7, 0x7a, 0x17, 0x29, 0x8e, 0x7a, 0x55, + 0x29, 0xce, 0x85, 0xaa, 0xd6, 0x31, 0x01, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, 0xea, + 0x42, 0x9b, 0x87, 0x51, 0xd4, 0xb1, 0x0d, 0xa3, 0x13, 0x96, + 0xed, 0xf5, 0x90, 0xce, 0x49, 0x6b, 0xd9, 0xb8, 0x19, 0x62, + 0x70, 0xb2, 0x19, 0x63, 0x50, 0xb2, 0xe6, 0x9c, 0xaf, 0x4d, + 0x25, 0x1a, 0x7e, 0x0d, 0x88, 0x4b, 0x2e, 0xb3, 0xea, 0x33, + 0x81, 0xe3, 0xb2, 0x90, 0xcb, 0x97, 0xd5, 0x33, 0x13, 0x84, + 0xb4, 0x03, 0x11, 0x31, 0xb4, 0x03, 0x11, 0x10, 0x4b, 0xfc, + 0xee, 0xef, 0x5a, 0x56, 0xd7, 0x2a, 0xc2, 0x83, 0x8a, 0x07, + 0xa1, 0x6f, 0xf9, 0x84, 0x26, 0x21, 0x67, 0xa5, 0xe2, 0x8a, + 0xc6, 0xb3, 0x52, 0x0e, 0xce, 0x21, 0x52, 0x0e, 0xce, 0x21, + 0xad, 0xf1, 0x31, 0xde, 0x28, 0x6a, 0x17, 0x5b, 0x92, 0xd0, + 0xf5, 0x33, 0xfa, 0x22, 0x54, 0xf7, 0x82, 0xc3, 0x71, 0x73, + 0x80, 0x48, 0x1f, 0x7a, 0x9c, 0x70, 0x74, 0xba, 0x98, 0x70, + 0x55, 0xba, 0x67, 0x8f, 0xaa, 0x45, 0x28, 0x9f, 0xb7, 0xcc, + 0x72, 0x83, 0x2a, 0xe7, 0x9c, 0xa6, 0xa3, 0x8f, 0x38, 0xe7, + 0x6d, 0x7d, 0x3d, 0xb0, 0x83, 0xfb, 0x23, 0xf1, 0x82, 0xff, + 0x2b, 0xb1, 0x83, 0xff, 0xd4, 0x4e, 0x7c, 0x00, 0x7c, 0x79, + 0x36, 0xcc, 0x2d, 0xf5, 0xae, 0x00, 0x8d, 0x7b, 0xa7, 0xcf, + 0xb2, 0xde, 0xa2, 0x7c, 0xf2, 0xd5, 0x95, 0x0d, 0x94, 0xb0, + 0x75, 0x26, 0x96, 0xf0, 0x35, 0x24, 0x69, 0x0f, 0xca, 0xdb, + 0x20, 0x9d, 0x8f, 0x24, 0xc9, 0x97, 0x2b, 0x1e, 0xf5, 0xaf, + 0x7a, 0x22, 0xa6, 0xa7, 0x1e, 0x76, 0xf4, 0x95, 0x7e, 0x7a, + 0x3d, 0x97, 0x3e, 0xda, 0xbd, 0x97, 0x3e, 0xfa, 0x42, 0x68, + 0xc1, 0x05, 0x78, 0xe2, 0x57, 0x31, 0xcd, 0xe2, 0x53, 0x25, + 0x2a, 0x66, 0x68, 0x7d, 0x3d, 0x09, 0xcf, 0x8a, 0x29, 0xb7, + 0xe3, 0x4c, 0x0b, 0x77, 0x09, 0x01, 0x09, 0x77, 0x49, 0x01, + 0xf6, 0x88, 0xb6, 0xfe, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x98, 0xac, 0x21, 0x34, + 0xf3, 0xbb, 0x7f, 0x8f, 0x29, 0x3a, 0x0f, 0x0a, 0xb4, 0xb8, + 0x5d, 0x00, 0x89, 0x59, 0xd7, 0x43, 0x0b, 0x3a, 0x64, 0x19, + 0x09, 0x3a, 0x65, 0x08, 0xf6, 0xc5, 0x9a, 0xf7, 0xb2, 0x0d, + 0xb7, 0xbd, 0xbc, 0x0d, 0x50, 0xca, 0xd4, 0x1d, 0x93, 0x44, + 0xc0, 0xa0, 0x14, 0x0f, 0xfe, 0x7a, 0x3c, 0x1b, 0x37, 0xba, + 0x61, 0x77, 0x37, 0xba, 0x70, 0x7f, 0xc8, 0x45, 0x8f, 0x80, + 0x2e, 0x33, 0xd8, 0x88, 0x61, 0xa4, 0xce, 0x30, 0xe1, 0xea, + 0x8c, 0x6f, 0xf2, 0x1f, 0x2d, 0xaa, 0xb0, 0x7b, 0x9c, 0x43, + 0xd1, 0xff, 0xed, 0x17, 0xd0, 0xff, 0xad, 0x13, 0x2f, 0x00, + 0x52, 0xec, 0x9c, 0xda, 0x41, 0x4d, 0xaa, 0x56, 0xab, 0x95, + 0x5e, 0x54, 0xb2, 0xae, 0x30, 0xcd, 0x2c, 0x5b, 0x12, 0x29, + 0xe0, 0xe4, 0x02, 0x41, 0xbb, 0x65, 0x02, 0x49, 0xb9, 0x64, + 0xfd, 0xb6, 0x46, 0x9b, 0x35, 0xf0, 0xb1, 0x56, 0xa9, 0x8e, + 0x45, 0xa5, 0xe7, 0x9e, 0xf1, 0xc1, 0x65, 0xa3, 0x38, 0x96, + 0x73, 0x29, 0xa8, 0x51, 0x54, 0x77, 0x31, 0x4a, 0x65, 0x77, + 0xb1, 0x43, 0x9a, 0x88, 0x4e, 0xbc, 0x32, 0x24, 0x99, 0x19, + 0xd4, 0x08, 0x13, 0x2f, 0xbf, 0x5b, 0x34, 0xfb, 0x2f, 0x93, + 0xd1, 0x9b, 0xdc, 0x70, 0x6e, 0x19, 0x56, 0x53, 0x44, 0xf3, + 0x5e, 0x53, 0x44, 0x7b, 0xa1, 0xac, 0xbb, 0x84, 0x08, 0xd9, + 0x8e, 0x10, 0xb1, 0x88, 0x4e, 0x33, 0x86, 0xdd, 0xc1, 0xbc, + 0x0a, 0x83, 0x84, 0x68, 0x75, 0x6f, 0x67, 0x77, 0x44, 0x85, + 0x07, 0x76, 0x44, 0x8f, 0x07, 0x77, 0xbb, 0x70, 0xf8, 0x88, + 0x83, 0x18, 0x11, 0xdb, 0xf2, 0xea, 0x5e, 0x78, 0x9d, 0xb4, + 0xa7, 0xd0, 0x77, 0x32, 0xfd, 0xb2, 0x90, 0xad, 0xb7, 0xdf, + 0x30, 0x02, 0xff, 0xd0, 0x20, 0x00, 0xff, 0xd0, 0xcf, 0xff, + 0x00, 0x2f, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x80, 0xde, 0x9b, 0x24, 0x79, 0xde, + 0x52, 0x83, 0xf4, 0x1f, 0x16, 0x0a, 0xa5, 0xf0, 0x7a, 0xfc, + 0xd9, 0x0d, 0x5f, 0x0d, 0xf9, 0x9a, 0x33, 0x4b, 0xf9, 0x9a, + 0x33, 0x09, 0x06, 0x65, 0xcc, 0xf6, 0x35, 0x08, 0x23, 0xaa, + 0x06, 0xb1, 0x5b, 0x50, 0xdf, 0xa4, 0xa3, 0xcd, 0xc0, 0x08, + 0xe6, 0x85, 0xcd, 0xb1, 0x2d, 0x1a, 0xdf, 0x32, 0xe6, 0x11, + 0xcf, 0x30, 0xa7, 0x11, 0x30, 0xcf, 0x58, 0xee, 0x4c, 0xad, + 0x9a, 0x46, 0xe1, 0x56, 0x69, 0x88, 0x9a, 0xbe, 0xe3, 0x93, + 0xa5, 0x8d, 0x59, 0x33, 0x0a, 0x86, 0x13, 0x46, 0x08, 0xa6, + 0x93, 0x86, 0x08, 0xa6, 0x93, 0x06, 0xf7, 0x59, 0x6c, 0xf9, + 0xc0, 0x96, 0x57, 0x1e, 0xef, 0xc6, 0x33, 0x25, 0x5d, 0x30, + 0x18, 0x77, 0x04, 0x7f, 0x63, 0x76, 0xc3, 0x81, 0x5d, 0x55, + 0xdf, 0xe5, 0xda, 0x74, 0xd7, 0xe5, 0xda, 0x74, 0x28, 0x1a, + 0x25, 0x8b, 0x58, 0xa9, 0xfa, 0x1c, 0xd9, 0xb2, 0xaa, 0xa8, + 0x52, 0x74, 0xba, 0x35, 0x97, 0xc3, 0x11, 0x61, 0x0d, 0x89, + 0x5b, 0x70, 0x11, 0xed, 0x57, 0x73, 0x15, 0xed, 0x53, 0x71, + 0xea, 0x12, 0xac, 0x8e, 0xaf, 0x5b, 0xae, 0xc5, 0x6d, 0x5b, + 0x68, 0xc1, 0x77, 0x6d, 0xba, 0x91, 0xfb, 0xd0, 0x12, 0x23, + 0xbe, 0x02, 0x12, 0xfc, 0x2a, 0xb2, 0x88, 0xfc, 0xaa, 0x92, + 0x98, 0xfc, 0x55, 0x6d, 0x67, 0x03, 0xaf, 0x1b, 0xbf, 0x3e, + 0xe4, 0x3c, 0x17, 0x8b, 0x4d, 0x1f, 0x23, 0xa6, 0x59, 0x00, + 0x3b, 0x4e, 0x54, 0x67, 0xe3, 0xc9, 0x5d, 0x46, 0x01, 0x4b, + 0x5d, 0x44, 0x21, 0x4b, 0xa2, 0xbb, 0xde, 0xb4, 0xcf, 0x48, + 0x2a, 0x76, 0x2d, 0xb7, 0x31, 0x7f, 0xc7, 0x35, 0xb1, 0x88, + 0x94, 0x5f, 0xa7, 0xe9, 0xde, 0xb7, 0xbf, 0x5a, 0x16, 0x37, + 0xb7, 0xdd, 0x96, 0x37, 0xb7, 0xd9, 0x69, 0xc8, 0x48, 0x26, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, + 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, + 0x00, 0x00, 0x35, 0x0b, 0x81, 0x6e, 0x7b, 0xa4, 0x51, 0x57, + 0x5a, 0xb1, 0xff, 0xd2, 0x53, 0x0a, 0xdc, 0xfc, 0x94, 0x89, + 0x24, 0x1a, 0x00, 0x9e, 0x78, 0x3b, 0x10, 0x9b, 0x38, 0x3b, + 0xef, 0x64, 0xc7, 0xc4, 0xa4, 0x4f, 0xee, 0x1a, 0x58, 0xb4, + 0x30, 0x49, 0x03, 0xc1, 0x50, 0xdc, 0xb1, 0xec, 0x5b, 0x94, + 0x83, 0x06, 0x8e, 0x2c, 0x43, 0x84, 0xd9, 0xac, 0x03, 0x84, + 0xda, 0xac, 0xfc, 0x7b, 0x25, 0x53, 0x0c, 0x64, 0x40, 0xb9, + 0x49, 0x48, 0x41, 0x1d, 0xca, 0x4a, 0x67, 0x57, 0x1c, 0x2e, + 0x2b, 0x2d, 0xb4, 0x15, 0x0b, 0xb5, 0x7c, 0x80, 0x96, 0x9d, + 0x7c, 0x80, 0x9a, 0x9d, 0x83, 0x7f, 0x65, 0x62, 0x57, 0x29, + 0x49, 0x40, 0xbf, 0x1a, 0xbc, 0xa9, 0xbb, 0xa4, 0xb0, 0xa9, + 0xe1, 0x39, 0x3b, 0xd6, 0xc7, 0x04, 0x4f, 0xc1, 0x41, 0x2e, + 0x2f, 0x85, 0x41, 0x2c, 0x2f, 0xc5, 0xbe, 0xd3, 0xd0, 0x3a, + 0xbd, 0x99, 0x11, 0x63, 0xd0, 0xbd, 0x9f, 0xf4, 0xda, 0x71, + 0xf1, 0xbd, 0xae, 0xc2, 0x1f, 0xf7, 0x4e, 0x12, 0x29, 0x54, + 0x20, 0x52, 0x79, 0xde, 0x28, 0x52, 0x79, 0xd6, 0xd7, 0xad, + 0x86, 0x29, 0x3d, 0xe0, 0xe2, 0x58, 0xe4, 0xb3, 0x40, 0x94, + 0x24, 0xe9, 0x10, 0xea, 0x70, 0x36, 0x37, 0x84, 0x37, 0xf6, + 0xd6, 0x32, 0x35, 0xfc, 0x0a, 0xba, 0x35, 0xfc, 0x1a, 0xba, + 0xca, 0x03, 0xe5, 0x45, 0x5c, 0xd7, 0x39, 0x71, 0x09, 0x3b, + 0x31, 0x93, 0x18, 0x99, 0x9b, 0x43, 0x33, 0x39, 0x62, 0x7e, + 0xd9, 0x02, 0x22, 0xed, 0xd9, 0x08, 0x2a, 0xfe, 0xd9, 0x08, + 0x22, 0xff, 0x26, 0xf7, 0xdd, 0x00, 0xf8, 0x80, 0xe6, 0x7a, + 0x12, 0xe5, 0x3b, 0x51, 0x04, 0xf9, 0xcc, 0x3f, 0xcb, 0x42, + 0xeb, 0x28, 0xae, 0xee, 0x02, 0xd5, 0x0d, 0x18, 0x27, 0x15, + 0x0f, 0x18, 0x26, 0x15, 0xf0, 0xe7, 0xd9, 0xea, 0x01, 0x00, + 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x4b, 0x1d, 0x31, 0xeb, 0x9e, 0xea, 0x2f, 0x38, 0x01, 0x30, + 0xbe, 0x26, 0x94, 0x22, 0x25, 0x73, 0x29, 0x04, 0xe7, 0x8a, + 0x85, 0x80, 0x77, 0xfe, 0x84, 0x80, 0x77, 0xfe, 0x7b, 0x7f, + 0x88, 0x01, 0x9d, 0x4e, 0xd9, 0xec, 0xa2, 0xd8, 0xd5, 0xa9, + 0x8d, 0x42, 0x0f, 0x5e, 0x6f, 0xc6, 0xee, 0xfe, 0xca, 0x2c, + 0xd6, 0x5f, 0x66, 0xcd, 0xcf, 0xf2, 0x66, 0x8d, 0xcf, 0xde, + 0x99, 0x72, 0x30, 0x21, 0xc2, 0xfb, 0xea, 0x85, 0xb3, 0x92, + 0xf2, 0xf9, 0xa3, 0xc8, 0x45, 0xd3, 0x7d, 0x19, 0xf6, 0xcd, + 0xd4, 0xc3, 0x45, 0xe7, 0x54, 0xe3, 0x47, 0xdf, 0x54, 0xc3, + 0x47, 0xdf, 0xab, 0x3c, 0xb8, 0x20, 0x21, 0x36, 0xfa, 0xa6, + 0x35, 0x15, 0x0e, 0xf0, 0x28, 0x44, 0xba, 0x93, 0x70, 0xc8, + 0x9e, 0xaf, 0x3c, 0x25, 0x31, 0x0c, 0xdc, 0x55, 0xf0, 0xee, + 0x1c, 0x45, 0xf0, 0xee, 0xe3, 0xba, 0x0f, 0x11, 0xe0, 0x28, + 0xf4, 0x7e, 0xe5, 0x04, 0xa8, 0xe5, 0x5e, 0x48, 0x1b, 0xc0, + 0x8e, 0x17, 0x05, 0xa3, 0x2d, 0xd0, 0x3c, 0xf0, 0x6d, 0x89, + 0xb4, 0xe0, 0x6d, 0x88, 0xb4, 0xe0, 0x92, 0x77, 0x4b, 0x1f, + 0xc2, 0x0f, 0x82, 0x73, 0xb7, 0x27, 0x88, 0x2e, 0x27, 0x3e, + 0x89, 0xfb, 0x61, 0x37, 0xdd, 0x66, 0xb7, 0x19, 0x1e, 0x36, + 0x03, 0x59, 0x1c, 0xee, 0x23, 0x19, 0x1c, 0xa6, 0xdc, 0xe6, + 0xe3, 0x59, 0xa0, 0x0c, 0x00, 0xd8, 0x55, 0xd9, 0x56, 0x47, + 0x6e, 0x8b, 0xc9, 0xb5, 0xd7, 0x39, 0xfb, 0x1a, 0x4d, 0xbc, + 0xe5, 0x65, 0x4c, 0x53, 0xc5, 0x60, 0x4c, 0x19, 0xe5, 0x60, + 0xb3, 0xe6, 0x1a, 0x9f, 0xf7, 0x25, 0x77, 0x24, 0x51, 0x25, + 0x46, 0x11, 0x38, 0x62, 0xc7, 0x6b, 0x52, 0x9a, 0x56, 0x9b, + 0x22, 0x56, 0xfa, 0xd4, 0xaa, 0xb2, 0x53, 0x0d, 0x2a, 0xb2, + 0x53, 0x0d, 0xd5, 0x4d, 0xac, 0xf2, 0x00, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x0e, 0x64, + 0x3e, 0x18, 0x3b, 0xcb, 0xeb, 0xf2, 0x02, 0x44, 0x7b, 0x05, + 0x15, 0x20, 0x2e, 0x45, 0x8f, 0x10, 0x33, 0xb6, 0x83, 0xe0, + 0xb2, 0x9d, 0x83, 0xe0, 0xb2, 0x9d, 0x7c, 0x1f, 0x4d, 0x62, + 0x8e, 0x8a, 0x04, 0x60, 0x17, 0x58, 0xc2, 0x72, 0x0f, 0x5a, + 0x00, 0x4e, 0xcc, 0xc9, 0x4f, 0xbf, 0xda, 0x59, 0x02, 0x39, + 0x4b, 0xd5, 0x76, 0x29, 0x4b, 0xd1, 0x56, 0x29, 0xb4, 0x2e, + 0xa9, 0xd6, 0x9f, 0x51, 0x50, 0xd6, 0xf7, 0x24, 0x06, 0xa5, + 0x0f, 0x2a, 0x25, 0xe3, 0x7b, 0xf1, 0x23, 0xb6, 0x2e, 0xa1, + 0xf2, 0xeb, 0xbe, 0xed, 0x60, 0xcf, 0xbe, 0xed, 0x60, 0x8f, + 0x41, 0x12, 0x9f, 0x70, 0x4a, 0xb0, 0x50, 0x89, 0xe3, 0xe3, + 0xd0, 0x22, 0x7e, 0x8f, 0x69, 0x3e, 0x35, 0x72, 0x52, 0xf7, + 0x35, 0x03, 0xed, 0xbf, 0xb5, 0x02, 0xcc, 0xbf, 0x35, 0x02, + 0xcc, 0xbf, 0xca, 0xfd, 0x33, 0x40, 0xb2, 0x0d, 0x23, 0xcc, + 0xf6, 0xcf, 0x89, 0xb3, 0x07, 0x63, 0x92, 0xad, 0x47, 0x3d, + 0x7d, 0xd3, 0xb3, 0x7e, 0xf0, 0x2c, 0xa7, 0x93, 0xe7, 0x98, + 0xa7, 0xbf, 0xf4, 0x89, 0x58, 0x40, 0x0b, 0x76, 0xda, 0x21, + 0x50, 0xb3, 0x08, 0x36, 0xcb, 0x8d, 0xd7, 0x74, 0xec, 0xaf, + 0x56, 0x85, 0x2c, 0xf6, 0x28, 0xab, 0xbf, 0xf8, 0xf4, 0x09, + 0x8b, 0xe2, 0xf4, 0x09, 0xaf, 0xe2, 0x0b, 0xf6, 0x50, 0x1d, + 0x56, 0x3e, 0xd4, 0x03, 0x57, 0x23, 0xf4, 0xa3, 0x10, 0xb0, + 0x8d, 0x06, 0x19, 0x69, 0x35, 0x6f, 0xfa, 0xc8, 0x37, 0x69, + 0x3f, 0x5d, 0x35, 0x6c, 0x3f, 0x88, 0x35, 0x6d, 0xc0, 0x77, + 0xca, 0x92, 0xc8, 0x3f, 0xce, 0x0c, 0xba, 0x1f, 0x44, 0xb7, + 0x68, 0xfb, 0xb8, 0x4a, 0xfa, 0x9a, 0x94, 0x72, 0x98, 0x40, + 0x89, 0xe2, 0x4f, 0x55, 0x98, 0xc2, 0xcf, 0x53, 0x98, 0xc2, + 0x30, 0xac, 0x67, 0x3d, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x0c, 0x43, 0x91, 0x3d, + 0xe4, 0x75, 0xe0, 0xb3, 0x42, 0x9e, 0x5c, 0x75, 0x28, 0x41, + 0x25, 0xfc, 0x3e, 0xa4, 0xc7, 0x67, 0x23, 0xc8, 0x44, 0x67, + 0x23, 0xc8, 0x44, 0x67, 0xdc, 0x37, 0xbb, 0x98, 0x18, 0xb7, + 0x3f, 0x2f, 0x0c, 0x34, 0x2e, 0xc8, 0x9f, 0x42, 0xa1, 0xc0, + 0x5b, 0x8a, 0xb0, 0x48, 0xc0, 0xbe, 0x45, 0x80, 0x4c, 0x3e, + 0xa0, 0x44, 0x4c, 0x3e, 0xa0, 0x40, 0xb3, 0xc1, 0x5f, 0xbf, + 0xb8, 0x25, 0xf4, 0xa7, 0x68, 0xb3, 0x3f, 0x24, 0x90, 0xf4, + 0xf8, 0x21, 0x7f, 0x86, 0x5d, 0xa6, 0xb4, 0xc9, 0x2b, 0x64, + 0xb9, 0xd0, 0xed, 0xac, 0xb9, 0xd0, 0xe9, 0x2c, 0x46, 0x2f, + 0x16, 0xd3, 0xd3, 0x0d, 0xa5, 0xf5, 0xb9, 0x05, 0xea, 0x11, + 0xfb, 0x92, 0xf6, 0x73, 0xc8, 0xea, 0xcd, 0xe8, 0x0e, 0xe0, + 0x65, 0x8f, 0xfc, 0x61, 0x14, 0xcc, 0xfc, 0x61, 0x54, 0xcc, + 0x03, 0x9e, 0xab, 0x33, 0xda, 0x88, 0xe9, 0xf2, 0xfd, 0xc8, + 0x19, 0x34, 0xde, 0x55, 0x52, 0x7b, 0xe8, 0xbe, 0xd3, 0xf8, + 0xa4, 0x55, 0x24, 0xc4, 0xe9, 0x85, 0xe7, 0xf9, 0xe9, 0x05, + 0x67, 0xfd, 0x16, 0xfa, 0x98, 0x02, 0xdd, 0xa3, 0x23, 0xec, + 0xd5, 0xf7, 0x75, 0x13, 0x5b, 0x8d, 0x54, 0x02, 0x6c, 0xc2, + 0x1e, 0x59, 0xc0, 0xfb, 0x5b, 0xc6, 0xf9, 0x5a, 0x77, 0xad, + 0xf8, 0xda, 0x7f, 0xe9, 0x07, 0x25, 0x80, 0x16, 0xaa, 0x2f, + 0xe7, 0xf3, 0x3b, 0x7d, 0x9d, 0x37, 0x97, 0x81, 0xa0, 0xa8, + 0x10, 0x43, 0xe4, 0x3a, 0x4f, 0xed, 0x38, 0xf2, 0x87, 0xe5, + 0x27, 0x36, 0x87, 0xe5, 0x25, 0x32, 0x78, 0x1a, 0xda, 0xcd, + 0x5d, 0x74, 0xe6, 0xf6, 0x2a, 0x7b, 0xd2, 0x57, 0x76, 0x48, + 0xe5, 0x26, 0x6b, 0x86, 0x70, 0x86, 0x56, 0xe3, 0x6a, 0xd7, + 0x12, 0x60, 0xce, 0x26, 0x16, 0x60, 0xea, 0x26, 0xe9, 0x9f, + 0x15, 0xd9, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x39, 0xda, 0x11, 0x7f, 0x2c, 0x42, + 0xe4, 0x4b, 0xb8, 0xe0, 0x90, 0xd0, 0xbb, 0x18, 0x04, 0xc2, + 0x7b, 0x8f, 0x86, 0x4d, 0xa5, 0x8d, 0xa6, 0x50, 0xa9, 0x8d, + 0x86, 0x40, 0x56, 0x72, 0x79, 0xbf, 0xe5, 0x18, 0x44, 0x8b, + 0x1d, 0x18, 0xd4, 0x81, 0xa8, 0xed, 0xc3, 0x76, 0x96, 0x3b, + 0xd8, 0x31, 0x74, 0x15, 0x2c, 0x58, 0x46, 0xf5, 0x3e, 0x55, + 0x46, 0x55, 0x3c, 0x55, 0xb9, 0xaa, 0xc3, 0xaa, 0xcf, 0xa1, + 0xf7, 0x76, 0x8d, 0x9c, 0xef, 0x9a, 0xde, 0x2b, 0x7a, 0x49, + 0xc1, 0xc1, 0x38, 0xc8, 0x63, 0x45, 0x42, 0xeb, 0x67, 0x8d, + 0xb7, 0x79, 0x67, 0x85, 0x32, 0x79, 0x98, 0x7a, 0xcd, 0x86, + 0x05, 0xc0, 0xc6, 0xa4, 0xd0, 0xb0, 0x70, 0xd0, 0xed, 0x54, + 0xea, 0x94, 0xf4, 0xaa, 0x1d, 0x75, 0x91, 0x86, 0x3e, 0x6e, + 0x1c, 0xeb, 0x0e, 0x6e, 0x94, 0xeb, 0x2e, 0x6e, 0x6b, 0x14, + 0xd1, 0x91, 0x6a, 0xde, 0x6a, 0xcb, 0x82, 0x57, 0xf1, 0x95, + 0x49, 0xff, 0xe4, 0xf4, 0xd4, 0x20, 0xcc, 0xbd, 0x2c, 0xa4, + 0x80, 0x77, 0x05, 0x0c, 0xdb, 0xbe, 0x05, 0x0c, 0xd9, 0x3e, + 0xfa, 0xf3, 0x26, 0xc1, 0x9f, 0x92, 0x00, 0x8b, 0x5c, 0xeb, + 0x6a, 0xd2, 0x90, 0xab, 0x56, 0x2a, 0xf7, 0xc0, 0x64, 0x11, + 0xc6, 0xbc, 0x97, 0x60, 0x90, 0xbc, 0x54, 0x40, 0x90, 0xbc, + 0x54, 0x40, 0x6f, 0x43, 0xab, 0xbf, 0x8a, 0xc4, 0xce, 0x3f, + 0xae, 0x5b, 0xc5, 0x96, 0x94, 0xa0, 0x67, 0xa2, 0xc7, 0x75, + 0x8d, 0x84, 0x30, 0xdb, 0xa1, 0x8b, 0x4e, 0xfb, 0xe1, 0xd8, + 0x4e, 0xfb, 0xa1, 0x88, 0xb1, 0x04, 0x5e, 0x77, 0x8a, 0x55, + 0xbf, 0xfb, 0x04, 0xfe, 0x21, 0x99, 0x89, 0xbe, 0x4a, 0x99, + 0xb5, 0x42, 0x06, 0x84, 0xbc, 0xe0, 0xf0, 0xfc, 0x85, 0x00, + 0x05, 0xc3, 0x85, 0x00, 0x04, 0xc3, 0x7a, 0xff, 0xfb, 0x3c, + 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x22, 0xda, 0x8d, 0x48, 0xe1, 0x99, 0x28, 0x49, + 0x90, 0x69, 0x60, 0xbe, 0xc5, 0x88, 0x99, 0x9a, 0x1f, 0x3a, + 0x78, 0xf0, 0xcb, 0x31, 0x68, 0xc3, 0xcb, 0x31, 0x68, 0xc1, + 0x34, 0xce, 0x97, 0x3e, 0x34, 0xff, 0xe7, 0x3a, 0xe6, 0xe1, + 0xff, 0xe7, 0xaf, 0x75, 0x3d, 0xb9, 0x2a, 0x06, 0x5b, 0xae, + 0x87, 0x59, 0x16, 0xd3, 0xc3, 0x4c, 0x37, 0x53, 0xc3, 0x4c, + 0x37, 0xd3, 0x3c, 0xb3, 0xc8, 0x2c, 0x08, 0xdd, 0x74, 0x06, + 0x33, 0xf9, 0x61, 0xcc, 0x7c, 0x79, 0xfd, 0x3a, 0x6d, 0x4a, + 0x40, 0xb5, 0xea, 0xf0, 0x78, 0x98, 0xec, 0xda, 0x3d, 0xaa, + 0xec, 0xda, 0x3d, 0xaa, 0x13, 0x25, 0xc2, 0x55, 0xf2, 0x87, + 0x14, 0x8b, 0xb6, 0x29, 0x44, 0xe1, 0xb1, 0x10, 0x9b, 0x13, + 0x2f, 0xae, 0xb6, 0x63, 0x8f, 0x8c, 0xce, 0xab, 0x4e, 0x0f, + 0x12, 0xab, 0x4f, 0x0c, 0x92, 0xab, 0xb0, 0xf3, 0x6d, 0x54, + 0x55, 0x95, 0x9b, 0x2a, 0xf5, 0x17, 0xd0, 0x79, 0x5c, 0xc5, + 0x3a, 0xbe, 0xae, 0xf6, 0xb2, 0x68, 0x0a, 0x20, 0xc8, 0xd6, + 0x08, 0xc2, 0xcb, 0x68, 0x0a, 0xc0, 0xcb, 0x68, 0xf5, 0x3f, + 0x34, 0x97, 0x4c, 0x52, 0x17, 0x9b, 0x91, 0xcb, 0x84, 0x19, + 0x7e, 0x61, 0x1a, 0x45, 0x0b, 0x1f, 0x6c, 0x8a, 0xb4, 0x03, + 0xb9, 0x8f, 0x95, 0xa3, 0xba, 0x8d, 0x95, 0x23, 0xba, 0x8d, + 0x6a, 0xdc, 0x45, 0x72, 0x0d, 0xf0, 0x5b, 0x74, 0xe2, 0x5a, + 0x5b, 0xd0, 0x7b, 0x9b, 0x64, 0xe8, 0xb5, 0xbf, 0x72, 0x25, + 0xba, 0xd7, 0x2a, 0x2c, 0xbf, 0xa5, 0xc1, 0xfc, 0xbf, 0xa7, + 0x40, 0x7c, 0x40, 0x58, 0xbf, 0x83, 0x00, 0xbc, 0xc0, 0xc5, + 0xfc, 0xcc, 0x87, 0xf6, 0x82, 0xdb, 0x7f, 0x04, 0x38, 0xbe, + 0x87, 0xee, 0xae, 0x59, 0xc0, 0x5a, 0x3c, 0x5d, 0xc8, 0x56, + 0x3c, 0x5d, 0xc8, 0x5e, 0xc3, 0xa2, 0x37, 0xa1, 0x00, 0x00, + 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, + 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xc1, 0x7c, 0xa3, 0x86, 0x61, 0x37, 0x8d, 0xb0, 0xf0, 0xb9, + 0x6b, 0x2c, 0x31, 0xfa, 0xdf, 0xe6, 0x75, 0xbd, 0x0e, 0x31, + 0xb9, 0xb9, 0x9b, 0x20, 0xf1, 0xb9, 0x9f, 0x20, 0x0e, 0x46, + 0x60, 0xdf, 0xd2, 0x5e, 0xd3, 0xa5, 0xd5, 0xf2, 0xc8, 0xef, + 0xb3, 0x18, 0x09, 0x91, 0xaf, 0x4b, 0x40, 0x3b, 0x7a, 0xd1, + 0x73, 0xfb, 0x6e, 0x19, 0xf5, 0xe1, 0x7e, 0x19, 0xf5, 0xe1, + 0x81, 0xe6, 0x0a, 0x1e, 0x2a, 0x1e, 0x4e, 0x81, 0x9c, 0xf4, + 0x27, 0x36, 0x19, 0xba, 0xea, 0x28, 0x92, 0x1e, 0x34, 0x6b, + 0xfb, 0x5b, 0x58, 0x2e, 0x62, 0xaa, 0x3a, 0x34, 0x62, 0xaa, + 0x38, 0x34, 0x9d, 0x55, 0xc7, 0xcb, 0x89, 0x87, 0xa7, 0x3b, + 0xd6, 0x28, 0x54, 0xee, 0x3d, 0x26, 0x3d, 0x67, 0x47, 0x88, + 0xe6, 0x9a, 0xf4, 0x5a, 0x1a, 0x10, 0x27, 0xc0, 0x16, 0x9a, + 0x27, 0x48, 0x16, 0x9a, 0xd8, 0xb7, 0xe9, 0x65, 0x82, 0x75, + 0x6c, 0xad, 0xd8, 0xfe, 0x32, 0x42, 0x39, 0x26, 0x17, 0x9b, + 0x35, 0xf4, 0x6d, 0x26, 0x45, 0x9f, 0x6b, 0x5c, 0x50, 0x1d, + 0x22, 0x55, 0x50, 0x1d, 0x62, 0x45, 0xaf, 0xe2, 0x9d, 0xba, + 0x1d, 0x4e, 0xf8, 0xcb, 0x37, 0x49, 0x44, 0xcd, 0x29, 0xe3, + 0xf8, 0xfd, 0xa3, 0x23, 0x64, 0x27, 0x05, 0x49, 0xee, 0x3e, + 0xa5, 0x26, 0xec, 0x5f, 0xa5, 0x26, 0xec, 0x5f, 0x5a, 0xd9, + 0x13, 0xa0, 0xcb, 0xf5, 0x5a, 0xd2, 0x63, 0xec, 0xfb, 0xba, + 0x79, 0x40, 0x19, 0x76, 0xcc, 0xed, 0x49, 0x94, 0x2f, 0x43, + 0x01, 0x61, 0xa5, 0x45, 0x27, 0x76, 0xa5, 0x45, 0x07, 0x72, + 0x5a, 0xba, 0xf8, 0x8d, 0xdc, 0x78, 0x48, 0xb6, 0x79, 0xf7, + 0x3f, 0x87, 0x1c, 0xb1, 0x2c, 0xc6, 0xef, 0x6c, 0x62, 0x37, + 0x05, 0x08, 0xe7, 0xcc, 0xe5, 0x08, 0xae, 0x81, 0xc5, 0x08, + 0xae, 0x84, 0x3a, 0xf7, 0x51, 0x7b, 0x00, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, + 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x6a, 0x83, + 0xce, 0x4a, 0xa5, 0x2a, 0xf8, 0xbb, 0x6d, 0x45, 0x91, 0x4d, + 0x62, 0x8a, 0xd2, 0xb0, 0x02, 0xbc, 0x85, 0xc4, 0x53, 0x0a, + 0x16, 0x59, 0x53, 0x08, 0x96, 0x59, 0xac, 0xf7, 0x69, 0xa6, + 0xe9, 0x7e, 0xd1, 0x6c, 0x31, 0x53, 0x3f, 0xf9, 0xdd, 0x63, + 0x8c, 0x31, 0x2f, 0xb4, 0xaf, 0xe2, 0x85, 0x43, 0x81, 0x3e, + 0xd5, 0x66, 0x29, 0x6a, 0xd5, 0x66, 0x29, 0x6a, 0x2a, 0x99, + 0xd6, 0x95, 0x01, 0xea, 0x7a, 0x41, 0x90, 0x79, 0xdd, 0x28, + 0x88, 0x12, 0x58, 0x28, 0x7f, 0x3c, 0x30, 0x76, 0xdd, 0x22, + 0x71, 0x46, 0x5a, 0x22, 0xb3, 0x74, 0x5e, 0x22, 0x31, 0x64, + 0xa1, 0xdd, 0xce, 0x9b, 0xc9, 0x34, 0x49, 0xe9, 0x23, 0x17, + 0xa7, 0xe5, 0xe2, 0x03, 0x60, 0xb3, 0x65, 0x24, 0x24, 0xf8, + 0x79, 0xeb, 0xa9, 0xf0, 0x08, 0xe3, 0x05, 0xfa, 0x48, 0xe3, + 0x05, 0xf8, 0xb7, 0x1c, 0xfa, 0x07, 0xb7, 0x5f, 0x5f, 0x26, + 0x52, 0xde, 0x36, 0x18, 0x87, 0x3d, 0x4d, 0xc4, 0x84, 0x61, + 0x2e, 0x5b, 0xfa, 0x02, 0x43, 0xae, 0x1e, 0xa7, 0x0a, 0xa6, + 0x9e, 0xa7, 0x0a, 0xa4, 0x61, 0x58, 0xf5, 0x5b, 0xce, 0x40, + 0xf0, 0xe3, 0x30, 0xb1, 0x0d, 0xca, 0xdc, 0x63, 0x69, 0x1a, + 0xf1, 0x3c, 0x88, 0x5a, 0xd1, 0xd1, 0xde, 0x33, 0xa0, 0x71, + 0xac, 0x82, 0xb0, 0x71, 0x8c, 0x82, 0x4f, 0x8e, 0x73, 0x7d, + 0x15, 0x7e, 0x14, 0x61, 0x32, 0x62, 0x14, 0x08, 0x5b, 0x91, + 0x64, 0x3b, 0xdc, 0x7c, 0x64, 0x6c, 0x09, 0x92, 0xf0, 0xda, + 0x2d, 0x56, 0x64, 0xfc, 0x0d, 0x56, 0x66, 0xfc, 0xf2, 0xa9, + 0x9b, 0x03, 0x1e, 0x93, 0xf3, 0x4c, 0xd4, 0x2c, 0x98, 0xa2, + 0x8f, 0xfd, 0x9a, 0xd3, 0xc8, 0xe7, 0x9f, 0x9e, 0xb1, 0x14, + 0x6b, 0x98, 0x21, 0x14, 0x0b, 0x08, 0x31, 0x14, 0x0b, 0x08, + 0xce, 0xeb, 0xf4, 0xf7, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xb2, 0x73, 0xc5, 0x06, + 0xe6, 0xce, 0xd2, 0xe7, 0xd5, 0x7d, 0xf1, 0x55, 0xcc, 0xd9, + 0xf2, 0x91, 0xeb, 0x6e, 0x04, 0x02, 0x80, 0x64, 0xf3, 0x52, + 0xc0, 0x64, 0xf3, 0x12, 0x3f, 0x9b, 0x0c, 0xed, 0x03, 0x29, + 0xfb, 0x5d, 0xa6, 0x30, 0xd7, 0x96, 0xb2, 0xa5, 0xfa, 0x9d, + 0x80, 0x2c, 0xef, 0xed, 0xee, 0x93, 0x9c, 0x89, 0xa6, 0xf7, + 0x95, 0x9b, 0xa6, 0xb7, 0x95, 0x8b, 0x59, 0x48, 0x6a, 0x74, + 0x89, 0x28, 0x26, 0xa3, 0x73, 0xd3, 0xf4, 0xd6, 0x55, 0xce, + 0x4b, 0xcb, 0x6a, 0x2e, 0x64, 0x64, 0x16, 0x4e, 0xb1, 0xd0, + 0xb6, 0xed, 0xba, 0xdc, 0xb6, 0xee, 0xba, 0xdc, 0x49, 0x11, + 0x45, 0x23, 0x4c, 0x0c, 0x8e, 0x70, 0x70, 0x4a, 0x53, 0x5e, + 0x52, 0xeb, 0x38, 0xf2, 0xb9, 0x4f, 0x91, 0xee, 0x4a, 0xff, + 0x4a, 0xa8, 0x8c, 0xee, 0x80, 0xea, 0x0c, 0xee, 0x80, 0xea, + 0xf3, 0x11, 0x7f, 0x15, 0xbd, 0x66, 0xe5, 0x4a, 0xf7, 0x6d, + 0xa2, 0xbe, 0xfe, 0x87, 0xc1, 0xc9, 0x24, 0xa4, 0x7e, 0xb3, + 0x68, 0x06, 0xda, 0xad, 0xa0, 0x17, 0x52, 0xa9, 0xa4, 0x06, + 0x52, 0xa9, 0x5b, 0xf9, 0xad, 0x56, 0xad, 0xe7, 0x3e, 0x5e, + 0x0b, 0x9c, 0xcf, 0x74, 0xb4, 0x32, 0x8e, 0x88, 0xb6, 0x76, + 0x89, 0xf5, 0x85, 0x7f, 0x0a, 0x0f, 0x14, 0xb2, 0x29, 0x5f, + 0x14, 0xb6, 0x29, 0x5f, 0xeb, 0x49, 0xd6, 0xa0, 0x1f, 0x48, + 0x4b, 0xac, 0x49, 0x5b, 0xcb, 0x12, 0x6d, 0xc2, 0xda, 0x96, + 0x7c, 0xda, 0xfb, 0xbe, 0xd6, 0xf8, 0xaa, 0xfe, 0x53, 0x7a, + 0xe2, 0xfe, 0x5b, 0xfa, 0xea, 0xfe, 0xa4, 0x05, 0x15, 0x01, + 0x9a, 0xc6, 0xf6, 0x49, 0x9c, 0x36, 0x7c, 0xe7, 0xc6, 0x33, + 0x73, 0xd3, 0xf4, 0x03, 0xe3, 0x48, 0x56, 0x5d, 0x55, 0x1f, + 0x54, 0x13, 0x8f, 0xbe, 0x54, 0x13, 0x87, 0x9e, 0xab, 0xec, + 0x78, 0x61, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x40, 0x6a, 0xf8, 0x06, 0xc9, 0xa9, + 0xdd, 0x4b, 0x2f, 0x50, 0x9c, 0x1a, 0xeb, 0xb6, 0x24, 0xa9, + 0x73, 0xa2, 0xb0, 0x68, 0xbd, 0x82, 0xbc, 0x2c, 0xbf, 0x82, + 0xbc, 0x2c, 0x40, 0x7d, 0x43, 0xd3, 0xac, 0xfb, 0x7d, 0x7c, + 0x66, 0x6e, 0xe5, 0x0c, 0x97, 0xc8, 0x05, 0x2b, 0xcd, 0x02, + 0xdf, 0xf0, 0xcc, 0x43, 0x82, 0xbc, 0x89, 0x4a, 0xe7, 0xb1, + 0x8d, 0x4a, 0xc7, 0xb1, 0x72, 0xb5, 0x38, 0x4e, 0x08, 0x40, + 0x79, 0x74, 0x29, 0x9f, 0xbc, 0xb2, 0x4f, 0x81, 0x63, 0x49, + 0x1f, 0xb6, 0x70, 0x5b, 0x88, 0xe2, 0x47, 0x8e, 0xe8, 0xe0, + 0x04, 0xa2, 0xec, 0xe0, 0x04, 0xa2, 0x13, 0x1f, 0xfb, 0x5d, + 0x5e, 0xe2, 0x0d, 0x6e, 0x8f, 0x54, 0x00, 0x39, 0x79, 0x88, + 0x5f, 0x96, 0xa3, 0x30, 0xaa, 0x8b, 0x11, 0x56, 0xba, 0xf5, + 0x20, 0xe6, 0x3a, 0x4e, 0x20, 0xf6, 0xba, 0x4f, 0xdf, 0x09, + 0x45, 0xb0, 0x61, 0x3a, 0x89, 0x85, 0x99, 0x15, 0x41, 0x4b, + 0xea, 0x2f, 0xa1, 0x35, 0xba, 0x23, 0xe2, 0xd8, 0x0a, 0x43, + 0xa9, 0xc6, 0x68, 0x21, 0xa9, 0xd4, 0x6a, 0x23, 0xa9, 0xd0, + 0x95, 0xdc, 0x56, 0x2f, 0x22, 0x82, 0x8d, 0xa1, 0x5f, 0xd8, + 0xc0, 0x9f, 0x61, 0x63, 0x1b, 0xe4, 0x7c, 0x40, 0xa1, 0x32, + 0xbf, 0x0f, 0x79, 0x56, 0x3f, 0x4e, 0x19, 0x22, 0x3f, 0x4e, + 0x19, 0x26, 0xc0, 0xb1, 0xe6, 0xd9, 0x73, 0x1c, 0x55, 0xa0, + 0x61, 0xdd, 0xe3, 0x4b, 0x97, 0xb1, 0xe1, 0x31, 0x26, 0xd5, + 0xfb, 0xaa, 0x86, 0x65, 0x41, 0xab, 0x82, 0xcc, 0xc2, 0x3b, + 0x82, 0xcc, 0x83, 0x3b, 0x7d, 0x33, 0x3c, 0xc4, 0x81, 0xa5, + 0xf5, 0xe1, 0x9a, 0x9d, 0xba, 0x62, 0x10, 0xf7, 0xcd, 0x1f, + 0x63, 0x15, 0x35, 0x79, 0x23, 0x09, 0xf8, 0x18, 0x69, 0x59, + 0xfc, 0x58, 0x63, 0x59, 0xfc, 0x58, 0x9c, 0xa6, 0x03, 0xa7, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x04, 0x3b, 0x3b, 0xd4, 0x29, 0xf6, 0x00, 0x55, + 0x52, 0xb9, 0x1d, 0x70, 0x46, 0x8d, 0x66, 0xdd, 0x55, 0xab, + 0xa6, 0x7f, 0x50, 0xb1, 0xee, 0xff, 0x10, 0xa1, 0xee, 0xff, + 0xef, 0x5e, 0x11, 0x00, 0x76, 0x2a, 0x8b, 0x86, 0x12, 0x2c, + 0xb8, 0x77, 0x7a, 0xc5, 0x6d, 0x83, 0x79, 0x58, 0x39, 0x84, + 0x86, 0xc4, 0x99, 0x4e, 0x3c, 0xb4, 0xd4, 0x40, 0x3c, 0xb4, + 0x94, 0x40, 0xc3, 0x4b, 0x6b, 0xbf, 0x01, 0xe4, 0x14, 0x40, + 0x64, 0xa1, 0x03, 0x58, 0xa7, 0x78, 0x65, 0x9b, 0x20, 0xd0, + 0x0e, 0x64, 0xd5, 0xdf, 0x5f, 0x88, 0x65, 0xfe, 0x6b, 0xa5, + 0x65, 0xfe, 0x6f, 0xa5, 0x9a, 0x01, 0x90, 0x5a, 0x44, 0x37, + 0xeb, 0xcf, 0xf0, 0x23, 0x0a, 0x0c, 0x55, 0xce, 0x91, 0x22, + 0xf7, 0xdd, 0xc8, 0x4e, 0xa7, 0xfa, 0x08, 0xaf, 0x9f, 0xd5, + 0x48, 0xd0, 0xb7, 0xdd, 0x48, 0xdd, 0x48, 0x22, 0xb7, 0x22, + 0xf6, 0x4d, 0x6d, 0x15, 0x05, 0xdb, 0x34, 0xb2, 0xa6, 0x73, + 0xa1, 0x01, 0x0c, 0x6e, 0x35, 0xd6, 0x58, 0x18, 0x80, 0x9c, + 0x4a, 0x08, 0x08, 0xb4, 0x48, 0x08, 0x08, 0xb4, 0xb7, 0xf7, + 0xf7, 0x4b, 0xd8, 0x1a, 0xc3, 0x7b, 0xd2, 0x74, 0x64, 0x21, + 0x0b, 0xc6, 0xd6, 0xb0, 0x68, 0x2a, 0xf3, 0xab, 0x74, 0x17, + 0x59, 0x69, 0x7c, 0x12, 0x88, 0xeb, 0x7c, 0x12, 0x98, 0xeb, + 0x83, 0xed, 0x67, 0x14, 0xd8, 0x4e, 0xad, 0x85, 0x03, 0xda, + 0x33, 0x63, 0xf3, 0x94, 0xdb, 0x23, 0xe1, 0x5d, 0x5f, 0x21, + 0x7b, 0xfd, 0x27, 0x1d, 0xec, 0x95, 0x1f, 0x53, 0xf9, 0x95, + 0x1f, 0x43, 0x06, 0x6a, 0xe0, 0xbc, 0x41, 0x9e, 0x3d, 0x77, + 0xc5, 0x9e, 0x5d, 0xba, 0x2b, 0x53, 0x0d, 0xae, 0xda, 0x92, + 0x81, 0x9c, 0x8a, 0xd6, 0x4b, 0xcb, 0xc6, 0x99, 0x46, 0xac, + 0xc6, 0x9d, 0x47, 0xac, 0x39, 0x62, 0xb8, 0x53, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x82, 0x87, 0x45, 0x45, 0x86, 0xdc, 0xb9, 0xe2, 0xca, 0x9b, + 0x84, 0xbb, 0x09, 0x78, 0x1b, 0xcf, 0x21, 0x2d, 0x2f, 0x53, + 0x85, 0xbe, 0x3e, 0xfb, 0x81, 0xbd, 0x3e, 0xfb, 0x7e, 0x42, + 0xc1, 0x04, 0xbb, 0x16, 0xd2, 0x57, 0x65, 0xb9, 0xde, 0x74, + 0x57, 0x17, 0xea, 0x24, 0x58, 0xf8, 0xb5, 0x62, 0x82, 0x5b, + 0x05, 0xbd, 0x97, 0x47, 0x64, 0x21, 0x93, 0x53, 0xe0, 0x21, + 0x6c, 0xac, 0x1f, 0xde, 0xee, 0x00, 0x50, 0x14, 0x63, 0xc9, + 0x80, 0xb5, 0xb0, 0x6c, 0x69, 0xfb, 0xcb, 0x54, 0xb3, 0x52, + 0x28, 0xa1, 0xde, 0x66, 0x32, 0x71, 0xa0, 0x52, 0x22, 0x71, + 0xa0, 0x52, 0xdd, 0x8e, 0x5f, 0xad, 0xae, 0x05, 0xf3, 0x7e, + 0x6e, 0x99, 0x69, 0xfa, 0x86, 0x04, 0xe6, 0x7f, 0xe1, 0xd1, + 0xdc, 0x00, 0x97, 0xd8, 0x6d, 0x5f, 0xc5, 0x5f, 0x48, 0x5f, + 0x85, 0x5d, 0x48, 0x5f, 0x7a, 0xa2, 0xb7, 0xa0, 0xb9, 0x99, + 0xd9, 0x4d, 0xbe, 0x56, 0xd4, 0xca, 0x76, 0xad, 0xf8, 0x9e, + 0xc1, 0xdd, 0x99, 0x0f, 0x7d, 0xb7, 0x3b, 0xa6, 0x75, 0x3f, + 0x7e, 0xb7, 0x75, 0xbf, 0x7b, 0xb7, 0x8a, 0x40, 0x84, 0x48, + 0x6f, 0x69, 0x1f, 0x7b, 0x05, 0xa6, 0xe5, 0xe7, 0xff, 0x7d, + 0x1a, 0x65, 0x1b, 0x25, 0x26, 0xee, 0xce, 0xb0, 0x18, 0x5a, + 0xde, 0xb1, 0x39, 0xc5, 0xde, 0xb1, 0x1b, 0xcc, 0x21, 0x4e, + 0xe4, 0x33, 0xcd, 0xac, 0x03, 0xb1, 0xef, 0xa5, 0xb5, 0x90, + 0x7b, 0xfb, 0x12, 0xf4, 0x7b, 0x35, 0xf6, 0x33, 0x97, 0xb3, + 0x55, 0x29, 0x61, 0xb3, 0x55, 0x31, 0x61, 0xb1, 0x55, 0x31, + 0x9e, 0x4e, 0xaa, 0xce, 0xf5, 0x1b, 0xc8, 0xed, 0x32, 0x8b, + 0xa8, 0x53, 0x22, 0x96, 0x56, 0x3a, 0x40, 0x49, 0x7e, 0x5e, + 0xb5, 0x20, 0x0f, 0x18, 0x86, 0x50, 0x2a, 0x2a, 0x86, 0x50, + 0x2a, 0x3a, 0x79, 0xaf, 0xd5, 0xc5, 0x00, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x9d, 0xe1, + 0x7a, 0x57, 0x02, 0xc3, 0x96, 0x40, 0xd8, 0x31, 0x97, 0x0e, + 0x76, 0x69, 0xd4, 0xa8, 0x12, 0x56, 0x5b, 0xad, 0x30, 0x74, + 0x1c, 0x8a, 0x30, 0x74, 0x1d, 0x88, 0xcf, 0x8b, 0xe2, 0x77, + 0x77, 0xa3, 0x56, 0x23, 0x21, 0x03, 0xc4, 0xa9, 0x27, 0xdd, + 0x3d, 0x7e, 0x29, 0xa5, 0xca, 0xc6, 0x84, 0x4a, 0xda, 0x5a, + 0xa4, 0xe4, 0xd6, 0xca, 0xa4, 0xe4, 0xd6, 0xca, 0x5b, 0x1b, + 0x29, 0x35, 0xd3, 0x77, 0x5a, 0x14, 0x6a, 0x59, 0xdc, 0xaf, + 0x98, 0xda, 0x97, 0x10, 0x8b, 0xa1, 0x8c, 0xf0, 0xe1, 0x38, + 0xaf, 0xa4, 0x81, 0xa7, 0xce, 0xe4, 0x81, 0xa6, 0x8e, 0xe4, + 0x7e, 0x59, 0x71, 0x1b, 0x03, 0x43, 0x26, 0x3e, 0x29, 0xd6, + 0xff, 0x60, 0x8b, 0x94, 0x72, 0x6c, 0x6c, 0xbe, 0x62, 0xfc, + 0x51, 0xa6, 0x3d, 0x62, 0x48, 0xab, 0x2d, 0xfe, 0x48, 0xab, + 0x2d, 0xfe, 0xb7, 0x54, 0xd2, 0x01, 0x2d, 0xa6, 0xdd, 0xf0, + 0x2a, 0x9a, 0xe3, 0x81, 0x8e, 0xe1, 0xf4, 0x42, 0x21, 0x10, + 0x66, 0x6b, 0xdd, 0xb5, 0x8e, 0x4c, 0x0e, 0x51, 0xcf, 0x72, + 0x0c, 0x71, 0xce, 0x72, 0xf3, 0x8e, 0x31, 0x8d, 0x71, 0x03, + 0xba, 0xc5, 0xc6, 0x42, 0xfe, 0xd4, 0xcc, 0x04, 0xb4, 0xd3, + 0x12, 0x99, 0xc5, 0x99, 0x58, 0x45, 0x3f, 0xe8, 0x99, 0xd9, + 0x1e, 0x59, 0x99, 0xcd, 0x9e, 0xd9, 0x66, 0x32, 0x61, 0x26, + 0x55, 0x01, 0xf8, 0xf1, 0xe3, 0x4e, 0xf6, 0x6d, 0x4e, 0x27, + 0xdf, 0x75, 0xb9, 0x69, 0x06, 0x99, 0x70, 0x84, 0x4a, 0x6a, + 0x36, 0xa6, 0x43, 0x6c, 0x34, 0x84, 0x42, 0x6c, 0xcb, 0x7b, + 0xbd, 0x93, 0x9e, 0x8f, 0xcb, 0xd2, 0xf9, 0x3a, 0xe5, 0x16, + 0x75, 0x34, 0x7b, 0xd0, 0x46, 0x4e, 0xfc, 0x82, 0xea, 0xab, + 0x23, 0x01, 0x4a, 0x39, 0x06, 0x02, 0x4a, 0x39, 0x26, 0x02, + 0xb5, 0xc6, 0xd9, 0xfd, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x55, 0xfe, 0x07, 0xbc, + 0x1a, 0xd1, 0x1d, 0x62, 0xb7, 0xcb, 0xfb, 0xf2, 0x3a, 0xc4, + 0xa8, 0xb2, 0x90, 0x25, 0x12, 0x25, 0x9e, 0xb4, 0x92, 0x69, + 0x9e, 0xa5, 0x92, 0x69, 0x61, 0x5a, 0x6d, 0x96, 0x85, 0x2c, + 0xb7, 0x43, 0xbb, 0x58, 0x0f, 0xf6, 0x49, 0x10, 0x36, 0x28, + 0xc0, 0xde, 0xec, 0x29, 0x48, 0x46, 0xe7, 0x3f, 0x0c, 0x57, + 0xa6, 0x3b, 0x08, 0x57, 0xa6, 0x3b, 0xf7, 0xa8, 0x59, 0xc4, + 0x56, 0x88, 0x07, 0x77, 0x0d, 0x50, 0x41, 0x93, 0xa3, 0x6b, + 0x26, 0x85, 0x6d, 0xd8, 0xdd, 0x7b, 0x00, 0xd0, 0xa7, 0x19, + 0x8c, 0xa8, 0xc7, 0x89, 0x88, 0xa8, 0xc7, 0x89, 0x77, 0x57, + 0x38, 0x76, 0x7a, 0x99, 0xee, 0x29, 0x21, 0x04, 0x71, 0x8f, + 0x8a, 0x10, 0x3f, 0x6b, 0x7a, 0xe4, 0x8d, 0x74, 0x4f, 0x99, + 0xa1, 0x71, 0x37, 0xcc, 0x1d, 0x60, 0x37, 0xcc, 0x9d, 0x60, + 0xc8, 0x33, 0x62, 0x9f, 0x8c, 0x6c, 0xed, 0xb5, 0xa1, 0xb0, + 0x6a, 0x75, 0xb2, 0x79, 0xac, 0xba, 0x4a, 0x50, 0x9c, 0x08, + 0x34, 0x95, 0x21, 0x0c, 0x70, 0x99, 0xed, 0x8b, 0x70, 0x99, + 0xed, 0x8b, 0x8f, 0x66, 0x12, 0x74, 0xd1, 0x4f, 0x29, 0xd6, + 0x91, 0x18, 0xfb, 0x98, 0xc8, 0xfa, 0x08, 0x4c, 0xd9, 0x5f, + 0x17, 0x7e, 0x2d, 0x81, 0x9b, 0x9c, 0x9c, 0xa3, 0x13, 0x3d, + 0x9c, 0xa3, 0x13, 0x3d, 0x63, 0x5c, 0xec, 0xc2, 0x7c, 0x6f, + 0x6c, 0x95, 0xa4, 0xcf, 0xec, 0x02, 0x94, 0xa6, 0x86, 0xa3, + 0x3f, 0x69, 0x96, 0x3d, 0x1a, 0xdd, 0xd0, 0xf1, 0x10, 0x84, + 0xce, 0x21, 0x10, 0xc5, 0xce, 0x21, 0xef, 0x3a, 0x31, 0xde, + 0x3f, 0xda, 0x87, 0x1f, 0x1e, 0xb6, 0x69, 0x34, 0x95, 0x1c, + 0xd3, 0x67, 0xd6, 0xa0, 0x25, 0x98, 0x26, 0x1a, 0x4c, 0xb2, + 0x02, 0x2a, 0x1f, 0xae, 0x06, 0x2a, 0x1d, 0xaa, 0xf9, 0xd5, + 0xe2, 0x55, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, + 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x89, 0x46, 0x8b, 0x02, 0xaf, 0x78, + 0x3d, 0x9f, 0x52, 0xf3, 0xa6, 0x4a, 0xbd, 0xc3, 0x39, 0x7f, + 0xc6, 0x6c, 0xd2, 0x95, 0xc8, 0x66, 0xf6, 0xfd, 0xc8, 0x66, + 0xf6, 0xfd, 0x37, 0x99, 0x09, 0x02, 0xbe, 0x4b, 0xf3, 0xd7, + 0x43, 0x58, 0x80, 0xf3, 0x0a, 0xeb, 0xd9, 0x24, 0x0e, 0x40, + 0x2b, 0x68, 0x93, 0x12, 0x7f, 0xf6, 0x96, 0x19, 0x2f, 0xd5, + 0x96, 0x13, 0x2d, 0xf6, 0x69, 0xec, 0xd2, 0x09, 0xea, 0xb8, + 0x07, 0x8e, 0x3d, 0xea, 0x71, 0x6b, 0x94, 0x2e, 0xf6, 0x1c, + 0xaf, 0x90, 0xd5, 0xd7, 0x15, 0x78, 0x1c, 0x9d, 0xa5, 0x18, + 0x1e, 0xc9, 0xa5, 0x18, 0x1c, 0xcd, 0x5a, 0xe7, 0xe3, 0x32, + 0xaa, 0x55, 0x62, 0x05, 0x0d, 0x14, 0xa6, 0x2a, 0x55, 0xbb, + 0x99, 0x0e, 0x82, 0x86, 0xe7, 0x4a, 0xf7, 0x92, 0xe9, 0x4b, + 0xa7, 0x71, 0xa9, 0x4b, 0xb7, 0x90, 0xa9, 0x4b, 0x48, 0x6f, + 0x56, 0xb4, 0xe2, 0x3a, 0x02, 0x50, 0xb7, 0xed, 0x73, 0xf0, + 0xee, 0x20, 0x1f, 0xf7, 0x41, 0x9b, 0xbb, 0x16, 0x96, 0x81, + 0xe1, 0x5b, 0xe3, 0x82, 0x82, 0x5e, 0x43, 0x82, 0x83, 0x5e, + 0xbc, 0x7d, 0x7c, 0xa1, 0xb3, 0x34, 0xda, 0x07, 0x6c, 0xdf, + 0xc0, 0x69, 0x43, 0x40, 0xf8, 0x39, 0x54, 0xd2, 0x27, 0xaf, + 0x11, 0x38, 0x3c, 0x06, 0xe0, 0x18, 0xb4, 0xae, 0xc0, 0x18, + 0x34, 0xae, 0x3f, 0xe7, 0xcb, 0x51, 0xe7, 0xca, 0x17, 0x92, + 0xd6, 0x51, 0x00, 0x27, 0xef, 0x54, 0x52, 0x97, 0xc3, 0xac, + 0x98, 0x5b, 0xf0, 0x1f, 0xb9, 0x88, 0xfd, 0x76, 0xd1, 0xa3, + 0xdd, 0x56, 0xd1, 0xa3, 0x22, 0xa9, 0x2e, 0x5c, 0xe6, 0x3b, + 0x8a, 0xeb, 0x1e, 0x1b, 0x31, 0xf4, 0xd1, 0x84, 0x2b, 0x09, + 0xbf, 0x71, 0xab, 0x4c, 0x86, 0x04, 0x64, 0x1b, 0x96, 0x30, + 0xe5, 0x28, 0x86, 0x30, 0xe1, 0x28, 0x79, 0xcf, 0x1e, 0xd7, + 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, + 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, + 0x00, 0x00, 0xad, 0x70, 0x07, 0x15, 0x41, 0xe2, 0xda, 0xf8, + 0x5f, 0xfa, 0x29, 0x0b, 0x74, 0xd5, 0x70, 0x2e, 0x25, 0xac, + 0xc1, 0xbe, 0x43, 0x9b, 0xc0, 0x84, 0x47, 0x99, 0xc0, 0x84, + 0xb8, 0x66, 0x3f, 0x7b, 0x86, 0xe6, 0x84, 0x37, 0x13, 0xf4, + 0x73, 0x2b, 0x32, 0x37, 0xa9, 0x86, 0x87, 0x2f, 0x4e, 0xd1, + 0x53, 0x3d, 0xc6, 0x78, 0x53, 0xb7, 0x77, 0x7a, 0x53, 0x37, + 0x77, 0x78, 0xac, 0xc8, 0x88, 0x87, 0x2c, 0x1e, 0xe1, 0xfa, + 0xb6, 0xbb, 0x93, 0x32, 0x33, 0xe2, 0x1a, 0xe0, 0x14, 0x80, + 0xe5, 0xa4, 0x1d, 0x92, 0x2a, 0x11, 0x5c, 0xba, 0x49, 0x29, + 0x5c, 0xb2, 0x49, 0x29, 0xa3, 0x4d, 0xb6, 0xd6, 0x04, 0xd3, + 0x44, 0x0e, 0x03, 0x98, 0x01, 0x01, 0xec, 0xf0, 0xf4, 0xb8, + 0xc3, 0x81, 0x00, 0x66, 0xbc, 0x34, 0x46, 0xcf, 0x51, 0x01, + 0x17, 0x0f, 0xd1, 0x21, 0x16, 0x0f, 0x2e, 0xde, 0xe9, 0xf0, + 0x8e, 0x46, 0x50, 0x4f, 0x38, 0x65, 0x3c, 0xf8, 0x30, 0xc5, + 0x6d, 0x04, 0x18, 0x23, 0x95, 0xb4, 0xb8, 0x9d, 0x9e, 0x9c, + 0x7a, 0xad, 0x94, 0x5b, 0x7a, 0xad, 0x94, 0x99, 0x85, 0x52, + 0x6b, 0x66, 0x5d, 0x7d, 0xbe, 0x84, 0xdf, 0xa9, 0xa8, 0xef, + 0xd6, 0x05, 0x06, 0x34, 0xcc, 0x56, 0x9f, 0x5c, 0x76, 0x96, + 0x25, 0x99, 0x3e, 0x5d, 0xb7, 0x94, 0x3e, 0x5c, 0x37, 0x9c, + 0xc1, 0xa3, 0xc8, 0x63, 0x84, 0x7c, 0x30, 0x1e, 0x2d, 0x81, + 0x43, 0x76, 0xb9, 0xdf, 0x6a, 0x4b, 0x53, 0xd7, 0xb4, 0x83, + 0x11, 0xfb, 0x1b, 0xe5, 0x0b, 0xe3, 0xe3, 0x61, 0x0b, 0xe3, + 0x73, 0x65, 0xf4, 0x1c, 0x8c, 0x9a, 0x42, 0xb0, 0x81, 0xf5, + 0x3f, 0xd6, 0x5e, 0x2b, 0x09, 0xd1, 0x68, 0x78, 0xf6, 0x7c, + 0x34, 0x97, 0xb3, 0x72, 0xf5, 0x7b, 0x82, 0xb8, 0x7c, 0x1d, + 0x82, 0xb8, 0x7c, 0x5d, 0x7d, 0x47, 0x83, 0xa2, 0x00, 0x00, + 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, + 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x42, 0x78, 0x38, 0x30, 0xe9, 0x08, 0x72, 0x8b, 0x90, 0xd1, + 0x9b, 0xa8, 0x8d, 0xe8, 0x21, 0xd0, 0x7a, 0xf5, 0x97, 0xe7, + 0xfc, 0xf1, 0x37, 0x39, 0xfc, 0xf1, 0x37, 0x39, 0x03, 0x0e, + 0xc8, 0xc6, 0xa8, 0x3a, 0x07, 0x1f, 0xc9, 0x89, 0x53, 0xa3, + 0x67, 0x07, 0xe8, 0xd0, 0x18, 0x6d, 0x74, 0x14, 0xcf, 0xbd, + 0xd8, 0x4a, 0x27, 0x2e, 0xd8, 0x0e, 0x27, 0x2e, 0xd8, 0x0e, + 0xd8, 0xd1, 0x27, 0xf1, 0x20, 0x4d, 0x61, 0xe8, 0xb8, 0x12, + 0x70, 0xe7, 0x17, 0x55, 0x50, 0x4b, 0x5c, 0x9c, 0x4e, 0xd7, + 0xe5, 0x82, 0x8e, 0x6c, 0xce, 0x22, 0x5e, 0x13, 0xc4, 0x02, + 0x5e, 0x53, 0x3b, 0xfd, 0xa1, 0xac, 0x83, 0xaf, 0x89, 0xf6, + 0x1d, 0x2f, 0x00, 0x69, 0xe9, 0xc2, 0x12, 0xbe, 0xca, 0x32, + 0xbc, 0xd8, 0xcc, 0xb0, 0x18, 0x2f, 0x64, 0xb3, 0x19, 0xa5, + 0x6c, 0xb2, 0x19, 0xa5, 0x93, 0x4d, 0xe6, 0x5a, 0xbf, 0x77, + 0xce, 0x27, 0xb7, 0xd3, 0x92, 0xf1, 0x5a, 0x95, 0x4e, 0x05, + 0x60, 0x79, 0x74, 0xf9, 0x90, 0xf8, 0xb5, 0x6a, 0x16, 0xd9, + 0x35, 0x65, 0x16, 0xd9, 0xb5, 0x65, 0xe9, 0x26, 0x4a, 0x9a, + 0xa8, 0xac, 0x85, 0xb5, 0xe3, 0x29, 0x9a, 0xb9, 0xbc, 0x19, + 0xa6, 0xe1, 0x7e, 0xd0, 0xe6, 0x76, 0xad, 0x7b, 0xeb, 0x09, + 0x5d, 0x51, 0xe3, 0x0e, 0xdd, 0x51, 0xe3, 0x0c, 0x22, 0xae, + 0x1c, 0xf3, 0x3a, 0x2a, 0xb9, 0x43, 0xfd, 0x01, 0x22, 0x4a, + 0x5c, 0xc7, 0xff, 0x62, 0xe6, 0x8c, 0xdd, 0x14, 0x57, 0x22, + 0x1c, 0xff, 0x74, 0x07, 0x0d, 0xf1, 0x74, 0x27, 0x1d, 0xf7, + 0x8b, 0xd8, 0xe2, 0x08, 0x4a, 0x4e, 0x03, 0xa9, 0xa5, 0xff, + 0x80, 0xfa, 0x45, 0x34, 0x7e, 0xde, 0x4c, 0x65, 0x0e, 0x86, + 0xae, 0xc1, 0xe9, 0x00, 0x61, 0xc0, 0x42, 0xc2, 0xe1, 0xe0, + 0x42, 0xc2, 0x1e, 0x1f, 0xbd, 0x3d, 0x01, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, + 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2d, 0xcf, + 0xaf, 0x90, 0x1a, 0xc5, 0x29, 0x00, 0x03, 0x62, 0xfb, 0xdf, + 0x4d, 0x4b, 0xdf, 0x21, 0x43, 0xe1, 0x2b, 0x0a, 0x86, 0x49, + 0xfe, 0x8c, 0x87, 0x49, 0xfe, 0x8c, 0x78, 0xb6, 0x01, 0x73, + 0xf6, 0x3f, 0x6f, 0xd2, 0xe2, 0xf7, 0x78, 0x40, 0xb9, 0xd6, + 0xe0, 0xb4, 0x21, 0x29, 0x0e, 0x8c, 0x83, 0xcc, 0xcf, 0xb2, + 0xa3, 0xd3, 0x4f, 0xb8, 0xa3, 0xd3, 0x4f, 0xb8, 0x5c, 0x2c, + 0xb0, 0x47, 0x42, 0xaf, 0x60, 0x7a, 0x4a, 0x01, 0xf7, 0xea, + 0xdb, 0x4f, 0xf9, 0xd6, 0xd9, 0x75, 0xe1, 0x68, 0xcc, 0x03, + 0xf5, 0x67, 0xb8, 0x95, 0x34, 0x67, 0xd8, 0x15, 0xf4, 0x67, + 0x27, 0xea, 0x0b, 0x98, 0x5c, 0x21, 0x3f, 0x10, 0x7c, 0xf6, + 0x39, 0x60, 0x9c, 0x3c, 0xb2, 0x6b, 0x01, 0x2f, 0x0b, 0x8b, + 0xd4, 0x24, 0xbf, 0x0b, 0x96, 0x0c, 0xab, 0x03, 0x96, 0x0c, + 0xbb, 0x8b, 0x69, 0xf3, 0x44, 0x74, 0xff, 0xec, 0xa7, 0x4e, + 0x06, 0x09, 0x49, 0x8a, 0x3f, 0xc6, 0x0f, 0x2e, 0x55, 0x98, + 0xd2, 0x44, 0x04, 0xae, 0x2e, 0xa0, 0xd4, 0x86, 0x6e, 0xa8, + 0x54, 0x8e, 0x6e, 0xa8, 0xab, 0x71, 0x91, 0x57, 0xeb, 0x8d, + 0xe3, 0x92, 0x9d, 0x42, 0xa5, 0x88, 0x53, 0xd1, 0xfe, 0x8b, + 0x98, 0xef, 0xe3, 0x0b, 0xf6, 0x41, 0x1f, 0xed, 0x50, 0x4b, + 0x9f, 0x5f, 0x50, 0x4b, 0x9f, 0x4d, 0xaf, 0xb4, 0x60, 0xb2, + 0x95, 0xa2, 0x74, 0x96, 0xa2, 0x13, 0xc0, 0x3a, 0x16, 0x37, + 0x67, 0xb5, 0xa6, 0xde, 0x74, 0x1e, 0x26, 0xba, 0x8d, 0x3c, + 0xa4, 0x5f, 0x9f, 0x34, 0xa4, 0x5f, 0x9f, 0x34, 0x5b, 0xa0, + 0x60, 0xcb, 0xd6, 0xd7, 0x42, 0xf8, 0x12, 0x3c, 0x4b, 0xe4, + 0xca, 0xf0, 0xd2, 0x55, 0x6f, 0xfe, 0xa5, 0x6b, 0x64, 0xfd, + 0xc3, 0x1b, 0xe9, 0x77, 0xce, 0x1b, 0xe9, 0x77, 0xce, 0x1b, + 0x16, 0x88, 0x31, 0xe4, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, + 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5e, 0xcd, 0xe5, 0x27, + 0x6b, 0x60, 0xe6, 0x30, 0xc4, 0xd6, 0xbb, 0xd8, 0xbe, 0x1d, + 0x9b, 0xa8, 0xde, 0x19, 0xec, 0x31, 0xfe, 0x9c, 0xe4, 0xa3, + 0xfe, 0x1c, 0xe4, 0xa0, 0x01, 0xe3, 0x1b, 0x5f, 0x4e, 0x58, + 0xd8, 0x86, 0x9a, 0xa5, 0xc2, 0x00, 0x86, 0xee, 0x79, 0x65, + 0x24, 0xa4, 0x73, 0xcd, 0xad, 0xba, 0x27, 0x03, 0x06, 0x39, + 0x6b, 0x81, 0x06, 0x39, 0x63, 0x81, 0xf9, 0xc6, 0x9c, 0x7e, + 0x9d, 0xc6, 0xb2, 0xe3, 0xa3, 0xcf, 0xc4, 0x58, 0xd8, 0x61, + 0x76, 0xaa, 0x78, 0x03, 0x07, 0xef, 0xa1, 0x9b, 0xff, 0xf0, + 0xb1, 0x2b, 0x5f, 0xd8, 0xb1, 0x2b, 0x5f, 0xc8, 0x4e, 0xd4, + 0xa0, 0x37, 0x77, 0x6a, 0x53, 0x55, 0x2a, 0xbb, 0xf6, 0x31, + 0x0e, 0x70, 0x60, 0x94, 0x58, 0x33, 0x4d, 0x49, 0xef, 0xea, + 0x71, 0xdf, 0x64, 0x10, 0x12, 0x4b, 0x6e, 0x10, 0x10, 0x4b, + 0x91, 0xef, 0xef, 0xb4, 0xb7, 0xdc, 0xd2, 0x98, 0x57, 0x81, + 0x3c, 0xd2, 0xe2, 0x43, 0xb8, 0xa2, 0xad, 0xa4, 0xf5, 0x08, + 0x19, 0xb7, 0xb2, 0x6d, 0x6b, 0xbc, 0xbb, 0x0e, 0x69, 0xb4, + 0xbb, 0x0e, 0x96, 0x4b, 0x44, 0xf1, 0x45, 0x3c, 0x05, 0x69, + 0x15, 0x18, 0xf9, 0xec, 0x04, 0x36, 0x72, 0x17, 0x43, 0x4d, + 0x2c, 0x88, 0x54, 0x74, 0xdb, 0xf3, 0x60, 0xf4, 0xbd, 0xba, + 0x40, 0x74, 0xbd, 0xaa, 0xbf, 0x8b, 0x42, 0x55, 0xff, 0xf8, + 0x65, 0xd2, 0x7b, 0x20, 0x2d, 0x3b, 0xa6, 0x4b, 0x66, 0x56, + 0xe3, 0xe3, 0x23, 0x87, 0xe0, 0x30, 0x2d, 0xbe, 0x7c, 0x61, + 0x2d, 0xcb, 0x7c, 0x61, 0x2d, 0x8b, 0x83, 0x9e, 0xd2, 0x74, + 0xb6, 0xc4, 0xb4, 0xf7, 0xf0, 0x9c, 0xe5, 0x40, 0x60, 0x9c, + 0x9c, 0x1b, 0xee, 0xe4, 0x8f, 0x88, 0x10, 0xe2, 0x91, 0x31, + 0x50, 0xd5, 0x9c, 0x50, 0x50, 0xd5, 0x9c, 0x10, 0xaf, 0x2a, + 0x63, 0xef, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, + 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xd0, 0x71, 0xc5, 0x4a, 0x13, 0x27, + 0xe6, 0x0e, 0x3d, 0x53, 0x17, 0x33, 0x86, 0xf7, 0x72, 0xd8, + 0x96, 0x12, 0xc1, 0x58, 0x52, 0x5a, 0xd1, 0x98, 0x52, 0x5b, + 0xd1, 0x98, 0xad, 0xa4, 0x2e, 0x67, 0xf3, 0xcd, 0x40, 0x44, + 0xbd, 0x28, 0x21, 0x89, 0xa6, 0xb4, 0x9a, 0xb8, 0x30, 0xae, + 0xe8, 0xee, 0x2d, 0x39, 0xe2, 0x2e, 0x6f, 0x7c, 0xf1, 0x5c, + 0x6f, 0x78, 0xe3, 0x6e, 0x90, 0x87, 0x1c, 0x91, 0xc9, 0x8d, + 0xc2, 0x64, 0x2b, 0x03, 0x86, 0x5c, 0x94, 0xa8, 0xe6, 0x7a, + 0xf7, 0x40, 0x86, 0xbe, 0xbb, 0x61, 0x1d, 0xe0, 0x99, 0xf9, + 0xbd, 0xb0, 0x99, 0xf9, 0xbd, 0xb0, 0x66, 0x06, 0x42, 0x4f, + 0xc6, 0xb5, 0xef, 0xf2, 0xcb, 0x0c, 0xae, 0x1b, 0x09, 0x8a, + 0x03, 0xcd, 0xb3, 0x7b, 0x22, 0x02, 0x76, 0xe8, 0xab, 0x32, + 0x74, 0xcc, 0x22, 0x26, 0x76, 0xcc, 0x22, 0x22, 0x89, 0x33, + 0xdd, 0xdd, 0xcb, 0xca, 0xe4, 0x24, 0x0f, 0x9b, 0x44, 0xb0, + 0x0c, 0xec, 0x1d, 0x24, 0xe5, 0xc1, 0x47, 0xb3, 0xbc, 0x60, + 0xad, 0x51, 0xe2, 0xe2, 0x2d, 0x5d, 0xe0, 0xe2, 0x2d, 0x55, + 0x1f, 0x1d, 0xd2, 0xaa, 0x78, 0x65, 0x42, 0x20, 0xd9, 0xc6, + 0x7f, 0x58, 0x02, 0x8b, 0x8b, 0x54, 0x64, 0xea, 0xc5, 0x56, + 0x16, 0x04, 0x75, 0xf0, 0x74, 0x9c, 0xcc, 0x80, 0x54, 0x8e, + 0xc5, 0xf0, 0xab, 0x71, 0x3a, 0x0f, 0x31, 0x9e, 0x75, 0x1e, + 0x41, 0x8f, 0x48, 0x84, 0x25, 0x09, 0xd0, 0x30, 0xc0, 0x2f, + 0xda, 0xba, 0x0e, 0x33, 0xb8, 0xea, 0x46, 0x2d, 0xf4, 0x73, + 0x46, 0x2f, 0xf4, 0xf3, 0xb9, 0xd0, 0x0b, 0x0c, 0x2a, 0x2c, + 0xab, 0x38, 0x2c, 0xa1, 0x4e, 0xac, 0x04, 0x56, 0xf1, 0x8a, + 0xca, 0xc3, 0x14, 0xb6, 0x15, 0x83, 0x73, 0x6d, 0xb7, 0x91, + 0x18, 0x47, 0x97, 0x93, 0x10, 0x47, 0x68, 0x6c, 0xef, 0xb8, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x5d, 0x80, 0xb1, 0x27, 0xb4, 0xb2, 0x4b, 0x0c, + 0x6a, 0xaa, 0x6d, 0x8a, 0xf7, 0xae, 0xb4, 0x61, 0xb2, 0x81, + 0x47, 0x95, 0xf4, 0x8f, 0xc0, 0x83, 0xf4, 0x8b, 0xc0, 0x87, + 0x0b, 0x74, 0x3f, 0x78, 0x8b, 0xc9, 0x6d, 0x3d, 0x54, 0x1e, + 0x54, 0xdd, 0x68, 0x2b, 0xf7, 0xb2, 0x86, 0x79, 0xdb, 0x0a, + 0xdd, 0x1b, 0x4a, 0xb4, 0xe0, 0x06, 0xa7, 0x14, 0xe0, 0x0e, + 0xa7, 0x14, 0x1f, 0xf1, 0x58, 0xeb, 0x66, 0xf8, 0x4f, 0x13, + 0x43, 0x34, 0x4c, 0x27, 0x1d, 0xee, 0xe6, 0x19, 0x14, 0xc8, + 0x9d, 0x41, 0x68, 0x71, 0xba, 0xe5, 0x7f, 0x15, 0xac, 0xa9, + 0x7d, 0x35, 0xae, 0xe9, 0x82, 0xca, 0x51, 0x16, 0xe0, 0xaf, + 0x12, 0x83, 0xac, 0x0c, 0x63, 0x31, 0x0f, 0xb9, 0x00, 0x51, + 0x0e, 0x27, 0xac, 0x84, 0x12, 0x1e, 0x02, 0x4e, 0x0c, 0x2f, + 0x61, 0xce, 0x0c, 0x2f, 0x61, 0x4e, 0xf3, 0xd0, 0x9e, 0xb1, + 0x7c, 0x5b, 0xcb, 0xde, 0x06, 0x2c, 0x19, 0xeb, 0x19, 0x2e, + 0x71, 0x96, 0xc4, 0xac, 0x44, 0x03, 0x5d, 0x1b, 0xb6, 0xae, + 0x45, 0xbe, 0x97, 0x8f, 0x45, 0x3e, 0x97, 0x8f, 0xba, 0xc1, + 0x68, 0x70, 0x46, 0x67, 0xfa, 0x4b, 0x16, 0xd1, 0x80, 0x61, + 0x87, 0xdd, 0x7c, 0x75, 0x0b, 0xe0, 0x48, 0xf4, 0xa6, 0x0b, + 0xe1, 0x02, 0x0b, 0x8a, 0x61, 0x40, 0x8f, 0x8b, 0x61, 0x40, + 0x70, 0x74, 0x9e, 0xbf, 0x7b, 0xfb, 0xcb, 0x91, 0xf4, 0x67, + 0x6c, 0x57, 0xf6, 0x16, 0x4f, 0x75, 0x42, 0x28, 0xbf, 0x0e, + 0x62, 0x69, 0x70, 0xba, 0x4a, 0x2a, 0x60, 0xa0, 0x4a, 0x28, + 0x60, 0xa2, 0xb5, 0xd7, 0x9f, 0x5d, 0xde, 0x3d, 0x13, 0x11, + 0xb6, 0xad, 0x07, 0xf7, 0x65, 0xbf, 0xb0, 0xb6, 0xd6, 0x10, + 0x28, 0xf7, 0x9b, 0x62, 0x0b, 0x48, 0x53, 0xb4, 0x2b, 0x33, + 0xd3, 0xb4, 0x2b, 0x73, 0x2c, 0x4b, 0xd4, 0x8c, 0x00, 0x00, + 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, + 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xbb, 0x06, 0xf8, 0xf4, 0xe2, 0x7f, 0x58, 0xb0, 0x4c, 0x95, + 0xc4, 0x15, 0x18, 0xd4, 0x3c, 0xd2, 0x2f, 0xe7, 0x0d, 0x13, + 0x19, 0x67, 0x0f, 0x50, 0x39, 0x67, 0x0c, 0x50, 0xc6, 0x98, + 0xf3, 0xaf, 0xca, 0x03, 0x23, 0x31, 0x22, 0xf6, 0xe4, 0xc6, + 0x43, 0x06, 0xd3, 0x04, 0x83, 0xf9, 0x2b, 0xe0, 0x5a, 0x80, + 0x4c, 0x36, 0x12, 0xf0, 0xc1, 0x77, 0x12, 0xd1, 0xc9, 0x77, + 0xed, 0x2e, 0x36, 0x88, 0xe9, 0x74, 0x24, 0xbb, 0x6a, 0x18, + 0x27, 0x66, 0xfb, 0xab, 0x3c, 0x45, 0xef, 0xba, 0x9c, 0x13, + 0xe7, 0xe3, 0xe2, 0x8e, 0x62, 0x97, 0x76, 0x03, 0x62, 0xb3, + 0xf6, 0x03, 0x9d, 0x4c, 0x09, 0xfc, 0x3b, 0x18, 0x69, 0x09, + 0xc9, 0xb5, 0x86, 0x0b, 0xb5, 0xc5, 0xe9, 0x2f, 0xd8, 0x24, + 0x62, 0x33, 0x91, 0x04, 0x64, 0xf8, 0x90, 0x01, 0x14, 0xfa, + 0x90, 0x01, 0x20, 0xfa, 0x6f, 0xfe, 0xdf, 0x05, 0x8a, 0x3f, + 0x8b, 0x7e, 0xad, 0x86, 0xaf, 0x6e, 0x24, 0x8a, 0x72, 0xc7, + 0x72, 0xea, 0x7b, 0xf6, 0x20, 0x25, 0x44, 0xb7, 0xa2, 0xb0, + 0x76, 0xc7, 0xa2, 0xa0, 0x76, 0xd7, 0x5d, 0x5f, 0x89, 0x28, + 0x3e, 0xa2, 0x76, 0x94, 0x65, 0x98, 0x57, 0xe7, 0x89, 0xb6, + 0x26, 0x29, 0x9c, 0xfb, 0xb6, 0xa6, 0xa2, 0x7e, 0xfa, 0xe2, + 0xb0, 0xf4, 0xe9, 0xe6, 0xb0, 0xf4, 0xe9, 0xe6, 0x4f, 0x0b, + 0x16, 0x19, 0x4d, 0xa5, 0x55, 0xd0, 0x1f, 0x4d, 0x7b, 0x8d, + 0xda, 0x14, 0xd1, 0xa6, 0x68, 0x62, 0xbb, 0xe5, 0x22, 0xba, + 0x2c, 0xc5, 0xc8, 0x7e, 0x7c, 0x49, 0xc8, 0x7a, 0x7c, 0x4d, + 0x37, 0x85, 0x83, 0xb2, 0xc3, 0x5e, 0x01, 0xcd, 0x9c, 0x11, + 0xf3, 0x2d, 0x7a, 0xee, 0x11, 0x31, 0xdc, 0xab, 0x44, 0xc4, + 0x51, 0x14, 0xb3, 0x77, 0x48, 0xb4, 0x45, 0x01, 0x58, 0xb4, + 0x45, 0x41, 0xa7, 0x4b, 0xba, 0xbe, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xbe, 0xc5, + 0x05, 0xaf, 0x59, 0x37, 0xee, 0x47, 0xeb, 0x14, 0xa1, 0x64, + 0xd2, 0x71, 0x6a, 0x0a, 0x66, 0x20, 0x65, 0xdf, 0xc6, 0x29, + 0x75, 0x22, 0x46, 0x21, 0x75, 0x26, 0xb9, 0xde, 0x8a, 0xd9, + 0x70, 0x38, 0x0c, 0x91, 0x5f, 0x36, 0x4e, 0xfd, 0x6f, 0x1f, + 0x8b, 0x2d, 0x97, 0xe7, 0x26, 0x1e, 0x06, 0x4f, 0x7c, 0xbe, + 0x02, 0xe7, 0xb5, 0xae, 0x82, 0xe7, 0xb4, 0xbe, 0x7d, 0x18, + 0x4b, 0x41, 0xed, 0xf3, 0x96, 0x19, 0xef, 0x3d, 0x82, 0xea, + 0xd6, 0x41, 0xb4, 0x36, 0xd4, 0x62, 0x5b, 0xf6, 0x85, 0xaf, + 0x52, 0xf8, 0xae, 0x61, 0x5e, 0xa7, 0xac, 0x61, 0x5e, 0xa7, + 0x53, 0x9e, 0xa1, 0x58, 0x63, 0x0e, 0x62, 0xd3, 0x65, 0x9c, + 0x9e, 0x88, 0x23, 0xdd, 0xa4, 0xc0, 0x8c, 0x63, 0xdd, 0xd9, + 0x45, 0xde, 0x60, 0x0f, 0xd6, 0x46, 0x02, 0xa3, 0x54, 0x4e, + 0x02, 0xa3, 0xab, 0xb1, 0xfd, 0x5c, 0xef, 0x16, 0x95, 0xbd, + 0x36, 0x9d, 0x3a, 0xd2, 0x62, 0x0c, 0x58, 0x20, 0x86, 0x9f, + 0x1d, 0xb8, 0xbf, 0x75, 0x78, 0xa6, 0x17, 0x7c, 0x59, 0x21, + 0x97, 0x7c, 0x59, 0x25, 0x68, 0x83, 0xa6, 0xda, 0x5f, 0xd0, + 0x64, 0xf4, 0x18, 0x66, 0x4e, 0xbf, 0x5b, 0xfc, 0x3f, 0x39, + 0xbe, 0xf4, 0x88, 0xe1, 0xe4, 0x44, 0x5a, 0xd6, 0xf7, 0x67, + 0x1a, 0x12, 0xf7, 0x44, 0x1a, 0x12, 0x08, 0xbb, 0xe5, 0xed, + 0xbc, 0xf8, 0xe7, 0x64, 0xf8, 0xf0, 0xa5, 0xc5, 0x00, 0xc5, + 0xf5, 0x39, 0x05, 0x8a, 0xc1, 0x6d, 0x29, 0xfd, 0x8e, 0x4d, + 0x68, 0x94, 0xc7, 0x6d, 0x28, 0x94, 0xc7, 0x6d, 0xd7, 0x6b, + 0x38, 0x92, 0x5a, 0xad, 0x07, 0xc2, 0x9b, 0x86, 0xe7, 0x02, + 0x5f, 0x10, 0xef, 0x0d, 0xe7, 0xf2, 0x98, 0x78, 0x3d, 0xe8, + 0xe4, 0x0f, 0x65, 0xc8, 0xd0, 0x7b, 0x65, 0xc8, 0xd0, 0x5b, + 0x9a, 0x37, 0x2f, 0xa4, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xd0, 0xce, 0xb3, 0x2b, + 0x6c, 0xd6, 0x8b, 0x4e, 0xf2, 0xab, 0xeb, 0x05, 0xb0, 0xe7, + 0xcc, 0xd2, 0x15, 0xfe, 0x97, 0x4d, 0x86, 0xbe, 0xdf, 0xcd, + 0x86, 0xbe, 0xcf, 0xcd, 0x79, 0x41, 0x30, 0x32, 0x9c, 0xa9, + 0x61, 0x00, 0x3e, 0x63, 0xb4, 0x5b, 0x38, 0xf2, 0x36, 0x88, + 0x07, 0xb6, 0x64, 0x45, 0x92, 0xe4, 0x4d, 0xa2, 0x00, 0xb7, + 0x4d, 0x2c, 0x00, 0xb7, 0x4d, 0xac, 0xff, 0x48, 0xb2, 0x53, + 0xcf, 0x72, 0x93, 0xb4, 0x91, 0xbc, 0x1b, 0x03, 0x01, 0x7a, + 0xf9, 0x37, 0x06, 0xcf, 0x5c, 0x8e, 0x2f, 0xc9, 0x76, 0xb3, + 0x18, 0x7a, 0x76, 0xfc, 0x18, 0xba, 0x76, 0xbe, 0xe7, 0x05, + 0x89, 0x41, 0x6a, 0x72, 0x3f, 0xb8, 0x16, 0xfd, 0xf3, 0xdc, + 0xe4, 0x97, 0xbc, 0xcc, 0x12, 0x9b, 0x07, 0x02, 0xaf, 0xd9, + 0xdb, 0x92, 0x8d, 0x59, 0xc7, 0x06, 0x8d, 0xd9, 0xc7, 0x06, + 0x72, 0x26, 0x38, 0xf9, 0xcd, 0x73, 0xe4, 0x35, 0x7a, 0x80, + 0xf9, 0xfb, 0x09, 0x53, 0xe6, 0x44, 0x54, 0x9c, 0x24, 0x13, + 0xc8, 0xe3, 0x82, 0xe1, 0x48, 0xca, 0x94, 0x63, 0x48, 0xca, + 0x84, 0x63, 0xb7, 0x35, 0x7b, 0x9c, 0x41, 0xbb, 0x1b, 0xf7, + 0x2c, 0xfe, 0x1e, 0x13, 0x65, 0x39, 0xde, 0x26, 0x46, 0x50, + 0xf2, 0xa1, 0x00, 0x0b, 0xd5, 0x79, 0x54, 0x43, 0x15, 0x2a, + 0x44, 0x43, 0x15, 0x6b, 0xbb, 0xbc, 0xea, 0x94, 0xa3, 0x44, + 0xb6, 0xc5, 0x53, 0xaa, 0xcd, 0xa0, 0xe3, 0x06, 0xeb, 0x20, + 0x73, 0xc4, 0x45, 0x0d, 0x1a, 0xba, 0xda, 0x20, 0xd3, 0xe2, + 0xba, 0x64, 0xd3, 0xe2, 0xba, 0x20, 0x2c, 0x1d, 0x45, 0xdf, + 0x34, 0x47, 0x05, 0x41, 0x1c, 0xb3, 0x04, 0x02, 0x19, 0xa1, + 0xa4, 0x04, 0x7f, 0x75, 0xc3, 0xc7, 0xf9, 0xaf, 0xac, 0x8f, + 0xd9, 0xf3, 0x4f, 0xb7, 0xd9, 0xf3, 0x4f, 0x97, 0x26, 0x0c, + 0xb0, 0x68, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, + 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x13, 0xb9, 0xd8, 0x0b, 0xa9, 0xaf, + 0x83, 0x19, 0xb5, 0xea, 0x75, 0x81, 0xb1, 0xd3, 0x52, 0x95, + 0x60, 0x4b, 0x18, 0xde, 0x74, 0x9f, 0x98, 0x9d, 0x74, 0xdf, + 0x18, 0x9d, 0x8b, 0x20, 0xe7, 0x62, 0x82, 0x65, 0xb3, 0x18, + 0x0c, 0xa4, 0x3b, 0xfb, 0x39, 0xff, 0xe7, 0x47, 0x7b, 0x1d, + 0xb6, 0xfe, 0x7b, 0xb3, 0xa6, 0xda, 0x53, 0xb5, 0x66, 0xdb, + 0x5b, 0xb5, 0x66, 0xdb, 0xa4, 0x4a, 0x99, 0x24, 0x01, 0x3f, + 0xf3, 0xc0, 0x60, 0x70, 0x14, 0xd2, 0xe0, 0xf8, 0xc4, 0x31, + 0xc9, 0x20, 0xc1, 0x69, 0x35, 0x30, 0x56, 0xc9, 0x84, 0x28, + 0x4d, 0x4a, 0x8c, 0x28, 0x4d, 0x4a, 0x73, 0xd7, 0xb2, 0xb5, + 0x3f, 0x6e, 0x45, 0xd9, 0xa0, 0x54, 0x23, 0x06, 0x23, 0xcd, + 0x8f, 0x76, 0x39, 0x7d, 0xa7, 0x4d, 0x25, 0x90, 0x1e, 0x6b, + 0x21, 0xdf, 0xf3, 0x29, 0x21, 0xd7, 0xfb, 0x69, 0xde, 0x28, + 0x04, 0x96, 0x87, 0x17, 0xd5, 0x68, 0x9c, 0x09, 0x04, 0xce, + 0x1c, 0xc2, 0x2e, 0xed, 0xe5, 0xe2, 0xf5, 0x61, 0x52, 0x34, + 0x4f, 0x27, 0x5a, 0x66, 0x43, 0x21, 0x7a, 0x66, 0x43, 0x21, + 0x85, 0x99, 0xbc, 0xde, 0xb3, 0x1a, 0x43, 0x87, 0x0a, 0xd3, + 0xda, 0xc4, 0xa9, 0xfd, 0x54, 0xd3, 0x60, 0xa0, 0x2c, 0x41, + 0x75, 0x74, 0x20, 0x25, 0x68, 0x68, 0x2c, 0x03, 0x68, 0x60, + 0x2c, 0x03, 0x97, 0x9f, 0xd3, 0xfc, 0xec, 0x2a, 0x7c, 0x2e, + 0x7b, 0x70, 0x1b, 0x98, 0xc6, 0xa7, 0xd2, 0x32, 0xbd, 0x35, + 0xff, 0x14, 0x27, 0x7d, 0x1a, 0x50, 0x8e, 0x61, 0x3e, 0x50, + 0x8f, 0x61, 0x3e, 0x50, 0x70, 0x9e, 0xc1, 0xaf, 0x06, 0x1f, + 0xe1, 0xf8, 0x97, 0xab, 0x39, 0x0c, 0x51, 0x48, 0x88, 0x2a, + 0xa4, 0xdf, 0x5c, 0x42, 0x5e, 0xee, 0x8a, 0xec, 0x5c, 0xef, + 0xcc, 0xdc, 0x5c, 0xef, 0xcc, 0xdc, 0xa3, 0x10, 0x33, 0x23, + 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, + 0x00, 0x00 +}; + From 029a11d2d1485d276c7153d6c996f24380b6e155 Mon Sep 17 00:00:00 2001 From: Arpan Suravi Prasad Date: Mon, 22 Jul 2024 15:15:27 +0200 Subject: [PATCH 56/71] [add] idma_pointwise test Test to verify interference handled by HCI. The neureka and iDMA execution are forced to happen in the same execution time. The wide ports of the iDMA and neureka conflicts with each other handled through hci arbiter tree --- neureka/app/Makefile | 7 +- neureka/idma_pointwise/Makefile | 5 + neureka/idma_pointwise/inc/bias.h | 9 + neureka/idma_pointwise/inc/input.h | 9 + neureka/idma_pointwise/inc/layer_conf.h | 42 + neureka/idma_pointwise/inc/output.h | 14 + neureka/idma_pointwise/inc/scale.h | 9 + neureka/idma_pointwise/inc/weight.h | 9 + neureka/idma_pointwise/main.c | 360 ++++++++ neureka/idma_pointwise/src/bias.c | 10 + neureka/idma_pointwise/src/input.c | 906 ++++++++++++++++++ neureka/idma_pointwise/src/output.c | 165 ++++ neureka/idma_pointwise/src/scale.c | 10 + neureka/idma_pointwise/src/weight.c | 1130 +++++++++++++++++++++++ 14 files changed, 2684 insertions(+), 1 deletion(-) create mode 100644 neureka/idma_pointwise/Makefile create mode 100644 neureka/idma_pointwise/inc/bias.h create mode 100644 neureka/idma_pointwise/inc/input.h create mode 100644 neureka/idma_pointwise/inc/layer_conf.h create mode 100644 neureka/idma_pointwise/inc/output.h create mode 100644 neureka/idma_pointwise/inc/scale.h create mode 100644 neureka/idma_pointwise/inc/weight.h create mode 100644 neureka/idma_pointwise/main.c create mode 100644 neureka/idma_pointwise/src/bias.c create mode 100644 neureka/idma_pointwise/src/input.c create mode 100644 neureka/idma_pointwise/src/output.c create mode 100644 neureka/idma_pointwise/src/scale.c create mode 100644 neureka/idma_pointwise/src/weight.c diff --git a/neureka/app/Makefile b/neureka/app/Makefile index f2f4067..b28b359 100644 --- a/neureka/app/Makefile +++ b/neureka/app/Makefile @@ -24,7 +24,12 @@ ACCELERATOR := neureka STIM_DIR := ./ INC_DIRS += $(LIBDIR)/inc -APP_SRCS += $(wildcard $(LIBDIR)/src/*.c) $(wildcard $(LIBDIR)/*.c) + +ifndef OVERRIDE_MAIN +APP_SRCS += $(wildcard $(LIBDIR)/src/*.c) +endif + +APP_SRCS += $(wildcard $(LIBDIR)/*.c) ## Library INC_DIRS += $(LIBDIR) $(LIBDIR)/util diff --git a/neureka/idma_pointwise/Makefile b/neureka/idma_pointwise/Makefile new file mode 100644 index 0000000..41c2bc7 --- /dev/null +++ b/neureka/idma_pointwise/Makefile @@ -0,0 +1,5 @@ +APP_SRCS += main.c +OVERRIDE_MAIN = 1 +include ../app/Makefile + +STIM_DIR := ../pointwise/ \ No newline at end of file diff --git a/neureka/idma_pointwise/inc/bias.h b/neureka/idma_pointwise/inc/bias.h new file mode 100644 index 0000000..f28d0f5 --- /dev/null +++ b/neureka/idma_pointwise/inc/bias.h @@ -0,0 +1,9 @@ +#ifndef __BIAS_H__ +#define __BIAS_H__ + +#include + +#define BIAS_SIZE (39) +extern int32_t bias[BIAS_SIZE]; + +#endif // __BIAS_H__ diff --git a/neureka/idma_pointwise/inc/input.h b/neureka/idma_pointwise/inc/input.h new file mode 100644 index 0000000..985f9a9 --- /dev/null +++ b/neureka/idma_pointwise/inc/input.h @@ -0,0 +1,9 @@ +#ifndef __INPUT_H__ +#define __INPUT_H__ + +#include + +#define INPUT_SIZE (8995) +extern uint8_t input[INPUT_SIZE]; + +#endif // __INPUT_H__ diff --git a/neureka/idma_pointwise/inc/layer_conf.h b/neureka/idma_pointwise/inc/layer_conf.h new file mode 100644 index 0000000..e5e4812 --- /dev/null +++ b/neureka/idma_pointwise/inc/layer_conf.h @@ -0,0 +1,42 @@ +#ifndef __LAYER_CONF_H__ +#define __LAYER_CONF_H__ + +#define TEST_NAME "test" +#define INPUT_HEIGHT (7) +#define INPUT_WIDTH (5) +#define INPUT_CHANNEL (257) +#define INPUT_SIGNED (0) +#define INPUT_BITS (8) + +#define OUTPUT_HEIGHT (7) +#define OUTPUT_WIDTH (5) +#define OUTPUT_CHANNEL (39) +#define OUTPUT_BITS (8) + +#define WEIGHT_HEIGHT (1) +#define WEIGHT_WIDTH (1) +#define WEIGHT_CHANNEL_IN (257) +#define WEIGHT_CHANNEL_OUT (39) +#define WEIGHT_BITS (8) +#define WEIGHT_OFFSET (-128) + +#define SCALE_BITS (8) + +#define BIAS_BITS (32) + +#define PADDING_TOP (0) +#define PADDING_BOTTOM (0) +#define PADDING_LEFT (0) +#define PADDING_RIGHT (0) +#define PADDING_VALUE (0) + +#define STRIDE_HEIGHT (1) +#define STRIDE_WIDTH (1) + +#define GROUPS (1) +#define OUTSHIFT (12) +#define HAS_NORM_QUANT (1) +#define HAS_BIAS (1) +#define HAS_RELU (1) + +#endif // __LAYER_CONF_H__ diff --git a/neureka/idma_pointwise/inc/output.h b/neureka/idma_pointwise/inc/output.h new file mode 100644 index 0000000..68c6c11 --- /dev/null +++ b/neureka/idma_pointwise/inc/output.h @@ -0,0 +1,14 @@ +#ifndef __OUTPUT_H__ +#define __OUTPUT_H__ + +#include + +#define OUTPUT_SIZE (1365) +extern uint8_t output[OUTPUT_SIZE]; + +#define GOLDEN_OUTPUT_SIZE (1365) +extern uint8_t golden_output[GOLDEN_OUTPUT_SIZE]; + +int check_output(); + +#endif // __OUTPUT_H__ diff --git a/neureka/idma_pointwise/inc/scale.h b/neureka/idma_pointwise/inc/scale.h new file mode 100644 index 0000000..67dea26 --- /dev/null +++ b/neureka/idma_pointwise/inc/scale.h @@ -0,0 +1,9 @@ +#ifndef __SCALE_H__ +#define __SCALE_H__ + +#include + +#define SCALE_SIZE (39) +extern uint8_t scale[SCALE_SIZE]; + +#endif // __SCALE_H__ diff --git a/neureka/idma_pointwise/inc/weight.h b/neureka/idma_pointwise/inc/weight.h new file mode 100644 index 0000000..ba39fae --- /dev/null +++ b/neureka/idma_pointwise/inc/weight.h @@ -0,0 +1,9 @@ +#ifndef __WEIGHT_H__ +#define __WEIGHT_H__ + +#include + +#define WEIGHT_SIZE (11232) +extern uint8_t weight[WEIGHT_SIZE]; + +#endif // __WEIGHT_H__ diff --git a/neureka/idma_pointwise/main.c b/neureka/idma_pointwise/main.c new file mode 100644 index 0000000..dee3678 --- /dev/null +++ b/neureka/idma_pointwise/main.c @@ -0,0 +1,360 @@ +/* + * Luka Macan + * + * Copyright 2023 ETH Zurich and University of Bologna + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * SPDX-License-Identifier: Apache-2.0 + */ + +#include "nnx_layer.h" +#include + +#include "neureka.h" +#include "neureka_gvsoc.h" +#include "neureka_testbench_bsp.h" +#include "neureka_task.h" +#include "pulp_nnx_neureka.h" + +#define NULL 0 + +typedef neureka_norm_mode_e nnx_norm_mode_e; +typedef neureka_quant_t nnx_quant_t; +typedef neureka_quant_function_e nnx_quant_function_e; +typedef neureka_norm_t nnx_norm_t; +typedef neureka_task_t nnx_task_t; +typedef neureka_dev_t nnx_dev_t; +typedef neureka_testbench_conf_t nnx_bsp_conf_t; +typedef neureka_task_flag_e nnx_task_flag_e; + +#define nnxTaskFlagTrue neurekaTaskFlagTrue +#define nnxTaskFlagFalse neurekaTaskFlagFalse + +#define nnx_task_init neureka_task_init +#define nnx_task_set_op_to_conv neureka_task_set_op_to_conv +#define nnx_task_set_bits neureka_task_set_bits +#define nnx_task_set_norm_quant neureka_task_set_norm_quant +#define nnx_task_set_weight_offset neureka_task_set_weight_offset +#define nnx_task_set_weight_source neureka_task_set_weight_source +#define nnx_task_set_activation_prefetch neureka_task_set_activation_prefetch +#define nnx_task_set_dims neureka_task_set_dims +#define nnx_task_set_ptrs_conv neureka_task_set_ptrs_conv +#define nnx_task_set_ptrs_norm_quant neureka_task_set_ptrs_norm_quant + +#define nnx_bsp_get_dev neureka_testbench_get_dev + +#define nnx_init neureka_nnx_init +#define nnx_dispatch_wait neureka_nnx_dispatch_wait +#define nnx_dispatch neureka_nnx_dispatch +#define nnx_resolve_wait neureka_nnx_resolve_wait +#define nnx_term neureka_nnx_term + +// Generated headers +#include "bias.h" +#include "input.h" +#include "layer_conf.h" +#include "output.h" +#include "scale.h" +#include "weight.h" + +static void task_prepare(nnx_task_t *task) { + nnx_task_init(task); + nnx_task_set_op_to_conv(task, WEIGHT_HEIGHT, GROUPS > 1); + nnx_task_set_bits(task, INPUT_BITS, OUTPUT_BITS, WEIGHT_BITS); + + nnx_task_set_weight_offset(task, weightOffsetModeLayerWise, WEIGHT_OFFSET); + +#ifdef NEUREKA_WEIGHT_SOURCE_WMEM + nnx_task_set_weight_source(task, neurekaWeightSourceWmem); + nnx_task_set_activation_prefetch(task, activationPrefetchOn); +#else + neureka_task_set_weight_source(task, neurekaWeightSourceTcdm); + nnx_task_set_activation_prefetch(task, activationPrefetchOff); +#endif +#if INPUT_SIGNED == 1 + neureka_task_set_input_signed(task); +#else + neureka_task_set_input_unsigned(task); +#endif + + const uint32_t w_in_stride = INPUT_CHANNEL * INPUT_BITS / 8; + const uint32_t h_in_stride = INPUT_WIDTH * w_in_stride; + const uint32_t w_out_stride = OUTPUT_CHANNEL * OUTPUT_BITS / 8; + const uint32_t h_out_stride = OUTPUT_WIDTH * w_out_stride; + +#if STRIDE_HEIGHT == 2 && STRIDE_WIDTH == 2 + nnx_task_set_dims_stride2x2( + task, INPUT_HEIGHT, INPUT_WIDTH, INPUT_CHANNEL, h_in_stride, w_in_stride, + OUTPUT_HEIGHT, OUTPUT_WIDTH, OUTPUT_CHANNEL, h_out_stride, w_out_stride, + WEIGHT_HEIGHT, WEIGHT_WIDTH, PADDING_TOP, PADDING_BOTTOM, PADDING_LEFT, + PADDING_RIGHT); +#else + nnx_task_set_dims(task, INPUT_WIDTH, INPUT_CHANNEL, h_in_stride, w_in_stride, + OUTPUT_HEIGHT, OUTPUT_WIDTH, OUTPUT_CHANNEL, h_out_stride, + w_out_stride, PADDING_TOP, PADDING_BOTTOM, PADDING_LEFT, + PADDING_RIGHT); +#endif + + nnx_task_set_ptrs_conv(task, (uint32_t)input, INPUT_WIDTH, w_in_stride, + PADDING_TOP, PADDING_LEFT, (uint32_t)output, + (uint32_t)weight); +#if HAS_NORM_QUANT == 1 +#if SCALE_BITS == 8 + const nnx_norm_mode_e normMode = normMode8Bit; +#elif SCALE_BITS == 32 + const nnx_norm_mode_e normMode = normMode32Bit; +#endif + + const nnx_task_flag_e flag_bias = + HAS_BIAS ? nnxTaskFlagTrue : nnxTaskFlagFalse; + const uint32_t bias_ptr = (uint32_t)(HAS_BIAS ? bias : NULL); + + nnx_quant_function_e quant_function = + HAS_RELU ? quantFunctionRelu : quantFunctionIdentity; + + nnx_task_set_norm_quant(task, + (nnx_quant_t){.shift_amount = OUTSHIFT, + .function = quant_function, + .flag_rounding = nnxTaskFlagFalse}, + (nnx_norm_t){.mode = normMode, + .flag_bias = flag_bias, + .flag_shift = nnxTaskFlagFalse}); + + nnx_task_set_ptrs_norm_quant(task, (uint32_t)scale, NULL, bias_ptr); +#endif // HAS_NORM_QUANT +} + +static void task_execute(nnx_task_t *task) { + nnx_dev_t *dev = nnx_bsp_get_dev(); + + nnx_bsp_conf_t conf = {.max_stall = 8}; + nnx_init(dev, &conf); + + nnx_dispatch_wait(dev); + + // printf("CFG:\n"); + // for (int i=0; idata)[i]); + // } +#if STRIDE_HEIGHT == 2 && STRIDE_WIDTH == 2 + nnx_dispatch_stride2x2(dev, task, INPUT_WIDTH, INPUT_CHANNEL, OUTPUT_HEIGHT, + OUTPUT_WIDTH, OUTPUT_CHANNEL, WEIGHT_HEIGHT, + WEIGHT_WIDTH); +#else + nnx_dispatch(dev, task); +#endif + + nnx_resolve_wait(dev, task); + + nnx_term(dev); + +} +#include +#include +#include +#include + +#include "layer_util.h" +#include "nnx_layer.h" +#include "output.h" +#include "input.h" +#include "weight.h" + + +#include +#include "pulp.h" + +#define VERBOSE_INIT_MEM +// #define VERBOSE_EXEC_IDMA +#define VERBOSE_TEST_MEM +#define VERBOSE_TEST_NEUREKA + +#define MAX_BUFFER_SIZE 0x2000 + +L2_DATA static unsigned char ext[MAX_BUFFER_SIZE]; +L1_DATA static unsigned char loc[MAX_BUFFER_SIZE]; + +#define EXT_DATA_ADDR ((unsigned int) ext) +#define TCDM_DATA_ADDR ((unsigned int) loc) +typedef enum {RX, TX} test_type_t; + +int test_idma(unsigned int len, test_type_t type, unsigned int ext_addr, unsigned int tcdm_addr); +void initialize_mem(unsigned int len, test_type_t type, unsigned int ext_addr, unsigned int tcdm_addr); +int test_mem(unsigned int len, test_type_t type, unsigned int ext_addr, unsigned int tcdm_addr); +int execute_idma(unsigned int len, test_type_t type, unsigned int ext_addr, unsigned int tcdm_addr); + +L1_DATA int global_error = 0; + +#define TX_SIZE (MAX_BUFFER_SIZE - 0x100) + +int main() { + if (rt_cluster_id() != 0) + return bench_cluster_forward(0); + + int error_count = 0; + int id = 0; + + nnx_task_t task; + + + if(get_core_id()==0) + { + initialize_mem(TX_SIZE, TX, ext, loc); + } + + if(get_core_id()==1) + task_prepare(&task); + + synch_barrier(); + + if(get_core_id()==0) + { + // manually delay to force overlapped execution + for(volatile cnt=0; cnt<500; cnt++); + id = execute_idma(TX_SIZE, TX, ext, loc); + } + + if(get_core_id()==1) + task_execute(&task); + + synch_barrier(); + + if(get_core_id()==0) + error_count = test_mem(TX_SIZE, TX, ext, loc); + if(get_core_id()==1) + error_count = check_output(); + + synch_barrier(); + + if(get_core_id()==0) + global_error += error_count; + + synch_barrier(); + + if(get_core_id()==1) + global_error += error_count; + + synch_barrier(); + + return global_error; +} + +int test_idma_loop(){ + int error_count = 0; + + for ( int i = 5; i < 8045; i=5*i) { + error_count += test_idma(i, TX, ext, loc); + } + for ( int i = 5; i < 8045; i=5*i ) { + error_count += test_idma(i, RX, ext, loc); + } + return error_count; +} + +int test_idma(unsigned int len, test_type_t type, unsigned int ext_addr, unsigned int tcdm_addr){ + + int error_count = 0; + + initialize_mem(len, TX, ext, loc); + execute_idma(len, TX, ext, loc); + error_count = test_mem(len, TX, ext, loc); + return error_count; +} + +void initialize_mem(unsigned int len, test_type_t type, unsigned int ext_addr, unsigned int tcdm_addr){ + volatile unsigned int i; + if (type == RX){ + +#ifdef VERBOSE_INIT_MEM + printf ("INITIALIZING MEMORY FOR RX %d OPERATION: \n", len); +#endif + + for (i=0; i Success! No errors found.\n"); + else + printf("> Failure! Found %d/%d errors.\n", n_err, OUTPUT_SIZE); + return n_err; + } + + \ No newline at end of file diff --git a/neureka/idma_pointwise/src/scale.c b/neureka/idma_pointwise/src/scale.c new file mode 100644 index 0000000..5eb2c42 --- /dev/null +++ b/neureka/idma_pointwise/src/scale.c @@ -0,0 +1,10 @@ +#include "scale.h" + +#define SCALE_SIZE (39) +PI_L1 uint8_t scale[SCALE_SIZE] = { + 0x1e, 0x02, 0x1a, 0x1d, 0x15, 0x1b, 0x13, 0x07, 0x15, 0x0e, + 0x01, 0x11, 0x1b, 0x11, 0x0e, 0x11, 0x19, 0x13, 0x0d, 0x13, + 0x1e, 0x0f, 0x0b, 0x0b, 0x05, 0x1b, 0x04, 0x02, 0x0c, 0x14, + 0x0c, 0x04, 0x05, 0x0f, 0x07, 0x0f, 0x0f, 0x16, 0x1c +}; + diff --git a/neureka/idma_pointwise/src/weight.c b/neureka/idma_pointwise/src/weight.c new file mode 100644 index 0000000..140952b --- /dev/null +++ b/neureka/idma_pointwise/src/weight.c @@ -0,0 +1,1130 @@ +#include "weight.h" + +#define WEIGHT_SIZE (11232) +PI_L1 uint8_t weight[WEIGHT_SIZE] = { + 0x9f, 0x3b, 0x8a, 0x72, 0xf7, 0x43, 0x00, 0x69, 0xa1, 0xc9, + 0x09, 0x17, 0xa7, 0xab, 0xc5, 0xf7, 0xa7, 0xfa, 0x97, 0xa8, + 0xa5, 0x92, 0x11, 0xdf, 0xa7, 0x92, 0x91, 0xff, 0x58, 0x6d, + 0x6e, 0x00, 0x18, 0xb6, 0x1f, 0x16, 0x49, 0x91, 0x15, 0x60, + 0x06, 0x38, 0x2d, 0x55, 0x2d, 0xa3, 0x6e, 0x7e, 0xd2, 0x59, + 0x80, 0x79, 0x8f, 0x11, 0x4a, 0x7e, 0x8f, 0x11, 0x4a, 0x7e, + 0x70, 0xee, 0xb5, 0x81, 0x68, 0x39, 0xc7, 0xb5, 0x59, 0x5c, + 0xcd, 0x89, 0xfa, 0x75, 0x35, 0xdd, 0x0d, 0x89, 0x5c, 0xcd, + 0x9a, 0xee, 0x05, 0xba, 0x3d, 0xbc, 0x05, 0xca, 0x1d, 0xbc, + 0x05, 0xca, 0xe2, 0x43, 0xfa, 0x35, 0xee, 0xf7, 0xfa, 0x2d, + 0x88, 0xfb, 0x79, 0x5b, 0x2a, 0xc9, 0x15, 0x24, 0xe4, 0xbe, + 0x84, 0x12, 0x1d, 0x2d, 0x28, 0x42, 0xc6, 0xac, 0x00, 0xb2, + 0xc6, 0xac, 0x00, 0x12, 0x39, 0x53, 0xff, 0xed, 0xe0, 0x32, + 0xc6, 0x63, 0x0c, 0xea, 0x91, 0xf4, 0x00, 0x85, 0x05, 0x7f, + 0x6c, 0x88, 0x55, 0x3e, 0xfd, 0x98, 0x18, 0x1d, 0x6d, 0x9e, + 0x3b, 0x25, 0x6d, 0x9e, 0x3b, 0x25, 0x92, 0x61, 0xc4, 0xda, + 0x1e, 0x15, 0x6a, 0x82, 0x3d, 0x68, 0xeb, 0x2f, 0x6e, 0x76, + 0x1d, 0x53, 0xbb, 0x91, 0x91, 0xa7, 0x5c, 0x4a, 0xfa, 0x3a, + 0xc9, 0x01, 0x2a, 0x1b, 0xc9, 0x01, 0x6a, 0x1b, 0x36, 0xfe, + 0x95, 0xe4, 0x13, 0x69, 0xdd, 0xf5, 0xdc, 0xed, 0xb0, 0x39, + 0xdc, 0xda, 0xf6, 0x76, 0xaf, 0x02, 0xaa, 0xc4, 0x42, 0x3a, + 0xe9, 0x4f, 0x4a, 0x1b, 0xff, 0x4f, 0xca, 0x1a, 0xfb, 0x4f, + 0x35, 0xe5, 0x04, 0xb0, 0x2f, 0x58, 0xab, 0xfa, 0x4c, 0x98, + 0x7f, 0x23, 0x21, 0xa9, 0xfd, 0xce, 0x34, 0xf0, 0x3a, 0x67, + 0x5b, 0x89, 0x6f, 0x3b, 0x01, 0x88, 0x26, 0x3b, 0x01, 0x88, + 0x2e, 0xbb, 0xfe, 0x77, 0xd1, 0x44, 0x00, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf7, 0xd1, + 0x59, 0xb4, 0x26, 0x04, 0x6e, 0x6b, 0xb0, 0x5c, 0x36, 0xaf, + 0xde, 0x83, 0x05, 0xfe, 0x12, 0xc3, 0xe5, 0x71, 0xf6, 0x8f, + 0x0c, 0xcd, 0xf6, 0x8f, 0x24, 0xcd, 0x09, 0x70, 0xdb, 0x32, + 0xb0, 0x48, 0x23, 0x45, 0xb7, 0x93, 0xae, 0xcc, 0x66, 0x56, + 0x86, 0x3f, 0xa5, 0xe8, 0x76, 0xbf, 0xcf, 0x08, 0xa1, 0xed, + 0xff, 0x08, 0x1d, 0xad, 0xff, 0x08, 0x15, 0xad, 0x00, 0xf7, + 0xea, 0x52, 0x78, 0x44, 0x14, 0xba, 0x06, 0x42, 0x66, 0xcb, + 0xc3, 0xe8, 0x9d, 0x75, 0x48, 0x9b, 0x03, 0x94, 0x7b, 0x80, + 0xff, 0x8a, 0xfb, 0x11, 0xce, 0x96, 0x5b, 0x11, 0xce, 0x92, + 0xa4, 0xee, 0x31, 0x6d, 0xe5, 0xe4, 0x8d, 0x49, 0x4d, 0xb4, + 0x11, 0x98, 0x0c, 0x8e, 0x94, 0xbd, 0x3e, 0xfc, 0xbc, 0x24, + 0xe0, 0x7c, 0xfa, 0x85, 0x95, 0xcc, 0x9d, 0x87, 0x94, 0x4c, + 0x9d, 0x87, 0x6b, 0xb3, 0x62, 0x78, 0x01, 0x54, 0xa5, 0xaa, + 0xd9, 0xdd, 0x03, 0xe6, 0xfc, 0x51, 0xce, 0x8e, 0xd4, 0x0c, + 0x6a, 0xe7, 0x4c, 0xf4, 0xfd, 0x13, 0x58, 0x74, 0x87, 0xb3, + 0x58, 0x74, 0x87, 0xbb, 0xa7, 0x8b, 0x78, 0x44, 0x8a, 0x0d, + 0x4a, 0xe6, 0x03, 0x6e, 0x2c, 0xfe, 0xb5, 0x8b, 0x96, 0xbd, + 0xc1, 0xdc, 0xf7, 0xb1, 0x51, 0xc7, 0x5f, 0x03, 0x51, 0xf7, + 0x7b, 0x95, 0x51, 0xe7, 0x7b, 0x95, 0xae, 0x18, 0x84, 0x6a, + 0x54, 0x66, 0x1d, 0xda, 0x22, 0x63, 0xdd, 0x34, 0x7a, 0x6a, + 0x2e, 0x56, 0x99, 0x82, 0x9a, 0xc7, 0xf2, 0x7e, 0x90, 0x5e, + 0x7a, 0x4e, 0xda, 0x76, 0xfa, 0x4e, 0xda, 0x76, 0x05, 0xb1, + 0x25, 0x89, 0x0d, 0xef, 0x72, 0xd8, 0x3c, 0xe2, 0x2a, 0x60, + 0x9d, 0xd5, 0xf0, 0x43, 0x2b, 0x50, 0x86, 0x30, 0xea, 0x59, + 0x9d, 0x45, 0xe8, 0x18, 0xd9, 0xe7, 0xe8, 0x18, 0xd9, 0xe7, + 0x17, 0xe7, 0x26, 0x18, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x69, 0x4a, 0x80, 0xce, + 0xd0, 0x4e, 0x9b, 0x8a, 0xba, 0xa5, 0xd9, 0x53, 0x75, 0x4c, + 0x98, 0x23, 0xcc, 0xe4, 0xd7, 0x31, 0x3d, 0x00, 0xfd, 0x0b, + 0x7d, 0x00, 0xdd, 0x0b, 0x82, 0xff, 0x22, 0xf4, 0x75, 0x49, + 0x5f, 0xcc, 0xdb, 0xae, 0xde, 0xab, 0xdd, 0x30, 0x8b, 0x2c, + 0xa6, 0xc4, 0xb5, 0xf1, 0x97, 0x01, 0x7a, 0x23, 0xa3, 0x95, + 0x0e, 0x2d, 0xa3, 0x95, 0x2e, 0x2d, 0x5c, 0x6a, 0xd1, 0xd2, + 0x65, 0xf0, 0x53, 0x99, 0xf0, 0x91, 0xef, 0x32, 0x96, 0xf7, + 0x12, 0xc3, 0xe0, 0x17, 0x13, 0xac, 0x3c, 0x53, 0x2f, 0x1f, + 0x54, 0x77, 0x33, 0xde, 0x14, 0x77, 0x33, 0x9e, 0xeb, 0x88, + 0xcc, 0x61, 0x02, 0x02, 0xca, 0xed, 0xa2, 0xa4, 0xcf, 0x20, + 0xf7, 0x92, 0xdb, 0x88, 0x11, 0x86, 0xee, 0xcf, 0x9a, 0xe0, + 0xc9, 0x6f, 0x9b, 0x82, 0x88, 0xee, 0x9b, 0x82, 0xc8, 0xee, + 0x64, 0x7d, 0x37, 0x11, 0x46, 0x01, 0xa3, 0xbc, 0x0e, 0xc4, + 0x72, 0xd1, 0xc3, 0x85, 0xad, 0xcb, 0x11, 0x25, 0x56, 0x89, + 0x4e, 0x27, 0xcd, 0xcd, 0xa6, 0xa7, 0x6c, 0x7d, 0x86, 0x27, + 0xec, 0xfd, 0x79, 0xd8, 0x13, 0x02, 0xa0, 0x26, 0xfe, 0xe8, + 0xfc, 0xf5, 0x64, 0x2d, 0x59, 0xa7, 0x92, 0xd4, 0x5a, 0xd3, + 0xbe, 0x77, 0x08, 0x4e, 0x04, 0x86, 0x50, 0xce, 0x36, 0x84, + 0x50, 0xce, 0x36, 0x84, 0xaf, 0x31, 0xc9, 0x7b, 0xbb, 0x25, + 0x67, 0x70, 0x0c, 0x20, 0x92, 0x7f, 0x30, 0xc2, 0xd0, 0x88, + 0x27, 0xaa, 0x32, 0xaf, 0x65, 0xd0, 0x19, 0x4f, 0x83, 0x98, + 0x1e, 0xb3, 0x03, 0x98, 0x1e, 0xb3, 0xfc, 0x67, 0xe1, 0x4c, + 0x73, 0x1e, 0x1f, 0xd8, 0xb7, 0x16, 0x15, 0x8b, 0x96, 0xc5, + 0x15, 0xa3, 0xa5, 0x2b, 0xae, 0x7a, 0x30, 0xb5, 0x0f, 0x89, + 0x2f, 0x92, 0x37, 0xa8, 0x27, 0x92, 0x17, 0xa8, 0xd8, 0x6d, + 0xe8, 0x57, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x4b, 0x8a, 0x05, 0xdc, 0x97, 0x61, + 0xcf, 0x05, 0xb4, 0x98, 0x55, 0x98, 0xc4, 0xc5, 0xd8, 0xb1, + 0x28, 0x49, 0x74, 0x9d, 0x89, 0x8b, 0x74, 0xbd, 0x89, 0xcb, + 0x74, 0xbd, 0x76, 0x34, 0x8b, 0x42, 0xe3, 0x67, 0x8e, 0x28, + 0x5e, 0x2e, 0x32, 0x1f, 0xdf, 0x9e, 0xa1, 0x1f, 0xcf, 0x0f, + 0x1b, 0x16, 0xaa, 0x3e, 0x33, 0x31, 0x83, 0x37, 0xb1, 0x75, + 0x83, 0x36, 0xb1, 0x75, 0x7c, 0xc9, 0x4e, 0x8a, 0xe4, 0x3f, + 0xc5, 0x8b, 0xd2, 0x10, 0xf2, 0xc2, 0x99, 0x4f, 0x15, 0xe1, + 0x72, 0xfc, 0x83, 0xf4, 0x79, 0x03, 0x05, 0x83, 0x79, 0x0f, + 0xc7, 0x80, 0x79, 0x0f, 0xc7, 0x80, 0x86, 0xf0, 0x38, 0x7f, + 0x91, 0x81, 0xee, 0x27, 0xf3, 0x13, 0xbd, 0x47, 0x55, 0xbf, + 0xe1, 0x5e, 0xa4, 0x47, 0xed, 0xf3, 0x1b, 0x7b, 0x41, 0x5b, + 0x26, 0x5b, 0xe5, 0x7b, 0x26, 0x5b, 0x65, 0x7b, 0xd9, 0xa4, + 0x9a, 0x84, 0x3b, 0x70, 0x1e, 0x38, 0x31, 0x21, 0x9c, 0x48, + 0xe7, 0x9c, 0x1b, 0x8d, 0x67, 0xc9, 0x9c, 0x89, 0x26, 0x1a, + 0xc3, 0x2f, 0x27, 0xd8, 0xf3, 0xbb, 0x27, 0x98, 0xb3, 0xab, + 0xd8, 0x67, 0x4c, 0x54, 0x48, 0xbd, 0xf9, 0x4f, 0x2c, 0x37, + 0xc9, 0xdd, 0x4d, 0xef, 0x59, 0x09, 0x73, 0x9d, 0xb8, 0x36, + 0x9b, 0x06, 0x11, 0xc0, 0xb3, 0x16, 0x5d, 0x09, 0xb3, 0x16, + 0x59, 0x09, 0x4c, 0xe9, 0xa6, 0xf6, 0x25, 0xf5, 0xf8, 0x08, + 0x9b, 0x75, 0x87, 0x32, 0x0a, 0xd0, 0x64, 0x04, 0xbb, 0x9d, + 0x5c, 0x30, 0x75, 0xa3, 0x9e, 0x55, 0xb7, 0x94, 0xcd, 0x01, + 0xb7, 0x97, 0xcd, 0x01, 0x48, 0x68, 0x32, 0xfe, 0x4f, 0x22, + 0x33, 0xd1, 0x46, 0x2a, 0x5d, 0xc7, 0x69, 0x59, 0xf0, 0xc2, + 0x1e, 0xc6, 0xb6, 0xca, 0xa0, 0x1f, 0xd6, 0x1f, 0x2b, 0xc6, + 0xdc, 0xfb, 0x29, 0xc6, 0xd4, 0xfb, 0xd6, 0x39, 0x2b, 0x04, + 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, + 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x78, 0xdb, 0x23, 0x5a, 0xc8, 0xac, 0xb1, 0x69, + 0x2d, 0x8a, 0xc1, 0x6a, 0x7b, 0x9c, 0x59, 0x1c, 0xc6, 0x09, + 0x3e, 0x88, 0xfe, 0x00, 0x5b, 0x68, 0xfe, 0x00, 0x5b, 0x68, + 0x01, 0xff, 0xa4, 0x97, 0x62, 0xd2, 0xf9, 0xdf, 0x04, 0x54, + 0x66, 0xcf, 0x69, 0x13, 0x3e, 0x79, 0xc4, 0xa3, 0x28, 0x1c, + 0x81, 0xb4, 0x86, 0xa5, 0xc4, 0xa4, 0xa8, 0x11, 0xc4, 0xa4, + 0xa0, 0x11, 0x3b, 0x5b, 0x5f, 0xee, 0xbe, 0x03, 0x85, 0x09, + 0x4c, 0x70, 0xa5, 0x8a, 0x8a, 0xe9, 0x64, 0x34, 0x4d, 0x6b, + 0x08, 0xe0, 0x6f, 0x60, 0xdc, 0x8c, 0x4f, 0x72, 0xc8, 0xa4, + 0x4f, 0x70, 0xc8, 0xac, 0xb0, 0x8f, 0x37, 0x53, 0xd0, 0xd6, + 0xbe, 0x82, 0x0b, 0x60, 0xbc, 0x0b, 0xea, 0xc9, 0x00, 0xb8, + 0x4d, 0xf7, 0xc5, 0x2b, 0x43, 0xc2, 0xcd, 0x2c, 0x4b, 0x4a, + 0x85, 0x16, 0x4b, 0xc8, 0xc5, 0x16, 0xb4, 0x37, 0x3a, 0xe9, + 0x1f, 0x07, 0x35, 0x29, 0x54, 0x16, 0x57, 0xfc, 0xac, 0x94, + 0x3b, 0xf2, 0xb7, 0x54, 0xa6, 0x89, 0xc4, 0xa5, 0x94, 0x63, + 0x85, 0x87, 0xe3, 0xe7, 0x85, 0x87, 0xa2, 0xe3, 0x7a, 0x78, + 0x5d, 0x1c, 0x11, 0xa7, 0xf8, 0x78, 0x8c, 0x11, 0xa1, 0xe8, + 0x75, 0xbf, 0x6e, 0x3f, 0x05, 0xe7, 0x2d, 0xae, 0x9e, 0xed, + 0x9a, 0x32, 0xd1, 0xef, 0xdb, 0x22, 0xd1, 0xef, 0x9b, 0x22, + 0x2e, 0x10, 0x64, 0xdd, 0x00, 0xb6, 0x03, 0x5d, 0x88, 0x5b, + 0x8f, 0xc7, 0x71, 0x40, 0x83, 0x28, 0x6f, 0x1d, 0xf3, 0xf3, + 0x7c, 0x40, 0xd4, 0xe9, 0x4c, 0x51, 0xc8, 0xe3, 0x4c, 0x51, + 0xc4, 0xe3, 0xb3, 0xae, 0x3b, 0x1c, 0xa8, 0x94, 0x08, 0x8f, + 0x88, 0x6d, 0x96, 0x3d, 0xcd, 0x50, 0xa6, 0xf4, 0x58, 0x41, + 0xd7, 0xa1, 0x58, 0x3a, 0x2d, 0x4e, 0x74, 0x78, 0x2f, 0xcc, + 0x74, 0x78, 0x2f, 0xcc, 0x8b, 0x87, 0xd0, 0x33, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0xca, 0xd3, 0x0c, 0x83, 0x34, 0xb6, 0x8c, 0x65, 0xb7, 0x0f, + 0x20, 0x7d, 0xf7, 0xaa, 0x57, 0xc3, 0x1b, 0x4a, 0xb4, 0xcf, + 0x6b, 0x2a, 0xb4, 0x76, 0x7b, 0x2a, 0xb4, 0x76, 0x84, 0xd5, + 0x4b, 0x89, 0x47, 0xe6, 0x1e, 0xd2, 0x99, 0x2c, 0x18, 0xf7, + 0x80, 0x02, 0x61, 0x8a, 0x12, 0xfc, 0x89, 0xa3, 0x99, 0x93, + 0x64, 0xec, 0x8d, 0xb2, 0xe1, 0xf7, 0x89, 0xb3, 0xe1, 0xf7, + 0x76, 0x4c, 0x1e, 0x08, 0x1f, 0xff, 0x88, 0x4b, 0x72, 0x31, + 0x0e, 0x14, 0xd1, 0x68, 0x91, 0x9d, 0x2d, 0x90, 0xa8, 0x8d, + 0xc1, 0x85, 0xf8, 0x6e, 0x14, 0x80, 0xb2, 0x6d, 0x04, 0x80, + 0xb8, 0x6d, 0xfb, 0x7f, 0x47, 0x92, 0x6c, 0x25, 0xfe, 0xbb, + 0x22, 0x74, 0xac, 0x32, 0x08, 0xd0, 0xb9, 0x98, 0x8a, 0x2c, + 0xc9, 0xba, 0xc4, 0x03, 0x70, 0x24, 0xcc, 0x07, 0xbd, 0x38, + 0xcc, 0x07, 0xbc, 0x38, 0x33, 0xf8, 0x43, 0xc7, 0x03, 0x8f, + 0x12, 0x85, 0x7e, 0xc2, 0xa2, 0x58, 0x2e, 0xdf, 0xee, 0xd9, + 0x5a, 0x4e, 0x35, 0x0f, 0xdc, 0x19, 0x68, 0xc3, 0x56, 0x9a, + 0x01, 0x5b, 0x5e, 0x1a, 0x41, 0x5b, 0xa1, 0xe5, 0xbe, 0xa4, + 0x61, 0x55, 0xb5, 0x36, 0x7c, 0xaf, 0x79, 0x28, 0xee, 0x65, + 0x4c, 0x17, 0x29, 0xa6, 0x9a, 0xe1, 0xdb, 0xd6, 0xfa, 0x83, + 0x5f, 0xe8, 0xac, 0x29, 0x5d, 0xc6, 0xa8, 0x29, 0xa2, 0x39, + 0x57, 0xd6, 0xf4, 0xa1, 0x69, 0x75, 0x8b, 0x66, 0x66, 0xbd, + 0xe9, 0xd5, 0x3f, 0xda, 0x69, 0x1e, 0x0a, 0x95, 0x47, 0xe9, + 0x00, 0x5b, 0xa3, 0xe0, 0x79, 0x0e, 0xa3, 0xe8, 0x58, 0x1a, + 0x5c, 0x17, 0xa7, 0xe5, 0xc2, 0x17, 0xe0, 0xda, 0x9e, 0x76, + 0x68, 0x43, 0x21, 0xd1, 0xff, 0x6c, 0x24, 0x85, 0x79, 0x50, + 0x75, 0xf4, 0x02, 0xcb, 0xe5, 0xfc, 0x44, 0xe7, 0x65, 0xf4, + 0x40, 0xee, 0x9a, 0x0b, 0xbf, 0x11, 0x01, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x07, 0x5f, + 0x4b, 0x87, 0xac, 0x0d, 0xca, 0xed, 0x8e, 0x1c, 0x34, 0xe7, + 0xaa, 0x88, 0xa2, 0x36, 0x5c, 0x47, 0xa8, 0xd2, 0x00, 0x04, + 0xeb, 0x96, 0x04, 0x04, 0xea, 0x96, 0xfb, 0xfb, 0x15, 0x69, + 0x0c, 0x78, 0xa1, 0x71, 0x29, 0x4b, 0x5e, 0x7f, 0x2a, 0xdd, + 0x8e, 0x99, 0xc7, 0x3a, 0x91, 0x94, 0xee, 0x9b, 0x1d, 0x25, + 0xbe, 0x11, 0x15, 0x00, 0xbe, 0x19, 0x1d, 0x00, 0x41, 0xe6, + 0xe2, 0xff, 0x88, 0xdb, 0x6b, 0x02, 0x47, 0xe6, 0x35, 0xe8, + 0xa7, 0x9b, 0x5b, 0x99, 0xc6, 0xb8, 0xd7, 0xa2, 0x08, 0x03, + 0x76, 0x40, 0xe0, 0x97, 0xfb, 0xba, 0xc0, 0x97, 0xfb, 0xaa, + 0x3f, 0x68, 0x04, 0x55, 0x4a, 0x42, 0x8e, 0xa3, 0x33, 0x66, + 0xa3, 0x39, 0x4e, 0xc0, 0xf9, 0x7e, 0x05, 0x86, 0x00, 0x34, + 0x8b, 0x7f, 0x5e, 0x3b, 0x80, 0x6f, 0x5c, 0xbb, 0x81, 0x6f, + 0x5c, 0xbb, 0x7e, 0x90, 0xa3, 0x44, 0xea, 0xb7, 0xac, 0x08, + 0x62, 0x5d, 0x4a, 0x25, 0x38, 0xd8, 0xef, 0xb8, 0x15, 0xa7, + 0xe9, 0xda, 0x80, 0xcf, 0x71, 0x23, 0x16, 0xa6, 0x3b, 0x73, + 0x14, 0xae, 0x7b, 0x73, 0xeb, 0x51, 0x84, 0x8c, 0x7a, 0x61, + 0x8d, 0x92, 0x48, 0x9f, 0xd7, 0x0e, 0x62, 0x8e, 0x5a, 0x58, + 0x47, 0x60, 0x35, 0x9c, 0x5a, 0x6e, 0x10, 0x2f, 0x0a, 0x19, + 0x1c, 0x3f, 0x0a, 0x19, 0x1c, 0x3f, 0xf5, 0xe6, 0xe3, 0xc0, + 0x07, 0x93, 0x9e, 0x91, 0x7b, 0x6d, 0x0a, 0x4a, 0x2a, 0x21, + 0xdb, 0xfb, 0x40, 0x1c, 0x96, 0xff, 0xa1, 0x8e, 0x14, 0xde, + 0x12, 0xff, 0x30, 0x7e, 0x02, 0xff, 0x12, 0xfe, 0xfd, 0x00, + 0xed, 0x01, 0x42, 0x11, 0x91, 0xaa, 0xfe, 0x89, 0x1f, 0x1a, + 0x9b, 0xb7, 0xb2, 0xf6, 0xef, 0x73, 0x92, 0x49, 0x8d, 0x84, + 0xcc, 0x21, 0x98, 0x86, 0x98, 0x06, 0x98, 0x86, 0x98, 0x02, + 0x67, 0x79, 0x67, 0xfd, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, + 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x38, 0xcd, 0x21, 0x7b, + 0x6a, 0xaf, 0x7c, 0xf0, 0xc4, 0x58, 0x07, 0x7f, 0x2d, 0xfb, + 0xdb, 0xfe, 0xa7, 0x81, 0x9d, 0x89, 0x8d, 0xd9, 0xd9, 0xca, + 0xad, 0xd9, 0xd9, 0xca, 0x52, 0x26, 0x26, 0x35, 0x26, 0xe5, + 0xf5, 0xfe, 0x3b, 0xa4, 0x71, 0x1b, 0x44, 0xcb, 0xfd, 0xb6, + 0x9a, 0xf3, 0x27, 0x22, 0xc8, 0xfa, 0x78, 0x6c, 0xe9, 0xfa, + 0x6e, 0x74, 0xe8, 0xfa, 0x6e, 0x74, 0x17, 0x05, 0x91, 0x8b, + 0x93, 0x49, 0xa2, 0x64, 0xfc, 0x78, 0x4b, 0xb5, 0x20, 0x51, + 0x90, 0xb5, 0x4e, 0x65, 0x9e, 0xa3, 0x28, 0xa0, 0x04, 0xba, + 0x40, 0xa6, 0x48, 0x39, 0x40, 0xa6, 0x48, 0x39, 0xbf, 0x59, + 0xb7, 0xc6, 0x2f, 0xf4, 0xdf, 0x7b, 0x46, 0x8f, 0x30, 0x10, + 0x65, 0x59, 0x79, 0x8e, 0xc7, 0x96, 0xe4, 0xed, 0x3f, 0x2b, + 0x6d, 0x9f, 0xae, 0xad, 0xe9, 0x99, 0xae, 0xaf, 0x69, 0x9d, + 0x51, 0x50, 0x96, 0x62, 0xb9, 0x23, 0x8e, 0xa3, 0x0b, 0x15, + 0x87, 0x3a, 0x9b, 0x56, 0x2d, 0x71, 0x0e, 0x35, 0xb6, 0xea, + 0x8d, 0xce, 0xa1, 0x29, 0x8e, 0x2a, 0xfa, 0x0b, 0x8e, 0x0a, + 0xea, 0x09, 0x71, 0xf5, 0x15, 0xf6, 0x61, 0x8e, 0xce, 0xa5, + 0x47, 0xce, 0x20, 0x70, 0x3b, 0xb3, 0x8b, 0xa1, 0x0b, 0xbe, + 0x46, 0x5f, 0x2a, 0x45, 0xdc, 0x1b, 0x8b, 0x9a, 0x10, 0xbf, + 0x8b, 0x9a, 0x90, 0xbf, 0x74, 0x65, 0x6f, 0x40, 0xfd, 0x99, + 0x2b, 0x2c, 0x34, 0xd2, 0x98, 0x6c, 0xa2, 0x96, 0x7f, 0xeb, + 0x01, 0x7f, 0xce, 0xf3, 0x57, 0xde, 0x3a, 0xbc, 0x73, 0xbe, + 0x1d, 0xd9, 0x73, 0xbe, 0x1f, 0xd9, 0x8c, 0x41, 0xe0, 0x26, + 0xce, 0xa8, 0xec, 0x37, 0xd6, 0x13, 0x47, 0xb2, 0x58, 0xbd, + 0x88, 0xa5, 0x22, 0xbb, 0x85, 0x61, 0xaf, 0xbd, 0x6d, 0x5a, + 0x32, 0x89, 0xed, 0x6b, 0x3a, 0x99, 0xed, 0x6b, 0xc5, 0x66, + 0x12, 0x94, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x7c, 0x06, 0x63, 0x8a, 0x5e, 0x18, + 0xbb, 0x88, 0x3a, 0x7a, 0xf9, 0xd3, 0x4d, 0x85, 0xfe, 0x2a, + 0x19, 0x8f, 0x50, 0xc3, 0xcd, 0x23, 0x9f, 0xcc, 0xcd, 0x2b, + 0xdf, 0xce, 0x32, 0xd4, 0x20, 0x31, 0x81, 0x32, 0xe7, 0x3e, + 0x93, 0x3a, 0x17, 0x89, 0x21, 0x48, 0xf5, 0xd7, 0x60, 0x44, + 0x37, 0x04, 0x78, 0x53, 0xb3, 0xed, 0xb0, 0xcc, 0x3e, 0xad, + 0xb0, 0xc4, 0x36, 0xad, 0x4f, 0x3b, 0xc9, 0x52, 0x3a, 0x01, + 0x6b, 0xa2, 0xf2, 0x11, 0x50, 0x3d, 0x30, 0xb4, 0x5e, 0xfe, + 0x87, 0x19, 0x58, 0x7c, 0x7d, 0x90, 0xa4, 0x7a, 0xb9, 0x3c, + 0xb8, 0xf6, 0xb9, 0x3c, 0xb8, 0xfe, 0x46, 0xc3, 0x47, 0x01, + 0xbb, 0xb5, 0xfc, 0x72, 0xc6, 0x36, 0x7c, 0xbd, 0x08, 0x16, + 0xf8, 0x39, 0x0e, 0xcf, 0xed, 0xa8, 0x1a, 0x8f, 0xd0, 0x19, + 0x53, 0xe7, 0x55, 0x39, 0x13, 0xe7, 0x55, 0x39, 0xec, 0x18, + 0xaa, 0xc6, 0xc2, 0x10, 0x66, 0xbf, 0x83, 0xbf, 0x7a, 0x46, + 0x84, 0xe2, 0x90, 0xf9, 0x16, 0xf6, 0x0d, 0x2e, 0x1c, 0x8f, + 0xb0, 0x81, 0x08, 0x96, 0xf4, 0x1b, 0x18, 0x96, 0xf4, 0x1b, + 0xe7, 0x69, 0x0b, 0xe4, 0x7f, 0x88, 0xfd, 0xa9, 0xaa, 0x9c, + 0xb8, 0x31, 0x91, 0xf0, 0xe1, 0xa6, 0xe2, 0x4e, 0x8d, 0x99, + 0x15, 0xbe, 0x00, 0x0c, 0x79, 0xfa, 0x69, 0x97, 0x79, 0xfe, + 0x49, 0x95, 0x86, 0x01, 0xb6, 0x6a, 0xc8, 0xde, 0x64, 0x2c, + 0x07, 0x35, 0xdf, 0x26, 0x62, 0x1f, 0xa3, 0xc3, 0x95, 0xfc, + 0x2d, 0x04, 0x46, 0x90, 0x31, 0xbd, 0x25, 0x7d, 0x73, 0x0c, + 0x25, 0x7c, 0x73, 0x0c, 0xda, 0x83, 0x8c, 0xf3, 0xfe, 0x6b, + 0xd7, 0x46, 0x86, 0xf6, 0x0b, 0x5e, 0x55, 0xde, 0x4c, 0x5d, + 0x67, 0xec, 0x0f, 0x6c, 0x7c, 0x97, 0x6a, 0x2a, 0xe6, 0x8f, + 0x2a, 0xa3, 0x66, 0xdf, 0x2a, 0xab, 0x99, 0x20, 0xd5, 0x54, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, + 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, + 0x00, 0x00, 0x12, 0x00, 0x77, 0x8b, 0xee, 0x27, 0x42, 0x81, + 0x7c, 0x43, 0x31, 0xf3, 0x45, 0x89, 0xed, 0x09, 0x18, 0x79, + 0xda, 0x83, 0xce, 0xf8, 0x4f, 0x03, 0xce, 0xf8, 0xdb, 0x03, + 0x31, 0x07, 0x24, 0xfc, 0x84, 0xb3, 0x04, 0x7b, 0x22, 0xf6, + 0xa6, 0x45, 0x8a, 0x6a, 0xcb, 0x6f, 0x5e, 0x6b, 0x31, 0x55, + 0xe7, 0x2d, 0x17, 0x2a, 0xf4, 0x03, 0x33, 0x3b, 0xf6, 0x43, + 0x33, 0x3b, 0x09, 0xbc, 0xcc, 0xc4, 0x16, 0x4c, 0x18, 0xd8, + 0xc8, 0xa2, 0xa8, 0x45, 0xed, 0xd9, 0xc8, 0x6a, 0xe1, 0x39, + 0x8c, 0x26, 0x2c, 0x21, 0x8e, 0x26, 0x40, 0xf1, 0x86, 0x04, + 0x78, 0x71, 0x8e, 0x26, 0x87, 0x8e, 0x71, 0xd9, 0x61, 0x1e, + 0xb0, 0x82, 0x4b, 0x54, 0xb5, 0xde, 0x8d, 0xba, 0x26, 0xc7, + 0xbd, 0x54, 0xc7, 0x6f, 0x2c, 0x1f, 0x50, 0x38, 0x18, 0x5d, + 0x40, 0x3e, 0x18, 0x5d, 0x40, 0x3e, 0xe7, 0xa2, 0xbf, 0xc1, + 0x2d, 0x17, 0x5a, 0xb0, 0xa9, 0xdd, 0x60, 0x10, 0xe9, 0xd3, + 0x15, 0x8a, 0x7d, 0x94, 0x20, 0xf1, 0x8e, 0x0c, 0xdb, 0x48, + 0xef, 0x4b, 0xab, 0x9e, 0xef, 0x4b, 0xab, 0xde, 0x10, 0xb4, + 0x54, 0x21, 0x2c, 0x3e, 0x3a, 0x45, 0x53, 0x0e, 0x7f, 0x2f, + 0x44, 0x31, 0x55, 0x48, 0xec, 0x31, 0x2b, 0x38, 0xb4, 0xa0, + 0xe1, 0x0a, 0xbc, 0x0b, 0x61, 0x2b, 0xbc, 0x03, 0x61, 0x6b, + 0x43, 0xfc, 0x9e, 0xd4, 0x6c, 0x85, 0xa1, 0x59, 0x6c, 0x25, + 0x95, 0x9c, 0x63, 0xd9, 0xbc, 0x35, 0x18, 0x03, 0x89, 0x6b, + 0xc7, 0xd2, 0xf5, 0xee, 0xe3, 0x71, 0xc5, 0xaa, 0xe3, 0x51, + 0xc5, 0xea, 0x1c, 0xae, 0x3a, 0x15, 0x05, 0x1b, 0x2c, 0xd0, + 0x30, 0xc2, 0x94, 0x31, 0x54, 0xc8, 0x8b, 0x8f, 0xde, 0x62, + 0x1d, 0x58, 0x99, 0x77, 0x2c, 0xc9, 0x1c, 0xf3, 0x34, 0x4d, + 0x1c, 0xf3, 0x3c, 0x4d, 0xe3, 0x0c, 0xc3, 0xb2, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, + 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x14, 0x2e, 0x50, 0x55, 0x21, 0x4f, 0xb4, 0x93, 0x75, 0x95, + 0x3f, 0x2f, 0x6e, 0x70, 0x02, 0x44, 0x9e, 0xd4, 0xee, 0x10, + 0xeb, 0x75, 0x42, 0x4c, 0xeb, 0x75, 0x42, 0x44, 0x14, 0x8a, + 0xbd, 0xbb, 0xef, 0x2d, 0xb8, 0x77, 0x9f, 0x2c, 0x1d, 0x29, + 0xe0, 0x05, 0x9c, 0x5a, 0xcf, 0xf6, 0xf6, 0x79, 0x4b, 0x06, + 0xac, 0xef, 0xaa, 0x94, 0xac, 0xed, 0xca, 0x14, 0xac, 0xef, + 0x35, 0xeb, 0x53, 0x10, 0xb9, 0x22, 0x21, 0xcc, 0x95, 0x41, + 0x36, 0xec, 0x7c, 0x83, 0x66, 0xe0, 0x36, 0x48, 0x65, 0xe4, + 0x7a, 0xf2, 0xe2, 0x56, 0xb6, 0xf0, 0xe0, 0xee, 0xb6, 0xf0, + 0xe0, 0xee, 0x49, 0x0f, 0x1f, 0x11, 0x7d, 0x76, 0xd8, 0xa0, + 0xc1, 0x10, 0xb9, 0x4c, 0xcd, 0xb2, 0xa4, 0x27, 0x53, 0x97, + 0xe3, 0x7e, 0xe0, 0xfb, 0x95, 0x97, 0x61, 0x6a, 0x96, 0x1b, + 0x61, 0x7b, 0x96, 0x9b, 0x9e, 0x84, 0x69, 0x64, 0x3e, 0x37, + 0xa1, 0xb8, 0x3a, 0x09, 0xee, 0x34, 0x2a, 0xd8, 0x7a, 0x51, + 0x8b, 0x6c, 0xe8, 0x7d, 0x9c, 0x51, 0x8f, 0xc3, 0x90, 0x1d, + 0xbe, 0xc4, 0x90, 0x19, 0xbf, 0xc4, 0x6f, 0xe6, 0x40, 0x3b, + 0x13, 0xa1, 0x45, 0x1b, 0x0b, 0x8b, 0x22, 0xec, 0x34, 0x25, + 0x8e, 0x44, 0x8c, 0x9b, 0x72, 0x12, 0xb8, 0x8b, 0x5f, 0x54, + 0xb0, 0x70, 0x1a, 0x74, 0xb0, 0xba, 0x1a, 0x14, 0x4f, 0x45, + 0xe5, 0xeb, 0x52, 0xdc, 0x5b, 0x77, 0xdb, 0xa7, 0xac, 0x22, + 0x15, 0xf9, 0xd9, 0xa4, 0xc9, 0x6a, 0xf6, 0x9f, 0xb3, 0x62, + 0xd4, 0x57, 0xb1, 0x6a, 0xa9, 0xc5, 0xb1, 0x6a, 0xb9, 0xc5, + 0x4e, 0x95, 0x46, 0x3a, 0x82, 0xa5, 0x81, 0x62, 0x47, 0xa5, + 0xa6, 0xca, 0x90, 0x67, 0xee, 0x22, 0x57, 0x4d, 0x11, 0x48, + 0xe9, 0x55, 0x2d, 0xf7, 0x7a, 0x17, 0x29, 0x8e, 0x7a, 0x55, + 0x29, 0xce, 0x85, 0xaa, 0xd6, 0x31, 0x01, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, 0xea, + 0x42, 0x9b, 0x87, 0x51, 0xd4, 0xb1, 0x0d, 0xa3, 0x13, 0x96, + 0xed, 0xf5, 0x90, 0xce, 0x49, 0x6b, 0xd9, 0xb8, 0x19, 0x62, + 0x70, 0xb2, 0x19, 0x63, 0x50, 0xb2, 0xe6, 0x9c, 0xaf, 0x4d, + 0x25, 0x1a, 0x7e, 0x0d, 0x88, 0x4b, 0x2e, 0xb3, 0xea, 0x33, + 0x81, 0xe3, 0xb2, 0x90, 0xcb, 0x97, 0xd5, 0x33, 0x13, 0x84, + 0xb4, 0x03, 0x11, 0x31, 0xb4, 0x03, 0x11, 0x10, 0x4b, 0xfc, + 0xee, 0xef, 0x5a, 0x56, 0xd7, 0x2a, 0xc2, 0x83, 0x8a, 0x07, + 0xa1, 0x6f, 0xf9, 0x84, 0x26, 0x21, 0x67, 0xa5, 0xe2, 0x8a, + 0xc6, 0xb3, 0x52, 0x0e, 0xce, 0x21, 0x52, 0x0e, 0xce, 0x21, + 0xad, 0xf1, 0x31, 0xde, 0x28, 0x6a, 0x17, 0x5b, 0x92, 0xd0, + 0xf5, 0x33, 0xfa, 0x22, 0x54, 0xf7, 0x82, 0xc3, 0x71, 0x73, + 0x80, 0x48, 0x1f, 0x7a, 0x9c, 0x70, 0x74, 0xba, 0x98, 0x70, + 0x55, 0xba, 0x67, 0x8f, 0xaa, 0x45, 0x28, 0x9f, 0xb7, 0xcc, + 0x72, 0x83, 0x2a, 0xe7, 0x9c, 0xa6, 0xa3, 0x8f, 0x38, 0xe7, + 0x6d, 0x7d, 0x3d, 0xb0, 0x83, 0xfb, 0x23, 0xf1, 0x82, 0xff, + 0x2b, 0xb1, 0x83, 0xff, 0xd4, 0x4e, 0x7c, 0x00, 0x7c, 0x79, + 0x36, 0xcc, 0x2d, 0xf5, 0xae, 0x00, 0x8d, 0x7b, 0xa7, 0xcf, + 0xb2, 0xde, 0xa2, 0x7c, 0xf2, 0xd5, 0x95, 0x0d, 0x94, 0xb0, + 0x75, 0x26, 0x96, 0xf0, 0x35, 0x24, 0x69, 0x0f, 0xca, 0xdb, + 0x20, 0x9d, 0x8f, 0x24, 0xc9, 0x97, 0x2b, 0x1e, 0xf5, 0xaf, + 0x7a, 0x22, 0xa6, 0xa7, 0x1e, 0x76, 0xf4, 0x95, 0x7e, 0x7a, + 0x3d, 0x97, 0x3e, 0xda, 0xbd, 0x97, 0x3e, 0xfa, 0x42, 0x68, + 0xc1, 0x05, 0x78, 0xe2, 0x57, 0x31, 0xcd, 0xe2, 0x53, 0x25, + 0x2a, 0x66, 0x68, 0x7d, 0x3d, 0x09, 0xcf, 0x8a, 0x29, 0xb7, + 0xe3, 0x4c, 0x0b, 0x77, 0x09, 0x01, 0x09, 0x77, 0x49, 0x01, + 0xf6, 0x88, 0xb6, 0xfe, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x98, 0xac, 0x21, 0x34, + 0xf3, 0xbb, 0x7f, 0x8f, 0x29, 0x3a, 0x0f, 0x0a, 0xb4, 0xb8, + 0x5d, 0x00, 0x89, 0x59, 0xd7, 0x43, 0x0b, 0x3a, 0x64, 0x19, + 0x09, 0x3a, 0x65, 0x08, 0xf6, 0xc5, 0x9a, 0xf7, 0xb2, 0x0d, + 0xb7, 0xbd, 0xbc, 0x0d, 0x50, 0xca, 0xd4, 0x1d, 0x93, 0x44, + 0xc0, 0xa0, 0x14, 0x0f, 0xfe, 0x7a, 0x3c, 0x1b, 0x37, 0xba, + 0x61, 0x77, 0x37, 0xba, 0x70, 0x7f, 0xc8, 0x45, 0x8f, 0x80, + 0x2e, 0x33, 0xd8, 0x88, 0x61, 0xa4, 0xce, 0x30, 0xe1, 0xea, + 0x8c, 0x6f, 0xf2, 0x1f, 0x2d, 0xaa, 0xb0, 0x7b, 0x9c, 0x43, + 0xd1, 0xff, 0xed, 0x17, 0xd0, 0xff, 0xad, 0x13, 0x2f, 0x00, + 0x52, 0xec, 0x9c, 0xda, 0x41, 0x4d, 0xaa, 0x56, 0xab, 0x95, + 0x5e, 0x54, 0xb2, 0xae, 0x30, 0xcd, 0x2c, 0x5b, 0x12, 0x29, + 0xe0, 0xe4, 0x02, 0x41, 0xbb, 0x65, 0x02, 0x49, 0xb9, 0x64, + 0xfd, 0xb6, 0x46, 0x9b, 0x35, 0xf0, 0xb1, 0x56, 0xa9, 0x8e, + 0x45, 0xa5, 0xe7, 0x9e, 0xf1, 0xc1, 0x65, 0xa3, 0x38, 0x96, + 0x73, 0x29, 0xa8, 0x51, 0x54, 0x77, 0x31, 0x4a, 0x65, 0x77, + 0xb1, 0x43, 0x9a, 0x88, 0x4e, 0xbc, 0x32, 0x24, 0x99, 0x19, + 0xd4, 0x08, 0x13, 0x2f, 0xbf, 0x5b, 0x34, 0xfb, 0x2f, 0x93, + 0xd1, 0x9b, 0xdc, 0x70, 0x6e, 0x19, 0x56, 0x53, 0x44, 0xf3, + 0x5e, 0x53, 0x44, 0x7b, 0xa1, 0xac, 0xbb, 0x84, 0x08, 0xd9, + 0x8e, 0x10, 0xb1, 0x88, 0x4e, 0x33, 0x86, 0xdd, 0xc1, 0xbc, + 0x0a, 0x83, 0x84, 0x68, 0x75, 0x6f, 0x67, 0x77, 0x44, 0x85, + 0x07, 0x76, 0x44, 0x8f, 0x07, 0x77, 0xbb, 0x70, 0xf8, 0x88, + 0x83, 0x18, 0x11, 0xdb, 0xf2, 0xea, 0x5e, 0x78, 0x9d, 0xb4, + 0xa7, 0xd0, 0x77, 0x32, 0xfd, 0xb2, 0x90, 0xad, 0xb7, 0xdf, + 0x30, 0x02, 0xff, 0xd0, 0x20, 0x00, 0xff, 0xd0, 0xcf, 0xff, + 0x00, 0x2f, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x80, 0xde, 0x9b, 0x24, 0x79, 0xde, + 0x52, 0x83, 0xf4, 0x1f, 0x16, 0x0a, 0xa5, 0xf0, 0x7a, 0xfc, + 0xd9, 0x0d, 0x5f, 0x0d, 0xf9, 0x9a, 0x33, 0x4b, 0xf9, 0x9a, + 0x33, 0x09, 0x06, 0x65, 0xcc, 0xf6, 0x35, 0x08, 0x23, 0xaa, + 0x06, 0xb1, 0x5b, 0x50, 0xdf, 0xa4, 0xa3, 0xcd, 0xc0, 0x08, + 0xe6, 0x85, 0xcd, 0xb1, 0x2d, 0x1a, 0xdf, 0x32, 0xe6, 0x11, + 0xcf, 0x30, 0xa7, 0x11, 0x30, 0xcf, 0x58, 0xee, 0x4c, 0xad, + 0x9a, 0x46, 0xe1, 0x56, 0x69, 0x88, 0x9a, 0xbe, 0xe3, 0x93, + 0xa5, 0x8d, 0x59, 0x33, 0x0a, 0x86, 0x13, 0x46, 0x08, 0xa6, + 0x93, 0x86, 0x08, 0xa6, 0x93, 0x06, 0xf7, 0x59, 0x6c, 0xf9, + 0xc0, 0x96, 0x57, 0x1e, 0xef, 0xc6, 0x33, 0x25, 0x5d, 0x30, + 0x18, 0x77, 0x04, 0x7f, 0x63, 0x76, 0xc3, 0x81, 0x5d, 0x55, + 0xdf, 0xe5, 0xda, 0x74, 0xd7, 0xe5, 0xda, 0x74, 0x28, 0x1a, + 0x25, 0x8b, 0x58, 0xa9, 0xfa, 0x1c, 0xd9, 0xb2, 0xaa, 0xa8, + 0x52, 0x74, 0xba, 0x35, 0x97, 0xc3, 0x11, 0x61, 0x0d, 0x89, + 0x5b, 0x70, 0x11, 0xed, 0x57, 0x73, 0x15, 0xed, 0x53, 0x71, + 0xea, 0x12, 0xac, 0x8e, 0xaf, 0x5b, 0xae, 0xc5, 0x6d, 0x5b, + 0x68, 0xc1, 0x77, 0x6d, 0xba, 0x91, 0xfb, 0xd0, 0x12, 0x23, + 0xbe, 0x02, 0x12, 0xfc, 0x2a, 0xb2, 0x88, 0xfc, 0xaa, 0x92, + 0x98, 0xfc, 0x55, 0x6d, 0x67, 0x03, 0xaf, 0x1b, 0xbf, 0x3e, + 0xe4, 0x3c, 0x17, 0x8b, 0x4d, 0x1f, 0x23, 0xa6, 0x59, 0x00, + 0x3b, 0x4e, 0x54, 0x67, 0xe3, 0xc9, 0x5d, 0x46, 0x01, 0x4b, + 0x5d, 0x44, 0x21, 0x4b, 0xa2, 0xbb, 0xde, 0xb4, 0xcf, 0x48, + 0x2a, 0x76, 0x2d, 0xb7, 0x31, 0x7f, 0xc7, 0x35, 0xb1, 0x88, + 0x94, 0x5f, 0xa7, 0xe9, 0xde, 0xb7, 0xbf, 0x5a, 0x16, 0x37, + 0xb7, 0xdd, 0x96, 0x37, 0xb7, 0xd9, 0x69, 0xc8, 0x48, 0x26, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, + 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, + 0x00, 0x00, 0x35, 0x0b, 0x81, 0x6e, 0x7b, 0xa4, 0x51, 0x57, + 0x5a, 0xb1, 0xff, 0xd2, 0x53, 0x0a, 0xdc, 0xfc, 0x94, 0x89, + 0x24, 0x1a, 0x00, 0x9e, 0x78, 0x3b, 0x10, 0x9b, 0x38, 0x3b, + 0xef, 0x64, 0xc7, 0xc4, 0xa4, 0x4f, 0xee, 0x1a, 0x58, 0xb4, + 0x30, 0x49, 0x03, 0xc1, 0x50, 0xdc, 0xb1, 0xec, 0x5b, 0x94, + 0x83, 0x06, 0x8e, 0x2c, 0x43, 0x84, 0xd9, 0xac, 0x03, 0x84, + 0xda, 0xac, 0xfc, 0x7b, 0x25, 0x53, 0x0c, 0x64, 0x40, 0xb9, + 0x49, 0x48, 0x41, 0x1d, 0xca, 0x4a, 0x67, 0x57, 0x1c, 0x2e, + 0x2b, 0x2d, 0xb4, 0x15, 0x0b, 0xb5, 0x7c, 0x80, 0x96, 0x9d, + 0x7c, 0x80, 0x9a, 0x9d, 0x83, 0x7f, 0x65, 0x62, 0x57, 0x29, + 0x49, 0x40, 0xbf, 0x1a, 0xbc, 0xa9, 0xbb, 0xa4, 0xb0, 0xa9, + 0xe1, 0x39, 0x3b, 0xd6, 0xc7, 0x04, 0x4f, 0xc1, 0x41, 0x2e, + 0x2f, 0x85, 0x41, 0x2c, 0x2f, 0xc5, 0xbe, 0xd3, 0xd0, 0x3a, + 0xbd, 0x99, 0x11, 0x63, 0xd0, 0xbd, 0x9f, 0xf4, 0xda, 0x71, + 0xf1, 0xbd, 0xae, 0xc2, 0x1f, 0xf7, 0x4e, 0x12, 0x29, 0x54, + 0x20, 0x52, 0x79, 0xde, 0x28, 0x52, 0x79, 0xd6, 0xd7, 0xad, + 0x86, 0x29, 0x3d, 0xe0, 0xe2, 0x58, 0xe4, 0xb3, 0x40, 0x94, + 0x24, 0xe9, 0x10, 0xea, 0x70, 0x36, 0x37, 0x84, 0x37, 0xf6, + 0xd6, 0x32, 0x35, 0xfc, 0x0a, 0xba, 0x35, 0xfc, 0x1a, 0xba, + 0xca, 0x03, 0xe5, 0x45, 0x5c, 0xd7, 0x39, 0x71, 0x09, 0x3b, + 0x31, 0x93, 0x18, 0x99, 0x9b, 0x43, 0x33, 0x39, 0x62, 0x7e, + 0xd9, 0x02, 0x22, 0xed, 0xd9, 0x08, 0x2a, 0xfe, 0xd9, 0x08, + 0x22, 0xff, 0x26, 0xf7, 0xdd, 0x00, 0xf8, 0x80, 0xe6, 0x7a, + 0x12, 0xe5, 0x3b, 0x51, 0x04, 0xf9, 0xcc, 0x3f, 0xcb, 0x42, + 0xeb, 0x28, 0xae, 0xee, 0x02, 0xd5, 0x0d, 0x18, 0x27, 0x15, + 0x0f, 0x18, 0x26, 0x15, 0xf0, 0xe7, 0xd9, 0xea, 0x01, 0x00, + 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x4b, 0x1d, 0x31, 0xeb, 0x9e, 0xea, 0x2f, 0x38, 0x01, 0x30, + 0xbe, 0x26, 0x94, 0x22, 0x25, 0x73, 0x29, 0x04, 0xe7, 0x8a, + 0x85, 0x80, 0x77, 0xfe, 0x84, 0x80, 0x77, 0xfe, 0x7b, 0x7f, + 0x88, 0x01, 0x9d, 0x4e, 0xd9, 0xec, 0xa2, 0xd8, 0xd5, 0xa9, + 0x8d, 0x42, 0x0f, 0x5e, 0x6f, 0xc6, 0xee, 0xfe, 0xca, 0x2c, + 0xd6, 0x5f, 0x66, 0xcd, 0xcf, 0xf2, 0x66, 0x8d, 0xcf, 0xde, + 0x99, 0x72, 0x30, 0x21, 0xc2, 0xfb, 0xea, 0x85, 0xb3, 0x92, + 0xf2, 0xf9, 0xa3, 0xc8, 0x45, 0xd3, 0x7d, 0x19, 0xf6, 0xcd, + 0xd4, 0xc3, 0x45, 0xe7, 0x54, 0xe3, 0x47, 0xdf, 0x54, 0xc3, + 0x47, 0xdf, 0xab, 0x3c, 0xb8, 0x20, 0x21, 0x36, 0xfa, 0xa6, + 0x35, 0x15, 0x0e, 0xf0, 0x28, 0x44, 0xba, 0x93, 0x70, 0xc8, + 0x9e, 0xaf, 0x3c, 0x25, 0x31, 0x0c, 0xdc, 0x55, 0xf0, 0xee, + 0x1c, 0x45, 0xf0, 0xee, 0xe3, 0xba, 0x0f, 0x11, 0xe0, 0x28, + 0xf4, 0x7e, 0xe5, 0x04, 0xa8, 0xe5, 0x5e, 0x48, 0x1b, 0xc0, + 0x8e, 0x17, 0x05, 0xa3, 0x2d, 0xd0, 0x3c, 0xf0, 0x6d, 0x89, + 0xb4, 0xe0, 0x6d, 0x88, 0xb4, 0xe0, 0x92, 0x77, 0x4b, 0x1f, + 0xc2, 0x0f, 0x82, 0x73, 0xb7, 0x27, 0x88, 0x2e, 0x27, 0x3e, + 0x89, 0xfb, 0x61, 0x37, 0xdd, 0x66, 0xb7, 0x19, 0x1e, 0x36, + 0x03, 0x59, 0x1c, 0xee, 0x23, 0x19, 0x1c, 0xa6, 0xdc, 0xe6, + 0xe3, 0x59, 0xa0, 0x0c, 0x00, 0xd8, 0x55, 0xd9, 0x56, 0x47, + 0x6e, 0x8b, 0xc9, 0xb5, 0xd7, 0x39, 0xfb, 0x1a, 0x4d, 0xbc, + 0xe5, 0x65, 0x4c, 0x53, 0xc5, 0x60, 0x4c, 0x19, 0xe5, 0x60, + 0xb3, 0xe6, 0x1a, 0x9f, 0xf7, 0x25, 0x77, 0x24, 0x51, 0x25, + 0x46, 0x11, 0x38, 0x62, 0xc7, 0x6b, 0x52, 0x9a, 0x56, 0x9b, + 0x22, 0x56, 0xfa, 0xd4, 0xaa, 0xb2, 0x53, 0x0d, 0x2a, 0xb2, + 0x53, 0x0d, 0xd5, 0x4d, 0xac, 0xf2, 0x00, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x0e, 0x64, + 0x3e, 0x18, 0x3b, 0xcb, 0xeb, 0xf2, 0x02, 0x44, 0x7b, 0x05, + 0x15, 0x20, 0x2e, 0x45, 0x8f, 0x10, 0x33, 0xb6, 0x83, 0xe0, + 0xb2, 0x9d, 0x83, 0xe0, 0xb2, 0x9d, 0x7c, 0x1f, 0x4d, 0x62, + 0x8e, 0x8a, 0x04, 0x60, 0x17, 0x58, 0xc2, 0x72, 0x0f, 0x5a, + 0x00, 0x4e, 0xcc, 0xc9, 0x4f, 0xbf, 0xda, 0x59, 0x02, 0x39, + 0x4b, 0xd5, 0x76, 0x29, 0x4b, 0xd1, 0x56, 0x29, 0xb4, 0x2e, + 0xa9, 0xd6, 0x9f, 0x51, 0x50, 0xd6, 0xf7, 0x24, 0x06, 0xa5, + 0x0f, 0x2a, 0x25, 0xe3, 0x7b, 0xf1, 0x23, 0xb6, 0x2e, 0xa1, + 0xf2, 0xeb, 0xbe, 0xed, 0x60, 0xcf, 0xbe, 0xed, 0x60, 0x8f, + 0x41, 0x12, 0x9f, 0x70, 0x4a, 0xb0, 0x50, 0x89, 0xe3, 0xe3, + 0xd0, 0x22, 0x7e, 0x8f, 0x69, 0x3e, 0x35, 0x72, 0x52, 0xf7, + 0x35, 0x03, 0xed, 0xbf, 0xb5, 0x02, 0xcc, 0xbf, 0x35, 0x02, + 0xcc, 0xbf, 0xca, 0xfd, 0x33, 0x40, 0xb2, 0x0d, 0x23, 0xcc, + 0xf6, 0xcf, 0x89, 0xb3, 0x07, 0x63, 0x92, 0xad, 0x47, 0x3d, + 0x7d, 0xd3, 0xb3, 0x7e, 0xf0, 0x2c, 0xa7, 0x93, 0xe7, 0x98, + 0xa7, 0xbf, 0xf4, 0x89, 0x58, 0x40, 0x0b, 0x76, 0xda, 0x21, + 0x50, 0xb3, 0x08, 0x36, 0xcb, 0x8d, 0xd7, 0x74, 0xec, 0xaf, + 0x56, 0x85, 0x2c, 0xf6, 0x28, 0xab, 0xbf, 0xf8, 0xf4, 0x09, + 0x8b, 0xe2, 0xf4, 0x09, 0xaf, 0xe2, 0x0b, 0xf6, 0x50, 0x1d, + 0x56, 0x3e, 0xd4, 0x03, 0x57, 0x23, 0xf4, 0xa3, 0x10, 0xb0, + 0x8d, 0x06, 0x19, 0x69, 0x35, 0x6f, 0xfa, 0xc8, 0x37, 0x69, + 0x3f, 0x5d, 0x35, 0x6c, 0x3f, 0x88, 0x35, 0x6d, 0xc0, 0x77, + 0xca, 0x92, 0xc8, 0x3f, 0xce, 0x0c, 0xba, 0x1f, 0x44, 0xb7, + 0x68, 0xfb, 0xb8, 0x4a, 0xfa, 0x9a, 0x94, 0x72, 0x98, 0x40, + 0x89, 0xe2, 0x4f, 0x55, 0x98, 0xc2, 0xcf, 0x53, 0x98, 0xc2, + 0x30, 0xac, 0x67, 0x3d, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x0c, 0x43, 0x91, 0x3d, + 0xe4, 0x75, 0xe0, 0xb3, 0x42, 0x9e, 0x5c, 0x75, 0x28, 0x41, + 0x25, 0xfc, 0x3e, 0xa4, 0xc7, 0x67, 0x23, 0xc8, 0x44, 0x67, + 0x23, 0xc8, 0x44, 0x67, 0xdc, 0x37, 0xbb, 0x98, 0x18, 0xb7, + 0x3f, 0x2f, 0x0c, 0x34, 0x2e, 0xc8, 0x9f, 0x42, 0xa1, 0xc0, + 0x5b, 0x8a, 0xb0, 0x48, 0xc0, 0xbe, 0x45, 0x80, 0x4c, 0x3e, + 0xa0, 0x44, 0x4c, 0x3e, 0xa0, 0x40, 0xb3, 0xc1, 0x5f, 0xbf, + 0xb8, 0x25, 0xf4, 0xa7, 0x68, 0xb3, 0x3f, 0x24, 0x90, 0xf4, + 0xf8, 0x21, 0x7f, 0x86, 0x5d, 0xa6, 0xb4, 0xc9, 0x2b, 0x64, + 0xb9, 0xd0, 0xed, 0xac, 0xb9, 0xd0, 0xe9, 0x2c, 0x46, 0x2f, + 0x16, 0xd3, 0xd3, 0x0d, 0xa5, 0xf5, 0xb9, 0x05, 0xea, 0x11, + 0xfb, 0x92, 0xf6, 0x73, 0xc8, 0xea, 0xcd, 0xe8, 0x0e, 0xe0, + 0x65, 0x8f, 0xfc, 0x61, 0x14, 0xcc, 0xfc, 0x61, 0x54, 0xcc, + 0x03, 0x9e, 0xab, 0x33, 0xda, 0x88, 0xe9, 0xf2, 0xfd, 0xc8, + 0x19, 0x34, 0xde, 0x55, 0x52, 0x7b, 0xe8, 0xbe, 0xd3, 0xf8, + 0xa4, 0x55, 0x24, 0xc4, 0xe9, 0x85, 0xe7, 0xf9, 0xe9, 0x05, + 0x67, 0xfd, 0x16, 0xfa, 0x98, 0x02, 0xdd, 0xa3, 0x23, 0xec, + 0xd5, 0xf7, 0x75, 0x13, 0x5b, 0x8d, 0x54, 0x02, 0x6c, 0xc2, + 0x1e, 0x59, 0xc0, 0xfb, 0x5b, 0xc6, 0xf9, 0x5a, 0x77, 0xad, + 0xf8, 0xda, 0x7f, 0xe9, 0x07, 0x25, 0x80, 0x16, 0xaa, 0x2f, + 0xe7, 0xf3, 0x3b, 0x7d, 0x9d, 0x37, 0x97, 0x81, 0xa0, 0xa8, + 0x10, 0x43, 0xe4, 0x3a, 0x4f, 0xed, 0x38, 0xf2, 0x87, 0xe5, + 0x27, 0x36, 0x87, 0xe5, 0x25, 0x32, 0x78, 0x1a, 0xda, 0xcd, + 0x5d, 0x74, 0xe6, 0xf6, 0x2a, 0x7b, 0xd2, 0x57, 0x76, 0x48, + 0xe5, 0x26, 0x6b, 0x86, 0x70, 0x86, 0x56, 0xe3, 0x6a, 0xd7, + 0x12, 0x60, 0xce, 0x26, 0x16, 0x60, 0xea, 0x26, 0xe9, 0x9f, + 0x15, 0xd9, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x39, 0xda, 0x11, 0x7f, 0x2c, 0x42, + 0xe4, 0x4b, 0xb8, 0xe0, 0x90, 0xd0, 0xbb, 0x18, 0x04, 0xc2, + 0x7b, 0x8f, 0x86, 0x4d, 0xa5, 0x8d, 0xa6, 0x50, 0xa9, 0x8d, + 0x86, 0x40, 0x56, 0x72, 0x79, 0xbf, 0xe5, 0x18, 0x44, 0x8b, + 0x1d, 0x18, 0xd4, 0x81, 0xa8, 0xed, 0xc3, 0x76, 0x96, 0x3b, + 0xd8, 0x31, 0x74, 0x15, 0x2c, 0x58, 0x46, 0xf5, 0x3e, 0x55, + 0x46, 0x55, 0x3c, 0x55, 0xb9, 0xaa, 0xc3, 0xaa, 0xcf, 0xa1, + 0xf7, 0x76, 0x8d, 0x9c, 0xef, 0x9a, 0xde, 0x2b, 0x7a, 0x49, + 0xc1, 0xc1, 0x38, 0xc8, 0x63, 0x45, 0x42, 0xeb, 0x67, 0x8d, + 0xb7, 0x79, 0x67, 0x85, 0x32, 0x79, 0x98, 0x7a, 0xcd, 0x86, + 0x05, 0xc0, 0xc6, 0xa4, 0xd0, 0xb0, 0x70, 0xd0, 0xed, 0x54, + 0xea, 0x94, 0xf4, 0xaa, 0x1d, 0x75, 0x91, 0x86, 0x3e, 0x6e, + 0x1c, 0xeb, 0x0e, 0x6e, 0x94, 0xeb, 0x2e, 0x6e, 0x6b, 0x14, + 0xd1, 0x91, 0x6a, 0xde, 0x6a, 0xcb, 0x82, 0x57, 0xf1, 0x95, + 0x49, 0xff, 0xe4, 0xf4, 0xd4, 0x20, 0xcc, 0xbd, 0x2c, 0xa4, + 0x80, 0x77, 0x05, 0x0c, 0xdb, 0xbe, 0x05, 0x0c, 0xd9, 0x3e, + 0xfa, 0xf3, 0x26, 0xc1, 0x9f, 0x92, 0x00, 0x8b, 0x5c, 0xeb, + 0x6a, 0xd2, 0x90, 0xab, 0x56, 0x2a, 0xf7, 0xc0, 0x64, 0x11, + 0xc6, 0xbc, 0x97, 0x60, 0x90, 0xbc, 0x54, 0x40, 0x90, 0xbc, + 0x54, 0x40, 0x6f, 0x43, 0xab, 0xbf, 0x8a, 0xc4, 0xce, 0x3f, + 0xae, 0x5b, 0xc5, 0x96, 0x94, 0xa0, 0x67, 0xa2, 0xc7, 0x75, + 0x8d, 0x84, 0x30, 0xdb, 0xa1, 0x8b, 0x4e, 0xfb, 0xe1, 0xd8, + 0x4e, 0xfb, 0xa1, 0x88, 0xb1, 0x04, 0x5e, 0x77, 0x8a, 0x55, + 0xbf, 0xfb, 0x04, 0xfe, 0x21, 0x99, 0x89, 0xbe, 0x4a, 0x99, + 0xb5, 0x42, 0x06, 0x84, 0xbc, 0xe0, 0xf0, 0xfc, 0x85, 0x00, + 0x05, 0xc3, 0x85, 0x00, 0x04, 0xc3, 0x7a, 0xff, 0xfb, 0x3c, + 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x22, 0xda, 0x8d, 0x48, 0xe1, 0x99, 0x28, 0x49, + 0x90, 0x69, 0x60, 0xbe, 0xc5, 0x88, 0x99, 0x9a, 0x1f, 0x3a, + 0x78, 0xf0, 0xcb, 0x31, 0x68, 0xc3, 0xcb, 0x31, 0x68, 0xc1, + 0x34, 0xce, 0x97, 0x3e, 0x34, 0xff, 0xe7, 0x3a, 0xe6, 0xe1, + 0xff, 0xe7, 0xaf, 0x75, 0x3d, 0xb9, 0x2a, 0x06, 0x5b, 0xae, + 0x87, 0x59, 0x16, 0xd3, 0xc3, 0x4c, 0x37, 0x53, 0xc3, 0x4c, + 0x37, 0xd3, 0x3c, 0xb3, 0xc8, 0x2c, 0x08, 0xdd, 0x74, 0x06, + 0x33, 0xf9, 0x61, 0xcc, 0x7c, 0x79, 0xfd, 0x3a, 0x6d, 0x4a, + 0x40, 0xb5, 0xea, 0xf0, 0x78, 0x98, 0xec, 0xda, 0x3d, 0xaa, + 0xec, 0xda, 0x3d, 0xaa, 0x13, 0x25, 0xc2, 0x55, 0xf2, 0x87, + 0x14, 0x8b, 0xb6, 0x29, 0x44, 0xe1, 0xb1, 0x10, 0x9b, 0x13, + 0x2f, 0xae, 0xb6, 0x63, 0x8f, 0x8c, 0xce, 0xab, 0x4e, 0x0f, + 0x12, 0xab, 0x4f, 0x0c, 0x92, 0xab, 0xb0, 0xf3, 0x6d, 0x54, + 0x55, 0x95, 0x9b, 0x2a, 0xf5, 0x17, 0xd0, 0x79, 0x5c, 0xc5, + 0x3a, 0xbe, 0xae, 0xf6, 0xb2, 0x68, 0x0a, 0x20, 0xc8, 0xd6, + 0x08, 0xc2, 0xcb, 0x68, 0x0a, 0xc0, 0xcb, 0x68, 0xf5, 0x3f, + 0x34, 0x97, 0x4c, 0x52, 0x17, 0x9b, 0x91, 0xcb, 0x84, 0x19, + 0x7e, 0x61, 0x1a, 0x45, 0x0b, 0x1f, 0x6c, 0x8a, 0xb4, 0x03, + 0xb9, 0x8f, 0x95, 0xa3, 0xba, 0x8d, 0x95, 0x23, 0xba, 0x8d, + 0x6a, 0xdc, 0x45, 0x72, 0x0d, 0xf0, 0x5b, 0x74, 0xe2, 0x5a, + 0x5b, 0xd0, 0x7b, 0x9b, 0x64, 0xe8, 0xb5, 0xbf, 0x72, 0x25, + 0xba, 0xd7, 0x2a, 0x2c, 0xbf, 0xa5, 0xc1, 0xfc, 0xbf, 0xa7, + 0x40, 0x7c, 0x40, 0x58, 0xbf, 0x83, 0x00, 0xbc, 0xc0, 0xc5, + 0xfc, 0xcc, 0x87, 0xf6, 0x82, 0xdb, 0x7f, 0x04, 0x38, 0xbe, + 0x87, 0xee, 0xae, 0x59, 0xc0, 0x5a, 0x3c, 0x5d, 0xc8, 0x56, + 0x3c, 0x5d, 0xc8, 0x5e, 0xc3, 0xa2, 0x37, 0xa1, 0x00, 0x00, + 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, + 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xc1, 0x7c, 0xa3, 0x86, 0x61, 0x37, 0x8d, 0xb0, 0xf0, 0xb9, + 0x6b, 0x2c, 0x31, 0xfa, 0xdf, 0xe6, 0x75, 0xbd, 0x0e, 0x31, + 0xb9, 0xb9, 0x9b, 0x20, 0xf1, 0xb9, 0x9f, 0x20, 0x0e, 0x46, + 0x60, 0xdf, 0xd2, 0x5e, 0xd3, 0xa5, 0xd5, 0xf2, 0xc8, 0xef, + 0xb3, 0x18, 0x09, 0x91, 0xaf, 0x4b, 0x40, 0x3b, 0x7a, 0xd1, + 0x73, 0xfb, 0x6e, 0x19, 0xf5, 0xe1, 0x7e, 0x19, 0xf5, 0xe1, + 0x81, 0xe6, 0x0a, 0x1e, 0x2a, 0x1e, 0x4e, 0x81, 0x9c, 0xf4, + 0x27, 0x36, 0x19, 0xba, 0xea, 0x28, 0x92, 0x1e, 0x34, 0x6b, + 0xfb, 0x5b, 0x58, 0x2e, 0x62, 0xaa, 0x3a, 0x34, 0x62, 0xaa, + 0x38, 0x34, 0x9d, 0x55, 0xc7, 0xcb, 0x89, 0x87, 0xa7, 0x3b, + 0xd6, 0x28, 0x54, 0xee, 0x3d, 0x26, 0x3d, 0x67, 0x47, 0x88, + 0xe6, 0x9a, 0xf4, 0x5a, 0x1a, 0x10, 0x27, 0xc0, 0x16, 0x9a, + 0x27, 0x48, 0x16, 0x9a, 0xd8, 0xb7, 0xe9, 0x65, 0x82, 0x75, + 0x6c, 0xad, 0xd8, 0xfe, 0x32, 0x42, 0x39, 0x26, 0x17, 0x9b, + 0x35, 0xf4, 0x6d, 0x26, 0x45, 0x9f, 0x6b, 0x5c, 0x50, 0x1d, + 0x22, 0x55, 0x50, 0x1d, 0x62, 0x45, 0xaf, 0xe2, 0x9d, 0xba, + 0x1d, 0x4e, 0xf8, 0xcb, 0x37, 0x49, 0x44, 0xcd, 0x29, 0xe3, + 0xf8, 0xfd, 0xa3, 0x23, 0x64, 0x27, 0x05, 0x49, 0xee, 0x3e, + 0xa5, 0x26, 0xec, 0x5f, 0xa5, 0x26, 0xec, 0x5f, 0x5a, 0xd9, + 0x13, 0xa0, 0xcb, 0xf5, 0x5a, 0xd2, 0x63, 0xec, 0xfb, 0xba, + 0x79, 0x40, 0x19, 0x76, 0xcc, 0xed, 0x49, 0x94, 0x2f, 0x43, + 0x01, 0x61, 0xa5, 0x45, 0x27, 0x76, 0xa5, 0x45, 0x07, 0x72, + 0x5a, 0xba, 0xf8, 0x8d, 0xdc, 0x78, 0x48, 0xb6, 0x79, 0xf7, + 0x3f, 0x87, 0x1c, 0xb1, 0x2c, 0xc6, 0xef, 0x6c, 0x62, 0x37, + 0x05, 0x08, 0xe7, 0xcc, 0xe5, 0x08, 0xae, 0x81, 0xc5, 0x08, + 0xae, 0x84, 0x3a, 0xf7, 0x51, 0x7b, 0x00, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, + 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x6a, 0x83, + 0xce, 0x4a, 0xa5, 0x2a, 0xf8, 0xbb, 0x6d, 0x45, 0x91, 0x4d, + 0x62, 0x8a, 0xd2, 0xb0, 0x02, 0xbc, 0x85, 0xc4, 0x53, 0x0a, + 0x16, 0x59, 0x53, 0x08, 0x96, 0x59, 0xac, 0xf7, 0x69, 0xa6, + 0xe9, 0x7e, 0xd1, 0x6c, 0x31, 0x53, 0x3f, 0xf9, 0xdd, 0x63, + 0x8c, 0x31, 0x2f, 0xb4, 0xaf, 0xe2, 0x85, 0x43, 0x81, 0x3e, + 0xd5, 0x66, 0x29, 0x6a, 0xd5, 0x66, 0x29, 0x6a, 0x2a, 0x99, + 0xd6, 0x95, 0x01, 0xea, 0x7a, 0x41, 0x90, 0x79, 0xdd, 0x28, + 0x88, 0x12, 0x58, 0x28, 0x7f, 0x3c, 0x30, 0x76, 0xdd, 0x22, + 0x71, 0x46, 0x5a, 0x22, 0xb3, 0x74, 0x5e, 0x22, 0x31, 0x64, + 0xa1, 0xdd, 0xce, 0x9b, 0xc9, 0x34, 0x49, 0xe9, 0x23, 0x17, + 0xa7, 0xe5, 0xe2, 0x03, 0x60, 0xb3, 0x65, 0x24, 0x24, 0xf8, + 0x79, 0xeb, 0xa9, 0xf0, 0x08, 0xe3, 0x05, 0xfa, 0x48, 0xe3, + 0x05, 0xf8, 0xb7, 0x1c, 0xfa, 0x07, 0xb7, 0x5f, 0x5f, 0x26, + 0x52, 0xde, 0x36, 0x18, 0x87, 0x3d, 0x4d, 0xc4, 0x84, 0x61, + 0x2e, 0x5b, 0xfa, 0x02, 0x43, 0xae, 0x1e, 0xa7, 0x0a, 0xa6, + 0x9e, 0xa7, 0x0a, 0xa4, 0x61, 0x58, 0xf5, 0x5b, 0xce, 0x40, + 0xf0, 0xe3, 0x30, 0xb1, 0x0d, 0xca, 0xdc, 0x63, 0x69, 0x1a, + 0xf1, 0x3c, 0x88, 0x5a, 0xd1, 0xd1, 0xde, 0x33, 0xa0, 0x71, + 0xac, 0x82, 0xb0, 0x71, 0x8c, 0x82, 0x4f, 0x8e, 0x73, 0x7d, + 0x15, 0x7e, 0x14, 0x61, 0x32, 0x62, 0x14, 0x08, 0x5b, 0x91, + 0x64, 0x3b, 0xdc, 0x7c, 0x64, 0x6c, 0x09, 0x92, 0xf0, 0xda, + 0x2d, 0x56, 0x64, 0xfc, 0x0d, 0x56, 0x66, 0xfc, 0xf2, 0xa9, + 0x9b, 0x03, 0x1e, 0x93, 0xf3, 0x4c, 0xd4, 0x2c, 0x98, 0xa2, + 0x8f, 0xfd, 0x9a, 0xd3, 0xc8, 0xe7, 0x9f, 0x9e, 0xb1, 0x14, + 0x6b, 0x98, 0x21, 0x14, 0x0b, 0x08, 0x31, 0x14, 0x0b, 0x08, + 0xce, 0xeb, 0xf4, 0xf7, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xb2, 0x73, 0xc5, 0x06, + 0xe6, 0xce, 0xd2, 0xe7, 0xd5, 0x7d, 0xf1, 0x55, 0xcc, 0xd9, + 0xf2, 0x91, 0xeb, 0x6e, 0x04, 0x02, 0x80, 0x64, 0xf3, 0x52, + 0xc0, 0x64, 0xf3, 0x12, 0x3f, 0x9b, 0x0c, 0xed, 0x03, 0x29, + 0xfb, 0x5d, 0xa6, 0x30, 0xd7, 0x96, 0xb2, 0xa5, 0xfa, 0x9d, + 0x80, 0x2c, 0xef, 0xed, 0xee, 0x93, 0x9c, 0x89, 0xa6, 0xf7, + 0x95, 0x9b, 0xa6, 0xb7, 0x95, 0x8b, 0x59, 0x48, 0x6a, 0x74, + 0x89, 0x28, 0x26, 0xa3, 0x73, 0xd3, 0xf4, 0xd6, 0x55, 0xce, + 0x4b, 0xcb, 0x6a, 0x2e, 0x64, 0x64, 0x16, 0x4e, 0xb1, 0xd0, + 0xb6, 0xed, 0xba, 0xdc, 0xb6, 0xee, 0xba, 0xdc, 0x49, 0x11, + 0x45, 0x23, 0x4c, 0x0c, 0x8e, 0x70, 0x70, 0x4a, 0x53, 0x5e, + 0x52, 0xeb, 0x38, 0xf2, 0xb9, 0x4f, 0x91, 0xee, 0x4a, 0xff, + 0x4a, 0xa8, 0x8c, 0xee, 0x80, 0xea, 0x0c, 0xee, 0x80, 0xea, + 0xf3, 0x11, 0x7f, 0x15, 0xbd, 0x66, 0xe5, 0x4a, 0xf7, 0x6d, + 0xa2, 0xbe, 0xfe, 0x87, 0xc1, 0xc9, 0x24, 0xa4, 0x7e, 0xb3, + 0x68, 0x06, 0xda, 0xad, 0xa0, 0x17, 0x52, 0xa9, 0xa4, 0x06, + 0x52, 0xa9, 0x5b, 0xf9, 0xad, 0x56, 0xad, 0xe7, 0x3e, 0x5e, + 0x0b, 0x9c, 0xcf, 0x74, 0xb4, 0x32, 0x8e, 0x88, 0xb6, 0x76, + 0x89, 0xf5, 0x85, 0x7f, 0x0a, 0x0f, 0x14, 0xb2, 0x29, 0x5f, + 0x14, 0xb6, 0x29, 0x5f, 0xeb, 0x49, 0xd6, 0xa0, 0x1f, 0x48, + 0x4b, 0xac, 0x49, 0x5b, 0xcb, 0x12, 0x6d, 0xc2, 0xda, 0x96, + 0x7c, 0xda, 0xfb, 0xbe, 0xd6, 0xf8, 0xaa, 0xfe, 0x53, 0x7a, + 0xe2, 0xfe, 0x5b, 0xfa, 0xea, 0xfe, 0xa4, 0x05, 0x15, 0x01, + 0x9a, 0xc6, 0xf6, 0x49, 0x9c, 0x36, 0x7c, 0xe7, 0xc6, 0x33, + 0x73, 0xd3, 0xf4, 0x03, 0xe3, 0x48, 0x56, 0x5d, 0x55, 0x1f, + 0x54, 0x13, 0x8f, 0xbe, 0x54, 0x13, 0x87, 0x9e, 0xab, 0xec, + 0x78, 0x61, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x40, 0x6a, 0xf8, 0x06, 0xc9, 0xa9, + 0xdd, 0x4b, 0x2f, 0x50, 0x9c, 0x1a, 0xeb, 0xb6, 0x24, 0xa9, + 0x73, 0xa2, 0xb0, 0x68, 0xbd, 0x82, 0xbc, 0x2c, 0xbf, 0x82, + 0xbc, 0x2c, 0x40, 0x7d, 0x43, 0xd3, 0xac, 0xfb, 0x7d, 0x7c, + 0x66, 0x6e, 0xe5, 0x0c, 0x97, 0xc8, 0x05, 0x2b, 0xcd, 0x02, + 0xdf, 0xf0, 0xcc, 0x43, 0x82, 0xbc, 0x89, 0x4a, 0xe7, 0xb1, + 0x8d, 0x4a, 0xc7, 0xb1, 0x72, 0xb5, 0x38, 0x4e, 0x08, 0x40, + 0x79, 0x74, 0x29, 0x9f, 0xbc, 0xb2, 0x4f, 0x81, 0x63, 0x49, + 0x1f, 0xb6, 0x70, 0x5b, 0x88, 0xe2, 0x47, 0x8e, 0xe8, 0xe0, + 0x04, 0xa2, 0xec, 0xe0, 0x04, 0xa2, 0x13, 0x1f, 0xfb, 0x5d, + 0x5e, 0xe2, 0x0d, 0x6e, 0x8f, 0x54, 0x00, 0x39, 0x79, 0x88, + 0x5f, 0x96, 0xa3, 0x30, 0xaa, 0x8b, 0x11, 0x56, 0xba, 0xf5, + 0x20, 0xe6, 0x3a, 0x4e, 0x20, 0xf6, 0xba, 0x4f, 0xdf, 0x09, + 0x45, 0xb0, 0x61, 0x3a, 0x89, 0x85, 0x99, 0x15, 0x41, 0x4b, + 0xea, 0x2f, 0xa1, 0x35, 0xba, 0x23, 0xe2, 0xd8, 0x0a, 0x43, + 0xa9, 0xc6, 0x68, 0x21, 0xa9, 0xd4, 0x6a, 0x23, 0xa9, 0xd0, + 0x95, 0xdc, 0x56, 0x2f, 0x22, 0x82, 0x8d, 0xa1, 0x5f, 0xd8, + 0xc0, 0x9f, 0x61, 0x63, 0x1b, 0xe4, 0x7c, 0x40, 0xa1, 0x32, + 0xbf, 0x0f, 0x79, 0x56, 0x3f, 0x4e, 0x19, 0x22, 0x3f, 0x4e, + 0x19, 0x26, 0xc0, 0xb1, 0xe6, 0xd9, 0x73, 0x1c, 0x55, 0xa0, + 0x61, 0xdd, 0xe3, 0x4b, 0x97, 0xb1, 0xe1, 0x31, 0x26, 0xd5, + 0xfb, 0xaa, 0x86, 0x65, 0x41, 0xab, 0x82, 0xcc, 0xc2, 0x3b, + 0x82, 0xcc, 0x83, 0x3b, 0x7d, 0x33, 0x3c, 0xc4, 0x81, 0xa5, + 0xf5, 0xe1, 0x9a, 0x9d, 0xba, 0x62, 0x10, 0xf7, 0xcd, 0x1f, + 0x63, 0x15, 0x35, 0x79, 0x23, 0x09, 0xf8, 0x18, 0x69, 0x59, + 0xfc, 0x58, 0x63, 0x59, 0xfc, 0x58, 0x9c, 0xa6, 0x03, 0xa7, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x04, 0x3b, 0x3b, 0xd4, 0x29, 0xf6, 0x00, 0x55, + 0x52, 0xb9, 0x1d, 0x70, 0x46, 0x8d, 0x66, 0xdd, 0x55, 0xab, + 0xa6, 0x7f, 0x50, 0xb1, 0xee, 0xff, 0x10, 0xa1, 0xee, 0xff, + 0xef, 0x5e, 0x11, 0x00, 0x76, 0x2a, 0x8b, 0x86, 0x12, 0x2c, + 0xb8, 0x77, 0x7a, 0xc5, 0x6d, 0x83, 0x79, 0x58, 0x39, 0x84, + 0x86, 0xc4, 0x99, 0x4e, 0x3c, 0xb4, 0xd4, 0x40, 0x3c, 0xb4, + 0x94, 0x40, 0xc3, 0x4b, 0x6b, 0xbf, 0x01, 0xe4, 0x14, 0x40, + 0x64, 0xa1, 0x03, 0x58, 0xa7, 0x78, 0x65, 0x9b, 0x20, 0xd0, + 0x0e, 0x64, 0xd5, 0xdf, 0x5f, 0x88, 0x65, 0xfe, 0x6b, 0xa5, + 0x65, 0xfe, 0x6f, 0xa5, 0x9a, 0x01, 0x90, 0x5a, 0x44, 0x37, + 0xeb, 0xcf, 0xf0, 0x23, 0x0a, 0x0c, 0x55, 0xce, 0x91, 0x22, + 0xf7, 0xdd, 0xc8, 0x4e, 0xa7, 0xfa, 0x08, 0xaf, 0x9f, 0xd5, + 0x48, 0xd0, 0xb7, 0xdd, 0x48, 0xdd, 0x48, 0x22, 0xb7, 0x22, + 0xf6, 0x4d, 0x6d, 0x15, 0x05, 0xdb, 0x34, 0xb2, 0xa6, 0x73, + 0xa1, 0x01, 0x0c, 0x6e, 0x35, 0xd6, 0x58, 0x18, 0x80, 0x9c, + 0x4a, 0x08, 0x08, 0xb4, 0x48, 0x08, 0x08, 0xb4, 0xb7, 0xf7, + 0xf7, 0x4b, 0xd8, 0x1a, 0xc3, 0x7b, 0xd2, 0x74, 0x64, 0x21, + 0x0b, 0xc6, 0xd6, 0xb0, 0x68, 0x2a, 0xf3, 0xab, 0x74, 0x17, + 0x59, 0x69, 0x7c, 0x12, 0x88, 0xeb, 0x7c, 0x12, 0x98, 0xeb, + 0x83, 0xed, 0x67, 0x14, 0xd8, 0x4e, 0xad, 0x85, 0x03, 0xda, + 0x33, 0x63, 0xf3, 0x94, 0xdb, 0x23, 0xe1, 0x5d, 0x5f, 0x21, + 0x7b, 0xfd, 0x27, 0x1d, 0xec, 0x95, 0x1f, 0x53, 0xf9, 0x95, + 0x1f, 0x43, 0x06, 0x6a, 0xe0, 0xbc, 0x41, 0x9e, 0x3d, 0x77, + 0xc5, 0x9e, 0x5d, 0xba, 0x2b, 0x53, 0x0d, 0xae, 0xda, 0x92, + 0x81, 0x9c, 0x8a, 0xd6, 0x4b, 0xcb, 0xc6, 0x99, 0x46, 0xac, + 0xc6, 0x9d, 0x47, 0xac, 0x39, 0x62, 0xb8, 0x53, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x82, 0x87, 0x45, 0x45, 0x86, 0xdc, 0xb9, 0xe2, 0xca, 0x9b, + 0x84, 0xbb, 0x09, 0x78, 0x1b, 0xcf, 0x21, 0x2d, 0x2f, 0x53, + 0x85, 0xbe, 0x3e, 0xfb, 0x81, 0xbd, 0x3e, 0xfb, 0x7e, 0x42, + 0xc1, 0x04, 0xbb, 0x16, 0xd2, 0x57, 0x65, 0xb9, 0xde, 0x74, + 0x57, 0x17, 0xea, 0x24, 0x58, 0xf8, 0xb5, 0x62, 0x82, 0x5b, + 0x05, 0xbd, 0x97, 0x47, 0x64, 0x21, 0x93, 0x53, 0xe0, 0x21, + 0x6c, 0xac, 0x1f, 0xde, 0xee, 0x00, 0x50, 0x14, 0x63, 0xc9, + 0x80, 0xb5, 0xb0, 0x6c, 0x69, 0xfb, 0xcb, 0x54, 0xb3, 0x52, + 0x28, 0xa1, 0xde, 0x66, 0x32, 0x71, 0xa0, 0x52, 0x22, 0x71, + 0xa0, 0x52, 0xdd, 0x8e, 0x5f, 0xad, 0xae, 0x05, 0xf3, 0x7e, + 0x6e, 0x99, 0x69, 0xfa, 0x86, 0x04, 0xe6, 0x7f, 0xe1, 0xd1, + 0xdc, 0x00, 0x97, 0xd8, 0x6d, 0x5f, 0xc5, 0x5f, 0x48, 0x5f, + 0x85, 0x5d, 0x48, 0x5f, 0x7a, 0xa2, 0xb7, 0xa0, 0xb9, 0x99, + 0xd9, 0x4d, 0xbe, 0x56, 0xd4, 0xca, 0x76, 0xad, 0xf8, 0x9e, + 0xc1, 0xdd, 0x99, 0x0f, 0x7d, 0xb7, 0x3b, 0xa6, 0x75, 0x3f, + 0x7e, 0xb7, 0x75, 0xbf, 0x7b, 0xb7, 0x8a, 0x40, 0x84, 0x48, + 0x6f, 0x69, 0x1f, 0x7b, 0x05, 0xa6, 0xe5, 0xe7, 0xff, 0x7d, + 0x1a, 0x65, 0x1b, 0x25, 0x26, 0xee, 0xce, 0xb0, 0x18, 0x5a, + 0xde, 0xb1, 0x39, 0xc5, 0xde, 0xb1, 0x1b, 0xcc, 0x21, 0x4e, + 0xe4, 0x33, 0xcd, 0xac, 0x03, 0xb1, 0xef, 0xa5, 0xb5, 0x90, + 0x7b, 0xfb, 0x12, 0xf4, 0x7b, 0x35, 0xf6, 0x33, 0x97, 0xb3, + 0x55, 0x29, 0x61, 0xb3, 0x55, 0x31, 0x61, 0xb1, 0x55, 0x31, + 0x9e, 0x4e, 0xaa, 0xce, 0xf5, 0x1b, 0xc8, 0xed, 0x32, 0x8b, + 0xa8, 0x53, 0x22, 0x96, 0x56, 0x3a, 0x40, 0x49, 0x7e, 0x5e, + 0xb5, 0x20, 0x0f, 0x18, 0x86, 0x50, 0x2a, 0x2a, 0x86, 0x50, + 0x2a, 0x3a, 0x79, 0xaf, 0xd5, 0xc5, 0x00, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x9d, 0xe1, + 0x7a, 0x57, 0x02, 0xc3, 0x96, 0x40, 0xd8, 0x31, 0x97, 0x0e, + 0x76, 0x69, 0xd4, 0xa8, 0x12, 0x56, 0x5b, 0xad, 0x30, 0x74, + 0x1c, 0x8a, 0x30, 0x74, 0x1d, 0x88, 0xcf, 0x8b, 0xe2, 0x77, + 0x77, 0xa3, 0x56, 0x23, 0x21, 0x03, 0xc4, 0xa9, 0x27, 0xdd, + 0x3d, 0x7e, 0x29, 0xa5, 0xca, 0xc6, 0x84, 0x4a, 0xda, 0x5a, + 0xa4, 0xe4, 0xd6, 0xca, 0xa4, 0xe4, 0xd6, 0xca, 0x5b, 0x1b, + 0x29, 0x35, 0xd3, 0x77, 0x5a, 0x14, 0x6a, 0x59, 0xdc, 0xaf, + 0x98, 0xda, 0x97, 0x10, 0x8b, 0xa1, 0x8c, 0xf0, 0xe1, 0x38, + 0xaf, 0xa4, 0x81, 0xa7, 0xce, 0xe4, 0x81, 0xa6, 0x8e, 0xe4, + 0x7e, 0x59, 0x71, 0x1b, 0x03, 0x43, 0x26, 0x3e, 0x29, 0xd6, + 0xff, 0x60, 0x8b, 0x94, 0x72, 0x6c, 0x6c, 0xbe, 0x62, 0xfc, + 0x51, 0xa6, 0x3d, 0x62, 0x48, 0xab, 0x2d, 0xfe, 0x48, 0xab, + 0x2d, 0xfe, 0xb7, 0x54, 0xd2, 0x01, 0x2d, 0xa6, 0xdd, 0xf0, + 0x2a, 0x9a, 0xe3, 0x81, 0x8e, 0xe1, 0xf4, 0x42, 0x21, 0x10, + 0x66, 0x6b, 0xdd, 0xb5, 0x8e, 0x4c, 0x0e, 0x51, 0xcf, 0x72, + 0x0c, 0x71, 0xce, 0x72, 0xf3, 0x8e, 0x31, 0x8d, 0x71, 0x03, + 0xba, 0xc5, 0xc6, 0x42, 0xfe, 0xd4, 0xcc, 0x04, 0xb4, 0xd3, + 0x12, 0x99, 0xc5, 0x99, 0x58, 0x45, 0x3f, 0xe8, 0x99, 0xd9, + 0x1e, 0x59, 0x99, 0xcd, 0x9e, 0xd9, 0x66, 0x32, 0x61, 0x26, + 0x55, 0x01, 0xf8, 0xf1, 0xe3, 0x4e, 0xf6, 0x6d, 0x4e, 0x27, + 0xdf, 0x75, 0xb9, 0x69, 0x06, 0x99, 0x70, 0x84, 0x4a, 0x6a, + 0x36, 0xa6, 0x43, 0x6c, 0x34, 0x84, 0x42, 0x6c, 0xcb, 0x7b, + 0xbd, 0x93, 0x9e, 0x8f, 0xcb, 0xd2, 0xf9, 0x3a, 0xe5, 0x16, + 0x75, 0x34, 0x7b, 0xd0, 0x46, 0x4e, 0xfc, 0x82, 0xea, 0xab, + 0x23, 0x01, 0x4a, 0x39, 0x06, 0x02, 0x4a, 0x39, 0x26, 0x02, + 0xb5, 0xc6, 0xd9, 0xfd, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x55, 0xfe, 0x07, 0xbc, + 0x1a, 0xd1, 0x1d, 0x62, 0xb7, 0xcb, 0xfb, 0xf2, 0x3a, 0xc4, + 0xa8, 0xb2, 0x90, 0x25, 0x12, 0x25, 0x9e, 0xb4, 0x92, 0x69, + 0x9e, 0xa5, 0x92, 0x69, 0x61, 0x5a, 0x6d, 0x96, 0x85, 0x2c, + 0xb7, 0x43, 0xbb, 0x58, 0x0f, 0xf6, 0x49, 0x10, 0x36, 0x28, + 0xc0, 0xde, 0xec, 0x29, 0x48, 0x46, 0xe7, 0x3f, 0x0c, 0x57, + 0xa6, 0x3b, 0x08, 0x57, 0xa6, 0x3b, 0xf7, 0xa8, 0x59, 0xc4, + 0x56, 0x88, 0x07, 0x77, 0x0d, 0x50, 0x41, 0x93, 0xa3, 0x6b, + 0x26, 0x85, 0x6d, 0xd8, 0xdd, 0x7b, 0x00, 0xd0, 0xa7, 0x19, + 0x8c, 0xa8, 0xc7, 0x89, 0x88, 0xa8, 0xc7, 0x89, 0x77, 0x57, + 0x38, 0x76, 0x7a, 0x99, 0xee, 0x29, 0x21, 0x04, 0x71, 0x8f, + 0x8a, 0x10, 0x3f, 0x6b, 0x7a, 0xe4, 0x8d, 0x74, 0x4f, 0x99, + 0xa1, 0x71, 0x37, 0xcc, 0x1d, 0x60, 0x37, 0xcc, 0x9d, 0x60, + 0xc8, 0x33, 0x62, 0x9f, 0x8c, 0x6c, 0xed, 0xb5, 0xa1, 0xb0, + 0x6a, 0x75, 0xb2, 0x79, 0xac, 0xba, 0x4a, 0x50, 0x9c, 0x08, + 0x34, 0x95, 0x21, 0x0c, 0x70, 0x99, 0xed, 0x8b, 0x70, 0x99, + 0xed, 0x8b, 0x8f, 0x66, 0x12, 0x74, 0xd1, 0x4f, 0x29, 0xd6, + 0x91, 0x18, 0xfb, 0x98, 0xc8, 0xfa, 0x08, 0x4c, 0xd9, 0x5f, + 0x17, 0x7e, 0x2d, 0x81, 0x9b, 0x9c, 0x9c, 0xa3, 0x13, 0x3d, + 0x9c, 0xa3, 0x13, 0x3d, 0x63, 0x5c, 0xec, 0xc2, 0x7c, 0x6f, + 0x6c, 0x95, 0xa4, 0xcf, 0xec, 0x02, 0x94, 0xa6, 0x86, 0xa3, + 0x3f, 0x69, 0x96, 0x3d, 0x1a, 0xdd, 0xd0, 0xf1, 0x10, 0x84, + 0xce, 0x21, 0x10, 0xc5, 0xce, 0x21, 0xef, 0x3a, 0x31, 0xde, + 0x3f, 0xda, 0x87, 0x1f, 0x1e, 0xb6, 0x69, 0x34, 0x95, 0x1c, + 0xd3, 0x67, 0xd6, 0xa0, 0x25, 0x98, 0x26, 0x1a, 0x4c, 0xb2, + 0x02, 0x2a, 0x1f, 0xae, 0x06, 0x2a, 0x1d, 0xaa, 0xf9, 0xd5, + 0xe2, 0x55, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, + 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x89, 0x46, 0x8b, 0x02, 0xaf, 0x78, + 0x3d, 0x9f, 0x52, 0xf3, 0xa6, 0x4a, 0xbd, 0xc3, 0x39, 0x7f, + 0xc6, 0x6c, 0xd2, 0x95, 0xc8, 0x66, 0xf6, 0xfd, 0xc8, 0x66, + 0xf6, 0xfd, 0x37, 0x99, 0x09, 0x02, 0xbe, 0x4b, 0xf3, 0xd7, + 0x43, 0x58, 0x80, 0xf3, 0x0a, 0xeb, 0xd9, 0x24, 0x0e, 0x40, + 0x2b, 0x68, 0x93, 0x12, 0x7f, 0xf6, 0x96, 0x19, 0x2f, 0xd5, + 0x96, 0x13, 0x2d, 0xf6, 0x69, 0xec, 0xd2, 0x09, 0xea, 0xb8, + 0x07, 0x8e, 0x3d, 0xea, 0x71, 0x6b, 0x94, 0x2e, 0xf6, 0x1c, + 0xaf, 0x90, 0xd5, 0xd7, 0x15, 0x78, 0x1c, 0x9d, 0xa5, 0x18, + 0x1e, 0xc9, 0xa5, 0x18, 0x1c, 0xcd, 0x5a, 0xe7, 0xe3, 0x32, + 0xaa, 0x55, 0x62, 0x05, 0x0d, 0x14, 0xa6, 0x2a, 0x55, 0xbb, + 0x99, 0x0e, 0x82, 0x86, 0xe7, 0x4a, 0xf7, 0x92, 0xe9, 0x4b, + 0xa7, 0x71, 0xa9, 0x4b, 0xb7, 0x90, 0xa9, 0x4b, 0x48, 0x6f, + 0x56, 0xb4, 0xe2, 0x3a, 0x02, 0x50, 0xb7, 0xed, 0x73, 0xf0, + 0xee, 0x20, 0x1f, 0xf7, 0x41, 0x9b, 0xbb, 0x16, 0x96, 0x81, + 0xe1, 0x5b, 0xe3, 0x82, 0x82, 0x5e, 0x43, 0x82, 0x83, 0x5e, + 0xbc, 0x7d, 0x7c, 0xa1, 0xb3, 0x34, 0xda, 0x07, 0x6c, 0xdf, + 0xc0, 0x69, 0x43, 0x40, 0xf8, 0x39, 0x54, 0xd2, 0x27, 0xaf, + 0x11, 0x38, 0x3c, 0x06, 0xe0, 0x18, 0xb4, 0xae, 0xc0, 0x18, + 0x34, 0xae, 0x3f, 0xe7, 0xcb, 0x51, 0xe7, 0xca, 0x17, 0x92, + 0xd6, 0x51, 0x00, 0x27, 0xef, 0x54, 0x52, 0x97, 0xc3, 0xac, + 0x98, 0x5b, 0xf0, 0x1f, 0xb9, 0x88, 0xfd, 0x76, 0xd1, 0xa3, + 0xdd, 0x56, 0xd1, 0xa3, 0x22, 0xa9, 0x2e, 0x5c, 0xe6, 0x3b, + 0x8a, 0xeb, 0x1e, 0x1b, 0x31, 0xf4, 0xd1, 0x84, 0x2b, 0x09, + 0xbf, 0x71, 0xab, 0x4c, 0x86, 0x04, 0x64, 0x1b, 0x96, 0x30, + 0xe5, 0x28, 0x86, 0x30, 0xe1, 0x28, 0x79, 0xcf, 0x1e, 0xd7, + 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, + 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, + 0x00, 0x00, 0xad, 0x70, 0x07, 0x15, 0x41, 0xe2, 0xda, 0xf8, + 0x5f, 0xfa, 0x29, 0x0b, 0x74, 0xd5, 0x70, 0x2e, 0x25, 0xac, + 0xc1, 0xbe, 0x43, 0x9b, 0xc0, 0x84, 0x47, 0x99, 0xc0, 0x84, + 0xb8, 0x66, 0x3f, 0x7b, 0x86, 0xe6, 0x84, 0x37, 0x13, 0xf4, + 0x73, 0x2b, 0x32, 0x37, 0xa9, 0x86, 0x87, 0x2f, 0x4e, 0xd1, + 0x53, 0x3d, 0xc6, 0x78, 0x53, 0xb7, 0x77, 0x7a, 0x53, 0x37, + 0x77, 0x78, 0xac, 0xc8, 0x88, 0x87, 0x2c, 0x1e, 0xe1, 0xfa, + 0xb6, 0xbb, 0x93, 0x32, 0x33, 0xe2, 0x1a, 0xe0, 0x14, 0x80, + 0xe5, 0xa4, 0x1d, 0x92, 0x2a, 0x11, 0x5c, 0xba, 0x49, 0x29, + 0x5c, 0xb2, 0x49, 0x29, 0xa3, 0x4d, 0xb6, 0xd6, 0x04, 0xd3, + 0x44, 0x0e, 0x03, 0x98, 0x01, 0x01, 0xec, 0xf0, 0xf4, 0xb8, + 0xc3, 0x81, 0x00, 0x66, 0xbc, 0x34, 0x46, 0xcf, 0x51, 0x01, + 0x17, 0x0f, 0xd1, 0x21, 0x16, 0x0f, 0x2e, 0xde, 0xe9, 0xf0, + 0x8e, 0x46, 0x50, 0x4f, 0x38, 0x65, 0x3c, 0xf8, 0x30, 0xc5, + 0x6d, 0x04, 0x18, 0x23, 0x95, 0xb4, 0xb8, 0x9d, 0x9e, 0x9c, + 0x7a, 0xad, 0x94, 0x5b, 0x7a, 0xad, 0x94, 0x99, 0x85, 0x52, + 0x6b, 0x66, 0x5d, 0x7d, 0xbe, 0x84, 0xdf, 0xa9, 0xa8, 0xef, + 0xd6, 0x05, 0x06, 0x34, 0xcc, 0x56, 0x9f, 0x5c, 0x76, 0x96, + 0x25, 0x99, 0x3e, 0x5d, 0xb7, 0x94, 0x3e, 0x5c, 0x37, 0x9c, + 0xc1, 0xa3, 0xc8, 0x63, 0x84, 0x7c, 0x30, 0x1e, 0x2d, 0x81, + 0x43, 0x76, 0xb9, 0xdf, 0x6a, 0x4b, 0x53, 0xd7, 0xb4, 0x83, + 0x11, 0xfb, 0x1b, 0xe5, 0x0b, 0xe3, 0xe3, 0x61, 0x0b, 0xe3, + 0x73, 0x65, 0xf4, 0x1c, 0x8c, 0x9a, 0x42, 0xb0, 0x81, 0xf5, + 0x3f, 0xd6, 0x5e, 0x2b, 0x09, 0xd1, 0x68, 0x78, 0xf6, 0x7c, + 0x34, 0x97, 0xb3, 0x72, 0xf5, 0x7b, 0x82, 0xb8, 0x7c, 0x1d, + 0x82, 0xb8, 0x7c, 0x5d, 0x7d, 0x47, 0x83, 0xa2, 0x00, 0x00, + 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, + 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x42, 0x78, 0x38, 0x30, 0xe9, 0x08, 0x72, 0x8b, 0x90, 0xd1, + 0x9b, 0xa8, 0x8d, 0xe8, 0x21, 0xd0, 0x7a, 0xf5, 0x97, 0xe7, + 0xfc, 0xf1, 0x37, 0x39, 0xfc, 0xf1, 0x37, 0x39, 0x03, 0x0e, + 0xc8, 0xc6, 0xa8, 0x3a, 0x07, 0x1f, 0xc9, 0x89, 0x53, 0xa3, + 0x67, 0x07, 0xe8, 0xd0, 0x18, 0x6d, 0x74, 0x14, 0xcf, 0xbd, + 0xd8, 0x4a, 0x27, 0x2e, 0xd8, 0x0e, 0x27, 0x2e, 0xd8, 0x0e, + 0xd8, 0xd1, 0x27, 0xf1, 0x20, 0x4d, 0x61, 0xe8, 0xb8, 0x12, + 0x70, 0xe7, 0x17, 0x55, 0x50, 0x4b, 0x5c, 0x9c, 0x4e, 0xd7, + 0xe5, 0x82, 0x8e, 0x6c, 0xce, 0x22, 0x5e, 0x13, 0xc4, 0x02, + 0x5e, 0x53, 0x3b, 0xfd, 0xa1, 0xac, 0x83, 0xaf, 0x89, 0xf6, + 0x1d, 0x2f, 0x00, 0x69, 0xe9, 0xc2, 0x12, 0xbe, 0xca, 0x32, + 0xbc, 0xd8, 0xcc, 0xb0, 0x18, 0x2f, 0x64, 0xb3, 0x19, 0xa5, + 0x6c, 0xb2, 0x19, 0xa5, 0x93, 0x4d, 0xe6, 0x5a, 0xbf, 0x77, + 0xce, 0x27, 0xb7, 0xd3, 0x92, 0xf1, 0x5a, 0x95, 0x4e, 0x05, + 0x60, 0x79, 0x74, 0xf9, 0x90, 0xf8, 0xb5, 0x6a, 0x16, 0xd9, + 0x35, 0x65, 0x16, 0xd9, 0xb5, 0x65, 0xe9, 0x26, 0x4a, 0x9a, + 0xa8, 0xac, 0x85, 0xb5, 0xe3, 0x29, 0x9a, 0xb9, 0xbc, 0x19, + 0xa6, 0xe1, 0x7e, 0xd0, 0xe6, 0x76, 0xad, 0x7b, 0xeb, 0x09, + 0x5d, 0x51, 0xe3, 0x0e, 0xdd, 0x51, 0xe3, 0x0c, 0x22, 0xae, + 0x1c, 0xf3, 0x3a, 0x2a, 0xb9, 0x43, 0xfd, 0x01, 0x22, 0x4a, + 0x5c, 0xc7, 0xff, 0x62, 0xe6, 0x8c, 0xdd, 0x14, 0x57, 0x22, + 0x1c, 0xff, 0x74, 0x07, 0x0d, 0xf1, 0x74, 0x27, 0x1d, 0xf7, + 0x8b, 0xd8, 0xe2, 0x08, 0x4a, 0x4e, 0x03, 0xa9, 0xa5, 0xff, + 0x80, 0xfa, 0x45, 0x34, 0x7e, 0xde, 0x4c, 0x65, 0x0e, 0x86, + 0xae, 0xc1, 0xe9, 0x00, 0x61, 0xc0, 0x42, 0xc2, 0xe1, 0xe0, + 0x42, 0xc2, 0x1e, 0x1f, 0xbd, 0x3d, 0x01, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, + 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2d, 0xcf, + 0xaf, 0x90, 0x1a, 0xc5, 0x29, 0x00, 0x03, 0x62, 0xfb, 0xdf, + 0x4d, 0x4b, 0xdf, 0x21, 0x43, 0xe1, 0x2b, 0x0a, 0x86, 0x49, + 0xfe, 0x8c, 0x87, 0x49, 0xfe, 0x8c, 0x78, 0xb6, 0x01, 0x73, + 0xf6, 0x3f, 0x6f, 0xd2, 0xe2, 0xf7, 0x78, 0x40, 0xb9, 0xd6, + 0xe0, 0xb4, 0x21, 0x29, 0x0e, 0x8c, 0x83, 0xcc, 0xcf, 0xb2, + 0xa3, 0xd3, 0x4f, 0xb8, 0xa3, 0xd3, 0x4f, 0xb8, 0x5c, 0x2c, + 0xb0, 0x47, 0x42, 0xaf, 0x60, 0x7a, 0x4a, 0x01, 0xf7, 0xea, + 0xdb, 0x4f, 0xf9, 0xd6, 0xd9, 0x75, 0xe1, 0x68, 0xcc, 0x03, + 0xf5, 0x67, 0xb8, 0x95, 0x34, 0x67, 0xd8, 0x15, 0xf4, 0x67, + 0x27, 0xea, 0x0b, 0x98, 0x5c, 0x21, 0x3f, 0x10, 0x7c, 0xf6, + 0x39, 0x60, 0x9c, 0x3c, 0xb2, 0x6b, 0x01, 0x2f, 0x0b, 0x8b, + 0xd4, 0x24, 0xbf, 0x0b, 0x96, 0x0c, 0xab, 0x03, 0x96, 0x0c, + 0xbb, 0x8b, 0x69, 0xf3, 0x44, 0x74, 0xff, 0xec, 0xa7, 0x4e, + 0x06, 0x09, 0x49, 0x8a, 0x3f, 0xc6, 0x0f, 0x2e, 0x55, 0x98, + 0xd2, 0x44, 0x04, 0xae, 0x2e, 0xa0, 0xd4, 0x86, 0x6e, 0xa8, + 0x54, 0x8e, 0x6e, 0xa8, 0xab, 0x71, 0x91, 0x57, 0xeb, 0x8d, + 0xe3, 0x92, 0x9d, 0x42, 0xa5, 0x88, 0x53, 0xd1, 0xfe, 0x8b, + 0x98, 0xef, 0xe3, 0x0b, 0xf6, 0x41, 0x1f, 0xed, 0x50, 0x4b, + 0x9f, 0x5f, 0x50, 0x4b, 0x9f, 0x4d, 0xaf, 0xb4, 0x60, 0xb2, + 0x95, 0xa2, 0x74, 0x96, 0xa2, 0x13, 0xc0, 0x3a, 0x16, 0x37, + 0x67, 0xb5, 0xa6, 0xde, 0x74, 0x1e, 0x26, 0xba, 0x8d, 0x3c, + 0xa4, 0x5f, 0x9f, 0x34, 0xa4, 0x5f, 0x9f, 0x34, 0x5b, 0xa0, + 0x60, 0xcb, 0xd6, 0xd7, 0x42, 0xf8, 0x12, 0x3c, 0x4b, 0xe4, + 0xca, 0xf0, 0xd2, 0x55, 0x6f, 0xfe, 0xa5, 0x6b, 0x64, 0xfd, + 0xc3, 0x1b, 0xe9, 0x77, 0xce, 0x1b, 0xe9, 0x77, 0xce, 0x1b, + 0x16, 0x88, 0x31, 0xe4, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, + 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5e, 0xcd, 0xe5, 0x27, + 0x6b, 0x60, 0xe6, 0x30, 0xc4, 0xd6, 0xbb, 0xd8, 0xbe, 0x1d, + 0x9b, 0xa8, 0xde, 0x19, 0xec, 0x31, 0xfe, 0x9c, 0xe4, 0xa3, + 0xfe, 0x1c, 0xe4, 0xa0, 0x01, 0xe3, 0x1b, 0x5f, 0x4e, 0x58, + 0xd8, 0x86, 0x9a, 0xa5, 0xc2, 0x00, 0x86, 0xee, 0x79, 0x65, + 0x24, 0xa4, 0x73, 0xcd, 0xad, 0xba, 0x27, 0x03, 0x06, 0x39, + 0x6b, 0x81, 0x06, 0x39, 0x63, 0x81, 0xf9, 0xc6, 0x9c, 0x7e, + 0x9d, 0xc6, 0xb2, 0xe3, 0xa3, 0xcf, 0xc4, 0x58, 0xd8, 0x61, + 0x76, 0xaa, 0x78, 0x03, 0x07, 0xef, 0xa1, 0x9b, 0xff, 0xf0, + 0xb1, 0x2b, 0x5f, 0xd8, 0xb1, 0x2b, 0x5f, 0xc8, 0x4e, 0xd4, + 0xa0, 0x37, 0x77, 0x6a, 0x53, 0x55, 0x2a, 0xbb, 0xf6, 0x31, + 0x0e, 0x70, 0x60, 0x94, 0x58, 0x33, 0x4d, 0x49, 0xef, 0xea, + 0x71, 0xdf, 0x64, 0x10, 0x12, 0x4b, 0x6e, 0x10, 0x10, 0x4b, + 0x91, 0xef, 0xef, 0xb4, 0xb7, 0xdc, 0xd2, 0x98, 0x57, 0x81, + 0x3c, 0xd2, 0xe2, 0x43, 0xb8, 0xa2, 0xad, 0xa4, 0xf5, 0x08, + 0x19, 0xb7, 0xb2, 0x6d, 0x6b, 0xbc, 0xbb, 0x0e, 0x69, 0xb4, + 0xbb, 0x0e, 0x96, 0x4b, 0x44, 0xf1, 0x45, 0x3c, 0x05, 0x69, + 0x15, 0x18, 0xf9, 0xec, 0x04, 0x36, 0x72, 0x17, 0x43, 0x4d, + 0x2c, 0x88, 0x54, 0x74, 0xdb, 0xf3, 0x60, 0xf4, 0xbd, 0xba, + 0x40, 0x74, 0xbd, 0xaa, 0xbf, 0x8b, 0x42, 0x55, 0xff, 0xf8, + 0x65, 0xd2, 0x7b, 0x20, 0x2d, 0x3b, 0xa6, 0x4b, 0x66, 0x56, + 0xe3, 0xe3, 0x23, 0x87, 0xe0, 0x30, 0x2d, 0xbe, 0x7c, 0x61, + 0x2d, 0xcb, 0x7c, 0x61, 0x2d, 0x8b, 0x83, 0x9e, 0xd2, 0x74, + 0xb6, 0xc4, 0xb4, 0xf7, 0xf0, 0x9c, 0xe5, 0x40, 0x60, 0x9c, + 0x9c, 0x1b, 0xee, 0xe4, 0x8f, 0x88, 0x10, 0xe2, 0x91, 0x31, + 0x50, 0xd5, 0x9c, 0x50, 0x50, 0xd5, 0x9c, 0x10, 0xaf, 0x2a, + 0x63, 0xef, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, + 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xd0, 0x71, 0xc5, 0x4a, 0x13, 0x27, + 0xe6, 0x0e, 0x3d, 0x53, 0x17, 0x33, 0x86, 0xf7, 0x72, 0xd8, + 0x96, 0x12, 0xc1, 0x58, 0x52, 0x5a, 0xd1, 0x98, 0x52, 0x5b, + 0xd1, 0x98, 0xad, 0xa4, 0x2e, 0x67, 0xf3, 0xcd, 0x40, 0x44, + 0xbd, 0x28, 0x21, 0x89, 0xa6, 0xb4, 0x9a, 0xb8, 0x30, 0xae, + 0xe8, 0xee, 0x2d, 0x39, 0xe2, 0x2e, 0x6f, 0x7c, 0xf1, 0x5c, + 0x6f, 0x78, 0xe3, 0x6e, 0x90, 0x87, 0x1c, 0x91, 0xc9, 0x8d, + 0xc2, 0x64, 0x2b, 0x03, 0x86, 0x5c, 0x94, 0xa8, 0xe6, 0x7a, + 0xf7, 0x40, 0x86, 0xbe, 0xbb, 0x61, 0x1d, 0xe0, 0x99, 0xf9, + 0xbd, 0xb0, 0x99, 0xf9, 0xbd, 0xb0, 0x66, 0x06, 0x42, 0x4f, + 0xc6, 0xb5, 0xef, 0xf2, 0xcb, 0x0c, 0xae, 0x1b, 0x09, 0x8a, + 0x03, 0xcd, 0xb3, 0x7b, 0x22, 0x02, 0x76, 0xe8, 0xab, 0x32, + 0x74, 0xcc, 0x22, 0x26, 0x76, 0xcc, 0x22, 0x22, 0x89, 0x33, + 0xdd, 0xdd, 0xcb, 0xca, 0xe4, 0x24, 0x0f, 0x9b, 0x44, 0xb0, + 0x0c, 0xec, 0x1d, 0x24, 0xe5, 0xc1, 0x47, 0xb3, 0xbc, 0x60, + 0xad, 0x51, 0xe2, 0xe2, 0x2d, 0x5d, 0xe0, 0xe2, 0x2d, 0x55, + 0x1f, 0x1d, 0xd2, 0xaa, 0x78, 0x65, 0x42, 0x20, 0xd9, 0xc6, + 0x7f, 0x58, 0x02, 0x8b, 0x8b, 0x54, 0x64, 0xea, 0xc5, 0x56, + 0x16, 0x04, 0x75, 0xf0, 0x74, 0x9c, 0xcc, 0x80, 0x54, 0x8e, + 0xc5, 0xf0, 0xab, 0x71, 0x3a, 0x0f, 0x31, 0x9e, 0x75, 0x1e, + 0x41, 0x8f, 0x48, 0x84, 0x25, 0x09, 0xd0, 0x30, 0xc0, 0x2f, + 0xda, 0xba, 0x0e, 0x33, 0xb8, 0xea, 0x46, 0x2d, 0xf4, 0x73, + 0x46, 0x2f, 0xf4, 0xf3, 0xb9, 0xd0, 0x0b, 0x0c, 0x2a, 0x2c, + 0xab, 0x38, 0x2c, 0xa1, 0x4e, 0xac, 0x04, 0x56, 0xf1, 0x8a, + 0xca, 0xc3, 0x14, 0xb6, 0x15, 0x83, 0x73, 0x6d, 0xb7, 0x91, + 0x18, 0x47, 0x97, 0x93, 0x10, 0x47, 0x68, 0x6c, 0xef, 0xb8, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x5d, 0x80, 0xb1, 0x27, 0xb4, 0xb2, 0x4b, 0x0c, + 0x6a, 0xaa, 0x6d, 0x8a, 0xf7, 0xae, 0xb4, 0x61, 0xb2, 0x81, + 0x47, 0x95, 0xf4, 0x8f, 0xc0, 0x83, 0xf4, 0x8b, 0xc0, 0x87, + 0x0b, 0x74, 0x3f, 0x78, 0x8b, 0xc9, 0x6d, 0x3d, 0x54, 0x1e, + 0x54, 0xdd, 0x68, 0x2b, 0xf7, 0xb2, 0x86, 0x79, 0xdb, 0x0a, + 0xdd, 0x1b, 0x4a, 0xb4, 0xe0, 0x06, 0xa7, 0x14, 0xe0, 0x0e, + 0xa7, 0x14, 0x1f, 0xf1, 0x58, 0xeb, 0x66, 0xf8, 0x4f, 0x13, + 0x43, 0x34, 0x4c, 0x27, 0x1d, 0xee, 0xe6, 0x19, 0x14, 0xc8, + 0x9d, 0x41, 0x68, 0x71, 0xba, 0xe5, 0x7f, 0x15, 0xac, 0xa9, + 0x7d, 0x35, 0xae, 0xe9, 0x82, 0xca, 0x51, 0x16, 0xe0, 0xaf, + 0x12, 0x83, 0xac, 0x0c, 0x63, 0x31, 0x0f, 0xb9, 0x00, 0x51, + 0x0e, 0x27, 0xac, 0x84, 0x12, 0x1e, 0x02, 0x4e, 0x0c, 0x2f, + 0x61, 0xce, 0x0c, 0x2f, 0x61, 0x4e, 0xf3, 0xd0, 0x9e, 0xb1, + 0x7c, 0x5b, 0xcb, 0xde, 0x06, 0x2c, 0x19, 0xeb, 0x19, 0x2e, + 0x71, 0x96, 0xc4, 0xac, 0x44, 0x03, 0x5d, 0x1b, 0xb6, 0xae, + 0x45, 0xbe, 0x97, 0x8f, 0x45, 0x3e, 0x97, 0x8f, 0xba, 0xc1, + 0x68, 0x70, 0x46, 0x67, 0xfa, 0x4b, 0x16, 0xd1, 0x80, 0x61, + 0x87, 0xdd, 0x7c, 0x75, 0x0b, 0xe0, 0x48, 0xf4, 0xa6, 0x0b, + 0xe1, 0x02, 0x0b, 0x8a, 0x61, 0x40, 0x8f, 0x8b, 0x61, 0x40, + 0x70, 0x74, 0x9e, 0xbf, 0x7b, 0xfb, 0xcb, 0x91, 0xf4, 0x67, + 0x6c, 0x57, 0xf6, 0x16, 0x4f, 0x75, 0x42, 0x28, 0xbf, 0x0e, + 0x62, 0x69, 0x70, 0xba, 0x4a, 0x2a, 0x60, 0xa0, 0x4a, 0x28, + 0x60, 0xa2, 0xb5, 0xd7, 0x9f, 0x5d, 0xde, 0x3d, 0x13, 0x11, + 0xb6, 0xad, 0x07, 0xf7, 0x65, 0xbf, 0xb0, 0xb6, 0xd6, 0x10, + 0x28, 0xf7, 0x9b, 0x62, 0x0b, 0x48, 0x53, 0xb4, 0x2b, 0x33, + 0xd3, 0xb4, 0x2b, 0x73, 0x2c, 0x4b, 0xd4, 0x8c, 0x00, 0x00, + 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, + 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xbb, 0x06, 0xf8, 0xf4, 0xe2, 0x7f, 0x58, 0xb0, 0x4c, 0x95, + 0xc4, 0x15, 0x18, 0xd4, 0x3c, 0xd2, 0x2f, 0xe7, 0x0d, 0x13, + 0x19, 0x67, 0x0f, 0x50, 0x39, 0x67, 0x0c, 0x50, 0xc6, 0x98, + 0xf3, 0xaf, 0xca, 0x03, 0x23, 0x31, 0x22, 0xf6, 0xe4, 0xc6, + 0x43, 0x06, 0xd3, 0x04, 0x83, 0xf9, 0x2b, 0xe0, 0x5a, 0x80, + 0x4c, 0x36, 0x12, 0xf0, 0xc1, 0x77, 0x12, 0xd1, 0xc9, 0x77, + 0xed, 0x2e, 0x36, 0x88, 0xe9, 0x74, 0x24, 0xbb, 0x6a, 0x18, + 0x27, 0x66, 0xfb, 0xab, 0x3c, 0x45, 0xef, 0xba, 0x9c, 0x13, + 0xe7, 0xe3, 0xe2, 0x8e, 0x62, 0x97, 0x76, 0x03, 0x62, 0xb3, + 0xf6, 0x03, 0x9d, 0x4c, 0x09, 0xfc, 0x3b, 0x18, 0x69, 0x09, + 0xc9, 0xb5, 0x86, 0x0b, 0xb5, 0xc5, 0xe9, 0x2f, 0xd8, 0x24, + 0x62, 0x33, 0x91, 0x04, 0x64, 0xf8, 0x90, 0x01, 0x14, 0xfa, + 0x90, 0x01, 0x20, 0xfa, 0x6f, 0xfe, 0xdf, 0x05, 0x8a, 0x3f, + 0x8b, 0x7e, 0xad, 0x86, 0xaf, 0x6e, 0x24, 0x8a, 0x72, 0xc7, + 0x72, 0xea, 0x7b, 0xf6, 0x20, 0x25, 0x44, 0xb7, 0xa2, 0xb0, + 0x76, 0xc7, 0xa2, 0xa0, 0x76, 0xd7, 0x5d, 0x5f, 0x89, 0x28, + 0x3e, 0xa2, 0x76, 0x94, 0x65, 0x98, 0x57, 0xe7, 0x89, 0xb6, + 0x26, 0x29, 0x9c, 0xfb, 0xb6, 0xa6, 0xa2, 0x7e, 0xfa, 0xe2, + 0xb0, 0xf4, 0xe9, 0xe6, 0xb0, 0xf4, 0xe9, 0xe6, 0x4f, 0x0b, + 0x16, 0x19, 0x4d, 0xa5, 0x55, 0xd0, 0x1f, 0x4d, 0x7b, 0x8d, + 0xda, 0x14, 0xd1, 0xa6, 0x68, 0x62, 0xbb, 0xe5, 0x22, 0xba, + 0x2c, 0xc5, 0xc8, 0x7e, 0x7c, 0x49, 0xc8, 0x7a, 0x7c, 0x4d, + 0x37, 0x85, 0x83, 0xb2, 0xc3, 0x5e, 0x01, 0xcd, 0x9c, 0x11, + 0xf3, 0x2d, 0x7a, 0xee, 0x11, 0x31, 0xdc, 0xab, 0x44, 0xc4, + 0x51, 0x14, 0xb3, 0x77, 0x48, 0xb4, 0x45, 0x01, 0x58, 0xb4, + 0x45, 0x41, 0xa7, 0x4b, 0xba, 0xbe, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xbe, 0xc5, + 0x05, 0xaf, 0x59, 0x37, 0xee, 0x47, 0xeb, 0x14, 0xa1, 0x64, + 0xd2, 0x71, 0x6a, 0x0a, 0x66, 0x20, 0x65, 0xdf, 0xc6, 0x29, + 0x75, 0x22, 0x46, 0x21, 0x75, 0x26, 0xb9, 0xde, 0x8a, 0xd9, + 0x70, 0x38, 0x0c, 0x91, 0x5f, 0x36, 0x4e, 0xfd, 0x6f, 0x1f, + 0x8b, 0x2d, 0x97, 0xe7, 0x26, 0x1e, 0x06, 0x4f, 0x7c, 0xbe, + 0x02, 0xe7, 0xb5, 0xae, 0x82, 0xe7, 0xb4, 0xbe, 0x7d, 0x18, + 0x4b, 0x41, 0xed, 0xf3, 0x96, 0x19, 0xef, 0x3d, 0x82, 0xea, + 0xd6, 0x41, 0xb4, 0x36, 0xd4, 0x62, 0x5b, 0xf6, 0x85, 0xaf, + 0x52, 0xf8, 0xae, 0x61, 0x5e, 0xa7, 0xac, 0x61, 0x5e, 0xa7, + 0x53, 0x9e, 0xa1, 0x58, 0x63, 0x0e, 0x62, 0xd3, 0x65, 0x9c, + 0x9e, 0x88, 0x23, 0xdd, 0xa4, 0xc0, 0x8c, 0x63, 0xdd, 0xd9, + 0x45, 0xde, 0x60, 0x0f, 0xd6, 0x46, 0x02, 0xa3, 0x54, 0x4e, + 0x02, 0xa3, 0xab, 0xb1, 0xfd, 0x5c, 0xef, 0x16, 0x95, 0xbd, + 0x36, 0x9d, 0x3a, 0xd2, 0x62, 0x0c, 0x58, 0x20, 0x86, 0x9f, + 0x1d, 0xb8, 0xbf, 0x75, 0x78, 0xa6, 0x17, 0x7c, 0x59, 0x21, + 0x97, 0x7c, 0x59, 0x25, 0x68, 0x83, 0xa6, 0xda, 0x5f, 0xd0, + 0x64, 0xf4, 0x18, 0x66, 0x4e, 0xbf, 0x5b, 0xfc, 0x3f, 0x39, + 0xbe, 0xf4, 0x88, 0xe1, 0xe4, 0x44, 0x5a, 0xd6, 0xf7, 0x67, + 0x1a, 0x12, 0xf7, 0x44, 0x1a, 0x12, 0x08, 0xbb, 0xe5, 0xed, + 0xbc, 0xf8, 0xe7, 0x64, 0xf8, 0xf0, 0xa5, 0xc5, 0x00, 0xc5, + 0xf5, 0x39, 0x05, 0x8a, 0xc1, 0x6d, 0x29, 0xfd, 0x8e, 0x4d, + 0x68, 0x94, 0xc7, 0x6d, 0x28, 0x94, 0xc7, 0x6d, 0xd7, 0x6b, + 0x38, 0x92, 0x5a, 0xad, 0x07, 0xc2, 0x9b, 0x86, 0xe7, 0x02, + 0x5f, 0x10, 0xef, 0x0d, 0xe7, 0xf2, 0x98, 0x78, 0x3d, 0xe8, + 0xe4, 0x0f, 0x65, 0xc8, 0xd0, 0x7b, 0x65, 0xc8, 0xd0, 0x5b, + 0x9a, 0x37, 0x2f, 0xa4, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xd0, 0xce, 0xb3, 0x2b, + 0x6c, 0xd6, 0x8b, 0x4e, 0xf2, 0xab, 0xeb, 0x05, 0xb0, 0xe7, + 0xcc, 0xd2, 0x15, 0xfe, 0x97, 0x4d, 0x86, 0xbe, 0xdf, 0xcd, + 0x86, 0xbe, 0xcf, 0xcd, 0x79, 0x41, 0x30, 0x32, 0x9c, 0xa9, + 0x61, 0x00, 0x3e, 0x63, 0xb4, 0x5b, 0x38, 0xf2, 0x36, 0x88, + 0x07, 0xb6, 0x64, 0x45, 0x92, 0xe4, 0x4d, 0xa2, 0x00, 0xb7, + 0x4d, 0x2c, 0x00, 0xb7, 0x4d, 0xac, 0xff, 0x48, 0xb2, 0x53, + 0xcf, 0x72, 0x93, 0xb4, 0x91, 0xbc, 0x1b, 0x03, 0x01, 0x7a, + 0xf9, 0x37, 0x06, 0xcf, 0x5c, 0x8e, 0x2f, 0xc9, 0x76, 0xb3, + 0x18, 0x7a, 0x76, 0xfc, 0x18, 0xba, 0x76, 0xbe, 0xe7, 0x05, + 0x89, 0x41, 0x6a, 0x72, 0x3f, 0xb8, 0x16, 0xfd, 0xf3, 0xdc, + 0xe4, 0x97, 0xbc, 0xcc, 0x12, 0x9b, 0x07, 0x02, 0xaf, 0xd9, + 0xdb, 0x92, 0x8d, 0x59, 0xc7, 0x06, 0x8d, 0xd9, 0xc7, 0x06, + 0x72, 0x26, 0x38, 0xf9, 0xcd, 0x73, 0xe4, 0x35, 0x7a, 0x80, + 0xf9, 0xfb, 0x09, 0x53, 0xe6, 0x44, 0x54, 0x9c, 0x24, 0x13, + 0xc8, 0xe3, 0x82, 0xe1, 0x48, 0xca, 0x94, 0x63, 0x48, 0xca, + 0x84, 0x63, 0xb7, 0x35, 0x7b, 0x9c, 0x41, 0xbb, 0x1b, 0xf7, + 0x2c, 0xfe, 0x1e, 0x13, 0x65, 0x39, 0xde, 0x26, 0x46, 0x50, + 0xf2, 0xa1, 0x00, 0x0b, 0xd5, 0x79, 0x54, 0x43, 0x15, 0x2a, + 0x44, 0x43, 0x15, 0x6b, 0xbb, 0xbc, 0xea, 0x94, 0xa3, 0x44, + 0xb6, 0xc5, 0x53, 0xaa, 0xcd, 0xa0, 0xe3, 0x06, 0xeb, 0x20, + 0x73, 0xc4, 0x45, 0x0d, 0x1a, 0xba, 0xda, 0x20, 0xd3, 0xe2, + 0xba, 0x64, 0xd3, 0xe2, 0xba, 0x20, 0x2c, 0x1d, 0x45, 0xdf, + 0x34, 0x47, 0x05, 0x41, 0x1c, 0xb3, 0x04, 0x02, 0x19, 0xa1, + 0xa4, 0x04, 0x7f, 0x75, 0xc3, 0xc7, 0xf9, 0xaf, 0xac, 0x8f, + 0xd9, 0xf3, 0x4f, 0xb7, 0xd9, 0xf3, 0x4f, 0x97, 0x26, 0x0c, + 0xb0, 0x68, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, + 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x13, 0xb9, 0xd8, 0x0b, 0xa9, 0xaf, + 0x83, 0x19, 0xb5, 0xea, 0x75, 0x81, 0xb1, 0xd3, 0x52, 0x95, + 0x60, 0x4b, 0x18, 0xde, 0x74, 0x9f, 0x98, 0x9d, 0x74, 0xdf, + 0x18, 0x9d, 0x8b, 0x20, 0xe7, 0x62, 0x82, 0x65, 0xb3, 0x18, + 0x0c, 0xa4, 0x3b, 0xfb, 0x39, 0xff, 0xe7, 0x47, 0x7b, 0x1d, + 0xb6, 0xfe, 0x7b, 0xb3, 0xa6, 0xda, 0x53, 0xb5, 0x66, 0xdb, + 0x5b, 0xb5, 0x66, 0xdb, 0xa4, 0x4a, 0x99, 0x24, 0x01, 0x3f, + 0xf3, 0xc0, 0x60, 0x70, 0x14, 0xd2, 0xe0, 0xf8, 0xc4, 0x31, + 0xc9, 0x20, 0xc1, 0x69, 0x35, 0x30, 0x56, 0xc9, 0x84, 0x28, + 0x4d, 0x4a, 0x8c, 0x28, 0x4d, 0x4a, 0x73, 0xd7, 0xb2, 0xb5, + 0x3f, 0x6e, 0x45, 0xd9, 0xa0, 0x54, 0x23, 0x06, 0x23, 0xcd, + 0x8f, 0x76, 0x39, 0x7d, 0xa7, 0x4d, 0x25, 0x90, 0x1e, 0x6b, + 0x21, 0xdf, 0xf3, 0x29, 0x21, 0xd7, 0xfb, 0x69, 0xde, 0x28, + 0x04, 0x96, 0x87, 0x17, 0xd5, 0x68, 0x9c, 0x09, 0x04, 0xce, + 0x1c, 0xc2, 0x2e, 0xed, 0xe5, 0xe2, 0xf5, 0x61, 0x52, 0x34, + 0x4f, 0x27, 0x5a, 0x66, 0x43, 0x21, 0x7a, 0x66, 0x43, 0x21, + 0x85, 0x99, 0xbc, 0xde, 0xb3, 0x1a, 0x43, 0x87, 0x0a, 0xd3, + 0xda, 0xc4, 0xa9, 0xfd, 0x54, 0xd3, 0x60, 0xa0, 0x2c, 0x41, + 0x75, 0x74, 0x20, 0x25, 0x68, 0x68, 0x2c, 0x03, 0x68, 0x60, + 0x2c, 0x03, 0x97, 0x9f, 0xd3, 0xfc, 0xec, 0x2a, 0x7c, 0x2e, + 0x7b, 0x70, 0x1b, 0x98, 0xc6, 0xa7, 0xd2, 0x32, 0xbd, 0x35, + 0xff, 0x14, 0x27, 0x7d, 0x1a, 0x50, 0x8e, 0x61, 0x3e, 0x50, + 0x8f, 0x61, 0x3e, 0x50, 0x70, 0x9e, 0xc1, 0xaf, 0x06, 0x1f, + 0xe1, 0xf8, 0x97, 0xab, 0x39, 0x0c, 0x51, 0x48, 0x88, 0x2a, + 0xa4, 0xdf, 0x5c, 0x42, 0x5e, 0xee, 0x8a, 0xec, 0x5c, 0xef, + 0xcc, 0xdc, 0x5c, 0xef, 0xcc, 0xdc, 0xa3, 0x10, 0x33, 0x23, + 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, + 0x00, 0x00 +}; + From e6e973fd21bb6c545047ad273e3545bac5b20205 Mon Sep 17 00:00:00 2001 From: Daniel Keller Date: Tue, 22 Oct 2024 16:19:36 +0200 Subject: [PATCH 57/71] First commit IDMA tests --- .gitignore | 9 +- idma_tests/idma_TCDM_to_TCDM/Makefile | 22 ++++ .../idma_TCDM_to_TCDM/idma_TCDM_to_TCDM.c | 73 +++++++++++ idma_tests/idma_basic_FC_TCDM/Makefile | 22 ++++ .../idma_basic_FC_TCDM/idma_basic_FC_TCDM.c | 118 ++++++++++++++++++ 5 files changed, 240 insertions(+), 4 deletions(-) create mode 100755 idma_tests/idma_TCDM_to_TCDM/Makefile create mode 100644 idma_tests/idma_TCDM_to_TCDM/idma_TCDM_to_TCDM.c create mode 100755 idma_tests/idma_basic_FC_TCDM/Makefile create mode 100644 idma_tests/idma_basic_FC_TCDM/idma_basic_FC_TCDM.c diff --git a/.gitignore b/.gitignore index fa8d3f0..4d8ad3c 100644 --- a/.gitignore +++ b/.gitignore @@ -5,7 +5,8 @@ /**/*~ !boot_code/crt0.S /simplified-runtime.xml -*.log -*.wlf -modelsim.ini -transcript +**.log +**.ini +**.wlf +**transcript +**.dbg \ No newline at end of file diff --git a/idma_tests/idma_TCDM_to_TCDM/Makefile b/idma_tests/idma_TCDM_to_TCDM/Makefile new file mode 100755 index 0000000..4249b6f --- /dev/null +++ b/idma_tests/idma_TCDM_to_TCDM/Makefile @@ -0,0 +1,22 @@ +PULP_APP = test + +TEST_SRCS ?= idma_TCDM_to_TCDM.c +PULP_APP_SRCS = $(TEST_SRCS) +PULP_APP_FC_SRCS = $(TEST_FC_SRCS) +ifdef TEST_FC_SRCS +pulpFc=1 +endif + +space := +space += + +#BUILD_DIR = $(subst $(space),_,$(CURDIR)/build/$(TEST_SRCS)) + +ifdef VERBOSE +PULP_CFLAGS += -DVERBOSE +endif + +PULP_CFLAGS += -O3 +stackSize = 4096 + +include $(PULP_SDK_HOME)/install/rules/pulp.mk diff --git a/idma_tests/idma_TCDM_to_TCDM/idma_TCDM_to_TCDM.c b/idma_tests/idma_TCDM_to_TCDM/idma_TCDM_to_TCDM.c new file mode 100644 index 0000000..7ae4e56 --- /dev/null +++ b/idma_tests/idma_TCDM_to_TCDM/idma_TCDM_to_TCDM.c @@ -0,0 +1,73 @@ + +#include +#include +#include +#include "pulp.h" + +#define VERBOSE + +#define MAX_BUFFER_SIZE 0x2000 +#define BUFFER_SIZE 0x0200 + +L1_DATA static uint8_t src_buffer[MAX_BUFFER_SIZE]; +L1_DATA static uint8_t dst_buffer[MAX_BUFFER_SIZE]; + +int test_idma_l1_to_l1(unsigned int len); + +int main(void) { + if (rt_cluster_id() != 0) { + return bench_cluster_forward(0); + } + + int error_count = 0; + + if (get_core_id() == 0) { + // Run the test for different buffer sizes + for (unsigned int len = 8; len <= BUFFER_SIZE; len *= 2) { + error_count += test_idma_l1_to_l1(len); + } + } + + return error_count; +} + +int test_idma_l1_to_l1(unsigned int len) { + volatile unsigned int id; + volatile int error = 0; + volatile uint32_t test, read; + + printf("STARTING L1 TO L1 DMA TEST FOR LENGTH: %d\n", len); + + // Fill source buffer with known data pattern + for (unsigned int i = 0; i < len / 4; i++) { + ((uint32_t *)src_buffer)[i] = 0xABCD0000 + i; + } + + // Clear destination buffer + memset(dst_buffer, 0, len); + + // Perform DMA transfer from src_buffer to dst_buffer within L1 memory + id = pulp_idma_L1ToL1((unsigned int)src_buffer, (unsigned int)dst_buffer, len); + + // Wait for DMA transfer to complete + plp_dma_barrier(); + + // Verify data in destination buffer + for (unsigned int i = 0; i < len / 4; i++) { + test = 0xABCD0000 + i; + read = ((uint32_t *)dst_buffer)[i]; + + if (test != read) { + printf("Error!!! Read: %x, Expected: %x, Index: %d\n", read, test, i); + error++; + } + } + + if (error == 0) { + printf("L1 to L1 DMA transfer test passed for length %d.\n", len); + } else { + printf("L1 to L1 DMA transfer test failed for length %d with %d errors.\n", len, error); + } + + return error; +} diff --git a/idma_tests/idma_basic_FC_TCDM/Makefile b/idma_tests/idma_basic_FC_TCDM/Makefile new file mode 100755 index 0000000..563856b --- /dev/null +++ b/idma_tests/idma_basic_FC_TCDM/Makefile @@ -0,0 +1,22 @@ +PULP_APP = test + +TEST_SRCS ?= idma_basic_FC_TCDM.c +PULP_APP_SRCS = $(TEST_SRCS) +PULP_APP_FC_SRCS = $(TEST_FC_SRCS) +ifdef TEST_FC_SRCS +pulpFc=1 +endif + +space := +space += + +#BUILD_DIR = $(subst $(space),_,$(CURDIR)/build/$(TEST_SRCS)) + +ifdef VERBOSE +PULP_CFLAGS += -DVERBOSE +endif + +PULP_CFLAGS += -O3 +stackSize = 4096 + +include $(PULP_SDK_HOME)/install/rules/pulp.mk diff --git a/idma_tests/idma_basic_FC_TCDM/idma_basic_FC_TCDM.c b/idma_tests/idma_basic_FC_TCDM/idma_basic_FC_TCDM.c new file mode 100644 index 0000000..efbaf07 --- /dev/null +++ b/idma_tests/idma_basic_FC_TCDM/idma_basic_FC_TCDM.c @@ -0,0 +1,118 @@ +#include +#include +#include +#include +#include "pulp.h" + +#define VERBOSE + +#define MAX_BUFFER_SIZE 0x2000 + +L2_DATA static uint8_t ext[MAX_BUFFER_SIZE]; // External memory buffer (L2) +L1_DATA static uint8_t loc[MAX_BUFFER_SIZE]; // Local memory buffer (TCDM / L1) + +typedef enum {L2_TO_L1, L1_TO_L2} test_type_t; + +int test_idma(uint32_t size, test_type_t type, uint32_t ext_addr, uint32_t tcdm_addr); + +int main(void) { + if (rt_cluster_id() != 0) { + printf("Test only runs on cluster 0\n"); + return bench_cluster_forward(0); + } + + int error_count = 0; + + if (get_core_id() == 0) { + + uint32_t size = 5; + // Test for L2_TO_L1 operation + for (int i = 0; i < size; i++) { + error_count += test_idma(size, L2_TO_L1, (uint32_t)ext, (uint32_t)loc); + } + + // Test for L1_TO_L2 operation + for (int i = 0; i < size; i++) { + error_count += test_idma(size, L1_TO_L2, (uint32_t)ext, (uint32_t)loc); + } + } + + return error_count; +} + +int test_idma(uint32_t size, test_type_t type, uint32_t ext_addr, uint32_t tcdm_addr) { + volatile uint8_t expected, actual; + volatile int error = 0; + volatile unsigned int id; + + if (type == L2_TO_L1) { + + for (uint32_t i = 0; i < size; i++) { + *(uint8_t *)(ext_addr + i) = (uint8_t)(i & 0xFF); + } + + memset((void *)tcdm_addr, 0, size + 16); + + id = pulp_idma_memcpy(ext_addr, tcdm_addr, size, IDMA_PROT_AXI, IDMA_PROT_OBI); + + /* L2_TO_L1 transaction: + +----------------+ +----------------+ + | | DMA Transfer | | + | L2 Memory | ---------------------> | L1 Memory | + | (ext buffer) | (pulp_idma_memcpy) | (loc buffer) | + | | | | + +----------------+ +----------------+ + */ + + } else if (type == L1_TO_L2) { + // Fill L1 buffer with a pattern + for (uint32_t i = 0; i < size; i++) { + *(uint8_t *)(tcdm_addr + i) = (uint8_t)(i & 0xFF); + } + + // Clear L2 + memset((void *)ext_addr, 0, size + 16); + + // Perform DMA transfer from local memory to external memory + id = pulp_idma_memcpy(tcdm_addr, ext_addr, size, IDMA_PROT_OBI, IDMA_PROT_AXI); + + /* L1_TO_L2 transaction: + +----------------+ +----------------+ + | | DMA Transfer | | + | L2 Memory | <--------------------- | L1 Memory | + | (ext buffer) | (pulp_idma_memcpy) | (loc buffer) | + | | | | + +----------------+ +----------------+ + */ + } else { + printf("Invalid test type. It must be either L2_TO_L1 or L1_TO_L2.\n"); + return 1; + } + + plp_dma_barrier(); + + // Verify data + for (uint32_t i = 0; i < size; i++) { + expected = (uint8_t)(i & 0xFF); // Same pattern as L2_TO_L1 + if (type == L2_TO_L1) { + // Reading from the local memory buffer "loc" allocated in L1 memory + actual = *(uint8_t *)(tcdm_addr + i); + } else { // L1_TO_L2 + // Reading from the external memory buffer "ext" allocated in L2 memory + actual = *(uint8_t *)(ext_addr + i); + } + + if (expected != actual) { + printf("Error at index %u: Expected 0x%02X, Got 0x%02X\n", i, expected, actual); + error++; + } + } + + if (error == 0) { + printf("Test passed for %s of length %u.\n", type == L2_TO_L1 ? "L2_TO_L1" : "L1_TO_L2", size); + } else { + printf("Test failed for %s of length %u with %u errors.\n", type == L2_TO_L1 ? "L2_TO_L1" : "L1_TO_L2", size, error); + } + + return error; +} \ No newline at end of file From 3d7e76b3d678ffdc1a3b53842feb1bf5ad14591d Mon Sep 17 00:00:00 2001 From: Daniel Keller Date: Thu, 31 Oct 2024 14:16:06 +0100 Subject: [PATCH 58/71] Add wide port AXI test --- idma_tests/idma_2D_FC_TCDM/Makefile | 22 ++++ .../idma_TCDM_to_TCDM/idma_TCDM_to_TCDM.c | 4 +- idma_tests/idma_simple/wave.do | 66 ++++++++++ idma_tests/idma_wide/Makefile | 22 ++++ idma_tests/idma_wide/idma_wide.c | 120 ++++++++++++++++++ idma_tests/idma_wide/wave.do | 66 ++++++++++ 6 files changed, 298 insertions(+), 2 deletions(-) create mode 100755 idma_tests/idma_2D_FC_TCDM/Makefile create mode 100644 idma_tests/idma_simple/wave.do create mode 100755 idma_tests/idma_wide/Makefile create mode 100644 idma_tests/idma_wide/idma_wide.c create mode 100644 idma_tests/idma_wide/wave.do diff --git a/idma_tests/idma_2D_FC_TCDM/Makefile b/idma_tests/idma_2D_FC_TCDM/Makefile new file mode 100755 index 0000000..8a5210c --- /dev/null +++ b/idma_tests/idma_2D_FC_TCDM/Makefile @@ -0,0 +1,22 @@ +PULP_APP = test + +TEST_SRCS ?= idma_2D_FC_TCDM.c +PULP_APP_SRCS = $(TEST_SRCS) +PULP_APP_FC_SRCS = $(TEST_FC_SRCS) +ifdef TEST_FC_SRCS +pulpFc=1 +endif + +space := +space += + +#BUILD_DIR = $(subst $(space),_,$(CURDIR)/build/$(TEST_SRCS)) + +ifdef VERBOSE +PULP_CFLAGS += -DVERBOSE +endif + +PULP_CFLAGS += -O3 +stackSize = 4096 + +include $(PULP_SDK_HOME)/install/rules/pulp.mk diff --git a/idma_tests/idma_TCDM_to_TCDM/idma_TCDM_to_TCDM.c b/idma_tests/idma_TCDM_to_TCDM/idma_TCDM_to_TCDM.c index 7ae4e56..ae94f01 100644 --- a/idma_tests/idma_TCDM_to_TCDM/idma_TCDM_to_TCDM.c +++ b/idma_tests/idma_TCDM_to_TCDM/idma_TCDM_to_TCDM.c @@ -47,10 +47,10 @@ int test_idma_l1_to_l1(unsigned int len) { memset(dst_buffer, 0, len); // Perform DMA transfer from src_buffer to dst_buffer within L1 memory - id = pulp_idma_L1ToL1((unsigned int)src_buffer, (unsigned int)dst_buffer, len); + id = pulp_cl_idma_L1ToL1((unsigned int)src_buffer, (unsigned int)dst_buffer, len); // Wait for DMA transfer to complete - plp_dma_barrier(); + plp_cl_dma_barrier(); // Verify data in destination buffer for (unsigned int i = 0; i < len / 4; i++) { diff --git a/idma_tests/idma_simple/wave.do b/idma_tests/idma_simple/wave.do new file mode 100644 index 0000000..e15c840 --- /dev/null +++ b/idma_tests/idma_simple/wave.do @@ -0,0 +1,66 @@ +onerror {resume} +quietly WaveActivateNextPane {} 0 +add wave -noupdate -subitemconfig {/pulp_cluster_tb/cluster_i/s_dma_master_req.ar {-childformat {{size -radix unsigned}} -expand} /pulp_cluster_tb/cluster_i/s_dma_master_req.ar.size {-radix unsigned}} /pulp_cluster_tb/cluster_i/s_dma_master_req +add wave -noupdate -subitemconfig {/pulp_cluster_tb/cluster_i/s_dma_master_resp.r -expand} /pulp_cluster_tb/cluster_i/s_dma_master_resp +add wave -noupdate -group {s_hci_dma[0]} {/pulp_cluster_tb/cluster_i/s_hci_dma[0]/clk} +add wave -noupdate -group {s_hci_dma[0]} {/pulp_cluster_tb/cluster_i/s_hci_dma[0]/req} +add wave -noupdate -group {s_hci_dma[0]} {/pulp_cluster_tb/cluster_i/s_hci_dma[0]/gnt} +add wave -noupdate -group {s_hci_dma[0]} {/pulp_cluster_tb/cluster_i/s_hci_dma[0]/r_valid} +add wave -noupdate -group {s_hci_dma[0]} {/pulp_cluster_tb/cluster_i/s_hci_dma[0]/r_ready} +add wave -noupdate -group {s_hci_dma[0]} {/pulp_cluster_tb/cluster_i/s_hci_dma[0]/add} +add wave -noupdate -group {s_hci_dma[0]} {/pulp_cluster_tb/cluster_i/s_hci_dma[0]/wen} +add wave -noupdate -group {s_hci_dma[0]} {/pulp_cluster_tb/cluster_i/s_hci_dma[0]/data} +add wave -noupdate -group {s_hci_dma[0]} {/pulp_cluster_tb/cluster_i/s_hci_dma[0]/be} +add wave -noupdate -group {s_hci_dma[0]} {/pulp_cluster_tb/cluster_i/s_hci_dma[0]/user} +add wave -noupdate -group {s_hci_dma[0]} {/pulp_cluster_tb/cluster_i/s_hci_dma[0]/id} +add wave -noupdate -group {s_hci_dma[0]} {/pulp_cluster_tb/cluster_i/s_hci_dma[0]/r_data} +add wave -noupdate -group {s_hci_dma[0]} {/pulp_cluster_tb/cluster_i/s_hci_dma[0]/r_user} +add wave -noupdate -group {s_hci_dma[0]} {/pulp_cluster_tb/cluster_i/s_hci_dma[0]/r_id} +add wave -noupdate -group {s_hci_dma[0]} {/pulp_cluster_tb/cluster_i/s_hci_dma[0]/r_opc} +add wave -noupdate -group {s_hci_dma[0]} {/pulp_cluster_tb/cluster_i/s_hci_dma[0]/ecc} +add wave -noupdate -group {s_hci_dma[0]} {/pulp_cluster_tb/cluster_i/s_hci_dma[0]/r_ecc} +add wave -noupdate -group {s_hci_dma[0]} {/pulp_cluster_tb/cluster_i/s_hci_dma[0]/ereq} +add wave -noupdate -group {s_hci_dma[0]} {/pulp_cluster_tb/cluster_i/s_hci_dma[0]/egnt} +add wave -noupdate -group {s_hci_dma[0]} {/pulp_cluster_tb/cluster_i/s_hci_dma[0]/r_evalid} +add wave -noupdate -group {s_hci_dma[0]} {/pulp_cluster_tb/cluster_i/s_hci_dma[0]/r_eready} +add wave -noupdate -group {s_hci_dma[0]} {/pulp_cluster_tb/cluster_i/s_hci_dma[0]/clk_assert} +add wave -noupdate -expand -group {s_hci_dma[1]} {/pulp_cluster_tb/cluster_i/s_hci_dma[1]/clk} +add wave -noupdate -expand -group {s_hci_dma[1]} {/pulp_cluster_tb/cluster_i/s_hci_dma[1]/req} +add wave -noupdate -expand -group {s_hci_dma[1]} {/pulp_cluster_tb/cluster_i/s_hci_dma[1]/gnt} +add wave -noupdate -expand -group {s_hci_dma[1]} {/pulp_cluster_tb/cluster_i/s_hci_dma[1]/r_valid} +add wave -noupdate -expand -group {s_hci_dma[1]} {/pulp_cluster_tb/cluster_i/s_hci_dma[1]/r_ready} +add wave -noupdate -expand -group {s_hci_dma[1]} {/pulp_cluster_tb/cluster_i/s_hci_dma[1]/add} +add wave -noupdate -expand -group {s_hci_dma[1]} {/pulp_cluster_tb/cluster_i/s_hci_dma[1]/wen} +add wave -noupdate -expand -group {s_hci_dma[1]} {/pulp_cluster_tb/cluster_i/s_hci_dma[1]/data} +add wave -noupdate -expand -group {s_hci_dma[1]} {/pulp_cluster_tb/cluster_i/s_hci_dma[1]/be} +add wave -noupdate -expand -group {s_hci_dma[1]} {/pulp_cluster_tb/cluster_i/s_hci_dma[1]/user} +add wave -noupdate -expand -group {s_hci_dma[1]} {/pulp_cluster_tb/cluster_i/s_hci_dma[1]/id} +add wave -noupdate -expand -group {s_hci_dma[1]} {/pulp_cluster_tb/cluster_i/s_hci_dma[1]/r_data} +add wave -noupdate -expand -group {s_hci_dma[1]} {/pulp_cluster_tb/cluster_i/s_hci_dma[1]/r_user} +add wave -noupdate -expand -group {s_hci_dma[1]} {/pulp_cluster_tb/cluster_i/s_hci_dma[1]/r_id} +add wave -noupdate -expand -group {s_hci_dma[1]} {/pulp_cluster_tb/cluster_i/s_hci_dma[1]/r_opc} +add wave -noupdate -expand -group {s_hci_dma[1]} {/pulp_cluster_tb/cluster_i/s_hci_dma[1]/ecc} +add wave -noupdate -expand -group {s_hci_dma[1]} {/pulp_cluster_tb/cluster_i/s_hci_dma[1]/r_ecc} +add wave -noupdate -expand -group {s_hci_dma[1]} {/pulp_cluster_tb/cluster_i/s_hci_dma[1]/ereq} +add wave -noupdate -expand -group {s_hci_dma[1]} {/pulp_cluster_tb/cluster_i/s_hci_dma[1]/egnt} +add wave -noupdate -expand -group {s_hci_dma[1]} {/pulp_cluster_tb/cluster_i/s_hci_dma[1]/r_evalid} +add wave -noupdate -expand -group {s_hci_dma[1]} {/pulp_cluster_tb/cluster_i/s_hci_dma[1]/r_eready} +add wave -noupdate -expand -group {s_hci_dma[1]} {/pulp_cluster_tb/cluster_i/s_hci_dma[1]/clk_assert} +TreeUpdate [SetDefaultTree] +WaveRestoreCursors {{Cursor 1} {262653051593 ps} 1} {{Cursor 2} {262655244483 ps} 0} +quietly wave cursor active 2 +configure wave -namecolwidth 150 +configure wave -valuecolwidth 567 +configure wave -justifyvalue left +configure wave -signalnamewidth 1 +configure wave -snapdistance 10 +configure wave -datasetprefix 0 +configure wave -rowmargin 4 +configure wave -childrowmargin 2 +configure wave -gridoffset 0 +configure wave -gridperiod 1 +configure wave -griddelta 40 +configure wave -timeline 0 +configure wave -timelineunits ps +update +WaveRestoreZoom {262620992344 ps} {262771194315 ps} diff --git a/idma_tests/idma_wide/Makefile b/idma_tests/idma_wide/Makefile new file mode 100755 index 0000000..d75dc52 --- /dev/null +++ b/idma_tests/idma_wide/Makefile @@ -0,0 +1,22 @@ +PULP_APP = test + +TEST_SRCS ?= idma_wide.c +PULP_APP_SRCS = $(TEST_SRCS) +PULP_APP_FC_SRCS = $(TEST_FC_SRCS) +ifdef TEST_FC_SRCS +pulpFc=1 +endif + +space := +space += + +#BUILD_DIR = $(subst $(space),_,$(CURDIR)/build/$(TEST_SRCS)) + +ifdef VERBOSE +PULP_CFLAGS += -DVERBOSE +endif + +PULP_CFLAGS += -O3 +stackSize = 4096 + +include $(PULP_SDK_HOME)/install/rules/pulp.mk diff --git a/idma_tests/idma_wide/idma_wide.c b/idma_tests/idma_wide/idma_wide.c new file mode 100644 index 0000000..75e68cb --- /dev/null +++ b/idma_tests/idma_wide/idma_wide.c @@ -0,0 +1,120 @@ +#include +#include +#include +#include +#include "pulp.h" + +#define VERBOSE + +#define MAX_BUFFER_SIZE 0x2000 + +#define min_size 32 // 256 for wide AXI port +#define max_size 45 + +L2_DATA static uint8_t ext[MAX_BUFFER_SIZE]; // External memory buffer (L2) +L1_DATA static uint8_t loc[MAX_BUFFER_SIZE]; // Local memory buffer (TCDM / L1) + +typedef enum {L2_TO_L1, L1_TO_L2} test_type_t; + +int test_idma(uint32_t size, test_type_t type, uint32_t ext_addr, uint32_t tcdm_addr); + +int main(void) { + if (rt_cluster_id() != 0) { + printf("Test only runs on cluster 0\n"); + return bench_cluster_forward(0); + } + + int error_count = 0; + + if (get_core_id() == 0) { + + // Test for L2_TO_L1 operation + for (int size = min_size; size < max_size; size++) { + error_count += test_idma(size, L2_TO_L1, (uint32_t)ext, (uint32_t)loc); + } + + // Test for L1_TO_L2 operation + for (int size = min_size; size < max_size; size++) { + error_count += test_idma(size, L1_TO_L2, (uint32_t)ext, (uint32_t)loc); + } + } + + return error_count; +} + +int test_idma(uint32_t size, test_type_t type, uint32_t ext_addr, uint32_t tcdm_addr) { + volatile uint8_t expected, actual; + volatile int error = 0; + volatile unsigned int id; + + if (type == L2_TO_L1) { + + for (uint32_t i = 0; i < size; i++) { + *(uint8_t *)(ext_addr + i) = (uint8_t)(i & 0xFF); + } + + memset((void *)tcdm_addr, 0, size + 16); + + id = pulp_idma_memcpy(ext_addr, tcdm_addr, size, IDMA_PROT_AXI, IDMA_PROT_OBI); + + /* L2_TO_L1 transaction: + +----------------+ +----------------+ + | | DMA Transfer | | + | L2 Memory | ---------------------> | L1 Memory | + | (ext buffer) | (pulp_idma_memcpy) | (loc buffer) | + | | | | + +----------------+ +----------------+ + */ + + } else if (type == L1_TO_L2) { + // Fill L1 buffer with a pattern + for (uint32_t i = 0; i < size; i++) { + *(uint8_t *)(tcdm_addr + i) = (uint8_t)(i & 0xFF); + } + + // Clear L2 + memset((void *)ext_addr, 0, size + 16); + + // Perform DMA transfer from local memory to external memory + id = pulp_idma_memcpy(tcdm_addr, ext_addr, size, IDMA_PROT_OBI, IDMA_PROT_AXI); + + /* L1_TO_L2 transaction: + +----------------+ +----------------+ + | | DMA Transfer | | + | L2 Memory | <--------------------- | L1 Memory | + | (ext buffer) | (pulp_idma_memcpy) | (loc buffer) | + | | | | + +----------------+ +----------------+ + */ + } else { + printf("Invalid test type. It must be either L2_TO_L1 or L1_TO_L2.\n"); + return 1; + } + + plp_dma_barrier(); + + // Verify data + for (uint32_t i = 0; i < size; i++) { + expected = (uint8_t)(i & 0xFF); // Same pattern as L2_TO_L1 + if (type == L2_TO_L1) { + // Reading from the local memory buffer "loc" allocated in L1 memory + actual = *(uint8_t *)(tcdm_addr + i); + } else { // L1_TO_L2 + // Reading from the external memory buffer "ext" allocated in L2 memory + actual = *(uint8_t *)(ext_addr + i); + } + + if (expected != actual) { + printf("Error at index %u: Expected 0x%02X, Got 0x%02X\n", i, expected, actual); + error++; + } + } + + if (error == 0) { + printf("Test passed for %s of length %u.\n", type == L2_TO_L1 ? "L2_TO_L1" : "L1_TO_L2", size); + } else { + printf("Test failed for %s of length %u with %u errors.\n", type == L2_TO_L1 ? "L2_TO_L1" : "L1_TO_L2", size, error); + } + + return error; +} \ No newline at end of file diff --git a/idma_tests/idma_wide/wave.do b/idma_tests/idma_wide/wave.do new file mode 100644 index 0000000..e15c840 --- /dev/null +++ b/idma_tests/idma_wide/wave.do @@ -0,0 +1,66 @@ +onerror {resume} +quietly WaveActivateNextPane {} 0 +add wave -noupdate -subitemconfig {/pulp_cluster_tb/cluster_i/s_dma_master_req.ar {-childformat {{size -radix unsigned}} -expand} /pulp_cluster_tb/cluster_i/s_dma_master_req.ar.size {-radix unsigned}} /pulp_cluster_tb/cluster_i/s_dma_master_req +add wave -noupdate -subitemconfig {/pulp_cluster_tb/cluster_i/s_dma_master_resp.r -expand} /pulp_cluster_tb/cluster_i/s_dma_master_resp +add wave -noupdate -group {s_hci_dma[0]} {/pulp_cluster_tb/cluster_i/s_hci_dma[0]/clk} +add wave -noupdate -group {s_hci_dma[0]} {/pulp_cluster_tb/cluster_i/s_hci_dma[0]/req} +add wave -noupdate -group {s_hci_dma[0]} {/pulp_cluster_tb/cluster_i/s_hci_dma[0]/gnt} +add wave -noupdate -group {s_hci_dma[0]} {/pulp_cluster_tb/cluster_i/s_hci_dma[0]/r_valid} +add wave -noupdate -group {s_hci_dma[0]} {/pulp_cluster_tb/cluster_i/s_hci_dma[0]/r_ready} +add wave -noupdate -group {s_hci_dma[0]} {/pulp_cluster_tb/cluster_i/s_hci_dma[0]/add} +add wave -noupdate -group {s_hci_dma[0]} {/pulp_cluster_tb/cluster_i/s_hci_dma[0]/wen} +add wave -noupdate -group {s_hci_dma[0]} {/pulp_cluster_tb/cluster_i/s_hci_dma[0]/data} +add wave -noupdate -group {s_hci_dma[0]} {/pulp_cluster_tb/cluster_i/s_hci_dma[0]/be} +add wave -noupdate -group {s_hci_dma[0]} {/pulp_cluster_tb/cluster_i/s_hci_dma[0]/user} +add wave -noupdate -group {s_hci_dma[0]} {/pulp_cluster_tb/cluster_i/s_hci_dma[0]/id} +add wave -noupdate -group {s_hci_dma[0]} {/pulp_cluster_tb/cluster_i/s_hci_dma[0]/r_data} +add wave -noupdate -group {s_hci_dma[0]} {/pulp_cluster_tb/cluster_i/s_hci_dma[0]/r_user} +add wave -noupdate -group {s_hci_dma[0]} {/pulp_cluster_tb/cluster_i/s_hci_dma[0]/r_id} +add wave -noupdate -group {s_hci_dma[0]} {/pulp_cluster_tb/cluster_i/s_hci_dma[0]/r_opc} +add wave -noupdate -group {s_hci_dma[0]} {/pulp_cluster_tb/cluster_i/s_hci_dma[0]/ecc} +add wave -noupdate -group {s_hci_dma[0]} {/pulp_cluster_tb/cluster_i/s_hci_dma[0]/r_ecc} +add wave -noupdate -group {s_hci_dma[0]} {/pulp_cluster_tb/cluster_i/s_hci_dma[0]/ereq} +add wave -noupdate -group {s_hci_dma[0]} {/pulp_cluster_tb/cluster_i/s_hci_dma[0]/egnt} +add wave -noupdate -group {s_hci_dma[0]} {/pulp_cluster_tb/cluster_i/s_hci_dma[0]/r_evalid} +add wave -noupdate -group {s_hci_dma[0]} {/pulp_cluster_tb/cluster_i/s_hci_dma[0]/r_eready} +add wave -noupdate -group {s_hci_dma[0]} {/pulp_cluster_tb/cluster_i/s_hci_dma[0]/clk_assert} +add wave -noupdate -expand -group {s_hci_dma[1]} {/pulp_cluster_tb/cluster_i/s_hci_dma[1]/clk} +add wave -noupdate -expand -group {s_hci_dma[1]} {/pulp_cluster_tb/cluster_i/s_hci_dma[1]/req} +add wave -noupdate -expand -group {s_hci_dma[1]} {/pulp_cluster_tb/cluster_i/s_hci_dma[1]/gnt} +add wave -noupdate -expand -group {s_hci_dma[1]} {/pulp_cluster_tb/cluster_i/s_hci_dma[1]/r_valid} +add wave -noupdate -expand -group {s_hci_dma[1]} {/pulp_cluster_tb/cluster_i/s_hci_dma[1]/r_ready} +add wave -noupdate -expand -group {s_hci_dma[1]} {/pulp_cluster_tb/cluster_i/s_hci_dma[1]/add} +add wave -noupdate -expand -group {s_hci_dma[1]} {/pulp_cluster_tb/cluster_i/s_hci_dma[1]/wen} +add wave -noupdate -expand -group {s_hci_dma[1]} {/pulp_cluster_tb/cluster_i/s_hci_dma[1]/data} +add wave -noupdate -expand -group {s_hci_dma[1]} {/pulp_cluster_tb/cluster_i/s_hci_dma[1]/be} +add wave -noupdate -expand -group {s_hci_dma[1]} {/pulp_cluster_tb/cluster_i/s_hci_dma[1]/user} +add wave -noupdate -expand -group {s_hci_dma[1]} {/pulp_cluster_tb/cluster_i/s_hci_dma[1]/id} +add wave -noupdate -expand -group {s_hci_dma[1]} {/pulp_cluster_tb/cluster_i/s_hci_dma[1]/r_data} +add wave -noupdate -expand -group {s_hci_dma[1]} {/pulp_cluster_tb/cluster_i/s_hci_dma[1]/r_user} +add wave -noupdate -expand -group {s_hci_dma[1]} {/pulp_cluster_tb/cluster_i/s_hci_dma[1]/r_id} +add wave -noupdate -expand -group {s_hci_dma[1]} {/pulp_cluster_tb/cluster_i/s_hci_dma[1]/r_opc} +add wave -noupdate -expand -group {s_hci_dma[1]} {/pulp_cluster_tb/cluster_i/s_hci_dma[1]/ecc} +add wave -noupdate -expand -group {s_hci_dma[1]} {/pulp_cluster_tb/cluster_i/s_hci_dma[1]/r_ecc} +add wave -noupdate -expand -group {s_hci_dma[1]} {/pulp_cluster_tb/cluster_i/s_hci_dma[1]/ereq} +add wave -noupdate -expand -group {s_hci_dma[1]} {/pulp_cluster_tb/cluster_i/s_hci_dma[1]/egnt} +add wave -noupdate -expand -group {s_hci_dma[1]} {/pulp_cluster_tb/cluster_i/s_hci_dma[1]/r_evalid} +add wave -noupdate -expand -group {s_hci_dma[1]} {/pulp_cluster_tb/cluster_i/s_hci_dma[1]/r_eready} +add wave -noupdate -expand -group {s_hci_dma[1]} {/pulp_cluster_tb/cluster_i/s_hci_dma[1]/clk_assert} +TreeUpdate [SetDefaultTree] +WaveRestoreCursors {{Cursor 1} {262653051593 ps} 1} {{Cursor 2} {262655244483 ps} 0} +quietly wave cursor active 2 +configure wave -namecolwidth 150 +configure wave -valuecolwidth 567 +configure wave -justifyvalue left +configure wave -signalnamewidth 1 +configure wave -snapdistance 10 +configure wave -datasetprefix 0 +configure wave -rowmargin 4 +configure wave -childrowmargin 2 +configure wave -gridoffset 0 +configure wave -gridperiod 1 +configure wave -griddelta 40 +configure wave -timeline 0 +configure wave -timelineunits ps +update +WaveRestoreZoom {262620992344 ps} {262771194315 ps} From 4256dca0bc20dbb27077d39c0004710c675850c1 Mon Sep 17 00:00:00 2001 From: Daniel Keller Date: Mon, 4 Nov 2024 10:39:25 +0100 Subject: [PATCH 59/71] feat: Add IDMA 2D transfers --- idma_tests/idma_2D_FC_TCDM/idma_2D_FC_TCDM.c | 160 +++++++++++++++++++ 1 file changed, 160 insertions(+) create mode 100644 idma_tests/idma_2D_FC_TCDM/idma_2D_FC_TCDM.c diff --git a/idma_tests/idma_2D_FC_TCDM/idma_2D_FC_TCDM.c b/idma_tests/idma_2D_FC_TCDM/idma_2D_FC_TCDM.c new file mode 100644 index 0000000..9f1fcb5 --- /dev/null +++ b/idma_tests/idma_2D_FC_TCDM/idma_2D_FC_TCDM.c @@ -0,0 +1,160 @@ +#include +#include +#include +#include "pulp.h" + +#define VERBOSE + +#define MAX_BUFFER_SIZE 0x2000 + +L2_DATA static uint8_t ext[MAX_BUFFER_SIZE]; +L1_DATA static uint8_t loc[MAX_BUFFER_SIZE]; + +// Transfer types +typedef enum {L2_TO_L1, L1_TO_L2} test_type_t; + +#ifdef VERBOSE +static void print_memory(uint8_t *mem, unsigned int size, const char *name) { + printf("Memory dump of %s:\n", name); + for (unsigned int i = 0; i < size; i++) { + printf("0x%02X ", mem[i]); + if ((i + 1) % 16 == 0) { + printf("\n"); + } + } + printf("\n"); +} +#endif + +int test_idma_2D(uint32_t size, test_type_t type, uint32_t ext_addr, uint32_t tcdm_addr, + unsigned int length, unsigned int src_stride, unsigned int dst_stride, unsigned int num_reps); + +int main(void) { + if (rt_cluster_id() != 0) { + return bench_cluster_forward(0); + } + + int error_count = 0; + + if (get_core_id() == 0) { + + // Number of test cases + unsigned int cases = 4; + + // Total number of bytes (for initialization of the values in memory) + unsigned int sizes[] = {16, 64, 256, 1024}; + // unsigned int size = 16; + + // Number of bytes to transfer per 1D transaction + unsigned int lengths[] = {4, 8, 16, 64}; + // unsigned int length = 2; + + // Number of repetitions of 1D transactions + unsigned int num_reps[] = {4, 8, 16, 16}; + // unsigned int num_reps = 4; + + // Number of strides in source memory + unsigned int src_strides[] = {4, 8, 24, 56}; + // unsigned int src_stride = 4; + + // Number of strides in destination memory + unsigned int dst_strides[] = {4, 12, 24, 64}; + // unsigned int dst_stride = 3; + + for (unsigned int i = 0; i < cases; i++) { + error_count += test_idma_2D(sizes[i], L2_TO_L1, (uint32_t)ext, (uint32_t)loc, + lengths[i], src_strides[i], dst_strides[i], num_reps[i]); + } + + for (unsigned int i = 0; i < cases; i++) { + error_count += test_idma_2D(sizes[i], L1_TO_L2, (uint32_t)ext, (uint32_t)loc, + lengths[i], src_strides[i], dst_strides[i], num_reps[i]); + } + } + + return error_count; +} + +int test_idma_2D(uint32_t size, test_type_t type, uint32_t ext_addr, uint32_t tcdm_addr, + unsigned int length, unsigned int src_stride, unsigned int dst_stride, unsigned int num_reps) { + volatile uint8_t expected, actual; + volatile int error = 0; + volatile unsigned int id; + + if (type == L2_TO_L1) { + + for (uint32_t i = 0; i < size; i++) { + *(uint8_t *)(ext_addr + i) = (uint8_t)(i & 0xFF); + } + +// #ifdef VERBOSE +// // Initialized memory +// print_memory((uint8_t *)ext_addr, size, "L2 (Source)"); +// #endif + memset((void *)tcdm_addr, 0, size + 16); + + id = pulp_cl_idma_L2ToL1_2d(ext_addr, tcdm_addr, length, src_stride, dst_stride, num_reps); + + } else if (type == L1_TO_L2) { + + for (uint32_t i = 0; i < size; i++) { + *(uint8_t *)(tcdm_addr + i) = (uint8_t)(i & 0xFF); + } + +// #ifdef VERBOSE +// // Initialized memory +// print_memory((uint8_t *)tcdm_addr, size, "L1 (Source)"); +// #endif + + memset((void *)ext_addr, 0, size + 16); + + id = pulp_cl_idma_L1ToL2_2d(tcdm_addr, ext_addr, length, src_stride, dst_stride, num_reps); + } else { + printf("Invalid test type. It must be either L2_TO_L1 or L1_TO_L2.\n"); + return 1; + } + + // Wait for DMA transfer to complete + plp_dma_barrier(); + + // Verify data + if (type == L2_TO_L1) { + // Verify data transferred from L2 to L1 + for (unsigned int rep = 0; rep < num_reps; rep++) { + unsigned int src_offset = rep * src_stride; + unsigned int dst_offset = rep * dst_stride; + for (unsigned int i = 0; i < length; i++) { + expected = *(uint8_t *)(ext_addr + src_offset + i); + actual = *(uint8_t *)(tcdm_addr + dst_offset + i); + if (expected != actual) { + printf("Error at L1 address 0x%08X: Expected 0x%02X, Got 0x%02X\n", + tcdm_addr + dst_offset + i, expected, actual); + error++; + } + } + } + } else if (type == L1_TO_L2) { + // Verify data transferred from L1 to L2 + for (unsigned int rep = 0; rep < num_reps; rep++) { + unsigned int src_offset = rep * src_stride; + unsigned int dst_offset = rep * dst_stride; + for (unsigned int i = 0; i < length; i++) { + expected = *(uint8_t *)(tcdm_addr + src_offset + i); + actual = *(uint8_t *)(ext_addr + dst_offset + i); + if (expected != actual) { + printf("Error at L2 address 0x%08X: Expected 0x%02X, Got 0x%02X\n", + ext_addr + dst_offset + i, expected, actual); + error++; + } + } + } + } + + if (error == 0) { + printf("Test passed for %s transfer.\n", type == L2_TO_L1 ? "L2_TO_L1" : "L1_TO_L2"); + } else { + printf("Test failed for %s transfer with %d errors.\n", type == L2_TO_L1 ? "L2_TO_L1" : "L1_TO_L2", error); + } + + return error; +} From 9ead1c0f6197e79d731749789f381ad83c7d81a2 Mon Sep 17 00:00:00 2001 From: Daniel Keller Date: Mon, 4 Nov 2024 10:58:34 +0100 Subject: [PATCH 60/71] [optimization] Simplified memory access using direct pointers and array indexing --- idma_tests/idma_2D_FC_TCDM/idma_2D_FC_TCDM.c | 119 +++++-------------- 1 file changed, 29 insertions(+), 90 deletions(-) diff --git a/idma_tests/idma_2D_FC_TCDM/idma_2D_FC_TCDM.c b/idma_tests/idma_2D_FC_TCDM/idma_2D_FC_TCDM.c index 9f1fcb5..52ca92b 100644 --- a/idma_tests/idma_2D_FC_TCDM/idma_2D_FC_TCDM.c +++ b/idma_tests/idma_2D_FC_TCDM/idma_2D_FC_TCDM.c @@ -3,7 +3,7 @@ #include #include "pulp.h" -#define VERBOSE +// #define VERBOSE #define MAX_BUFFER_SIZE 0x2000 @@ -37,36 +37,18 @@ int main(void) { int error_count = 0; if (get_core_id() == 0) { - - // Number of test cases - unsigned int cases = 4; + unsigned int sizes[] = {16, 64, 256, 1024}; // Total number of bytes (for initialization of the values in memory) + unsigned int lengths[] = {4, 8, 16, 64}; // Number of bytes to transfer per 1D transaction + unsigned int num_reps[] = {4, 8, 16, 16}; // Number of repetitions of 1D transactions + unsigned int src_strides[] = {4, 8, 24, 56}; // Number of strides in source memory + unsigned int dst_strides[] = {4, 12, 24, 64}; // Number of strides in destination memory - // Total number of bytes (for initialization of the values in memory) - unsigned int sizes[] = {16, 64, 256, 1024}; - // unsigned int size = 16; - - // Number of bytes to transfer per 1D transaction - unsigned int lengths[] = {4, 8, 16, 64}; - // unsigned int length = 2; - - // Number of repetitions of 1D transactions - unsigned int num_reps[] = {4, 8, 16, 16}; - // unsigned int num_reps = 4; - - // Number of strides in source memory - unsigned int src_strides[] = {4, 8, 24, 56}; - // unsigned int src_stride = 4; - - // Number of strides in destination memory - unsigned int dst_strides[] = {4, 12, 24, 64}; - // unsigned int dst_stride = 3; - - for (unsigned int i = 0; i < cases; i++) { + for (unsigned int i = 0; i < 4; i++) { error_count += test_idma_2D(sizes[i], L2_TO_L1, (uint32_t)ext, (uint32_t)loc, lengths[i], src_strides[i], dst_strides[i], num_reps[i]); } - for (unsigned int i = 0; i < cases; i++) { + for (unsigned int i = 0; i < 4; i++) { error_count += test_idma_2D(sizes[i], L1_TO_L2, (uint32_t)ext, (uint32_t)loc, lengths[i], src_strides[i], dst_strides[i], num_reps[i]); } @@ -77,84 +59,41 @@ int main(void) { int test_idma_2D(uint32_t size, test_type_t type, uint32_t ext_addr, uint32_t tcdm_addr, unsigned int length, unsigned int src_stride, unsigned int dst_stride, unsigned int num_reps) { - volatile uint8_t expected, actual; + volatile uint8_t *src_ptr, *dst_ptr; volatile int error = 0; volatile unsigned int id; if (type == L2_TO_L1) { - - for (uint32_t i = 0; i < size; i++) { - *(uint8_t *)(ext_addr + i) = (uint8_t)(i & 0xFF); - } - -// #ifdef VERBOSE -// // Initialized memory -// print_memory((uint8_t *)ext_addr, size, "L2 (Source)"); -// #endif - memset((void *)tcdm_addr, 0, size + 16); - - id = pulp_cl_idma_L2ToL1_2d(ext_addr, tcdm_addr, length, src_stride, dst_stride, num_reps); - - } else if (type == L1_TO_L2) { - - for (uint32_t i = 0; i < size; i++) { - *(uint8_t *)(tcdm_addr + i) = (uint8_t)(i & 0xFF); - } - -// #ifdef VERBOSE -// // Initialized memory -// print_memory((uint8_t *)tcdm_addr, size, "L1 (Source)"); -// #endif - - memset((void *)ext_addr, 0, size + 16); - - id = pulp_cl_idma_L1ToL2_2d(tcdm_addr, ext_addr, length, src_stride, dst_stride, num_reps); + src_ptr = (uint8_t *)ext_addr; + dst_ptr = (uint8_t *)tcdm_addr; + for (uint32_t i = 0; i < size; i++) src_ptr[i] = (uint8_t)(i & 0xFF); + id = pulp_cl_idma_L2ToL1_2d((unsigned int)src_ptr, (unsigned int)dst_ptr, length, src_stride, dst_stride, num_reps); } else { - printf("Invalid test type. It must be either L2_TO_L1 or L1_TO_L2.\n"); - return 1; + src_ptr = (uint8_t *)tcdm_addr; + dst_ptr = (uint8_t *)ext_addr; + for (uint32_t i = 0; i < size; i++) src_ptr[i] = (uint8_t)(i & 0xFF); + id = pulp_cl_idma_L1ToL2_2d((unsigned int)src_ptr, (unsigned int)dst_ptr, length, src_stride, dst_stride, num_reps); } - // Wait for DMA transfer to complete plp_dma_barrier(); - // Verify data - if (type == L2_TO_L1) { - // Verify data transferred from L2 to L1 - for (unsigned int rep = 0; rep < num_reps; rep++) { - unsigned int src_offset = rep * src_stride; - unsigned int dst_offset = rep * dst_stride; - for (unsigned int i = 0; i < length; i++) { - expected = *(uint8_t *)(ext_addr + src_offset + i); - actual = *(uint8_t *)(tcdm_addr + dst_offset + i); - if (expected != actual) { - printf("Error at L1 address 0x%08X: Expected 0x%02X, Got 0x%02X\n", - tcdm_addr + dst_offset + i, expected, actual); - error++; - } - } - } - } else if (type == L1_TO_L2) { - // Verify data transferred from L1 to L2 - for (unsigned int rep = 0; rep < num_reps; rep++) { - unsigned int src_offset = rep * src_stride; - unsigned int dst_offset = rep * dst_stride; - for (unsigned int i = 0; i < length; i++) { - expected = *(uint8_t *)(tcdm_addr + src_offset + i); - actual = *(uint8_t *)(ext_addr + dst_offset + i); - if (expected != actual) { - printf("Error at L2 address 0x%08X: Expected 0x%02X, Got 0x%02X\n", - ext_addr + dst_offset + i, expected, actual); - error++; - } - } + for (unsigned int rep = 0; rep < num_reps; rep++) { + unsigned int src_offset = rep * src_stride; + unsigned int dst_offset = rep * dst_stride; + for (unsigned int i = 0; i < length; i++) { + uint8_t expected = src_ptr[src_offset + i]; + uint8_t actual = dst_ptr[dst_offset + i]; + if (expected != actual) error++; } } +#ifdef VERBOSE if (error == 0) { - printf("Test passed for %s transfer.\n", type == L2_TO_L1 ? "L2_TO_L1" : "L1_TO_L2"); + printf("Test passed for %s with size %d, length %d, src_stride %d, dst_stride %d, num_reps %d\n", type == L2_TO_L1 ? "L2_TO_L1" : "L1_TO_L2", size, length, src_stride, dst_stride, num_reps); } else { - printf("Test failed for %s transfer with %d errors.\n", type == L2_TO_L1 ? "L2_TO_L1" : "L1_TO_L2", error); + printf("Test failed for %s with size %d, length %d, src_stride %d, dst_stride %d, num_reps %d\n", type == L2_TO_L1 ? "L2_TO_L1" : "L1_TO_L2", size, length, src_stride, dst_stride, num_reps); } +#endif return error; -} +} \ No newline at end of file From dc4fcaefd88b22810bce0aea68188719107dfb56 Mon Sep 17 00:00:00 2001 From: Daniel Keller Date: Mon, 3 Feb 2025 09:33:41 +0100 Subject: [PATCH 61/71] [new] 3D transfers regresion test, change mem initialisation --- idma_tests/idma_3D_FC_TCDM/Makefile | 22 ++++ idma_tests/idma_3D_FC_TCDM/idma_3D_FC_TCDM.c | 108 ++++++++++++++++++ .../idma_basic_FC_TCDM/idma_basic_FC_TCDM.c | 6 +- 3 files changed, 135 insertions(+), 1 deletion(-) create mode 100755 idma_tests/idma_3D_FC_TCDM/Makefile create mode 100644 idma_tests/idma_3D_FC_TCDM/idma_3D_FC_TCDM.c diff --git a/idma_tests/idma_3D_FC_TCDM/Makefile b/idma_tests/idma_3D_FC_TCDM/Makefile new file mode 100755 index 0000000..02ba50d --- /dev/null +++ b/idma_tests/idma_3D_FC_TCDM/Makefile @@ -0,0 +1,22 @@ +PULP_APP = test + +TEST_SRCS ?= idma_3D_FC_TCDM.c +PULP_APP_SRCS = $(TEST_SRCS) +PULP_APP_FC_SRCS = $(TEST_FC_SRCS) +ifdef TEST_FC_SRCS +pulpFc=1 +endif + +space := +space += + +#BUILD_DIR = $(subst $(space),_,$(CURDIR)/build/$(TEST_SRCS)) + +ifdef VERBOSE +PULP_CFLAGS += -DVERBOSE +endif + +PULP_CFLAGS += -O3 +stackSize = 4096 + +include $(PULP_SDK_HOME)/install/rules/pulp.mk diff --git a/idma_tests/idma_3D_FC_TCDM/idma_3D_FC_TCDM.c b/idma_tests/idma_3D_FC_TCDM/idma_3D_FC_TCDM.c new file mode 100644 index 0000000..282e982 --- /dev/null +++ b/idma_tests/idma_3D_FC_TCDM/idma_3D_FC_TCDM.c @@ -0,0 +1,108 @@ +#include +#include +#include +#include "pulp.h" + +// #define VERBOSE + +#define MAX_BUFFER_SIZE 0x2000 + +L2_DATA static uint8_t ext[MAX_BUFFER_SIZE]; +L1_DATA static uint8_t loc[MAX_BUFFER_SIZE]; + +// Transfer types +typedef enum {L2_TO_L1, L1_TO_L2} test_type_t; + +#ifdef VERBOSE +static void print_memory(uint8_t *mem, unsigned int size, const char *name) { + printf("Memory dump of %s:\n", name); + for (unsigned int i = 0; i < size; i++) { + printf("0x%02X ", mem[i]); + if ((i + 1) % 16 == 0) { + printf("\n"); + } + } + printf("\n"); +} +#endif + +int test_idma_2D(uint32_t size, test_type_t type, uint32_t ext_addr, uint32_t tcdm_addr, + unsigned int length, unsigned int src_stride, unsigned int dst_stride, unsigned int num_reps); + +int main(void) { + if (rt_cluster_id() != 0) { + return bench_cluster_forward(0); + } + + int error_count = 0; + + if (get_core_id() == 0) { + unsigned int sizes[] = {16, 64, 256, 1024}; // Total number of bytes (for initialization of the values in memory) + unsigned int lengths[] = {4, 8, 16, 64}; // Number of bytes to transfer per 1D transaction + unsigned int num_reps[] = {4, 8, 16, 16}; // Number of repetitions of 1D transactions + unsigned int src_strides[] = {4, 8, 24, 56}; // Number of strides in source memory + unsigned int dst_strides[] = {5, 12, 24, 64}; // Number of strides in destination memory + + for (unsigned int i = 0; i < 4; i++) { + error_count += test_idma_2D(sizes[i], L2_TO_L1, (uint32_t)ext, (uint32_t)loc, + lengths[i], src_strides[i], dst_strides[i], num_reps[i]); + } + + for (unsigned int i = 0; i < 4; i++) { + error_count += test_idma_2D(sizes[i], L1_TO_L2, (uint32_t)ext, (uint32_t)loc, + lengths[i], src_strides[i], dst_strides[i], num_reps[i]); + } + } + + return error_count; +} + +int test_idma_2D(uint32_t size, test_type_t type, uint32_t ext_addr, uint32_t tcdm_addr, + unsigned int length, unsigned int src_stride, unsigned int dst_stride, unsigned int num_reps) { + volatile uint8_t *src_ptr, *dst_ptr; + struct dma_id id; + volatile int error = 0; + + if (type == L2_TO_L1) { + src_ptr = (uint8_t *)ext_addr; + dst_ptr = (uint8_t *)tcdm_addr; + for (uint32_t i = 0; i < size; i++) src_ptr[i] = (uint8_t)(i & 0xFF); + id = pulp_cl_idma_L2ToL1_3d((unsigned int)src_ptr, (unsigned int)dst_ptr, length, src_stride, dst_stride, num_reps); + } else if (type == L1_TO_L2) { + src_ptr = (uint8_t *)tcdm_addr; + dst_ptr = (uint8_t *)ext_addr; + for (uint32_t i = 0; i < size; i++) src_ptr[i] = (uint8_t)(i & 0xFF); + id = pulp_cl_idma_L1ToL2_3d((unsigned int)src_ptr, (unsigned int)dst_ptr, length, src_stride, dst_stride, num_reps); + } + +#ifdef VERBOSE + printf("DMA status (before barrier): %d\n", plp_cl_dma_status(id)); +#endif + plp_dma_barrier(id); + // plp_dma_wait(id); +#ifdef VERBOSE + printf("DMA status (after barrier): %d\n", plp_cl_dma_status(id)); + print_memory((uint8_t *)ext_addr, size, "ext"); + print_memory((uint8_t *)tcdm_addr, size, "loc"); +#endif + + for (unsigned int rep = 0; rep < num_reps; rep++) { + unsigned int src_offset = rep * src_stride; + unsigned int dst_offset = rep * dst_stride; + for (unsigned int i = 0; i < length; i++) { + uint8_t expected = src_ptr[src_offset + i]; + uint8_t actual = dst_ptr[dst_offset + i]; + if (expected != actual) error++; + } + } + +#ifdef VERBOSE + if (error == 0) { + printf("Test passed for %s with size %d, length %d, src_stride %d, dst_stride %d, num_reps %d\n", type == L2_TO_L1 ? "L2_TO_L1" : "L1_TO_L2", size, length, src_stride, dst_stride, num_reps); + } else { + printf("Test failed for %s with size %d, length %d, src_stride %d, dst_stride %d, num_reps %d\n", type == L2_TO_L1 ? "L2_TO_L1" : "L1_TO_L2", size, length, src_stride, dst_stride, num_reps); + } +#endif + + return error; +} \ No newline at end of file diff --git a/idma_tests/idma_basic_FC_TCDM/idma_basic_FC_TCDM.c b/idma_tests/idma_basic_FC_TCDM/idma_basic_FC_TCDM.c index efbaf07..7fdde77 100644 --- a/idma_tests/idma_basic_FC_TCDM/idma_basic_FC_TCDM.c +++ b/idma_tests/idma_basic_FC_TCDM/idma_basic_FC_TCDM.c @@ -51,7 +51,11 @@ int test_idma(uint32_t size, test_type_t type, uint32_t ext_addr, uint32_t tcdm_ *(uint8_t *)(ext_addr + i) = (uint8_t)(i & 0xFF); } - memset((void *)tcdm_addr, 0, size + 16); + for (i = 0; i < size; i++) { + *(uint8_t *)(tcdm_addr + i) = 0; + } + + // memset((void *)tcdm_addr, 0, size + 16); id = pulp_idma_memcpy(ext_addr, tcdm_addr, size, IDMA_PROT_AXI, IDMA_PROT_OBI); From b3e132cc8b0dc8654c32dc306ffcc888a0197b10 Mon Sep 17 00:00:00 2001 From: Riccardo Gandolfi Date: Fri, 30 May 2025 11:29:34 +0200 Subject: [PATCH 62/71] Updated Readme + changes in 1d stimuli generator --- idma_tests/README.md | 18 ++++++++ .../idma_multi_core/gen_stimuli_idma.py | 41 +++++++++++++++++++ idma_tests/idma_multi_core/idma_defines.h | 2 + idma_tests/idma_multi_core/transfer_sizes.h | 8 ++++ 4 files changed, 69 insertions(+) create mode 100644 idma_tests/README.md create mode 100644 idma_tests/idma_multi_core/gen_stimuli_idma.py create mode 100644 idma_tests/idma_multi_core/idma_defines.h create mode 100644 idma_tests/idma_multi_core/transfer_sizes.h diff --git a/idma_tests/README.md b/idma_tests/README.md new file mode 100644 index 0000000..2b0da1c --- /dev/null +++ b/idma_tests/README.md @@ -0,0 +1,18 @@ +## IDMA Tests + +This folder contains basic tests for the iDMA IP. +Currently, the following are supported: +- **1D transfers** +- **2D transfers** +- **3D transfers** + +To launch each test: +1. Move into the related folder. +2. Launch the following: + 1. `make stimuli` : this will generate the randomized stimuli for the test. The randomized stimuli consist of transfer sizes, number of transfers to be executed, n-dimensional strides, etc ... + 2. `make all` : this will compile the C code. Few choices are available: + - **Single Core mode**: no flags are needed. All transfers specified in the stimuli will be executed by Core 0 only. + - **Sequential Multi-Core Mode**: specify **MULTI_CORE_S=1** in the command line when compiling the code. In this mode, all cores will execute the transfers specified in the stimuli in a sequential manner. + - **Parallel Multi-Core Mode**: specify **MULTI_CORE_P=1** in the command line when compiling the code. In this mode, all cores will execute the transfers specified in the stimulin in a parallel manner. + 3. `make run` : this will launch the simulation in bash mode (use gui=1 for Modelsim gui). +4. All transfers will be executed in the three different directions that are currently supported: **L1->L2, L2->L1, L1->L1**. diff --git a/idma_tests/idma_multi_core/gen_stimuli_idma.py b/idma_tests/idma_multi_core/gen_stimuli_idma.py new file mode 100644 index 0000000..8346165 --- /dev/null +++ b/idma_tests/idma_multi_core/gen_stimuli_idma.py @@ -0,0 +1,41 @@ +#!/usr/bin/env python + +import sys +import random +import argparse +import math +import re + + +parser = argparse.ArgumentParser(description='Generate stimuli for iDMA simple transfer') + +args = parser.parse_args() + +def write_transfer_sizes_array(f, name, arr): + f.write ('unsigned int %s[] = {\n' % name) + for v in arr: + random_int = random.randint(1, MAX_SIZE) + f.write('%d, \n' % random_int) + f.write('};\n\n') + return + +def write_define(f, name,val): + f.write('#define %s %d\n\n' % (name,val)) + return + +# Randomize between 1 and 50 the number of simple iDMA transfers to be performed +# For each transfer we set a size in bytes (the number of 32-bits elements that +# will be moved is size / sizeof(uint32_t)). + +NB_TRANSFERS = random.randint(1, 10) + +# Randomize between 1 and 500 the size of each transfer + +MAX_SIZE = 1024 +sizes = [None] * NB_TRANSFERS + +f_sizes = open('transfer_sizes.h', 'w') +f_defines = open ('idma_defines.h', 'w') + +write_transfer_sizes_array(f_sizes, 'sizes', sizes) +write_define(f_defines, 'NB_TRANSFERS', NB_TRANSFERS) \ No newline at end of file diff --git a/idma_tests/idma_multi_core/idma_defines.h b/idma_tests/idma_multi_core/idma_defines.h new file mode 100644 index 0000000..5deb06f --- /dev/null +++ b/idma_tests/idma_multi_core/idma_defines.h @@ -0,0 +1,2 @@ +#define NB_TRANSFERS 5 + diff --git a/idma_tests/idma_multi_core/transfer_sizes.h b/idma_tests/idma_multi_core/transfer_sizes.h new file mode 100644 index 0000000..770b71b --- /dev/null +++ b/idma_tests/idma_multi_core/transfer_sizes.h @@ -0,0 +1,8 @@ +unsigned int sizes[] = { +493, +430, +52, +67, +112, +}; + From 3baf986b9df4e0b004ac67f382c65778eabffdd2 Mon Sep 17 00:00:00 2001 From: Riccardo Gandolfi Date: Tue, 3 Jun 2025 09:51:19 +0200 Subject: [PATCH 63/71] cherry-pick multi core tests --- idma_tests/idma_multi_core/Makefile | 27 +++ idma_tests/idma_multi_core/idma_multi_core.c | 148 ++++++++++++ idma_tests/idma_multi_core/idma_multi_core.h | 39 ++++ idma_tests/idma_multi_core_2d/Makefile | 23 ++ .../idma_multi_core_2d/gen_stimuli_idma_2d.py | 62 +++++ idma_tests/idma_multi_core_2d/idma_defines.h | 2 + .../idma_multi_core_2d/idma_multi_core_2d.c | 173 ++++++++++++++ .../idma_multi_core_2d/idma_multi_core_2d.h | 39 ++++ .../idma_multi_core_2d/idma_parameters.h | 16 ++ idma_tests/idma_multi_core_3d/Makefile | 23 ++ idma_tests/idma_multi_core_3d/idma_defines.h | 1 + .../idma_multi_core_3d/idma_multi_core_3d.c | 214 ++++++++++++++++++ .../idma_multi_core_3d/idma_multi_core_3d.h | 39 ++++ .../idma_multi_core_3d/idma_parameters.h | 21 ++ 14 files changed, 827 insertions(+) create mode 100644 idma_tests/idma_multi_core/Makefile create mode 100644 idma_tests/idma_multi_core/idma_multi_core.c create mode 100644 idma_tests/idma_multi_core/idma_multi_core.h create mode 100644 idma_tests/idma_multi_core_2d/Makefile create mode 100644 idma_tests/idma_multi_core_2d/gen_stimuli_idma_2d.py create mode 100644 idma_tests/idma_multi_core_2d/idma_defines.h create mode 100644 idma_tests/idma_multi_core_2d/idma_multi_core_2d.c create mode 100644 idma_tests/idma_multi_core_2d/idma_multi_core_2d.h create mode 100644 idma_tests/idma_multi_core_2d/idma_parameters.h create mode 100644 idma_tests/idma_multi_core_3d/Makefile create mode 100644 idma_tests/idma_multi_core_3d/idma_defines.h create mode 100644 idma_tests/idma_multi_core_3d/idma_multi_core_3d.c create mode 100644 idma_tests/idma_multi_core_3d/idma_multi_core_3d.h create mode 100644 idma_tests/idma_multi_core_3d/idma_parameters.h diff --git a/idma_tests/idma_multi_core/Makefile b/idma_tests/idma_multi_core/Makefile new file mode 100644 index 0000000..4f44e3c --- /dev/null +++ b/idma_tests/idma_multi_core/Makefile @@ -0,0 +1,27 @@ +PULP_APP = test +TEST_SRCS ?= idma_multi_core.c +PULP_APP_SRCS = $(TEST_SRCS) + +ifdef VERBOSE +PULP_CFLAGS += -DVERBOSE +endif + +ifdef MULTI_CORE_P +PULP_CFLAGS += -DMULTI_CORE_P +endif + +ifdef MULTI_CORE_S +PULP_CFLAGS += -DMULTI_CORE_S +endif + +ifdef SINGLE_CORE +PULP_CFLAGS += -DSINGLE_CORE +endif + +PULP_CFLAGS += -O3 +stackSize = 4096 + +include $(PULP_SDK_HOME)/install/rules/pulp.mk + +stimuli: + python gen_stimuli_idma.py diff --git a/idma_tests/idma_multi_core/idma_multi_core.c b/idma_tests/idma_multi_core/idma_multi_core.c new file mode 100644 index 0000000..12c9c09 --- /dev/null +++ b/idma_tests/idma_multi_core/idma_multi_core.c @@ -0,0 +1,148 @@ +#include "idma_multi_core.h" + +#define MAX_BUFFER_SIZE 0x1000 +#define CORE_SPACE 0x1000 + +L2_DATA static uint8_t ext[MAX_BUFFER_SIZE]; +L1_DATA static uint8_t loc[MAX_BUFFER_SIZE]; +L1_DATA static uint8_t loc_dst[MAX_BUFFER_SIZE]; + +int errors[8] = {0}; +int test_status = 0; + +int test_idma_1D (int core_id, uint32_t size, int ext2loc, int loc2loc, uint32_t ext_addr, uint32_t tcdm_addr) { + volatile uint8_t *src_ptr, *dst_ptr; + + int error = 0; + + if (loc2loc == 1) { + // L1 to L1 transfer + src_ptr = (uint8_t*) tcdm_addr; + dst_ptr = (uint8_t*) ext_addr; + + // Fill source region with test data + for (int i = 0; i < size; i++) { + src_ptr[i] = (uint8_t)(i & 0xFF); + } + + plp_cl_dma_wait_toL1(pulp_cl_idma_L1ToL1((unsigned int) src_ptr, (unsigned int) dst_ptr, size)); + } else { + if (ext2loc == 1) { + // L2 to L1 transfer + src_ptr = (uint8_t*) ext_addr; + dst_ptr = (uint8_t*) tcdm_addr; + + // Fill source region with test data + for (int i = 0; i < size; i++) { + src_ptr[i] = (uint8_t)(i & 0xFF); + } + + plp_cl_dma_wait_toL1(pulp_cl_idma_L2ToL1((unsigned int) src_ptr, (unsigned int) dst_ptr, size)); + } else { + // L1 to L2 transfer + src_ptr = (uint8_t*) tcdm_addr; + dst_ptr = (uint8_t*) ext_addr; + + // Fill source region with test data + for (int i = 0; i < size; i++) { + src_ptr[i] = (uint8_t)(i & 0xFF); + } + + plp_cl_dma_wait_toL2(pulp_cl_idma_L1ToL2((unsigned int) src_ptr, (unsigned int) dst_ptr, size)); + } + } + + // Check the results + + for (int i=0; i < size; i++) { + uint8_t expected = src_ptr[i]; + uint8_t actual = dst_ptr[i]; + + if (expected != actual) { + error++; + if (core_id == 0) { + PRINTF ("Error: expected @%8x = %8x vs actual @%8x = %8x \n", expected, &src_ptr[i], actual, &dst_ptr[i]); + } + } + } + + return error; +} + +int main () { + int core_id = rt_core_id(); + + unsigned int size; + uint32_t ext_addr; + uint32_t loc_addr; + uint32_t loc_dst_addr; + + ext_addr = (uint32_t) ext + core_id * CORE_SPACE; + loc_addr = (uint32_t) loc + core_id * CORE_SPACE; + loc_dst_addr = (uint32_t) loc_dst + core_id * CORE_SPACE; + + if (core_id == 0) { + PRINTF ("L1 addr: %8x | L1 dst addr: %8x | L2 addr: %8x \n", loc_addr, loc_dst_addr, ext_addr); + } + + #ifdef MULTI_CORE_P + // MULTI CORE PARALLEL MODE: each core uses the iDMA in a parallel manner + if (core_id == 0) { + PRINTF ("MULTI CORE PARALLEL MODE \n"); + } + for (int k = 0; k < NB_TRANSFERS; k++) { + size = sizes[k]; + if (core_id == 0) { + PRINTF ("Transfer: %d | Size: %8x \n", k, size); + } + // Each core tests in a direction + L1 <-> L1 + errors[core_id] += test_idma_1D(core_id, size, (core_id % 2), 0, ext_addr, loc_addr); + errors[core_id] += test_idma_1D(core_id, size, 0, 1, loc_dst_addr, loc_addr); + synch_barrier(); + } + #elif MULTI_CORE_S + // MULTI CORE SERIAL MODE: each core uses the iDMA in a serial manner + if (core_id == 0) { + PRINTF ("MULTI CORE SERIAL MODE \n"); + } + for (int i = 0; i < 8; i++) { + if (core_id == i) { + for (int k = 0; k < NB_TRANSFERS; k++) { + size = sizes[k]; + if (core_id == 0) { + PRINTF ("Transfer: %d | Size: %8x \n", k, size); + } + // Each core tests in a direction + L1 <-> L1 + errors[core_id] += test_idma_1D(core_id, size, (core_id% 2), 0, ext_addr, loc_addr); + errors[core_id] += test_idma_1D(core_id, size, 0, 1, loc_dst_addr, loc_addr); + } + } + } + #else + if (core_id == 0) { + // SINGLE CORE MODE: just core 0 uses the iDMA + PRINTF ("Just using Core 0 \n"); + for (int k = 0; k < NB_TRANSFERS; k++) { + size = sizes[k]; + PRINTF ("Transfer: %d | Size: %8x \n", k, size); + PRINTF ("L1 to L2 \n"); + errors[core_id] += test_idma_1D(core_id, size, 0, 0, ext_addr, loc_addr); + PRINTF ("L2 to L1 \n"); + errors[core_id] += test_idma_1D(core_id, size, 1, 0, ext_addr, loc_addr); + PRINTF ("L1 to L1 \n"); + errors[core_id] += test_idma_1D(core_id, size, 0, 1, loc_dst_addr, loc_addr); + } + } + #endif + + if (core_id == 0) { + for (int i = 0; i<8; i++) { + if (errors[i] !=0) { + PRINTF ("Core %d returned %d errors \n", i, errors[i]); + test_status = 1; + } + } + } + + return test_status; +} diff --git a/idma_tests/idma_multi_core/idma_multi_core.h b/idma_tests/idma_multi_core/idma_multi_core.h new file mode 100644 index 0000000..64526cd --- /dev/null +++ b/idma_tests/idma_multi_core/idma_multi_core.h @@ -0,0 +1,39 @@ +// Copyright 2022 ETH Zurich and University of Bologna. +// Solderpad Hardware License, Version 0.51, see LICENSE for details. +// SPDX-License-Identifier: SHL-0.51 +// +//Author: Andreas Kuster +// +//Description: Generated register defines for dma_frontend + +#include "pulp.h" +#include +#include +#include +#include +#include + +#include "idma_defines.h" +#include "transfer_sizes.h" + +#ifndef _DMA_FRONTEND_REG_DEFS_ +#define _DMA_FRONTEND_REG_DEFS_ + +#ifdef __cplusplus +extern "C" { +#endif + +#define DMA_CONF_DECOUPLE 0 +#define DMA_CONF_DEBURST 0 +#define DMA_CONF_SERIALIZE 0 + +#if VERBOSE + #define PRINTF(...) printf(__VA_ARGS__) +#else + #define PRINTF(...) +#endif + +#ifdef __cplusplus +} // extern "C" +#endif +#endif // _DMA_FRONTEND_REG_DEFS_ diff --git a/idma_tests/idma_multi_core_2d/Makefile b/idma_tests/idma_multi_core_2d/Makefile new file mode 100644 index 0000000..7e95656 --- /dev/null +++ b/idma_tests/idma_multi_core_2d/Makefile @@ -0,0 +1,23 @@ +PULP_APP = test +TEST_SRCS ?= idma_multi_core_2d.c +PULP_APP_SRCS = $(TEST_SRCS) + +ifdef VERBOSE +PULP_CFLAGS += -DVERBOSE +endif + +ifdef MULTI_CORE_P +PULP_CFLAGS += -DMULTI_CORE_P +endif + +ifdef MULTI_CORE_S +PULP_CFLAGS += -DMULTI_CORE_S +endif + +PULP_CFLAGS += -O3 +stackSize = 4096 + +include $(PULP_SDK_HOME)/install/rules/pulp.mk + +stimuli: + python gen_stimuli_idma_2d.py \ No newline at end of file diff --git a/idma_tests/idma_multi_core_2d/gen_stimuli_idma_2d.py b/idma_tests/idma_multi_core_2d/gen_stimuli_idma_2d.py new file mode 100644 index 0000000..75619f9 --- /dev/null +++ b/idma_tests/idma_multi_core_2d/gen_stimuli_idma_2d.py @@ -0,0 +1,62 @@ +#!/usr/bin/env python + +import sys +import random +import argparse +import math +import re + + +parser = argparse.ArgumentParser(description='Generate stimuli for iDMA simple transfer') + +args = parser.parse_args() + +def write_transfer_parameters_struct(f, name): + f.write ('typedef struct {\n') + f.write (' unsigned int size;\n') + f.write (' unsigned int length;\n') + f.write (' unsigned int src_stride;\n') + f.write (' unsigned int dst_stride;\n') + f.write ('} %s;\n\n' % name) + return + +def write_transfer_parameters_array(f, name, arr): + f.write ('TransferParameters %s[] = {\n' % name) + for v in arr: + size = random.randint(1, MAX_SIZE) + length = random.randint(1, MAX_LENGTH) + src_stride = random.randint(1, MAX_STRIDE) + # Computing dst_stride as random + length so that we do not overwrite data + # when iDMA is executing + dst_stride = random.randint(1, MAX_STRIDE)+length + f.write('{%d, %d, %d, %d},\n' % (size, length, src_stride, dst_stride)) + f.write('};\n\n') + return + +def write_define(f, name,val): + f.write('#define %s %d\n\n' % (name,val)) + return + +# Randomize between 1 and 50 the number of 2D iDMA transfers to be performed +# For each transfer we set a size in bytes (the number of 32-bits elements that +# will be moved is size / sizeof(uint32_t)). + +NB_TRANSFERS = random.randint(1, 10) + +# Randomize between 1 and 500 the size of each transfer + +MAX_SIZE = 100 +MAX_STRIDE = 24 +MAX_LENGTH = 16 + +transfer_params = [None] * NB_TRANSFERS + +f_params = open('idma_parameters.h', 'w') +f_defines = open('idma_defines.h', 'w') + +write_define(f_defines, 'NB_TRANSFERS', NB_TRANSFERS) +write_transfer_parameters_struct(f_params, 'TransferParameters') +write_transfer_parameters_array(f_params, 'transfer_params', transfer_params) + +f_params.close() +f_defines.close() \ No newline at end of file diff --git a/idma_tests/idma_multi_core_2d/idma_defines.h b/idma_tests/idma_multi_core_2d/idma_defines.h new file mode 100644 index 0000000..d3fd723 --- /dev/null +++ b/idma_tests/idma_multi_core_2d/idma_defines.h @@ -0,0 +1,2 @@ +#define NB_TRANSFERS 6 + diff --git a/idma_tests/idma_multi_core_2d/idma_multi_core_2d.c b/idma_tests/idma_multi_core_2d/idma_multi_core_2d.c new file mode 100644 index 0000000..fb963ca --- /dev/null +++ b/idma_tests/idma_multi_core_2d/idma_multi_core_2d.c @@ -0,0 +1,173 @@ +#include "idma_multi_core_2d.h" + +#define MAX_BUFFER_SIZE 0x2000 +#define CORE_SPACE 0x1000 + +L2_DATA static uint8_t ext[MAX_BUFFER_SIZE]; +L1_DATA static uint8_t loc[MAX_BUFFER_SIZE]; +L1_DATA static uint8_t loc_dst[MAX_BUFFER_SIZE]; + +int errors[8] = {0}; +int test_status = 0; + +int test_idma_2D (int core_id, uint32_t size, int ext2loc, int loc2loc, uint32_t ext_addr, uint32_t tcdm_addr, unsigned int length, unsigned int src_stride, unsigned int dst_stride, unsigned int num_reps) { + volatile uint8_t *src_ptr, *dst_ptr; + + int error = 0; + int offset_2d; + if (loc2loc == 1) { + // L1 to L1 transfer + src_ptr = (uint8_t*) tcdm_addr; + dst_ptr = (uint8_t*) ext_addr; + + // Fill source region with test data + offset_2d = 0; + for (int q = 0; q < num_reps; q++) { + for (int i = 0; i < length; i++) { + src_ptr[i+offset_2d] = (uint8_t)(i & 0xFF); + } + offset_2d += src_stride; + } + + plp_cl_dma_wait_toL1(pulp_cl_idma_L1ToL1_2d((unsigned int)src_ptr, (unsigned int)dst_ptr, length, src_stride, dst_stride, num_reps)); + } else { + if (ext2loc == 1) { + + // L2 to L1 transfer + src_ptr = (uint8_t*) ext_addr; + dst_ptr = (uint8_t*) tcdm_addr; + + // Fill source region with test data + offset_2d = 0; + for (int q = 0; q < num_reps; q++) { + for (int i = 0; i < length; i++) { + src_ptr[i+offset_2d] = (uint8_t)(i & 0xFF); + } + offset_2d += src_stride; + } + plp_cl_dma_wait_toL1(pulp_cl_idma_L2ToL1_2d((unsigned int)src_ptr, (unsigned int)dst_ptr, length, src_stride, dst_stride, num_reps)); + } else { + + // L1 to L2 transfer + src_ptr = (uint8_t*) tcdm_addr; + dst_ptr = (uint8_t*) ext_addr; + + // Fill source region with test data + offset_2d = 0; + for (int q = 0; q < num_reps; q++) { + for (int i = 0; i < length; i++) { + src_ptr[i+offset_2d] = (uint8_t)(i & 0xFF); + } + offset_2d += src_stride; + } + plp_cl_dma_wait_toL2(pulp_cl_idma_L1ToL2_2d((unsigned int)src_ptr, (unsigned int)dst_ptr, length, src_stride, dst_stride, num_reps)); + } + } + + // Check the results + + for (unsigned int rep = 0; rep < num_reps; rep++) { + unsigned int src_offset = rep * src_stride; + unsigned int dst_offset = rep * dst_stride; + for (unsigned int i = 0; i < length; i++) { + uint8_t expected = src_ptr[src_offset + i]; + uint8_t actual = dst_ptr[dst_offset + i]; + + if (expected != actual) { + error++; + if (core_id == 0) { + PRINTF ("ERROR: expected[%d] @%8x = %8x vs actual[%d] @%8x = %8x \n", src_offset + i, &src_ptr[src_offset + i], expected, dst_offset+i, &dst_ptr[dst_offset + i], actual); + } + } + + } + } + + return error; +} + +int main () { + + int core_id = rt_core_id(); + + unsigned int size, length, src_stride, dst_stride; + uint32_t ext_addr; + uint32_t loc_addr; + uint32_t loc_dst_addr; + + ext_addr = (uint32_t)ext + core_id * CORE_SPACE; + loc_addr = (uint32_t)loc + core_id * CORE_SPACE; + loc_dst_addr = (uint32_t) loc_dst + core_id * CORE_SPACE; + + if (core_id == 0){ + PRINTF ("loc_addr: %8x | loc_dst_addr: %8x \n", loc_addr, loc_dst_addr); + } + + #ifdef MULTI_CORE_P + // MULTI CORE PARALLEL MODE: each core uses the iDMA in a parallel manner + if (core_id == 0) { + PRINTF ("MULTI CORE PARALLEL MODE \n"); + } + for (int k = 0; k < NB_TRANSFERS; k++) { + size = transfer_params[k].size; + length = transfer_params[k].length; + src_stride = transfer_params[k].src_stride; + dst_stride = transfer_params[k].dst_stride; + if (core_id == 0) { + PRINTF ("Transfer: %d \n", k); + PRINTF ("Size: %d | Length: %d | Src_stride: %d | Dst_stride: %d | Num_reps: %d \n", size, length, src_stride, dst_stride, (size/length)); + } + errors[core_id] += test_idma_2D(core_id, size, core_id % 2, 0, ext_addr, loc_addr, length, src_stride, dst_stride, size/length); + synch_barrier(); + } + #elif MULTI_CORE_S + // MULTI CORE SERIAL MODE: each core uses the iDMA in a serial manner + if (core_id == 0) { + PRINTF ("MULTI CORE SERIAL MODE \n"); + } + for (int i = 0; i < 8; i++) { + if (core_id == i) { + for (int k = 0; k < NB_TRANSFERS; k++) { + size = transfer_params[k].size; + length = transfer_params[k].length; + src_stride = transfer_params[k].src_stride; + dst_stride = transfer_params[k].dst_stride; + if (core_id == 0) { + PRINTF ("Transfer: %d \n", k); + PRINTF ("Size: %d | Length: %d | Src_stride: %d | Dst_stride: %d | Num_reps: %d \n", size, length, src_stride, dst_stride, (size/length)); + } + errors[core_id] += test_idma_2D(core_id, size, core_id%2, 0, ext_addr, loc_addr, length, src_stride, dst_stride, (size/length)); + } + } + } + #else + // SINGLE CORE MODE: just core 0 uses the iDMA + if (core_id == 0) { + PRINTF ("SINGLE CORE MODE \n"); + for (int k = 0; k < NB_TRANSFERS; k++) { + size = transfer_params[k].size; + length = transfer_params[k].length; + src_stride = transfer_params[k].src_stride; + dst_stride = transfer_params[k].dst_stride; + PRINTF ("Transfer: %d \n", k); + PRINTF ("Size: %d | Length: %d | Src_stride: %d | Dst_stride: %d | Num_reps: %d \n", size, length, src_stride, dst_stride, (size/length)); + PRINTF ("L1 to L2 \n"); + errors[core_id] += test_idma_2D(core_id, size, 0, 0, ext_addr, loc_addr, length, src_stride, dst_stride, (size/length)); + PRINTF ("L2 to L1 \n"); + errors[core_id] += test_idma_2D(core_id, size, 1, 0, ext_addr, loc_addr, length, src_stride, dst_stride, (size/length)); + PRINTF ("L1 to L1 \n"); + errors[core_id] += test_idma_2D(core_id, size, 0, 1, loc_dst_addr, loc_addr, length, src_stride, dst_stride, (size/length)); + } + } + #endif + if (core_id == 0) { + for (int i = 0; i<8; i++) { + if (errors[i] !=0) { + PRINTF ("Core %d returned %d errors \n", i, errors[i]); + test_status = 1; + } + } + } + + return test_status; +} \ No newline at end of file diff --git a/idma_tests/idma_multi_core_2d/idma_multi_core_2d.h b/idma_tests/idma_multi_core_2d/idma_multi_core_2d.h new file mode 100644 index 0000000..3b8f963 --- /dev/null +++ b/idma_tests/idma_multi_core_2d/idma_multi_core_2d.h @@ -0,0 +1,39 @@ +// Copyright 2022 ETH Zurich and University of Bologna. +// Solderpad Hardware License, Version 0.51, see LICENSE for details. +// SPDX-License-Identifier: SHL-0.51 +// +//Author: Andreas Kuster +// +//Description: Generated register defines for dma_frontend + +#include "pulp.h" +#include +#include +#include +#include +#include + +#include "idma_defines.h" +#include "idma_parameters.h" + +#ifndef _DMA_FRONTEND_REG_DEFS_ +#define _DMA_FRONTEND_REG_DEFS_ + +#ifdef __cplusplus +extern "C" { +#endif + +#define DMA_CONF_DECOUPLE 0 +#define DMA_CONF_DEBURST 0 +#define DMA_CONF_SERIALIZE 0 + +#ifdef VERBOSE + #define PRINTF(...) printf(__VA_ARGS__) +#else + #define PRINTF(...) +#endif + +#ifdef __cplusplus +} // extern "C" +#endif +#endif // _DMA_FRONTEND_REG_DEFS_ diff --git a/idma_tests/idma_multi_core_2d/idma_parameters.h b/idma_tests/idma_multi_core_2d/idma_parameters.h new file mode 100644 index 0000000..0bdd48f --- /dev/null +++ b/idma_tests/idma_multi_core_2d/idma_parameters.h @@ -0,0 +1,16 @@ +typedef struct { + unsigned int size; + unsigned int length; + unsigned int src_stride; + unsigned int dst_stride; +} TransferParameters; + +TransferParameters transfer_params[] = { + {4, 1, 10, 22}, + {80, 8, 9, 9}, +{21, 11, 1, 19}, +{40, 11, 17, 16}, +{68, 7, 19, 20}, +{42, 3, 5, 22}, +}; + diff --git a/idma_tests/idma_multi_core_3d/Makefile b/idma_tests/idma_multi_core_3d/Makefile new file mode 100644 index 0000000..572a9b4 --- /dev/null +++ b/idma_tests/idma_multi_core_3d/Makefile @@ -0,0 +1,23 @@ +PULP_APP = test +TEST_SRCS ?= idma_multi_core_3d.c +PULP_APP_SRCS = $(TEST_SRCS) + +ifdef VERBOSE +PULP_CFLAGS += -DVERBOSE +endif + +ifdef MULTI_CORE_P +PULP_CFLAGS += -DMULTI_CORE_P +endif + +ifdef MULTI_CORE_S +PULP_CFLAGS += -DMULTI_CORE_S +endif + +PULP_CFLAGS += -O3 +stackSize = 4096 + +include $(PULP_SDK_HOME)/install/rules/pulp.mk + +stimuli: + python gen_stimuli_idma_3d.py \ No newline at end of file diff --git a/idma_tests/idma_multi_core_3d/idma_defines.h b/idma_tests/idma_multi_core_3d/idma_defines.h new file mode 100644 index 0000000..0ac7b37 --- /dev/null +++ b/idma_tests/idma_multi_core_3d/idma_defines.h @@ -0,0 +1 @@ +#define NB_TRANSFERS 8 diff --git a/idma_tests/idma_multi_core_3d/idma_multi_core_3d.c b/idma_tests/idma_multi_core_3d/idma_multi_core_3d.c new file mode 100644 index 0000000..f558b8c --- /dev/null +++ b/idma_tests/idma_multi_core_3d/idma_multi_core_3d.c @@ -0,0 +1,214 @@ +#include "idma_multi_core_3d.h" + +#define MAX_BUFFER_SIZE 0x1000 +#define CORE_SPACE 0x1000 + +L2_DATA static uint8_t ext[MAX_BUFFER_SIZE]; +L1_DATA static uint8_t loc[MAX_BUFFER_SIZE]; +L1_DATA static uint8_t loc_dst[MAX_BUFFER_SIZE]; + +int errors[8] = {0}; +int test_status = 0; + +int test_idma_3D (int core_id, uint32_t size, int ext2loc, int loc2loc, uint32_t ext_addr, uint32_t tcdm_addr, unsigned int length, unsigned int src_stride_2d, unsigned int dst_stride_2d, unsigned int num_reps, unsigned int src_stride_3d, unsigned int dst_stride_3d, unsigned int num_reps_3d) { + volatile uint8_t *src_ptr, *dst_ptr; + unsigned int offset_3d, offset_2d; + + int error = 0; + + if (loc2loc == 1) { + // L1 to L1 transfer + src_ptr = (uint8_t*) tcdm_addr; + dst_ptr = (uint8_t*) ext_addr; + + // Fill source region with test data + offset_2d = 0; + offset_3d = 0; + for (int j = 0; j < num_reps_3d; j++) { + for (int q = 0; q < num_reps; q++) { + for (int i = 0; i < length; i++) { + src_ptr[i+offset_2d+offset_3d] = (uint8_t)(i & 0xFF); + } + offset_2d += src_stride_2d; + } + offset_2d = 0; + offset_3d += (num_reps-1) * src_stride_2d + src_stride_3d; + } + + plp_cl_dma_wait_toL1(pulp_cl_idma_L1ToL1_3d((unsigned int)src_ptr, (unsigned int)dst_ptr, length, src_stride_2d, dst_stride_2d, num_reps, src_stride_3d, dst_stride_3d, num_reps_3d)); + + } else { + if (ext2loc == 1) { + + // L2 to L1 transfer + src_ptr = (uint8_t*) ext_addr; + dst_ptr = (uint8_t*) tcdm_addr; + + // Fill source region with test data + offset_2d = 0; + offset_3d = 0; + for (int j = 0; j < num_reps_3d; j++) { + for (int q = 0; q < num_reps; q++) { + for (int i = 0; i < length; i++) { + src_ptr[i+offset_2d+offset_3d] = (uint8_t)(i & 0xFF); + } + offset_2d += src_stride_2d; + } + offset_2d = 0; + offset_3d += (num_reps-1) * src_stride_2d + src_stride_3d; + } + + plp_cl_dma_wait_toL1(pulp_cl_idma_L2ToL1_3d((unsigned int)src_ptr, (unsigned int)dst_ptr, length, src_stride_2d, dst_stride_2d, num_reps, src_stride_3d, dst_stride_3d, num_reps_3d)); + } else { + + // L1 to L2 transfer + src_ptr = (uint8_t*) tcdm_addr; + dst_ptr = (uint8_t*) ext_addr; + + // Fill source region with test data + offset_2d = 0; + offset_3d = 0; + for (int j = 0; j < num_reps_3d; j++) { + for (int q = 0; q < num_reps; q++) { + for (int i = 0; i < length; i++) { + src_ptr[i+offset_2d+offset_3d] = (uint8_t)(i & 0xFF); + } + offset_2d += src_stride_2d; + } + offset_2d = 0; + offset_3d += (num_reps-1) * src_stride_2d + src_stride_3d; + } + + plp_cl_dma_wait_toL2(pulp_cl_idma_L1ToL2_3d((unsigned int)src_ptr, (unsigned int)dst_ptr, length, src_stride_2d, dst_stride_2d, num_reps, src_stride_3d, dst_stride_3d, num_reps_3d)); + } + } + + // Check the results + int src_offset_2d = 0; + int dst_offset_2d = 0; + int src_offset_3d = 0; + int dst_offset_3d = 0; + + for (int rep_3d = 0; rep_3d < num_reps_3d; rep_3d ++) { + for (unsigned int rep = 0; rep < num_reps; rep++) { + for (unsigned int i = 0; i < length; i++) { + uint8_t expected = src_ptr[src_offset_2d + src_offset_3d + i]; + uint8_t actual = dst_ptr[dst_offset_2d + dst_offset_3d + i]; + + if (expected != actual) { + if (core_id == 0) { + PRINTF ("ERROR: expected @%8x[%d] = %8x vs actual @%8x[%d] = %8x \n", &src_ptr[src_offset_2d + src_offset_3d + i], src_offset_2d + src_offset_3d + i, expected, &dst_ptr[dst_offset_2d + dst_offset_3d + i], dst_offset_2d + dst_offset_3d + i, actual); + } + error++; + } + } + src_offset_2d += src_stride_2d; + dst_offset_2d += dst_stride_2d; + } + src_offset_2d = 0; + dst_offset_2d = 0; + src_offset_3d += (num_reps-1) * src_stride_2d + src_stride_3d; + dst_offset_3d += (num_reps-1) * dst_stride_2d + dst_stride_3d; + } + + return error; +} + +int main () { + + int core_id = rt_core_id(); + + unsigned int size, length, src_stride_2d, dst_stride_2d; + unsigned int num_reps_3d, src_stride_3d, dst_stride_3d; + uint32_t ext_addr; + uint32_t loc_addr; + uint32_t loc_dst_addr; + + ext_addr = (uint32_t)ext + core_id * CORE_SPACE; + loc_addr = (uint32_t)loc + core_id * CORE_SPACE; + loc_dst_addr = (uint32_t)loc_dst + core_id * CORE_SPACE; + + if (core_id == 0){ + PRINTF ("loc_addr: %8x | loc_dst_addr: %8x \n", loc_addr, loc_dst_addr); + } + + #ifdef MULTI_CORE_P + // MULTI CORE PARALLEL MODE: each core uses the iDMA in a parallel manner + if (core_id == 0) { + PRINTF ("MULTI CORE PARALLEL MODE \n"); + } + for (int k = 0; k < NB_TRANSFERS; k++) { + size = transfer_params[k].size; + length = transfer_params[k].length; + src_stride_2d = transfer_params[k].src_stride_2d; + dst_stride_2d = transfer_params[k].dst_stride_2d; + src_stride_3d = transfer_params[k].src_stride_3d; + dst_stride_3d = transfer_params[k].dst_stride_3d; + num_reps_3d = transfer_params[k].num_reps_3d; + + if (core_id == 0) { + PRINTF ("Transfer: %d \n", k); + PRINTF ("Size: %d | Length: %d | Src_stride_2d: %d | Dst_stride_2d: %d | Num_reps_2d: %d \n", size, length, src_stride_2d, dst_stride_2d, (size/length)); + PRINTF ("Src_stride_3d: %d | Dst_stride_3d: %d | Num_reps_3d: %d \n", src_stride_3d, dst_stride_3d, num_reps_3d); + } + errors[core_id] += test_idma_3D(core_id, size, (core_id%2), 0, ext_addr, loc_addr, length, src_stride_2d, dst_stride_2d, (size/length), src_stride_3d, dst_stride_3d, num_reps_3d); + synch_barrier(); + } + #elif MULTI_CORE_S + // MULTI CORE SERIAL MODE: each core uses the iDMA in a serial manner + if (core_id == 0) { + PRINTF ("MULTI CORE SERIAL MODE \n"); + } + for (int i = 0; i < 8; i++) { + if (core_id == i) { + for (int k = 0; k < NB_TRANSFERS; k++) { + size = transfer_params[k].size; + length = transfer_params[k].length; + src_stride_2d = transfer_params[k].src_stride_2d; + dst_stride_2d = transfer_params[k].dst_stride_2d; + src_stride_3d = transfer_params[k].src_stride_3d; + dst_stride_3d = transfer_params[k].dst_stride_3d; + num_reps_3d = transfer_params[k].num_reps_3d; + if (core_id == 0) { + PRINTF ("Transfer: %d \n", k); + PRINTF ("Size: %d | Length: %d | Src_stride_2d: %d | Dst_stride_2d: %d | Num_reps_2d: %d \n", size, length, src_stride_2d, dst_stride_2d, (size/length)); + PRINTF ("Src_stride_3d: %d | Dst_stride_3d: %d | Num_reps_3d: %d \n", src_stride_3d, dst_stride_3d, num_reps_3d); + } + errors[core_id] += test_idma_3D(core_id, size, (core_id%2), 0, ext_addr, loc_addr, length, src_stride_2d, dst_stride_2d, (size/length), src_stride_3d, dst_stride_3d, num_reps_3d); + } + } + } + #else + if (core_id == 0) { + for (int k = 0; k < NB_TRANSFERS; k++) { + size = transfer_params[k].size; + length = transfer_params[k].length; + src_stride_2d = transfer_params[k].src_stride_2d; + dst_stride_2d = transfer_params[k].dst_stride_2d; + src_stride_3d = transfer_params[k].src_stride_3d; + dst_stride_3d = transfer_params[k].dst_stride_3d; + num_reps_3d = transfer_params[k].num_reps_3d; + PRINTF ("Transfer: %d \n", k); + PRINTF ("Size: %d | Length: %d | Src_stride_2d: %d | Dst_stride_2d: %d | Num_reps_2d: %d \n", size, length, src_stride_2d, dst_stride_2d, (size/length)); + PRINTF ("Src_stride_3d: %d | Dst_stride_3d: %d | Num_reps_3d: %d \n", src_stride_3d, dst_stride_3d, num_reps_3d); + PRINTF ("L1 to L2 transfer \n"); + errors[core_id] += test_idma_3D(core_id, size, 0, 0, ext_addr, loc_addr, length, src_stride_2d, dst_stride_2d, (size/length), src_stride_3d, dst_stride_3d, num_reps_3d); + PRINTF ("L2 to L1 transfer \n"); + errors[core_id] += test_idma_3D(core_id, size, 1, 0, ext_addr, loc_addr, length, src_stride_2d, dst_stride_2d, (size/length), src_stride_3d, dst_stride_3d, num_reps_3d); + PRINTF ("L1 to L1 transfer \n"); + errors[core_id] += test_idma_3D(core_id, size, 0, 1, loc_dst_addr, loc_addr, length, src_stride_2d, dst_stride_2d, (size/length), src_stride_3d, dst_stride_3d, num_reps_3d); + } + } + #endif + + if (core_id == 0) { + for (int i = 0; i<8; i++) { + if (errors[i] !=0) { + PRINTF ("Core %d returned %d errors \n", i, errors[i]); + test_status = 1; + } + } + } + + return test_status; +} \ No newline at end of file diff --git a/idma_tests/idma_multi_core_3d/idma_multi_core_3d.h b/idma_tests/idma_multi_core_3d/idma_multi_core_3d.h new file mode 100644 index 0000000..3b8f963 --- /dev/null +++ b/idma_tests/idma_multi_core_3d/idma_multi_core_3d.h @@ -0,0 +1,39 @@ +// Copyright 2022 ETH Zurich and University of Bologna. +// Solderpad Hardware License, Version 0.51, see LICENSE for details. +// SPDX-License-Identifier: SHL-0.51 +// +//Author: Andreas Kuster +// +//Description: Generated register defines for dma_frontend + +#include "pulp.h" +#include +#include +#include +#include +#include + +#include "idma_defines.h" +#include "idma_parameters.h" + +#ifndef _DMA_FRONTEND_REG_DEFS_ +#define _DMA_FRONTEND_REG_DEFS_ + +#ifdef __cplusplus +extern "C" { +#endif + +#define DMA_CONF_DECOUPLE 0 +#define DMA_CONF_DEBURST 0 +#define DMA_CONF_SERIALIZE 0 + +#ifdef VERBOSE + #define PRINTF(...) printf(__VA_ARGS__) +#else + #define PRINTF(...) +#endif + +#ifdef __cplusplus +} // extern "C" +#endif +#endif // _DMA_FRONTEND_REG_DEFS_ diff --git a/idma_tests/idma_multi_core_3d/idma_parameters.h b/idma_tests/idma_multi_core_3d/idma_parameters.h new file mode 100644 index 0000000..3273eb3 --- /dev/null +++ b/idma_tests/idma_multi_core_3d/idma_parameters.h @@ -0,0 +1,21 @@ +typedef struct { + unsigned int size; + unsigned int length; + unsigned int src_stride_2d; + unsigned int dst_stride_2d; + unsigned int src_stride_3d; + unsigned int dst_stride_3d; + unsigned int num_reps_3d; +} TransferParameters; + +TransferParameters transfer_params[] = { + {17, 10, 9, 16, 3, 14, 1}, +{47, 1, 6, 8, 9, 10, 5}, +{21, 4, 8, 6, 6, 8, 2}, +{52, 7, 7, 10, 7, 11, 4}, +{47, 7, 10, 14, 2, 13, 1}, +{37, 8, 9, 16, 8, 11, 1}, +{31, 7, 6, 12, 5, 8, 4}, +{41, 9, 7, 14, 5, 17, 2}, +}; + From 74c0c6c37bba2b189367c4ea6277a7d28095474f Mon Sep 17 00:00:00 2001 From: Daniel Keller Date: Tue, 3 Jun 2025 14:53:43 +0200 Subject: [PATCH 64/71] update to use updated functions from the HAL --- idma_tests/idma_3D_FC_TCDM/idma_3D_FC_TCDM.c | 148 +++++++++++++------ 1 file changed, 103 insertions(+), 45 deletions(-) diff --git a/idma_tests/idma_3D_FC_TCDM/idma_3D_FC_TCDM.c b/idma_tests/idma_3D_FC_TCDM/idma_3D_FC_TCDM.c index 282e982..ae5131b 100644 --- a/idma_tests/idma_3D_FC_TCDM/idma_3D_FC_TCDM.c +++ b/idma_tests/idma_3D_FC_TCDM/idma_3D_FC_TCDM.c @@ -26,8 +26,9 @@ static void print_memory(uint8_t *mem, unsigned int size, const char *name) { } #endif -int test_idma_2D(uint32_t size, test_type_t type, uint32_t ext_addr, uint32_t tcdm_addr, - unsigned int length, unsigned int src_stride, unsigned int dst_stride, unsigned int num_reps); +int test_idma_3D(uint32_t size, test_type_t type, uint32_t ext_addr, uint32_t tcdm_addr, + unsigned int length, unsigned int src_stride_2d, unsigned int dst_stride_2d, unsigned int num_reps, + unsigned int src_stride_3d, unsigned int dst_stride_3d, unsigned int num_reps_3d); int main(void) { if (rt_cluster_id() != 0) { @@ -37,70 +38,127 @@ int main(void) { int error_count = 0; if (get_core_id() == 0) { - unsigned int sizes[] = {16, 64, 256, 1024}; // Total number of bytes (for initialization of the values in memory) - unsigned int lengths[] = {4, 8, 16, 64}; // Number of bytes to transfer per 1D transaction - unsigned int num_reps[] = {4, 8, 16, 16}; // Number of repetitions of 1D transactions - unsigned int src_strides[] = {4, 8, 24, 56}; // Number of strides in source memory - unsigned int dst_strides[] = {5, 12, 24, 64}; // Number of strides in destination memory + unsigned int sizes[] = {64, 256, 1024, 2048}; // Total number of bytes + unsigned int lengths[] = {4, 8, 16, 32}; // Number of bytes per 1D transaction + unsigned int src_strides_2d[] = {8, 16, 32, 64}; // 2D stride in source + unsigned int dst_strides_2d[] = {8, 16, 32, 64}; // 2D stride in destination + unsigned int num_reps_3d[] = {2, 2, 2, 2}; // Number of 2D pages + unsigned int src_strides_3d[] = {32, 128, 512, 1024}; // 3D stride in source + unsigned int dst_strides_3d[] = {32, 128, 512, 1024}; // 3D stride in destination for (unsigned int i = 0; i < 4; i++) { - error_count += test_idma_2D(sizes[i], L2_TO_L1, (uint32_t)ext, (uint32_t)loc, - lengths[i], src_strides[i], dst_strides[i], num_reps[i]); - } - - for (unsigned int i = 0; i < 4; i++) { - error_count += test_idma_2D(sizes[i], L1_TO_L2, (uint32_t)ext, (uint32_t)loc, - lengths[i], src_strides[i], dst_strides[i], num_reps[i]); + unsigned int num_reps = sizes[i] / lengths[i]; // Calculate num_reps like in multi_core test + + printf("Transfer: %d\n", i); + printf("Size: %d | Length: %d | Src_stride_2d: %d | Dst_stride_2d: %d | Num_reps_2d: %d\n", + sizes[i], lengths[i], src_strides_2d[i], dst_strides_2d[i], num_reps); + printf("Src_stride_3d: %d | Dst_stride_3d: %d | Num_reps_3d: %d\n", + src_strides_3d[i], dst_strides_3d[i], num_reps_3d[i]); + + printf("L2 to L1 transfer\n"); + error_count += test_idma_3D(sizes[i], L2_TO_L1, (uint32_t)ext, (uint32_t)loc, + lengths[i], src_strides_2d[i], dst_strides_2d[i], num_reps, + src_strides_3d[i], dst_strides_3d[i], num_reps_3d[i]); + + printf("L1 to L2 transfer\n"); + error_count += test_idma_3D(sizes[i], L1_TO_L2, (uint32_t)ext, (uint32_t)loc, + lengths[i], src_strides_2d[i], dst_strides_2d[i], num_reps, + src_strides_3d[i], dst_strides_3d[i], num_reps_3d[i]); } } return error_count; } -int test_idma_2D(uint32_t size, test_type_t type, uint32_t ext_addr, uint32_t tcdm_addr, - unsigned int length, unsigned int src_stride, unsigned int dst_stride, unsigned int num_reps) { +int test_idma_3D(uint32_t size, test_type_t type, uint32_t ext_addr, uint32_t tcdm_addr, + unsigned int length, unsigned int src_stride_2d, unsigned int dst_stride_2d, unsigned int num_reps, + unsigned int src_stride_3d, unsigned int dst_stride_3d, unsigned int num_reps_3d) { volatile uint8_t *src_ptr, *dst_ptr; - struct dma_id id; - volatile int error = 0; + unsigned int offset_2d, offset_3d; + int error = 0; if (type == L2_TO_L1) { - src_ptr = (uint8_t *)ext_addr; - dst_ptr = (uint8_t *)tcdm_addr; - for (uint32_t i = 0; i < size; i++) src_ptr[i] = (uint8_t)(i & 0xFF); - id = pulp_cl_idma_L2ToL1_3d((unsigned int)src_ptr, (unsigned int)dst_ptr, length, src_stride, dst_stride, num_reps); - } else if (type == L1_TO_L2) { - src_ptr = (uint8_t *)tcdm_addr; - dst_ptr = (uint8_t *)ext_addr; - for (uint32_t i = 0; i < size; i++) src_ptr[i] = (uint8_t)(i & 0xFF); - id = pulp_cl_idma_L1ToL2_3d((unsigned int)src_ptr, (unsigned int)dst_ptr, length, src_stride, dst_stride, num_reps); + // L2 to L1 transfer + src_ptr = (uint8_t*)ext_addr; + dst_ptr = (uint8_t*)tcdm_addr; + + // Fill source region with test data + offset_2d = 0; + offset_3d = 0; + for (int j = 0; j < num_reps_3d; j++) { + for (int q = 0; q < num_reps; q++) { + for (int i = 0; i < length; i++) { + src_ptr[i + offset_2d + offset_3d] = (uint8_t)(i & 0xFF); + } + offset_2d += src_stride_2d; + } + offset_2d = 0; + offset_3d += (num_reps - 1) * src_stride_2d + src_stride_3d; + } + + plp_cl_dma_wait_toL1(pulp_cl_idma_L2ToL1_3d((unsigned int)src_ptr, (unsigned int)dst_ptr, + length, src_stride_2d, dst_stride_2d, num_reps, + src_stride_3d, dst_stride_3d, num_reps_3d)); + } else { + // L1 to L2 transfer + src_ptr = (uint8_t*)tcdm_addr; + dst_ptr = (uint8_t*)ext_addr; + + // Fill source region with test data + offset_2d = 0; + offset_3d = 0; + for (int j = 0; j < num_reps_3d; j++) { + for (int q = 0; q < num_reps; q++) { + for (int i = 0; i < length; i++) { + src_ptr[i + offset_2d + offset_3d] = (uint8_t)(i & 0xFF); + } + offset_2d += src_stride_2d; + } + offset_2d = 0; + offset_3d += (num_reps - 1) * src_stride_2d + src_stride_3d; + } + + plp_cl_dma_wait_toL2(pulp_cl_idma_L1ToL2_3d((unsigned int)src_ptr, (unsigned int)dst_ptr, + length, src_stride_2d, dst_stride_2d, num_reps, + src_stride_3d, dst_stride_3d, num_reps_3d)); } + // Check the results - exactly like multi_core test + int src_offset_2d = 0; + int dst_offset_2d = 0; + int src_offset_3d = 0; + int dst_offset_3d = 0; + + for (int rep_3d = 0; rep_3d < num_reps_3d; rep_3d++) { + for (unsigned int rep = 0; rep < num_reps; rep++) { + for (unsigned int i = 0; i < length; i++) { + uint8_t expected = src_ptr[src_offset_2d + src_offset_3d + i]; + uint8_t actual = dst_ptr[dst_offset_2d + dst_offset_3d + i]; + + if (expected != actual) { #ifdef VERBOSE - printf("DMA status (before barrier): %d\n", plp_cl_dma_status(id)); -#endif - plp_dma_barrier(id); - // plp_dma_wait(id); -#ifdef VERBOSE - printf("DMA status (after barrier): %d\n", plp_cl_dma_status(id)); - print_memory((uint8_t *)ext_addr, size, "ext"); - print_memory((uint8_t *)tcdm_addr, size, "loc"); + printf("ERROR: expected @%8x[%d] = %8x vs actual @%8x[%d] = %8x\n", + &src_ptr[src_offset_2d + src_offset_3d + i], src_offset_2d + src_offset_3d + i, expected, + &dst_ptr[dst_offset_2d + dst_offset_3d + i], dst_offset_2d + dst_offset_3d + i, actual); #endif - - for (unsigned int rep = 0; rep < num_reps; rep++) { - unsigned int src_offset = rep * src_stride; - unsigned int dst_offset = rep * dst_stride; - for (unsigned int i = 0; i < length; i++) { - uint8_t expected = src_ptr[src_offset + i]; - uint8_t actual = dst_ptr[dst_offset + i]; - if (expected != actual) error++; + error++; + } + } + src_offset_2d += src_stride_2d; + dst_offset_2d += dst_stride_2d; } + src_offset_2d = 0; + dst_offset_2d = 0; + src_offset_3d += (num_reps - 1) * src_stride_2d + src_stride_3d; + dst_offset_3d += (num_reps - 1) * dst_stride_2d + dst_stride_3d; } #ifdef VERBOSE if (error == 0) { - printf("Test passed for %s with size %d, length %d, src_stride %d, dst_stride %d, num_reps %d\n", type == L2_TO_L1 ? "L2_TO_L1" : "L1_TO_L2", size, length, src_stride, dst_stride, num_reps); + printf("Test passed for %s 3D transfer\n", type == L2_TO_L1 ? "L2_TO_L1" : "L1_TO_L2"); } else { - printf("Test failed for %s with size %d, length %d, src_stride %d, dst_stride %d, num_reps %d\n", type == L2_TO_L1 ? "L2_TO_L1" : "L1_TO_L2", size, length, src_stride, dst_stride, num_reps); + printf("Test failed for %s 3D transfer with %d errors\n", + type == L2_TO_L1 ? "L2_TO_L1" : "L1_TO_L2", error); } #endif From 3f8a57225112f1ebc1371210ac429652543a54ae Mon Sep 17 00:00:00 2001 From: Daniel Keller Date: Fri, 13 Jun 2025 15:05:32 +0200 Subject: [PATCH 65/71] update tests to use L1 and L2 wait functions --- idma_tests/idma_2D_FC_TCDM/idma_2D_FC_TCDM.c | 4 +++- idma_tests/idma_basic_FC_TCDM/idma_basic_FC_TCDM.c | 8 +++++--- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/idma_tests/idma_2D_FC_TCDM/idma_2D_FC_TCDM.c b/idma_tests/idma_2D_FC_TCDM/idma_2D_FC_TCDM.c index 52ca92b..8e41e26 100644 --- a/idma_tests/idma_2D_FC_TCDM/idma_2D_FC_TCDM.c +++ b/idma_tests/idma_2D_FC_TCDM/idma_2D_FC_TCDM.c @@ -68,14 +68,16 @@ int test_idma_2D(uint32_t size, test_type_t type, uint32_t ext_addr, uint32_t tc dst_ptr = (uint8_t *)tcdm_addr; for (uint32_t i = 0; i < size; i++) src_ptr[i] = (uint8_t)(i & 0xFF); id = pulp_cl_idma_L2ToL1_2d((unsigned int)src_ptr, (unsigned int)dst_ptr, length, src_stride, dst_stride, num_reps); + plp_cl_dma_wait_toL1(id); } else { src_ptr = (uint8_t *)tcdm_addr; dst_ptr = (uint8_t *)ext_addr; for (uint32_t i = 0; i < size; i++) src_ptr[i] = (uint8_t)(i & 0xFF); id = pulp_cl_idma_L1ToL2_2d((unsigned int)src_ptr, (unsigned int)dst_ptr, length, src_stride, dst_stride, num_reps); + plp_cl_dma_wait_toL2(id); } - plp_dma_barrier(); + // plp_dma_barrier(); for (unsigned int rep = 0; rep < num_reps; rep++) { unsigned int src_offset = rep * src_stride; diff --git a/idma_tests/idma_basic_FC_TCDM/idma_basic_FC_TCDM.c b/idma_tests/idma_basic_FC_TCDM/idma_basic_FC_TCDM.c index 7fdde77..20b9063 100644 --- a/idma_tests/idma_basic_FC_TCDM/idma_basic_FC_TCDM.c +++ b/idma_tests/idma_basic_FC_TCDM/idma_basic_FC_TCDM.c @@ -51,7 +51,7 @@ int test_idma(uint32_t size, test_type_t type, uint32_t ext_addr, uint32_t tcdm_ *(uint8_t *)(ext_addr + i) = (uint8_t)(i & 0xFF); } - for (i = 0; i < size; i++) { + for (uint32_t i = 0; i < size; i++) { *(uint8_t *)(tcdm_addr + i) = 0; } @@ -67,7 +67,7 @@ int test_idma(uint32_t size, test_type_t type, uint32_t ext_addr, uint32_t tcdm_ | | | | +----------------+ +----------------+ */ - + plp_cl_dma_wait_toL1(id); } else if (type == L1_TO_L2) { // Fill L1 buffer with a pattern for (uint32_t i = 0; i < size; i++) { @@ -88,12 +88,14 @@ int test_idma(uint32_t size, test_type_t type, uint32_t ext_addr, uint32_t tcdm_ | | | | +----------------+ +----------------+ */ + plp_cl_dma_wait_toL2(id); } else { printf("Invalid test type. It must be either L2_TO_L1 or L1_TO_L2.\n"); return 1; } - plp_dma_barrier(); + // plp_cl_dma_wait(); + // plp_dma_barrier(); // Verify data for (uint32_t i = 0; i < size; i++) { From 506ddf1327062b9e3fb9ecc281a9bfa215cdc885 Mon Sep 17 00:00:00 2001 From: Riccardo Gandolfi Date: Fri, 6 Jun 2025 16:37:57 +0200 Subject: [PATCH 66/71] Few updates to iDMA tests --- idma_tests/README.md | 2 + idma_tests/idma_multi_core/idma_multi_core.c | 14 +++++-- .../idma_multi_core_2d/gen_stimuli_idma_2d.py | 8 ++-- .../idma_multi_core_2d/idma_multi_core_2d.c | 40 ++++++++++--------- .../idma_multi_core_3d/idma_multi_core_3d.c | 16 ++++++-- 5 files changed, 51 insertions(+), 29 deletions(-) diff --git a/idma_tests/README.md b/idma_tests/README.md index 2b0da1c..74096cd 100644 --- a/idma_tests/README.md +++ b/idma_tests/README.md @@ -16,3 +16,5 @@ To launch each test: - **Parallel Multi-Core Mode**: specify **MULTI_CORE_P=1** in the command line when compiling the code. In this mode, all cores will execute the transfers specified in the stimulin in a parallel manner. 3. `make run` : this will launch the simulation in bash mode (use gui=1 for Modelsim gui). 4. All transfers will be executed in the three different directions that are currently supported: **L1->L2, L2->L1, L1->L1**. + +Updated drivers for the iDMA can be found at **pulp_cluster/pulp-runtime/include/hal/dma/idma_v2.h** and **pulp_cluster/pulp-runtime/include/archi/dma/idma_v2.h**. diff --git a/idma_tests/idma_multi_core/idma_multi_core.c b/idma_tests/idma_multi_core/idma_multi_core.c index 12c9c09..6276ba5 100644 --- a/idma_tests/idma_multi_core/idma_multi_core.c +++ b/idma_tests/idma_multi_core/idma_multi_core.c @@ -95,8 +95,11 @@ int main () { if (core_id == 0) { PRINTF ("Transfer: %d | Size: %8x \n", k, size); } - // Each core tests in a direction + L1 <-> L1 - errors[core_id] += test_idma_1D(core_id, size, (core_id % 2), 0, ext_addr, loc_addr); + // L1 -> L2 + errors[core_id] += test_idma_1D(core_id, size, 0, 0, ext_addr, loc_addr); + // L2 -> L1 + errors[core_id] += test_idma_1D(core_id, size, 1, 0, ext_addr, loc_addr); + // L1 -> L1 errors[core_id] += test_idma_1D(core_id, size, 0, 1, loc_dst_addr, loc_addr); synch_barrier(); } @@ -112,8 +115,11 @@ int main () { if (core_id == 0) { PRINTF ("Transfer: %d | Size: %8x \n", k, size); } - // Each core tests in a direction + L1 <-> L1 - errors[core_id] += test_idma_1D(core_id, size, (core_id% 2), 0, ext_addr, loc_addr); + // L1 -> L2 + errors[core_id] += test_idma_1D(core_id, size, 0, 0, ext_addr, loc_addr); + // L2 -> L1 + errors[core_id] += test_idma_1D(core_id, size, 1, 0, ext_addr, loc_addr); + // L1 -> L1 errors[core_id] += test_idma_1D(core_id, size, 0, 1, loc_dst_addr, loc_addr); } } diff --git a/idma_tests/idma_multi_core_2d/gen_stimuli_idma_2d.py b/idma_tests/idma_multi_core_2d/gen_stimuli_idma_2d.py index 75619f9..a159377 100644 --- a/idma_tests/idma_multi_core_2d/gen_stimuli_idma_2d.py +++ b/idma_tests/idma_multi_core_2d/gen_stimuli_idma_2d.py @@ -23,8 +23,8 @@ def write_transfer_parameters_struct(f, name): def write_transfer_parameters_array(f, name, arr): f.write ('TransferParameters %s[] = {\n' % name) for v in arr: - size = random.randint(1, MAX_SIZE) length = random.randint(1, MAX_LENGTH) + size = random.randint(1, MAX_SIZE) + length src_stride = random.randint(1, MAX_STRIDE) # Computing dst_stride as random + length so that we do not overwrite data # when iDMA is executing @@ -45,9 +45,9 @@ def write_define(f, name,val): # Randomize between 1 and 500 the size of each transfer -MAX_SIZE = 100 -MAX_STRIDE = 24 -MAX_LENGTH = 16 +MAX_SIZE = 50 +MAX_STRIDE = 10 +MAX_LENGTH = 10 transfer_params = [None] * NB_TRANSFERS diff --git a/idma_tests/idma_multi_core_2d/idma_multi_core_2d.c b/idma_tests/idma_multi_core_2d/idma_multi_core_2d.c index fb963ca..2d727e6 100644 --- a/idma_tests/idma_multi_core_2d/idma_multi_core_2d.c +++ b/idma_tests/idma_multi_core_2d/idma_multi_core_2d.c @@ -1,7 +1,7 @@ #include "idma_multi_core_2d.h" -#define MAX_BUFFER_SIZE 0x2000 -#define CORE_SPACE 0x1000 +#define CORE_SPACE 0x500 +#define MAX_BUFFER_SIZE CORE_SPACE L2_DATA static uint8_t ext[MAX_BUFFER_SIZE]; L1_DATA static uint8_t loc[MAX_BUFFER_SIZE]; @@ -21,14 +21,12 @@ int test_idma_2D (int core_id, uint32_t size, int ext2loc, int loc2loc, uint32_t dst_ptr = (uint8_t*) ext_addr; // Fill source region with test data - offset_2d = 0; for (int q = 0; q < num_reps; q++) { + offset_2d = q * src_stride; for (int i = 0; i < length; i++) { src_ptr[i+offset_2d] = (uint8_t)(i & 0xFF); } - offset_2d += src_stride; } - plp_cl_dma_wait_toL1(pulp_cl_idma_L1ToL1_2d((unsigned int)src_ptr, (unsigned int)dst_ptr, length, src_stride, dst_stride, num_reps)); } else { if (ext2loc == 1) { @@ -38,12 +36,11 @@ int test_idma_2D (int core_id, uint32_t size, int ext2loc, int loc2loc, uint32_t dst_ptr = (uint8_t*) tcdm_addr; // Fill source region with test data - offset_2d = 0; for (int q = 0; q < num_reps; q++) { + offset_2d = q * src_stride; for (int i = 0; i < length; i++) { src_ptr[i+offset_2d] = (uint8_t)(i & 0xFF); } - offset_2d += src_stride; } plp_cl_dma_wait_toL1(pulp_cl_idma_L2ToL1_2d((unsigned int)src_ptr, (unsigned int)dst_ptr, length, src_stride, dst_stride, num_reps)); } else { @@ -53,12 +50,11 @@ int test_idma_2D (int core_id, uint32_t size, int ext2loc, int loc2loc, uint32_t dst_ptr = (uint8_t*) ext_addr; // Fill source region with test data - offset_2d = 0; for (int q = 0; q < num_reps; q++) { + offset_2d = q * src_stride; for (int i = 0; i < length; i++) { src_ptr[i+offset_2d] = (uint8_t)(i & 0xFF); } - offset_2d += src_stride; } plp_cl_dma_wait_toL2(pulp_cl_idma_L1ToL2_2d((unsigned int)src_ptr, (unsigned int)dst_ptr, length, src_stride, dst_stride, num_reps)); } @@ -97,10 +93,10 @@ int main () { ext_addr = (uint32_t)ext + core_id * CORE_SPACE; loc_addr = (uint32_t)loc + core_id * CORE_SPACE; - loc_dst_addr = (uint32_t) loc_dst + core_id * CORE_SPACE; + loc_dst_addr = (uint32_t)loc_dst + core_id * CORE_SPACE; if (core_id == 0){ - PRINTF ("loc_addr: %8x | loc_dst_addr: %8x \n", loc_addr, loc_dst_addr); + PRINTF ("loc_addr: %8x | loc_dst_addr: %8x | ext_addr: %8x \n", loc_addr, loc_dst_addr, ext_addr); } #ifdef MULTI_CORE_P @@ -113,11 +109,15 @@ int main () { length = transfer_params[k].length; src_stride = transfer_params[k].src_stride; dst_stride = transfer_params[k].dst_stride; - if (core_id == 0) { - PRINTF ("Transfer: %d \n", k); - PRINTF ("Size: %d | Length: %d | Src_stride: %d | Dst_stride: %d | Num_reps: %d \n", size, length, src_stride, dst_stride, (size/length)); + if (core_id == 0) { + PRINTF ("Transfer: %d | Size: %d | Length: %d | Src_stride: %d | Dst_stride: %d | Num_reps: %d \n", k, size, length, src_stride, dst_stride, (size/length)); } - errors[core_id] += test_idma_2D(core_id, size, core_id % 2, 0, ext_addr, loc_addr, length, src_stride, dst_stride, size/length); + // L1 -> L2 + errors[core_id] += test_idma_2D(core_id, size, 0, 0, ext_addr, loc_addr, length, src_stride, dst_stride, size/length); + // L2 -> L1 + errors[core_id] += test_idma_2D(core_id, size, 1, 0, ext_addr, loc_addr, length, src_stride, dst_stride, size/length); + // L1 -> L1 + errors[core_id] += test_idma_2D(core_id, size, 0, 1, loc_dst_addr, loc_addr, length, src_stride, dst_stride, size/length); synch_barrier(); } #elif MULTI_CORE_S @@ -133,10 +133,14 @@ int main () { src_stride = transfer_params[k].src_stride; dst_stride = transfer_params[k].dst_stride; if (core_id == 0) { - PRINTF ("Transfer: %d \n", k); - PRINTF ("Size: %d | Length: %d | Src_stride: %d | Dst_stride: %d | Num_reps: %d \n", size, length, src_stride, dst_stride, (size/length)); + PRINTF ("Transfer: %d | Size: %d | Length: %d | Src_stride: %d | Dst_stride: %d | Num_reps: %d \n", k, size, length, src_stride, dst_stride, (size/length)); } - errors[core_id] += test_idma_2D(core_id, size, core_id%2, 0, ext_addr, loc_addr, length, src_stride, dst_stride, (size/length)); + // L1 -> L2 + errors[core_id] += test_idma_2D(core_id, size, 0, 0, ext_addr, loc_addr, length, src_stride, dst_stride, size/length); + // L2 -> L1 + errors[core_id] += test_idma_2D(core_id, size, 1, 0, ext_addr, loc_addr, length, src_stride, dst_stride, size/length); + // L1 -> L1 + errors[core_id] += test_idma_2D(core_id, size, 0, 1, loc_dst_addr, loc_addr, length, src_stride, dst_stride, size/length); } } } diff --git a/idma_tests/idma_multi_core_3d/idma_multi_core_3d.c b/idma_tests/idma_multi_core_3d/idma_multi_core_3d.c index f558b8c..fce4bc1 100644 --- a/idma_tests/idma_multi_core_3d/idma_multi_core_3d.c +++ b/idma_tests/idma_multi_core_3d/idma_multi_core_3d.c @@ -1,7 +1,7 @@ #include "idma_multi_core_3d.h" -#define MAX_BUFFER_SIZE 0x1000 #define CORE_SPACE 0x1000 +#define MAX_BUFFER_SIZE CORE_SPACE L2_DATA static uint8_t ext[MAX_BUFFER_SIZE]; L1_DATA static uint8_t loc[MAX_BUFFER_SIZE]; @@ -151,7 +151,12 @@ int main () { PRINTF ("Size: %d | Length: %d | Src_stride_2d: %d | Dst_stride_2d: %d | Num_reps_2d: %d \n", size, length, src_stride_2d, dst_stride_2d, (size/length)); PRINTF ("Src_stride_3d: %d | Dst_stride_3d: %d | Num_reps_3d: %d \n", src_stride_3d, dst_stride_3d, num_reps_3d); } - errors[core_id] += test_idma_3D(core_id, size, (core_id%2), 0, ext_addr, loc_addr, length, src_stride_2d, dst_stride_2d, (size/length), src_stride_3d, dst_stride_3d, num_reps_3d); + // L1 -> L2 + errors[core_id] += test_idma_3D(core_id, size, 0, 0, ext_addr, loc_addr, length, src_stride_2d, dst_stride_2d, (size/length), src_stride_3d, dst_stride_3d, num_reps_3d); + // L2 -> L1 + errors[core_id] += test_idma_3D(core_id, size, 1, 0, ext_addr, loc_addr, length, src_stride_2d, dst_stride_2d, (size/length), src_stride_3d, dst_stride_3d, num_reps_3d); + // L1 -> L1 transfer + errors[core_id] += test_idma_3D(core_id, size, 0, 1, loc_dst_addr, loc_addr, length, src_stride_2d, dst_stride_2d, (size/length), src_stride_3d, dst_stride_3d, num_reps_3d); synch_barrier(); } #elif MULTI_CORE_S @@ -174,7 +179,12 @@ int main () { PRINTF ("Size: %d | Length: %d | Src_stride_2d: %d | Dst_stride_2d: %d | Num_reps_2d: %d \n", size, length, src_stride_2d, dst_stride_2d, (size/length)); PRINTF ("Src_stride_3d: %d | Dst_stride_3d: %d | Num_reps_3d: %d \n", src_stride_3d, dst_stride_3d, num_reps_3d); } - errors[core_id] += test_idma_3D(core_id, size, (core_id%2), 0, ext_addr, loc_addr, length, src_stride_2d, dst_stride_2d, (size/length), src_stride_3d, dst_stride_3d, num_reps_3d); + // L1 -> L2 + errors[core_id] += test_idma_3D(core_id, size, 0, 0, ext_addr, loc_addr, length, src_stride_2d, dst_stride_2d, (size/length), src_stride_3d, dst_stride_3d, num_reps_3d); + // L2 -> L1 + errors[core_id] += test_idma_3D(core_id, size, 1, 0, ext_addr, loc_addr, length, src_stride_2d, dst_stride_2d, (size/length), src_stride_3d, dst_stride_3d, num_reps_3d); + // L1 -> L1 transfer + errors[core_id] += test_idma_3D(core_id, size, 0, 1, loc_dst_addr, loc_addr, length, src_stride_2d, dst_stride_2d, (size/length), src_stride_3d, dst_stride_3d, num_reps_3d); } } } From 20b16924a33c3f8234824f4fe5199e8ea4d7a49b Mon Sep 17 00:00:00 2001 From: Riccardo Gandolfi Date: Tue, 10 Jun 2025 15:50:12 +0200 Subject: [PATCH 67/71] Updated iDMA tests: memory allocation through pi_malloc functions and overall cleanup and reorganization --- .../idma_multi_core/gen_stimuli_idma.py | 11 +- idma_tests/idma_multi_core/idma_defines.h | 4 +- idma_tests/idma_multi_core/idma_multi_core.c | 150 +++++++----- idma_tests/idma_multi_core/transfer_sizes.h | 12 +- .../idma_multi_core_2d/gen_stimuli_idma_2d.py | 23 +- idma_tests/idma_multi_core_2d/idma_defines.h | 4 +- .../idma_multi_core_2d/idma_multi_core_2d.c | 184 +++++++------- .../idma_multi_core_2d/idma_parameters.h | 13 +- .../idma_multi_core_3d/gen_stimuli_idma_3d.py | 69 ++++++ idma_tests/idma_multi_core_3d/idma_defines.h | 4 +- .../idma_multi_core_3d/idma_multi_core_3d.c | 231 ++++++++---------- .../idma_multi_core_3d/idma_parameters.h | 11 +- 12 files changed, 405 insertions(+), 311 deletions(-) create mode 100644 idma_tests/idma_multi_core_3d/gen_stimuli_idma_3d.py diff --git a/idma_tests/idma_multi_core/gen_stimuli_idma.py b/idma_tests/idma_multi_core/gen_stimuli_idma.py index 8346165..acd9049 100644 --- a/idma_tests/idma_multi_core/gen_stimuli_idma.py +++ b/idma_tests/idma_multi_core/gen_stimuli_idma.py @@ -14,7 +14,7 @@ def write_transfer_sizes_array(f, name, arr): f.write ('unsigned int %s[] = {\n' % name) for v in arr: - random_int = random.randint(1, MAX_SIZE) + random_int = random.randint(1, TRANSFER_SIZE) f.write('%d, \n' % random_int) f.write('};\n\n') return @@ -29,13 +29,16 @@ def write_define(f, name,val): NB_TRANSFERS = random.randint(1, 10) -# Randomize between 1 and 500 the size of each transfer +# Randomize between 1 and 4096 the size of each transfer + +CORE_SPACE = 1024 +TRANSFER_SIZE = 512 -MAX_SIZE = 1024 sizes = [None] * NB_TRANSFERS f_sizes = open('transfer_sizes.h', 'w') f_defines = open ('idma_defines.h', 'w') write_transfer_sizes_array(f_sizes, 'sizes', sizes) -write_define(f_defines, 'NB_TRANSFERS', NB_TRANSFERS) \ No newline at end of file +write_define(f_defines, 'NB_TRANSFERS', NB_TRANSFERS) +write_define(f_defines, 'CORE_SPACE', CORE_SPACE) diff --git a/idma_tests/idma_multi_core/idma_defines.h b/idma_tests/idma_multi_core/idma_defines.h index 5deb06f..ec08071 100644 --- a/idma_tests/idma_multi_core/idma_defines.h +++ b/idma_tests/idma_multi_core/idma_defines.h @@ -1,2 +1,4 @@ -#define NB_TRANSFERS 5 +#define NB_TRANSFERS 7 + +#define CORE_SPACE 1024 diff --git a/idma_tests/idma_multi_core/idma_multi_core.c b/idma_tests/idma_multi_core/idma_multi_core.c index 6276ba5..554d157 100644 --- a/idma_tests/idma_multi_core/idma_multi_core.c +++ b/idma_tests/idma_multi_core/idma_multi_core.c @@ -1,55 +1,46 @@ #include "idma_multi_core.h" -#define MAX_BUFFER_SIZE 0x1000 -#define CORE_SPACE 0x1000 - -L2_DATA static uint8_t ext[MAX_BUFFER_SIZE]; -L1_DATA static uint8_t loc[MAX_BUFFER_SIZE]; -L1_DATA static uint8_t loc_dst[MAX_BUFFER_SIZE]; +#define TOT_SIZE 8 * CORE_SPACE int errors[8] = {0}; int test_status = 0; -int test_idma_1D (int core_id, uint32_t size, int ext2loc, int loc2loc, uint32_t ext_addr, uint32_t tcdm_addr) { +uint32_t l1_addr[8] = {0}; +uint32_t l1_dst_addr[8] = {0}; +uint32_t l2_addr[8] = {0}; + +int test_idma_1D (int core_id, uint32_t size, int ext2loc, int loc2loc) { volatile uint8_t *src_ptr, *dst_ptr; int error = 0; + PRINTF ("Size: %d \n", size); + if (loc2loc == 1) { // L1 to L1 transfer - src_ptr = (uint8_t*) tcdm_addr; - dst_ptr = (uint8_t*) ext_addr; + src_ptr = (uint8_t*) l1_addr[core_id]; + dst_ptr = (uint8_t*) l1_dst_addr[core_id]; + } else if (ext2loc == 1) { + // L2 to L1 transfer + src_ptr = (uint8_t*) l2_addr[core_id]; + dst_ptr = (uint8_t*) l1_addr[core_id]; + } else { + // L1 to L2 transfer + src_ptr = (uint8_t*) l1_addr[core_id]; + dst_ptr = (uint8_t*) l2_addr[core_id]; + } - // Fill source region with test data - for (int i = 0; i < size; i++) { - src_ptr[i] = (uint8_t)(i & 0xFF); - } + // Fill source region with test data + for (int i = 0; i < size; i++) { + src_ptr[i] = (uint8_t)(i & 0xFF); + } + if (loc2loc == 1) { plp_cl_dma_wait_toL1(pulp_cl_idma_L1ToL1((unsigned int) src_ptr, (unsigned int) dst_ptr, size)); + } else if (ext2loc == 1) { + plp_cl_dma_wait_toL1(pulp_cl_idma_L2ToL1((unsigned int) src_ptr, (unsigned int) dst_ptr, size)); } else { - if (ext2loc == 1) { - // L2 to L1 transfer - src_ptr = (uint8_t*) ext_addr; - dst_ptr = (uint8_t*) tcdm_addr; - - // Fill source region with test data - for (int i = 0; i < size; i++) { - src_ptr[i] = (uint8_t)(i & 0xFF); - } - - plp_cl_dma_wait_toL1(pulp_cl_idma_L2ToL1((unsigned int) src_ptr, (unsigned int) dst_ptr, size)); - } else { - // L1 to L2 transfer - src_ptr = (uint8_t*) tcdm_addr; - dst_ptr = (uint8_t*) ext_addr; - - // Fill source region with test data - for (int i = 0; i < size; i++) { - src_ptr[i] = (uint8_t)(i & 0xFF); - } - - plp_cl_dma_wait_toL2(pulp_cl_idma_L1ToL2((unsigned int) src_ptr, (unsigned int) dst_ptr, size)); - } + plp_cl_dma_wait_toL2(pulp_cl_idma_L1ToL2((unsigned int) src_ptr, (unsigned int) dst_ptr, size)); } // Check the results @@ -69,20 +60,56 @@ int test_idma_1D (int core_id, uint32_t size, int ext2loc, int loc2loc, uint32_t return error; } -int main () { +void allocate_mem_to_cores () { int core_id = rt_core_id(); - unsigned int size; - uint32_t ext_addr; - uint32_t loc_addr; - uint32_t loc_dst_addr; + // Pre-allocate TOT_SIZE = 8 * CORE_SPACE: then we split this window to assign + // each core its available space for iDMA transfers + // pi_l1_malloc starts allocating from 0x10004008 in L1 + // pi_l2_malloc starts allocating from 0x1c000a60 in L2 + + if (core_id == 0) { + l1_addr[0] = (uint32_t) pi_l1_malloc(0, TOT_SIZE); + l1_dst_addr[0] = (uint32_t) pi_l1_malloc(0, TOT_SIZE); + l2_addr[0] = (uint32_t) pi_l2_malloc(TOT_SIZE); + } + + // The following synch_barrier is needed so that + // no core can assign its address range until the mallocs are executed + synch_barrier(); + + l1_addr[core_id] = l1_addr[0] + core_id * CORE_SPACE; + l1_dst_addr[core_id] = l1_dst_addr[0] + core_id * CORE_SPACE; + l2_addr[core_id] = l2_addr[0] + core_id * CORE_SPACE; - ext_addr = (uint32_t) ext + core_id * CORE_SPACE; - loc_addr = (uint32_t) loc + core_id * CORE_SPACE; - loc_dst_addr = (uint32_t) loc_dst + core_id * CORE_SPACE; + // The following synch_barrier is needed so that + // no core can start executing until all address ranges have been assigned + synch_barrier(); + +} +void free_allocated_memory () { + + synch_barrier(); + // Only Core 0 takes care of freeing the allocated memory, since it's the one + // allocated it at the beginning of the test if (core_id == 0) { - PRINTF ("L1 addr: %8x | L1 dst addr: %8x | L2 addr: %8x \n", loc_addr, loc_dst_addr, ext_addr); + pi_l1_free(0, l1_addr, TOT_SIZE); + pi_l1_free(0, l1_dst_addr, TOT_SIZE); + pi_l2_free(l2_addr, TOT_SIZE); + } +} + +int main () { + int core_id = rt_core_id(); + + allocate_mem_to_cores(); + + if (core_id == 0){ + for (int i = 0; i < 8; i++){ + PRINTF ("CORE: %d \n", i); + PRINTF ("loc_addr: %8x | loc_dst_addr: %8x | ext_addr: %8x \n", l1_addr[i], l1_dst_addr[i], l2_addr[i]); + } } #ifdef MULTI_CORE_P @@ -91,16 +118,13 @@ int main () { PRINTF ("MULTI CORE PARALLEL MODE \n"); } for (int k = 0; k < NB_TRANSFERS; k++) { - size = sizes[k]; - if (core_id == 0) { - PRINTF ("Transfer: %d | Size: %8x \n", k, size); - } + unsigned int size = sizes[k]; // L1 -> L2 - errors[core_id] += test_idma_1D(core_id, size, 0, 0, ext_addr, loc_addr); + errors[core_id] += test_idma_1D(core_id, size, 0, 0); // L2 -> L1 - errors[core_id] += test_idma_1D(core_id, size, 1, 0, ext_addr, loc_addr); + errors[core_id] += test_idma_1D(core_id, size, 1, 0); // L1 -> L1 - errors[core_id] += test_idma_1D(core_id, size, 0, 1, loc_dst_addr, loc_addr); + errors[core_id] += test_idma_1D(core_id, size, 0, 1); synch_barrier(); } #elif MULTI_CORE_S @@ -111,16 +135,13 @@ int main () { for (int i = 0; i < 8; i++) { if (core_id == i) { for (int k = 0; k < NB_TRANSFERS; k++) { - size = sizes[k]; - if (core_id == 0) { - PRINTF ("Transfer: %d | Size: %8x \n", k, size); - } + unsigned int size = sizes[k]; // L1 -> L2 - errors[core_id] += test_idma_1D(core_id, size, 0, 0, ext_addr, loc_addr); + errors[core_id] += test_idma_1D(core_id, size, 0, 0); // L2 -> L1 - errors[core_id] += test_idma_1D(core_id, size, 1, 0, ext_addr, loc_addr); + errors[core_id] += test_idma_1D(core_id, size, 1, 0); // L1 -> L1 - errors[core_id] += test_idma_1D(core_id, size, 0, 1, loc_dst_addr, loc_addr); + errors[core_id] += test_idma_1D(core_id, size, 0, 1); } } } @@ -129,14 +150,13 @@ int main () { // SINGLE CORE MODE: just core 0 uses the iDMA PRINTF ("Just using Core 0 \n"); for (int k = 0; k < NB_TRANSFERS; k++) { - size = sizes[k]; - PRINTF ("Transfer: %d | Size: %8x \n", k, size); + unsigned int size = sizes[k]; PRINTF ("L1 to L2 \n"); - errors[core_id] += test_idma_1D(core_id, size, 0, 0, ext_addr, loc_addr); + errors[core_id] += test_idma_1D(core_id, size, 0, 0); PRINTF ("L2 to L1 \n"); - errors[core_id] += test_idma_1D(core_id, size, 1, 0, ext_addr, loc_addr); + errors[core_id] += test_idma_1D(core_id, size, 1, 0); PRINTF ("L1 to L1 \n"); - errors[core_id] += test_idma_1D(core_id, size, 0, 1, loc_dst_addr, loc_addr); + errors[core_id] += test_idma_1D(core_id, size, 0, 1); } } #endif @@ -150,5 +170,7 @@ int main () { } } + free_allocated_memory(); + return test_status; } diff --git a/idma_tests/idma_multi_core/transfer_sizes.h b/idma_tests/idma_multi_core/transfer_sizes.h index 770b71b..0d66ee7 100644 --- a/idma_tests/idma_multi_core/transfer_sizes.h +++ b/idma_tests/idma_multi_core/transfer_sizes.h @@ -1,8 +1,10 @@ unsigned int sizes[] = { -493, -430, -52, -67, -112, +364, +440, +148, +65, +458, +479, +48, }; diff --git a/idma_tests/idma_multi_core_2d/gen_stimuli_idma_2d.py b/idma_tests/idma_multi_core_2d/gen_stimuli_idma_2d.py index a159377..06dc47a 100644 --- a/idma_tests/idma_multi_core_2d/gen_stimuli_idma_2d.py +++ b/idma_tests/idma_multi_core_2d/gen_stimuli_idma_2d.py @@ -24,11 +24,9 @@ def write_transfer_parameters_array(f, name, arr): f.write ('TransferParameters %s[] = {\n' % name) for v in arr: length = random.randint(1, MAX_LENGTH) - size = random.randint(1, MAX_SIZE) + length - src_stride = random.randint(1, MAX_STRIDE) - # Computing dst_stride as random + length so that we do not overwrite data - # when iDMA is executing - dst_stride = random.randint(1, MAX_STRIDE)+length + size = random.randint(1, TRANSFER_SIZE) + length + src_stride = random.randint(1, MAX_STRIDE) + length + dst_stride = random.randint(1, MAX_STRIDE) + length f.write('{%d, %d, %d, %d},\n' % (size, length, src_stride, dst_stride)) f.write('};\n\n') return @@ -37,17 +35,17 @@ def write_define(f, name,val): f.write('#define %s %d\n\n' % (name,val)) return -# Randomize between 1 and 50 the number of 2D iDMA transfers to be performed -# For each transfer we set a size in bytes (the number of 32-bits elements that -# will be moved is size / sizeof(uint32_t)). +# Randomize between 1 and 10 the number of 2D iDMA transfers to be performed +# For each transfer we set a size in bytes. NB_TRANSFERS = random.randint(1, 10) -# Randomize between 1 and 500 the size of each transfer +# Randomize between 1 and 512 the size of each transfer -MAX_SIZE = 50 -MAX_STRIDE = 10 -MAX_LENGTH = 10 +CORE_SPACE = 1024 +TRANSFER_SIZE = 512 +MAX_STRIDE = 10 +MAX_LENGTH = 10 transfer_params = [None] * NB_TRANSFERS @@ -55,6 +53,7 @@ def write_define(f, name,val): f_defines = open('idma_defines.h', 'w') write_define(f_defines, 'NB_TRANSFERS', NB_TRANSFERS) +write_define(f_defines, 'CORE_SPACE', CORE_SPACE) write_transfer_parameters_struct(f_params, 'TransferParameters') write_transfer_parameters_array(f_params, 'transfer_params', transfer_params) diff --git a/idma_tests/idma_multi_core_2d/idma_defines.h b/idma_tests/idma_multi_core_2d/idma_defines.h index d3fd723..ec08071 100644 --- a/idma_tests/idma_multi_core_2d/idma_defines.h +++ b/idma_tests/idma_multi_core_2d/idma_defines.h @@ -1,2 +1,4 @@ -#define NB_TRANSFERS 6 +#define NB_TRANSFERS 7 + +#define CORE_SPACE 1024 diff --git a/idma_tests/idma_multi_core_2d/idma_multi_core_2d.c b/idma_tests/idma_multi_core_2d/idma_multi_core_2d.c index 2d727e6..d8ee7a5 100644 --- a/idma_tests/idma_multi_core_2d/idma_multi_core_2d.c +++ b/idma_tests/idma_multi_core_2d/idma_multi_core_2d.c @@ -1,65 +1,59 @@ #include "idma_multi_core_2d.h" -#define CORE_SPACE 0x500 -#define MAX_BUFFER_SIZE CORE_SPACE - -L2_DATA static uint8_t ext[MAX_BUFFER_SIZE]; -L1_DATA static uint8_t loc[MAX_BUFFER_SIZE]; -L1_DATA static uint8_t loc_dst[MAX_BUFFER_SIZE]; +#define TOT_SIZE 8 * CORE_SPACE int errors[8] = {0}; int test_status = 0; -int test_idma_2D (int core_id, uint32_t size, int ext2loc, int loc2loc, uint32_t ext_addr, uint32_t tcdm_addr, unsigned int length, unsigned int src_stride, unsigned int dst_stride, unsigned int num_reps) { +uint32_t l1_addr[8] = {0}; +uint32_t l1_dst_addr[8] = {0}; +uint32_t l2_addr[8] = {0}; + +int test_idma_2D (int core_id, TransferParameters transfer, int ext2loc, int loc2loc) { volatile uint8_t *src_ptr, *dst_ptr; int error = 0; int offset_2d; + + uint32_t src_stride = transfer.src_stride; + uint32_t dst_stride = transfer.dst_stride; + uint32_t size = transfer.size; + uint32_t length = transfer.length; + uint32_t num_reps = size/length; + + PRINTF ("Size: %d | Length: %d | Src_stride: %d | Dst_stride: %d | Num_reps: %d \n", + size, length, src_stride, dst_stride, num_reps); + if (loc2loc == 1) { // L1 to L1 transfer - src_ptr = (uint8_t*) tcdm_addr; - dst_ptr = (uint8_t*) ext_addr; - - // Fill source region with test data - for (int q = 0; q < num_reps; q++) { - offset_2d = q * src_stride; - for (int i = 0; i < length; i++) { - src_ptr[i+offset_2d] = (uint8_t)(i & 0xFF); - } - } - plp_cl_dma_wait_toL1(pulp_cl_idma_L1ToL1_2d((unsigned int)src_ptr, (unsigned int)dst_ptr, length, src_stride, dst_stride, num_reps)); + src_ptr = (uint8_t*) l1_addr[core_id]; + dst_ptr = (uint8_t*) l1_dst_addr[core_id]; + } else if (ext2loc == 1) { + // L2 to L1 transfer + src_ptr = (uint8_t*) l2_addr[core_id]; + dst_ptr = (uint8_t*) l1_addr[core_id]; } else { - if (ext2loc == 1) { - - // L2 to L1 transfer - src_ptr = (uint8_t*) ext_addr; - dst_ptr = (uint8_t*) tcdm_addr; + // L1 to L2 transfer + src_ptr = (uint8_t*) l1_addr[core_id]; + dst_ptr = (uint8_t*) l2_addr[core_id]; + } - // Fill source region with test data - for (int q = 0; q < num_reps; q++) { - offset_2d = q * src_stride; - for (int i = 0; i < length; i++) { - src_ptr[i+offset_2d] = (uint8_t)(i & 0xFF); - } - } - plp_cl_dma_wait_toL1(pulp_cl_idma_L2ToL1_2d((unsigned int)src_ptr, (unsigned int)dst_ptr, length, src_stride, dst_stride, num_reps)); - } else { - - // L1 to L2 transfer - src_ptr = (uint8_t*) tcdm_addr; - dst_ptr = (uint8_t*) ext_addr; - - // Fill source region with test data - for (int q = 0; q < num_reps; q++) { - offset_2d = q * src_stride; - for (int i = 0; i < length; i++) { - src_ptr[i+offset_2d] = (uint8_t)(i & 0xFF); - } - } - plp_cl_dma_wait_toL2(pulp_cl_idma_L1ToL2_2d((unsigned int)src_ptr, (unsigned int)dst_ptr, length, src_stride, dst_stride, num_reps)); + // Fill source region with test data + for (int q = 0; q < num_reps; q++) { + offset_2d = q * src_stride; + for (int i = 0; i < length; i++) { + src_ptr[i+offset_2d] = (uint8_t)(i & 0xFF); } } + if (loc2loc == 1) { + plp_cl_dma_wait_toL1(pulp_cl_idma_L1ToL1_2d((unsigned int)src_ptr, (unsigned int)dst_ptr, length, src_stride, dst_stride, num_reps)); + } if (ext2loc == 1) { + plp_cl_dma_wait_toL1(pulp_cl_idma_L2ToL1_2d((unsigned int)src_ptr, (unsigned int)dst_ptr, length, src_stride, dst_stride, num_reps)); + } else { + plp_cl_dma_wait_toL2(pulp_cl_idma_L1ToL2_2d((unsigned int)src_ptr, (unsigned int)dst_ptr, length, src_stride, dst_stride, num_reps)); + } + // Check the results for (unsigned int rep = 0; rep < num_reps; rep++) { @@ -72,7 +66,8 @@ int test_idma_2D (int core_id, uint32_t size, int ext2loc, int loc2loc, uint32_t if (expected != actual) { error++; if (core_id == 0) { - PRINTF ("ERROR: expected[%d] @%8x = %8x vs actual[%d] @%8x = %8x \n", src_offset + i, &src_ptr[src_offset + i], expected, dst_offset+i, &dst_ptr[dst_offset + i], actual); + PRINTF ("ERROR: expected[%d] @%8x = %8x vs actual[%d] @%8x = %8x \n", src_offset + i, &src_ptr[src_offset + i], + expected, dst_offset+i, &dst_ptr[dst_offset + i], actual); } } @@ -82,21 +77,57 @@ int test_idma_2D (int core_id, uint32_t size, int ext2loc, int loc2loc, uint32_t return error; } +void allocate_mem_to_cores () { + int core_id = rt_core_id(); + + // Pre-allocate TOT_SIZE = 8 * CORE_SPACE: then we split this window to assign + // each core its available space for iDMA transfers + // pi_l1_malloc starts allocating from 0x10004008 in L1 + // pi_l2_malloc starts allocating from 0x1c000a60 in L2 + + if (core_id == 0) { + l1_addr[0] = (uint32_t) pi_l1_malloc(0, TOT_SIZE); + l1_dst_addr[0] = (uint32_t) pi_l1_malloc(0, TOT_SIZE); + l2_addr[0] = (uint32_t) pi_l2_malloc(TOT_SIZE); + } + + // The following synch_barrier is needed so that + // no core can assign its address range until the mallocs are executed + synch_barrier(); + + l1_addr[core_id] = l1_addr[0] + core_id * CORE_SPACE; + l1_dst_addr[core_id] = l1_dst_addr[0] + core_id * CORE_SPACE; + l2_addr[core_id] = l2_addr[0] + core_id * CORE_SPACE; + + // The following synch_barrier is needed so that + // no core can start executing until all address ranges have been assigned + synch_barrier(); + +} + +void free_allocated_memory () { + + synch_barrier(); + // Only Core 0 takes care of freeing the allocated memory, since it's the one + // allocated it at the beginning of the test + if (core_id == 0) { + pi_l1_free(0, l1_addr, TOT_SIZE); + pi_l1_free(0, l1_dst_addr, TOT_SIZE); + pi_l2_free(l2_addr, TOT_SIZE); + } +} + int main () { int core_id = rt_core_id(); - unsigned int size, length, src_stride, dst_stride; - uint32_t ext_addr; - uint32_t loc_addr; - uint32_t loc_dst_addr; - - ext_addr = (uint32_t)ext + core_id * CORE_SPACE; - loc_addr = (uint32_t)loc + core_id * CORE_SPACE; - loc_dst_addr = (uint32_t)loc_dst + core_id * CORE_SPACE; + allocate_mem_to_cores(); if (core_id == 0){ - PRINTF ("loc_addr: %8x | loc_dst_addr: %8x | ext_addr: %8x \n", loc_addr, loc_dst_addr, ext_addr); + for (int i = 0; i < 8; i++){ + PRINTF ("CORE: %d \n", i); + PRINTF ("loc_addr: %8x | loc_dst_addr: %8x | ext_addr: %8x \n", l1_addr[i], l1_dst_addr[i], l2_addr[i]); + } } #ifdef MULTI_CORE_P @@ -105,19 +136,12 @@ int main () { PRINTF ("MULTI CORE PARALLEL MODE \n"); } for (int k = 0; k < NB_TRANSFERS; k++) { - size = transfer_params[k].size; - length = transfer_params[k].length; - src_stride = transfer_params[k].src_stride; - dst_stride = transfer_params[k].dst_stride; - if (core_id == 0) { - PRINTF ("Transfer: %d | Size: %d | Length: %d | Src_stride: %d | Dst_stride: %d | Num_reps: %d \n", k, size, length, src_stride, dst_stride, (size/length)); - } // L1 -> L2 - errors[core_id] += test_idma_2D(core_id, size, 0, 0, ext_addr, loc_addr, length, src_stride, dst_stride, size/length); + errors[core_id] += test_idma_2D(core_id, transfer_params[k], 0, 0); // L2 -> L1 - errors[core_id] += test_idma_2D(core_id, size, 1, 0, ext_addr, loc_addr, length, src_stride, dst_stride, size/length); + errors[core_id] += test_idma_2D(core_id, transfer_params[k], 1, 0); // L1 -> L1 - errors[core_id] += test_idma_2D(core_id, size, 0, 1, loc_dst_addr, loc_addr, length, src_stride, dst_stride, size/length); + errors[core_id] += test_idma_2D(core_id, transfer_params[k], 0, 1); synch_barrier(); } #elif MULTI_CORE_S @@ -128,42 +152,30 @@ int main () { for (int i = 0; i < 8; i++) { if (core_id == i) { for (int k = 0; k < NB_TRANSFERS; k++) { - size = transfer_params[k].size; - length = transfer_params[k].length; - src_stride = transfer_params[k].src_stride; - dst_stride = transfer_params[k].dst_stride; - if (core_id == 0) { - PRINTF ("Transfer: %d | Size: %d | Length: %d | Src_stride: %d | Dst_stride: %d | Num_reps: %d \n", k, size, length, src_stride, dst_stride, (size/length)); - } // L1 -> L2 - errors[core_id] += test_idma_2D(core_id, size, 0, 0, ext_addr, loc_addr, length, src_stride, dst_stride, size/length); + errors[core_id] += test_idma_2D(core_id, transfer_params[k], 0, 0); // L2 -> L1 - errors[core_id] += test_idma_2D(core_id, size, 1, 0, ext_addr, loc_addr, length, src_stride, dst_stride, size/length); + errors[core_id] += test_idma_2D(core_id, transfer_params[k], 1, 0); // L1 -> L1 - errors[core_id] += test_idma_2D(core_id, size, 0, 1, loc_dst_addr, loc_addr, length, src_stride, dst_stride, size/length); + errors[core_id] += test_idma_2D(core_id, transfer_params[k], 0, 1); } } - } + } #else // SINGLE CORE MODE: just core 0 uses the iDMA if (core_id == 0) { PRINTF ("SINGLE CORE MODE \n"); for (int k = 0; k < NB_TRANSFERS; k++) { - size = transfer_params[k].size; - length = transfer_params[k].length; - src_stride = transfer_params[k].src_stride; - dst_stride = transfer_params[k].dst_stride; - PRINTF ("Transfer: %d \n", k); - PRINTF ("Size: %d | Length: %d | Src_stride: %d | Dst_stride: %d | Num_reps: %d \n", size, length, src_stride, dst_stride, (size/length)); PRINTF ("L1 to L2 \n"); - errors[core_id] += test_idma_2D(core_id, size, 0, 0, ext_addr, loc_addr, length, src_stride, dst_stride, (size/length)); + errors[core_id] += test_idma_2D(core_id, transfer_params[k], 0, 0); PRINTF ("L2 to L1 \n"); - errors[core_id] += test_idma_2D(core_id, size, 1, 0, ext_addr, loc_addr, length, src_stride, dst_stride, (size/length)); + errors[core_id] += test_idma_2D(core_id, transfer_params[k], 1, 0); PRINTF ("L1 to L1 \n"); - errors[core_id] += test_idma_2D(core_id, size, 0, 1, loc_dst_addr, loc_addr, length, src_stride, dst_stride, (size/length)); + errors[core_id] += test_idma_2D(core_id, transfer_params[k], 0, 1); } } #endif + if (core_id == 0) { for (int i = 0; i<8; i++) { if (errors[i] !=0) { @@ -173,5 +185,7 @@ int main () { } } + free_allocated_memory(); + return test_status; } \ No newline at end of file diff --git a/idma_tests/idma_multi_core_2d/idma_parameters.h b/idma_tests/idma_multi_core_2d/idma_parameters.h index 0bdd48f..07676de 100644 --- a/idma_tests/idma_multi_core_2d/idma_parameters.h +++ b/idma_tests/idma_multi_core_2d/idma_parameters.h @@ -6,11 +6,12 @@ typedef struct { } TransferParameters; TransferParameters transfer_params[] = { - {4, 1, 10, 22}, - {80, 8, 9, 9}, -{21, 11, 1, 19}, -{40, 11, 17, 16}, -{68, 7, 19, 20}, -{42, 3, 5, 22}, +{34, 1, 3, 9}, +{26, 4, 6, 5}, +{87, 8, 18, 9}, +{115, 9, 18, 11}, +{316, 4, 11, 6}, +{93, 10, 15, 18}, +{358, 4, 6, 11}, }; diff --git a/idma_tests/idma_multi_core_3d/gen_stimuli_idma_3d.py b/idma_tests/idma_multi_core_3d/gen_stimuli_idma_3d.py new file mode 100644 index 0000000..d22e129 --- /dev/null +++ b/idma_tests/idma_multi_core_3d/gen_stimuli_idma_3d.py @@ -0,0 +1,69 @@ +#!/usr/bin/env python + +import sys +import random +import argparse +import math +import re + + +parser = argparse.ArgumentParser(description='Generate stimuli for iDMA simple transfer') + +args = parser.parse_args() + +def write_transfer_parameters_struct(f, name): + f.write ('typedef struct {\n') + f.write (' unsigned int size;\n') + f.write (' unsigned int length;\n') + f.write (' unsigned int src_stride_2d;\n') + f.write (' unsigned int dst_stride_2d;\n') + f.write (' unsigned int src_stride_3d;\n') + f.write (' unsigned int dst_stride_3d;\n') + f.write (' unsigned int num_reps_3d;\n') + f.write ('} %s;\n\n' % name) + return + +def write_transfer_parameters_array(f, name, arr): + f.write ('TransferParameters %s[] = {\n' % name) + for v in arr: + length = random.randint(1, MAX_LENGTH) + size = random.randint(1, TRANSFER_SIZE) + length + src_stride_2d = random.randint(1, MAX_STRIDE) + length + dst_stride_2d = random.randint(1, MAX_STRIDE) + length + src_stride_3d = random.randint(1, MAX_STRIDE) + length + dst_stride_3d = random.randint(1, MAX_STRIDE) + length + num_reps_3d = random.randint(1, MAX_REPS) + + f.write('{%d, %d, %d, %d, %d, %d, %d},\n' % (size, length, src_stride_2d, dst_stride_2d, src_stride_3d, dst_stride_3d, num_reps_3d)) + f.write('};\n\n') + return + +def write_define(f, name,val): + f.write('#define %s %d\n\n' % (name,val)) + return + +# Randomize between 1 and 10 the number of 3D iDMA transfers to be performed +# For each transfer we set a size in bytes. + +NB_TRANSFERS = random.randint(1, 10) + +# Randomize between 1 and 512 the size of each transfer + +CORE_SPACE = 2048 +TRANSFER_SIZE = 128 +MAX_STRIDE = 5 +MAX_LENGTH = 10 +MAX_REPS = 5 + +transfer_params = [None] * NB_TRANSFERS + +f_params = open('idma_parameters.h', 'w') +f_defines = open('idma_defines.h', 'w') + +write_define(f_defines, 'NB_TRANSFERS', NB_TRANSFERS) +write_define(f_defines, 'CORE_SPACE', CORE_SPACE) +write_transfer_parameters_struct(f_params, 'TransferParameters') +write_transfer_parameters_array(f_params, 'transfer_params', transfer_params) + +f_params.close() +f_defines.close() \ No newline at end of file diff --git a/idma_tests/idma_multi_core_3d/idma_defines.h b/idma_tests/idma_multi_core_3d/idma_defines.h index 0ac7b37..1440b19 100644 --- a/idma_tests/idma_multi_core_3d/idma_defines.h +++ b/idma_tests/idma_multi_core_3d/idma_defines.h @@ -1 +1,3 @@ -#define NB_TRANSFERS 8 +#define NB_TRANSFERS 3 + +#define CORE_SPACE 2048 diff --git a/idma_tests/idma_multi_core_3d/idma_multi_core_3d.c b/idma_tests/idma_multi_core_3d/idma_multi_core_3d.c index fce4bc1..2e26ed5 100644 --- a/idma_tests/idma_multi_core_3d/idma_multi_core_3d.c +++ b/idma_tests/idma_multi_core_3d/idma_multi_core_3d.c @@ -1,86 +1,66 @@ #include "idma_multi_core_3d.h" -#define CORE_SPACE 0x1000 -#define MAX_BUFFER_SIZE CORE_SPACE - -L2_DATA static uint8_t ext[MAX_BUFFER_SIZE]; -L1_DATA static uint8_t loc[MAX_BUFFER_SIZE]; -L1_DATA static uint8_t loc_dst[MAX_BUFFER_SIZE]; +#define TOT_SIZE 8 * CORE_SPACE int errors[8] = {0}; int test_status = 0; -int test_idma_3D (int core_id, uint32_t size, int ext2loc, int loc2loc, uint32_t ext_addr, uint32_t tcdm_addr, unsigned int length, unsigned int src_stride_2d, unsigned int dst_stride_2d, unsigned int num_reps, unsigned int src_stride_3d, unsigned int dst_stride_3d, unsigned int num_reps_3d) { +uint32_t l1_addr[8] = {0}; +uint32_t l1_dst_addr[8] = {0}; +uint32_t l2_addr[8] = {0}; + +int test_idma_3D (int core_id, TransferParameters transfer, int ext2loc, int loc2loc) { volatile uint8_t *src_ptr, *dst_ptr; - unsigned int offset_3d, offset_2d; + unsigned int offset_3d = 0; + unsigned int offset_2d = 0; int error = 0; + uint32_t src_stride_2d = transfer.src_stride_2d; + uint32_t dst_stride_2d = transfer.dst_stride_2d; + uint32_t src_stride_3d = transfer.src_stride_3d; + uint32_t dst_stride_3d = transfer.dst_stride_3d; + uint32_t size = transfer.size; + uint32_t length = transfer.length; + uint32_t num_reps = size/length; + uint32_t num_reps_3d = transfer.num_reps_3d; + if (loc2loc == 1) { // L1 to L1 transfer - src_ptr = (uint8_t*) tcdm_addr; - dst_ptr = (uint8_t*) ext_addr; + src_ptr = (uint8_t*) l1_addr[core_id]; + dst_ptr = (uint8_t*) l1_dst_addr[core_id]; + } else if (ext2loc == 1) { + // L2 to L1 transfer + src_ptr = (uint8_t*) l2_addr[core_id]; + dst_ptr = (uint8_t*) l1_addr[core_id]; + } else { + // L1 to L2 transfer + src_ptr = (uint8_t*) l1_addr[core_id]; + dst_ptr = (uint8_t*) l2_addr[core_id]; + } - // Fill source region with test data - offset_2d = 0; - offset_3d = 0; - for (int j = 0; j < num_reps_3d; j++) { - for (int q = 0; q < num_reps; q++) { - for (int i = 0; i < length; i++) { - src_ptr[i+offset_2d+offset_3d] = (uint8_t)(i & 0xFF); - } - offset_2d += src_stride_2d; + // Fill source region with test data + for (int j = 0; j < num_reps_3d; j++) { + for (int q = 0; q < num_reps; q++) { + for (int i = 0; i < length; i++) { + src_ptr[i+offset_2d+offset_3d] = (uint8_t)(i & 0xFF); } - offset_2d = 0; - offset_3d += (num_reps-1) * src_stride_2d + src_stride_3d; + offset_2d += src_stride_2d; } + offset_2d = 0; + offset_3d += (num_reps-1) * src_stride_2d + src_stride_3d; + } - plp_cl_dma_wait_toL1(pulp_cl_idma_L1ToL1_3d((unsigned int)src_ptr, (unsigned int)dst_ptr, length, src_stride_2d, dst_stride_2d, num_reps, src_stride_3d, dst_stride_3d, num_reps_3d)); + if (loc2loc == 1) { + plp_cl_dma_wait_toL1(pulp_cl_idma_L1ToL1_3d((unsigned int)src_ptr, (unsigned int)dst_ptr, length, src_stride_2d, dst_stride_2d, num_reps, + src_stride_3d, dst_stride_3d, num_reps_3d)); + } else if (ext2loc == 1) { + plp_cl_dma_wait_toL1(pulp_cl_idma_L2ToL1_3d((unsigned int)src_ptr, (unsigned int)dst_ptr, length, src_stride_2d, dst_stride_2d, num_reps, + src_stride_3d, dst_stride_3d, num_reps_3d)); } else { - if (ext2loc == 1) { - - // L2 to L1 transfer - src_ptr = (uint8_t*) ext_addr; - dst_ptr = (uint8_t*) tcdm_addr; - - // Fill source region with test data - offset_2d = 0; - offset_3d = 0; - for (int j = 0; j < num_reps_3d; j++) { - for (int q = 0; q < num_reps; q++) { - for (int i = 0; i < length; i++) { - src_ptr[i+offset_2d+offset_3d] = (uint8_t)(i & 0xFF); - } - offset_2d += src_stride_2d; - } - offset_2d = 0; - offset_3d += (num_reps-1) * src_stride_2d + src_stride_3d; - } - - plp_cl_dma_wait_toL1(pulp_cl_idma_L2ToL1_3d((unsigned int)src_ptr, (unsigned int)dst_ptr, length, src_stride_2d, dst_stride_2d, num_reps, src_stride_3d, dst_stride_3d, num_reps_3d)); - } else { - - // L1 to L2 transfer - src_ptr = (uint8_t*) tcdm_addr; - dst_ptr = (uint8_t*) ext_addr; - - // Fill source region with test data - offset_2d = 0; - offset_3d = 0; - for (int j = 0; j < num_reps_3d; j++) { - for (int q = 0; q < num_reps; q++) { - for (int i = 0; i < length; i++) { - src_ptr[i+offset_2d+offset_3d] = (uint8_t)(i & 0xFF); - } - offset_2d += src_stride_2d; - } - offset_2d = 0; - offset_3d += (num_reps-1) * src_stride_2d + src_stride_3d; - } - - plp_cl_dma_wait_toL2(pulp_cl_idma_L1ToL2_3d((unsigned int)src_ptr, (unsigned int)dst_ptr, length, src_stride_2d, dst_stride_2d, num_reps, src_stride_3d, dst_stride_3d, num_reps_3d)); - } + plp_cl_dma_wait_toL2(pulp_cl_idma_L1ToL2_3d((unsigned int)src_ptr, (unsigned int)dst_ptr, length, src_stride_2d, dst_stride_2d, num_reps, + src_stride_3d, dst_stride_3d, num_reps_3d)); } // Check the results @@ -97,7 +77,8 @@ int test_idma_3D (int core_id, uint32_t size, int ext2loc, int loc2loc, uint32_t if (expected != actual) { if (core_id == 0) { - PRINTF ("ERROR: expected @%8x[%d] = %8x vs actual @%8x[%d] = %8x \n", &src_ptr[src_offset_2d + src_offset_3d + i], src_offset_2d + src_offset_3d + i, expected, &dst_ptr[dst_offset_2d + dst_offset_3d + i], dst_offset_2d + dst_offset_3d + i, actual); + PRINTF ("ERROR: expected @%8x[%d] = %8x vs actual @%8x[%d] = %8x \n", &src_ptr[src_offset_2d + src_offset_3d + i], src_offset_2d + src_offset_3d + i, + expected, &dst_ptr[dst_offset_2d + dst_offset_3d + i], dst_offset_2d + dst_offset_3d + i, actual); } error++; } @@ -114,22 +95,57 @@ int test_idma_3D (int core_id, uint32_t size, int ext2loc, int loc2loc, uint32_t return error; } +void allocate_mem_to_cores () { + int core_id = rt_core_id(); + + // Pre-allocate TOT_SIZE = 8 * CORE_SPACE: then we split this window to assign + // each core its available space for iDMA transfers + // pi_l1_malloc starts allocating from 0x10004008 in L1 + // pi_l2_malloc starts allocating from 0x1c000a60 in L2 + + if (core_id == 0) { + l1_addr[0] = (uint32_t) pi_l1_malloc(0, TOT_SIZE); + l1_dst_addr[0] = (uint32_t) pi_l1_malloc(0, TOT_SIZE); + l2_addr[0] = (uint32_t) pi_l2_malloc(TOT_SIZE); + } + + // The following synch_barrier is needed so that + // no core can assign its address range until the mallocs are executed + synch_barrier(); + + l1_addr[core_id] = l1_addr[0] + core_id * CORE_SPACE; + l1_dst_addr[core_id] = l1_dst_addr[0] + core_id * CORE_SPACE; + l2_addr[core_id] = l2_addr[0] + core_id * CORE_SPACE; + + // The following synch_barrier is needed so that + // no core can start executing until all address ranges have been assigned + synch_barrier(); + +} + +void free_allocated_memory () { + + synch_barrier(); + // Only Core 0 takes care of freeing the allocated memory, since it's the one + // allocated it at the beginning of the test + if (core_id == 0) { + pi_l1_free(0, l1_addr, TOT_SIZE); + pi_l1_free(0, l1_dst_addr, TOT_SIZE); + pi_l2_free(l2_addr, TOT_SIZE); + } +} + int main () { int core_id = rt_core_id(); - unsigned int size, length, src_stride_2d, dst_stride_2d; - unsigned int num_reps_3d, src_stride_3d, dst_stride_3d; - uint32_t ext_addr; - uint32_t loc_addr; - uint32_t loc_dst_addr; - - ext_addr = (uint32_t)ext + core_id * CORE_SPACE; - loc_addr = (uint32_t)loc + core_id * CORE_SPACE; - loc_dst_addr = (uint32_t)loc_dst + core_id * CORE_SPACE; + allocate_mem_to_cores(); if (core_id == 0){ - PRINTF ("loc_addr: %8x | loc_dst_addr: %8x \n", loc_addr, loc_dst_addr); + for (int i = 0; i < 8; i++){ + PRINTF ("CORE: %d \n", i); + PRINTF ("loc_addr: %8x | loc_dst_addr: %8x | ext_addr: %8x \n", l1_addr[i], l1_dst_addr[i], l2_addr[i]); + } } #ifdef MULTI_CORE_P @@ -138,25 +154,12 @@ int main () { PRINTF ("MULTI CORE PARALLEL MODE \n"); } for (int k = 0; k < NB_TRANSFERS; k++) { - size = transfer_params[k].size; - length = transfer_params[k].length; - src_stride_2d = transfer_params[k].src_stride_2d; - dst_stride_2d = transfer_params[k].dst_stride_2d; - src_stride_3d = transfer_params[k].src_stride_3d; - dst_stride_3d = transfer_params[k].dst_stride_3d; - num_reps_3d = transfer_params[k].num_reps_3d; - - if (core_id == 0) { - PRINTF ("Transfer: %d \n", k); - PRINTF ("Size: %d | Length: %d | Src_stride_2d: %d | Dst_stride_2d: %d | Num_reps_2d: %d \n", size, length, src_stride_2d, dst_stride_2d, (size/length)); - PRINTF ("Src_stride_3d: %d | Dst_stride_3d: %d | Num_reps_3d: %d \n", src_stride_3d, dst_stride_3d, num_reps_3d); - } // L1 -> L2 - errors[core_id] += test_idma_3D(core_id, size, 0, 0, ext_addr, loc_addr, length, src_stride_2d, dst_stride_2d, (size/length), src_stride_3d, dst_stride_3d, num_reps_3d); + errors[core_id] += test_idma_3D(core_id, transfer_params[k], 0, 0); // L2 -> L1 - errors[core_id] += test_idma_3D(core_id, size, 1, 0, ext_addr, loc_addr, length, src_stride_2d, dst_stride_2d, (size/length), src_stride_3d, dst_stride_3d, num_reps_3d); + errors[core_id] += test_idma_3D(core_id, transfer_params[k], 1, 0); // L1 -> L1 transfer - errors[core_id] += test_idma_3D(core_id, size, 0, 1, loc_dst_addr, loc_addr, length, src_stride_2d, dst_stride_2d, (size/length), src_stride_3d, dst_stride_3d, num_reps_3d); + errors[core_id] += test_idma_3D(core_id, transfer_params[k], 0, 1); synch_barrier(); } #elif MULTI_CORE_S @@ -167,46 +170,24 @@ int main () { for (int i = 0; i < 8; i++) { if (core_id == i) { for (int k = 0; k < NB_TRANSFERS; k++) { - size = transfer_params[k].size; - length = transfer_params[k].length; - src_stride_2d = transfer_params[k].src_stride_2d; - dst_stride_2d = transfer_params[k].dst_stride_2d; - src_stride_3d = transfer_params[k].src_stride_3d; - dst_stride_3d = transfer_params[k].dst_stride_3d; - num_reps_3d = transfer_params[k].num_reps_3d; - if (core_id == 0) { - PRINTF ("Transfer: %d \n", k); - PRINTF ("Size: %d | Length: %d | Src_stride_2d: %d | Dst_stride_2d: %d | Num_reps_2d: %d \n", size, length, src_stride_2d, dst_stride_2d, (size/length)); - PRINTF ("Src_stride_3d: %d | Dst_stride_3d: %d | Num_reps_3d: %d \n", src_stride_3d, dst_stride_3d, num_reps_3d); - } - // L1 -> L2 - errors[core_id] += test_idma_3D(core_id, size, 0, 0, ext_addr, loc_addr, length, src_stride_2d, dst_stride_2d, (size/length), src_stride_3d, dst_stride_3d, num_reps_3d); + // L1 -> L2 + errors[core_id] += test_idma_3D(core_id, transfer_params[k], 0, 0); // L2 -> L1 - errors[core_id] += test_idma_3D(core_id, size, 1, 0, ext_addr, loc_addr, length, src_stride_2d, dst_stride_2d, (size/length), src_stride_3d, dst_stride_3d, num_reps_3d); + errors[core_id] += test_idma_3D(core_id, transfer_params[k], 1, 0); // L1 -> L1 transfer - errors[core_id] += test_idma_3D(core_id, size, 0, 1, loc_dst_addr, loc_addr, length, src_stride_2d, dst_stride_2d, (size/length), src_stride_3d, dst_stride_3d, num_reps_3d); + errors[core_id] += test_idma_3D(core_id, transfer_params[k], 0, 1); } } } #else if (core_id == 0) { for (int k = 0; k < NB_TRANSFERS; k++) { - size = transfer_params[k].size; - length = transfer_params[k].length; - src_stride_2d = transfer_params[k].src_stride_2d; - dst_stride_2d = transfer_params[k].dst_stride_2d; - src_stride_3d = transfer_params[k].src_stride_3d; - dst_stride_3d = transfer_params[k].dst_stride_3d; - num_reps_3d = transfer_params[k].num_reps_3d; - PRINTF ("Transfer: %d \n", k); - PRINTF ("Size: %d | Length: %d | Src_stride_2d: %d | Dst_stride_2d: %d | Num_reps_2d: %d \n", size, length, src_stride_2d, dst_stride_2d, (size/length)); - PRINTF ("Src_stride_3d: %d | Dst_stride_3d: %d | Num_reps_3d: %d \n", src_stride_3d, dst_stride_3d, num_reps_3d); - PRINTF ("L1 to L2 transfer \n"); - errors[core_id] += test_idma_3D(core_id, size, 0, 0, ext_addr, loc_addr, length, src_stride_2d, dst_stride_2d, (size/length), src_stride_3d, dst_stride_3d, num_reps_3d); - PRINTF ("L2 to L1 transfer \n"); - errors[core_id] += test_idma_3D(core_id, size, 1, 0, ext_addr, loc_addr, length, src_stride_2d, dst_stride_2d, (size/length), src_stride_3d, dst_stride_3d, num_reps_3d); - PRINTF ("L1 to L1 transfer \n"); - errors[core_id] += test_idma_3D(core_id, size, 0, 1, loc_dst_addr, loc_addr, length, src_stride_2d, dst_stride_2d, (size/length), src_stride_3d, dst_stride_3d, num_reps_3d); + PRINTF ("L1 to L2 \n"); + errors[core_id] += test_idma_3D(core_id, transfer_params[k], 0, 0); + PRINTF ("L2 to L1 \n"); + errors[core_id] += test_idma_3D(core_id, transfer_params[k], 1, 0); + PRINTF ("L1 to L1 \n"); + errors[core_id] += test_idma_3D(core_id, transfer_params[k], 0, 1); } } #endif @@ -220,5 +201,7 @@ int main () { } } + free_allocated_memory(); + return test_status; } \ No newline at end of file diff --git a/idma_tests/idma_multi_core_3d/idma_parameters.h b/idma_tests/idma_multi_core_3d/idma_parameters.h index 3273eb3..d2e8ce4 100644 --- a/idma_tests/idma_multi_core_3d/idma_parameters.h +++ b/idma_tests/idma_multi_core_3d/idma_parameters.h @@ -9,13 +9,8 @@ typedef struct { } TransferParameters; TransferParameters transfer_params[] = { - {17, 10, 9, 16, 3, 14, 1}, -{47, 1, 6, 8, 9, 10, 5}, -{21, 4, 8, 6, 6, 8, 2}, -{52, 7, 7, 10, 7, 11, 4}, -{47, 7, 10, 14, 2, 13, 1}, -{37, 8, 9, 16, 8, 11, 1}, -{31, 7, 6, 12, 5, 8, 4}, -{41, 9, 7, 14, 5, 17, 2}, +{111, 2, 5, 3, 4, 5, 3}, +{43, 3, 6, 5, 8, 7, 5}, +{84, 1, 3, 3, 2, 3, 3}, }; From 5df50fc5ee30c6f46093653b48243d421a3cbf64 Mon Sep 17 00:00:00 2001 From: Riccardo Gandolfi Date: Wed, 11 Jun 2025 13:55:51 +0200 Subject: [PATCH 68/71] Updated iMDA tests: added QUICK mode for non-random inputs testing --- idma_tests/idma_multi_core/Makefile | 4 ++ .../idma_multi_core/gen_stimuli_idma.py | 4 +- idma_tests/idma_multi_core/idma_multi_core.c | 25 ++++++-- idma_tests/idma_multi_core/idma_multi_core.h | 7 +++ idma_tests/idma_multi_core/idma_presets.h | 3 + idma_tests/idma_multi_core_2d/Makefile | 4 ++ .../idma_multi_core_2d/gen_stimuli_idma_2d.py | 2 +- .../idma_multi_core_2d/idma_multi_core_2d.c | 57 +++++++++++++----- .../idma_multi_core_2d/idma_multi_core_2d.h | 7 +++ .../idma_multi_core_2d/idma_parameters.h | 14 ++--- idma_tests/idma_multi_core_2d/idma_presets.h | 11 ++++ idma_tests/idma_multi_core_3d/Makefile | 4 ++ idma_tests/idma_multi_core_3d/idma_defines.h | 3 +- .../idma_multi_core_3d/idma_multi_core_3d.c | 58 ++++++++++++++----- .../idma_multi_core_3d/idma_multi_core_3d.h | 7 +++ .../idma_multi_core_3d/idma_parameters.h | 9 ++- idma_tests/idma_multi_core_3d/idma_presets.h | 16 +++++ 17 files changed, 185 insertions(+), 50 deletions(-) create mode 100644 idma_tests/idma_multi_core/idma_presets.h create mode 100644 idma_tests/idma_multi_core_2d/idma_presets.h create mode 100644 idma_tests/idma_multi_core_3d/idma_presets.h diff --git a/idma_tests/idma_multi_core/Makefile b/idma_tests/idma_multi_core/Makefile index 4f44e3c..a1092e3 100644 --- a/idma_tests/idma_multi_core/Makefile +++ b/idma_tests/idma_multi_core/Makefile @@ -18,6 +18,10 @@ ifdef SINGLE_CORE PULP_CFLAGS += -DSINGLE_CORE endif +ifdef QUICK_MODE +PULP_CFLAGS += -DQUICK_MODE +endif + PULP_CFLAGS += -O3 stackSize = 4096 diff --git a/idma_tests/idma_multi_core/gen_stimuli_idma.py b/idma_tests/idma_multi_core/gen_stimuli_idma.py index acd9049..953d762 100644 --- a/idma_tests/idma_multi_core/gen_stimuli_idma.py +++ b/idma_tests/idma_multi_core/gen_stimuli_idma.py @@ -29,10 +29,10 @@ def write_define(f, name,val): NB_TRANSFERS = random.randint(1, 10) -# Randomize between 1 and 4096 the size of each transfer +# Randomize between 1 and 1024 the size of each transfer CORE_SPACE = 1024 -TRANSFER_SIZE = 512 +TRANSFER_SIZE = 1024 sizes = [None] * NB_TRANSFERS diff --git a/idma_tests/idma_multi_core/idma_multi_core.c b/idma_tests/idma_multi_core/idma_multi_core.c index 554d157..882ea9a 100644 --- a/idma_tests/idma_multi_core/idma_multi_core.c +++ b/idma_tests/idma_multi_core/idma_multi_core.c @@ -102,6 +102,7 @@ void free_allocated_memory () { int main () { int core_id = rt_core_id(); + unsigned int size = 0; allocate_mem_to_cores(); @@ -117,8 +118,12 @@ int main () { if (core_id == 0) { PRINTF ("MULTI CORE PARALLEL MODE \n"); } - for (int k = 0; k < NB_TRANSFERS; k++) { - unsigned int size = sizes[k]; + for (int k = 0; k < TRANSFERS; k++) { + #ifdef QUICK_MODE + size = idma_presets[k]; + #else + size = sizes[k]; + #endif // L1 -> L2 errors[core_id] += test_idma_1D(core_id, size, 0, 0); // L2 -> L1 @@ -134,8 +139,12 @@ int main () { } for (int i = 0; i < 8; i++) { if (core_id == i) { - for (int k = 0; k < NB_TRANSFERS; k++) { - unsigned int size = sizes[k]; + for (int k = 0; k < TRANSFERS; k++) { + #ifdef QUICK_MODE + size = idma_presets[k]; + #else + size = sizes[k]; + #endif // L1 -> L2 errors[core_id] += test_idma_1D(core_id, size, 0, 0); // L2 -> L1 @@ -149,8 +158,12 @@ int main () { if (core_id == 0) { // SINGLE CORE MODE: just core 0 uses the iDMA PRINTF ("Just using Core 0 \n"); - for (int k = 0; k < NB_TRANSFERS; k++) { - unsigned int size = sizes[k]; + for (int k = 0; k < TRANSFERS; k++) { + #ifdef QUICK_MODE + size = idma_presets[k]; + #else + size = sizes[k]; + #endif PRINTF ("L1 to L2 \n"); errors[core_id] += test_idma_1D(core_id, size, 0, 0); PRINTF ("L2 to L1 \n"); diff --git a/idma_tests/idma_multi_core/idma_multi_core.h b/idma_tests/idma_multi_core/idma_multi_core.h index 64526cd..61c024c 100644 --- a/idma_tests/idma_multi_core/idma_multi_core.h +++ b/idma_tests/idma_multi_core/idma_multi_core.h @@ -15,6 +15,7 @@ #include "idma_defines.h" #include "transfer_sizes.h" +#include "idma_presets.h" #ifndef _DMA_FRONTEND_REG_DEFS_ #define _DMA_FRONTEND_REG_DEFS_ @@ -33,6 +34,12 @@ extern "C" { #define PRINTF(...) #endif +#ifdef QUICK_MODE + #define TRANSFERS 12 +#else + #define TRANSFERS NB_TRANSFERS +#endif + #ifdef __cplusplus } // extern "C" #endif diff --git a/idma_tests/idma_multi_core/idma_presets.h b/idma_tests/idma_multi_core/idma_presets.h new file mode 100644 index 0000000..3779763 --- /dev/null +++ b/idma_tests/idma_multi_core/idma_presets.h @@ -0,0 +1,3 @@ +unsigned int idma_presets [] = { + 1, 2, 3, 4, 8, 16, 32, 64, 128, 256, 512, 1024 +}; \ No newline at end of file diff --git a/idma_tests/idma_multi_core_2d/Makefile b/idma_tests/idma_multi_core_2d/Makefile index 7e95656..1d6678e 100644 --- a/idma_tests/idma_multi_core_2d/Makefile +++ b/idma_tests/idma_multi_core_2d/Makefile @@ -14,6 +14,10 @@ ifdef MULTI_CORE_S PULP_CFLAGS += -DMULTI_CORE_S endif +ifdef QUICK_MODE +PULP_CFLAGS += -DQUICK_MODE +endif + PULP_CFLAGS += -O3 stackSize = 4096 diff --git a/idma_tests/idma_multi_core_2d/gen_stimuli_idma_2d.py b/idma_tests/idma_multi_core_2d/gen_stimuli_idma_2d.py index 06dc47a..132cf06 100644 --- a/idma_tests/idma_multi_core_2d/gen_stimuli_idma_2d.py +++ b/idma_tests/idma_multi_core_2d/gen_stimuli_idma_2d.py @@ -43,7 +43,7 @@ def write_define(f, name,val): # Randomize between 1 and 512 the size of each transfer CORE_SPACE = 1024 -TRANSFER_SIZE = 512 +TRANSFER_SIZE = 90 MAX_STRIDE = 10 MAX_LENGTH = 10 diff --git a/idma_tests/idma_multi_core_2d/idma_multi_core_2d.c b/idma_tests/idma_multi_core_2d/idma_multi_core_2d.c index d8ee7a5..98bafc6 100644 --- a/idma_tests/idma_multi_core_2d/idma_multi_core_2d.c +++ b/idma_tests/idma_multi_core_2d/idma_multi_core_2d.c @@ -9,6 +9,14 @@ uint32_t l1_addr[8] = {0}; uint32_t l1_dst_addr[8] = {0}; uint32_t l2_addr[8] = {0}; +void print_transfer (TransferParameters transfer) { + if (rt_core_id() == 0) { + PRINTF ("Transfer Parameters: \n"); + PRINTF ("Size: %d | Length: %d \n", transfer.size, transfer.length); + PRINTF ("Src_stride_2d: %d | Dst_stride_2d: %d \n", transfer.src_stride, transfer.dst_stride); + } +} + int test_idma_2D (int core_id, TransferParameters transfer, int ext2loc, int loc2loc) { volatile uint8_t *src_ptr, *dst_ptr; @@ -21,9 +29,6 @@ int test_idma_2D (int core_id, TransferParameters transfer, int ext2loc, int loc uint32_t length = transfer.length; uint32_t num_reps = size/length; - PRINTF ("Size: %d | Length: %d | Src_stride: %d | Dst_stride: %d | Num_reps: %d \n", - size, length, src_stride, dst_stride, num_reps); - if (loc2loc == 1) { // L1 to L1 transfer src_ptr = (uint8_t*) l1_addr[core_id]; @@ -130,20 +135,28 @@ int main () { } } + TransferParameters transfer; + #ifdef MULTI_CORE_P // MULTI CORE PARALLEL MODE: each core uses the iDMA in a parallel manner if (core_id == 0) { PRINTF ("MULTI CORE PARALLEL MODE \n"); } - for (int k = 0; k < NB_TRANSFERS; k++) { + for (int k = 0; k < TRANSFERS; k++) { + #ifdef QUICK_MODE + transfer = idma_presets[k]; + #else + transfer = transfer_params[k]; + #endif + print_transfer(transfer); // L1 -> L2 - errors[core_id] += test_idma_2D(core_id, transfer_params[k], 0, 0); + errors[core_id] += test_idma_2D(core_id, transfer, 0, 0); // L2 -> L1 - errors[core_id] += test_idma_2D(core_id, transfer_params[k], 1, 0); + errors[core_id] += test_idma_2D(core_id, transfer, 1, 0); // L1 -> L1 - errors[core_id] += test_idma_2D(core_id, transfer_params[k], 0, 1); - synch_barrier(); + errors[core_id] += test_idma_2D(core_id, transfer, 0, 1); } + synch_barrier(); #elif MULTI_CORE_S // MULTI CORE SERIAL MODE: each core uses the iDMA in a serial manner if (core_id == 0) { @@ -151,13 +164,19 @@ int main () { } for (int i = 0; i < 8; i++) { if (core_id == i) { - for (int k = 0; k < NB_TRANSFERS; k++) { + for (int k = 0; k < TRANSFERS; k++) { + #ifdef QUICK_MODE + transfer = idma_presets[k]; + #else + transfer = transfer_params[k]; + #endif + print_transfer(transfer); // L1 -> L2 - errors[core_id] += test_idma_2D(core_id, transfer_params[k], 0, 0); + errors[core_id] += test_idma_2D(core_id, transfer, 0, 0); // L2 -> L1 - errors[core_id] += test_idma_2D(core_id, transfer_params[k], 1, 0); + errors[core_id] += test_idma_2D(core_id, transfer, 1, 0); // L1 -> L1 - errors[core_id] += test_idma_2D(core_id, transfer_params[k], 0, 1); + errors[core_id] += test_idma_2D(core_id, transfer, 0, 1); } } } @@ -165,13 +184,19 @@ int main () { // SINGLE CORE MODE: just core 0 uses the iDMA if (core_id == 0) { PRINTF ("SINGLE CORE MODE \n"); - for (int k = 0; k < NB_TRANSFERS; k++) { + for (int k = 0; k < TRANSFERS; k++) { + #ifdef QUICK_MODE + transfer = idma_presets[k]; + #else + transfer = transfer_params[k]; + #endif + print_transfer(transfer); PRINTF ("L1 to L2 \n"); - errors[core_id] += test_idma_2D(core_id, transfer_params[k], 0, 0); + errors[core_id] += test_idma_2D(core_id, transfer, 0, 0); PRINTF ("L2 to L1 \n"); - errors[core_id] += test_idma_2D(core_id, transfer_params[k], 1, 0); + errors[core_id] += test_idma_2D(core_id, transfer, 1, 0); PRINTF ("L1 to L1 \n"); - errors[core_id] += test_idma_2D(core_id, transfer_params[k], 0, 1); + errors[core_id] += test_idma_2D(core_id, transfer, 0, 1); } } #endif diff --git a/idma_tests/idma_multi_core_2d/idma_multi_core_2d.h b/idma_tests/idma_multi_core_2d/idma_multi_core_2d.h index 3b8f963..94a431e 100644 --- a/idma_tests/idma_multi_core_2d/idma_multi_core_2d.h +++ b/idma_tests/idma_multi_core_2d/idma_multi_core_2d.h @@ -15,6 +15,7 @@ #include "idma_defines.h" #include "idma_parameters.h" +#include "idma_presets.h" #ifndef _DMA_FRONTEND_REG_DEFS_ #define _DMA_FRONTEND_REG_DEFS_ @@ -27,6 +28,12 @@ extern "C" { #define DMA_CONF_DEBURST 0 #define DMA_CONF_SERIALIZE 0 +#ifdef QUICK_MODE +#define TRANSFERS 7 +#else +#define TRANSFERS NB_TRANSFERS +#endif + #ifdef VERBOSE #define PRINTF(...) printf(__VA_ARGS__) #else diff --git a/idma_tests/idma_multi_core_2d/idma_parameters.h b/idma_tests/idma_multi_core_2d/idma_parameters.h index 07676de..ebe5a3d 100644 --- a/idma_tests/idma_multi_core_2d/idma_parameters.h +++ b/idma_tests/idma_multi_core_2d/idma_parameters.h @@ -6,12 +6,12 @@ typedef struct { } TransferParameters; TransferParameters transfer_params[] = { -{34, 1, 3, 9}, -{26, 4, 6, 5}, -{87, 8, 18, 9}, -{115, 9, 18, 11}, -{316, 4, 11, 6}, -{93, 10, 15, 18}, -{358, 4, 6, 11}, +{88, 3, 8, 11}, +{85, 2, 6, 5}, +{73, 1, 10, 8}, +{69, 3, 4, 5}, +{21, 8, 14, 14}, +{27, 2, 11, 8}, +{67, 7, 13, 15}, }; diff --git a/idma_tests/idma_multi_core_2d/idma_presets.h b/idma_tests/idma_multi_core_2d/idma_presets.h new file mode 100644 index 0000000..edc740a --- /dev/null +++ b/idma_tests/idma_multi_core_2d/idma_presets.h @@ -0,0 +1,11 @@ + +TransferParameters idma_presets[] = { +{1, 1, 1, 1}, +{2, 2, 512, 512}, +{4, 2, 256, 256}, +{16, 8, 64, 64}, +{64, 8, 16, 16}, +{128, 8, 8, 8}, +{512, 2, 4, 4}, +}; + diff --git a/idma_tests/idma_multi_core_3d/Makefile b/idma_tests/idma_multi_core_3d/Makefile index 572a9b4..e206393 100644 --- a/idma_tests/idma_multi_core_3d/Makefile +++ b/idma_tests/idma_multi_core_3d/Makefile @@ -14,6 +14,10 @@ ifdef MULTI_CORE_S PULP_CFLAGS += -DMULTI_CORE_S endif +ifdef QUICK_MODE +PULP_CFLAGS += -DQUICK_MODE +endif + PULP_CFLAGS += -O3 stackSize = 4096 diff --git a/idma_tests/idma_multi_core_3d/idma_defines.h b/idma_tests/idma_multi_core_3d/idma_defines.h index 1440b19..4fe33cb 100644 --- a/idma_tests/idma_multi_core_3d/idma_defines.h +++ b/idma_tests/idma_multi_core_3d/idma_defines.h @@ -1,3 +1,4 @@ -#define NB_TRANSFERS 3 +#define NB_TRANSFERS 6 #define CORE_SPACE 2048 + diff --git a/idma_tests/idma_multi_core_3d/idma_multi_core_3d.c b/idma_tests/idma_multi_core_3d/idma_multi_core_3d.c index 2e26ed5..aa148c6 100644 --- a/idma_tests/idma_multi_core_3d/idma_multi_core_3d.c +++ b/idma_tests/idma_multi_core_3d/idma_multi_core_3d.c @@ -9,6 +9,16 @@ uint32_t l1_addr[8] = {0}; uint32_t l1_dst_addr[8] = {0}; uint32_t l2_addr[8] = {0}; +void print_transfer (TransferParameters transfer) { + if (rt_core_id() == 0) { + PRINTF ("Transfer Parameters: \n"); + PRINTF ("Size: %d | Length: %d \n", transfer.size, transfer.length); + PRINTF ("Src_stride_2d: %d | Dst_stride_2d: %d \n", transfer.src_stride_2d, transfer.dst_stride_2d); + PRINTF ("Src_stride_3d: %d | Dst_stride_3d: %d \n", transfer.src_stride_3d, transfer.dst_stride_3d); + PRINTF ("Num_reps_3d: %d \n", transfer.num_reps_3d); + } +} + int test_idma_3D (int core_id, TransferParameters transfer, int ext2loc, int loc2loc) { volatile uint8_t *src_ptr, *dst_ptr; unsigned int offset_3d = 0; @@ -141,6 +151,8 @@ int main () { allocate_mem_to_cores(); + TransferParameters transfer; + if (core_id == 0){ for (int i = 0; i < 8; i++){ PRINTF ("CORE: %d \n", i); @@ -153,15 +165,21 @@ int main () { if (core_id == 0) { PRINTF ("MULTI CORE PARALLEL MODE \n"); } - for (int k = 0; k < NB_TRANSFERS; k++) { + for (int k = 0; k < TRANSFERS; k++) { + #ifdef QUICK_MODE + transfer = idma_presets[k]; + #else + transfer = transfer_params[k]; + #endif + print_transfer(transfer); // L1 -> L2 - errors[core_id] += test_idma_3D(core_id, transfer_params[k], 0, 0); + errors[core_id] += test_idma_3D(core_id, transfer, 0, 0); // L2 -> L1 - errors[core_id] += test_idma_3D(core_id, transfer_params[k], 1, 0); + errors[core_id] += test_idma_3D(core_id, transfer, 1, 0); // L1 -> L1 transfer - errors[core_id] += test_idma_3D(core_id, transfer_params[k], 0, 1); - synch_barrier(); + errors[core_id] += test_idma_3D(core_id, transfer, 0, 1); } + synch_barrier(); #elif MULTI_CORE_S // MULTI CORE SERIAL MODE: each core uses the iDMA in a serial manner if (core_id == 0) { @@ -169,25 +187,37 @@ int main () { } for (int i = 0; i < 8; i++) { if (core_id == i) { - for (int k = 0; k < NB_TRANSFERS; k++) { - // L1 -> L2 - errors[core_id] += test_idma_3D(core_id, transfer_params[k], 0, 0); + for (int k = 0; k < TRANSFERS; k++) { + #ifdef QUICK_MODE + transfer = idma_presets[k]; + #else + transfer = transfer_params[k]; + #endif + print_transfer(transfer); + // L1 -> L2 + errors[core_id] += test_idma_3D(core_id, transfer, 0, 0); // L2 -> L1 - errors[core_id] += test_idma_3D(core_id, transfer_params[k], 1, 0); + errors[core_id] += test_idma_3D(core_id, transfer, 1, 0); // L1 -> L1 transfer - errors[core_id] += test_idma_3D(core_id, transfer_params[k], 0, 1); + errors[core_id] += test_idma_3D(core_id, transfer, 0, 1); } } } #else if (core_id == 0) { - for (int k = 0; k < NB_TRANSFERS; k++) { + for (int k = 0; k < TRANSFERS; k++) { + #ifdef QUICK_MODE + transfer = idma_presets[k]; + #else + transfer = transfer_params[k]; + #endif + print_transfer(transfer); PRINTF ("L1 to L2 \n"); - errors[core_id] += test_idma_3D(core_id, transfer_params[k], 0, 0); + errors[core_id] += test_idma_3D(core_id, transfer, 0, 0); PRINTF ("L2 to L1 \n"); - errors[core_id] += test_idma_3D(core_id, transfer_params[k], 1, 0); + errors[core_id] += test_idma_3D(core_id, transfer, 1, 0); PRINTF ("L1 to L1 \n"); - errors[core_id] += test_idma_3D(core_id, transfer_params[k], 0, 1); + errors[core_id] += test_idma_3D(core_id, transfer, 0, 1); } } #endif diff --git a/idma_tests/idma_multi_core_3d/idma_multi_core_3d.h b/idma_tests/idma_multi_core_3d/idma_multi_core_3d.h index 3b8f963..27c2833 100644 --- a/idma_tests/idma_multi_core_3d/idma_multi_core_3d.h +++ b/idma_tests/idma_multi_core_3d/idma_multi_core_3d.h @@ -15,6 +15,7 @@ #include "idma_defines.h" #include "idma_parameters.h" +#include "idma_presets.h" #ifndef _DMA_FRONTEND_REG_DEFS_ #define _DMA_FRONTEND_REG_DEFS_ @@ -27,6 +28,12 @@ extern "C" { #define DMA_CONF_DEBURST 0 #define DMA_CONF_SERIALIZE 0 +#ifdef QUICK_MODE +#define TRANSFERS 9 +#else +#define TRANSFERS NB_TRANSFERS +#endif + #ifdef VERBOSE #define PRINTF(...) printf(__VA_ARGS__) #else diff --git a/idma_tests/idma_multi_core_3d/idma_parameters.h b/idma_tests/idma_multi_core_3d/idma_parameters.h index d2e8ce4..05cb0cd 100644 --- a/idma_tests/idma_multi_core_3d/idma_parameters.h +++ b/idma_tests/idma_multi_core_3d/idma_parameters.h @@ -9,8 +9,11 @@ typedef struct { } TransferParameters; TransferParameters transfer_params[] = { -{111, 2, 5, 3, 4, 5, 3}, -{43, 3, 6, 5, 8, 7, 5}, -{84, 1, 3, 3, 2, 3, 3}, +{94, 5, 9, 10, 9, 8, 5}, +{66, 9, 11, 14, 13, 13, 3}, +{126, 3, 6, 4, 4, 4, 5}, +{106, 6, 7, 7, 8, 7, 2}, +{28, 7, 9, 12, 9, 12, 4}, +{64, 10, 13, 15, 11, 12, 4}, }; diff --git a/idma_tests/idma_multi_core_3d/idma_presets.h b/idma_tests/idma_multi_core_3d/idma_presets.h new file mode 100644 index 0000000..82ce6d6 --- /dev/null +++ b/idma_tests/idma_multi_core_3d/idma_presets.h @@ -0,0 +1,16 @@ + +// Parameters are declared in this order: +// size, length, src_stride_2d, dst_stride_2d, src_stride_3d, dst_stride_3d, num_reps_3d + +TransferParameters idma_presets[] = { +{1, 1, 1, 1, 1, 1, 1}, +{2, 8, 8, 8, 8, 8, 2}, +{3, 8, 8, 8, 8, 8, 4}, +{4, 8, 16, 16, 16, 16, 8}, +{8, 8, 32, 32, 32, 32, 8}, +{16, 8, 16, 16, 16, 16, 8}, +{32, 2, 2, 2, 2, 2, 2}, +{64, 4, 4, 4, 4, 4, 2}, +{128, 4, 4, 4, 4, 4, 4}, +}; + From dbe54a0bd2fb73efc59bdeebe99e38a56bc491d0 Mon Sep 17 00:00:00 2001 From: Riccardo Gandolfi Date: Wed, 11 Jun 2025 15:08:17 +0200 Subject: [PATCH 69/71] Minor change on idma_multi_core: moved synch_barrier out of for loop --- idma_tests/idma_multi_core/idma_multi_core.c | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/idma_tests/idma_multi_core/idma_multi_core.c b/idma_tests/idma_multi_core/idma_multi_core.c index 882ea9a..729ca05 100644 --- a/idma_tests/idma_multi_core/idma_multi_core.c +++ b/idma_tests/idma_multi_core/idma_multi_core.c @@ -14,8 +14,6 @@ int test_idma_1D (int core_id, uint32_t size, int ext2loc, int loc2loc) { int error = 0; - PRINTF ("Size: %d \n", size); - if (loc2loc == 1) { // L1 to L1 transfer src_ptr = (uint8_t*) l1_addr[core_id]; @@ -124,14 +122,17 @@ int main () { #else size = sizes[k]; #endif + if (core_id == 0){ + PRINTF ("Size: %d \n", size); + } // L1 -> L2 errors[core_id] += test_idma_1D(core_id, size, 0, 0); // L2 -> L1 errors[core_id] += test_idma_1D(core_id, size, 1, 0); // L1 -> L1 errors[core_id] += test_idma_1D(core_id, size, 0, 1); - synch_barrier(); } + synch_barrier(); #elif MULTI_CORE_S // MULTI CORE SERIAL MODE: each core uses the iDMA in a serial manner if (core_id == 0) { From 10b0bfce20feefb711d8908809f0b1c7a7a6c12e Mon Sep 17 00:00:00 2001 From: Riccardo Gandolfi Date: Wed, 11 Jun 2025 16:14:33 +0200 Subject: [PATCH 70/71] Updated tests: initialize test_status to NB_CORES and decrease when no errors occur --- idma_tests/idma_multi_core/idma_multi_core.c | 6 +++--- idma_tests/idma_multi_core_2d/idma_multi_core_2d.c | 6 +++--- idma_tests/idma_multi_core_3d/idma_multi_core_3d.c | 6 +++--- 3 files changed, 9 insertions(+), 9 deletions(-) diff --git a/idma_tests/idma_multi_core/idma_multi_core.c b/idma_tests/idma_multi_core/idma_multi_core.c index 729ca05..1574e36 100644 --- a/idma_tests/idma_multi_core/idma_multi_core.c +++ b/idma_tests/idma_multi_core/idma_multi_core.c @@ -3,7 +3,7 @@ #define TOT_SIZE 8 * CORE_SPACE int errors[8] = {0}; -int test_status = 0; +int test_status = 8; uint32_t l1_addr[8] = {0}; uint32_t l1_dst_addr[8] = {0}; @@ -177,9 +177,9 @@ int main () { if (core_id == 0) { for (int i = 0; i<8; i++) { - if (errors[i] !=0) { + if (errors[i] == 0) { PRINTF ("Core %d returned %d errors \n", i, errors[i]); - test_status = 1; + test_status--; } } } diff --git a/idma_tests/idma_multi_core_2d/idma_multi_core_2d.c b/idma_tests/idma_multi_core_2d/idma_multi_core_2d.c index 98bafc6..4713e68 100644 --- a/idma_tests/idma_multi_core_2d/idma_multi_core_2d.c +++ b/idma_tests/idma_multi_core_2d/idma_multi_core_2d.c @@ -3,7 +3,7 @@ #define TOT_SIZE 8 * CORE_SPACE int errors[8] = {0}; -int test_status = 0; +int test_status = 8; uint32_t l1_addr[8] = {0}; uint32_t l1_dst_addr[8] = {0}; @@ -203,9 +203,9 @@ int main () { if (core_id == 0) { for (int i = 0; i<8; i++) { - if (errors[i] !=0) { + if (errors[i] == 0) { PRINTF ("Core %d returned %d errors \n", i, errors[i]); - test_status = 1; + test_status --; } } } diff --git a/idma_tests/idma_multi_core_3d/idma_multi_core_3d.c b/idma_tests/idma_multi_core_3d/idma_multi_core_3d.c index aa148c6..78a8cb1 100644 --- a/idma_tests/idma_multi_core_3d/idma_multi_core_3d.c +++ b/idma_tests/idma_multi_core_3d/idma_multi_core_3d.c @@ -3,7 +3,7 @@ #define TOT_SIZE 8 * CORE_SPACE int errors[8] = {0}; -int test_status = 0; +int test_status = 8; uint32_t l1_addr[8] = {0}; uint32_t l1_dst_addr[8] = {0}; @@ -224,9 +224,9 @@ int main () { if (core_id == 0) { for (int i = 0; i<8; i++) { - if (errors[i] !=0) { + if (errors[i] == 0) { PRINTF ("Core %d returned %d errors \n", i, errors[i]); - test_status = 1; + test_status--; } } } From 968b2d3e2259a489347017ef99910257fa247970 Mon Sep 17 00:00:00 2001 From: Riccardo Gandolfi Date: Thu, 12 Jun 2025 16:06:44 +0200 Subject: [PATCH 71/71] Some clean-up and minor changes --- .../idma_multi_core/gen_stimuli_idma.py | 12 +++--------- idma_tests/idma_multi_core/idma_defines.h | 2 -- idma_tests/idma_multi_core/idma_multi_core.c | 19 ++++++++----------- idma_tests/idma_multi_core/idma_multi_core.h | 4 +++- idma_tests/idma_multi_core/idma_parameters.h | 10 ++++++++++ idma_tests/idma_multi_core/transfer_sizes.h | 10 ---------- .../idma_multi_core_2d/gen_stimuli_idma_2d.py | 9 ++------- idma_tests/idma_multi_core_2d/idma_defines.h | 4 +--- .../idma_multi_core_2d/idma_multi_core_2d.c | 13 +++---------- .../idma_multi_core_2d/idma_multi_core_2d.h | 2 ++ .../idma_multi_core_2d/idma_parameters.h | 15 ++++++++------- .../idma_multi_core_3d/gen_stimuli_idma_3d.py | 7 ++----- idma_tests/idma_multi_core_3d/idma_defines.h | 4 +--- .../idma_multi_core_3d/idma_multi_core_3d.c | 7 ------- .../idma_multi_core_3d/idma_multi_core_3d.h | 2 ++ .../idma_multi_core_3d/idma_parameters.h | 16 ++++++++++------ 16 files changed, 55 insertions(+), 81 deletions(-) create mode 100644 idma_tests/idma_multi_core/idma_parameters.h delete mode 100644 idma_tests/idma_multi_core/transfer_sizes.h diff --git a/idma_tests/idma_multi_core/gen_stimuli_idma.py b/idma_tests/idma_multi_core/gen_stimuli_idma.py index 953d762..53ce234 100644 --- a/idma_tests/idma_multi_core/gen_stimuli_idma.py +++ b/idma_tests/idma_multi_core/gen_stimuli_idma.py @@ -23,22 +23,16 @@ def write_define(f, name,val): f.write('#define %s %d\n\n' % (name,val)) return -# Randomize between 1 and 50 the number of simple iDMA transfers to be performed -# For each transfer we set a size in bytes (the number of 32-bits elements that -# will be moved is size / sizeof(uint32_t)). - +# Randomize the number of transfers to execute NB_TRANSFERS = random.randint(1, 10) -# Randomize between 1 and 1024 the size of each transfer - -CORE_SPACE = 1024 +# Randomize between 1 and 1024 the size (in bytes) of each transfer (Must be less than CORE_SPACE defined in the C header) TRANSFER_SIZE = 1024 sizes = [None] * NB_TRANSFERS -f_sizes = open('transfer_sizes.h', 'w') +f_sizes = open('idma_parameters.h', 'w') f_defines = open ('idma_defines.h', 'w') write_transfer_sizes_array(f_sizes, 'sizes', sizes) write_define(f_defines, 'NB_TRANSFERS', NB_TRANSFERS) -write_define(f_defines, 'CORE_SPACE', CORE_SPACE) diff --git a/idma_tests/idma_multi_core/idma_defines.h b/idma_tests/idma_multi_core/idma_defines.h index ec08071..b544610 100644 --- a/idma_tests/idma_multi_core/idma_defines.h +++ b/idma_tests/idma_multi_core/idma_defines.h @@ -1,4 +1,2 @@ #define NB_TRANSFERS 7 -#define CORE_SPACE 1024 - diff --git a/idma_tests/idma_multi_core/idma_multi_core.c b/idma_tests/idma_multi_core/idma_multi_core.c index 1574e36..079c250 100644 --- a/idma_tests/idma_multi_core/idma_multi_core.c +++ b/idma_tests/idma_multi_core/idma_multi_core.c @@ -104,13 +104,6 @@ int main () { allocate_mem_to_cores(); - if (core_id == 0){ - for (int i = 0; i < 8; i++){ - PRINTF ("CORE: %d \n", i); - PRINTF ("loc_addr: %8x | loc_dst_addr: %8x | ext_addr: %8x \n", l1_addr[i], l1_dst_addr[i], l2_addr[i]); - } - } - #ifdef MULTI_CORE_P // MULTI CORE PARALLEL MODE: each core uses the iDMA in a parallel manner if (core_id == 0) { @@ -146,6 +139,9 @@ int main () { #else size = sizes[k]; #endif + if (core_id == 0){ + PRINTF ("Size: %d \n", size); + } // L1 -> L2 errors[core_id] += test_idma_1D(core_id, size, 0, 0); // L2 -> L1 @@ -158,18 +154,19 @@ int main () { #else if (core_id == 0) { // SINGLE CORE MODE: just core 0 uses the iDMA - PRINTF ("Just using Core 0 \n"); + PRINTF ("SINGLE CORE MODE: CORE 0 \n"); for (int k = 0; k < TRANSFERS; k++) { #ifdef QUICK_MODE size = idma_presets[k]; #else size = sizes[k]; #endif - PRINTF ("L1 to L2 \n"); + PRINTF ("Size: %d \n", size); + // L1 -> L2 errors[core_id] += test_idma_1D(core_id, size, 0, 0); - PRINTF ("L2 to L1 \n"); + // L2 -> L1 errors[core_id] += test_idma_1D(core_id, size, 1, 0); - PRINTF ("L1 to L1 \n"); + // L1 -> L1 errors[core_id] += test_idma_1D(core_id, size, 0, 1); } } diff --git a/idma_tests/idma_multi_core/idma_multi_core.h b/idma_tests/idma_multi_core/idma_multi_core.h index 61c024c..af672e0 100644 --- a/idma_tests/idma_multi_core/idma_multi_core.h +++ b/idma_tests/idma_multi_core/idma_multi_core.h @@ -14,7 +14,7 @@ #include #include "idma_defines.h" -#include "transfer_sizes.h" +#include "idma_parameters.h" #include "idma_presets.h" #ifndef _DMA_FRONTEND_REG_DEFS_ @@ -28,6 +28,8 @@ extern "C" { #define DMA_CONF_DEBURST 0 #define DMA_CONF_SERIALIZE 0 +#define CORE_SPACE 2048 + #if VERBOSE #define PRINTF(...) printf(__VA_ARGS__) #else diff --git a/idma_tests/idma_multi_core/idma_parameters.h b/idma_tests/idma_multi_core/idma_parameters.h new file mode 100644 index 0000000..0388301 --- /dev/null +++ b/idma_tests/idma_multi_core/idma_parameters.h @@ -0,0 +1,10 @@ +unsigned int sizes[] = { +89, +947, +156, +560, +278, +869, +238, +}; + diff --git a/idma_tests/idma_multi_core/transfer_sizes.h b/idma_tests/idma_multi_core/transfer_sizes.h deleted file mode 100644 index 0d66ee7..0000000 --- a/idma_tests/idma_multi_core/transfer_sizes.h +++ /dev/null @@ -1,10 +0,0 @@ -unsigned int sizes[] = { -364, -440, -148, -65, -458, -479, -48, -}; - diff --git a/idma_tests/idma_multi_core_2d/gen_stimuli_idma_2d.py b/idma_tests/idma_multi_core_2d/gen_stimuli_idma_2d.py index 132cf06..87b7bcb 100644 --- a/idma_tests/idma_multi_core_2d/gen_stimuli_idma_2d.py +++ b/idma_tests/idma_multi_core_2d/gen_stimuli_idma_2d.py @@ -36,14 +36,10 @@ def write_define(f, name,val): return # Randomize between 1 and 10 the number of 2D iDMA transfers to be performed -# For each transfer we set a size in bytes. - NB_TRANSFERS = random.randint(1, 10) -# Randomize between 1 and 512 the size of each transfer - -CORE_SPACE = 1024 -TRANSFER_SIZE = 90 +# Randomize between 1 and 128 the size in bytes of each transfer +TRANSFER_SIZE = 128 MAX_STRIDE = 10 MAX_LENGTH = 10 @@ -53,7 +49,6 @@ def write_define(f, name,val): f_defines = open('idma_defines.h', 'w') write_define(f_defines, 'NB_TRANSFERS', NB_TRANSFERS) -write_define(f_defines, 'CORE_SPACE', CORE_SPACE) write_transfer_parameters_struct(f_params, 'TransferParameters') write_transfer_parameters_array(f_params, 'transfer_params', transfer_params) diff --git a/idma_tests/idma_multi_core_2d/idma_defines.h b/idma_tests/idma_multi_core_2d/idma_defines.h index ec08071..618d62d 100644 --- a/idma_tests/idma_multi_core_2d/idma_defines.h +++ b/idma_tests/idma_multi_core_2d/idma_defines.h @@ -1,4 +1,2 @@ -#define NB_TRANSFERS 7 - -#define CORE_SPACE 1024 +#define NB_TRANSFERS 8 diff --git a/idma_tests/idma_multi_core_2d/idma_multi_core_2d.c b/idma_tests/idma_multi_core_2d/idma_multi_core_2d.c index 4713e68..f5dc0eb 100644 --- a/idma_tests/idma_multi_core_2d/idma_multi_core_2d.c +++ b/idma_tests/idma_multi_core_2d/idma_multi_core_2d.c @@ -128,13 +128,6 @@ int main () { allocate_mem_to_cores(); - if (core_id == 0){ - for (int i = 0; i < 8; i++){ - PRINTF ("CORE: %d \n", i); - PRINTF ("loc_addr: %8x | loc_dst_addr: %8x | ext_addr: %8x \n", l1_addr[i], l1_dst_addr[i], l2_addr[i]); - } - } - TransferParameters transfer; #ifdef MULTI_CORE_P @@ -191,11 +184,11 @@ int main () { transfer = transfer_params[k]; #endif print_transfer(transfer); - PRINTF ("L1 to L2 \n"); + // L1 -> L2 errors[core_id] += test_idma_2D(core_id, transfer, 0, 0); - PRINTF ("L2 to L1 \n"); + // L2 -> L1 errors[core_id] += test_idma_2D(core_id, transfer, 1, 0); - PRINTF ("L1 to L1 \n"); + // L1 -> L1 errors[core_id] += test_idma_2D(core_id, transfer, 0, 1); } } diff --git a/idma_tests/idma_multi_core_2d/idma_multi_core_2d.h b/idma_tests/idma_multi_core_2d/idma_multi_core_2d.h index 94a431e..87d9047 100644 --- a/idma_tests/idma_multi_core_2d/idma_multi_core_2d.h +++ b/idma_tests/idma_multi_core_2d/idma_multi_core_2d.h @@ -28,6 +28,8 @@ extern "C" { #define DMA_CONF_DEBURST 0 #define DMA_CONF_SERIALIZE 0 +#define CORE_SPACE 2048 + #ifdef QUICK_MODE #define TRANSFERS 7 #else diff --git a/idma_tests/idma_multi_core_2d/idma_parameters.h b/idma_tests/idma_multi_core_2d/idma_parameters.h index ebe5a3d..bc02dbc 100644 --- a/idma_tests/idma_multi_core_2d/idma_parameters.h +++ b/idma_tests/idma_multi_core_2d/idma_parameters.h @@ -6,12 +6,13 @@ typedef struct { } TransferParameters; TransferParameters transfer_params[] = { -{88, 3, 8, 11}, -{85, 2, 6, 5}, -{73, 1, 10, 8}, -{69, 3, 4, 5}, -{21, 8, 14, 14}, -{27, 2, 11, 8}, -{67, 7, 13, 15}, +{5, 1, 10, 8}, +{64, 6, 12, 8}, +{46, 5, 11, 7}, +{66, 3, 5, 9}, +{54, 7, 13, 10}, +{84, 8, 18, 15}, +{106, 2, 12, 11}, +{65, 9, 12, 12}, }; diff --git a/idma_tests/idma_multi_core_3d/gen_stimuli_idma_3d.py b/idma_tests/idma_multi_core_3d/gen_stimuli_idma_3d.py index d22e129..75469b9 100644 --- a/idma_tests/idma_multi_core_3d/gen_stimuli_idma_3d.py +++ b/idma_tests/idma_multi_core_3d/gen_stimuli_idma_3d.py @@ -47,11 +47,9 @@ def write_define(f, name,val): NB_TRANSFERS = random.randint(1, 10) -# Randomize between 1 and 512 the size of each transfer - -CORE_SPACE = 2048 +# Randomize between 1 and 128 the size of each transfer TRANSFER_SIZE = 128 -MAX_STRIDE = 5 +MAX_STRIDE = 10 MAX_LENGTH = 10 MAX_REPS = 5 @@ -61,7 +59,6 @@ def write_define(f, name,val): f_defines = open('idma_defines.h', 'w') write_define(f_defines, 'NB_TRANSFERS', NB_TRANSFERS) -write_define(f_defines, 'CORE_SPACE', CORE_SPACE) write_transfer_parameters_struct(f_params, 'TransferParameters') write_transfer_parameters_array(f_params, 'transfer_params', transfer_params) diff --git a/idma_tests/idma_multi_core_3d/idma_defines.h b/idma_tests/idma_multi_core_3d/idma_defines.h index 4fe33cb..05d5bda 100644 --- a/idma_tests/idma_multi_core_3d/idma_defines.h +++ b/idma_tests/idma_multi_core_3d/idma_defines.h @@ -1,4 +1,2 @@ -#define NB_TRANSFERS 6 - -#define CORE_SPACE 2048 +#define NB_TRANSFERS 10 diff --git a/idma_tests/idma_multi_core_3d/idma_multi_core_3d.c b/idma_tests/idma_multi_core_3d/idma_multi_core_3d.c index 78a8cb1..b8479ff 100644 --- a/idma_tests/idma_multi_core_3d/idma_multi_core_3d.c +++ b/idma_tests/idma_multi_core_3d/idma_multi_core_3d.c @@ -153,13 +153,6 @@ int main () { TransferParameters transfer; - if (core_id == 0){ - for (int i = 0; i < 8; i++){ - PRINTF ("CORE: %d \n", i); - PRINTF ("loc_addr: %8x | loc_dst_addr: %8x | ext_addr: %8x \n", l1_addr[i], l1_dst_addr[i], l2_addr[i]); - } - } - #ifdef MULTI_CORE_P // MULTI CORE PARALLEL MODE: each core uses the iDMA in a parallel manner if (core_id == 0) { diff --git a/idma_tests/idma_multi_core_3d/idma_multi_core_3d.h b/idma_tests/idma_multi_core_3d/idma_multi_core_3d.h index 27c2833..a6547ba 100644 --- a/idma_tests/idma_multi_core_3d/idma_multi_core_3d.h +++ b/idma_tests/idma_multi_core_3d/idma_multi_core_3d.h @@ -28,6 +28,8 @@ extern "C" { #define DMA_CONF_DEBURST 0 #define DMA_CONF_SERIALIZE 0 +#define CORE_SPACE 2048 + #ifdef QUICK_MODE #define TRANSFERS 9 #else diff --git a/idma_tests/idma_multi_core_3d/idma_parameters.h b/idma_tests/idma_multi_core_3d/idma_parameters.h index 05cb0cd..77c06db 100644 --- a/idma_tests/idma_multi_core_3d/idma_parameters.h +++ b/idma_tests/idma_multi_core_3d/idma_parameters.h @@ -9,11 +9,15 @@ typedef struct { } TransferParameters; TransferParameters transfer_params[] = { -{94, 5, 9, 10, 9, 8, 5}, -{66, 9, 11, 14, 13, 13, 3}, -{126, 3, 6, 4, 4, 4, 5}, -{106, 6, 7, 7, 8, 7, 2}, -{28, 7, 9, 12, 9, 12, 4}, -{64, 10, 13, 15, 11, 12, 4}, +{107, 5, 12, 13, 7, 12, 1}, +{86, 5, 7, 10, 6, 12, 4}, +{95, 10, 12, 20, 15, 17, 4}, +{40, 2, 4, 12, 5, 4, 3}, +{105, 4, 14, 6, 13, 9, 3}, +{72, 8, 11, 17, 13, 15, 2}, +{54, 10, 14, 20, 13, 11, 3}, +{74, 6, 15, 10, 10, 11, 1}, +{114, 4, 9, 8, 12, 9, 3}, +{92, 3, 13, 5, 8, 5, 1}, };