shithub: aacdec

ref: 0800217ce58d978ce9bb762179ee02477cba8e89
dir: /libfaad/sbr_dct.c/

View raw version
/*
** FAAD2 - Freeware Advanced Audio (AAC) Decoder including SBR decoding
** Copyright (C) 2003-2004 M. Bakker, Ahead Software AG, http://www.nero.com
**
** This program is free software; you can redistribute it and/or modify
** it under the terms of the GNU General Public License as published by
** the Free Software Foundation; either version 2 of the License, or
** (at your option) any later version.
**
** This program is distributed in the hope that it will be useful,
** but WITHOUT ANY WARRANTY; without even the implied warranty of
** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
** GNU General Public License for more details.
**
** You should have received a copy of the GNU General Public License
** along with this program; if not, write to the Free Software
** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
**
** Any non-GPL usage of this software or parts of this software is strictly
** forbidden.
**
** Commercial non-GPL licensing of this software is possible.
** For more info contact Ahead Software through Mpeg4AAClicense@nero.com.
**
** $Id: sbr_dct.c,v 1.11 2004/02/26 09:29:27 menno Exp $
**/

#include "common.h"

#ifdef SBR_DEC

#ifdef _MSC_VER
#pragma warning(disable:4305)
#pragma warning(disable:4244)
#endif


#include "sbr_dct.h"

void DCT4_32(real_t *y, real_t *x)
{
    real_t f0;
    real_t f1;
    real_t f2;
    real_t f3;
    real_t f4;
    real_t f5;
    real_t f6;
    real_t f7;
    real_t f8;
    real_t f9;
    real_t f10;
    real_t f11;
    real_t f12;
    real_t f13;
    real_t f14;
    real_t f15;
    real_t f16;
    real_t f17;
    real_t f18;
    real_t f19;
    real_t f20;
    real_t f21;
    real_t f22;
    real_t f23;
    real_t f24;
    real_t f25;
    real_t f26;
    real_t f27;
    real_t f28;
    real_t f29;
    real_t f30;
    real_t f31;
    real_t f32;
    real_t f33;
    real_t f34;
    real_t f35;
    real_t f36;
    real_t f37;
    real_t f38;
    real_t f39;
    real_t f40;
    real_t f41;
    real_t f42;
    real_t f43;
    real_t f44;
    real_t f45;
    real_t f46;
    real_t f47;
    real_t f48;
    real_t f49;
    real_t f50;
    real_t f51;
    real_t f52;
    real_t f53;
    real_t f54;
    real_t f55;
    real_t f56;
    real_t f57;
    real_t f58;
    real_t f59;
    real_t f60;
    real_t f61;
    real_t f62;
    real_t f63;
    real_t f64;
    real_t f65;
    real_t f66;
    real_t f67;
    real_t f68;
    real_t f69;
    real_t f70;
    real_t f71;
    real_t f72;
    real_t f73;
    real_t f74;
    real_t f75;
    real_t f76;
    real_t f77;
    real_t f78;
    real_t f79;
    real_t f80;
    real_t f81;
    real_t f82;
    real_t f83;
    real_t f84;
    real_t f85;
    real_t f86;
    real_t f87;
    real_t f88;
    real_t f89;
    real_t f90;
    real_t f91;
    real_t f92;
    real_t f93;
    real_t f94;
    real_t f95;
    real_t f96;
    real_t f97;
    real_t f98;
    real_t f99;
    real_t f100;
    real_t f101;
    real_t f102;
    real_t f103;
    real_t f104;
    real_t f105;
    real_t f106;
    real_t f107;
    real_t f108;
    real_t f109;
    real_t f110;
    real_t f111;
    real_t f112;
    real_t f113;
    real_t f114;
    real_t f115;
    real_t f116;
    real_t f117;
    real_t f118;
    real_t f119;
    real_t f120;
    real_t f121;
    real_t f122;
    real_t f123;
    real_t f124;
    real_t f125;
    real_t f126;
    real_t f127;
    real_t f128;
    real_t f129;
    real_t f130;
    real_t f131;
    real_t f132;
    real_t f133;
    real_t f134;
    real_t f135;
    real_t f136;
    real_t f137;
    real_t f138;
    real_t f139;
    real_t f140;
    real_t f141;
    real_t f142;
    real_t f143;
    real_t f144;
    real_t f145;
    real_t f146;
    real_t f147;
    real_t f148;
    real_t f149;
    real_t f150;
    real_t f151;
    real_t f152;
    real_t f153;
    real_t f154;
    real_t f155;
    real_t f156;
    real_t f157;
    real_t f158;
    real_t f159;
    real_t f160;
    real_t f161;
    real_t f162;
    real_t f163;
    real_t f164;
    real_t f165;
    real_t f166;
    real_t f167;
    real_t f168;
    real_t f169;
    real_t f170;
    real_t f171;
    real_t f172;
    real_t f173;
    real_t f174;
    real_t f175;
    real_t f176;
    real_t f177;
    real_t f178;
    real_t f179;
    real_t f180;
    real_t f181;
    real_t f182;
    real_t f183;
    real_t f184;
    real_t f185;
    real_t f186;
    real_t f187;
    real_t f188;
    real_t f189;
    real_t f190;
    real_t f191;
    real_t f192;
    real_t f193;
    real_t f194;
    real_t f195;
    real_t f196;
    real_t f197;
    real_t f198;
    real_t f199;
    real_t f200;
    real_t f201;
    real_t f202;
    real_t f203;
    real_t f204;
    real_t f205;
    real_t f206;
    real_t f207;
    real_t f208;
    real_t f209;
    real_t f210;
    real_t f211;
    real_t f212;
    real_t f213;
    real_t f214;
    real_t f215;
    real_t f216;
    real_t f217;
    real_t f218;
    real_t f219;
    real_t f220;
    real_t f221;
    real_t f222;
    real_t f223;
    real_t f224;
    real_t f225;
    real_t f226;
    real_t f227;
    real_t f228;
    real_t f229;
    real_t f230;
    real_t f231;
    real_t f232;
    real_t f233;
    real_t f234;
    real_t f235;
    real_t f236;
    real_t f237;
    real_t f238;
    real_t f239;
    real_t f240;
    real_t f241;
    real_t f242;
    real_t f243;
    real_t f244;
    real_t f245;
    real_t f246;
    real_t f247;
    real_t f248;
    real_t f249;
    real_t f250;
    real_t f251;
    real_t f252;
    real_t f253;
    real_t f254;
    real_t f255;
    real_t f256;
    real_t f257;
    real_t f258;
    real_t f259;
    real_t f260;
    real_t f261;
    real_t f262;
    real_t f263;
    real_t f264;
    real_t f265;
    real_t f266;
    real_t f267;
    real_t f268;
    real_t f269;
    real_t f270;
    real_t f271;
    real_t f272;
    real_t f273;
    real_t f274;
    real_t f275;
    real_t f276;
    real_t f277;
    real_t f278;
    real_t f279;
    real_t f280;
    real_t f281;
    real_t f282;
    real_t f283;
    real_t f284;
    real_t f285;
    real_t f286;
    real_t f287;
    real_t f288;
    real_t f289;
    real_t f290;
    real_t f291;
    real_t f292;
    real_t f293;
    real_t f294;
    real_t f295;
    real_t f296;
    real_t f297;
    real_t f298;
    real_t f299;
    real_t f300;
    real_t f301;
    real_t f302;
    real_t f303;
    real_t f304;
    real_t f305;
    real_t f306;
    real_t f307;
    real_t f310;
    real_t f311;
    real_t f312;
    real_t f313;
    real_t f316;
    real_t f317;
    real_t f318;
    real_t f319;
    real_t f322;
    real_t f323;
    real_t f324;
    real_t f325;
    real_t f328;
    real_t f329;
    real_t f330;
    real_t f331;
    real_t f334;
    real_t f335;
    real_t f336;
    real_t f337;
    real_t f340;
    real_t f341;
    real_t f342;
    real_t f343;
    real_t f346;
    real_t f347;
    real_t f348;
    real_t f349;
    real_t f352;
    real_t f353;
    real_t f354;
    real_t f355;
    real_t f358;
    real_t f359;
    real_t f360;
    real_t f361;
    real_t f364;
    real_t f365;
    real_t f366;
    real_t f367;
    real_t f370;
    real_t f371;
    real_t f372;
    real_t f373;
    real_t f376;
    real_t f377;
    real_t f378;
    real_t f379;
    real_t f382;
    real_t f383;
    real_t f384;
    real_t f385;
    real_t f388;
    real_t f389;
    real_t f390;
    real_t f391;
    real_t f394;
    real_t f395;
    real_t f396;
    real_t f397;

    f0 = x[15] - x[16];
    f1 = x[15] + x[16];
    f2 = 0.7071067811865476 * f1;
    f3 = 0.7071067811865476 * f0;
    f4 = x[8] - x[23];
    f5 = x[8] + x[23];
    f6 = 0.7071067811865476 * f5;
    f7 = 0.7071067811865476 * f4;
    f8 = x[12] - x[19];
    f9 = x[12] + x[19];
    f10 = 0.7071067811865476 * f9;
    f11 = 0.7071067811865476 * f8;
    f12 = x[11] - x[20];
    f13 = x[11] + x[20];
    f14 = 0.7071067811865476 * f13;
    f15 = 0.7071067811865476 * f12;
    f16 = x[14] - x[17];
    f17 = x[14] + x[17];
    f18 = 0.7071067811865476 * f17;
    f19 = 0.7071067811865476 * f16;
    f20 = x[9] - x[22];
    f21 = x[9] + x[22];
    f22 = 0.7071067811865476 * f21;
    f23 = 0.7071067811865476 * f20;
    f24 = x[13] - x[18];
    f25 = x[13] + x[18];
    f26 = 0.7071067811865476 * f25;
    f27 = 0.7071067811865476 * f24;
    f28 = x[10] - x[21];
    f29 = x[10] + x[21];
    f30 = 0.7071067811865476 * f29;
    f31 = 0.7071067811865476 * f28;
    f32 = x[0] - f2;
    f33 = x[0] + f2;
    f34 = x[31] - f3;
    f35 = x[31] + f3;
    f36 = x[7] - f6;
    f37 = x[7] + f6;
    f38 = x[24] - f7;
    f39 = x[24] + f7;
    f40 = x[3] - f10;
    f41 = x[3] + f10;
    f42 = x[28] - f11;
    f43 = x[28] + f11;
    f44 = x[4] - f14;
    f45 = x[4] + f14;
    f46 = x[27] - f15;
    f47 = x[27] + f15;
    f48 = x[1] - f18;
    f49 = x[1] + f18;
    f50 = x[30] - f19;
    f51 = x[30] + f19;
    f52 = x[6] - f22;
    f53 = x[6] + f22;
    f54 = x[25] - f23;
    f55 = x[25] + f23;
    f56 = x[2] - f26;
    f57 = x[2] + f26;
    f58 = x[29] - f27;
    f59 = x[29] + f27;
    f60 = x[5] - f30;
    f61 = x[5] + f30;
    f62 = x[26] - f31;
    f63 = x[26] + f31;
    f64 = f39 + f37;
    f65 = (-0.5411961001461969) * f39;
    f66 = 0.9238795325112867 * f64;
    f67 = 1.3065629648763766 * f37;
    f68 = f65 + f66;
    f69 = f67 - f66;
    f70 = f38 + f36;
    f71 = 1.3065629648763770 * f38;
    f72 = (-0.3826834323650904) * f70;
    f73 = 0.5411961001461961 * f36;
    f74 = f71 + f72;
    f75 = f73 - f72;
    f76 = f47 + f45;
    f77 = (-0.5411961001461969) * f47;
    f78 = 0.9238795325112867 * f76;
    f79 = 1.3065629648763766 * f45;
    f80 = f77 + f78;
    f81 = f79 - f78;
    f82 = f46 + f44;
    f83 = 1.3065629648763770 * f46;
    f84 = (-0.3826834323650904) * f82;
    f85 = 0.5411961001461961 * f44;
    f86 = f83 + f84;
    f87 = f85 - f84;
    f88 = f55 + f53;
    f89 = (-0.5411961001461969) * f55;
    f90 = 0.9238795325112867 * f88;
    f91 = 1.3065629648763766 * f53;
    f92 = f89 + f90;
    f93 = f91 - f90;
    f94 = f54 + f52;
    f95 = 1.3065629648763770 * f54;
    f96 = (-0.3826834323650904) * f94;
    f97 = 0.5411961001461961 * f52;
    f98 = f95 + f96;
    f99 = f97 - f96;
    f100 = f63 + f61;
    f101 = (-0.5411961001461969) * f63;
    f102 = 0.9238795325112867 * f100;
    f103 = 1.3065629648763766 * f61;
    f104 = f101 + f102;
    f105 = f103 - f102;
    f106 = f62 + f60;
    f107 = 1.3065629648763770 * f62;
    f108 = (-0.3826834323650904) * f106;
    f109 = 0.5411961001461961 * f60;
    f110 = f107 + f108;
    f111 = f109 - f108;
    f112 = f33 - f68;
    f113 = f33 + f68;
    f114 = f35 - f69;
    f115 = f35 + f69;
    f116 = f32 - f74;
    f117 = f32 + f74;
    f118 = f34 - f75;
    f119 = f34 + f75;
    f120 = f41 - f80;
    f121 = f41 + f80;
    f122 = f43 - f81;
    f123 = f43 + f81;
    f124 = f40 - f86;
    f125 = f40 + f86;
    f126 = f42 - f87;
    f127 = f42 + f87;
    f128 = f49 - f92;
    f129 = f49 + f92;
    f130 = f51 - f93;
    f131 = f51 + f93;
    f132 = f48 - f98;
    f133 = f48 + f98;
    f134 = f50 - f99;
    f135 = f50 + f99;
    f136 = f57 - f104;
    f137 = f57 + f104;
    f138 = f59 - f105;
    f139 = f59 + f105;
    f140 = f56 - f110;
    f141 = f56 + f110;
    f142 = f58 - f111;
    f143 = f58 + f111;
    f144 = f123 + f121;
    f145 = (-0.7856949583871021) * f123;
    f146 = 0.9807852804032304 * f144;
    f147 = 1.1758756024193588 * f121;
    f148 = f145 + f146;
    f149 = f147 - f146;
    f150 = f127 + f125;
    f151 = 0.2758993792829431 * f127;
    f152 = 0.5555702330196022 * f150;
    f153 = 1.3870398453221475 * f125;
    f154 = f151 + f152;
    f155 = f153 - f152;
    f156 = f122 + f120;
    f157 = 1.1758756024193591 * f122;
    f158 = (-0.1950903220161287) * f156;
    f159 = 0.7856949583871016 * f120;
    f160 = f157 + f158;
    f161 = f159 - f158;
    f162 = f126 + f124;
    f163 = 1.3870398453221473 * f126;
    f164 = (-0.8314696123025455) * f162;
    f165 = (-0.2758993792829436) * f124;
    f166 = f163 + f164;
    f167 = f165 - f164;
    f168 = f139 + f137;
    f169 = (-0.7856949583871021) * f139;
    f170 = 0.9807852804032304 * f168;
    f171 = 1.1758756024193588 * f137;
    f172 = f169 + f170;
    f173 = f171 - f170;
    f174 = f143 + f141;
    f175 = 0.2758993792829431 * f143;
    f176 = 0.5555702330196022 * f174;
    f177 = 1.3870398453221475 * f141;
    f178 = f175 + f176;
    f179 = f177 - f176;
    f180 = f138 + f136;
    f181 = 1.1758756024193591 * f138;
    f182 = (-0.1950903220161287) * f180;
    f183 = 0.7856949583871016 * f136;
    f184 = f181 + f182;
    f185 = f183 - f182;
    f186 = f142 + f140;
    f187 = 1.3870398453221473 * f142;
    f188 = (-0.8314696123025455) * f186;
    f189 = (-0.2758993792829436) * f140;
    f190 = f187 + f188;
    f191 = f189 - f188;
    f192 = f113 - f148;
    f193 = f113 + f148;
    f194 = f115 - f149;
    f195 = f115 + f149;
    f196 = f117 - f154;
    f197 = f117 + f154;
    f198 = f119 - f155;
    f199 = f119 + f155;
    f200 = f112 - f160;
    f201 = f112 + f160;
    f202 = f114 - f161;
    f203 = f114 + f161;
    f204 = f116 - f166;
    f205 = f116 + f166;
    f206 = f118 - f167;
    f207 = f118 + f167;
    f208 = f129 - f172;
    f209 = f129 + f172;
    f210 = f131 - f173;
    f211 = f131 + f173;
    f212 = f133 - f178;
    f213 = f133 + f178;
    f214 = f135 - f179;
    f215 = f135 + f179;
    f216 = f128 - f184;
    f217 = f128 + f184;
    f218 = f130 - f185;
    f219 = f130 + f185;
    f220 = f132 - f190;
    f221 = f132 + f190;
    f222 = f134 - f191;
    f223 = f134 + f191;
    f224 = f211 + f209;
    f225 = (-0.8971675863426361) * f211;
    f226 = 0.9951847266721968 * f224;
    f227 = 1.0932018670017576 * f209;
    f228 = f225 + f226;
    f229 = f227 - f226;
    f230 = f215 + f213;
    f231 = (-0.4105245275223571) * f215;
    f232 = 0.8819212643483549 * f230;
    f233 = 1.3533180011743529 * f213;
    f234 = f231 + f232;
    f235 = f233 - f232;
    f236 = f219 + f217;
    f237 = 0.1386171691990915 * f219;
    f238 = 0.6343932841636455 * f236;
    f239 = 1.4074037375263826 * f217;
    f240 = f237 + f238;
    f241 = f239 - f238;
    f242 = f223 + f221;
    f243 = 0.6666556584777466 * f223;
    f244 = 0.2902846772544623 * f242;
    f245 = 1.2472250129866711 * f221;
    f246 = f243 + f244;
    f247 = f245 - f244;
    f248 = f210 + f208;
    f249 = 1.0932018670017574 * f210;
    f250 = (-0.0980171403295605) * f248;
    f251 = 0.8971675863426364 * f208;
    f252 = f249 + f250;
    f253 = f251 - f250;
    f254 = f214 + f212;
    f255 = 1.3533180011743529 * f214;
    f256 = (-0.4713967368259979) * f254;
    f257 = 0.4105245275223569 * f212;
    f258 = f255 + f256;
    f259 = f257 - f256;
    f260 = f218 + f216;
    f261 = 1.4074037375263826 * f218;
    f262 = (-0.7730104533627369) * f260;
    f263 = (-0.1386171691990913) * f216;
    f264 = f261 + f262;
    f265 = f263 - f262;
    f266 = f222 + f220;
    f267 = 1.2472250129866711 * f222;
    f268 = (-0.9569403357322089) * f266;
    f269 = (-0.6666556584777469) * f220;
    f270 = f267 + f268;
    f271 = f269 - f268;
    f272 = f193 - f228;
    f273 = f193 + f228;
    f274 = f195 - f229;
    f275 = f195 + f229;
    f276 = f197 - f234;
    f277 = f197 + f234;
    f278 = f199 - f235;
    f279 = f199 + f235;
    f280 = f201 - f240;
    f281 = f201 + f240;
    f282 = f203 - f241;
    f283 = f203 + f241;
    f284 = f205 - f246;
    f285 = f205 + f246;
    f286 = f207 - f247;
    f287 = f207 + f247;
    f288 = f192 - f252;
    f289 = f192 + f252;
    f290 = f194 - f253;
    f291 = f194 + f253;
    f292 = f196 - f258;
    f293 = f196 + f258;
    f294 = f198 - f259;
    f295 = f198 + f259;
    f296 = f200 - f264;
    f297 = f200 + f264;
    f298 = f202 - f265;
    f299 = f202 + f265;
    f300 = f204 - f270;
    f301 = f204 + f270;
    f302 = f206 - f271;
    f303 = f206 + f271;
    f304 = f275 + f273;
    f305 = (-0.9751575901732920) * f275;
    f306 = 0.9996988186962043 * f304;
    f307 = 1.0242400472191164 * f273;
    y[0] = f305 + f306;
    y[31] = f307 - f306;
    f310 = f279 + f277;
    f311 = (-0.8700688593994936) * f279;
    f312 = 0.9924795345987100 * f310;
    f313 = 1.1148902097979263 * f277;
    y[2] = f311 + f312;
    y[29] = f313 - f312;
    f316 = f283 + f281;
    f317 = (-0.7566008898816587) * f283;
    f318 = 0.9757021300385286 * f316;
    f319 = 1.1948033701953984 * f281;
    y[4] = f317 + f318;
    y[27] = f319 - f318;
    f322 = f287 + f285;
    f323 = (-0.6358464401941451) * f287;
    f324 = 0.9495281805930367 * f322;
    f325 = 1.2632099209919283 * f285;
    y[6] = f323 + f324;
    y[25] = f325 - f324;
    f328 = f291 + f289;
    f329 = (-0.5089684416985408) * f291;
    f330 = 0.9142097557035307 * f328;
    f331 = 1.3194510697085207 * f289;
    y[8] = f329 + f330;
    y[23] = f331 - f330;
    f334 = f295 + f293;
    f335 = (-0.3771887988789273) * f295;
    f336 = 0.8700869911087114 * f334;
    f337 = 1.3629851833384954 * f293;
    y[10] = f335 + f336;
    y[21] = f337 - f336;
    f340 = f299 + f297;
    f341 = (-0.2417766217337384) * f299;
    f342 = 0.8175848131515837 * f340;
    f343 = 1.3933930045694289 * f297;
    y[12] = f341 + f342;
    y[19] = f343 - f342;
    f346 = f303 + f301;
    f347 = (-0.1040360035527077) * f303;
    f348 = 0.7572088465064845 * f346;
    f349 = 1.4103816894602612 * f301;
    y[14] = f347 + f348;
    y[17] = f349 - f348;
    f352 = f274 + f272;
    f353 = 0.0347065382144002 * f274;
    f354 = 0.6895405447370668 * f352;
    f355 = 1.4137876276885337 * f272;
    y[16] = f353 + f354;
    y[15] = f355 - f354;
    f358 = f278 + f276;
    f359 = 0.1731148370459795 * f278;
    f360 = 0.6152315905806268 * f358;
    f361 = 1.4035780182072330 * f276;
    y[18] = f359 + f360;
    y[13] = f361 - f360;
    f364 = f282 + f280;
    f365 = 0.3098559453626100 * f282;
    f366 = 0.5349976198870972 * f364;
    f367 = 1.3798511851368043 * f280;
    y[20] = f365 + f366;
    y[11] = f367 - f366;
    f370 = f286 + f284;
    f371 = 0.4436129715409088 * f286;
    f372 = 0.4496113296546065 * f370;
    f373 = 1.3428356308501219 * f284;
    y[22] = f371 + f372;
    y[9] = f373 - f372;
    f376 = f290 + f288;
    f377 = 0.5730977622997509 * f290;
    f378 = 0.3598950365349881 * f376;
    f379 = 1.2928878353697271 * f288;
    y[24] = f377 + f378;
    y[7] = f379 - f378;
    f382 = f294 + f292;
    f383 = 0.6970633083205415 * f294;
    f384 = 0.2667127574748984 * f382;
    f385 = 1.2304888232703382 * f292;
    y[26] = f383 + f384;
    y[5] = f385 - f384;
    f388 = f298 + f296;
    f389 = 0.8143157536286401 * f298;
    f390 = 0.1709618887603012 * f388;
    f391 = 1.1562395311492424 * f296;
    y[28] = f389 + f390;
    y[3] = f391 - f390;
    f394 = f302 + f300;
    f395 = 0.9237258930790228 * f302;
    f396 = 0.0735645635996674 * f394;
    f397 = 1.0708550202783576 * f300;
    y[30] = f395 + f396;
    y[1] = f397 - f396;
}

