void added a comment. In D110869#3295912 <https://reviews.llvm.org/D110869#3295912>, @craig.topper wrote:
> In D110869#3295906 <https://reviews.llvm.org/D110869#3295906>, @void wrote: > >> In D110869#3295578 <https://reviews.llvm.org/D110869#3295578>, >> @nickdesaulniers wrote: >> >>> In D110869#3295559 <https://reviews.llvm.org/D110869#3295559>, @void wrote: >>> >>>> Weird. We generate similar code to GCC: >>>> >>>> Clang: >>>> _paravirt_ident_64: # @_paravirt_ident_64 >>>> movq %rdi, %rax >>>> xorq %rdi, %rdi >>>> retq >>>> >>>> GCC: >>>> _paravirt_ident_64: >>>> movq %rdi, %rax # tmp85, x >>>> xorl %edi, %edi # >>>> ret >>> >>> Does `xorl` not zero the upper 32b? >> >> I'm thinking no. But it's odd, because both are using `%rdi` but GCC is only >> zeroing out the bottom 32-bits. Seems a bit counter-intuitive. > > Every write to a 32-bit register on x86-64 zeros bits 63:32 of the register. > `xorl %edi, %edi` has the same behavior as `xorq %rdi, %rdi`, but is 1 byte > shorter to encode. Oh, interesting! TIL. So it's really not profitable to use `xorq` at all here...Though it does beg the question of why `xorq` exists. :-) Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D110869/new/ https://reviews.llvm.org/D110869 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits