Another hypothesis is that the compiler is transforming the
snippet "fistp m64; mov r32, mem" into "fistp m32; mov r32, mem"
because it forgot that there can be side-effects from narrowing a
64 bit fistp into a 32 bit fistp, even if the upper 32 bits of the
64 bit result are never used.
Time to check the assembly output I guess, but this is MSVC which I
am still avoiding installing... I do feel bad throwing about
armchair hypotheses, so I'll slinker away for now and find some time
later to see for myself the behaviour of fistp in compiler-generated
code... :-)