]> git.lizzy.rs Git - rust.git/commitdiff
siphash: Reorder hash state in the struct
authorUlrik Sverdrup <bluss@users.noreply.github.com>
Sat, 25 Jul 2015 09:59:06 +0000 (11:59 +0200)
committerUlrik Sverdrup <bluss@users.noreply.github.com>
Sat, 25 Jul 2015 10:26:18 +0000 (12:26 +0200)
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.

src/libcore/hash/sip.rs

index 5b6fd46f677afa7510ac7041a19f37a63b89c2d3..93bdadff549ae5398d49bb2a3b84393fb10b06df 100644 (file)
@@ -32,9 +32,13 @@ pub struct SipHasher {
     k0: u64,
     k1: u64,
     length: usize, // how many bytes we've processed
+    // v0, v2 and v1, v3 show up in pairs in the algorithm,
+    // and simd implementations of SipHash will use vectors
+    // of v02 and v13. By placing them in this order in the struct,
+    // the compiler can pick up on just a few simd optimizations by itself.
     v0: u64,      // hash state
-    v1: u64,
     v2: u64,
+    v1: u64,
     v3: u64,
     tail: u64, // unprocessed bytes le
     ntail: usize,  // how many bytes in tail are valid