src/cpu/x86/vm/templateInterpreter_x86_32.cpp

changeset 6723
0bf37f737702
parent 6558
2100bf712e2a
child 6876
710a3c8b516e
child 8368
32b682649973
     1.1 --- a/src/cpu/x86/vm/templateInterpreter_x86_32.cpp	Mon Jun 09 15:42:31 2014 -0700
     1.2 +++ b/src/cpu/x86/vm/templateInterpreter_x86_32.cpp	Tue Apr 01 09:36:49 2014 +0200
     1.3 @@ -1686,91 +1686,6 @@
     1.4    return overhead_size + method_stack + stub_code;
     1.5  }
     1.6  
     1.7 -// asm based interpreter deoptimization helpers
     1.8 -
     1.9 -int AbstractInterpreter::layout_activation(Method* method,
    1.10 -                                           int tempcount,
    1.11 -                                           int popframe_extra_args,
    1.12 -                                           int moncount,
    1.13 -                                           int caller_actual_parameters,
    1.14 -                                           int callee_param_count,
    1.15 -                                           int callee_locals,
    1.16 -                                           frame* caller,
    1.17 -                                           frame* interpreter_frame,
    1.18 -                                           bool is_top_frame,
    1.19 -                                           bool is_bottom_frame) {
    1.20 -  // Note: This calculation must exactly parallel the frame setup
    1.21 -  // in AbstractInterpreterGenerator::generate_method_entry.
    1.22 -  // If interpreter_frame!=NULL, set up the method, locals, and monitors.
    1.23 -  // The frame interpreter_frame, if not NULL, is guaranteed to be the right size,
    1.24 -  // as determined by a previous call to this method.
    1.25 -  // It is also guaranteed to be walkable even though it is in a skeletal state
    1.26 -  // NOTE: return size is in words not bytes
    1.27 -
    1.28 -  // fixed size of an interpreter frame:
    1.29 -  int max_locals = method->max_locals() * Interpreter::stackElementWords;
    1.30 -  int extra_locals = (method->max_locals() - method->size_of_parameters()) *
    1.31 -                     Interpreter::stackElementWords;
    1.32 -
    1.33 -  int overhead = frame::sender_sp_offset - frame::interpreter_frame_initial_sp_offset;
    1.34 -
    1.35 -  // Our locals were accounted for by the caller (or last_frame_adjust on the transistion)
    1.36 -  // Since the callee parameters already account for the callee's params we only need to account for
    1.37 -  // the extra locals.
    1.38 -
    1.39 -
    1.40 -  int size = overhead +
    1.41 -         ((callee_locals - callee_param_count)*Interpreter::stackElementWords) +
    1.42 -         (moncount*frame::interpreter_frame_monitor_size()) +
    1.43 -         tempcount*Interpreter::stackElementWords + popframe_extra_args;
    1.44 -
    1.45 -  if (interpreter_frame != NULL) {
    1.46 -#ifdef ASSERT
    1.47 -    if (!EnableInvokeDynamic)
    1.48 -      // @@@ FIXME: Should we correct interpreter_frame_sender_sp in the calling sequences?
    1.49 -      // Probably, since deoptimization doesn't work yet.
    1.50 -      assert(caller->unextended_sp() == interpreter_frame->interpreter_frame_sender_sp(), "Frame not properly walkable");
    1.51 -    assert(caller->sp() == interpreter_frame->sender_sp(), "Frame not properly walkable(2)");
    1.52 -#endif
    1.53 -
    1.54 -    interpreter_frame->interpreter_frame_set_method(method);
    1.55 -    // NOTE the difference in using sender_sp and interpreter_frame_sender_sp
    1.56 -    // interpreter_frame_sender_sp is the original sp of the caller (the unextended_sp)
    1.57 -    // and sender_sp is fp+8
    1.58 -    intptr_t* locals = interpreter_frame->sender_sp() + max_locals - 1;
    1.59 -
    1.60 -#ifdef ASSERT
    1.61 -    if (caller->is_interpreted_frame()) {
    1.62 -      assert(locals < caller->fp() + frame::interpreter_frame_initial_sp_offset, "bad placement");
    1.63 -    }
    1.64 -#endif
    1.65 -
    1.66 -    interpreter_frame->interpreter_frame_set_locals(locals);
    1.67 -    BasicObjectLock* montop = interpreter_frame->interpreter_frame_monitor_begin();
    1.68 -    BasicObjectLock* monbot = montop - moncount;
    1.69 -    interpreter_frame->interpreter_frame_set_monitor_end(monbot);
    1.70 -
    1.71 -    // Set last_sp
    1.72 -    intptr_t*  rsp = (intptr_t*) monbot  -
    1.73 -                     tempcount*Interpreter::stackElementWords -
    1.74 -                     popframe_extra_args;
    1.75 -    interpreter_frame->interpreter_frame_set_last_sp(rsp);
    1.76 -
    1.77 -    // All frames but the initial (oldest) interpreter frame we fill in have a
    1.78 -    // value for sender_sp that allows walking the stack but isn't
    1.79 -    // truly correct. Correct the value here.
    1.80 -
    1.81 -    if (extra_locals != 0 &&
    1.82 -        interpreter_frame->sender_sp() == interpreter_frame->interpreter_frame_sender_sp() ) {
    1.83 -      interpreter_frame->set_interpreter_frame_sender_sp(caller->sp() + extra_locals);
    1.84 -    }
    1.85 -    *interpreter_frame->interpreter_frame_cache_addr() =
    1.86 -      method->constants()->cache();
    1.87 -  }
    1.88 -  return size;
    1.89 -}
    1.90 -
    1.91 -
    1.92  //------------------------------------------------------------------------------------------------------------------------
    1.93  // Exceptions
    1.94  

mercurial