My understanding of how this shook out:
https://www.reddit.com/r/rust/comments/7m99wo/outperforming_...
tl;dr: the C and Rust versions had signed integers rather than unsigned like the ATS version, and if you make that change they end up more similar.