Example #1
0
def instr_SBFX(obj, widthm1, Rd, lsb, Rn):
    obj.d = env.regs[Rd]
    obj.n = env.regs[Rn]
    obj.lsbit = env.cst(lsb, 5)
    obj.widthminus1 = env.cst(widthm1, 5)
    obj.operands = [obj.d, obj.n]
    obj.type = type_data_processing
Example #2
0
def A_default(obj,widthm1,Rd,lsb,Rn):
  obj.d = env.regs[Rd]
  obj.n = env.regs[Rn]
  if 15 in (Rd,Rn): raise InstructionError(obj)
  obj.lsbit = env.cst(lsb,5)
  obj.widthminus1 = env.cst(widthm1,5)
  obj.operands = [obj.d,obj.n, obj.lsbit, obj.widthminus1+1]
  obj.type = type_data_processing
Example #3
0
def A_default(obj,widthm1,Rd,lsb,Rn):
  obj.d = env.regs[Rd]
  obj.n = env.regs[Rn]
  if 15 in (Rd,Rn): raise InstructionError(obj)
  obj.lsbit = env.cst(lsb,5)
  obj.widthminus1 = env.cst(widthm1,5)
  obj.operands = [obj.d,obj.n, obj.lsbit, obj.widthminus1+1]
  obj.type = type_data_processing
Example #4
0
def A_label(obj,S,imm10H,J1,J2,imm10L):
  I1, I2 = str(~(J1^S)&0x1), str(~(J2^S)&0x1)
  v = int(str(S)+I1+I2+imm10H+imm10L+'00',2)
  obj.imm32 = env.cst(v,25).signextend(32)
  obj.operands = [obj.imm32]
  obj.type = type_control_flow
  obj.cond = env.CONDITION_AL
Example #5
0
def T2_ADD_i(obj,Rdn,imm8):
  obj.setflags = ~InITBlock(env.internals['itstate'])
  obj.n = env.regs[Rdn]
  obj.d = obj.n
  obj.imm32 = env.cst(imm8,32)
  obj.operands = [obj.d,obj.n,obj.imm32]
  obj.type = type_data_processing
Example #6
0
def T1_RSB(obj,Rn,Rd):
  obj.setflags = ~InITBlock(env.internals['itstate'])
  obj.d = env.regs[Rd]
  obj.n = env.regs[Rn]
  obj.imm32 = env.cst(0,32)
  obj.operands = [obj.d,obj.n,obj.imm32]
  obj.type = type_data_processing
Example #7
0
def T1_LDR_literal(obj,Rt,imm8):
  obj.n = env.pc
  obj.t = env.regs[Rt]
  obj.imm32 = env.cst(imm8<<2,32)
  obj.add = True
  obj.operands = [obj.t, obj.n, obj.imm32]
  obj.type = type_data_processing
Example #8
0
def A_default(obj, Rn, imm8):
    obj.n = env.regs[Rn]
    obj.imm32 = env.cst(imm8, 32)
    obj.operands = [obj.n, obj.imm32]
    obj.type = type_data_processing
    obj.stype = None
    obj.cond = env.CONDITION_AL
Example #9
0
def A_sreg(obj,sat_imm,Rd,imm5,sh,Rn):
  obj.d = env.regs[Rd]
  obj.n = DecodeShift(sh<<1,env.regs[Rn],env.cst(imm5,5))
  obj.saturate_to = sat_imm+1
  obj.operands = [obj.d,obj.saturate_to,obj.n]
  if env.pc in obj.operands: raise InstructionError(obj)
  obj.type = type_data_processing
Example #10
0
def A_default(obj, Rd, imm8):
    obj.d = env.regs[Rd]
    obj.n = env.sp
    obj.imm32 = env.cst(imm8 << 2, 32)
    obj.operands = [obj.d, obj.n, obj.imm32]
    obj.type = type_data_processing
    obj.cond = env.CONDITION_AL
Example #11
0
def A_default(obj, Rd, imm8):
    obj.setflags = ~InITBlock(env.internals['itstate'])
    obj.d = env.regs[Rd]
    obj.imm32 = env.cst(imm8, 32)
    obj.operands = [obj.d, obj.imm32]
    obj.type = type_data_processing
    obj.cond = env.CONDITION_AL
