|
|
1.1 root 1: /* Copyright (c) 1982, Regents, University of California */
2:
3: struct sdot
4: {long I;
5: struct sdot *CDR;
6: };
7: struct vl
8: {long high;
9: long low;
10: };
11:
12: long dodiv(top,bottom)
13: long *top, *bottom; /* top least significant; bottom most */
14: {
15: struct vl work;
16: char error;
17: register long *p = bottom; /* r12 */
18: register long rem = 0; /* r11 */
19:
20: for(;p <= top;p++)
21: {
22: /* emul(0x40000000,rem,*p,&work); */
23: /* *p = ediv(&work,1000000000,&error); */
24: /* rem = work.high; */
25:
26: asm("emul $0x40000000,r11,(r12),r0");
27: asm("ediv $1000000000,r0,(r12),r11");
28: }
29: return(rem);
30: }
31:
32: long dsneg(top,bottom)
33: long *top, *bottom;
34: {
35: register long *p = top;
36: register carry = 0;
37: register digit;
38:
39: while(p >= bottom)
40: {
41: digit = carry - *p;
42: /* carry = digit >> 30; is slow on 68K */
43: if(digit < 0) carry = -2;
44: if(digit & 0x40000000) carry += 1;
45: *p-- = digit & 0x3fffffff;
46: }
47: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.