diff options
-rw-r--r-- | pysc-v/InstructionSets/RV32I.py | 12 |
1 files changed, 6 insertions, 6 deletions
diff --git a/pysc-v/InstructionSets/RV32I.py b/pysc-v/InstructionSets/RV32I.py index 8e1c1b8..f2929f3 100644 --- a/pysc-v/InstructionSets/RV32I.py +++ b/pysc-v/InstructionSets/RV32I.py @@ -55,8 +55,8 @@ class S(Instruction): imm_5_11 = (self.imm & 0xFE0)>>5 return c_uint32( (imm_5_11 << 25) +\ - (self.rs2 << 20) +\ - (self.rs1 << 15) +\ + (self.rs1 << 20) +\ + (self.rs2 << 15) +\ (self.funct3 << 12) +\ (imm_0_4 << 7) +\ self.opcode @@ -75,12 +75,12 @@ class B(Instruction): # NOTE: The lowest bit of the imm is always 0 because instructions # are at least 16 bits wide, so it's not used, that's why this # instruction looks that weird - imm_11 = (self.imm & 0b0100000000000)>>11 imm_12 = (self.imm & 0b1000000000000)>>12 - imm_1_4 = (self.imm & 0b0000000011110)>>1 + imm_11 = (self.imm & 0b0100000000000)>>11 imm_5_10 = (self.imm & 0b0011111100000)>>5 + imm_1_4 = (self.imm & 0b0000000011110)>>1 return c_uint32( - (imm_12 << 30) +\ + (imm_12 << 31) +\ (imm_5_10 << 25) +\ (self.rs2 << 20) +\ (self.rs1 << 15) +\ @@ -118,7 +118,7 @@ class J(Instruction): # NOTE: Jumps are also weird imm_20 = (self.imm & 0x100000)>>20 imm_12_19 = (self.imm & 0x0FF000)>>12 - imm_11 = (self.imm & 0x000800)>>8 + imm_11 = (self.imm & 0x000800)>>11 imm_1_10 = (self.imm & 0x0007FE)>>1 return c_uint32( (imm_20 << 31) +\ |