aboutsummaryrefslogtreecommitdiff
path: root/test/ui/push/ui.c
blob: 281f15b4d93d4e018455ee46875fa4cb8f77c5f7 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
#include <json-c/json.h>

#if CORES != 1
#error
#endif

struct json_object *g_outputs;
uint64_t g_rowid;

void append_output(void) {
    json_object_array_add(json_object_object_get(g_outputs, "rowid"), json_object_new_int64(++g_rowid));
    json_object_array_add(json_object_object_get(g_outputs, "cycl_0"), json_object_new_int64(g_cores->cycl));
    json_object_array_add(json_object_object_get(g_outputs, "mall_0"), json_object_new_int64(g_cores->mall));
    json_object_array_add(json_object_object_get(g_outputs, "pnum_0"), json_object_new_int64(g_cores->pnum));
    json_object_array_add(json_object_object_get(g_outputs, "pfst_0"), json_object_new_int64(g_cores->pfst));
    json_object_array_add(json_object_object_get(g_outputs, "plst_0"), json_object_new_int64(g_cores->plst));
    json_object_array_add(json_object_object_get(g_outputs, "amb0_0"), json_object_new_int64(g_cores->amb0));
    json_object_array_add(json_object_object_get(g_outputs, "amb1_0"), json_object_new_int64(g_cores->amb1));
    json_object_array_add(json_object_object_get(g_outputs, "emb0_0"), json_object_new_int64(g_cores->emb0));
    json_object_array_add(json_object_object_get(g_outputs, "emb1_0"), json_object_new_int64(g_cores->emb1));
    json_object_array_add(json_object_object_get(g_outputs, "eliv_0"), json_object_new_int64(g_cores->eliv));
    json_object_array_add(json_object_object_get(g_outputs, "edea_0"), json_object_new_int64(g_cores->edea));
    json_object_array_add(json_object_object_get(g_outputs, "wmb0_0"), json_object_new_int64(g_cores->wmb0));
    json_object_array_add(json_object_object_get(g_outputs, "wmb1_0"), json_object_new_int64(g_cores->wmb1));
    json_object_array_add(json_object_object_get(g_outputs, "wdea_0"), json_object_new_int64(g_cores->wdea));

#define EVENT_ARRAY(core, index, ev) \
    json_object_array_add(json_object_object_get(g_outputs, #ev EVENT_ARRAYS_SIZE_COL_MARKER #core), json_object_new_int64(g_cores[core].ev##_blob_size)); \
    for (uint64_t i = 0; i < MVEC_SIZE; i++) { \
        json_object_array_add(json_object_object_get(g_outputs, #ev "_" #core), json_object_new_int64(g_cores->ev##a[i])); \
    }
    EVENT_ARRAYS(0)
#undef EVENT_ARRAY

#define ARCH_EVENT_ARRAY(core, index, ev) \
    json_object_array_add(json_object_object_get(g_outputs, #ev EVENT_ARRAYS_SIZE_COL_MARKER #core), json_object_new_int64(g_cores[core].ev##_blob_size)); \
    for (uint64_t i = 0; i < MVEC_SIZE; i++) { \
        json_object_array_add(json_object_object_get(g_outputs, #ev "_" #core), json_object_new_int64(g_cores->ev##a[i])); \
    }
    ARCH_EVENT_ARRAYS(0)
#undef ARCH_EVENT_ARRAY

#define INST(core, pref, index, label, mnemonic, symbol) \
    json_object_array_add(json_object_object_get(g_outputs, #label "_" #pref "_" #core), json_object_new_int64(g_cores->i##pref[index]));
#define INST_EVENT_ARRAY(core, index, iv) \
        INST_SET(core, iv)
    INST_EVENT_ARRAYS(0)
#undef INST_EVENT_ARRAY
#undef INST

    json_object_array_add(json_object_object_get(g_outputs, "step"), json_object_new_int64(g_steps));
}

int main(void) {
#if defined(COMMAND_NEW)
    salis_init();
#elif defined(COMMAND_LOAD)
    salis_load();
#endif

    g_outputs = json_object_new_object();

    json_object_object_add(g_outputs, "rowid", json_object_new_array());
    json_object_object_add(g_outputs, "cycl_0", json_object_new_array());
    json_object_object_add(g_outputs, "mall_0", json_object_new_array());
    json_object_object_add(g_outputs, "pnum_0", json_object_new_array());
    json_object_object_add(g_outputs, "pfst_0", json_object_new_array());
    json_object_object_add(g_outputs, "plst_0", json_object_new_array());
    json_object_object_add(g_outputs, "amb0_0", json_object_new_array());
    json_object_object_add(g_outputs, "amb1_0", json_object_new_array());
    json_object_object_add(g_outputs, "emb0_0", json_object_new_array());
    json_object_object_add(g_outputs, "emb1_0", json_object_new_array());
    json_object_object_add(g_outputs, "eliv_0", json_object_new_array());
    json_object_object_add(g_outputs, "edea_0", json_object_new_array());
    json_object_object_add(g_outputs, "wmb0_0", json_object_new_array());
    json_object_object_add(g_outputs, "wmb1_0", json_object_new_array());
    json_object_object_add(g_outputs, "wdea_0", json_object_new_array());

#define EVENT_ARRAY(core, index, ev) \
    json_object_object_add(g_outputs, #ev EVENT_ARRAYS_SIZE_COL_MARKER #core, json_object_new_array()); \
    json_object_object_add(g_outputs, #ev "_" #core, json_object_new_array());
    EVENT_ARRAYS(0)
#undef EVENT_ARRAY

#define ARCH_EVENT_ARRAY(core, index, ev) \
    json_object_object_add(g_outputs, #ev EVENT_ARRAYS_SIZE_COL_MARKER #core, json_object_new_array()); \
    json_object_object_add(g_outputs, #ev "_" #core, json_object_new_array());
    ARCH_EVENT_ARRAYS(0)
#undef ARCH_EVENT_ARRAY

#define INST(core, pref, index, label, mnemonic, symbol) \
    json_object_object_add(g_outputs, #label "_" #pref "_" #core, json_object_new_array());
#define INST_EVENT_ARRAY(core, index, iv) \
    INST_SET(core, iv)
    INST_EVENT_ARRAYS(0)
#undef INST_EVENT_ARRAY
#undef INST

    json_object_object_add(g_outputs, "step", json_object_new_array());

    append_output();
    salis_step(DATA_PUSH_INTERVAL);
    append_output();
    salis_step(1);

    json_object_to_file(SIM_DIR "/outputs.json", g_outputs);
    json_object_put(g_outputs);

    salis_save(SIM_PATH);
    salis_free();
    return 0;
}