mirror of
https://github.com/odin-lang/Odin.git
synced 2026-11-06 02:33:11 -05:00
- amd64: PCLMULQDQ folding for inputs of 16 bytes and up, and a 256-bit VPCLMULQDQ path from 256 bytes. The features are detected with CPUID/XGETBV at startup, or assumed when `-microarch` provides them. - arm64: CRC32 instructions for inputs under 192 bytes and all tails, PMULL folding above that. Used on Darwin, and elsewhere when -microarch enables crc and aes. - Generic fallback: slice-by-16 replaces slice-by-8, 1.3x faster. - New crc32_combine(crc1, crc2, length2) for joining CRCs of adjacent pieces (parallel hashing). - core:simd/x86: add `_mm256_clmulepi64_epi128`. - Tests: every length 0-1100 at 16 alignments against a bitwise reference, seed chaining, and `crc32_combine`. Throughput in GB/s, old -> new: size 5950X M4 32 1.46 -> 3.29 1.47 -> 8.20 256 2.35 -> 16.1 2.40 -> 16.6 1 KiB 2.51 -> 33.0 2.54 -> 29.9 64 KiB 2.57 -> 38.1 2.62 -> 37.9