2 * mpvecdigmulsub(mpdigit *b, int n, mpdigit m, mpdigit *p)
14 * hi = DX - constrained by hardware
15 * lo = AX - constrained by hardware
16 * b = SI - can't be BP
17 * p = DI - can't be BP
19 * n = CX - constrained by LOOP instr
26 /* XXX: had to use "-4(%esp)" kludge to get around inability to
27 * push/pop without first adjusting %esp. This may not be
28 * as fast as using push/pop (and accessing pushed element
34 .type mpvecdigmulsub, @function
38 movl %ebx, -8(%esp) /* save on stack */
42 movl 8(%esp), %esi /* b */
43 movl 12(%esp), %ecx /* n */
44 movl 16(%esp), %ebx /* m */
45 movl 20(%esp), %edi /* p */
49 movl (%esi, %ebp, 4),%eax /* lo = b[i] */
50 mull %ebx /* hi, lo = b[i] * m */
51 addl -4(%esp), %eax /* lo += oldhi */
53 incl %edx /* hi += carry */
55 subl %eax, (%edi, %ebp, 4)
57 incl %edx /* hi += carry */
63 subl %eax, (%edi, %ebp, 4)
73 movl -8(%esp), %ebx /* restore from stack */