xref: /csrg-svn/lib/libc/tahoe/gen/udiv.s (revision 34438)
1/*
2 * Copyright (c) 1988 Regents of the University of California.
3 * All rights reserved.
4 *
5 * This code is derived from software contributed to Berkeley by
6 * Computer Consoles Inc.
7 *
8 * Redistribution and use in source and binary forms are permitted
9 * provided that this notice is preserved and that due credit is given
10 * to the University of California at Berkeley. The name of the University
11 * may not be used to endorse or promote products derived from this
12 * software without specific prior written permission. This software
13 * is provided ``as is'' without express or implied warranty.
14 */
15
16#if defined(LIBC_SCCS) && !defined(lint)
17_sccsid:.asciz	"@(#)udiv.s	1.3 (Berkeley) 05/23/88"
18#endif /* LIBC_SCCS and not lint */
19
20/*
21 * Unsigned divide.
22 *
23 * udiv(dividend, divisor)
24 */
25#include "DEFS.h"
26
27ASENTRY(udiv, 0)
28	bitl	$0x80000000,8(fp)	#  if (divisor & 0x80000000){
29	jeql	1f
30	cmpl	8(fp),4(fp)		#  if (divisor > dividend )
31	jlequ	2f
32	clrl	r0			#      return(0);
33	ret
342:					#  else
35	movl	$1,r0			#      return(1);}
36	ret
371:
38	clrl	r2			#  return(dividend/divisor);
39	movl	4(fp),r3
40	ediv	8(fp),r2,r0,r1
41	ret
42
43/*
44 * audiv(dividendp, divisor) -- like udiv but uses address of dividend.
45 *	Implements /= avoiding side effects in the dividend expression.
46 */
47ASENTRY(audiv, 0)
48	bitl	$0x80000000,8(fp)	#  if (divisor & 0x80000000){
49	jeql	1f
50	cmpl	8(fp),*4(fp)		#  if (divisor > dividend )
51	jlequ	2f
52	clrl	r0			#      return(0);
53	jbr	3f
542:					#  else
55	movl	$1,r0			#      return(1);}
56	jbr	3f
571:
58	clrl	r2			#  return(dividend/divisor);
59	movl	*4(fp),r3
60	ediv	8(fp),r2,r0,r1
613:
62	movl	r0,*4(fp)
63	ret
64