#ifdef SBR_LOW_POWER

void DCT2_16_unscaled(real_t *y, real_t *x)
{
    real_t f0, f1, f2, f3, f4, f5, f6, f7, f8, f9, f10;
    real_t f11, f12, f13, f14, f15, f16, f17, f18, f19, f20;
    real_t f21, f22, f23, f24, f25, f26, f27, f28, f31, f32;
    real_t f33, f34, f37, f38, f39, f40, f41, f42, f43, f44;
    real_t f45, f46, f47, f48, f49, f51, f53, f54, f57, f58;
    real_t f59, f60, f61, f62, f63, f64, f65, f66, f67, f68;
    real_t f69, f70, f71, f72, f73, f74, f75, f76, f77, f78;
    real_t f79, f80, f81, f82, f83, f84, f85, f86, f87, f88;
    real_t f89, f90, f91, f92, f95, f96, f97, f98, f101, f102;
    real_t f103, f104, f107, f108, f109, f110;
    
    f0 = x[0] - x[15];
    f1 = x[0] + x[15];
    f2 = x[1] - x[14];
    f3 = x[1] + x[14];
    f4 = x[2] - x[13];
    f5 = x[2] + x[13];
    f6 = x[3] - x[12];
    f7 = x[3] + x[12];
    f8 = x[4] - x[11];
    f9 = x[4] + x[11];
    f10 = x[5] - x[10];
    f11 = x[5] + x[10];
    f12 = x[6] - x[9];
    f13 = x[6] + x[9];
    f14 = x[7] - x[8];
    f15 = x[7] + x[8];
    f16 = f1 - f15;
    f17 = f1 + f15;
    f18 = f3 - f13;
    f19 = f3 + f13;
    f20 = f5 - f11;
    f21 = f5 + f11;
    f22 = f7 - f9;
    f23 = f7 + f9;
    f24 = f17 - f23;
    f25 = f17 + f23;
    f26 = f19 - f21;
    f27 = f19 + f21;
    f28 = f25 - f27;
    y[0] = f25 + f27;
    y[8] = MUL_F(f28, FRAC_CONST(0.7071067811865476));
    f31 = f24 + f26;
    f32 = MUL_C(f24, COEF_CONST(1.3065629648763766));
    f33 = MUL_F(f31, FRAC_CONST(-0.9238795325112866));
    f34 = MUL_F(f26, FRAC_CONST(-0.5411961001461967));
    y[12] = f32 + f33;
    y[4] = f34 - f33;
    f37 = f16 + f22;
    f38 = MUL_C(f16, COEF_CONST(1.1758756024193588));
    f39 = MUL_F(f37, FRAC_CONST(-0.9807852804032304));
    f40 = MUL_F(f22, FRAC_CONST(-0.7856949583871021));
    f41 = f38 + f39;
    f42 = f40 - f39;
    f43 = f18 + f20;
    f44 = MUL_C(f18, COEF_CONST(1.3870398453221473));
    f45 = MUL_F(f43, FRAC_CONST(-0.8314696123025455));
    f46 = MUL_F(f20, FRAC_CONST(-0.2758993792829436));
    f47 = f44 + f45;
    f48 = f46 - f45;
    f49 = f42 - f48;
    y[2] = f42 + f48;
    f51 = MUL_F(f49, FRAC_CONST(0.7071067811865476));
    y[14] = f41 - f47;
    f53 = f41 + f47;
    f54 = MUL_F(f53, FRAC_CONST(0.7071067811865476));
    y[10] = f51 - f54;
    y[6] = f51 + f54;
    f57 = f2 - f4;
    f58 = f2 + f4;
    f59 = f6 - f8;
    f60 = f6 + f8;
    f61 = f10 - f12;
    f62 = f10 + f12;
    f63 = MUL_F(f60, FRAC_CONST(0.7071067811865476));
    f64 = f0 - f63;
    f65 = f0 + f63;
    f66 = f58 + f62;
    f67 = MUL_C(f58, COEF_CONST(1.3065629648763766));
    f68 = MUL_F(f66, FRAC_CONST(-0.9238795325112866));
    f69 = MUL_F(f62, FRAC_CONST(-0.5411961001461967));
    f70 = f67 + f68;
    f71 = f69 - f68;
    f72 = f65 - f71;
    f73 = f65 + f71;
    f74 = f64 - f70;
    f75 = f64 + f70;
    f76 = MUL_F(f59, FRAC_CONST(0.7071067811865476));
    f77 = f14 - f76;
    f78 = f14 + f76;
    f79 = f61 + f57;
    f80 = MUL_C(f61, COEF_CONST(1.3065629648763766));
    f81 = MUL_F(f79, FRAC_CONST(-0.9238795325112866));
    f82 = MUL_F(f57, FRAC_CONST(-0.5411961001461967));
    f83 = f80 + f81;
    f84 = f82 - f81;
    f85 = f78 - f84;
    f86 = f78 + f84;
    f87 = f77 - f83;
    f88 = f77 + f83;
    f89 = f86 + f73;
    f90 = MUL_F(f86, FRAC_CONST(-0.8971675863426361));
    f91 = MUL_F(f89, FRAC_CONST(0.9951847266721968));
    f92 = MUL_C(f73, COEF_CONST(1.0932018670017576));
    y[1] = f90 + f91;
    y[15] = f92 - f91;
    f95 = f75 - f88;
    f96 = MUL_F(f88, FRAC_CONST(-0.6666556584777466));
    f97 = MUL_F(f95, FRAC_CONST(0.9569403357322089));
    f98 = MUL_C(f75, COEF_CONST(1.2472250129866713));
    y[3] = f97 - f96;
    y[13] = f98 - f97;
    f101 = f87 + f74;
    f102 = MUL_F(f87, FRAC_CONST(-0.4105245275223571));
    f103 = MUL_F(f101, FRAC_CONST(0.8819212643483549));
    f104 = MUL_C(f74, COEF_CONST(1.3533180011743529));
    y[5] = f102 + f103;
    y[11] = f104 - f103;
    f107 = f72 - f85;
    f108 = MUL_F(f85, FRAC_CONST(-0.1386171691990915));
    f109 = MUL_F(f107, FRAC_CONST(0.7730104533627370));
    f110 = MUL_C(f72, COEF_CONST(1.4074037375263826));
    y[7] = f109 - f108;
    y[9] = f110 - f109;
}

