Improve code generation for ARM64 VisitArrayGet/Set.

We prefer the code sequence
   add temp, obj, #offset
   ldr out, [temp, index LSL #shift_amount]
to
   add temp, obj, index LSL #shift_amount
   ldr out, [temp, #offset]

Change-Id: I98f51a1b5a5ecd84c677d6dbd4c4bfc0f157f5e2
diff --git a/compiler/optimizing/code_generator_arm64.cc b/compiler/optimizing/code_generator_arm64.cc
index a9a95d3..f64e801 100644
--- a/compiler/optimizing/code_generator_arm64.cc
+++ b/compiler/optimizing/code_generator_arm64.cc
@@ -1477,9 +1477,8 @@
     source = HeapOperand(obj, offset);
   } else {
     Register temp = temps.AcquireSameSizeAs(obj);
-    Register index_reg = RegisterFrom(index, Primitive::kPrimInt);
-    __ Add(temp, obj, Operand(index_reg, LSL, Primitive::ComponentSizeShift(type)));
-    source = HeapOperand(temp, offset);
+    __ Add(temp, obj, offset);
+    source = HeapOperand(temp, XRegisterFrom(index), LSL, Primitive::ComponentSizeShift(type));
   }
 
   codegen_->Load(type, OutputCPURegister(instruction), source);
@@ -1562,9 +1561,11 @@
         destination = HeapOperand(obj, offset);
       } else {
         Register temp = temps.AcquireSameSizeAs(obj);
-        Register index_reg = InputRegisterAt(instruction, 1);
-        __ Add(temp, obj, Operand(index_reg, LSL, Primitive::ComponentSizeShift(value_type)));
-        destination = HeapOperand(temp, offset);
+        __ Add(temp, obj, offset);
+        destination = HeapOperand(temp,
+                                  XRegisterFrom(index),
+                                  LSL,
+                                  Primitive::ComponentSizeShift(value_type));
       }
 
       codegen_->Store(value_type, source, destination);