aboutsummaryrefslogtreecommitdiff
path: root/riscv/execute.cc
diff options
context:
space:
mode:
authorChih-Min Chao <chihmin.chao@sifive.com>2020-07-02 20:57:59 -0700
committerChih-Min Chao <chihmin.chao@sifive.com>2020-07-02 21:24:21 -0700
commit0fefb0cf6de06f5ee625cff59cecb42ae9ae3b55 (patch)
tree7c6e3ef3df57563d61706dd1b53554ec8e7f9844 /riscv/execute.cc
parent3e9c9f75e9720ce5ce2c2b41e5defd9dad9d4915 (diff)
downloadspike-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>
Diffstat (limited to 'riscv/execute.cc')
-rw-r--r--riscv/execute.cc53
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");
}