correct behavior of R type in execute
This commit is contained in:
parent
4428f7f196
commit
a76d6e24ec
|
@ -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
|
||||
|
|
Loading…
Reference in a new issue