|
|
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.