Example #12
0
def A_sreg(obj,sat_imm,Rd,imm5,sh,Rn):
  obj.d = env.regs[Rd]
  obj.n = DecodeShift(sh<<1,env.regs[Rn],env.cst(imm5,5))
  obj.saturate_to = sat_imm+1
  obj.operands = [obj.d,obj.saturate_to,obj.n]
  if env.pc in obj.operands: raise InstructionError(obj)
  obj.type = type_data_processing
Example #13
0
def A_default(obj,Rd,imm8):
  obj.setflags = ~InITBlock(env.internals['itstate'])
  obj.d = env.regs[Rd]
  obj.imm32 = env.cst(imm8,32)
  obj.operands = [obj.d, obj.imm32]
  obj.type = type_data_processing
  obj.cond = env.CONDITION_AL
Example #14
0
def A_default(obj, i, imm5, Rn):
    obj.setflags = False
    obj.n = env.regs[Rn]
    obj.imm32 = env.cst(int(i + imm5 + "0", 2), 32)
    obj.operands = [obj.n, obj.imm32]
    obj.type = type_control_flow
    obj.cond = env.CONDITION_AL
Example #15
0
def instr_PLx(obj,U,Rt,imm12):
  obj.n = env.pc
  obj.add = (U==1)
  obj.imm32 = env.cst(imm12,32)
  obj.operands = [obj.n, obj.imm32]
  obj.type = type_cpu_state
  obj.cond = env.CONDITION_AL
Example #16
0
def A_adr(obj, Rd, imm8):
    obj.setflags = False
    obj.d = env.regs[Rd]
    obj.imm32 = env.cst(imm8 << 2, 32)
    obj.operands = [obj.d, obj.imm32]
    obj.type = type_data_processing
    obj.cond = env.CONDITION_AL
Example #17
0
def A_default(obj, imm4, Rd, imm12):
    obj.d = env.regs[Rd]
    if Rd == 15:
        raise InstructionError(obj)
    obj.imm16 = env.cst((imm4 << 12) + imm12, 16)
    obj.operands = [obj.d, obj.imm16]
    obj.type = type_data_processing
Example #18
0
def A_default(obj, i, imm4, imm3, Rd, imm8):
    obj.d = env.regs[Rd]
    if BadReg(Rd): raise InstructionError(obj)
    obj.imm16 = env.cst(int(imm4 + i + imm3 + imm8, 2), 16)
    obj.operands = [obj.d, obj.imm16]
    obj.type = type_data_processing
    obj.cond = env.CONDITION_AL
Example #19
0
def A_default(obj,i,imm4,imm3,Rd,imm8):
  obj.d = env.regs[Rd]
  if BadReg(Rd): raise InstructionError(obj)
  obj.imm16 = env.cst(int(imm4+i+imm3+imm8,2),16)
  obj.operands = [obj.d, obj.imm16]
  obj.type = type_data_processing
  obj.cond = env.CONDITION_AL
Example #20
0
def A_label(obj, S, imm10H, J1, J2, imm10L):
    I1, I2 = str(~(J1 ^ S) & 0x1), str(~(J2 ^ S) & 0x1)
    v = int(str(S) + I1 + I2 + imm10H + imm10L + "00", 2)
    obj.imm32 = env.cst(v, 25).signextend(32)
    obj.operands = [obj.imm32]
    obj.type = type_control_flow
    obj.cond = env.CONDITION_AL
Example #21
0
def A_default(obj,imm7):
  obj.d = env.sp
  obj.n = env.sp
  obj.imm32 = env.cst(imm7<<2,32)
  obj.operands = [obj.d,obj.n,obj.imm32]
  obj.type = type_data_processing
  obj.cond = env.CONDITION_AL
Example #22
0
def instr_PLx(obj, U, Rt, imm12):
    obj.n = env.pc
    obj.add = U == 1
    obj.imm32 = env.cst(imm12, 32)
    obj.operands = [obj.n, obj.imm32]
    obj.type = type_cpu_state
    obj.cond = env.CONDITION_AL
Example #23
0
def T2_LDR_literal(obj, U, Rt, imm12):
    obj.n = env.pc
    obj.t = env.regs[Rt]
    obj.imm32 = env.cst(imm12, 32)
    obj.add = (U == 1)
    obj.operands = [obj.t, obj.n, obj.imm32]
    obj.type = type_data_processing
