1 #include "PRE"
2 
scaler2(real * a)3 void scaler2(real *a)
4 {
5   register real t1, t2;
6 
7   t1 = a[0] * 0.5;
8   t2 = a[1] * 0.5;
9   a[0] = t1;
10   a[1] = t2;
11 }
12 
13 /* n multiple of 4, n >= 4 */
scaler(register real * a,register unsigned int n,register real u)14 void scaler(register real *a,register unsigned int n,register real u)
15 {
16   register real t1, t2, t3, t4;
17 
18   t1 = a[0] * u;
19   t2 = a[1] * u;
20   u += u;
21   a[0] = t1;
22   t3 = a[2] * u;
23   t4 = a[3] * u;
24   a[1] = t2;
25   a[2] = t3;
26   a[3] = t4;
27 
28   while (n -= 4) {
29     t1 = a[4] * u;
30     t2 = a[5] * u;
31     t3 = a[6] * u;
32     t4 = a[7] * u;
33     a[4] = t1;
34     a[6] = t3;
35     a[5] = t2;
36     a[7] = t4;
37     a += 4;
38   }
39 }
40 
scaler4(real * a)41 void scaler4(real *a) { scaler(a,4,0.25); }
scaler8(real * a)42 void scaler8(real *a) { scaler(a,8,0.125); }
scaler16(real * a)43 void scaler16(real *a) { scaler(a,16,0.0625); }
scaler32(real * a)44 void scaler32(real *a) { scaler(a,32,0.03125); }
scaler64(real * a)45 void scaler64(real *a) { scaler(a,64,0.015625); }
scaler128(real * a)46 void scaler128(real *a) { scaler(a,128,0.0078125); }
scaler256(real * a)47 void scaler256(real *a) { scaler(a,256,0.00390625); }
scaler512(real * a)48 void scaler512(real *a) { scaler(a,512,0.001953125); }
scaler1024(real * a)49 void scaler1024(real *a) { scaler(a,1024,0.0009765625); }
scaler2048(real * a)50 void scaler2048(real *a) { scaler(a,2048,0.00048828125); }
scaler4096(real * a)51 void scaler4096(real *a) { scaler(a,4096,0.000244140625); }
scaler8192(real * a)52 void scaler8192(real *a) { scaler(a,8192,0.0001220703125); }
53