[vmkit-commits] [vmkit] r85404 - in /vmkit/trunk/mmtk/mmtk-j3: Collection.cpp ObjectModel.cpp Scanning.cpp Statistics.cpp

Nicolas Geoffray nicolas.geoffray at lip6.fr
Wed Oct 28 10:23:55 PDT 2009


Author: geoffray
Date: Wed Oct 28 12:23:55 2009
New Revision: 85404

URL: http://llvm.org/viewvc/llvm-project?rev=85404&view=rev
Log:
Continue implementing MMTk functions.


Modified:
    vmkit/trunk/mmtk/mmtk-j3/Collection.cpp
    vmkit/trunk/mmtk/mmtk-j3/ObjectModel.cpp
    vmkit/trunk/mmtk/mmtk-j3/Scanning.cpp
    vmkit/trunk/mmtk/mmtk-j3/Statistics.cpp

Modified: vmkit/trunk/mmtk/mmtk-j3/Collection.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/mmtk/mmtk-j3/Collection.cpp?rev=85404&r1=85403&r2=85404&view=diff

==============================================================================
--- vmkit/trunk/mmtk/mmtk-j3/Collection.cpp (original)
+++ vmkit/trunk/mmtk/mmtk-j3/Collection.cpp Wed Oct 28 12:23:55 2009
@@ -18,6 +18,8 @@
 
 extern "C" void JnJVM_org_mmtk_plan_Plan_collectionComplete__();
 
+extern "C" void JnJVM_org_mmtk_utility_heap_HeapGrowthManager_considerHeapSize__();
+
 
 extern "C" bool Java_org_j3_mmtk_Collection_isEmergencyAllocation__ (JavaObject* C) {
   // TODO: emergency when OOM.
@@ -30,9 +32,28 @@
 
 
 extern "C" void Java_org_j3_mmtk_Collection_triggerCollection__I (JavaObject* C, int why) {
+  mvm::Thread* th = mvm::Thread::get();
+ 
+  th->MyVM->startCollection();
+  th->MyVM->rendezvous.synchronize();
+  
   JnJVM_org_mmtk_plan_Plan_setCollectionTriggered__();
   JnJVM_org_j3_config_Selected_00024Collector_staticCollect__();
   JnJVM_org_mmtk_plan_Plan_collectionComplete__();
+
+  th->MyVM->rendezvous.finishRV();
+  
+  th->MyVM->endCollection();
+  
+  th->MyVM->wakeUpFinalizers();
+  th->MyVM->wakeUpEnqueue();
+
+}
+
+extern "C" void Java_org_j3_mmtk_Collection_joinCollection__ (JavaObject* C) {
+  mvm::Thread* th = mvm::Thread::get();
+  assert(th->inRV && "Joining collection without a rendezvous");
+  th->MyVM->rendezvous.join();
 }
 
 extern "C" int Java_org_j3_mmtk_Collection_rendezvous__I (JavaObject* C, int where) {
@@ -51,7 +72,6 @@
 }
 
 
-extern "C" void Java_org_j3_mmtk_Collection_joinCollection__ () { JavaThread::get()->printBacktrace(); abort(); }
 extern "C" void Java_org_j3_mmtk_Collection_reportPhysicalAllocationFailed__ () { JavaThread::get()->printBacktrace(); abort(); }
 extern "C" void Java_org_j3_mmtk_Collection_triggerAsyncCollection__I () { JavaThread::get()->printBacktrace(); abort(); }
 extern "C" void Java_org_j3_mmtk_Collection_noThreadsInGC__ () { JavaThread::get()->printBacktrace(); abort(); }

Modified: vmkit/trunk/mmtk/mmtk-j3/ObjectModel.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/mmtk/mmtk-j3/ObjectModel.cpp?rev=85404&r1=85403&r2=85404&view=diff

==============================================================================
--- vmkit/trunk/mmtk/mmtk-j3/ObjectModel.cpp (original)
+++ vmkit/trunk/mmtk/mmtk-j3/ObjectModel.cpp Wed Oct 28 12:23:55 2009
@@ -52,6 +52,21 @@
 #endif
 }
 
