Program: 38251
Project: 38251
Buggy source:
protected void parseBytecode(){
  logger.debug("String_Node_Str" + eMethod.getClass().getSimpleName() + "String_Node_Str"+ eMethod.method.getMethodString());
  org.jf.dexlib.Code.Instruction[] instrucs=eMethod.codeItem.getInstructions();
  logger.debug("String_Node_Str" + eMethod.method.getMethodString() + "String_Node_Str"+ instrucs.length);
  instructions=new InstructionArray();
  int instLoc=0;
  int instCounter=-1;
  int currentCodeAddress=0;
  for (  org.jf.dexlib.Code.Instruction inst : instrucs) {
    totalInsts++;
    instCounter++;
    instLoc=currentCodeAddress;
    logger.debug("String_Node_Str" + instCounter + "String_Node_Str"+ instLoc+ "String_Node_Str"+ inst.opcode.name()+ "String_Node_Str"+ inst.getFormat());
switch (inst.opcode) {
case NOP:
switch (inst.getFormat()) {
case ArrayData:
{
          for (int i=0; i < instructions.size(); i++) {
            if (instructions.getFromId(i) instanceof ArrayFill)             if (instLoc == (((ArrayFill)getInstructionFromIndex(i)).tableAddressOffset + getAddressFromIndex(i))) {
              ((ArrayFill)getInstructionFromIndex(i)).setArrayDataTable((ArrayDataPseudoInstruction)inst);
              break;
            }
          }
          break;
        }
case PackedSwitchData:
      for (int i=0; i < instructions.size(); i++) {
        if (instructions.getFromId(i) instanceof Switch)         if (instLoc == (((Switch)getInstructionFromIndex(i)).tableAddressOffset + getAddressFromIndex(i))) {
          ((Switch)getInstructionFromIndex(i)).setSwitchPad(new PackedSwitchPad(((PackedSwitchDataPseudoInstruction)inst),getAddressFromIndex(i + 1) - getAddressFromIndex(i)));
          break;
        }
      }
    break;
case SparseSwitchData:
{
    for (int i=0; i < instructions.size(); i++) {
      if (instructions.getFromId(i) instanceof Switch)       if (instLoc == (((Switch)getInstructionFromIndex(i)).tableAddressOffset + getAddressFromIndex(i))) {
        ((Switch)getInstructionFromIndex(i)).setSwitchPad(new SparseSwitchPad(((SparseSwitchDataPseudoInstruction)inst),getAddressFromIndex(i + 1) - getAddressFromIndex(i)));
        break;
      }
    }
    break;
  }
case UnresolvedOdexInstruction:
throw new RuntimeException("String_Node_Str" + inst.opcode.toString() + inst.getFormat());
default :
break;
}
break;
case MOVE:
instructions.add(new UnaryOperation(instLoc,UnaryOperation.OpID.MOVE,((Instruction12x)inst).getRegisterA(),((Instruction12x)inst).getRegisterB(),inst.opcode,this));
break;
case MOVE_FROM16:
instructions.add(new UnaryOperation(instLoc,UnaryOperation.OpID.MOVE,((Instruction22x)inst).getRegisterA(),((Instruction22x)inst).getRegisterB(),inst.opcode,this));
break;
case MOVE_16:
instructions.add(new UnaryOperation(instLoc,UnaryOperation.OpID.MOVE,((Instruction32x)inst).getRegisterA(),((Instruction32x)inst).getRegisterB(),inst.opcode,this));
break;
case MOVE_WIDE:
instructions.add(new UnaryOperation(instLoc,UnaryOperation.OpID.MOVE_WIDE,((Instruction12x)inst).getRegisterA(),((Instruction12x)inst).getRegisterB(),inst.opcode,this));
break;
case MOVE_WIDE_FROM16:
instructions.add(new UnaryOperation(instLoc,UnaryOperation.OpID.MOVE_WIDE,((Instruction22x)inst).getRegisterA(),((Instruction22x)inst).getRegisterB(),inst.opcode,this));
break;
case MOVE_WIDE_16:
instructions.add(new UnaryOperation(instLoc,UnaryOperation.OpID.MOVE_WIDE,((Instruction32x)inst).getRegisterA(),((Instruction32x)inst).getRegisterB(),inst.opcode,this));
break;
case MOVE_OBJECT:
instructions.add(new UnaryOperation(instLoc,UnaryOperation.OpID.MOVE,((Instruction12x)inst).getRegisterA(),((Instruction12x)inst).getRegisterB(),inst.opcode,this));
break;
case MOVE_OBJECT_FROM16:
instructions.add(new UnaryOperation(instLoc,UnaryOperation.OpID.MOVE,((Instruction22x)inst).getRegisterA(),((Instruction22x)inst).getRegisterB(),inst.opcode,this));
break;
case MOVE_OBJECT_16:
instructions.add(new UnaryOperation(instLoc,UnaryOperation.OpID.MOVE,((Instruction32x)inst).getRegisterA(),((Instruction32x)inst).getRegisterB(),inst.opcode,this));
break;
case MOVE_RESULT:
instructions.add(new UnaryOperation(instLoc,UnaryOperation.OpID.MOVE,((Instruction11x)inst).getRegisterA(),getReturnReg(),inst.opcode,this));
break;
case MOVE_RESULT_WIDE:
instructions.add(new UnaryOperation(instLoc,UnaryOperation.OpID.MOVE_WIDE,((Instruction11x)inst).getRegisterA(),getReturnReg(),inst.opcode,this));
break;
case MOVE_RESULT_OBJECT:
instructions.add(new UnaryOperation(instLoc,UnaryOperation.OpID.MOVE,((Instruction11x)inst).getRegisterA(),getReturnReg(),inst.opcode,this));
break;
case MOVE_EXCEPTION:
instructions.add(new UnaryOperation(instLoc,UnaryOperation.OpID.MOVE,((Instruction11x)inst).getRegisterA(),getExceptionReg(),inst.opcode,this));
break;
case RETURN_VOID:
instructions.add(new Return.ReturnVoid(instLoc,inst.opcode,this));
break;
case RETURN:
instructions.add(new Return.ReturnSingle(instLoc,((Instruction11x)inst).getRegisterA(),true,inst.opcode,this));
break;
case RETURN_WIDE:
instructions.add(new Return.ReturnDouble(instLoc,((Instruction11x)inst).getRegisterA(),((Instruction11x)inst).getRegisterA() + 1,inst.opcode,this));
break;
case RETURN_OBJECT:
instructions.add(new Return.ReturnSingle(instLoc,((Instruction11x)inst).getRegisterA(),false,inst.opcode,this));
break;
case CONST_4:
{
instructions.add(new Constant.IntConstant(instLoc,(int)((Instruction11n)inst).getLiteral(),((Instruction11n)inst).getRegisterA(),inst.opcode,this));
logger.debug("String_Node_Str" + ((Instruction11n)inst).getRegisterA() + "String_Node_Str"+ ((Instruction11n)inst).getLiteral());
break;
}
case CONST_16:
instructions.add(new Constant.IntConstant(instLoc,(int)((Instruction21s)inst).getLiteral(),((Instruction21s)inst).getRegisterA(),inst.opcode,this));
logger.debug("String_Node_Str" + ((Instruction21s)inst).getRegisterA() + "String_Node_Str"+ ((Instruction21s)inst).getLiteral());
break;
case CONST:
instructions.add(new Constant.IntConstant(instLoc,(int)((Instruction31i)inst).getLiteral(),((Instruction31i)inst).getRegisterA(),inst.opcode,this));
logger.debug("String_Node_Str" + ((Instruction31i)inst).getRegisterA() + "String_Node_Str"+ ((Instruction31i)inst).getLiteral());
break;
case CONST_HIGH16:
instructions.add(new Constant.IntConstant(instLoc,(int)((Instruction21h)inst).getLiteral(),((Instruction21h)inst).getRegisterA(),inst.opcode,this));
break;
case CONST_WIDE_16:
instructions.add(new Constant.LongConstant(instLoc,((Instruction21s)inst).getLiteral(),((Instruction21s)inst).getRegisterA(),inst.opcode,this));
logger.debug("String_Node_Str" + ((Instruction21s)inst).getRegisterA() + "String_Node_Str"+ ((Instruction21s)inst).getLiteral());
break;
case CONST_WIDE_32:
instructions.add(new Constant.LongConstant(instLoc,((Instruction31i)inst).getLiteral(),((Instruction31i)inst).getRegisterA(),inst.opcode,this));
break;
case CONST_WIDE:
instructions.add(new Constant.LongConstant(instLoc,((Instruction51l)inst).getLiteral(),((Instruction51l)inst).getRegisterA(),inst.opcode,this));
break;
case CONST_WIDE_HIGH16:
instructions.add(new Constant.LongConstant(instLoc,((Instruction21h)inst).getLiteral(),((Instruction21h)inst).getRegisterA(),inst.opcode,this));
logger.debug("String_Node_Str" + ((Instruction21h)inst).getRegisterA() + "String_Node_Str"+ ((Instruction21h)inst).getLiteral());
break;
case CONST_STRING:
instructions.add(new Constant.StringConstant(instLoc,((StringIdItem)((Instruction21c)inst).getReferencedItem()).getStringValue(),((Instruction21c)inst).getRegisterA(),inst.opcode,this));
logger.debug(inst.opcode.toString() + "String_Node_Str" + ((StringIdItem)((Instruction21c)inst).getReferencedItem()).getStringValue());
break;
case CONST_STRING_JUMBO:
instructions.add(new Constant.StringConstant(instLoc,((StringIdItem)((Instruction31c)inst).getReferencedItem()).getStringValue(),((Instruction31c)inst).getRegisterA(),inst.opcode,this));
logger.debug(inst.opcode.toString() + "String_Node_Str" + ((StringIdItem)((Instruction31c)inst).getReferencedItem()).getStringValue());
break;
case CONST_CLASS:
{
String cname=((TypeIdItem)((Instruction21c)inst).getReferencedItem()).getTypeDescriptor();
if (cname.endsWith("String_Node_Str")) cname=cname.substring(0,cname.length() - 1);
TypeReference typeRef=TypeReference.findOrCreate(myClass.getClassLoader().getReference(),cname);
instructions.add(new Constant.ClassConstant(instLoc,typeRef,((Instruction21c)inst).getRegisterA(),inst.opcode,this));
logger.debug(inst.opcode.toString() + "String_Node_Str" + cname+ "String_Node_Str"+ this.myClass.getClassLoader().lookupClass(TypeName.findOrCreate(cname)));
break;
}
case MONITOR_ENTER:
instructions.add(new Monitor(instLoc,true,((Instruction11x)inst).getRegisterA(),inst.opcode,this));
break;
case MONITOR_EXIT:
instructions.add(new Monitor(instLoc,false,((Instruction11x)inst).getRegisterA(),inst.opcode,this));
break;
case CHECK_CAST:
{
logger.debug(inst.opcode.toString() + "String_Node_Str" + ((TypeIdItem)((Instruction21c)inst).getReferencedItem()).getTypeDescriptor());
String cname=((TypeIdItem)((Instruction21c)inst).getReferencedItem()).getTypeDescriptor();
if (cname.endsWith("String_Node_Str")) cname=cname.substring(0,cname.length() - 1);
instructions.add(new CheckCast(instLoc,TypeReference.findOrCreate(myClass.getClassLoader().getReference(),cname),((Instruction21c)inst).getRegisterA(),inst.opcode,this));
break;
}
case INSTANCE_OF:
{
logger.debug(inst.opcode.toString() + "String_Node_Str" + ((TypeIdItem)((Instruction22c)inst).getReferencedItem()).getTypeDescriptor());
String cname=((TypeIdItem)((Instruction22c)inst).getReferencedItem()).getTypeDescriptor();
if (cname.endsWith("String_Node_Str")) cname=cname.substring(0,cname.length() - 1);
instructions.add(new InstanceOf(instLoc,((Instruction22c)inst).getRegisterA(),TypeReference.findOrCreate(myClass.getClassLoader().getReference(),cname),((Instruction22c)inst).getRegisterB(),inst.opcode,this));
break;
}
case ARRAY_LENGTH:
instructions.add(new ArrayLength(instLoc,((Instruction12x)inst).getRegisterA(),((Instruction12x)inst).getRegisterB(),inst.opcode,this));
break;
case NEW_INSTANCE:
{
logger.debug(inst.opcode.toString() + "String_Node_Str" + ((TypeIdItem)((Instruction21c)inst).getReferencedItem()).getTypeDescriptor());
String cname=((TypeIdItem)((Instruction21c)inst).getReferencedItem()).getTypeDescriptor();
if (cname.endsWith("String_Node_Str")) cname=cname.substring(0,cname.length() - 1);
logger.info("String_Node_Str" + ((TypeIdItem)((Instruction21c)inst).getReferencedItem()).getTypeDescriptor());
instructions.add(new New(instLoc,((Instruction21c)inst).getRegisterA(),NewSiteReference.make(instLoc,TypeReference.findOrCreate(myClass.getClassLoader().getReference(),cname)),inst.opcode,this));
break;
}
case NEW_ARRAY:
{
int[] params=new int[1];
params[0]=((Instruction22c)inst).getRegisterB();
logger.debug(inst.opcode.toString() + "String_Node_Str" + ((TypeIdItem)((Instruction22c)inst).getReferencedItem()).getTypeDescriptor());
String cname=((TypeIdItem)((Instruction22c)inst).getReferencedItem()).getTypeDescriptor();
if (cname.endsWith("String_Node_Str")) cname=cname.substring(0,cname.length() - 1);
instructions.add(new NewArray(instLoc,((Instruction22c)inst).getRegisterA(),NewSiteReference.make(instLoc,TypeReference.findOrCreate(myClass.getClassLoader().getReference(),cname)),params,inst.opcode,this));
break;
}
case FILLED_NEW_ARRAY:
{
int registerCount=((Instruction35c)inst).getRegCount();
int[] params=new int[1];
params[0]=registerCount;
int[] args=new int[registerCount];
for (int i=0; i < registerCount; i++) {
switch (i) {
case 0:
args[0]=((Instruction35c)inst).getRegisterD();
break;
case 1:
args[1]=((Instruction35c)inst).getRegisterE();
break;
case 2:
args[2]=((Instruction35c)inst).getRegisterF();
break;
case 3:
args[3]=((Instruction35c)inst).getRegisterG();
break;
case 4:
args[4]=((Instruction35c)inst).getRegisterA();
break;
default :
throw new RuntimeException("String_Node_Str" + instLoc + "String_Node_Str");
}
}
logger.debug(inst.opcode.toString() + "String_Node_Str" + ((TypeIdItem)((Instruction35c)inst).getReferencedItem()).getTypeDescriptor());
String cname=((TypeIdItem)((Instruction35c)inst).getReferencedItem()).getTypeDescriptor();
if (cname.endsWith("String_Node_Str")) cname=cname.substring(0,cname.length() - 1);
NewSiteReference newSiteRef=NewSiteReference.make(instLoc,TypeReference.findOrCreate(myClass.getClassLoader().getReference(),cname));
TypeReference myTypeRef=TypeReference.findOrCreate(myClass.getClassLoader().getReference(),newSiteRef.getDeclaredType().getArrayElementType().getName().toString());
instructions.add(new NewArrayFilled(instLoc,getReturnReg(),newSiteRef,myTypeRef,params,args,inst.opcode,this));
logger.debug("String_Node_Str" + ((TypeIdItem)((Instruction35c)inst).getReferencedItem()).getTypeDescriptor() + "String_Node_Str"+ ((Instruction35c)inst).getRegCount());
logger.debug(registerCount + "String_Node_Str");
for (int temp_i=0; temp_i < registerCount; temp_i++) logger.debug("String_Node_Str" + args[temp_i]);
break;
}
case FILLED_NEW_ARRAY_RANGE:
{
int registerCount=((Instruction3rc)inst).getRegCount();
int[] params=new int[1];
params[0]=registerCount;
int[] args=new int[registerCount];
for (int i=0; i < registerCount; i++) args[i]=((Instruction3rc)inst).getStartRegister() + i;
logger.debug(inst.opcode.toString() + "String_Node_Str" + ((TypeIdItem)((Instruction3rc)inst).getReferencedItem()).getTypeDescriptor());
String cname=((TypeIdItem)((Instruction3rc)inst).getReferencedItem()).getTypeDescriptor();
if (cname.endsWith("String_Node_Str")) cname=cname.substring(0,cname.length() - 1);
NewSiteReference newSiteRef=NewSiteReference.make(instLoc,TypeReference.findOrCreate(myClass.getClassLoader().getReference(),cname));
TypeReference myTypeRef=TypeReference.findOrCreate(myClass.getClassLoader().getReference(),newSiteRef.getDeclaredType().getArrayElementType().getName().toString());
instructions.add(new NewArrayFilled(instLoc,getReturnReg(),newSiteRef,myTypeRef,params,args,inst.opcode,this));
break;
}
case FILL_ARRAY_DATA:
TypeReference arrayElementType=findOutArrayElementType(instrucs,instructions.toArray(new Instruction[0]),instCounter);
instructions.add(new ArrayFill(instLoc,((Instruction31t)inst).getRegisterA(),((Instruction31t)inst).getTargetAddressOffset(),TypeReference.findOrCreate(myClass.getClassLoader().getReference(),arrayElementType.getName().toString()),inst.opcode,this));
break;
case THROW:
instructions.add(new Throw(instLoc,((Instruction11x)inst).getRegisterA(),inst.opcode,this));
break;
case GOTO:
instructions.add(new Goto(instLoc,((Instruction10t)inst).getTargetAddressOffset(),inst.opcode,this));
logger.debug("String_Node_Str" + ((Instruction10t)inst).getTargetAddressOffset());
break;
case GOTO_16:
instructions.add(new Goto(instLoc,((Instruction20t)inst).getTargetAddressOffset(),inst.opcode,this));
break;
case GOTO_32:
instructions.add(new Goto(instLoc,((Instruction30t)inst).getTargetAddressOffset(),inst.opcode,this));
break;
case PACKED_SWITCH:
case SPARSE_SWITCH:
instructions.add(new Switch(instLoc,((Instruction31t)inst).getRegisterA(),((Instruction31t)inst).getTargetAddressOffset(),inst.opcode,this));
logger.debug(inst.opcode.toString() + "String_Node_Str" + inst.getFormat());
break;
case CMPL_FLOAT:
instructions.add(new BinaryOperation(instLoc,BinaryOperation.OpID.CMPL_FLOAT,((Instruction23x)inst).getRegisterA(),((Instruction23x)inst).getRegisterB(),((Instruction23x)inst).getRegisterC(),inst.opcode,this));
break;
case CMPG_FLOAT:
instructions.add(new BinaryOperation(instLoc,BinaryOperation.OpID.CMPG_FLOAT,((Instruction23x)inst).getRegisterA(),((Instruction23x)inst).getRegisterB(),((Instruction23x)inst).getRegisterC(),inst.opcode,this));
break;
case CMPL_DOUBLE:
instructions.add(new BinaryOperation(instLoc,BinaryOperation.OpID.CMPL_DOUBLE,((Instruction23x)inst).getRegisterA(),((Instruction23x)inst).getRegisterB(),((Instruction23x)inst).getRegisterC(),inst.opcode,this));
break;
case CMPG_DOUBLE:
instructions.add(new BinaryOperation(instLoc,BinaryOperation.OpID.CMPG_DOUBLE,((Instruction23x)inst).getRegisterA(),((Instruction23x)inst).getRegisterB(),((Instruction23x)inst).getRegisterC(),inst.opcode,this));
break;
case CMP_LONG:
instructions.add(new BinaryOperation(instLoc,BinaryOperation.OpID.CMPL_LONG,((Instruction23x)inst).getRegisterA(),((Instruction23x)inst).getRegisterB(),((Instruction23x)inst).getRegisterC(),inst.opcode,this));
break;
case IF_EQ:
instructions.add(new Branch.BinaryBranch(instLoc,((Instruction22t)inst).getTargetAddressOffset(),Branch.BinaryBranch.CompareOp.EQ,((Instruction22t)inst).getRegisterA(),((Instruction22t)inst).getRegisterB(),inst.opcode,this));
logger.debug("String_Node_Str" + ((Instruction22t)inst).getRegisterA() + "String_Node_Str"+ ((Instruction22t)inst).getRegisterB()+ "String_Node_Str"+ ((Instruction22t)inst).getTargetAddressOffset());
break;
case IF_NE:
instructions.add(new Branch.BinaryBranch(instLoc,((Instruction22t)inst).getTargetAddressOffset(),Branch.BinaryBranch.CompareOp.NE,((Instruction22t)inst).getRegisterA(),((Instruction22t)inst).getRegisterB(),inst.opcode,this));
logger.debug("String_Node_Str" + ((Instruction22t)inst).getRegisterA() + "String_Node_Str"+ ((Instruction22t)inst).getRegisterB()+ "String_Node_Str"+ ((Instruction22t)inst).getTargetAddressOffset());
break;
case IF_LT:
instructions.add(new Branch.BinaryBranch(instLoc,((Instruction22t)inst).getTargetAddressOffset(),Branch.BinaryBranch.CompareOp.LT,((Instruction22t)inst).getRegisterA(),((Instruction22t)inst).getRegisterB(),inst.opcode,this));
logger.debug("String_Node_Str" + ((Instruction22t)inst).getRegisterA() + "String_Node_Str"+ ((Instruction22t)inst).getRegisterB()+ "String_Node_Str"+ ((Instruction22t)inst).getTargetAddressOffset());
break;
case IF_GE:
instructions.add(new Branch.BinaryBranch(instLoc,((Instruction22t)inst).getTargetAddressOffset(),Branch.BinaryBranch.CompareOp.GE,((Instruction22t)inst).getRegisterA(),((Instruction22t)inst).getRegisterB(),inst.opcode,this));
logger.debug("String_Node_Str" + ((Instruction22t)inst).getRegisterA() + "String_Node_Str"+ ((Instruction22t)inst).getRegisterB()+ "String_Node_Str"+ ((Instruction22t)inst).getTargetAddressOffset());
break;
case IF_GT:
instructions.add(new Branch.BinaryBranch(instLoc,((Instruction22t)inst).getTargetAddressOffset(),Branch.BinaryBranch.CompareOp.GT,((Instruction22t)inst).getRegisterA(),((Instruction22t)inst).getRegisterB(),inst.opcode,this));
logger.debug("String_Node_Str" + ((Instruction22t)inst).getRegisterA() + "String_Node_Str"+ ((Instruction22t)inst).getRegisterB()+ "String_Node_Str"+ ((Instruction22t)inst).getTargetAddressOffset());
break;
case IF_LE:
instructions.add(new Branch.BinaryBranch(instLoc,((Instruction22t)inst).getTargetAddressOffset(),Branch.BinaryBranch.CompareOp.LE,((Instruction22t)inst).getRegisterA(),((Instruction22t)inst).getRegisterB(),inst.opcode,this));
logger.debug("String_Node_Str" + ((Instruction22t)inst).getRegisterA() + "String_Node_Str"+ ((Instruction22t)inst).getRegisterB()+ "String_Node_Str"+ ((Instruction22t)inst).getTargetAddressOffset());
break;
case IF_EQZ:
instructions.add(new Branch.UnaryBranch(instLoc,((Instruction21t)inst).getTargetAddressOffset(),Branch.UnaryBranch.CompareOp.EQZ,((Instruction21t)inst).getRegisterA(),inst.opcode,this));
logger.debug("String_Node_Str" + ((Instruction21t)inst).getRegisterA() + "String_Node_Str"+ ((Instruction21t)inst).getTargetAddressOffset());
break;
case IF_NEZ:
instructions.add(new Branch.UnaryBranch(instLoc,((Instruction21t)inst).getTargetAddressOffset(),Branch.UnaryBranch.CompareOp.NEZ,((Instruction21t)inst).getRegisterA(),inst.opcode,this));
logger.debug("String_Node_Str" + ((Instruction21t)inst).getRegisterA() + "String_Node_Str"+ ((Instruction21t)inst).getTargetAddressOffset());
break;
case IF_LTZ:
instructions.add(new Branch.UnaryBranch(instLoc,((Instruction21t)inst).getTargetAddressOffset(),Branch.UnaryBranch.CompareOp.LTZ,((Instruction21t)inst).getRegisterA(),inst.opcode,this));
logger.debug("String_Node_Str" + ((Instruction21t)inst).getRegisterA() + "String_Node_Str"+ ((Instruction21t)inst).getTargetAddressOffset());
break;
case IF_GEZ:
instructions.add(new Branch.UnaryBranch(instLoc,((Instruction21t)inst).getTargetAddressOffset(),Branch.UnaryBranch.CompareOp.GEZ,((Instruction21t)inst).getRegisterA(),inst.opcode,this));
logger.debug("String_Node_Str" + ((Instruction21t)inst).getRegisterA() + "String_Node_Str"+ ((Instruction21t)inst).getTargetAddressOffset());
break;
case IF_GTZ:
instructions.add(new Branch.UnaryBranch(instLoc,((Instruction21t)inst).getTargetAddressOffset(),Branch.UnaryBranch.CompareOp.GTZ,((Instruction21t)inst).getRegisterA(),inst.opcode,this));
logger.debug("String_Node_Str" + ((Instruction21t)inst).getRegisterA() + "String_Node_Str"+ ((Instruction21t)inst).getTargetAddressOffset());
break;
case IF_LEZ:
instructions.add(new Branch.UnaryBranch(instLoc,((Instruction21t)inst).getTargetAddressOffset(),Branch.UnaryBranch.CompareOp.LEZ,((Instruction21t)inst).getRegisterA(),inst.opcode,this));
logger.debug("String_Node_Str" + ((Instruction21t)inst).getRegisterA() + "String_Node_Str"+ ((Instruction21t)inst).getTargetAddressOffset());
break;
case AGET:
instructions.add(new ArrayGet(instLoc,((Instruction23x)inst).getRegisterA(),((Instruction23x)inst).getRegisterB(),((Instruction23x)inst).getRegisterC(),Type.t_int,inst.opcode,this));
break;
case AGET_WIDE:
instructions.add(new ArrayGet(instLoc,((Instruction23x)inst).getRegisterA(),((Instruction23x)inst).getRegisterB(),((Instruction23x)inst).getRegisterC(),Type.t_wide,inst.opcode,this));
break;
case AGET_OBJECT:
instructions.add(new ArrayGet(instLoc,((Instruction23x)inst).getRegisterA(),((Instruction23x)inst).getRegisterB(),((Instruction23x)inst).getRegisterC(),Type.t_object,inst.opcode,this));
break;
case AGET_BOOLEAN:
instructions.add(new ArrayGet(instLoc,((Instruction23x)inst).getRegisterA(),((Instruction23x)inst).getRegisterB(),((Instruction23x)inst).getRegisterC(),Type.t_boolean,inst.opcode,this));
break;
case AGET_BYTE:
instructions.add(new ArrayGet(instLoc,((Instruction23x)inst).getRegisterA(),((Instruction23x)inst).getRegisterB(),((Instruction23x)inst).getRegisterC(),Type.t_byte,inst.opcode,this));
break;
case AGET_CHAR:
instructions.add(new ArrayGet(instLoc,((Instruction23x)inst).getRegisterA(),((Instruction23x)inst).getRegisterB(),((Instruction23x)inst).getRegisterC(),Type.t_char,inst.opcode,this));
break;
case AGET_SHORT:
instructions.add(new ArrayGet(instLoc,((Instruction23x)inst).getRegisterA(),((Instruction23x)inst).getRegisterB(),((Instruction23x)inst).getRegisterC(),Type.t_short,inst.opcode,this));
break;
case APUT:
instructions.add(new ArrayPut(instLoc,((Instruction23x)inst).getRegisterA(),((Instruction23x)inst).getRegisterB(),((Instruction23x)inst).getRegisterC(),Type.t_int,inst.opcode,this));
break;
case APUT_WIDE:
instructions.add(new ArrayPut(instLoc,((Instruction23x)inst).getRegisterA(),((Instruction23x)inst).getRegisterB(),((Instruction23x)inst).getRegisterC(),Type.t_wide,inst.opcode,this));
break;
case APUT_OBJECT:
instructions.add(new ArrayPut(instLoc,((Instruction23x)inst).getRegisterA(),((Instruction23x)inst).getRegisterB(),((Instruction23x)inst).getRegisterC(),Type.t_object,inst.opcode,this));
break;
case APUT_BOOLEAN:
instructions.add(new ArrayPut(instLoc,((Instruction23x)inst).getRegisterA(),((Instruction23x)inst).getRegisterB(),((Instruction23x)inst).getRegisterC(),Type.t_boolean,inst.opcode,this));
break;
case APUT_BYTE:
instructions.add(new ArrayPut(instLoc,((Instruction23x)inst).getRegisterA(),((Instruction23x)inst).getRegisterB(),((Instruction23x)inst).getRegisterC(),Type.t_byte,inst.opcode,this));
break;
case APUT_CHAR:
instructions.add(new ArrayPut(instLoc,((Instruction23x)inst).getRegisterA(),((Instruction23x)inst).getRegisterB(),((Instruction23x)inst).getRegisterC(),Type.t_char,inst.opcode,this));
break;
case APUT_SHORT:
instructions.add(new ArrayPut(instLoc,((Instruction23x)inst).getRegisterA(),((Instruction23x)inst).getRegisterB(),((Instruction23x)inst).getRegisterC(),Type.t_short,inst.opcode,this));
break;
case IGET:
case IGET_WIDE:
case IGET_OBJECT:
case IGET_BOOLEAN:
case IGET_BYTE:
case IGET_CHAR:
case IGET_SHORT:
{
logger.debug(inst.opcode.toString() + "String_Node_Str" + ((FieldIdItem)((Instruction22c)inst).getReferencedItem()).getContainingClass().getTypeDescriptor()+ "String_Node_Str"+ ((FieldIdItem)((Instruction22c)inst).getReferencedItem()).getFieldName().getStringValue()+ "String_Node_Str"+ ((FieldIdItem)((Instruction22c)inst).getReferencedItem()).getFieldType().getTypeDescriptor());
String cname=((FieldIdItem)((Instruction22c)inst).getReferencedItem()).getContainingClass().getTypeDescriptor();
String fname=((FieldIdItem)((Instruction22c)inst).getReferencedItem()).getFieldName().getStringValue();
String ftname=((FieldIdItem)((Instruction22c)inst).getReferencedItem()).getFieldType().getTypeDescriptor();
if (cname.endsWith("String_Node_Str")) cname=cname.substring(0,cname.length() - 1);
if (fname.endsWith("String_Node_Str")) fname=fname.substring(0,fname.length() - 1);
if (ftname.endsWith("String_Node_Str")) ftname=ftname.substring(0,ftname.length() - 1);
instructions.add(new GetField.GetInstanceField(instLoc,((Instruction22c)inst).getRegisterA(),((Instruction22c)inst).getRegisterB(),cname,fname,ftname,inst.opcode,this));
break;
}
case IPUT:
case IPUT_WIDE:
case IPUT_OBJECT:
case IPUT_BOOLEAN:
case IPUT_BYTE:
case IPUT_CHAR:
case IPUT_SHORT:
{
logger.debug(inst.opcode.toString() + "String_Node_Str" + ((FieldIdItem)((Instruction22c)inst).getReferencedItem()).getContainingClass().getTypeDescriptor()+ "String_Node_Str"+ ((FieldIdItem)((Instruction22c)inst).getReferencedItem()).getFieldName().getStringValue()+ "String_Node_Str"+ ((FieldIdItem)((Instruction22c)inst).getReferencedItem()).getFieldType().getTypeDescriptor());
String cname=((FieldIdItem)((Instruction22c)inst).getReferencedItem()).getContainingClass().getTypeDescriptor();
String fname=((FieldIdItem)((Instruction22c)inst).getReferencedItem()).getFieldName().getStringValue();
String ftname=((FieldIdItem)((Instruction22c)inst).getReferencedItem()).getFieldType().getTypeDescriptor();
if (cname.endsWith("String_Node_Str")) cname=cname.substring(0,cname.length() - 1);
if (fname.endsWith("String_Node_Str")) fname=fname.substring(0,fname.length() - 1);
if (ftname.endsWith("String_Node_Str")) ftname=ftname.substring(0,ftname.length() - 1);
instructions.add(new PutField.PutInstanceField(instLoc,((Instruction22c)inst).getRegisterA(),((Instruction22c)inst).getRegisterB(),cname,fname,ftname,inst.opcode,this));
break;
}
case SGET:
case SGET_WIDE:
case SGET_OBJECT:
case SGET_BOOLEAN:
case SGET_BYTE:
case SGET_CHAR:
case SGET_SHORT:
{
logger.debug(inst.opcode.toString() + "String_Node_Str" + ((FieldIdItem)((Instruction21c)inst).getReferencedItem()).getContainingClass().getTypeDescriptor()+ "String_Node_Str"+ ((FieldIdItem)((Instruction21c)inst).getReferencedItem()).getFieldName().getStringValue()+ "String_Node_Str"+ ((FieldIdItem)((Instruction21c)inst).getReferencedItem()).getFieldType().getTypeDescriptor());
String cname=((FieldIdItem)((Instruction21c)inst).getReferencedItem()).getContainingClass().getTypeDescriptor();
String fname=((FieldIdItem)((Instruction21c)inst).getReferencedItem()).getFieldName().getStringValue();
String ftname=((FieldIdItem)((Instruction21c)inst).getReferencedItem()).getFieldType().getTypeDescriptor();
if (cname.endsWith("String_Node_Str")) cname=cname.substring(0,cname.length() - 1);
if (fname.endsWith("String_Node_Str")) fname=fname.substring(0,fname.length() - 1);
if (ftname.endsWith("String_Node_Str")) ftname=ftname.substring(0,ftname.length() - 1);
instructions.add(new GetField.GetStaticField(instLoc,((Instruction21c)inst).getRegisterA(),cname,fname,ftname,inst.opcode,this));
break;
}
case SPUT:
case SPUT_WIDE:
case SPUT_OBJECT:
case SPUT_BOOLEAN:
case SPUT_BYTE:
case SPUT_CHAR:
case SPUT_SHORT:
{
logger.debug(inst.opcode.toString() + "String_Node_Str" + ((FieldIdItem)((Instruction21c)inst).getReferencedItem()).getContainingClass().getTypeDescriptor()+ "String_Node_Str"+ ((FieldIdItem)((Instruction21c)inst).getReferencedItem()).getFieldName().getStringValue()+ "String_Node_Str"+ ((FieldIdItem)((Instruction21c)inst).getReferencedItem()).getFieldType().getTypeDescriptor());
String cname=((FieldIdItem)((Instruction21c)inst).getReferencedItem()).getContainingClass().getTypeDescriptor();
String fname=((FieldIdItem)((Instruction21c)inst).getReferencedItem()).getFieldName().getStringValue();
String ftname=((FieldIdItem)((Instruction21c)inst).getReferencedItem()).getFieldType().getTypeDescriptor();
if (cname.endsWith("String_Node_Str")) cname=cname.substring(0,cname.length() - 1);
if (fname.endsWith("String_Node_Str")) fname=fname.substring(0,fname.length() - 1);
if (ftname.endsWith("String_Node_Str")) ftname=ftname.substring(0,ftname.length() - 1);
instructions.add(new PutField.PutStaticField(instLoc,((Instruction21c)inst).getRegisterA(),cname,fname,ftname,inst.opcode,this));
break;
}
case INVOKE_VIRTUAL:
{
int registerCount=((Instruction35c)inst).getRegCount();
int[] args=new int[registerCount];
for (int i=0; i < registerCount; i++) {
switch (i) {
case 0:
args[0]=((Instruction35c)inst).getRegisterD();
break;
case 1:
args[1]=((Instruction35c)inst).getRegisterE();
break;
case 2:
args[2]=((Instruction35c)inst).getRegisterF();
break;
case 3:
args[3]=((Instruction35c)inst).getRegisterG();
break;
case 4:
args[4]=((Instruction35c)inst).getRegisterA();
break;
default :
throw new RuntimeException("String_Node_Str" + instLoc + "String_Node_Str");
}
}
String cname=((MethodIdItem)((Instruction35c)inst).getReferencedItem()).getContainingClass().getTypeDescriptor();
String mname=((MethodIdItem)((Instruction35c)inst).getReferencedItem()).getMethodName().getStringValue();
String pname=((MethodIdItem)((Instruction35c)inst).getReferencedItem()).getPrototype().getPrototypeString();
if (cname.endsWith("String_Node_Str")) cname=cname.substring(0,cname.length() - 1);
handleINVOKE_VIRTUAL(instLoc,cname,mname,pname,args,inst.opcode);
break;
}
case INVOKE_SUPER:
{
int registerCount=((Instruction35c)inst).getRegCount();
int[] args=new int[registerCount];
for (int i=0; i < registerCount; i++) {
switch (i) {
case 0:
args[0]=((Instruction35c)inst).getRegisterD();
break;
case 1:
args[1]=((Instruction35c)inst).getRegisterE();
break;
case 2:
args[2]=((Instruction35c)inst).getRegisterF();
break;
case 3:
args[3]=((Instruction35c)inst).getRegisterG();
break;
case 4:
args[4]=((Instruction35c)inst).getRegisterA();
break;
default :
throw new RuntimeException("String_Node_Str" + instLoc + "String_Node_Str");
}
}
logger.debug(inst.opcode.toString() + "String_Node_Str" + ((MethodIdItem)((Instruction35c)inst).getReferencedItem()).getContainingClass().getTypeDescriptor()+ "String_Node_Str"+ ((MethodIdItem)((Instruction35c)inst).getReferencedItem()).getMethodName().getStringValue()+ "String_Node_Str"+ ((MethodIdItem)((Instruction35c)inst).getReferencedItem()).getPrototype().getPrototypeString());
String cname=((MethodIdItem)((Instruction35c)inst).getReferencedItem()).getContainingClass().getTypeDescriptor();
String mname=((MethodIdItem)((Instruction35c)inst).getReferencedItem()).getMethodName().getStringValue();
String pname=((MethodIdItem)((Instruction35c)inst).getReferencedItem()).getPrototype().getPrototypeString();
if (cname.endsWith("String_Node_Str")) cname=cname.substring(0,cname.length() - 1);
instructions.add(new Invoke.InvokeSuper(instLoc,cname,mname,pname,args,inst.opcode,this));
logger.debug("String_Node_Str" + cname + "String_Node_Str"+ mname+ "String_Node_Str"+ pname);
break;
}
case INVOKE_DIRECT:
{
int registerCount=((Instruction35c)inst).getRegCount();
int[] args=new int[registerCount];
for (int i=0; i < registerCount; i++) {
switch (i) {
case 0:
args[0]=((Instruction35c)inst).getRegisterD();
break;
case 1:
args[1]=((Instruction35c)inst).getRegisterE();
break;
case 2:
args[2]=((Instruction35c)inst).getRegisterF();
break;
case 3:
args[3]=((Instruction35c)inst).getRegisterG();
break;
case 4:
args[4]=((Instruction35c)inst).getRegisterA();
break;
default :
throw new RuntimeException("String_Node_Str" + instLoc + "String_Node_Str");
}
}
String cname=((MethodIdItem)((Instruction35c)inst).getReferencedItem()).getContainingClass().getTypeDescriptor();
String mname=((MethodIdItem)((Instruction35c)inst).getReferencedItem()).getMethodName().getStringValue();
String pname=((MethodIdItem)((Instruction35c)inst).getReferencedItem()).getPrototype().getPrototypeString();
if (cname.endsWith("String_Node_Str")) cname=cname.substring(0,cname.length() - 1);
instructions.add(new Invoke.InvokeDirect(instLoc,cname,mname,pname,args,inst.opcode,this));
logger.debug("String_Node_Str" + ((MethodIdItem)((Instruction35c)inst).getReferencedItem()).getContainingClass().getTypeDescriptor() + "String_Node_Str"+ ((MethodIdItem)((Instruction35c)inst).getReferencedItem()).getMethodName().getStringValue()+ "String_Node_Str"+ ((MethodIdItem)((Instruction35c)inst).getReferencedItem()).getPrototype().getPrototypeString()+ "String_Node_Str"+ ((Instruction35c)inst).getRegCount());
break;
}
case INVOKE_STATIC:
{
int registerCount=((Instruction35c)inst).getRegCount();
int[] args=new int[registerCount];
for (int i=0; i < registerCount; i++) {
switch (i) {
case 0:
args[0]=((Instruction35c)inst).getRegisterD();
break;
case 1:
args[1]=((Instruction35c)inst).getRegisterE();
break;
case 2:
args[2]=((Instruction35c)inst).getRegisterF();
break;
case 3:
args[3]=((Instruction35c)inst).getRegisterG();
break;
case 4:
args[4]=((Instruction35c)inst).getRegisterA();
break;
default :
throw new RuntimeException("String_Node_Str" + instLoc + "String_Node_Str");
}
}
String cname=((MethodIdItem)((Instruction35c)inst).getReferencedItem()).getContainingClass().getTypeDescriptor();
String mname=((MethodIdItem)((Instruction35c)inst).getReferencedItem()).getMethodName().getStringValue();
String pname=((MethodIdItem)((Instruction35c)inst).getReferencedItem()).getPrototype().getPrototypeString();
if (cname.endsWith("String_Node_Str")) cname=cname.substring(0,cname.length() - 1);
instructions.add(new Invoke.InvokeStatic(instLoc,cname,mname,pname,args,inst.opcode,this));
logger.debug("String_Node_Str" + ((MethodIdItem)((Instruction35c)inst).getReferencedItem()).getContainingClass().getTypeDescriptor() + "String_Node_Str"+ ((MethodIdItem)((Instruction35c)inst).getReferencedItem()).getMethodName().getStringValue()+ "String_Node_Str"+ ((MethodIdItem)((Instruction35c)inst).getReferencedItem()).getPrototype().getPrototypeString()+ "String_Node_Str"+ ((Instruction35c)inst).getRegCount());
break;
}
case INVOKE_INTERFACE:
{
int registerCount=((Instruction35c)inst).getRegCount();
int[] args=new int[registerCount];
for (int i=0; i < registerCount; i++) {
switch (i) {
case 0:
args[0]=((Instruction35c)inst).getRegisterD();
break;
case 1:
args[1]=((Instruction35c)inst).getRegisterE();
break;
case 2:
args[2]=((Instruction35c)inst).getRegisterF();
break;
case 3:
args[3]=((Instruction35c)inst).getRegisterG();
break;
case 4:
args[4]=((Instruction35c)inst).getRegisterA();
break;
default :
throw new RuntimeException("String_Node_Str" + instLoc + "String_Node_Str");
}
}
logger.debug(inst.opcode.toString() + "String_Node_Str" + ((MethodIdItem)((Instruction35c)inst).getReferencedItem()).getContainingClass().getTypeDescriptor()+ "String_Node_Str"+ ((MethodIdItem)((Instruction35c)inst).getReferencedItem()).getMethodName().getStringValue()+ "String_Node_Str"+ ((MethodIdItem)((Instruction35c)inst).getReferencedItem()).getPrototype().getPrototypeString());
String cname=((MethodIdItem)((Instruction35c)inst).getReferencedItem()).getContainingClass().getTypeDescriptor();
String mname=((MethodIdItem)((Instruction35c)inst).getReferencedItem()).getMethodName().getStringValue();
String pname=((MethodIdItem)((Instruction35c)inst).getReferencedItem()).getPrototype().getPrototypeString();
if (cname.endsWith("String_Node_Str")) cname=cname.substring(0,cname.length() - 1);
instructions.add(new Invoke.InvokeInterface(instLoc,cname,mname,pname,args,inst.opcode,this));
break;
}
case INVOKE_VIRTUAL_RANGE:
{
int registerCount=((Instruction3rc)inst).getRegCount();
int[] args=new int[registerCount];
for (int i=0; i < registerCount; i++) args[i]=((Instruction3rc)inst).getStartRegister() + i;
logger.debug(inst.opcode.toString() + "String_Node_Str" + ((MethodIdItem)((Instruction3rc)inst).getReferencedItem()).getContainingClass().getTypeDescriptor()+ "String_Node_Str"+ ((MethodIdItem)((Instruction3rc)inst).getReferencedItem()).getMethodName().getStringValue()+ "String_Node_Str"+ ((MethodIdItem)((Instruction3rc)inst).getReferencedItem()).getPrototype().getPrototypeString());
String cname=((MethodIdItem)((Instruction3rc)inst).getReferencedItem()).getContainingClass().getTypeDescriptor();
String mname=((MethodIdItem)((Instruction3rc)inst).getReferencedItem()).getMethodName().getStringValue();
String pname=((MethodIdItem)((Instruction3rc)inst).getReferencedItem()).getPrototype().getPrototypeString();
if (cname.endsWith("String_Node_Str")) cname=cname.substring(0,cname.length() - 1);
instructions.add(new Invoke.InvokeVirtual(instLoc,cname,mname,pname,args,inst.opcode,this));
break;
}
case INVOKE_SUPER_RANGE:
{
int registerCount=((Instruction3rc)inst).getRegCount();
int[] args=new int[registerCount];
for (int i=0; i < registerCount; i++) args[i]=((Instruction3rc)inst).getStartRegister() + i;
logger.debug(inst.opcode.toString() + "String_Node_Str" + ((MethodIdItem)((Instruction3rc)inst).getReferencedItem()).getContainingClass().getTypeDescriptor()+ "String_Node_Str"+ ((MethodIdItem)((Instruction3rc)inst).getReferencedItem()).getMethodName().getStringValue()+ "String_Node_Str"+ ((MethodIdItem)((Instruction3rc)inst).getReferencedItem()).getPrototype().getPrototypeString());
String cname=((MethodIdItem)((Instruction3rc)inst).getReferencedItem()).getContainingClass().getTypeDescriptor();
String mname=((MethodIdItem)((Instruction3rc)inst).getReferencedItem()).getMethodName().getStringValue();
String pname=((MethodIdItem)((Instruction3rc)inst).getReferencedItem()).getPrototype().getPrototypeString();
if (cname.endsWith("String_Node_Str")) cname=cname.substring(0,cname.length() - 1);
instructions.add(new Invoke.InvokeSuper(instLoc,cname,mname,pname,args,inst.opcode,this));
break;
}
case INVOKE_DIRECT_RANGE:
{
int registerCount=((Instruction3rc)inst).getRegCount();
int[] args=new int[registerCount];
for (int i=0; i < registerCount; i++) args[i]=((Instruction3rc)inst).getStartRegister() + i;
logger.debug(inst.opcode.toString() + "String_Node_Str" + ((MethodIdItem)((Instruction3rc)inst).getReferencedItem()).getContainingClass().getTypeDescriptor()+ "String_Node_Str"+ ((MethodIdItem)((Instruction3rc)inst).getReferencedItem()).getMethodName().getStringValue()+ "String_Node_Str"+ ((MethodIdItem)((Instruction3rc)inst).getReferencedItem()).getPrototype().getPrototypeString());
String cname=((MethodIdItem)((Instruction3rc)inst).getReferencedItem()).getContainingClass().getTypeDescriptor();
String mname=((MethodIdItem)((Instruction3rc)inst).getReferencedItem()).getMethodName().getStringValue();
String pname=((MethodIdItem)((Instruction3rc)inst).getReferencedItem()).getPrototype().getPrototypeString();
if (cname.endsWith("String_Node_Str")) cname=cname.substring(0,cname.length() - 1);
instructions.add(new Invoke.InvokeDirect(instLoc,cname,mname,pname,args,inst.opcode,this));
break;
}
case INVOKE_STATIC_RANGE:
{
int registerCount=((Instruction3rc)inst).getRegCount();
int[] args=new int[registerCount];
for (int i=0; i < registerCount; i++) args[i]=((Instruction3rc)inst).getStartRegister() + i;
logger.debug(inst.opcode.toString() + "String_Node_Str" + ((MethodIdItem)((Instruction3rc)inst).getReferencedItem()).getContainingClass().getTypeDescriptor()+ "String_Node_Str"+ ((MethodIdItem)((Instruction3rc)inst).getReferencedItem()).getMethodName().getStringValue()+ "String_Node_Str"+ ((MethodIdItem)((Instruction3rc)inst).getReferencedItem()).getPrototype().getPrototypeString());
String cname=((MethodIdItem)((Instruction3rc)inst).getReferencedItem()).getContainingClass().getTypeDescriptor();
String mname=((MethodIdItem)((Instruction3rc)inst).getReferencedItem()).getMethodName().getStringValue();
String pname=((MethodIdItem)((Instruction3rc)inst).getReferencedItem()).getPrototype().getPrototypeString();
if (cname.endsWith("String_Node_Str")) cname=cname.substring(0,cname.length() - 1);
instructions.add(new Invoke.InvokeStatic(instLoc,cname,mname,pname,args,inst.opcode,this));
break;
}
case INVOKE_INTERFACE_RANGE:
{
int registerCount=((Instruction3rc)inst).getRegCount();
int[] args=new int[registerCount];
for (int i=0; i < registerCount; i++) args[i]=((Instruction3rc)inst).getStartRegister() + i;
logger.debug(inst.opcode.toString() + "String_Node_Str" + ((MethodIdItem)((Instruction3rc)inst).getReferencedItem()).getContainingClass().getTypeDescriptor()+ "String_Node_Str"+ ((MethodIdItem)((Instruction3rc)inst).getReferencedItem()).getMethodName().getStringValue()+ "String_Node_Str"+ ((MethodIdItem)((Instruction3rc)inst).getReferencedItem()).getPrototype().getPrototypeString());
String cname=((MethodIdItem)((Instruction3rc)inst).getReferencedItem()).getContainingClass().getTypeDescriptor();
String mname=((MethodIdItem)((Instruction3rc)inst).getReferencedItem()).getMethodName().getStringValue();
String pname=((MethodIdItem)((Instruction3rc)inst).getReferencedItem()).getPrototype().getPrototypeString();
if (cname.endsWith("String_Node_Str")) cname=cname.substring(0,cname.length() - 1);
instructions.add(new Invoke.InvokeInterface(instLoc,cname,mname,pname,args,inst.opcode,this));
break;
}
case NEG_INT:
instructions.add(new UnaryOperation(instLoc,OpID.NEGINT,((Instruction12x)inst).getRegisterA(),((Instruction12x)inst).getRegisterB(),inst.opcode,this));
break;
case NOT_INT:
instructions.add(new UnaryOperation(instLoc,OpID.NOTINT,((Instruction12x)inst).getRegisterA(),((Instruction12x)inst).getRegisterB(),inst.opcode,this));
break;
case NEG_LONG:
instructions.add(new UnaryOperation(instLoc,OpID.NEGLONG,((Instruction12x)inst).getRegisterA(),((Instruction12x)inst).getRegisterB(),inst.opcode,this));
break;
case NOT_LONG:
instructions.add(new UnaryOperation(instLoc,OpID.NOTLONG,((Instruction12x)inst).getRegisterA(),((Instruction12x)inst).getRegisterB(),inst.opcode,this));
break;
case NEG_FLOAT:
instructions.add(new UnaryOperation(instLoc,OpID.NEGFLOAT,((Instruction12x)inst).getRegisterA(),((Instruction12x)inst).getRegisterB(),inst.opcode,this));
break;
case NEG_DOUBLE:
instructions.add(new UnaryOperation(instLoc,OpID.NEGDOUBLE,((Instruction12x)inst).getRegisterA(),((Instruction12x)inst).getRegisterB(),inst.opcode,this));
break;
case INT_TO_LONG:
instructions.add(new UnaryOperation(instLoc,OpID.INTTOLONG,((Instruction12x)inst).getRegisterA(),((Instruction12x)inst).getRegisterB(),inst.opcode,this));
break;
case INT_TO_FLOAT:
instructions.add(new UnaryOperation(instLoc,OpID.INTTOFLOAT,((Instruction12x)inst).getRegisterA(),((Instruction12x)inst).getRegisterB(),inst.opcode,this));
break;
case INT_TO_DOUBLE:
instructions.add(new UnaryOperation(instLoc,OpID.INTTODOUBLE,((Instruction12x)inst).getRegisterA(),((Instruction12x)inst).getRegisterB(),inst.opcode,this));
break;
case LONG_TO_INT:
instructions.add(new UnaryOperation(instLoc,OpID.LONGTOINT,((Instruction12x)inst).getRegisterA(),((Instruction12x)inst).getRegisterB(),inst.opcode,this));
break;
case LONG_TO_FLOAT:
instructions.add(new UnaryOperation(instLoc,OpID.LONGTOFLOAT,((Instruction12x)inst).getRegisterA(),((Instruction12x)inst).getRegisterB(),inst.opcode,this));
break;
case LONG_TO_DOUBLE:
instructions.add(new UnaryOperation(instLoc,OpID.LONGTODOUBLE,((Instruction12x)inst).getRegisterA(),((Instruction12x)inst).getRegisterB(),inst.opcode,this));
break;
case FLOAT_TO_INT:
instructions.add(new UnaryOperation(instLoc,OpID.FLOATTOINT,((Instruction12x)inst).getRegisterA(),((Instruction12x)inst).getRegisterB(),inst.opcode,this));
break;
case FLOAT_TO_LONG:
instructions.add(new UnaryOperation(instLoc,OpID.FLOATTOLONG,((Instruction12x)inst).getRegisterA(),((Instruction12x)inst).getRegisterB(),inst.opcode,this));
break;
case FLOAT_TO_DOUBLE:
instructions.add(new UnaryOperation(instLoc,OpID.FLOATTODOUBLE,((Instruction12x)inst).getRegisterA(),((Instruction12x)inst).getRegisterB(),inst.opcode,this));
break;
case DOUBLE_TO_INT:
instructions.add(new UnaryOperation(instLoc,OpID.DOUBLETOINT,((Instruction12x)inst).getRegisterA(),((Instruction12x)inst).getRegisterB(),inst.opcode,this));
break;
case DOUBLE_TO_LONG:
instructions.add(new UnaryOperation(instLoc,OpID.DOUBLETOLONG,((Instruction12x)inst).getRegisterA(),((Instruction12x)inst).getRegisterB(),inst.opcode,this));
break;
case DOUBLE_TO_FLOAT:
instructions.add(new UnaryOperation(instLoc,OpID.DOUBLETOFLOAT,((Instruction12x)inst).getRegisterA(),((Instruction12x)inst).getRegisterB(),inst.opcode,this));
break;
case INT_TO_BYTE:
instructions.add(new UnaryOperation(instLoc,OpID.INTTOBYTE,((Instruction12x)inst).getRegisterA(),((Instruction12x)inst).getRegisterB(),inst.opcode,this));
break;
case INT_TO_CHAR:
instructions.add(new UnaryOperation(instLoc,OpID.INTTOCHAR,((Instruction12x)inst).getRegisterA(),((Instruction12x)inst).getRegisterB(),inst.opcode,this));
break;
case INT_TO_SHORT:
instructions.add(new UnaryOperation(instLoc,OpID.INTTOSHORT,((Instruction12x)inst).getRegisterA(),((Instruction12x)inst).getRegisterB(),inst.opcode,this));
break;
case ADD_INT:
instructions.add(new BinaryOperation(instLoc,BinaryOperation.OpID.ADD_INT,((Instruction23x)inst).getRegisterA(),((Instruction23x)inst).getRegisterB(),((Instruction23x)inst).getRegisterC(),inst.opcode,this));
break;
case SUB_INT:
instructions.add(new BinaryOperation(instLoc,BinaryOperation.OpID.SUB_INT,((Instruction23x)inst).getRegisterA(),((Instruction23x)inst).getRegisterB(),((Instruction23x)inst).getRegisterC(),inst.opcode,this));
break;
case MUL_INT:
instructions.add(new BinaryOperation(instLoc,BinaryOperation.OpID.MUL_INT,((Instruction23x)inst).getRegisterA(),((Instruction23x)inst).getRegisterB(),((Instruction23x)inst).getRegisterC(),inst.opcode,this));
break;
case DIV_INT:
instructions.add(new BinaryOperation(instLoc,BinaryOperation.OpID.DIV_INT,((Instruction23x)inst).getRegisterA(),((Instruction23x)inst).getRegisterB(),((Instruction23x)inst).getRegisterC(),inst.opcode,this));
break;
case REM_INT:
instructions.add(new BinaryOperation(instLoc,BinaryOperation.OpID.REM_INT,((Instruction23x)inst).getRegisterA(),((Instruction23x)inst).getRegisterB(),((Instruction23x)inst).getRegisterC(),inst.opcode,this));
break;
case AND_INT:
instructions.add(new BinaryOperation(instLoc,BinaryOperation.OpID.AND_INT,((Instruction23x)inst).getRegisterA(),((Instruction23x)inst).getRegisterB(),((Instruction23x)inst).getRegisterC(),inst.opcode,this));
break;
case OR_INT:
instructions.add(new BinaryOperation(instLoc,BinaryOperation.OpID.OR_INT,((Instruction23x)inst).getRegisterA(),((Instruction23x)inst).getRegisterB(),((Instruction23x)inst).getRegisterC(),inst.opcode,this));
break;
case XOR_INT:
instructions.add(new BinaryOperation(instLoc,BinaryOperation.OpID.XOR_INT,((Instruction23x)inst).getRegisterA(),((Instruction23x)inst).getRegisterB(),((Instruction23x)inst).getRegisterC(),inst.opcode,this));
break;
case SHL_INT:
instructions.add(new BinaryOperation(instLoc,BinaryOperation.OpID.SHL_INT,((Instruction23x)inst).getRegisterA(),((Instruction23x)inst).getRegisterB(),((Instruction23x)inst).getRegisterC(),inst.opcode,this));
break;
case SHR_INT:
instructions.add(new BinaryOperation(instLoc,BinaryOperation.OpID.SHR_INT,((Instruction23x)inst).getRegisterA(),((Instruction23x)inst).getRegisterB(),((Instruction23x)inst).getRegisterC(),inst.opcode,this));
break;
case USHR_INT:
instructions.add(new BinaryOperation(instLoc,BinaryOperation.OpID.USHR_INT,((Instruction23x)inst).getRegisterA(),((Instruction23x)inst).getRegisterB(),((Instruction23x)inst).getRegisterC(),inst.opcode,this));
break;
case ADD_LONG:
instructions.add(new BinaryOperation(instLoc,BinaryOperation.OpID.ADD_LONG,((Instruction23x)inst).getRegisterA(),((Instruction23x)inst).getRegisterB(),((Instruction23x)inst).getRegisterC(),inst.opcode,this));
break;
case SUB_LONG:
instructions.add(new BinaryOperation(instLoc,BinaryOperation.OpID.SUB_LONG,((Instruction23x)inst).getRegisterA(),((Instruction23x)inst).getRegisterB(),((Instruction23x)inst).getRegisterC(),inst.opcode,this));
break;
case MUL_LONG:
instructions.add(new BinaryOperation(instLoc,BinaryOperation.OpID.MUL_LONG,((Instruction23x)inst).getRegisterA(),((Instruction23x)inst).getRegisterB(),((Instruction23x)inst).getRegisterC(),inst.opcode,this));
break;
case DIV_LONG:
instructions.add(new BinaryOperation(instLoc,BinaryOperation.OpID.DIV_LONG,((Instruction23x)inst).getRegisterA(),((Instruction23x)inst).getRegisterB(),((Instruction23x)inst).getRegisterC(),inst.opcode,this));
break;
case REM_LONG:
instructions.add(new BinaryOperation(instLoc,BinaryOperation.OpID.REM_LONG,((Instruction23x)inst).getRegisterA(),((Instruction23x)inst).getRegisterB(),((Instruction23x)inst).getRegisterC(),inst.opcode,this));
break;
case AND_LONG:
instructions.add(new BinaryOperation(instLoc,BinaryOperation.OpID.AND_LONG,((Instruction23x)inst).getRegisterA(),((Instruction23x)inst).getRegisterB(),((Instruction23x)inst).getRegisterC(),inst.opcode,this));
break;
case OR_LONG:
instructions.add(new BinaryOperation(instLoc,BinaryOperation.OpID.OR_LONG,((Instruction23x)inst).getRegisterA(),((Instruction23x)inst).getRegisterB(),((Instruction23x)inst).getRegisterC(),inst.opcode,this));
break;
case XOR_LONG:
instructions.add(new BinaryOperation(instLoc,BinaryOperation.OpID.XOR_LONG,((Instruction23x)inst).getRegisterA(),((Instruction23x)inst).getRegisterB(),((Instruction23x)inst).getRegisterC(),inst.opcode,this));
break;
case SHL_LONG:
instructions.add(new BinaryOperation(instLoc,BinaryOperation.OpID.SHL_LONG,((Instruction23x)inst).getRegisterA(),((Instruction23x)inst).getRegisterB(),((Instruction23x)inst).getRegisterC(),inst.opcode,this));
break;
case SHR_LONG:
instructions.add(new BinaryOperation(instLoc,BinaryOperation.OpID.SHR_LONG,((Instruction23x)inst).getRegisterA(),((Instruction23x)inst).getRegisterB(),((Instruction23x)inst).getRegisterC(),inst.opcode,this));
break;
case USHR_LONG:
instructions.add(new BinaryOperation(instLoc,BinaryOperation.OpID.USHR_LONG,((Instruction23x)inst).getRegisterA(),((Instruction23x)inst).getRegisterB(),((Instruction23x)inst).getRegisterC(),inst.opcode,this));
break;
case ADD_FLOAT:
instructions.add(new BinaryOperation(instLoc,BinaryOperation.OpID.ADD_FLOAT,((Instruction23x)inst).getRegisterA(),((Instruction23x)inst).getRegisterB(),((Instruction23x)inst).getRegisterC(),inst.opcode,this));
break;
case SUB_FLOAT:
instructions.add(new BinaryOperation(instLoc,BinaryOperation.OpID.SUB_FLOAT,((Instruction23x)inst).getRegisterA(),((Instruction23x)inst).getRegisterB(),((Instruction23x)inst).getRegisterC(),inst.opcode,this));
break;
case MUL_FLOAT:
instructions.add(new BinaryOperation(instLoc,BinaryOperation.OpID.MUL_FLOAT,((Instruction23x)inst).getRegisterA(),((Instruction23x)inst).getRegisterB(),((Instruction23x)inst).getRegisterC(),inst.opcode,this));
break;
case DIV_FLOAT:
instructions.add(new BinaryOperation(instLoc,BinaryOperation.OpID.DIV_FLOAT,((Instruction23x)inst).getRegisterA(),((Instruction23x)inst).getRegisterB(),((Instruction23x)inst).getRegisterC(),inst.opcode,this));
break;
case REM_FLOAT:
instructions.add(new BinaryOperation(instLoc,BinaryOperation.OpID.REM_FLOAT,((Instruction23x)inst).getRegisterA(),((Instruction23x)inst).getRegisterB(),((Instruction23x)inst).getRegisterC(),inst.opcode,this));
break;
case ADD_DOUBLE:
instructions.add(new BinaryOperation(instLoc,BinaryOperation.OpID.ADD_DOUBLE,((Instruction23x)inst).getRegisterA(),((Instruction23x)inst).getRegisterB(),((Instruction23x)inst).getRegisterC(),inst.opcode,this));
break;
case SUB_DOUBLE:
instructions.add(new BinaryOperation(instLoc,BinaryOperation.OpID.SUB_DOUBLE,((Instruction23x)inst).getRegisterA(),((Instruction23x)inst).getRegisterB(),((Instruction23x)inst).getRegisterC(),inst.opcode,this));
break;
case MUL_DOUBLE:
instructions.add(new BinaryOperation(instLoc,BinaryOperation.OpID.MUL_DOUBLE,((Instruction23x)inst).getRegisterA(),((Instruction23x)inst).getRegisterB(),((Instruction23x)inst).getRegisterC(),inst.opcode,this));
break;
case DIV_DOUBLE:
instructions.add(new BinaryOperation(instLoc,BinaryOperation.OpID.DIV_DOUBLE,((Instruction23x)inst).getRegisterA(),((Instruction23x)inst).getRegisterB(),((Instruction23x)inst).getRegisterC(),inst.opcode,this));
break;
case REM_DOUBLE:
instructions.add(new BinaryOperation(instLoc,BinaryOperation.OpID.REM_DOUBLE,((Instruction23x)inst).getRegisterA(),((Instruction23x)inst).getRegisterB(),((Instruction23x)inst).getRegisterC(),inst.opcode,this));
break;
case ADD_INT_2ADDR:
instructions.add(new BinaryOperation(instLoc,BinaryOperation.OpID.ADD_INT,((Instruction12x)inst).getRegisterA(),((Instruction12x)inst).getRegisterA(),((Instruction12x)inst).getRegisterB(),inst.opcode,this));
break;
case SUB_INT_2ADDR:
instructions.add(new BinaryOperation(instLoc,BinaryOperation.OpID.SUB_INT,((Instruction12x)inst).getRegisterA(),((Instruction12x)inst).getRegisterA(),((Instruction12x)inst).getRegisterB(),inst.opcode,this));
break;
case MUL_INT_2ADDR:
instructions.add(new BinaryOperation(instLoc,BinaryOperation.OpID.MUL_INT,((Instruction12x)inst).getRegisterA(),((Instruction12x)inst).getRegisterA(),((Instruction12x)inst).getRegisterB(),inst.opcode,this));
break;
case DIV_INT_2ADDR:
instructions.add(new BinaryOperation(instLoc,BinaryOperation.OpID.DIV_INT,((Instruction12x)inst).getRegisterA(),((Instruction12x)inst).getRegisterA(),((Instruction12x)inst).getRegisterB(),inst.opcode,this));
break;
case REM_INT_2ADDR:
instructions.add(new BinaryOperation(instLoc,BinaryOperation.OpID.REM_INT,((Instruction12x)inst).getRegisterA(),((Instruction12x)inst).getRegisterA(),((Instruction12x)inst).getRegisterB(),inst.opcode,this));
break;
case AND_INT_2ADDR:
instructions.add(new BinaryOperation(instLoc,BinaryOperation.OpID.AND_INT,((Instruction12x)inst).getRegisterA(),((Instruction12x)inst).getRegisterA(),((Instruction12x)inst).getRegisterB(),inst.opcode,this));
break;
case OR_INT_2ADDR:
instructions.add(new BinaryOperation(instLoc,BinaryOperation.OpID.OR_INT,((Instruction12x)inst).getRegisterA(),((Instruction12x)inst).getRegisterA(),((Instruction12x)inst).getRegisterB(),inst.opcode,this));
break;
case XOR_INT_2ADDR:
instructions.add(new BinaryOperation(instLoc,BinaryOperation.OpID.XOR_INT,((Instruction12x)inst).getRegisterA(),((Instruction12x)inst).getRegisterA(),((Instruction12x)inst).getRegisterB(),inst.opcode,this));
break;
case SHL_INT_2ADDR:
instructions.add(new BinaryOperation(instLoc,BinaryOperation.OpID.SHL_INT,((Instruction12x)inst).getRegisterA(),((Instruction12x)inst).getRegisterA(),((Instruction12x)inst).getRegisterB(),inst.opcode,this));
break;
case SHR_INT_2ADDR:
instructions.add(new BinaryOperation(instLoc,BinaryOperation.OpID.SHR_INT,((Instruction12x)inst).getRegisterA(),((Instruction12x)inst).getRegisterA(),((Instruction12x)inst).getRegisterB(),inst.opcode,this));
break;
case USHR_INT_2ADDR:
instructions.add(new BinaryOperation(instLoc,BinaryOperation.OpID.USHR_INT,((Instruction12x)inst).getRegisterA(),((Instruction12x)inst).getRegisterA(),((Instruction12x)inst).getRegisterB(),inst.opcode,this));
break;
case ADD_LONG_2ADDR:
instructions.add(new BinaryOperation(instLoc,BinaryOperation.OpID.ADD_LONG,((Instruction12x)inst).getRegisterA(),((Instruction12x)inst).getRegisterA(),((Instruction12x)inst).getRegisterB(),inst.opcode,this));
break;
case SUB_LONG_2ADDR:
instructions.add(new BinaryOperation(instLoc,BinaryOperation.OpID.SUB_LONG,((Instruction12x)inst).getRegisterA(),((Instruction12x)inst).getRegisterA(),((Instruction12x)inst).getRegisterB(),inst.opcode,this));
break;
case MUL_LONG_2ADDR:
instructions.add(new BinaryOperation(instLoc,BinaryOperation.OpID.MUL_LONG,((Instruction12x)inst).getRegisterA(),((Instruction12x)inst).getRegisterA(),((Instruction12x)inst).getRegisterB(),inst.opcode,this));
break;
case DIV_LONG_2ADDR:
instructions.add(new BinaryOperation(instLoc,BinaryOperation.OpID.DIV_LONG,((Instruction12x)inst).getRegisterA(),((Instruction12x)inst).getRegisterA(),((Instruction12x)inst).getRegisterB(),inst.opcode,this));
break;
case REM_LONG_2ADDR:
instructions.add(new BinaryOperation(instLoc,BinaryOperation.OpID.REM_LONG,((Instruction12x)inst).getRegisterA(),((Instruction12x)inst).getRegisterA(),((Instruction12x)inst).getRegisterB(),inst.opcode,this));
break;
case AND_LONG_2ADDR:
instructions.add(new BinaryOperation(instLoc,BinaryOperation.OpID.AND_LONG,((Instruction12x)inst).getRegisterA(),((Instruction12x)inst).getRegisterA(),((Instruction12x)inst).getRegisterB(),inst.opcode,this));
break;
case OR_LONG_2ADDR:
instructions.add(new BinaryOperation(instLoc,BinaryOperation.OpID.OR_LONG,((Instruction12x)inst).getRegisterA(),((Instruction12x)inst).getRegisterA(),((Instruction12x)inst).getRegisterB(),inst.opcode,this));
break;
case XOR_LONG_2ADDR:
instructions.add(new BinaryOperation(instLoc,BinaryOperation.OpID.XOR_LONG,((Instruction12x)inst).getRegisterA(),((Instruction12x)inst).getRegisterA(),((Instruction12x)inst).getRegisterB(),inst.opcode,this));
break;
case SHL_LONG_2ADDR:
instructions.add(new BinaryOperation(instLoc,BinaryOperation.OpID.SHL_LONG,((Instruction12x)inst).getRegisterA(),((Instruction12x)inst).getRegisterA(),((Instruction12x)inst).getRegisterB(),inst.opcode,this));
break;
case SHR_LONG_2ADDR:
instructions.add(new BinaryOperation(instLoc,BinaryOperation.OpID.SHR_LONG,((Instruction12x)inst).getRegisterA(),((Instruction12x)inst).getRegisterA(),((Instruction12x)inst).getRegisterB(),inst.opcode,this));
break;
case USHR_LONG_2ADDR:
instructions.add(new BinaryOperation(instLoc,BinaryOperation.OpID.USHR_LONG,((Instruction12x)inst).getRegisterA(),((Instruction12x)inst).getRegisterA(),((Instruction12x)inst).getRegisterB(),inst.opcode,this));
break;
case ADD_FLOAT_2ADDR:
instructions.add(new BinaryOperation(instLoc,BinaryOperation.OpID.ADD_FLOAT,((Instruction12x)inst).getRegisterA(),((Instruction12x)inst).getRegisterA(),((Instruction12x)inst).getRegisterB(),inst.opcode,this));
break;
case SUB_FLOAT_2ADDR:
instructions.add(new BinaryOperation(instLoc,BinaryOperation.OpID.SUB_FLOAT,((Instruction12x)inst).getRegisterA(),((Instruction12x)inst).getRegisterA(),((Instruction12x)inst).getRegisterB(),inst.opcode,this));
break;
case MUL_FLOAT_2ADDR:
instructions.add(new BinaryOperation(instLoc,BinaryOperation.OpID.MUL_FLOAT,((Instruction12x)inst).getRegisterA(),((Instruction12x)inst).getRegisterA(),((Instruction12x)inst).getRegisterB(),inst.opcode,this));
break;
case DIV_FLOAT_2ADDR:
instructions.add(new BinaryOperation(instLoc,BinaryOperation.OpID.DIV_FLOAT,((Instruction12x)inst).getRegisterA(),((Instruction12x)inst).getRegisterA(),((Instruction12x)inst).getRegisterB(),inst.opcode,this));
break;
case REM_FLOAT_2ADDR:
instructions.add(new BinaryOperation(instLoc,BinaryOperation.OpID.REM_FLOAT,((Instruction12x)inst).getRegisterA(),((Instruction12x)inst).getRegisterA(),((Instruction12x)inst).getRegisterB(),inst.opcode,this));
break;
case ADD_DOUBLE_2ADDR:
instructions.add(new BinaryOperation(instLoc,BinaryOperation.OpID.ADD_DOUBLE,((Instruction12x)inst).getRegisterA(),((Instruction12x)inst).getRegisterA(),((Instruction12x)inst).getRegisterB(),inst.opcode,this));
break;
case SUB_DOUBLE_2ADDR:
instructions.add(new BinaryOperation(instLoc,BinaryOperation.OpID.SUB_DOUBLE,((Instruction12x)inst).getRegisterA(),((Instruction12x)inst).getRegisterA(),((Instruction12x)inst).getRegisterB(),inst.opcode,this));
break;
case MUL_DOUBLE_2ADDR:
instructions.add(new BinaryOperation(instLoc,BinaryOperation.OpID.MUL_DOUBLE,((Instruction12x)inst).getRegisterA(),((Instruction12x)inst).getRegisterA(),((Instruction12x)inst).getRegisterB(),inst.opcode,this));
break;
case DIV_DOUBLE_2ADDR:
instructions.add(new BinaryOperation(instLoc,BinaryOperation.OpID.DIV_DOUBLE,((Instruction12x)inst).getRegisterA(),((Instruction12x)inst).getRegisterA(),((Instruction12x)inst).getRegisterB(),inst.opcode,this));
break;
case REM_DOUBLE_2ADDR:
instructions.add(new BinaryOperation(instLoc,BinaryOperation.OpID.REM_DOUBLE,((Instruction12x)inst).getRegisterA(),((Instruction12x)inst).getRegisterA(),((Instruction12x)inst).getRegisterB(),inst.opcode,this));
break;
case ADD_INT_LIT16:
{
Literal lit=new Literal.LongLiteral(((Instruction22s)inst).getLiteral());
instructions.add(new BinaryLiteralOperation(instLoc,BinaryLiteralOperation.OpID.ADD_INT,((Instruction22s)inst).getRegisterA(),((Instruction22s)inst).getRegisterB(),lit,inst.opcode,this));
break;
}
case RSUB_INT:
{
Literal lit=new Literal.LongLiteral(((Instruction22s)inst).getLiteral());
instructions.add(new BinaryLiteralOperation(instLoc,BinaryLiteralOperation.OpID.RSUB_INT,((Instruction22s)inst).getRegisterA(),((Instruction22s)inst).getRegisterB(),lit,inst.opcode,this));
break;
}
case MUL_INT_LIT16:
{
Literal lit=new Literal.LongLiteral(((Instruction22s)inst).getLiteral());
instructions.add(new BinaryLiteralOperation(instLoc,BinaryLiteralOperation.OpID.MUL_INT,((Instruction22s)inst).getRegisterA(),((Instruction22s)inst).getRegisterB(),lit,inst.opcode,this));
break;
}
case DIV_INT_LIT16:
{
Literal lit=new Literal.LongLiteral(((Instruction22s)inst).getLiteral());
instructions.add(new BinaryLiteralOperation(instLoc,BinaryLiteralOperation.OpID.DIV_INT,((Instruction22s)inst).getRegisterA(),((Instruction22s)inst).getRegisterB(),lit,inst.opcode,this));
break;
}
case REM_INT_LIT16:
{
Literal lit=new Literal.LongLiteral(((Instruction22s)inst).getLiteral());
instructions.add(new BinaryLiteralOperation(instLoc,BinaryLiteralOperation.OpID.REM_INT,((Instruction22s)inst).getRegisterA(),((Instruction22s)inst).getRegisterB(),lit,inst.opcode,this));
break;
}
case AND_INT_LIT16:
{
Literal lit=new Literal.LongLiteral(((Instruction22s)inst).getLiteral());
instructions.add(new BinaryLiteralOperation(instLoc,BinaryLiteralOperation.OpID.AND_INT,((Instruction22s)inst).getRegisterA(),((Instruction22s)inst).getRegisterB(),lit,inst.opcode,this));
break;
}
case OR_INT_LIT16:
{
Literal lit=new Literal.LongLiteral(((Instruction22s)inst).getLiteral());
instructions.add(new BinaryLiteralOperation(instLoc,BinaryLiteralOperation.OpID.OR_INT,((Instruction22s)inst).getRegisterA(),((Instruction22s)inst).getRegisterB(),lit,inst.opcode,this));
break;
}
case XOR_INT_LIT16:
{
Literal lit=new Literal.LongLiteral(((Instruction22s)inst).getLiteral());
instructions.add(new BinaryLiteralOperation(instLoc,BinaryLiteralOperation.OpID.XOR_INT,((Instruction22s)inst).getRegisterA(),((Instruction22s)inst).getRegisterB(),lit,inst.opcode,this));
break;
}
case ADD_INT_LIT8:
{
Literal lit=new Literal.LongLiteral(((Instruction22b)inst).getLiteral());
instructions.add(new BinaryLiteralOperation(instLoc,BinaryLiteralOperation.OpID.ADD_INT,((Instruction22b)inst).getRegisterA(),((Instruction22b)inst).getRegisterB(),lit,inst.opcode,this));
break;
}
case RSUB_INT_LIT8:
{
Literal lit=new Literal.LongLiteral(((Instruction22b)inst).getLiteral());
instructions.add(new BinaryLiteralOperation(instLoc,BinaryLiteralOperation.OpID.RSUB_INT,((Instruction22b)inst).getRegisterA(),((Instruction22b)inst).getRegisterB(),lit,inst.opcode,this));
break;
}
case MUL_INT_LIT8:
{
Literal lit=new Literal.LongLiteral(((Instruction22b)inst).getLiteral());
instructions.add(new BinaryLiteralOperation(instLoc,BinaryLiteralOperation.OpID.MUL_INT,((Instruction22b)inst).getRegisterA(),((Instruction22b)inst).getRegisterB(),lit,inst.opcode,this));
break;
}
case DIV_INT_LIT8:
{
Literal lit=new Literal.LongLiteral(((Instruction22b)inst).getLiteral());
instructions.add(new BinaryLiteralOperation(instLoc,BinaryLiteralOperation.OpID.DIV_INT,((Instruction22b)inst).getRegisterA(),((Instruction22b)inst).getRegisterB(),lit,inst.opcode,this));
break;
}
case REM_INT_LIT8:
{
Literal lit=new Literal.LongLiteral(((Instruction22b)inst).getLiteral());
instructions.add(new BinaryLiteralOperation(instLoc,BinaryLiteralOperation.OpID.REM_INT,((Instruction22b)inst).getRegisterA(),((Instruction22b)inst).getRegisterB(),lit,inst.opcode,this));
break;
}
case AND_INT_LIT8:
{
Literal lit=new Literal.LongLiteral(((Instruction22b)inst).getLiteral());
instructions.add(new BinaryLiteralOperation(instLoc,BinaryLiteralOperation.OpID.AND_INT,((Instruction22b)inst).getRegisterA(),((Instruction22b)inst).getRegisterB(),lit,inst.opcode,this));
break;
}
case OR_INT_LIT8:
{
Literal lit=new Literal.LongLiteral(((Instruction22b)inst).getLiteral());
instructions.add(new BinaryLiteralOperation(instLoc,BinaryLiteralOperation.OpID.OR_INT,((Instruction22b)inst).getRegisterA(),((Instruction22b)inst).getRegisterB(),lit,inst.opcode,this));
break;
}
case XOR_INT_LIT8:
{
Literal lit=new Literal.LongLiteral(((Instruction22b)inst).getLiteral());
instructions.add(new BinaryLiteralOperation(instLoc,BinaryLiteralOperation.OpID.XOR_INT,((Instruction22b)inst).getRegisterA(),((Instruction22b)inst).getRegisterB(),lit,inst.opcode,this));
break;
}
case SHL_INT_LIT8:
{
Literal lit=new Literal.LongLiteral(((Instruction22b)inst).getLiteral());
instructions.add(new BinaryLiteralOperation(instLoc,BinaryLiteralOperation.OpID.SHL_INT,((Instruction22b)inst).getRegisterA(),((Instruction22b)inst).getRegisterB(),lit,inst.opcode,this));
break;
}
case SHR_INT_LIT8:
{
Literal lit=new Literal.LongLiteral(((Instruction22b)inst).getLiteral());
instructions.add(new BinaryLiteralOperation(instLoc,BinaryLiteralOperation.OpID.SHR_INT,((Instruction22b)inst).getRegisterA(),((Instruction22b)inst).getRegisterB(),lit,inst.opcode,this));
break;
}
case USHR_INT_LIT8:
{
Literal lit=new Literal.LongLiteral(((Instruction22b)inst).getLiteral());
instructions.add(new BinaryLiteralOperation(instLoc,BinaryLiteralOperation.OpID.USHR_INT,((Instruction22b)inst).getRegisterA(),((Instruction22b)inst).getRegisterB(),lit,inst.opcode,this));
break;
}
default :
throw new RuntimeException("String_Node_Str" + inst.opcode.toString());
}
currentCodeAddress+=inst.getSize(currentCodeAddress);
}
logger.debug("String_Node_Str" + this.toString() + "String_Node_Str");
}

