Fix the jni compiler's handling of byte and short return values in x86.

gcc uses byte/short operations to populate return values of these types,
so the sign extension is lost. The jni compiler needs to manually sign
extend the values again since they're treated like words in the system.

With this change, all the run_test tests are working.

Change-Id: If691087ebd79b0d608e44ff8273ed25d46dd6b4a
diff --git a/src/oat/utils/x86/assembler_x86.cc b/src/oat/utils/x86/assembler_x86.cc
index 569ec09..52535fd 100644
--- a/src/oat/utils/x86/assembler_x86.cc
+++ b/src/oat/utils/x86/assembler_x86.cc
@@ -1597,6 +1597,17 @@
   fs()->movl(dest.AsCpuRegister(), Address::Absolute(offs));
 }
 
+void X86Assembler::SignExtend(ManagedRegister mreg, size_t size) {
+  X86ManagedRegister reg = mreg.AsX86();
+  CHECK(size == 1 || size == 2) << size;
+  CHECK(reg.IsCpuRegister()) << reg;
+  if (size == 1) {
+    movsxb(reg.AsCpuRegister(), reg.AsByteRegister());
+  } else {
+    movsxw(reg.AsCpuRegister(), reg.AsCpuRegister());
+  }
+}
+
 void X86Assembler::Move(ManagedRegister mdest, ManagedRegister msrc, size_t size) {
   X86ManagedRegister dest = mdest.AsX86();
   X86ManagedRegister src = msrc.AsX86();