def v850_prepare(obj, imm32, lh, ff, imm, lo): imm = imm << 2 list12 = [ env.R[x] for x in (30, 31, 29, 28, 23, 22, 21, 20, 27, 26, 25, 24) ] L = [] for b in (lo // lh).bitlist(): r = list12.pop(0) if b == 1: L.append(r) if ff == 0b00: op3 = env.sp elif ff == 0b01: op3 = env.cst(imm & 0xffff, 16).signextend(32) elif ff == 0b10: op3 = env.cst((imm & 0xffff) << 16, 32) elif ff == 0b11: op3 = env.cst(imm, 32) obj.operands = [L, env.cst(imm, 5), op3] obj.type = type_data_processing
def v850_imm_reg(obj, imm, reg2, _chk=0): if _chk & 2: _chk_reg_null(obj, reg2) dst = env.R[reg2] imm5 = env.cst(imm, 5).signextend(32) obj.operands = [imm5, dst] obj.type = type_data_processing
def v850_3ops(obj, disp, reg1): dst = env.R[reg1] disp32 = env.cst(disp << 1, 32) obj.operands = [disp32, dst] if obj.mnemonic == "JR": obj.operands.pop() obj.type = type_control_flow
def v850_3ops(obj, imm, reg2, reg1, _chk=0): if _chk & 2: _chk_reg_null(obj, reg2) dst, src = env.R[reg2], env.R[reg1] imm16 = env.cst(imm, 16) obj.operands = [imm16, src, dst] obj.type = type_data_processing
def v850_jmp(obj, dhi, reg2, dlo): disp = env.cst((dlo // dhi).int(), 22).signextend(32) obj.operands = [disp] if reg2 != 0: dst = env.R[reg2] obj.operands.append(dst) obj.type = type_control_flow
def v850_prepare(obj, l1, imm, l0): imm = imm << 2 list12 = [env.R[x] for x in (30, 31, 29, 28, 23, 22, 21, 20, 27, 26, 25, 24)] L = [] for b in (l0 // l1).bitlist(): r = list12.pop(0) if b == 1: L.append(r) obj.operands = [L, env.cst(imm, 5)] obj.type = type_data_processing
def v850_fetrap(obj, v): if v == 0: raise InstructionError(obj) vector = env.cst(v, 4) obj.operands = [vector] obj.type = type_system
def v850_ext4(obj, reg3, I, reg2, imm5): imm9 = env.cst((imm5 // I), 9) dst, src = env.R[reg3], env.R[reg2] obj.operands = [imm9, src, dst] obj.type = type_data_processing
def v850_cccc(obj, reg3, cond, reg2, imm5): imm = env.cst(imm5, 5).signextend(32) dst, src = env.R[reg3], env.R[reg2] obj.operands = [cond, imm, src, dst] obj.type = type_data_processing
def v850_trap(obj, v): obj.operands = [env.cst(v, 5)] obj.type = type_control_flow
def v850_syscall(obj, V, v): obj.operands = [env.cst((v // V).int(), 8)] obj.type = type_control_flow
def v850_mov(obj, disp, reg1): dst = env.R[reg1] disp32 = env.cst(disp, 32) obj.operands = [disp32, dst] obj.type = type_data_processing
def v850_br_cond(obj, dhi, dlo): disp = (dlo // dhi).int() disp = env.cst(disp << 1, 9).signextend(32) obj.operands = [disp] obj.type = type_control_flow
def v850_imm_reg(obj, imm): imm = env.cst(imm << 1, 32) obj.operands = [imm] obj.type = type_data_processing