2
* Copyright (c) 2003, 2006 Matteo Frigo
3
* Copyright (c) 2003, 2006 Massachusetts Institute of Technology
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.
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.
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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
21
/* This file was automatically generated --- DO NOT EDIT */
22
/* Generated on Sun Jul 2 16:46:23 EDT 2006 */
24
#include "codelet-rdft.h"
28
/* Generated by: ../../../genfft/gen_r2r -fma -reorder-insns -schedule-for-pipeline -compact -variables 4 -pipeline-latency 4 -redft01 -n 8 -name e01_8 -include r2r.h */
31
* This function contains 26 FP additions, 24 FP multiplications,
32
* (or, 2 additions, 0 multiplications, 24 fused multiply/add),
33
* 27 stack variables, and 16 memory accesses
37
* $Id: algsimp.ml,v 1.9 2006-02-12 23:34:12 athena Exp $
38
* $Id: fft.ml,v 1.4 2006-01-05 03:04:27 stevenj Exp $
39
* $Id: gen_r2r.ml,v 1.10 2006-02-12 23:34:12 athena Exp $
44
static void e01_8(const R *I, R *O, stride is, stride os, INT v, INT ivs, INT ovs)
46
DK(KP1_961570560, +1.961570560806460898252364472268478073947867462);
47
DK(KP1_662939224, +1.662939224605090474157576755235811513477121624);
48
DK(KP198912367, +0.198912367379658006911597622644676228597850501);
49
DK(KP668178637, +0.668178637919298919997757686523080761552472251);
50
DK(KP707106781, +0.707106781186547524400844362104849039284835938);
51
DK(KP1_847759065, +1.847759065022573512256366378793576573644833252);
52
DK(KP414213562, +0.414213562373095048801688724209698078569671875);
53
DK(KP1_414213562, +1.414213562373095048801688724209698078569671875);
55
for (i = v; i > 0; i = i - 1, I = I + ivs, O = O + ovs, MAKE_VOLATILE_STRIDE(is), MAKE_VOLATILE_STRIDE(os)) {
56
E T8, Td, Th, T7, Tp, Tl, Te, Tb;
58
E Tj, T3, Tk, T6, T9, Ta;
66
Tj = FNMS(KP1_414213562, T2, T1);
67
T3 = FMA(KP1_414213562, T2, T1);
68
Tk = FMS(KP414213562, T4, T5);
69
T6 = FMA(KP414213562, T5, T4);
74
Th = FNMS(KP1_847759065, T6, T3);
75
T7 = FMA(KP1_847759065, T6, T3);
76
Tp = FNMS(KP1_847759065, Tk, Tj);
77
Tl = FMA(KP1_847759065, Tk, Tj);
83
Tn = FNMS(KP707106781, Te, Td);
84
Tf = FMA(KP707106781, Te, Td);
85
Tc = FMA(KP707106781, Tb, T8);
86
Tm = FNMS(KP707106781, Tb, T8);
89
Tq = FMA(KP668178637, Tm, Tn);
90
To = FNMS(KP668178637, Tn, Tm);
91
Tg = FMA(KP198912367, Tf, Tc);
92
Ti = FNMS(KP198912367, Tc, Tf);
93
O[WS(os, 1)] = FMA(KP1_662939224, To, Tl);
94
O[WS(os, 6)] = FNMS(KP1_662939224, To, Tl);
95
O[WS(os, 2)] = FMA(KP1_662939224, Tq, Tp);
96
O[WS(os, 5)] = FNMS(KP1_662939224, Tq, Tp);
97
O[WS(os, 4)] = FMA(KP1_961570560, Ti, Th);
98
O[WS(os, 3)] = FNMS(KP1_961570560, Ti, Th);
99
O[0] = FMA(KP1_961570560, Tg, T7);
100
O[WS(os, 7)] = FNMS(KP1_961570560, Tg, T7);
106
static const kr2r_desc desc = { 8, "e01_8", {2, 0, 24, 0}, &GENUS, REDFT01, 0, 0, 0, 0 };
108
void X(codelet_e01_8) (planner *p) {
109
X(kr2r_register) (p, e01_8, &desc);
114
/* Generated by: ../../../genfft/gen_r2r -compact -variables 4 -pipeline-latency 4 -redft01 -n 8 -name e01_8 -include r2r.h */
117
* This function contains 26 FP additions, 15 FP multiplications,
118
* (or, 20 additions, 9 multiplications, 6 fused multiply/add),
119
* 28 stack variables, and 16 memory accesses
123
* $Id: algsimp.ml,v 1.9 2006-02-12 23:34:12 athena Exp $
124
* $Id: fft.ml,v 1.4 2006-01-05 03:04:27 stevenj Exp $
125
* $Id: gen_r2r.ml,v 1.10 2006-02-12 23:34:12 athena Exp $
130
static void e01_8(const R *I, R *O, stride is, stride os, INT v, INT ivs, INT ovs)
132
DK(KP1_662939224, +1.662939224605090474157576755235811513477121624);
133
DK(KP1_111140466, +1.111140466039204449485661627897065748749874382);
134
DK(KP390180644, +0.390180644032256535696569736954044481855383236);
135
DK(KP1_961570560, +1.961570560806460898252364472268478073947867462);
136
DK(KP707106781, +0.707106781186547524400844362104849039284835938);
137
DK(KP1_414213562, +1.414213562373095048801688724209698078569671875);
138
DK(KP765366864, +0.765366864730179543456919968060797733522689125);
139
DK(KP1_847759065, +1.847759065022573512256366378793576573644833252);
141
for (i = v; i > 0; i = i - 1, I = I + ivs, O = O + ovs, MAKE_VOLATILE_STRIDE(is), MAKE_VOLATILE_STRIDE(os)) {
142
E T7, Tl, T4, Tk, Td, To, Tg, Tn;
144
E T5, T6, T1, T3, T2;
147
T7 = FMA(KP1_847759065, T5, KP765366864 * T6);
148
Tl = FNMS(KP1_847759065, T6, KP765366864 * T5);
151
T3 = KP1_414213562 * T2;
155
E T9, Tf, Tc, Te, Ta, Tb;
160
Tc = KP707106781 * (Ta + Tb);
161
Te = KP707106781 * (Ta - Tb);
171
Th = FNMS(KP390180644, Tg, KP1_961570560 * Td);
172
O[WS(os, 7)] = T8 - Th;
175
Tr = FMA(KP1_111140466, Tn, KP1_662939224 * To);
176
O[WS(os, 5)] = Tq - Tr;
177
O[WS(os, 2)] = Tq + Tr;
182
Tj = FMA(KP390180644, Td, KP1_961570560 * Tg);
183
O[WS(os, 4)] = Ti - Tj;
184
O[WS(os, 3)] = Ti + Tj;
186
Tp = FNMS(KP1_111140466, To, KP1_662939224 * Tn);
187
O[WS(os, 6)] = Tm - Tp;
188
O[WS(os, 1)] = Tm + Tp;
193
static const kr2r_desc desc = { 8, "e01_8", {20, 9, 6, 0}, &GENUS, REDFT01, 0, 0, 0, 0 };
195
void X(codelet_e01_8) (planner *p) {
196
X(kr2r_register) (p, e01_8, &desc);
199
#endif /* HAVE_FMA */