comparison ppc/fft_altivec.c @ 3973:b28edd190fc0 libavcodec

removing ALTIVEC_USE_REFERENCE_C_CODE, since has no use anymore
author lu_zero
date Mon, 09 Oct 2006 18:29:46 +0000
parents c8c591fe26f8
children bb0431100529
comparison
equal deleted inserted replaced
3972:f5f1c9af095d 3973:b28edd190fc0
63 * fused multiply-add ('vec_madd' in altivec) 63 * fused multiply-add ('vec_madd' in altivec)
64 */ 64 */
65 void ff_fft_calc_altivec(FFTContext *s, FFTComplex *z) 65 void ff_fft_calc_altivec(FFTContext *s, FFTComplex *z)
66 { 66 {
67 POWERPC_PERF_DECLARE(altivec_fft_num, s->nbits >= 6); 67 POWERPC_PERF_DECLARE(altivec_fft_num, s->nbits >= 6);
68 #ifdef ALTIVEC_USE_REFERENCE_C_CODE
69 int ln = s->nbits;
70 int j, np, np2;
71 int nblocks, nloops;
72 register FFTComplex *p, *q;
73 FFTComplex *exptab = s->exptab;
74 int l;
75 FFTSample tmp_re, tmp_im;
76
77 POWERPC_PERF_START_COUNT(altivec_fft_num, s->nbits >= 6);
78
79 np = 1 << ln;
80
81 /* pass 0 */
82
83 p=&z[0];
84 j=(np >> 1);
85 do {
86 BF(p[0].re, p[0].im, p[1].re, p[1].im,
87 p[0].re, p[0].im, p[1].re, p[1].im);
88 p+=2;
89 } while (--j != 0);
90
91 /* pass 1 */
92
93
94 p=&z[0];
95 j=np >> 2;
96 if (s->inverse) {
97 do {
98 BF(p[0].re, p[0].im, p[2].re, p[2].im,
99 p[0].re, p[0].im, p[2].re, p[2].im);
100 BF(p[1].re, p[1].im, p[3].re, p[3].im,
101 p[1].re, p[1].im, -p[3].im, p[3].re);
102 p+=4;
103 } while (--j != 0);
104 } else {
105 do {
106 BF(p[0].re, p[0].im, p[2].re, p[2].im,
107 p[0].re, p[0].im, p[2].re, p[2].im);
108 BF(p[1].re, p[1].im, p[3].re, p[3].im,
109 p[1].re, p[1].im, p[3].im, -p[3].re);
110 p+=4;
111 } while (--j != 0);
112 }
113 /* pass 2 .. ln-1 */
114
115 nblocks = np >> 3;
116 nloops = 1 << 2;
117 np2 = np >> 1;
118 do {
119 p = z;
120 q = z + nloops;
121 for (j = 0; j < nblocks; ++j) {
122 BF(p->re, p->im, q->re, q->im,
123 p->re, p->im, q->re, q->im);
124
125 p++;
126 q++;
127 for(l = nblocks; l < np2; l += nblocks) {
128 CMUL(tmp_re, tmp_im, exptab[l].re, exptab[l].im, q->re, q->im);
129 BF(p->re, p->im, q->re, q->im,
130 p->re, p->im, tmp_re, tmp_im);
131 p++;
132 q++;
133 }
134
135 p += nloops;
136 q += nloops;
137 }
138 nblocks = nblocks >> 1;
139 nloops = nloops << 1;
140 } while (nblocks != 0);
141
142 POWERPC_PERF_STOP_COUNT(altivec_fft_num, s->nbits >= 6);
143
144 #else /* ALTIVEC_USE_REFERENCE_C_CODE */
145 #ifdef CONFIG_DARWIN 68 #ifdef CONFIG_DARWIN
146 register const vector float vczero = (const vector float)(0.); 69 register const vector float vczero = (const vector float)(0.);
147 #else 70 #else
148 register const vector float vczero = (const vector float){0.,0.,0.,0.}; 71 register const vector float vczero = (const vector float){0.,0.,0.,0.};
149 #endif 72 #endif
242 nblocks = nblocks >> 1; 165 nblocks = nblocks >> 1;
243 nloops = nloops << 1; 166 nloops = nloops << 1;
244 } while (nblocks != 0); 167 } while (nblocks != 0);
245 168
246 POWERPC_PERF_STOP_COUNT(altivec_fft_num, s->nbits >= 6); 169 POWERPC_PERF_STOP_COUNT(altivec_fft_num, s->nbits >= 6);
247
248 #endif /* ALTIVEC_USE_REFERENCE_C_CODE */
249 } 170 }