1 #include "PRE"
2
mulr2(real * a,real * b)3 void mulr2(real *a,real *b)
4 {
5 register real t1, t2;
6
7 t1 = a[0] * b[0];
8 t2 = a[1] * b[1];
9 a[0] = t1;
10 a[1] = t2;
11 }
12
mulr4(real * a,real * b)13 void mulr4(real *a,real *b)
14 {
15 register real t1, t2, t3, t4, t5, t6;
16
17 t1 = a[2] * b[2];
18 t2 = a[3] * b[3];
19 t3 = a[3] * b[2];
20 t4 = a[2] * b[3];
21 t5 = a[0] * b[0];
22 t6 = a[1] * b[1];
23 t1 -= t2;
24 t3 += t4;
25 a[0] = t5;
26 a[1] = t6;
27 a[2] = t1;
28 a[3] = t3;
29 }
30
31 /* n multiple of 4, n >= 8 */
mulr(register real * a,register real * b,register unsigned int n)32 void mulr(register real *a,register real *b,register unsigned int n)
33 {
34 mulr4(a,b);
35 mulc((complex *)(a + 4),(complex *)(b + 4),(n - 4) / 2);
36 }
37
mulr8(real * a,real * b)38 void mulr8(real *a,real *b) { mulr(a,b,8); }
mulr16(real * a,real * b)39 void mulr16(real *a,real *b) { mulr(a,b,16); }
mulr32(real * a,real * b)40 void mulr32(real *a,real *b) { mulr(a,b,32); }
mulr64(real * a,real * b)41 void mulr64(real *a,real *b) { mulr(a,b,64); }
mulr128(real * a,real * b)42 void mulr128(real *a,real *b) { mulr(a,b,128); }
mulr256(real * a,real * b)43 void mulr256(real *a,real *b) { mulr(a,b,256); }
mulr512(real * a,real * b)44 void mulr512(real *a,real *b) { mulr(a,b,512); }
mulr1024(real * a,real * b)45 void mulr1024(real *a,real *b) { mulr(a,b,1024); }
mulr2048(real * a,real * b)46 void mulr2048(real *a,real *b) { mulr(a,b,2048); }
mulr4096(real * a,real * b)47 void mulr4096(real *a,real *b) { mulr(a,b,4096); }
mulr8192(real * a,real * b)48 void mulr8192(real *a,real *b) { mulr(a,b,8192); }
49