macros murmur1 assumes murmur_step takes rotation value
as a second argument
but murmur_step second argument is "next block"
this makes st_hash_uint and st_hash_end to not mix high bits of
hash value into lower bits
this leads to pure hash behavior on doubles and mixing hashes using
st_hash_uint.
It didn't matter when bins amount were prime numbers, but it hurts
when bins are powers of two.
Mistake were created cause of attempt to co-exist Murmur1 and Murmur2
in a same code.
Change it to single hash-function implementation.
block function is in a spirit of Murmur functions,
but handles inter-block dependency a bit better (imho).
final block is read in bit more optimal way on CPU with unaligned word access,
st.c: fix st_hash* functions [Bug #13019]
Previous implementation had an issues:
as a second argument
hash value into lower bits
st_hash_uint.
It didn't matter when bins amount were prime numbers, but it hurts
when bins are powers of two.
Mistake were created cause of attempt to co-exist Murmur1 and Murmur2
in a same code.
Change it to single hash-function implementation.
but handles inter-block dependency a bit better (imho).
(64bit finalizer is taken from
http://zimbry.blogspot.ru/2011/09/better-bit-mixing-improving-on.html)
Also remove ST_USE_FNV1: it lacks implementation of many functions,
and looks to be abandoned
Author: Sokolov Yura aka funny_falcon funny.falcon@gmail.com
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@57134 b2dd03c8-39d4-4d8f-98ff-823fe69b080e