+extern "C" JavaObject* Java_org_j3_mmtk_ObjectModel_getObjectFromStartAddress__Lorg_vmmagic_unboxed_Address_2 (JavaObject* OM, JavaObject* obj) {
+  return obj;
+}
+
+extern "C" intptr_t Java_org_j3_mmtk_ObjectModel_prepareAvailableBits__Lorg_vmmagic_unboxed_ObjectReference_2 (JavaObject* OM, JavaObject* obj) {
+  return ((intptr_t*)obj)[1];
+}
+
+extern "C" uint8_t
+Java_org_j3_mmtk_ObjectModel_attemptAvailableBits__Lorg_vmmagic_unboxed_ObjectReference_2Lorg_vmmagic_unboxed_Word_2Lorg_vmmagic_unboxed_Word_2(
+    JavaObject* OM, JavaObject* obj, intptr_t oldValue, intptr_t newValue) {
+
+  return __sync_bool_compare_and_swap(((intptr_t*)obj) + 1, oldValue, newValue);
+}
+
 extern "C" void Java_org_j3_mmtk_ObjectModel_copy__Lorg_vmmagic_unboxed_ObjectReference_2I () { JavaThread::get()->printBacktrace(); abort(); }
 extern "C" void Java_org_j3_mmtk_ObjectModel_copyTo__Lorg_vmmagic_unboxed_ObjectReference_2Lorg_vmmagic_unboxed_ObjectReference_2Lorg_vmmagic_unboxed_Address_2 () { JavaThread::get()->printBacktrace(); abort(); }
 extern "C" void Java_org_j3_mmtk_ObjectModel_getReferenceWhenCopiedTo__Lorg_vmmagic_unboxed_ObjectReference_2Lorg_vmmagic_unboxed_Address_2 () { JavaThread::get()->printBacktrace(); abort(); }
@@ -61,12 +76,9 @@
 extern "C" void Java_org_j3_mmtk_ObjectModel_getAlignOffsetWhenCopied__Lorg_vmmagic_unboxed_ObjectReference_2 () { JavaThread::get()->printBacktrace(); abort(); }
 extern "C" void Java_org_j3_mmtk_ObjectModel_getCurrentSize__Lorg_vmmagic_unboxed_ObjectReference_2 () { JavaThread::get()->printBacktrace(); abort(); }
 extern "C" void Java_org_j3_mmtk_ObjectModel_getNextObject__Lorg_vmmagic_unboxed_ObjectReference_2 () { JavaThread::get()->printBacktrace(); abort(); }
-extern "C" void Java_org_j3_mmtk_ObjectModel_getObjectFromStartAddress__Lorg_vmmagic_unboxed_Address_2 () { JavaThread::get()->printBacktrace(); abort(); }
 extern "C" void Java_org_j3_mmtk_ObjectModel_getTypeDescriptor__Lorg_vmmagic_unboxed_ObjectReference_2 () { JavaThread::get()->printBacktrace(); abort(); }
 extern "C" void Java_org_j3_mmtk_ObjectModel_getArrayLength__Lorg_vmmagic_unboxed_ObjectReference_2 () { JavaThread::get()->printBacktrace(); abort(); }
 extern "C" void Java_org_j3_mmtk_ObjectModel_isArray__Lorg_vmmagic_unboxed_ObjectReference_2 () { JavaThread::get()->printBacktrace(); abort(); }
 extern "C" void Java_org_j3_mmtk_ObjectModel_isPrimitiveArray__Lorg_vmmagic_unboxed_ObjectReference_2 () { JavaThread::get()->printBacktrace(); abort(); }
-extern "C" void Java_org_j3_mmtk_ObjectModel_attemptAvailableBits__Lorg_vmmagic_unboxed_ObjectReference_2Lorg_vmmagic_unboxed_Word_2Lorg_vmmagic_unboxed_Word_2 () { JavaThread::get()->printBacktrace(); abort(); }
-extern "C" void Java_org_j3_mmtk_ObjectModel_prepareAvailableBits__Lorg_vmmagic_unboxed_ObjectReference_2 () { JavaThread::get()->printBacktrace(); abort(); }
 extern "C" void Java_org_j3_mmtk_ObjectModel_isAcyclic__Lorg_vmmagic_unboxed_ObjectReference_2 () { JavaThread::get()->printBacktrace(); abort(); }
 extern "C" void Java_org_j3_mmtk_ObjectModel_dumpObject__Lorg_vmmagic_unboxed_ObjectReference_2 () { JavaThread::get()->printBacktrace(); abort(); }