void DCT4_16(real_t *y, real_t *x)
{
    real_t f0, f1, f2, f3, f4, f5, f6, f7, f8, f9, f10;
    real_t f11, f12, f13, f14, f15, f16, f17, f18, f19, f20;
    real_t f21, f22, f23, f24, f25, f26, f27, f28, f29, f30;
    real_t f31, f32, f33, f34, f35, f36, f37, f38, f39, f40;
    real_t f41, f42, f43, f44, f45, f46, f47, f48, f49, f50;
    real_t f51, f52, f53, f54, f55, f56, f57, f58, f59, f60;
    real_t f61, f62, f63, f64, f65, f66, f67, f68, f69, f70;
    real_t f71, f72, f73, f74, f75, f76, f77, f78, f79, f80;
    real_t f81, f82, f83, f84, f85, f86, f87, f88, f89, f90;
    real_t f91, f92, f93, f94, f95, f96, f97, f98, f99, f100;
    real_t f101, f102, f103, f104, f105, f106, f107, f108, f109, f110;
    real_t f111, f112, f113, f114, f115, f116, f117, f118, f119, f120;
    real_t f121, f122, f123, f124, f125, f126, f127, f128, f130, f132;
    real_t f134, f136, f138, f140, f142, f144, f145, f148, f149, f152;
    real_t f153, f156, f157;
    
    f0 = x[0] + x[15];
    f1 = MUL_C(COEF_CONST(1.0478631305325901), x[0]);
    f2 = MUL_F(FRAC_CONST(-0.9987954562051724), f0);
    f3 = MUL_F(FRAC_CONST(-0.9497277818777548), x[15]);
    f4 = f1 + f2;
    f5 = f3 - f2;
    f6 = x[2] + x[13];
    f7 = MUL_C(COEF_CONST(1.2130114330978077), x[2]);
    f8 = MUL_F(FRAC_CONST(-0.9700312531945440), f6);
    f9 = MUL_F(FRAC_CONST(-0.7270510732912803), x[13]);
    f10 = f7 + f8;
    f11 = f9 - f8;
    f12 = x[4] + x[11];
    f13 = MUL_C(COEF_CONST(1.3315443865537255), x[4]);
    f14 = MUL_F(FRAC_CONST(-0.9039892931234433), f12);
    f15 = MUL_F(FRAC_CONST(-0.4764341996931612), x[11]);
    f16 = f13 + f14;
    f17 = f15 - f14;
    f18 = x[6] + x[9];
    f19 = MUL_C(COEF_CONST(1.3989068359730781), x[6]);
    f20 = MUL_F(FRAC_CONST(-0.8032075314806453), f18);
    f21 = MUL_F(FRAC_CONST(-0.2075082269882124), x[9]);
    f22 = f19 + f20;
    f23 = f21 - f20;
    f24 = x[8] + x[7];
    f25 = MUL_C(COEF_CONST(1.4125100802019777), x[8]);
    f26 = MUL_F(FRAC_CONST(-0.6715589548470187), f24);
    f27 = MUL_F(FRAC_CONST(0.0693921705079402), x[7]);
    f28 = f25 + f26;
    f29 = f27 - f26;
    f30 = x[10] + x[5];
    f31 = MUL_C(COEF_CONST(1.3718313541934939), x[10]);
    f32 = MUL_F(FRAC_CONST(-0.5141027441932219), f30);
    f33 = MUL_F(FRAC_CONST(0.3436258658070501), x[5]);
    f34 = f31 + f32;
    f35 = f33 - f32;
    f36 = x[12] + x[3];
    f37 = MUL_C(COEF_CONST(1.2784339185752409), x[12]);
    f38 = MUL_F(FRAC_CONST(-0.3368898533922200), f36);
    f39 = MUL_F(FRAC_CONST(0.6046542117908008), x[3]);
    f40 = f37 + f38;
    f41 = f39 - f38;
    f42 = x[14] + x[1];
    f43 = MUL_C(COEF_CONST(1.1359069844201433), x[14]);
    f44 = MUL_F(FRAC_CONST(-0.1467304744553624), f42);
    f45 = MUL_F(FRAC_CONST(0.8424460355094185), x[1]);
    f46 = f43 + f44;
    f47 = f45 - f44;
    f48 = f5 - f29;
    f49 = f5 + f29;
    f50 = f4 - f28;
    f51 = f4 + f28;
    f52 = f11 - f35;
    f53 = f11 + f35;
    f54 = f10 - f34;
    f55 = f10 + f34;
    f56 = f17 - f41;
    f57 = f17 + f41;
    f58 = f16 - f40;
    f59 = f16 + f40;
    f60 = f23 - f47;
    f61 = f23 + f47;
    f62 = f22 - f46;
    f63 = f22 + f46;
    f64 = f48 + f50;
    f65 = MUL_C(COEF_CONST(1.1758756024193588), f48);
    f66 = MUL_F(FRAC_CONST(-0.9807852804032304), f64);
    f67 = MUL_F(FRAC_CONST(-0.7856949583871021), f50);
    f68 = f65 + f66;
    f69 = f67 - f66;
    f70 = f52 + f54;
    f71 = MUL_C(COEF_CONST(1.3870398453221475), f52);
    f72 = MUL_F(FRAC_CONST(-0.5555702330196022), f70);
    f73 = MUL_F(FRAC_CONST(0.2758993792829431), f54);
    f74 = f71 + f72;
    f75 = f73 - f72;
    f76 = f56 + f58;
    f77 = MUL_F(FRAC_CONST(0.7856949583871022), f56);
    f78 = MUL_F(FRAC_CONST(0.1950903220161283), f76);
    f79 = MUL_C(COEF_CONST(1.1758756024193586), f58);
    f80 = f77 + f78;
    f81 = f79 - f78;
    f82 = f60 + f62;
    f83 = MUL_F(FRAC_CONST(-0.2758993792829430), f60);
    f84 = MUL_F(FRAC_CONST(0.8314696123025452), f82);
    f85 = MUL_C(COEF_CONST(1.3870398453221475), f62);
    f86 = f83 + f84;
    f87 = f85 - f84;
    f88 = f49 - f57;
    f89 = f49 + f57;
    f90 = f51 - f59;
    f91 = f51 + f59;
    f92 = f53 - f61;
    f93 = f53 + f61;
    f94 = f55 - f63;
    f95 = f55 + f63;
    f96 = f69 - f81;
    f97 = f69 + f81;
    f98 = f68 - f80;
    f99 = f68 + f80;
    f100 = f75 - f87;
    f101 = f75 + f87;
    f102 = f74 - f86;
    f103 = f74 + f86;
    f104 = f88 + f90;
    f105 = MUL_C(COEF_CONST(1.3065629648763766), f88);
    f106 = MUL_F(FRAC_CONST(-0.9238795325112866), f104);
    f107 = MUL_F(FRAC_CONST(-0.5411961001461967), f90);
    f108 = f105 + f106;
    f109 = f107 - f106;
    f110 = f92 + f94;
    f111 = MUL_F(FRAC_CONST(0.5411961001461969), f92);
    f112 = MUL_F(FRAC_CONST(0.3826834323650898), f110);
    f113 = MUL_C(COEF_CONST(1.3065629648763766), f94);
    f114 = f111 + f112;
    f115 = f113 - f112;
    f116 = f96 + f98;
    f117 = MUL_C(COEF_CONST(1.3065629648763766), f96);
    f118 = MUL_F(FRAC_CONST(-0.9238795325112866), f116);
    f119 = MUL_F(FRAC_CONST(-0.5411961001461967), f98);
    f120 = f117 + f118;
    f121 = f119 - f118;
    f122 = f100 + f102;
    f123 = MUL_F(FRAC_CONST(0.5411961001461969), f100);
    f124 = MUL_F(FRAC_CONST(0.3826834323650898), f122);
    f125 = MUL_C(COEF_CONST(1.3065629648763766), f102);
    f126 = f123 + f124;
    f127 = f125 - f124;
    f128 = f89 - f93;
    y[0] = f89 + f93;
    f130 = f91 - f95;
    y[15] = f91 + f95;
    f132 = f109 - f115;
    y[3] = f109 + f115;
    f134 = f108 - f114;
    y[12] = f108 + f114;
    f136 = f97 - f101;
    y[1] = f97 + f101;
    f138 = f99 - f103;
    y[14] = f99 + f103;
    f140 = f121 - f127;
    y[2] = f121 + f127;
    f142 = f120 - f126;
    y[13] = f120 + f126;
    f144 = f128 - f130;
    f145 = f128 + f130;
    y[8] = MUL_F(FRAC_CONST(0.7071067811865474), f144);
    y[7] = MUL_F(FRAC_CONST(0.7071067811865474), f145);
    f148 = f132 - f134;
    f149 = f132 + f134;
    y[11] = MUL_F(FRAC_CONST(0.7071067811865474), f148);
    y[4] = MUL_F(FRAC_CONST(0.7071067811865474), f149);
    f152 = f136 - f138;
    f153 = f136 + f138;
    y[9] = MUL_F(FRAC_CONST(0.7071067811865474), f152);
    y[6] = MUL_F(FRAC_CONST(0.7071067811865474), f153);
    f156 = f140 - f142;
    f157 = f140 + f142;
    y[10] = MUL_F(FRAC_CONST(0.7071067811865474), f156);
    y[5] = MUL_F(FRAC_CONST(0.7071067811865474), f157);
}

void DCT3_32_unscaled(real_t *y, real_t *x)
{
    real_t f0, f1, f2, f3, f4, f5, f6, f7, f8, f9, f10;
    real_t f11, f12, f13, f14, f15, f16, f17, f18, f19, f20;
    real_t f21, f22, f23, f24, f25, f26, f27, f28, f29, f30;
    real_t f31, f32, f33, f34, f35, f36, f37, f38, f39, f40;
    real_t f41, f42, f43, f44, f45, f46, f47, f48, f49, f50;
    real_t f51, f52, f53, f54, f55, f56, f57, f58, f59, f60;
    real_t f61, f62, f63, f64, f65, f66, f67, f68, f69, f70;
    real_t f71, f72, f73, f74, f75, f76, f77, f78, f79, f80;
    real_t f81, f82, f83, f84, f85, f86, f87, f88, f89, f90;
    real_t f91, f92, f93, f94, f95, f96, f97, f98, f99, f100;
    real_t f101, f102, f103, f104, f105, f106, f107, f108, f109, f110;
    real_t f111, f112, f113, f114, f115, f116, f117, f118, f119, f120;
    real_t f121, f122, f123, f124, f125, f126, f127, f128, f129, f130;
    real_t f131, f132, f133, f134, f135, f136, f137, f138, f139, f140;
    real_t f141, f142, f143, f144, f145, f146, f147, f148, f149, f150;
    real_t f151, f152, f153, f154, f155, f156, f157, f158, f159, f160;
    real_t f161, f162, f163, f164, f165, f166, f167, f168, f169, f170;
    real_t f171, f172, f173, f174, f175, f176, f177, f178, f179, f180;
    real_t f181, f182, f183, f184, f185, f186, f187, f188, f189, f190;
    real_t f191, f192, f193, f194, f195, f196, f197, f198, f199, f200;
    real_t f201, f202, f203, f204, f205, f206, f207, f208, f209, f210;
    real_t f211, f212, f213, f214, f215, f216, f217, f218, f219, f220;
    real_t f221, f222, f223, f224, f225, f226, f227, f228, f229, f230;
    real_t f231, f232, f233, f234, f235, f236, f237, f238, f239, f240;
    real_t f241, f242, f243, f244, f245, f246, f247, f248, f249, f250;
    real_t f251, f252, f253, f254, f255, f256, f257, f258, f259, f260;
    real_t f261, f262, f263, f264, f265, f266, f267, f268, f269, f270;
    real_t f271, f272;

    f0 = MUL_F(x[16], FRAC_CONST(0.7071067811865476));
    f1 = x[0] - f0;
    f2 = x[0] + f0;
    f3 = x[8] + x[24];
    f4 = MUL_C(x[8], COEF_CONST(1.3065629648763766));
    f5 = MUL_F(f3, FRAC_CONST((-0.9238795325112866)));
    f6 = MUL_F(x[24], FRAC_CONST((-0.5411961001461967)));
    f7 = f4 + f5;
    f8 = f6 - f5;
    f9 = f2 - f8;
    f10 = f2 + f8;
    f11 = f1 - f7;
    f12 = f1 + f7;
    f13 = x[4] + x[28];
    f14 = MUL_C(x[4], COEF_CONST(1.1758756024193588));
    f15 = MUL_F(f13, FRAC_CONST((-0.9807852804032304)));
    f16 = MUL_F(x[28], FRAC_CONST((-0.7856949583871021)));
    f17 = f14 + f15;
    f18 = f16 - f15;
    f19 = x[12] + x[20];
    f20 = MUL_C(x[12], COEF_CONST(1.3870398453221473));
    f21 = MUL_F(f19, FRAC_CONST((-0.8314696123025455)));
    f22 = MUL_F(x[20], FRAC_CONST((-0.2758993792829436)));
    f23 = f20 + f21;
    f24 = f22 - f21;
    f25 = f18 - f24;
    f26 = f18 + f24;
    f27 = MUL_F(f25, FRAC_CONST(0.7071067811865476));
    f28 = f17 - f23;
    f29 = f17 + f23;
    f30 = MUL_F(f29, FRAC_CONST(0.7071067811865476));
    f31 = f27 - f30;
    f32 = f27 + f30;
    f33 = f10 - f26;
    f34 = f10 + f26;
    f35 = f12 - f32;
    f36 = f12 + f32;
    f37 = f11 - f31;
    f38 = f11 + f31;
    f39 = f9 - f28;
    f40 = f9 + f28;
    f41 = x[2] + x[30];
    f42 = MUL_C(x[2], COEF_CONST(1.0932018670017569));
    f43 = MUL_F(f41, FRAC_CONST((-0.9951847266721969)));
    f44 = MUL_F(x[30], FRAC_CONST((-0.8971675863426368)));
    f45 = f42 + f43;
    f46 = f44 - f43;
    f47 = x[6] + x[26];
    f48 = MUL_C(x[6], COEF_CONST(1.2472250129866711));
    f49 = MUL_F(f47, FRAC_CONST((-0.9569403357322089)));
    f50 = MUL_F(x[26], FRAC_CONST((-0.6666556584777469)));
    f51 = f48 + f49;
    f52 = f50 - f49;
    f53 = x[10] + x[22];
    f54 = MUL_C(x[10], COEF_CONST(1.3533180011743526));
    f55 = MUL_F(f53, FRAC_CONST((-0.8819212643483551)));
    f56 = MUL_F(x[22], FRAC_CONST((-0.4105245275223575)));
    f57 = f54 + f55;
    f58 = f56 - f55;
    f59 = x[14] + x[18];
    f60 = MUL_C(x[14], COEF_CONST(1.4074037375263826));
    f61 = MUL_F(f59, FRAC_CONST((-0.7730104533627369)));
    f62 = MUL_F(x[18], FRAC_CONST((-0.1386171691990913)));
    f63 = f60 + f61;
    f64 = f62 - f61;
    f65 = f46 - f64;
    f66 = f46 + f64;
    f67 = f52 - f58;
    f68 = f52 + f58;
    f69 = f66 - f68;
    f70 = f66 + f68;
    f71 = MUL_F(f69, FRAC_CONST(0.7071067811865476));
    f72 = f65 + f67;
    f73 = MUL_C(f65, COEF_CONST(1.3065629648763766));
    f74 = MUL_F(f72, FRAC_CONST((-0.9238795325112866)));
    f75 = MUL_F(f67, FRAC_CONST((-0.5411961001461967)));
    f76 = f73 + f74;
    f77 = f75 - f74;
    f78 = f45 - f63;
    f79 = f45 + f63;
    f80 = f51 - f57;
    f81 = f51 + f57;
    f82 = f79 + f81;
    f83 = MUL_C(f79, COEF_CONST(1.3065629648763770));
    f84 = MUL_F(f82, FRAC_CONST((-0.3826834323650904)));
    f85 = MUL_F(f81, FRAC_CONST(0.5411961001461961));
    f86 = f83 + f84;
    f87 = f85 - f84;
    f88 = f78 - f80;
    f89 = f78 + f80;
    f90 = MUL_F(f89, FRAC_CONST(0.7071067811865476));
    f91 = f77 - f87;
    f92 = f77 + f87;
    f93 = f71 - f90;
    f94 = f71 + f90;
    f95 = f76 - f86;
    f96 = f76 + f86;
    f97 = f34 - f70;
    f98 = f34 + f70;
    f99 = f36 - f92;
    f100 = f36 + f92;
    f101 = f38 - f91;
    f102 = f38 + f91;
    f103 = f40 - f94;
    f104 = f40 + f94;
    f105 = f39 - f93;
    f106 = f39 + f93;
    f107 = f37 - f96;
    f108 = f37 + f96;
    f109 = f35 - f95;
    f110 = f35 + f95;
    f111 = f33 - f88;
    f112 = f33 + f88;
    f113 = x[1] + x[31];
    f114 = MUL_C(x[1], COEF_CONST(1.0478631305325901));
    f115 = MUL_F(f113, FRAC_CONST((-0.9987954562051724)));
    f116 = MUL_F(x[31], FRAC_CONST((-0.9497277818777548)));
    f117 = f114 + f115;
    f118 = f116 - f115;
    f119 = x[5] + x[27];
    f120 = MUL_C(x[5], COEF_CONST(1.2130114330978077));
    f121 = MUL_F(f119, FRAC_CONST((-0.9700312531945440)));
    f122 = MUL_F(x[27], FRAC_CONST((-0.7270510732912803)));
    f123 = f120 + f121;
    f124 = f122 - f121;
    f125 = x[9] + x[23];
    f126 = MUL_C(x[9], COEF_CONST(1.3315443865537255));
    f127 = MUL_F(f125, FRAC_CONST((-0.9039892931234433)));
    f128 = MUL_F(x[23], FRAC_CONST((-0.4764341996931612)));
    f129 = f126 + f127;
    f130 = f128 - f127;
    f131 = x[13] + x[19];
    f132 = MUL_C(x[13], COEF_CONST(1.3989068359730781));
    f133 = MUL_F(f131, FRAC_CONST((-0.8032075314806453)));
    f134 = MUL_F(x[19], FRAC_CONST((-0.2075082269882124)));
    f135 = f132 + f133;
    f136 = f134 - f133;
    f137 = x[17] + x[15];
    f138 = MUL_C(x[17], COEF_CONST(1.4125100802019777));
    f139 = MUL_F(f137, FRAC_CONST((-0.6715589548470187)));
    f140 = MUL_F(x[15], FRAC_CONST(0.0693921705079402));
    f141 = f138 + f139;
    f142 = f140 - f139;
    f143 = x[21] + x[11];
    f144 = MUL_C(x[21], COEF_CONST(1.3718313541934939));
    f145 = MUL_F(f143, FRAC_CONST((-0.5141027441932219)));
    f146 = MUL_F(x[11], FRAC_CONST(0.3436258658070501));
    f147 = f144 + f145;
    f148 = f146 - f145;
    f149 = x[25] + x[7];
    f150 = MUL_C(x[25], COEF_CONST(1.2784339185752409));
    f151 = MUL_F(f149, FRAC_CONST((-0.3368898533922200)));
    f152 = MUL_F(x[7], FRAC_CONST(0.6046542117908008));
    f153 = f150 + f151;
    f154 = f152 - f151;
    f155 = x[29] + x[3];
    f156 = MUL_C(x[29], COEF_CONST(1.1359069844201433));
    f157 = MUL_F(f155, FRAC_CONST((-0.1467304744553624)));
    f158 = MUL_F(x[3], FRAC_CONST(0.8424460355094185));
    f159 = f156 + f157;
    f160 = f158 - f157;
    f161 = f118 - f142;
    f162 = f118 + f142;
    f163 = f117 - f141;
    f164 = f117 + f141;
    f165 = f124 - f148;
    f166 = f124 + f148;
    f167 = f123 - f147;
    f168 = f123 + f147;
    f169 = f130 - f154;
    f170 = f130 + f154;
    f171 = f129 - f153;
    f172 = f129 + f153;
    f173 = f136 - f160;
    f174 = f136 + f160;
    f175 = f135 - f159;
    f176 = f135 + f159;
    f177 = f161 + f163;
    f178 = MUL_C(f161, COEF_CONST(1.1758756024193588));
    f179 = MUL_F(f177, FRAC_CONST((-0.9807852804032304)));
    f180 = MUL_F(f163, FRAC_CONST((-0.7856949583871021)));
    f181 = f178 + f179;
    f182 = f180 - f179;
    f183 = f165 + f167;
    f184 = MUL_C(f165, COEF_CONST(1.3870398453221475));
    f185 = MUL_F(f183, FRAC_CONST((-0.5555702330196022)));
    f186 = MUL_F(f167, FRAC_CONST(0.2758993792829431));
    f187 = f184 + f185;
    f188 = f186 - f185;
    f189 = f169 + f171;
    f190 = MUL_F(f169, FRAC_CONST(0.7856949583871022));
    f191 = MUL_F(f189, FRAC_CONST(0.1950903220161283));
    f192 = MUL_C(f171, COEF_CONST(1.1758756024193586));
    f193 = f190 + f191;
    f194 = f192 - f191;
    f195 = f173 + f175;
    f196 = MUL_F(f173, FRAC_CONST((-0.2758993792829430)));
    f197 = MUL_F(f195, FRAC_CONST(0.8314696123025452));
    f198 = MUL_C(f175, COEF_CONST(1.3870398453221475));
    f199 = f196 + f197;
    f200 = f198 - f197;
    f201 = f162 - f170;
    f202 = f162 + f170;
    f203 = f164 - f172;
    f204 = f164 + f172;
    f205 = f166 - f174;
    f206 = f166 + f174;
    f207 = f168 - f176;
    f208 = f168 + f176;
    f209 = f182 - f194;
    f210 = f182 + f194;
    f211 = f181 - f193;
    f212 = f181 + f193;
    f213 = f188 - f200;
    f214 = f188 + f200;
    f215 = f187 - f199;
    f216 = f187 + f199;
    f217 = f201 + f203;
    f218 = MUL_C(f201, COEF_CONST(1.3065629648763766));
    f219 = MUL_F(f217, FRAC_CONST((-0.9238795325112866)));
    f220 = MUL_F(f203, FRAC_CONST((-0.5411961001461967)));
    f221 = f218 + f219;
    f222 = f220 - f219;
    f223 = f205 + f207;
    f224 = MUL_F(f205, FRAC_CONST(0.5411961001461969));
    f225 = MUL_F(f223, FRAC_CONST(0.3826834323650898));
    f226 = MUL_C(f207, COEF_CONST(1.3065629648763766));
    f227 = f224 + f225;
    f228 = f226 - f225;
    f229 = f209 + f211;
    f230 = MUL_C(f209, COEF_CONST(1.3065629648763766));
    f231 = MUL_F(f229, FRAC_CONST((-0.9238795325112866)));
    f232 = MUL_F(f211, FRAC_CONST((-0.5411961001461967)));
    f233 = f230 + f231;
    f234 = f232 - f231;
    f235 = f213 + f215;
    f236 = MUL_F(f213, FRAC_CONST(0.5411961001461969));
    f237 = MUL_F(f235, FRAC_CONST(0.3826834323650898));
    f238 = MUL_C(f215, COEF_CONST(1.3065629648763766));
    f239 = f236 + f237;
    f240 = f238 - f237;
    f241 = f202 - f206;
    f242 = f202 + f206;
    f243 = f204 - f208;
    f244 = f204 + f208;
    f245 = f222 - f228;
    f246 = f222 + f228;
    f247 = f221 - f227;
    f248 = f221 + f227;
    f249 = f210 - f214;
    f250 = f210 + f214;
    f251 = f212 - f216;
    f252 = f212 + f216;
    f253 = f234 - f240;
    f254 = f234 + f240;
    f255 = f233 - f239;
    f256 = f233 + f239;
    f257 = f241 - f243;
    f258 = f241 + f243;
    f259 = MUL_F(f257, FRAC_CONST(0.7071067811865474));
    f260 = MUL_F(f258, FRAC_CONST(0.7071067811865474));
    f261 = f245 - f247;
    f262 = f245 + f247;
    f263 = MUL_F(f261, FRAC_CONST(0.7071067811865474));
    f264 = MUL_F(f262, FRAC_CONST(0.7071067811865474));
    f265 = f249 - f251;
    f266 = f249 + f251;
    f267 = MUL_F(f265, FRAC_CONST(0.7071067811865474));
    f268 = MUL_F(f266, FRAC_CONST(0.7071067811865474));
    f269 = f253 - f255;
    f270 = f253 + f255;
    f271 = MUL_F(f269, FRAC_CONST(0.7071067811865474));
    f272 = MUL_F(f270, FRAC_CONST(0.7071067811865474));
    y[31] = f98 - f242;
    y[0] = f98 + f242;
    y[30] = f100 - f250;
    y[1] = f100 + f250;
    y[29] = f102 - f254;
    y[2] = f102 + f254;
    y[28] = f104 - f246;
    y[3] = f104 + f246;
    y[27] = f106 - f264;
    y[4] = f106 + f264;
    y[26] = f108 - f272;
    y[5] = f108 + f272;
    y[25] = f110 - f268;
    y[6] = f110 + f268;
    y[24] = f112 - f260;
    y[7] = f112 + f260;
    y[23] = f111 - f259;
    y[8] = f111 + f259;
    y[22] = f109 - f267;
    y[9] = f109 + f267;
    y[21] = f107 - f271;
    y[10] = f107 + f271;
    y[20] = f105 - f263;
    y[11] = f105 + f263;
    y[19] = f103 - f248;
    y[12] = f103 + f248;
    y[18] = f101 - f256;
    y[13] = f101 + f256;
    y[17] = f99 - f252;
    y[14] = f99 + f252;
    y[16] = f97 - f244;
    y[15] = f97 + f244;
}

