fix cvt emitter
[libfirm] / ir / be / bestatevent.c
1 /**
2  * Statistic events
3  * @date 3.9.2006
4  * @author Sebastian Hack
5  * @cvs-id $Id$
6  */
7 #ifdef HAVE_CONFIG_H
8 #include "config.h"
9 #endif
10
11 #include <assert.h>
12 #include <string.h>
13
14 #include "bestatevent.h"
15
16 #define STACK_SIZE 16
17
18 typedef struct {
19         FILE *f;
20         char tag[512];
21 } ev_env_t;
22
23 static ev_env_t envs[STACK_SIZE];
24 static unsigned sp = 0;
25
26 void be_stat_ev_push(const char **tags, int n_tags, FILE *f)
27 {
28         int i;
29         ev_env_t *env;
30
31         assert(sp < STACK_SIZE && "stat event stack full");
32         env = &envs[sp++];
33
34         env->tag[0] = '\0';
35         for(i = 0; i < n_tags; ++i) {
36                 strncat(env->tag, tags[i], sizeof(env->tag));
37                 strncat(env->tag, ";", sizeof(env->tag));
38         }
39         env->tag[sizeof(env->tag) - 1] = '\0';
40         env->f = f;
41 }
42
43 void be_stat_ev_pop(void)
44 {
45         if (sp == 0)
46                 return;
47
48         envs[--sp].f = NULL;
49 }
50
51 void be_stat_ev(const char *ev, int value)
52 {
53         ev_env_t *env;
54
55         if (sp == 0)
56                 return;
57
58         env = &envs[sp - 1];
59         if (env->f == NULL)
60                 return;
61
62         fprintf(env->f, "%s%s;%d\n", env->tag, ev, value);
63 }
64
65 void be_stat_ev_l(const char *ev, long value)
66 {
67         ev_env_t *env;
68
69         if (sp == 0)
70                 return;
71
72         env = &envs[sp - 1];
73         if (env->f == NULL)
74                 return;
75
76         fprintf(env->f, "%s%s;%ld\n", env->tag, ev, value);
77 }
78
79 void be_stat_ev_dbl(const char *ev, double value)
80 {
81         ev_env_t *env;
82
83         if (sp == 0)
84                 return;
85
86         env = &envs[sp - 1];
87         if (env->f == NULL)
88                 return;
89
90         fprintf(env->f, "%s%s;%f\n", env->tag, ev, value);
91 }
92
93 void be_stat_ev_ull(const char *ev, ulong64 value)
94 {
95         ev_env_t *env;
96
97         if (sp == 0)
98                 return;
99
100         env = &envs[sp - 1];
101         if (env->f == NULL)
102                 return;
103
104         fprintf(env->f, "%s%s;%" ULL_FMT "\n", env->tag, ev, value);
105 }
106
107 int be_stat_ev_is_active(void)
108 {
109         return sp > 0 && envs[sp - 1].f != NULL;
110 }