Fixed version (ground truth):
protected void parseBytecode(){
  logger.debug("String_Node_Str" + eMethod.getClass().getSimpleName() + "String_Node_Str"+ eMethod.method.getMethodString());
  org.jf.dexlib.Code.Instruction[] instrucs=eMethod.codeItem.getInstructions();
  logger.debug("String_Node_Str" + eMethod.method.getMethodString() + "String_Node_Str"+ instrucs.length);
  instructions=new InstructionArray();
  int instLoc=0;
  int instCounter=-1;
  int currentCodeAddress=0;
  for (  org.jf.dexlib.Code.Instruction inst : instrucs) {
    totalInsts++;
    instCounter++;
    instLoc=currentCodeAddress;
    logger.debug("String_Node_Str" + instCounter + "String_Node_Str"+ instLoc+ "String_Node_Str"+ inst.opcode.name()+ "String_Node_Str"+ inst.getFormat());
switch (inst.opcode) {
case NOP:
switch (inst.getFormat()) {
case ArrayData:
{
          for (int i=0; i < instructions.size(); i++) {
            if (instructions.getFromId(i) instanceof ArrayFill)             if (instLoc == (((ArrayFill)getInstructionFromIndex(i)).tableAddressOffset + getAddressFromIndex(i))) {
              ((ArrayFill)getInstructionFromIndex(i)).setArrayDataTable((ArrayDataPseudoInstruction)inst);
              break;
            }
          }
          break;
        }
case PackedSwitchData:
      for (int i=0; i < instructions.size(); i++) {
        if (instructions.getFromId(i) instanceof Switch)         if (instLoc == (((Switch)getInstructionFromIndex(i)).tableAddressOffset + getAddressFromIndex(i))) {
          ((Switch)getInstructionFromIndex(i)).setSwitchPad(new PackedSwitchPad(((PackedSwitchDataPseudoInstruction)inst),getAddressFromIndex(i + 1) - getAddressFromIndex(i)));
          break;
        }
      }
    break;
case SparseSwitchData:
{
    for (int i=0; i < instructions.size(); i++) {
      if (instructions.getFromId(i) instanceof Switch)       if (instLoc == (((Switch)getInstructionFromIndex(i)).tableAddressOffset + getAddressFromIndex(i))) {
        ((Switch)getInstructionFromIndex(i)).setSwitchPad(new SparseSwitchPad(((SparseSwitchDataPseudoInstruction)inst),getAddressFromIndex(i + 1) - getAddressFromIndex(i)));
        break;
      }
    }
    break;
  }
case UnresolvedOdexInstruction:
throw new RuntimeException("String_Node_Str" + inst.opcode.toString() + inst.getFormat());
default :
break;
}
break;
case MOVE:
instructions.add(new UnaryOperation(instLoc,UnaryOperation.OpID.MOVE,((Instruction12x)inst).getRegisterA(),((Instruction12x)inst).getRegisterB(),inst.opcode,this));
break;
case MOVE_FROM16:
instructions.add(new UnaryOperation(instLoc,UnaryOperation.OpID.MOVE,((Instruction22x)inst).getRegisterA(),((Instruction22x)inst).getRegisterB(),inst.opcode,this));
break;
case MOVE_16:
instructions.add(new UnaryOperation(instLoc,UnaryOperation.OpID.MOVE,((Instruction32x)inst).getRegisterA(),((Instruction32x)inst).getRegisterB(),inst.opcode,this));
break;
case MOVE_WIDE:
instructions.add(new UnaryOperation(instLoc,UnaryOperation.OpID.MOVE_WIDE,((Instruction12x)inst).getRegisterA(),((Instruction12x)inst).getRegisterB(),inst.opcode,this));
break;
case MOVE_WIDE_FROM16:
instructions.add(new UnaryOperation(instLoc,UnaryOperation.OpID.MOVE_WIDE,((Instruction22x)inst).getRegisterA(),((Instruction22x)inst).getRegisterB(),inst.opcode,this));
break;
case MOVE_WIDE_16:
instructions.add(new UnaryOperation(instLoc,UnaryOperation.OpID.MOVE_WIDE,((Instruction32x)inst).getRegisterA(),((Instruction32x)inst).getRegisterB(),inst.opcode,this));
break;
case MOVE_OBJECT:
instructions.add(new UnaryOperation(instLoc,UnaryOperation.OpID.MOVE,((Instruction12x)inst).getRegisterA(),((Instruction12x)inst).getRegisterB(),inst.opcode,this));
break;
case MOVE_OBJECT_FROM16:
instructions.add(new UnaryOperation(instLoc,UnaryOperation.OpID.MOVE,((Instruction22x)inst).getRegisterA(),((Instruction22x)inst).getRegisterB(),inst.opcode,this));
break;
case MOVE_OBJECT_16:
instructions.add(new UnaryOperation(instLoc,UnaryOperation.OpID.MOVE,((Instruction32x)inst).getRegisterA(),((Instruction32x)inst).getRegisterB(),inst.opcode,this));
break;
case MOVE_RESULT:
instructions.add(new UnaryOperation(instLoc,UnaryOperation.OpID.MOVE,((Instruction11x)inst).getRegisterA(),getReturnReg(),inst.opcode,this));
break;
case MOVE_RESULT_WIDE:
instructions.add(new UnaryOperation(instLoc,UnaryOperation.OpID.MOVE_WIDE,((Instruction11x)inst).getRegisterA(),getReturnReg(),inst.opcode,this));
break;
case MOVE_RESULT_OBJECT:
instructions.add(new UnaryOperation(instLoc,UnaryOperation.OpID.MOVE,((Instruction11x)inst).getRegisterA(),getReturnReg(),inst.opcode,this));
break;
case MOVE_EXCEPTION:
instructions.add(new UnaryOperation(instLoc,UnaryOperation.OpID.MOVE,((Instruction11x)inst).getRegisterA(),getExceptionReg(),inst.opcode,this));
break;
case RETURN_VOID:
instructions.add(new Return.ReturnVoid(instLoc,inst.opcode,this));
break;
case RETURN:
instructions.add(new Return.ReturnSingle(instLoc,((Instruction11x)inst).getRegisterA(),true,inst.opcode,this));
break;
case RETURN_WIDE:
instructions.add(new Return.ReturnDouble(instLoc,((Instruction11x)inst).getRegisterA(),((Instruction11x)inst).getRegisterA() + 1,inst.opcode,this));
break;
case RETURN_OBJECT:
instructions.add(new Return.ReturnSingle(instLoc,((Instruction11x)inst).getRegisterA(),false,inst.opcode,this));
break;
case CONST_4:
{
instructions.add(new Constant.IntConstant(instLoc,(int)((Instruction11n)inst).getLiteral(),((Instruction11n)inst).getRegisterA(),inst.opcode,this));
logger.debug("String_Node_Str" + ((Instruction11n)inst).getRegisterA() + "String_Node_Str"+ ((Instruction11n)inst).getLiteral());
break;
}
case CONST_16:
instructions.add(new Constant.IntConstant(instLoc,(int)((Instruction21s)inst).getLiteral(),((Instruction21s)inst).getRegisterA(),inst.opcode,this));
logger.debug("String_Node_Str" + ((Instruction21s)inst).getRegisterA() + "String_Node_Str"+ ((Instruction21s)inst).getLiteral());
break;
case CONST:
instructions.add(new Constant.IntConstant(instLoc,(int)((Instruction31i)inst).getLiteral(),((Instruction31i)inst).getRegisterA(),inst.opcode,this));
logger.debug("String_Node_Str" + ((Instruction31i)inst).getRegisterA() + "String_Node_Str"+ ((Instruction31i)inst).getLiteral());
break;
case CONST_HIGH16:
instructions.add(new Constant.IntConstant(instLoc,(int)((Instruction21h)inst).getLiteral() << 16,((Instruction21h)inst).getRegisterA(),inst.opcode,this));
break;
case CONST_WIDE_16:
instructions.add(new Constant.LongConstant(instLoc,((Instruction21s)inst).getLiteral(),((Instruction21s)inst).getRegisterA(),inst.opcode,this));
logger.debug("String_Node_Str" + ((Instruction21s)inst).getRegisterA() + "String_Node_Str"+ ((Instruction21s)inst).getLiteral());
break;
case CONST_WIDE_32:
instructions.add(new Constant.LongConstant(instLoc,((Instruction31i)inst).getLiteral(),((Instruction31i)inst).getRegisterA(),inst.opcode,this));
break;
case CONST_WIDE:
instructions.add(new Constant.LongConstant(instLoc,((Instruction51l)inst).getLiteral(),((Instruction51l)inst).getRegisterA(),inst.opcode,this));
break;
case CONST_WIDE_HIGH16:
instructions.add(new Constant.LongConstant(instLoc,((Instruction21h)inst).getLiteral() << 16,((Instruction21h)inst).getRegisterA(),inst.opcode,this));
logger.debug("String_Node_Str" + ((Instruction21h)inst).getRegisterA() + "String_Node_Str"+ ((Instruction21h)inst).getLiteral());
break;
case CONST_STRING:
instructions.add(new Constant.StringConstant(instLoc,((StringIdItem)((Instruction21c)inst).getReferencedItem()).getStringValue(),((Instruction21c)inst).getRegisterA(),inst.opcode,this));
logger.debug(inst.opcode.toString() + "String_Node_Str" + ((StringIdItem)((Instruction21c)inst).getReferencedItem()).getStringValue());
break;
case CONST_STRING_JUMBO:
instructions.add(new Constant.StringConstant(instLoc,((StringIdItem)((Instruction31c)inst).getReferencedItem()).getStringValue(),((Instruction31c)inst).getRegisterA(),inst.opcode,this));
logger.debug(inst.opcode.toString() + "String_Node_Str" + ((StringIdItem)((Instruction31c)inst).getReferencedItem()).getStringValue());
break;
case CONST_CLASS:
{
String cname=((TypeIdItem)((Instruction21c)inst).getReferencedItem()).getTypeDescriptor();
if (cname.endsWith("String_Node_Str")) cname=cname.substring(0,cname.length() - 1);
TypeReference typeRef=TypeReference.findOrCreate(myClass.getClassLoader().getReference(),cname);
instructions.add(new Constant.ClassConstant(instLoc,typeRef,((Instruction21c)inst).getRegisterA(),inst.opcode,this));
logger.debug(inst.opcode.toString() + "String_Node_Str" + cname+ "String_Node_Str"+ this.myClass.getClassLoader().lookupClass(TypeName.findOrCreate(cname)));
break;
}
case MONITOR_ENTER:
instructions.add(new Monitor(instLoc,true,((Instruction11x)inst).getRegisterA(),inst.opcode,this));
break;
case MONITOR_EXIT:
instructions.add(new Monitor(instLoc,false,((Instruction11x)inst).getRegisterA(),inst.opcode,this));
break;
case CHECK_CAST:
{
logger.debug(inst.opcode.toString() + "String_Node_Str" + ((TypeIdItem)((Instruction21c)inst).getReferencedItem()).getTypeDescriptor());
String cname=((TypeIdItem)((Instruction21c)inst).getReferencedItem()).getTypeDescriptor();
if (cname.endsWith("String_Node_Str")) cname=cname.substring(0,cname.length() - 1);
instructions.add(new CheckCast(instLoc,TypeReference.findOrCreate(myClass.getClassLoader().getReference(),cname),((Instruction21c)inst).getRegisterA(),inst.opcode,this));
break;
}
case INSTANCE_OF:
{
logger.debug(inst.opcode.toString() + "String_Node_Str" + ((TypeIdItem)((Instruction22c)inst).getReferencedItem()).getTypeDescriptor());
String cname=((TypeIdItem)((Instruction22c)inst).getReferencedItem()).getTypeDescriptor();
if (cname.endsWith("String_Node_Str")) cname=cname.substring(0,cname.length() - 1);
instructions.add(new InstanceOf(instLoc,((Instruction22c)inst).getRegisterA(),TypeReference.findOrCreate(myClass.getClassLoader().getReference(),cname),((Instruction22c)inst).getRegisterB(),inst.opcode,this));
break;
}
case ARRAY_LENGTH:
instructions.add(new ArrayLength(instLoc,((Instruction12x)inst).getRegisterA(),((Instruction12x)inst).getRegisterB(),inst.opcode,this));
break;
case NEW_INSTANCE:
{
logger.debug(inst.opcode.toString() + "String_Node_Str" + ((TypeIdItem)((Instruction21c)inst).getReferencedItem()).getTypeDescriptor());
String cname=((TypeIdItem)((Instruction21c)inst).getReferencedItem()).getTypeDescriptor();
if (cname.endsWith("String_Node_Str")) cname=cname.substring(0,cname.length() - 1);
logger.info("String_Node_Str" + ((TypeIdItem)((Instruction21c)inst).getReferencedItem()).getTypeDescriptor());
instructions.add(new New(instLoc,((Instruction21c)inst).getRegisterA(),NewSiteReference.make(instLoc,TypeReference.findOrCreate(myClass.getClassLoader().getReference(),cname)),inst.opcode,this));
break;
}
case NEW_ARRAY:
{
int[] params=new int[1];
params[0]=((Instruction22c)inst).getRegisterB();
logger.debug(inst.opcode.toString() + "String_Node_Str" + ((TypeIdItem)((Instruction22c)inst).getReferencedItem()).getTypeDescriptor());
String cname=((TypeIdItem)((Instruction22c)inst).getReferencedItem()).getTypeDescriptor();
if (cname.endsWith("String_Node_Str")) cname=cname.substring(0,cname.length() - 1);
instructions.add(new NewArray(instLoc,((Instruction22c)inst).getRegisterA(),NewSiteReference.make(instLoc,TypeReference.findOrCreate(myClass.getClassLoader().getReference(),cname)),params,inst.opcode,this));
break;
}
case FILLED_NEW_ARRAY:
{
int registerCount=((Instruction35c)inst).getRegCount();
int[] params=new int[1];
params[0]=registerCount;
int[] args=new int[registerCount];
for (int i=0; i < registerCount; i++) {
switch (i) {
case 0:
args[0]=((Instruction35c)inst).getRegisterD();
break;
case 1:
args[1]=((Instruction35c)inst).getRegisterE();
break;
case 2:
args[2]=((Instruction35c)inst).getRegisterF();
break;
case 3:
args[3]=((Instruction35c)inst).getRegisterG();
break;
case 4:
args[4]=((Instruction35c)inst).getRegisterA();
break;
default :
throw new RuntimeException("String_Node_Str" + instLoc + "String_Node_Str");
}
}
logger.debug(inst.opcode.toString() + "String_Node_Str" + ((TypeIdItem)((Instruction35c)inst).getReferencedItem()).getTypeDescriptor());
String cname=((TypeIdItem)((Instruction35c)inst).getReferencedItem()).getTypeDescriptor();
if (cname.endsWith("String_Node_Str")) cname=cname.substring(0,cname.length() - 1);
NewSiteReference newSiteRef=NewSiteReference.make(instLoc,TypeReference.findOrCreate(myClass.getClassLoader().getReference(),cname));
TypeReference myTypeRef=TypeReference.findOrCreate(myClass.getClassLoader().getReference(),newSiteRef.getDeclaredType().getArrayElementType().getName().toString());
instructions.add(new NewArrayFilled(instLoc,getReturnReg(),newSiteRef,myTypeRef,params,args,inst.opcode,this));
logger.debug("String_Node_Str" + ((TypeIdItem)((Instruction35c)inst).getReferencedItem()).getTypeDescriptor() + "String_Node_Str"+ ((Instruction35c)inst).getRegCount());
logger.debug(registerCount + "String_Node_Str");
for (int temp_i=0; temp_i < registerCount; temp_i++) logger.debug("String_Node_Str" + args[temp_i]);
break;
}
case FILLED_NEW_ARRAY_RANGE:
{
int registerCount=((Instruction3rc)inst).getRegCount();
int[] params=new int[1];
params[0]=registerCount;
int[] args=new int[registerCount];
for (int i=0; i < registerCount; i++) args[i]=((Instruction3rc)inst).getStartRegister() + i;
logger.debug(inst.opcode.toString() + "String_Node_Str" + ((TypeIdItem)((Instruction3rc)inst).getReferencedItem()).getTypeDescriptor());
String cname=((TypeIdItem)((Instruction3rc)inst).getReferencedItem()).getTypeDescriptor();
if (cname.endsWith("String_Node_Str")) cname=cname.substring(0,cname.length() - 1);
NewSiteReference newSiteRef=NewSiteReference.make(instLoc,TypeReference.findOrCreate(myClass.getClassLoader().getReference(),cname));
TypeReference myTypeRef=TypeReference.findOrCreate(myClass.getClassLoader().getReference(),newSiteRef.getDeclaredType().getArrayElementType().getName().toString());
instructions.add(new NewArrayFilled(instLoc,getReturnReg(),newSiteRef,myTypeRef,params,args,inst.opcode,this));
break;
}
case FILL_ARRAY_DATA:
TypeReference arrayElementType=findOutArrayElementType(instrucs,instructions.toArray(new Instruction[0]),instCounter);
instructions.add(new ArrayFill(instLoc,((Instruction31t)inst).getRegisterA(),((Instruction31t)inst).getTargetAddressOffset(),TypeReference.findOrCreate(myClass.getClassLoader().getReference(),arrayElementType.getName().toString()),inst.opcode,this));
break;
case THROW:
instructions.add(new Throw(instLoc,((Instruction11x)inst).getRegisterA(),inst.opcode,this));
break;
case GOTO:
instructions.add(new Goto(instLoc,((Instruction10t)inst).getTargetAddressOffset(),inst.opcode,this));
logger.debug("String_Node_Str" + ((Instruction10t)inst).getTargetAddressOffset());
break;
case GOTO_16:
instructions.add(new Goto(instLoc,((Instruction20t)inst).getTargetAddressOffset(),inst.opcode,this));
break;
case GOTO_32:
instructions.add(new Goto(instLoc,((Instruction30t)inst).getTargetAddressOffset(),inst.opcode,this));
break;
case PACKED_SWITCH:
case SPARSE_SWITCH:
instructions.add(new Switch(instLoc,((Instruction31t)inst).getRegisterA(),((Instruction31t)inst).getTargetAddressOffset(),inst.opcode,this));
logger.debug(inst.opcode.toString() + "String_Node_Str" + inst.getFormat());
break;
case CMPL_FLOAT:
instructions.add(new BinaryOperation(instLoc,BinaryOperation.OpID.CMPL_FLOAT,((Instruction23x)inst).getRegisterA(),((Instruction23x)inst).getRegisterB(),((Instruction23x)inst).getRegisterC(),inst.opcode,this));
break;
case CMPG_FLOAT:
instructions.add(new BinaryOperation(instLoc,BinaryOperation.OpID.CMPG_FLOAT,((Instruction23x)inst).getRegisterA(),((Instruction23x)inst).getRegisterB(),((Instruction23x)inst).getRegisterC(),inst.opcode,this));
break;
case CMPL_DOUBLE:
instructions.add(new BinaryOperation(instLoc,BinaryOperation.OpID.CMPL_DOUBLE,((Instruction23x)inst).getRegisterA(),((Instruction23x)inst).getRegisterB(),((Instruction23x)inst).getRegisterC(),inst.opcode,this));
break;
case CMPG_DOUBLE:
instructions.add(new BinaryOperation(instLoc,BinaryOperation.OpID.CMPG_DOUBLE,((Instruction23x)inst).getRegisterA(),((Instruction23x)inst).getRegisterB(),((Instruction23x)inst).getRegisterC(),inst.opcode,this));
break;
case CMP_LONG:
instructions.add(new BinaryOperation(instLoc,BinaryOperation.OpID.CMPL_LONG,((Instruction23x)inst).getRegisterA(),((Instruction23x)inst).getRegisterB(),((Instruction23x)inst).getRegisterC(),inst.opcode,this));
break;
case IF_EQ:
instructions.add(new Branch.BinaryBranch(instLoc,((Instruction22t)inst).getTargetAddressOffset(),Branch.BinaryBranch.CompareOp.EQ,((Instruction22t)inst).getRegisterA(),((Instruction22t)inst).getRegisterB(),inst.opcode,this));
logger.debug("String_Node_Str" + ((Instruction22t)inst).getRegisterA() + "String_Node_Str"+ ((Instruction22t)inst).getRegisterB()+ "String_Node_Str"+ ((Instruction22t)inst).getTargetAddressOffset());
break;
case IF_NE:
instructions.add(new Branch.BinaryBranch(instLoc,((Instruction22t)inst).getTargetAddressOffset(),Branch.BinaryBranch.CompareOp.NE,((Instruction22t)inst).getRegisterA(),((Instruction22t)inst).getRegisterB(),inst.opcode,this));
logger.debug("String_Node_Str" + ((Instruction22t)inst).getRegisterA() + "String_Node_Str"+ ((Instruction22t)inst).getRegisterB()+ "String_Node_Str"+ ((Instruction22t)inst).getTargetAddressOffset());
break;
case IF_LT:
instructions.add(new Branch.BinaryBranch(instLoc,((Instruction22t)inst).getTargetAddressOffset(),Branch.BinaryBranch.CompareOp.LT,((Instruction22t)inst).getRegisterA(),((Instruction22t)inst).getRegisterB(),inst.opcode,this));
logger.debug("String_Node_Str" + ((Instruction22t)inst).getRegisterA() + "String_Node_Str"+ ((Instruction22t)inst).getRegisterB()+ "String_Node_Str"+ ((Instruction22t)inst).getTargetAddressOffset());
break;
case IF_GE:
instructions.add(new Branch.BinaryBranch(instLoc,((Instruction22t)inst).getTargetAddressOffset(),Branch.BinaryBranch.CompareOp.GE,((Instruction22t)inst).getRegisterA(),((Instruction22t)inst).getRegisterB(),inst.opcode,this));
logger.debug("String_Node_Str" + ((Instruction22t)inst).getRegisterA() + "String_Node_Str"+ ((Instruction22t)inst).getRegisterB()+ "String_Node_Str"+ ((Instruction22t)inst).getTargetAddressOffset());
break;
case IF_GT:
instructions.add(new Branch.BinaryBranch(instLoc,((Instruction22t)inst).getTargetAddressOffset(),Branch.BinaryBranch.CompareOp.GT,((Instruction22t)inst).getRegisterA(),((Instruction22t)inst).getRegisterB(),inst.opcode,this));
logger.debug("String_Node_Str" + ((Instruction22t)inst).getRegisterA() + "String_Node_Str"+ ((Instruction22t)inst).getRegisterB()+ "String_Node_Str"+ ((Instruction22t)inst).getTargetAddressOffset());
break;
case IF_LE:
instructions.add(new Branch.BinaryBranch(instLoc,((Instruction22t)inst).getTargetAddressOffset(),Branch.BinaryBranch.CompareOp.LE,((Instruction22t)inst).getRegisterA(),((Instruction22t)inst).getRegisterB(),inst.opcode,this));
logger.debug("String_Node_Str" + ((Instruction22t)inst).getRegisterA() + "String_Node_Str"+ ((Instruction22t)inst).getRegisterB()+ "String_Node_Str"+ ((Instruction22t)inst).getTargetAddressOffset());
break;
case IF_EQZ:
instructions.add(new Branch.UnaryBranch(instLoc,((Instruction21t)inst).getTargetAddressOffset(),Branch.UnaryBranch.CompareOp.EQZ,((Instruction21t)inst).getRegisterA(),inst.opcode,this));
logger.debug("String_Node_Str" + ((Instruction21t)inst).getRegisterA() + "String_Node_Str"+ ((Instruction21t)inst).getTargetAddressOffset());
break;
case IF_NEZ:
instructions.add(new Branch.UnaryBranch(instLoc,((Instruction21t)inst).getTargetAddressOffset(),Branch.UnaryBranch.CompareOp.NEZ,((Instruction21t)inst).getRegisterA(),inst.opcode,this));
logger.debug("String_Node_Str" + ((Instruction21t)inst).getRegisterA() + "String_Node_Str"+ ((Instruction21t)inst).getTargetAddressOffset());
break;
case IF_LTZ:
instructions.add(new Branch.UnaryBranch(instLoc,((Instruction21t)inst).getTargetAddressOffset(),Branch.UnaryBranch.CompareOp.LTZ,((Instruction21t)inst).getRegisterA(),inst.opcode,this));
logger.debug("String_Node_Str" + ((Instruction21t)inst).getRegisterA() + "String_Node_Str"+ ((Instruction21t)inst).getTargetAddressOffset());
break;
case IF_GEZ:
instructions.add(new Branch.UnaryBranch(instLoc,((Instruction21t)inst).getTargetAddressOffset(),Branch.UnaryBranch.CompareOp.GEZ,((Instruction21t)inst).getRegisterA(),inst.opcode,this));
logger.debug("String_Node_Str" + ((Instruction21t)inst).getRegisterA() + "String_Node_Str"+ ((Instruction21t)inst).getTargetAddressOffset());
break;
case IF_GTZ:
instructions.add(new Branch.UnaryBranch(instLoc,((Instruction21t)inst).getTargetAddressOffset(),Branch.UnaryBranch.CompareOp.GTZ,((Instruction21t)inst).getRegisterA(),inst.opcode,this));
logger.debug("String_Node_Str" + ((Instruction21t)inst).getRegisterA() + "String_Node_Str"+ ((Instruction21t)inst).getTargetAddressOffset());
break;
case IF_LEZ:
instructions.add(new Branch.UnaryBranch(instLoc,((Instruction21t)inst).getTargetAddressOffset(),Branch.UnaryBranch.CompareOp.LEZ,((Instruction21t)inst).getRegisterA(),inst.opcode,this));
logger.debug("String_Node_Str" + ((Instruction21t)inst).getRegisterA() + "String_Node_Str"+ ((Instruction21t)inst).getTargetAddressOffset());
break;
case AGET:
instructions.add(new ArrayGet(instLoc,((Instruction23x)inst).getRegisterA(),((Instruction23x)inst).getRegisterB(),((Instruction23x)inst).getRegisterC(),Type.t_int,inst.opcode,this));
break;
case AGET_WIDE:
instructions.add(new ArrayGet(instLoc,((Instruction23x)inst).getRegisterA(),((Instruction23x)inst).getRegisterB(),((Instruction23x)inst).getRegisterC(),Type.t_wide,inst.opcode,this));
break;
case AGET_OBJECT:
instructions.add(new ArrayGet(instLoc,((Instruction23x)inst).getRegisterA(),((Instruction23x)inst).getRegisterB(),((Instruction23x)inst).getRegisterC(),Type.t_object,inst.opcode,this));
break;
case AGET_BOOLEAN:
instructions.add(new ArrayGet(instLoc,((Instruction23x)inst).getRegisterA(),((Instruction23x)inst).getRegisterB(),((Instruction23x)inst).getRegisterC(),Type.t_boolean,inst.opcode,this));
break;
case AGET_BYTE:
instructions.add(new ArrayGet(instLoc,((Instruction23x)inst).getRegisterA(),((Instruction23x)inst).getRegisterB(),((Instruction23x)inst).getRegisterC(),Type.t_byte,inst.opcode,this));
break;
case AGET_CHAR:
instructions.add(new ArrayGet(instLoc,((Instruction23x)inst).getRegisterA(),((Instruction23x)inst).getRegisterB(),((Instruction23x)inst).getRegisterC(),Type.t_char,inst.opcode,this));
break;
case AGET_SHORT:
instructions.add(new ArrayGet(instLoc,((Instruction23x)inst).getRegisterA(),((Instruction23x)inst).getRegisterB(),((Instruction23x)inst).getRegisterC(),Type.t_short,inst.opcode,this));
break;
case APUT:
instructions.add(new ArrayPut(instLoc,((Instruction23x)inst).getRegisterA(),((Instruction23x)inst).getRegisterB(),((Instruction23x)inst).getRegisterC(),Type.t_int,inst.opcode,this));
break;
case APUT_WIDE:
instructions.add(new ArrayPut(instLoc,((Instruction23x)inst).getRegisterA(),((Instruction23x)inst).getRegisterB(),((Instruction23x)inst).getRegisterC(),Type.t_wide,inst.opcode,this));
break;
case APUT_OBJECT:
instructions.add(new ArrayPut(instLoc,((Instruction23x)inst).getRegisterA(),((Instruction23x)inst).getRegisterB(),((Instruction23x)inst).getRegisterC(),Type.t_object,inst.opcode,this));
break;
case APUT_BOOLEAN:
instructions.add(new ArrayPut(instLoc,((Instruction23x)inst).getRegisterA(),((Instruction23x)inst).getRegisterB(),((Instruction23x)inst).getRegisterC(),Type.t_boolean,inst.opcode,this));
break;
case APUT_BYTE:
instructions.add(new ArrayPut(instLoc,((Instruction23x)inst).getRegisterA(),((Instruction23x)inst).getRegisterB(),((Instruction23x)inst).getRegisterC(),Type.t_byte,inst.opcode,this));
break;
case APUT_CHAR:
instructions.add(new ArrayPut(instLoc,((Instruction23x)inst).getRegisterA(),((Instruction23x)inst).getRegisterB(),((Instruction23x)inst).getRegisterC(),Type.t_char,inst.opcode,this));
break;
case APUT_SHORT:
instructions.add(new ArrayPut(instLoc,((Instruction23x)inst).getRegisterA(),((Instruction23x)inst).getRegisterB(),((Instruction23x)inst).getRegisterC(),Type.t_short,inst.opcode,this));
break;
case IGET:
case IGET_WIDE:
case IGET_OBJECT:
case IGET_BOOLEAN:
case IGET_BYTE:
case IGET_CHAR:
case IGET_SHORT:
{
logger.debug(inst.opcode.toString() + "String_Node_Str" + ((FieldIdItem)((Instruction22c)inst).getReferencedItem()).getContainingClass().getTypeDescriptor()+ "String_Node_Str"+ ((FieldIdItem)((Instruction22c)inst).getReferencedItem()).getFieldName().getStringValue()+ "String_Node_Str"+ ((FieldIdItem)((Instruction22c)inst).getReferencedItem()).getFieldType().getTypeDescriptor());
String cname=((FieldIdItem)((Instruction22c)inst).getReferencedItem()).getContainingClass().getTypeDescriptor();
String fname=((FieldIdItem)((Instruction22c)inst).getReferencedItem()).getFieldName().getStringValue();
String ftname=((FieldIdItem)((Instruction22c)inst).getReferencedItem()).getFieldType().getTypeDescriptor();
if (cname.endsWith("String_Node_Str")) cname=cname.substring(0,cname.length() - 1);
if (fname.endsWith("String_Node_Str")) fname=fname.substring(0,fname.length() - 1);
if (ftname.endsWith("String_Node_Str")) ftname=ftname.substring(0,ftname.length() - 1);
instructions.add(new GetField.GetInstanceField(instLoc,((Instruction22c)inst).getRegisterA(),((Instruction22c)inst).getRegisterB(),cname,fname,ftname,inst.opcode,this));
break;
}
case IPUT:
case IPUT_WIDE:
case IPUT_OBJECT:
case IPUT_BOOLEAN:
case IPUT_BYTE:
case IPUT_CHAR:
case IPUT_SHORT:
{
logger.debug(inst.opcode.toString() + "String_Node_Str" + ((FieldIdItem)((Instruction22c)inst).getReferencedItem()).getContainingClass().getTypeDescriptor()+ "String_Node_Str"+ ((FieldIdItem)((Instruction22c)inst).getReferencedItem()).getFieldName().getStringValue()+ "String_Node_Str"+ ((FieldIdItem)((Instruction22c)inst).getReferencedItem()).getFieldType().getTypeDescriptor());
String cname=((FieldIdItem)((Instruction22c)inst).getReferencedItem()).getContainingClass().getTypeDescriptor();
String fname=((FieldIdItem)((Instruction22c)inst).getReferencedItem()).getFieldName().getStringValue();
String ftname=((FieldIdItem)((Instruction22c)inst).getReferencedItem()).getFieldType().getTypeDescriptor();
if (cname.endsWith("String_Node_Str")) cname=cname.substring(0,cname.length() - 1);
if (fname.endsWith("String_Node_Str")) fname=fname.substring(0,fname.length() - 1);
if (ftname.endsWith("String_Node_Str")) ftname=ftname.substring(0,ftname.length() - 1);
instructions.add(new PutField.PutInstanceField(instLoc,((Instruction22c)inst).getRegisterA(),((Instruction22c)inst).getRegisterB(),cname,fname,ftname,inst.opcode,this));
break;
}
case SGET:
case SGET_WIDE:
case SGET_OBJECT:
case SGET_BOOLEAN:
case SGET_BYTE:
case SGET_CHAR:
case SGET_SHORT:
{
logger.debug(inst.opcode.toString() + "String_Node_Str" + ((FieldIdItem)((Instruction21c)inst).getReferencedItem()).getContainingClass().getTypeDescriptor()+ "String_Node_Str"+ ((FieldIdItem)((Instruction21c)inst).getReferencedItem()).getFieldName().getStringValue()+ "String_Node_Str"+ ((FieldIdItem)((Instruction21c)inst).getReferencedItem()).getFieldType().getTypeDescriptor());
String cname=((FieldIdItem)((Instruction21c)inst).getReferencedItem()).getContainingClass().getTypeDescriptor();
String fname=((FieldIdItem)((Instruction21c)inst).getReferencedItem()).getFieldName().getStringValue();
String ftname=((FieldIdItem)((Instruction21c)inst).getReferencedItem()).getFieldType().getTypeDescriptor();
if (cname.endsWith("String_Node_Str")) cname=cname.substring(0,cname.length() - 1);
if (fname.endsWith("String_Node_Str")) fname=fname.substring(0,fname.length() - 1);
if (ftname.endsWith("String_Node_Str")) ftname=ftname.substring(0,ftname.length() - 1);
instructions.add(new GetField.GetStaticField(instLoc,((Instruction21c)inst).getRegisterA(),cname,fname,ftname,inst.opcode,this));
break;
}
case SPUT:
case SPUT_WIDE:
case SPUT_OBJECT:
case SPUT_BOOLEAN:
case SPUT_BYTE:
case SPUT_CHAR:
case SPUT_SHORT:
{
logger.debug(inst.opcode.toString() + "String_Node_Str" + ((FieldIdItem)((Instruction21c)inst).getReferencedItem()).getContainingClass().getTypeDescriptor()+ "String_Node_Str"+ ((FieldIdItem)((Instruction21c)inst).getReferencedItem()).getFieldName().getStringValue()+ "String_Node_Str"+ ((FieldIdItem)((Instruction21c)inst).getReferencedItem()).getFieldType().getTypeDescriptor());
String cname=((FieldIdItem)((Instruction21c)inst).getReferencedItem()).getContainingClass().getTypeDescriptor();
String fname=((FieldIdItem)((Instruction21c)inst).getReferencedItem()).getFieldName().getStringValue();
String ftname=((FieldIdItem)((Instruction21c)inst).getReferencedItem()).getFieldType().getTypeDescriptor();
if (cname.endsWith("String_Node_Str")) cname=cname.substring(0,cname.length() - 1);
if (fname.endsWith("String_Node_Str")) fname=fname.substring(0,fname.length() - 1);
if (ftname.endsWith("String_Node_Str")) ftname=ftname.substring(0,ftname.length() - 1);
instructions.add(new PutField.PutStaticField(instLoc,((Instruction21c)inst).getRegisterA(),cname,fname,ftname,inst.opcode,this));
break;
}
case INVOKE_VIRTUAL:
{
int registerCount=((Instruction35c)inst).getRegCount();
int[] args=new int[registerCount];
for (int i=0; i < registerCount; i++) {
switch (i) {
case 0:
args[0]=((Instruction35c)inst).getRegisterD();
break;
case 1:
args[1]=((Instruction35c)inst).getRegisterE();
break;
case 2:
args[2]=((Instruction35c)inst).getRegisterF();
break;
case 3:
args[3]=((Instruction35c)inst).getRegisterG();
break;
case 4:
args[4]=((Instruction35c)inst).getRegisterA();
break;
default :
throw new RuntimeException("String_Node_Str" + instLoc + "String_Node_Str");
}
}
String cname=((MethodIdItem)((Instruction35c)inst).getReferencedItem()).getContainingClass().getTypeDescriptor();
String mname=((MethodIdItem)((Instruction35c)inst).getReferencedItem()).getMethodName().getStringValue();
String pname=((MethodIdItem)((Instruction35c)inst).getReferencedItem()).getPrototype().getPrototypeString();
if (cname.endsWith("String_Node_Str")) cname=cname.substring(0,cname.length() - 1);
handleINVOKE_VIRTUAL(instLoc,cname,mname,pname,args,inst.opcode);
break;
}
case INVOKE_SUPER:
{
int registerCount=((Instruction35c)inst).getRegCount();
int[] args=new int[registerCount];
for (int i=0; i < registerCount; i++) {
switch (i) {
case 0:
args[0]=((Instruction35c)inst).getRegisterD();
break;
case 1:
args[1]=((Instruction35c)inst).getRegisterE();
break;
case 2:
args[2]=((Instruction35c)inst).getRegisterF();
break;
case 3:
args[3]=((Instruction35c)inst).getRegisterG();
break;
case 4:
args[4]=((Instruction35c)inst).getRegisterA();
break;
default :
throw new RuntimeException("String_Node_Str" + instLoc + "String_Node_Str");
}
}
logger.debug(inst.opcode.toString() + "String_Node_Str" + ((MethodIdItem)((Instruction35c)inst).getReferencedItem()).getContainingClass().getTypeDescriptor()+ "String_Node_Str"+ ((MethodIdItem)((Instruction35c)inst).getReferencedItem()).getMethodName().getStringValue()+ "String_Node_Str"+ ((MethodIdItem)((Instruction35c)inst).getReferencedItem()).getPrototype().getPrototypeString());
String cname=((MethodIdItem)((Instruction35c)inst).getReferencedItem()).getContainingClass().getTypeDescriptor();
String mname=((MethodIdItem)((Instruction35c)inst).getReferencedItem()).getMethodName().getStringValue();
String pname=((MethodIdItem)((Instruction35c)inst).getReferencedItem()).getPrototype().getPrototypeString();
if (cname.endsWith("String_Node_Str")) cname=cname.substring(0,cname.length() - 1);
instructions.add(new Invoke.InvokeSuper(instLoc,cname,mname,pname,args,inst.opcode,this));
logger.debug("String_Node_Str" + cname + "String_Node_Str"+ mname+ "String_Node_Str"+ pname);
break;
}
case INVOKE_DIRECT:
{
int registerCount=((Instruction35c)inst).getRegCount();
int[] args=new int[registerCount];
for (int i=0; i < registerCount; i++) {
switch (i) {
case 0:
args[0]=((Instruction35c)inst).getRegisterD();
break;
case 1:
args[1]=((Instruction35c)inst).getRegisterE();
break;
case 2:
args[2]=((Instruction35c)inst).getRegisterF();
break;
case 3:
args[3]=((Instruction35c)inst).getRegisterG();
break;
case 4:
args[4]=((Instruction35c)inst).getRegisterA();
break;
default :
throw new RuntimeException("String_Node_Str" + instLoc + "String_Node_Str");
}
}
String cname=((MethodIdItem)((Instruction35c)inst).getReferencedItem()).getContainingClass().getTypeDescriptor();
String mname=((MethodIdItem)((Instruction35c)inst).getReferencedItem()).getMethodName().getStringValue();
String pname=((MethodIdItem)((Instruction35c)inst).getReferencedItem()).getPrototype().getPrototypeString();
if (cname.endsWith("String_Node_Str")) cname=cname.substring(0,cname.length() - 1);
instructions.add(new Invoke.InvokeDirect(instLoc,cname,mname,pname,args,inst.opcode,this));
logger.debug("String_Node_Str" + ((MethodIdItem)((Instruction35c)inst).getReferencedItem()).getContainingClass().getTypeDescriptor() + "String_Node_Str"+ ((MethodIdItem)((Instruction35c)inst).getReferencedItem()).getMethodName().getStringValue()+ "String_Node_Str"+ ((MethodIdItem)((Instruction35c)inst).getReferencedItem()).getPrototype().getPrototypeString()+ "String_Node_Str"+ ((Instruction35c)inst).getRegCount());
break;
}
case INVOKE_STATIC:
{
int registerCount=((Instruction35c)inst).getRegCount();
int[] args=new int[registerCount];
for (int i=0; i < registerCount; i++) {
switch (i) {
case 0:
args[0]=((Instruction35c)inst).getRegisterD();
break;
case 1:
args[1]=((Instruction35c)inst).getRegisterE();
break;
case 2:
args[2]=((Instruction35c)inst).getRegisterF();
break;
case 3:
args[3]=((Instruction35c)inst).getRegisterG();
break;
case 4:
args[4]=((Instruction35c)inst).getRegisterA();
break;
default :
throw new RuntimeException("String_Node_Str" + instLoc + "String_Node_Str");
}
}
String cname=((MethodIdItem)((Instruction35c)inst).getReferencedItem()).getContainingClass().getTypeDescriptor();
String mname=((MethodIdItem)((Instruction35c)inst).getReferencedItem()).getMethodName().getStringValue();
String pname=((MethodIdItem)((Instruction35c)inst).getReferencedItem()).getPrototype().getPrototypeString();
if (cname.endsWith("String_Node_Str")) cname=cname.substring(0,cname.length() - 1);
instructions.add(new Invoke.InvokeStatic(instLoc,cname,mname,pname,args,inst.opcode,this));
logger.debug("String_Node_Str" + ((MethodIdItem)((Instruction35c)inst).getReferencedItem()).getContainingClass().getTypeDescriptor() + "String_Node_Str"+ ((MethodIdItem)((Instruction35c)inst).getReferencedItem()).getMethodName().getStringValue()+ "String_Node_Str"+ ((MethodIdItem)((Instruction35c)inst).getReferencedItem()).getPrototype().getPrototypeString()+ "String_Node_Str"+ ((Instruction35c)inst).getRegCount());
break;
}
case INVOKE_INTERFACE:
{
int registerCount=((Instruction35c)inst).getRegCount();
int[] args=new int[registerCount];
for (int i=0; i < registerCount; i++) {
switch (i) {
case 0:
args[0]=((Instruction35c)inst).getRegisterD();
break;
case 1:
args[1]=((Instruction35c)inst).getRegisterE();
break;
case 2:
args[2]=((Instruction35c)inst).getRegisterF();
break;
case 3:
args[3]=((Instruction35c)inst).getRegisterG();
break;
case 4:
args[4]=((Instruction35c)inst).getRegisterA();
break;
default :
throw new RuntimeException("String_Node_Str" + instLoc + "String_Node_Str");
}
}
logger.debug(inst.opcode.toString() + "String_Node_Str" + ((MethodIdItem)((Instruction35c)inst).getReferencedItem()).getContainingClass().getTypeDescriptor()+ "String_Node_Str"+ ((MethodIdItem)((Instruction35c)inst).getReferencedItem()).getMethodName().getStringValue()+ "String_Node_Str"+ ((MethodIdItem)((Instruction35c)inst).getReferencedItem()).getPrototype().getPrototypeString());
String cname=((MethodIdItem)((Instruction35c)inst).getReferencedItem()).getContainingClass().getTypeDescriptor();
String mname=((MethodIdItem)((Instruction35c)inst).getReferencedItem()).getMethodName().getStringValue();
String pname=((MethodIdItem)((Instruction35c)inst).getReferencedItem()).getPrototype().getPrototypeString();
if (cname.endsWith("String_Node_Str")) cname=cname.substring(0,cname.length() - 1);
instructions.add(new Invoke.InvokeInterface(instLoc,cname,mname,pname,args,inst.opcode,this));
break;
}
case INVOKE_VIRTUAL_RANGE:
{
int registerCount=((Instruction3rc)inst).getRegCount();
int[] args=new int[registerCount];
for (int i=0; i < registerCount; i++) args[i]=((Instruction3rc)inst).getStartRegister() + i;
logger.debug(inst.opcode.toString() + "String_Node_Str" + ((MethodIdItem)((Instruction3rc)inst).getReferencedItem()).getContainingClass().getTypeDescriptor()+ "String_Node_Str"+ ((MethodIdItem)((Instruction3rc)inst).getReferencedItem()).getMethodName().getStringValue()+ "String_Node_Str"+ ((MethodIdItem)((Instruction3rc)inst).getReferencedItem()).getPrototype().getPrototypeString());
String cname=((MethodIdItem)((Instruction3rc)inst).getReferencedItem()).getContainingClass().getTypeDescriptor();
String mname=((MethodIdItem)((Instruction3rc)inst).getReferencedItem()).getMethodName().getStringValue();
String pname=((MethodIdItem)((Instruction3rc)inst).getReferencedItem()).getPrototype().getPrototypeString();
if (cname.endsWith("String_Node_Str")) cname=cname.substring(0,cname.length() - 1);
instructions.add(new Invoke.InvokeVirtual(instLoc,cname,mname,pname,args,inst.opcode,this));
break;
}
case INVOKE_SUPER_RANGE:
{
int registerCount=((Instruction3rc)inst).getRegCount();
int[] args=new int[registerCount];
for (int i=0; i < registerCount; i++) args[i]=((Instruction3rc)inst).getStartRegister() + i;
logger.debug(inst.opcode.toString() + "String_Node_Str" + ((MethodIdItem)((Instruction3rc)inst).getReferencedItem()).getContainingClass().getTypeDescriptor()+ "String_Node_Str"+ ((MethodIdItem)((Instruction3rc)inst).getReferencedItem()).getMethodName().getStringValue()+ "String_Node_Str"+ ((MethodIdItem)((Instruction3rc)inst).getReferencedItem()).getPrototype().getPrototypeString());
String cname=((MethodIdItem)((Instruction3rc)inst).getReferencedItem()).getContainingClass().getTypeDescriptor();
String mname=((MethodIdItem)((Instruction3rc)inst).getReferencedItem()).getMethodName().getStringValue();
String pname=((MethodIdItem)((Instruction3rc)inst).getReferencedItem()).getPrototype().getPrototypeString();
if (cname.endsWith("String_Node_Str")) cname=cname.substring(0,cname.length() - 1);
instructions.add(new Invoke.InvokeSuper(instLoc,cname,mname,pname,args,inst.opcode,this));
break;
}
case INVOKE_DIRECT_RANGE:
{
int registerCount=((Instruction3rc)inst).getRegCount();
int[] args=new int[registerCount];
for (int i=0; i < registerCount; i++) args[i]=((Instruction3rc)inst).getStartRegister() + i;
logger.debug(inst.opcode.toString() + "String_Node_Str" + ((MethodIdItem)((Instruction3rc)inst).getReferencedItem()).getContainingClass().getTypeDescriptor()+ "String_Node_Str"+ ((MethodIdItem)((Instruction3rc)inst).getReferencedItem()).getMethodName().getStringValue()+ "String_Node_Str"+ ((MethodIdItem)((Instruction3rc)inst).getReferencedItem()).getPrototype().getPrototypeString());
String cname=((MethodIdItem)((Instruction3rc)inst).getReferencedItem()).getContainingClass().getTypeDescriptor();
String mname=((MethodIdItem)((Instruction3rc)inst).getReferencedItem()).getMethodName().getStringValue();
String pname=((MethodIdItem)((Instruction3rc)inst).getReferencedItem()).getPrototype().getPrototypeString();
if (cname.endsWith("String_Node_Str")) cname=cname.substring(0,cname.length() - 1);
instructions.add(new Invoke.InvokeDirect(instLoc,cname,mname,pname,args,inst.opcode,this));
break;
}
case INVOKE_STATIC_RANGE:
{
int registerCount=((Instruction3rc)inst).getRegCount();
int[] args=new int[registerCount];
for (int i=0; i < registerCount; i++) args[i]=((Instruction3rc)inst).getStartRegister() + i;
logger.debug(inst.opcode.toString() + "String_Node_Str" + ((MethodIdItem)((Instruction3rc)inst).getReferencedItem()).getContainingClass().getTypeDescriptor()+ "String_Node_Str"+ ((MethodIdItem)((Instruction3rc)inst).getReferencedItem()).getMethodName().getStringValue()+ "String_Node_Str"+ ((MethodIdItem)((Instruction3rc)inst).getReferencedItem()).getPrototype().getPrototypeString());
String cname=((MethodIdItem)((Instruction3rc)inst).getReferencedItem()).getContainingClass().getTypeDescriptor();
String mname=((MethodIdItem)((Instruction3rc)inst).getReferencedItem()).getMethodName().getStringValue();
String pname=((MethodIdItem)((Instruction3rc)inst).getReferencedItem()).getPrototype().getPrototypeString();
if (cname.endsWith("String_Node_Str")) cname=cname.substring(0,cname.length() - 1);
instructions.add(new Invoke.InvokeStatic(instLoc,cname,mname,pname,args,inst.opcode,this));
break;
}
case INVOKE_INTERFACE_RANGE:
{
int registerCount=((Instruction3rc)inst).getRegCount();
int[] args=new int[registerCount];
for (int i=0; i < registerCount; i++) args[i]=((Instruction3rc)inst).getStartRegister() + i;
logger.debug(inst.opcode.toString() + "String_Node_Str" + ((MethodIdItem)((Instruction3rc)inst).getReferencedItem()).getContainingClass().getTypeDescriptor()+ "String_Node_Str"+ ((MethodIdItem)((Instruction3rc)inst).getReferencedItem()).getMethodName().getStringValue()+ "String_Node_Str"+ ((MethodIdItem)((Instruction3rc)inst).getReferencedItem()).getPrototype().getPrototypeString());
String cname=((MethodIdItem)((Instruction3rc)inst).getReferencedItem()).getContainingClass().getTypeDescriptor();
String mname=((MethodIdItem)((Instruction3rc)inst).getReferencedItem()).getMethodName().getStringValue();
String pname=((MethodIdItem)((Instruction3rc)inst).getReferencedItem()).getPrototype().getPrototypeString();
if (cname.endsWith("String_Node_Str")) cname=cname.substring(0,cname.length() - 1);
instructions.add(new Invoke.InvokeInterface(instLoc,cname,mname,pname,args,inst.opcode,this));
break;
}
case NEG_INT:
instructions.add(new UnaryOperation(instLoc,OpID.NEGINT,((Instruction12x)inst).getRegisterA(),((Instruction12x)inst).getRegisterB(),inst.opcode,this));
break;
case NOT_INT:
instructions.add(new UnaryOperation(instLoc,OpID.NOTINT,((Instruction12x)inst).getRegisterA(),((Instruction12x)inst).getRegisterB(),inst.opcode,this));
break;
case NEG_LONG:
instructions.add(new UnaryOperation(instLoc,OpID.NEGLONG,((Instruction12x)inst).getRegisterA(),((Instruction12x)inst).getRegisterB(),inst.opcode,this));
break;
case NOT_LONG:
instructions.add(new UnaryOperation(instLoc,OpID.NOTLONG,((Instruction12x)inst).getRegisterA(),((Instruction12x)inst).getRegisterB(),inst.opcode,this));
break;
case NEG_FLOAT:
instructions.add(new UnaryOperation(instLoc,OpID.NEGFLOAT,((Instruction12x)inst).getRegisterA(),((Instruction12x)inst).getRegisterB(),inst.opcode,this));
break;
case NEG_DOUBLE:
instructions.add(new UnaryOperation(instLoc,OpID.NEGDOUBLE,((Instruction12x)inst).getRegisterA(),((Instruction12x)inst).getRegisterB(),inst.opcode,this));
break;
case INT_TO_LONG:
instructions.add(new UnaryOperation(instLoc,OpID.INTTOLONG,((Instruction12x)inst).getRegisterA(),((Instruction12x)inst).getRegisterB(),inst.opcode,this));
break;
case INT_TO_FLOAT:
instructions.add(new UnaryOperation(instLoc,OpID.INTTOFLOAT,((Instruction12x)inst).getRegisterA(),((Instruction12x)inst).getRegisterB(),inst.opcode,this));
break;
case INT_TO_DOUBLE:
instructions.add(new UnaryOperation(instLoc,OpID.INTTODOUBLE,((Instruction12x)inst).getRegisterA(),((Instruction12x)inst).getRegisterB(),inst.opcode,this));
break;
case LONG_TO_INT:
instructions.add(new UnaryOperation(instLoc,OpID.LONGTOINT,((Instruction12x)inst).getRegisterA(),((Instruction12x)inst).getRegisterB(),inst.opcode,this));
break;
case LONG_TO_FLOAT:
instructions.add(new UnaryOperation(instLoc,OpID.LONGTOFLOAT,((Instruction12x)inst).getRegisterA(),((Instruction12x)inst).getRegisterB(),inst.opcode,this));
break;
case LONG_TO_DOUBLE:
instructions.add(new UnaryOperation(instLoc,OpID.LONGTODOUBLE,((Instruction12x)inst).getRegisterA(),((Instruction12x)inst).getRegisterB(),inst.opcode,this));
break;
case FLOAT_TO_INT:
instructions.add(new UnaryOperation(instLoc,OpID.FLOATTOINT,((Instruction12x)inst).getRegisterA(),((Instruction12x)inst).getRegisterB(),inst.opcode,this));
break;
case FLOAT_TO_LONG:
instructions.add(new UnaryOperation(instLoc,OpID.FLOATTOLONG,((Instruction12x)inst).getRegisterA(),((Instruction12x)inst).getRegisterB(),inst.opcode,this));
break;
case FLOAT_TO_DOUBLE:
instructions.add(new UnaryOperation(instLoc,OpID.FLOATTODOUBLE,((Instruction12x)inst).getRegisterA(),((Instruction12x)inst).getRegisterB(),inst.opcode,this));
break;
case DOUBLE_TO_INT:
instructions.add(new UnaryOperation(instLoc,OpID.DOUBLETOINT,((Instruction12x)inst).getRegisterA(),((Instruction12x)inst).getRegisterB(),inst.opcode,this));
break;
case DOUBLE_TO_LONG:
instructions.add(new UnaryOperation(instLoc,OpID.DOUBLETOLONG,((Instruction12x)inst).getRegisterA(),((Instruction12x)inst).getRegisterB(),inst.opcode,this));
break;
case DOUBLE_TO_FLOAT:
instructions.add(new UnaryOperation(instLoc,OpID.DOUBLETOFLOAT,((Instruction12x)inst).getRegisterA(),((Instruction12x)inst).getRegisterB(),inst.opcode,this));
break;
case INT_TO_BYTE:
instructions.add(new UnaryOperation(instLoc,OpID.INTTOBYTE,((Instruction12x)inst).getRegisterA(),((Instruction12x)inst).getRegisterB(),inst.opcode,this));
break;
case INT_TO_CHAR:
instructions.add(new UnaryOperation(instLoc,OpID.INTTOCHAR,((Instruction12x)inst).getRegisterA(),((Instruction12x)inst).getRegisterB(),inst.opcode,this));
break;
case INT_TO_SHORT:
instructions.add(new UnaryOperation(instLoc,OpID.INTTOSHORT,((Instruction12x)inst).getRegisterA(),((Instruction12x)inst).getRegisterB(),inst.opcode,this));
break;
case ADD_INT:
instructions.add(new BinaryOperation(instLoc,BinaryOperation.OpID.ADD_INT,((Instruction23x)inst).getRegisterA(),((Instruction23x)inst).getRegisterB(),((Instruction23x)inst).getRegisterC(),inst.opcode,this));
break;
case SUB_INT:
instructions.add(new BinaryOperation(instLoc,BinaryOperation.OpID.SUB_INT,((Instruction23x)inst).getRegisterA(),((Instruction23x)inst).getRegisterB(),((Instruction23x)inst).getRegisterC(),inst.opcode,this));
break;
case MUL_INT:
instructions.add(new BinaryOperation(instLoc,BinaryOperation.OpID.MUL_INT,((Instruction23x)inst).getRegisterA(),((Instruction23x)inst).getRegisterB(),((Instruction23x)inst).getRegisterC(),inst.opcode,this));
break;
case DIV_INT:
instructions.add(new BinaryOperation(instLoc,BinaryOperation.OpID.DIV_INT,((Instruction23x)inst).getRegisterA(),((Instruction23x)inst).getRegisterB(),((Instruction23x)inst).getRegisterC(),inst.opcode,this));
break;
case REM_INT:
instructions.add(new BinaryOperation(instLoc,BinaryOperation.OpID.REM_INT,((Instruction23x)inst).getRegisterA(),((Instruction23x)inst).getRegisterB(),((Instruction23x)inst).getRegisterC(),inst.opcode,this));
break;
case AND_INT:
instructions.add(new BinaryOperation(instLoc,BinaryOperation.OpID.AND_INT,((Instruction23x)inst).getRegisterA(),((Instruction23x)inst).getRegisterB(),((Instruction23x)inst).getRegisterC(),inst.opcode,this));
break;
case OR_INT:
instructions.add(new BinaryOperation(instLoc,BinaryOperation.OpID.OR_INT,((Instruction23x)inst).getRegisterA(),((Instruction23x)inst).getRegisterB(),((Instruction23x)inst).getRegisterC(),inst.opcode,this));
break;
case XOR_INT:
instructions.add(new BinaryOperation(instLoc,BinaryOperation.OpID.XOR_INT,((Instruction23x)inst).getRegisterA(),((Instruction23x)inst).getRegisterB(),((Instruction23x)inst).getRegisterC(),inst.opcode,this));
break;
case SHL_INT:
instructions.add(new BinaryOperation(instLoc,BinaryOperation.OpID.SHL_INT,((Instruction23x)inst).getRegisterA(),((Instruction23x)inst).getRegisterB(),((Instruction23x)inst).getRegisterC(),inst.opcode,this));
break;
case SHR_INT:
instructions.add(new BinaryOperation(instLoc,BinaryOperation.OpID.SHR_INT,((Instruction23x)inst).getRegisterA(),((Instruction23x)inst).getRegisterB(),((Instruction23x)inst).getRegisterC(),inst.opcode,this));
break;
case USHR_INT:
instructions.add(new BinaryOperation(instLoc,BinaryOperation.OpID.USHR_INT,((Instruction23x)inst).getRegisterA(),((Instruction23x)inst).getRegisterB(),((Instruction23x)inst).getRegisterC(),inst.opcode,this));
break;
case ADD_LONG:
instructions.add(new BinaryOperation(instLoc,BinaryOperation.OpID.ADD_LONG,((Instruction23x)inst).getRegisterA(),((Instruction23x)inst).getRegisterB(),((Instruction23x)inst).getRegisterC(),inst.opcode,this));
break;
case SUB_LONG:
instructions.add(new BinaryOperation(instLoc,BinaryOperation.OpID.SUB_LONG,((Instruction23x)inst).getRegisterA(),((Instruction23x)inst).getRegisterB(),((Instruction23x)inst).getRegisterC(),inst.opcode,this));
break;
case MUL_LONG:
instructions.add(new BinaryOperation(instLoc,BinaryOperation.OpID.MUL_LONG,((Instruction23x)inst).getRegisterA(),((Instruction23x)inst).getRegisterB(),((Instruction23x)inst).getRegisterC(),inst.opcode,this));
break;
case DIV_LONG:
instructions.add(new BinaryOperation(instLoc,BinaryOperation.OpID.DIV_LONG,((Instruction23x)inst).getRegisterA(),((Instruction23x)inst).getRegisterB(),((Instruction23x)inst).getRegisterC(),inst.opcode,this));
break;
case REM_LONG:
instructions.add(new BinaryOperation(instLoc,BinaryOperation.OpID.REM_LONG,((Instruction23x)inst).getRegisterA(),((Instruction23x)inst).getRegisterB(),((Instruction23x)inst).getRegisterC(),inst.opcode,this));
break;
case AND_LONG:
instructions.add(new BinaryOperation(instLoc,BinaryOperation.OpID.AND_LONG,((Instruction23x)inst).getRegisterA(),((Instruction23x)inst).getRegisterB(),((Instruction23x)inst).getRegisterC(),inst.opcode,this));
break;
case OR_LONG:
instructions.add(new BinaryOperation(instLoc,BinaryOperation.OpID.OR_LONG,((Instruction23x)inst).getRegisterA(),((Instruction23x)inst).getRegisterB(),((Instruction23x)inst).getRegisterC(),inst.opcode,this));
break;
case XOR_LONG:
instructions.add(new BinaryOperation(instLoc,BinaryOperation.OpID.XOR_LONG,((Instruction23x)inst).getRegisterA(),((Instruction23x)inst).getRegisterB(),((Instruction23x)inst).getRegisterC(),inst.opcode,this));
break;
case SHL_LONG:
instructions.add(new BinaryOperation(instLoc,BinaryOperation.OpID.SHL_LONG,((Instruction23x)inst).getRegisterA(),((Instruction23x)inst).getRegisterB(),((Instruction23x)inst).getRegisterC(),inst.opcode,this));
break;
case SHR_LONG:
instructions.add(new BinaryOperation(instLoc,BinaryOperation.OpID.SHR_LONG,((Instruction23x)inst).getRegisterA(),((Instruction23x)inst).getRegisterB(),((Instruction23x)inst).getRegisterC(),inst.opcode,this));
break;
case USHR_LONG:
instructions.add(new BinaryOperation(instLoc,BinaryOperation.OpID.USHR_LONG,((Instruction23x)inst).getRegisterA(),((Instruction23x)inst).getRegisterB(),((Instruction23x)inst).getRegisterC(),inst.opcode,this));
break;
case ADD_FLOAT:
instructions.add(new BinaryOperation(instLoc,BinaryOperation.OpID.ADD_FLOAT,((Instruction23x)inst).getRegisterA(),((Instruction23x)inst).getRegisterB(),((Instruction23x)inst).getRegisterC(),inst.opcode,this));
break;
case SUB_FLOAT:
instructions.add(new BinaryOperation(instLoc,BinaryOperation.OpID.SUB_FLOAT,((Instruction23x)inst).getRegisterA(),((Instruction23x)inst).getRegisterB(),((Instruction23x)inst).getRegisterC(),inst.opcode,this));
break;
case MUL_FLOAT:
instructions.add(new BinaryOperation(instLoc,BinaryOperation.OpID.MUL_FLOAT,((Instruction23x)inst).getRegisterA(),((Instruction23x)inst).getRegisterB(),((Instruction23x)inst).getRegisterC(),inst.opcode,this));
break;
case DIV_FLOAT:
instructions.add(new BinaryOperation(instLoc,BinaryOperation.OpID.DIV_FLOAT,((Instruction23x)inst).getRegisterA(),((Instruction23x)inst).getRegisterB(),((Instruction23x)inst).getRegisterC(),inst.opcode,this));
break;
case REM_FLOAT:
instructions.add(new BinaryOperation(instLoc,BinaryOperation.OpID.REM_FLOAT,((Instruction23x)inst).getRegisterA(),((Instruction23x)inst).getRegisterB(),((Instruction23x)inst).getRegisterC(),inst.opcode,this));
break;
case ADD_DOUBLE:
instructions.add(new BinaryOperation(instLoc,BinaryOperation.OpID.ADD_DOUBLE,((Instruction23x)inst).getRegisterA(),((Instruction23x)inst).getRegisterB(),((Instruction23x)inst).getRegisterC(),inst.opcode,this));
break;
case SUB_DOUBLE:
instructions.add(new BinaryOperation(instLoc,BinaryOperation.OpID.SUB_DOUBLE,((Instruction23x)inst).getRegisterA(),((Instruction23x)inst).getRegisterB(),((Instruction23x)inst).getRegisterC(),inst.opcode,this));
break;
case MUL_DOUBLE:
instructions.add(new BinaryOperation(instLoc,BinaryOperation.OpID.MUL_DOUBLE,((Instruction23x)inst).getRegisterA(),((Instruction23x)inst).getRegisterB(),((Instruction23x)inst).getRegisterC(),inst.opcode,this));
break;
case DIV_DOUBLE:
instructions.add(new BinaryOperation(instLoc,BinaryOperation.OpID.DIV_DOUBLE,((Instruction23x)inst).getRegisterA(),((Instruction23x)inst).getRegisterB(),((Instruction23x)inst).getRegisterC(),inst.opcode,this));
break;
case REM_DOUBLE:
instructions.add(new BinaryOperation(instLoc,BinaryOperation.OpID.REM_DOUBLE,((Instruction23x)inst).getRegisterA(),((Instruction23x)inst).getRegisterB(),((Instruction23x)inst).getRegisterC(),inst.opcode,this));
break;
case ADD_INT_2ADDR:
instructions.add(new BinaryOperation(instLoc,BinaryOperation.OpID.ADD_INT,((Instruction12x)inst).getRegisterA(),((Instruction12x)inst).getRegisterA(),((Instruction12x)inst).getRegisterB(),inst.opcode,this));
break;
case SUB_INT_2ADDR:
instructions.add(new BinaryOperation(instLoc,BinaryOperation.OpID.SUB_INT,((Instruction12x)inst).getRegisterA(),((Instruction12x)inst).getRegisterA(),((Instruction12x)inst).getRegisterB(),inst.opcode,this));
break;
case MUL_INT_2ADDR:
instructions.add(new BinaryOperation(instLoc,BinaryOperation.OpID.MUL_INT,((Instruction12x)inst).getRegisterA(),((Instruction12x)inst).getRegisterA(),((Instruction12x)inst).getRegisterB(),inst.opcode,this));
break;
case DIV_INT_2ADDR:
instructions.add(new BinaryOperation(instLoc,BinaryOperation.OpID.DIV_INT,((Instruction12x)inst).getRegisterA(),((Instruction12x)inst).getRegisterA(),((Instruction12x)inst).getRegisterB(),inst.opcode,this));
break;
case REM_INT_2ADDR:
instructions.add(new BinaryOperation(instLoc,BinaryOperation.OpID.REM_INT,((Instruction12x)inst).getRegisterA(),((Instruction12x)inst).getRegisterA(),((Instruction12x)inst).getRegisterB(),inst.opcode,this));
break;
case AND_INT_2ADDR:
instructions.add(new BinaryOperation(instLoc,BinaryOperation.OpID.AND_INT,((Instruction12x)inst).getRegisterA(),((Instruction12x)inst).getRegisterA(),((Instruction12x)inst).getRegisterB(),inst.opcode,this));
break;
case OR_INT_2ADDR:
instructions.add(new BinaryOperation(instLoc,BinaryOperation.OpID.OR_INT,((Instruction12x)inst).getRegisterA(),((Instruction12x)inst).getRegisterA(),((Instruction12x)inst).getRegisterB(),inst.opcode,this));
break;
case XOR_INT_2ADDR:
instructions.add(new BinaryOperation(instLoc,BinaryOperation.OpID.XOR_INT,((Instruction12x)inst).getRegisterA(),((Instruction12x)inst).getRegisterA(),((Instruction12x)inst).getRegisterB(),inst.opcode,this));
break;
case SHL_INT_2ADDR:
instructions.add(new BinaryOperation(instLoc,BinaryOperation.OpID.SHL_INT,((Instruction12x)inst).getRegisterA(),((Instruction12x)inst).getRegisterA(),((Instruction12x)inst).getRegisterB(),inst.opcode,this));
break;
case SHR_INT_2ADDR:
instructions.add(new BinaryOperation(instLoc,BinaryOperation.OpID.SHR_INT,((Instruction12x)inst).getRegisterA(),((Instruction12x)inst).getRegisterA(),((Instruction12x)inst).getRegisterB(),inst.opcode,this));
break;
case USHR_INT_2ADDR:
instructions.add(new BinaryOperation(instLoc,BinaryOperation.OpID.USHR_INT,((Instruction12x)inst).getRegisterA(),((Instruction12x)inst).getRegisterA(),((Instruction12x)inst).getRegisterB(),inst.opcode,this));
break;
case ADD_LONG_2ADDR:
instructions.add(new BinaryOperation(instLoc,BinaryOperation.OpID.ADD_LONG,((Instruction12x)inst).getRegisterA(),((Instruction12x)inst).getRegisterA(),((Instruction12x)inst).getRegisterB(),inst.opcode,this));
break;
case SUB_LONG_2ADDR:
instructions.add(new BinaryOperation(instLoc,BinaryOperation.OpID.SUB_LONG,((Instruction12x)inst).getRegisterA(),((Instruction12x)inst).getRegisterA(),((Instruction12x)inst).getRegisterB(),inst.opcode,this));
break;
case MUL_LONG_2ADDR:
instructions.add(new BinaryOperation(instLoc,BinaryOperation.OpID.MUL_LONG,((Instruction12x)inst).getRegisterA(),((Instruction12x)inst).getRegisterA(),((Instruction12x)inst).getRegisterB(),inst.opcode,this));
break;
case DIV_LONG_2ADDR:
instructions.add(new BinaryOperation(instLoc,BinaryOperation.OpID.DIV_LONG,((Instruction12x)inst).getRegisterA(),((Instruction12x)inst).getRegisterA(),((Instruction12x)inst).getRegisterB(),inst.opcode,this));
break;
case REM_LONG_2ADDR:
instructions.add(new BinaryOperation(instLoc,BinaryOperation.OpID.REM_LONG,((Instruction12x)inst).getRegisterA(),((Instruction12x)inst).getRegisterA(),((Instruction12x)inst).getRegisterB(),inst.opcode,this));
break;
case AND_LONG_2ADDR:
instructions.add(new BinaryOperation(instLoc,BinaryOperation.OpID.AND_LONG,((Instruction12x)inst).getRegisterA(),((Instruction12x)inst).getRegisterA(),((Instruction12x)inst).getRegisterB(),inst.opcode,this));
break;
case OR_LONG_2ADDR:
instructions.add(new BinaryOperation(instLoc,BinaryOperation.OpID.OR_LONG,((Instruction12x)inst).getRegisterA(),((Instruction12x)inst).getRegisterA(),((Instruction12x)inst).getRegisterB(),inst.opcode,this));
break;
case XOR_LONG_2ADDR:
instructions.add(new BinaryOperation(instLoc,BinaryOperation.OpID.XOR_LONG,((Instruction12x)inst).getRegisterA(),((Instruction12x)inst).getRegisterA(),((Instruction12x)inst).getRegisterB(),inst.opcode,this));
break;
case SHL_LONG_2ADDR:
instructions.add(new BinaryOperation(instLoc,BinaryOperation.OpID.SHL_LONG,((Instruction12x)inst).getRegisterA(),((Instruction12x)inst).getRegisterA(),((Instruction12x)inst).getRegisterB(),inst.opcode,this));
break;
case SHR_LONG_2ADDR:
instructions.add(new BinaryOperation(instLoc,BinaryOperation.OpID.SHR_LONG,((Instruction12x)inst).getRegisterA(),((Instruction12x)inst).getRegisterA(),((Instruction12x)inst).getRegisterB(),inst.opcode,this));
break;
case USHR_LONG_2ADDR:
instructions.add(new BinaryOperation(instLoc,BinaryOperation.OpID.USHR_LONG,((Instruction12x)inst).getRegisterA(),((Instruction12x)inst).getRegisterA(),((Instruction12x)inst).getRegisterB(),inst.opcode,this));
break;
case ADD_FLOAT_2ADDR:
instructions.add(new BinaryOperation(instLoc,BinaryOperation.OpID.ADD_FLOAT,((Instruction12x)inst).getRegisterA(),((Instruction12x)inst).getRegisterA(),((Instruction12x)inst).getRegisterB(),inst.opcode,this));
break;
case SUB_FLOAT_2ADDR:
instructions.add(new BinaryOperation(instLoc,BinaryOperation.OpID.SUB_FLOAT,((Instruction12x)inst).getRegisterA(),((Instruction12x)inst).getRegisterA(),((Instruction12x)inst).getRegisterB(),inst.opcode,this));
break;
case MUL_FLOAT_2ADDR:
instructions.add(new BinaryOperation(instLoc,BinaryOperation.OpID.MUL_FLOAT,((Instruction12x)inst).getRegisterA(),((Instruction12x)inst).getRegisterA(),((Instruction12x)inst).getRegisterB(),inst.opcode,this));
break;
case DIV_FLOAT_2ADDR:
instructions.add(new BinaryOperation(instLoc,BinaryOperation.OpID.DIV_FLOAT,((Instruction12x)inst).getRegisterA(),((Instruction12x)inst).getRegisterA(),((Instruction12x)inst).getRegisterB(),inst.opcode,this));
break;
case REM_FLOAT_2ADDR:
instructions.add(new BinaryOperation(instLoc,BinaryOperation.OpID.REM_FLOAT,((Instruction12x)inst).getRegisterA(),((Instruction12x)inst).getRegisterA(),((Instruction12x)inst).getRegisterB(),inst.opcode,this));
break;
case ADD_DOUBLE_2ADDR:
instructions.add(new BinaryOperation(instLoc,BinaryOperation.OpID.ADD_DOUBLE,((Instruction12x)inst).getRegisterA(),((Instruction12x)inst).getRegisterA(),((Instruction12x)inst).getRegisterB(),inst.opcode,this));
break;
case SUB_DOUBLE_2ADDR:
instructions.add(new BinaryOperation(instLoc,BinaryOperation.OpID.SUB_DOUBLE,((Instruction12x)inst).getRegisterA(),((Instruction12x)inst).getRegisterA(),((Instruction12x)inst).getRegisterB(),inst.opcode,this));
break;
case MUL_DOUBLE_2ADDR:
instructions.add(new BinaryOperation(instLoc,BinaryOperation.OpID.MUL_DOUBLE,((Instruction12x)inst).getRegisterA(),((Instruction12x)inst).getRegisterA(),((Instruction12x)inst).getRegisterB(),inst.opcode,this));
break;
case DIV_DOUBLE_2ADDR:
instructions.add(new BinaryOperation(instLoc,BinaryOperation.OpID.DIV_DOUBLE,((Instruction12x)inst).getRegisterA(),((Instruction12x)inst).getRegisterA(),((Instruction12x)inst).getRegisterB(),inst.opcode,this));
break;
case REM_DOUBLE_2ADDR:
instructions.add(new BinaryOperation(instLoc,BinaryOperation.OpID.REM_DOUBLE,((Instruction12x)inst).getRegisterA(),((Instruction12x)inst).getRegisterA(),((Instruction12x)inst).getRegisterB(),inst.opcode,this));
break;
case ADD_INT_LIT16:
{
Literal lit=new Literal.LongLiteral(((Instruction22s)inst).getLiteral());
instructions.add(new BinaryLiteralOperation(instLoc,BinaryLiteralOperation.OpID.ADD_INT,((Instruction22s)inst).getRegisterA(),((Instruction22s)inst).getRegisterB(),lit,inst.opcode,this));
break;
}
case RSUB_INT:
{
Literal lit=new Literal.LongLiteral(((Instruction22s)inst).getLiteral());
instructions.add(new BinaryLiteralOperation(instLoc,BinaryLiteralOperation.OpID.RSUB_INT,((Instruction22s)inst).getRegisterA(),((Instruction22s)inst).getRegisterB(),lit,inst.opcode,this));
break;
}
case MUL_INT_LIT16:
{
Literal lit=new Literal.LongLiteral(((Instruction22s)inst).getLiteral());
instructions.add(new BinaryLiteralOperation(instLoc,BinaryLiteralOperation.OpID.MUL_INT,((Instruction22s)inst).getRegisterA(),((Instruction22s)inst).getRegisterB(),lit,inst.opcode,this));
break;
}
case DIV_INT_LIT16:
{
Literal lit=new Literal.LongLiteral(((Instruction22s)inst).getLiteral());
instructions.add(new BinaryLiteralOperation(instLoc,BinaryLiteralOperation.OpID.DIV_INT,((Instruction22s)inst).getRegisterA(),((Instruction22s)inst).getRegisterB(),lit,inst.opcode,this));
break;
}
case REM_INT_LIT16:
{
Literal lit=new Literal.LongLiteral(((Instruction22s)inst).getLiteral());
instructions.add(new BinaryLiteralOperation(instLoc,BinaryLiteralOperation.OpID.REM_INT,((Instruction22s)inst).getRegisterA(),((Instruction22s)inst).getRegisterB(),lit,inst.opcode,this));
break;
}
case AND_INT_LIT16:
{
Literal lit=new Literal.LongLiteral(((Instruction22s)inst).getLiteral());
instructions.add(new BinaryLiteralOperation(instLoc,BinaryLiteralOperation.OpID.AND_INT,((Instruction22s)inst).getRegisterA(),((Instruction22s)inst).getRegisterB(),lit,inst.opcode,this));
break;
}
case OR_INT_LIT16:
{
Literal lit=new Literal.LongLiteral(((Instruction22s)inst).getLiteral());
instructions.add(new BinaryLiteralOperation(instLoc,BinaryLiteralOperation.OpID.OR_INT,((Instruction22s)inst).getRegisterA(),((Instruction22s)inst).getRegisterB(),lit,inst.opcode,this));
break;
}
case XOR_INT_LIT16:
{
Literal lit=new Literal.LongLiteral(((Instruction22s)inst).getLiteral());
instructions.add(new BinaryLiteralOperation(instLoc,BinaryLiteralOperation.OpID.XOR_INT,((Instruction22s)inst).getRegisterA(),((Instruction22s)inst).getRegisterB(),lit,inst.opcode,this));
break;
}
case ADD_INT_LIT8:
{
Literal lit=new Literal.LongLiteral(((Instruction22b)inst).getLiteral());
instructions.add(new BinaryLiteralOperation(instLoc,BinaryLiteralOperation.OpID.ADD_INT,((Instruction22b)inst).getRegisterA(),((Instruction22b)inst).getRegisterB(),lit,inst.opcode,this));
break;
}
case RSUB_INT_LIT8:
{
Literal lit=new Literal.LongLiteral(((Instruction22b)inst).getLiteral());
instructions.add(new BinaryLiteralOperation(instLoc,BinaryLiteralOperation.OpID.RSUB_INT,((Instruction22b)inst).getRegisterA(),((Instruction22b)inst).getRegisterB(),lit,inst.opcode,this));
break;
}
case MUL_INT_LIT8:
{
Literal lit=new Literal.LongLiteral(((Instruction22b)inst).getLiteral());
instructions.add(new BinaryLiteralOperation(instLoc,BinaryLiteralOperation.OpID.MUL_INT,((Instruction22b)inst).getRegisterA(),((Instruction22b)inst).getRegisterB(),lit,inst.opcode,this));
break;
}
case DIV_INT_LIT8:
{
Literal lit=new Literal.LongLiteral(((Instruction22b)inst).getLiteral());
instructions.add(new BinaryLiteralOperation(instLoc,BinaryLiteralOperation.OpID.DIV_INT,((Instruction22b)inst).getRegisterA(),((Instruction22b)inst).getRegisterB(),lit,inst.opcode,this));
break;
}
case REM_INT_LIT8:
{
Literal lit=new Literal.LongLiteral(((Instruction22b)inst).getLiteral());
instructions.add(new BinaryLiteralOperation(instLoc,BinaryLiteralOperation.OpID.REM_INT,((Instruction22b)inst).getRegisterA(),((Instruction22b)inst).getRegisterB(),lit,inst.opcode,this));
break;
}
case AND_INT_LIT8:
{
Literal lit=new Literal.LongLiteral(((Instruction22b)inst).getLiteral());
instructions.add(new BinaryLiteralOperation(instLoc,BinaryLiteralOperation.OpID.AND_INT,((Instruction22b)inst).getRegisterA(),((Instruction22b)inst).getRegisterB(),lit,inst.opcode,this));
break;
}
case OR_INT_LIT8:
{
Literal lit=new Literal.LongLiteral(((Instruction22b)inst).getLiteral());
instructions.add(new BinaryLiteralOperation(instLoc,BinaryLiteralOperation.OpID.OR_INT,((Instruction22b)inst).getRegisterA(),((Instruction22b)inst).getRegisterB(),lit,inst.opcode,this));
break;
}
case XOR_INT_LIT8:
{
Literal lit=new Literal.LongLiteral(((Instruction22b)inst).getLiteral());
instructions.add(new BinaryLiteralOperation(instLoc,BinaryLiteralOperation.OpID.XOR_INT,((Instruction22b)inst).getRegisterA(),((Instruction22b)inst).getRegisterB(),lit,inst.opcode,this));
break;
}
case SHL_INT_LIT8:
{
Literal lit=new Literal.LongLiteral(((Instruction22b)inst).getLiteral());
instructions.add(new BinaryLiteralOperation(instLoc,BinaryLiteralOperation.OpID.SHL_INT,((Instruction22b)inst).getRegisterA(),((Instruction22b)inst).getRegisterB(),lit,inst.opcode,this));
break;
}
case SHR_INT_LIT8:
{
Literal lit=new Literal.LongLiteral(((Instruction22b)inst).getLiteral());
instructions.add(new BinaryLiteralOperation(instLoc,BinaryLiteralOperation.OpID.SHR_INT,((Instruction22b)inst).getRegisterA(),((Instruction22b)inst).getRegisterB(),lit,inst.opcode,this));
break;
}
case USHR_INT_LIT8:
{
Literal lit=new Literal.LongLiteral(((Instruction22b)inst).getLiteral());
instructions.add(new BinaryLiteralOperation(instLoc,BinaryLiteralOperation.OpID.USHR_INT,((Instruction22b)inst).getRegisterA(),((Instruction22b)inst).getRegisterB(),lit,inst.opcode,this));
break;
}
default :
throw new RuntimeException("String_Node_Str" + inst.opcode.toString());
}
currentCodeAddress+=inst.getSize(currentCodeAddress);
}
logger.debug("String_Node_Str" + this.toString() + "String_Node_Str");
}