3 ms·
Heh, movemask keeps coming back. Rather than emulating it, it appears to be more efficient to separately handle IndexOfMatch, LastIndexOfMatch and GetMatchCount
by neonsunset 3y ago
Heh, movemask keeps coming back. Rather than emulating it, it appears to be more efficient to separately handle IndexOfMatch, LastIndexOfMatch and GetMatchCount scenarios it is used for most of the time:
- https://github.com/dotnet/runtime/pull/94472/files#diff-58242a9637faae8972d2b49c63a1a17a582b4198f9e0bed27b6615cb47f068fdR3061-R3069 https://github.com/dotnet/runtime/pull/94472/files#diff-5824... (it's closed for now but I'm hoping to get back to it at some point)
- https://github.com/jprochazk/tmi-rs/blob/ac3ce6aee8bbe038a983ed9ce41b67c34ce3e4c9/src/irc/simd/arm_neon.rs#L236 https://github.com/jprochazk/tmi-rs/blob/ac3ce6aee8bbe038a98...
It can account for good 30% performance variance depending on the use case (on Apple's M-series cores).
- burntsushi 3y agoThat's what the `memchr` crate does. It uses `vshrn` just like in your links. And vpmaxq before even bothering with vshrn: https://github.com/BurntSushi/memchr/blob/c6b885b870b6f1b9bfae2de482e1264d6c7aa040/src/vector.rs#L357-L360 https://github.com/BurntSushi/memchr/blob/c6b885b870b6f1b9bf...