diff options
author | Razvan A Lupusoru <razvan.a.lupusoru@intel.com> | 2014-01-24 12:55:31 -0800 |
---|---|---|
committer | Razvan A Lupusoru <razvan.a.lupusoru@intel.com> | 2014-01-24 14:38:53 -0800 |
commit | d3266bcc340d653e178e3ab9d74512c8db122eee (patch) | |
tree | 1a3cf8b8e828994c57c533157bc1f84e50c24a14 /disassembler | |
parent | 26a302b2bb07d754b958a4013116946fbbd78c62 (diff) | |
download | art-d3266bcc340d653e178e3ab9d74512c8db122eee.zip art-d3266bcc340d653e178e3ab9d74512c8db122eee.tar.gz art-d3266bcc340d653e178e3ab9d74512c8db122eee.tar.bz2 |
Reduce x86 sequence for GP pair to XMM
Added support for punpckldq which is useful for interleaving
32-bit values from two xmm registers.
This new instruction is now used for transfers from GP pairs
to XMM in order to reduce path length.
Change-Id: I70d9b69449dfcfb9a94a628deb74a7cffe96bac7
Signed-off-by: Razvan A Lupusoru <razvan.a.lupusoru@intel.com>
Diffstat (limited to 'disassembler')
-rw-r--r-- | disassembler/disassembler_x86.cc | 11 |
1 files changed, 11 insertions, 0 deletions
diff --git a/disassembler/disassembler_x86.cc b/disassembler/disassembler_x86.cc index 6d82f0a..ef83498 100644 --- a/disassembler/disassembler_x86.cc +++ b/disassembler/disassembler_x86.cc @@ -392,6 +392,17 @@ DISASSEMBLER_ENTRY(cmp, has_modrm = true; src_reg_file = dst_reg_file = SSE; break; + case 0x62: + if (prefix[2] == 0x66) { + src_reg_file = dst_reg_file = SSE; + prefix[2] = 0; // Clear prefix now. It has served its purpose as part of the opcode. + } else { + src_reg_file = dst_reg_file = MMX; + } + opcode << "punpckldq"; + load = true; + has_modrm = true; + break; case 0x6E: if (prefix[2] == 0x66) { dst_reg_file = SSE; |