/*
* Copyright (c) 2023, Alliance for Open Media. All rights reserved.
*
* This source code is subject to the terms of the BSD 2 Clause License and
* the Alliance for Open Media Patent License 1.0. If the BSD 2 Clause License
* was not distributed with this source code in the LICENSE file, you can
* obtain it at www.aomedia.org/license/software. If the Alliance for Open
* Media Patent License 1.0 was not distributed with this source code in the
* PATENTS file, you can obtain it at www.aomedia.org/license/patent.
*/
#include <arm_neon.h>
#include <assert.h>
#include <math.h>
#include <stdbool.h>
#include "config/aom_config.h"
#include "config/av1_rtcd.h"
#include "aom_dsp/aom_dsp_common.h"
#include "aom_dsp/arm/sum_neon.h"
#include "av1/common/av1_common_int.h"
#include "av1/encoder/cnn.h"
#include "av1/encoder/partition_cnn_weights.h"
// The CNN weights used in av1_cnn_convolve_no_maxpool_padding_valid are
// declared (av1_intra_mode_cnn_partition_cnn_layer_[01234]_kernel) in
// partition_cnn_weights.h. However, to enable linear memory access, rearrange
// the weight tables here.
static const float weights_layer_1[] = {
0 .228403 f, 0 .031690 f, -0 .251710 f, -0 .046230 f, 0 .413294 f, -0 .236732 f,
-0 .038291 f, 0 .210766 f, 0 .427196 f, -0 .384319 f, -0 .439463 f, 0 .366015 f,
0 .112263 f, -0 .144168 f, -0 .075017 f, 0 .119629 f, 0 .325200 f, -0 .678246 f,
-0 .370826 f, -0 .341362 f, -0 .503392 f, 0 .400884 f, 0 .465214 f, -0 .360847 f,
0 .187100 f, -0 .190757 f, -0 .131906 f, 0 .121492 f, -0 .303556 f, -0 .007658 f,
0 .380077 f, -0 .066394 f, -0 .016043 f, -1 .490730 f, -0 .120682 f, 0 .132062 f,
0 .086185 f, -0 .042766 f, -0 .087069 f, 0 .029426 f, 0 .309583 f, -0 .029985 f,
-0 .297429 f, -0 .018139 f, -0 .688828 f, 0 .756607 f, 0 .706410 f, -0 .696826 f,
-0 .087793 f, -0 .023304 f, -0 .012332 f, -0 .018043 f, -0 .410268 f, 0 .352143 f,
0 .391284 f, -0 .363178 f, -0 .295034 f, 0 .160246 f, -0 .149446 f, 0 .260145 f,
-0 .252249 f, 0 .190826 f, 0 .251206 f, -0 .270796 f, -0 .979219 f, 0 .884880 f,
0 .962057 f, -0 .847601 f, -0 .011053 f, 0 .118765 f, -0 .028428 f, -0 .020138 f,
0 .400274 f, -0 .382845 f, -0 .462766 f, 0 .390654 f, 0 .361223 f, -0 .320068 f,
-0 .372084 f, 0 .313196 f, 0 .241933 f, -0 .416614 f, -0 .008722 f, -0 .255078 f,
0 .078730 f, -0 .381935 f, -0 .204577 f, 0 .159768 f, 0 .071853 f, -0 .126294 f,
-0 .036186 f, -0 .007900 f, 0 .380071 f, -0 .298882 f, 0 .387941 f, -0 .267350 f,
-0 .586802 f, 0 .477785 f, -0 .000013 f, 0 .197296 f, -0 .079154 f, -0 .005811 f,
-0 .044300 f, -0 .021192 f, -0 .020879 f, -0 .005265 f, 0 .082277 f, -0 .139132 f,
-0 .239237 f, 0 .440234 f, -0 .542342 f, 0 .378360 f, -0 .070974 f, 0 .272702 f,
-0 .278939 f, -0 .044948 f, -0 .134197 f, -0 .007172 f, -0 .353628 f, -0 .128091 f,
0 .357458 f, -0 .037614 f, -0 .144983 f, 0 .220623 f, -0 .003394 f, -0 .070166 f,
0 .200370 f, -0 .166037 f, 0 .224448 f, -0 .012990 f, -0 .098853 f, 0 .008613 f,
-0 .017669 f, 0 .070641 f, 0 .174530 f, -0 .119822 f, -0 .065096 f, 0 .118487 f,
-0 .024764 f, -0 .050466 f, 0 .066631 f, -0 .075896 f, -0 .062363 f, 0 .212604 f,
-0 .377322 f, 0 .306306 f, -0 .399733 f, 0 .238624 f, 0 .233571 f, -0 .344080 f,
0 .462491 f, -0 .565210 f, -0 .035074 f, -0 .010459 f, 0 .084382 f, 0 .052294 f,
0 .065714 f, 0 .013716 f, 0 .135036 f, 0 .000588 f, 0 .181079 f, -0 .566344 f,
0 .395561 f, -0 .398509 f, 0 .450017 f, -1 .462710 f, 1 .138280 f, -0 .447774 f,
0 .247936 f, -0 .417067 f, 0 .165997 f, -0 .458632 f, -0 .018527 f, 0 .308461 f,
0 .541266 f, 0 .162257 f, 0 .601786 f, -1 .275840 f, -0 .373404 f, -0 .589747 f,
0 .026539 f, -0 .219327 f, 0 .142972 f, -0 .018496 f, 0 .075204 f, -0 .775190 f,
0 .237307 f, -0 .348252 f, 0 .117792 f, -0 .094332 f, 0 .363101 f, -0 .065025 f,
0 .816662 f, 0 .590110 f, 0 .752202 f, -0 .308599 f, 0 .258337 f, -0 .842085 f,
0 .695788 f, -0 .205615 f, 0 .093930 f, -0 .392536 f, 0 .463093 f, -0 .432456 f,
0 .041660 f, -0 .827264 f, 0 .309128 f, -0 .354658 f, 0 .451957 f, -1 .406640 f,
0 .773192 f, -0 .892943 f, 0 .134856 f, -0 .467808 f, 0 .306003 f, -0 .226560 f,
0 .086865 f, -0 .104102 f, 0 .148098 f, -0 .082658 f, 0 .316655 f, -1 .028310 f,
0 .741566 f, -0 .345326 f, 0 .052379 f, -0 .275613 f, 0 .191765 f, -0 .162391 f,
0 .000976 f, 0 .093061 f, 0 .068649 f, 0 .033582 f, 0 .239727 f, -0 .647769 f,
0 .218493 f, -0 .397120 f, 0 .268229 f, -0 .303424 f, 0 .185393 f, -0 .314189 f,
0 .101728 f, -0 .163083 f, -0 .084989 f, 0 .136783 f, -0 .264346 f, 0 .465914 f,
0 .220395 f, -0 .252968 f, -0 .326661 f, 0 .271483 f, 0 .374717 f, -0 .311570 f,
-0 .082119 f, 0 .020870 f, 0 .091975 f, -0 .030582 f, -0 .487148 f, 0 .198912 f,
0 .024554 f, -0 .749363 f, -0 .102267 f, 0 .097787 f, 0 .141459 f, -0 .110706 f,
0 .079467 f, -0 .082570 f, -0 .347567 f, 0 .341043 f, -0 .137871 f, 0 .112319 f,
0 .064733 f, -0 .082869 f, 0 .269999 f, -0 .408184 f, -0 .183443 f, 0 .180608 f,
0 .223345 f, -0 .357376 f, -0 .244593 f, 0 .355348 f, -0 .072701 f, -0 .034311 f,
0 .096544 f, 0 .016407 f, 0 .417550 f, -0 .367772 f, -0 .484535 f, 0 .405977 f,
0 .314243 f, -0 .099622 f, -0 .192218 f, -0 .012780 f, 0 .434551 f, -0 .399047 f,
-0 .531499 f, 0 .484513 f, -0 .691352 f, 0 .872823 f, 1 .207720 f, -1 .377490 f,
0 .006872 f, -0 .041453 f, 0 .007845 f, 0 .007463 f, 0 .467299 f, -0 .476372 f,
-0 .452606 f, 0 .452357 f, 0 .447332 f, -0 .365632 f, -0 .332435 f, 0 .300284 f,
-0 .290504 f, 0 .255410 f, 0 .310921 f, -0 .293717 f, -0 .616299 f, 0 .594207 f,
0 .461347 f, -0 .449439 f, 0 .278455 f, 0 .285085 f, -1 .201340 f, -0 .016463 f,
0 .549095 f, 0 .610375 f, -4 .608530 f, -1 .727390 f, 0 .150404 f, -0 .012846 f,
-0 .481148 f, -0 .182257 f, 0 .918796 f, 0 .213872 f, 1 .050410 f, 0 .681526 f,
-0 .458777 f, -0 .710395 f, -2 .347200 f, -0 .277197 f, 0 .213294 f, 0 .337551 f,
-0 .177710 f, -0 .152136 f, 0 .167666 f, 0 .308403 f, -1 .248500 f, -0 .565367 f,
0 .122054 f, 0 .087874 f, -0 .476556 f, -0 .083548 f, -0 .358734 f, -0 .073131 f,
-0 .146320 f, -2 .241960 f, 0 .697639 f, 0 .545581 f, -1 .889700 f, -0 .267725 f,
0 .433045 f, 0 .298224 f, -0 .338508 f, 0 .250226 f, 0 .405675 f, 0 .447201 f,
-1 .184690 f, -0 .473447 f, 0 .307403 f, 0 .711236 f, -3 .191560 f, -1 .663980 f,
0 .165201 f, 0 .101360 f, -0 .624451 f, -0 .173269 f, 0 .089795 f, 0 .227478 f,
-0 .136664 f, 0 .007907 f, 0 .131079 f, 0 .605374 f, -2 .991620 f, -1 .723790 f,
0 .082428 f, 0 .006781 f, -0 .348732 f, -0 .019271 f, -0 .032040 f, -0 .067078 f,
-0 .437166 f, -0 .144472 f, 0 .069844 f, 0 .194625 f, -0 .162284 f, -0 .374656 f,
0 .056472 f, -0 .236524 f, -0 .114241 f, -0 .029161 f, -0 .222078 f, -0 .053435 f,
-0 .313938 f, -0 .555472 f, 1 .037550 f, 0 .689968 f, 0 .575694 f, 0 .065826 f,
-0 .659979 f, -0 .881351 f, -0 .626417 f, -0 .953975 f, -0 .576106 f, -0 .258708 f,
0 .263004 f, -0 .229847 f, 0 .463835 f, 1 .390960 f, -2 .614480 f, -1 .272910 f,
0 .065780 f, -0 .058603 f, 0 .015612 f, 0 .104703 f, 0 .198028 f, 0 .262792 f,
0 .253616 f, -0 .079126 f, -0 .587381 f, -0 .739021 f, -0 .822676 f, -0 .795512 f,
0 .193644 f, 0 .234643 f, -0 .034407 f, 0 .421478 f, -0 .572610 f, -0 .290714 f,
-0 .257803 f, -0 .644835 f, -0 .536938 f, -0 .375899 f, -0 .651077 f, -0 .522576 f,
0 .562564 f, 0 .834616 f, 0 .513893 f, 0 .649689 f, 0 .356530 f, 0 .400716 f,
0 .300606 f, 0 .290505 f, 0 .584608 f, 0 .671574 f, 0 .564584 f, 0 .419870 f,
0 .062061 f, 0 .018263 f, 0 .009831 f, 0 .084103 f, -0 .128281 f, -0 .018818 f,
-0 .187244 f, 0 .067210 f, 0 .437147 f, 0 .442029 f, 0 .444939 f, 0 .226661 f,
0 .541609 f, 0 .444280 f, 0 .302795 f, 0 .633026 f, -0 .180374 f, 0 .265197 f,
0 .210404 f, -0 .118916 f, -0 .294013 f, -0 .692627 f, -0 .402347 f, -0 .356287 f,
0 .387578 f, 0 .385496 f, 0 .789542 f, 0 .690396 f, -0 .203542 f, -0 .688546 f,
0 .045319 f, -0 .448747 f, -0 .157148 f, 0 .152581 f, 0 .022360 f, 0 .058358 f,
0 .593007 f, 1 .131860 f, 0 .289006 f, 1 .015560 f, 0 .144942 f, -0 .411577 f,
0 .264794 f, -0 .085791 f, 0 .156996 f, 0 .200340 f, 0 .169264 f, 0 .267615 f,
-0 .361015 f, -0 .601842 f, -0 .442217 f, -0 .781086 f, 0 .112938 f, 0 .385305 f,
0 .482454 f, 0 .470268 f, 1 .193390 f, 0 .589642 f, 0 .127638 f, -0 .640946 f,
0 .540310 f, 0 .741498 f, 0 .686937 f, 0 .435879 f, 0 .534523 f, 0 .693119 f,
0 .817577 f, 0 .783109 f, 0 .021681 f, -0 .004973 f, 0 .201236 f, -0 .086311 f,
0 .028628 f, 0 .227871 f, 0 .462751 f, 0 .126832 f, -0 .389997 f, -0 .553965 f,
-0 .343953 f, -0 .448517 f, 0 .053129 f, -0 .115083 f, 0 .018138 f, -0 .067131 f,
-0 .293468 f, -0 .220700 f, 0 .074348 f, -0 .273153 f, 0 .263637 f, 0 .122049 f,
0 .153025 f, 0 .076292 f, 0 .142320 f, 0 .286734 f, 0 .100542 f, 0 .308660 f,
-0 .759591 f, -0 .750938 f, -0 .788799 f, -0 .853076 f, -0 .588019 f, -0 .990063 f,
-0 .692327 f, -0 .722904 f, 0 .084736 f, 0 .151068 f, 0 .159606 f, 0 .147715 f,
1 .610180 f, 1 .950330 f, 1 .765670 f, 2 .265110 f, 0 .008262 f, 0 .185584 f,
0 .039337 f, 0 .164721 f, 0 .479446 f, 0 .314083 f, 0 .043969 f, 0 .291320 f,
0 .003400 f, -0 .551190 f, 0 .060158 f, -0 .147591 f, 0 .089117 f, 0 .042994 f,
0 .042802 f, 0 .127392 f, -0 .066172 f, 0 .078370 f, 0 .051408 f, 0 .014004 f,
0 .086726 f, 0 .133334 f, -0 .046733 f, 0 .155100 f, -0 .118223 f, -0 .100778 f,
-0 .225245 f, -0 .460397 f, 0 .892644 f, 1 .003770 f, 0 .405155 f, 0 .517477 f,
0 .184585 f, 0 .279090 f, -0 .036477 f, 0 .198703 f, 0 .027139 f, -0 .055728 f,
-0 .022396 f, -0 .147319 f, 2 .275540 f, 2 .014990 f, 2 .296800 f, 2 .081730 f,
-0 .088713 f, 0 .105729 f, -0 .027871 f, -0 .095047 f, 0 .012429 f, 0 .014244 f,
-0 .014755 f, -0 .003017 f, 1 .332700 f, 1 .300040 f, 1 .464250 f, 1 .305030 f,
0 .032568 f, 0 .118042 f, 0 .079632 f, -0 .089405 f, 0 .163905 f, 0 .146608 f,
0 .026502 f, 0 .065307 f, -0 .056909 f, -0 .065052 f, 0 .069851 f, -0 .082958 f,
0 .023419 f, -0 .026293 f, 0 .037616 f, -0 .048096 f, -0 .073701 f, -0 .208295 f,
-0 .782095 f, 0 .000523 f, 0 .374131 f, 0 .420946 f, 0 .466151 f, 0 .349651 f,
-0 .679275 f, -0 .745827 f, -0 .379918 f, -0 .900107 f, 0 .044070 f, -0 .347536 f,
-1 .224390 f, 0 .740113 f, -0 .779966 f, 0 .510920 f, -0 .968597 f, -0 .095630 f,
0 .120805 f, 0 .676803 f, -0 .164827 f, 0 .172996 f, -0 .106720 f, 0 .197527 f,
0 .337561 f, 0 .571094 f, -0 .279090 f, -0 .396697 f, -0 .253083 f, -0 .690170 f,
-0 .363291 f, 0 .516921 f, 0 .489391 f, -0 .920628 f, 0 .497572 f, 0 .483864 f,
-0 .125696 f, -0 .338123 f, -0 .041517 f, -0 .534630 f, -0 .388465 f, -0 .784554 f,
0 .215227 f, 0 .055088 f, 0 .179638 f, 0 .086997 f, 0 .569313 f, 0 .572926 f,
0 .137182 f, -0 .045485 f, 0 .118087 f, 0 .210383 f, 0 .212664 f, 0 .482443 f,
0 .151921 f, 0 .307947 f, -0 .084656 f, -0 .386206 f, 0 .542277 f, -0 .207005 f,
0 .073792 f, -1 .013240 f, 0 .303581 f, 0 .270527 f, 0 .265985 f, 0 .332702 f,
0 .848609 f, 0 .686757 f, 0 .767212 f, 0 .316901 f, -0 .502460 f, -0 .567092 f,
-0 .484799 f, -0 .173350 f, -0 .426863 f, 0 .222375 f, -0 .200267 f, -0 .523758 f,
0 .265180 f, -0 .175648 f, -0 .229754 f, 0 .148740 f, 0 .402515 f, 0 .028243 f,
-0 .366109 f, 0 .157232 f, -0 .131564 f, 0 .055136 f, 0 .211046 f, -0 .115542 f,
0 .322379 f, -0 .137768 f, -0 .247832 f, 0 .070394 f, 0 .058530 f, -0 .295023 f,
-0 .196022 f, -0 .109097 f, 0 .261285 f, -0 .273585 f, -0 .240632 f, 0 .258326 f,
-0 .077364 f, 0 .071405 f, -0 .014766 f, -0 .008751 f, -0 .203622 f, 0 .177818 f,
0 .116726 f, -0 .116735 f, -0 .723616 f, -0 .700154 f, 0 .145082 f, -0 .184949 f,
-0 .287076 f, 0 .150405 f, 0 .258075 f, -0 .157764 f, -0 .120909 f, 0 .105459 f,
0 .113288 f, -0 .092963 f, 0 .328183 f, -0 .300115 f, -0 .361289 f, 0 .319792 f,
-0 .048875 f, 0 .135673 f, 0 .132539 f, -0 .162481 f, 0 .002109 f, 0 .065048 f,
-0 .135969 f, 0 .061558 f, 1 .510670 f, -0 .884925 f, -0 .827022 f, 0 .190311 f,
-0 .060088 f, -0 .033362 f, 0 .013354 f, 0 .002847 f, 0 .353479 f, -0 .462538 f,
-0 .319638 f, 0 .424484 f, 0 .199540 f, -0 .073843 f, -0 .140621 f, 0 .072133 f,
-0 .098662 f, 0 .070613 f, 0 .031150 f, -0 .021869 f, -0 .511253 f, 0 .503412 f,
0 .565963 f, -0 .576146 f, -1 .081700 f, 0 .047670 f, 0 .266687 f, 0 .524804 f,
-2 .361150 f, 0 .147823 f, 0 .594717 f, 0 .956842 f, -1 .048220 f, 0 .127083 f,
0 .079581 f, 0 .065419 f, 0 .176783 f, 0 .653953 f, 0 .260967 f, 0 .537892 f,
-1 .207580 f, 0 .245983 f, -0 .727067 f, 0 .071755 f, -0 .343025 f, -0 .173435 f,
0 .215289 f, 0 .268578 f, -1 .158560 f, 0 .039263 f, -0 .132888 f, 0 .217132 f,
-0 .622195 f, -0 .071256 f, 0 .317333 f, 0 .157614 f, -1 .588250 f, 0 .316432 f,
-0 .736720 f, -0 .041698 f, -1 .959280 f, 0 .083451 f, 0 .570584 f, 0 .327620 f,
-1 .262200 f, -0 .026738 f, 0 .231198 f, 0 .326861 f, -1 .644200 f, -0 .143833 f,
-0 .079495 f, 0 .493026 f, -2 .488090 f, -0 .034046 f, 0 .165884 f, 1 .074260 f,
-1 .076980 f, 0 .248198 f, -0 .017987 f, 0 .421900 f, -0 .105860 f, 0 .076710 f,
0 .002072 f, 0 .070264 f, -1 .734750 f, 0 .227145 f, 0 .209220 f, 0 .851459 f,
-0 .142369 f, 0 .066502 f, 0 .027816 f, 0 .044321 f, -0 .186591 f, -0 .100340 f,
0 .115580 f, 0 .192252 f, -0 .892114 f, 0 .209531 f, -0 .308243 f, 0 .367968 f,
-0 .721770 f, 0 .220224 f, -0 .062744 f, 0 .133754 f, 0 .040416 f, 0 .190428 f,
-0 .035428 f, 0 .162974 f, 0 .116427 f, 0 .669393 f, 0 .278891 f, 0 .856676 f,
1 .060390 f, 0 .936983 f, 0 .863355 f, 0 .990560 f, -0 .147111 f, -0 .217883 f,
0 .355794 f, -0 .186530 f, -0 .275614 f, -0 .095719 f, 0 .167346 f, 0 .359078 f,
-0 .079223 f, -0 .581596 f, -0 .213134 f, -0 .431123 f, -0 .516443 f, -0 .388628 f,
-0 .643821 f, -0 .202345 f, 0 .426230 f, 0 .516923 f, 0 .548131 f, 0 .555973 f,
0 .022286 f, 0 .361170 f, 0 .980065 f, 0 .648400 f, -0 .056813 f, -0 .100310 f,
-0 .439481 f, -0 .166454 f, 0 .412449 f, 0 .509400 f, 0 .316208 f, 0 .470293 f,
-0 .827838 f, -1 .078380 f, -1 .047040 f, -1 .074560 f, 0 .274555 f, -0 .316736 f,
0 .128818 f, 0 .228566 f, -0 .520967 f, -0 .731674 f, -0 .687887 f, -0 .536388 f,
-0 .031187 f, 0 .041404 f, 0 .047821 f, 0 .064397 f, 0 .054230 f, 0 .105059 f,
-0 .178671 f, 0 .176847 f, -0 .394797 f, -0 .260255 f, -0 .333734 f, -0 .162345 f,
-0 .444650 f, -0 .928438 f, -0 .705840 f, -0 .833162 f, 0 .306737 f, 0 .429699 f,
0 .417298 f, 0 .478469 f, 0 .420903 f, 0 .676871 f, 0 .429677 f, 0 .616921 f,
-0 .805199 f, -0 .643391 f, -0 .304100 f, 0 .797599 f, -0 .172157 f, 0 .429085 f,
-0 .750676 f, 0 .149227 f, -0 .207898 f, -0 .022534 f, -0 .341448 f, -0 .247976 f,
0 .095325 f, -0 .561120 f, 0 .599694 f, -0 .025236 f, 0 .292346 f, -0 .312001 f,
0 .517478 f, 0 .301457 f, -0 .106415 f, 0 .226263 f, -0 .184163 f, -0 .114419 f,
-0 .322702 f, 0 .172541 f, 0 .445573 f, 0 .157213 f, 0 .670704 f, 0 .102174 f,
-0 .234667 f, -0 .293311 f, 0 .769852 f, 0 .038028 f, -0 .036741 f, -0 .228060 f,
-0 .253335 f, 0 .424054 f, -0 .597980 f, 0 .221007 f, -0 .114741 f, -0 .411557 f,
-0 .592201 f, 0 .442684 f, 0 .115491 f, -0 .106896 f, -0 .028110 f, 0 .354751 f,
-0 .248375 f, 0 .242570 f, -0 .155856 f, 0 .280528 f, -0 .198742 f, 0 .588725 f,
0 .371065 f, 0 .078197 f, 0 .114706 f, -0 .448021 f, 0 .065255 f, 0 .133741 f,
-0 .227522 f, -0 .047339 f, -0 .052849 f, 0 .309480 f, 0 .597185 f, 0 .209182 f,
0 .226108 f, -0 .601036 f, -0 .431672 f, -0 .172601 f, -0 .000174 f, 0 .194292 f,
-0 .133937 f, 0 .130676 f, 0 .059372 f, 0 .091381 f, 0 .098751 f, -0 .150996 f,
0 .170514 f, -0 .085494 f, 0 .336576 f, 0 .484004 f, 0 .033862 f, 0 .277473 f,
-0 .231482 f, -0 .328385 f, -0 .332739 f, -0 .626957 f, 0 .510167 f, 0 .575861 f,
0 .421494 f, 0 .482540 f, -0 .636377 f, -0 .864661 f, -0 .694180 f, -0 .420014 f,
-0 .132781 f, 0 .017599 f, 0 .003538 f, 0 .486934 f, 0 .133878 f, -0 .094622 f,
0 .016132 f, 0 .010117 f, 0 .156680 f, -0 .022201 f, -0 .014621 f, 0 .228445 f,
0 .190826 f, 0 .171580 f, 0 .579923 f, 0 .245428 f, 0 .322713 f, 0 .480101 f,
0 .406320 f, 0 .412229 f, 0 .002334 f, -0 .022349 f, 0 .074571 f, -0 .043828 f,
0 .290453 f, 0 .451749 f, 0 .530376 f, 0 .271879 f, 0 .095144 f, 0 .169450 f,
0 .049482 f, 0 .114605 f, -0 .635634 f, -0 .700768 f, -0 .558538 f, -0 .537625 f,
0 .190255 f, -0 .308237 f, -0 .053703 f, 0 .212489 f, 0 .056520 f, -0 .040019 f,
0 .089822 f, -0 .014155 f, -0 .376004 f, -0 .448752 f, -0 .526717 f, -0 .571440 f,
0 .116482 f, 0 .162321 f, 0 .147895 f, 0 .280527 f, 0 .159037 f, -0 .095958 f,
0 .007931 f, -0 .086630 f, 0 .285625 f, 0 .514914 f, 0 .208908 f, 0 .519251 f,
0 .309368 f, 0 .379777 f, 0 .350565 f, 0 .487487 f, -0 .541494 f, -0 .421836 f,
-0 .390001 f, -0 .500696 f, -0 .905736 f, -0 .150439 f, -0 .942304 f, -0 .566771 f,
0 .484233 f, 0 .767417 f, 0 .410477 f, 0 .670196 f, 0 .070210 f, 0 .488836 f,
0 .372805 f, 0 .197631 f, 0 .337892 f, 0 .524423 f, 0 .777219 f, -0 .260955 f,
-0 .112981 f, -0 .060088 f, -0 .200250 f, -0 .195671 f, 0 .007584 f, 0 .252096 f,
0 .235511 f, 0 .366612 f, -0 .304979 f, -0 .211068 f, -0 .420683 f, -0 .085370 f,
0 .085762 f, -0 .097549 f, -0 .802509 f, -0 .468079 f, -0 .192787 f, -0 .069670 f,
-0 .235162 f, -0 .077772 f, -0 .441671 f, -0 .348479 f, -0 .431434 f, -0 .108256 f,
-0 .133779 f, 0 .017032 f, 0 .001964 f, -0 .120647 f, -0 .187663 f, -0 .194985 f,
-0 .231742 f, -0 .175288 f, -0 .162639 f, 0 .245110 f, 0 .049951 f, 0 .104229 f,
-0 .159634 f, -0 .076545 f, -0 .022496 f, -0 .036532 f, -0 .147028 f, -0 .034215 f,
0 .028213 f, -0 .059669 f, -0 .078259 f, 0 .062993 f, -0 .124066 f, -0 .137362 f,
-0 .129977 f, -0 .010532 f, -0 .049090 f, -0 .189401 f, 0 .495471 f, 0 .615778 f,
0 .451437 f, 0 .803526 f, 0 .523532 f, 0 .841339 f, 0 .699528 f, 0 .745129 f,
0 .246264 f, -0 .198290 f, -0 .283620 f, 0 .189917 f, -0 .018306 f, -0 .419097 f,
0 .280363 f, -0 .098085 f, 0 .138972 f, -0 .140867 f, -0 .117025 f, 0 .098585 f,
0 .130979 f, 0 .268133 f, -0 .161731 f, -0 .176629 f, -0 .357677 f, -0 .126379 f,
0 .553128 f, -0 .126821 f, -0 .001511 f, -0 .010081 f, -0 .031162 f, 0 .079203 f,
-0 .157731 f, 0 .072865 f, 0 .535830 f, -0 .529989 f, -0 .570075 f, 0 .295795 f,
0 .595613 f, -0 .449278 f, -0 .669756 f, 0 .941452 f, 0 .356897 f, -0 .723720 f,
-0 .115203 f, -0 .134479 f, 0 .133048 f, 0 .109860 f, -0 .024250 f, -0 .049732 f,
0 .020098 f, 0 .048356 f, -0 .048293 f, 0 .108754 f, 0 .062548 f, -0 .238315 f,
0 .182700 f, 0 .312011 f, -0 .244377 f, -0 .118012 f, 0 .012276 f, 0 .006089 f,
0 .098068 f, -0 .079280 f, -0 .423987 f, -0 .411931 f, -0 .027425 f, 0 .870280 f,
0 .022825 f, -0 .024481 f, -0 .036320 f, -0 .111189 f, 0 .364539 f, -0 .244896 f,
-0 .373060 f, 0 .266345 f, -0 .141778 f, 0 .277549 f, 0 .059834 f, -0 .178242 f,
-0 .686222 f, 0 .594535 f, 0 .354546 f, -0 .272516 f, 1 .060730 f, -1 .059810 f,
-0 .948126 f, 0 .993267 f, 0 .116597 f, -0 .227574 f, -0 .436144 f, -0 .333309 f,
-0 .575746 f, -0 .828102 f, 0 .284561 f, 0 .351668 f, -0 .080164 f, -0 .762518 f,
-0 .511108 f, -0 .212855 f, 0 .293892 f, -0 .548664 f, 0 .072057 f, 0 .006748 f,
1 .485110 f, 0 .124687 f, 0 .727211 f, 1 .557560 f, -0 .064383 f, -0 .022242 f,
0 .002921 f, -0 .151505 f, 0 .270926 f, 0 .173632 f, -0 .640644 f, 0 .422410 f,
-0 .240699 f, -0 .361980 f, -0 .279864 f, -0 .055165 f, -1 .084140 f, 0 .231705 f,
0 .366172 f, -0 .347698 f, -0 .097565 f, -0 .747227 f, -0 .243033 f, 0 .941545 f,
-0 .207460 f, -0 .353913 f, 0 .104303 f, -0 .403151 f, 0 .203177 f, 0 .335893 f,
-0 .229033 f, 0 .029096 f, -0 .409634 f, -0 .179599 f, -0 .442397 f, 0 .649114 f,
0 .460774 f, 0 .170906 f, -0 .043857 f, 0 .402066 f, -0 .226896 f, -0 .199624 f,
0 .016650 f, 0 .207894 f, 0 .056954 f, 0 .220329 f, 0 .374060 f, 0 .130361 f,
-0 .303960 f, -0 .078863 f, 0 .195410 f, 0 .729438 f, 0 .246818 f, 0 .287730 f,
0 .484876 f, 0 .111488 f, -0 .168647 f, -0 .087878 f, -0 .070089 f, -0 .341329 f,
-0 .330280 f, 0 .259943 f, -0 .364205 f, 0 .256555 f, -0 .756804 f, -0 .086915 f,
0 .777351 f, 0 .006136 f, 0 .110348 f, 0 .248743 f, 0 .209326 f, -0 .362741 f,
-0 .184416 f, 0 .422446 f, 0 .565193 f, 0 .310072 f, -0 .011212 f, -0 .765226 f,
0 .039466 f, 0 .301288 f, 0 .172907 f, -1 .539450 f, 0 .606202 f, 0 .477469 f,
0 .045894 f, -0 .222180 f, -0 .013192 f, -0 .064077 f, -0 .241551 f, 0 .192914 f,
0 .028004 f, -0 .540538 f, 0 .437440 f, 0 .179087 f, -0 .753204 f, -0 .001374 f,
1 .185930 f, -0 .151182 f, 1 .238580 f, -1 .389900 f, 0 .277954 f, 0 .422208 f,
0 .041553 f, -0 .542284 f, 0 .139019 f, -0 .148580 f, -0 .130705 f, 0 .361830 f,
0 .322953 f, -0 .092371 f, 0 .120180 f, -0 .355299 f, -0 .028057 f, 0 .128114 f,
0 .250947 f, -0 .349926 f, -0 .684633 f, 0 .246175 f, 0 .186731 f, -0 .676313 f,
0 .060535 f, 0 .333371 f, -0 .021172 f, -0 .421266 f, -0 .079650 f, 0 .031359 f,
-0 .303658 f, -0 .298286 f, 0 .119016 f, 0 .655585 f, 0 .200175 f, -0 .887182 f,
-0 .197539 f, -0 .318883 f, -0 .130250 f, 0 .522487 f, -0 .092616 f, 0 .405930 f,
-0 .281678 f, 0 .089728 f, 0 .081814 f, -0 .781745 f, 0 .348878 f, 0 .082274 f,
-0 .914136 f, 1 .098810 f, 0 .855321 f, -1 .078170 f, -0 .268018 f, 0 .246440 f,
0 .238347 f, -0 .027228 f, 0 .074111 f, -0 .061197 f, -0 .063582 f, 0 .089462 f,
-0 .040347 f, 0 .117082 f, 0 .122772 f, -0 .162816 f, -0 .148668 f, -0 .342856 f,
-0 .495604 f, -1 .453630 f, -0 .045273 f, -0 .030463 f, 0 .043766 f, 0 .047978 f,
0 .016910 f, -0 .009700 f, 0 .006288 f, -0 .042556 f, 0 .632896 f, -0 .845744 f,
-0 .516844 f, 0 .709439 f, 0 .486166 f, -1 .203050 f, -0 .978381 f, 0 .631876 f,
0 .000705 f, 0 .123858 f, -0 .001187 f, -0 .172312 f, -0 .422668 f, 0 .241838 f,
0 .437400 f, -0 .268186 f, -0 .513259 f, 0 .450209 f, 0 .542629 f, -0 .453810 f,
-0 .207119 f, 0 .072598 f, 0 .085066 f, -0 .018986 f, -0 .149512 f, 0 .149521 f,
0 .182105 f, -0 .227200 f, -0 .363240 f, 0 .172670 f, -0 .502932 f, 0 .689256 f,
0 .093760 f, -0 .090207 f, -0 .066803 f, 0 .056759 f, -0 .002243 f, -0 .050662 f,
-0 .059324 f, 0 .152943 f, -0 .701150 f, 0 .712540 f, 0 .660349 f, -0 .654970 f,
0 .351772 f, -0 .303383 f, -0 .311177 f, 0 .247653 f, 0 .013035 f, 0 .034648 f,
-0 .137832 f, 0 .041197 f, 0 .410265 f, 0 .345129 f, 0 .653338 f, 0 .047050 f,
0 .140399 f, 0 .018613 f, -0 .012431 f, -0 .113632 f, -0 .029928 f, 0 .051564 f,
-0 .031349 f, 0 .151944 f, -0 .160340 f, 0 .326798 f, -0 .458067 f, 0 .636235 f,
0 .243184 f, 0 .514072 f, 2 .414450 f, 1 .421980 f, -0 .001474 f, -0 .141389 f,
-0 .104817 f, -0 .141882 f, -0 .026395 f, 0 .053014 f, 0 .143885 f, -0 .207774 f,
-0 .563846 f, -0 .242514 f, -0 .436574 f, -0 .456796 f, -0 .520646 f, 0 .282550 f,
-0 .684924 f, 0 .061105 f, -0 .315884 f, -0 .392624 f, 0 .009805 f, -0 .256597 f,
-0 .146732 f, 0 .331039 f, 0 .362342 f, 0 .270851 f, 0 .067679 f, -0 .071331 f,
-0 .222423 f, 0 .081286 f, -0 .208192 f, -0 .193816 f, -0 .008201 f, -0 .309340 f,
0 .167556 f, 0 .106071 f, 0 .172254 f, -0 .163790 f, -0 .142205 f, -0 .043182 f,
0 .096145 f, 0 .145037 f, -0 .066015 f, -0 .073194 f, 0 .132237 f, -0 .088522 f,
-0 .044292 f, -0 .487128 f, 0 .033389 f, -0 .573548 f, 0 .185449 f, 0 .273593 f,
0 .147503 f, 0 .457049 f, -0 .021539 f, 0 .090786 f, 0 .009147 f, 0 .000899 f,
0 .018088 f, 0 .115791 f, -0 .079165 f, 0 .139388 f,
};
static const float weights_layer_2[] = {
0 .153048 f, 0 .112901 f, 0 .136781 f, 0 .154580 f, 0 .091610 f, 0 .045165 f,
0 .088490 f, 0 .116991 f, -0 .463766 f, -0 .596567 f, -0 .567008 f, -0 .630565 f,
0 .141874 f, 0 .095726 f, 0 .175427 f, 0 .145027 f, -0 .969824 f, -1 .018190 f,
-1 .073300 f, -1 .041130 f, -0 .070545 f, -0 .123600 f, -0 .114967 f, -0 .169453 f,
-0 .267458 f, -0 .147730 f, -0 .161419 f, -0 .164894 f, -0 .117508 f, -0 .204389 f,
-0 .122695 f, -0 .163107 f, -0 .003903 f, -0 .030470 f, -0 .037433 f, -0 .059568 f,
0 .138243 f, 0 .091019 f, 0 .160372 f, 0 .141650 f, -0 .544565 f, -0 .620004 f,
-0 .504503 f, -0 .429979 f, -0 .099491 f, -0 .096384 f, -0 .155265 f, -0 .188536 f,
0 .084923 f, 0 .038345 f, 0 .066706 f, 0 .122083 f, 0 .267087 f, 0 .184419 f,
0 .261478 f, 0 .255746 f, -0 .245894 f, -0 .114980 f, -0 .193880 f, -0 .227785 f,
0 .087536 f, 0 .095712 f, 0 .106105 f, 0 .099353 f, -0 .059473 f, -0 .173247 f,
-0 .202386 f, -0 .076010 f, 0 .125928 f, 0 .100793 f, 0 .119638 f, 0 .129623 f,
0 .136593 f, 0 .102984 f, 0 .156550 f, 0 .140558 f, 0 .122524 f, 0 .051596 f,
0 .084164 f, 0 .123630 f, 0 .072542 f, 0 .096063 f, 0 .083236 f, 0 .087630 f,
0 .025900 f, 0 .023738 f, 0 .036385 f, 0 .053077 f, -0 .029501 f, 0 .010544 f,
-0 .010026 f, -0 .051268 f, 0 .086302 f, 0 .109909 f, 0 .101385 f, 0 .127513 f,
-0 .031869 f, 0 .005340 f, -0 .056267 f, -0 .032955 f, 0 .032748 f, 0 .023162 f,
0 .092118 f, -0 .001780 f, -0 .123612 f, -0 .183433 f, -0 .202377 f, -0 .317516 f,
0 .129052 f, 0 .208112 f, 0 .145582 f, 0 .175502 f, 0 .018476 f, 0 .036349 f,
0 .072417 f, 0 .061194 f, 0 .086985 f, 0 .117086 f, 0 .072465 f, 0 .129068 f,
0 .020182 f, 0 .052114 f, 0 .017878 f, 0 .010478 f, -0 .001381 f, -0 .034644 f,
0 .025135 f, -0 .037748 f, 0 .004973 f, 0 .024778 f, 0 .041816 f, 0 .032111 f,
0 .080268 f, 0 .124998 f, 0 .105719 f, 0 .177047 f, -0 .072114 f, -0 .011864 f,
-0 .076846 f, -0 .089840 f, 0 .069993 f, 0 .089362 f, 0 .088035 f, 0 .120621 f,
0 .065916 f, 0 .100946 f, -0 .006784 f, -0 .007751 f, 0 .122039 f, 0 .126482 f,
0 .078629 f, 0 .140299 f, 0 .074034 f, 0 .092464 f, 0 .089798 f, 0 .108968 f,
0 .075729 f, 0 .057128 f, 0 .013570 f, 0 .021195 f, 0 .068901 f, 0 .054022 f,
0 .029781 f, 0 .031404 f, -0 .209998 f, -0 .208731 f, -0 .198310 f, -0 .212454 f,
-0 .579168 f, -0 .490190 f, -0 .607567 f, -0 .520541 f, 0 .083863 f, 0 .056612 f,
0 .030366 f, 0 .061790 f, -0 .004874 f, -0 .057203 f, -0 .060429 f, -0 .049145 f,
0 .080086 f, 0 .138602 f, 0 .223796 f, 0 .133279 f, -0 .495954 f, -0 .612093 f,
-0 .545393 f, -0 .562310 f, 0 .070672 f, 0 .037702 f, 0 .139013 f, 0 .080192 f,
-0 .111387 f, -0 .048165 f, 0 .074359 f, -0 .042125 f, 0 .113633 f, 0 .106579 f,
0 .042633 f, 0 .102734 f, -0 .068220 f, 0 .128423 f, -0 .181821 f, -0 .013260 f,
-0 .108563 f, -0 .138667 f, -0 .109304 f, -0 .131909 f, -0 .168667 f, -0 .126870 f,
-0 .132533 f, -0 .167096 f, -0 .184741 f, -0 .140890 f, -0 .125361 f, -0 .150632 f,
0 .309013 f, 0 .364376 f, 0 .361102 f, 0 .271566 f, 0 .116552 f, 0 .091160 f,
0 .096846 f, 0 .095954 f, 0 .046972 f, 0 .080489 f, 0 .028766 f, -0 .012223 f,
0 .071379 f, 0 .041535 f, -0 .000668 f, 0 .033698 f, -0 .013493 f, -0 .027535 f,
-0 .025804 f, -0 .012267 f, -0 .097465 f, -0 .099232 f, -0 .208863 f, -0 .225201 f,
-0 .475608 f, 0 .077358 f, -0 .002872 f, 0 .163890 f, -0 .420298 f, 0 .072114 f,
0 .121601 f, -0 .016727 f, 0 .573853 f, -0 .080196 f, 0 .193053 f, 0 .053012 f,
-0 .454179 f, 0 .058563 f, 0 .067265 f, 0 .141154 f, 0 .412541 f, 0 .086933 f,
0 .030407 f, -0 .030413 f, 0 .478757 f, -0 .097731 f, 0 .277072 f, -0 .086393 f,
0 .552604 f, -0 .334201 f, 0 .091765 f, -0 .270262 f, -1 .395060 f, 0 .271837 f,
-0 .005335 f, 0 .240499 f, 0 .175442 f, -0 .326329 f, -0 .019353 f, -0 .270338 f,
-0 .459273 f, 0 .096183 f, 0 .153046 f, 0 .135818 f, 0 .759028 f, -0 .177673 f,
-0 .099966 f, 0 .103363 f, 0 .697289 f, -0 .234184 f, -0 .048706 f, -0 .116099 f,
-0 .282575 f, 0 .025655 f, -0 .184759 f, 0 .040658 f, -0 .558267 f, 0 .214087 f,
-0 .095620 f, 0 .200522 f, 0 .278996 f, 0 .031959 f, 0 .122936 f, -0 .209196 f,
-0 .308217 f, 0 .092917 f, 0 .113269 f, 0 .136274 f, -0 .037046 f, 0 .017263 f,
-0 .194183 f, 0 .089133 f, -0 .161244 f, 0 .042799 f, 0 .030557 f, 0 .153545 f,
-0 .355048 f, 0 .070928 f, -0 .152852 f, 0 .102875 f, -0 .193649 f, 0 .007916 f,
-0 .062952 f, 0 .050602 f, 0 .073671 f, 0 .143045 f, -5 .978970 f, -7 .013850 f,
0 .058713 f, 0 .076116 f, 0 .026445 f, -0 .056599 f, -0 .005966 f, 0 .032234 f,
0 .006753 f, -0 .024528 f, 0 .120308 f, 0 .179939 f, -6 .624630 f, -7 .638680 f,
0 .026359 f, 0 .020758 f, 0 .194274 f, 0 .051489 f, -0 .008491 f, -0 .028248 f,
-0 .061328 f, -0 .134423 f, -0 .103951 f, -0 .110877 f, 0 .042263 f, 0 .127016 f,
0 .012473 f, -0 .008595 f, 0 .031357 f, 0 .087476 f, -0 .084022 f, -0 .015590 f,
-0 .313546 f, 0 .120072 f, 0 .123880 f, 0 .162148 f, -6 .596560 f, -7 .358830 f,
0 .004797 f, -0 .003415 f, 0 .048455 f, 0 .026737 f, -0 .103702 f, 0 .034416 f,
-0 .003475 f, -0 .236827 f, 0 .005378 f, 0 .048413 f, 0 .054612 f, -0 .079359 f,
0 .043707 f, 0 .001085 f, 0 .023380 f, 0 .007785 f, 0 .025938 f, -0 .052856 f,
-0 .033421 f, 0 .022643 f, 0 .034161 f, 0 .127681 f, -5 .019490 f, -5 .233580 f,
-0 .128630 f, 0 .087741 f, -0 .239834 f, -0 .377876 f, 0 .128082 f, 0 .142730 f,
-0 .086819 f, -0 .350927 f, 0 .089849 f, 0 .155776 f, -6 .155120 f, -5 .721720 f,
0 .056110 f, 0 .008761 f, 0 .045579 f, 0 .016762 f, -0 .134076 f, -0 .101551 f,
-0 .096058 f, -0 .117146 f, 0 .003527 f, -0 .056942 f, -0 .005578 f, 0 .071287 f,
0 .023776 f, -0 .028003 f, -0 .075390 f, -0 .191160 f, -0 .089672 f, -0 .104372 f,
-0 .104750 f, -0 .080813 f, -0 .249824 f, -0 .124479 f, -0 .243593 f, -0 .244284 f,
-0 .554911 f, -0 .549095 f, -0 .564693 f, -0 .475107 f, -0 .121771 f, -0 .143441 f,
-0 .171170 f, -0 .120920 f, 0 .109831 f, 0 .079708 f, 0 .327295 f, 0 .308907 f,
-0 .178785 f, -0 .428316 f, -0 .418882 f, -0 .366750 f, -0 .139296 f, -0 .129645 f,
-0 .081237 f, -0 .101533 f, -0 .006256 f, -0 .146756 f, -0 .322110 f, -0 .338865 f,
-0 .306085 f, -0 .319592 f, -0 .454803 f, -0 .363560 f, -0 .018557 f, 0 .006605 f,
-0 .131198 f, -0 .077708 f, 0 .138160 f, 0 .119611 f, 0 .271098 f, 0 .232168 f,
0 .027812 f, 0 .035390 f, -0 .202503 f, -0 .091172 f, -0 .142020 f, -0 .159929 f,
-0 .106404 f, -0 .107433 f, -0 .381743 f, -0 .353222 f, -0 .484159 f, -0 .469926 f,
-0 .234659 f, -0 .315674 f, -0 .178327 f, -0 .213485 f, -0 .096207 f, -0 .190944 f,
-0 .118917 f, -0 .161288 f, 0 .015996 f, 0 .060737 f, 0 .051390 f, 0 .060876 f,
0 .229289 f, 0 .282418 f, 0 .250945 f, 0 .197273 f, 0 .045131 f, -0 .008305 f,
0 .072024 f, 0 .044547 f, -0 .050010 f, 0 .055504 f, 0 .001343 f, -0 .014445 f,
0 .254909 f, 0 .309091 f, 0 .228249 f, 0 .274843 f, 0 .089778 f, -0 .046581 f,
0 .072714 f, 0 .126814 f, -0 .048931 f, -0 .045743 f, -0 .151333 f, -0 .004490 f,
0 .179966 f, 0 .058150 f, -0 .178622 f, -0 .088159 f, -0 .074416 f, -0 .005821 f,
-0 .011799 f, -0 .002225 f, -0 .069361 f, -0 .098937 f, -0 .081575 f, -0 .034796 f,
0 .253792 f, 0 .301039 f, 0 .219163 f, 0 .256027 f, 0 .058007 f, -0 .041431 f,
0 .040674 f, 0 .009019 f, -0 .099670 f, -0 .099077 f, -0 .039437 f, 0 .017946 f,
0 .060717 f, 0 .045796 f, 0 .109664 f, 0 .032138 f, -0 .071094 f, 0 .023697 f,
0 .011335 f, -0 .030465 f, 0 .068677 f, 0 .039345 f, -0 .045078 f, 0 .084037 f,
0 .135517 f, 0 .190417 f, 0 .175578 f, 0 .155286 f, -0 .044505 f, 0 .010826 f,
0 .006717 f, -0 .134715 f, 0 .068022 f, 0 .110095 f, 0 .079966 f, 0 .034481 f,
0 .185804 f, 0 .188273 f, 0 .227283 f, 0 .135935 f, 0 .033447 f, 0 .031571 f,
-0 .014766 f, -0 .024565 f, 0 .021792 f, 0 .017675 f, -0 .001333 f, -0 .040069 f,
-0 .049384 f, -0 .045256 f, -0 .014013 f, -0 .000107 f, -0 .096928 f, -0 .111495 f,
-0 .051225 f, -0 .060449 f, 0 .071446 f, 0 .017294 f, -0 .004822 f, 0 .006932 f,
0 .020884 f, 0 .089425 f, 0 .061097 f, -0 .038708 f, -0 .184029 f, -0 .089541 f,
-0 .158035 f, -0 .214607 f, -0 .377947 f, -0 .318586 f, -0 .336977 f, -0 .323908 f,
0 .181612 f, 0 .140018 f, 0 .233524 f, 0 .193366 f, -0 .254507 f, -0 .271902 f,
-0 .197144 f, -0 .119539 f, 0 .042162 f, 0 .000320 f, 0 .014708 f, -0 .014228 f,
-0 .081119 f, -0 .089326 f, 0 .001763 f, 0 .081009 f, -0 .142618 f, -0 .160650 f,
-0 .214597 f, -0 .202143 f, -0 .053495 f, -0 .012819 f, -0 .071468 f, -0 .010883 f,
0 .072570 f, 0 .071507 f, 0 .091045 f, 0 .083155 f, -0 .271237 f, -0 .289211 f,
-0 .272345 f, -0 .299411 f, 0 .031697 f, -0 .029795 f, -0 .030045 f, -0 .013604 f,
-0 .106843 f, -0 .045212 f, -0 .122459 f, -0 .096936 f, 0 .059793 f, 0 .006157 f,
0 .028092 f, 0 .040589 f, -0 .014560 f, -0 .008975 f, -0 .051404 f, -0 .014309 f,
-0 .016883 f, 0 .018332 f, 0 .040114 f, 0 .050348 f, 0 .044921 f, -0 .002445 f,
-0 .112396 f, 0 .014395 f, 0 .115160 f, 0 .145350 f, -0 .166814 f, -0 .121449 f,
0 .155573 f, -0 .099446 f, -0 .161661 f, 0 .187251 f, 0 .004711 f, 0 .024318 f,
-0 .060871 f, -0 .028311 f, -0 .098274 f, 0 .322030 f, -0 .069242 f, -0 .153173 f,
-0 .227428 f, -0 .293965 f, 0 .228491 f, 0 .111413 f, -1 .354720 f, -0 .344235 f,
0 .866715 f, 0 .872344 f, 0 .078789 f, -0 .384865 f, 0 .162388 f, 0 .109018 f,
-0 .191549 f, -0 .002638 f, 0 .305053 f, 0 .087337 f, 0 .066506 f, -0 .055810 f,
-0 .010984 f, -0 .056160 f, -0 .114617 f, -0 .058478 f, 0 .022059 f, -0 .124368 f,
-0 .130989 f, 0 .369432 f, -0 .248898 f, -0 .003955 f, -0 .021578 f, 0 .115991 f,
-0 .114163 f, -0 .065232 f, 0 .339857 f, -0 .225997 f, 0 .006282 f, -0 .125395 f,
0 .235082 f, -0 .347785 f, 0 .662321 f, -0 .529182 f, 0 .153297 f, -0 .001326 f,
-0 .026725 f, -0 .024677 f, -0 .088065 f, -0 .116127 f, 0 .080896 f, 0 .212542 f,
0 .208421 f, 0 .032047 f, -0 .211395 f, 0 .074997 f, 0 .096659 f, 0 .096423 f,
-0 .078643 f, 0 .106556 f, -0 .123860 f, 0 .075609 f, 0 .066008 f, -0 .097275 f,
-1 .000020 f, -0 .780154 f, -0 .856922 f, -0 .964007 f, 0 .083135 f, -0 .018922 f,
-0 .266214 f, -0 .151480 f, 0 .051538 f, 0 .017802 f, 0 .066774 f, -0 .021341 f,
-0 .869494 f, -0 .935252 f, -0 .895836 f, -0 .853871 f, -0 .160490 f, 0 .085850 f,
-0 .029670 f, -0 .056675 f, 0 .159989 f, 0 .166872 f, 0 .129970 f, 0 .194377 f,
0 .153294 f, 0 .199593 f, 0 .037692 f, 0 .103391 f, 0 .029335 f, -0 .085324 f,
-0 .079326 f, -0 .077216 f, 0 .501561 f, 0 .366168 f, 0 .330196 f, 0 .296432 f,
-0 .977282 f, -0 .844295 f, -1 .014870 f, -1 .098990 f, -0 .099858 f, -0 .129552 f,
0 .090051 f, -0 .013378 f, 0 .081330 f, 0 .194911 f, 0 .286501 f, 0 .177363 f,
-0 .148250 f, -0 .111700 f, -0 .243081 f, -0 .102918 f, 0 .161069 f, -0 .012655 f,
-0 .071722 f, -0 .020329 f, -0 .077828 f, -0 .041716 f, 0 .109247 f, 0 .062229 f,
-0 .759722 f, -0 .742756 f, -0 .563713 f, -0 .631187 f, 0 .005911 f, 0 .268154 f,
-0 .263769 f, 0 .087149 f, -0 .163623 f, -0 .359600 f, -0 .464577 f, -0 .369352 f,
-0 .515784 f, -0 .475822 f, -0 .523485 f, -0 .649813 f, -0 .112419 f, -0 .029285 f,
0 .021061 f, -0 .041515 f, 0 .149133 f, -0 .254428 f, 0 .115776 f, -0 .061892 f,
0 .103675 f, -0 .283363 f, 0 .005005 f, 0 .022034 f, -0 .178454 f, 0 .035836 f,
-0 .113702 f, -0 .217823 f, 0 .209407 f, -0 .296257 f, 0 .187976 f, -0 .157370 f,
-0 .127190 f, 0 .251780 f, 0 .055633 f, 0 .294111 f, -0 .067773 f, 0 .467190 f,
-0 .192625 f, -0 .071084 f, -0 .445284 f, 0 .511090 f, -0 .319728 f, 0 .267971 f,
0 .494929 f, -0 .586727 f, 0 .454543 f, -0 .520675 f, -0 .085900 f, 0 .325989 f,
-0 .131006 f, -0 .069501 f, 0 .199927 f, -0 .218919 f, 0 .170055 f, -0 .106538 f,
0 .133312 f, 0 .127629 f, -0 .561625 f, 0 .595666 f, -0 .090927 f, 0 .363348 f,
-0 .249246 f, 0 .063068 f, -0 .016458 f, -0 .291045 f, -0 .040509 f, 0 .017866 f,
0 .304871 f, -0 .459214 f, 0 .214390 f, -0 .238740 f, -0 .456541 f, 0 .545848 f,
-0 .218026 f, 0 .202475 f, 0 .128490 f, -0 .036417 f, 0 .173885 f, -0 .049385 f,
0 .235514 f, -0 .132587 f, -0 .015066 f, 0 .164638 f, 0 .196873 f, -0 .125330 f,
0 .216912 f, -0 .109398 f, 0 .121602 f, -0 .209374 f, 0 .164400 f, -0 .123049 f,
0 .195520 f, -0 .212932 f, -0 .015180 f, -0 .005784 f, 0 .049726 f, -5 .822150 f,
0 .124536 f, 0 .040689 f, -0 .018560 f, -3 .155020 f, 0 .014690 f, 0 .076202 f,
-0 .154008 f, 1 .070630 f, -0 .071606 f, 0 .051026 f, 0 .138285 f, -5 .836340 f,
0 .162173 f, 0 .085890 f, -0 .186166 f, 0 .093221 f, 0 .019240 f, -0 .017053 f,
-0 .090144 f, 0 .236254 f, -0 .125344 f, 0 .056235 f, -0 .089813 f, -0 .252281 f,
-0 .127406 f, -0 .155088 f, 0 .009972 f, -0 .066449 f, 0 .044222 f, 0 .025943 f,
-0 .164921 f, 0 .165463 f, -0 .001132 f, -0 .038386 f, 0 .115194 f, -5 .757100 f,
0 .163386 f, 0 .061226 f, 0 .024626 f, 0 .132750 f, 0 .107279 f, -0 .001622 f,
-0 .107860 f, -0 .356009 f, -0 .138935 f, -0 .145173 f, -0 .061198 f, -0 .646138 f,
0 .034279 f, 0 .078187 f, 0 .108138 f, -0 .490444 f, 0 .074719 f, 0 .034984 f,
-0 .109303 f, 0 .741785 f, -0 .066939 f, 0 .015558 f, 0 .114229 f, -4 .001080 f,
0 .130772 f, 0 .044675 f, -0 .165162 f, -0 .274810 f, -0 .042987 f, -0 .048579 f,
0 .156603 f, -1 .288370 f, 0 .076198 f, 0 .035065 f, 0 .032043 f, -5 .002520 f,
0 .086900 f, -0 .010886 f, 0 .030850 f, -0 .782259 f, 0 .056211 f, -0 .097759 f,
0 .118988 f, 0 .106638 f, 0 .091419 f, 0 .079920 f, 0 .062325 f, 0 .097116 f,
0 .126035 f, 0 .122530 f, -0 .278299 f, -0 .083314 f, -0 .300563 f, -0 .197946 f,
0 .081664 f, 0 .089925 f, 0 .074754 f, 0 .074628 f, 0 .102338 f, 0 .088845 f,
0 .105841 f, 0 .102381 f, 0 .003087 f, 0 .061599 f, 0 .098326 f, 0 .040119 f,
-0 .005298 f, -0 .028834 f, 0 .059938 f, -0 .013668 f, -0 .585882 f, -0 .631436 f,
-0 .742673 f, -0 .736666 f, 0 .025071 f, 0 .066851 f, 0 .075046 f, 0 .091360 f,
0 .099045 f, 0 .098261 f, 0 .106413 f, 0 .099487 f, -0 .016742 f, -0 .097334 f,
-0 .086152 f, -0 .212444 f, -0 .028043 f, -0 .007362 f, 0 .003914 f, -0 .055864 f,
0 .034756 f, 0 .081361 f, 0 .080183 f, 0 .061319 f, 0 .193396 f, 0 .173716 f,
0 .207765 f, 0 .231701 f, -0 .074565 f, -0 .073257 f, -0 .086470 f, -0 .083114 f,
0 .081489 f, 0 .078477 f, 0 .033452 f, 0 .058835 f, -0 .069665 f, -0 .031691 f,
-0 .111255 f, -0 .167754 f, 0 .184179 f, 0 .174673 f, 0 .160288 f, 0 .190893 f,
0 .110930 f, 0 .103495 f, 0 .098408 f, 0 .102918 f, 0 .053764 f, 0 .089994 f,
0 .140308 f, 0 .124867 f, 0 .074176 f, 0 .117460 f, -0 .160775 f, -0 .144132 f,
-0 .099373 f, -0 .035913 f, 0 .081237 f, 0 .062247 f, -0 .166421 f, 0 .062125 f,
0 .276479 f, 0 .060955 f, 0 .066627 f, 0 .455347 f, 0 .219953 f, 0 .109912 f,
0 .273931 f, 0 .233153 f, 0 .102236 f, 0 .447606 f, -0 .352243 f, 0 .499236 f,
-0 .931206 f, 0 .248595 f, 0 .254047 f, 0 .061542 f, 0 .268804 f, 0 .309517 f,
-0 .084414 f, -0 .245828 f, -0 .144882 f, -0 .296579 f, -0 .091628 f, -0 .142202 f,
-0 .541764 f, -0 .407470 f, 0 .053481 f, 0 .238955 f, 0 .150188 f, -0 .060598 f,
0 .196118 f, -0 .215617 f, -0 .086238 f, -0 .263420 f, 0 .206877 f, 0 .241788 f,
-0 .122544 f, -0 .448790 f, 0 .286917 f, 0 .112063 f, -0 .268408 f, -0 .041770 f,
0 .089161 f, 0 .355811 f, -0 .078245 f, -0 .148490 f, -0 .407301 f, -1 .296870 f,
-0 .633421 f, 0 .124253 f, 0 .275402 f, 0 .223048 f, 0 .077016 f, 0 .160766 f,
0 .115374 f, 0 .061053 f, -0 .231872 f, -0 .515052 f, -0 .278331 f, -0 .235912 f,
-0 .416372 f, -0 .284106 f, -0 .055942 f, 0 .110698 f, -0 .428288 f, -0 .298137 f,
-0 .018101 f, 0 .102677 f, -0 .019639 f, 0 .013479 f, 0 .038549 f, 0 .048682 f,
0 .128684 f, 0 .116416 f, 0 .044852 f, 0 .008133 f, 0 .061597 f, 0 .083582 f,
0 .014953 f, 0 .063716 f, -0 .155318 f, -0 .061732 f, 0 .084855 f, 0 .129505 f,
0 .068249 f, 0 .193775 f, -0 .088631 f, -0 .446398 f, -0 .075710 f, -0 .061327 f,
0 .278715 f, 0 .540366 f, 0 .618715 f, 0 .538374 f, -0 .037843 f, 0 .062370 f,
-0 .033184 f, 0 .119901 f, -0 .008641 f, -0 .064789 f, 0 .087498 f, 0 .043486 f,
0 .247085 f, 0 .419992 f, 0 .299935 f, 0 .234276 f, 0 .089283 f, 0 .070357 f,
0 .068888 f, 0 .134311 f, 0 .109823 f, 0 .072431 f, 0 .081676 f, 0 .091366 f,
-1 .707980 f, -2 .213110 f, -2 .149930 f, -1 .556870 f, 0 .226598 f, 0 .191675 f,
0 .192207 f, 0 .159566 f, -0 .070194 f, -0 .136070 f, -0 .015172 f, -0 .204272 f,
-0 .162191 f, -0 .043313 f, -0 .158007 f, -0 .227210 f, 0 .040398 f, 0 .043014 f,
0 .039439 f, -0 .035439 f, 0 .245558 f, 0 .439691 f, 0 .219659 f, 0 .138210 f,
-0 .048129 f, 0 .004954 f, -0 .102860 f, -0 .185376 f, 0 .035548 f, 0 .006821 f,
0 .079199 f, 0 .032901 f, 0 .039218 f, 0 .068113 f, 0 .023075 f, -0 .037582 f,
0 .225181 f, 0 .164562 f, 0 .106718 f, 0 .032684 f, 0 .013402 f, 0 .018797 f,
0 .076606 f, 0 .046512 f, -0 .070024 f, 0 .099921 f, -0 .051231 f, 0 .074167 f,
0 .173313 f, 0 .220212 f, 0 .142665 f, 0 .069809 f, -0 .195130 f, -0 .007912 f,
-0 .006764 f, -0 .063687 f, 0 .306374 f, 0 .402035 f, 0 .273759 f, 0 .449469 f,
0 .114597 f, 0 .210745 f, 0 .355326 f, 0 .271307 f, -0 .109943 f, -0 .171912 f,
-0 .070726 f, -0 .128932 f, 0 .138770 f, 0 .164971 f, 0 .308516 f, 0 .332536 f,
0 .081537 f, 0 .096939 f, 0 .054136 f, 0 .052226 f, 0 .109489 f, 0 .010223 f,
0 .168072 f, -0 .106279 f, 0 .525568 f, 0 .704816 f, 0 .588942 f, 0 .473398 f,
0 .149497 f, 0 .120835 f, 0 .080049 f, 0 .151340 f, -0 .182038 f, -0 .191091 f,
-0 .196505 f, -0 .198309 f, -0 .801819 f, -1 .441620 f, -1 .107780 f, -1 .025650 f,
0 .035750 f, 0 .018049 f, -0 .029033 f, -0 .067255 f, 0 .192049 f, 0 .009664 f,
-0 .043741 f, 0 .051557 f, 0 .082815 f, 0 .069547 f, -0 .073379 f, 0 .010584 f,
0 .192128 f, 0 .208586 f, 0 .141904 f, 0 .100763 f, 0 .046183 f, 0 .044776 f,
-0 .033611 f, -0 .005812 f, 0 .012966 f, 0 .030301 f, 0 .100665 f, 0 .103641 f,
-0 .294776 f, -0 .361573 f, -0 .420156 f, -0 .388743 f, 0 .239287 f, 0 .191975 f,
0 .089644 f, 0 .117591 f, 0 .069563 f, 0 .021480 f, 0 .100287 f, 0 .174159 f,
-0 .013571 f, 0 .090960 f, 0 .010232 f, -0 .034760 f, -0 .077205 f, 0 .060632 f,
-0 .145527 f, -0 .391110 f, -0 .143052 f, -0 .236448 f, -0 .103902 f, -0 .188463 f,
0 .071311 f, -0 .080171 f, 0 .021987 f, 0 .041767 f, -0 .419487 f, -0 .515479 f,
-0 .205470 f, -0 .732132 f, 0 .150901 f, 0 .107202 f, 0 .156307 f, 0 .143672 f,
0 .474682 f, 0 .178137 f, 0 .150063 f, 0 .414515 f, 0 .559891 f, 0 .697019 f,
0 .541231 f, 0 .505310 f, -0 .478101 f, -0 .444267 f, -0 .586539 f, -0 .445996 f,
-0 .451873 f, -0 .530085 f, -0 .447980 f, -0 .364955 f, 0 .372435 f, 0 .318894 f,
0 .351211 f, 0 .193961 f, 0 .212295 f, 0 .212842 f, 0 .220003 f, 0 .243743 f,
-0 .388628 f, -0 .789620 f, -0 .536618 f, -0 .430691 f, 0 .247004 f, 0 .266489 f,
0 .261033 f, 0 .263692 f, 0 .050089 f, 0 .048958 f, 0 .065207 f, 0 .120180 f,
-0 .526230 f, -0 .481969 f, -0 .422411 f, -0 .272292 f, 0 .155593 f, 0 .229614 f,
0 .139579 f, 0 .171805 f, -0 .251924 f, -0 .302067 f, -0 .126157 f, -0 .346650 f,
-1 .195450 f, -1 .281100 f, -0 .987911 f, -1 .478440 f, 0 .285667 f, 0 .284802 f,
0 .301887 f, 0 .259556 f, -0 .194127 f, -0 .090440 f, -0 .257959 f, -0 .259572 f,
-0 .012273 f, -0 .049993 f, -0 .099431 f, 0 .012506 f, 0 .081526 f, 0 .166279 f,
0 .042594 f, 0 .185121 f, 0 .148830 f, 0 .073161 f, 0 .201728 f, 0 .125747 f,
-0 .295065 f, -0 .187585 f, -0 .333066 f, -0 .312291 f, 0 .253458 f, 0 .321585 f,
0 .178844 f, 0 .219944 f, -0 .763475 f, -0 .943374 f, -0 .816825 f, -0 .709901 f,
-0 .166132 f, 0 .129186 f, 0 .015405 f, -0 .065623 f, -0 .246006 f, -0 .340385 f,
-0 .118155 f, -0 .384905 f, -0 .233883 f, -0 .400666 f, -0 .228597 f, -0 .228428 f,
-0 .559083 f, -0 .377784 f, -0 .541458 f, -0 .542870 f, 0 .067400 f, 0 .122987 f,
0 .180901 f, 0 .186004 f, -0 .482910 f, -0 .424823 f, -0 .477831 f, -0 .394719 f,
0 .091558 f, 0 .049248 f, 0 .049370 f, 0 .160429 f, 0 .133641 f, 0 .096625 f,
0 .104429 f, 0 .100782 f, -0 .238252 f, -0 .221459 f, -0 .196974 f, -0 .250393 f,
-3 .071750 f, -2 .418450 f, -0 .861410 f, -1 .051580 f, 0 .071263 f, 0 .118014 f,
-0 .028430 f, -0 .072073 f, -0 .074463 f, 0 .034168 f, 0 .044089 f, -0 .091109 f,
-3 .153840 f, -2 .945850 f, -1 .977360 f, -1 .498850 f, -0 .083429 f, 0 .131835 f,
-0 .063865 f, -0 .065785 f, -0 .069346 f, -0 .015520 f, -0 .119551 f, 0 .044881 f,
-0 .105280 f, 0 .127516 f, 0 .005255 f, -0 .142777 f, 0 .061055 f, -0 .117250 f,
0 .020454 f, 0 .157879 f, -0 .213812 f, -0 .151783 f, 0 .028583 f, 0 .137759 f,
-3 .248250 f, -3 .005940 f, -1 .510540 f, -1 .475390 f, 0 .081874 f, -0 .171465 f,
-0 .135690 f, -0 .001989 f, -0 .227574 f, -0 .132799 f, -0 .359742 f, -0 .137197 f,
0 .066324 f, 0 .039194 f, -0 .050857 f, 0 .095166 f, 0 .044475 f, 0 .011221 f,
0 .054904 f, 0 .061414 f, -0 .039189 f, 0 .123751 f, -0 .017171 f, -0 .008494 f,
-2 .598220 f, -2 .832670 f, -1 .622030 f, -1 .201990 f, 0 .154313 f, -0 .021436 f,
0 .042190 f, 0 .143947 f, -0 .090623 f, 0 .086853 f, 0 .143137 f, 0 .099821 f,
-1 .732820 f, -1 .429730 f, -0 .775125 f, -0 .648036 f, 0 .082176 f, 0 .079448 f,
-0 .040575 f, 0 .024511 f, -0 .064105 f, -0 .117122 f, -0 .190323 f, -0 .182589 f,
-0 .076430 f, -0 .095615 f, -0 .112513 f, -0 .101581 f, 0 .143037 f, 0 .148180 f,
0 .430958 f, 0 .359225 f, 0 .001403 f, -0 .080541 f, -0 .295001 f, -0 .156706 f,
0 .426623 f, 0 .475597 f, 0 .455210 f, 0 .454352 f, 0 .074365 f, 0 .099440 f,
0 .066348 f, -0 .007078 f, 0 .008335 f, -0 .097116 f, -0 .133687 f, -0 .110535 f,
0 .204145 f, 0 .281478 f, 0 .078886 f, 0 .112857 f, -0 .103620 f, -0 .068247 f,
0 .191147 f, 0 .227593 f, -0 .011816 f, -0 .058755 f, -0 .149477 f, -0 .101828 f,
0 .079878 f, 0 .304949 f, 0 .557555 f, 0 .305288 f, -0 .150955 f, -0 .118610 f,
0 .052073 f, 0 .064707 f, -0 .121728 f, -0 .151132 f, -0 .193987 f, -0 .175046 f,
0 .043655 f, 0 .105270 f, -0 .120715 f, -0 .040976 f, 0 .047776 f, -0 .004443 f,
0 .149606 f, 0 .111240 f, -0 .047502 f, -0 .064146 f, -0 .151858 f, -0 .151872 f,
-0 .160207 f, -0 .113846 f, -0 .081585 f, -0 .006708 f, -0 .203760 f, -0 .068597 f,
-0 .179979 f, -0 .127779 f, -0 .062460 f, -0 .064513 f, -0 .121479 f, -0 .111122 f,
-0 .212384 f, -0 .229157 f, -0 .283428 f, -0 .184891 f,
};
static const float weights_layer_3[] = {
-0 .039388 f, 0 .033048 f, -0 .113003 f, -0 .011642 f, 0 .170478 f, 0 .145713 f,
0 .040189 f, -0 .280129 f, -0 .049050 f, -0 .043788 f, -0 .157425 f, 0 .323829 f,
-0 .250725 f, -0 .166349 f, 0 .101650 f, -0 .049690 f, 0 .205606 f, 0 .281131 f,
0 .623204 f, 0 .993452 f, -0 .015115 f, -0 .138995 f, 0 .009473 f, 0 .157673 f,
-0 .024687 f, -0 .067214 f, 0 .125566 f, -0 .317619 f, 0 .057002 f, 0 .031202 f,
-0 .018167 f, 0 .068542 f, 0 .011609 f, -0 .020233 f, -0 .000428 f, -0 .035956 f,
-0 .843274 f, -0 .800587 f, -0 .214917 f, -0 .221250 f, 0 .031255 f, -0 .077330 f,
-0 .074902 f, -0 .063979 f, -0 .055562 f, 0 .679495 f, 0 .146609 f, 1 .315330 f,
-0 .118399 f, -0 .034539 f, -0 .050377 f, 0 .172867 f, -0 .204607 f, -0 .034930 f,
0 .176014 f, 0 .089747 f, -0 .003889 f, 0 .044980 f, 0 .002386 f, -0 .141723 f,
-0 .035828 f, -0 .204701 f, 0 .099813 f, 0 .123580 f, 0 .209851 f, -0 .110989 f,
-0 .043655 f, -0 .461118 f, -0 .139664 f, 0 .026855 f, -0 .081714 f, 0 .207623 f,
0 .089942 f, 0 .253082 f, 0 .680568 f, 0 .811360 f, -0 .090528 f, -0 .116818 f,
-0 .432361 f, -0 .075588 f, -0 .269924 f, -0 .276810 f, -0 .289192 f, -0 .282570 f,
0 .245566 f, 0 .267216 f, 0 .238622 f, 0 .286528 f, -0 .157605 f, -0 .200401 f,
-0 .138924 f, -0 .185006 f, 0 .215203 f, 0 .203316 f, 0 .209532 f, 0 .293135 f,
0 .928046 f, 0 .733323 f, -0 .094120 f, 0 .036918 f, -0 .126643 f, -0 .083371 f,
-0 .147530 f, -0 .153195 f, 0 .097097 f, 0 .101852 f, 0 .109160 f, 0 .105129 f,
-0 .051869 f, -0 .064359 f, -0 .073469 f, -0 .059591 f, 0 .102431 f, 0 .109444 f,
0 .113614 f, 0 .105617 f, 0 .383311 f, 0 .325783 f, 0 .393234 f, 0 .382508 f,
0 .194720 f, 0 .189672 f, 0 .217477 f, 0 .177786 f, 0 .326461 f, 0 .114789 f,
0 .317061 f, 0 .048291 f, -0 .061143 f, -0 .134641 f, -0 .067895 f, -0 .108446 f,
0 .082592 f, 0 .029918 f, -0 .006580 f, 0 .015533 f, -0 .053583 f, -0 .055540 f,
-0 .063395 f, -0 .023157 f, -0 .064955 f, -0 .073981 f, -0 .115452 f, -0 .086626 f,
-0 .036616 f, 0 .008454 f, 0 .012029 f, -0 .008039 f, -0 .207395 f, -0 .216419 f,
-0 .205363 f, -0 .249099 f, 0 .343308 f, 0 .413215 f, -0 .009918 f, -0 .109978 f,
-0 .059711 f, -0 .045089 f, -0 .029130 f, -0 .038483 f, -0 .070323 f, -0 .099409 f,
-0 .008849 f, -0 .063527 f, 0 .175963 f, 0 .185335 f, 0 .149151 f, 0 .199997 f,
-0 .027516 f, -0 .039812 f, -0 .027760 f, -0 .047910 f, -0 .007337 f, 0 .071065 f,
0 .086225 f, 0 .125539 f, 0 .151390 f, 0 .215488 f, 0 .203450 f, 0 .045380 f,
0 .095761 f, 0 .107809 f, 0 .103918 f, 0 .122383 f, 0 .116287 f, 0 .135455 f,
0 .115446 f, 0 .155673 f, -0 .044648 f, -0 .027455 f, -0 .015473 f, -0 .026657 f,
0 .089852 f, 0 .077459 f, 0 .077631 f, 0 .082507 f, -0 .102761 f, -0 .054669 f,
-0 .132223 f, -0 .024768 f, 0 .111573 f, 0 .060467 f, 0 .107883 f, 0 .056621 f,
0 .219357 f, -0 .161153 f, 0 .074379 f, -0 .118743 f, -0 .169931 f, -0 .153995 f,
-0 .220003 f, -0 .200186 f, 0 .032318 f, -0 .060687 f, -0 .087550 f, -0 .038022 f,
0 .026633 f, -0 .005534 f, 0 .029532 f, 0 .027081 f, 0 .011926 f, 0 .058412 f,
0 .010631 f, 0 .003068 f, -0 .014911 f, 0 .063070 f, 0 .065271 f, 0 .089550 f,
0 .012885 f, 0 .005320 f, -0 .037494 f, -0 .019849 f, -0 .009624 f, -0 .059090 f,
-0 .021222 f, -0 .088033 f, -0 .055261 f, -0 .055113 f, -0 .047598 f, -0 .055478 f,
-0 .023648 f, -0 .046827 f, -0 .036572 f, -0 .057655 f, 0 .104194 f, 0 .179800 f,
0 .175751 f, 0 .192851 f, -0 .016950 f, -0 .073650 f, -0 .028592 f, -0 .088219 f,
0 .011130 f, 0 .061825 f, 0 .025643 f, 0 .034183 f, 0 .095548 f, 0 .001457 f,
-0 .132869 f, 0 .032981 f, -0 .140178 f, -0 .105343 f, -0 .161799 f, -0 .161983 f,
0 .177746 f, 0 .132903 f, 0 .135627 f, 0 .152489 f, -0 .012532 f, -0 .068747 f,
-0 .085849 f, -0 .095434 f, 0 .087037 f, 0 .139497 f, 0 .111899 f, 0 .100189 f,
-0 .024649 f, -0 .092003 f, 0 .020783 f, -0 .115807 f, 0 .092039 f, 0 .093943 f,
0 .109466 f, 0 .049639 f, -0 .133727 f, 0 .128430 f, -0 .050546 f, 0 .190632 f,
0 .123733 f, 0 .082305 f, 0 .114878 f, 0 .122572 f, 0 .201618 f, 0 .137588 f,
0 .065582 f, 0 .125161 f, -0 .095179 f, -0 .120719 f, -0 .127126 f, -0 .101961 f,
-0 .118120 f, -0 .104833 f, -0 .179632 f, -0 .131764 f, -0 .138096 f, -0 .147861 f,
-0 .131512 f, -0 .153905 f, -0 .201816 f, -0 .206641 f, -0 .196707 f, -0 .160013 f,
-0 .212605 f, -0 .093998 f, -0 .186258 f, -0 .076137 f, -0 .065340 f, -0 .006969 f,
-0 .071383 f, -0 .075005 f,
};
static const float weights_layer_4[] = {
-0 .016102 f, -0 .022836 f, 0 .624049 f, 0 .273485 f, 0 .222800 f, -0 .290175 f,
-0 .518415 f, 0 .413484 f, -0 .264495 f, 0 .498083 f, -0 .450145 f, -0 .106419 f,
0 .095103 f, -0 .187451 f, 0 .145933 f, -0 .371542 f, -0 .088871 f, 0 .184017 f,
-0 .429625 f, -0 .110882 f, 0 .292781 f, 0 .289588 f, 0 .185127 f, 0 .326017 f,
-0 .432009 f, -0 .342663 f, -0 .312206 f, 0 .004004 f, -1 .114290 f, 0 .028497 f,
-0 .264944 f, -0 .419611 f, 0 .046336 f, 0 .138232 f, -0 .869528 f, 0 .425557 f,
-0 .954838 f, -0 .186830 f, -0 .464622 f, -0 .757107 f, -0 .432686 f, -0 .125978 f,
-0 .402633 f, -0 .172266 f, -0 .041749 f, -0 .822238 f, -0 .118486 f, 0 .238617 f,
-0 .198037 f, 0 .146347 f, 0 .405257 f, 0 .513303 f, -0 .078876 f, -0 .300385 f,
-0 .010293 f, -0 .183962 f, 0 .155738 f, 0 .186797 f, -0 .086814 f, 0 .000179 f,
0 .123467 f, 0 .362523 f, 0 .068805 f, 0 .371834 f, 0 .038122 f, -0 .117867 f,
-0 .120445 f, -0 .422322 f, -0 .131402 f, 0 .285449 f, 0 .038957 f, 0 .008844 f,
-0 .020197 f, 0 .187723 f, 0 .190433 f, 0 .146532 f, -0 .091068 f, -0 .270865 f,
-0 .194231 f, -0 .226777 f, 0 .013548 f, 0 .248351 f, 0 .537685 f, 0 .056316 f,
-0 .171540 f, -0 .003865 f, 0 .406439 f, 0 .126507 f, 0 .192780 f, 0 .149335 f,
-0 .149602 f, 0 .255202 f, -0 .015426 f, 0 .032335 f, -1 .791330 f, -0 .894602 f,
-0 .196641 f, -0 .282846 f, -0 .391100 f, -0 .040969 f, 0 .049934 f, 0 .056348 f,
-0 .041426 f, -0 .075159 f, -0 .658335 f, -0 .827270 f, -0 .175029 f, -0 .427235 f,
0 .311201 f, 0 .560413 f, 0 .363408 f, 0 .374580 f, -0 .433531 f, -0 .180580 f,
0 .142142 f, 0 .194768 f, -0 .054118 f, -0 .376541 f, -0 .366185 f, -0 .308782 f,
-0 .273143 f, -0 .074097 f, 0 .009000 f, -0 .182198 f, -0 .015616 f, -0 .003882 f,
-0 .174340 f, -0 .354866 f, 0 .527972 f, 0 .348355 f, 0 .091381 f, -0 .419828 f,
-0 .530529 f, 0 .159899 f, -0 .511867 f, -0 .104237 f, -0 .286079 f, -0 .659039 f,
-0 .266596 f, -0 .256557 f, -0 .600437 f, -0 .446333 f, -0 .229629 f, 0 .024931 f,
-0 .143716 f, -0 .415754 f, -0 .003760 f, -0 .107195 f, -0 .666165 f, -0 .697312 f,
-0 .650255 f, -0 .703877 f, 0 .243402 f, 0 .426710 f, 0 .217210 f, 0 .260255 f,
0 .027416 f, 0 .163147 f, 0 .132188 f, 0 .142374 f, 0 .558627 f, 0 .065717 f,
0 .382781 f, -1 .192240 f, 0 .195492 f, 0 .028439 f, 0 .278252 f, -0 .491806 f,
0 .497701 f, -0 .448835 f, -0 .245079 f, -0 .014336 f, -0 .174907 f, -0 .409633 f,
0 .207548 f, 0 .433813 f, 0 .459889 f, 0 .431728 f, 0 .605050 f, 0 .485520 f,
0 .218548 f, 0 .437307 f, 0 .027023 f, -0 .204251 f, 0 .012100 f, 0 .150677 f,
-1 .097980 f, 0 .086866 f, -1 .293130 f, -0 .372575 f, -0 .876264 f, -0 .021818 f,
0 .322864 f, -0 .231043 f, -0 .271608 f, 0 .132782 f, -0 .314895 f, 0 .396800 f,
0 .262788 f, -0 .317212 f, -0 .666308 f, 0 .830742 f, 0 .319409 f, -0 .564373 f,
-0 .178656 f, 0 .306993 f, 0 .265634 f, -0 .332480 f, -0 .491514 f, -0 .186745 f,
-0 .063044 f, -0 .009321 f, 0 .074944 f, -0 .372082 f, -0 .029479 f, 0 .081548 f,
0 .028172 f, -0 .233148 f, -0 .337938 f, -0 .087695 f, 0 .596556 f, 0 .559530 f,
0 .139332 f, 0 .107223 f, -0 .190915 f, 0 .137401 f, -0 .150625 f, -0 .225484 f,
-0 .191344 f, -0 .232535 f, 0 .126510 f, 0 .296323 f, -0 .547901 f, -0 .653080 f,
0 .358514 f, 0 .726289 f, -0 .421725 f, -0 .243620 f, 0 .236206 f, 0 .390823 f,
-0 .076560 f, -0 .282329 f, -0 .012460 f, -0 .428484 f, 0 .349469 f, 0 .394629 f,
0 .421537 f, 0 .219632 f, -0 .117550 f, -0 .087894 f, 0 .077155 f, 0 .016000 f,
-0 .289137 f, -0 .092937 f, -0 .014518 f, -0 .027111 f, 0 .210329 f, -0 .159678 f,
0 .013288 f, -0 .039268 f, 0 .008112 f, 0 .003152 f, 0 .030084 f, -0 .039859 f,
0 .322028 f, -0 .407797 f, 0 .447087 f, -0 .381562 f, 0 .529297 f, -0 .520298 f,
0 .562865 f, -0 .616878 f, 0 .689389 f, 0 .754262 f, 0 .138475 f, 0 .750697 f,
-0 .760157 f, -0 .383740 f, 0 .074219 f, 0 .556257 f, 0 .087827 f, -0 .511826 f,
-0 .305507 f, -0 .638214 f, 0 .114833 f, -0 .444022 f, 0 .526612 f, -0 .604984 f,
-0 .100415 f, 0 .037824 f, -0 .106264 f, 0 .337615 f, 0 .070743 f, 0 .031129 f,
0 .281954 f, 0 .176144 f, -0 .032833 f, -0 .073902 f, -0 .285492 f, -0 .803803 f,
-0 .015589 f, 0 .186077 f, -0 .033351 f, 0 .517269 f, -1 .878800 f, -1 .685210 f,
-0 .416581 f, 0 .158476 f, -0 .071929 f, -0 .624353 f, -0 .122069 f, -0 .075065 f,
0 .311816 f, 0 .506305 f, 0 .383896 f, 0 .259450 f, -0 .308232 f, -0 .094221 f,
-0 .421885 f, -0 .293573 f,
};
static const float weights_layer_5[] = {
0 .131894 f, 0 .078431 f, 0 .323121 f, -0 .230680 f, -0 .684740 f, 0 .020895 f,
0 .364983 f, 0 .121656 f, 0 .132448 f, -0 .731198 f, 0 .071148 f, 0 .739642 f,
0 .318437 f, -0 .033021 f, -1 .037080 f, 0 .135335 f, 0 .383582 f, 0 .287332 f,
0 .054042 f, -0 .825482 f, 0 .418533 f, 0 .305606 f, 0 .041549 f, 0 .432422 f,
-0 .826878 f, -0 .593536 f, 0 .105657 f, 0 .125357 f, 0 .408567 f, -0 .293338 f,
0 .233905 f, -0 .039609 f, 0 .547727 f, -0 .435806 f, 0 .036160 f, 0 .220275 f,
-0 .020337 f, -0 .619403 f, -0 .455858 f, 0 .681455 f, 0 .543846 f, -0 .495084 f,
0 .251496 f, -0 .085686 f, 0 .091395 f, -0 .476696 f, 0 .453628 f, -0 .109663 f,
0 .383493 f, -0 .456563 f, -0 .212935 f, 0 .020567 f, -0 .719564 f, -0 .377813 f,
-0 .737511 f, 0 .765965 f, 0 .624309 f, -0 .063679 f, -0 .055681 f, -0 .475969 f,
-0 .069902 f, 0 .725690 f, 0 .641094 f, 0 .439922 f, -0 .111544 f, -0 .309061 f,
0 .280091 f, 0 .381416 f, 0 .481168 f, 0 .483543 f, -0 .901267 f, -0 .499230 f,
0 .043449 f, -0 .372395 f, 0 .021216 f, -0 .002200 f, -0 .524089 f, -0 .071485 f,
-0 .273974 f, -0 .462654 f, 0 .042369 f, -0 .138679 f, -0 .330060 f, 0 .021886 f,
-0 .306075 f, -0 .011130 f, -0 .260224 f, -0 .288435 f, -0 .104039 f, -0 .183563 f,
0 .118990 f, -0 .531160 f, 0 .339632 f, -0 .028374 f, 0 .159084 f, -0 .008824 f,
-0 .791388 f, 0 .245242 f, 0 .356510 f, 0 .469867 f, -0 .396949 f, -0 .476146 f,
-0 .168472 f, 1 .068400 f, 0 .474629 f, -0 .117554 f, -0 .142453 f, -0 .306604 f,
0 .348525 f, -0 .111929 f, -0 .435384 f, 0 .019952 f, -0 .260185 f, 0 .373376 f,
0 .109729 f, -0 .639168 f, 0 .033392 f, -0 .082573 f, -0 .196018 f, 0 .301637 f,
-0 .124210 f, -0 .202515 f, -1 .221920 f, -0 .253690 f, -0 .144864 f, 0 .287753 f,
-0 .161206 f, -0 .213246 f, 0 .373968 f, 0 .141397 f, -0 .248237 f, 0 .283090 f,
-0 .008977 f, -0 .172960 f, -0 .234146 f, -0 .720014 f, -0 .322451 f, 0 .181083 f,
0 .310659 f, -0 .422646 f, -0 .719994 f, -0 .354339 f, 0 .352739 f, 0 .230923 f,
0 .427013 f, -0 .660316 f, 0 .232140 f, 0 .685896 f, 0 .660208 f, 0 .225748 f,
-0 .918750 f, -0 .650790 f, -0 .674525 f, -0 .450305 f, -0 .152529 f, 0 .498480 f,
0 .895092 f, 0 .688242 f, 0 .669057 f, 0 .612669 f, 0 .593484 f, 0 .318204 f,
-0 .169294 f, 0 .388789 f, -0 .529777 f, -0 .219706 f, -0 .044916 f, 0 .161697 f,
-0 .145288 f, 0 .196153 f, -0 .022212 f, -0 .434209 f, -0 .208115 f, -0 .117745 f,
-0 .279029 f, -0 .009506 f, 0 .137474 f, 0 .330148 f, 0 .439258 f, 0 .345879 f,
-0 .845131 f, -0 .215713 f, 0 .094463 f, 0 .638604 f, 0 .882254 f, -0 .964082 f,
-0 .383920 f, 0 .292645 f, 0 .266341 f, 0 .747473 f, -0 .645631 f, -0 .538896 f,
-0 .319764 f, 0 .521880 f, 0 .460091 f, -0 .470898 f, -0 .778283 f, -0 .061622 f,
-0 .142433 f, 0 .210520 f, 0 .804197 f, 0 .285840 f, -0 .138414 f, -0 .381846 f,
-0 .499991 f, 0 .223648 f, 0 .439025 f, 0 .321508 f, -0 .099560 f, -0 .622893 f,
0 .750925 f, 0 .740994 f, 0 .140405 f, 0 .074631 f, -0 .270223 f, -0 .829049 f,
-0 .753355 f, -0 .258015 f, 0 .006285 f, -0 .730573 f, -1 .107390 f, -0 .538015 f,
-1 .005520 f, -0 .724115 f, -0 .440183 f, -0 .395239 f, 0 .508768 f, 0 .204620 f,
-0 .267331 f, 0 .001740 f, -0 .838709 f, 0 .659333 f, 0 .043739 f, -0 .024099 f,
0 .262431 f, 0 .252433 f, -0 .265215 f, 0 .057289 f, -0 .428192 f, -0 .114350 f,
-0 .011475 f, 0 .463995 f, 0 .668833 f, -0 .604556 f, -0 .122780 f, -0 .441645 f,
0 .145769 f, 0 .310450 f, -1 .003500 f, 0 .936069 f, 0 .516604 f, -0 .643386 f,
-0 .518571 f, 0 .306130 f, 0 .337387 f, 0 .583400 f, -0 .366025 f, -0 .560035 f,
-0 .262332 f, 0 .465242 f, 0 .964332 f, -0 .545410 f, -0 .637428 f, -0 .202695 f,
0 .378931 f, 0 .834604 f, 0 .000970 f, -0 .553303 f, -0 .562879 f, 0 .221665 f,
0 .395160 f, 0 .446281 f, -0 .184394 f, -0 .591780 f, 0 .170595 f, 1 .164390 f,
0 .227068 f, -0 .150910 f, -0 .393690 f, -0 .131151 f, 0 .309956 f, -0 .413518 f,
-0 .768334 f, -0 .548975 f, 0 .245384 f, -0 .256904 f, -0 .514790 f, -0 .102616 f,
-0 .347625 f, 0 .420456 f, 0 .037804 f, -0 .283200 f, -0 .578815 f, 0 .319282 f,
0 .674622 f, -0 .011791 f, -0 .339329 f, 0 .466705 f, 0 .563444 f, 0 .409660 f,
0 .445784 f, -0 .899507 f, -0 .605116 f, 0 .622438 f, 0 .427385 f, -0 .062509 f,
0 .666570 f, 0 .057105 f, 0 .357894 f, -0 .811016 f, -0 .421715 f, -0 .458397 f,
0 .288955 f, 0 .005857 f, 0 .236331 f, 0 .107957 f, 0 .587276 f, -0 .375800 f,
0 .323799 f, -0 .623363 f, 0 .254122 f, -0 .198478 f, -0 .098436 f, -0 .282531 f,
0 .452453 f, -0 .163349 f, -0 .413382 f, -0 .448732 f, -0 .528770 f, -0 .457449 f,
-0 .619619 f, -0 .265919 f, -0 .042760 f, 0 .438730 f, 0 .501798 f, -0 .403851 f,
0 .519564 f, 0 .817314 f, 0 .366203 f, 0 .492610 f, 0 .546929 f, 0 .853094 f,
0 .289000 f, 0 .453941 f, -0 .076152 f, 0 .007226 f, -0 .183717 f, -0 .506252 f,
-0 .599989 f, -0 .576006 f, 0 .746488 f, 0 .631466 f, -0 .475599 f, -0 .334991 f,
-0 .879614 f, 0 .918957 f, 0 .473471 f, -0 .043781 f, -0 .688234 f, -0 .925875 f,
-0 .188081 f, 0 .050918 f, 0 .116855 f, 0 .221413 f, -0 .066680 f, -0 .674395 f,
-0 .481985 f, 0 .247368 f, 0 .271129 f, 0 .637979 f, -1 .006970 f, -0 .855441 f,
0 .144874 f, 0 .507424 f, 1 .506960 f, -0 .338910 f, 0 .398203 f, 0 .738000 f,
0 .263193 f, -0 .425908 f, 0 .358271 f, -1 .072900 f, -0 .816209 f, -0 .425519 f,
0 .264373 f, 0 .694014 f, 0 .036333 f, 0 .635532 f, 0 .518856 f, 0 .047585 f,
-0 .854817 f, -0 .138202 f, 0 .006811 f, -0 .052020 f, -0 .468498 f, 0 .489080 f,
-0 .105778 f, 0 .357038 f, -0 .782875 f, 0 .649049 f, -0 .562652 f, -0 .544392 f,
-0 .328526 f, -0 .402121 f, -0 .263172 f, -0 .668459 f, -0 .526702 f, -0 .395829 f,
0 .190986 f, 0 .307766 f, -1 .001830 f, -0 .293051 f, 0 .283334 f, 0 .572450 f,
0 .906095 f, -1 .144300 f, 0 .180989 f, 0 .421092 f, 0 .684571 f, 0 .527276 f,
-0 .122287 f, 0 .575067 f, 0 .675221 f, 0 .755029 f, 0 .094957 f, 0 .481403 f,
0 .825155 f, 0 .755035 f, 0 .641420 f, 0 .034497 f, 0 .518783 f, 0 .283800 f,
0 .293733 f, -0 .074778 f, -0 .268720 f, 0 .798921 f, 0 .317714 f, -0 .236391 f,
-0 .375071 f, -0 .414600 f, 0 .223413 f, -0 .349044 f, -0 .191033 f, -0 .391779 f,
-0 .596894 f, -0 .378608 f, -0 .185920 f, -0 .822171 f, -0 .754962 f, -0 .167706 f,
0 .755378 f, 0 .671847 f, 0 .969414 f, 0 .793048 f, 1 .078610 f, -0 .418963 f,
0 .367648 f, 0 .217645 f, 0 .294232 f, 0 .113027 f, 0 .060312 f, -0 .327488 f,
-0 .305035 f, -0 .243600 f, -0 .020588 f, -0 .326324 f, -0 .417534 f, -0 .425868 f,
-0 .404614 f, -0 .346750 f, -0 .339145 f, -0 .348094 f, -0 .527290 f, -0 .617825 f,
-0 .258342 f, -0 .200753 f, -0 .249779 f, -0 .321039 f, -0 .023117 f, -0 .004167 f,
-0 .206788 f, -0 .612420 f, -0 .646428 f, -0 .548969 f, -0 .158875 f, 0 .213814 f,
-0 .084040 f, -0 .217365 f, -0 .511895 f, -0 .653285 f, 0 .440971 f, 0 .455591 f,
-0 .123900 f, 0 .134097 f, -0 .251241 f, 0 .682463 f, 0 .740614 f, 0 .991212 f,
0 .565984 f, 0 .592690 f,
};
static inline float32x4_t add_f32x4_x4(const float32x4_t a[4 ]) {
float32x4_t sum01 = vaddq_f32(a[0 ], a[1 ]);
float32x4_t sum23 = vaddq_f32(a[2 ], a[3 ]);
return vaddq_f32(sum01, sum23);
}
static inline void av1_cnn_convolve_no_maxpool_padding_valid_2x2_large_neon(
const float **input, int in_width, int in_height, int in_stride,
const float *bias, const int skip_width, const int skip_height,
const int filter_width, const int filter_height, const int in_channels,
const int out_channels, float **output, int out_stride, int start_idx,
const float *weights) {
assert(filter_height == 2 && filter_width == 2 );
assert(skip_width == 2 && skip_height == 2 );
assert(in_width >= 16 );
const int in_size = in_height * in_width;
do {
const float32x4_t bias_v = vdupq_n_f32(bias[0 ]);
const float *weight_ptr0 = weights;
const float *in_ptr0 = *input;
float *out_ptr0 = *output;
int h = 0 ;
do {
const float *in_ptr1 = in_ptr0;
float *out_ptr1 = out_ptr0;
int w = 0 ;
do {
const float *weight_ptr1 = weight_ptr0;
const float *in_ptr2 = in_ptr1;
int k = 0 ;
float32x4_t sum0[4 ] = { bias_v, vdupq_n_f32(0 ), vdupq_n_f32(0 ),
vdupq_n_f32(0 ) };
float32x4_t sum1[4 ] = { bias_v, vdupq_n_f32(0 ), vdupq_n_f32(0 ),
vdupq_n_f32(0 ) };
do {
const float32x4_t weights0 = vld1q_f32(weight_ptr1);
const float32x4_t weights1 = vld1q_f32(weight_ptr1 + 4 );
const float32x2_t weights0_lo = vget_low_f32(weights0);
const float32x2_t weights0_hi = vget_high_f32(weights0);
const float32x2_t weights1_lo = vget_low_f32(weights1);
const float32x2_t weights1_hi = vget_high_f32(weights1);
const float32x4x2_t in0_lo_0 = vld2q_f32(in_ptr2);
const float32x4x2_t in0_hi_0 = vld2q_f32(in_ptr2 + in_stride);
const float32x4x2_t in1_lo_0 = vld2q_f32(in_ptr2 + in_size);
const float32x4x2_t in1_hi_0 =
vld2q_f32(in_ptr2 + in_size + in_stride);
sum0[0 ] = vmlaq_lane_f32(sum0[0 ], in0_lo_0.val[0 ], weights0_lo, 0 );
sum0[0 ] = vmlaq_lane_f32(sum0[0 ], in0_lo_0.val[1 ], weights0_lo, 1 );
sum0[1 ] = vmlaq_lane_f32(sum0[1 ], in0_hi_0.val[0 ], weights0_hi, 0 );
sum0[1 ] = vmlaq_lane_f32(sum0[1 ], in0_hi_0.val[1 ], weights0_hi, 1 );
sum0[2 ] = vmlaq_lane_f32(sum0[2 ], in1_lo_0.val[0 ], weights1_lo, 0 );
sum0[2 ] = vmlaq_lane_f32(sum0[2 ], in1_lo_0.val[1 ], weights1_lo, 1 );
sum0[3 ] = vmlaq_lane_f32(sum0[3 ], in1_hi_0.val[0 ], weights1_hi, 0 );
sum0[3 ] = vmlaq_lane_f32(sum0[3 ], in1_hi_0.val[1 ], weights1_hi, 1 );
const float32x4x2_t in0_lo_1 = vld2q_f32(in_ptr2 + 8 );
const float32x4x2_t in0_hi_1 = vld2q_f32(in_ptr2 + in_stride + 8 );
const float32x4x2_t in1_lo_1 = vld2q_f32(in_ptr2 + in_size + 8 );
const float32x4x2_t in1_hi_1 =
vld2q_f32(in_ptr2 + in_size + in_stride + 8 );
sum1[0 ] = vmlaq_lane_f32(sum1[0 ], in0_lo_1.val[0 ], weights0_lo, 0 );
sum1[0 ] = vmlaq_lane_f32(sum1[0 ], in0_lo_1.val[1 ], weights0_lo, 1 );
sum1[1 ] = vmlaq_lane_f32(sum1[1 ], in0_hi_1.val[0 ], weights0_hi, 0 );
sum1[1 ] = vmlaq_lane_f32(sum1[1 ], in0_hi_1.val[1 ], weights0_hi, 1 );
sum1[2 ] = vmlaq_lane_f32(sum1[2 ], in1_lo_1.val[0 ], weights1_lo, 0 );
sum1[2 ] = vmlaq_lane_f32(sum1[2 ], in1_lo_1.val[1 ], weights1_lo, 1 );
sum1[3 ] = vmlaq_lane_f32(sum1[3 ], in1_hi_1.val[0 ], weights1_hi, 0 );
sum1[3 ] = vmlaq_lane_f32(sum1[3 ], in1_hi_1.val[1 ], weights1_hi, 1 );
weight_ptr1 += 8 ;
in_ptr2 += 2 * in_size;
k += 2 ;
} while (k < in_channels);
vst1q_f32(out_ptr1, add_f32x4_x4(sum0));
vst1q_f32(out_ptr1 + 4 , add_f32x4_x4(sum1));
out_ptr1 += 8 ;
in_ptr1 += 8 * skip_width;
w += 8 * skip_width;
} while (w < in_width - filter_width + 1 );
out_ptr0 += out_stride;
in_ptr0 += skip_height * in_stride;
h += skip_height;
} while (h < in_height - filter_height + 1 );
++bias;
++output;
weights += in_channels * filter_height * filter_width;
} while (++start_idx < out_channels);
}
static inline void av1_cnn_convolve_no_maxpool_padding_valid_2x2_neon(
const float **input, int in_width, int in_height, int in_stride,
const float *bias, const int skip_width, const int skip_height,
const int filter_width, const int filter_height, const int in_channels,
const int out_channels, float **output, int out_stride, int start_idx,
const float *weights) {
assert(filter_height == 2 && filter_width == 2 );
assert(skip_width == 2 && skip_height == 2 );
assert(in_width == 8 );
const int in_size = in_height * in_width;
do {
const float32x4_t bias_v = vdupq_n_f32(*bias);
const float *weight_ptr0 = weights;
const float *in_ptr0 = *input;
float *out_ptr0 = *output;
int h = 0 ;
do {
const float *in_ptr1 = in_ptr0;
float *out_ptr1 = out_ptr0;
int w = 0 ;
do {
const float *weight_ptr1 = weight_ptr0;
const float *in_ptr2 = in_ptr1;
int k = 0 ;
float32x4_t sum[4 ] = { bias_v, vdupq_n_f32(0 ), vdupq_n_f32(0 ),
vdupq_n_f32(0 ) };
do {
const float32x4_t weights0 = vld1q_f32(weight_ptr1);
const float32x4_t weights1 = vld1q_f32(weight_ptr1 + 4 );
const float32x2_t weights0_lo = vget_low_f32(weights0);
const float32x2_t weights0_hi = vget_high_f32(weights0);
const float32x2_t weights1_lo = vget_low_f32(weights1);
const float32x2_t weights1_hi = vget_high_f32(weights1);
const float32x4x2_t in0_lo = vld2q_f32(in_ptr2);
const float32x4x2_t in0_hi = vld2q_f32(in_ptr2 + in_stride);
const float32x4x2_t in1_lo = vld2q_f32(in_ptr2 + in_size);
const float32x4x2_t in1_hi = vld2q_f32(in_ptr2 + in_size + in_stride);
sum[0 ] = vmlaq_lane_f32(sum[0 ], in0_lo.val[0 ], weights0_lo, 0 );
sum[0 ] = vmlaq_lane_f32(sum[0 ], in0_lo.val[1 ], weights0_lo, 1 );
sum[1 ] = vmlaq_lane_f32(sum[1 ], in0_hi.val[0 ], weights0_hi, 0 );
sum[1 ] = vmlaq_lane_f32(sum[1 ], in0_hi.val[1 ], weights0_hi, 1 );
sum[2 ] = vmlaq_lane_f32(sum[2 ], in1_lo.val[0 ], weights1_lo, 0 );
sum[2 ] = vmlaq_lane_f32(sum[2 ], in1_lo.val[1 ], weights1_lo, 1 );
sum[3 ] = vmlaq_lane_f32(sum[3 ], in1_hi.val[0 ], weights1_hi, 0 );
sum[3 ] = vmlaq_lane_f32(sum[3 ], in1_hi.val[1 ], weights1_hi, 1 );
weight_ptr1 += 8 ;
in_ptr2 += 2 * in_size;
k += 2 ;
} while (k < in_channels);
vst1q_f32(out_ptr1, add_f32x4_x4(sum));
out_ptr1 += 4 ;
in_ptr1 += 4 * skip_width;
w += 4 * skip_width;
} while (w < in_width - filter_width + 1 );
out_ptr0 += out_stride;
in_ptr0 += skip_height * in_stride;
h += skip_height;
} while (h < in_height - filter_height + 1 );
++bias;
++output;
weights += in_channels * filter_height * filter_width;
} while (++start_idx < out_channels);
}
static inline void av1_cnn_convolve_no_maxpool_padding_valid_5x5_neon(
const float **input, int in_width, int in_height, int in_stride,
const float *bias, const int skip_width, const int skip_height,
const int filter_width, const int filter_height, const int in_channels,
const int out_channels, float **output, int out_stride, int start_idx,
const float *weights) {
assert(filter_height == 5 && filter_width == 5 );
assert(skip_width == 4 && skip_height == 4 );
assert(in_width >= 16 );
assert(in_channels == 1 );
(void )in_channels;
do {
const float32x4_t bias_v = vdupq_n_f32(*bias);
const float *in_ptr0 = *input;
const float *weights_ptr0 = weights;
float *out_ptr0 = *output;
int h = 0 ;
do {
const float *in_ptr1 = in_ptr0;
float *out_ptr1 = out_ptr0;
int w = 0 ;
do {
float32x4_t sum[2 ] = { bias_v, vdupq_n_f32(0 ) };
const float32x4_t weight_0_3 = vld1q_f32(weights_ptr0);
const float32x4_t weight_4_7 = vld1q_f32(weights_ptr0 + 4 );
const float32x4_t weight_8_11 = vld1q_f32(weights_ptr0 + 8 );
const float32x4_t weight_12_15 = vld1q_f32(weights_ptr0 + 12 );
const float32x4_t weight_16_19 = vld1q_f32(weights_ptr0 + 16 );
const float32x4_t weight_20_23 = vld1q_f32(weights_ptr0 + 20 );
const float32x2_t weight_0_3_lo = vget_low_f32(weight_0_3);
const float32x2_t weight_0_3_hi = vget_high_f32(weight_0_3);
const float32x2_t weight_4_7_lo = vget_low_f32(weight_4_7);
const float32x2_t weight_4_7_hi = vget_high_f32(weight_4_7);
const float32x2_t weight_8_11_lo = vget_low_f32(weight_8_11);
const float32x2_t weight_8_11_hi = vget_high_f32(weight_8_11);
const float32x2_t weight_12_15_lo = vget_low_f32(weight_12_15);
const float32x2_t weight_12_15_hi = vget_high_f32(weight_12_15);
const float32x2_t weight_16_19_lo = vget_low_f32(weight_16_19);
const float32x2_t weight_16_19_hi = vget_high_f32(weight_16_19);
const float32x2_t weight_20_23_lo = vget_low_f32(weight_20_23);
const float32x2_t weight_20_23_hi = vget_high_f32(weight_20_23);
const float32x4x4_t in0 = vld4q_f32(in_ptr1 + 0 * in_stride);
const float32x4x4_t in1 = vld4q_f32(in_ptr1 + 1 * in_stride);
const float32x4x4_t in2 = vld4q_f32(in_ptr1 + 2 * in_stride);
const float32x4x4_t in3 = vld4q_f32(in_ptr1 + 3 * in_stride);
const float32x4x4_t in4 = vld4q_f32(in_ptr1 + 4 * in_stride);
const float32x4_t in0_4 = vextq_f32(
in0.val[0 ], vdupq_n_f32(*(in_ptr1 + 16 + 0 * in_stride)), 1 );
const float32x4_t in1_4 = vextq_f32(
in1.val[0 ], vdupq_n_f32(*(in_ptr1 + 16 + 1 * in_stride)), 1 );
const float32x4_t in2_4 = vextq_f32(
in2.val[0 ], vdupq_n_f32(*(in_ptr1 + 16 + 2 * in_stride)), 1 );
const float32x4_t in3_4 = vextq_f32(
in3.val[0 ], vdupq_n_f32(*(in_ptr1 + 16 + 3 * in_stride)), 1 );
const float32x4_t in4_4 = vextq_f32(
in4.val[0 ], vdupq_n_f32(*(in_ptr1 + 16 + 4 * in_stride)), 1 );
// Kernel row 0.
sum[0 ] = vmlaq_lane_f32(sum[0 ], in0.val[0 ], weight_0_3_lo, 0 );
sum[1 ] = vmlaq_lane_f32(sum[1 ], in0.val[1 ], weight_0_3_lo, 1 );
sum[0 ] = vmlaq_lane_f32(sum[0 ], in0.val[2 ], weight_0_3_hi, 0 );
sum[1 ] = vmlaq_lane_f32(sum[1 ], in0.val[3 ], weight_0_3_hi, 1 );
sum[0 ] = vmlaq_lane_f32(sum[0 ], in0_4, weight_4_7_lo, 0 );
// Kernel row 1.
sum[1 ] = vmlaq_lane_f32(sum[1 ], in1.val[0 ], weight_4_7_lo, 1 );
sum[0 ] = vmlaq_lane_f32(sum[0 ], in1.val[1 ], weight_4_7_hi, 0 );
sum[1 ] = vmlaq_lane_f32(sum[1 ], in1.val[2 ], weight_4_7_hi, 1 );
sum[0 ] = vmlaq_lane_f32(sum[0 ], in1.val[3 ], weight_8_11_lo, 0 );
sum[1 ] = vmlaq_lane_f32(sum[1 ], in1_4, weight_8_11_lo, 1 );
// Kernel row 2.
sum[0 ] = vmlaq_lane_f32(sum[0 ], in2.val[0 ], weight_8_11_hi, 0 );
sum[1 ] = vmlaq_lane_f32(sum[1 ], in2.val[1 ], weight_8_11_hi, 1 );
sum[0 ] = vmlaq_lane_f32(sum[0 ], in2.val[2 ], weight_12_15_lo, 0 );
sum[1 ] = vmlaq_lane_f32(sum[1 ], in2.val[3 ], weight_12_15_lo, 1 );
sum[0 ] = vmlaq_lane_f32(sum[0 ], in2_4, weight_12_15_hi, 0 );
// Kernel row 3.
sum[1 ] = vmlaq_lane_f32(sum[1 ], in3.val[0 ], weight_12_15_hi, 1 );
sum[0 ] = vmlaq_lane_f32(sum[0 ], in3.val[1 ], weight_16_19_lo, 0 );
sum[1 ] = vmlaq_lane_f32(sum[1 ], in3.val[2 ], weight_16_19_lo, 1 );
sum[0 ] = vmlaq_lane_f32(sum[0 ], in3.val[3 ], weight_16_19_hi, 0 );
sum[1 ] = vmlaq_lane_f32(sum[1 ], in3_4, weight_16_19_hi, 1 );
// Kernel row 4.
sum[0 ] = vmlaq_lane_f32(sum[0 ], in4.val[0 ], weight_20_23_lo, 0 );
sum[1 ] = vmlaq_lane_f32(sum[1 ], in4.val[1 ], weight_20_23_lo, 1 );
sum[0 ] = vmlaq_lane_f32(sum[0 ], in4.val[2 ], weight_20_23_hi, 0 );
sum[1 ] = vmlaq_lane_f32(sum[1 ], in4.val[3 ], weight_20_23_hi, 1 );
sum[0 ] = vmlaq_f32(sum[0 ], vdupq_n_f32(*(weights_ptr0 + 24 )), in4_4);
vst1q_f32(out_ptr1, vaddq_f32(sum[0 ], sum[1 ]));
out_ptr1 += 4 ;
in_ptr1 += 4 * skip_width;
w += 4 * skip_width;
} while (w < in_width - filter_width + 1 );
out_ptr0 += out_stride;
in_ptr0 += skip_height * in_stride;
h += skip_height;
} while (h < in_height - filter_height + 1 );
++output;
++bias;
weights += 25 ;
} while (++start_idx < out_channels);
}
// Neon variant of av1_cnn_convolve_no_maxpool_padding_valid_c().
// As per the current encoder, av1_cnn_convolve function gets called for
// block size equal to 64x64. av1_cnn_convolve() uses layer config values
// set by av1_intra_mode_cnn_partition_cnn_config. The following are a few
// details related to each layer's config parameters.
// Layer_Number in_size out_size filter_wd filter_ht skip_wd skip_ht
// 0 64x64 16x16 5 5 4 4
// 1 16x16 8x8 2 2 2 2
// 2 8x8 4x4 2 2 2 2
// 3 4x4 2x2 2 2 2 2
// 4 2x2 1x1 2 2 2 2
// Here,
// filter_wd = filter_width and filter_ht = filter_height,
// skip_wd = skip_width and skip_ht = skip_height.
void av1_cnn_convolve_no_maxpool_padding_valid_neon(
const float **input, int in_width, int in_height, int in_stride,
const CNN_LAYER_CONFIG *layer_config, float **output, int out_stride,
int start_idx, int cstep, int channel_step) {
assert((layer_config->skip_height == 1 && layer_config->skip_width == 1 ) ||
!layer_config->maxpool);
assert(layer_config->filter_height > 1 || layer_config->filter_width > 1 );
assert(layer_config->pad == PADDING_VALID);
assert(channel_step == 1 );
assert(cstep == layer_config->in_channels * layer_config->out_channels);
if (layer_config->filter_width == 5 && layer_config->filter_height == 5 &&
layer_config->skip_width == 4 && layer_config->skip_height == 4 ) {
av1_cnn_convolve_no_maxpool_padding_valid_5x5_neon(
input, in_width, in_height, in_stride, layer_config->bias,
layer_config->skip_width, layer_config->skip_height,
layer_config->filter_width, layer_config->filter_height,
layer_config->in_channels, layer_config->out_channels, output,
out_stride, start_idx, weights_layer_5);
} else if (layer_config->filter_width == 2 &&
layer_config->filter_height == 2 &&
layer_config->skip_width == 2 && layer_config->skip_height == 2 ) {
const float *weights = weights_layer_1;
if (layer_config->output_num ==
av1_intra_mode_cnn_partition_cnn_config.layer_config[2 ].output_num) {
weights = weights_layer_2;
} else if ((layer_config->output_num ==
av1_intra_mode_cnn_partition_cnn_config.layer_config[3 ]
.output_num)) {
weights = weights_layer_3;
} else if ((layer_config->output_num ==
av1_intra_mode_cnn_partition_cnn_config.layer_config[4 ]
.output_num)) {
weights = weights_layer_4;
}
if (in_width >= 16 ) {
av1_cnn_convolve_no_maxpool_padding_valid_2x2_large_neon(
input, in_width, in_height, in_stride, layer_config->bias,
layer_config->skip_width, layer_config->skip_height,
layer_config->filter_width, layer_config->filter_height,
layer_config->in_channels, layer_config->out_channels, output,
out_stride, start_idx, weights);
} else if (in_width == 8 ) {
av1_cnn_convolve_no_maxpool_padding_valid_2x2_neon(
input, in_width, in_height, in_stride, layer_config->bias,
layer_config->skip_width, layer_config->skip_height,
layer_config->filter_width, layer_config->filter_height,
layer_config->in_channels, layer_config->out_channels, output,
out_stride, start_idx, weights);
} else {
av1_cnn_convolve_no_maxpool_padding_valid_c(
input, in_width, in_height, in_stride, layer_config, output,
out_stride, start_idx, cstep, channel_step);
}
} else {
av1_cnn_convolve_no_maxpool_padding_valid_c(
input, in_width, in_height, in_stride, layer_config, output, out_stride,
start_idx, cstep, channel_step);
}
}
Messung V0.5 in Prozent C=99 H=94 G=96