diff options
author | Andreas Gampe <agampe@google.com> | 2014-06-20 12:48:12 -0700 |
---|---|---|
committer | Andreas Gampe <agampe@google.com> | 2014-06-20 12:48:12 -0700 |
commit | 596bea8f6331fe8ad6eb456afa1f7dfe1b92e09c (patch) | |
tree | 2349d8b6772867ce7a483190a2be439000596878 /compiler/dex/quick/gen_loadstore.cc | |
parent | 2d2d6bb1ff8692efdddf104dabfb4a2d39877ff6 (diff) | |
download | art-596bea8f6331fe8ad6eb456afa1f7dfe1b92e09c.zip art-596bea8f6331fe8ad6eb456afa1f7dfe1b92e09c.tar.gz art-596bea8f6331fe8ad6eb456afa1f7dfe1b92e09c.tar.bz2 |
ART: Fix StoreValue to use RefDisp when necessary.
Split from https://android-review.googlesource.com/#/c/98605
Change-Id: Ib3a03428ddbec659591b838404bbfa1553fe18e9
Diffstat (limited to 'compiler/dex/quick/gen_loadstore.cc')
-rw-r--r-- | compiler/dex/quick/gen_loadstore.cc | 9 |
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) { |