all repos — mgba @ 0c5ce511fb7f6c7f8da27638752dd574e413d8ed

mGBA Game Boy Advance Emulator

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