src/cpu/ppc/vm/templateInterpreter_ppc.cpp

Print this page
rev 6728 : 8050942: PPC64: implement template interpreter for ppc64le
Contributed-by: asmundak@google.com

*** 173,184 **** const Register cache = R11_scratch1; const Register size = R12_scratch2; __ get_cache_and_index_at_bcp(cache, 1, index_size); ! // Big Endian (get least significant byte of 64 bit value): __ lbz(size, in_bytes(ConstantPoolCache::base_offset() + ConstantPoolCacheEntry::flags_offset()) + 7, cache); __ sldi(size, size, Interpreter::logStackElementSize); __ add(R15_esp, R15_esp, size); __ dispatch_next(state, step); return entry; } --- 173,188 ---- const Register cache = R11_scratch1; const Register size = R12_scratch2; __ get_cache_and_index_at_bcp(cache, 1, index_size); ! // Get least significant byte of 64 bit value: ! #if defined(VM_LITTLE_ENDIAN) ! __ lbz(size, in_bytes(ConstantPoolCache::base_offset() + ConstantPoolCacheEntry::flags_offset()), cache); ! #else __ lbz(size, in_bytes(ConstantPoolCache::base_offset() + ConstantPoolCacheEntry::flags_offset()) + 7, cache); + #endif __ sldi(size, size, Interpreter::logStackElementSize); __ add(R15_esp, R15_esp, size); __ dispatch_next(state, step); return entry; }
*** 855,865 **** --- 859,871 ---- // Call signature handler and pass locals address. // // Our signature handlers copy required arguments to the C stack // (outgoing C args), R3_ARG1 to R10_ARG8, and FARG1 to FARG13. __ mr(R3_ARG1, R18_locals); + #if !defined(ABI_ELFv2) __ ld(signature_handler_fd, 0, signature_handler_fd); + #endif __ call_stub(signature_handler_fd); // Remove the register parameter varargs slots we allocated in // compute_interpreter_state. SP+16 ends up pointing to the ABI
*** 1017,1028 **** --- 1023,1039 ---- // Block. We do the call directly and leave the current // last_Java_frame setup undisturbed. We must save any possible // native result across the call. No oop is present. __ mr(R3_ARG1, R16_thread); + #if defined(ABI_ELFv2) + __ call_c(CAST_FROM_FN_PTR(address, JavaThread::check_special_condition_for_native_trans), + relocInfo::none); + #else __ call_c(CAST_FROM_FN_PTR(FunctionDescriptor*, JavaThread::check_special_condition_for_native_trans), relocInfo::none); + #endif __ bind(sync_check_done); //============================================================================= // <<<<<< Back in Interpreter Frame >>>>>