--- libaitcrc/inc/defs.h 2012/07/22 21:46:23 1.6 +++ libaitcrc/inc/defs.h 2012/08/29 09:00:44 1.7 @@ -3,7 +3,7 @@ * by Michael Pounov * * $Author: misho $ -* $Id: defs.h,v 1.6 2012/07/22 21:46:23 misho Exp $ +* $Id: defs.h,v 1.7 2012/08/29 09:00:44 misho Exp $ * ************************************************************************** The ELWIX and AITNET software is distributed under the following @@ -59,6 +59,28 @@ SUCH DAMAGE. #define INIT_BERNSTEIN 0x1505 #define INIT_FNV1 0x811c9dc5 #define POLY_FNV1 0x1000193 +#define INIT_JENKINS32 0xDEADBEEF + +#define ROT32(x, k) (((x) << (k)) | ((x) >> (32 - (k)))) +#define MIX32(a, b, c) \ +do { \ + a -= c; a ^= ROT32(c, 4); c += b; \ + b -= a; b ^= ROT32(a, 6); a += c; \ + c -= b; c ^= ROT32(b, 8); b += a; \ + a -= c; a ^= ROT32(c, 16); c += b; \ + b -= a; b ^= ROT32(a, 19); a += c; \ + c -= b; c ^= ROT32(b, 4); b += a; \ +} while (0) +#define FINAL32(a, b, c) \ +do { \ + c ^= b; c -= ROT32(b, 14); \ + a ^= c; a -= ROT32(c, 11); \ + b ^= a; b -= ROT32(a, 25); \ + c ^= b; c -= ROT32(b, 16); \ + a ^= c; a -= ROT32(c, 4); \ + b ^= a; b -= ROT32(a, 14); \ + c ^= b; c -= ROT32(b, 24); \ +} while (0) inline void crc_SetErr(int eno, char *estr, ...);