Add "support" for odexed instructions using Format3rms

Also, change the name of the invoke-*-range-quick opcodes to invoke-*-quick/range,
to be consistent with the naming scheme of non-odexed opcodes

git-svn-id: https://smali.googlecode.com/svn/trunk@542 55b6fa8a-2a1e-11de-a435-ffa8d773f76a
This commit is contained in:
JesusFreke@JesusFreke.com
2010-01-01 22:35:35 +00:00
parent f322260c22
commit c9c2ec3d48
5 changed files with 30 additions and 12 deletions

View File

@ -263,10 +263,9 @@ public enum Opcode
IPUT_WIDE_QUICK((byte)0xf6, "iput-wide-quick", ReferenceType.none, Format.Format22cs, true),
IPUT_OBJECT_QUICK((byte)0xf7, "iput-object-quick", ReferenceType.none, Format.Format22cs, true),
INVOKE_VIRTUAL_QUICK((byte)0xf8, "invoke-virtual-quick", ReferenceType.none, Format.Format35ms, true),
INVOKE_VIRTUAL_RANGE_QUICK((byte)0xf9, "invoke-virtual-range-quick", ReferenceType.none, Format.Format3rms, true),
INVOKE_VIRTUAL_QUICK_RANGE((byte)0xf9, "invoke-virtual-quick/range", ReferenceType.none, Format.Format3rms, true),
INVOKE_SUPER_QUICK((byte)0xfa, "invoke-super-quick", ReferenceType.none, Format.Format35ms, true),
INVOKE_SUPER_RANGE_QUICK((byte)0xfb, "invoke-super-range-quick", ReferenceType.none, Format.Format3rms, true);
INVOKE_SUPER_QUICK_RANGE((byte)0xfb, "invoke-super-quick/range", ReferenceType.none, Format.Format3rms, true);
private static Opcode[] opcodesByValue;

View File

@ -126,9 +126,9 @@ public class DeodexUtil {
instructionThrowTable.set(Opcode.IPUT_WIDE_QUICK.value & 0xFF);
instructionThrowTable.set(Opcode.IPUT_OBJECT_QUICK.value & 0xFF);
instructionThrowTable.set(Opcode.INVOKE_VIRTUAL_QUICK.value & 0xFF);
instructionThrowTable.set(Opcode.INVOKE_VIRTUAL_RANGE_QUICK.value & 0xFF);
instructionThrowTable.set(Opcode.INVOKE_VIRTUAL_QUICK_RANGE.value & 0xFF);
instructionThrowTable.set(Opcode.INVOKE_SUPER_QUICK.value & 0xFF);
instructionThrowTable.set(Opcode.INVOKE_SUPER_RANGE_QUICK.value & 0xFF);
instructionThrowTable.set(Opcode.INVOKE_SUPER_QUICK_RANGE.value & 0xFF);
instructionThrowTable.set(Opcode.INVOKE_DIRECT_EMPTY.value & 0xFF);
}
@ -621,7 +621,7 @@ public class DeodexUtil {
}
return true;
}
case INVOKE_VIRTUAL_RANGE_QUICK:
case INVOKE_VIRTUAL_QUICK_RANGE:
{
Instruction3rms ins = ((Instruction3rms)i.instruction);
int registerNum = ins.getStartRegister();
@ -716,7 +716,7 @@ public class DeodexUtil {
}
return true;
}
case INVOKE_SUPER_RANGE_QUICK:
case INVOKE_SUPER_QUICK_RANGE:
{
Instruction3rms ins = ((Instruction3rms)i.instruction);
int registerNum = ins.getStartRegister();
@ -909,8 +909,8 @@ public class DeodexUtil {
case INVOKE_SUPER_QUICK:
objectRegisterNum = ((Instruction35ms)instruction).getRegisterD();
break;
case INVOKE_VIRTUAL_RANGE_QUICK:
case INVOKE_SUPER_RANGE_QUICK:
case INVOKE_VIRTUAL_QUICK_RANGE:
case INVOKE_SUPER_QUICK_RANGE:
objectRegisterNum = ((Instruction3rms)instruction).getStartRegister();
break;
default: