mod6_table + mod8_table

This commit is contained in:
lizzie 2026-01-30 03:01:34 +00:00 committed by crueter
parent 7ec09305d0
commit 8d78acf8b6
1 changed files with 17 additions and 12 deletions

View File

@ -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) {