void DCT2_32_unscaled(real_t *y, real_t *x)
{
    real_t f0;
    real_t f1;
    real_t f2;
    real_t f3;
    real_t f4;
    real_t f5;
    real_t f6;
    real_t f7;
    real_t f8;
    real_t f9;
    real_t f10;
    real_t f11;
    real_t f12;
    real_t f13;
    real_t f14;
    real_t f15;
    real_t f16;
    real_t f17;
    real_t f18;
    real_t f19;
    real_t f20;
    real_t f21;
    real_t f22;
    real_t f23;
    real_t f24;
    real_t f25;
    real_t f26;
    real_t f27;
    real_t f28;
    real_t f29;
    real_t f30;
    real_t f31;
    real_t f32;
    real_t f33;
    real_t f34;
    real_t f35;
    real_t f36;
    real_t f37;
    real_t f38;
    real_t f39;
    real_t f40;
    real_t f41;
    real_t f42;
    real_t f43;
    real_t f44;
    real_t f45;
    real_t f46;
    real_t f47;
    real_t f48;
    real_t f49;
    real_t f50;
    real_t f51;
    real_t f52;
    real_t f53;
    real_t f54;
    real_t f55;
    real_t f56;
    real_t f57;
    real_t f58;
    real_t f59;
    real_t f60;
    real_t f63;
    real_t f64;
    real_t f65;
    real_t f66;
    real_t f69;
    real_t f70;
    real_t f71;
    real_t f72;
    real_t f73;
    real_t f74;
    real_t f75;
    real_t f76;
    real_t f77;
    real_t f78;
    real_t f79;
    real_t f80;
    real_t f81;
    real_t f83;
    real_t f85;
    real_t f86;
    real_t f89;
    real_t f90;
    real_t f91;
    real_t f92;
    real_t f93;
    real_t f94;
    real_t f95;
    real_t f96;
    real_t f97;
    real_t f98;
    real_t f99;
    real_t f100;
    real_t f101;
    real_t f102;
    real_t f103;
    real_t f104;
    real_t f105;
    real_t f106;
    real_t f107;
    real_t f108;
    real_t f109;
    real_t f110;
    real_t f111;
    real_t f112;
    real_t f113;
    real_t f114;
    real_t f115;
    real_t f116;
    real_t f117;
    real_t f118;
    real_t f119;
    real_t f120;
    real_t f121;
    real_t f122;
    real_t f123;
    real_t f124;
    real_t f127;
    real_t f128;
    real_t f129;
    real_t f130;
    real_t f133;
    real_t f134;
    real_t f135;
    real_t f136;
    real_t f139;
    real_t f140;
    real_t f141;
    real_t f142;
    real_t f145;
    real_t f146;
    real_t f147;
    real_t f148;
    real_t f149;
    real_t f150;
    real_t f151;
    real_t f152;
    real_t f153;
    real_t f154;
    real_t f155;
    real_t f156;
    real_t f157;
    real_t f158;
    real_t f159;
    real_t f160;
    real_t f161;
    real_t f162;
    real_t f163;
    real_t f164;
    real_t f165;
    real_t f166;
    real_t f167;
    real_t f168;
    real_t f169;
    real_t f170;
    real_t f171;
    real_t f172;
    real_t f173;
    real_t f174;
    real_t f175;
    real_t f176;
    real_t f177;
    real_t f178;
    real_t f179;
    real_t f180;
    real_t f181;
    real_t f182;
    real_t f183;
    real_t f184;
    real_t f185;
    real_t f186;
    real_t f187;
    real_t f188;
    real_t f189;
    real_t f190;
    real_t f191;
    real_t f192;
    real_t f193;
    real_t f194;
    real_t f195;
    real_t f196;
    real_t f197;
    real_t f198;
    real_t f199;
    real_t f200;
    real_t f201;
    real_t f202;
    real_t f203;
    real_t f204;
    real_t f205;
    real_t f206;
    real_t f207;
    real_t f208;
    real_t f209;
    real_t f210;
    real_t f211;
    real_t f212;
    real_t f213;
    real_t f214;
    real_t f215;
    real_t f216;
    real_t f217;
    real_t f218;
    real_t f219;
    real_t f220;
    real_t f221;
    real_t f222;
    real_t f223;
    real_t f224;
    real_t f225;
    real_t f226;
    real_t f227;
    real_t f228;
    real_t f229;
    real_t f230;
    real_t f231;
    real_t f232;
    real_t f233;
    real_t f234;
    real_t f235;
    real_t f236;
    real_t f237;
    real_t f238;
    real_t f239;
    real_t f240;
    real_t f241;
    real_t f242;
    real_t f243;
    real_t f244;
    real_t f247;
    real_t f248;
    real_t f249;
    real_t f250;
    real_t f253;
    real_t f254;
    real_t f255;
    real_t f256;
    real_t f259;
    real_t f260;
    real_t f261;
    real_t f262;
    real_t f265;
    real_t f266;
    real_t f267;
    real_t f268;
    real_t f271;
    real_t f272;
    real_t f273;
    real_t f274;
    real_t f277;
    real_t f278;
    real_t f279;
    real_t f280;
    real_t f283;
    real_t f284;
    real_t f285;
    real_t f286;
    
    f0 = x[0] - x[31];
    f1 = x[0] + x[31];
    f2 = x[1] - x[30];
    f3 = x[1] + x[30];
    f4 = x[2] - x[29];
    f5 = x[2] + x[29];
    f6 = x[3] - x[28];
    f7 = x[3] + x[28];
    f8 = x[4] - x[27];
    f9 = x[4] + x[27];
    f10 = x[5] - x[26];
    f11 = x[5] + x[26];
    f12 = x[6] - x[25];
    f13 = x[6] + x[25];
    f14 = x[7] - x[24];
    f15 = x[7] + x[24];
    f16 = x[8] - x[23];
    f17 = x[8] + x[23];
    f18 = x[9] - x[22];
    f19 = x[9] + x[22];
    f20 = x[10] - x[21];
    f21 = x[10] + x[21];
    f22 = x[11] - x[20];
    f23 = x[11] + x[20];
    f24 = x[12] - x[19];
    f25 = x[12] + x[19];
    f26 = x[13] - x[18];
    f27 = x[13] + x[18];
    f28 = x[14] - x[17];
    f29 = x[14] + x[17];
    f30 = x[15] - x[16];
    f31 = x[15] + x[16];
    f32 = f1 - f31;
    f33 = f1 + f31;
    f34 = f3 - f29;
    f35 = f3 + f29;
    f36 = f5 - f27;
    f37 = f5 + f27;
    f38 = f7 - f25;
    f39 = f7 + f25;
    f40 = f9 - f23;
    f41 = f9 + f23;
    f42 = f11 - f21;
    f43 = f11 + f21;
    f44 = f13 - f19;
    f45 = f13 + f19;
    f46 = f15 - f17;
    f47 = f15 + f17;
    f48 = f33 - f47;
    f49 = f33 + f47;
    f50 = f35 - f45;
    f51 = f35 + f45;
    f52 = f37 - f43;
    f53 = f37 + f43;
    f54 = f39 - f41;
    f55 = f39 + f41;
    f56 = f49 - f55;
    f57 = f49 + f55;
    f58 = f51 - f53;
    f59 = f51 + f53;
    f60 = f57 - f59;
    y[0] = f57 + f59;
    y[16] = 0.7071067811865476 * f60;
    f63 = f56 + f58;
    f64 = 1.3065629648763766 * f56;
    f65 = (-0.9238795325112866) * f63;
    f66 = (-0.5411961001461967) * f58;
    y[24] = f64 + f65;
    y[8] = f66 - f65;
    f69 = f48 + f54;
    f70 = 1.1758756024193588 * f48;
    f71 = (-0.9807852804032304) * f69;
    f72 = (-0.7856949583871021) * f54;
    f73 = f70 + f71;
    f74 = f72 - f71;
    f75 = f50 + f52;
    f76 = 1.3870398453221473 * f50;
    f77 = (-0.8314696123025455) * f75;
    f78 = (-0.2758993792829436) * f52;
    f79 = f76 + f77;
    f80 = f78 - f77;
    f81 = f74 - f80;
    y[4] = f74 + f80;
    f83 = 0.7071067811865476 * f81;
    y[28] = f73 - f79;
    f85 = f73 + f79;
    f86 = 0.7071067811865476 * f85;
    y[20] = f83 - f86;
    y[12] = f83 + f86;
    f89 = f34 - f36;
    f90 = f34 + f36;
    f91 = f38 - f40;
    f92 = f38 + f40;
    f93 = f42 - f44;
    f94 = f42 + f44;
    f95 = 0.7071067811865476 * f92;
    f96 = f32 - f95;
    f97 = f32 + f95;
    f98 = f90 + f94;
    f99 = 1.3065629648763766 * f90;
    f100 = (-0.9238795325112866) * f98;
    f101 = (-0.5411961001461967) * f94;
    f102 = f99 + f100;
    f103 = f101 - f100;
    f104 = f97 - f103;
    f105 = f97 + f103;
    f106 = f96 - f102;
    f107 = f96 + f102;
    f108 = 0.7071067811865476 * f91;
    f109 = f46 - f108;
    f110 = f46 + f108;
    f111 = f93 + f89;
    f112 = 1.3065629648763766 * f93;
    f113 = (-0.9238795325112866) * f111;
    f114 = (-0.5411961001461967) * f89;
    f115 = f112 + f113;
    f116 = f114 - f113;
    f117 = f110 - f116;
    f118 = f110 + f116;
    f119 = f109 - f115;
    f120 = f109 + f115;
    f121 = f118 + f105;
    f122 = (-0.8971675863426361) * f118;
    f123 = 0.9951847266721968 * f121;
    f124 = 1.0932018670017576 * f105;
    y[2] = f122 + f123;
    y[30] = f124 - f123;
    f127 = f107 - f120;
    f128 = (-0.6666556584777466) * f120;
    f129 = 0.9569403357322089 * f127;
    f130 = 1.2472250129866713 * f107;
    y[6] = f129 - f128;
    y[26] = f130 - f129;
    f133 = f119 + f106;
    f134 = (-0.4105245275223571) * f119;
    f135 = 0.8819212643483549 * f133;
    f136 = 1.3533180011743529 * f106;
    y[10] = f134 + f135;
    y[22] = f136 - f135;
    f139 = f104 - f117;
    f140 = (-0.1386171691990915) * f117;
    f141 = 0.7730104533627370 * f139;
    f142 = 1.4074037375263826 * f104;
    y[14] = f141 - f140;
    y[18] = f142 - f141;
    f145 = f2 - f4;
    f146 = f2 + f4;
    f147 = f6 - f8;
    f148 = f6 + f8;
    f149 = f10 - f12;
    f150 = f10 + f12;
    f151 = f14 - f16;
    f152 = f14 + f16;
    f153 = f18 - f20;
    f154 = f18 + f20;
    f155 = f22 - f24;
    f156 = f22 + f24;
    f157 = f26 - f28;
    f158 = f26 + f28;
    f159 = 0.7071067811865476 * f152;
    f160 = f0 - f159;
    f161 = f0 + f159;
    f162 = f148 + f156;
    f163 = 1.3065629648763766 * f148;
    f164 = (-0.9238795325112866) * f162;
    f165 = (-0.5411961001461967) * f156;
    f166 = f163 + f164;
    f167 = f165 - f164;
    f168 = f161 - f167;
    f169 = f161 + f167;
    f170 = f160 - f166;
    f171 = f160 + f166;
    f172 = f146 + f158;
    f173 = 1.1758756024193588 * f146;
    f174 = (-0.9807852804032304) * f172;
    f175 = (-0.7856949583871021) * f158;
    f176 = f173 + f174;
    f177 = f175 - f174;
    f178 = f150 + f154;
    f179 = 1.3870398453221473 * f150;
    f180 = (-0.8314696123025455) * f178;
    f181 = (-0.2758993792829436) * f154;
    f182 = f179 + f180;
    f183 = f181 - f180;
    f184 = f177 - f183;
    f185 = f177 + f183;
    f186 = 0.7071067811865476 * f184;
    f187 = f176 - f182;
    f188 = f176 + f182;
    f189 = 0.7071067811865476 * f188;
    f190 = f186 - f189;
    f191 = f186 + f189;
    f192 = f169 - f185;
    f193 = f169 + f185;
    f194 = f171 - f191;
    f195 = f171 + f191;
    f196 = f170 - f190;
    f197 = f170 + f190;
    f198 = f168 - f187;
    f199 = f168 + f187;
    f200 = 0.7071067811865476 * f151;
    f201 = f30 - f200;
    f202 = f30 + f200;
    f203 = f155 + f147;
    f204 = 1.3065629648763766 * f155;
    f205 = (-0.9238795325112866) * f203;
    f206 = (-0.5411961001461967) * f147;
    f207 = f204 + f205;
    f208 = f206 - f205;
    f209 = f202 - f208;
    f210 = f202 + f208;
    f211 = f201 - f207;
    f212 = f201 + f207;
    f213 = f157 + f145;
    f214 = 1.1758756024193588 * f157;
    f215 = (-0.9807852804032304) * f213;
    f216 = (-0.7856949583871021) * f145;
    f217 = f214 + f215;
    f218 = f216 - f215;
    f219 = f153 + f149;
    f220 = 1.3870398453221473 * f153;
    f221 = (-0.8314696123025455) * f219;
    f222 = (-0.2758993792829436) * f149;
    f223 = f220 + f221;
    f224 = f222 - f221;
    f225 = f218 - f224;
    f226 = f218 + f224;
    f227 = 0.7071067811865476 * f225;
    f228 = f217 - f223;
    f229 = f217 + f223;
    f230 = 0.7071067811865476 * f229;
    f231 = f227 - f230;
    f232 = f227 + f230;
    f233 = f210 - f226;
    f234 = f210 + f226;
    f235 = f212 - f232;
    f236 = f212 + f232;
    f237 = f211 - f231;
    f238 = f211 + f231;
    f239 = f209 - f228;
    f240 = f209 + f228;
    f241 = f234 + f193;
    f242 = (-0.9497277818777543) * f234;
    f243 = 0.9987954562051724 * f241;
    f244 = 1.0478631305325905 * f193;
    y[1] = f242 + f243;
    y[31] = f244 - f243;
    f247 = f195 - f236;
    f248 = (-0.8424460355094192) * f236;
    f249 = 0.9891765099647810 * f247;
    f250 = 1.1359069844201428 * f195;
    y[3] = f249 - f248;
    y[29] = f250 - f249;
    f253 = f238 + f197;
    f254 = (-0.7270510732912801) * f238;
    f255 = 0.9700312531945440 * f253;
    f256 = 1.2130114330978079 * f197;
    y[5] = f254 + f255;
    y[27] = f256 - f255;
    f259 = f199 - f240;
    f260 = (-0.6046542117908007) * f240;
    f261 = 0.9415440651830208 * f259;
    f262 = 1.2784339185752409 * f199;
    y[7] = f261 - f260;
    y[25] = f262 - f261;
    f265 = f239 + f198;
    f266 = (-0.4764341996931611) * f239;
    f267 = 0.9039892931234433 * f265;
    f268 = 1.3315443865537255 * f198;
    y[9] = f266 + f267;
    y[23] = f268 - f267;
    f271 = f196 - f237;
    f272 = (-0.3436258658070505) * f237;
    f273 = 0.8577286100002721 * f271;
    f274 = 1.3718313541934939 * f196;
    y[11] = f273 - f272;
    y[21] = f274 - f273;
    f277 = f235 + f194;
    f278 = (-0.2075082269882114) * f235;
    f279 = 0.8032075314806448 * f277;
    f280 = 1.3989068359730783 * f194;
    y[13] = f278 + f279;
    y[19] = f280 - f279;
    f283 = f192 - f233;
    f284 = (-0.0693921705079408) * f233;
    f285 = 0.7409511253549591 * f283;
    f286 = 1.4125100802019774 * f192;
    y[15] = f285 - f284;
    y[17] = f286 - f285;
}

