]> git.wh0rd.org Git - ICEs.git/blob - 152043/fp_mul_comba.c.1
initial import
[ICEs.git] / 152043 / fp_mul_comba.c.1
1 #define FP_SIZE \
2 ((4096+(4*(int)((8) * sizeof(fp_digit))))/(int)((8) * sizeof(fp_digit)))
3
4 typedef unsigned long fp_digit;
5 typedef struct {
6     fp_digit dp[FP_SIZE];
7     int      used, 
8              sign;
9 } fp_int;
10
11 #define MULADD(i, j)                                      \
12 asm(                                                     \
13      "movl  %6,%%eax     \n\t"                            \
14      "mull  %7           \n\t"                            \
15      "addl  %%eax,%0     \n\t"                            \
16      "adcl  %%edx,%1     \n\t"                            \
17      "adcl  $0,%2        \n\t"                            \
18      :"=r"(c0), "=r"(c1), "=r"(c2): "0"(c0), "1"(c1), "2"(c2), "m"(i), "m"(j)  :"%eax","%edx","%cc");
19
20 void fp_mul_comba(fp_int *A, fp_int *B, fp_int *C)
21 {
22    int       ix, iy, iz, tx, ty, pa;
23    fp_digit  c0, c1, c2, *tmpx, *tmpy;
24    fp_int    tmp, *dst;
25    for (ix = 0; ix < pa; ix++)
26       for (iz = 0; iz < iy; ++iz)
27           MULADD(*tmpx++, *tmpy--);
28 }