The Android Open Source Project | 5c11852 | 2008-10-21 07:00:00 -0700 | [diff] [blame] | 1 | // Copyright 2006 The Android Open Source Project |
| 2 | |
| 3 | #include <stdio.h> |
| 4 | #include <inttypes.h> |
| 5 | #include "opcode.h" |
| 6 | |
| 7 | // Note: this array depends on the Opcode enum defined in opcode.h |
| 8 | uint32_t opcode_flags[] = { |
| 9 | 0, // OP_INVALID |
| 10 | 0, // OP_UNDEFINED |
| 11 | kCatAlu, // OP_ADC |
| 12 | kCatAlu, // OP_ADD |
| 13 | kCatAlu, // OP_AND |
| 14 | kCatBranch, // OP_B |
| 15 | kCatBranch | kCatBranchLink, // OP_BL |
| 16 | kCatAlu, // OP_BIC |
| 17 | 0, // OP_BKPT |
| 18 | kCatBranch | kCatBranchLink | kCatBranchExch, // OP_BLX |
| 19 | kCatBranch | kCatBranchExch, // OP_BX |
| 20 | kCatCoproc, // OP_CDP |
| 21 | kCatAlu, // OP_CLZ |
| 22 | kCatAlu, // OP_CMN |
| 23 | kCatAlu, // OP_CMP |
| 24 | kCatAlu, // OP_EOR |
| 25 | kCatCoproc | kCatLoad, // OP_LDC |
| 26 | kCatLoad | kCatMultiple, // OP_LDM |
| 27 | kCatLoad | kCatWord, // OP_LDR |
| 28 | kCatLoad | kCatByte, // OP_LDRB |
| 29 | kCatLoad | kCatByte, // OP_LDRBT |
| 30 | kCatLoad | kCatHalf, // OP_LDRH |
| 31 | kCatLoad | kCatByte | kCatSigned, // OP_LDRSB |
| 32 | kCatLoad | kCatHalf | kCatSigned, // OP_LDRSH |
| 33 | kCatLoad | kCatWord, // OP_LDRT |
| 34 | kCatCoproc, // OP_MCR |
| 35 | kCatAlu, // OP_MLA |
| 36 | kCatAlu, // OP_MOV |
| 37 | kCatCoproc, // OP_MRC |
| 38 | 0, // OP_MRS |
| 39 | 0, // OP_MSR |
| 40 | kCatAlu, // OP_MUL |
| 41 | kCatAlu, // OP_MVN |
| 42 | kCatAlu, // OP_ORR |
| 43 | 0, // OP_PLD |
| 44 | kCatAlu, // OP_RSB |
| 45 | kCatAlu, // OP_RSC |
| 46 | kCatAlu, // OP_SBC |
| 47 | kCatAlu, // OP_SMLAL |
| 48 | kCatAlu, // OP_SMULL |
| 49 | kCatCoproc | kCatStore, // OP_STC |
| 50 | kCatStore | kCatMultiple, // OP_STM |
| 51 | kCatStore | kCatWord, // OP_STR |
| 52 | kCatStore | kCatByte, // OP_STRB |
| 53 | kCatStore | kCatByte, // OP_STRBT |
| 54 | kCatStore | kCatHalf, // OP_STRH |
| 55 | kCatStore | kCatWord, // OP_STRT |
| 56 | kCatAlu, // OP_SUB |
| 57 | 0, // OP_SWI |
| 58 | kCatLoad | kCatStore, // OP_SWP |
| 59 | kCatLoad | kCatStore | kCatByte, // OP_SWPB |
| 60 | kCatAlu, // OP_TEQ |
| 61 | kCatAlu, // OP_TST |
| 62 | kCatAlu, // OP_UMLAL |
| 63 | kCatAlu, // OP_UMULL |
| 64 | |
| 65 | 0, // OP_THUMB_UNDEFINED, |
| 66 | kCatAlu, // OP_THUMB_ADC, |
| 67 | kCatAlu, // OP_THUMB_ADD, |
| 68 | kCatAlu, // OP_THUMB_AND, |
| 69 | kCatAlu, // OP_THUMB_ASR, |
| 70 | kCatBranch, // OP_THUMB_B, |
| 71 | kCatAlu, // OP_THUMB_BIC, |
| 72 | 0, // OP_THUMB_BKPT, |
| 73 | kCatBranch | kCatBranchLink, // OP_THUMB_BL, |
| 74 | kCatBranch | kCatBranchLink | kCatBranchExch, // OP_THUMB_BLX, |
| 75 | kCatBranch | kCatBranchExch, // OP_THUMB_BX, |
| 76 | kCatAlu, // OP_THUMB_CMN, |
| 77 | kCatAlu, // OP_THUMB_CMP, |
| 78 | kCatAlu, // OP_THUMB_EOR, |
| 79 | kCatLoad | kCatMultiple, // OP_THUMB_LDMIA, |
| 80 | kCatLoad | kCatWord, // OP_THUMB_LDR, |
| 81 | kCatLoad | kCatByte, // OP_THUMB_LDRB, |
| 82 | kCatLoad | kCatHalf, // OP_THUMB_LDRH, |
| 83 | kCatLoad | kCatByte | kCatSigned, // OP_THUMB_LDRSB, |
| 84 | kCatLoad | kCatHalf | kCatSigned, // OP_THUMB_LDRSH, |
| 85 | kCatAlu, // OP_THUMB_LSL, |
| 86 | kCatAlu, // OP_THUMB_LSR, |
| 87 | kCatAlu, // OP_THUMB_MOV, |
| 88 | kCatAlu, // OP_THUMB_MUL, |
| 89 | kCatAlu, // OP_THUMB_MVN, |
| 90 | kCatAlu, // OP_THUMB_NEG, |
| 91 | kCatAlu, // OP_THUMB_ORR, |
| 92 | kCatLoad | kCatMultiple, // OP_THUMB_POP, |
| 93 | kCatStore | kCatMultiple, // OP_THUMB_PUSH, |
| 94 | kCatAlu, // OP_THUMB_ROR, |
| 95 | kCatAlu, // OP_THUMB_SBC, |
| 96 | kCatStore | kCatMultiple, // OP_THUMB_STMIA, |
| 97 | kCatStore | kCatWord, // OP_THUMB_STR, |
| 98 | kCatStore | kCatByte, // OP_THUMB_STRB, |
| 99 | kCatStore | kCatHalf, // OP_THUMB_STRH, |
| 100 | kCatAlu, // OP_THUMB_SUB, |
| 101 | 0, // OP_THUMB_SWI, |
| 102 | kCatAlu, // OP_THUMB_TST, |
| 103 | |
| 104 | 0, // OP_END |
| 105 | }; |
| 106 | |
| 107 | const char *opcode_names[] = { |
| 108 | "invalid", |
| 109 | "undefined", |
| 110 | "adc", |
| 111 | "add", |
| 112 | "and", |
| 113 | "b", |
| 114 | "bl", |
| 115 | "bic", |
| 116 | "bkpt", |
| 117 | "blx", |
| 118 | "bx", |
| 119 | "cdp", |
| 120 | "clz", |
| 121 | "cmn", |
| 122 | "cmp", |
| 123 | "eor", |
| 124 | "ldc", |
| 125 | "ldm", |
| 126 | "ldr", |
| 127 | "ldrb", |
| 128 | "ldrbt", |
| 129 | "ldrh", |
| 130 | "ldrsb", |
| 131 | "ldrsh", |
| 132 | "ldrt", |
| 133 | "mcr", |
| 134 | "mla", |
| 135 | "mov", |
| 136 | "mrc", |
| 137 | "mrs", |
| 138 | "msr", |
| 139 | "mul", |
| 140 | "mvn", |
| 141 | "orr", |
| 142 | "pld", |
| 143 | "rsb", |
| 144 | "rsc", |
| 145 | "sbc", |
| 146 | "smlal", |
| 147 | "smull", |
| 148 | "stc", |
| 149 | "stm", |
| 150 | "str", |
| 151 | "strb", |
| 152 | "strbt", |
| 153 | "strh", |
| 154 | "strt", |
| 155 | "sub", |
| 156 | "swi", |
| 157 | "swp", |
| 158 | "swpb", |
| 159 | "teq", |
| 160 | "tst", |
| 161 | "umlal", |
| 162 | "umull", |
| 163 | |
| 164 | "undefined", |
| 165 | "adc", |
| 166 | "add", |
| 167 | "and", |
| 168 | "asr", |
| 169 | "b", |
| 170 | "bic", |
| 171 | "bkpt", |
| 172 | "bl", |
| 173 | "blx", |
| 174 | "bx", |
| 175 | "cmn", |
| 176 | "cmp", |
| 177 | "eor", |
| 178 | "ldmia", |
| 179 | "ldr", |
| 180 | "ldrb", |
| 181 | "ldrh", |
| 182 | "ldrsb", |
| 183 | "ldrsh", |
| 184 | "lsl", |
| 185 | "lsr", |
| 186 | "mov", |
| 187 | "mul", |
| 188 | "mvn", |
| 189 | "neg", |
| 190 | "orr", |
| 191 | "pop", |
| 192 | "push", |
| 193 | "ror", |
| 194 | "sbc", |
| 195 | "stmia", |
| 196 | "str", |
| 197 | "strb", |
| 198 | "strh", |
| 199 | "sub", |
| 200 | "swi", |
| 201 | "tst", |
| 202 | |
| 203 | NULL |
| 204 | }; |