Skip to content

Commit 27c44ce

Browse files
committed
siphash: Reorder hash state in the struct
If they are ordered v0, v2, v1, v3, the compiler can find just a few simd optimizations itself. The new optimization I could observe on x86-64 was using 128 bit registers for the v = key ^ constant operations in new / reset.
1 parent 5f6a61e commit 27c44ce

File tree

1 file changed

+5
-1
lines changed

1 file changed

+5
-1
lines changed

Diff for: src/libcore/hash/sip.rs

+5-1
Original file line numberDiff line numberDiff line change
@@ -32,9 +32,13 @@ pub struct SipHasher {
3232
k0: u64,
3333
k1: u64,
3434
length: usize, // how many bytes we've processed
35+
// v0, v2 and v1, v3 show up in pairs in the algorithm,
36+
// and simd implementations of SipHash will use vectors
37+
// of v02 and v13. By placing them in this order in the struct,
38+
// the compiler can pick up on just a few simd optimizations by itself.
3539
v0: u64, // hash state
36-
v1: u64,
3740
v2: u64,
41+
v1: u64,
3842
v3: u64,
3943
tail: u64, // unprocessed bytes le
4044
ntail: usize, // how many bytes in tail are valid

0 commit comments

Comments
 (0)