aboutsummaryrefslogtreecommitdiff
path: root/src/libmp/386/mpvecdigmulsub-Darwin.s
diff options
context:
space:
mode:
Diffstat (limited to 'src/libmp/386/mpvecdigmulsub-Darwin.s')
-rw-r--r--src/libmp/386/mpvecdigmulsub-Darwin.s69
1 files changed, 0 insertions, 69 deletions
diff --git a/src/libmp/386/mpvecdigmulsub-Darwin.s b/src/libmp/386/mpvecdigmulsub-Darwin.s
deleted file mode 100644
index 8f7f4d68..00000000
--- a/src/libmp/386/mpvecdigmulsub-Darwin.s
+++ /dev/null
@@ -1,69 +0,0 @@
-/*
- * mpvecdigmulsub(mpdigit *b, int n, mpdigit m, mpdigit *p)
- *
- * p -= b*m
- *
- * each step look like:
- * hi,lo = m*b[i]
- * lo += oldhi + carry
- * hi += carry
- * p[i] += lo
- * oldhi = hi
- *
- * the registers are:
- * hi = DX - constrained by hardware
- * lo = AX - constrained by hardware
- * b = SI - can't be BP
- * p = DI - can't be BP
- * i = BP
- * n = CX - constrained by LOOP instr
- * m = BX
- * oldhi = EX
- *
- */
-.text
-
-.globl _mpvecdigmulsub
-_mpvecdigmulsub:
- /* Prelude */
- pushl %ebp /* save on stack */
- pushl %ebx
- pushl %esi
- pushl %edi
-
- leal 20(%esp), %ebp /* %ebp = FP for now */
- movl 0(%ebp), %esi /* b */
- movl 4(%ebp), %ecx /* n */
- movl 8(%ebp), %ebx /* m */
- movl 12(%ebp), %edi /* p */
- xorl %ebp, %ebp
- pushl %ebp
-1:
- movl (%esi, %ebp, 4),%eax /* lo = b[i] */
- mull %ebx /* hi, lo = b[i] * m */
- addl 0(%esp), %eax /* lo += oldhi */
- jae 2f
- incl %edx /* hi += carry */
-2:
- subl %eax, (%edi, %ebp, 4)
- jae 3f
- incl %edx /* hi += carry */
-3:
- movl %edx, 0(%esp)
- incl %ebp
- loop 1b
- popl %eax
- subl %eax, (%edi, %ebp, 4)
- jae 4f
- movl $-1, %eax
- jmp 5f
-4:
- movl $1, %eax
-5:
- /* Postlude */
- popl %edi
- popl %esi
- popl %ebx
- popl %ebp
- ret
-