[X86][MC]Fix wrong action for encode movdir64b
authorWang, Xin10 <xin10.wang@intel.com>
Fri, 17 Mar 2023 07:19:51 +0000 (03:19 -0400)
committerxin10.wang <wangxin8@f90srv19.nh.intel.com>
Fri, 17 Mar 2023 07:30:16 +0000 (03:30 -0400)
commit4dd5e9c60efa980b62aff72d358e7679476399e8
tree471d263dbe73de584e97e670d75da20c10f784d9
parentbde91fd03f72a25151caa9f8ee2d4572ff14619b
[X86][MC]Fix wrong action for encode movdir64b

Movdir64b is special for its mem operand, 67 prefex can not only modify its add size,
so it's mem base and index reg should be the same type as source reg, such as
movdir64b (%rdx), rcx, and could not be movdir64b (%edx), rcx.
Now llvm-mc can encode the asm 'movdir64b (%edx), rcx' but the result is the same as
'movdir64b (%edx), ecx', which offend users' intention, while gcc will object this
action and give a warning.
I add 3 new mem descriptions to let llvm-mc to report the same error.

Reviewed By: skan, craig.topper

Differential Revision: https://reviews.llvm.org/D145893
llvm/lib/Target/X86/AsmParser/X86Operand.h
llvm/lib/Target/X86/X86InstrInfo.td
llvm/lib/Target/X86/X86InstrMisc.td
llvm/test/MC/X86/index-operations.s
llvm/utils/TableGen/X86RecognizableInstr.cpp