< prev index next >

src/hotspot/cpu/arm/interpreterRT_arm.cpp

Print this page
rev 54072 : 8213845: ARM32: Interpreter doesn't call result handler after native calls
Summary: Fix mapping of native jboolean result to 0..1 on ARM32
Reviewed-by: aph, phh
Contributed-by: christoph.goettschkes@microdoc.com

@@ -84,15 +84,16 @@
 
   BasicType ret_type = (BasicType) (fingerprint & SignatureIterator::result_feature_mask);
   // For ARM, the fast signature handler only needs to know whether
   // the return value must be unboxed. T_OBJECT and T_ARRAY need not
   // be distinguished from each other and all other return values
-  // behave like integers with respect to the handler.
+  // behave like integers with respect to the handler except T_BOOLEAN
+  // which must be mapped to the range 0..1.
   bool unbox = (ret_type == T_OBJECT) || (ret_type == T_ARRAY);
   if (unbox) {
     ret_type = T_OBJECT;
-  } else {
+  } else if (ret_type != T_BOOLEAN) {
     ret_type = T_INT;
   }
   result |= ((uint64_t) ret_type) << shift;
   shift += SignatureIterator::result_feature_size;
   fingerprint >>= SignatureIterator::result_feature_size;

@@ -279,18 +280,11 @@
 
   BasicType result_type = SignatureIterator::return_type(fingerprint);
 
   address result_handler = Interpreter::result_handler(result_type);
 
-#ifdef AARCH64
-  __ mov_slow(R0, (address)result_handler);
-#else
-  // Check that result handlers are not real handler on ARM (0 or -1).
-  // This ensures the signature handlers do not need symbolic information.
-  assert((result_handler == NULL)||(result_handler==(address)0xffffffff),"");
   __ mov_slow(R0, (intptr_t)result_handler);
-#endif
 
   __ ret();
 }
 
 
< prev index next >