MSVC is a portability profile, not a managed parity oracle. The managed implementation is verified bit-for-bit against GCC. This report preserves the independently reproduced MSVC findings without retaining its full raw-output fixture.
- MVerb commit:
9f9512e9d990fcf265e00fc7c2ee47ad20c8019f MVerb.hGit blob:1e895dc8777c62eff627107c848355d1bc487490- MSVC: 19.51.36248.0 (
_MSC_FULL_VER195136248), Windows x64, Release,/fp:strict - GCC: 16.1.0, Windows x64, Release
- Removed full MSVC fixture SHA-256:
EC9CC742EEC56347A6A58B7DD300F0B8240D1BECD17C577833A00456C74F0DDE - Canonical GCC fixture SHA-256:
C3B19849240DB60823859C11D3714747C460B5A71657C035F2FCBFA5CF4B8636
Both captures contain the exact scenario set below, bit-identical inputs, equal output lengths, matching
finite/non-finite classification, and bit-identical outputs for default_long_impulse, parameters_defaults, and
parameters_roundtrip.
Input hashes are SHA-256 over the fixture's comma-joined lowercase 0xNNNNNNNN bit strings with no whitespace.
| Scenario | Input SHA-256 | First differing output | Largest finite difference | Maximum finite absolute difference |
|---|---|---|---|---|
block_partitioning |
07193402FFCAE51E5B0CF17E2FC5220546B52D0CC850CED7D69583DC625914D3 |
1744 | 30371 | 0.2535189241170883 |
configured_variable_blocks |
5E0D0EC730EC0D1C89D3A4C63AA3C019ED0795F60DFDAB15E8F02BE8F70915AF |
1900 | 29855 | 0.2797214388847351 |
default_long_impulse |
36AF0FFD80D741194FD9963CBA56FD7B10773C9C14DA850CCE7DCE84091AC6FA |
none | none | 0 |
in_place |
EDF3D2ADE290827F775CC4B07B87BFACC22609FF71064AD798C70B42FB8A7BFB |
1900 | 8177 | 0.06549897789955139 |
parameter_sweep |
63C4BB66D5F31950CEAB6F7C7CA6D6FE18023CE8B241E45941054733B8C86DD8 |
1900 | 8092 | 0.0005610883235931396 |
parameters_defaults |
E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855 |
none | none | 0 |
parameters_roundtrip |
1ACA5FDF2EB91DCE96ED0C22BD16C44BE745CF2D5F90452118FE54741AF39A02 |
none | none | 0 |
reset_lifecycle |
E3AC25D2BEC52C30073EDF6210BA080AF1D832C274A76401FA529501CDD920D4 |
1900 | 32625 | 0.16403096914291382 |
sample_rate_matrix |
CF9B65BA95026939C6834C1A10DDB926FD174C2DE5968C72B66BFB0000C7AD24 |
316 | 16304 | 0.16701101139187813 |
sample_rate_reconfiguration |
9A02931851502F1E4DB5BCF524FD940046E8C8B94E7FB573E602D5108C2F4F36 |
1744 | 16229 | 0.13454195857048035 |
size_reconfiguration |
84AB0F89F8FBD9D9EF46AE6F41E6B23B2B051ECC38FFF75C71507C8E2D17837D |
1900 | 22321 | 0.23899008333683014 |
zero_frame_lifecycle |
BD4E3F3D2A8EAE781C47308467A6493CAAC828C90D9CB5887D8E8A4B9730A6B0 |
1744 | 2008 | 0.0020544305443763733 |
The parameter/default evidence is retained compactly:
parameters_defaultsoutput bits:0x42b40000,0x00000000,0x42b40000,0x42480000,0x48d75500,0x42c80000,0x42c80000,0x42c80000,0x42c80000,0x00000000parameters_defaultsoutput SHA-256:1F81089C0C9177036BB2452D8305CF886A60ACD6EEB63ABBB0708C281D3458CCparameters_roundtripoutput SHA-256:8E0B6C5B98D05D119BA0157ADB6C5A6EE4A2EF7621DACEBFA7C42F077ECA795Ddefault_long_impulseoutput SHA-256:615BF9FB48568FEE07B119E4C93C8FE1745C65F862846CF7337E119CC278BC88
The first visible differences are small, but MVerb repeatedly feeds each tank into the other channel. Once compiler rounding changes delayed state, the recursive tails dephase and their pointwise difference can become large. The values above are not a tolerance and MSVC is not accepted as an alternative managed trajectory.
The 8 kHz segment of sample_rate_matrix deliberately preserves another upstream behavior. Its configured damping and
bandwidth targets are 11,692 Hz and 15,372 Hz while Nyquist is 4,000 Hz. Upstream does not clamp those controls, and both
native profiles first produce the same NaN bit pattern at output 2618 (stereo frame 1309). Managed GCC parity includes
that raw-bit contract; the portability check requires MSVC to retain the same finite/non-finite classification.
The divergence is stable under the relevant non-fast floating-point modes:
| Configuration | Resulting fixture |
|---|---|
MSVC /fp:strict, Release |
MSVC baseline |
MSVC /fp:precise, Release |
Exact MSVC baseline |
MSVC /fp:strict, Debug |
Exact MSVC baseline |
MSVC /fp:fast, Release |
Distinct third trajectory |
| GCC Release | GCC parity baseline |
GCC -ffp-contract=off |
Exact GCC baseline |
GCC -fexcess-precision=standard |
Exact GCC baseline |
GCC -frounding-math -ffp-contract=off |
Exact GCC baseline |
| GCC Debug with contraction disabled | Exact GCC baseline |
GCC -ffast-math |
Distinct third trajectory |
Both baseline executables import sinf from api-ms-win-crt-math-l1-1-0.dll, so the observed difference is not a
different sine library. No tested strict/precise flag combination makes MSVC reproduce GCC.
./tools/parity/scripts/regenerate-parity.ps1 -Profile msvc -OutputPath ./artifacts/parity/reference.msvc.json
./tools/parity/scripts/verify-msvc-portability.ps1 -MsvcFixture ./artifacts/parity/reference.msvc.jsonThe verifier requires compiler identity, the exact scenario set, bit-identical inputs, equal output lengths, matching finite/non-finite classification, stable parameter/default paths, and explicit divergence in every feedback-sensitive scenario. The full MSVC capture remains a transient artifact.