Skip to content

util: Avoid strict aliasing bugs in xxhash.

Emma Anholt requested to merge anholt/mesa:xxhash-strict-aliasing into master

XXH32 is doing access through u32 *, and with strict aliasing the compiler gets to assume that those are independent of the u16 writes we did in fd6_texture_key setup, and based on various tweaks to the code, would result in bad hashes computed after inlining. The failure was:

../src/util/hash_table.c:326:_mesa_hash_table_search_pre_hashed: Assertion `ht->key_hash_function == ((void *)0) || hash == ht->key_hash_function(key)' failed.)

By setting these two flags, we always take the unaligned, memcpy-the-32-bit-data path. I believe this should be same perf on x86 (which will happily unaligned load 32 bits in the end), while it will be slower on arm (where you have to a special unaligned load operation iirc). This should still be far faster than our old hash.

Fixes: edd62619 ("freedreno: replace fnv1a hash function with xxhash")

@apesch

Merge request reports