1 2 extern void cpass(complex *,const complex *,unsigned int); 3 extern void cpassbig(complex *,const complex *,unsigned int); 4 extern void upass(complex *,const complex *,unsigned int); 5 extern void upassbig(complex *,const complex *,unsigned int); 6 extern void rpass(real *,const complex *,unsigned int); 7 extern void rpassbig(real *,const complex *,unsigned int); 8 extern void vpass(real *,const complex *,unsigned int); 9 extern void vpassbig(real *,const complex *,unsigned int); 10 11 extern const complex d16[]; 12 extern const complex d32[]; 13 extern const complex d64[]; 14 extern const complex d128[]; 15 extern const complex d256[]; 16 extern const complex d512[]; 17 extern const complex d1024[]; 18 extern const complex d2048[]; 19 extern const complex d4096[]; 20 extern const complex d8192[]; 21 extern const complex d16384[]; 22 extern const complex d32768[]; 23 extern const complex d65536[]; 24 25 #define sqrthalf (d16[1].re) 26 27 #define TRANSFORM(a0,a1,a2,a3,wre,wim) { \ 28 t1 = a0.re - a2.re; \ 29 t2 = a0.im - a2.im; \ 30 t3 = a1.re - a3.re; \ 31 t4 = a1.im - a3.im; \ 32 a0.re += a2.re; \ 33 a0.im += a2.im; \ 34 a1.re += a3.re; \ 35 a1.im += a3.im; \ 36 t5 = t1 - t4; \ 37 t6 = t2 + t3; \ 38 t7 = t1 + t4; \ 39 t8 = t2 - t3; \ 40 a2.re = t5 * wre - t6 * wim; \ 41 a2.im = t6 * wre + t5 * wim; \ 42 a3.re = t7 * wre + t8 * wim; \ 43 a3.im = t8 * wre - t7 * wim; \ 44 } 45 46 #define TRANSFORMHALF(a0,a1,a2,a3) { \ 47 t1 = a0.re - a2.re; \ 48 t2 = a0.im - a2.im; \ 49 t3 = a1.re - a3.re; \ 50 t4 = a1.im - a3.im; \ 51 a0.re += a2.re; \ 52 a0.im += a2.im; \ 53 a1.re += a3.re; \ 54 a1.im += a3.im; \ 55 t5 = t1 - t4; \ 56 t6 = t2 + t3; \ 57 t7 = t1 + t4; \ 58 t8 = t2 - t3; \ 59 a2.re = (t5 - t6) * sqrthalf; \ 60 a2.im = (t6 + t5) * sqrthalf; \ 61 a3.re = (t7 + t8) * sqrthalf; \ 62 a3.im = (t8 - t7) * sqrthalf; \ 63 } 64 65 #define TRANSFORMZERO(a0,a1,a2,a3) { \ 66 t1 = a0.re - a2.re; \ 67 t2 = a0.im - a2.im; \ 68 t3 = a1.re - a3.re; \ 69 t4 = a1.im - a3.im; \ 70 a0.re += a2.re; \ 71 a0.im += a2.im; \ 72 a1.re += a3.re; \ 73 a1.im += a3.im; \ 74 a2.re = t1 - t4; \ 75 a2.im = t2 + t3; \ 76 a3.re = t1 + t4; \ 77 a3.im = t2 - t3; \ 78 } 79 80 #define UNTRANSFORM(a0,a1,a2,a3,wre,wim) { \ 81 t5 = a2.re * wre + a2.im * wim; \ 82 t6 = a2.im * wre - a2.re * wim; \ 83 t7 = a3.re * wre - a3.im * wim; \ 84 t8 = a3.im * wre + a3.re * wim; \ 85 t1 = t5 + t7; \ 86 t2 = t6 + t8; \ 87 t3 = t6 - t8; \ 88 t4 = t7 - t5; \ 89 a2.re = a0.re - t1; \ 90 a2.im = a0.im - t2; \ 91 a3.re = a1.re - t3; \ 92 a3.im = a1.im - t4; \ 93 a0.re += t1; \ 94 a0.im += t2; \ 95 a1.re += t3; \ 96 a1.im += t4; \ 97 } 98 99 #define UNTRANSFORMHALF(a0,a1,a2,a3) { \ 100 t5 = (a2.re + a2.im) * sqrthalf; \ 101 t6 = (a2.im - a2.re) * sqrthalf; \ 102 t7 = (a3.re - a3.im) * sqrthalf; \ 103 t8 = (a3.im + a3.re) * sqrthalf; \ 104 t1 = t5 + t7; \ 105 t2 = t6 + t8; \ 106 t3 = t6 - t8; \ 107 t4 = t7 - t5; \ 108 a2.re = a0.re - t1; \ 109 a2.im = a0.im - t2; \ 110 a3.re = a1.re - t3; \ 111 a3.im = a1.im - t4; \ 112 a0.re += t1; \ 113 a0.im += t2; \ 114 a1.re += t3; \ 115 a1.im += t4; \ 116 } 117 118 #define UNTRANSFORMZERO(a0,a1,a2,a3) { \ 119 t1 = a2.re + a3.re; \ 120 t2 = a2.im + a3.im; \ 121 t3 = a2.im - a3.im; \ 122 t4 = a3.re - a2.re; \ 123 a2.re = a0.re - t1; \ 124 a2.im = a0.im - t2; \ 125 a3.re = a1.re - t3; \ 126 a3.im = a1.im - t4; \ 127 a0.re += t1; \ 128 a0.im += t2; \ 129 a1.re += t3; \ 130 a1.im += t4; \ 131 } 132 133 #define R(a0,a1,b0,b1,wre,wim) { \ 134 t1 = a0 - a1; \ 135 t2 = b0 - b1; \ 136 t3 = a0 + a1; \ 137 t4 = b0 + b1; \ 138 b0 = t1 * wre - t2 * wim; \ 139 b1 = t2 * wre + t1 * wim; \ 140 a0 = t3; \ 141 a1 = t4; \ 142 } 143 144 #define RHALF(a0,a1,b0,b1) { \ 145 t1 = a0 - a1; \ 146 t2 = b0 - b1; \ 147 t3 = a0 + a1; \ 148 t4 = b0 + b1; \ 149 b0 = (t1 - t2) * sqrthalf; \ 150 b1 = (t2 + t1) * sqrthalf; \ 151 a0 = t3; \ 152 a1 = t4; \ 153 } 154 155 #define RZERO(a0,a1,b0,b1) { \ 156 t1 = a0 - a1; \ 157 t2 = b0 - b1; \ 158 t3 = a0 + a1; \ 159 t4 = b0 + b1; \ 160 b0 = t1; \ 161 b1 = t2; \ 162 a0 = t3; \ 163 a1 = t4; \ 164 } 165 166 #define V(a0,a1,b0,b1,wre,wim) { \ 167 t5 = b0 * wre + b1 * wim; \ 168 t6 = b1 * wre - b0 * wim; \ 169 t1 = a0 + t5; \ 170 t2 = a0 - t5; \ 171 t3 = a1 + t6; \ 172 t4 = a1 - t6; \ 173 a0 = t1; \ 174 a1 = t2; \ 175 b0 = t3; \ 176 b1 = t4; \ 177 } 178 179 #define VHALF(a0,a1,b0,b1) { \ 180 t5 = (b0 + b1) * sqrthalf; \ 181 t6 = (b1 - b0) * sqrthalf; \ 182 t1 = a0 + t5; \ 183 t2 = a0 - t5; \ 184 t3 = a1 + t6; \ 185 t4 = a1 - t6; \ 186 a0 = t1; \ 187 a1 = t2; \ 188 b0 = t3; \ 189 b1 = t4; \ 190 } 191 192 #define VZERO(a0,a1,b0,b1) { \ 193 t1 = a0 + b0; \ 194 t2 = a0 - b0; \ 195 t3 = a1 + b1; \ 196 t4 = a1 - b1; \ 197 a0 = t1; \ 198 a1 = t2; \ 199 b0 = t3; \ 200 b1 = t4; \ 201 } 202 203