d9701c528d
GetOrCreateCharacterGlyph (0x5ca2d0) is the #2 CPU hotspot at 3.65%. The game's glyph cache uses only 4 hash buckets for ~95 ASCII chars, causing ~24-entry chain walks with pointer chasing on every lookup. Text measurement (99.8% of calls) re-walks these chains per character, thousands of times per frame during UI updates. Shadow cache: 4096-entry direct-mapped array with Murmur2 hash, keyed on (FontObject*, charCode, param2). Cache hit returns the cached float width via FPU ST(0) inline asm, skipping the chain walk entirely. Gated behind ab_use_custom for A/B benchmarking.