Example #24
0
def T1_STREX(obj, Rn, Rt, Rd, imm8):
    obj.d = env.regs[Rd]
    obj.t = env.regs[Rt]
    obj.n = env.regs[Rn]
    obj.imm32 = env.cst(imm8 << 2, 32)
    obj.operands = [obj.d, obj.t, obj.n, obj.imm32]
    obj.type = type_data_processing
Example #25
0
def A_sreg(obj,S,Rn,Rd,imm5,stype,Rm):
  obj.setflags = (S==1)
  obj.n = env.regs[Rn]
  obj.d = env.regs[Rd]
  obj.m = DecodeShift(stype,env.regs[Rm],env.cst(imm5,5))
  obj.operands = [obj.d,obj.n,obj.m]
  obj.type = type_data_processing
  if obj.d is env.pc: obj.type = type_control_flow
Example #26
0
def A_sreg(obj, Rn, imm5, stype, Rm):
    obj.n = env.regs[Rn]
    obj.m = DecodeShift(stype, env.regs[Rm], env.cst(imm5, 5))
    obj.stype = stype
    obj.shift = imm5
    obj.m = env.regs[Rm]
    obj.operands = [obj.n, obj.m]
    obj.type = type_data_processing
Example #27
0
def A_label(obj,S,imm10,J1,J2,imm11):
  I1 = '1' if J1==S else '0'
  I2 = '1' if J2==S else '0'
  v = int(S+I1+I2+imm10+imm11+'0',2)
  obj.imm32 = env.cst(v,25).signextend(32)
  obj.operands = [obj.imm32]
  obj.type = type_control_flow
  obj.cond = env.CONDITION_AL
Example #28
0
def A_default(obj,imm5,Rm,Rd):
  obj.setflags = ~InITBlock(env.internals['itstate'])
  obj.d = env.regs[Rd]
  obj.m = env.regs[Rm]
  obj.imm5 = env.cst(imm5,5)
  obj.operands = [obj.d,obj.m,obj.imm5]
  obj.type = type_data_processing
  obj.cond = env.CONDITION_AL
Example #29
0
def A_label(obj, S, imm10, J1, J2, imm11):
    I1 = "1" if J1 == S else "0"
    I2 = "1" if J2 == S else "0"
    v = int(S + I1 + I2 + imm10 + imm11 + "0", 2)
    obj.imm32 = env.cst(v, 25).signextend(32)
    obj.operands = [obj.imm32]
    obj.type = type_control_flow
    obj.cond = env.CONDITION_AL
Example #30
0
def A_sreg(obj, Rn, Rd, imm5, tb, Rm):
    obj.n = env.regs[Rn]
    obj.d = env.regs[Rd]
    if 15 in (Rd, Rn, Rm):
        raise InstructionError(obj)
    obj.m = DecodeShift(tb < 1, env.regs[Rm], env.cst(imm5, 5))
    obj.operands = [obj.d, obj.n, obj.m]
    obj.type = type_data_processing
Example #31
0
def A_sreg(obj,Rn,Rd,imm5,tb,Rm):
  obj.n = env.regs[Rn]
  obj.d = env.regs[Rd]
  if 15 in (Rd,Rn,Rm): raise InstructionError(obj)
  obj.mnemonic += 'BT' if tb==0 else 'TB'
  obj.m = DecodeShift(tb<1,env.regs[Rm],env.cst(imm5,5))
  obj.operands = [obj.d,obj.n,obj.m]
  obj.type = type_data_processing
Example #32
0
def A_sreg(obj,S,Rn,Rd,imm5,stype,Rm):
  obj.setflags = (S==1)
  obj.n = env.regs[Rn]
  obj.d = env.regs[Rd]
  obj.m = DecodeShift(stype,env.regs[Rm],env.cst(imm5,5))
  obj.operands = [obj.d,obj.n,obj.m]
  obj.type = type_data_processing
  if obj.d is env.pc: obj.type = type_control_flow
