1#include <stdio.h>
2#include <stdint.h>
3#include <stdlib.h>
4#include <string.h>
5#include "opcode/arm.h"
6
7static void do_noargs(void) {}
8static void do_arit(void) {}
9static void do_t_arit3c(void) {}
10static void do_t_add_sub(void) {}
11static void do_t_arit3(void) {}
12static void do_cmp(void) {}
13static void do_t_mvn_tst(void) {}
14static void do_t_mov_cmp(void) {}
15static void do_mov(void) {}
16static void do_ldst(void) {}
17static void do_t_ldst(void) {}
18static void do_ldmstm(void) {}
19static void do_t_ldmstm(void) {}
20static void do_swi(void) {}
21static void do_t_swi(void) {}
22static void do_branch(void) {}
23static void do_t_branch(void) {}
24static void do_bl(void) {}
25static void do_t_branch23(void) {}
26static void do_adr(void) {}
27static void do_t_adr(void) {}
28static void do_adrl(void) {}
29static void do_nop(void) {}
30static void do_t_nop(void) {}
31static void do_shift(void) {}
32static void do_t_shift(void) {}
33static void do_rd_rn(void) {}
34static void do_t_neg(void) {}
35static void do_push_pop(void) {}
36static void do_t_push_pop(void) {}
37static void do_t_rsb(void) {}
38static void do_rd_rm(void) {}
39static void do_t_rd_rm(void) {}
40static void do_t_cpy(void) {}
41static void do_ldstt(void) {}
42static void do_t_ldstt(void) {}
43static void do_mul(void) {}
44static void do_t_mul(void) {}
45static void do_mlas(void) {}
46static void do_t_mla(void) {}
47static void do_cdp(void) {}
48static void do_lstc(void) {}
49static void do_co_reg(void) {}
50static void do_rd_rm_rn(void) {}
51static void do_mrs(void) {}
52static void do_t_mrs(void) {}
53static void do_msr(void) {}
54static void do_t_msr(void) {}
55static void do_mull(void) {}
56static void do_t_mull(void) {}
57static void do_ldstv4(void) {}
58static void do_bx(void) {}
59static void do_t_bx(void) {}
60static void do_blx(void) {}
61static void do_t_blx(void) {}
62static void do_bkpt(void) {}
63static void do_t_bkpt(void) {}
64static void do_t_clz(void) {}
65static void do_smla(void) {}
66static void do_smlal(void) {}
67static void do_t_mlal(void) {}
68static void do_smul(void) {}
69static void do_t_simd(void) {}
70static void do_t_rd_rm_rn(void) {}
71static void do_pld(void) {}
72static void do_t_pld(void) {}
73static void do_ldrd(void) {}
74static void do_t_ldstd(void) {}
75static void do_co_reg2c(void) {}
76static void do_bxj(void) {}
77static void do_t_bxj(void) {}
78static void do_cpsi(void) {}
79static void do_t_cpsi(void) {}
80static void do_t_rev(void) {}
81static void do_sxth(void) {}
82static void do_t_sxth(void) {}
83static void do_setend(void) {}
84static void do_t_setend(void) {}
85static void do_ldrex(void) {}
86static void do_t_ldrex(void) {}
87static void do_strex(void) {}
88static void do_t_strex(void) {}
89static void do_ssat(void) {}
90static void do_t_ssat(void) {}
91static void do_usat(void) {}
92static void do_t_usat(void) {}
93static void do_imm0(void) {}
94static void do_t_cps(void) {}
95static void do_pkhbt(void) {}
96static void do_t_pkhbt(void) {}
97static void do_pkhtb(void) {}
98static void do_t_pkhtb(void) {}
99static void do_rd_rn_rm(void) {}
100static void do_rfe(void) {}
101static void do_sxtah(void) {}
102static void do_t_sxtah(void) {}
103static void do_srs(void) {}
104static void do_ssat16(void) {}
105static void do_t_ssat16(void) {}
106static void do_usat16(void) {}
107static void do_t_usat16(void) {}
108static void do_t_hint(void) {}
109static void do_ldrexd(void) {}
110static void do_t_ldrexd(void) {}
111static void do_strexd(void) {}
112static void do_t_strexd(void) {}
113static void do_rm_rd_rn(void) {}
114static void do_smc(void) {}
115static void do_t_smc(void) {}
116static void do_bfc(void) {}
117static void do_t_bfc(void) {}
118static void do_bfi(void) {}
119static void do_t_bfi(void) {}
120static void do_bfx(void) {}
121static void do_t_bfx(void) {}
122static void do_mov16(void) {}
123static void do_t_mov16(void) {}
124static void do_t_rbit(void) {}
125static void do_ldsttv4(void) {}
126static void do_t_cbz(void) {}
127static void do_it(void) {}
128static void do_t_it(void) {}
129static void do_t_add_sub_w(void) {}
130static void do_t_tb(void) {}
131static void do_t_orn(void) {}
132static void do_t_div(void) {}
133static void do_pli(void) {}
134static void do_dbg(void) {}
135static void do_t_dbg(void) {}
136static void do_barrier(void) {}
137static void do_t_barrier(void) {}
138static void do_rd(void) {}
139static void do_rd_cpaddr(void) {}
140static void do_fpa_cmp(void) {}
141static void do_rn_rd(void) {}
142static void do_fpa_ldmstm(void) {}
143static void do_vfp_sp_monadic(void) {}
144static void do_vfp_reg_from_sp(void) {}
145static void do_vfp_sp_from_reg(void) {}
146static void do_vmrs(void) {}
147static void do_vfp_sp_ldst(void) {}
148static void do_vfp_sp_ldstmia(void) {}
149static void do_vfp_sp_ldstmdb(void) {}
150static void do_vfp_xp_ldstmia(void) {}
151static void do_vfp_xp_ldstmdb(void) {}
152static void do_vfp_sp_dyadic(void) {}
153static void do_vfp_sp_compare_z(void) {}
154static void do_vfp_dp_rd_rm(void) {}
155static void do_vfp_dp_sp_cvt(void) {}
156static void do_vfp_sp_dp_cvt(void) {}
157static void do_vfp_dp_rn_rd(void) {}
158static void do_vfp_dp_rd_rn(void) {}
159static void do_vfp_sp_hp_cvt(void) {}
160static void do_vfp_hp_sp_cvt(void) {}
161static void do_vfp_t_sp_hp_cvt(void) {}
162static void do_vfp_b_sp_hp_cvt(void) {}
163static void do_vfp_t_hp_sp_cvt(void) {}
164static void do_vfp_b_hp_sp_cvt(void) {}
165static void do_vfp_dp_ldst(void) {}
166static void do_vfp_dp_ldstmia(void) {}
167static void do_vfp_dp_ldstmdb(void) {}
168static void do_vfp_dp_rd_rn_rm(void) {}
169static void do_vfp_dp_rd(void) {}
170static void do_vfp_sp2_from_reg2(void) {}
171static void do_vfp_reg2_from_sp2(void) {}
172static void do_vfp_dp_rm_rd_rn(void) {}
173static void do_vfp_nsyn_sqrt(void) {}
174static void do_vfp_nsyn_div(void) {}
175static void do_vfp_nsyn_nmul(void) {}
176static void do_vfp_nsyn_cmp(void) {}
177static void do_vfp_nsyn_push(void) {}
178static void do_vfp_nsyn_pop(void) {}
179static void do_vfp_nsyn_cvtr(void) {}
180static void do_neon_mul(void) {}
181static void do_neon_mac_maybe_scalar(void) {}
182static void do_neon_addsub_if_i(void) {}
183static void do_neon_abs_neg(void) {}
184static void do_neon_ldm_stm(void) {}
185static void do_neon_ldr_str(void) {}
186static void do_neon_cvt(void) {}
187static void do_neon_cvtt(void) {}
188static void do_neon_cvtb(void) {}
189static void do_neon_mov(void) {}
190static void do_neon_dyadic_i_su(void) {}
191static void do_neon_dyadic_i64_su(void) {}
192static void do_neon_rshl(void) {}
193static void do_neon_shl_imm(void) {}
194static void do_neon_qshl_imm(void) {}
195static void do_neon_logic(void) {}
196static void do_neon_bitfield(void) {}
197static void do_neon_dyadic_if_su(void) {}
198static void do_neon_cmp(void) {}
199static void do_neon_cmp_inv(void) {}
200static void do_neon_ceq(void) {}
201static void do_neon_dyadic_if_su_d(void) {}
202static void do_neon_dyadic_if_i_d(void) {}
203static void do_neon_tst(void) {}
204static void do_neon_qdmulh(void) {}
205static void do_neon_fcmp_absolute(void) {}
206static void do_neon_fcmp_absolute_inv(void) {}
207static void do_neon_step(void) {}
208static void do_neon_rshift_round_imm(void) {}
209static void do_neon_sli(void) {}
210static void do_neon_sri(void) {}
211static void do_neon_qshlu_imm(void) {}
212static void do_neon_rshift_sat_narrow(void) {}
213static void do_neon_rshift_sat_narrow_u(void) {}
214static void do_neon_rshift_narrow(void) {}
215static void do_neon_shll(void) {}
216static void do_neon_mvn(void) {}
217static void do_neon_abal(void) {}
218static void do_neon_dyadic_long(void) {}
219static void do_neon_mac_maybe_scalar_long(void) {}
220static void do_neon_dyadic_wide(void) {}
221static void do_neon_dyadic_narrow(void) {}
222static void do_neon_mul_sat_scalar_long(void) {}
223static void do_neon_vmull(void) {}
224static void do_neon_ext(void) {}
225static void do_neon_rev(void) {}
226static void do_neon_dup(void) {}
227static void do_neon_movl(void) {}
228static void do_neon_movn(void) {}
229static void do_neon_qmovn(void) {}
230static void do_neon_qmovun(void) {}
231static void do_neon_zip_uzp(void) {}
232static void do_neon_sat_abs_neg(void) {}
233static void do_neon_pair_long(void) {}
234static void do_neon_recip_est(void) {}
235static void do_neon_cls(void) {}
236static void do_neon_clz(void) {}
237static void do_neon_cnt(void) {}
238static void do_neon_swp(void) {}
239static void do_neon_trn(void) {}
240static void do_neon_tbl_tbx(void) {}
241static void do_neon_ldx_stx(void) {}
242static void do_vfp_sp_const(void) {}
243static void do_vfp_dp_const(void) {}
244static void do_vfp_sp_conv_16(void) {}
245static void do_vfp_dp_conv_16(void) {}
246static void do_vfp_sp_conv_32(void) {}
247static void do_vfp_dp_conv_32(void) {}
248static void do_xsc_mia(void) {}
249static void do_xsc_mar(void) {}
250static void do_xsc_mra(void) {}
251static void do_iwmmxt_tandorc(void) {}
252static void do_iwmmxt_textrc(void) {}
253static void do_iwmmxt_textrm(void) {}
254static void do_iwmmxt_tinsr(void) {}
255static void do_iwmmxt_tmia(void) {}
256static void do_iwmmxt_waligni(void) {}
257static void do_iwmmxt_wldstbh(void) {}
258static void do_iwmmxt_wldstw(void) {}
259static void do_iwmmxt_wldstd(void) {}
260static void do_iwmmxt_wmov(void) {}
261static void do_iwmmxt_wrwrwr_or_imm5(void) {}
262static void do_iwmmxt_wshufh(void) {}
263static void do_iwmmxt_wzero(void) {}
264static void do_iwmmxt_wmerge(void) {}
265static void do_mav_dspsc(void) {}
266static void do_mav_triple(void) {}
267static void do_mav_shift(void) {}
268static void do_mav_quad(void) {}
269
270#define INSNS_TABLE_ONLY
271#include "arm.c"
272
273static
274void
275print_insns(
276const struct asm_opcode *insns)
277{
278    unsigned int j, r;
279
280	printf("\t%s\t", insns->template);
281	r = 1;
282	for (j = 0; j < 8 && insns->operands[j] != OP_stop; j++) {
283	    switch(insns->operands[j]){
284	    case OP_RR:
285	    case OP_oRR:
286	    case OP_SH:
287	    case OP_SHG:
288	    case OP_RRnpc:
289		printf("r%d", r++);
290		break;
291	    default:
292		printf("UNKNOWN_OP_%d", insns->operands[j]);
293	    }
294	    if(insns->operands[j+1] != OP_stop)
295		printf(",");
296	}
297	printf("\n");
298}
299
300int
301main(
302int argc,
303char **argv)
304{
305    unsigned int i, len;
306    char *p;
307
308	printf("arm:\n");
309	for(i = 1; i < sizeof (insns) / sizeof (struct asm_opcode); i++){
310	    /*
311	     * This hack is looking for arm ALU instructions that set the
312	     * condition codes.  And the matching instruction that does not
313	     * set them.  Those instructions are listed in the table after
314	     * each other with the 's' suffix one second.  Bit 20 is the s-bit
315	     * that indicated it sets the condition codes or not.
316	     */
317	    p = strrchr(insns[i].template, 's');
318	    len = p - insns[i].template;
319	    if(p != NULL && p[1] == '\0' &&
320	       (insns[i].avalue & 0x100000) == 0x100000 &&
321	       strncmp(insns[i].template, insns[i-1].template, len) == 0 &&
322	       (insns[i-1].avalue & 0x100000) == 0){
323		print_insns(insns + i - 1);
324		print_insns(insns + i);
325	    }
326	}
327	return(0);
328}
329
330
331