blob: 41bef3a589c48b25f68ca19e4406ae8ffbd65043 [file] [log] [blame]
The Android Open Source Project5c118522008-10-21 07:00:00 -07001// 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
8uint32_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
107const 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};