• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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