xref: /csrg-svn/lib/libc/vax/gen/udiv.s (revision 47836)
1/*-
2 * Copyright (c) 1991 The Regents of the University of California.
3 * All rights reserved.
4 *
5 * %sccs.include.redist.c%
6 */
7
8#if defined(LIBC_SCCS) && !defined(lint)
9	.asciz "@(#)udiv.s	5.3 (Berkeley) 04/08/91"
10#endif /* LIBC_SCCS and not lint */
11
12/*
13 * Unsigned division, PCC flavor.
14 * udiv() takes an ordinary dividend/divisor pair;
15 * audiv() takes a pointer to a dividend and an ordinary divisor.
16 */
17
18#include "DEFS.h"
19
20#define	DIVIDEND	4(ap)
21#define	DIVISOR		8(ap)
22
23ASENTRY(udiv,0)
24	movl	DIVISOR,r2
25	jlss	Leasy		# big divisor: settle by comparison
26	movl	DIVIDEND,r0
27	jlss	Lhard		# big dividend: extended division
28	divl2	r2,r0		# small divisor and dividend: signed division
29	ret
30Lhard:
31	clrl	r1
32	ediv	r2,r0,r0,r1
33	ret
34Leasy:
35	cmpl	DIVIDEND,r2
36	jgequ	Lone		# if dividend is as big or bigger, return 1
37	clrl	r0		# else return 0
38	ret
39Lone:
40	movl	$1,r0
41	ret
42
43ASENTRY(audiv,0)
44	movl	DIVISOR,r2
45	jlss	Laeasy		# big divisor: settle by comparison
46	movl	DIVIDEND,r3
47	movl	(r3),r0
48	jlss	Lahard		# big dividend: extended division
49	divl3	r2,r0,(r3)	# small divisor and dividend: signed division
50	ret
51Lahard:
52	clrl	r1
53	ediv	r2,r0,(r3),r1
54	ret
55Laeasy:
56	cmpl	(r3),r2
57	jgequ	Laone		# if dividend is as big or bigger, store 1
58	clrl	(r3)		# else store 0
59	ret
60Laone:
61	movl	$1,(r3)
62	ret
63