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