aboutsummaryrefslogtreecommitdiff
path: root/riscv/csrs.h
diff options
context:
space:
mode:
authorScott Johnson <scott.johnson@arilinc.com>2021-10-06 11:03:36 -0700
committerScott Johnson <scott.johnson@arilinc.com>2021-10-06 11:03:37 -0700
commit4618ca82bea2794dacc8d94ad93561fd94612e1b (patch)
tree6f4c5c59e0c1102be56be332a3f760f08993d88e /riscv/csrs.h
parent2e873ce98e7afc0304cffe8f6ea2d7afea8efc2a (diff)
downloadspike-4618ca82bea2794dacc8d94ad93561fd94612e1b.zip
spike-4618ca82bea2794dacc8d94ad93561fd94612e1b.tar.gz
spike-4618ca82bea2794dacc8d94ad93561fd94612e1b.tar.bz2
Give sstatus_csr_t handles to its base_status_csr_t constituents
So I can add specialized methods to base_status_csr_t next, for use from within sstatus_csr_t.
Diffstat (limited to 'riscv/csrs.h')
-rw-r--r--riscv/csrs.h7
1 files changed, 6 insertions, 1 deletions
diff --git a/riscv/csrs.h b/riscv/csrs.h
index cfd766e..3eb6bf5 100644
--- a/riscv/csrs.h
+++ b/riscv/csrs.h
@@ -190,6 +190,8 @@ class base_status_csr_t: public csr_t {
reg_t compute_sstatus_write_mask() const noexcept;
};
+typedef std::shared_ptr<base_status_csr_t> base_status_csr_t_p;
+
// For vsstatus, which is its own separate architectural register
// (unlike sstatus)
@@ -245,12 +247,15 @@ class mstatush_csr_t: public csr_t {
class sstatus_csr_t: public virtualized_csr_t {
public:
- sstatus_csr_t(processor_t* const proc, csr_t_p orig, csr_t_p virt);
+ sstatus_csr_t(processor_t* const proc, base_status_csr_t_p orig, base_status_csr_t_p virt);
// Set FS, VS, or XS bits to dirty
void dirty(const reg_t dirties);
// Return true if the specified bits are not 00 (Off)
bool enabled(const reg_t which);
+ private:
+ base_status_csr_t_p orig_sstatus;
+ base_status_csr_t_p virt_sstatus;
};
typedef std::shared_ptr<sstatus_csr_t> sstatus_csr_t_p;