xref: /csrg-svn/lib/libc/vax/gen/udiv.s (revision 47864)
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.5 (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	DIVIDEND,r3
45	movl	DIVISOR,r2
46	jlss	La_easy		# big divisor: settle by comparison
47	movl	(r3),r0
48	jlss	La_hard		# big dividend: extended division
49	divl2	r2,r0		# small divisor and dividend: signed division
50	movl	r0,(r3)		# leave the value of the assignment in r0
51	ret
52La_hard:
53	clrl	r1
54	ediv	r2,r0,r0,r1
55	movl	r0,(r3)
56	ret
57La_easy:
58	cmpl	(r3),r2
59	jgequ	La_one		# if dividend is as big or bigger, return 1
60	clrl	r0		# else return 0
61	clrl	(r3)
62	ret
63La_one:
64	movl	$1,r0
65	movl	r0,(r3)
66	ret
67