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