in tools/dexfuzz/src/dexfuzz/program/mutators/ValuePrinter.java [215:265]
private OutputType getInstructionOutputType(MInsn mInsn) {
Opcode opcode = mInsn.insn.info.opcode;
if (opcode == Opcode.CONST_STRING || opcode == Opcode.CONST_STRING_JUMBO) {
return OutputType.STRING;
}
if (opcode == Opcode.IGET_BOOLEAN || opcode == Opcode.SGET_BOOLEAN) {
return OutputType.BOOLEAN;
}
if (opcode == Opcode.IGET_BYTE || opcode == Opcode.SGET_BYTE
|| opcode == Opcode.INT_TO_BYTE) {
return OutputType.BYTE;
}
if (opcode == Opcode.IGET_CHAR || opcode == Opcode.SGET_CHAR
|| opcode == Opcode.INT_TO_CHAR) {
return OutputType.CHAR;
}
if (opcode == Opcode.IGET_SHORT || opcode == Opcode.SGET_SHORT
|| opcode == Opcode.INT_TO_SHORT) {
return OutputType.SHORT;
}
if (opcode == Opcode.NEG_INT || opcode == Opcode.NOT_INT
|| opcode == Opcode.LONG_TO_INT || opcode == Opcode.FLOAT_TO_INT
|| opcode == Opcode.DOUBLE_TO_INT
|| Opcode.isBetween(opcode, Opcode.ADD_INT, Opcode.USHR_INT)
|| Opcode.isBetween(opcode, Opcode.ADD_INT_2ADDR, Opcode.USHR_INT_2ADDR)
|| Opcode.isBetween(opcode, Opcode.ADD_INT_LIT16, Opcode.USHR_INT_LIT8)) {
return OutputType.INT;
}
if (opcode == Opcode.NEG_LONG || opcode == Opcode.NOT_LONG
|| opcode == Opcode.INT_TO_LONG || opcode == Opcode.FLOAT_TO_LONG
|| opcode == Opcode.DOUBLE_TO_LONG
|| Opcode.isBetween(opcode, Opcode.ADD_LONG, Opcode.USHR_LONG)
|| Opcode.isBetween(opcode, Opcode.ADD_LONG_2ADDR, Opcode.USHR_LONG_2ADDR)) {
return OutputType.LONG;
}
if (opcode == Opcode.NEG_FLOAT
|| opcode == Opcode.INT_TO_FLOAT || opcode == Opcode.LONG_TO_FLOAT
|| opcode == Opcode.DOUBLE_TO_FLOAT
|| Opcode.isBetween(opcode, Opcode.ADD_FLOAT, Opcode.REM_FLOAT)
|| Opcode.isBetween(opcode, Opcode.ADD_FLOAT_2ADDR, Opcode.REM_FLOAT_2ADDR)) {
return OutputType.FLOAT;
}
if (opcode == Opcode.NEG_DOUBLE
|| opcode == Opcode.INT_TO_DOUBLE || opcode == Opcode.LONG_TO_DOUBLE
|| opcode == Opcode.FLOAT_TO_DOUBLE
|| Opcode.isBetween(opcode, Opcode.ADD_DOUBLE, Opcode.REM_DOUBLE)
|| Opcode.isBetween(opcode, Opcode.ADD_DOUBLE_2ADDR, Opcode.REM_DOUBLE_2ADDR)) {
return OutputType.DOUBLE;
}
return OutputType.UNKNOWN;
}