From a76d6e24ec40d79dac7bd001fddeadfc1de41318 Mon Sep 17 00:00:00 2001 From: Yehowshua Immanuel Date: Thu, 13 Mar 2025 16:26:03 -0400 Subject: [PATCH] correct behavior of R type in execute --- hs/Execute.hs | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/hs/Execute.hs b/hs/Execute.hs index bd754f5..b57aded 100644 --- a/hs/Execute.hs +++ b/hs/Execute.hs @@ -61,15 +61,18 @@ execute (Opcode opcode addr) = case opcode of SLL (RTypeFields rd _ rs1 rs2 _) -> let val1 = extractRegVal rs1 val2 = extractRegVal rs2 - in WriteBackGPR rd (val1 `shiftL` fromIntegral val2) + shftAmt = fromIntegral |> slice d5 d0 val2 + in WriteBackGPR rd (val1 `shiftL` shftAmt) SRL (RTypeFields rd _ rs1 rs2 _) -> let val1 = extractRegVal rs1 val2 = extractRegVal rs2 - in WriteBackGPR rd (val1 `shiftR` fromIntegral val2) + shftAmt = fromIntegral |> slice d5 d0 val2 + in WriteBackGPR rd (val1 `shiftR` shftAmt) SRA (RTypeFields rd _ rs1 rs2 _) -> let val1 = unpack (pack (extractRegVal rs1) :: BitVector 64) :: Signed 64 val2 = extractRegVal rs2 - in WriteBackGPR rd (bitCoerce (val1 `shiftR` fromIntegral val2)) + shftAmt = fromIntegral |> slice d5 d0 val2 + in WriteBackGPR rd (bitCoerce (val1 `shiftR` shftAmt)) SLT (RTypeFields rd _ rs1 rs2 _) -> let val1 = unpack (pack (extractRegVal rs1) :: BitVector 64) :: Signed 64 val2 = unpack (pack (extractRegVal rs2) :: BitVector 64) :: Signed 64