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 }