40 #include <sys/param.h>
51 #if (defined(__BYTE_ORDER) && defined(__LITTLE_ENDIAN) && \
52 __BYTE_ORDER == __LITTLE_ENDIAN) || \
53 (defined(i386) || defined(__i386__) || defined(__i486__) || \
54 defined(__i586__) || defined(__i686__) || defined(vax) || defined(MIPSEL))
55 # define HASH_LITTLE_ENDIAN 1
56 # define HASH_BIG_ENDIAN 0
57 #elif (defined(__BYTE_ORDER) && defined(__BIG_ENDIAN) && \
58 __BYTE_ORDER == __BIG_ENDIAN) || \
59 (defined(sparc) || defined(POWERPC) || defined(mc68000) || defined(sel))
60 # define HASH_LITTLE_ENDIAN 0
61 # define HASH_BIG_ENDIAN 1
63 # define HASH_LITTLE_ENDIAN 0
64 # define HASH_BIG_ENDIAN 0
67 #define hashsize(n) ((uint32_t)1<<(n))
68 #define hashmask(n) (hashsize(n)-1)
69 #define rot(x,k) (((x)<<(k)) | ((x)>>(32-(k))))
119 a -= c; a ^= rot(c, 4); c += b; \
120 b -= a; b ^= rot(a, 6); a += c; \
121 c -= b; c ^= rot(b, 8); b += a; \
122 a -= c; a ^= rot(c,16); c += b; \
123 b -= a; b ^= rot(a,19); a += c; \
124 c -= b; c ^= rot(b, 4); b += a; \
154 #define final(a,b,c) \
156 c ^= b; c -= rot(b,14); \
157 a ^= c; a -= rot(c,11); \
158 b ^= a; b -= rot(a,25); \
159 c ^= b; c -= rot(b,16); \
160 a ^= c; a -= rot(c,4); \
161 b ^= a; b -= rot(a,14); \
162 c ^= b; c -= rot(b,24); \
302 uint32_t hashlittle(
const void *key,
size_t length, uint32_t initval)
305 union {
const void *ptr;
size_t i; } u;
308 a = b = c = 0xdeadbeef + ((uint32_t)length) + initval;
311 if (HASH_LITTLE_ENDIAN && ((u.i & 0x3) == 0)) {
312 const uint32_t *k = (
const uint32_t *)key;
340 case 12: c+=k[2]; b+=k[1]; a+=k[0];
break;
341 case 11: c+=k[2]&0xffffff; b+=k[1]; a+=k[0];
break;
342 case 10: c+=k[2]&0xffff; b+=k[1]; a+=k[0];
break;
343 case 9 : c+=k[2]&0xff; b+=k[1]; a+=k[0];
break;
344 case 8 : b+=k[1]; a+=k[0];
break;
345 case 7 : b+=k[1]&0xffffff; a+=k[0];
break;
346 case 6 : b+=k[1]&0xffff; a+=k[0];
break;
347 case 5 : b+=k[1]&0xff; a+=k[0];
break;
348 case 4 : a+=k[0];
break;
349 case 3 : a+=k[0]&0xffffff;
break;
350 case 2 : a+=k[0]&0xffff;
break;
351 case 1 : a+=k[0]&0xff;
break;
357 k8 = (
const uint8_t *)k;
360 case 12: c+=k[2]; b+=k[1]; a+=k[0];
break;
361 case 11: c+=((uint32_t)k8[10])<<16;
362 case 10: c+=((uint32_t)k8[9])<<8;
364 case 8 : b+=k[1]; a+=k[0];
break;
365 case 7 : b+=((uint32_t)k8[6])<<16;
366 case 6 : b+=((uint32_t)k8[5])<<8;
368 case 4 : a+=k[0];
break;
369 case 3 : a+=((uint32_t)k8[2])<<16;
370 case 2 : a+=((uint32_t)k8[1])<<8;
371 case 1 : a+=k8[0];
break;
377 }
else if (HASH_LITTLE_ENDIAN && ((u.i & 0x1) == 0)) {
378 const uint16_t *k = (
const uint16_t *)key;
384 a += k[0] + (((uint32_t)k[1])<<16);
385 b += k[2] + (((uint32_t)k[3])<<16);
386 c += k[4] + (((uint32_t)k[5])<<16);
393 k8 = (
const uint8_t *)k;
396 case 12: c+=k[4]+(((uint32_t)k[5])<<16);
397 b+=k[2]+(((uint32_t)k[3])<<16);
398 a+=k[0]+(((uint32_t)k[1])<<16);
400 case 11: c+=((uint32_t)k8[10])<<16;
402 b+=k[2]+(((uint32_t)k[3])<<16);
403 a+=k[0]+(((uint32_t)k[1])<<16);
406 case 8 : b+=k[2]+(((uint32_t)k[3])<<16);
407 a+=k[0]+(((uint32_t)k[1])<<16);
409 case 7 : b+=((uint32_t)k8[6])<<16;
411 a+=k[0]+(((uint32_t)k[1])<<16);
414 case 4 : a+=k[0]+(((uint32_t)k[1])<<16);
416 case 3 : a+=((uint32_t)k8[2])<<16;
425 const uint8_t *k = (
const uint8_t *)key;
431 a += ((uint32_t)k[1])<<8;
432 a += ((uint32_t)k[2])<<16;
433 a += ((uint32_t)k[3])<<24;
435 b += ((uint32_t)k[5])<<8;
436 b += ((uint32_t)k[6])<<16;
437 b += ((uint32_t)k[7])<<24;
439 c += ((uint32_t)k[9])<<8;
440 c += ((uint32_t)k[10])<<16;
441 c += ((uint32_t)k[11])<<24;
453 case 12: c+=((uint32_t)k[11])<<24;
454 case 11: c+=((uint32_t)k[10])<<16;
455 case 10: c+=((uint32_t)k[9])<<8;
457 case 8 : b+=((uint32_t)k[7])<<24;
458 case 7 : b+=((uint32_t)k[6])<<16;
459 case 6 : b+=((uint32_t)k[5])<<8;
461 case 4 : a+=((uint32_t)k[3])<<24;
462 case 3 : a+=((uint32_t)k[2])<<16;
463 case 2 : a+=((uint32_t)k[1])<<8;
493 union {
const void *ptr;
size_t i; } u;
496 a = b = c = 0xdeadbeef + ((uint32_t)length) + *pc;
500 if (HASH_LITTLE_ENDIAN && ((u.i & 0x3) == 0)) {
501 const uint32_t *k = (
const uint32_t *)key;
529 case 12: c+=k[2]; b+=k[1]; a+=k[0];
break;
530 case 11: c+=k[2]&0xffffff; b+=k[1]; a+=k[0];
break;
531 case 10: c+=k[2]&0xffff; b+=k[1]; a+=k[0];
break;
532 case 9 : c+=k[2]&0xff; b+=k[1]; a+=k[0];
break;
533 case 8 : b+=k[1]; a+=k[0];
break;
534 case 7 : b+=k[1]&0xffffff; a+=k[0];
break;
535 case 6 : b+=k[1]&0xffff; a+=k[0];
break;
536 case 5 : b+=k[1]&0xff; a+=k[0];
break;
537 case 4 : a+=k[0];
break;
538 case 3 : a+=k[0]&0xffffff;
break;
539 case 2 : a+=k[0]&0xffff;
break;
540 case 1 : a+=k[0]&0xff;
break;
541 case 0 : *pc=c; *pb=b;
return;
546 k8 = (
const uint8_t *)k;
549 case 12: c+=k[2]; b+=k[1]; a+=k[0];
break;
550 case 11: c+=((uint32_t)k8[10])<<16;
551 case 10: c+=((uint32_t)k8[9])<<8;
553 case 8 : b+=k[1]; a+=k[0];
break;
554 case 7 : b+=((uint32_t)k8[6])<<16;
555 case 6 : b+=((uint32_t)k8[5])<<8;
557 case 4 : a+=k[0];
break;
558 case 3 : a+=((uint32_t)k8[2])<<16;
559 case 2 : a+=((uint32_t)k8[1])<<8;
560 case 1 : a+=k8[0];
break;
561 case 0 : *pc=c; *pb=b;
return;
566 }
else if (HASH_LITTLE_ENDIAN && ((u.i & 0x1) == 0)) {
567 const uint16_t *k = (
const uint16_t *)key;
573 a += k[0] + (((uint32_t)k[1])<<16);
574 b += k[2] + (((uint32_t)k[3])<<16);
575 c += k[4] + (((uint32_t)k[5])<<16);
582 k8 = (
const uint8_t *)k;
585 case 12: c+=k[4]+(((uint32_t)k[5])<<16);
586 b+=k[2]+(((uint32_t)k[3])<<16);
587 a+=k[0]+(((uint32_t)k[1])<<16);
589 case 11: c+=((uint32_t)k8[10])<<16;
591 b+=k[2]+(((uint32_t)k[3])<<16);
592 a+=k[0]+(((uint32_t)k[1])<<16);
595 case 8 : b+=k[2]+(((uint32_t)k[3])<<16);
596 a+=k[0]+(((uint32_t)k[1])<<16);
598 case 7 : b+=((uint32_t)k8[6])<<16;
600 a+=k[0]+(((uint32_t)k[1])<<16);
603 case 4 : a+=k[0]+(((uint32_t)k[1])<<16);
605 case 3 : a+=((uint32_t)k8[2])<<16;
610 case 0 : *pc=c; *pb=b;
return;
614 const uint8_t *k = (
const uint8_t *)key;
620 a += ((uint32_t)k[1])<<8;
621 a += ((uint32_t)k[2])<<16;
622 a += ((uint32_t)k[3])<<24;
624 b += ((uint32_t)k[5])<<8;
625 b += ((uint32_t)k[6])<<16;
626 b += ((uint32_t)k[7])<<24;
628 c += ((uint32_t)k[9])<<8;
629 c += ((uint32_t)k[10])<<16;
630 c += ((uint32_t)k[11])<<24;
642 case 12: c+=((uint32_t)k[11])<<24;
643 case 11: c+=((uint32_t)k[10])<<16;
644 case 10: c+=((uint32_t)k[9])<<8;
646 case 8 : b+=((uint32_t)k[7])<<24;
647 case 7 : b+=((uint32_t)k[6])<<16;
648 case 6 : b+=((uint32_t)k[5])<<8;
650 case 4 : a+=((uint32_t)k[3])<<24;
651 case 3 : a+=((uint32_t)k[2])<<16;
652 case 2 : a+=((uint32_t)k[1])<<8;
655 case 0 : *pc=c; *pb=b;
return;