diff options
author | Aart Bik <ajcbik@google.com> | 2017-03-22 16:27:27 -0700 |
---|---|---|
committer | Aart Bik <ajcbik@google.com> | 2017-03-22 16:27:27 -0700 |
commit | 149fb784740a48d9a7ffdcaa9aabbbfcaa9acb98 (patch) | |
tree | 2749c1c096b8f92f00c81dea75f3784da321b472 /disassembler/disassembler_x86.cc | |
parent | f633fb0f1b959410dbb7ce114e203aba1cfa4059 (diff) |
Properly disassemble cmpeq for x86/x86_64
Rationale:
Break-out CL of ART Vectorizer.
Bug: 34083438
Test: test-art-host
Change-Id: I4027033cbe48a19c426326fc307fe4437b143d61
Diffstat (limited to 'disassembler/disassembler_x86.cc')
-rw-r--r-- | disassembler/disassembler_x86.cc | 18 |
1 files changed, 18 insertions, 0 deletions
diff --git a/disassembler/disassembler_x86.cc b/disassembler/disassembler_x86.cc index a289433af5..77ed3c6a22 100644 --- a/disassembler/disassembler_x86.cc +++ b/disassembler/disassembler_x86.cc @@ -832,6 +832,24 @@ DISASSEMBLER_ENTRY(cmp, store = true; immediate_bytes = 1; break; + case 0x74: + case 0x75: + case 0x76: + if (prefix[2] == 0x66) { + src_reg_file = dst_reg_file = SSE; + prefix[2] = 0; // clear prefix now it's served its purpose as part of the opcode + } else { + src_reg_file = dst_reg_file = MMX; + } + switch (*instr) { + case 0x74: opcode1 = "pcmpeqb"; break; + case 0x75: opcode1 = "pcmpeqw"; break; + case 0x76: opcode1 = "pcmpeqd"; break; + } + prefix[2] = 0; + has_modrm = true; + load = true; + break; case 0x7C: if (prefix[0] == 0xF2) { opcode1 = "haddps"; |