src/arm/emitter-arm.h (view raw)
1/* Copyright (c) 2013-2014 Jeffrey Pfau
2 *
3 * This Source Code Form is subject to the terms of the Mozilla Public
4 * License, v. 2.0. If a copy of the MPL was not distributed with this
5 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
6#ifndef EMITTER_ARM_H
7#define EMITTER_ARM_H
8
9#include "emitter-inlines.h"
10
11#define DECLARE_INSTRUCTION_ARM(EMITTER, NAME) \
12 EMITTER ## NAME
13
14#define DECLARE_ARM_ALU_IMMEDIATE_BLOCK(EMITTER, ALU) \
15 DO_8(DECLARE_INSTRUCTION_ARM(EMITTER, ALU ## I)), \
16 DO_8(DECLARE_INSTRUCTION_ARM(EMITTER, ALU ## I))
17
18#define DECLARE_ARM_ALU_BLOCK(EMITTER, ALU, EX1, EX2, EX3, EX4) \
19 DECLARE_INSTRUCTION_ARM(EMITTER, ALU ## _LSL), \
20 DECLARE_INSTRUCTION_ARM(EMITTER, ALU ## _LSL), \
21 DECLARE_INSTRUCTION_ARM(EMITTER, ALU ## _LSR), \
22 DECLARE_INSTRUCTION_ARM(EMITTER, ALU ## _LSR), \
23 DECLARE_INSTRUCTION_ARM(EMITTER, ALU ## _ASR), \
24 DECLARE_INSTRUCTION_ARM(EMITTER, ALU ## _ASR), \
25 DECLARE_INSTRUCTION_ARM(EMITTER, ALU ## _ROR), \
26 DECLARE_INSTRUCTION_ARM(EMITTER, ALU ## _ROR), \
27 DECLARE_INSTRUCTION_ARM(EMITTER, ALU ## _LSL), \
28 DECLARE_INSTRUCTION_ARM(EMITTER, EX1), \
29 DECLARE_INSTRUCTION_ARM(EMITTER, ALU ## _LSR), \
30 DECLARE_INSTRUCTION_ARM(EMITTER, EX2), \
31 DECLARE_INSTRUCTION_ARM(EMITTER, ALU ## _ASR), \
32 DECLARE_INSTRUCTION_ARM(EMITTER, EX3), \
33 DECLARE_INSTRUCTION_ARM(EMITTER, ALU ## _ROR), \
34 DECLARE_INSTRUCTION_ARM(EMITTER, EX4)
35
36#define DECLARE_ARM_LOAD_STORE_IMMEDIATE_BLOCK(EMITTER, NAME, P, U, W) \
37 DO_8(DECLARE_INSTRUCTION_ARM(EMITTER, NAME ## I ## P ## U ## W)), \
38 DO_8(DECLARE_INSTRUCTION_ARM(EMITTER, NAME ## I ## P ## U ## W))
39
40#define DECLARE_ARM_LOAD_STORE_BLOCK(EMITTER, NAME, P, U, W) \
41 DECLARE_INSTRUCTION_ARM(EMITTER, NAME ## _LSL_ ## P ## U ## W), \
42 DECLARE_INSTRUCTION_ARM(EMITTER, ILL), \
43 DECLARE_INSTRUCTION_ARM(EMITTER, NAME ## _LSR_ ## P ## U ## W), \
44 DECLARE_INSTRUCTION_ARM(EMITTER, ILL), \
45 DECLARE_INSTRUCTION_ARM(EMITTER, NAME ## _ASR_ ## P ## U ## W), \
46 DECLARE_INSTRUCTION_ARM(EMITTER, ILL), \
47 DECLARE_INSTRUCTION_ARM(EMITTER, NAME ## _ROR_ ## P ## U ## W), \
48 DECLARE_INSTRUCTION_ARM(EMITTER, ILL), \
49 DECLARE_INSTRUCTION_ARM(EMITTER, NAME ## _LSL_ ## P ## U ## W), \
50 DECLARE_INSTRUCTION_ARM(EMITTER, ILL), \
51 DECLARE_INSTRUCTION_ARM(EMITTER, NAME ## _LSR_ ## P ## U ## W), \
52 DECLARE_INSTRUCTION_ARM(EMITTER, ILL), \
53 DECLARE_INSTRUCTION_ARM(EMITTER, NAME ## _ASR_ ## P ## U ## W), \
54 DECLARE_INSTRUCTION_ARM(EMITTER, ILL), \
55 DECLARE_INSTRUCTION_ARM(EMITTER, NAME ## _ROR_ ## P ## U ## W), \
56 DECLARE_INSTRUCTION_ARM(EMITTER, ILL)
57
58#define DECLARE_ARM_LOAD_STORE_MULTIPLE_BLOCK(EMITTER, NAME, MODE, W) \
59 DO_8(DECLARE_INSTRUCTION_ARM(EMITTER, NAME ## MODE ## W)), \
60 DO_8(DECLARE_INSTRUCTION_ARM(EMITTER, NAME ## MODE ## W))
61
62#define DECLARE_ARM_BRANCH_BLOCK(EMITTER, NAME) \
63 DO_256(DECLARE_INSTRUCTION_ARM(EMITTER, NAME))
64
65// TODO: Support coprocessors
66#define DECLARE_ARM_LOAD_STORE_COPROCESSOR_BLOCK(EMITTER, NAME, P, U, N, W) \
67 DO_8(DECLARE_INSTRUCTION_ARM(EMITTER, NAME)), \
68 DO_8(DECLARE_INSTRUCTION_ARM(EMITTER, NAME))
69
70#define DECLARE_ARM_COPROCESSOR_BLOCK(EMITTER, NAME1, NAME2, NAME3) \
71 DO_8(DO_INTERLACE( \
72 DO_8(DO_INTERLACE(DECLARE_INSTRUCTION_ARM(EMITTER, NAME1), DECLARE_INSTRUCTION_ARM(EMITTER, NAME2))), \
73 DO_8(DO_INTERLACE(DECLARE_INSTRUCTION_ARM(EMITTER, NAME1), DECLARE_INSTRUCTION_ARM(EMITTER, NAME3)))))
74
75#define DECLARE_ARM_SWI_BLOCK(EMITTER) \
76 DO_256(DECLARE_INSTRUCTION_ARM(EMITTER, SWI))
77
78#define DECLARE_ARMV4_EMITTER_BLOCK(EMITTER) \
79 DECLARE_ARM_ALU_BLOCK(EMITTER, AND, MUL, STRH, ILL, ILL), \
80 DECLARE_ARM_ALU_BLOCK(EMITTER, ANDS, MULS, LDRH, LDRSB, LDRSH), \
81 DECLARE_ARM_ALU_BLOCK(EMITTER, EOR, MLA, STRH, ILL, ILL), \
82 DECLARE_ARM_ALU_BLOCK(EMITTER, EORS, MLAS, LDRH, LDRSB, LDRSH), \
83 DECLARE_ARM_ALU_BLOCK(EMITTER, SUB, ILL, STRHI, ILL, ILL), \
84 DECLARE_ARM_ALU_BLOCK(EMITTER, SUBS, ILL, LDRHI, LDRSBI, LDRSHI), \
85 DECLARE_ARM_ALU_BLOCK(EMITTER, RSB, ILL, STRHI, ILL, ILL), \
86 DECLARE_ARM_ALU_BLOCK(EMITTER, RSBS, ILL, LDRHI, LDRSBI, LDRSHI), \
87 DECLARE_ARM_ALU_BLOCK(EMITTER, ADD, UMULL, STRHU, ILL, ILL), \
88 DECLARE_ARM_ALU_BLOCK(EMITTER, ADDS, UMULLS, LDRHU, LDRSBU, LDRSHU), \
89 DECLARE_ARM_ALU_BLOCK(EMITTER, ADC, UMLAL, STRHU, ILL, ILL), \
90 DECLARE_ARM_ALU_BLOCK(EMITTER, ADCS, UMLALS, LDRHU, LDRSBU, LDRSHU), \
91 DECLARE_ARM_ALU_BLOCK(EMITTER, SBC, SMULL, STRHIU, ILL, ILL), \
92 DECLARE_ARM_ALU_BLOCK(EMITTER, SBCS, SMULLS, LDRHIU, LDRSBIU, LDRSHIU), \
93 DECLARE_ARM_ALU_BLOCK(EMITTER, RSC, SMLAL, STRHIU, ILL, ILL), \
94 DECLARE_ARM_ALU_BLOCK(EMITTER, RSCS, SMLALS, LDRHIU, LDRSBIU, LDRSHIU), \
95 DECLARE_INSTRUCTION_ARM(EMITTER, MRS), \
96 DECLARE_INSTRUCTION_ARM(EMITTER, ILL), \
97 DECLARE_INSTRUCTION_ARM(EMITTER, ILL), \
98 DECLARE_INSTRUCTION_ARM(EMITTER, ILL), \
99 DECLARE_INSTRUCTION_ARM(EMITTER, ILL), \
100 DECLARE_INSTRUCTION_ARM(EMITTER, ILL), \
101 DECLARE_INSTRUCTION_ARM(EMITTER, ILL), \
102 DECLARE_INSTRUCTION_ARM(EMITTER, ILL), \
103 DECLARE_INSTRUCTION_ARM(EMITTER, ILL), \
104 DECLARE_INSTRUCTION_ARM(EMITTER, SWP), \
105 DECLARE_INSTRUCTION_ARM(EMITTER, ILL), \
106 DECLARE_INSTRUCTION_ARM(EMITTER, STRHP), \
107 DECLARE_INSTRUCTION_ARM(EMITTER, ILL), \
108 DECLARE_INSTRUCTION_ARM(EMITTER, ILL), \
109 DECLARE_INSTRUCTION_ARM(EMITTER, ILL), \
110 DECLARE_INSTRUCTION_ARM(EMITTER, ILL), \
111 DECLARE_ARM_ALU_BLOCK(EMITTER, TST, ILL, LDRHP, LDRSBP, LDRSHP), \
112 DECLARE_INSTRUCTION_ARM(EMITTER, MSR), \
113 DECLARE_INSTRUCTION_ARM(EMITTER, BX), \
114 DECLARE_INSTRUCTION_ARM(EMITTER, ILL), \
115 DECLARE_INSTRUCTION_ARM(EMITTER, ILL), \
116 DECLARE_INSTRUCTION_ARM(EMITTER, ILL), \
117 DECLARE_INSTRUCTION_ARM(EMITTER, ILL), \
118 DECLARE_INSTRUCTION_ARM(EMITTER, ILL), \
119 DECLARE_INSTRUCTION_ARM(EMITTER, BKPT), \
120 DECLARE_INSTRUCTION_ARM(EMITTER, ILL), \
121 DECLARE_INSTRUCTION_ARM(EMITTER, ILL), \
122 DECLARE_INSTRUCTION_ARM(EMITTER, ILL), \
123 DECLARE_INSTRUCTION_ARM(EMITTER, STRHPW), \
124 DECLARE_INSTRUCTION_ARM(EMITTER, ILL), \
125 DECLARE_INSTRUCTION_ARM(EMITTER, ILL), \
126 DECLARE_INSTRUCTION_ARM(EMITTER, ILL), \
127 DECLARE_INSTRUCTION_ARM(EMITTER, ILL), \
128 DECLARE_ARM_ALU_BLOCK(EMITTER, TEQ, ILL, LDRHPW, LDRSBPW, LDRSHPW), \
129 DECLARE_INSTRUCTION_ARM(EMITTER, MRSR), \
130 DECLARE_INSTRUCTION_ARM(EMITTER, ILL), \
131 DECLARE_INSTRUCTION_ARM(EMITTER, ILL), \
132 DECLARE_INSTRUCTION_ARM(EMITTER, ILL), \
133 DECLARE_INSTRUCTION_ARM(EMITTER, ILL), \
134 DECLARE_INSTRUCTION_ARM(EMITTER, ILL), \
135 DECLARE_INSTRUCTION_ARM(EMITTER, ILL), \
136 DECLARE_INSTRUCTION_ARM(EMITTER, ILL), \
137 DECLARE_INSTRUCTION_ARM(EMITTER, ILL), \
138 DECLARE_INSTRUCTION_ARM(EMITTER, SWPB), \
139 DECLARE_INSTRUCTION_ARM(EMITTER, ILL), \
140 DECLARE_INSTRUCTION_ARM(EMITTER, STRHIP), \
141 DECLARE_INSTRUCTION_ARM(EMITTER, ILL), \
142 DECLARE_INSTRUCTION_ARM(EMITTER, ILL), \
143 DECLARE_INSTRUCTION_ARM(EMITTER, ILL), \
144 DECLARE_INSTRUCTION_ARM(EMITTER, ILL), \
145 DECLARE_ARM_ALU_BLOCK(EMITTER, CMP, ILL, LDRHIP, LDRSBIP, LDRSHIP), \
146 DECLARE_INSTRUCTION_ARM(EMITTER, MSRR), \
147 DECLARE_INSTRUCTION_ARM(EMITTER, ILL), \
148 DECLARE_INSTRUCTION_ARM(EMITTER, ILL), \
149 DECLARE_INSTRUCTION_ARM(EMITTER, ILL), \
150 DECLARE_INSTRUCTION_ARM(EMITTER, ILL), \
151 DECLARE_INSTRUCTION_ARM(EMITTER, ILL), \
152 DECLARE_INSTRUCTION_ARM(EMITTER, ILL), \
153 DECLARE_INSTRUCTION_ARM(EMITTER, ILL), \
154 DECLARE_INSTRUCTION_ARM(EMITTER, ILL), \
155 DECLARE_INSTRUCTION_ARM(EMITTER, ILL), \
156 DECLARE_INSTRUCTION_ARM(EMITTER, ILL), \
157 DECLARE_INSTRUCTION_ARM(EMITTER, STRHIPW), \
158 DECLARE_INSTRUCTION_ARM(EMITTER, ILL), \
159 DECLARE_INSTRUCTION_ARM(EMITTER, ILL), \
160 DECLARE_INSTRUCTION_ARM(EMITTER, ILL), \
161 DECLARE_INSTRUCTION_ARM(EMITTER, ILL), \
162 DECLARE_ARM_ALU_BLOCK(EMITTER, CMN, ILL, LDRHIPW, LDRSBIPW, LDRSHIPW), \
163 DECLARE_ARM_ALU_BLOCK(EMITTER, ORR, SMLAL, STRHPU, ILL, ILL), \
164 DECLARE_ARM_ALU_BLOCK(EMITTER, ORRS, SMLALS, LDRHPU, LDRSBPU, LDRSHPU), \
165 DECLARE_ARM_ALU_BLOCK(EMITTER, MOV, SMLAL, STRHPUW, ILL, ILL), \
166 DECLARE_ARM_ALU_BLOCK(EMITTER, MOVS, SMLALS, LDRHPUW, LDRSBPUW, LDRSHPUW), \
167 DECLARE_ARM_ALU_BLOCK(EMITTER, BIC, SMLAL, STRHIPU, ILL, ILL), \
168 DECLARE_ARM_ALU_BLOCK(EMITTER, BICS, SMLALS, LDRHIPU, LDRSBIPU, LDRSHIPU), \
169 DECLARE_ARM_ALU_BLOCK(EMITTER, MVN, SMLAL, STRHIPUW, ILL, ILL), \
170 DECLARE_ARM_ALU_BLOCK(EMITTER, MVNS, SMLALS, LDRHIPUW, LDRSBIPUW, LDRSHIPUW), \
171 DECLARE_ARM_ALU_IMMEDIATE_BLOCK(EMITTER, AND), \
172 DECLARE_ARM_ALU_IMMEDIATE_BLOCK(EMITTER, ANDS), \
173 DECLARE_ARM_ALU_IMMEDIATE_BLOCK(EMITTER, EOR), \
174 DECLARE_ARM_ALU_IMMEDIATE_BLOCK(EMITTER, EORS), \
175 DECLARE_ARM_ALU_IMMEDIATE_BLOCK(EMITTER, SUB), \
176 DECLARE_ARM_ALU_IMMEDIATE_BLOCK(EMITTER, SUBS), \
177 DECLARE_ARM_ALU_IMMEDIATE_BLOCK(EMITTER, RSB), \
178 DECLARE_ARM_ALU_IMMEDIATE_BLOCK(EMITTER, RSBS), \
179 DECLARE_ARM_ALU_IMMEDIATE_BLOCK(EMITTER, ADD), \
180 DECLARE_ARM_ALU_IMMEDIATE_BLOCK(EMITTER, ADDS), \
181 DECLARE_ARM_ALU_IMMEDIATE_BLOCK(EMITTER, ADC), \
182 DECLARE_ARM_ALU_IMMEDIATE_BLOCK(EMITTER, ADCS), \
183 DECLARE_ARM_ALU_IMMEDIATE_BLOCK(EMITTER, SBC), \
184 DECLARE_ARM_ALU_IMMEDIATE_BLOCK(EMITTER, SBCS), \
185 DECLARE_ARM_ALU_IMMEDIATE_BLOCK(EMITTER, RSC), \
186 DECLARE_ARM_ALU_IMMEDIATE_BLOCK(EMITTER, RSCS), \
187 DECLARE_ARM_ALU_IMMEDIATE_BLOCK(EMITTER, TST), \
188 DECLARE_ARM_ALU_IMMEDIATE_BLOCK(EMITTER, TST), \
189 DECLARE_ARM_ALU_IMMEDIATE_BLOCK(EMITTER, MSR), \
190 DECLARE_ARM_ALU_IMMEDIATE_BLOCK(EMITTER, TEQ), \
191 DECLARE_ARM_ALU_IMMEDIATE_BLOCK(EMITTER, CMP), \
192 DECLARE_ARM_ALU_IMMEDIATE_BLOCK(EMITTER, CMP), \
193 DECLARE_ARM_ALU_IMMEDIATE_BLOCK(EMITTER, MSRR), \
194 DECLARE_ARM_ALU_IMMEDIATE_BLOCK(EMITTER, CMN), \
195 DECLARE_ARM_ALU_IMMEDIATE_BLOCK(EMITTER, ORR), \
196 DECLARE_ARM_ALU_IMMEDIATE_BLOCK(EMITTER, ORRS), \
197 DECLARE_ARM_ALU_IMMEDIATE_BLOCK(EMITTER, MOV), \
198 DECLARE_ARM_ALU_IMMEDIATE_BLOCK(EMITTER, MOVS), \
199 DECLARE_ARM_ALU_IMMEDIATE_BLOCK(EMITTER, BIC), \
200 DECLARE_ARM_ALU_IMMEDIATE_BLOCK(EMITTER, BICS), \
201 DECLARE_ARM_ALU_IMMEDIATE_BLOCK(EMITTER, MVN), \
202 DECLARE_ARM_ALU_IMMEDIATE_BLOCK(EMITTER, MVNS), \
203 DECLARE_ARM_LOAD_STORE_IMMEDIATE_BLOCK(EMITTER, STR, , , ), \
204 DECLARE_ARM_LOAD_STORE_IMMEDIATE_BLOCK(EMITTER, LDR, , , ), \
205 DECLARE_ARM_LOAD_STORE_IMMEDIATE_BLOCK(EMITTER, STRT, , , ), \
206 DECLARE_ARM_LOAD_STORE_IMMEDIATE_BLOCK(EMITTER, LDRT, , , ), \
207 DECLARE_ARM_LOAD_STORE_IMMEDIATE_BLOCK(EMITTER, STRB, , , ), \
208 DECLARE_ARM_LOAD_STORE_IMMEDIATE_BLOCK(EMITTER, LDRB, , , ), \
209 DECLARE_ARM_LOAD_STORE_IMMEDIATE_BLOCK(EMITTER, STRBT, , , ), \
210 DECLARE_ARM_LOAD_STORE_IMMEDIATE_BLOCK(EMITTER, LDRBT, , , ), \
211 DECLARE_ARM_LOAD_STORE_IMMEDIATE_BLOCK(EMITTER, STR, , U, ), \
212 DECLARE_ARM_LOAD_STORE_IMMEDIATE_BLOCK(EMITTER, LDR, , U, ), \
213 DECLARE_ARM_LOAD_STORE_IMMEDIATE_BLOCK(EMITTER, STRT, , U, ), \
214 DECLARE_ARM_LOAD_STORE_IMMEDIATE_BLOCK(EMITTER, LDRT, , U, ), \
215 DECLARE_ARM_LOAD_STORE_IMMEDIATE_BLOCK(EMITTER, STRB, , U, ), \
216 DECLARE_ARM_LOAD_STORE_IMMEDIATE_BLOCK(EMITTER, LDRB, , U, ), \
217 DECLARE_ARM_LOAD_STORE_IMMEDIATE_BLOCK(EMITTER, STRBT, , U, ), \
218 DECLARE_ARM_LOAD_STORE_IMMEDIATE_BLOCK(EMITTER, LDRBT, , U, ), \
219 DECLARE_ARM_LOAD_STORE_IMMEDIATE_BLOCK(EMITTER, STR, P, , ), \
220 DECLARE_ARM_LOAD_STORE_IMMEDIATE_BLOCK(EMITTER, LDR, P, , ), \
221 DECLARE_ARM_LOAD_STORE_IMMEDIATE_BLOCK(EMITTER, STR, P, , W), \
222 DECLARE_ARM_LOAD_STORE_IMMEDIATE_BLOCK(EMITTER, LDR, P, , W), \
223 DECLARE_ARM_LOAD_STORE_IMMEDIATE_BLOCK(EMITTER, STRB, P, , ), \
224 DECLARE_ARM_LOAD_STORE_IMMEDIATE_BLOCK(EMITTER, LDRB, P, , ), \
225 DECLARE_ARM_LOAD_STORE_IMMEDIATE_BLOCK(EMITTER, STRB, P, , W), \
226 DECLARE_ARM_LOAD_STORE_IMMEDIATE_BLOCK(EMITTER, LDRB, P, , W), \
227 DECLARE_ARM_LOAD_STORE_IMMEDIATE_BLOCK(EMITTER, STR, P, U, ), \
228 DECLARE_ARM_LOAD_STORE_IMMEDIATE_BLOCK(EMITTER, LDR, P, U, ), \
229 DECLARE_ARM_LOAD_STORE_IMMEDIATE_BLOCK(EMITTER, STR, P, U, W), \
230 DECLARE_ARM_LOAD_STORE_IMMEDIATE_BLOCK(EMITTER, LDR, P, U, W), \
231 DECLARE_ARM_LOAD_STORE_IMMEDIATE_BLOCK(EMITTER, STRB, P, U, ), \
232 DECLARE_ARM_LOAD_STORE_IMMEDIATE_BLOCK(EMITTER, LDRB, P, U, ), \
233 DECLARE_ARM_LOAD_STORE_IMMEDIATE_BLOCK(EMITTER, STRB, P, U, W), \
234 DECLARE_ARM_LOAD_STORE_IMMEDIATE_BLOCK(EMITTER, LDRB, P, U, W), \
235 DECLARE_ARM_LOAD_STORE_BLOCK(EMITTER, STR, , , ), \
236 DECLARE_ARM_LOAD_STORE_BLOCK(EMITTER, LDR, , , ), \
237 DECLARE_ARM_LOAD_STORE_BLOCK(EMITTER, STRT, , , ), \
238 DECLARE_ARM_LOAD_STORE_BLOCK(EMITTER, LDRT, , , ), \
239 DECLARE_ARM_LOAD_STORE_BLOCK(EMITTER, STRB, , , ), \
240 DECLARE_ARM_LOAD_STORE_BLOCK(EMITTER, LDRB, , , ), \
241 DECLARE_ARM_LOAD_STORE_BLOCK(EMITTER, STRBT, , , ), \
242 DECLARE_ARM_LOAD_STORE_BLOCK(EMITTER, LDRBT, , , ), \
243 DECLARE_ARM_LOAD_STORE_BLOCK(EMITTER, STR, , U, ), \
244 DECLARE_ARM_LOAD_STORE_BLOCK(EMITTER, LDR, , U, ), \
245 DECLARE_ARM_LOAD_STORE_BLOCK(EMITTER, STRT, , U, ), \
246 DECLARE_ARM_LOAD_STORE_BLOCK(EMITTER, LDRT, , U, ), \
247 DECLARE_ARM_LOAD_STORE_BLOCK(EMITTER, STRB, , U, ), \
248 DECLARE_ARM_LOAD_STORE_BLOCK(EMITTER, LDRB, , U, ), \
249 DECLARE_ARM_LOAD_STORE_BLOCK(EMITTER, STRBT, , U, ), \
250 DECLARE_ARM_LOAD_STORE_BLOCK(EMITTER, LDRBT, , U, ), \
251 DECLARE_ARM_LOAD_STORE_BLOCK(EMITTER, STR, P, , ), \
252 DECLARE_ARM_LOAD_STORE_BLOCK(EMITTER, LDR, P, , ), \
253 DECLARE_ARM_LOAD_STORE_BLOCK(EMITTER, STR, P, , W), \
254 DECLARE_ARM_LOAD_STORE_BLOCK(EMITTER, LDR, P, , W), \
255 DECLARE_ARM_LOAD_STORE_BLOCK(EMITTER, STRB, P, , ), \
256 DECLARE_ARM_LOAD_STORE_BLOCK(EMITTER, LDRB, P, , ), \
257 DECLARE_ARM_LOAD_STORE_BLOCK(EMITTER, STRB, P, , W), \
258 DECLARE_ARM_LOAD_STORE_BLOCK(EMITTER, LDRB, P, , W), \
259 DECLARE_ARM_LOAD_STORE_BLOCK(EMITTER, STR, P, U, ), \
260 DECLARE_ARM_LOAD_STORE_BLOCK(EMITTER, LDR, P, U, ), \
261 DECLARE_ARM_LOAD_STORE_BLOCK(EMITTER, STR, P, U, W), \
262 DECLARE_ARM_LOAD_STORE_BLOCK(EMITTER, LDR, P, U, W), \
263 DECLARE_ARM_LOAD_STORE_BLOCK(EMITTER, STRB, P, U, ), \
264 DECLARE_ARM_LOAD_STORE_BLOCK(EMITTER, LDRB, P, U, ), \
265 DECLARE_ARM_LOAD_STORE_BLOCK(EMITTER, STRB, P, U, W), \
266 DECLARE_ARM_LOAD_STORE_BLOCK(EMITTER, LDRB, P, U, W), \
267 DECLARE_ARM_LOAD_STORE_MULTIPLE_BLOCK(EMITTER, STM, DA, ), \
268 DECLARE_ARM_LOAD_STORE_MULTIPLE_BLOCK(EMITTER, LDM, DA, ), \
269 DECLARE_ARM_LOAD_STORE_MULTIPLE_BLOCK(EMITTER, STM, DA, W), \
270 DECLARE_ARM_LOAD_STORE_MULTIPLE_BLOCK(EMITTER, LDM, DA, W), \
271 DECLARE_ARM_LOAD_STORE_MULTIPLE_BLOCK(EMITTER, STMS, DA, ), \
272 DECLARE_ARM_LOAD_STORE_MULTIPLE_BLOCK(EMITTER, LDMS, DA, ), \
273 DECLARE_ARM_LOAD_STORE_MULTIPLE_BLOCK(EMITTER, STMS, DA, W), \
274 DECLARE_ARM_LOAD_STORE_MULTIPLE_BLOCK(EMITTER, LDMS, DA, W), \
275 DECLARE_ARM_LOAD_STORE_MULTIPLE_BLOCK(EMITTER, STM, IA, ), \
276 DECLARE_ARM_LOAD_STORE_MULTIPLE_BLOCK(EMITTER, LDM, IA, ), \
277 DECLARE_ARM_LOAD_STORE_MULTIPLE_BLOCK(EMITTER, STM, IA, W), \
278 DECLARE_ARM_LOAD_STORE_MULTIPLE_BLOCK(EMITTER, LDM, IA, W), \
279 DECLARE_ARM_LOAD_STORE_MULTIPLE_BLOCK(EMITTER, STMS, IA, ), \
280 DECLARE_ARM_LOAD_STORE_MULTIPLE_BLOCK(EMITTER, LDMS, IA, ), \
281 DECLARE_ARM_LOAD_STORE_MULTIPLE_BLOCK(EMITTER, STMS, IA, W), \
282 DECLARE_ARM_LOAD_STORE_MULTIPLE_BLOCK(EMITTER, LDMS, IA, W), \
283 DECLARE_ARM_LOAD_STORE_MULTIPLE_BLOCK(EMITTER, STM, DB, ), \
284 DECLARE_ARM_LOAD_STORE_MULTIPLE_BLOCK(EMITTER, LDM, DB, ), \
285 DECLARE_ARM_LOAD_STORE_MULTIPLE_BLOCK(EMITTER, STM, DB, W), \
286 DECLARE_ARM_LOAD_STORE_MULTIPLE_BLOCK(EMITTER, LDM, DB, W), \
287 DECLARE_ARM_LOAD_STORE_MULTIPLE_BLOCK(EMITTER, STMS, DB, ), \
288 DECLARE_ARM_LOAD_STORE_MULTIPLE_BLOCK(EMITTER, LDMS, DB, ), \
289 DECLARE_ARM_LOAD_STORE_MULTIPLE_BLOCK(EMITTER, STMS, DB, W), \
290 DECLARE_ARM_LOAD_STORE_MULTIPLE_BLOCK(EMITTER, LDMS, DB, W), \
291 DECLARE_ARM_LOAD_STORE_MULTIPLE_BLOCK(EMITTER, STM, IB, ), \
292 DECLARE_ARM_LOAD_STORE_MULTIPLE_BLOCK(EMITTER, LDM, IB, ), \
293 DECLARE_ARM_LOAD_STORE_MULTIPLE_BLOCK(EMITTER, STM, IB, W), \
294 DECLARE_ARM_LOAD_STORE_MULTIPLE_BLOCK(EMITTER, LDM, IB, W), \
295 DECLARE_ARM_LOAD_STORE_MULTIPLE_BLOCK(EMITTER, STMS, IB, ), \
296 DECLARE_ARM_LOAD_STORE_MULTIPLE_BLOCK(EMITTER, LDMS, IB, ), \
297 DECLARE_ARM_LOAD_STORE_MULTIPLE_BLOCK(EMITTER, STMS, IB, W), \
298 DECLARE_ARM_LOAD_STORE_MULTIPLE_BLOCK(EMITTER, LDMS, IB, W), \
299 DECLARE_ARM_BRANCH_BLOCK(EMITTER, B), \
300 DECLARE_ARM_BRANCH_BLOCK(EMITTER, BL), \
301 DECLARE_ARM_LOAD_STORE_COPROCESSOR_BLOCK(EMITTER, STC, , , , ), \
302 DECLARE_ARM_LOAD_STORE_COPROCESSOR_BLOCK(EMITTER, LDC, , , , ), \
303 DECLARE_ARM_LOAD_STORE_COPROCESSOR_BLOCK(EMITTER, STC, , , , W), \
304 DECLARE_ARM_LOAD_STORE_COPROCESSOR_BLOCK(EMITTER, LDC, , , , W), \
305 DECLARE_ARM_LOAD_STORE_COPROCESSOR_BLOCK(EMITTER, STC, , , N, ), \
306 DECLARE_ARM_LOAD_STORE_COPROCESSOR_BLOCK(EMITTER, LDC, , , N, ), \
307 DECLARE_ARM_LOAD_STORE_COPROCESSOR_BLOCK(EMITTER, STC, , , N, W), \
308 DECLARE_ARM_LOAD_STORE_COPROCESSOR_BLOCK(EMITTER, LDC, , , N, W), \
309 DECLARE_ARM_LOAD_STORE_COPROCESSOR_BLOCK(EMITTER, STC, , U, , ), \
310 DECLARE_ARM_LOAD_STORE_COPROCESSOR_BLOCK(EMITTER, LDC, , U, , ), \
311 DECLARE_ARM_LOAD_STORE_COPROCESSOR_BLOCK(EMITTER, STC, , U, , W), \
312 DECLARE_ARM_LOAD_STORE_COPROCESSOR_BLOCK(EMITTER, LDC, , U, , W), \
313 DECLARE_ARM_LOAD_STORE_COPROCESSOR_BLOCK(EMITTER, STC, , U, N, ), \
314 DECLARE_ARM_LOAD_STORE_COPROCESSOR_BLOCK(EMITTER, LDC, , U, N, ), \
315 DECLARE_ARM_LOAD_STORE_COPROCESSOR_BLOCK(EMITTER, STC, , U, N, W), \
316 DECLARE_ARM_LOAD_STORE_COPROCESSOR_BLOCK(EMITTER, LDC, , U, N, W), \
317 DECLARE_ARM_LOAD_STORE_COPROCESSOR_BLOCK(EMITTER, STC, P, , , ), \
318 DECLARE_ARM_LOAD_STORE_COPROCESSOR_BLOCK(EMITTER, LDC, P, , , ), \
319 DECLARE_ARM_LOAD_STORE_COPROCESSOR_BLOCK(EMITTER, STC, P, , , W), \
320 DECLARE_ARM_LOAD_STORE_COPROCESSOR_BLOCK(EMITTER, LDC, P, , , W), \
321 DECLARE_ARM_LOAD_STORE_COPROCESSOR_BLOCK(EMITTER, STC, P, U, N, ), \
322 DECLARE_ARM_LOAD_STORE_COPROCESSOR_BLOCK(EMITTER, LDC, P, U, N, ), \
323 DECLARE_ARM_LOAD_STORE_COPROCESSOR_BLOCK(EMITTER, STC, P, U, N, W), \
324 DECLARE_ARM_LOAD_STORE_COPROCESSOR_BLOCK(EMITTER, LDC, P, U, N, W), \
325 DECLARE_ARM_LOAD_STORE_COPROCESSOR_BLOCK(EMITTER, STC, P, , N, ), \
326 DECLARE_ARM_LOAD_STORE_COPROCESSOR_BLOCK(EMITTER, LDC, P, , N, ), \
327 DECLARE_ARM_LOAD_STORE_COPROCESSOR_BLOCK(EMITTER, STC, P, , N, W), \
328 DECLARE_ARM_LOAD_STORE_COPROCESSOR_BLOCK(EMITTER, LDC, P, , N, W), \
329 DECLARE_ARM_LOAD_STORE_COPROCESSOR_BLOCK(EMITTER, STC, P, U, N, ), \
330 DECLARE_ARM_LOAD_STORE_COPROCESSOR_BLOCK(EMITTER, LDC, P, U, N, ), \
331 DECLARE_ARM_LOAD_STORE_COPROCESSOR_BLOCK(EMITTER, STC, P, U, N, W), \
332 DECLARE_ARM_LOAD_STORE_COPROCESSOR_BLOCK(EMITTER, LDC, P, U, N, W), \
333 DECLARE_ARM_COPROCESSOR_BLOCK(EMITTER, CDP, MCR, MRC), \
334 DECLARE_ARM_SWI_BLOCK(EMITTER)
335
336#define DECLARE_ARMV5_EMITTER_BLOCK(EMITTER) \
337 DECLARE_ARM_ALU_BLOCK(EMITTER, AND, MUL, STRH, ILL, ILL), \
338 DECLARE_ARM_ALU_BLOCK(EMITTER, ANDS, MULS, LDRH, LDRSB, LDRSH), \
339 DECLARE_ARM_ALU_BLOCK(EMITTER, EOR, MLA, STRH, ILL, ILL), \
340 DECLARE_ARM_ALU_BLOCK(EMITTER, EORS, MLAS, LDRH, LDRSB, LDRSH), \
341 DECLARE_ARM_ALU_BLOCK(EMITTER, SUB, ILL, STRHI, ILL, ILL), \
342 DECLARE_ARM_ALU_BLOCK(EMITTER, SUBS, ILL, LDRHI, LDRSBI, LDRSHI), \
343 DECLARE_ARM_ALU_BLOCK(EMITTER, RSB, ILL, STRHI, ILL, ILL), \
344 DECLARE_ARM_ALU_BLOCK(EMITTER, RSBS, ILL, LDRHI, LDRSBI, LDRSHI), \
345 DECLARE_ARM_ALU_BLOCK(EMITTER, ADD, UMULL, STRHU, ILL, ILL), \
346 DECLARE_ARM_ALU_BLOCK(EMITTER, ADDS, UMULLS, LDRHU, LDRSBU, LDRSHU), \
347 DECLARE_ARM_ALU_BLOCK(EMITTER, ADC, UMLAL, STRHU, ILL, ILL), \
348 DECLARE_ARM_ALU_BLOCK(EMITTER, ADCS, UMLALS, LDRHU, LDRSBU, LDRSHU), \
349 DECLARE_ARM_ALU_BLOCK(EMITTER, SBC, SMULL, STRHIU, ILL, ILL), \
350 DECLARE_ARM_ALU_BLOCK(EMITTER, SBCS, SMULLS, LDRHIU, LDRSBIU, LDRSHIU), \
351 DECLARE_ARM_ALU_BLOCK(EMITTER, RSC, SMLAL, STRHIU, ILL, ILL), \
352 DECLARE_ARM_ALU_BLOCK(EMITTER, RSCS, SMLALS, LDRHIU, LDRSBIU, LDRSHIU), \
353 DECLARE_INSTRUCTION_ARM(EMITTER, MRS), \
354 DECLARE_INSTRUCTION_ARM(EMITTER, ILL), \
355 DECLARE_INSTRUCTION_ARM(EMITTER, ILL), \
356 DECLARE_INSTRUCTION_ARM(EMITTER, ILL), \
357 DECLARE_INSTRUCTION_ARM(EMITTER, ILL), \
358 DECLARE_INSTRUCTION_ARM(EMITTER, ILL), \
359 DECLARE_INSTRUCTION_ARM(EMITTER, ILL), \
360 DECLARE_INSTRUCTION_ARM(EMITTER, ILL), \
361 DECLARE_INSTRUCTION_ARM(EMITTER, ILL), \
362 DECLARE_INSTRUCTION_ARM(EMITTER, SWP), \
363 DECLARE_INSTRUCTION_ARM(EMITTER, ILL), \
364 DECLARE_INSTRUCTION_ARM(EMITTER, STRHP), \
365 DECLARE_INSTRUCTION_ARM(EMITTER, ILL), \
366 DECLARE_INSTRUCTION_ARM(EMITTER, ILL), \
367 DECLARE_INSTRUCTION_ARM(EMITTER, ILL), \
368 DECLARE_INSTRUCTION_ARM(EMITTER, ILL), \
369 DECLARE_ARM_ALU_BLOCK(EMITTER, TST, ILL, LDRHP, LDRSBP, LDRSHP), \
370 DECLARE_INSTRUCTION_ARM(EMITTER, MSR), \
371 DECLARE_INSTRUCTION_ARM(EMITTER, BX), \
372 DECLARE_INSTRUCTION_ARM(EMITTER, ILL), \
373 DECLARE_INSTRUCTION_ARM(EMITTER, BLX2), \
374 DECLARE_INSTRUCTION_ARM(EMITTER, ILL), \
375 DECLARE_INSTRUCTION_ARM(EMITTER, ILL), \
376 DECLARE_INSTRUCTION_ARM(EMITTER, ILL), \
377 DECLARE_INSTRUCTION_ARM(EMITTER, BKPT), \
378 DECLARE_INSTRUCTION_ARM(EMITTER, ILL), \
379 DECLARE_INSTRUCTION_ARM(EMITTER, ILL), \
380 DECLARE_INSTRUCTION_ARM(EMITTER, ILL), \
381 DECLARE_INSTRUCTION_ARM(EMITTER, STRHPW), \
382 DECLARE_INSTRUCTION_ARM(EMITTER, ILL), \
383 DECLARE_INSTRUCTION_ARM(EMITTER, ILL), \
384 DECLARE_INSTRUCTION_ARM(EMITTER, ILL), \
385 DECLARE_INSTRUCTION_ARM(EMITTER, ILL), \
386 DECLARE_ARM_ALU_BLOCK(EMITTER, TEQ, ILL, LDRHPW, LDRSBPW, LDRSHPW), \
387 DECLARE_INSTRUCTION_ARM(EMITTER, MRSR), \
388 DECLARE_INSTRUCTION_ARM(EMITTER, ILL), \
389 DECLARE_INSTRUCTION_ARM(EMITTER, ILL), \
390 DECLARE_INSTRUCTION_ARM(EMITTER, ILL), \
391 DECLARE_INSTRUCTION_ARM(EMITTER, ILL), \
392 DECLARE_INSTRUCTION_ARM(EMITTER, ILL), \
393 DECLARE_INSTRUCTION_ARM(EMITTER, ILL), \
394 DECLARE_INSTRUCTION_ARM(EMITTER, ILL), \
395 DECLARE_INSTRUCTION_ARM(EMITTER, ILL), \
396 DECLARE_INSTRUCTION_ARM(EMITTER, SWPB), \
397 DECLARE_INSTRUCTION_ARM(EMITTER, ILL), \
398 DECLARE_INSTRUCTION_ARM(EMITTER, STRHIP), \
399 DECLARE_INSTRUCTION_ARM(EMITTER, ILL), \
400 DECLARE_INSTRUCTION_ARM(EMITTER, ILL), \
401 DECLARE_INSTRUCTION_ARM(EMITTER, ILL), \
402 DECLARE_INSTRUCTION_ARM(EMITTER, ILL), \
403 DECLARE_ARM_ALU_BLOCK(EMITTER, CMP, ILL, LDRHIP, LDRSBIP, LDRSHIP), \
404 DECLARE_INSTRUCTION_ARM(EMITTER, MSRR), \
405 DECLARE_INSTRUCTION_ARM(EMITTER, CLZ), \
406 DECLARE_INSTRUCTION_ARM(EMITTER, ILL), \
407 DECLARE_INSTRUCTION_ARM(EMITTER, ILL), \
408 DECLARE_INSTRUCTION_ARM(EMITTER, ILL), \
409 DECLARE_INSTRUCTION_ARM(EMITTER, ILL), \
410 DECLARE_INSTRUCTION_ARM(EMITTER, ILL), \
411 DECLARE_INSTRUCTION_ARM(EMITTER, ILL), \
412 DECLARE_INSTRUCTION_ARM(EMITTER, ILL), \
413 DECLARE_INSTRUCTION_ARM(EMITTER, ILL), \
414 DECLARE_INSTRUCTION_ARM(EMITTER, ILL), \
415 DECLARE_INSTRUCTION_ARM(EMITTER, STRHIPW), \
416 DECLARE_INSTRUCTION_ARM(EMITTER, ILL), \
417 DECLARE_INSTRUCTION_ARM(EMITTER, ILL), \
418 DECLARE_INSTRUCTION_ARM(EMITTER, ILL), \
419 DECLARE_INSTRUCTION_ARM(EMITTER, ILL), \
420 DECLARE_ARM_ALU_BLOCK(EMITTER, CMN, ILL, LDRHIPW, LDRSBIPW, LDRSHIPW), \
421 DECLARE_ARM_ALU_BLOCK(EMITTER, ORR, SMLAL, STRHPU, ILL, ILL), \
422 DECLARE_ARM_ALU_BLOCK(EMITTER, ORRS, SMLALS, LDRHPU, LDRSBPU, LDRSHPU), \
423 DECLARE_ARM_ALU_BLOCK(EMITTER, MOV, SMLAL, STRHPUW, ILL, ILL), \
424 DECLARE_ARM_ALU_BLOCK(EMITTER, MOVS, SMLALS, LDRHPUW, LDRSBPUW, LDRSHPUW), \
425 DECLARE_ARM_ALU_BLOCK(EMITTER, BIC, SMLAL, STRHIPU, ILL, ILL), \
426 DECLARE_ARM_ALU_BLOCK(EMITTER, BICS, SMLALS, LDRHIPU, LDRSBIPU, LDRSHIPU), \
427 DECLARE_ARM_ALU_BLOCK(EMITTER, MVN, SMLAL, STRHIPUW, ILL, ILL), \
428 DECLARE_ARM_ALU_BLOCK(EMITTER, MVNS, SMLALS, LDRHIPUW, LDRSBIPUW, LDRSHIPUW), \
429 DECLARE_ARM_ALU_IMMEDIATE_BLOCK(EMITTER, AND), \
430 DECLARE_ARM_ALU_IMMEDIATE_BLOCK(EMITTER, ANDS), \
431 DECLARE_ARM_ALU_IMMEDIATE_BLOCK(EMITTER, EOR), \
432 DECLARE_ARM_ALU_IMMEDIATE_BLOCK(EMITTER, EORS), \
433 DECLARE_ARM_ALU_IMMEDIATE_BLOCK(EMITTER, SUB), \
434 DECLARE_ARM_ALU_IMMEDIATE_BLOCK(EMITTER, SUBS), \
435 DECLARE_ARM_ALU_IMMEDIATE_BLOCK(EMITTER, RSB), \
436 DECLARE_ARM_ALU_IMMEDIATE_BLOCK(EMITTER, RSBS), \
437 DECLARE_ARM_ALU_IMMEDIATE_BLOCK(EMITTER, ADD), \
438 DECLARE_ARM_ALU_IMMEDIATE_BLOCK(EMITTER, ADDS), \
439 DECLARE_ARM_ALU_IMMEDIATE_BLOCK(EMITTER, ADC), \
440 DECLARE_ARM_ALU_IMMEDIATE_BLOCK(EMITTER, ADCS), \
441 DECLARE_ARM_ALU_IMMEDIATE_BLOCK(EMITTER, SBC), \
442 DECLARE_ARM_ALU_IMMEDIATE_BLOCK(EMITTER, SBCS), \
443 DECLARE_ARM_ALU_IMMEDIATE_BLOCK(EMITTER, RSC), \
444 DECLARE_ARM_ALU_IMMEDIATE_BLOCK(EMITTER, RSCS), \
445 DECLARE_ARM_ALU_IMMEDIATE_BLOCK(EMITTER, TST), \
446 DECLARE_ARM_ALU_IMMEDIATE_BLOCK(EMITTER, TST), \
447 DECLARE_ARM_ALU_IMMEDIATE_BLOCK(EMITTER, MSR), \
448 DECLARE_ARM_ALU_IMMEDIATE_BLOCK(EMITTER, TEQ), \
449 DECLARE_ARM_ALU_IMMEDIATE_BLOCK(EMITTER, CMP), \
450 DECLARE_ARM_ALU_IMMEDIATE_BLOCK(EMITTER, CMP), \
451 DECLARE_ARM_ALU_IMMEDIATE_BLOCK(EMITTER, MSRR), \
452 DECLARE_ARM_ALU_IMMEDIATE_BLOCK(EMITTER, CMN), \
453 DECLARE_ARM_ALU_IMMEDIATE_BLOCK(EMITTER, ORR), \
454 DECLARE_ARM_ALU_IMMEDIATE_BLOCK(EMITTER, ORRS), \
455 DECLARE_ARM_ALU_IMMEDIATE_BLOCK(EMITTER, MOV), \
456 DECLARE_ARM_ALU_IMMEDIATE_BLOCK(EMITTER, MOVS), \
457 DECLARE_ARM_ALU_IMMEDIATE_BLOCK(EMITTER, BIC), \
458 DECLARE_ARM_ALU_IMMEDIATE_BLOCK(EMITTER, BICS), \
459 DECLARE_ARM_ALU_IMMEDIATE_BLOCK(EMITTER, MVN), \
460 DECLARE_ARM_ALU_IMMEDIATE_BLOCK(EMITTER, MVNS), \
461 DECLARE_ARM_LOAD_STORE_IMMEDIATE_BLOCK(EMITTER, STR, , , ), \
462 DECLARE_ARM_LOAD_STORE_IMMEDIATE_BLOCK(EMITTER, LDR, , , ), \
463 DECLARE_ARM_LOAD_STORE_IMMEDIATE_BLOCK(EMITTER, STRT, , , ), \
464 DECLARE_ARM_LOAD_STORE_IMMEDIATE_BLOCK(EMITTER, LDRT, , , ), \
465 DECLARE_ARM_LOAD_STORE_IMMEDIATE_BLOCK(EMITTER, STRB, , , ), \
466 DECLARE_ARM_LOAD_STORE_IMMEDIATE_BLOCK(EMITTER, LDRB, , , ), \
467 DECLARE_ARM_LOAD_STORE_IMMEDIATE_BLOCK(EMITTER, STRBT, , , ), \
468 DECLARE_ARM_LOAD_STORE_IMMEDIATE_BLOCK(EMITTER, LDRBT, , , ), \
469 DECLARE_ARM_LOAD_STORE_IMMEDIATE_BLOCK(EMITTER, STR, , U, ), \
470 DECLARE_ARM_LOAD_STORE_IMMEDIATE_BLOCK(EMITTER, LDR, , U, ), \
471 DECLARE_ARM_LOAD_STORE_IMMEDIATE_BLOCK(EMITTER, STRT, , U, ), \
472 DECLARE_ARM_LOAD_STORE_IMMEDIATE_BLOCK(EMITTER, LDRT, , U, ), \
473 DECLARE_ARM_LOAD_STORE_IMMEDIATE_BLOCK(EMITTER, STRB, , U, ), \
474 DECLARE_ARM_LOAD_STORE_IMMEDIATE_BLOCK(EMITTER, LDRB, , U, ), \
475 DECLARE_ARM_LOAD_STORE_IMMEDIATE_BLOCK(EMITTER, STRBT, , U, ), \
476 DECLARE_ARM_LOAD_STORE_IMMEDIATE_BLOCK(EMITTER, LDRBT, , U, ), \
477 DECLARE_ARM_LOAD_STORE_IMMEDIATE_BLOCK(EMITTER, STR, P, , ), \
478 DECLARE_ARM_LOAD_STORE_IMMEDIATE_BLOCK(EMITTER, LDR, P, , ), \
479 DECLARE_ARM_LOAD_STORE_IMMEDIATE_BLOCK(EMITTER, STR, P, , W), \
480 DECLARE_ARM_LOAD_STORE_IMMEDIATE_BLOCK(EMITTER, LDR, P, , W), \
481 DECLARE_ARM_LOAD_STORE_IMMEDIATE_BLOCK(EMITTER, STRB, P, , ), \
482 DECLARE_ARM_LOAD_STORE_IMMEDIATE_BLOCK(EMITTER, LDRB, P, , ), \
483 DECLARE_ARM_LOAD_STORE_IMMEDIATE_BLOCK(EMITTER, STRB, P, , W), \
484 DECLARE_ARM_LOAD_STORE_IMMEDIATE_BLOCK(EMITTER, LDRB, P, , W), \
485 DECLARE_ARM_LOAD_STORE_IMMEDIATE_BLOCK(EMITTER, STR, P, U, ), \
486 DECLARE_ARM_LOAD_STORE_IMMEDIATE_BLOCK(EMITTER, LDR, P, U, ), \
487 DECLARE_ARM_LOAD_STORE_IMMEDIATE_BLOCK(EMITTER, STR, P, U, W), \
488 DECLARE_ARM_LOAD_STORE_IMMEDIATE_BLOCK(EMITTER, LDR, P, U, W), \
489 DECLARE_ARM_LOAD_STORE_IMMEDIATE_BLOCK(EMITTER, STRB, P, U, ), \
490 DECLARE_ARM_LOAD_STORE_IMMEDIATE_BLOCK(EMITTER, LDRB, P, U, ), \
491 DECLARE_ARM_LOAD_STORE_IMMEDIATE_BLOCK(EMITTER, STRB, P, U, W), \
492 DECLARE_ARM_LOAD_STORE_IMMEDIATE_BLOCK(EMITTER, LDRB, P, U, W), \
493 DECLARE_ARM_LOAD_STORE_BLOCK(EMITTER, STR, , , ), \
494 DECLARE_ARM_LOAD_STORE_BLOCK(EMITTER, LDR, , , ), \
495 DECLARE_ARM_LOAD_STORE_BLOCK(EMITTER, STRT, , , ), \
496 DECLARE_ARM_LOAD_STORE_BLOCK(EMITTER, LDRT, , , ), \
497 DECLARE_ARM_LOAD_STORE_BLOCK(EMITTER, STRB, , , ), \
498 DECLARE_ARM_LOAD_STORE_BLOCK(EMITTER, LDRB, , , ), \
499 DECLARE_ARM_LOAD_STORE_BLOCK(EMITTER, STRBT, , , ), \
500 DECLARE_ARM_LOAD_STORE_BLOCK(EMITTER, LDRBT, , , ), \
501 DECLARE_ARM_LOAD_STORE_BLOCK(EMITTER, STR, , U, ), \
502 DECLARE_ARM_LOAD_STORE_BLOCK(EMITTER, LDR, , U, ), \
503 DECLARE_ARM_LOAD_STORE_BLOCK(EMITTER, STRT, , U, ), \
504 DECLARE_ARM_LOAD_STORE_BLOCK(EMITTER, LDRT, , U, ), \
505 DECLARE_ARM_LOAD_STORE_BLOCK(EMITTER, STRB, , U, ), \
506 DECLARE_ARM_LOAD_STORE_BLOCK(EMITTER, LDRB, , U, ), \
507 DECLARE_ARM_LOAD_STORE_BLOCK(EMITTER, STRBT, , U, ), \
508 DECLARE_ARM_LOAD_STORE_BLOCK(EMITTER, LDRBT, , U, ), \
509 DECLARE_ARM_LOAD_STORE_BLOCK(EMITTER, STR, P, , ), \
510 DECLARE_ARM_LOAD_STORE_BLOCK(EMITTER, LDR, P, , ), \
511 DECLARE_ARM_LOAD_STORE_BLOCK(EMITTER, STR, P, , W), \
512 DECLARE_ARM_LOAD_STORE_BLOCK(EMITTER, LDR, P, , W), \
513 DECLARE_ARM_LOAD_STORE_BLOCK(EMITTER, STRB, P, , ), \
514 DECLARE_ARM_LOAD_STORE_BLOCK(EMITTER, LDRB, P, , ), \
515 DECLARE_ARM_LOAD_STORE_BLOCK(EMITTER, STRB, P, , W), \
516 DECLARE_ARM_LOAD_STORE_BLOCK(EMITTER, LDRB, P, , W), \
517 DECLARE_ARM_LOAD_STORE_BLOCK(EMITTER, STR, P, U, ), \
518 DECLARE_ARM_LOAD_STORE_BLOCK(EMITTER, LDR, P, U, ), \
519 DECLARE_ARM_LOAD_STORE_BLOCK(EMITTER, STR, P, U, W), \
520 DECLARE_ARM_LOAD_STORE_BLOCK(EMITTER, LDR, P, U, W), \
521 DECLARE_ARM_LOAD_STORE_BLOCK(EMITTER, STRB, P, U, ), \
522 DECLARE_ARM_LOAD_STORE_BLOCK(EMITTER, LDRB, P, U, ), \
523 DECLARE_ARM_LOAD_STORE_BLOCK(EMITTER, STRB, P, U, W), \
524 DECLARE_ARM_LOAD_STORE_BLOCK(EMITTER, LDRB, P, U, W), \
525 DECLARE_ARM_LOAD_STORE_MULTIPLE_BLOCK(EMITTER, STM, DA, ), \
526 DECLARE_ARM_LOAD_STORE_MULTIPLE_BLOCK(EMITTER, LDM, DA, ), \
527 DECLARE_ARM_LOAD_STORE_MULTIPLE_BLOCK(EMITTER, STM, DA, W), \
528 DECLARE_ARM_LOAD_STORE_MULTIPLE_BLOCK(EMITTER, LDM, DA, W), \
529 DECLARE_ARM_LOAD_STORE_MULTIPLE_BLOCK(EMITTER, STMS, DA, ), \
530 DECLARE_ARM_LOAD_STORE_MULTIPLE_BLOCK(EMITTER, LDMS, DA, ), \
531 DECLARE_ARM_LOAD_STORE_MULTIPLE_BLOCK(EMITTER, STMS, DA, W), \
532 DECLARE_ARM_LOAD_STORE_MULTIPLE_BLOCK(EMITTER, LDMS, DA, W), \
533 DECLARE_ARM_LOAD_STORE_MULTIPLE_BLOCK(EMITTER, STM, IA, ), \
534 DECLARE_ARM_LOAD_STORE_MULTIPLE_BLOCK(EMITTER, LDM, IA, ), \
535 DECLARE_ARM_LOAD_STORE_MULTIPLE_BLOCK(EMITTER, STM, IA, W), \
536 DECLARE_ARM_LOAD_STORE_MULTIPLE_BLOCK(EMITTER, LDM, IA, W), \
537 DECLARE_ARM_LOAD_STORE_MULTIPLE_BLOCK(EMITTER, STMS, IA, ), \
538 DECLARE_ARM_LOAD_STORE_MULTIPLE_BLOCK(EMITTER, LDMS, IA, ), \
539 DECLARE_ARM_LOAD_STORE_MULTIPLE_BLOCK(EMITTER, STMS, IA, W), \
540 DECLARE_ARM_LOAD_STORE_MULTIPLE_BLOCK(EMITTER, LDMS, IA, W), \
541 DECLARE_ARM_LOAD_STORE_MULTIPLE_BLOCK(EMITTER, STM, DB, ), \
542 DECLARE_ARM_LOAD_STORE_MULTIPLE_BLOCK(EMITTER, LDM, DB, ), \
543 DECLARE_ARM_LOAD_STORE_MULTIPLE_BLOCK(EMITTER, STM, DB, W), \
544 DECLARE_ARM_LOAD_STORE_MULTIPLE_BLOCK(EMITTER, LDM, DB, W), \
545 DECLARE_ARM_LOAD_STORE_MULTIPLE_BLOCK(EMITTER, STMS, DB, ), \
546 DECLARE_ARM_LOAD_STORE_MULTIPLE_BLOCK(EMITTER, LDMS, DB, ), \
547 DECLARE_ARM_LOAD_STORE_MULTIPLE_BLOCK(EMITTER, STMS, DB, W), \
548 DECLARE_ARM_LOAD_STORE_MULTIPLE_BLOCK(EMITTER, LDMS, DB, W), \
549 DECLARE_ARM_LOAD_STORE_MULTIPLE_BLOCK(EMITTER, STM, IB, ), \
550 DECLARE_ARM_LOAD_STORE_MULTIPLE_BLOCK(EMITTER, LDM, IB, ), \
551 DECLARE_ARM_LOAD_STORE_MULTIPLE_BLOCK(EMITTER, STM, IB, W), \
552 DECLARE_ARM_LOAD_STORE_MULTIPLE_BLOCK(EMITTER, LDM, IB, W), \
553 DECLARE_ARM_LOAD_STORE_MULTIPLE_BLOCK(EMITTER, STMS, IB, ), \
554 DECLARE_ARM_LOAD_STORE_MULTIPLE_BLOCK(EMITTER, LDMS, IB, ), \
555 DECLARE_ARM_LOAD_STORE_MULTIPLE_BLOCK(EMITTER, STMS, IB, W), \
556 DECLARE_ARM_LOAD_STORE_MULTIPLE_BLOCK(EMITTER, LDMS, IB, W), \
557 DECLARE_ARM_BRANCH_BLOCK(EMITTER, B), \
558 DECLARE_ARM_BRANCH_BLOCK(EMITTER, BL), \
559 DECLARE_ARM_LOAD_STORE_COPROCESSOR_BLOCK(EMITTER, STC, , , , ), \
560 DECLARE_ARM_LOAD_STORE_COPROCESSOR_BLOCK(EMITTER, LDC, , , , ), \
561 DECLARE_ARM_LOAD_STORE_COPROCESSOR_BLOCK(EMITTER, STC, , , , W), \
562 DECLARE_ARM_LOAD_STORE_COPROCESSOR_BLOCK(EMITTER, LDC, , , , W), \
563 DECLARE_ARM_LOAD_STORE_COPROCESSOR_BLOCK(EMITTER, STC, , , N, ), \
564 DECLARE_ARM_LOAD_STORE_COPROCESSOR_BLOCK(EMITTER, LDC, , , N, ), \
565 DECLARE_ARM_LOAD_STORE_COPROCESSOR_BLOCK(EMITTER, STC, , , N, W), \
566 DECLARE_ARM_LOAD_STORE_COPROCESSOR_BLOCK(EMITTER, LDC, , , N, W), \
567 DECLARE_ARM_LOAD_STORE_COPROCESSOR_BLOCK(EMITTER, STC, , U, , ), \
568 DECLARE_ARM_LOAD_STORE_COPROCESSOR_BLOCK(EMITTER, LDC, , U, , ), \
569 DECLARE_ARM_LOAD_STORE_COPROCESSOR_BLOCK(EMITTER, STC, , U, , W), \
570 DECLARE_ARM_LOAD_STORE_COPROCESSOR_BLOCK(EMITTER, LDC, , U, , W), \
571 DECLARE_ARM_LOAD_STORE_COPROCESSOR_BLOCK(EMITTER, STC, , U, N, ), \
572 DECLARE_ARM_LOAD_STORE_COPROCESSOR_BLOCK(EMITTER, LDC, , U, N, ), \
573 DECLARE_ARM_LOAD_STORE_COPROCESSOR_BLOCK(EMITTER, STC, , U, N, W), \
574 DECLARE_ARM_LOAD_STORE_COPROCESSOR_BLOCK(EMITTER, LDC, , U, N, W), \
575 DECLARE_ARM_LOAD_STORE_COPROCESSOR_BLOCK(EMITTER, STC, P, , , ), \
576 DECLARE_ARM_LOAD_STORE_COPROCESSOR_BLOCK(EMITTER, LDC, P, , , ), \
577 DECLARE_ARM_LOAD_STORE_COPROCESSOR_BLOCK(EMITTER, STC, P, , , W), \
578 DECLARE_ARM_LOAD_STORE_COPROCESSOR_BLOCK(EMITTER, LDC, P, , , W), \
579 DECLARE_ARM_LOAD_STORE_COPROCESSOR_BLOCK(EMITTER, STC, P, U, N, ), \
580 DECLARE_ARM_LOAD_STORE_COPROCESSOR_BLOCK(EMITTER, LDC, P, U, N, ), \
581 DECLARE_ARM_LOAD_STORE_COPROCESSOR_BLOCK(EMITTER, STC, P, U, N, W), \
582 DECLARE_ARM_LOAD_STORE_COPROCESSOR_BLOCK(EMITTER, LDC, P, U, N, W), \
583 DECLARE_ARM_LOAD_STORE_COPROCESSOR_BLOCK(EMITTER, STC, P, , N, ), \
584 DECLARE_ARM_LOAD_STORE_COPROCESSOR_BLOCK(EMITTER, LDC, P, , N, ), \
585 DECLARE_ARM_LOAD_STORE_COPROCESSOR_BLOCK(EMITTER, STC, P, , N, W), \
586 DECLARE_ARM_LOAD_STORE_COPROCESSOR_BLOCK(EMITTER, LDC, P, , N, W), \
587 DECLARE_ARM_LOAD_STORE_COPROCESSOR_BLOCK(EMITTER, STC, P, U, N, ), \
588 DECLARE_ARM_LOAD_STORE_COPROCESSOR_BLOCK(EMITTER, LDC, P, U, N, ), \
589 DECLARE_ARM_LOAD_STORE_COPROCESSOR_BLOCK(EMITTER, STC, P, U, N, W), \
590 DECLARE_ARM_LOAD_STORE_COPROCESSOR_BLOCK(EMITTER, LDC, P, U, N, W), \
591 DECLARE_ARM_COPROCESSOR_BLOCK(EMITTER, CDP, MCR, MRC), \
592 DECLARE_ARM_SWI_BLOCK(EMITTER)
593
594#endif