OSDN Git Service

Fix Quick compiler "out of registers"
authorbuzbee <buzbee@google.com>
Wed, 19 Mar 2014 19:28:16 +0000 (12:28 -0700)
committerbuzbee <buzbee@google.com>
Wed, 19 Mar 2014 22:21:25 +0000 (15:21 -0700)
commit40bbb39b85c063cd6a9f4ab00ff70372370e08cf
tree1fbcbe2c7f257729c5280dee511c02bed471a9af
parent0d9c02e661813abdf18b4e7544e204d2da719d20
Fix Quick compiler "out of registers"

There are a few places in the Arm backend that expect to be
able to survive on a single temp register - in particular
entry code generation and argument passing.  However, in the
case of a very large frame and floating point ld/st, the
existing code could end up using 2 temps.

In short, if there is a displacement overflow we try to use
indexed load/store instructions (slightly more efficient).
However, there are none for floating point - so we ended up
burning yet another register to construct a direct pointer.
This CL detects this case and doesn't try to use the indexed
load/store mechanism for floats.

Fix for https://code.google.com/p/android/issues/detail?id=67349

Change-Id: I1ea596ea660e4add89fd4fddb8cbf99a54fbd343
compiler/dex/quick/arm/utility_arm.cc
test/083-compiler-regressions/expected.txt
test/083-compiler-regressions/src/Main.java