Hacker News new | past | comments | ask | show | jobs | submit login




Any idea why GCC zeroes out eax before overwriting it?

It never fails to amaze me how smart compilers can be while also being so stupid sometimes.


It could be a bug; I don't see an immediate reason to zero eax in this fragment. Sometimes it's easy to miss the reasons why compilers zero apparently unused things though: it can be about breaking data dependencies or making sure flags are in a known state.


It is a bug, but in the CPU. Until recently, on intel cpu, the popcnt instruction had an implicit dependency on its output register, which can be a performance issue. Explicitly clearing the register (which is very fast and almost free), is an easy way to workaround it.


Oh, nice info. It's gone when using e.g. -march=znver1.


Indeed, thanks! Skimmed a bit too quickly.




Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: