Mercurial > hg > peckfft
comparison peck_test.c @ 4:2d6c49fcafcb
neon2 and neon4 support
author | Peter Meerwald <p.meerwald@bct-electronic.com> |
---|---|
date | Fri, 16 Sep 2011 14:04:19 +0200 |
parents | 723f588b82ac |
children | 707be088ccc3 |
comparison
equal
deleted
inserted
replaced
3:3b31bd44a09f | 4:2d6c49fcafcb |
---|---|
23 | 23 |
24 int main(int argc, char *argv[]) { | 24 int main(int argc, char *argv[]) { |
25 unsigned int i, j; | 25 unsigned int i, j; |
26 peck_fftr_cfg p, pi; | 26 peck_fftr_cfg p, pi; |
27 | 27 |
28 enable_runfast(); | 28 // enable_runfast(); |
29 | 29 |
30 const unsigned int N = 256; | 30 const unsigned int N = 256; |
31 | 31 |
32 peck_fft_scalar in[N]; | 32 peck_fft_scalar in[N]; |
33 peck_fft_cpx out[N/2 + 1]; | 33 peck_fft_cpx out[N/2 + 1]; |
34 peck_fft_scalar res[N]; | 34 peck_fft_scalar res[N]; |
35 | 35 |
36 for (i = 0; i < N; i++) { | 36 for (i = 0; i < N; i++) { |
37 #if USE_SIMD == SIMD_SSE2 | |
38 in[i] = _mm_set1_ps((i % 13) / 3); | |
39 #elif USE_SIMD == SIMD_NEON4 | |
40 in[i] = vdupq_n_f32((i % 13) / 3); | |
41 #elif USE_SIMD == SIMD_NEON2 | |
42 in[i] = vdup_n_f32((i % 13) / 3); | |
43 #else | |
37 in[i] = (i % 13) / 3; | 44 in[i] = (i % 13) / 3; |
45 #endif | |
38 } | 46 } |
39 | 47 |
40 p = peck_fftr_alloc(N, 0, NULL, NULL); | 48 p = peck_fftr_alloc(N, 0, NULL, NULL); |
41 pi = peck_fftr_alloc(N, 1, NULL, NULL); | 49 pi = peck_fftr_alloc(N, 1, NULL, NULL); |
42 | 50 |
43 for (j = 0; j < 10000; j++) { | 51 for (j = 0; j < 10000; j++) { |
44 if (j == 0) { | 52 if (j == 0) { |
45 for (i = 0; i < 8; i++) | 53 for (i = 0; i < 8; i++) |
46 printf("%d: %f\n", i, in[i]); | 54 printf("%d: %f\n", i, *(float*)&in[i]); |
47 printf("----\n"); | 55 printf("----\n"); |
48 } | 56 } |
49 | 57 |
50 peck_fftr(p, in, out); | 58 peck_fftr(p, in, out); |
51 | 59 |
52 if (j == 0) { | 60 if (j == 0) { |
53 for (i = 0; i < 8; i++) | 61 for (i = 0; i < 8; i++) |
54 printf("%d: %f %f\n", i, out[i].r, out[i].i); | 62 printf("%d: %f %f\n", i, *(float*)&out[i].r, *(float*)&out[i].i); |
55 printf("----\n"); | 63 printf("----\n"); |
56 } | 64 } |
57 | 65 |
58 peck_fftri(pi, out, res); | 66 peck_fftri(pi, out, res); |
59 | 67 |
60 if (j == 0) { | 68 if (j == 0) { |
61 for (i = 0; i < 8; i++) | 69 for (i = 0; i < 8; i++) |
62 printf("%d: %f\n", i, res[i] / N); | 70 printf("%d: %f\n", i, *(float*)&res[i] / N); |
63 } | 71 } |
64 } | 72 } |
65 peck_fftr_free(p); | 73 peck_fftr_free(p); |
66 peck_fftr_free(pi); | 74 peck_fftr_free(pi); |
67 peck_fft_cleanup(); | 75 peck_fft_cleanup(); |
68 | 76 |
69 for (i = 0; i < N; i++) { | 77 for (i = 0; i < N; i++) { |
70 if (fabs(in[i] - res[i]/N) > 0.00001) { | 78 if (fabs(*(float*)&in[i] - *(float*)&res[i]/N) > 0.00001) { |
71 fprintf(stderr, "!!!! ERROR !!!! at %d\n", i); | 79 fprintf(stderr, "!!!! ERROR !!!! at %d\n", i); |
72 exit(EXIT_FAILURE); | 80 exit(EXIT_FAILURE); |
73 } | 81 } |
74 } | 82 } |
75 | 83 |