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