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/arm/assembler_arm.cc b/src/oat/utils/arm/assembler_arm.cc
index 460e81b..e248d5f 100644
--- a/src/oat/utils/arm/assembler_arm.cc
+++ b/src/oat/utils/arm/assembler_arm.cc
@@ -1647,6 +1647,10 @@
StoreToOffset(kStoreWord, SP, TR, thr_offs.Int32Value());
}
+void ArmAssembler::SignExtend(ManagedRegister /*mreg*/, size_t /*size*/) {
+ UNIMPLEMENTED(FATAL) << "no sign extension necessary for arm";
+}
+
void ArmAssembler::Move(ManagedRegister m_dst, ManagedRegister m_src, size_t /*size*/) {
ArmManagedRegister dst = m_dst.AsArm();
ArmManagedRegister src = m_src.AsArm();