return low;
}
-/* Returns a hash code for P. */
-
-static hashval_t
-hash_pointer (const PTR p)
-{
- return (hashval_t) ((intptr_t)p >> 3);
-}
-
/* Returns non-zero if P1 and P2 are equal. */
static int
/*-------------------------------------------- report the result */
return c;
}
+
+/* Returns a hash code for pointer P. Simplified version of evahash */
+
+static hashval_t
+hash_pointer (const PTR p)
+{
+ intptr_t v = (intptr_t) p;
+ unsigned a, b, c;
+
+ a = b = 0x9e3779b9;
+ if (sizeof (intptr_t) == 4)
+ {
+ /* Mix as 16bit for now */
+ a += v >> 16;
+ b += v & 0xffff;
+ }
+ else
+ {
+ a += v >> 32;
+ b += v & 0xffffffff;
+ }
+ c = 0x42135234;
+ mix (a, b, c);
+ return c;
+}