[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