1 /*
2  * Copyright (c) 2003, 2007-14 Matteo Frigo
3  * Copyright (c) 2003, 2007-14 Massachusetts Institute of Technology
4  *
5  * This program is free software; you can redistribute it and/or modify
6  * it under the terms of the GNU General Public License as published by
7  * the Free Software Foundation; either version 2 of the License, or
8  * (at your option) any later version.
9  *
10  * This program is distributed in the hope that it will be useful,
11  * but WITHOUT ANY WARRANTY; without even the implied warranty of
12  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13  * GNU General Public License for more details.
14  *
15  * You should have received a copy of the GNU General Public License
16  * along with this program; if not, write to the Free Software
17  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
18  *
19  */
20 
21 /* This file was automatically generated --- DO NOT EDIT */
22 /* Generated on Thu Dec 10 07:06:03 EST 2020 */
23 
24 #include "rdft/codelet-rdft.h"
25 
26 #if defined(ARCH_PREFERS_FMA) || defined(ISA_EXTENSION_PREFERS_FMA)
27 
28 /* Generated by: ../../../genfft/gen_r2cf.native -fma -compact -variables 4 -pipeline-latency 4 -n 10 -name r2cfII_10 -dft-II -include rdft/scalar/r2cfII.h */
29 
30 /*
31  * This function contains 32 FP additions, 18 FP multiplications,
32  * (or, 14 additions, 0 multiplications, 18 fused multiply/add),
33  * 21 stack variables, 4 constants, and 20 memory accesses
34  */
35 #include "rdft/scalar/r2cfII.h"
36 
r2cfII_10(R * R0,R * R1,R * Cr,R * Ci,stride rs,stride csr,stride csi,INT v,INT ivs,INT ovs)37 static void r2cfII_10(R *R0, R *R1, R *Cr, R *Ci, stride rs, stride csr, stride csi, INT v, INT ivs, INT ovs)
38 {
39      DK(KP951056516, +0.951056516295153572116439333379382143405698634);
40      DK(KP559016994, +0.559016994374947424102293417182819058860154590);
41      DK(KP250000000, +0.250000000000000000000000000000000000000000000);
42      DK(KP618033988, +0.618033988749894848204586834365638117720309180);
43      {
44 	  INT i;
45 	  for (i = v; i > 0; i = i - 1, R0 = R0 + ivs, R1 = R1 + ivs, Cr = Cr + ovs, Ci = Ci + ovs, MAKE_VOLATILE_STRIDE(40, rs), MAKE_VOLATILE_STRIDE(40, csr), MAKE_VOLATILE_STRIDE(40, csi)) {
46 	       E T1, To, T8, Tt, Ta, Ts, Te, Tq, Th, Tn;
47 	       T1 = R0[0];
48 	       To = R1[WS(rs, 2)];
49 	       {
50 		    E T2, T3, T4, T5, T6, T7;
51 		    T2 = R0[WS(rs, 2)];
52 		    T3 = R0[WS(rs, 3)];
53 		    T4 = T2 - T3;
54 		    T5 = R0[WS(rs, 4)];
55 		    T6 = R0[WS(rs, 1)];
56 		    T7 = T5 - T6;
57 		    T8 = T4 + T7;
58 		    Tt = T5 + T6;
59 		    Ta = T4 - T7;
60 		    Ts = T2 + T3;
61 	       }
62 	       {
63 		    E Tc, Td, Tm, Tf, Tg, Tl;
64 		    Tc = R1[0];
65 		    Td = R1[WS(rs, 4)];
66 		    Tm = Tc + Td;
67 		    Tf = R1[WS(rs, 1)];
68 		    Tg = R1[WS(rs, 3)];
69 		    Tl = Tf + Tg;
70 		    Te = Tc - Td;
71 		    Tq = Tm + Tl;
72 		    Th = Tf - Tg;
73 		    Tn = Tl - Tm;
74 	       }
75 	       Cr[WS(csr, 2)] = T1 + T8;
76 	       Ci[WS(csi, 2)] = Tn - To;
77 	       {
78 		    E Ti, Tk, Tb, Tj, T9;
79 		    Ti = FMA(KP618033988, Th, Te);
80 		    Tk = FNMS(KP618033988, Te, Th);
81 		    T9 = FNMS(KP250000000, T8, T1);
82 		    Tb = FMA(KP559016994, Ta, T9);
83 		    Tj = FNMS(KP559016994, Ta, T9);
84 		    Cr[WS(csr, 4)] = FNMS(KP951056516, Ti, Tb);
85 		    Cr[WS(csr, 3)] = FMA(KP951056516, Tk, Tj);
86 		    Cr[0] = FMA(KP951056516, Ti, Tb);
87 		    Cr[WS(csr, 1)] = FNMS(KP951056516, Tk, Tj);
88 	       }
89 	       {
90 		    E Tu, Tw, Tr, Tv, Tp;
91 		    Tu = FMA(KP618033988, Tt, Ts);
92 		    Tw = FNMS(KP618033988, Ts, Tt);
93 		    Tp = FMA(KP250000000, Tn, To);
94 		    Tr = FMA(KP559016994, Tq, Tp);
95 		    Tv = FNMS(KP559016994, Tq, Tp);
96 		    Ci[0] = -(FMA(KP951056516, Tu, Tr));
97 		    Ci[WS(csi, 3)] = FMA(KP951056516, Tw, Tv);
98 		    Ci[WS(csi, 4)] = FMS(KP951056516, Tu, Tr);
99 		    Ci[WS(csi, 1)] = FNMS(KP951056516, Tw, Tv);
100 	       }
101 	  }
102      }
103 }
104 
105 static const kr2c_desc desc = { 10, "r2cfII_10", { 14, 0, 18, 0 }, &GENUS };
106 
X(codelet_r2cfII_10)107 void X(codelet_r2cfII_10) (planner *p) { X(kr2c_register) (p, r2cfII_10, &desc);
108 }
109 
110 #else
111 
112 /* Generated by: ../../../genfft/gen_r2cf.native -compact -variables 4 -pipeline-latency 4 -n 10 -name r2cfII_10 -dft-II -include rdft/scalar/r2cfII.h */
113 
114 /*
115  * This function contains 32 FP additions, 12 FP multiplications,
116  * (or, 26 additions, 6 multiplications, 6 fused multiply/add),
117  * 21 stack variables, 4 constants, and 20 memory accesses
118  */
119 #include "rdft/scalar/r2cfII.h"
120 
r2cfII_10(R * R0,R * R1,R * Cr,R * Ci,stride rs,stride csr,stride csi,INT v,INT ivs,INT ovs)121 static void r2cfII_10(R *R0, R *R1, R *Cr, R *Ci, stride rs, stride csr, stride csi, INT v, INT ivs, INT ovs)
122 {
123      DK(KP250000000, +0.250000000000000000000000000000000000000000000);
124      DK(KP587785252, +0.587785252292473129168705954639072768597652438);
125      DK(KP951056516, +0.951056516295153572116439333379382143405698634);
126      DK(KP559016994, +0.559016994374947424102293417182819058860154590);
127      {
128 	  INT i;
129 	  for (i = v; i > 0; i = i - 1, R0 = R0 + ivs, R1 = R1 + ivs, Cr = Cr + ovs, Ci = Ci + ovs, MAKE_VOLATILE_STRIDE(40, rs), MAKE_VOLATILE_STRIDE(40, csr), MAKE_VOLATILE_STRIDE(40, csi)) {
130 	       E T1, To, T8, Tq, T9, Tp, Te, Ts, Th, Tn;
131 	       T1 = R0[0];
132 	       To = R1[WS(rs, 2)];
133 	       {
134 		    E T2, T3, T4, T5, T6, T7;
135 		    T2 = R0[WS(rs, 2)];
136 		    T3 = R0[WS(rs, 3)];
137 		    T4 = T2 - T3;
138 		    T5 = R0[WS(rs, 4)];
139 		    T6 = R0[WS(rs, 1)];
140 		    T7 = T5 - T6;
141 		    T8 = T4 + T7;
142 		    Tq = T5 + T6;
143 		    T9 = KP559016994 * (T4 - T7);
144 		    Tp = T2 + T3;
145 	       }
146 	       {
147 		    E Tc, Td, Tm, Tf, Tg, Tl;
148 		    Tc = R1[0];
149 		    Td = R1[WS(rs, 4)];
150 		    Tm = Tc + Td;
151 		    Tf = R1[WS(rs, 1)];
152 		    Tg = R1[WS(rs, 3)];
153 		    Tl = Tf + Tg;
154 		    Te = Tc - Td;
155 		    Ts = KP559016994 * (Tm + Tl);
156 		    Th = Tf - Tg;
157 		    Tn = Tl - Tm;
158 	       }
159 	       Cr[WS(csr, 2)] = T1 + T8;
160 	       Ci[WS(csi, 2)] = Tn - To;
161 	       {
162 		    E Ti, Tk, Tb, Tj, Ta;
163 		    Ti = FMA(KP951056516, Te, KP587785252 * Th);
164 		    Tk = FNMS(KP587785252, Te, KP951056516 * Th);
165 		    Ta = FNMS(KP250000000, T8, T1);
166 		    Tb = T9 + Ta;
167 		    Tj = Ta - T9;
168 		    Cr[WS(csr, 4)] = Tb - Ti;
169 		    Cr[WS(csr, 3)] = Tj + Tk;
170 		    Cr[0] = Tb + Ti;
171 		    Cr[WS(csr, 1)] = Tj - Tk;
172 	       }
173 	       {
174 		    E Tr, Tw, Tu, Tv, Tt;
175 		    Tr = FMA(KP951056516, Tp, KP587785252 * Tq);
176 		    Tw = FNMS(KP587785252, Tp, KP951056516 * Tq);
177 		    Tt = FMA(KP250000000, Tn, To);
178 		    Tu = Ts + Tt;
179 		    Tv = Tt - Ts;
180 		    Ci[0] = -(Tr + Tu);
181 		    Ci[WS(csi, 3)] = Tw + Tv;
182 		    Ci[WS(csi, 4)] = Tr - Tu;
183 		    Ci[WS(csi, 1)] = Tv - Tw;
184 	       }
185 	  }
186      }
187 }
188 
189 static const kr2c_desc desc = { 10, "r2cfII_10", { 26, 6, 6, 0 }, &GENUS };
190 
X(codelet_r2cfII_10)191 void X(codelet_r2cfII_10) (planner *p) { X(kr2c_register) (p, r2cfII_10, &desc);
192 }
193 
194 #endif
195