-static struct _papi_events papi_events[] = {
- PAPI_ADD_EVENT(PAPI_TOT_CYC),
-#if PAPI_COUNT_BRANCHES
- PAPI_ADD_EVENT(FR_BR),
- PAPI_ADD_EVENT(FR_BR_MIS),
- /* Docs are wrong? Opteron does not count indirect branch misses apparently */
- PAPI_ADD_EVENT(FR_BR_MISCOMPARE),
-#endif
-#if PAPI_COUNT_STALLS
- PAPI_ADD_EVENT(FR_DISPATCH_STALLS_BR),
- PAPI_ADD_EVENT(FR_DISPATCH_STALLS_FULL_LS),
-#endif
-#if PAPI_COUNT_DCACHE1_MISSES
- PAPI_ADD_EVENT(PAPI_L1_DCA),
- PAPI_ADD_EVENT(PAPI_L1_DCM),
-#endif
-#if PAPI_COUNT_DCACHE2_MISSES
- PAPI_ADD_EVENT(PAPI_L2_DCA),
- PAPI_ADD_EVENT(PAPI_L2_DCM),
-#endif
+static struct _papi_events papi_events[MAX_PAPI_EVENTS];
+
+static void
+init_countable_events(void)
+{
+ PAPI_ADD_EVENT(PAPI_TOT_CYC);
+ if(RtsFlags.PapiFlags.eventType==PAPI_FLAG_BRANCH) {
+ PAPI_ADD_EVENT(FR_BR);
+ PAPI_ADD_EVENT(FR_BR_MIS);
+ /* Docs are wrong? Opteron does not count indirect branch misses exclusively */
+ PAPI_ADD_EVENT(FR_BR_MISCOMPARE);
+ }
+ if(RtsFlags.PapiFlags.eventType==PAPI_FLAG_STALLS) {
+ PAPI_ADD_EVENT(FR_DISPATCH_STALLS_BR);
+ PAPI_ADD_EVENT(FR_DISPATCH_STALLS_FULL_LS);
+ }
+ if(RtsFlags.PapiFlags.eventType==PAPI_FLAG_CACHE_L1) {
+ PAPI_ADD_EVENT(PAPI_L1_DCA);
+ PAPI_ADD_EVENT(PAPI_L1_DCM);
+ }
+ if(RtsFlags.PapiFlags.eventType==PAPI_FLAG_CACHE_L2) {
+ PAPI_ADD_EVENT(PAPI_L2_DCA);
+ PAPI_ADD_EVENT(PAPI_L2_DCM);
+ }