Annotation of researchv10no/libc/gen/LL.c, revision 1.1

1.1     ! root        1: #include       <sys/param.h>
        !             2: 
        !             3: /*
        !             4:  * long-long support
        !             5:  */
        !             6: 
        !             7: #define        M 0x80000000
        !             8: 
        !             9: unsigned
        !            10: Lshift(ll, l)
        !            11: llong_t ll;
        !            12: long l;
        !            13: {
        !            14:        return (ll.hi<<(32-l)) | (ll.lo>>l);
        !            15: }
        !            16: 
        !            17: llong_t
        !            18: ltoL(l)
        !            19: long l;
        !            20: {
        !            21:        llong_t t;
        !            22: 
        !            23:        t.hi = 0;
        !            24:        t.lo = l;
        !            25:        return t;
        !            26: }
        !            27: 
        !            28: llong_t
        !            29: Lladd(ll, l)
        !            30: llong_t ll;
        !            31: long l;
        !            32: {
        !            33:        llong_t t;
        !            34:        long cin;
        !            35: 
        !            36:        t = ll;
        !            37:        t.lo += l;
        !            38:        cin = ll.lo^t.lo;
        !            39:        if (l>=0) {
        !            40:                if ((ll.lo&cin)&M)
        !            41:                        t.hi++;
        !            42:        } else {
        !            43:                if ((~ll.lo&cin)&M)
        !            44:                        t.hi--;
        !            45:        }
        !            46:        return t;
        !            47: }
        !            48: 
        !            49: llong_t
        !            50: Luadd(ll, u)
        !            51: llong_t ll;
        !            52: unsigned long u;
        !            53: {
        !            54:        llong_t t;
        !            55:        long cin;
        !            56: 
        !            57:        t = ll;
        !            58:        t.lo += u;
        !            59:        cin = ll.lo^t.lo;
        !            60:        if ((ll.lo&cin)&M)
        !            61:                t.hi++;
        !            62:        return t;
        !            63: }
        !            64: 
        !            65: llong_t
        !            66: LLadd(lla, llb)
        !            67: llong_t lla, llb;
        !            68: {
        !            69:        llong_t t;
        !            70: 
        !            71:        t.hi = lla.hi+llb.hi;
        !            72:        t.lo = lla.lo+llb.lo;
        !            73:        if ((lla.lo&llb.lo | lla.lo&~t.lo | llb.lo&~t.lo)&M)
        !            74:                t.hi++;
        !            75:        return t;
        !            76: }
        !            77: 
        !            78: llong_t
        !            79: Llmul(a, b)
        !            80:        llong_t a;
        !            81:        unsigned long b;
        !            82: {
        !            83:        llong_t r;
        !            84: 
        !            85:        r = ltoL(0);
        !            86:        while(b){
        !            87:                if(b&1)
        !            88:                        r = LLadd(r, a);
        !            89:                b >>= 1;
        !            90:                a = LLadd(a, a);
        !            91:        }
        !            92:        return(r);
        !            93: }

unix.superglobalmegacorp.com

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