def execute_lbu(s, inst): addr = trim(s.rf[inst.rs()] + sext(inst.imm())) s.rf[inst.rt()] = s.mem.read(addr, 1) s.pc += 4
def execute_sb(s, inst): addr = trim(s.rf[inst.rs()] + sext(inst.imm())) s.mem.write(addr, 1, s.rf[inst.rt()]) s.pc += 4
def execute_bne(s, inst): if s.rf[inst.rs()] != s.rf[inst.rt()]: s.pc = s.pc + 4 + (signed(sext(inst.imm())) << 2) else: s.pc += 4
def execute_bgez(s, inst): if signed(s.rf[inst.rs()]) >= 0: s.pc = s.pc + 4 + (signed(sext(inst.imm())) << 2) else: s.pc += 4
def execute_slti(s, inst): s.rf[inst.rt()] = signed(s.rf[inst.rs()]) < signed(sext(inst.imm())) s.pc += 4
def execute_sltiu(s, inst): s.rf[inst.rt()] = s.rf[inst.rs()] < sext(inst.imm()) s.pc += 4
def execute_addiu(s, inst): s.rf[inst.rt()] = trim(s.rf[inst.rs()] + sext(inst.imm())) s.pc += 4
def execute_lh( s, inst ): addr = trim_64( s.rf[inst.rs1] + inst.i_imm ) s.rf[inst.rd] = sext( s.mem.read( addr, 2 ), 16 ) s.pc += 4
def xs(self, lo, len): return sext(self.bits >> lo, len)
def execute_lh(s, inst): addr = trim_64(s.rf[inst.rs1] + inst.i_imm) s.rf[inst.rd] = sext(s.mem.read(addr, 2), 16) s.pc += 4