Grab newer version of udiv of libc/vax. This one was missing audiv().
authorMarc Teitelbaum <marc@ucbvax.Berkeley.EDU>
Fri, 4 Dec 1987 08:40:09 +0000 (00:40 -0800)
committerMarc Teitelbaum <marc@ucbvax.Berkeley.EDU>
Fri, 4 Dec 1987 08:40:09 +0000 (00:40 -0800)
SCCS-vsn: sys/vax/vax/udiv.s 7.2

usr/src/sys/vax/vax/udiv.s

index d31d9cc..d5246d2 100644 (file)
@@ -1,40 +1,77 @@
+#ifdef LIBC_SCCS
+       .asciz  "@(#)udiv.s     7.2 (Berkeley) %G%"
+#endif /*LIBC_SCCS*/
+
 /*
 /*
- *     @(#)udiv.s      7.1 (Berkeley) %G%
+ * udiv - unsigned division for vax-11
  *
  *
- *     udiv - unsigned division for vax-11
+ * arguments: dividend, divisor.
+ * result: quotient.
+ * uses r0-r2
  *
  *
- *     arguments: dividend, divisor.
- *     result: quotient.
- *     uses r0-r2
+ * If 1 < divisor <= 2147483647, zero-extend the dividend
+ * to 64 bits and let ediv do the work.  If the divisor is 1,
+ * ediv will overflow if bit 31 of the dividend is on, so
+ * just return the dividend unchanged.  If the divisor is 0,
+ * do the ediv also, so it will generate the proper exception.
+ * All other values of the divisor have bit 31 on: in this case
+ * the quotient must be 0 if divisor > dividend, and 1 otherwise,
+ * provided that the comparison is made as unsigned.
+ */
+
+#include "DEFS.h"
+
+ASENTRY(udiv, 0)
+       movl    4(ap),r0        /* dividend */
+       movl    8(ap),r2        /* divisor */
+       jeql    1f              /* if divisor=0, force exception */
+       cmpl    r2,$1           /* if divisor <= 1 (signed), */
+       jleq    2f              /*  no division is necessary */
+1:
+       clrl    r1              /* zero-extend the dividend */
+       ediv    r2,r0,r0,r2     /* divide.  q->r0, r->r2 (discarded) */
+       ret
+2:     
+       jeql    1f              /* if divisor=1, return dividend */
+       cmpl    r0,r2           /* unsigned comparison between */
+       jgequ   2f              /*  dividend and divisor */
+       clrl    r0              /* dividend < divisor, return 0 */
+       ret
+2:     
+       movl    $1,r0           /* dividend >= divisor, return 1 */
+1:     
+       ret
+
+/*
+ * audiv - unsigned division for vax-11
  *
  *
- *     If 1 < divisor <= 2147483647, zero-extend the dividend
- *     to 64 bits and let ediv do the work.  If the divisor is 1,
- *     ediv will overflow if bit 31 of the dividend is on, so
- *     just return the dividend unchanged.  If the divisor is 0,
- *     do the ediv also, so it will generate the proper exception.
- *     All other values of the divisor have bit 31 on: in this case
- *     the quotient must be 0 if divisor > dividend, and 1 otherwise,
- *     provided that the comparison is made as unsigned.
+ * arguments: *dividend, divisor.
+ * result: quotient in r0 and *dividend.
+ * uses r0-r2
  */
  */
-       .text
-       .align  1
-       .globl  udiv
-udiv:  .word   0x0000
-#ifdef GPROF
-       jsb     mcount
-#endif GPROF
-       movl    4(ap),r0        # Dividend
-       movl    8(ap),r2        # Divisor
-       jeql    div             # If divisor=0, force exception
-       cmpl    r2,$1           # If divisor <= 1 (signed),
-       jleq    nodiv           #  no division is necessary
-div:   clrl    r1              # Zero-extend the dividend
-       ediv    r2,r0,r0,r2     # Divide.  q->r0, r->r2 (discarded)
+
+#include "DEFS.h"
+
+ASENTRY(audiv, 0)
+       movl    *4(ap),r0       /* dividend */
+       movl    8(ap),r2        /* divisor */
+       jeql    1f              /* if divisor=0, force exception */
+       cmpl    r2,$1           /* if divisor <= 1 (signed), */
+       jleq    2f              /*  no division is necessary */
+1:
+       clrl    r1              /* zero-extend the dividend */
+       ediv    r2,r0,r0,r2     /* divide.  q->r0, r->r2 (discarded) */
+       movl    r0,*4(ap)       /* save result */
+       ret
+2:
+       jeql    1f              /* if divisor=1, return dividend */
+       cmpl    r0,r2           /* unsigned comparison between */
+       jgequ   2f              /*  dividend and divisor */
+       clrl    r0              /* dividend < divisor, return 0 */
+       clrl    *4(ap)          /* save result */
        ret
        ret
-nodiv: jeql    retn            # If divisor=1, return dividend
-       cmpl    r0,r2           # Unsigned comparison between
-       jgequ   one             #  dividend and divisor
-       clrl    r0              # Dividend < divisor, return 0
+2:
+       movl    $1,r0           /* dividend >= divisor, return 1 */
+1:
+       movl    r0,*4(ap)       /* save result */
        ret
        ret
-one:   movl    $1,r0           # Dividend >= divisor, return 1
-retn:  ret