aboutsummaryrefslogtreecommitdiff
path: root/riscv
diff options
context:
space:
mode:
authorAndrew Waterman <andrew@sifive.com>2020-06-16 22:11:30 -0700
committerGitHub <noreply@github.com>2020-06-16 22:11:30 -0700
commit960274cda20af7303fdf8109e27d9720395ae21f (patch)
treec6891384ddc1855c049630c82d8e2a690ca163d2 /riscv
parent3369e92602c090b1a0744145301c5abb5f2ece33 (diff)
parent0ea56186d527433c21cf76e2d2a6a53a8d9695dc (diff)
downloadspike-960274cda20af7303fdf8109e27d9720395ae21f.zip
spike-960274cda20af7303fdf8109e27d9720395ae21f.tar.gz
spike-960274cda20af7303fdf8109e27d9720395ae21f.tar.bz2
Merge pull request #490 from chihminchao/rvv-fix-2020-06-17
Rvv fix 2020 06 17
Diffstat (limited to 'riscv')
-rw-r--r--riscv/interactive.cc9
-rw-r--r--riscv/sim.h1
2 files changed, 10 insertions, 0 deletions
diff --git a/riscv/interactive.cc b/riscv/interactive.cc
index 405bf35..00e505d 100644
--- a/riscv/interactive.cc
+++ b/riscv/interactive.cc
@@ -69,6 +69,7 @@ void sim_t::interactive()
funcs["vreg"] = &sim_t::interactive_vreg;
funcs["reg"] = &sim_t::interactive_reg;
funcs["freg"] = &sim_t::interactive_freg;
+ funcs["fregh"] = &sim_t::interactive_fregh;
funcs["fregs"] = &sim_t::interactive_fregs;
funcs["fregd"] = &sim_t::interactive_fregd;
funcs["pc"] = &sim_t::interactive_pc;
@@ -118,6 +119,7 @@ void sim_t::interactive_help(const std::string& cmd, const std::vector<std::stri
std::cerr <<
"Interactive commands:\n"
"reg <core> [reg] # Display [reg] (all if omitted) in <core>\n"
+ "fregh <core> <reg> # Display half precision <reg> in <core>\n"
"fregs <core> <reg> # Display single precision <reg> in <core>\n"
"fregd <core> <reg> # Display double precision <reg> in <core>\n"
"vreg <core> [reg] # Display vector [reg] (all if omitted) in <core>\n"
@@ -296,6 +298,13 @@ void sim_t::interactive_freg(const std::string& cmd, const std::vector<std::stri
fprintf(stderr, "0x%016" PRIx64 "%016" PRIx64 "\n", r.v[1], r.v[0]);
}
+void sim_t::interactive_fregh(const std::string& cmd, const std::vector<std::string>& args)
+{
+ fpr f;
+ f.r = freg(f16_to_f32(f16(get_freg(args))));
+ fprintf(stderr, "%g\n", isBoxedF32(f.r) ? (double)f.s : NAN);
+}
+
void sim_t::interactive_fregs(const std::string& cmd, const std::vector<std::string>& args)
{
fpr f;
diff --git a/riscv/sim.h b/riscv/sim.h
index eee24e5..7cf83d6 100644
--- a/riscv/sim.h
+++ b/riscv/sim.h
@@ -105,6 +105,7 @@ private:
void interactive_vreg(const std::string& cmd, const std::vector<std::string>& args);
void interactive_reg(const std::string& cmd, const std::vector<std::string>& args);
void interactive_freg(const std::string& cmd, const std::vector<std::string>& args);
+ void interactive_fregh(const std::string& cmd, const std::vector<std::string>& args);
void interactive_fregs(const std::string& cmd, const std::vector<std::string>& args);
void interactive_fregd(const std::string& cmd, const std::vector<std::string>& args);
void interactive_pc(const std::string& cmd, const std::vector<std::string>& args);