예제 #1
0
파일: isa.py 프로젝트: igrr/pydgin-min
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
예제 #2
0
파일: isa.py 프로젝트: cornell-brg/pydgin
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
예제 #3
0
파일: isa.py 프로젝트: wiltonlazary/pydgin
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