xref: /csrg-svn/lib/libc/tahoe/gen/udiv.s (revision 32977)
129702Ssam#ifdef LIBC_SCCS
2*32977Sdonn	.asciz	"@(#)udiv.s	1.2 (Berkeley/CCI) 12/11/87"
329702Ssam#endif LIBC_SCCS
429702Ssam
529702Ssam/*
629702Ssam * Unsigned divide.
729702Ssam *
829702Ssam * udiv(dividend, divisor)
929702Ssam */
1029702Ssam#include "DEFS.h"
1129702Ssam
1229702SsamASENTRY(udiv, 0)
1329702Ssam	bitl	$0x80000000,8(fp)	#  if (divisor & 0x80000000){
1429702Ssam	jeql	1f
1529702Ssam	cmpl	8(fp),4(fp)		#  if (divisor > dividend )
1629702Ssam	jlequ	2f
1729702Ssam	clrl	r0			#      return(0);
1829702Ssam	ret
1929702Ssam2:					#  else
2029702Ssam	movl	$1,r0			#      return(1);}
2129702Ssam	ret
2229702Ssam1:
23*32977Sdonn	clrl	r2			#  return(dividend/divisor);
24*32977Sdonn	movl	4(fp),r3
25*32977Sdonn	ediv	8(fp),r2,r0,r1
2629702Ssam	ret
27*32977Sdonn
28*32977Sdonn/*
29*32977Sdonn * audiv(dividendp, divisor) -- like udiv but uses address of dividend.
30*32977Sdonn *	Implements /= avoiding side effects in the dividend expression.
31*32977Sdonn */
32*32977SdonnASENTRY(audiv, 0)
33*32977Sdonn	bitl	$0x80000000,8(fp)	#  if (divisor & 0x80000000){
34*32977Sdonn	jeql	1f
35*32977Sdonn	cmpl	8(fp),*4(fp)		#  if (divisor > dividend )
36*32977Sdonn	jlequ	2f
37*32977Sdonn	clrl	r0			#      return(0);
38*32977Sdonn	jbr	3f
39*32977Sdonn2:					#  else
40*32977Sdonn	movl	$1,r0			#      return(1);}
41*32977Sdonn	jbr	3f
42*32977Sdonn1:
43*32977Sdonn	clrl	r2			#  return(dividend/divisor);
44*32977Sdonn	movl	*4(fp),r3
45*32977Sdonn	ediv	8(fp),r2,r0,r1
46*32977Sdonn3:
47*32977Sdonn	movl	r0,*4(fp)
48*32977Sdonn	ret
49