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