authorgravatar for thatlemon@gmail.comLemonBoy <thatlemon@gmail.com> 2020-09-13 21:12:21+02:00
committergravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2020-09-13 16:32:21-04:00
log61e9e82bdc10110b74bdeb973cc542c7b73a4ae2
treef60c7e2f6b97395dee7602d90ce774f19e01e47e
parent5e50d145d964238a68d4780e253d26431e7c7994

std: Make the CRC32 calculation slightly faster

Speed up a little the slicing-by-8 code path by replacing the (load+shift+xor)*4 sequence with a single u32 load plus a xor. Before: ``` iterative: 1018 MiB/s [000000006c3b110d] small keys: 1075 MiB/s [0035bf3dcac00000] ``` After: ``` iterative: 1114 MiB/s [000000006c3b110d] small keys: 1324 MiB/s [0035bf3dcac00000] ```

1 files changed, 1 insertions(+), 4 deletions(-)

lib/std/hash/crc.zig+1-4
......@@ -71,10 +71,7 @@ pub fn Crc32WithPoly(comptime poly: Polynomial) type {
7171 const p = input[i .. i + 8];
7272
7373 // Unrolling this way gives ~50Mb/s increase
74 self.crc ^= (@as(u32, p[0]) << 0);
75 self.crc ^= (@as(u32, p[1]) << 8);
76 self.crc ^= (@as(u32, p[2]) << 16);
77 self.crc ^= (@as(u32, p[3]) << 24);
74 self.crc ^= std.mem.readIntLittle(u32, p[0..4]);
7875
7976 self.crc =
8077 lookup_tables[0][p[7]] ^