diff options
Diffstat (limited to 'compiler')
| -rw-r--r-- | compiler/dex/quick/gen_loadstore.cc | 6 |
1 files changed, 4 insertions, 2 deletions
diff --git a/compiler/dex/quick/gen_loadstore.cc b/compiler/dex/quick/gen_loadstore.cc index 9f36e35f5e..db844bcde9 100644 --- a/compiler/dex/quick/gen_loadstore.cc +++ b/compiler/dex/quick/gen_loadstore.cc @@ -44,7 +44,9 @@ LIR* Mir2Lir::LoadConstant(RegStorage r_dest, int value) { void Mir2Lir::Workaround7250540(RegLocation rl_dest, RegStorage zero_reg) { if (rl_dest.fp) { int pmap_index = SRegToPMap(rl_dest.s_reg_low); - if (promotion_map_[pmap_index].fp_location == kLocPhysReg) { + const bool is_fp_promoted = promotion_map_[pmap_index].fp_location == kLocPhysReg; + const bool is_core_promoted = promotion_map_[pmap_index].core_location == kLocPhysReg; + if (is_fp_promoted || is_core_promoted) { // Now, determine if this vreg is ever used as a reference. If not, we're done. bool used_as_reference = false; int base_vreg = mir_graph_->SRegToVReg(rl_dest.s_reg_low); @@ -61,7 +63,7 @@ void Mir2Lir::Workaround7250540(RegLocation rl_dest, RegStorage zero_reg) { temp_reg = AllocTemp(); LoadConstant(temp_reg, 0); } - if (promotion_map_[pmap_index].core_location == kLocPhysReg) { + if (is_core_promoted) { // Promoted - just copy in a zero OpRegCopy(RegStorage::Solo32(promotion_map_[pmap_index].core_reg), temp_reg); } else { |