| // Copyright 2006 The Android Open Source Project |
| |
| #include <stdio.h> |
| #include <inttypes.h> |
| #include "opcode.h" |
| |
| // Note: this array depends on the Opcode enum defined in opcode.h |
| uint32_t opcode_flags[] = { |
| 0, // OP_INVALID |
| 0, // OP_UNDEFINED |
| kCatAlu, // OP_ADC |
| kCatAlu, // OP_ADD |
| kCatAlu, // OP_AND |
| kCatBranch, // OP_B |
| kCatBranch | kCatBranchLink, // OP_BL |
| kCatAlu, // OP_BIC |
| 0, // OP_BKPT |
| kCatBranch | kCatBranchLink | kCatBranchExch, // OP_BLX |
| kCatBranch | kCatBranchExch, // OP_BX |
| kCatCoproc, // OP_CDP |
| kCatAlu, // OP_CLZ |
| kCatAlu, // OP_CMN |
| kCatAlu, // OP_CMP |
| kCatAlu, // OP_EOR |
| kCatCoproc | kCatLoad, // OP_LDC |
| kCatLoad | kCatMultiple, // OP_LDM |
| kCatLoad | kCatWord, // OP_LDR |
| kCatLoad | kCatByte, // OP_LDRB |
| kCatLoad | kCatByte, // OP_LDRBT |
| kCatLoad | kCatHalf, // OP_LDRH |
| kCatLoad | kCatByte | kCatSigned, // OP_LDRSB |
| kCatLoad | kCatHalf | kCatSigned, // OP_LDRSH |
| kCatLoad | kCatWord, // OP_LDRT |
| kCatCoproc, // OP_MCR |
| kCatAlu, // OP_MLA |
| kCatAlu, // OP_MOV |
| kCatCoproc, // OP_MRC |
| 0, // OP_MRS |
| 0, // OP_MSR |
| kCatAlu, // OP_MUL |
| kCatAlu, // OP_MVN |
| kCatAlu, // OP_ORR |
| 0, // OP_PLD |
| kCatAlu, // OP_RSB |
| kCatAlu, // OP_RSC |
| kCatAlu, // OP_SBC |
| kCatAlu, // OP_SMLAL |
| kCatAlu, // OP_SMULL |
| kCatCoproc | kCatStore, // OP_STC |
| kCatStore | kCatMultiple, // OP_STM |
| kCatStore | kCatWord, // OP_STR |
| kCatStore | kCatByte, // OP_STRB |
| kCatStore | kCatByte, // OP_STRBT |
| kCatStore | kCatHalf, // OP_STRH |
| kCatStore | kCatWord, // OP_STRT |
| kCatAlu, // OP_SUB |
| 0, // OP_SWI |
| kCatLoad | kCatStore, // OP_SWP |
| kCatLoad | kCatStore | kCatByte, // OP_SWPB |
| kCatAlu, // OP_TEQ |
| kCatAlu, // OP_TST |
| kCatAlu, // OP_UMLAL |
| kCatAlu, // OP_UMULL |
| |
| 0, // OP_THUMB_UNDEFINED, |
| kCatAlu, // OP_THUMB_ADC, |
| kCatAlu, // OP_THUMB_ADD, |
| kCatAlu, // OP_THUMB_AND, |
| kCatAlu, // OP_THUMB_ASR, |
| kCatBranch, // OP_THUMB_B, |
| kCatAlu, // OP_THUMB_BIC, |
| 0, // OP_THUMB_BKPT, |
| kCatBranch | kCatBranchLink, // OP_THUMB_BL, |
| kCatBranch | kCatBranchLink | kCatBranchExch, // OP_THUMB_BLX, |
| kCatBranch | kCatBranchExch, // OP_THUMB_BX, |
| kCatAlu, // OP_THUMB_CMN, |
| kCatAlu, // OP_THUMB_CMP, |
| kCatAlu, // OP_THUMB_EOR, |
| kCatLoad | kCatMultiple, // OP_THUMB_LDMIA, |
| kCatLoad | kCatWord, // OP_THUMB_LDR, |
| kCatLoad | kCatByte, // OP_THUMB_LDRB, |
| kCatLoad | kCatHalf, // OP_THUMB_LDRH, |
| kCatLoad | kCatByte | kCatSigned, // OP_THUMB_LDRSB, |
| kCatLoad | kCatHalf | kCatSigned, // OP_THUMB_LDRSH, |
| kCatAlu, // OP_THUMB_LSL, |
| kCatAlu, // OP_THUMB_LSR, |
| kCatAlu, // OP_THUMB_MOV, |
| kCatAlu, // OP_THUMB_MUL, |
| kCatAlu, // OP_THUMB_MVN, |
| kCatAlu, // OP_THUMB_NEG, |
| kCatAlu, // OP_THUMB_ORR, |
| kCatLoad | kCatMultiple, // OP_THUMB_POP, |
| kCatStore | kCatMultiple, // OP_THUMB_PUSH, |
| kCatAlu, // OP_THUMB_ROR, |
| kCatAlu, // OP_THUMB_SBC, |
| kCatStore | kCatMultiple, // OP_THUMB_STMIA, |
| kCatStore | kCatWord, // OP_THUMB_STR, |
| kCatStore | kCatByte, // OP_THUMB_STRB, |
| kCatStore | kCatHalf, // OP_THUMB_STRH, |
| kCatAlu, // OP_THUMB_SUB, |
| 0, // OP_THUMB_SWI, |
| kCatAlu, // OP_THUMB_TST, |
| |
| 0, // OP_END |
| }; |
| |
| const char *opcode_names[] = { |
| "invalid", |
| "undefined", |
| "adc", |
| "add", |
| "and", |
| "b", |
| "bl", |
| "bic", |
| "bkpt", |
| "blx", |
| "bx", |
| "cdp", |
| "clz", |
| "cmn", |
| "cmp", |
| "eor", |
| "ldc", |
| "ldm", |
| "ldr", |
| "ldrb", |
| "ldrbt", |
| "ldrh", |
| "ldrsb", |
| "ldrsh", |
| "ldrt", |
| "mcr", |
| "mla", |
| "mov", |
| "mrc", |
| "mrs", |
| "msr", |
| "mul", |
| "mvn", |
| "orr", |
| "pld", |
| "rsb", |
| "rsc", |
| "sbc", |
| "smlal", |
| "smull", |
| "stc", |
| "stm", |
| "str", |
| "strb", |
| "strbt", |
| "strh", |
| "strt", |
| "sub", |
| "swi", |
| "swp", |
| "swpb", |
| "teq", |
| "tst", |
| "umlal", |
| "umull", |
| |
| "undefined", |
| "adc", |
| "add", |
| "and", |
| "asr", |
| "b", |
| "bic", |
| "bkpt", |
| "bl", |
| "blx", |
| "bx", |
| "cmn", |
| "cmp", |
| "eor", |
| "ldmia", |
| "ldr", |
| "ldrb", |
| "ldrh", |
| "ldrsb", |
| "ldrsh", |
| "lsl", |
| "lsr", |
| "mov", |
| "mul", |
| "mvn", |
| "neg", |
| "orr", |
| "pop", |
| "push", |
| "ror", |
| "sbc", |
| "stmia", |
| "str", |
| "strb", |
| "strh", |
| "sub", |
| "swi", |
| "tst", |
| |
| NULL |
| }; |