* src/vm/jit/powerpc/emit.c (emit_replacement_stubs): Do not
[cacao.git] / src / vm / cycles-stats.h
index 411b2bdeb5de482cfe78700a3ff0bc6e08cfd3db..0d01349cd5726638d77d775a089d4a2604157849 100644 (file)
         cycles_stats_##name##_count++;                                      \
     } while (0)
 
+#define CYCLES_STATS_COUNT_OVER(name,ovname,cyclesexpr)                     \
+    do {                                                                    \
+        u8 cyc = (cyclesexpr);                                              \
+        if (cyc / CYCLES_STATS_##name##_DIV >= CYCLES_STATS_##name##_MAX)   \
+            CYCLES_STATS_COUNT(ovname,cyc);                                 \
+    } while (0)
+
 #define CYCLES_STATS_PRINT(name,file)                                       \
     do {                                                                    \
         cycles_stats_print((file), #name,                                   \
             cycles_stats_##name##_min, cycles_stats_##name##_max, 1);       \
     } while (0)
 
+#define CYCLES_STATS_DECLARE_AND_START                                      \
+    u8 cycles_start = asm_get_cycle_count();                                \
+    u8 cycles_end;
+
+#define CYCLES_STATS_DECLARE_AND_START_WITH_OVERHEAD                        \
+    u8 cycles_start = asm_get_cycle_count();                                \
+    u8 cycles_overhead = asm_get_cycle_count();                             \
+    u8 cycles_end;
+
+#define CYCLES_STATS_END(name)                                              \
+    cycles_end = asm_get_cycle_count();                                     \
+    CYCLES_STATS_COUNT(name, cycles_end - cycles_start);
+
+#define CYCLES_STATS_END_WITH_OVERHEAD(name,ovname)                         \
+    cycles_end = asm_get_cycle_count();                                     \
+    CYCLES_STATS_COUNT(ovname, cycles_overhead - cycles_start);             \
+    CYCLES_STATS_COUNT(name, cycles_end - cycles_overhead);
+
 void cycles_stats_print(FILE *file,
                                            const char *name, int nbins, int div,
                                            u4 *bins, u8 count, u8 total, u8 min, u8 max,
@@ -99,8 +124,13 @@ void cycles_stats_print(FILE *file,
 #define CYCLES_STATS_DECLARE(name,nbins,divisor)
 #define CYCLES_STATS_GET(var)
 #define CYCLES_STATS_COUNT(name,cyclesexpr)
+#define CYCLES_STATS_COUNT_OVER(name,ovname,cyclesexpr)
 #define CYCLES_STATS_PRINT(name,file)
 #define CYCLES_STATS_PRINT_OVERHEAD(name,file)
+#define CYCLES_STATS_DECLARE_AND_START
+#define CYCLES_STATS_DECLARE_AND_START_WITH_OVERHEAD
+#define CYCLES_STATS_END(name)
+#define CYCLES_STATS_END_WITH_OVERHEAD(name,ovname)
 
 #endif /* defined(ENABLE_CYCLES_STATS) */