コード例 #1
0
ファイル: spec_armv8.py プロジェクト: x86Labs/amoco
def A64_generic(obj, sf, shift, Rm, imm6, Rn, Rd):
    obj.datasize = 64 if (sf == 1) else 32
    regs = env.Xregs if sf == 1 else env.Wregs
    obj.d = sp2z(regs[Rd])
    obj.n = sp2z(regs[Rn])
    if sf == 0 and imm6 > 31: raise InstructionError(obj)
    shift_type = {0: '<<', 1: '>>', 2: '//', 3: '>>>'}[shift]
    obj.m = env.oper(shift_type, sp2z(regs[Rm]), cst(imm6))
    obj.operands = [obj.d, obj.n, obj.m]
    obj.type = type_data_processing
コード例 #2
0
def A64_generic(obj, sf, S, shift, Rm, imm6, Rn, Rd):
    obj.datasize = 64 if (sf == 1) else 32
    obj.setflags = S == 1
    regs = env.Xregs if sf == 1 else env.Wregs
    if shift == 3:
        raise InstructionError(obj)
    if sf == 0 and imm6 > 31:
        raise InstructionError(obj)
    shift_type = {0: "<<", 1: ">>", 2: "//", 3: ">>>"}[shift]
    obj.m = env.oper(shift_type, sp2z(regs[Rm]), cst(imm6))
    obj.n = sp2z(regs[Rn])
    obj.d = sp2z(regs[Rd])
    obj.operands = [obj.d, obj.n, obj.m]
    obj.type = type_data_processing