src/cpu/ppc/vm/methodHandles_ppc.cpp

changeset 6495
67fa91961822
parent 6458
ec28f9c041ff
child 6511
31e80afe3fed
     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  

mercurial