Home | History | Annotate | Download | only in qtools
      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 };
    205