Annotation of 43BSDReno/pgrm/lisp/franz/tahoe/dodiv.c, revision 1.1.1.1

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: }

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.