summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorShaked Flur2017-10-26 11:40:35 +0100
committerShaked Flur2017-10-26 11:40:35 +0100
commitdc62ae8cf283cdf71c0cd2001d57abc77bc52673 (patch)
tree43f24767645115bc37bdc9c38ced6bdaaf59ff75
parent29182cd14e228529b3e26ef901e927bde8d27345 (diff)
fixed release acquire semantics of AMOs
-rw-r--r--risc-v/riscv.sail12
1 files changed, 6 insertions, 6 deletions
diff --git a/risc-v/riscv.sail b/risc-v/riscv.sail
index f36dba57..4938aaca 100644
--- a/risc-v/riscv.sail
+++ b/risc-v/riscv.sail
@@ -365,14 +365,14 @@ function clause execute (AMO(op, aq, rl, rs2, rs1, width, rd)) = {
(bit[64]) addr := rGPR(rs1);
switch (width) {
- case WORD -> mem_write_ea(addr, 4, aq, rl, true)
- case DOUBLE -> mem_write_ea(addr, 8, aq, rl, true)
+ case WORD -> mem_write_ea(addr, 4, aq & rl, rl, true)
+ case DOUBLE -> mem_write_ea(addr, 8, aq & rl, rl, true)
};
(bit[64]) loaded :=
switch (width) {
- case WORD -> EXTS(mem_read(addr, 4, aq, rl, true))
- case DOUBLE -> mem_read(addr, 8, aq, rl, true)
+ case WORD -> EXTS(mem_read(addr, 4, aq, aq & rl, true))
+ case DOUBLE -> mem_read(addr, 8, aq, aq & rl, true)
};
wGPR(rd, loaded);
@@ -392,8 +392,8 @@ function clause execute (AMO(op, aq, rl, rs2, rs1, width, rd)) = {
};
switch (width) {
- case WORD -> mem_write_value(addr, 4, result[31..0], aq, rl, true)
- case DOUBLE -> mem_write_value(addr, 8, result, aq, rl, true)
+ case WORD -> mem_write_value(addr, 4, result[31..0], aq & rl, rl, true)
+ case DOUBLE -> mem_write_value(addr, 8, result, aq & rl, rl, true)
};
}