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_twiddle_c -standalone -fma -reorder-insns -simd -compact -variables 100000 -include fftw-spu.h -trivial-stores -n 32 -name X(spu_t1fv_32) */ d@0: d@0: /* d@0: * This function contains 217 FP additions, 160 FP multiplications, d@0: * (or, 119 additions, 62 multiplications, 98 fused multiply/add), d@0: * 258 stack variables, 7 constants, and 64 memory accesses d@0: */ d@0: #include "fftw-spu.h" d@0: d@0: void X(spu_t1fv_32) (R *ri, R *ii, const R *W, stride rs, INT mb, INT me, INT ms) { d@0: DVK(KP980785280, +0.980785280403230449126182236134239036973933731); d@0: DVK(KP198912367, +0.198912367379658006911597622644676228597850501); d@0: DVK(KP831469612, +0.831469612302545237078788377617905756738560812); d@0: DVK(KP668178637, +0.668178637919298919997757686523080761552472251); d@0: DVK(KP923879532, +0.923879532511286756128183189396788286822416626); d@0: DVK(KP414213562, +0.414213562373095048801688724209698078569671875); d@0: DVK(KP707106781, +0.707106781186547524400844362104849039284835938); d@0: INT m; d@0: R *x; d@0: x = ri; d@0: for (m = mb, W = W + (mb * ((TWVL / VL) * 62)); m < me; m = m + VL, x = x + (VL * ms), W = W + (TWVL * 62), MAKE_VOLATILE_STRIDE(rs)) { d@0: V Tg, T22, T2H, T3D, T1B, T2d, T2E, T3q, T2W, T3i, T3G, T3A, T28, T1k, T29; d@0: V T1r, T3h, T2P, T3x, T3H, TV, T25, T12, T26, T31, T34, TD, T2e, T1E, T23; d@0: V T3t, T3E, T1, T3, T1y, T1w, Te, T2G, T2F, T9, T2, T1x, T1v, Tb, Td; d@0: V Ta, Tc, T6, T8, T5, T7, T2C, T1A, T4, Tf, T2D, T1z, T2Q, T18, T1p; d@0: V T2R, T1d, T2T, T1i, T2U, T15, T17, T14, T16, T1m, T1o, T1l, T1n, T1a, T1c; d@0: V T19, T1b, T1f, T1h, T1e, T1g, T3y, T3z, T2S, T2V, T1q, T1j, TJ, T2J, T2K; d@0: V T10, T2M, TO, T2N, TT, TG, TI, TF, TH, TX, TZ, TW, TY, TL, TN; d@0: V TK, TM, TQ, TS, TP, TR, T3v, T3w, T2L, T2O, T11, TU, Tl, T32, TB; d@0: V T30, Tq, T33, Tw, T2Z, Ti, Tk, Th, Tj, Ty, TA, Tx, Tz, Tn, Tp; d@0: V Tm, To, Tt, Tv, Ts, Tu, T3s, T3r, T1C, T1D, Tr, TC, T3u, T3I, T3F; d@0: V T3B, T3e, T3f, T2Y, T3a, T37, T3b, T36, T2I, T2X, T35, T39, T3c, T38, T3d; d@0: V T3g, T3m, T3j, T3n, T3l, T3o, T3k, T3p, T3S, T3Y, T3V, T3Z, T3Q, T3R, T3T; d@0: V T3U, T3X, T40, T3W, T41, T3C, T3M, T3J, T3N, T3L, T3O, T3K, T3P, T2c, T2m; d@0: V T2v, T2z, T2j, T2n, T2s, T2y, T2q, T2f, T2g, T2h, T24, T2t, T2b, T2u, T27; d@0: V T2a, T2i, T2r, T2l, T2B, T2k, T2A, T2p, T2x, T2o, T2w, T1u, T1M, T1V, T1Z; d@0: V T1J, T1N, T1S, T1Y, T1Q, T1F, T1G, T1H, TE, T1T, T1t, T1U, T13, T1s, T1I; d@0: V T1R, T1L, T21, T1K, T20, T1P, T1X, T1O, T1W; d@0: T1 = LD(&(x[0]), ms, &(x[0])); d@0: T2 = LD(&(x[WS(rs, 16)]), ms, &(x[0])); d@0: T3 = BYTWJ(&(W[TWVL * 30]), T2); d@0: T1x = LD(&(x[WS(rs, 24)]), ms, &(x[0])); d@0: T1y = BYTWJ(&(W[TWVL * 46]), T1x); d@0: T1v = LD(&(x[WS(rs, 8)]), ms, &(x[0])); d@0: T1w = BYTWJ(&(W[TWVL * 14]), T1v); d@0: Ta = LD(&(x[WS(rs, 28)]), ms, &(x[0])); d@0: Tb = BYTWJ(&(W[TWVL * 54]), Ta); d@0: Tc = LD(&(x[WS(rs, 12)]), ms, &(x[0])); d@0: Td = BYTWJ(&(W[TWVL * 22]), Tc); d@0: Te = VSUB(Tb, Td); d@0: T2G = VADD(Tb, Td); d@0: T5 = LD(&(x[WS(rs, 4)]), ms, &(x[0])); d@0: T6 = BYTWJ(&(W[TWVL * 6]), T5); d@0: T7 = LD(&(x[WS(rs, 20)]), ms, &(x[0])); d@0: T8 = BYTWJ(&(W[TWVL * 38]), T7); d@0: T2F = VADD(T6, T8); d@0: T9 = VSUB(T6, T8); d@0: T4 = VSUB(T1, T3); d@0: T2C = VADD(T1, T3); d@0: T1A = VSUB(Te, T9); d@0: Tf = VADD(T9, Te); d@0: Tg = VFMA(LDK(KP707106781), Tf, T4); d@0: T22 = VFNMS(LDK(KP707106781), Tf, T4); d@0: T2H = VADD(T2F, T2G); d@0: T3D = VSUB(T2G, T2F); d@0: T1z = VSUB(T1w, T1y); d@0: T2D = VADD(T1w, T1y); d@0: T1B = VFNMS(LDK(KP707106781), T1A, T1z); d@0: T2d = VFMA(LDK(KP707106781), T1A, T1z); d@0: T2E = VADD(T2C, T2D); d@0: T3q = VSUB(T2C, T2D); d@0: T14 = LD(&(x[WS(rs, 31)]), ms, &(x[WS(rs, 1)])); d@0: T15 = BYTWJ(&(W[TWVL * 60]), T14); d@0: T16 = LD(&(x[WS(rs, 15)]), ms, &(x[WS(rs, 1)])); d@0: T17 = BYTWJ(&(W[TWVL * 28]), T16); d@0: T2Q = VADD(T15, T17); d@0: T18 = VSUB(T15, T17); d@0: T1l = LD(&(x[WS(rs, 23)]), ms, &(x[WS(rs, 1)])); d@0: T1m = BYTWJ(&(W[TWVL * 44]), T1l); d@0: T1n = LD(&(x[WS(rs, 7)]), ms, &(x[WS(rs, 1)])); d@0: T1o = BYTWJ(&(W[TWVL * 12]), T1n); d@0: T1p = VSUB(T1m, T1o); d@0: T2R = VADD(T1o, T1m); d@0: T19 = LD(&(x[WS(rs, 3)]), ms, &(x[WS(rs, 1)])); d@0: T1a = BYTWJ(&(W[TWVL * 4]), T19); d@0: T1b = LD(&(x[WS(rs, 19)]), ms, &(x[WS(rs, 1)])); d@0: T1c = BYTWJ(&(W[TWVL * 36]), T1b); d@0: T1d = VSUB(T1a, T1c); d@0: T2T = VADD(T1a, T1c); d@0: T1e = LD(&(x[WS(rs, 27)]), ms, &(x[WS(rs, 1)])); d@0: T1f = BYTWJ(&(W[TWVL * 52]), T1e); d@0: T1g = LD(&(x[WS(rs, 11)]), ms, &(x[WS(rs, 1)])); d@0: T1h = BYTWJ(&(W[TWVL * 20]), T1g); d@0: T1i = VSUB(T1f, T1h); d@0: T2U = VADD(T1f, T1h); d@0: T2S = VADD(T2Q, T2R); d@0: T3y = VSUB(T2Q, T2R); d@0: T3z = VSUB(T2U, T2T); d@0: T2V = VADD(T2T, T2U); d@0: T2W = VSUB(T2S, T2V); d@0: T3i = VADD(T2S, T2V); d@0: T3G = VFMA(LDK(KP414213562), T3y, T3z); d@0: T3A = VFNMS(LDK(KP414213562), T3z, T3y); d@0: T1j = VADD(T1d, T1i); d@0: T1q = VSUB(T1i, T1d); d@0: T28 = VFNMS(LDK(KP707106781), T1j, T18); d@0: T1k = VFMA(LDK(KP707106781), T1j, T18); d@0: T29 = VFNMS(LDK(KP707106781), T1q, T1p); d@0: T1r = VFMA(LDK(KP707106781), T1q, T1p); d@0: TF = LD(&(x[WS(rs, 1)]), ms, &(x[WS(rs, 1)])); d@0: TG = BYTWJ(&(W[0]), TF); d@0: TH = LD(&(x[WS(rs, 17)]), ms, &(x[WS(rs, 1)])); d@0: TI = BYTWJ(&(W[TWVL * 32]), TH); d@0: TJ = VSUB(TG, TI); d@0: T2J = VADD(TG, TI); d@0: TW = LD(&(x[WS(rs, 9)]), ms, &(x[WS(rs, 1)])); d@0: TX = BYTWJ(&(W[TWVL * 16]), TW); d@0: TY = LD(&(x[WS(rs, 25)]), ms, &(x[WS(rs, 1)])); d@0: TZ = BYTWJ(&(W[TWVL * 48]), TY); d@0: T2K = VADD(TX, TZ); d@0: T10 = VSUB(TX, TZ); d@0: TK = LD(&(x[WS(rs, 5)]), ms, &(x[WS(rs, 1)])); d@0: TL = BYTWJ(&(W[TWVL * 8]), TK); d@0: TM = LD(&(x[WS(rs, 21)]), ms, &(x[WS(rs, 1)])); d@0: TN = BYTWJ(&(W[TWVL * 40]), TM); d@0: T2M = VADD(TL, TN); d@0: TO = VSUB(TL, TN); d@0: TP = LD(&(x[WS(rs, 29)]), ms, &(x[WS(rs, 1)])); d@0: TQ = BYTWJ(&(W[TWVL * 56]), TP); d@0: TR = LD(&(x[WS(rs, 13)]), ms, &(x[WS(rs, 1)])); d@0: TS = BYTWJ(&(W[TWVL * 24]), TR); d@0: T2N = VADD(TQ, TS); d@0: TT = VSUB(TQ, TS); d@0: T3v = VSUB(T2J, T2K); d@0: T2L = VADD(T2J, T2K); d@0: T2O = VADD(T2M, T2N); d@0: T3w = VSUB(T2M, T2N); d@0: T3h = VADD(T2L, T2O); d@0: T2P = VSUB(T2L, T2O); d@0: T3x = VFNMS(LDK(KP414213562), T3w, T3v); d@0: T3H = VFMA(LDK(KP414213562), T3v, T3w); d@0: T11 = VSUB(TO, TT); d@0: TU = VADD(TO, TT); d@0: TV = VFMA(LDK(KP707106781), TU, TJ); d@0: T25 = VFNMS(LDK(KP707106781), TU, TJ); d@0: T12 = VFMA(LDK(KP707106781), T11, T10); d@0: T26 = VFNMS(LDK(KP707106781), T11, T10); d@0: Th = LD(&(x[WS(rs, 2)]), ms, &(x[0])); d@0: Ti = BYTWJ(&(W[TWVL * 2]), Th); d@0: Tj = LD(&(x[WS(rs, 18)]), ms, &(x[0])); d@0: Tk = BYTWJ(&(W[TWVL * 34]), Tj); d@0: Tl = VSUB(Ti, Tk); d@0: T32 = VADD(Ti, Tk); d@0: Tx = LD(&(x[WS(rs, 22)]), ms, &(x[0])); d@0: Ty = BYTWJ(&(W[TWVL * 42]), Tx); d@0: Tz = LD(&(x[WS(rs, 6)]), ms, &(x[0])); d@0: TA = BYTWJ(&(W[TWVL * 10]), Tz); d@0: TB = VSUB(Ty, TA); d@0: T30 = VADD(TA, Ty); d@0: Tm = LD(&(x[WS(rs, 10)]), ms, &(x[0])); d@0: Tn = BYTWJ(&(W[TWVL * 18]), Tm); d@0: To = LD(&(x[WS(rs, 26)]), ms, &(x[0])); d@0: Tp = BYTWJ(&(W[TWVL * 50]), To); d@0: Tq = VSUB(Tn, Tp); d@0: T33 = VADD(Tn, Tp); d@0: Ts = LD(&(x[WS(rs, 30)]), ms, &(x[0])); d@0: Tt = BYTWJ(&(W[TWVL * 58]), Ts); d@0: Tu = LD(&(x[WS(rs, 14)]), ms, &(x[0])); d@0: Tv = BYTWJ(&(W[TWVL * 26]), Tu); d@0: Tw = VSUB(Tt, Tv); d@0: T2Z = VADD(Tt, Tv); d@0: T31 = VADD(T2Z, T30); d@0: T3s = VSUB(T2Z, T30); d@0: T3r = VSUB(T32, T33); d@0: T34 = VADD(T32, T33); d@0: Tr = VFNMS(LDK(KP414213562), Tq, Tl); d@0: T1C = VFMA(LDK(KP414213562), Tl, Tq); d@0: T1D = VFMA(LDK(KP414213562), Tw, TB); d@0: TC = VFNMS(LDK(KP414213562), TB, Tw); d@0: TD = VADD(Tr, TC); d@0: T2e = VSUB(TC, Tr); d@0: T1E = VSUB(T1C, T1D); d@0: T23 = VADD(T1C, T1D); d@0: T3t = VADD(T3r, T3s); d@0: T3E = VSUB(T3s, T3r); d@0: T2I = VSUB(T2E, T2H); d@0: T3e = VADD(T2E, T2H); d@0: T36 = VSUB(T2W, T2P); d@0: T2X = VADD(T2P, T2W); d@0: T2Y = VFNMS(LDK(KP707106781), T2X, T2I); d@0: T3a = VFMA(LDK(KP707106781), T2X, T2I); d@0: T35 = VSUB(T31, T34); d@0: T3f = VADD(T34, T31); d@0: T37 = VFNMS(LDK(KP707106781), T36, T35); d@0: T3b = VFMA(LDK(KP707106781), T36, T35); d@0: T38 = VFNMSI(T37, T2Y); d@0: T39 = VFMAI(T37, T2Y); d@0: ST(&(x[WS(rs, 12)]), T38, ms, &(x[0])); d@0: T3d = VFMAI(T3b, T3a); d@0: T3c = VFNMSI(T3b, T3a); d@0: ST(&(x[WS(rs, 4)]), T3d, ms, &(x[0])); d@0: ST(&(x[WS(rs, 20)]), T39, ms, &(x[0])); d@0: ST(&(x[WS(rs, 28)]), T3c, ms, &(x[0])); d@0: T3g = VADD(T3e, T3f); d@0: T3m = VSUB(T3e, T3f); d@0: T3j = VADD(T3h, T3i); d@0: T3n = VSUB(T3i, T3h); d@0: T3k = VSUB(T3g, T3j); d@0: T3l = VADD(T3g, T3j); d@0: ST(&(x[WS(rs, 16)]), T3k, ms, &(x[0])); d@0: T3p = VFMAI(T3n, T3m); d@0: T3o = VFNMSI(T3n, T3m); d@0: ST(&(x[WS(rs, 8)]), T3p, ms, &(x[0])); d@0: ST(&(x[0]), T3l, ms, &(x[0])); d@0: ST(&(x[WS(rs, 24)]), T3o, ms, &(x[0])); d@0: T3Q = VFNMS(LDK(KP707106781), T3t, T3q); d@0: T3u = VFMA(LDK(KP707106781), T3t, T3q); d@0: T3I = VSUB(T3G, T3H); d@0: T3R = VADD(T3H, T3G); d@0: T3S = VFNMS(LDK(KP923879532), T3R, T3Q); d@0: T3Y = VFMA(LDK(KP923879532), T3R, T3Q); d@0: T3T = VFNMS(LDK(KP707106781), T3E, T3D); d@0: T3F = VFMA(LDK(KP707106781), T3E, T3D); d@0: T3B = VADD(T3x, T3A); d@0: T3U = VSUB(T3A, T3x); d@0: T3V = VFMA(LDK(KP923879532), T3U, T3T); d@0: T3Z = VFNMS(LDK(KP923879532), T3U, T3T); d@0: T3W = VFMAI(T3V, T3S); d@0: T3X = VFNMSI(T3V, T3S); d@0: ST(&(x[WS(rs, 10)]), T3W, ms, &(x[0])); d@0: T41 = VFMAI(T3Z, T3Y); d@0: T40 = VFNMSI(T3Z, T3Y); d@0: ST(&(x[WS(rs, 26)]), T41, ms, &(x[0])); d@0: ST(&(x[WS(rs, 22)]), T3X, ms, &(x[0])); d@0: ST(&(x[WS(rs, 6)]), T40, ms, &(x[0])); d@0: T3C = VFNMS(LDK(KP923879532), T3B, T3u); d@0: T3M = VFMA(LDK(KP923879532), T3B, T3u); d@0: T3J = VFNMS(LDK(KP923879532), T3I, T3F); d@0: T3N = VFMA(LDK(KP923879532), T3I, T3F); d@0: T3K = VFNMSI(T3J, T3C); d@0: T3L = VFMAI(T3J, T3C); d@0: ST(&(x[WS(rs, 14)]), T3K, ms, &(x[0])); d@0: T3P = VFMAI(T3N, T3M); d@0: T3O = VFNMSI(T3N, T3M); d@0: ST(&(x[WS(rs, 2)]), T3P, ms, &(x[0])); d@0: ST(&(x[WS(rs, 18)]), T3L, ms, &(x[0])); d@0: ST(&(x[WS(rs, 30)]), T3O, ms, &(x[0])); d@0: T24 = VFMA(LDK(KP923879532), T23, T22); d@0: T2q = VFNMS(LDK(KP923879532), T23, T22); d@0: T2f = VFMA(LDK(KP923879532), T2e, T2d); d@0: T2t = VFNMS(LDK(KP923879532), T2e, T2d); d@0: T27 = VFMA(LDK(KP668178637), T26, T25); d@0: T2g = VFNMS(LDK(KP668178637), T25, T26); d@0: T2h = VFNMS(LDK(KP668178637), T28, T29); d@0: T2a = VFMA(LDK(KP668178637), T29, T28); d@0: T2b = VADD(T27, T2a); d@0: T2u = VSUB(T2a, T27); d@0: T2c = VFNMS(LDK(KP831469612), T2b, T24); d@0: T2m = VFMA(LDK(KP831469612), T2b, T24); d@0: T2v = VFMA(LDK(KP831469612), T2u, T2t); d@0: T2z = VFNMS(LDK(KP831469612), T2u, T2t); d@0: T2i = VSUB(T2g, T2h); d@0: T2r = VADD(T2g, T2h); d@0: T2j = VFNMS(LDK(KP831469612), T2i, T2f); d@0: T2n = VFMA(LDK(KP831469612), T2i, T2f); d@0: T2s = VFMA(LDK(KP831469612), T2r, T2q); d@0: T2y = VFNMS(LDK(KP831469612), T2r, T2q); d@0: T2k = VFNMSI(T2j, T2c); d@0: T2l = VFMAI(T2j, T2c); d@0: ST(&(x[WS(rs, 13)]), T2k, ms, &(x[WS(rs, 1)])); d@0: T2A = VFNMSI(T2z, T2y); d@0: T2B = VFMAI(T2z, T2y); d@0: ST(&(x[WS(rs, 5)]), T2A, ms, &(x[WS(rs, 1)])); d@0: ST(&(x[WS(rs, 27)]), T2B, ms, &(x[WS(rs, 1)])); d@0: ST(&(x[WS(rs, 19)]), T2l, ms, &(x[WS(rs, 1)])); d@0: T2o = VFNMSI(T2n, T2m); d@0: T2p = VFMAI(T2n, T2m); d@0: ST(&(x[WS(rs, 29)]), T2o, ms, &(x[WS(rs, 1)])); d@0: T2w = VFMAI(T2v, T2s); d@0: T2x = VFNMSI(T2v, T2s); d@0: ST(&(x[WS(rs, 11)]), T2w, ms, &(x[WS(rs, 1)])); d@0: ST(&(x[WS(rs, 21)]), T2x, ms, &(x[WS(rs, 1)])); d@0: ST(&(x[WS(rs, 3)]), T2p, ms, &(x[WS(rs, 1)])); d@0: TE = VFMA(LDK(KP923879532), TD, Tg); d@0: T1Q = VFNMS(LDK(KP923879532), TD, Tg); d@0: T1F = VFMA(LDK(KP923879532), T1E, T1B); d@0: T1T = VFNMS(LDK(KP923879532), T1E, T1B); d@0: T13 = VFNMS(LDK(KP198912367), T12, TV); d@0: T1G = VFMA(LDK(KP198912367), TV, T12); d@0: T1H = VFMA(LDK(KP198912367), T1k, T1r); d@0: T1s = VFNMS(LDK(KP198912367), T1r, T1k); d@0: T1t = VADD(T13, T1s); d@0: T1U = VSUB(T1s, T13); d@0: T1u = VFNMS(LDK(KP980785280), T1t, TE); d@0: T1M = VFMA(LDK(KP980785280), T1t, TE); d@0: T1V = VFNMS(LDK(KP980785280), T1U, T1T); d@0: T1Z = VFMA(LDK(KP980785280), T1U, T1T); d@0: T1I = VSUB(T1G, T1H); d@0: T1R = VADD(T1G, T1H); d@0: T1J = VFNMS(LDK(KP980785280), T1I, T1F); d@0: T1N = VFMA(LDK(KP980785280), T1I, T1F); d@0: T1S = VFNMS(LDK(KP980785280), T1R, T1Q); d@0: T1Y = VFMA(LDK(KP980785280), T1R, T1Q); d@0: T1K = VFNMSI(T1J, T1u); d@0: T1L = VFMAI(T1J, T1u); d@0: ST(&(x[WS(rs, 17)]), T1K, ms, &(x[WS(rs, 1)])); d@0: T20 = VFMAI(T1Z, T1Y); d@0: T21 = VFNMSI(T1Z, T1Y); d@0: ST(&(x[WS(rs, 7)]), T20, ms, &(x[WS(rs, 1)])); d@0: ST(&(x[WS(rs, 25)]), T21, ms, &(x[WS(rs, 1)])); d@0: ST(&(x[WS(rs, 15)]), T1L, ms, &(x[WS(rs, 1)])); d@0: T1O = VFNMSI(T1N, T1M); d@0: T1P = VFMAI(T1N, T1M); d@0: ST(&(x[WS(rs, 1)]), T1O, ms, &(x[WS(rs, 1)])); d@0: T1W = VFNMSI(T1V, T1S); d@0: T1X = VFMAI(T1V, T1S); d@0: ST(&(x[WS(rs, 9)]), T1W, ms, &(x[WS(rs, 1)])); d@0: ST(&(x[WS(rs, 23)]), T1X, ms, &(x[WS(rs, 1)])); d@0: ST(&(x[WS(rs, 31)]), T1P, ms, &(x[WS(rs, 1)])); d@0: } d@0: }