summaryrefslogtreecommitdiff
path: root/pysc-v/InstructionSets/RV32I.py
diff options
context:
space:
mode:
Diffstat (limited to 'pysc-v/InstructionSets/RV32I.py')
-rw-r--r--pysc-v/InstructionSets/RV32I.py25
1 files changed, 24 insertions, 1 deletions
diff --git a/pysc-v/InstructionSets/RV32I.py b/pysc-v/InstructionSets/RV32I.py
index dcdee36..ab03bb7 100644
--- a/pysc-v/InstructionSets/RV32I.py
+++ b/pysc-v/InstructionSets/RV32I.py
@@ -65,6 +65,7 @@ class J(Instruction):
)
+@RV32I.instruction
class add(R):
name = "add"
opcode = 0b0110011
@@ -74,10 +75,32 @@ class add(R):
def execute(self):
return pc + self.size
+@RV32I.instruction
class addi(I):
name = "addi"
opcode = 0b0010011
funct3 = 0b000
+@RV32I.instruction
+class jal(J):
+ name = "jal"
+ opcode = 0b1101111
+
def execute(self):
- pass
+ # TODO
+ # - Save current pc in rd
+ # - Make pc from `imm`
+ # - Return new pc
+ return pc
+
+
+@RV32I.pseudoinstruction
+class j(J):
+ name = "j"
+ def __new__(cls, imm):
+ return jal("x0", imm)
+
+
+if __name__ == "__main__":
+ print(RV32I)
+ print(RV32I.instructions)