< prev index next >

src/hotspot/cpu/x86/templateInterpreterGenerator_x86.cpp

Print this page
*** 808,11 ***
  }
  
  // Interpreter stub for calling a native method. (asm interpreter)
  // This sets up a somewhat different looking stack for calling the
  // native method than the typical interpreter frame setup.
! address TemplateInterpreterGenerator::generate_native_entry(bool synchronized) {
    // determine code generation flags
    bool inc_counter  = UseCompiler || CountCompiledCalls;
  
    // rbx: Method*
    // rbcp: sender sp
--- 808,11 ---
  }
  
  // Interpreter stub for calling a native method. (asm interpreter)
  // This sets up a somewhat different looking stack for calling the
  // native method than the typical interpreter frame setup.
! address TemplateInterpreterGenerator::generate_native_entry(bool synchronized, bool runtime_upcalls) {
    // determine code generation flags
    bool inc_counter  = UseCompiler || CountCompiledCalls;
  
    // rbx: Method*
    // rbcp: sender sp

*** 934,10 ***
--- 934,15 ---
  #endif
  
    // jvmti support
    __ notify_method_entry();
  
+   // runtime upcalls
+   if (runtime_upcalls) {
+     __ generate_runtime_upcalls_on_method_entry();
+   }
+ 
    // work registers
    const Register method = rbx;
    const Register thread = NOT_LP64(rdi) LP64_ONLY(r15_thread);
    const Register t      = NOT_LP64(rcx) LP64_ONLY(r11);
  

*** 1372,11 ***
  }
  
  //
  // Generic interpreted method entry to (asm) interpreter
  //
! address TemplateInterpreterGenerator::generate_normal_entry(bool synchronized) {
    // determine code generation flags
    bool inc_counter  = UseCompiler || CountCompiledCalls;
  
    // ebx: Method*
    // rbcp: sender sp (set in InterpreterMacroAssembler::prepare_to_jump_from_interpreted / generate_call_stub)
--- 1377,11 ---
  }
  
  //
  // Generic interpreted method entry to (asm) interpreter
  //
! address TemplateInterpreterGenerator::generate_normal_entry(bool synchronized, bool runtime_upcalls) {
    // determine code generation flags
    bool inc_counter  = UseCompiler || CountCompiledCalls;
  
    // ebx: Method*
    // rbcp: sender sp (set in InterpreterMacroAssembler::prepare_to_jump_from_interpreted / generate_call_stub)

*** 1514,10 ***
--- 1519,14 ---
  #endif
  
    // jvmti support
    __ notify_method_entry();
  
+   if (runtime_upcalls) {
+     __ generate_runtime_upcalls_on_method_entry();
+   }
+ 
    __ dispatch_next(vtos);
  
    // invocation counter overflow
    if (inc_counter) {
      // Handle overflow of counter and compile method

*** 1830,10 ***
--- 1839,22 ---
    generate_and_dispatch(t);
  }
  
  //-----------------------------------------------------------------------------
  
+ void TemplateInterpreterGenerator::count_bytecode() {
+ #ifdef _LP64
+   __ incrementq(ExternalAddress((address) &BytecodeCounter::_counter_value), rscratch1);
+ #else
+   Unimplemented();
+ #endif
+ }
+ 
+ void TemplateInterpreterGenerator::histogram_bytecode(Template* t) {
+   __ incrementl(ExternalAddress((address) &BytecodeHistogram::_counters[t->bytecode()]), rscratch1);
+ }
+ 
  // Non-product code
  #ifndef PRODUCT
  
  address TemplateInterpreterGenerator::generate_trace_code(TosState state) {
    address entry = __ pc();

*** 1872,18 ***
  #endif // _LP64
  
    return entry;
  }
  
- void TemplateInterpreterGenerator::count_bytecode() {
-   __ incrementl(ExternalAddress((address) &BytecodeCounter::_counter_value), rscratch1);
- }
- 
- void TemplateInterpreterGenerator::histogram_bytecode(Template* t) {
-   __ incrementl(ExternalAddress((address) &BytecodeHistogram::_counters[t->bytecode()]), rscratch1);
- }
- 
  void TemplateInterpreterGenerator::histogram_bytecode_pair(Template* t) {
    __ mov32(rbx, ExternalAddress((address) &BytecodePairHistogram::_index));
    __ shrl(rbx, BytecodePairHistogram::log2_number_of_codes);
    __ orl(rbx,
           ((int) t->bytecode()) <<
--- 1893,10 ---
< prev index next >