diff options
author | Craig Topper <craig.topper@gmail.com> | 2011-12-30 06:23:39 +0000 |
---|---|---|
committer | Craig Topper <craig.topper@gmail.com> | 2011-12-30 06:23:39 +0000 |
commit | 2ba766ae84c31ee6066f9c5e8029751d3e92cb05 (patch) | |
tree | b0cf1822236261cd470c1c09c7b276ea86ea17db /llvm/lib/Target/X86/Disassembler/X86DisassemblerDecoder.c | |
parent | 03a0beda885cee8bb474f18d0b834b06c562f4b7 (diff) | |
download | bcm5719-llvm-2ba766ae84c31ee6066f9c5e8029751d3e92cb05.tar.gz bcm5719-llvm-2ba766ae84c31ee6066f9c5e8029751d3e92cb05.zip |
Add disassembler support for VPERMIL2PD and VPERMIL2PS.
llvm-svn: 147368
Diffstat (limited to 'llvm/lib/Target/X86/Disassembler/X86DisassemblerDecoder.c')
-rw-r--r-- | llvm/lib/Target/X86/Disassembler/X86DisassemblerDecoder.c | 10 |
1 files changed, 10 insertions, 0 deletions
diff --git a/llvm/lib/Target/X86/Disassembler/X86DisassemblerDecoder.c b/llvm/lib/Target/X86/Disassembler/X86DisassemblerDecoder.c index 1a248073392..c915df0049f 100644 --- a/llvm/lib/Target/X86/Disassembler/X86DisassemblerDecoder.c +++ b/llvm/lib/Target/X86/Disassembler/X86DisassemblerDecoder.c @@ -1472,6 +1472,7 @@ static int readVVVV(struct InternalInstruction* insn) { static int readOperands(struct InternalInstruction* insn) { int index; int hasVVVV, needVVVV; + int sawRegImm = 0; dbgprintf(insn, "readOperands()"); @@ -1500,11 +1501,20 @@ static int readOperands(struct InternalInstruction* insn) { dbgprintf(insn, "We currently don't hande code-offset encodings"); return -1; case ENCODING_IB: + if (sawRegImm) { + // saw a register immediate so don't read again and instead split the previous immediate + // FIXME: This is a hack + insn->immediates[insn->numImmediatesConsumed++] = insn->immediates[insn->numImmediatesConsumed - 1] & 0xf; + break; + } if (readImmediate(insn, 1)) return -1; if (insn->spec->operands[index].type == TYPE_IMM3 && insn->immediates[insn->numImmediatesConsumed - 1] > 7) return -1; + if (insn->spec->operands[index].type == TYPE_XMM128 || + insn->spec->operands[index].type == TYPE_XMM256) + sawRegImm = 1; break; case ENCODING_IW: if (readImmediate(insn, 2)) |