Hm. Could this block be a macro?

```rust
macro_rules! run_round {
     ($($set_idx:expr, $idx_a:expr, $idx_b:expr, $rot:expr);*) => { {
         $( x[$set_idx] ^= rot(x[$idx_a] + x [$idx_b], $rot) );*
     } }
}

do (rounds / 2).times {
    run_round! (
        0x4, 0x0, 0xc, 7;
        0x8, 0x4, 0x0, 9;
        // ...
        0xf, 0xe, 0xd, 18;
    )
}
```

(This would also make it easier to switch to using `x.unsafe_get($idx)`, to avoid bounds checks, if this was deemed necessary, but since these are literals and `x` is fixed-length, LLVM will probably elide the bounds checks anyway.)