diff --git a/stb_ds.h b/stb_ds.h index c27abee..ca1a453 100644 --- a/stb_ds.h +++ b/stb_ds.h @@ -916,9 +916,9 @@ static size_t stbds_siphash_bytes(void *p, size_t len, size_t seed) } data = len << (STBDS_SIZE_T_BITS-8); switch (len - i) { - case 7: data |= ((size_t) d[6] << 48); - case 6: data |= ((size_t) d[5] << 40); - case 5: data |= ((size_t) d[4] << 32); + case 7: data |= ((size_t) d[6] << 24) << 24; + case 6: data |= ((size_t) d[5] << 20) << 20; + case 5: data |= ((size_t) d[4] << 16) << 16; case 4: data |= (d[3] << 24); case 3: data |= (d[2] << 16); case 2: data |= (d[1] << 8); @@ -1000,7 +1000,8 @@ size_t stbds_hash_bytes(void *p, size_t len, size_t seed) return (((size_t) hash << 16 << 16) | hash) ^ seed; } else if (len == 8 && sizeof(size_t) == 8) { - size_t hash = d[0] | (d[1] << 8) | (d[2] << 16) | (d[3] << 24) | ((size_t)d[4] << 32) | ((size_t)d[5] << 40) | ((size_t)d[6] << 48) | ((size_t)d[7] << 56); + size_t hash = d[0] | (d[1] << 8) | (d[2] << 16) | (d[3] << 24); + hash |= (size_t) (d[4] | (d[5] << 8) | (d[6] << 16) | (d[7] << 24)) << 16 << 16; // avoid warning if size_t == 4 hash ^= seed ^ len; hash = (~hash) + (hash << 21); hash ^= STBDS_ROTATE_RIGHT(hash,24);