1 /* mpvecsub(mpdigit *a, int alen, mpdigit *b, int blen, mpdigit *diff) */
2 /* diff[0:alen-1] = a[0:alen-1] - b[0:blen-1] */
3 /* prereq: alen >= blen, diff has room for alen digits */
4 /* (very old gnu assembler doesn't allow multiline comments) */
10 .type mpvecsub, @function
14 movl %ebx, -4(%esp) /* save on stack */
18 movl 8(%esp), %esi /* a */
19 movl 16(%esp), %ebx /* b */
20 movl 12(%esp), %edx /* alen */
21 movl 20(%esp), %ecx /* blen */
22 movl 24(%esp), %edi /* diff */
24 xorl %ebp,%ebp /* this also sets carry to 0 */
26 /* skip subraction if b is zero */
30 /* diff[0:blen-1],borrow = a[0:blen-1] - b[0:blen-1] */
32 movl (%esi, %ebp, 4), %eax
33 sbbl (%ebx, %ebp, 4), %eax
34 movl %eax, (%edi, %ebp, 4)
44 /* diff[blen:alen-1] = a[blen:alen-1] - 0 */
46 movl (%esi, %ebp, 4), %eax
48 movl %eax, (%edi, %ebp, 4)
54 movl -4(%esp), %ebx /* restore from stack */