#else

void DCT4_64(real_t *y, real_t *x)
{
    int16_t i0;
    ALIGN static real_t t2[64];

    t2[0] = x[0];
    for (i0=0; i0<31; i0++)
    {
        t2[2*i0+1] = x[2*i0+1] - x[2*i0+2];
        t2[2*i0+2] = x[2*i0+1] + x[2*i0+2];
    }
    t2[63] = x[63];

    DCT4_64_kernel(y, t2);
}

void DCT4_64_kernel(real_t *y, real_t *t2)
{
    real_t f2, f3, f4, f5, f6, f7, f8;
    real_t f9, f10, f11, f12, f13, f14, f15;
    real_t f16, f17, f18, f19, f20, f21, f22;
    real_t f23, f24, f25, f26, f27, f28, f29;
    real_t f30, f31, f32, f33, f34, f35, f36;
    real_t f37, f38, f39, f40, f41, f42, f43;
    real_t f44, f45, f46, f47, f48, f49, f50;
    real_t f51, f52, f53, f54, f55, f56, f57;
    real_t f58, f59, f60, f61, f62, f63, f64;
    real_t f65, f66, f67, f68, f69, f70, f71;
    real_t f72, f73, f74, f75, f76, f77, f78;
    real_t f79, f80, f81, f82, f83, f84, f85;
    real_t f86, f87, f88, f89, f90, f91, f92;
    real_t f93, f94, f95, f96, f97, f98, f99;
    real_t f100, f101, f102, f103, f104, f105, f106;
    real_t f107, f108, f109, f110, f111, f112, f113;
    real_t f114, f115, f116, f117, f118, f119, f120;
    real_t f121, f122, f123, f124, f125, f126, f127;
    real_t f128, f129, f130, f131, f132, f133, f134;
    real_t f135, f136, f137, f138, f139, f140, f141;
    real_t f142, f143, f144, f145, f146, f147, f148;
    real_t f149, f150, f151, f152, f153, f154, f155;
    real_t f156, f157, f158, f159, f160, f161, f162;
    real_t f163, f164, f165, f166, f167, f168, f169;
    real_t f170, f171, f172, f173, f174, f175, f176;
    real_t f177, f178, f179, f180, f181, f182, f183;
    real_t f184, f185, f186, f187, f188, f189, f190;
    real_t f191, f192, f193, f194, f195, f196, f197;
    real_t f198, f199, f200, f201, f202, f203, f204;
    real_t f205, f206, f207, f208, f209, f210, f211;
    real_t f212, f213, f214, f215, f216, f217, f218;
    real_t f219, f220, f221, f222, f223, f224, f225;
    real_t f226, f227, f228, f229, f230, f231, f232;
    real_t f233, f234, f235, f236, f237, f238, f239;
    real_t f240, f241, f242, f243, f244, f245, f246;
    real_t f247, f248, f249, f250, f251, f252, f253;
    real_t f254, f255, f256, f257, f258, f259, f260;
    real_t f261, f262, f263, f264, f265, f266, f267;
    real_t f268, f269, f270, f271, f272, f273, f274;
    real_t f275, f276, f277, f278, f279, f280, f281;
    real_t f282, f283, f284, f285, f286, f287, f288;
    real_t f289, f290, f291, f292, f293, f294, f295;
    real_t f296, f297, f298, f299, f300, f301, f302;
    real_t f303, f304, f305, f306, f307, f308, f309;
    real_t f310, f311, f312, f313, f314, f315, f316;
    real_t f317, f318, f319, f320, f321, f322, f323;
    real_t f324, f325, f326, f327, f328, f329, f330;
    real_t f331, f332, f333, f334, f335, f336, f337;
    real_t f338, f339, f340, f341, f342, f343, f344;
    real_t f345, f346, f347, f348, f349, f350, f351;
    real_t f352, f353, f354, f355, f356, f357, f358;
    real_t f359, f360, f361, f362, f363, f364, f365;
    real_t f366, f367, f368, f369, f370, f371, f372;
    real_t f373, f374, f375, f376, f377, f378, f379;
    real_t f380, f381, f382, f383, f384, f385, f386;
    real_t f387, f388, f389, f390, f391, f392, f393;
    real_t f394, f395, f396, f397, f398, f399, f400;
    real_t f401, f402, f403, f404, f405, f406, f407;
    real_t f408, f409, f410, f411, f412, f413, f414;
    real_t f415, f416, f417, f418, f419, f420, f421;
    real_t f422, f423, f424, f425, f426, f427, f428;
    real_t f429, f430, f431, f432, f433, f434, f435;
    real_t f436, f437, f438, f439, f440, f441, f442;
    real_t f443, f444, f445, f446, f447, f448, f449;
    real_t f450, f451, f452, f453, f454, f455, f456;
    real_t f457, f458, f459, f460, f461, f462, f463;
    real_t f464, f465, f466, f467, f468, f469, f470;
    real_t f471, f472, f473, f474, f475, f476, f477;
    real_t f478, f479, f480, f481, f482, f483, f484;
    real_t f485, f486, f487, f488, f489, f490, f491;
    real_t f492, f493, f494, f495, f496, f497, f498;
    real_t f499, f500, f501, f502, f503, f504, f505;
    real_t f506, f507, f508, f509, f510, f511, f512;
    real_t f513, f514, f515, f516, f517, f518, f519;
    real_t f520, f521, f522, f523, f524, f525, f526;
    real_t f527, f528, f529, f530, f531, f532, f533;
    real_t f534, f535, f536, f537, f538, f539, f540;
    real_t f541, f542, f543, f544, f545, f546, f547;
    real_t f548, f549, f550, f551, f552, f553, f554;
    real_t f555, f556, f557, f558, f559, f560, f561;
    real_t f562, f563, f564, f565, f566, f567, f568;
    real_t f569, f570, f571, f572, f573, f574, f575;
    real_t f576, f577, f578, f579, f580, f581, f582;
    real_t f583, f584, f585, f586, f587, f588, f589;
    real_t f590, f591, f592, f593, f594, f595, f596;
    real_t f597, f598, f599, f600, f601, f602, f603;
    real_t f604, f605, f606, f607, f608, f609, f610;
    real_t f611, f612, f613, f614, f615, f618, f619;
    real_t f620, f621, f624, f625, f626, f627, f630;
    real_t f631, f632, f633, f636, f637, f638, f639;
    real_t f642, f643, f644, f645, f648, f649, f650;
    real_t f651, f654, f655, f656, f657, f660, f661;
    real_t f662, f663, f666, f667, f668, f669, f672;
    real_t f673, f674, f675, f678, f679, f680, f681;
    real_t f684, f685, f686, f687, f690, f691, f692;
    real_t f693, f696, f697, f698, f699, f702, f703;
    real_t f704, f705, f708, f709, f710, f711, f714;
    real_t f715, f716, f717, f720, f721, f722, f723;
    real_t f726, f727, f728, f729, f732, f733, f734;
    real_t f735, f738, f739, f740, f741, f744, f745;
    real_t f746, f747, f750, f751, f752, f753, f756;
    real_t f757, f758, f759, f762, f763, f764, f765;
    real_t f768, f769, f770, f771, f774, f775, f776;
    real_t f777, f780, f781, f782, f783, f786, f787;
    real_t f788, f789, f792, f793, f794, f795, f798;
    real_t f799, f800, f801;

    f2 = 0.7071067811865476 * t2[32];
    f3 = t2[0] - f2;
    f4 = t2[0] + f2;
    f5 = t2[16] + t2[48];
    f6 = 1.3065629648763766 * t2[16];
    f7 = (-0.9238795325112866) * f5;
    f8 = (-0.5411961001461967) * t2[48];
    f9 = f6 + f7;
    f10 = f8 - f7;
    f11 = f4 - f10;
    f12 = f4 + f10;
    f13 = f3 - f9;
    f14 = f3 + f9;
    f15 = t2[8] + t2[56];
    f16 = 1.1758756024193588 * t2[8];
    f17 = (-0.9807852804032304) * f15;
    f18 = (-0.7856949583871021) * t2[56];
    f19 = f16 + f17;
    f20 = f18 - f17;
    f21 = t2[24] + t2[40];
    f22 = 1.3870398453221473 * t2[24];
    f23 = (-0.8314696123025455) * f21;
    f24 = (-0.2758993792829436) * t2[40];
    f25 = f22 + f23;
    f26 = f24 - f23;
    f27 = f20 - f26;
    f28 = f20 + f26;
    f29 = 0.7071067811865476 * f27;
    f30 = f19 - f25;
    f31 = f19 + f25;
    f32 = 0.7071067811865476 * f31;
    f33 = f29 - f32;
    f34 = f29 + f32;
    f35 = f12 - f28;
    f36 = f12 + f28;
    f37 = f14 - f34;
    f38 = f14 + f34;
    f39 = f13 - f33;
    f40 = f13 + f33;
    f41 = f11 - f30;
    f42 = f11 + f30;
    f43 = t2[4] + t2[60];
    f44 = 1.0932018670017569 * t2[4];
    f45 = (-0.9951847266721969) * f43;
    f46 = (-0.8971675863426368) * t2[60];
    f47 = f44 + f45;
    f48 = f46 - f45;
    f49 = t2[12] + t2[52];
    f50 = 1.2472250129866711 * t2[12];
    f51 = (-0.9569403357322089) * f49;
    f52 = (-0.6666556584777469) * t2[52];
    f53 = f50 + f51;
    f54 = f52 - f51;
    f55 = t2[20] + t2[44];
    f56 = 1.3533180011743526 * t2[20];
    f57 = (-0.8819212643483551) * f55;
    f58 = (-0.4105245275223575) * t2[44];
    f59 = f56 + f57;
    f60 = f58 - f57;
    f61 = t2[28] + t2[36];
    f62 = 1.4074037375263826 * t2[28];
    f63 = (-0.7730104533627369) * f61;
    f64 = (-0.1386171691990913) * t2[36];
    f65 = f62 + f63;
    f66 = f64 - f63;
    f67 = f48 - f66;
    f68 = f48 + f66;
    f69 = f54 - f60;
    f70 = f54 + f60;
    f71 = f68 - f70;
    f72 = f68 + f70;
    f73 = 0.7071067811865476 * f71;
    f74 = f67 + f69;
    f75 = 1.3065629648763766 * f67;
    f76 = (-0.9238795325112866) * f74;
    f77 = (-0.5411961001461967) * f69;
    f78 = f75 + f76;
    f79 = f77 - f76;
    f80 = f47 - f65;
    f81 = f47 + f65;
    f82 = f53 - f59;
    f83 = f53 + f59;
    f84 = f81 + f83;
    f85 = 1.3065629648763770 * f81;
    f86 = (-0.3826834323650904) * f84;
    f87 = 0.5411961001461961 * f83;
    f88 = f85 + f86;
    f89 = f87 - f86;
    f90 = f80 - f82;
    f91 = f80 + f82;
    f92 = 0.7071067811865476 * f91;
    f93 = f79 - f89;
    f94 = f79 + f89;
    f95 = f73 - f92;
    f96 = f73 + f92;
    f97 = f78 - f88;
    f98 = f78 + f88;
    f99 = f36 - f72;
    f100 = f36 + f72;
    f101 = f38 - f94;
    f102 = f38 + f94;
    f103 = f40 - f93;
    f104 = f40 + f93;
    f105 = f42 - f96;
    f106 = f42 + f96;
    f107 = f41 - f95;
    f108 = f41 + f95;
    f109 = f39 - f98;
    f110 = f39 + f98;
    f111 = f37 - f97;
    f112 = f37 + f97;
    f113 = f35 - f90;
    f114 = f35 + f90;
    f115 = t2[2] + t2[62];
    f116 = 1.0478631305325901 * t2[2];
    f117 = (-0.9987954562051724) * f115;
    f118 = (-0.9497277818777548) * t2[62];
    f119 = f116 + f117;
    f120 = f118 - f117;
    f121 = t2[10] + t2[54];
    f122 = 1.2130114330978077 * t2[10];
    f123 = (-0.9700312531945440) * f121;
    f124 = (-0.7270510732912803) * t2[54];
    f125 = f122 + f123;
    f126 = f124 - f123;
    f127 = t2[18] + t2[46];
    f128 = 1.3315443865537255 * t2[18];
    f129 = (-0.9039892931234433) * f127;
    f130 = (-0.4764341996931612) * t2[46];
    f131 = f128 + f129;
    f132 = f130 - f129;
    f133 = t2[26] + t2[38];
    f134 = 1.3989068359730781 * t2[26];
    f135 = (-0.8032075314806453) * f133;
    f136 = (-0.2075082269882124) * t2[38];
    f137 = f134 + f135;
    f138 = f136 - f135;
    f139 = t2[34] + t2[30];
    f140 = 1.4125100802019777 * t2[34];
    f141 = (-0.6715589548470187) * f139;
    f142 = 0.0693921705079402 * t2[30];
    f143 = f140 + f141;
    f144 = f142 - f141;
    f145 = t2[42] + t2[22];
    f146 = 1.3718313541934939 * t2[42];
    f147 = (-0.5141027441932219) * f145;
    f148 = 0.3436258658070501 * t2[22];
    f149 = f146 + f147;
    f150 = f148 - f147;
    f151 = t2[50] + t2[14];
    f152 = 1.2784339185752409 * t2[50];
    f153 = (-0.3368898533922200) * f151;
    f154 = 0.6046542117908008 * t2[14];
    f155 = f152 + f153;
    f156 = f154 - f153;
    f157 = t2[58] + t2[6];
    f158 = 1.1359069844201433 * t2[58];
    f159 = (-0.1467304744553624) * f157;
    f160 = 0.8424460355094185 * t2[6];
    f161 = f158 + f159;
    f162 = f160 - f159;
    f163 = f120 - f144;
    f164 = f120 + f144;
    f165 = f119 - f143;
    f166 = f119 + f143;
    f167 = f126 - f150;
    f168 = f126 + f150;
    f169 = f125 - f149;
    f170 = f125 + f149;
    f171 = f132 - f156;
    f172 = f132 + f156;
    f173 = f131 - f155;
    f174 = f131 + f155;
    f175 = f138 - f162;
    f176 = f138 + f162;
    f177 = f137 - f161;
    f178 = f137 + f161;
    f179 = f163 + f165;
    f180 = 1.1758756024193588 * f163;
    f181 = (-0.9807852804032304) * f179;
    f182 = (-0.7856949583871021) * f165;
    f183 = f180 + f181;
    f184 = f182 - f181;
    f185 = f167 + f169;
    f186 = 1.3870398453221475 * f167;
    f187 = (-0.5555702330196022) * f185;
    f188 = 0.2758993792829431 * f169;
    f189 = f186 + f187;
    f190 = f188 - f187;
    f191 = f171 + f173;
    f192 = 0.7856949583871022 * f171;
    f193 = 0.1950903220161283 * f191;
    f194 = 1.1758756024193586 * f173;
    f195 = f192 + f193;
    f196 = f194 - f193;
    f197 = f175 + f177;
    f198 = (-0.2758993792829430) * f175;
    f199 = 0.8314696123025452 * f197;
    f200 = 1.3870398453221475 * f177;
    f201 = f198 + f199;
    f202 = f200 - f199;
    f203 = f164 - f172;
    f204 = f164 + f172;
    f205 = f166 - f174;
    f206 = f166 + f174;
    f207 = f168 - f176;
    f208 = f168 + f176;
    f209 = f170 - f178;
    f210 = f170 + f178;
    f211 = f184 - f196;
    f212 = f184 + f196;
    f213 = f183 - f195;
    f214 = f183 + f195;
    f215 = f190 - f202;
    f216 = f190 + f202;
    f217 = f189 - f201;
    f218 = f189 + f201;
    f219 = f203 + f205;
    f220 = 1.3065629648763766 * f203;
    f221 = (-0.9238795325112866) * f219;
    f222 = (-0.5411961001461967) * f205;
    f223 = f220 + f221;
    f224 = f222 - f221;
    f225 = f207 + f209;
    f226 = 0.5411961001461969 * f207;
    f227 = 0.3826834323650898 * f225;
    f228 = 1.3065629648763766 * f209;
    f229 = f226 + f227;
    f230 = f228 - f227;
    f231 = f211 + f213;
    f232 = 1.3065629648763766 * f211;
    f233 = (-0.9238795325112866) * f231;
    f234 = (-0.5411961001461967) * f213;
    f235 = f232 + f233;
    f236 = f234 - f233;
    f237 = f215 + f217;
    f238 = 0.5411961001461969 * f215;
    f239 = 0.3826834323650898 * f237;
    f240 = 1.3065629648763766 * f217;
    f241 = f238 + f239;
    f242 = f240 - f239;
    f243 = f204 - f208;
    f244 = f204 + f208;
    f245 = f206 - f210;
    f246 = f206 + f210;
    f247 = f224 - f230;
    f248 = f224 + f230;
    f249 = f223 - f229;
    f250 = f223 + f229;
    f251 = f212 - f216;
    f252 = f212 + f216;
    f253 = f214 - f218;
    f254 = f214 + f218;
    f255 = f236 - f242;
    f256 = f236 + f242;
    f257 = f235 - f241;
    f258 = f235 + f241;
    f259 = f243 - f245;
    f260 = f243 + f245;
    f261 = 0.7071067811865474 * f259;
    f262 = 0.7071067811865474 * f260;
    f263 = f247 - f249;
    f264 = f247 + f249;
    f265 = 0.7071067811865474 * f263;
    f266 = 0.7071067811865474 * f264;
    f267 = f251 - f253;
    f268 = f251 + f253;
    f269 = 0.7071067811865474 * f267;
    f270 = 0.7071067811865474 * f268;
    f271 = f255 - f257;
    f272 = f255 + f257;
    f273 = 0.7071067811865474 * f271;
    f274 = 0.7071067811865474 * f272;
    f275 = f100 - f244;
    f276 = f100 + f244;
    f277 = f102 - f252;
    f278 = f102 + f252;
    f279 = f104 - f256;
    f280 = f104 + f256;
    f281 = f106 - f248;
    f282 = f106 + f248;
    f283 = f108 - f266;
    f284 = f108 + f266;
    f285 = f110 - f274;
    f286 = f110 + f274;
    f287 = f112 - f270;
    f288 = f112 + f270;
    f289 = f114 - f262;
    f290 = f114 + f262;
    f291 = f113 - f261;
    f292 = f113 + f261;
    f293 = f111 - f269;
    f294 = f111 + f269;
    f295 = f109 - f273;
    f296 = f109 + f273;
    f297 = f107 - f265;
    f298 = f107 + f265;
    f299 = f105 - f250;
    f300 = f105 + f250;
    f301 = f103 - f258;
    f302 = f103 + f258;
    f303 = f101 - f254;
    f304 = f101 + f254;
    f305 = f99 - f246;
    f306 = f99 + f246;
    f307 = t2[1] - t2[61];
    f308 = 1.0478631305325901 * t2[1];
    f309 = (-0.9987954562051724) * f307;
    f310 = (-0.9497277818777548) * t2[61];
    f311 = f308 + f309;
    f312 = f309 + f310;
    f313 = t2[9] - t2[53];
    f314 = 1.2130114330978077 * t2[9];
    f315 = (-0.9700312531945440) * f313;
    f316 = (-0.7270510732912803) * t2[53];
    f317 = f314 + f315;
    f318 = f315 + f316;
    f319 = t2[17] - t2[45];
    f320 = 1.3315443865537255 * t2[17];
    f321 = (-0.9039892931234433) * f319;
    f322 = (-0.4764341996931612) * t2[45];
    f323 = f320 + f321;
    f324 = f321 + f322;
    f325 = t2[25] - t2[37];
    f326 = 1.3989068359730781 * t2[25];
    f327 = (-0.8032075314806453) * f325;
    f328 = (-0.2075082269882124) * t2[37];
    f329 = f326 + f327;
    f330 = f327 + f328;
    f331 = t2[33] - t2[29];
    f332 = 1.4125100802019777 * t2[33];
    f333 = (-0.6715589548470187) * f331;
    f334 = 0.0693921705079402 * t2[29];
    f335 = f332 + f333;
    f336 = f333 + f334;
    f337 = t2[41] - t2[21];
    f338 = 1.3718313541934939 * t2[41];
    f339 = (-0.5141027441932219) * f337;
    f340 = 0.3436258658070501 * t2[21];
    f341 = f338 + f339;
    f342 = f339 + f340;
    f343 = t2[49] - t2[13];
    f344 = 1.2784339185752409 * t2[49];
    f345 = (-0.3368898533922200) * f343;
    f346 = 0.6046542117908008 * t2[13];
    f347 = f344 + f345;
    f348 = f345 + f346;
    f349 = t2[57] - t2[5];
    f350 = 1.1359069844201433 * t2[57];
    f351 = (-0.1467304744553624) * f349;
    f352 = 0.8424460355094185 * t2[5];
    f353 = f350 + f351;
    f354 = f351 + f352;
    f355 = f336 - f312;
    f356 = f312 + f336;
    f357 = f311 - f335;
    f358 = f311 + f335;
    f359 = f342 - f318;
    f360 = f318 + f342;
    f361 = f317 - f341;
    f362 = f317 + f341;
    f363 = f348 - f324;
    f364 = f324 + f348;
    f365 = f323 - f347;
    f366 = f323 + f347;
    f367 = f354 - f330;
    f368 = f330 + f354;
    f369 = f329 - f353;
    f370 = f329 + f353;
    f371 = f355 + f357;
    f372 = 1.1758756024193588 * f355;
    f373 = (-0.9807852804032304) * f371;
    f374 = (-0.7856949583871021) * f357;
    f375 = f372 + f373;
    f376 = f374 - f373;
    f377 = f359 + f361;
    f378 = 1.3870398453221475 * f359;
    f379 = (-0.5555702330196022) * f377;
    f380 = 0.2758993792829431 * f361;
    f381 = f378 + f379;
    f382 = f380 - f379;
    f383 = f363 + f365;
    f384 = 0.7856949583871022 * f363;
    f385 = 0.1950903220161283 * f383;
    f386 = 1.1758756024193586 * f365;
    f387 = f384 + f385;
    f388 = f386 - f385;
    f389 = f367 + f369;
    f390 = (-0.2758993792829430) * f367;
    f391 = 0.8314696123025452 * f389;
    f392 = 1.3870398453221475 * f369;
    f393 = f390 + f391;
    f394 = f392 - f391;
    f395 = f364 - f356;
    f396 = f356 + f364;
    f397 = f358 - f366;
    f398 = f358 + f366;
    f399 = f368 - f360;
    f400 = f360 + f368;
    f401 = f362 - f370;
    f402 = f362 + f370;
    f403 = f376 - f388;
    f404 = f376 + f388;
    f405 = f375 - f387;
    f406 = f375 + f387;
    f407 = f382 - f394;
    f408 = f382 + f394;
    f409 = f381 - f393;
    f410 = f381 + f393;
    f411 = f395 + f397;
    f412 = 1.3065629648763766 * f395;
    f413 = (-0.9238795325112866) * f411;
    f414 = (-0.5411961001461967) * f397;
    f415 = f412 + f413;
    f416 = f414 - f413;
    f417 = f399 + f401;
    f418 = 0.5411961001461969 * f399;
    f419 = 0.3826834323650898 * f417;
    f420 = 1.3065629648763766 * f401;
    f421 = f418 + f419;
    f422 = f420 - f419;
    f423 = f403 + f405;
    f424 = 1.3065629648763766 * f403;
    f425 = (-0.9238795325112866) * f423;
    f426 = (-0.5411961001461967) * f405;
    f427 = f424 + f425;
    f428 = f426 - f425;
    f429 = f407 + f409;
    f430 = 0.5411961001461969 * f407;
    f431 = 0.3826834323650898 * f429;
    f432 = 1.3065629648763766 * f409;
    f433 = f430 + f431;
    f434 = f432 - f431;
    f435 = f400 - f396;
    f436 = f396 + f400;
    f437 = f398 - f402;
    f438 = f398 + f402;
    f439 = f416 - f422;
    f440 = f416 + f422;
    f441 = f415 - f421;
    f442 = f415 + f421;
    f443 = f404 - f408;
    f444 = f404 + f408;
    f445 = f406 - f410;
    f446 = f406 + f410;
    f447 = f428 - f434;
    f448 = f428 + f434;
    f449 = f427 - f433;
    f450 = f427 + f433;
    f451 = f435 - f437;
    f452 = f435 + f437;
    f453 = 0.7071067811865474 * f451;
    f454 = 0.7071067811865474 * f452;
    f455 = f439 - f441;
    f456 = f439 + f441;
    f457 = 0.7071067811865474 * f455;
    f458 = 0.7071067811865474 * f456;
    f459 = f443 - f445;
    f460 = f443 + f445;
    f461 = 0.7071067811865474 * f459;
    f462 = 0.7071067811865474 * f460;
    f463 = f447 - f449;
    f464 = f447 + f449;
    f465 = 0.7071067811865474 * f463;
    f466 = 0.7071067811865474 * f464;
    f467 = 0.7071067811865476 * t2[31];
    f468 = t2[63] - f467;
    f469 = t2[63] + f467;
    f470 = t2[47] + t2[15];
    f471 = 1.3065629648763766 * t2[47];
    f472 = (-0.9238795325112866) * f470;
    f473 = (-0.5411961001461967) * t2[15];
    f474 = f471 + f472;
    f475 = f473 - f472;
    f476 = f469 - f475;
    f477 = f469 + f475;
    f478 = f468 - f474;
    f479 = f468 + f474;
    f480 = t2[55] + t2[7];
    f481 = 1.1758756024193588 * t2[55];
    f482 = (-0.9807852804032304) * f480;
    f483 = (-0.7856949583871021) * t2[7];
    f484 = f481 + f482;
    f485 = f483 - f482;
    f486 = t2[39] + t2[23];
    f487 = 1.3870398453221473 * t2[39];
    f488 = (-0.8314696123025455) * f486;
    f489 = (-0.2758993792829436) * t2[23];
    f490 = f487 + f488;
    f491 = f489 - f488;
    f492 = f485 - f491;
    f493 = f485 + f491;
    f494 = 0.7071067811865476 * f492;
    f495 = f484 - f490;
    f496 = f484 + f490;
    f497 = 0.7071067811865476 * f496;
    f498 = f494 - f497;
    f499 = f494 + f497;
    f500 = f477 - f493;
    f501 = f477 + f493;
    f502 = f479 - f499;
    f503 = f479 + f499;
    f504 = f478 - f498;
    f505 = f478 + f498;
    f506 = f476 - f495;
    f507 = f476 + f495;
    f508 = t2[59] + t2[3];
    f509 = 1.0932018670017569 * t2[59];
    f510 = (-0.9951847266721969) * f508;
    f511 = (-0.8971675863426368) * t2[3];
    f512 = f509 + f510;
    f513 = f511 - f510;
    f514 = t2[51] + t2[11];
    f515 = 1.2472250129866711 * t2[51];
    f516 = (-0.9569403357322089) * f514;
    f517 = (-0.6666556584777469) * t2[11];
    f518 = f515 + f516;
    f519 = f517 - f516;
    f520 = t2[43] + t2[19];
    f521 = 1.3533180011743526 * t2[43];
    f522 = (-0.8819212643483551) * f520;
    f523 = (-0.4105245275223575) * t2[19];
    f524 = f521 + f522;
    f525 = f523 - f522;
    f526 = t2[35] + t2[27];
    f527 = 1.4074037375263826 * t2[35];
    f528 = (-0.7730104533627369) * f526;
    f529 = (-0.1386171691990913) * t2[27];
    f530 = f527 + f528;
    f531 = f529 - f528;
    f532 = f513 - f531;
    f533 = f513 + f531;
    f534 = f519 - f525;
    f535 = f519 + f525;
    f536 = f533 - f535;
    f537 = f533 + f535;
    f538 = 0.7071067811865476 * f536;
    f539 = f532 + f534;
    f540 = 1.3065629648763766 * f532;
    f541 = (-0.9238795325112866) * f539;
    f542 = (-0.5411961001461967) * f534;
    f543 = f540 + f541;
    f544 = f542 - f541;
    f545 = f512 - f530;
    f546 = f512 + f530;
    f547 = f518 - f524;
    f548 = f518 + f524;
    f549 = f546 + f548;
    f550 = 1.3065629648763770 * f546;
    f551 = (-0.3826834323650904) * f549;
    f552 = 0.5411961001461961 * f548;
    f553 = f550 + f551;
    f554 = f552 - f551;
    f555 = f545 - f547;
    f556 = f545 + f547;
    f557 = 0.7071067811865476 * f556;
    f558 = f544 - f554;
    f559 = f544 + f554;
    f560 = f538 - f557;
    f561 = f538 + f557;
    f562 = f543 - f553;
    f563 = f543 + f553;
    f564 = f501 - f537;
    f565 = f501 + f537;
    f566 = f503 - f559;
    f567 = f503 + f559;
    f568 = f505 - f558;
    f569 = f505 + f558;
    f570 = f507 - f561;
    f571 = f507 + f561;
    f572 = f506 - f560;
    f573 = f506 + f560;
    f574 = f504 - f563;
    f575 = f504 + f563;
    f576 = f502 - f562;
    f577 = f502 + f562;
    f578 = f500 - f555;
    f579 = f500 + f555;
    f580 = f438 - f565;
    f581 = f438 + f565;
    f582 = f446 + f567;
    f583 = f446 - f567;
    f584 = f450 - f569;
    f585 = f450 + f569;
    f586 = f442 + f571;
    f587 = f442 - f571;
    f588 = f457 - f573;
    f589 = f457 + f573;
    f590 = f465 + f575;
    f591 = f465 - f575;
    f592 = f461 - f577;
    f593 = f461 + f577;
    f594 = f453 + f579;
    f595 = f453 - f579;
    f596 = f454 - f578;
    f597 = f454 + f578;
    f598 = f462 + f576;
    f599 = f462 - f576;
    f600 = f466 - f574;
    f601 = f466 + f574;
    f602 = f458 + f572;
    f603 = f458 - f572;
    f604 = f440 - f570;
    f605 = f440 + f570;
    f606 = f448 + f568;
    f607 = f448 - f568;
    f608 = f444 - f566;
    f609 = f444 + f566;
    f610 = f564 - f436;
    f611 = f436 + f564;
    f612 = f581 + f276;
    f613 = (-0.9876531635534246) * f581;
    f614 = 0.9999247018391445 * f612;
    f615 = 1.0121962401248645 * f276;
    y[0] = f613 + f614;
    y[63] = f615 - f614;
    f618 = f583 + f278;
    f619 = (-0.9625151616469906) * f583;
    f620 = 0.9993223845883495 * f618;
    f621 = 1.0361296075297086 * f278;
    y[1] = f619 + f620;
    y[62] = f621 - f620;
    f624 = f585 + f280;
    f625 = (-0.9367973765979405) * f585;
    f626 = 0.9981181129001492 * f624;
    f627 = 1.0594388492023579 * f280;
    y[2] = f625 + f626;
    y[61] = f627 - f626;
    f630 = f587 + f282;
    f631 = (-0.9105152998383381) * f587;
    f632 = 0.9963126121827780 * f630;
    f633 = 1.0821099245272179 * f282;
    y[3] = f631 + f632;
    y[60] = f633 - f632;
    f636 = f589 + f284;
    f637 = (-0.8836847627084729) * f589;
    f638 = 0.9939069700023561 * f636;
    f639 = 1.1041291772962392 * f284;
    y[4] = f637 + f638;
    y[59] = f639 - f638;
    f642 = f591 + f286;
    f643 = (-0.8563219269206538) * f591;
    f644 = 0.9909026354277800 * f642;
    f645 = 1.1254833439349063 * f286;
    y[5] = f643 + f644;
    y[58] = f645 - f644;
    f648 = f593 + f288;
    f649 = (-0.8284432748239970) * f593;
    f650 = 0.9873014181578584 * f648;
    f651 = 1.1461595614917197 * f288;
    y[6] = f649 + f650;
    y[57] = f651 - f650;
    f654 = f595 + f290;
    f655 = (-0.8000655994760753) * f595;
    f656 = 0.9831054874312163 * f654;
    f657 = 1.1661453753863573 * f290;
    y[7] = f655 + f656;
    y[56] = f657 - f656;
    f660 = f597 + f292;
    f661 = (-0.7712059945274091) * f597;
    f662 = 0.9783173707196277 * f660;
    f663 = 1.1854287469118463 * f292;
    y[8] = f661 + f662;
    y[55] = f663 - f662;
    f666 = f599 + f294;
    f667 = (-0.7418818439248888) * f599;
    f668 = 0.9729399522055601 * f666;
    f669 = 1.2039980604862313 * f294;
    y[9] = f667 + f668;
    y[54] = f669 - f668;
    f672 = f601 + f296;
    f673 = (-0.7121108114403374) * f601;
    f674 = 0.9669764710448521 * f672;
    f675 = 1.2218421306493668 * f296;
    y[10] = f673 + f674;
    y[53] = f675 - f674;
    f678 = f603 + f298;
    f679 = (-0.6819108300305128) * f603;
    f680 = 0.9604305194155658 * f678;
    f681 = 1.2389502088006188 * f298;
    y[11] = f679 + f680;
    y[52] = f681 - f680;
    f684 = f605 + f300;
    f685 = (-0.6513000910349656) * f605;
    f686 = 0.9533060403541938 * f684;
    f687 = 1.2553119896734219 * f300;
    y[12] = f685 + f686;
    y[51] = f687 - f686;
    f690 = f607 + f302;
    f691 = (-0.6202970332182582) * f607;
    f692 = 0.9456073253805213 * f690;
    f693 = 1.2709176175427843 * f302;
    y[13] = f691 + f692;
    y[50] = f693 - f692;
    f696 = f609 + f304;
    f697 = (-0.5889203316631404) * f609;
    f698 = 0.9373390119125750 * f696;
    f699 = 1.2857576921620095 * f304;
    y[14] = f697 + f698;
    y[49] = f699 - f698;
    f702 = f306 - f611;
    f703 = (-0.5571888865213779) * f611;
    f704 = 0.9285060804732155 * f702;
    f705 = 1.2998232744250531 * f306;
    y[15] = f704 - f703;
    y[48] = f705 - f704;
    f708 = f610 + f305;
    f709 = (-0.5251218116290097) * f610;
    f710 = 0.9191138516900578 * f708;
    f711 = 1.3131058917511058 * f305;
    y[16] = f709 + f710;
    y[47] = f711 - f710;
    f714 = f608 + f303;
    f715 = (-0.4927384229928850) * f608;
    f716 = 0.9091679830905223 * f714;
    f717 = 1.3255975431881595 * f303;
    y[17] = f715 + f716;
    y[46] = f717 - f716;
    f720 = f606 + f301;
    f721 = (-0.4600582271554261) * f606;
    f722 = 0.8986744656939538 * f720;
    f723 = 1.3372907042324815 * f301;
    y[18] = f721 + f722;
    y[45] = f723 - f722;
    f726 = f604 + f299;
    f727 = (-0.4271009094446139) * f604;
    f728 = 0.8876396204028539 * f726;
    f729 = 1.3481783313610940 * f299;
    y[19] = f727 + f728;
    y[44] = f729 - f728;
    f732 = f602 + f297;
    f733 = (-0.3938863221162838) * f602;
    f734 = 0.8760700941954066 * f732;
    f735 = 1.3582538662745294 * f297;
    y[20] = f733 + f734;
    y[43] = f735 - f734;
    f738 = f600 + f295;
    f739 = (-0.3604344723958691) * f600;
    f740 = 0.8639728561215867 * f738;
    f741 = 1.3675112398473042 * f295;
    y[21] = f739 + f740;
    y[42] = f741 - f740;
    f744 = f598 + f293;
    f745 = (-0.3267655104267964) * f598;
    f746 = 0.8513551931052652 * f744;
    f747 = 1.3759448757837340 * f293;
    y[22] = f745 + f746;
    y[41] = f747 - f746;
    f750 = f596 + f291;
    f751 = (-0.2928997171327915) * f596;
    f752 = 0.8382247055548380 * f750;
    f753 = 1.3835496939768843 * f291;
    y[23] = f751 + f752;
    y[40] = f753 - f752;
    f756 = f594 + f289;
    f757 = (-0.2588574920014121) * f594;
    f758 = 0.8245893027850253 * f756;
    f759 = 1.3903211135686386 * f289;
    y[24] = f757 + f758;
    y[39] = f759 - f758;
    f762 = f592 + f287;
    f763 = (-0.2246593407961559) * f592;
    f764 = 0.8104571982525948 * f762;
    f765 = 1.3962550557090336 * f287;
    y[25] = f763 + f764;
    y[38] = f765 - f764;
    f768 = f590 + f285;
    f769 = (-0.1903258632045579) * f590;
    f770 = 0.7958369046088835 * f768;
    f771 = 1.4013479460132090 * f285;
    y[26] = f769 + f770;
    y[37] = f771 - f770;
    f774 = f588 + f283;
    f775 = (-0.1558777404297079) * f588;
    f776 = 0.7807372285720944 * f774;
    f777 = 1.4055967167144807 * f283;
    y[27] = f775 + f776;
    y[36] = f777 - f776;
    f780 = f586 + f281;
    f781 = (-0.1213357227326675) * f586;
    f782 = 0.7651672656224590 * f780;
    f783 = 1.4089988085122505 * f281;
    y[28] = f781 + f782;
    y[35] = f783 - f782;
    f786 = f584 + f279;
    f787 = (-0.0867206169332875) * f584;
    f788 = 0.7491363945234593 * f786;
    f789 = 1.4115521721136310 * f279;
    y[29] = f787 + f788;
    y[34] = f789 - f788;
    f792 = f582 + f277;
    f793 = (-0.0520532738769597) * f582;
    f794 = 0.7326542716724128 * f792;
    f795 = 1.4132552694678659 * f277;
    y[30] = f793 + f794;
    y[33] = f795 - f794;
    f798 = f580 + f275;
    f799 = (-0.0173545758748457) * f580;
    f800 = 0.7157308252838186 * f798;
    f801 = 1.4141070746927915 * f275;
    y[31] = f799 + f800;
    y[32] = f801 - f800;
}

