diff options
Diffstat (limited to 'src/arch/dalvik/operand.c')
-rw-r--r-- | src/arch/dalvik/operand.c | 34 |
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; |