7 static ushort endian = 1;
8 static uchar* aendian = (uchar*)&endian;
9 #define LITTLE *aendian
12 ptclbsum(uchar *addr, int len)
14 ulong losum, hisum, mdsum, x;
22 if((uintptr)addr & 1) {
31 t1 = *(ushort*)(addr+0);
32 t2 = *(ushort*)(addr+2); mdsum += t1;
33 t1 = *(ushort*)(addr+4); mdsum += t2;
34 t2 = *(ushort*)(addr+6); mdsum += t1;
35 t1 = *(ushort*)(addr+8); mdsum += t2;
36 t2 = *(ushort*)(addr+10); mdsum += t1;
37 t1 = *(ushort*)(addr+12); mdsum += t2;
38 t2 = *(ushort*)(addr+14); mdsum += t1;
44 mdsum += *(ushort*)addr;
65 losum += (hisum & 0xff) << 8;
66 while(hisum = losum>>16)
67 losum = hisum + (losum & 0xffff);
69 return losum & 0xffff;
73 ptclcsum(Block *bp, int offset, int len)
80 /* Correct to front of data area */
81 while(bp != nil && offset && offset >= BLEN(bp)) {
88 addr = bp->rptr + offset;
89 blen = BLEN(bp) - offset;
94 return ~ptclbsum(addr, len) & 0xffff;
106 csum = ptclbsum(addr, x);
122 losum += (hisum&0xff)<<8;
123 while((csum = losum>>16) != 0)
124 losum = csum + (losum & 0xffff);
126 return ~losum & 0xffff;
136 len = (addr[0]&0xf)<<2;
139 sum += (addr[0]<<8) | addr[1] ;
144 sum = (sum & 0xffff) + (sum >> 16);
145 sum = (sum & 0xffff) + (sum >> 16);