Example #33
0
def A_default(obj, imm5, Rm, Rd):
    obj.setflags = ~InITBlock(env.internals['itstate'])
    obj.d = env.regs[Rd]
    obj.m = env.regs[Rm]
    obj.imm5 = env.cst(imm5, 5)
    obj.operands = [obj.d, obj.m, obj.imm5]
    obj.type = type_data_processing
    obj.cond = env.CONDITION_AL
Example #34
0
def A_deref(obj,Rn,Rt,imm8):
  obj.t = env.regs[Rt]
  obj.n = env.regs[Rn]
  if BadReg(Rt) or Rn==15: raise InstructionError(obj)
  obj.imm32 = env.cst(imm8<<2,32)
  obj.operands = [obj.t, obj.n, obj.imm32]
  obj.type = type_data_processing
  obj.cond = env.CONDITION_AL
Example #35
0
def A_default(obj, Rn, Rd):
    obj.setflags = ~InITBlock(env.internals["itstate"])
    obj.d = env.regs[Rd]
    obj.n = env.regs[Rn]
    obj.imm32 = env.cst(0, 32)
    obj.operands = [obj.d, obj.n, obj.imm32]
    obj.type = type_data_processing
    obj.cond = env.CONDITION_AL
Example #36
0
def A_default(obj, imm7):
    obj.setflags = False
    obj.d = env.sp
    obj.n = env.sp
    obj.imm32 = env.cst(imm7 << 2, 32)
    obj.operands = [obj.d, obj.n, obj.imm32]
    obj.type = type_data_processing
    obj.cond = env.CONDITION_AL
Example #37
0
def A_deref(obj, Rn, Rt, imm8):
    obj.t = env.regs[Rt]
    obj.n = env.regs[Rn]
    if BadReg(Rt) or Rn == 15: raise InstructionError(obj)
    obj.imm32 = env.cst(imm8 << 2, 32)
    obj.operands = [obj.t, obj.n, obj.imm32]
    obj.type = type_data_processing
    obj.cond = env.CONDITION_AL
Example #38
0
def A_default(obj, S, imm3, Rd, imm2, Rm):
    obj.setflags = (S == 1)
    obj.d = env.regs[Rd]
    obj.m = env.regs[Rm]
    if BadReg(Rd) or BadReg(Rm): raise InstructionError(obj)
    obj.imm5 = env.cst((imm3 << 2) + imm2, 5)
    obj.operands = [obj.d, obj.n, obj.imm5]
    obj.type = type_data_processing
    obj.cond = env.CONDITION_AL
Example #39
0
def A_default(obj,S,imm3,Rd,imm2,Rm):
  obj.setflags = (S==1)
  obj.d = env.regs[Rd]
  obj.m = env.regs[Rm]
  if BadReg(Rd) or BadReg(Rm): raise InstructionError(obj)
  obj.imm5 = env.cst(imm3<<2+imm2,5)
  obj.operands = [obj.d,obj.n,obj.imm5]
  obj.type = type_data_processing
  obj.cond = env.CONDITION_AL
Example #40
0
def instr_PLx(obj,U,R,Rn,imm5,stype,Rm):
  obj.n = env.regs[Rn]
  obj.m = DecodeShift(stype,env.regs[Rm],env.cst(imm5,5))
  if Rm==15: raise InstructionError(obj)
  obj.add = (U==1)
  obj.is_pldw = (R==0)
  if obj._is_pldw: obj.mnemonic += 'W'
  obj.operands = [obj.n,obj.m]
  obj.type = type_cpu_state
Example #41
0
def T1_LDRx(obj,imm5,Rn,Rt,_s):
  obj.n = env.regs[Rn]
  obj.t = env.regs[Rt]
  obj.imm32 = env.cst(imm5<<_s,32)
  obj.index = True
  obj.add = True
  obj.wback = False
  obj.operands = [obj.t, obj.n, obj.imm32]
  obj.type = type_data_processing
Example #42
0
def A_deref(obj,U,Rt,imm12):
  obj.n = env.pc
  obj.t = env.regs[Rt]
  if Rt==15: raise InstructionError(obj) # see PLDxx
  obj.imm32 = env.cst(imm12,32)
  obj.add = (U==1)
  obj.operands = [obj.t, obj.n, obj.imm32]
  obj.type = type_data_processing
  obj.cond = env.CONDITION_AL
