home *** CD-ROM | disk | FTP | other *** search
- .file "poly_div.S"
- /*---------------------------------------------------------------------------+
- | poly_div.S |
- | |
- | A set of functions to divide 64 bit integers by fixed numbers. |
- | |
- | 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 poly_div2(unsigned long long *x) |
- | void poly_div4(unsigned long long *x) |
- | void poly_div16(unsigned long long *x) |
- | |
- +---------------------------------------------------------------------------*/
-
- #include "fpu_asm.h"
-
- .text
-
- /*---------------------------------------------------------------------------*/
- .align 2,144
- .globl _poly_div2
- _poly_div2:
- pushl %ebp
- movl %esp,%ebp
-
- movl PARAM1,%ecx
- movw (%ecx),%ax
-
- shrl $1,4(%ecx)
- rcrl $1,(%ecx)
-
- testw $1,%ax
- je poly_div2_exit
-
- addl $1,(%ecx)
- adcl $0,4(%ecx)
- poly_div2_exit:
-
- leave
- ret
- /*---------------------------------------------------------------------------*/
- .align 2,144
- .globl _poly_div4
- _poly_div4:
- pushl %ebp
- movl %esp,%ebp
-
- movl PARAM1,%ecx
- movw (%ecx),%ax
-
- movl 4(%ecx),%edx
- shll $30,%edx
-
- shrl $2,4(%ecx)
- shrl $2,(%ecx)
-
- orl %edx,(%ecx)
-
- testw $2,%ax
- je poly_div4_exit
-
- addl $1,(%ecx)
- adcl $0,4(%ecx)
- poly_div4_exit:
-
- leave
- ret
- /*---------------------------------------------------------------------------*/
- .align 2,144
- .globl _poly_div16
- _poly_div16:
- pushl %ebp
- movl %esp,%ebp
-
- movl PARAM1,%ecx
- movw (%ecx),%ax
-
- movl 4(%ecx),%edx
- shll $28,%edx
-
- shrl $4,4(%ecx)
- shrl $4,(%ecx)
-
- orl %edx,(%ecx)
-
- testw $8,%ax
- je poly_div16_exit
-
- addl $1,(%ecx)
- adcl $0,4(%ecx)
- poly_div16_exit:
-
- leave
- ret
- /*---------------------------------------------------------------------------*/
-