summaryrefslogtreecommitdiffstats
path: root/llvm/lib/Target/X86/Disassembler
diff options
context:
space:
mode:
authorCraig Topper <craig.topper@intel.com>2018-06-01 00:10:36 +0000
committerCraig Topper <craig.topper@intel.com>2018-06-01 00:10:36 +0000
commit0179c6d0e5d2eff4b0073514a766bab44ba917fb (patch)
treec76a1d04d3edd5fefd0313de3505bfe0aeed5454 /llvm/lib/Target/X86/Disassembler
parentb9c2e8cc0124e34b16dd7c80ec998bf7ccb39cb4 (diff)
downloadbcm5719-llvm-0179c6d0e5d2eff4b0073514a766bab44ba917fb.tar.gz
bcm5719-llvm-0179c6d0e5d2eff4b0073514a766bab44ba917fb.zip
[X86][Disassembler] Suppress reading of EVEX.V' and EVEX.R' in 32-bit mode.
llvm-svn: 333714
Diffstat (limited to 'llvm/lib/Target/X86/Disassembler')
-rw-r--r--llvm/lib/Target/X86/Disassembler/X86DisassemblerDecoder.cpp4
1 files changed, 2 insertions, 2 deletions
diff --git a/llvm/lib/Target/X86/Disassembler/X86DisassemblerDecoder.cpp b/llvm/lib/Target/X86/Disassembler/X86DisassemblerDecoder.cpp
index 650e644c526..e24f7df97ca 100644
--- a/llvm/lib/Target/X86/Disassembler/X86DisassemblerDecoder.cpp
+++ b/llvm/lib/Target/X86/Disassembler/X86DisassemblerDecoder.cpp
@@ -1341,7 +1341,7 @@ static int readModRM(struct InternalInstruction* insn) {
reg |= rFromREX(insn->rexPrefix) << 3;
rm |= bFromREX(insn->rexPrefix) << 3;
- if (insn->vectorExtensionType == TYPE_EVEX) {
+ if (insn->vectorExtensionType == TYPE_EVEX && insn->mode == MODE_64BIT) {
reg |= r2FromEVEX2of4(insn->vectorExtensionPrefix[1]) << 4;
rm |= xFromEVEX2of4(insn->vectorExtensionPrefix[1]) << 4;
}
@@ -1759,7 +1759,7 @@ static int readOperands(struct InternalInstruction* insn) {
insn->sibIndex = (SIBIndex)4;
// If EVEX.v2 is set this is one of the 16-31 registers.
- if (insn->vectorExtensionType == TYPE_EVEX &&
+ if (insn->vectorExtensionType == TYPE_EVEX && insn->mode == MODE_64BIT &&
v2FromEVEX4of4(insn->vectorExtensionPrefix[3]))
insn->sibIndex = (SIBIndex)(insn->sibIndex + 16);
OpenPOWER on IntegriCloud