Modified: vmkit/trunk/mmtk/mmtk-j3/Scanning.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/mmtk/mmtk-j3/Scanning.cpp?rev=85404&r1=85403&r2=85404&view=diff

==============================================================================
--- vmkit/trunk/mmtk/mmtk-j3/Scanning.cpp (original)
+++ vmkit/trunk/mmtk/mmtk-j3/Scanning.cpp Wed Oct 28 12:23:55 2009
@@ -13,30 +13,26 @@
 using namespace jnjvm;
 
 extern "C" void Java_org_j3_mmtk_Scanning_computeThreadRoots__Lorg_mmtk_plan_TraceLocal_2 (JavaObject* Scanning, JavaObject* TL) {
+  // When entering this function, all threads are waiting on the rendezvous to
+  // finish.
   mvm::Collector::TraceLocal = (uintptr_t)TL;
   mvm::Thread* th = mvm::Thread::get();
-  th->inGC = true;
-  th->MyVM->startCollection();
-  th->MyVM->rendezvous.synchronize();
-}
-
-extern "C" void Java_org_j3_mmtk_Scanning_computeGlobalRoots__Lorg_mmtk_plan_TraceLocal_2 (JavaObject* Scanning, JavaObject* TL) {
-  
-  assert(mvm::Collector::TraceLocal == (uintptr_t)TL && "Mismatch in trace local");
-  
-  mvm::Thread* th = mvm::Thread::get();
+  mvm::StackScanner* sc = th->MyVM->getScanner();  
   mvm::Thread* tcur = th;
-
-  // (1) Trace the VM.
-  th->MyVM->tracer();
-
-  // (2) Trace the threads.
+  
   do {
+    sc->scanStack(tcur);
     tcur->tracer();
     tcur = (mvm::Thread*)tcur->next();
   } while (tcur != th);
 }
 
+extern "C" void Java_org_j3_mmtk_Scanning_computeGlobalRoots__Lorg_mmtk_plan_TraceLocal_2 (JavaObject* Scanning, JavaObject* TL) { 
+  assert(mvm::Collector::TraceLocal == (uintptr_t)TL && "Mismatch in trace local");
+  mvm::Thread::get()->MyVM->tracer();
+
+}
+
 extern "C" void Java_org_j3_mmtk_Scanning_computeStaticRoots__Lorg_mmtk_plan_TraceLocal_2 (JavaObject* Scanning, JavaObject* TL) {
   // Nothing to do.
 }

Modified: vmkit/trunk/mmtk/mmtk-j3/Statistics.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/mmtk/mmtk-j3/Statistics.cpp?rev=85404&r1=85403&r2=85404&view=diff

==============================================================================
--- vmkit/trunk/mmtk/mmtk-j3/Statistics.cpp (original)
+++ vmkit/trunk/mmtk/mmtk-j3/Statistics.cpp Wed Oct 28 12:23:55 2009
@@ -10,6 +10,9 @@
 #include "JavaObject.h"
 #include "JavaThread.h"
 
+#include <sys/time.h>
+#include <ctime>
+
 using namespace jnjvm;
 
 extern "C" void Java_org_j3_mmtk_Statistics_perfCtrInit__I (JavaObject* S) {
@@ -20,7 +23,22 @@
   return 0;
 }
 
+extern "C" int64_t Java_org_j3_mmtk_Statistics_nanoTime__ () {
+  int64_t result;
+  struct timeval tp; 
+
+  int res = gettimeofday (&tp, NULL);
+  assert(res != -1 && "failed gettimeofday.");
+
+  result = (int64_t) tp.tv_sec;
+  result *= (int64_t)1000000L;
+  result += (int64_t)tp.tv_usec;
+  result *= (int64_t)1000;
+
+  return result;
+}
+
+
 extern "C" void Java_org_j3_mmtk_Statistics_getCollectionCount__ () { JavaThread::get()->printBacktrace(); abort(); }
-extern "C" void Java_org_j3_mmtk_Statistics_nanoTime__ () { JavaThread::get()->printBacktrace(); abort(); }
 extern "C" void Java_org_j3_mmtk_Statistics_perfCtrReadCycles__ () { JavaThread::get()->printBacktrace(); abort(); }
 extern "C" void Java_org_j3_mmtk_Statistics_perfCtrReadMetric__ () { JavaThread::get()->printBacktrace(); abort(); }





More information about the vmkit-commits mailing list