< 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,98 **** 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. bool unbox = (ret_type == T_OBJECT) || (ret_type == T_ARRAY); if (unbox) { ret_type = T_OBJECT; ! } else { ret_type = T_INT; } result |= ((uint64_t) ret_type) << shift; shift += SignatureIterator::result_feature_size; fingerprint >>= SignatureIterator::result_feature_size; --- 84,99 ---- 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 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 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,296 **** 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(); } --- 280,290 ----
< prev index next >