t = copy(q); // temporary copy of q register
for( X = 0; X < N; ++X) // for each element of the state array
{
  a = X >> m;       // top m bits
  b = X & mask;     // bottom m bits, mask = 2m-1 = 0111..1 (m 1's)
  c = (a + b) % M;  // classical addition
  Y = (a << m) | c; // concatenate the bits
  q[Y] = t[X];      // perform the permutation
}