summaryrefslogtreecommitdiff
path: root/mips/mips_insts.sail
diff options
context:
space:
mode:
Diffstat (limited to 'mips/mips_insts.sail')
-rw-r--r--mips/mips_insts.sail24
1 files changed, 8 insertions, 16 deletions
diff --git a/mips/mips_insts.sail b/mips/mips_insts.sail
index 2f6b0153..84136e66 100644
--- a/mips/mips_insts.sail
+++ b/mips/mips_insts.sail
@@ -1210,8 +1210,7 @@ function clause decode(0b100010 @ base : regno @ rt : regno @ offset : imm16) =
Some(LWL(base, rt, offset))
function clause execute(LWL(base, rt, offset)) =
{
- /* XXX length check not quite right, but conservative */
- vAddr = addrWrapper(sign_extend(offset) + rGPR(base), LoadData, W);
+ vAddr = addrWrapperUnaligned(sign_extend(offset) + rGPR(base), LoadData, WL);
let pAddr = (TLBTranslate(vAddr, LoadData)) in
{
mem_val = MEMr_wrapper (pAddr[63..2] @ 0b00, 4); /* read word of interest */
@@ -1231,8 +1230,7 @@ function clause decode(0b100110 @ base : regno @ rt : regno @ offset : imm16) =
Some(LWR(base, rt, offset))
function clause execute(LWR(base, rt, offset)) =
{
- /* XXX length check not quite right, but conservative */
- vAddr = addrWrapper(sign_extend(offset) + rGPR(base), LoadData, W);
+ vAddr = addrWrapperUnaligned(sign_extend(offset) + rGPR(base), LoadData, WR);
let pAddr = (TLBTranslate(vAddr, LoadData)) in
{
mem_val = MEMr_wrapper(pAddr[63..2] @ 0b00, 4); /* read word of interest */
@@ -1254,8 +1252,7 @@ function clause decode(0b101010 @ base : regno @ rt : regno @ offset : imm16) =
Some(SWL(base, rt, offset))
function clause execute(SWL(base, rt, offset)) =
{
- /* XXX length check not quite right, but conservative */
- vAddr = addrWrapper(sign_extend(offset) + rGPR(base), StoreData, W);
+ vAddr = addrWrapperUnaligned(sign_extend(offset) + rGPR(base), StoreData, WL);
let pAddr = TLBTranslate(vAddr, StoreData) in
{
reg_val = rGPR(rt);
@@ -1274,8 +1271,7 @@ function clause decode(0b101110 @ base : regno @ rt : regno @ offset : imm16) =
Some(SWR(base, rt, offset))
function clause execute(SWR(base, rt, offset)) =
{
- /* XXX length check not quite right, but conservative */
- vAddr = addrWrapper(sign_extend(offset) + rGPR(base), StoreData, W);
+ vAddr = addrWrapperUnaligned(sign_extend(offset) + rGPR(base), StoreData, WR);
let pAddr = TLBTranslate(vAddr, StoreData) in
{
wordAddr = pAddr[63..2] @ 0b00;
@@ -1296,8 +1292,7 @@ function clause decode(0b011010 @ base : regno @ rt : regno @ offset : imm16) =
Some(LDL(base, rt, offset))
function clause execute(LDL(base, rt, offset)) =
{
- /* XXX length check not quite right, but conservative */
- vAddr = addrWrapper(sign_extend(offset) + rGPR(base), LoadData, D);
+ vAddr = addrWrapperUnaligned(sign_extend(offset) + rGPR(base), LoadData, DL);
let pAddr = TLBTranslate(vAddr, LoadData) in
{
mem_val = MEMr_wrapper(pAddr[63..3] @ 0b000, 8); /* read double of interest */
@@ -1322,8 +1317,7 @@ function clause decode(0b011011 @ base : regno @ rt : regno @ offset : imm16) =
Some(LDR(base, rt, offset))
function clause execute(LDR(base, rt, offset)) =
{
- /* XXX length check not quite right, but conservative */
- vAddr = addrWrapper(sign_extend(offset) + rGPR(base), LoadData, D);
+ vAddr = addrWrapperUnaligned(sign_extend(offset) + rGPR(base), LoadData, DR);
let pAddr = TLBTranslate(vAddr, LoadData) in
{
mem_val = MEMr_wrapper(pAddr[63..3] @ 0b000, 8); /* read double of interest */
@@ -1348,8 +1342,7 @@ function clause decode(0b101100 @ base : regno @ rt : regno @ offset : imm16) =
Some(SDL(base, rt, offset))
function clause execute(SDL(base, rt, offset)) =
{
- /* XXX length check not quite right, but conservative */
- vAddr = addrWrapper(sign_extend(offset) + rGPR(base), StoreData, D);
+ vAddr = addrWrapperUnaligned(sign_extend(offset) + rGPR(base), StoreData, DL);
let pAddr = TLBTranslate(vAddr, StoreData) in
{
reg_val = rGPR(rt);
@@ -1374,8 +1367,7 @@ function clause decode(0b101101 @ base : regno @ rt : regno @ offset : imm16) =
Some(SDR(base, rt, offset))
function clause execute(SDR(base, rt, offset)) =
{
- /* XXX length check not quite right, but conservative */
- vAddr = addrWrapper(sign_extend(offset) + rGPR(base), StoreData, D);
+ vAddr = addrWrapperUnaligned(sign_extend(offset) + rGPR(base), StoreData, DR);
let pAddr = TLBTranslate(vAddr, StoreData) in
{
reg_val = rGPR(rt);