diff options
| author | Craig Topper <craig.topper@intel.com> | 2018-06-06 19:15:15 +0000 |
|---|---|---|
| committer | Craig Topper <craig.topper@intel.com> | 2018-06-06 19:15:15 +0000 |
| commit | ef813a5226e9b82d31c92c9096d6edb6de4b89c3 (patch) | |
| tree | 5ce7b3256f4bd219a6d2f9772298a8de87f6d15b /llvm | |
| parent | d04cc8e64075c9e004d833ec9206980f7fb46ff4 (diff) | |
| download | bcm5719-llvm-ef813a5226e9b82d31c92c9096d6edb6de4b89c3.tar.gz bcm5719-llvm-ef813a5226e9b82d31c92c9096d6edb6de4b89c3.zip | |
[X86] Properly disassemble gather/scatter instructions where xmm4/ymm4/zmm4 are used as the index.
These encodings correspond to the cases in the normal encoding scheme where there is no index and our modrm reading code initially decodes it as such. The VSIB handling code tried to compensate for this, but failed to add the base needed to make later code do the right thing.
Fixes PR37712.
llvm-svn: 334121
Diffstat (limited to 'llvm')
| -rw-r--r-- | llvm/lib/Target/X86/Disassembler/X86DisassemblerDecoder.cpp | 2 | ||||
| -rw-r--r-- | llvm/test/MC/Disassembler/X86/avx-512.txt | 3 |
2 files changed, 4 insertions, 1 deletions
diff --git a/llvm/lib/Target/X86/Disassembler/X86DisassemblerDecoder.cpp b/llvm/lib/Target/X86/Disassembler/X86DisassemblerDecoder.cpp index e08c1a6e194..7badda457f4 100644 --- a/llvm/lib/Target/X86/Disassembler/X86DisassemblerDecoder.cpp +++ b/llvm/lib/Target/X86/Disassembler/X86DisassemblerDecoder.cpp @@ -1773,7 +1773,7 @@ static int readOperands(struct InternalInstruction* insn) { // If sibIndex was set to SIB_INDEX_NONE, index offset is 4. if (insn->sibIndex == SIB_INDEX_NONE) - insn->sibIndex = (SIBIndex)4; + insn->sibIndex = (SIBIndex)(insn->sibIndexBase + 4); // If EVEX.v2 is set this is one of the 16-31 registers. if (insn->vectorExtensionType == TYPE_EVEX && insn->mode == MODE_64BIT && diff --git a/llvm/test/MC/Disassembler/X86/avx-512.txt b/llvm/test/MC/Disassembler/X86/avx-512.txt index f617451bc96..563f6c6a275 100644 --- a/llvm/test/MC/Disassembler/X86/avx-512.txt +++ b/llvm/test/MC/Disassembler/X86/avx-512.txt @@ -47,6 +47,9 @@ # CHECK: vgatherdpd (%rsi,%ymm0,4), %zmm1 {%k2} 0x62 0xf2 0xfd 0x4a 0x92 0x0c 0x86 +# CHECK: vgatherqps (%r13,%zmm4), %ymm5 {%k2} +0x62 0xd2 0x7d 0x4a 0x93 0x6c 0x25 0x00 + # CHECK: vpslld $16, %zmm21, %zmm22 0x62 0xb1 0x4d 0x40 0x72 0xf5 0x10 |

