@@ -277,20 +277,28 @@ ffi_java_rvalue_to_raw (ffi_cif *cif, void *rvalue)
static void
ffi_java_raw_to_rvalue (ffi_cif *cif, void *rvalue)
{
-#if WORDS_BIGENDIAN && FFI_SIZEOF_ARG == 8
+#if FFI_SIZEOF_ARG == 8
switch (cif->rtype->type)
{
case FFI_TYPE_UINT8:
case FFI_TYPE_UINT16:
case FFI_TYPE_UINT32:
+# if WORDS_BIGENDIAN
*(UINT64 *)rvalue >>= 32;
+# else
+ *(ffi_arg *)rvalue = *(UINT32 *)rvalue;
+# endif
break;
case FFI_TYPE_SINT8:
case FFI_TYPE_SINT16:
case FFI_TYPE_SINT32:
case FFI_TYPE_INT:
+# if WORDS_BIGENDIAN
*(SINT64 *)rvalue >>= 32;
+# else
+ *(ffi_arg *)rvalue = *(SINT32 *)rvalue;
+# endif
break;
case FFI_TYPE_COMPLEX:
@@ -1838,7 +1838,7 @@ details. */
return;
insn_ireturn:
- *(ffi_arg *) retp = POPI ();
+ *(jint *) retp = POPI ();
return;
insn_return: