/***
* This code is a part of EvoApproxLib library (ehw.fit.vutbr.cz/approxlib) distributed under The MIT License.
* When used, please cite the following article(s): M. Ceska, J. Matyas, V. Mrazek, and T. Vojnar,  Designing Approximate Arithmetic Circuits with Combined Error Constraints. In: Proceeding of 25th Euromicro Conference on Digital System Design 2022 (DSD'22). Gran Canaria, 2022. 
* This file contains a circuit from a sub-set of pareto optimal circuits with respect to the pwr and mre parameters
***/
// MAE% = 0.44 %
// MAE = 285 
// WCE% = 4.13 %
// WCE = 2709 
// WCRE% = 125.00 %
// EP% = 98.68 %
// MRE% = 5.03 %
// MSE = 172520 
// PDK45_PWR = 0.142 mW
// PDK45_AREA = 347.8 um2
// PDK45_DELAY = 0.91 ns
#include <stdint.h>
#include <stdlib.h>

uint16_t mul8u_2NDH(uint8_t a, uint8_t b) {
uint8_t w0;
uint8_t w1;
uint8_t w2;
uint8_t w3;
uint8_t w4;
uint8_t w5;
uint8_t w6;
uint8_t w7;
uint8_t w8;
uint8_t w9;
uint8_t w10;
uint8_t w11;
uint8_t w12;
uint8_t w13;
uint8_t w14;
uint8_t w15;
uint8_t w18;
uint8_t w20;
uint8_t w21;
uint8_t w23;
uint8_t w24;
uint8_t w27;
uint8_t w31;
uint8_t w33;
uint8_t w36;
uint8_t w37;
uint8_t w39;
uint8_t w42;
uint8_t w43;
uint8_t w44;
uint8_t w45;
uint8_t w49;
uint8_t w50;
uint8_t w51;
uint8_t w52;
uint8_t w53;
uint8_t w54;
uint8_t w55;
uint8_t w56;
uint8_t w58;
uint8_t w59;
uint8_t w60;
uint8_t w63;
uint8_t w64;
uint8_t w65;
uint8_t w69;
uint8_t w73;
uint8_t w78;
uint8_t w79;
uint8_t w81;
uint8_t w84;
uint8_t w86;
uint8_t w91;
uint8_t w92;
uint8_t w93;
uint8_t w94;
uint8_t w99;
uint8_t w100;
uint8_t w103;
uint8_t w104;
uint8_t w112;
uint8_t w116;
uint8_t w121;
uint8_t w124;
uint8_t w125;
uint8_t w129;
uint8_t w131;
uint8_t w133;
uint8_t w134;
uint8_t w138;
uint8_t w143;
uint8_t w146;
uint8_t w147;
uint8_t w148;
uint8_t w149;
uint8_t w151;
uint8_t w153;
uint8_t w157;
uint8_t w161;
uint8_t w163;
uint8_t w164;
uint8_t w165;
uint8_t w166;
uint8_t w167;
uint8_t w168;
uint8_t w172;
uint8_t w173;
uint8_t w176;
uint8_t w179;
uint8_t w180;
uint8_t w181;
uint8_t w183;
uint8_t w187;
uint8_t w193;
uint8_t w197;
uint8_t w201;
uint8_t w202;
uint8_t w203;
uint8_t w206;
uint8_t w207;
uint8_t w208;
uint8_t w213;
uint8_t w216;
uint8_t w217;
uint8_t w218;
uint8_t w219;
uint8_t w220;
uint8_t w221;
uint8_t w222;
uint8_t w223;
uint8_t w224;
uint8_t w228;
uint8_t w230;
uint8_t w232;
uint8_t w233;
uint8_t w235;
uint8_t w238;
uint8_t w240;
uint8_t w248;
uint8_t w251;
uint8_t w253;
uint8_t w256;
uint8_t w257;
uint8_t w258;
uint8_t w259;
uint8_t w264;
uint8_t w266;
uint8_t w267;
uint8_t w269;
uint8_t w274;
uint8_t w275;
uint8_t w276;
uint8_t w281;
uint8_t w287;
uint8_t w289;
uint8_t w290;
uint8_t w292;
uint8_t w297;
uint8_t w302;
uint8_t w304;
uint8_t w309;
uint8_t w322;
uint8_t w330;
uint8_t w349;
uint8_t w350;
uint8_t w353;
uint8_t w354;
uint8_t w356;
uint8_t w357;
uint8_t w358;
uint8_t w359;
uint8_t w360;
uint8_t w361;
uint8_t w362;
uint16_t res = 0;
w0 = (a >> 0) & 0x1;
w1 = (a >> 1) & 0x1;
w2 = (a >> 2) & 0x1;
w3 = (a >> 3) & 0x1;
w4 = (a >> 4) & 0x1;
w5 = (a >> 5) & 0x1;
w6 = (a >> 6) & 0x1;
w7 = (a >> 7) & 0x1;
w8 = (b >> 0) & 0x1;
w9 = (b >> 1) & 0x1;
w10 = (b >> 2) & 0x1;
w11 = (b >> 3) & 0x1;
w12 = (b >> 4) & 0x1;
w13 = (b >> 5) & 0x1;
w14 = (b >> 6) & 0x1;
w15 = (b >> 7) & 0x1;
w18 = w7 & w13;
w20 = w4 & w15;
w21 = w0 & w15;
w23 = w7 & w9;
w24 = w2 & w13;
w27 = w3 & w13;
w31 = w5 & w15;
w33 = w4 & w12;
w36 = w2 & w14;
w37 = w7 & w11;
w39 = w6 & w12;
w42 = w4 & w11;
w43 = w6 & w10;
w44 = w3 & w12;
w45 = w6 & w14;
w49 = w7 & w10;
w50 = w6 & w11;
w51 = w1 & w15;
w52 = w7 & w8;
w53 = w7 & w12;
w54 = w3 & w14;
w55 = w1 & w14;
w56 = w5 & w14;
w58 = w6 & w15;
w59 = w5 & w10;
w60 = w5 & w12;
w63 = w5 & w13;
w64 = w7 & w14;
w65 = w3 & w15;
w69 = w6 & w9;
w73 = w7 & w15;
w78 = w4 & w13;
w79 = w5 & w11;
w81 = w2 & w15;
w84 = w6 & w13;
w86 = w4 & w14;
w91 = w23 | w43;
w92 = w58 & w64;
w93 = w64 ^ w58;
w94 = w50 | w60;
w99 = w37 ^ w39;
w100 = w37 & w39;
w103 = w99 ^ w63;
w104 = w79 | w33;
w112 = w42 | w36;
w116 = w94 | w78;
w121 = w79 & w39;
w124 = w78 & w94;
w125 = w73 ^ w92;
w129 = w84 & w53;
w131 = w53 ^ w84;
w133 = w129 ^ w45;
w134 = w31 & w133;
w138 = w63 & w99;
w143 = w24 | w44;
w146 = w100 | w138;
w147 = w143 | w55;
w148 = w104 | w27;
w149 = w124 & w14;
w151 = w146 ^ w56;
w153 = w133 ^ w31;
w157 = w124 ^ w86;
w161 = w49 | w116;
w163 = w116 & w49;
w164 = w103 ^ w163;
w165 = w146 & w56;
w166 = w153 & w18;
w167 = w112 | w59;
w168 = w151 ^ w20;
w172 = w121 | w54;
w173 = w93 & w166;
w176 = w129 & w14;
w179 = w131 ^ w168;
w180 = w91 ^ w167;
w181 = w168 & w131;
w183 = w157 | w65;
w187 = w103 & w163;
w193 = w20 & w151;
w197 = w18 ^ w153;
w201 = w176 | w134;
w202 = w93 ^ w166;
w203 = w65 & w157;
w206 = w165 | w193;
w207 = w91 & w167;
w208 = w197 & w181;
w213 = w164 ^ w183;
w216 = w197 ^ w181;
w217 = w201 & w202;
w218 = w149 | w203;
w219 = w148 & w180;
w220 = w36 | w51;
w221 = w173 | w217;
w222 = w202 ^ w201;
w223 = w183 & w164;
w224 = w180 ^ w148;
w228 = w73 & w221;
w230 = w206 & w216;
w232 = w216 ^ w206;
w233 = w187 | w223;
w235 = w172 | w81;
w238 = w125 ^ w221;
w240 = w179 & w233;
w248 = w208 | w230;
w251 = w207 | w219;
w253 = w179 ^ w233;
w256 = w161 ^ w251;
w257 = w222 ^ w248;
w258 = w222 & w248;
w259 = w235 & w256;
w264 = w253 ^ w218;
w266 = w218 & w253;
w267 = w240 | w266;
w269 = w161 & w251;
w274 = w256 ^ w235;
w275 = w232 & w267;
w276 = w232 ^ w267;
w281 = w222 & w275;
w287 = w269 | w259;
w289 = w224 | w220;
w290 = w147 | w69;
w292 = w258 | w281;
w297 = w290 | w52;
w302 = w213 & w287;
w304 = w213 ^ w287;
w309 = w297 | w21;
w322 = w264 ^ w302;
w330 = w264 & w302;
w349 = w276 ^ w330;
w350 = w276 & w330;
w353 = w257 & w350;
w354 = w275 | w350;
w356 = w257 ^ w354;
w357 = w292 | w353;
w358 = w238 ^ w357;
w359 = w322;
w360 = w73 & w357;
w361 = w228 | w360;
w362 = w92 | w361;
res |= ((long) w151 & 0x1) << 0;
res |= ((long) w222 & 0x1) << 1;
res |= ((long) w143 & 0x1) << 2;
res |= ((long) w143 & 0x1) << 3;
res |= ((long) w290 & 0x1) << 4;
res |= ((long) w289 & 0x1) << 5;
res |= ((long) w309 & 0x1) << 6;
res |= ((long) w309 & 0x1) << 7;
res |= ((long) w289 & 0x1) << 8;
res |= ((long) w274 & 0x1) << 9;
res |= ((long) w304 & 0x1) << 10;
res |= ((long) w359 & 0x1) << 11;
res |= ((long) w349 & 0x1) << 12;
res |= ((long) w356 & 0x1) << 13;
res |= ((long) w358 & 0x1) << 14;
res |= ((long) w362 & 0x1) << 15;
return res;
}