diff options
author | Chih-Min Chao <chihmin.chao@sifive.com> | 2020-07-02 20:57:59 -0700 |
---|---|---|
committer | Chih-Min Chao <chihmin.chao@sifive.com> | 2020-07-02 21:24:21 -0700 |
commit | 0fefb0cf6de06f5ee625cff59cecb42ae9ae3b55 (patch) | |
tree | 7c6e3ef3df57563d61706dd1b53554ec8e7f9844 | |
parent | 3e9c9f75e9720ce5ce2c2b41e5defd9dad9d4915 (diff) | |
download | spike-0fefb0cf6de06f5ee625cff59cecb42ae9ae3b55.zip spike-0fefb0cf6de06f5ee625cff59cecb42ae9ae3b55.tar.gz spike-0fefb0cf6de06f5ee625cff59cecb42ae9ae3b55.tar.bz2 |
commitlog: simplify print_value path
Signed-off-by: Chih-Min Chao <chihmin.chao@sifive.com>
-rw-r--r-- | riscv/execute.cc | 53 |
1 files changed, 27 insertions, 26 deletions
diff --git a/riscv/execute.cc b/riscv/execute.cc index 45fa516..f907591 100644 --- a/riscv/execute.cc +++ b/riscv/execute.cc @@ -23,40 +23,41 @@ static void commit_log_stash_privilege(processor_t* p) static void commit_log_print_value(FILE *log_file, int width, const void *data) { assert(log_file); - const uint64_t *arr = (const uint64_t *)data; - - fprintf(log_file, "0x"); - for (int idx = width / 64 - 1; idx >= 0; --idx) { - fprintf(log_file, "%016" PRIx64, arr[idx]); - } -} - -static void commit_log_print_value(FILE *log_file, - int width, uint64_t hi, uint64_t lo) -{ - assert(log_file); switch (width) { case 8: - fprintf(log_file, "0x%01" PRIx8, (uint8_t)lo); + fprintf(log_file, "0x%01" PRIx8, *(const uint8_t *)data); break; case 16: - fprintf(log_file, "0x%04" PRIx16, (uint16_t)lo); + fprintf(log_file, "0x%04" PRIx16, *(const uint16_t *)data); break; case 32: - fprintf(log_file, "0x%08" PRIx32, (uint32_t)lo); + fprintf(log_file, "0x%08" PRIx32, *(const uint32_t *)data); break; case 64: - fprintf(log_file, "0x%016" PRIx64, lo); - break; - case 128: - fprintf(log_file, "0x%016" PRIx64 "%016" PRIx64, hi, lo); + fprintf(log_file, "0x%016" PRIx64, *(const uint64_t *)data); break; default: - abort(); + // max lengh of vector + if (((width - 1) & width) == 0) { + const uint64_t *arr = (const uint64_t *)data; + + fprintf(log_file, "0x"); + for (int idx = width / 64 - 1; idx >= 0; --idx) { + fprintf(log_file, "%016" PRIx64, arr[idx]); + } + } else { + abort(); + } + break; } } +static void commit_log_print_value(FILE *log_file, int width, uint64_t val) +{ + commit_log_print_value(log_file, width, &val); +} + static void commit_log_print_insn(processor_t *p, reg_t pc, insn_t insn) { FILE *log_file = p->get_log_file(); @@ -69,9 +70,9 @@ static void commit_log_print_insn(processor_t *p, reg_t pc, insn_t insn) int flen = p->get_state()->last_inst_flen; fprintf(log_file, "%1d ", priv); - commit_log_print_value(log_file, xlen, 0, pc); + commit_log_print_value(log_file, xlen, pc); fprintf(log_file, " ("); - commit_log_print_value(log_file, insn.length() * 8, 0, insn.bits()); + commit_log_print_value(log_file, insn.length() * 8, insn.bits()); fprintf(log_file, ")"); bool show_vec = false; @@ -124,20 +125,20 @@ static void commit_log_print_insn(processor_t *p, reg_t pc, insn_t insn) if (is_vreg) commit_log_print_value(log_file, size, &p->VU.elt<uint8_t>(rd, 0)); else - commit_log_print_value(log_file, size, item.second.v[1], item.second.v[0]); + commit_log_print_value(log_file, size, item.second.v); } } for (auto item : load) { fprintf(log_file, " mem "); - commit_log_print_value(log_file, xlen, 0, std::get<0>(item)); + commit_log_print_value(log_file, xlen, std::get<0>(item)); } for (auto item : store) { fprintf(log_file, " mem "); - commit_log_print_value(log_file, xlen, 0, std::get<0>(item)); + commit_log_print_value(log_file, xlen, std::get<0>(item)); fprintf(log_file, " "); - commit_log_print_value(log_file, std::get<2>(item) << 3, 0, std::get<1>(item)); + commit_log_print_value(log_file, std::get<2>(item) << 3, std::get<1>(item)); } fprintf(log_file, "\n"); } |