summaryrefslogtreecommitdiffstats
path: root/src/ffts.c
diff options
context:
space:
mode:
authorJukka Ojanen <jukka.ojanen@linkotec.net>2015-03-16 16:22:47 +0200
committerJukka Ojanen <jukka.ojanen@linkotec.net>2015-03-16 16:22:47 +0200
commitf869be2f8644d43d965a088850c28041b43a6eca (patch)
treeaf0b1acf10a2bf4a3b46cd977891907d58095b7e /src/ffts.c
parentee6ea4e982e6d4dd18cbe3703cfd24ae737e0ed1 (diff)
downloadffts-f869be2f8644d43d965a088850c28041b43a6eca.zip
ffts-f869be2f8644d43d965a088850c28041b43a6eca.tar.gz
Remove dead code
Diffstat (limited to 'src/ffts.c')
-rw-r--r--src/ffts.c145
1 files changed, 47 insertions, 98 deletions
diff --git a/src/ffts.c b/src/ffts.c
index b0e4d27..8ffb0c3 100644
--- a/src/ffts.c
+++ b/src/ffts.c
@@ -56,22 +56,22 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
#if defined(__arm__) && !defined(DYNAMIC_DISABLED)
static const FFTS_ALIGN(64) float w_data[16] = {
- 0.70710678118654757273731092936941f,
- 0.70710678118654746171500846685376f,
+ 0.70710678118654757273731092936941f,
+ 0.70710678118654746171500846685376f,
-0.70710678118654757273731092936941f,
-0.70710678118654746171500846685376f,
- 1.0f,
- 0.70710678118654757273731092936941f,
+ 1.0f,
+ 0.70710678118654757273731092936941f,
-0.0f,
-0.70710678118654746171500846685376f,
- 0.70710678118654757273731092936941f,
- 0.70710678118654746171500846685376f,
- 0.70710678118654757273731092936941f,
- 0.70710678118654746171500846685376f,
- 1.0f,
- 0.70710678118654757273731092936941f,
- 0.0f,
- 0.70710678118654746171500846685376f
+ 0.70710678118654757273731092936941f,
+ 0.70710678118654746171500846685376f,
+ 0.70710678118654757273731092936941f,
+ 0.70710678118654746171500846685376f,
+ 1.0f,
+ 0.70710678118654757273731092936941f,
+ 0.0f,
+ 0.70710678118654746171500846685376f
};
#endif
@@ -199,15 +199,14 @@ void ffts_free_1d(ffts_plan_t *p)
free(p);
}
-static int ffts_generate_luts(ffts_plan_t *p, size_t N, size_t leaf_N, int sign)
+static int
+ffts_generate_luts(ffts_plan_t *p, size_t N, size_t leaf_N, int sign)
{
V4SF MULI_SIGN;
- int hardcoded;
size_t lut_size;
size_t n_luts;
ffts_cpx_32f *w;
- size_t i;
- size_t n;
+ size_t i, n;
if (sign < 0) {
MULI_SIGN = V4SF_LIT4(-0.0f, 0.0f, -0.0f, 0.0f);
@@ -217,13 +216,6 @@ static int ffts_generate_luts(ffts_plan_t *p, size_t N, size_t leaf_N, int sign)
/* LUTS */
n_luts = ffts_ctzl(N / leaf_N);
- if (N < 32) {
- n_luts = ffts_ctzl(N / 4);
- hardcoded = 1;
- } else {
- hardcoded = 0;
- }
-
if (n_luts >= 32) {
n_luts = 0;
}
@@ -231,20 +223,12 @@ static int ffts_generate_luts(ffts_plan_t *p, size_t N, size_t leaf_N, int sign)
/* fprintf(stderr, "n_luts = %zu\n", n_luts); */
n = leaf_N * 2;
- if (hardcoded) {
- n = 8;
- }
lut_size = 0;
-
for (i = 0; i < n_luts; i++) {
- if (!i || hardcoded) {
+ if (!i) {
#if defined(__arm__) && !defined(DYNAMIC_DISABLED)
- if (N <= 32) {
- lut_size += n/4 * 2 * sizeof(ffts_cpx_32f);
- } else {
- lut_size += n/4 * sizeof(ffts_cpx_32f);
- }
+ lut_size += n/4 * sizeof(ffts_cpx_32f);
#else
lut_size += n/4 * 2 * sizeof(ffts_cpx_32f);
#endif
@@ -259,8 +243,6 @@ static int ffts_generate_luts(ffts_plan_t *p, size_t N, size_t leaf_N, int sign)
n *= 2;
}
- /* lut_size *= 16; */
-
/* fprintf(stderr, "lut size = %zu\n", lut_size); */
if (n_luts) {
@@ -276,11 +258,7 @@ static int ffts_generate_luts(ffts_plan_t *p, size_t N, size_t leaf_N, int sign)
}
w = p->ws;
-
n = leaf_N * 2;
- if (hardcoded) {
- n = 8;
- }
#ifdef HAVE_NEON
V4SF neg = (sign < 0) ? V4SF_LIT4(0.0f, 0.0f, 0.0f, 0.0f) : V4SF_LIT4(-0.0f, -0.0f, -0.0f, -0.0f);
@@ -290,61 +268,32 @@ static int ffts_generate_luts(ffts_plan_t *p, size_t N, size_t leaf_N, int sign)
p->ws_is[i] = w - (ffts_cpx_32f*) p->ws;
//fprintf(stderr, "LUT[%zu] = %d @ %08x - %zu\n", i, n, w, p->ws_is[i]);
- if(!i || hardcoded) {
+ if (!i) {
ffts_cpx_32f *w0 = FFTS_MALLOC(n/4 * sizeof(ffts_cpx_32f), 32);
float *fw0 = (float*) w0;
- float *fw = (float *)w;
+ float *fw = (float*) w;
size_t j;
for (j = 0; j < n/4; j++) {
- w0[j][0] = W_re(n,j);
- w0[j][1] = W_im(n,j);
+ w0[j][0] = W_re(n, j);
+ w0[j][1] = W_im(n, j);
}
#if defined(__arm__) && !defined(DYNAMIC_DISABLED)
- if (N < 32) {
- // w = FFTS_MALLOC(n/4 * 2 * sizeof(ffts_cpx_32f), 32);
- float *fw = (float *)w;
- V4SF temp0, temp1, temp2;
- for (j=0; j<n/4; j+=2) {
- // #ifdef HAVE_NEON
- temp0 = V4SF_LD(fw0 + j*2);
- V4SF re, im;
- re = V4SF_DUPLICATE_RE(temp0);
- im = V4SF_DUPLICATE_IM(temp0);
-#ifdef HAVE_NEON
- im = V4SF_XOR(im, MULI_SIGN);
- //im = IMULI(sign>0, im);
-#else
- im = V4SF_MULI(sign>0, im);
-#endif
- V4SF_ST(fw + j*4 , re);
- V4SF_ST(fw + j*4+4, im);
- // #endif
- }
- w += n/4 * 2;
- } else {
- //w = FFTS_MALLOC(n/4 * sizeof(ffts_cpx_32f), 32);
- float *fw = (float *)w;
#ifdef HAVE_NEON
- {
- V4SF2 temp0, temp1, temp2;
- for (j=0; j<n/4; j+=4) {
- temp0 = V4SF2_LD(fw0 + j*2);
- temp0.val[1] = V4SF_XOR(temp0.val[1], neg);
- V4SF2_STORE_SPR(fw + j*2, temp0);
- }
- }
+ for (j = 0; j < n/4; j += 4) {
+ V4SF2 temp0 = V4SF2_LD(fw0 + j*2);
+ temp0.val[1] = V4SF_XOR(temp0.val[1], neg);
+ V4SF2_STORE_SPR(fw + j*2, temp0);
+ }
#else
- for (j=0; j<n/4; j+=1) {
- fw[j*2] = fw0[j*2];
- fw[j*2+1] = (sign < 0) ? fw0[j*2+1] : -fw0[j*2+1];
- }
-#endif
- w += n/4;
+ for (j = 0; j < n/4; j++) {
+ fw[j*2+0] = fw0[j*2+0];
+ fw[j*2+1] = (sign < 0) ? fw0[j*2+1] : -fw0[j*2+1];
}
+#endif
+ w += n/4;
#else
- //w = FFTS_MALLOC(n/4 * 2 * sizeof(ffts_cpx_32f), 32);
for (j = 0; j < n/4; j += 2) {
V4SF re, im, temp0;
temp0 = V4SF_LD(fw0 + j*2);
@@ -369,7 +318,6 @@ static int ffts_generate_luts(ffts_plan_t *p, size_t N, size_t leaf_N, int sign)
float *fw2 = (float*) w2;
float *fw = (float *)w;
- V4SF temp0, temp1, temp2, re, im;
size_t j;
for (j = 0; j < n/8; j++) {
@@ -383,23 +331,24 @@ static int ffts_generate_luts(ffts_plan_t *p, size_t N, size_t leaf_N, int sign)
#if defined(__arm__) && !defined(DYNAMIC_DISABLED)
#ifdef HAVE_NEON
- {
- V4SF2 temp0, temp1, temp2;
for (j = 0; j < n/8; j += 4) {
+ V4SF2 temp0, temp1, temp2;
+
temp0 = V4SF2_LD(fw0 + j*2);
temp0.val[1] = V4SF_XOR(temp0.val[1], neg);
V4SF2_STORE_SPR(fw + j*2*3, temp0);
+
temp1 = V4SF2_LD(fw1 + j*2);
temp1.val[1] = V4SF_XOR(temp1.val[1], neg);
V4SF2_STORE_SPR(fw + j*2*3 + 8, temp1);
+
temp2 = V4SF2_LD(fw2 + j*2);
temp2.val[1] = V4SF_XOR(temp2.val[1], neg);
V4SF2_STORE_SPR(fw + j*2*3 + 16, temp2);
}
- }
#else
- for (j = 0; j < n/8; j += 1) {
- fw[j*6] = fw0[j*2];
+ for (j = 0; j < n/8; j++) {
+ fw[j*6+0] = fw0[j*2+0];
fw[j*6+1] = (sign < 0) ? fw0[j*2+1] : -fw0[j*2+1];
fw[j*6+2] = fw1[j*2+0];
fw[j*6+3] = (sign < 0) ? fw1[j*2+1] : -fw1[j*2+1];
@@ -409,13 +358,14 @@ static int ffts_generate_luts(ffts_plan_t *p, size_t N, size_t leaf_N, int sign)
#endif
w += n/8 * 3;
#else
- //w = FFTS_MALLOC(n/8 * 3 * 2 * sizeof(ffts_cpx_32f), 32);
for (j = 0; j < n/8; j += 2) {
+ V4SF temp0, temp1, temp2, re, im;
+
temp0 = V4SF_LD(fw0 + j*2);
re = V4SF_DUPLICATE_RE(temp0);
im = V4SF_DUPLICATE_IM(temp0);
im = V4SF_XOR(im, MULI_SIGN);
- V4SF_ST(fw + j*2*6 , re);
+ V4SF_ST(fw + j*2*6+0, re);
V4SF_ST(fw + j*2*6+4, im);
temp1 = V4SF_LD(fw1 + j*2);
@@ -440,7 +390,6 @@ static int ffts_generate_luts(ffts_plan_t *p, size_t N, size_t leaf_N, int sign)
FFTS_FREE(w1);
FFTS_FREE(w2);
}
- ///p->ws[i] = w;
n *= 2;
}
@@ -465,7 +414,8 @@ cleanup:
return -1;
}
-ffts_plan_t *ffts_init_1d(size_t N, int sign)
+ffts_plan_t*
+ffts_init_1d(size_t N, int sign)
{
const size_t leaf_N = 8;
ffts_plan_t *p;
@@ -484,10 +434,10 @@ ffts_plan_t *ffts_init_1d(size_t N, int sign)
p->N = N;
if (N >= 32) {
- /* generate lookup tables */
- if (ffts_generate_luts(p, N, leaf_N, sign)) {
- goto cleanup;
- }
+ /* generate lookup tables */
+ if (ffts_generate_luts(p, N, leaf_N, sign)) {
+ goto cleanup;
+ }
p->offsets = ffts_init_offsets(N, leaf_N);
if (!p->offsets) {
@@ -518,7 +468,7 @@ ffts_plan_t *ffts_init_1d(size_t N, int sign)
}
#else
/* determinate transform size */
-#if defined(__arm__) && !defined(DYNAMIC_DISABLED)
+#if defined(__arm__)
if (N < 8192) {
p->transform_size = 8192;
} else {
@@ -538,7 +488,6 @@ ffts_plan_t *ffts_init_1d(size_t N, int sign)
goto cleanup;
}
-
/* generate code */
p->transform = ffts_generate_func_code(p, N, leaf_N, sign);
if (!p->transform) {
OpenPOWER on IntegriCloud