#include #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; }