def execute_ldrsb(s, inst): if condition_passed(s, inst.cond): if inst.rd == 15: raise FatalError('UNPREDICTABLE') addr = addressing_mode_3(s, inst) # TODO: support multiple memory accessing modes? # MemoryAccess( s.B, s.E ) # TODO: alignment fault checking? # if (CP15_reg1_Ubit == 0) and address[0] == 0b1: # UNPREDICTABLE s.rf[inst.rd] = sext_8(s.mem.read(addr, 1)) s.rf[PC] = s.fetch_pc() + 4
def execute_ldrsb( s, inst ): if condition_passed( s, inst.cond ): if inst.rd == 15: raise FatalError('UNPREDICTABLE') addr = addressing_mode_3( s, inst ) # TODO: support multiple memory accessing modes? # MemoryAccess( s.B, s.E ) # TODO: alignment fault checking? # if (CP15_reg1_Ubit == 0) and address[0] == 0b1: # UNPREDICTABLE s.rf[ inst.rd ] = sext_8( s.mem.read( addr, 1 ) ) s.rf[PC] = s.fetch_pc() + 4
def execute_lb( s, inst ): addr = trim_32( s.rf[inst.rs] + sext_16(inst.imm) ) s.rf[inst.rt] = sext_8( s.mem.read( addr, 1 ) ) s.pc += 4