mod6_table + mod8_table
This commit is contained in:
parent
7ec09305d0
commit
8d78acf8b6
|
|
@ -153,26 +153,31 @@ uint ReplicateBitTo9(uint value) {
|
|||
return value * 511;
|
||||
}
|
||||
|
||||
const uint mod6_table = 0
|
||||
| ((6 % 1) << (2 * 1)) | ((6 % 2) << (2 * 2))
|
||||
| ((6 % 3) << (2 * 3)) | ((6 % 4) << (2 * 4))
|
||||
| ((6 % 5) << (2 * 5)) | ((6 % 6) << (2 * 6));
|
||||
const uint mod8_table = 0
|
||||
| ((8 % 1) << (2 * 1)) | ((8 % 2) << (2 * 2))
|
||||
| ((8 % 3) << (2 * 3)) | ((8 % 4) << (2 * 4))
|
||||
| ((8 % 5) << (2 * 5)) | ((8 % 6) << (2 * 6))
|
||||
| ((8 % 7) << (2 * 7)) | ((8 % 8) << (2 * 8));
|
||||
// Assumes num_bits < to_bit, num_bits and to_bit != 0
|
||||
uint ReplicateBits(uint value, uint num_bits, uint to_bit) {
|
||||
uint ReplicateBits(uint value, uint num_bits, uint to_bit, uint table) {
|
||||
const uint repl = value & ((1 << num_bits) - 1);
|
||||
const uint shift = (table >> (num_bits * 2)) & 3;
|
||||
uint v = repl;
|
||||
v |= v << (num_bits << 0); // [ xxxx xxxr ]
|
||||
v |= v << (num_bits << 1); // [ xxxx xxrr ]
|
||||
v |= v << (num_bits << 2); // [ xxxx rrrr ]
|
||||
v |= v << (num_bits << 3); // [ rrrr rrrr ]
|
||||
const uint shift = (to_bit % num_bits);
|
||||
v <<= shift;
|
||||
v |= repl >> (num_bits - shift);
|
||||
v |= v << (num_bits << 0); // [ xxxx xxrr ]
|
||||
v |= v << (num_bits << 1); // [ xxxx rrrr ]
|
||||
v |= v << (num_bits << 2); // [ rrrr rrrr ]
|
||||
v = (v << shift) | repl >> (num_bits - shift);
|
||||
return v & ((1 << to_bit) - 1);
|
||||
}
|
||||
|
||||
uint FastReplicateTo8(uint value, uint num_bits) {
|
||||
return ReplicateBits(value, num_bits, 8);
|
||||
return ReplicateBits(value, num_bits, 8, mod8_table);
|
||||
}
|
||||
|
||||
uint FastReplicateTo6(uint value, uint num_bits) {
|
||||
return ReplicateBits(value, num_bits, 6);
|
||||
return ReplicateBits(value, num_bits, 6, mod6_table);
|
||||
}
|
||||
|
||||
uint Hash52(uint p) {
|
||||
|
|
|
|||
Loading…
Reference in New Issue