% 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): V. Mrazek, R. Hrbacek, Z. Vasicek and L. Sekanina, "EvoApprox8b: Library of approximate adders and multipliers for circuit design and benchmarking of approximation methods". Design, Automation & Test in Europe Conference & Exhibition (DATE), 2017, Lausanne, 2017, pp. 258-261. doi: 10.23919/DATE.2017.7926993 
% This file contains a circuit from evoapprox8b dataset. Note that a new version of library was already published.

function [ c ] = mul8_364( a, b )
% Approximate function mul8_364
%  Library = EvoApprox8b
%  Circuit = mul8_364
%  Area   (180) = 8472
%  Delay  (180) = 3.790
%  Power  (180) = 4460.50
%  Area   (45) = 618
%  Delay  (45) = 1.420
%  Power  (45) = 390.70
%  Nodes = 121
%  HD = 0
%  MAE = 0.00000
%  MSE = 0.00000
%  MRE = 0.00 %
%  WCE = 0
%  WCRE = 0 %
%  EP = 0.0 %
  a = uint16(a);
  b = uint16(b);
  c = 0;
  n0 = bitand(bitshift(a, -0), 1, 'uint16');
  n2 = bitand(bitshift(a, -1), 1, 'uint16');
  n4 = bitand(bitshift(a, -2), 1, 'uint16');
  n6 = bitand(bitshift(a, -3), 1, 'uint16');
  n8 = bitand(bitshift(a, -4), 1, 'uint16');
  n10 = bitand(bitshift(a, -5), 1, 'uint16');
  n12 = bitand(bitshift(a, -6), 1, 'uint16');
  n14 = bitand(bitshift(a, -7), 1, 'uint16');
  n16 = bitand(bitshift(b, -0), 1, 'uint16');
  n18 = bitand(bitshift(b, -1), 1, 'uint16');
  n20 = bitand(bitshift(b, -2), 1, 'uint16');
  n22 = bitand(bitshift(b, -3), 1, 'uint16');
  n24 = bitand(bitshift(b, -4), 1, 'uint16');
  n26 = bitand(bitshift(b, -5), 1, 'uint16');
  n28 = bitand(bitshift(b, -6), 1, 'uint16');
  n30 = bitand(bitshift(b, -7), 1, 'uint16');
  n32 = bitand(n0, n16);
  n48 = bitand(n2, n16);
  n64 = bitand(n4, n16);
  n82 = bitand(n6, n16);
  n98 = bitand(n8, n16);
  n114 = bitand(n10, n16);
  n132 = bitand(n12, n16);
  n149 = bitand(n14, n16);
  n164 = bitand(n0, n18);
  n167 = n149;
  n182 = bitand(n2, n18);
  n198 = bitand(n4, n18);
  n214 = bitand(n6, n18);
  n232 = bitand(n8, n18);
  n248 = bitand(n10, n18);
  n264 = bitand(n12, n18);
  n282 = bitand(n14, n18);
  n298 = bitxor(n48, n164);
  n299 = bitand(n48, n164);
  n314 = bitxor(n64, n182);
  n315 = bitand(n64, n182);
  n332 = bitxor(n82, n198);
  n333 = bitand(n82, n198);
  n348 = bitxor(n98, n214);
  n349 = bitand(n98, n214);
  n364 = bitxor(n114, n232);
  n365 = bitand(n114, n232);
  n382 = bitxor(n132, n248);
  n383 = bitand(n132, n248);
  n398 = bitxor(n167, n264);
  n399 = bitand(n167, n264);
  n414 = bitand(n0, n20);
  n432 = bitand(n2, n20);
  n448 = bitand(n4, n20);
  n464 = bitand(n6, n20);
  n482 = bitand(n8, n20);
  n498 = bitand(n10, n20);
  n514 = bitand(n12, n20);
  n532 = bitand(n14, n20);
  n548 = bitxor(bitxor(n314, n414), n299);
  n549 = bitor(bitor(bitand(n314, n414), bitand(n414, n299)), bitand(n314, n299));
  n564 = bitxor(bitxor(n332, n432), n315);
  n565 = bitor(bitor(bitand(n332, n432), bitand(n432, n315)), bitand(n332, n315));
  n582 = bitxor(bitxor(n348, n448), n333);
  n583 = bitor(bitor(bitand(n348, n448), bitand(n448, n333)), bitand(n348, n333));
  n598 = bitxor(bitxor(n364, n464), n349);
  n599 = bitor(bitor(bitand(n364, n464), bitand(n464, n349)), bitand(n364, n349));
  n614 = bitxor(bitxor(n382, n482), n365);
  n615 = bitor(bitor(bitand(n382, n482), bitand(n482, n365)), bitand(n382, n365));
  n632 = bitxor(bitxor(n398, n498), n383);
  n633 = bitor(bitor(bitand(n398, n498), bitand(n498, n383)), bitand(n398, n383));
  n648 = bitxor(bitxor(n282, n514), n399);
  n649 = bitor(bitor(bitand(n282, n514), bitand(n514, n399)), bitand(n282, n399));
  n664 = bitand(n0, n22);
  n682 = bitand(n2, n22);
  n698 = bitand(n4, n22);
  n714 = bitand(n6, n22);
  n732 = bitand(n8, n22);
  n748 = bitand(n10, n22);
  n764 = bitand(n12, n22);
  n782 = bitand(n14, n22);
  n798 = bitxor(bitxor(n564, n664), n549);
  n799 = bitor(bitor(bitand(n564, n664), bitand(n664, n549)), bitand(n564, n549));
  n814 = bitxor(bitxor(n582, n682), n565);
  n815 = bitor(bitor(bitand(n582, n682), bitand(n682, n565)), bitand(n582, n565));
  n832 = bitxor(bitxor(n598, n698), n583);
  n833 = bitor(bitor(bitand(n598, n698), bitand(n698, n583)), bitand(n598, n583));
  n848 = bitxor(bitxor(n614, n714), n599);
  n849 = bitor(bitor(bitand(n614, n714), bitand(n714, n599)), bitand(n614, n599));
  n864 = bitxor(bitxor(n632, n732), n615);
  n865 = bitor(bitor(bitand(n632, n732), bitand(n732, n615)), bitand(n632, n615));
  n882 = bitxor(bitxor(n648, n748), n633);
  n883 = bitor(bitor(bitand(n648, n748), bitand(n748, n633)), bitand(n648, n633));
  n898 = bitxor(bitxor(n532, n764), n649);
  n899 = bitor(bitor(bitand(n532, n764), bitand(n764, n649)), bitand(n532, n649));
  n914 = bitand(n0, n24);
  n932 = bitand(n2, n24);
  n948 = bitand(n4, n24);
  n964 = bitand(n6, n24);
  n982 = bitand(n8, n24);
  n998 = bitand(n10, n24);
  n1014 = bitand(n12, n24);
  n1032 = bitand(n14, n24);
  n1048 = bitxor(bitxor(n814, n914), n799);
  n1049 = bitor(bitor(bitand(n814, n914), bitand(n914, n799)), bitand(n814, n799));
  n1064 = bitxor(bitxor(n832, n932), n815);
  n1065 = bitor(bitor(bitand(n832, n932), bitand(n932, n815)), bitand(n832, n815));
  n1082 = bitxor(bitxor(n848, n948), n833);
  n1083 = bitor(bitor(bitand(n848, n948), bitand(n948, n833)), bitand(n848, n833));
  n1098 = bitxor(bitxor(n864, n964), n849);
  n1099 = bitor(bitor(bitand(n864, n964), bitand(n964, n849)), bitand(n864, n849));
  n1114 = bitxor(bitxor(n882, n982), n865);
  n1115 = bitor(bitor(bitand(n882, n982), bitand(n982, n865)), bitand(n882, n865));
  n1132 = bitxor(bitxor(n898, n998), n883);
  n1133 = bitor(bitor(bitand(n898, n998), bitand(n998, n883)), bitand(n898, n883));
  n1148 = bitxor(bitxor(n782, n1014), n899);
  n1149 = bitor(bitor(bitand(n782, n1014), bitand(n1014, n899)), bitand(n782, n899));
  n1164 = bitand(n0, n26);
  n1182 = bitand(n2, n26);
  n1198 = bitand(n4, n26);
  n1214 = bitand(n6, n26);
  n1232 = bitand(n8, n26);
  n1248 = bitand(n10, n26);
  n1264 = bitand(n12, n26);
  n1282 = bitand(n14, n26);
  n1298 = bitxor(bitxor(n1064, n1164), n1049);
  n1299 = bitor(bitor(bitand(n1064, n1164), bitand(n1164, n1049)), bitand(n1064, n1049));
  n1314 = bitxor(bitxor(n1082, n1182), n1065);
  n1315 = bitor(bitor(bitand(n1082, n1182), bitand(n1182, n1065)), bitand(n1082, n1065));
  n1332 = bitxor(bitxor(n1098, n1198), n1083);
  n1333 = bitor(bitor(bitand(n1098, n1198), bitand(n1198, n1083)), bitand(n1098, n1083));
  n1348 = bitxor(bitxor(n1114, n1214), n1099);
  n1349 = bitor(bitor(bitand(n1114, n1214), bitand(n1214, n1099)), bitand(n1114, n1099));
  n1364 = bitxor(bitxor(n1132, n1232), n1115);
  n1365 = bitor(bitor(bitand(n1132, n1232), bitand(n1232, n1115)), bitand(n1132, n1115));
  n1382 = bitxor(bitxor(n1148, n1248), n1133);
  n1383 = bitor(bitor(bitand(n1148, n1248), bitand(n1248, n1133)), bitand(n1148, n1133));
  n1398 = bitxor(bitxor(n1032, n1264), n1149);
  n1399 = bitor(bitor(bitand(n1032, n1264), bitand(n1264, n1149)), bitand(n1032, n1149));
  n1414 = bitand(n0, n28);
  n1432 = bitand(n2, n28);
  n1448 = bitand(n4, n28);
  n1464 = bitand(n6, n28);
  n1482 = bitand(n8, n28);
  n1498 = bitand(n10, n28);
  n1514 = bitand(n12, n28);
  n1532 = bitand(n14, n28);
  n1548 = bitxor(bitxor(n1314, n1414), n1299);
  n1549 = bitor(bitor(bitand(n1314, n1414), bitand(n1414, n1299)), bitand(n1314, n1299));
  n1564 = bitxor(bitxor(n1332, n1432), n1315);
  n1565 = bitor(bitor(bitand(n1332, n1432), bitand(n1432, n1315)), bitand(n1332, n1315));
  n1582 = bitxor(bitxor(n1348, n1448), n1333);
  n1583 = bitor(bitor(bitand(n1348, n1448), bitand(n1448, n1333)), bitand(n1348, n1333));
  n1598 = bitxor(bitxor(n1364, n1464), n1349);
  n1599 = bitor(bitor(bitand(n1364, n1464), bitand(n1464, n1349)), bitand(n1364, n1349));
  n1614 = bitxor(bitxor(n1382, n1482), n1365);
  n1615 = bitor(bitor(bitand(n1382, n1482), bitand(n1482, n1365)), bitand(n1382, n1365));
  n1632 = bitxor(bitxor(n1398, n1498), n1383);
  n1633 = bitor(bitor(bitand(n1398, n1498), bitand(n1498, n1383)), bitand(n1398, n1383));
  n1648 = bitxor(bitxor(n1282, n1514), n1399);
  n1649 = bitor(bitor(bitand(n1282, n1514), bitand(n1514, n1399)), bitand(n1282, n1399));
  n1664 = bitand(n0, n30);
  n1682 = bitand(n2, n30);
  n1698 = bitand(n4, n30);
  n1714 = bitand(n6, n30);
  n1732 = bitand(n8, n30);
  n1748 = bitand(n10, n30);
  n1764 = bitand(n12, n30);
  n1782 = bitand(n14, n30);
  n1798 = bitxor(bitxor(n1564, n1664), n1549);
  n1799 = bitor(bitor(bitand(n1564, n1664), bitand(n1664, n1549)), bitand(n1564, n1549));
  n1814 = bitxor(bitxor(n1582, n1682), n1565);
  n1815 = bitor(bitor(bitand(n1582, n1682), bitand(n1682, n1565)), bitand(n1582, n1565));
  n1832 = bitxor(bitxor(n1598, n1698), n1583);
  n1833 = bitor(bitor(bitand(n1598, n1698), bitand(n1698, n1583)), bitand(n1598, n1583));
  n1848 = bitxor(bitxor(n1614, n1714), n1599);
  n1849 = bitor(bitor(bitand(n1614, n1714), bitand(n1714, n1599)), bitand(n1614, n1599));
  n1864 = bitxor(bitxor(n1632, n1732), n1615);
  n1865 = bitor(bitor(bitand(n1632, n1732), bitand(n1732, n1615)), bitand(n1632, n1615));
  n1882 = bitxor(bitxor(n1648, n1748), n1633);
  n1883 = bitor(bitor(bitand(n1648, n1748), bitand(n1748, n1633)), bitand(n1648, n1633));
  n1898 = bitxor(bitxor(n1532, n1764), n1649);
  n1899 = bitor(bitor(bitand(n1532, n1764), bitand(n1764, n1649)), bitand(n1532, n1649));
  n1914 = bitxor(n1814, n1799);
  n1915 = bitand(n1814, n1799);
  n1932 = bitxor(bitxor(n1832, n1815), n1915);
  n1933 = bitor(bitor(bitand(n1832, n1815), bitand(n1815, n1915)), bitand(n1832, n1915));
  n1948 = bitxor(bitxor(n1848, n1833), n1933);
  n1949 = bitor(bitor(bitand(n1848, n1833), bitand(n1833, n1933)), bitand(n1848, n1933));
  n1964 = bitxor(bitxor(n1864, n1849), n1949);
  n1965 = bitor(bitor(bitand(n1864, n1849), bitand(n1849, n1949)), bitand(n1864, n1949));
  n1982 = bitxor(bitxor(n1882, n1865), n1965);
  n1983 = bitor(bitor(bitand(n1882, n1865), bitand(n1865, n1965)), bitand(n1882, n1965));
  n1998 = bitxor(bitxor(n1898, n1883), n1983);
  n1999 = bitor(bitor(bitand(n1898, n1883), bitand(n1883, n1983)), bitand(n1898, n1983));
  n2014 = bitxor(bitxor(n1782, n1899), n1999);
  n2015 = bitor(bitor(bitand(n1782, n1899), bitand(n1899, n1999)), bitand(n1782, n1999));
  c = bitor(c, bitshift(bitand(n32, 1), 0));
  c = bitor(c, bitshift(bitand(n298, 1), 1));
  c = bitor(c, bitshift(bitand(n548, 1), 2));
  c = bitor(c, bitshift(bitand(n798, 1), 3));
  c = bitor(c, bitshift(bitand(n1048, 1), 4));
  c = bitor(c, bitshift(bitand(n1298, 1), 5));
  c = bitor(c, bitshift(bitand(n1548, 1), 6));
  c = bitor(c, bitshift(bitand(n1798, 1), 7));
  c = bitor(c, bitshift(bitand(n1914, 1), 8));
  c = bitor(c, bitshift(bitand(n1932, 1), 9));
  c = bitor(c, bitshift(bitand(n1948, 1), 10));
  c = bitor(c, bitshift(bitand(n1964, 1), 11));
  c = bitor(c, bitshift(bitand(n1982, 1), 12));
  c = bitor(c, bitshift(bitand(n1998, 1), 13));
  c = bitor(c, bitshift(bitand(n2014, 1), 14));
  c = bitor(c, bitshift(bitand(n2015, 1), 15));
end