d@0: /* d@0: * Copyright (c) 2003, 2007-8 Matteo Frigo d@0: * Copyright (c) 2003, 2007-8 Massachusetts Institute of Technology d@0: * d@0: * This program is free software; you can redistribute it and/or modify d@0: * it under the terms of the GNU General Public License as published by d@0: * the Free Software Foundation; either version 2 of the License, or d@0: * (at your option) any later version. d@0: * d@0: * This program is distributed in the hope that it will be useful, d@0: * but WITHOUT ANY WARRANTY; without even the implied warranty of d@0: * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the d@0: * GNU General Public License for more details. d@0: * d@0: * You should have received a copy of the GNU General Public License d@0: * along with this program; if not, write to the Free Software d@0: * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA d@0: * d@0: */ d@0: /* Generated by: ../../genfft/gen_notw_c -standalone -fma -reorder-insns -simd -compact -variables 100000 -with-ostride 2 -include fftw-spu.h -store-multiple 2 -n 12 -name X(spu_n2fv_12) */ d@0: d@0: /* d@0: * This function contains 48 FP additions, 20 FP multiplications, d@0: * (or, 30 additions, 2 multiplications, 18 fused multiply/add), d@0: * 65 stack variables, 2 constants, and 30 memory accesses d@0: */ d@0: #include "fftw-spu.h" d@0: d@0: void X(spu_n2fv_12) (const R *ri, const R *ii, R *ro, R *io, stride is, stride os, INT v, INT ivs, INT ovs) { d@0: DVK(KP866025403, +0.866025403784438646763723170752936183471402627); d@0: DVK(KP500000000, +0.500000000000000000000000000000000000000000000); d@0: INT i; d@0: const R *xi; d@0: R *xo; d@0: xi = ri; d@0: xo = ro; d@0: for (i = v; i > 0; i = i - VL, xi = xi + (VL * ivs), xo = xo + (VL * ovs), MAKE_VOLATILE_STRIDE(is), MAKE_VOLATILE_STRIDE(os)) { d@0: V TF, T5, Ta, TG, Tt, TB, TA, Ti, Tm, TI, Tp, TJ, T1, T6, Tr; d@0: V T4, Ts, T9, T2, T3, T7, T8, Tk, Tn, Tl, Te, To, Th, Tc, Td; d@0: V Tf, Tg, TN, TO, TP, TQ, TL, TM, TH, TK, Tx, Ty, TT, TU, Tj; d@0: V Tv, Tw, Tu, Tb, Tq, TR, TS, TE, TC, TD, Tz, TV, TW, TX, TY; d@0: T1 = LD(&(xi[0]), ivs, &(xi[0])); d@0: T6 = LD(&(xi[WS(is, 6)]), ivs, &(xi[0])); d@0: T2 = LD(&(xi[WS(is, 4)]), ivs, &(xi[0])); d@0: T3 = LD(&(xi[WS(is, 8)]), ivs, &(xi[0])); d@0: Tr = VSUB(T3, T2); d@0: T4 = VADD(T2, T3); d@0: T7 = LD(&(xi[WS(is, 10)]), ivs, &(xi[0])); d@0: T8 = LD(&(xi[WS(is, 2)]), ivs, &(xi[0])); d@0: Ts = VSUB(T8, T7); d@0: T9 = VADD(T7, T8); d@0: TF = VADD(T1, T4); d@0: T5 = VFNMS(LDK(KP500000000), T4, T1); d@0: Ta = VFNMS(LDK(KP500000000), T9, T6); d@0: TG = VADD(T6, T9); d@0: Tt = VSUB(Tr, Ts); d@0: TB = VADD(Tr, Ts); d@0: Tk = LD(&(xi[WS(is, 3)]), ivs, &(xi[WS(is, 1)])); d@0: Tn = LD(&(xi[WS(is, 9)]), ivs, &(xi[WS(is, 1)])); d@0: Tc = LD(&(xi[WS(is, 11)]), ivs, &(xi[WS(is, 1)])); d@0: Td = LD(&(xi[WS(is, 7)]), ivs, &(xi[WS(is, 1)])); d@0: Tl = VADD(Td, Tc); d@0: Te = VSUB(Tc, Td); d@0: Tf = LD(&(xi[WS(is, 1)]), ivs, &(xi[WS(is, 1)])); d@0: Tg = LD(&(xi[WS(is, 5)]), ivs, &(xi[WS(is, 1)])); d@0: To = VADD(Tf, Tg); d@0: Th = VSUB(Tf, Tg); d@0: TA = VSUB(Te, Th); d@0: Ti = VADD(Te, Th); d@0: Tm = VFNMS(LDK(KP500000000), Tl, Tk); d@0: TI = VADD(Tk, Tl); d@0: Tp = VFNMS(LDK(KP500000000), To, Tn); d@0: TJ = VADD(Tn, To); d@0: TL = VADD(TF, TG); d@0: TH = VSUB(TF, TG); d@0: TK = VSUB(TI, TJ); d@0: TM = VADD(TI, TJ); d@0: TN = VFNMSI(TK, TH); d@0: STM2(&(xo[18]), TN, ovs, &(xo[2])); d@0: TO = VFMAI(TK, TH); d@0: STM2(&(xo[6]), TO, ovs, &(xo[2])); d@0: TP = VSUB(TL, TM); d@0: STM2(&(xo[12]), TP, ovs, &(xo[0])); d@0: TQ = VADD(TL, TM); d@0: STM2(&(xo[0]), TQ, ovs, &(xo[0])); d@0: Tx = VADD(T5, Ta); d@0: Tb = VSUB(T5, Ta); d@0: Tj = VFMA(LDK(KP866025403), Ti, Tb); d@0: Tv = VFNMS(LDK(KP866025403), Ti, Tb); d@0: Tq = VSUB(Tm, Tp); d@0: Ty = VADD(Tm, Tp); d@0: Tw = VFMA(LDK(KP866025403), Tt, Tq); d@0: Tu = VFNMS(LDK(KP866025403), Tt, Tq); d@0: TR = VFNMSI(Tu, Tj); d@0: STM2(&(xo[2]), TR, ovs, &(xo[2])); d@0: STN2(&(xo[0]), TQ, TR, ovs); d@0: TS = VFMAI(Tw, Tv); d@0: STM2(&(xo[14]), TS, ovs, &(xo[2])); d@0: STN2(&(xo[12]), TP, TS, ovs); d@0: TT = VFMAI(Tu, Tj); d@0: STM2(&(xo[22]), TT, ovs, &(xo[2])); d@0: TU = VFNMSI(Tw, Tv); d@0: STM2(&(xo[10]), TU, ovs, &(xo[2])); d@0: TE = VMUL(LDK(KP866025403), VADD(TB, TA)); d@0: TC = VMUL(LDK(KP866025403), VSUB(TA, TB)); d@0: TD = VADD(Tx, Ty); d@0: Tz = VSUB(Tx, Ty); d@0: TV = VFMAI(TC, Tz); d@0: STM2(&(xo[4]), TV, ovs, &(xo[0])); d@0: STN2(&(xo[4]), TV, TO, ovs); d@0: TW = VFNMSI(TE, TD); d@0: STM2(&(xo[16]), TW, ovs, &(xo[0])); d@0: STN2(&(xo[16]), TW, TN, ovs); d@0: TX = VFNMSI(TC, Tz); d@0: STM2(&(xo[20]), TX, ovs, &(xo[0])); d@0: STN2(&(xo[20]), TX, TT, ovs); d@0: TY = VFMAI(TE, TD); d@0: STM2(&(xo[8]), TY, ovs, &(xo[0])); d@0: STN2(&(xo[8]), TY, TU, ovs); d@0: } d@0: }