def execute_strh(s, inst): if condition_passed(s, inst.cond()): 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.mem.write(addr, 2, s.rf[inst.rd()] & 0xFFFF) s.rf[PC] = s.fetch_pc() + 4
def execute_strh( s, inst ): if condition_passed( s, inst.cond ): 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.mem.write( addr, 2, s.rf[ inst.rd ] & 0xFFFF ) s.rf[PC] = s.fetch_pc() + 4
def execute_ldrsh(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()] = sign_extend_half(s.mem.read(addr, 2)) s.rf[PC] = s.fetch_pc() + 4
def execute_ldrsh( 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_16( s.mem.read( addr, 2 ) ) s.rf[PC] = s.fetch_pc() + 4