xref: /csrg-svn/lib/libc/tahoe/gen/udiv.s (revision 34824)
1/*
2 * Copyright (c) 1988 Regents of the University of California.
3 * All rights reserved.
4 *
5 * Redistribution and use in source and binary forms are permitted
6 * provided that the above copyright notice and this paragraph are
7 * duplicated in all such forms and that any documentation,
8 * advertising materials, and other materials related to such
9 * distribution and use acknowledge that the software was developed
10 * by the University of California, Berkeley.  The name of the
11 * University may not be used to endorse or promote products derived
12 * from this software without specific prior written permission.
13 * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
14 * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
15 * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
16 *
17 * This code is derived from software contributed to Berkeley by
18 * Computer Consoles Inc.
19 */
20
21#if defined(LIBC_SCCS) && !defined(lint)
22	.asciz "@(#)udiv.s	1.4 (Berkeley) 06/27/88"
23#endif /* LIBC_SCCS and not lint */
24
25/*
26 * Unsigned divide.
27 *
28 * udiv(dividend, divisor)
29 */
30#include "DEFS.h"
31
32ASENTRY(udiv, 0)
33	bitl	$0x80000000,8(fp)	#  if (divisor & 0x80000000){
34	jeql	1f
35	cmpl	8(fp),4(fp)		#  if (divisor > dividend )
36	jlequ	2f
37	clrl	r0			#      return(0);
38	ret
392:					#  else
40	movl	$1,r0			#      return(1);}
41	ret
421:
43	clrl	r2			#  return(dividend/divisor);
44	movl	4(fp),r3
45	ediv	8(fp),r2,r0,r1
46	ret
47
48/*
49 * audiv(dividendp, divisor) -- like udiv but uses address of dividend.
50 *	Implements /= avoiding side effects in the dividend expression.
51 */
52ASENTRY(audiv, 0)
53	bitl	$0x80000000,8(fp)	#  if (divisor & 0x80000000){
54	jeql	1f
55	cmpl	8(fp),*4(fp)		#  if (divisor > dividend )
56	jlequ	2f
57	clrl	r0			#      return(0);
58	jbr	3f
592:					#  else
60	movl	$1,r0			#      return(1);}
61	jbr	3f
621:
63	clrl	r2			#  return(dividend/divisor);
64	movl	*4(fp),r3
65	ediv	8(fp),r2,r0,r1
663:
67	movl	r0,*4(fp)
68	ret
69