2 * mpvecdigmul(mpdigit *b, int n, mpdigit m, mpdigit *p)
14 * hi = DX - constrained by hardware
15 * lo = AX - constrained by hardware
16 * b+n = SI - can't be BP
17 * p+n = DI - can't be BP
29 pushl %ebp /* save on stack */
34 leal 20(%esp), %ebp /* %ebp = FP for now */
35 movl 0(%ebp), %esi /* b */
36 movl 4(%ebp), %ecx /* n */
37 movl 8(%ebp), %ebx /* m */
38 movl 12(%ebp), %edi /* p */
40 negl %ebp /* BP = -n */
42 addl %ecx, %esi /* SI = b + n */
43 addl %ecx, %edi /* DI = p + n */
46 movl (%esi, %ebp, 4), %eax /* lo = b[i] */
47 mull %ebx /* hi, lo = b[i] * m */
48 addl %ecx,%eax /* lo += oldhi */
50 incl %edx /* hi += carry */
52 addl %eax, (%edi, %ebp, 4) /* p[i] += lo */
54 incl %edx /* hi += carry */
56 movl %edx, %ecx /* oldhi = hi */
60 addl %ecx, (%edi, %ebp, 4) /* p[n] + oldhi */
61 adcl %eax, %eax /* return carry out of p[n] */