modernc.org/ccgo/v3@v3.16.14/lib/testdata/CompCert-3.6/test/c/fftw.c (about)

     1  /* FFT test generated by FFTW */
     2  
     3  #include <stdio.h>
     4  
     5  typedef long int INT;
     6  typedef double R;
     7  typedef R E;
     8  typedef INT *stride;
     9  
    10  /* Generated by: ../../../genfft/gen_r2r.native -compact -variables 4 -pipeline-
    11  latency 4 -redft01 -n 8 -name e01_8 -include r2r.h */
    12  void e01_8(const R *I, R *O, stride is, stride os, INT v, INT ivs, INT ovs)
    13  {
    14  const E KP1_662939224 = ((E) +1.662939224605090474157576755235811513477121624);
    15  const E KP1_111140466 = ((E) +1.111140466039204449485661627897065748749874382);
    16  const E KP390180644 = ((E) +0.390180644032256535696569736954044481855383236);
    17  const E KP1_961570560 = ((E) +1.961570560806460898252364472268478073947867462);
    18  const E KP707106781 = ((E) +0.707106781186547524400844362104849039284835938);
    19  const E KP1_414213562 = ((E) +1.414213562373095048801688724209698078569671875);
    20  const E KP765366864 = ((E) +0.765366864730179543456919968060797733522689125);
    21  const E KP1_847759065 = ((E) +1.847759065022573512256366378793576573644833252);
    22    INT i;
    23    for (i = v; i > 0; i = i - 1, I = I + ivs, O = O + ovs) {
    24      E T7, Tl, T4, Tk, Td, To, Tg, Tn;
    25      {
    26        E T5, T6, T1, T3, T2;
    27        T5 = I[(is[2])];
    28        T6 = I[(is[6])];
    29        T7 = (((KP1_847759065) * (T5)) + (KP765366864 * T6));
    30        Tl = ((KP765366864 * T5) - ((KP1_847759065) * (T6)));
    31        T1 = I[0];
    32        T2 = I[(is[4])];
    33        T3 = KP1_414213562 * T2;
    34        T4 = T1 + T3;
    35        Tk = T1 - T3;
    36        {
    37      E T9, Tf, Tc, Te, Ta, Tb;
    38      T9 = I[(is[1])];
    39      Tf = I[(is[7])];
    40      Ta = I[(is[5])];
    41      Tb = I[(is[3])];
    42      Tc = KP707106781 * (Ta + Tb);
    43      Te = KP707106781 * (Ta - Tb);
    44      Td = T9 + Tc;
    45      To = Te + Tf;
    46      Tg = Te - Tf;
    47      Tn = T9 - Tc;
    48        }
    49          }
    50          {
    51        E T8, Th, Tq, Tr;
    52        T8 = T4 + T7;
    53        Th = ((KP1_961570560 * Td) - ((KP390180644) * (Tg)));
    54        O[(os[7])] = T8 - Th;
    55        O[0] = T8 + Th;
    56        Tq = Tk - Tl;
    57        Tr = (((KP1_111140466) * (Tn)) + (KP1_662939224 * To));
    58        O[(os[5])] = Tq - Tr;
    59        O[(os[2])] = Tq + Tr;
    60          }
    61          {
    62        E Ti, Tj, Tm, Tp;
    63        Ti = T4 - T7;
    64        Tj = (((KP390180644) * (Td)) + (KP1_961570560 * Tg));
    65        O[(os[4])] = Ti - Tj;
    66        O[(os[3])] = Ti + Tj;
    67        Tm = Tk + Tl;
    68        Tp = ((KP1_662939224 * Tn) - ((KP1_111140466) * (To)));
    69        O[(os[6])] = Tm - Tp;
    70        O[(os[1])] = Tm + Tp;
    71          }
    72     }
    73  }
    74  
    75  /* Test harness */
    76  
    77  #define NRUNS (100 * 1000)
    78  
    79  int main()
    80  {
    81  	static INT s[8] = { 0,1,2,3,4,5,6,7 };
    82  	static R i[1024];
    83  	static R o[1024];
    84  	int k;
    85  	for (k = 0; k < 1024; ++k) i[k] = k;
    86  	for (k = 0; k < NRUNS; ++k)
    87  		e01_8(i, o, s, s, 64, 8, 8);
    88          for (k = 0; k < 16; ++k)
    89            printf("o[%d] = %.6e\n", k, o[k]);
    90  	return 0;
    91  }