Do a parallel move in BoundsCheckSlowPath.

The two locations of the index and length could overlap,
so we need a parallel move. Also factorize the code for
doing a parallel move based on two locations.

Change-Id: Iee8b3459e2eed6704d45e9a564fb2cd050741ea4
diff --git a/compiler/optimizing/code_generator_arm64.h b/compiler/optimizing/code_generator_arm64.h
index f2ead21..54e87f4 100644
--- a/compiler/optimizing/code_generator_arm64.h
+++ b/compiler/optimizing/code_generator_arm64.h
@@ -230,6 +230,11 @@
   void Load(Primitive::Type type, vixl::Register dst, const vixl::MemOperand& src);
   void Store(Primitive::Type type, vixl::Register rt, const vixl::MemOperand& dst);
 
+  ParallelMoveResolver* GetMoveResolver() OVERRIDE {
+    UNIMPLEMENTED(INFO) << "TODO: MoveResolver";
+    return nullptr;
+  }
+
  private:
   // Labels for each block that will be compiled.
   vixl::Label* block_labels_;