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));