#include "gcqueue.h"
#include "markbit.h"
#endif
+#ifdef PERFCOUNT
+#include "bme_perf_counter.h"
+#endif
int msgsizearray[] = {
0, //MSGSTART,
1, //TERMINATE, // 0xDf
3, //MEMREQUEST, // 0xE0
3, //MEMRESPONSE, // 0xE1
-#ifdef MULTICORE_GC
+#ifdef PERFCOUNT
+ 1,
+ 1,
+#endif
+#if defined(MULTICORE_GC)||defined(PMC_GC)
1, //GCINVOKE
1, //GCSTARTPRE, // 0xE2
+#endif
+#ifdef MULTICORE_GC
1, //GCSTARTINIT, // 0xE3
1, //GCSTART, // 0xE4
2, //GCSTARTCOMPACT, // 0xE5
1, //GCGRANTBLOCK,
-1, //GCLOBJINFO, // 0xF2
#ifdef GC_PROFILE
- 4, //GCPROFILES, // 0xF3
+ 3, //GCPROFILES, // 0xF3
#endif // GC_PROFILE
#ifdef GC_CACHE_ADAPT
1, //GCSTARTCACHEPOLICY // 0xF4
stall = true;
totalexetime = msgdata[msgdataindex];
MSG_INDEXINC_I();
-#ifdef RT_TEST
-#else
+#if !defined(RT_TEST)
outputProfileData();
#endif
// cache the msg first
void processmsg_terminate_I() {
disruntimedata();
-#ifdef MULTICORE_GC
-#ifdef GC_CACHE_ADAPT
+#if defined(MULTICORE_GC)&&defined(GC_CACHE_ADAPT)&&defined(GC_CACHE_SAMPLING)&&defined(GC_CACHE_ADAPT_POLICY4)
bamboo_mask_timer_intr(); // disable the TILE_TIMER interrupt
-#endif
#endif
BAMBOO_EXIT_APP(0);
}
+#ifndef PMC_GC
void processmsg_memrequest_I() {
int data1 = msgdata[msgdataindex];
MSG_INDEXINC_I();
}
#endif
}
+#endif //ifndef PMCGC
-#ifdef MULTICORE_GC
+
+#if defined(MULTICORE_GC)||defined(PMC_GC)
void processmsg_gcinvoke_I() {
BAMBOO_ASSERT(BAMBOO_NUM_OF_CORE==STARTUPCORE);
+#ifdef MULTICORE_GC
if(!gc_status_info.gcprocessing && !gcflag) {
gcflag = true;
gcprecheck = true;
gcnumsendobjs[0][i] = 0;
gcnumreceiveobjs[0][i] = 0;
}
+#endif
+#ifdef PMC_GC
+ if(!gcflag) {
+ gcflag = true;
+#endif
for(int i = 0; i < NUMCORES4GC; i++) {
if(i != STARTUPCORE) {
if(BAMBOO_CHECK_SEND_MODE()) {
// the first time to be informed to start gc
gcflag = true;
}
-
+#endif
+#ifdef MULTICORE_GC
void processmsg_gcstartinit_I() {
gc_status_info.gcphase = INITPHASE;
}
MSG_INDEXINC_I();
int data2 = msgdata[msgdataindex];
MSG_INDEXINC_I();
- int data3 = msgdata[msgdataindex];
- MSG_INDEXINC_I();
#ifdef MGC_SPEC
if(gc_profile_flag) {
#endif
- gc_num_obj += data1;
- gc_num_liveobj += data2;
- gc_num_forwardobj += data3;
+ gc_num_liveobj += data1;
+ gc_num_forwardobj += data2;
#ifdef MGC_SPEC
}
#endif
processmsg_terminate_I();
break;
}
-
+#ifndef PMC_GC
case MEMREQUEST: {
processmsg_memrequest_I();
break;
processmsg_memresponse_I();
break;
}
-
-#ifdef MULTICORE_GC
+#endif
+#ifdef PERFCOUNT
+ case MSGPERFCOUNT: {
+ profile_stop();
+ if(BAMBOO_CHECK_SEND_MODE()) {
+ cache_msg_1_I(STARTUPCORE, MSGPERFRESPONSE);
+ } else {
+ send_msg_1_I(STARTUPCORE, MSGPERFRESPONSE);
+ }
+ break;
+ }
+ case MSGPERFRESPONSE: {
+ coreperfcount--;
+ break;
+ }
+#endif
+#if defined(MULTICORE_GC)||defined(PMC_GC)
// GC msgs
case GCINVOKE: {
processmsg_gcinvoke_I();
processmsg_gcstartpre_I();
break;
}
-
+#endif
+#ifdef MULTICORE_GC
case GCSTARTINIT: {
processmsg_gcstartinit_I();
break;