https://gcc.gnu.org/bugzilla/show_bug.cgi?id=105429
--- Comment #2 from Palaiologos ---
I have observed the same behaviour with and without `mov eax, eax`. CRC32 is a
32-bit checksum, so I'd presume that the high bits aren't considered by the
instruction.
To support my claim, Vol. 2A 3-257 of
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=105429
--- Comment #1 from Uroš Bizjak ---
The intrinsic is defined as:
unsinged __int64 _mm_crc32_u64( unsinged __int64 crc, unsigned __int64 data )
and the unnecessary move is in fact zero-extend:
movl%eax, %eax # 16[c=1 l=2]
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=105429
Andrew Pinski changed:
What|Removed |Added
Severity|normal |enhancement