On Tuesday, 24 July 2018 at 21:03:00 UTC, Patrick Schluter wrote:
On Tuesday, 24 July 2018 at 19:39:10 UTC, Ecstatic Coder wrote:
He gets different results with and without optimization
because without optimization the result of the calculation is
spilled to the i unsigned int and then reloaded for the print
call. This save and reload truncated the value to its real
value. In the optimized version, the compiler removed the
spill and the overflowed value contained in the register is
printed as is.
Btw you are actually confirming what I said.
if (i != 0xFFFFFFFF) ...
In the optimized version, when the 64 bits "i" value is
compared to a 32 bits constant, the test fails...
Proof that the value is stored in a **64** bits register, not
32...
We're nitpicking over vocabulary. For me buffer != register.
Buffer is something in memory in my mental model (or is
hardware like the store buffer between register and the cache)
but never would I denominate a register as a buffer.
Pick the word you prefer, the i value is stored in a 64 bits
"place", hence the weird behavior.