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 <serguei.i.katkov@intel.com>
diff --git a/compiler/dex/quick/x86/int_x86.cc b/compiler/dex/quick/x86/int_x86.cc
index fd20a81..481b00c 100644
--- a/compiler/dex/quick/x86/int_x86.cc
+++ b/compiler/dex/quick/x86/int_x86.cc
@@ -1006,8 +1006,9 @@
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 {