generate real fprem node
[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         if(sp == 0)
54                 return;
55
56         ev_env_t *env = &envs[sp - 1];
57         if(env->f == NULL)
58                 return;
59
60         fprintf(env->f, "%s%s;%d\n", env->tag, ev, value);
61 }
62
63 void be_stat_ev_l(const char *ev, long value)
64 {
65         if(sp == 0)
66                 return;
67
68         ev_env_t *env = &envs[sp - 1];
69         if(env->f == NULL)
70                 return;
71
72         fprintf(env->f, "%s%s;%ld\n", env->tag, ev, value);
73 }
74
75 void be_stat_ev_dbl(const char *ev, double value)
76 {
77         if(sp == 0)
78                 return;
79
80         ev_env_t *env = &envs[sp - 1];
81         if(env->f == NULL)
82                 return;
83
84         fprintf(env->f, "%s%s;%f\n", env->tag, ev, value);
85 }
86
87 void be_stat_ev_ull(const char *ev, ulong64 value)
88 {
89         if(sp == 0)
90                 return;
91
92         ev_env_t *env = &envs[sp - 1];
93         if(env->f == NULL)
94                 return;
95
96         fprintf(env->f, "%s%s;%" ULL_FMT "\n", env->tag, ev, value);
97 }
98
99 int be_stat_ev_is_active(void)
100 {
101         return sp > 0 && envs[sp - 1].f != NULL;
102 }