diff options
| author | Robert Norton | 2016-01-27 17:27:30 +0000 |
|---|---|---|
| committer | Robert Norton | 2016-01-28 14:40:29 +0000 |
| commit | 3f5bb89a9f3419c02d2e8669a01b2ef2be38d00a (patch) | |
| tree | c9ee933fe5b047df259d4020135bc99805428d94 /mips/mips.sail | |
| parent | b1eaa613751e58059fda031e34d57af8cf60ede2 (diff) | |
mips.sail: fix infamous lwr and ldr (now pass tests).
Diffstat (limited to 'mips/mips.sail')
| -rw-r--r-- | mips/mips.sail | 20 |
1 files changed, 10 insertions, 10 deletions
diff --git a/mips/mips.sail b/mips/mips.sail index ec4f89fe..03ffea7b 100644 --- a/mips/mips.sail +++ b/mips/mips.sail @@ -1331,9 +1331,9 @@ function clause execute(LWR(base, rt, offset)) = reg_val := rGPR(rt); wGPR(rt) := EXTS(switch(vAddr[1..0]) (* it is acceptable to sign extend in all cases *) { - case 0b00 -> reg_val[31..8] : mem_val[7..0] - case 0b01 -> reg_val[31..16] : mem_val[15..0] - case 0b10 -> reg_val[31..24] : mem_val[23..0] + case 0b00 -> reg_val[31..8] : mem_val[31..24] + case 0b01 -> reg_val[31..16] : mem_val[31..16] + case 0b10 -> reg_val[31..24] : mem_val[31..8] case 0b11 -> mem_val }); } @@ -1421,13 +1421,13 @@ function clause execute(LDR(base, rt, offset)) = reg_val := rGPR(rt); wGPR(rt) := switch(vAddr[2..0]) { - case 0b000 -> reg_val[55..0] : mem_val[07..0] - case 0b001 -> reg_val[47..0] : mem_val[15..0] - case 0b010 -> reg_val[39..0] : mem_val[23..0] - case 0b011 -> reg_val[31..0] : mem_val[31..0] - case 0b100 -> reg_val[23..0] : mem_val[39..0] - case 0b101 -> reg_val[15..0] : mem_val[47..0] - case 0b110 -> reg_val[07..0] : mem_val[55..0] + case 0b000 -> reg_val[63..08] : mem_val[63..56] + case 0b001 -> reg_val[63..16] : mem_val[63..48] + case 0b010 -> reg_val[63..24] : mem_val[63..40] + case 0b011 -> reg_val[63..32] : mem_val[63..32] + case 0b100 -> reg_val[63..40] : mem_val[63..24] + case 0b101 -> reg_val[63..48] : mem_val[63..16] + case 0b110 -> reg_val[63..56] : mem_val[63..08] case 0b111 -> mem_val }; } |
