Fix overlap bug

There is currently no rule against a dex code pattern that
overlaps the result of a long operation with the source operands.
For example:

   ADD_LONG v1, v9, v0

is:  (v1,v2) = (v9, v10) + (v0, v1)

However, dx appears to never generate such a pattern.  This masked
a JIT (and later Art) bug in the handling of long arithmetic code
generation.  The above code expands into a pair of 32-bit add
operations and naively kills the high-order word of the 2nd
operation while computing the low-order word of the result.

The fix is simple - detect this case and use an intermediate
result temporary.

Change-Id: I127f5a51925d5b4249a7a9710cce587dfe0939ad
1 file changed
tree: 884d703782a6a32677518a1814ccc633b4b51ef3
  1. build/
  2. jdwpspy/
  3. src/
  4. test/
  5. tools/
  6. .gitignore
  7. Android.mk