Fix bug in long arguments for JNI on x86

Also add new unit test.
Change-Id: I226501dbfec6e207318d8063b5daf53b7b606ee4
diff --git a/src/assembler_x86.cc b/src/assembler_x86.cc
index 59fd33e..6334bd9 100644
--- a/src/assembler_x86.cc
+++ b/src/assembler_x86.cc
@@ -1410,6 +1410,11 @@
   } else if (src.IsCpuRegister()) {
     CHECK_EQ(4u, size);
     movl(Address(ESP, offs), src.AsCpuRegister());
+  } else if (src.IsRegisterPair()) {
+    CHECK_EQ(8u, size);
+    movl(Address(ESP, offs), src.AsRegisterPairLow());
+    movl(Address(ESP, FrameOffset(offs.Int32Value()+4)),
+         src.AsRegisterPairHigh());
   } else if (src.IsX87Register()) {
     if (size == 4) {
       fstps(Address(ESP, offs));
@@ -1459,6 +1464,10 @@
   } else if (dest.IsCpuRegister()) {
     CHECK_EQ(4u, size);
     movl(dest.AsCpuRegister(), Address(ESP, src));
+  } else if (dest.IsRegisterPair()) {
+    CHECK_EQ(8u, size);
+    movl(dest.AsRegisterPairLow(), Address(ESP, src));
+    movl(dest.AsRegisterPairHigh(), Address(ESP, FrameOffset(src.Int32Value()+4)));
   } else if (dest.IsX87Register()) {
     if (size == 4) {
       flds(Address(ESP, src));