void DeltaProcess::transfer(ProcessState reason, DeltaProcess* target) { // change time_stamp for target target->inc_time_stamp(); { ThreadCritical tc; assert(this == active(), "receiver must be the active process"); // save state _last_Delta_fp = ::last_Delta_fp; // *don't* use accessors! (check their implementation to see why) _last_Delta_sp = ::last_Delta_sp; set_state(reason); // restore state ::last_Delta_fp = target->_last_Delta_fp; // *don't* use accessors! ::last_Delta_sp = target->_last_Delta_sp; set_current(target); set_active(target); resetStepping(); } // transfer basic_transfer(target); }
void VMProcess::transfer_to(DeltaProcess* target) { { ThreadCritical tc; // restore state ::last_Delta_fp = target->_last_Delta_fp; // *don't* use accessors! ::last_Delta_sp = target->_last_Delta_sp; DeltaProcess::set_active(target); DeltaProcess::set_current(target); } basic_transfer(target); }
void DeltaProcess::transfer_to_vm() { { ThreadCritical tc; assert(this == active(), "receiver must be the active process"); // save state _last_Delta_fp = ::last_Delta_fp; // *don't* use accessors! (check their implementation to see why) _last_Delta_sp = ::last_Delta_sp; set_current(VMProcess::vm_process()); } basic_transfer(VMProcess::vm_process()); }