[X86] Properly encode a 32-bit address with an index register and no base register...
authorCraig Topper <craig.topper@intel.com>
Tue, 28 Jul 2020 04:11:42 +0000 (21:11 -0700)
committerCraig Topper <craig.topper@intel.com>
Tue, 28 Jul 2020 04:11:42 +0000 (21:11 -0700)
commita0ebac52df6d890fcba52e7db9ac66d0fc7c2582
treeac6903d20c1b231c3269b044e09206eb4a256761
parenta23f62343cb79a3306fa64545db1d61c2d76b9ca
[X86] Properly encode a 32-bit address with an index register and no base register in 16-bit mode.

In 16-bit mode we can encode a 32-bit address using 0x67 prefix.
We were failing to do this when the index register was a 32-bit
register, the base register was not present, and the displacement
fit in 16-bits.

Fixes PR46866.
llvm/lib/Target/X86/MCTargetDesc/X86MCCodeEmitter.cpp
llvm/test/MC/X86/code16gcc.s