TXT_BuildCharTemplateLevelIndex compares template levels signed: nLevel and nPrevLevel are int
The signed compare is confirmed at 0x00664b39..0x00664b3d (JL/JLE), but nLevel and nPrevLevel are already typed int in the current database, so the change is already in place.
Both locals resolve to uint, but the original compares them signed: 00664b36 MOVZX EAX,byte ptr [ESI] (the row's level, nLevel in EAX); 00664b39 CMP EAX,EDX (nPrevLevel in EDX); 00664b3b JL (out of order: halt, line 0x5c); 00664b3d JLE (same level: skip); 00664b46 MOV EDX,EAX. As uint the generator writes nLevel = (uint32_t)row.level and VC8 emits JB/JBE. On the VC8 SP1 bench (snippet.py, tree 3dba660), int locals make both jumps signed; together with the comparison written as nLevel > nPrevLevel (the operand order 00664b39 shows, which the generator's comparison-form rule restores) the function recompiles byte-identical (MATCH), while that comparison form with uint locals stays INSN_COUNT_MATCH. Type only; names unchanged.
Changes 2, applied together
Retype variable
win 0x00664b10 EDXtypeuint→intRetype variable
win 0x00664b10 EAXtypeuint→int