Seven End Turns from ref-turn2.sav on VM140, six control words, whole-state checksum on every post-turn autosave. 53-bit and 64-bit x87 give byte-identical state across all 35,394 leaves, so an x64/SSE port computing in IEEE double has NO double-rounding budget to preserve and floats=bits is free. Two settings do move state, each reproduced on a repeat run: 0x007f (24-bit) Sys[112 "Gamma Cephei"]/Pop2/PopG/PopC 540000000 -> 540000002 0x1a7f (round-up) Flt[34 "Beta Fleet"]/Pos/.[0] and /Pos/.[2], 1 ULP each So the port must hold intermediates at 53 bits and use round-to-nearest -- both SSE defaults, now measured rather than assumed, each with a named regression witness. The briefed triple was under-powered: 0x027f is 53-bit (it differs from 0x127f only in bit 12, infinity control, ignored since the 387) and 0x137f is 64-bit, not a rounding change. Run as written all three come back identical, and that would have "proved" something false on both axes that matter. Evidence the forced word actually held: read-back at each force site plus 38 independent in-pipeline hook samples per run spanning turn phases 4, 6 and 8, all reading the forced value. Mars::Application::Run calls _controlfp(0x50000,0x3070300) at 0x0089f606 every frame, which is 0x127f, so forcing at StrategyClient::EndTurn is wiped before the turn runs; StrategyServer::BeginProcessTurn is the point that works. Also re-confirms the End-Turn determinism oracle on engine cef889e: bb4fd9ac... / 978041ac... unchanged. New tools: verify/fpu-cw/cw_census.py, verify/fpu-cw/trace_bitdiff.py (the latter exists because under a forced 24-bit word the CRT's own %g rendering degrades, so trace text is not a valid comparison surface).
50 lines
2.7 KiB
Text
50 lines
2.7 KiB
Text
===== state_checksum: run-127f vs run-off (post-turn autosave) =====
|
|
A 5ac4a24197e82de49f3077cd8dd25fad ../results/fpu-cw/run-127f/(Autosave).sav
|
|
B 5ac4a24197e82de49f3077cd8dd25fad ../results/fpu-cw/run-off/(Autosave).sav
|
|
policy: floats=bits mask=none reader=fe5a6f7cd4ae7910
|
|
IDENTICAL
|
|
|
|
===== state_checksum: run-127f vs run-007f (post-turn autosave) =====
|
|
A 5ac4a24197e82de49f3077cd8dd25fad ../results/fpu-cw/run-127f/(Autosave).sav
|
|
B 222b03e932f684d5d61f54c155be4f36 ../results/fpu-cw/run-007f/(Autosave).sav
|
|
policy: floats=bits mask=none reader=fe5a6f7cd4ae7910
|
|
DIVERGED: 2 leaf difference(s)
|
|
/Summary/Checksum: -769976634 -> -769976632
|
|
/Sim/systems/Sys[112 "Gamma Cephei"]/Pop2/PopG/PopC: 540000000 -> 540000002
|
|
|
|
===== state_checksum: run-127f vs run-027f (post-turn autosave) =====
|
|
A 5ac4a24197e82de49f3077cd8dd25fad ../results/fpu-cw/run-127f/(Autosave).sav
|
|
B 5ac4a24197e82de49f3077cd8dd25fad ../results/fpu-cw/run-027f/(Autosave).sav
|
|
policy: floats=bits mask=none reader=fe5a6f7cd4ae7910
|
|
IDENTICAL
|
|
|
|
===== state_checksum: run-127f vs run-137f (post-turn autosave) =====
|
|
A 5ac4a24197e82de49f3077cd8dd25fad ../results/fpu-cw/run-127f/(Autosave).sav
|
|
B 5ac4a24197e82de49f3077cd8dd25fad ../results/fpu-cw/run-137f/(Autosave).sav
|
|
policy: floats=bits mask=none reader=fe5a6f7cd4ae7910
|
|
IDENTICAL
|
|
|
|
===== state_checksum: run-127f vs run-1a7f (post-turn autosave) =====
|
|
A 5ac4a24197e82de49f3077cd8dd25fad ../results/fpu-cw/run-127f/(Autosave).sav
|
|
B e86df4556578665ce1b4cdf7a77d22a7 ../results/fpu-cw/run-1a7f/(Autosave).sav
|
|
policy: floats=bits mask=none reader=fe5a6f7cd4ae7910
|
|
DIVERGED: 2 leaf difference(s)
|
|
/Sim/fleets/Flt[34 "Beta Fleet"]/Pos/.[0]: -10.563499450683594 -> -10.563498497009277 [1 ulp]
|
|
/Sim/fleets/Flt[34 "Beta Fleet"]/Pos/.[2]: 1.564733624458313 -> 1.5647337436676025 [1 ulp]
|
|
|
|
===== state_checksum: run-127f vs run-007f-rep (post-turn autosave) =====
|
|
A 5ac4a24197e82de49f3077cd8dd25fad ../results/fpu-cw/run-127f/(Autosave).sav
|
|
B 222b03e932f684d5d61f54c155be4f36 ../results/fpu-cw/run-007f-rep/(Autosave).sav
|
|
policy: floats=bits mask=none reader=fe5a6f7cd4ae7910
|
|
DIVERGED: 2 leaf difference(s)
|
|
/Summary/Checksum: -769976634 -> -769976632
|
|
/Sim/systems/Sys[112 "Gamma Cephei"]/Pop2/PopG/PopC: 540000000 -> 540000002
|
|
|
|
===== state_checksum: run-127f vs run-1a7f-rep (post-turn autosave) =====
|
|
A 5ac4a24197e82de49f3077cd8dd25fad ../results/fpu-cw/run-127f/(Autosave).sav
|
|
B e86df4556578665ce1b4cdf7a77d22a7 ../results/fpu-cw/run-1a7f-rep/(Autosave).sav
|
|
policy: floats=bits mask=none reader=fe5a6f7cd4ae7910
|
|
DIVERGED: 2 leaf difference(s)
|
|
/Sim/fleets/Flt[34 "Beta Fleet"]/Pos/.[0]: -10.563499450683594 -> -10.563498497009277 [1 ulp]
|
|
/Sim/fleets/Flt[34 "Beta Fleet"]/Pos/.[2]: 1.564733624458313 -> 1.5647337436676025 [1 ulp]
|
|
|