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
25 .globl _mpvecdigmuladd
28 pushl %ebp /* save on stack */
33 leal 20(%esp), %ebp /* %ebp = FP for now */
34 movl 0(%ebp), %esi /* b */
35 movl 4(%ebp), %ecx /* n */
36 movl 8(%ebp), %ebx /* m */
37 movl 12(%ebp), %edi /* p */
39 negl %ebp /* BP = -n */
41 addl %ecx, %esi /* SI = b + n */
42 addl %ecx, %edi /* DI = p + n */
45 movl (%esi, %ebp, 4), %eax /* lo = b[i] */
46 mull %ebx /* hi, lo = b[i] * m */
47 addl %ecx,%eax /* lo += oldhi */
49 incl %edx /* hi += carry */
51 addl %eax, (%edi, %ebp, 4) /* p[i] += lo */
53 incl %edx /* hi += carry */
55 movl %edx, %ecx /* oldhi = hi */
59 addl %ecx, (%edi, %ebp, 4) /* p[n] + oldhi */
60 adcl %eax, %eax /* return carry out of p[n] */