summaryrefslogtreecommitdiffstats
path: root/disassembler/disassembler_x86.cc
diff options
context:
space:
mode:
authorMark Mendell <mark.p.mendell@intel.com>2014-01-15 11:19:23 -0800
committerMark Mendell <mark.p.mendell@intel.com>2014-01-23 12:18:42 -0800
commite02d48fb24747f90fd893e1c3572bb3c500afced (patch)
tree0ba61fd197826aa107202f7c3b069af2a2bc1b7f /disassembler/disassembler_x86.cc
parent9d8918fe97c235fdc6eb2c7f2d50a6673ab50329 (diff)
downloadandroid_art-e02d48fb24747f90fd893e1c3572bb3c500afced.tar.gz
android_art-e02d48fb24747f90fd893e1c3572bb3c500afced.tar.bz2
android_art-e02d48fb24747f90fd893e1c3572bb3c500afced.zip
Optimize x86 long arithmetic
Be smarter about taking advantage of a constant operand for x86 long add/sub/and/or/xor. Using instructions with immediates and generating results directly into memory reduces the number of temporary registers and avoids hardcoded register usage. Also rewrite the existing non-const x86 arithmetic to avoid fixed register use, and use the fact that x86 instructions are two operand. Pass the opcode to the XXXLong() routines to easily detect two operand DEX opcodes. Add a new StoreFinalValueWide() routine, which is similar to StoreValueWide, but doesn't do an EvalLoc to allocate registers. The src operand must already be in registers, and it just updates the dest location, and calls the right live/dirty routines to get the src into the dest properly. Change-Id: Iefc16e7bc2236a73dc780d3d5137ae8343171f62 Signed-off-by: Mark Mendell <mark.p.mendell@intel.com>
Diffstat (limited to 'disassembler/disassembler_x86.cc')
0 files changed, 0 insertions, 0 deletions