aboutsummaryrefslogtreecommitdiff
path: root/riscv/decode.h
diff options
context:
space:
mode:
authorAndrew Waterman <waterman@eecs.berkeley.edu>2013-12-09 15:55:52 -0800
committerAndrew Waterman <waterman@eecs.berkeley.edu>2013-12-09 15:55:52 -0800
commite85cb99c5e042ebce78f64213677a48ee7ba0491 (patch)
tree1f0a189a5b2792164d14c8f63bc513cc6f2893a2 /riscv/decode.h
parentaedcd67ac8133ea71de7ff37b772c1533b038c93 (diff)
downloadspike-e85cb99c5e042ebce78f64213677a48ee7ba0491.zip
spike-e85cb99c5e042ebce78f64213677a48ee7ba0491.tar.gz
spike-e85cb99c5e042ebce78f64213677a48ee7ba0491.tar.bz2
New RDCYCLE encoding
Diffstat (limited to 'riscv/decode.h')
-rw-r--r--riscv/decode.h5
1 files changed, 3 insertions, 2 deletions
diff --git a/riscv/decode.h b/riscv/decode.h
index 2229afb..8e506e2 100644
--- a/riscv/decode.h
+++ b/riscv/decode.h
@@ -62,6 +62,7 @@ public:
uint32_t rs2() { return x(20, 5); }
uint32_t rs3() { return x(27, 5); }
uint32_t rm() { return x(12, 3); }
+ reg_t csr() { return x(20, 12); }
private:
uint32_t b;
reg_t x(int lo, int len) { return b << (32-lo-len) >> (32-len); }
@@ -167,8 +168,8 @@ private:
} while(0)
#define validate_csr(which, write) ({ \
- int read_priv = ((which) >> 10) & 3; \
- int write_priv = ((which) >> 8) & 3; \
+ int write_priv = ((which) >> 10) & 3; \
+ int read_priv = ((which) >> 8) & 3; \
if (read_priv > 0 || (write_priv > 0 && (write))) require_supervisor; \
(which); })