From 4c7cc15590a2f921e6055f723e46694966cb7665 Mon Sep 17 00:00:00 2001 From: Serguei Katkov Date: Tue, 24 Jun 2014 00:50:02 +0700 Subject: [PATCH] x86_64: Fix GenArrayBoundsCheck The GenArrayBoundsCheck uses args registers to put array_length and index as a parameter to out call. To ensure that we do not corrupt register values there is a check whether need arg is not busy. We need to use reg num comparison instead of reg comparison. Change-Id: I260f02d1c155b69be8652dee2e89f3b63d15297c Signed-off-by: Serguei Katkov --- compiler/dex/quick/x86/int_x86.cc | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/compiler/dex/quick/x86/int_x86.cc b/compiler/dex/quick/x86/int_x86.cc index fd20a81dd..481b00c08 100644 --- a/compiler/dex/quick/x86/int_x86.cc +++ b/compiler/dex/quick/x86/int_x86.cc @@ -1006,8 +1006,9 @@ void X86Mir2Lir::GenArrayBoundsCheck(RegStorage index, RegStorage new_index = index_; // Move index out of kArg1, either directly to kArg0, or to kArg2. - if (index_.GetReg() == m2l_->TargetReg(kArg1).GetReg()) { - if (array_base_.GetReg() == m2l_->TargetReg(kArg0).GetReg()) { + // TODO: clean-up to check not a number but with type + if (index_.GetRegNum() == m2l_->TargetReg(kArg1).GetRegNum()) { + if (array_base_.GetRegNum() == m2l_->TargetReg(kArg0).GetRegNum()) { m2l_->OpRegCopy(m2l_->TargetReg(kArg2), index_); new_index = m2l_->TargetReg(kArg2); } else { -- 2.11.0