replaced long long by long64 type
[libfirm] / ir / be / bestatevent.c
1 /**
2  * Statistic events
3  * @date 3.9.2006
4  * @author Sebastian Hack
5  * @cvs-id $Id$
6  */
7
8 #include <assert.h>
9 #include <string.h>
10
11 #include "bestatevent.h"
12
13 #define STACK_SIZE 16
14
15 typedef struct {
16         FILE *f;
17         char tag[512];
18 } ev_env_t;
19
20 static ev_env_t envs[STACK_SIZE];
21 static int sp = 0;
22
23 void be_stat_ev_push(const char **tags, int n_tags, FILE *f)
24 {
25         int i;
26         ev_env_t *env;
27
28         assert(sp < STACK_SIZE && "stat event stack full");
29         env = &envs[sp++];
30
31         env->tag[0] = '\0';
32         for(i = 0; i < n_tags; ++i) {
33                 strncat(env->tag, tags[i], sizeof(env->tag));
34                 strncat(env->tag, ";", sizeof(env->tag));
35         }
36         env->tag[sizeof(env->tag) - 1] = '\0';
37         env->f = f;
38 }
39
40 void be_stat_ev_pop(void)
41 {
42         if(sp > 0) {
43                 envs[--sp].f = NULL;
44         }
45 }
46
47 void be_stat_ev(const char *ev, int value)
48 {
49         if(sp > 0) {
50                 ev_env_t *env = &envs[sp - 1];
51                 if(env->f)
52                         fprintf(env->f, "%s%s;%d\n", env->tag, ev, value);
53         }
54 }
55
56 void be_stat_ev_dbl(const char *ev, double value)
57 {
58         if(sp > 0) {
59                 ev_env_t *env = &envs[sp - 1];
60                 if(env->f)
61                         fprintf(env->f, "%s%s;%f\n", env->tag, ev, value);
62         }
63 }
64
65 void be_stat_ev_ull(const char *ev, ulong64 value)
66 {
67         if(sp > 0) {
68                 ev_env_t *env = &envs[sp - 1];
69                 if(env->f)
70                         fprintf(env->f, "%s%s;%" ULL_FMT "\n", env->tag, ev, value);
71         }
72 }
73
74 int be_stat_ev_is_active(void)
75 {
76         return sp > 0 && envs[sp - 1].f;
77 }