Example #43
0
def instr_PLx(obj, U, R, Rn, imm5, stype, Rm):
    obj.n = env.regs[Rn]
    obj.m = DecodeShift(stype, env.regs[Rm], env.cst(imm5, 5))
    if Rm == 15:
        raise InstructionError(obj)
    obj.add = U == 1
    obj.is_pldw = R == 0
    obj.operands = [obj.n, obj.m]
    obj.type = type_cpu_state
Example #44
0
def A_deref(obj, U, Rt, imm12):
    obj.n = env.pc
    obj.t = env.regs[Rt]
    if Rt == 15: raise InstructionError(obj)  # see PLDxx
    obj.imm32 = env.cst(imm12, 32)
    obj.add = (U == 1)
    obj.operands = [obj.t, obj.n, obj.imm32]
    obj.type = type_data_processing
    obj.cond = env.CONDITION_AL
Example #45
0
def T3_LDR(obj, Rn, Rt, imm12):
    obj.n = env.regs[Rn]
    obj.t = env.regs[Rt]
    obj.imm32 = env.cst(imm12, 32)
    obj.index = True
    obj.add = True
    obj.wback = False
    obj.operands = [obj.t, obj.n, obj.imm32]
    obj.type = type_data_processing
Example #46
0
def A_deref(obj,Rt,imm8):
  obj.n = env.pc
  obj.t = env.regs[Rt]
  obj.imm32 = env.cst(imm8<<2,32)
  obj.index = True
  obj.add = True
  obj.wback = False
  obj.operands = [obj.t, obj.n, obj.imm32]
  obj.type = type_data_processing
  obj.cond = env.CONDITION_AL
Example #47
0
def A_default(obj,Rn,Rt,imm12):
  obj.n = env.regs[Rn]
  obj.t = env.regs[Rt]
  if Rt==15: raise InstructionError(obj) # see PLDxx
  obj.imm32 = env.cst(imm12,32)
  obj.index = True
  obj.add = True
  obj.wback = False
  obj.operands = [obj.t, obj.n, obj.imm32]
  obj.type = type_data_processing
  obj.cond = env.CONDITION_AL
Example #48
0
def A_deref(obj,P,U,W,Rn,Rt,imm4H,imm4L):
  obj.n = env.regs[Rn]
  obj.t = env.regs[Rt]
  obj.t2 = env.regs[Rt+1]
  if Rt==14 or Rt%2==1: raise InstructionError(obj)
  obj.imm32 = env.cst(imm4H<<4+imm4L,32)
  obj.index = (P==1)
  obj.wback = (P==0)|(W==1)
  obj.add = (U==1)
  if obj.wback and (Rn==15 or Rn==Rt or Rn==Rt+1): raise InstructionError(obj)
  obj.operands = [obj.t,obj.t2,obj.n,obj.imm32]
  obj.type = type_data_processing
Example #49
0
def A_deref(obj,P,U,W,Rn,Rt,Rt2,imm8):
  obj.t = env.regs[Rt]
  obj.t2 = env.regs[Rt2]
  obj.n = env.regs[Rn]
  obj.imm32 = env.cst(imm8<<2,32)
  obj.index = (P==1)
  obj.wback = (W==1)
  obj.add = (U==1)
  if obj.wback and (Rn==Rt or Rn==Rt2): raise InstructionError(obj)
  if BadReg(Rt) or BadReg(Rt2) or Rt==Rt2: raise InstructionError(obj)
  obj.operands = [obj.t, obj.t2, obj.n, obj.imm32]
  obj.type = type_data_processing
  obj.cond = env.CONDITION_AL
Example #50
0
def A_default(obj,S,Rd,imm5,Rm):
  obj.setflags = (S==1)
  obj.d = env.regs[Rd]
  obj.m = env.regs[Rm]
  obj.type = type_data_processing
  if imm5==0:
      shift_n = 32 if obj.mnemonic in ('LSR','ASR') else imm5
      if obj.mnemonic=='ROR':
          obj.mnemonic='RRX'
          obj.operands = [obj.d,obj.m]
          return
  else:
      shift_n = imm5
  obj.operands = [obj.d,obj.m,env.cst(shift_n,5)]
  if obj.d is env.pc: obj.type = type_control_flow
