1: /*
2: * Copyright (c) 1987 Regents of the University of California.
3: * All rights reserved. The Berkeley software License Agreement
4: * specifies the terms and conditions for redistribution.
5: */
6:
7: #ifdef LIBC_SCCS
8: <@(#)udiv.s 2.3 (Berkeley) 1/28/87\0>
9: .even
10: #endif LIBC_SCCS
11:
12: /*
13: * udiv(lhs::r0, rhs::r1)
14: * unsigned lhs, rhs;
15: *
16: * urem(lhs::r0, rhs::r1)
17: * unsigned lhs, rhs;
18: *
19: * Return unsigned div/rem and condition codes of result.
20: */
21: #include "DEFS.h"
22:
23: ASENTRY(udiv)
24: cmp r1,$1 / if rhs > 1 && rhs < (2^16)/2 /*tricky*/
25: ble 9f / return ((unsigned long)lhs)/rhs
26: mov r1,-(sp)
27: mov r0,r1
28: clr r0
29: div (sp)+,r0
30: rts pc
31: 9:
32: bne 9f / else if rhs == 1
33: tst r0 / return lhs
34: rts pc
35: 9:
36: cmp r1,r0 / else if lhs < rhs
37: blos 9f / return 0
38: clr r0
39: rts pc
40: 9:
41: mov $1,r0 / else return 1
42: rts pc
43:
44: ASENTRY(urem)
45: cmp r1,$1 / if rhs > 1 && rhs < (2^16)/2 /*tricky*/
46: ble 9f / return ((unsigned long)lhs)%rhs
47: mov r1,-(sp)
48: mov r0,r1
49: clr r0
50: div (sp)+,r0
51: mov r1,r0 / (div leaves "%" in r1)
52: rts pc
53: 9:
54: bne 9f / else if rhs == 1
55: clr r0 / return 0
56: rts pc
57: 9:
58: cmp r0,r1 / else if lhs >= rhs
59: blo 9f / return lhs - rhs
60: sub r1,r0
61: 9:
62: tst r0 / else return lhs
63: rts pc
Defined functions
udiv
defined in line
23;
never used
urem
defined in line
44;
never used