News for hackers. Stuff that matters.
Re:Popcount CPU instruction by kardos on Monday September 09, 2019 @12:39AM (#20915242)
Re:Popcount CPU instruction by account42 on Monday September 09, 2019 @03:52AM (#20916049)
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.

Re:Popcount CPU instruction by vnorilo on Monday September 09, 2019 @04:26AM (#20916199)
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.
Re:Popcount CPU instruction by gpderetta on Monday September 09, 2019 @04:49AM (#20916314)
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.
Re:Popcount CPU instruction by account42 on Monday September 09, 2019 @07:28AM (#20917135)
Oh, nice info. It's gone when using e.g. -march=znver1.
Re:Popcount CPU instruction by vnorilo on Monday September 09, 2019 @04:13AM (#20916145)
This thread [1] might give you some idea of the complexity involved in a similar issue.

OTOH, if you see RAX being zeroed before using EAX, it is likely to be about breaking false deps.

1: https://gcc.gnu.org/bugzilla/show_bug.cgi?id=86314

Re:Popcount CPU instruction by vnorilo on Monday September 09, 2019 @12:42AM (#20915249)
Indeed, thanks! Skimmed a bit too quickly.