summaryrefslogtreecommitdiffstats
path: root/disassembler/disassembler_x86.cc
diff options
context:
space:
mode:
authorMark Mendell <mark.p.mendell@intel.com>2014-01-31 17:28:00 -0800
committerIan Rogers <irogers@google.com>2014-02-05 22:25:02 -0800
commit67c39c4aefca23cb136157b889c09ee200b3dec6 (patch)
tree9262b44b52bb230b0f8db9f403f3d489adebef59 /disassembler/disassembler_x86.cc
parent6a5ed25e8e692b1a70bfe6385329a3d5f90959ca (diff)
downloadart-67c39c4aefca23cb136157b889c09ee200b3dec6.tar.gz
art-67c39c4aefca23cb136157b889c09ee200b3dec6.tar.bz2
art-67c39c4aefca23cb136157b889c09ee200b3dec6.zip
Support Literal pools for x86
They are being used to store double constants, which are very expensive to generate into XMM registers. Uses the 'Compiler Temporary' support just added. The MIR instructions are scanned for a reference to a double constant, a packed switch or a FillArray. These all need the address of the start of the method, since 32 bit x86 doesn't have a PC-relative addressing mode. If needed, a compiler temporary is allocated, and the address of the base of the method is calculated, and stored. Later uses can just refer to the saved value. Trickiness comes when generating the load from the literal area, as the offset is unknown before final assembler. Assume a 32 bit displacement is needed, and fix this if it wasn't necessary. Use LoadValue to load the 'base of method' pointer. Fix an incorrect test in GetRegLocation. Change-Id: I53ffaa725dabc370e9820c4e0e78664ede3563e6 Signed-off-by: Mark Mendell <mark.p.mendell@intel.com>
Diffstat (limited to 'disassembler/disassembler_x86.cc')
0 files changed, 0 insertions, 0 deletions