summaryrefslogtreecommitdiff
path: root/src/arch/dalvik/operand.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/arch/dalvik/operand.c')
-rw-r--r--src/arch/dalvik/operand.c34
1 files changed, 27 insertions, 7 deletions
diff --git a/src/arch/dalvik/operand.c b/src/arch/dalvik/operand.c
index 7e8bf43..184a6e6 100644
--- a/src/arch/dalvik/operand.c
+++ b/src/arch/dalvik/operand.c
@@ -870,25 +870,25 @@ static bool dalvik_read_basic_operands(GArchInstruction *instr, const bin_t *dat
switch (model & ~DALVIK_OP_POOL_MASK)
{
- case DALVIK_OPT_12X:
+ case DALVIK_OPT_11N:
types = (DalvikOperandID []) {
DOI_REGISTER_4,
- DOI_REGISTER_4,
+ DOI_IMMEDIATE_4,
DOI_INVALID
};
break;
- case DALVIK_OPT_11N:
+ case DALVIK_OPT_11X:
types = (DalvikOperandID []) {
- DOI_REGISTER_4,
- DOI_IMMEDIATE_4,
+ DOI_REGISTER_8,
DOI_INVALID
};
break;
- case DALVIK_OPT_11X:
+ case DALVIK_OPT_12X:
types = (DalvikOperandID []) {
- DOI_REGISTER_8,
+ DOI_REGISTER_4,
+ DOI_REGISTER_4,
DOI_INVALID
};
break;
@@ -935,6 +935,24 @@ static bool dalvik_read_basic_operands(GArchInstruction *instr, const bin_t *dat
};
break;
+ case DALVIK_OPT_22S:
+ types = (DalvikOperandID []) {
+ DOI_REGISTER_4,
+ DOI_REGISTER_4,
+ DOI_IMMEDIATE_16,
+ DOI_INVALID
+ };
+ break;
+
+ case DALVIK_OPT_23X:
+ types = (DalvikOperandID []) {
+ DOI_REGISTER_8,
+ DOI_REGISTER_8,
+ DOI_REGISTER_8,
+ DOI_INVALID
+ };
+ break;
+
default:
types = (DalvikOperandID []) {
DOI_INVALID
@@ -1149,6 +1167,8 @@ bool dalvik_read_operands(GArchInstruction *instr, const bin_t *data, off_t *pos
case DALVIK_OPT_21S:
case DALVIK_OPT_22B:
case DALVIK_OPT_22C:
+ case DALVIK_OPT_22S:
+ case DALVIK_OPT_23X:
result = dalvik_read_basic_operands(instr, data, pos, len, &low, endian, model);
break;