40c77c02f0
`locate` found an entry's word by multiplication (the MAGIC table) but still divided `64 / bits` at run time for the shift, on every block read and write of a section stored in 5, 6 or 7 bits. A division by a value the compiler does not know costs tens of cycles on x86: `perf annotate` of a 10-bot server on the ThinkPad put 12% of `PalettedContainer::get`, the server thread's top function, on that `div`. The table now also holds the bits a word's entries fill, so the shift is `i * bits - word * filled`. A test checks `locate` against the division for every width and entry. ThinkPad (i5-7200U), 4M random reads, 5-7 bit palettes: 28.5-36.9 -> 24.6-32.4 ns over 2,000 sections, 6.7-7.1 -> 5.4-5.8 ns within one; 4 and 8 bits (shifts, unchanged) the same. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>