Why does mov'ing a constant end up having overhead?
In modern CPUs zero'ing idioms aren't even executed, they only get as far as the register allocater. The register allocater will allocate a zero'd physical register for the architectural register that had the idiom applied to it and the job is done.
https://stackoverflow.com/questions/33666617/what-is-the-bes...
Basically, xor leads to smaller code and more efficient use of resources.