Программистское

Есть ли более эффективный способ транспонировать 64-битную матрицу,
представленную в виде длинного-длинного целого, чем
unsigned long long
transpose (unsigned long long arg)
{
  unsigned long long res = 0;
  // Bits 0 stays in place, bit 1 goes to bit 8, 2 to 16 etc.,
  // that is the shift amount is a multiple of 7. Bit spreading
  // is done by multiplying a 7 bit value by a constant with 1 bits
  // set every 7 positions, and masking.
  int i;
  for (i = 0; i < 8; i++)
    {
      unsigned low1 = arg & 1;
      unsigned low7 = arg & 0xfe;
      res |= ((low7 * 0x2040810204080LL) & 0x101010101010100LL | low1) << i;
      arg >>= 8;
    }
  return res;
}