diff options
| author | Shaked Flur | 2017-10-26 11:40:35 +0100 |
|---|---|---|
| committer | Shaked Flur | 2017-10-26 11:40:35 +0100 |
| commit | dc62ae8cf283cdf71c0cd2001d57abc77bc52673 (patch) | |
| tree | 43f24767645115bc37bdc9c38ced6bdaaf59ff75 | |
| parent | 29182cd14e228529b3e26ef901e927bde8d27345 (diff) | |
fixed release acquire semantics of AMOs
| -rw-r--r-- | risc-v/riscv.sail | 12 |
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) }; } |
