* src/vm/cycles-stats.h (CYCLES_STATS_DECLARE_AND_START)
authoredwin <none@none>
Mon, 24 Apr 2006 11:27:43 +0000 (11:27 +0000)
committeredwin <none@none>
Mon, 24 Apr 2006 11:27:43 +0000 (11:27 +0000)
(CYCLES_STATS_DECLARE_AND_START_WITH_OVERHEAD)
(CYCLES_STATS_END, CYCLES_STATS_END_WITH_OVERHEAD): Added convenience
macros.

* src/vm/cycles-stats.c (cycles_stats_print): Fixed divide-by-zero. Minor
output changes.

src/vm/cycles-stats.c
src/vm/cycles-stats.h

index 0215d368650cfe7286062fa86a6c50e8e121174d..5f05831b6946642a942b54718245aa9258769b9b 100644 (file)
@@ -226,14 +226,14 @@ void cycles_stats_print(FILE *file,
                cumul = 0;
         for (i=0; i<nbins; ++i) {
                        cumul += bins[i];
-            fprintf(file,"\t\t<  %5d: %10lu (%3d%%) %10lu\n",
+            fprintf(file,"\t\t<  %8d: %10lu (%3d%%) %10lu\n",
                     (int)((i+1) * div),
                                        (unsigned long) cumul,
-                                       (int)((cumul * 100) / count),
+                                       (count) ? (int)((cumul * 100) / count) : 0,
                     (unsigned long) bins[i]);
         }
                
-        fprintf(file,"\t\t>= %5d: %10s (----) %10lu\n",
+        fprintf(file,"\t\t>= %8d: %10s (----) %10lu\n",
                 (int)(nbins * div),
                                "OVER",
                 (unsigned long) bins[nbins]);
index 411b2bdeb5de482cfe78700a3ff0bc6e08cfd3db..5ce93dfbc6deaba0cbd3de7696184ce461875d3b 100644 (file)
             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,
@@ -101,6 +119,10 @@ void cycles_stats_print(FILE *file,
 #define CYCLES_STATS_COUNT(name,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)
 
 #endif /* defined(ENABLE_CYCLES_STATS) */