Exemplo n.º 1
0
Arquivo: isa.py Projeto: cfbolz/pydgin
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
Exemplo n.º 2
0
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
Exemplo n.º 3
0
Arquivo: isa.py Projeto: cfbolz/pydgin
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
Exemplo n.º 4
0
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