Example #51
0
def A_deref(obj,P,U,W,Rn,Rt,imm4H,imm4L):
  obj.n = env.regs[Rn]
  obj.t = env.regs[Rt]
  obj.imm32 = env.cst(imm4H<<4+imm4L,32)
  if P==0 and W==1:
    obj.mnemonic += "T"
    obj.postindex = True
    obj.register_form = False
    if (15 in (Rt,Rn)) or (Rn==Rt): raise InstructionError(obj)
  else:
    obj.index = (P==1)
    obj.wback = (P==0)|(W==1)
    if Rt==15 or (obj.wback and Rn==Rt): raise InstructionError(obj)
  obj.add = (U==1)
  obj.operands = [obj.t,obj.n,obj.imm32]
  obj.type = type_data_processing
Example #52
0
def A_deref(obj,Rn,Rt,P,U,W,imm8):
  obj.n = env.regs[Rn]
  obj.t = env.regs[Rt]
  if Rt==15: raise InstructionError(obj) # see PLDxx
  obj.imm32 = env.cst(imm8,32)
  if P==1 and U==1 and W==0:
      obj.mnemonic += 'T'
      obj.postindex = False
      obj.register_form = False
  else:
      obj.index = (P==1)
      obj.wback = (W==1)
      if BadReg(Rt) and (Rn==Rt): raise InstructionError(obj)
  obj.add = (U==1)
  obj.operands = [obj.t, obj.n, obj.imm32]
  obj.type = type_data_processing
  obj.cond = env.CONDITION_AL
Example #53
0
def A_deref(obj,P,U,W,Rn,Rt,imm12):
  obj.n = env.regs[Rn]
  obj.t = env.regs[Rt]
  obj.imm32 = env.cst(imm12,32)
  if Rn==15:
      if not (P==1 and W==0):
          raise InstructionError(obj)
  if P==0 and W==1:
    obj.mnemonic += 'T'
    obj.postindex = True
    obj.register_form = False
    if (15 in (Rt,Rn)) or (Rn==Rt): raise InstructionError(obj)
  else:
    obj.index = (P==1)
    obj.wback = (P==0)|(W==1)
    if obj.wback and Rn==Rt: raise InstructionError(obj)
  obj.add = (U==1)
  obj.operands = [obj.t,obj.n,obj.imm32]
  obj.type = type_data_processing
  if obj.t is env.pc : obj.type = type_control_flow
Example #54
0
def instr_PLx(obj,U,Rn,imm5,stype,Rm):
  obj.n = env.regs[Rn]
  obj.m = DecodeShift(stype,env.regs[Rm],env.cst(imm5,5))
  obj.add = (U==1)
  obj.operands = [obj.n,obj.m]
  obj.type = type_cpu_state
Example #55
0
def A_default(obj,imm24):
  obj.imm32 = env.cst(imm24,32)
  obj.operands = [obj.imm32]
  obj.type = type_cpu_state
Example #56
0
def A_adr(obj,Rd,imm8):
  obj.d = env.regs[Rd]
  obj.imm32 = env.cst(imm8<<2,32)
  obj.operands = [obj.d,obj.imm32]
  obj.type = type_data_processing
  obj.cond = env.CONDITION_AL
Example #57
0
def A_default(obj,Rn,imm8):
  obj.n = env.regs[Rn]
  obj.imm32 = env.cst(imm8,32)
  obj.operands = [obj.n, obj.imm32]
  obj.type = type_data_processing
  obj.cond = env.CONDITION_AL
Example #58
0
def A_default(obj,i,imm5,Rn):
  obj.n = env.regs[Rn]
  obj.imm32 = env.cst(int(i+imm5+'0',2),32)
  obj.operands = [obj.n, obj.imm32]
  obj.type = type_control_flow
  obj.cond = env.CONDITION_AL
Example #59
0
def A_default(obj,imm8):
  obj.imm32 = env.cst(imm8,32)
  obj.operands = [obj.imm32]
  obj.type = type_cpu_state
  obj.cond = env.CONDITION_AL
Example #60
0
def A_label(obj,imm11):
  obj.imm32 = env.cst(imm11<<1,12).signextend(32)
  obj.operands = [obj.imm32]
  obj.type = type_control_flow
  obj.cond = env.CONDITION_AL