void DST4_32(real_t *y, real_t *x)
{
    real_t f0;
    real_t f1;
    real_t f2;
    real_t f3;
    real_t f4;
    real_t f5;
    real_t f6;
    real_t f7;
    real_t f8;
    real_t f9;
    real_t f10;
    real_t f11;
    real_t f12;
    real_t f13;
    real_t f14;
    real_t f15;
    real_t f16;
    real_t f17;
    real_t f18;
    real_t f19;
    real_t f20;
    real_t f21;
    real_t f22;
    real_t f23;
    real_t f24;
    real_t f25;
    real_t f26;
    real_t f27;
    real_t f28;
    real_t f29;
    real_t f30;
    real_t f31;
    real_t f32;
    real_t f33;
    real_t f34;
    real_t f35;
    real_t f36;
    real_t f37;
    real_t f38;
    real_t f39;
    real_t f40;
    real_t f41;
    real_t f42;
    real_t f43;
    real_t f44;
    real_t f45;
    real_t f46;
    real_t f47;
    real_t f48;
    real_t f49;
    real_t f50;
    real_t f51;
    real_t f52;
    real_t f53;
    real_t f54;
    real_t f55;
    real_t f56;
    real_t f57;
    real_t f58;
    real_t f59;
    real_t f60;
    real_t f61;
    real_t f62;
    real_t f63;
    real_t f64;
    real_t f65;
    real_t f66;
    real_t f67;
    real_t f68;
    real_t f69;
    real_t f70;
    real_t f71;
    real_t f72;
    real_t f73;
    real_t f74;
    real_t f75;
    real_t f76;
    real_t f77;
    real_t f78;
    real_t f79;
    real_t f80;
    real_t f81;
    real_t f82;
    real_t f83;
    real_t f84;
    real_t f85;
    real_t f86;
    real_t f87;
    real_t f88;
    real_t f89;
    real_t f90;
    real_t f91;
    real_t f92;
    real_t f93;
    real_t f94;
    real_t f95;
    real_t f96;
    real_t f97;
    real_t f98;
    real_t f99;
    real_t f100;
    real_t f101;
    real_t f102;
    real_t f103;
    real_t f104;
    real_t f105;
    real_t f106;
    real_t f107;
    real_t f108;
    real_t f109;
    real_t f110;
    real_t f111;
    real_t f112;
    real_t f113;
    real_t f114;
    real_t f115;
    real_t f116;
    real_t f117;
    real_t f118;
    real_t f119;
    real_t f120;
    real_t f121;
    real_t f122;
    real_t f123;
    real_t f124;
    real_t f125;
    real_t f126;
    real_t f127;
    real_t f128;
    real_t f129;
    real_t f130;
    real_t f131;
    real_t f132;
    real_t f133;
    real_t f134;
    real_t f135;
    real_t f136;
    real_t f137;
    real_t f138;
    real_t f139;
    real_t f140;
    real_t f141;
    real_t f142;
    real_t f143;
    real_t f144;
    real_t f145;
    real_t f146;
    real_t f147;
    real_t f148;
    real_t f149;
    real_t f150;
    real_t f151;
    real_t f152;
    real_t f153;
    real_t f154;
    real_t f155;
    real_t f156;
    real_t f157;
    real_t f158;
    real_t f159;
    real_t f160;
    real_t f161;
    real_t f162;
    real_t f163;
    real_t f164;
    real_t f165;
    real_t f166;
    real_t f167;
    real_t f168;
    real_t f169;
    real_t f170;
    real_t f171;
    real_t f172;
    real_t f173;
    real_t f174;
    real_t f175;
    real_t f176;
    real_t f177;
    real_t f178;
    real_t f179;
    real_t f180;
    real_t f181;
    real_t f182;
    real_t f183;
    real_t f184;
    real_t f185;
    real_t f186;
    real_t f187;
    real_t f188;
    real_t f189;
    real_t f190;
    real_t f191;
    real_t f192;
    real_t f193;
    real_t f194;
    real_t f195;
    real_t f196;
    real_t f197;
    real_t f198;
    real_t f199;
    real_t f200;
    real_t f201;
    real_t f202;
    real_t f203;
    real_t f204;
    real_t f205;
    real_t f206;
    real_t f207;
    real_t f208;
    real_t f209;
    real_t f210;
    real_t f211;
    real_t f212;
    real_t f213;
    real_t f214;
    real_t f215;
    real_t f216;
    real_t f217;
    real_t f218;
    real_t f219;
    real_t f220;
    real_t f221;
    real_t f222;
    real_t f223;
    real_t f224;
    real_t f225;
    real_t f226;
    real_t f227;
    real_t f228;
    real_t f229;
    real_t f230;
    real_t f231;
    real_t f232;
    real_t f233;
    real_t f234;
    real_t f235;
    real_t f236;
    real_t f237;
    real_t f238;
    real_t f239;
    real_t f240;
    real_t f241;
    real_t f242;
    real_t f243;
    real_t f244;
    real_t f245;
    real_t f246;
    real_t f247;
    real_t f248;
    real_t f249;
    real_t f250;
    real_t f251;
    real_t f252;
    real_t f253;
    real_t f254;
    real_t f255;
    real_t f256;
    real_t f257;
    real_t f258;
    real_t f259;
    real_t f260;
    real_t f261;
    real_t f262;
    real_t f263;
    real_t f264;
    real_t f265;
    real_t f266;
    real_t f267;
    real_t f268;
    real_t f269;
    real_t f270;
    real_t f271;
    real_t f272;
    real_t f273;
    real_t f274;
    real_t f275;
    real_t f276;
    real_t f277;
    real_t f278;
    real_t f279;
    real_t f280;
    real_t f281;
    real_t f282;
    real_t f283;
    real_t f284;
    real_t f285;
    real_t f286;
    real_t f287;
    real_t f288;
    real_t f289;
    real_t f290;
    real_t f291;
    real_t f292;
    real_t f293;
    real_t f294;
    real_t f295;
    real_t f296;
    real_t f297;
    real_t f298;
    real_t f299;
    real_t f300;
    real_t f301;
    real_t f302;
    real_t f303;
    real_t f304;
    real_t f305;
    real_t f306;
    real_t f307;
    real_t f308;
    real_t f309;
    real_t f310;
    real_t f311;
    real_t f312;
    real_t f313;
    real_t f314;
    real_t f315;
    real_t f316;
    real_t f317;
    real_t f318;
    real_t f319;
    real_t f320;
    real_t f321;
    real_t f322;
    real_t f323;
    real_t f324;
    real_t f325;
    real_t f326;
    real_t f327;
    real_t f328;
    real_t f329;
    real_t f330;
    real_t f331;
    real_t f332;
    real_t f333;
    real_t f334;
    real_t f335;

    f0 = x[0] - x[1];
    f1 = x[2] - x[1];
    f2 = x[2] - x[3];
    f3 = x[4] - x[3];
    f4 = x[4] - x[5];
    f5 = x[6] - x[5];
    f6 = x[6] - x[7];
    f7 = x[8] - x[7];
    f8 = x[8] - x[9];
    f9 = x[10] - x[9];
    f10 = x[10] - x[11];
    f11 = x[12] - x[11];
    f12 = x[12] - x[13];
    f13 = x[14] - x[13];
    f14 = x[14] - x[15];
    f15 = x[16] - x[15];
    f16 = x[16] - x[17];
    f17 = x[18] - x[17];
    f18 = x[18] - x[19];
    f19 = x[20] - x[19];
    f20 = x[20] - x[21];
    f21 = x[22] - x[21];
    f22 = x[22] - x[23];
    f23 = x[24] - x[23];
    f24 = x[24] - x[25];
    f25 = x[26] - x[25];
    f26 = x[26] - x[27];
    f27 = x[28] - x[27];
    f28 = x[28] - x[29];
    f29 = x[30] - x[29];
    f30 = x[30] - x[31];
    f31 = 0.7071067811865476 * f15;
    f32 = x[0] - f31;
    f33 = x[0] + f31;
    f34 = f7 + f23;
    f35 = 1.3065629648763766 * f7;
    f36 = (-0.9238795325112866) * f34;
    f37 = (-0.5411961001461967) * f23;
    f38 = f35 + f36;
    f39 = f37 - f36;
    f40 = f33 - f39;
    f41 = f33 + f39;
    f42 = f32 - f38;
    f43 = f32 + f38;
    f44 = f11 - f19;
    f45 = f11 + f19;
    f46 = 0.7071067811865476 * f45;
    f47 = f3 - f46;
    f48 = f3 + f46;
    f49 = 0.7071067811865476 * f44;
    f50 = f49 - f27;
    f51 = f49 + f27;
    f52 = f51 + f48;
    f53 = (-0.7856949583871021) * f51;
    f54 = 0.9807852804032304 * f52;
    f55 = 1.1758756024193588 * f48;
    f56 = f53 + f54;
    f57 = f55 - f54;
    f58 = f50 + f47;
    f59 = (-0.2758993792829430) * f50;
    f60 = 0.8314696123025452 * f58;
    f61 = 1.3870398453221475 * f47;
    f62 = f59 + f60;
    f63 = f61 - f60;
    f64 = f41 - f56;
    f65 = f41 + f56;
    f66 = f43 - f62;
    f67 = f43 + f62;
    f68 = f42 - f63;
    f69 = f42 + f63;
    f70 = f40 - f57;
    f71 = f40 + f57;
    f72 = f5 - f9;
    f73 = f5 + f9;
    f74 = f13 - f17;
    f75 = f13 + f17;
    f76 = f21 - f25;
    f77 = f21 + f25;
    f78 = 0.7071067811865476 * f75;
    f79 = f1 - f78;
    f80 = f1 + f78;
    f81 = f73 + f77;
    f82 = 1.3065629648763766 * f73;
    f83 = (-0.9238795325112866) * f81;
    f84 = (-0.5411961001461967) * f77;
    f85 = f82 + f83;
    f86 = f84 - f83;
    f87 = f80 - f86;
    f88 = f80 + f86;
    f89 = f79 - f85;
    f90 = f79 + f85;
    f91 = 0.7071067811865476 * f74;
    f92 = f29 - f91;
    f93 = f29 + f91;
    f94 = f76 + f72;
    f95 = 1.3065629648763766 * f76;
    f96 = (-0.9238795325112866) * f94;
    f97 = (-0.5411961001461967) * f72;
    f98 = f95 + f96;
    f99 = f97 - f96;
    f100 = f93 - f99;
    f101 = f93 + f99;
    f102 = f92 - f98;
    f103 = f92 + f98;
    f104 = f101 + f88;
    f105 = (-0.8971675863426361) * f101;
    f106 = 0.9951847266721968 * f104;
    f107 = 1.0932018670017576 * f88;
    f108 = f105 + f106;
    f109 = f107 - f106;
    f110 = f90 - f103;
    f111 = (-0.6666556584777466) * f103;
    f112 = 0.9569403357322089 * f110;
    f113 = 1.2472250129866713 * f90;
    f114 = f112 - f111;
    f115 = f113 - f112;
    f116 = f102 + f89;
    f117 = (-0.4105245275223571) * f102;
    f118 = 0.8819212643483549 * f116;
    f119 = 1.3533180011743529 * f89;
    f120 = f117 + f118;
    f121 = f119 - f118;
    f122 = f87 - f100;
    f123 = (-0.1386171691990915) * f100;
    f124 = 0.7730104533627370 * f122;
    f125 = 1.4074037375263826 * f87;
    f126 = f124 - f123;
    f127 = f125 - f124;
    f128 = f65 - f108;
    f129 = f65 + f108;
    f130 = f67 - f114;
    f131 = f67 + f114;
    f132 = f69 - f120;
    f133 = f69 + f120;
    f134 = f71 - f126;
    f135 = f71 + f126;
    f136 = f70 - f127;
    f137 = f70 + f127;
    f138 = f68 - f121;
    f139 = f68 + f121;
    f140 = f66 - f115;
    f141 = f66 + f115;
    f142 = f64 - f109;
    f143 = f64 + f109;
    f144 = f0 + f30;
    f145 = 1.0478631305325901 * f0;
    f146 = (-0.9987954562051724) * f144;
    f147 = (-0.9497277818777548) * f30;
    f148 = f145 + f146;
    f149 = f147 - f146;
    f150 = f4 + f26;
    f151 = 1.2130114330978077 * f4;
    f152 = (-0.9700312531945440) * f150;
    f153 = (-0.7270510732912803) * f26;
    f154 = f151 + f152;
    f155 = f153 - f152;
    f156 = f8 + f22;
    f157 = 1.3315443865537255 * f8;
    f158 = (-0.9039892931234433) * f156;
    f159 = (-0.4764341996931612) * f22;
    f160 = f157 + f158;
    f161 = f159 - f158;
    f162 = f12 + f18;
    f163 = 1.3989068359730781 * f12;
    f164 = (-0.8032075314806453) * f162;
    f165 = (-0.2075082269882124) * f18;
    f166 = f163 + f164;
    f167 = f165 - f164;
    f168 = f16 + f14;
    f169 = 1.4125100802019777 * f16;
    f170 = (-0.6715589548470187) * f168;
    f171 = 0.0693921705079402 * f14;
    f172 = f169 + f170;
    f173 = f171 - f170;
    f174 = f20 + f10;
    f175 = 1.3718313541934939 * f20;
    f176 = (-0.5141027441932219) * f174;
    f177 = 0.3436258658070501 * f10;
    f178 = f175 + f176;
    f179 = f177 - f176;
    f180 = f24 + f6;
    f181 = 1.2784339185752409 * f24;
    f182 = (-0.3368898533922200) * f180;
    f183 = 0.6046542117908008 * f6;
    f184 = f181 + f182;
    f185 = f183 - f182;
    f186 = f28 + f2;
    f187 = 1.1359069844201433 * f28;
    f188 = (-0.1467304744553624) * f186;
    f189 = 0.8424460355094185 * f2;
    f190 = f187 + f188;
    f191 = f189 - f188;
    f192 = f149 - f173;
    f193 = f149 + f173;
    f194 = f148 - f172;
    f195 = f148 + f172;
    f196 = f155 - f179;
    f197 = f155 + f179;
    f198 = f154 - f178;
    f199 = f154 + f178;
    f200 = f161 - f185;
    f201 = f161 + f185;
    f202 = f160 - f184;
    f203 = f160 + f184;
    f204 = f167 - f191;
    f205 = f167 + f191;
    f206 = f166 - f190;
    f207 = f166 + f190;
    f208 = f192 + f194;
    f209 = 1.1758756024193588 * f192;
    f210 = (-0.9807852804032304) * f208;
    f211 = (-0.7856949583871021) * f194;
    f212 = f209 + f210;
    f213 = f211 - f210;
    f214 = f196 + f198;
    f215 = 1.3870398453221475 * f196;
    f216 = (-0.5555702330196022) * f214;
    f217 = 0.2758993792829431 * f198;
    f218 = f215 + f216;
    f219 = f217 - f216;
    f220 = f200 + f202;
    f221 = 0.7856949583871022 * f200;
    f222 = 0.1950903220161283 * f220;
    f223 = 1.1758756024193586 * f202;
    f224 = f221 + f222;
    f225 = f223 - f222;
    f226 = f204 + f206;
    f227 = (-0.2758993792829430) * f204;
    f228 = 0.8314696123025452 * f226;
    f229 = 1.3870398453221475 * f206;
    f230 = f227 + f228;
    f231 = f229 - f228;
    f232 = f193 - f201;
    f233 = f193 + f201;
    f234 = f195 - f203;
    f235 = f195 + f203;
    f236 = f197 - f205;
    f237 = f197 + f205;
    f238 = f199 - f207;
    f239 = f199 + f207;
    f240 = f213 - f225;
    f241 = f213 + f225;
    f242 = f212 - f224;
    f243 = f212 + f224;
    f244 = f219 - f231;
    f245 = f219 + f231;
    f246 = f218 - f230;
    f247 = f218 + f230;
    f248 = f232 + f234;
    f249 = 1.3065629648763766 * f232;
    f250 = (-0.9238795325112866) * f248;
    f251 = (-0.5411961001461967) * f234;
    f252 = f249 + f250;
    f253 = f251 - f250;
    f254 = f236 + f238;
    f255 = 0.5411961001461969 * f236;
    f256 = 0.3826834323650898 * f254;
    f257 = 1.3065629648763766 * f238;
    f258 = f255 + f256;
    f259 = f257 - f256;
    f260 = f240 + f242;
    f261 = 1.3065629648763766 * f240;
    f262 = (-0.9238795325112866) * f260;
    f263 = (-0.5411961001461967) * f242;
    f264 = f261 + f262;
    f265 = f263 - f262;
    f266 = f244 + f246;
    f267 = 0.5411961001461969 * f244;
    f268 = 0.3826834323650898 * f266;
    f269 = 1.3065629648763766 * f246;
    f270 = f267 + f268;
    f271 = f269 - f268;
    f272 = f233 - f237;
    f273 = f233 + f237;
    f274 = f235 - f239;
    f275 = f235 + f239;
    f276 = f253 - f259;
    f277 = f253 + f259;
    f278 = f252 - f258;
    f279 = f252 + f258;
    f280 = f241 - f245;
    f281 = f241 + f245;
    f282 = f243 - f247;
    f283 = f243 + f247;
    f284 = f265 - f271;
    f285 = f265 + f271;
    f286 = f264 - f270;
    f287 = f264 + f270;
    f288 = f272 - f274;
    f289 = f272 + f274;
    f290 = 0.7071067811865474 * f288;
    f291 = 0.7071067811865474 * f289;
    f292 = f276 - f278;
    f293 = f276 + f278;
    f294 = 0.7071067811865474 * f292;
    f295 = 0.7071067811865474 * f293;
    f296 = f280 - f282;
    f297 = f280 + f282;
    f298 = 0.7071067811865474 * f296;
    f299 = 0.7071067811865474 * f297;
    f300 = f284 - f286;
    f301 = f284 + f286;
    f302 = 0.7071067811865474 * f300;
    f303 = 0.7071067811865474 * f301;
    f304 = f129 - f273;
    f305 = f129 + f273;
    f306 = f131 - f281;
    f307 = f131 + f281;
    f308 = f133 - f285;
    f309 = f133 + f285;
    f310 = f135 - f277;
    f311 = f135 + f277;
    f312 = f137 - f295;
    f313 = f137 + f295;
    f314 = f139 - f303;
    f315 = f139 + f303;
    f316 = f141 - f299;
    f317 = f141 + f299;
    f318 = f143 - f291;
    f319 = f143 + f291;
    f320 = f142 - f290;
    f321 = f142 + f290;
    f322 = f140 - f298;
    f323 = f140 + f298;
    f324 = f138 - f302;
    f325 = f138 + f302;
    f326 = f136 - f294;
    f327 = f136 + f294;
    f328 = f134 - f279;
    f329 = f134 + f279;
    f330 = f132 - f287;
    f331 = f132 + f287;
    f332 = f130 - f283;
    f333 = f130 + f283;
    f334 = f128 - f275;
    f335 = f128 + f275;
    y[31] = 0.5001506360206510 * f305;
    y[30] = 0.5013584524464084 * f307;
    y[29] = 0.5037887256810443 * f309;
    y[28] = 0.5074711720725553 * f311;
    y[27] = 0.5124514794082247 * f313;
    y[26] = 0.5187927131053328 * f315;
    y[25] = 0.5265773151542700 * f317;
    y[24] = 0.5359098169079920 * f319;
    y[23] = 0.5469204379855088 * f321;
    y[22] = 0.5597698129470802 * f323;
    y[21] = 0.5746551840326600 * f325;
    y[20] = 0.5918185358574165 * f327;
    y[19] = 0.6115573478825099 * f329;
    y[18] = 0.6342389366884031 * f331;
    y[17] = 0.6603198078137061 * f333;
    y[16] = 0.6903721282002123 * f335;
    y[15] = 0.7251205223771985 * f334;
    y[14] = 0.7654941649730891 * f332;
    y[13] = 0.8127020908144905 * f330;
    y[12] = 0.8683447152233481 * f328;
    y[11] = 0.9345835970364075 * f326;
    y[10] = 1.0144082649970547 * f324;
    y[9] = 1.1120716205797176 * f322;
    y[8] = 1.2338327379765710 * f320;
    y[7] = 1.3892939586328277 * f318;
    y[6] = 1.5939722833856311 * f316;
    y[5] = 1.8746759800084078 * f314;
    y[4] = 2.2820500680051619 * f312;
    y[3] = 2.9246284281582162 * f310;
    y[2] = 4.0846110781292477 * f308;
    y[1] = 6.7967507116736332 * f306;
    y[0] = 20.3738781672314530 * f304;
}

#endif

#endif