summaryrefslogtreecommitdiff
path: root/test/c
diff options
context:
space:
mode:
authorGravatar xleroy <xleroy@fca1b0fc-160b-0410-b1d3-a4f43f01ea2e>2006-09-07 15:30:24 +0000
committerGravatar xleroy <xleroy@fca1b0fc-160b-0410-b1d3-a4f43f01ea2e>2006-09-07 15:30:24 +0000
commit593ce3f7c5647e284cd2fdc3dd3ed41be9563982 (patch)
tree6ec1df325b89bb0c320023861118549deb9a9e71 /test/c
parentfa7415be2fe9b240374f0a51c1cd4a9de5376c5a (diff)
Integration du front-end CIL developpe par Thomas Moniot
git-svn-id: https://yquem.inria.fr/compcert/svn/compcert/trunk@84 fca1b0fc-160b-0410-b1d3-a4f43f01ea2e
Diffstat (limited to 'test/c')
-rw-r--r--test/c/fft.c140
1 files changed, 62 insertions, 78 deletions
diff --git a/test/c/fft.c b/test/c/fft.c
index 6f24af5..9edf427 100644
--- a/test/c/fft.c
+++ b/test/c/fft.c
@@ -9,11 +9,6 @@
#define PI 3.14159265358979323846
#endif
-extern double cos_static(double), sin_static(double);
-
-#define cos cos_static
-#define sin sin_static
-
/********************************************************/
/* A Duhamel-Hollman split-radix dif fft */
/* Ref: Electronics Letters, Jan. 5, 1984 */
@@ -23,9 +18,9 @@ extern double cos_static(double), sin_static(double);
int dfft(double x[], double y[], int np)
{
-double *px,*py;
-int i,j,k,m,n,i0,i1,i2,i3,is,id,n1,n2,n4;
-double a,e,a3,cc1,ss1,cc3,ss3,r1,r2,s1,s2,s3,xt,tpi;
+ double *px,*py;
+ int i,j,k,m,n,i0,i1,i2,i3,is,id,n1,n2,n4;
+ double a,e,a3,cc1,ss1,cc3,ss3,r1,r2,s1,s2,s3,xt,tpi;
px = x - 1;
py = y - 1;
@@ -34,33 +29,29 @@ double a,e,a3,cc1,ss1,cc3,ss3,r1,r2,s1,s2,s3,xt,tpi;
while (i < np)
{
- i = i+i;
- m = m+1;
+ i = i+i;
+ m = m+1;
}
n = i;
- if (n != np)
- {
- for (i = np+1; i <= n; i++)
- {
- *(px + i) = 0.0;
- *(py + i) = 0.0;
- }
- /*printf("nuse %d point fft",n); */
+ if (n != np) {
+ for (i = np+1; i <= n; i++) {
+ px[i] = 0.0;
+ py[i] = 0.0;
+ }
+ /*printf("nuse %d point fft",n); */
}
n2 = n+n;
tpi = 2.0 * PI;
- for (k = 1; k <= m-1; k++ )
- {
+ for (k = 1; k <= m-1; k++ ) {
n2 = n2 / 2;
n4 = n2 / 4;
e = tpi / (double)n2;
a = 0.0;
-
- for (j = 1; j<= n4 ; j++)
- {
+
+ for (j = 1; j<= n4 ; j++) {
a3 = 3.0 * a;
cc1 = cos(a);
ss1 = sin(a);
@@ -71,85 +62,78 @@ double a,e,a3,cc1,ss1,cc3,ss3,r1,r2,s1,s2,s3,xt,tpi;
is = j;
id = 2 * n2;
- while ( is < n )
- {
- for (i0 = is; i0 <= n-1; i0 = i0 + id)
- {
- i1 = i0 + n4;
- i2 = i1 + n4;
- i3 = i2 + n4;
- r1 = *(px+i0) - *(px+i2);
- *(px+i0) = *(px+i0) + *(px+i2);
- r2 = *(px+i1) - *(px+i3);
- *(px+i1) = *(px+i1) + *(px+i3);
- s1 = *(py+i0) - *(py+i2);
- *(py+i0) = *(py+i0) + *(py+i2);
- s2 = *(py+i1) - *(py+i3);
- *(py+i1) = *(py+i1) + *(py+i3);
- s3 = r1 - s2; r1 = r1 + s2;
- s2 = r2 - s1; r2 = r2 + s1;
- *(px+i2) = r1*cc1 - s2*ss1;
- *(py+i2) = -s2*cc1 - r1*ss1;
- *(px+i3) = s3*cc3 + r2*ss3;
- *(py+i3) = r2*cc3 - s3*ss3;
- }
- is = 2 * id - n2 + j;
- id = 4 * id;
- }
+ while ( is < n ) {
+ for (i0 = is; i0 <= n-1; i0 = i0 + id) {
+ i1 = i0 + n4;
+ i2 = i1 + n4;
+ i3 = i2 + n4;
+ r1 = px[i0] - px[i2];
+ px[i0] = px[i0] + px[i2];
+ r2 = px[i1] - px[i3];
+ px[i1] = px[i1] + px[i3];
+ s1 = py[i0] - py[i2];
+ py[i0] = py[i0] + py[i2];
+ s2 = py[i1] - py[i3];
+ py[i1] = py[i1] + py[i3];
+ s3 = r1 - s2; r1 = r1 + s2;
+ s2 = r2 - s1; r2 = r2 + s1;
+ px[i2] = r1*cc1 - s2*ss1;
+ py[i2] = -s2*cc1 - r1*ss1;
+ px[i3] = s3*cc3 + r2*ss3;
+ py[i3] = r2*cc3 - s3*ss3;
+ }
+ is = 2 * id - n2 + j;
+ id = 4 * id;
+ }
}
}
-
+
/************************************/
/* Last stage, length=2 butterfly */
/************************************/
is = 1;
id = 4;
- while ( is < n)
- {
- for (i0 = is; i0 <= n; i0 = i0 + id)
- {
+ while ( is < n) {
+ for (i0 = is; i0 <= n; i0 = i0 + id) {
i1 = i0 + 1;
- r1 = *(px+i0);
- *(px+i0) = r1 + *(px+i1);
- *(px+i1) = r1 - *(px+i1);
- r1 = *(py+i0);
- *(py+i0) = r1 + *(py+i1);
- *(py+i1) = r1 - *(py+i1);
- }
- is = 2*id - 1;
- id = 4 * id;
+ r1 = px[i0];
+ px[i0] = r1 + px[i1];
+ px[i1] = r1 - px[i1];
+ r1 = py[i0];
+ py[i0] = r1 + py[i1];
+ py[i1] = r1 - py[i1];
+ }
+ is = 2*id - 1;
+ id = 4 * id;
}
-
+
/*************************/
/* Bit reverse counter */
/*************************/
j = 1;
n1 = n - 1;
- for (i = 1; i <= n1; i++)
- {
- if (i < j)
- {
- xt = *(px+j);
- *(px+j) = *(px+i);
- *(px+i) = xt;
- xt = *(py+j);
- *(py+j) = *(py+i);
- *(py+i) = xt;
+ for (i = 1; i <= n1; i++) {
+ if (i < j) {
+ xt = px[j];
+ px[j] = px[i];
+ px[i] = xt;
+ xt = py[j];
+ py[j] = py[i];
+ py[i] = xt;
}
k = n / 2;
- while (k < j)
- {
- j = j - k;
- k = k / 2;
+ while (k < j) {
+ j = j - k;
+ k = k / 2;
}
j = j + k;
}
/*
- for (i = 1; i<=16; i++) printf("%d %g %gn",i,*(px+i),(py+i));
+ for (i = 1; i<=16; i++) printf("%d %g %gn",i,px[i],py[i]);
*/
return(n);