From e1c3cdc1dc70c7b085e7e030fdc519dc82452ee0 Mon Sep 17 00:00:00 2001 From: Ekaitz Zarraga Date: Sun, 25 Apr 2021 00:14:35 +0200 Subject: Register instructions in InstructionSet --- pysc-v/InstructionSets/RV32I.py | 25 ++++++++++++++++++++++++- 1 file changed, 24 insertions(+), 1 deletion(-) (limited to 'pysc-v/InstructionSets/RV32I.py') 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) -- cgit v1.2.3