| //===-------- Scanning.cpp - Implementation of the Scanning class --------===// |
| // |
| // The VMKit project |
| // |
| // This file is distributed under the University of Illinois Open Source |
| // License. See LICENSE.TXT for details. |
| // |
| //===----------------------------------------------------------------------===// |
| |
| #include "debug.h" |
| #include "vmkit/VirtualMachine.h" |
| #include "MMTkObject.h" |
| #include "VmkitGC.h" |
| |
| namespace mmtk { |
| |
| extern "C" void Java_org_j3_mmtk_Scanning_computeThreadRoots__Lorg_mmtk_plan_TraceLocal_2 (MMTkObject* Scanning, MMTkObject* TL) { |
| // When entering this function, all threads are waiting on the rendezvous to |
| // finish. |
| vmkit::Thread* th = vmkit::Thread::get(); |
| vmkit::Thread* tcur = th; |
| |
| do { |
| tcur->scanStack(reinterpret_cast<word_t>(TL)); |
| tcur = (vmkit::Thread*)tcur->next(); |
| } while (tcur != th); |
| } |
| |
| extern "C" void Java_org_j3_mmtk_Scanning_computeGlobalRoots__Lorg_mmtk_plan_TraceLocal_2 (MMTkObject* Scanning, MMTkObject* TL) { |
| vmkit::Thread::get()->MyVM->tracer(reinterpret_cast<word_t>(TL)); |
| |
| vmkit::Thread* th = vmkit::Thread::get(); |
| vmkit::Thread* tcur = th; |
| |
| do { |
| tcur->tracer(reinterpret_cast<word_t>(TL)); |
| tcur = (vmkit::Thread*)tcur->next(); |
| } while (tcur != th); |
| } |
| |
| extern "C" void Java_org_j3_mmtk_Scanning_computeStaticRoots__Lorg_mmtk_plan_TraceLocal_2 (MMTkObject* Scanning, MMTkObject* TL) { |
| // Nothing to do. |
| } |
| |
| extern "C" void Java_org_j3_mmtk_Scanning_resetThreadCounter__ (MMTkObject* Scanning) { |
| // Nothing to do. |
| } |
| |
| extern "C" void Java_org_j3_mmtk_Scanning_specializedScanObject__ILorg_mmtk_plan_TransitiveClosure_2Lorg_vmmagic_unboxed_ObjectReference_2 (MMTkObject* Scanning, uint32_t id, MMTkObject* TC, gc* obj) ALWAYS_INLINE; |
| |
| extern "C" void Java_org_j3_mmtk_Scanning_specializedScanObject__ILorg_mmtk_plan_TransitiveClosure_2Lorg_vmmagic_unboxed_ObjectReference_2 (MMTkObject* Scanning, uint32_t id, MMTkObject* TC, gc* obj) { |
| vmkit::Thread::get()->MyVM->traceObject(obj, reinterpret_cast<word_t>(TC)); |
| } |
| |
| extern "C" void Java_org_j3_mmtk_Scanning_preCopyGCInstances__Lorg_mmtk_plan_TraceLocal_2 (MMTkObject* Scanning, MMTkObject* TL) { |
| // Nothing to do, there are no GC objects on which the GC depends. |
| } |
| |
| extern "C" void Java_org_j3_mmtk_Scanning_scanObject__Lorg_mmtk_plan_TransitiveClosure_2Lorg_vmmagic_unboxed_ObjectReference_2 ( |
| MMTkObject* Scanning, word_t TC, gc* obj) { |
| vmkit::Thread::get()->MyVM->traceObject(obj, TC); |
| } |
| |
| extern "C" void Java_org_j3_mmtk_Scanning_precopyChildren__Lorg_mmtk_plan_TraceLocal_2Lorg_vmmagic_unboxed_ObjectReference_2 ( |
| MMTkObject* Scanning, MMTkObject TL, word_t ref) { UNIMPLEMENTED(); } |
| |
| } |