< prev index next >

src/hotspot/share/runtime/continuationEntry.cpp

Print this page
*** 39,14 ***
--- 39,16 ---
  int ContinuationEntry::_cleanup_offset = 0;
  address ContinuationEntry::_return_pc = nullptr;
  address ContinuationEntry::_thaw_call_pc = nullptr;
  address ContinuationEntry::_cleanup_pc = nullptr;
  nmethod* ContinuationEntry::_enter_special = nullptr;
+ nmethod* ContinuationEntry::_do_yield = nullptr;
  int ContinuationEntry::_interpreted_entry_offset = 0;
  
  void ContinuationEntry::set_enter_code(nmethod* nm, int interpreted_entry_offset) {
    assert(_return_pc_offset != 0, "");
+   assert(_thaw_call_pc_offset != 0, "");
    _return_pc = nm->code_begin() + _return_pc_offset;
    _thaw_call_pc = nm->code_begin() + _thaw_call_pc_offset;
    _cleanup_pc = nm->code_begin() + _cleanup_offset;
  
    _enter_special = nm;

*** 55,10 ***
--- 57,14 ---
    assert(_enter_special->code_contains(compiled_entry()),    "entry not in enterSpecial");
    assert(_enter_special->code_contains(interpreted_entry()), "entry not in enterSpecial");
    assert(interpreted_entry() < compiled_entry(), "unexpected code layout");
  }
  
+ void ContinuationEntry::set_yield_code(nmethod* nm) {
+   _do_yield = nm;
+ }
+ 
  address ContinuationEntry::compiled_entry() {
    return _enter_special->verified_entry_point();
  }
  
  address ContinuationEntry::interpreted_entry() {

*** 110,13 ***
    values.describe(frame_no, (intptr_t*)(usp + in_bytes(ContinuationEntry::parent_held_monitor_count_offset())), "parent held monitor count");
  }
  #endif
  
  #ifdef ASSERT
! bool ContinuationEntry::assert_entry_frame_laid_out(JavaThread* thread) {
    assert(thread->has_last_Java_frame(), "Wrong place to use this assertion");
  
    ContinuationEntry* entry = thread->last_continuation();
    assert(entry != nullptr, "");
  
    intptr_t* unextended_sp = entry->entry_sp();
    intptr_t* sp;
--- 116,15 ---
    values.describe(frame_no, (intptr_t*)(usp + in_bytes(ContinuationEntry::parent_held_monitor_count_offset())), "parent held monitor count");
  }
  #endif
  
  #ifdef ASSERT
! bool ContinuationEntry::assert_entry_frame_laid_out(JavaThread* thread, bool preempted) {
    assert(thread->has_last_Java_frame(), "Wrong place to use this assertion");
  
+   if (preempted) return true;
+ 
    ContinuationEntry* entry = thread->last_continuation();
    assert(entry != nullptr, "");
  
    intptr_t* unextended_sp = entry->entry_sp();
    intptr_t* sp;
< prev index next >