Search in sources :

Example 66 with RegisterSpec

use of com.android.dx.rop.code.RegisterSpec in project buck by facebook.

the class Form12x method isCompatible.

/** {@inheritDoc} */
@Override
public boolean isCompatible(DalvInsn insn) {
    if (!(insn instanceof SimpleInsn)) {
        return false;
    }
    RegisterSpecList regs = insn.getRegisters();
    RegisterSpec rs1;
    RegisterSpec rs2;
    switch(regs.size()) {
        case 2:
            {
                rs1 = regs.get(0);
                rs2 = regs.get(1);
                break;
            }
        case 3:
            {
                /*
                 * This format is allowed for ops that are effectively
                 * 3-arg but where the first two args are identical.
                 */
                rs1 = regs.get(1);
                rs2 = regs.get(2);
                if (rs1.getReg() != regs.get(0).getReg()) {
                    return false;
                }
                break;
            }
        default:
            {
                return false;
            }
    }
    return unsignedFitsInNibble(rs1.getReg()) && unsignedFitsInNibble(rs2.getReg());
}
Also used : SimpleInsn(com.android.dx.dex.code.SimpleInsn) RegisterSpecList(com.android.dx.rop.code.RegisterSpecList) RegisterSpec(com.android.dx.rop.code.RegisterSpec)

Aggregations

RegisterSpec (com.android.dx.rop.code.RegisterSpec)66 RegisterSpecList (com.android.dx.rop.code.RegisterSpecList)24 PlainInsn (com.android.dx.rop.code.PlainInsn)12 Constant (com.android.dx.rop.cst.Constant)10 TypedConstant (com.android.dx.rop.cst.TypedConstant)8 TypeBearer (com.android.dx.rop.type.TypeBearer)8 ArrayList (java.util.ArrayList)8 Insn (com.android.dx.rop.code.Insn)7 PlainCstInsn (com.android.dx.rop.code.PlainCstInsn)7 Rop (com.android.dx.rop.code.Rop)7 ThrowingCstInsn (com.android.dx.rop.code.ThrowingCstInsn)7 CstType (com.android.dx.rop.cst.CstType)7 LocalItem (com.android.dx.rop.code.LocalItem)5 RegisterSpecSet (com.android.dx.rop.code.RegisterSpecSet)5 ThrowingInsn (com.android.dx.rop.code.ThrowingInsn)5 CstString (com.android.dx.rop.cst.CstString)5 BitSet (java.util.BitSet)5 HashSet (java.util.HashSet)5 SourcePosition (com.android.dx.rop.code.SourcePosition)4 CstFieldRef (com.android.dx.rop.cst.CstFieldRef)4