Add fast paths for `VarAdd` and `VarCmp` when both operands are simple integer types (VT_I2, VT_I4, VT_EMPTY), skipping the `VariantChangeType` / `VariantCopyInd` pipeline and the locale grab/free cycle in ucrtbase. `VarAdd` and `VarCmp` are called on every iteration of an integer For-loop (counter increment) and on every conditional comparison. Profiling VBScript workloads showed the full VARIANT conversion path dominated that cost. ### Benchmarks The suite skews heavily toward integer For-loops — most scenarios (conditionals, local reads, class property access) are measured *inside* a tight `For i = 1 To N` loop, so the loop counter itself contributes to the speedup. Numbers below are median of 3 runs on Wine with current `master` as baseline. | Scenario | Before | After | Speedup | |----------|--------|-------|---------| | Integer For-loop, empty body (10M) | 2678 ms | 364 ms | 7.4× | | If-condition inside loop (10M) | 3678 ms | 718 ms | 5.1× | | Local variable reads in loop (1M × 10) | 1247 ms | 403 ms | 3.1× | | Class property read in loop (500K) | 289 ms | 164 ms | 1.8× | | For R8 counter (not fast-pathed) | 2910 ms | 2764 ms | ~same | | String concatenation (no loop counter) | 70 ms | 70 ms | ~same | The headline numbers are a ceiling for integer-arithmetic-heavy code. Scripts where the dominant cost is string manipulation, COM dispatch, or I/O will see little change — as the last two rows show. ### Real-world impact 10-23% tick speedup on most visual pinball tables. Tables with heavier VarAdd/VarCmp integer usage benefit most. -- v8: oleaut32: Add fast paths for VarAdd and VarCmp with integer operands. https://gitlab.winehq.org/wine/wine/-/merge_requests/10528