[otbn] Get rid of OTBNModel completely Most of its contents have already moved into OTBNState, and it was just a thin wrapper that doesn't seem to do anything useful. Get rid of it. Signed-off-by: Rupert Swarbrick <rswarbrick@lowrisc.org>
diff --git a/hw/ip/otbn/dv/otbnsim/sim/insn.py b/hw/ip/otbn/dv/otbnsim/sim/insn.py index 7eadce2..59d83c5 100644 --- a/hw/ip/otbn/dv/otbnsim/sim/insn.py +++ b/hw/ip/otbn/dv/otbnsim/sim/insn.py
@@ -4,7 +4,7 @@ from typing import Dict -from .model import OTBNModel +from .state import OTBNState from .isa import (OTBNInsn, RV32RegReg, RV32RegImm, RV32ImmShift, insn_for_mnemonic, ShiftReg) @@ -13,18 +13,18 @@ class ADD(RV32RegReg): insn = insn_for_mnemonic('add', 3) - def execute(self, model: OTBNModel) -> None: - val1 = model.state.intreg[self.grs1] - val2 = model.state.intreg[self.grs2] - model.state.intreg[self.grd] = val1 + val2 + def execute(self, state: OTBNState) -> None: + val1 = state.intreg[self.grs1] + val2 = state.intreg[self.grs2] + state.intreg[self.grd] = val1 + val2 class ADDI(RV32RegImm): insn = insn_for_mnemonic('addi', 3) - def execute(self, model: OTBNModel) -> None: - val1 = model.state.intreg[self.grs1] - model.state.intreg[self.grd] = val1 + self.imm + def execute(self, state: OTBNState) -> None: + val1 = state.intreg[self.grs1] + state.intreg[self.grd] = val1 + self.imm class LUI(OTBNInsn): @@ -35,73 +35,73 @@ self.grd = op_vals['grd'] self.imm = op_vals['imm'] - def execute(self, model: OTBNModel) -> None: - model.state.intreg[self.grd] = (self.imm << 12) + def execute(self, state: OTBNState) -> None: + state.intreg[self.grd] = (self.imm << 12) class SUB(RV32RegReg): insn = insn_for_mnemonic('sub', 3) - def execute(self, model: OTBNModel) -> None: - val1 = model.state.intreg[self.grs1] - val2 = model.state.intreg[self.grs2] - model.state.intreg[self.grd] = val1 - val2 + def execute(self, state: OTBNState) -> None: + val1 = state.intreg[self.grs1] + val2 = state.intreg[self.grs2] + state.intreg[self.grd] = val1 - val2 class SLL(RV32RegReg): insn = insn_for_mnemonic('sll', 3) - def execute(self, model: OTBNModel) -> None: - val1 = model.state.intreg[self.grs1] - val2 = model.state.intreg[self.grs2] & 0x1f - model.state.intreg[self.grd] = val1 << val2 + def execute(self, state: OTBNState) -> None: + val1 = state.intreg[self.grs1] + val2 = state.intreg[self.grs2] & 0x1f + state.intreg[self.grd] = val1 << val2 class SLLI(RV32ImmShift): insn = insn_for_mnemonic('slli', 3) - def execute(self, model: OTBNModel) -> None: - val1 = model.state.intreg[self.grs1] - model.state.intreg[self.grd] = val1 << self.shamt + def execute(self, state: OTBNState) -> None: + val1 = state.intreg[self.grs1] + state.intreg[self.grd] = val1 << self.shamt class SRL(RV32RegReg): insn = insn_for_mnemonic('srl', 3) - def execute(self, model: OTBNModel) -> None: - val1 = model.state.intreg[self.grs1] - val2 = model.state.intreg[self.grs2] & 0x1f - model.state.intreg[self.grd] = val1 >> val2 + def execute(self, state: OTBNState) -> None: + val1 = state.intreg[self.grs1] + val2 = state.intreg[self.grs2] & 0x1f + state.intreg[self.grd] = val1 >> val2 class SRLI(RV32ImmShift): insn = insn_for_mnemonic('srli', 3) - def execute(self, model: OTBNModel) -> None: - val1 = model.state.intreg[self.grs1] - model.state.intreg[self.grd] = val1 >> self.shamt + def execute(self, state: OTBNState) -> None: + val1 = state.intreg[self.grs1] + state.intreg[self.grd] = val1 >> self.shamt class SRA(RV32RegReg): insn = insn_for_mnemonic('sra', 3) - def execute(self, model: OTBNModel) -> None: - usrc = model.state.intreg[self.grs1].unsigned() - shift = model.state.intreg[self.grs2].unsigned() & 0x1f + def execute(self, state: OTBNState) -> None: + usrc = state.intreg[self.grs1].unsigned() + shift = state.intreg[self.grs2].unsigned() & 0x1f if usrc >> 31: to_clear = 32 - shift sign_mask = (((1 << 32) - 1) >> to_clear) << to_clear else: sign_mask = 0 - model.state.intreg[self.grd] = sign_mask | (usrc >> shift) + state.intreg[self.grd] = sign_mask | (usrc >> shift) class SRAI(RV32ImmShift): insn = insn_for_mnemonic('srai', 3) - def execute(self, model: OTBNModel) -> None: - usrc = model.state.intreg[self.grs1].unsigned() + def execute(self, state: OTBNState) -> None: + usrc = state.intreg[self.grs1].unsigned() shift = self.shamt if usrc >> 31: to_clear = 32 - shift @@ -109,58 +109,58 @@ else: sign_mask = 0 - model.state.intreg[self.grd] = sign_mask | (usrc >> shift) + state.intreg[self.grd] = sign_mask | (usrc >> shift) class AND(RV32RegReg): insn = insn_for_mnemonic('and', 3) - def execute(self, model: OTBNModel) -> None: - val1 = model.state.intreg[self.grs1] - val2 = model.state.intreg[self.grs2] - model.state.intreg[self.grd] = val1 & val2 + def execute(self, state: OTBNState) -> None: + val1 = state.intreg[self.grs1] + val2 = state.intreg[self.grs2] + state.intreg[self.grd] = val1 & val2 class ANDI(RV32RegImm): insn = insn_for_mnemonic('andi', 3) - def execute(self, model: OTBNModel) -> None: - val1 = model.state.intreg[self.grs1] - model.state.intreg[self.grd] = val1 & self.imm + def execute(self, state: OTBNState) -> None: + val1 = state.intreg[self.grs1] + state.intreg[self.grd] = val1 & self.imm class OR(RV32RegReg): insn = insn_for_mnemonic('or', 3) - def execute(self, model: OTBNModel) -> None: - val1 = model.state.intreg[self.grs1] - val2 = model.state.intreg[self.grs2] - model.state.intreg[self.grd] = val1 | val2 + def execute(self, state: OTBNState) -> None: + val1 = state.intreg[self.grs1] + val2 = state.intreg[self.grs2] + state.intreg[self.grd] = val1 | val2 class ORI(RV32RegImm): insn = insn_for_mnemonic('ori', 3) - def execute(self, model: OTBNModel) -> None: - val1 = model.state.intreg[self.grs1] - model.state.intreg[self.grd] = val1 | self.imm + def execute(self, state: OTBNState) -> None: + val1 = state.intreg[self.grs1] + state.intreg[self.grd] = val1 | self.imm class XOR(RV32RegReg): insn = insn_for_mnemonic('xor', 3) - def execute(self, model: OTBNModel) -> None: - val1 = model.state.intreg[self.grs1] - val2 = model.state.intreg[self.grs2] - model.state.intreg[self.grd] = val1 | val2 + def execute(self, state: OTBNState) -> None: + val1 = state.intreg[self.grs1] + val2 = state.intreg[self.grs2] + state.intreg[self.grd] = val1 | val2 class XORI(RV32RegImm): insn = insn_for_mnemonic('xori', 3) - def execute(self, model: OTBNModel) -> None: - val1 = model.state.intreg[self.grs1] - model.state.intreg[self.grd] = val1 | self.imm + def execute(self, state: OTBNState) -> None: + val1 = state.intreg[self.grs1] + state.intreg[self.grd] = val1 | self.imm class LW(OTBNInsn): @@ -172,9 +172,9 @@ self.offset = op_vals['offset'] self.grs1 = op_vals['grs1'] - def execute(self, model: OTBNModel) -> None: - addr = (model.state.intreg[self.grs1] + self.offset).unsigned() - model.state.intreg[self.grd] = model.state.dmem.load_i32(addr) + def execute(self, state: OTBNState) -> None: + addr = (state.intreg[self.grs1] + self.offset).unsigned() + state.intreg[self.grd] = state.dmem.load_i32(addr) class SW(OTBNInsn): @@ -186,10 +186,10 @@ self.offset = op_vals['offset'] self.grs1 = op_vals['grs1'] - def execute(self, model: OTBNModel) -> None: - addr = (model.state.intreg[self.grs1] + self.offset).unsigned() - value = int(model.state.intreg[self.grs2]) - model.state.dmem.store_i32(addr, value) + def execute(self, state: OTBNState) -> None: + addr = (state.intreg[self.grs1] + self.offset).unsigned() + value = int(state.intreg[self.grs2]) + state.dmem.store_i32(addr, value) class BEQ(OTBNInsn): @@ -201,11 +201,11 @@ self.grs2 = op_vals['grs2'] self.offset = op_vals['offset'] - def execute(self, model: OTBNModel) -> None: - val1 = model.state.intreg[self.grs1].value - val2 = model.state.intreg[self.grs2].value + def execute(self, state: OTBNState) -> None: + val1 = state.intreg[self.grs1].value + val2 = state.intreg[self.grs2].value if val1 == val2: - model.state.pc_next = self.offset + state.pc_next = self.offset class BNE(OTBNInsn): @@ -217,11 +217,11 @@ self.grs2 = op_vals['grs2'] self.offset = op_vals['offset'] - def execute(self, model: OTBNModel) -> None: - val1 = model.state.intreg[self.grs1].value - val2 = model.state.intreg[self.grs2].value + def execute(self, state: OTBNState) -> None: + val1 = state.intreg[self.grs1].value + val2 = state.intreg[self.grs2].value if val1 != val2: - model.state.pc_next = self.offset + state.pc_next = self.offset class JAL(OTBNInsn): @@ -232,9 +232,9 @@ self.grd = op_vals['grd'] self.offset = op_vals['offset'] - def execute(self, model: OTBNModel) -> None: - model.state.intreg[self.grd] = model.state.pc + 4 - model.state.pc_next = self.offset + def execute(self, state: OTBNState) -> None: + state.intreg[self.grd] = state.pc + 4 + state.pc_next = self.offset class JALR(OTBNInsn): @@ -246,9 +246,9 @@ self.grs1 = op_vals['grs1'] self.offset = op_vals['offset'] - def execute(self, model: OTBNModel) -> None: - model.state.intreg[self.grd] = model.state.pc + 4 - model.state.pc_next = model.state.intreg[self.grs1] + self.offset + def execute(self, state: OTBNState) -> None: + state.intreg[self.grd] = state.pc + 4 + state.pc_next = state.intreg[self.grs1] + self.offset class CSRRS(OTBNInsn): @@ -260,7 +260,7 @@ self.csr = op_vals['csr'] self.grs = op_vals['grs'] - def execute(self, model: OTBNModel) -> None: + def execute(self, state: OTBNState) -> None: raise NotImplementedError('csrrs.execute') @@ -273,7 +273,7 @@ self.csr = op_vals['csr'] self.grs = op_vals['grs'] - def execute(self, model: OTBNModel) -> None: + def execute(self, state: OTBNState) -> None: raise NotImplementedError('csrrw.execute') @@ -284,16 +284,16 @@ super().__init__(op_vals) pass - def execute(self, model: OTBNModel) -> None: + def execute(self, state: OTBNState) -> None: # INTR_STATE is the interrupt state register. Bit 0 (which is being # set) is the 'done' flag. - model.state.ext_regs.set_bits('INTR_STATE', 1 << 0) + state.ext_regs.set_bits('INTR_STATE', 1 << 0) # STATUS is a status register. Bit 0 (being cleared) is the 'busy' flag - model.state.ext_regs.clear_bits('STATUS', 1 << 0) + state.ext_regs.clear_bits('STATUS', 1 << 0) # As well as the external register, clear an internal 'running' flag to # tell the simulation to stop. - model.state.running = False + state.running = False class LOOP(OTBNInsn): @@ -304,9 +304,9 @@ self.grs = op_vals['grs'] self.bodysize = op_vals['bodysize'] - def execute(self, model: OTBNModel) -> None: - num_iters = model.state.intreg[self.grs].unsigned() - model.state.loop_start(num_iters, self.bodysize) + def execute(self, state: OTBNState) -> None: + num_iters = state.intreg[self.grs].unsigned() + state.loop_start(num_iters, self.bodysize) class LOOPI(OTBNInsn): @@ -317,8 +317,8 @@ self.iterations = op_vals['iterations'] self.bodysize = op_vals['bodysize'] - def execute(self, model: OTBNModel) -> None: - model.state.loop_start(self.iterations, self.bodysize) + def execute(self, state: OTBNState) -> None: + state.loop_start(self.iterations, self.bodysize) class BNADD(OTBNInsn): @@ -333,13 +333,13 @@ self.shift_bytes = op_vals['shift_bytes'] self.flag_group = op_vals['flag_group'] - def execute(self, model: OTBNModel) -> None: - a = int(model.state.wreg[self.wrs1].unsigned()) - b_shifted = ShiftReg(int(model.state.wreg[self.wrs2].unsigned()), + def execute(self, state: OTBNState) -> None: + a = int(state.wreg[self.wrs1].unsigned()) + b_shifted = ShiftReg(int(state.wreg[self.wrs2].unsigned()), self.shift_type, self.shift_bytes) - (result, flags) = model.add_with_carry(a, b_shifted, 0) - model.state.wreg[self.wrd] = result - model.state.flags[self.flag_group] = flags + (result, flags) = state.add_with_carry(a, b_shifted, 0) + state.wreg[self.wrd] = result + state.flags[self.flag_group] = flags class BNADDC(OTBNInsn): @@ -354,14 +354,14 @@ self.shift_bytes = op_vals['shift_bytes'] self.flag_group = op_vals['flag_group'] - def execute(self, model: OTBNModel) -> None: - a = int(model.state.wreg[self.wrs1].unsigned()) - b_shifted = ShiftReg(int(model.state.wreg[self.wrs2].unsigned()), + def execute(self, state: OTBNState) -> None: + a = int(state.wreg[self.wrs1].unsigned()) + b_shifted = ShiftReg(int(state.wreg[self.wrs2].unsigned()), self.shift_type, self.shift_bytes) - flag_c = model.state.flags[self.flag_group].C - (result, flags) = model.add_with_carry(a, b_shifted, flag_c) - model.state.wreg[self.wrd] = result - model.state.flags[self.flag_group] = flags + flag_c = state.flags[self.flag_group].C + (result, flags) = state.add_with_carry(a, b_shifted, flag_c) + state.wreg[self.wrd] = result + state.flags[self.flag_group] = flags class BNADDI(OTBNInsn): @@ -374,12 +374,12 @@ self.imm = op_vals['imm'] self.flag_group = op_vals['flag_group'] - def execute(self, model: OTBNModel) -> None: - a = int(model.state.wreg[self.wrs].unsigned()) + def execute(self, state: OTBNState) -> None: + a = int(state.wreg[self.wrs].unsigned()) b = int(self.imm) - (result, flags) = model.add_with_carry(a, b, 0) - model.state.wreg[self.wrd] = result - model.state.flags[self.flag_group] = flags + (result, flags) = state.add_with_carry(a, b, 0) + state.wreg[self.wrd] = result + state.flags[self.flag_group] = flags class BNADDM(OTBNInsn): @@ -391,13 +391,13 @@ self.wrs1 = op_vals['wrs1'] self.wrs2 = op_vals['wrs2'] - def execute(self, model: OTBNModel) -> None: - a = int(model.state.wreg[self.wrs1].unsigned()) - b = int(model.state.wreg[self.wrs2].unsigned()) - (result, _) = model.add_with_carry(a, b, 0) - if result >= int(model.state.mod): - result -= int(model.state.mod) - model.state.wreg[self.wrd] = result + def execute(self, state: OTBNState) -> None: + a = int(state.wreg[self.wrs1].unsigned()) + b = int(state.wreg[self.wrs2].unsigned()) + (result, _) = state.add_with_carry(a, b, 0) + if result >= int(state.mod): + result -= int(state.mod) + state.wreg[self.wrd] = result class BNMULQACC(OTBNInsn): @@ -412,19 +412,19 @@ self.wrs2_qwsel = op_vals['wrs2_qwsel'] self.acc_shift_imm = op_vals['acc_shift_imm'] - def execute(self, model: OTBNModel) -> None: - a_qw = model.get_wr_quarterword(self.wrs1, self.wrs1_qwsel) - b_qw = model.get_wr_quarterword(self.wrs2, self.wrs2_qwsel) + def execute(self, state: OTBNState) -> None: + a_qw = state.get_wr_quarterword(self.wrs1, self.wrs1_qwsel) + b_qw = state.get_wr_quarterword(self.wrs2, self.wrs2_qwsel) mul_res = a_qw * b_qw - acc = int(model.state.single_regs['acc']) + acc = int(state.single_regs['acc']) if self.zero_acc: acc = 0 acc += (mul_res << self.acc_shift_imm) - model.state.single_regs['acc'].update(acc) + state.single_regs['acc'].update(acc) class BNMULQACCWO(OTBNInsn): @@ -440,21 +440,21 @@ self.wrs2_qwsel = op_vals['wrs2_qwsel'] self.acc_shift_imm = op_vals['acc_shift_imm'] - def execute(self, model: OTBNModel) -> None: - a_qw = model.get_wr_quarterword(self.wrs1, self.wrs1_qwsel) - b_qw = model.get_wr_quarterword(self.wrs2, self.wrs2_qwsel) + def execute(self, state: OTBNState) -> None: + a_qw = state.get_wr_quarterword(self.wrs1, self.wrs1_qwsel) + b_qw = state.get_wr_quarterword(self.wrs2, self.wrs2_qwsel) mul_res = a_qw * b_qw - acc = int(model.state.single_regs['acc']) + acc = int(state.single_regs['acc']) if self.zero_acc: acc = 0 acc += (mul_res << self.acc_shift_imm) - model.state.wreg[self.wrd].set(acc) + state.wreg[self.wrd].set(acc) - model.state.single_regs['acc'].update(acc) + state.single_regs['acc'].update(acc) class BNMULQACCSO(OTBNInsn): @@ -471,13 +471,13 @@ self.wrs2_qwsel = op_vals['wrs2_qwsel'] self.acc_shift_imm = op_vals['acc_shift_imm'] - def execute(self, model: OTBNModel) -> None: - a_qw = model.get_wr_quarterword(self.wrs1, self.wrs1_qwsel) - b_qw = model.get_wr_quarterword(self.wrs2, self.wrs2_qwsel) + def execute(self, state: OTBNState) -> None: + a_qw = state.get_wr_quarterword(self.wrs1, self.wrs1_qwsel) + b_qw = state.get_wr_quarterword(self.wrs2, self.wrs2_qwsel) mul_res = a_qw * b_qw - acc = int(model.state.single_regs['acc']) + acc = int(state.single_regs['acc']) if self.zero_acc: acc = 0 @@ -485,10 +485,10 @@ # set_wr_halfword expects 0 in upper 128 bits acc_lower = acc & ((1 << 128) - 1) - model.set_wr_halfword(self.wrd, acc_lower, self.wrd_hwsel) + state.set_wr_halfword(self.wrd, acc_lower, self.wrd_hwsel) acc = acc >> 128 - model.state.single_regs['acc'].update(acc) + state.single_regs['acc'].update(acc) class BNSUB(OTBNInsn): @@ -503,13 +503,13 @@ self.shift_bytes = op_vals['shift_bytes'] self.flag_group = op_vals['flag_group'] - def execute(self, model: OTBNModel) -> None: - a = int(model.state.wreg[self.wrs1]) - b_shifted = ShiftReg(int(model.state.wreg[self.wrs2]), self.shift_type, + def execute(self, state: OTBNState) -> None: + a = int(state.wreg[self.wrs1]) + b_shifted = ShiftReg(int(state.wreg[self.wrs2]), self.shift_type, self.shift_bytes) - (result, flags) = model.add_with_carry(a, -b_shifted, 0) - model.state.wreg[self.wrd] = result - model.state.flags[self.flag_group] = flags + (result, flags) = state.add_with_carry(a, -b_shifted, 0) + state.wreg[self.wrd] = result + state.flags[self.flag_group] = flags class BNSUBB(OTBNInsn): @@ -524,15 +524,15 @@ self.shift_bytes = op_vals['shift_bytes'] self.flag_group = op_vals['flag_group'] - def execute(self, model: OTBNModel) -> None: - a = int(model.state.wreg[self.wrs1]) - b_shifted = ShiftReg(int(model.state.wreg[self.wrs2]), self.shift_type, + def execute(self, state: OTBNState) -> None: + a = int(state.wreg[self.wrs1]) + b_shifted = ShiftReg(int(state.wreg[self.wrs2]), self.shift_type, self.shift_bytes) (result, - flags) = model.add_with_carry(a, -b_shifted, - 1 - model.state.flags[self.flag_group].C) - model.state.wreg[self.wrd] = result - model.state.flags[self.flag_group] = flags + flags) = state.add_with_carry(a, -b_shifted, + 1 - state.flags[self.flag_group].C) + state.wreg[self.wrd] = result + state.flags[self.flag_group] = flags class BNSUBI(OTBNInsn): @@ -545,12 +545,12 @@ self.imm = op_vals['imm'] self.flag_group = op_vals['flag_group'] - def execute(self, model: OTBNModel) -> None: - a = int(model.state.wreg[self.wrs]) + def execute(self, state: OTBNState) -> None: + a = int(state.wreg[self.wrs]) b = int(self.imm) - (result, flags) = model.add_with_carry(a, -b, 0) - model.state.wreg[self.wrd] = result - model.state.flags[self.flag_group] = flags + (result, flags) = state.add_with_carry(a, -b, 0) + state.wreg[self.wrd] = result + state.flags[self.flag_group] = flags class BNSUBM(OTBNInsn): @@ -562,13 +562,13 @@ self.wrs1 = op_vals['wrs1'] self.wrs2 = op_vals['wrs2'] - def execute(self, model: OTBNModel) -> None: - a = int(model.state.wreg[self.wrs1]) - b = int(model.state.wreg[self.wrs2]) - result, _ = model.add_with_carry(a, -b, 0) + def execute(self, state: OTBNState) -> None: + a = int(state.wreg[self.wrs1]) + b = int(state.wreg[self.wrs2]) + result, _ = state.add_with_carry(a, -b, 0) if result < 0: - result += model.state.mod - model.state.wreg[self.wrd] = result + result += state.mod + state.wreg[self.wrd] = result class BNAND(OTBNInsn): @@ -582,11 +582,11 @@ self.shift_type = op_vals['shift_type'] self.shift_bytes = op_vals['shift_bytes'] - def execute(self, model: OTBNModel) -> None: - b_shifted = ShiftReg(model.state.wreg[self.wrs2], + def execute(self, state: OTBNState) -> None: + b_shifted = ShiftReg(state.wreg[self.wrs2], self.shift_type, self.shift_bytes) - a = model.state.wreg[self.wrs1] - model.state.wreg[self.wrd] = a & b_shifted + a = state.wreg[self.wrs1] + state.wreg[self.wrd] = a & b_shifted class BNOR(OTBNInsn): @@ -600,11 +600,11 @@ self.shift_type = op_vals['shift_type'] self.shift_bytes = op_vals['shift_bytes'] - def execute(self, model: OTBNModel) -> None: - b_shifted = ShiftReg(model.state.wreg[self.wrs2], + def execute(self, state: OTBNState) -> None: + b_shifted = ShiftReg(state.wreg[self.wrs2], self.shift_type, self.shift_bytes) - a = model.state.wreg[self.wrs1] - model.state.wreg[self.wrd] = a | b_shifted + a = state.wreg[self.wrs1] + state.wreg[self.wrd] = a | b_shifted class BNNOT(OTBNInsn): @@ -617,10 +617,10 @@ self.shift_type = op_vals['shift_type'] self.shift_bytes = op_vals['shift_bytes'] - def execute(self, model: OTBNModel) -> None: - b_shifted = ShiftReg(model.state.wreg[self.wrs], + def execute(self, state: OTBNState) -> None: + b_shifted = ShiftReg(state.wreg[self.wrs], self.shift_type, self.shift_bytes) - model.state.wreg[self.wrd] = ~b_shifted + state.wreg[self.wrd] = ~b_shifted class BNXOR(OTBNInsn): @@ -634,11 +634,11 @@ self.shift_type = op_vals['shift_type'] self.shift_bytes = op_vals['shift_bytes'] - def execute(self, model: OTBNModel) -> None: - b_shifted = ShiftReg(model.state.wreg[self.wrs2], + def execute(self, state: OTBNState) -> None: + b_shifted = ShiftReg(state.wreg[self.wrs2], self.shift_type, self.shift_bytes) - a = model.state.wreg[self.wrs1] - model.state.wreg[self.wrd] = a ^ b_shifted + a = state.wreg[self.wrs1] + state.wreg[self.wrd] = a ^ b_shifted class BNRSHI(OTBNInsn): @@ -651,11 +651,11 @@ self.wrs2 = op_vals['wrs2'] self.imm = op_vals['imm'] - def execute(self, model: OTBNModel) -> None: - a = int(model.state.wreg[self.wrs1]) - b = int(model.state.wreg[self.wrs2]) + def execute(self, state: OTBNState) -> None: + a = int(state.wreg[self.wrs1]) + b = int(state.wreg[self.wrs2]) shifted = ((a << 256) | b) >> self.imm - model.state.wreg[self.wrd] = shifted & ((1 << 256) - 1) + state.wreg[self.wrd] = shifted & ((1 << 256) - 1) class BNRSEL(OTBNInsn): @@ -669,10 +669,10 @@ self.flag_group = op_vals['flag_group'] self.flag = op_vals['flag'] - def execute(self, model: OTBNModel) -> None: - flag_is_set = model.state.flags[self.flag_group].get_by_idx(self.flag) - val = model.state.wreg[self.wrs1 if flag_is_set else self.wrs2] - model.state.wreg[self.wrd] = val + def execute(self, state: OTBNState) -> None: + flag_is_set = state.flags[self.flag_group].get_by_idx(self.flag) + val = state.wreg[self.wrs1 if flag_is_set else self.wrs2] + state.wreg[self.wrd] = val class BNCMP(OTBNInsn): @@ -686,12 +686,12 @@ self.shift_bytes = op_vals['shift_bytes'] self.flag_group = op_vals['flag_group'] - def execute(self, model: OTBNModel) -> None: - a = int(model.state.wreg[self.wrs1]) - b_shifted = ShiftReg(int(model.state.wreg[self.wrs2]), self.shift_type, + def execute(self, state: OTBNState) -> None: + a = int(state.wreg[self.wrs1]) + b_shifted = ShiftReg(int(state.wreg[self.wrs2]), self.shift_type, self.shift_bytes) - (_, flags) = model.add_with_carry(a, -b_shifted, 0) - model.state.flags[self.flag_group] = flags + (_, flags) = state.add_with_carry(a, -b_shifted, 0) + state.flags[self.flag_group] = flags class BNCMPB(OTBNInsn): @@ -705,13 +705,13 @@ self.shift_bytes = op_vals['shift_bytes'] self.flag_group = op_vals['flag_group'] - def execute(self, model: OTBNModel) -> None: - a = int(model.state.wreg[self.wrs1]) - b_shifted = ShiftReg(int(model.state.wreg[self.wrs2]), self.shift_type, + def execute(self, state: OTBNState) -> None: + a = int(state.wreg[self.wrs1]) + b_shifted = ShiftReg(int(state.wreg[self.wrs2]), self.shift_type, self.shift_bytes) - carry_flag = 1 - model.state.flags[self.flag_group].C - (_, flags) = model.add_with_carry(a, -b_shifted, carry_flag) - model.state.flags[self.flag_group] = flags + carry_flag = 1 - state.flags[self.flag_group].C + (_, flags) = state.add_with_carry(a, -b_shifted, carry_flag) + state.flags[self.flag_group] = flags class BNLID(OTBNInsn): @@ -725,15 +725,15 @@ self.grs1 = op_vals['grs1'] self.grs1_inc = op_vals['grs1_inc'] - def execute(self, model: OTBNModel) -> None: - addr = int(model.state.intreg[self.grs1] + int(self.offset)) - wrd = int(model.state.intreg[self.grd]) - model.state.wreg[wrd] = model.state.dmem.load_i256(addr) + def execute(self, state: OTBNState) -> None: + addr = int(state.intreg[self.grs1] + int(self.offset)) + wrd = int(state.intreg[self.grd]) + state.wreg[wrd] = state.dmem.load_i256(addr) if self.grd_inc: - model.state.intreg[self.grd] += 1 + state.intreg[self.grd] += 1 if self.grs1_inc: - model.state.intreg[self.grs1] += 32 + state.intreg[self.grs1] += 32 class BNSID(OTBNInsn): @@ -747,17 +747,17 @@ self.grs1 = op_vals['grs1'] self.grs1_inc = op_vals['grs1_inc'] - def execute(self, model: OTBNModel) -> None: - idx = int(model.state.intreg[self.grs2]) - addr = int(model.state.intreg[self.grs1] + int(self.offset)) + def execute(self, state: OTBNState) -> None: + idx = int(state.intreg[self.grs2]) + addr = int(state.intreg[self.grs1] + int(self.offset)) - wrs = model.state.wreg[idx] - model.state.dmem.store_i256(addr, int(wrs)) + wrs = state.wreg[idx] + state.dmem.store_i256(addr, int(wrs)) if self.grs2_inc: - model.state.intreg[self.grs2] += 1 + state.intreg[self.grs2] += 1 if self.grs1_inc: - model.state.intreg[self.grs1] += 32 + state.intreg[self.grs1] += 32 class BNMOV(OTBNInsn): @@ -768,8 +768,8 @@ self.wrd = op_vals['wrd'] self.wrs = op_vals['wrs'] - def execute(self, model: OTBNModel) -> None: - model.state.wreg[self.wrd] = model.state.wreg[self.wrs] + def execute(self, state: OTBNState) -> None: + state.wreg[self.wrd] = state.wreg[self.wrs] class BNMOVR(OTBNInsn): @@ -782,15 +782,15 @@ self.grs = op_vals['grs'] self.grs_inc = op_vals['grs_inc'] - def execute(self, model: OTBNModel) -> None: - wrd = int(model.state.intreg[self.grd]) - wrs = int(model.state.intreg[self.grs]) - model.state.wreg[wrd] = model.state.wreg[wrs] + def execute(self, state: OTBNState) -> None: + wrd = int(state.intreg[self.grd]) + wrs = int(state.intreg[self.grs]) + state.wreg[wrd] = state.wreg[wrs] if self.grd_inc: - model.state.intreg[self.grd] += 1 + state.intreg[self.grd] += 1 if self.grs_inc: - model.state.intreg[self.grs] += 1 + state.intreg[self.grs] += 1 class BNWSRRS(OTBNInsn): @@ -802,13 +802,13 @@ self.wsr = op_vals['wsr'] self.wrs = op_vals['wrs'] - def execute(self, model: OTBNModel) -> None: + def execute(self, state: OTBNState) -> None: idx = self.wsr - old_val = model.state.wcsr_read(idx) - new_val = old_val | model.state.wreg[self.wrs] + old_val = state.wcsr_read(idx) + new_val = old_val | state.wreg[self.wrs] - model.state.wreg[self.wrd] = old_val - model.state.wcsr_write(idx, new_val) + state.wreg[self.wrd] = old_val + state.wcsr_write(idx, new_val) class BNWSRRW(OTBNInsn): @@ -820,13 +820,13 @@ self.wsr = op_vals['wsr'] self.wrs = op_vals['wrs'] - def execute(self, model: OTBNModel) -> None: + def execute(self, state: OTBNState) -> None: idx = self.wsr - old_val = model.state.wcsr_read(idx) - new_val = model.state.wreg[self.wrs] + old_val = state.wcsr_read(idx) + new_val = state.wreg[self.wrs] - model.state.wreg[self.wrd] = old_val - model.state.wcsr_write(idx, new_val) + state.wreg[self.wrd] = old_val + state.wcsr_write(idx, new_val) INSN_CLASSES = [