Exemple #1
0
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
Exemple #2
0
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
Exemple #3
0
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
Exemple #4
0
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
Exemple #5
0
def execute_slti(s, inst):
    s.rf[inst.rt()] = signed(s.rf[inst.rs()]) < signed(sext(inst.imm()))
    s.pc += 4
Exemple #6
0
def execute_sltiu(s, inst):
    s.rf[inst.rt()] = s.rf[inst.rs()] < sext(inst.imm())
    s.pc += 4
Exemple #7
0
def execute_addiu(s, inst):
    s.rf[inst.rt()] = trim(s.rf[inst.rs()] + sext(inst.imm()))
    s.pc += 4
Exemple #8
0
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
Exemple #9
0
 def xs(self, lo, len):
     return sext(self.bits >> lo, len)
Exemple #10
0
 def xs(self, lo, len):
     return sext(self.bits >> lo, len)
Exemple #11
0
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