summaryrefslogtreecommitdiffstats
path: root/disassembler
diff options
context:
space:
mode:
authorRazvan A Lupusoru <razvan.a.lupusoru@intel.com>2014-01-24 12:55:31 -0800
committerRazvan A Lupusoru <razvan.a.lupusoru@intel.com>2014-01-24 14:38:53 -0800
commitd3266bcc340d653e178e3ab9d74512c8db122eee (patch)
tree1a3cf8b8e828994c57c533157bc1f84e50c24a14 /disassembler
parent26a302b2bb07d754b958a4013116946fbbd78c62 (diff)
downloadandroid_art-d3266bcc340d653e178e3ab9d74512c8db122eee.tar.gz
android_art-d3266bcc340d653e178e3ab9d74512c8db122eee.tar.bz2
android_art-d3266bcc340d653e178e3ab9d74512c8db122eee.zip
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.cc11
1 files changed, 11 insertions, 0 deletions
diff --git a/disassembler/disassembler_x86.cc b/disassembler/disassembler_x86.cc
index 6d82f0a882..ef83498ac4 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;