home *** CD-ROM | disk | FTP | other *** search
- /*---------------------------------------------------------------------------+
- | poly_mul64.S |
- | |
- | Multiply two 64 bit integers. |
- | |
- | Copyright (C) 1992 W. Metzenthen, 22 Parker St, Ormond, Vic 3163, |
- | Australia. E-mail billm@vaxc.cc.monash.edu.au |
- | |
- | Call from C as: |
- | void mul64(long long *a, long long *b, long long *result) |
- | |
- +---------------------------------------------------------------------------*/
-
-
- #include "fpu_asm.h"
-
- .text
- .align 2,144
- .globl _mul64
- _mul64:
- pushl %ebp
- movl %esp,%ebp
- subl $16,%esp
- pushl %esi
- pushl %ebx
-
- movl PARAM1,%esi
- movl PARAM2,%ecx
- movl PARAM3,%ebx
-
- xor %eax,%eax
- movl %eax,-4(%ebp)
- movl %eax,-8(%ebp)
-
- movl (%esi),%eax
- mull (%ecx)
- movl %eax,-16(%ebp) /* Not used */
- movl %edx,-12(%ebp)
-
- movl (%esi),%eax
- mull 4(%ecx)
- addl %eax,-12(%ebp)
- adcl %edx,-8(%ebp)
- adcl $0,-4(%ebp)
-
- movl 4(%esi),%eax
- mull (%ecx)
- addl %eax,-12(%ebp)
- adcl %edx,-8(%ebp)
- adcl $0,-4(%ebp)
-
- movl 4(%esi),%eax
- mull 4(%ecx)
- addl %eax,-8(%ebp)
- adcl %edx,-4(%ebp)
-
- testb $128,-9(%ebp)
- je L_no_round
-
- addl $1,-8(%ebp)
- adcl $0,-4(%ebp)
-
- L_no_round:
- movl -8(%ebp),%esi
- movl %esi,(%ebx)
- movl -4(%ebp),%esi
- movl %esi,4(%ebx)
-
- popl %ebx
- popl %esi
- leave
- ret
-