Requantize through a signed table, and fix the README
Twenty-seven hundred times real time, from twenty-six. Almost every spectral line is small enough to have been coded without an escape, so a table of those few values with the sign already in them replaces taking an absolute value and putting the sign back on each of a granule's 576 lines. One unsigned comparison covers both ends of it, since anything outside -15...15 wraps to something far above 30. The command line tool was converting samples to sixteen bits one at a time through `writeInt`, which does not vectorise; it now calls the library's own `toInt16`, which does. That was a twentieth of the whole program. Two more measured and backed out: padding the inverse MDCT's vectors to 24 lanes instead of 32, to waste fewer of them on the 18 rows it needs, was five times slower, LLVM legalising a non-power-of-two vector into pieces that cost more than the lanes they save; and refilling the bit cache once per two code words rather than once per word was slightly slower. The README's account of all this was two passes out of date: edits meant to describe the bit cache and the shuffles had been written against anchors that no longer matched and had silently done nothing, so it was claiming work it did not describe. That section is rewritten from the current state, including a list of everything tried and backed out, which is now rather longer than the list of what worked. It also said the output "never moved by a bit", which is not true and was worth checking rather than repeating. Splitting the inverse MDCT's accumulator changed the order a sum accumulates in and so its rounding: 386 samples in 441,000 shifted by a single count. That is far inside the tolerance ISO/IEC 11172-4 defines for a compliant decoder -- the standard does not define one correct set of samples at all -- but what is verified here is agreement with ffmpeg to within one least significant bit, not byte-for-byte reproducibility against an earlier build, and the README now says so. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01TzKTzcZxD6h1TY6UVD6TMo