summaryrefslogtreecommitdiffstats
path: root/compiler
diff options
context:
space:
mode:
authorAndreas Gampe <agampe@google.com>2014-06-20 19:53:22 +0000
committerGerrit Code Review <noreply-gerritcodereview@google.com>2014-06-20 02:09:57 +0000
commit990f110b45127055d99fe894afb1ae4cfd92046c (patch)
tree4b4bc197fdedfea01e64dd1b26e280d45667d055 /compiler
parent40bdf97beffc4d85c966965bdbe81b243141312b (diff)
parent596bea8f6331fe8ad6eb456afa1f7dfe1b92e09c (diff)
downloadart-990f110b45127055d99fe894afb1ae4cfd92046c.zip
art-990f110b45127055d99fe894afb1ae4cfd92046c.tar.gz
art-990f110b45127055d99fe894afb1ae4cfd92046c.tar.bz2
Merge "ART: Fix StoreValue to use RefDisp when necessary."
Diffstat (limited to 'compiler')
-rw-r--r--compiler/dex/quick/gen_loadstore.cc9
1 files changed, 7 insertions, 2 deletions
diff --git a/compiler/dex/quick/gen_loadstore.cc b/compiler/dex/quick/gen_loadstore.cc
index 6469d9c..2dd7def 100644
--- a/compiler/dex/quick/gen_loadstore.cc
+++ b/compiler/dex/quick/gen_loadstore.cc
@@ -213,8 +213,13 @@ void Mir2Lir::StoreValue(RegLocation rl_dest, RegLocation rl_src) {
ResetDefLoc(rl_dest);
if (IsDirty(rl_dest.reg) && LiveOut(rl_dest.s_reg_low)) {
def_start = last_lir_insn_;
- ScopedMemRefType mem_ref_type(this, ResourceMask::kDalvikReg);
- Store32Disp(TargetReg(kSp), SRegOffset(rl_dest.s_reg_low), rl_dest.reg);
+ if (rl_dest.ref) {
+ ScopedMemRefType mem_ref_type(this, ResourceMask::kHeapRef);
+ StoreRefDisp(TargetReg(kSp), SRegOffset(rl_dest.s_reg_low), rl_dest.reg);
+ } else {
+ ScopedMemRefType mem_ref_type(this, ResourceMask::kDalvikReg);
+ Store32Disp(TargetReg(kSp), SRegOffset(rl_dest.s_reg_low), rl_dest.reg);
+ }
MarkClean(rl_dest);
def_end = last_lir_insn_;
if (!rl_dest.ref) {