From ea58df801f36605b462783a61b5266bdd9a40eb0 Mon Sep 17 00:00:00 2001 From: Andrew Waterman Date: Thu, 12 Mar 2015 17:32:43 -0700 Subject: Update to new privileged spec Sorry, everyone. --- riscv/interactive.cc | 23 ++++++++++++++++++----- 1 file changed, 18 insertions(+), 5 deletions(-) (limited to 'riscv/interactive.cc') diff --git a/riscv/interactive.cc b/riscv/interactive.cc index 27e9ee0..2dd1cad 100644 --- a/riscv/interactive.cc +++ b/riscv/interactive.cc @@ -132,11 +132,24 @@ reg_t sim_t::get_reg(const std::vector& args) if(args.size() != 2) throw trap_illegal_instruction(); - int p = atoi(args[0].c_str()); - int r = std::find(xpr_name, xpr_name + NXPR, args[1]) - xpr_name; - if (r == NXPR) - r = atoi(args[1].c_str()); - if(p >= (int)num_cores() || r >= NXPR) + char* ptr; + unsigned long p = strtoul(args[0].c_str(), &ptr, 10); + if (*ptr || p >= num_cores()) + throw trap_illegal_instruction(); + + unsigned long r = std::find(xpr_name, xpr_name + NXPR, args[1]) - xpr_name; + if (r == NXPR) { + r = strtoul(args[1].c_str(), &ptr, 10); + if (*ptr) { + #define DECLARE_CSR(name, number) if (args[1] == #name) return procs[p]->get_csr(number); + if (0) ; + #include "encoding.h" + else r = NXPR; + #undef DECLARE_CSR + } + } + + if (r >= NXPR) throw trap_illegal_instruction(); return procs[p]->state.XPR[r]; -- cgit v1.1