1.1 --- a/src/cpu/ppc/vm/methodHandles_ppc.cpp Tue Dec 10 14:29:43 2013 +0100 1.2 +++ b/src/cpu/ppc/vm/methodHandles_ppc.cpp Wed Dec 11 00:06:11 2013 +0100 1.3 @@ -31,12 +31,16 @@ 1.4 1.5 #define __ _masm-> 1.6 1.7 +#ifdef CC_INTERP 1.8 +#define EXCEPTION_ENTRY StubRoutines::throw_NullPointerException_at_call_entry() 1.9 +#else 1.10 +#define EXCEPTION_ENTRY Interpreter::throw_NullPointerException_entry() 1.11 +#endif 1.12 + 1.13 #ifdef PRODUCT 1.14 #define BLOCK_COMMENT(str) // nothing 1.15 -#define STOP(error) stop(error) 1.16 #else 1.17 #define BLOCK_COMMENT(str) __ block_comment(str) 1.18 -#define STOP(error) block_comment(error); __ stop(error) 1.19 #endif 1.20 1.21 #define BIND(label) bind(label); BLOCK_COMMENT(#label ":") 1.22 @@ -167,7 +171,7 @@ 1.23 sizeof(u2), /*is_signed*/ false); 1.24 // assert(sizeof(u2) == sizeof(ConstMethod::_size_of_parameters), ""); 1.25 Label L; 1.26 - __ ld(temp2, __ argument_offset(temp2, temp2, 0), R17_tos); 1.27 + __ ld(temp2, __ argument_offset(temp2, temp2, 0), CC_INTERP_ONLY(R17_tos) NOT_CC_INTERP(R15_esp)); 1.28 __ cmpd(CCR1, temp2, recv); 1.29 __ beq(CCR1, L); 1.30 __ stop("receiver not on stack"); 1.31 @@ -194,7 +198,7 @@ 1.32 return NULL; 1.33 } 1.34 1.35 - Register argbase = R17_tos; // parameter (preserved) 1.36 + Register argbase = CC_INTERP_ONLY(R17_tos) NOT_CC_INTERP(R15_esp); // parameter (preserved) 1.37 Register argslot = R3; 1.38 Register temp1 = R6; 1.39 Register param_size = R7; 1.40 @@ -271,7 +275,7 @@ 1.41 Register member_reg, 1.42 bool for_compiler_entry) { 1.43 assert(is_signature_polymorphic(iid), "expected invoke iid"); 1.44 - Register temp1 = (for_compiler_entry ? R21_tmp1 : R7); 1.45 + Register temp1 = (for_compiler_entry ? R25_tmp5 : R7); 1.46 Register temp2 = (for_compiler_entry ? R22_tmp2 : R8); 1.47 Register temp3 = (for_compiler_entry ? R23_tmp3 : R9); 1.48 Register temp4 = (for_compiler_entry ? R24_tmp4 : R10); 1.49 @@ -295,11 +299,10 @@ 1.50 __ verify_oop(receiver_reg); 1.51 if (iid == vmIntrinsics::_linkToSpecial) { 1.52 // Don't actually load the klass; just null-check the receiver. 1.53 - __ null_check_throw(receiver_reg, 0, temp1, StubRoutines::throw_NullPointerException_at_call_entry()); 1.54 + __ null_check_throw(receiver_reg, -1, temp1, EXCEPTION_ENTRY); 1.55 } else { 1.56 // load receiver klass itself 1.57 - __ null_check_throw(receiver_reg, oopDesc::klass_offset_in_bytes(), 1.58 - temp1, StubRoutines::throw_NullPointerException_at_call_entry()); 1.59 + __ null_check_throw(receiver_reg, oopDesc::klass_offset_in_bytes(), temp1, EXCEPTION_ENTRY); 1.60 __ load_klass(temp1_recv_klass, receiver_reg); 1.61 __ verify_klass_ptr(temp1_recv_klass); 1.62 } 1.63 @@ -451,7 +454,7 @@ 1.64 if (Verbose) { 1.65 tty->print_cr("Registers:"); 1.66 const int abi_offset = frame::abi_112_size / 8; 1.67 - for (int i = R3->encoding(); i <= R13->encoding(); i++) { 1.68 + for (int i = R3->encoding(); i <= R12->encoding(); i++) { 1.69 Register r = as_Register(i); 1.70 int count = i - R3->encoding(); 1.71 // The registers are stored in reverse order on the stack (by save_volatile_gprs(R1_SP, abi_112_size)). 1.72 @@ -490,7 +493,7 @@ 1.73 trace_calling_frame = os::get_sender_for_C_frame(&trace_calling_frame); 1.74 } 1.75 1.76 - // safely create a frame and call frame::describe 1.77 + // Safely create a frame and call frame::describe. 1.78 intptr_t *dump_sp = trace_calling_frame.sender_sp(); 1.79 1.80 frame dump_frame = frame(dump_sp); 1.81 @@ -531,7 +534,7 @@ 1.82 __ mr(R6_ARG4, R1_SP); 1.83 __ call_VM_leaf(CAST_FROM_FN_PTR(address, trace_method_handle_stub)); 1.84 1.85 - __ restore_volatile_gprs(R1_SP, 112); // except R0 1.86 + __ restore_volatile_gprs(R1_SP, 112); // Except R0. 1.87 __ pop_frame(); 1.88 __ restore_LR_CR(R0); 1.89