Mercurial > libavcodec.hg
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 } |