xref: /original-bsd/lib/libc/tahoe/gen/udiv.s (revision efe8c834)
1/*
2 * Copyright (c) 1988, 1993
3 *	The Regents of the University of California.  All rights reserved.
4 *
5 * This code is derived from software contributed to Berkeley by
6 * Computer Consoles Inc.
7 *
8 * %sccs.include.redist.c%
9 */
10
11#if defined(LIBC_SCCS) && !defined(lint)
12	.asciz "@(#)udiv.s	8.1 (Berkeley) 06/04/93"
13#endif /* LIBC_SCCS and not lint */
14
15/*
16 * Unsigned divide.
17 *
18 * udiv(dividend, divisor)
19 */
20#include "DEFS.h"
21
22ASENTRY(udiv, 0)
23	bitl	$0x80000000,8(fp)	#  if (divisor & 0x80000000){
24	jeql	1f
25	cmpl	8(fp),4(fp)		#  if (divisor > dividend )
26	jlequ	2f
27	clrl	r0			#      return(0);
28	ret
292:					#  else
30	movl	$1,r0			#      return(1);}
31	ret
321:
33	clrl	r2			#  return(dividend/divisor);
34	movl	4(fp),r3
35	ediv	8(fp),r2,r0,r1
36	ret
37
38/*
39 * audiv(dividendp, divisor) -- like udiv but uses address of dividend.
40 *	Implements /= avoiding side effects in the dividend expression.
41 */
42ASENTRY(audiv, 0)
43	bitl	$0x80000000,8(fp)	#  if (divisor & 0x80000000){
44	jeql	1f
45	cmpl	8(fp),*4(fp)		#  if (divisor > dividend )
46	jlequ	2f
47	clrl	r0			#      return(0);
48	jbr	3f
492:					#  else
50	movl	$1,r0			#      return(1);}
51	jbr	3f
521:
53	clrl	r2			#  return(dividend/divisor);
54	movl	*4(fp),r3
55	ediv	8(fp),r2,r0,r1
563:
57	movl	r0,*4(fp)
58	ret
59