diff options
author | Mark Mendell <mark.p.mendell@intel.com> | 2014-01-22 09:05:18 -0800 |
---|---|---|
committer | Mark Mendell <mark.p.mendell@intel.com> | 2014-01-24 11:49:06 -0800 |
commit | 4708dcd68eebf1173aef1097dad8ab13466059aa (patch) | |
tree | 92614e1fe36cccda1d2fd7c662c43482ec8bcc85 /disassembler | |
parent | a278ac31a1beeebd093ec64026d27a02fdc28807 (diff) | |
download | art-4708dcd68eebf1173aef1097dad8ab13466059aa.zip art-4708dcd68eebf1173aef1097dad8ab13466059aa.tar.gz art-4708dcd68eebf1173aef1097dad8ab13466059aa.tar.bz2 |
Improve x86 long multiply and shifts
Generate inline code for long shifts by constants and do long
multiplication inline. Convert multiplication by a constant to a
shift when we can. Fix some x86 assembler problems and add the new
instructions that were needed (64 bit shifts).
Change-Id: I6237a31c36159096e399d40d01eb6bfa22ac2772
Signed-off-by: Mark Mendell <mark.p.mendell@intel.com>
Diffstat (limited to 'disassembler')
-rw-r--r-- | disassembler/disassembler_x86.cc | 12 |
1 files changed, 12 insertions, 0 deletions
diff --git a/disassembler/disassembler_x86.cc b/disassembler/disassembler_x86.cc index 6d82f0a..67b8fa9 100644 --- a/disassembler/disassembler_x86.cc +++ b/disassembler/disassembler_x86.cc @@ -485,6 +485,18 @@ DISASSEMBLER_ENTRY(cmp, has_modrm = true; store = true; break; + case 0xA4: + opcode << "shld"; + has_modrm = true; + load = true; + immediate_bytes = 1; + break; + case 0xAC: + opcode << "shrd"; + has_modrm = true; + load = true; + immediate_bytes = 1; + break; case 0xAE: if (prefix[0] == 0xF3) { prefix[0] = 0; // clear prefix now it's served its purpose as part of the opcode |