private int getMoveResultRegister(DecodedInstruction[] insnArr, int offset) { int nextOffset = getNextInsnOffset(insnArr, offset); if (nextOffset >= 0) { DecodedInstruction next = insnArr[nextOffset]; int opc = next.getOpcode(); if (opc == Opcodes.MOVE_RESULT || opc == Opcodes.MOVE_RESULT_WIDE || opc == Opcodes.MOVE_RESULT_OBJECT) { return next.getA(); } } return -1; }
@Override public void encode(DecodedInstruction insn, CodeOutput out) { // See above. int opcode = insn.getOpcode(); int shift = (opcode == Opcodes.CONST_HIGH16) ? 16 : 48; short literal = (short) (insn.getLiteral() >> shift); out.write(codeUnit(opcode, insn.getA()), literal); } },
@Override public void encode(DecodedInstruction insn, CodeOutput out) { int index = insn.getIndex(); out.write( codeUnit(insn.getOpcode(), insn.getA()), unit0(index), unit1(index)); } },
@Override public void encode(DecodedInstruction insn, CodeOutput out) { out.write( codeUnit(insn.getOpcode(), insn.getA()), insn.getBUnit()); } },
@Override public void encode(DecodedInstruction insn, CodeOutput out) { int relativeTarget = insn.getTargetByte(out.cursor()); out.write(codeUnit(insn.getOpcode(), relativeTarget)); } },
@Override public void encode(DecodedInstruction insn, CodeOutput out) { out.write( codeUnit(insn.getOpcode(), insn.getA()), insn.getIndexUnit()); } },
public void visit(DecodedInstruction[] all, DecodedInstruction one) { int fieldId = one.getIndex(); int mappedId = indexMap.adjustField(fieldId); boolean isJumbo = (one.getOpcode() == Opcodes.CONST_STRING_JUMBO); jumboCheck(isJumbo, mappedId); mappedInstructions[mappedAt++] = one.withIndex(mappedId); } }
@Override public void encode(DecodedInstruction insn, CodeOutput out) { int index = insn.getIndex(); out.write( codeUnit(insn.getOpcode(), insn.getA()), unit0(index), unit1(index)); } },
@Override public void encode(DecodedInstruction insn, CodeOutput out) { short relativeTarget = insn.getTargetUnit(out.cursor()); out.write(codeUnit(insn.getOpcode(), insn.getA()), relativeTarget); } },
@Override public void encode(DecodedInstruction insn, CodeOutput out) { out.write( codeUnit(insn.getOpcode(), makeByte(insn.getA(), insn.getB())), insn.getIndexUnit()); } },
@Override public void encode(DecodedInstruction insn, CodeOutput out) { out.write( codeUnit(insn.getOpcode(), makeByte(insn.getA(), insn.getB())), insn.getLiteralUnit()); } },
@Override public void encode(DecodedInstruction insn, CodeOutput out) { int relativeTarget = insn.getTarget(out.cursor()); out.write( codeUnit(insn.getOpcode(), insn.getA()), unit0(relativeTarget), unit1(relativeTarget)); } },
@Override public void encode(DecodedInstruction insn, CodeOutput out) { out.write( codeUnit(insn.getOpcode(), insn.getA()), codeUnit(insn.getB(), insn.getC())); } },
@Override public void encode(DecodedInstruction insn, CodeOutput out) { int relativeTarget = insn.getTarget(out.cursor()); out.write( codeUnit(insn.getOpcode(), insn.getA()), unit0(relativeTarget), unit1(relativeTarget)); } },
@Override public void encode(DecodedInstruction insn, CodeOutput out) { short relativeTarget = insn.getTargetUnit(out.cursor()); out.write( codeUnit(insn.getOpcode(), makeByte(insn.getA(), insn.getB())), relativeTarget); } },
/** * Helper method that encodes any of the three-unit register-range formats. */ private static void encodeRegisterRange(DecodedInstruction insn, CodeOutput out) { out.write(codeUnit(insn.getOpcode(), insn.getRegisterCount()), insn.getIndexUnit(), insn.getAUnit()); }
@Override public void encode(DecodedInstruction insn, CodeOutput out) { short relativeTarget = insn.getTargetUnit(out.cursor()); out.write( codeUnit(insn.getOpcode(), makeByte(insn.getA(), insn.getB())), relativeTarget); } },
/** * Helper method that encodes any of the three-unit register-range formats. */ private static void encodeRegisterRange(DecodedInstruction insn, CodeOutput out) { out.write(codeUnit(insn.getOpcode(), insn.getRegisterCount()), insn.getIndexUnit(), insn.getAUnit()); }
/** * Helper method that encodes any of the register-list formats. */ private static void encodeRegisterList(DecodedInstruction insn, CodeOutput out) { out.write(codeUnit(insn.getOpcode(), makeByte(insn.getE(), insn.getRegisterCount())), insn.getIndexUnit(), codeUnit(insn.getA(), insn.getB(), insn.getC(), insn.getD())); }