SSEが使えるならpsllq & pmovmskb使うのが一番速そうだけど

とりあえず汎用性のあるのは

uint64 a[256] ;
memset(a, 0, sizeof(a);
for ( int i = 0; i < 256; i++ ) for ( int j = 0; j < 8; j++ ) a[i] += (i & (1 << j)) << (7 * j);

//↑ここまではあらかじめ計算しておく

reg = a[reg & 0xFF] | (a[(reg >> 8) & 0xFF] << 1) | (a[(reg >> 16) & 0xFF] << 2)
| (a[(reg >> 24) & 0xFF] << 3) | (a[(reg >> 32) & 0xFF] << 4) | (a[(reg >> 40) & 0xFF] << 5)
| (a[(reg >> 48) & 0xFF] << 6)| (a[reg >> 56] << 7);