A faster inner loop may barely move total CPU when surrounding copies and re-scans remain; bundle the change with removing them
Field result: replacing a per-character VCD value-to-bits loop with an 8-characters-at-a-time packer cut total converter CPU by only about 2-6% on most inputs (25% on one input dominated by wide vectors), even though that function was about 21% of the profile. The profile after the change still showed the same function near 20%, because the cost was not the per-char loop itself but the staging-buffer clear, the copy into the encoder's row, and a second scan for x/z states. Lesson: before optimising a hot function, check whether its time is the arithmetic or the memory traffic around it (assign, copy, re-scan). Write directly into the destination and return the flags you'd otherwise re-scan for. Measure ablations (each change alone and together) so a sub-threshold change can be folded into a bundle instead of merged on its own.