|
|
1.1 root 1: /*
2: * @(#)urem.s 7.1 (Berkeley) 5/21/88
3: */
4:
5: /*
6: * Unsigned remainder.
7: *
8: * urem(dividend, divisor)
9: */
10: #include "../tahoe/SYS.h"
11:
12: ASENTRY(urem, 0)
13: bitl $0x80000000,8(fp) # if (divisor & 0x80000000){
14: jeql 1f
15: movl 4(fp),r0
16: cmpl 8(fp),r0 # if (divisor <= dividend )
17: jgtru 2f
18: subl2 8(fp),r0 # return(dividend-divisor);
19: 2: # else return(dividend);}
20: ret
21: 1:
22: clrl r2 # return(dividend%divisor);
23: movl 4(fp),r3
24: ediv 8(fp),r2,r1,r0
25: ret
26:
27: /*
28: * aurem(dividendp, divisor) -- like urem but uses address of dividend.
29: * Implements %= avoiding side effects in the dividend expression.
30: */
31: ASENTRY(aurem, 0)
32: bitl $0x80000000,8(fp) # if (divisor & 0x80000000){
33: jeql 1f
34: movl *4(fp),r0
35: cmpl 8(fp),r0 # if (divisor <= dividend )
36: jgtru 2f
37: subl2 8(fp),r0 # return(dividend-divisor);
38: # else return(dividend);}
39: jbr 2f
40: 1:
41: clrl r2 # return(dividend%divisor);
42: movl *4(fp),r3
43: ediv 8(fp),r2,r1,r0
44: 2:
45: movl r0,*4(fp)
46: ret
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.