summaryrefslogtreecommitdiff
path: root/src/compiler_llvm/compiler_llvm.h
diff options
context:
space:
mode:
author buzbee <buzbee@google.com> 2012-11-08 07:54:03 -0800
committer buzbee <buzbee@google.com> 2012-11-08 07:54:03 -0800
commita4a970ab4eb5188d5aa2a078dfe4fe336ccbfc4e (patch)
tree884d703782a6a32677518a1814ccc633b4b51ef3 /src/compiler_llvm/compiler_llvm.h
parent07131ca93c301e5cbd6a8702d6af777e1662fe65 (diff)
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
Diffstat (limited to 'src/compiler_llvm/compiler_llvm.h')
0 files changed, 0 insertions, 0 deletions