Handle double and long on the Managed side, and follow AAPCS on the Native side.

Change-Id: I43a8fa36cb79fb438f075986a46c66ab8258e725
diff --git a/src/assembler_arm.cc b/src/assembler_arm.cc
index a728239..70dd20c 100644
--- a/src/assembler_arm.cc
+++ b/src/assembler_arm.cc
@@ -1516,14 +1516,21 @@
 void Assembler::Copy(FrameOffset dest, FrameOffset src, ManagedRegister scratch,
                      size_t size) {
   CHECK(scratch.IsCoreRegister());
+  CHECK(size == 4 || size == 8);
   if (size == 4) {
     LoadFromOffset(kLoadWord, scratch.AsCoreRegister(),
                    SP, src.Int32Value());
     StoreToOffset(kStoreWord, scratch.AsCoreRegister(),
                   SP, dest.Int32Value());
-  } else {
-    // TODO: size != 4
-    LOG(FATAL) << "Unimplemented";
+  } else if (size == 8) {
+    LoadFromOffset(kLoadWord, scratch.AsCoreRegister(),
+                   SP, src.Int32Value());
+    StoreToOffset(kStoreWord, scratch.AsCoreRegister(),
+                  SP, dest.Int32Value());
+    LoadFromOffset(kLoadWord, scratch.AsCoreRegister(),
+                   SP, src.Int32Value() + 4);
+    StoreToOffset(kStoreWord, scratch.AsCoreRegister(),
+                  SP, dest.Int32Value() + 4);
   }
 }