Lines Matching refs:insn

63  *	insn[cc][mod]	[operands]
277 static void disasm_register_shift(const disasm_interface_t *di, u_int insn);
278 static void disasm_print_reglist(const disasm_interface_t *di, u_int insn);
279 static void disasm_insn_ldrstr(const disasm_interface_t *di, u_int insn,
281 static void disasm_insn_ldrhstrh(const disasm_interface_t *di, u_int insn,
283 static void disasm_insn_ldcstc(const disasm_interface_t *di, u_int insn,
293 u_int insn;
301 insn = di->di_readword(loc);
303 /* di->di_printf("loc=%08x insn=%08x : ", loc, insn);*/
306 if ((insn & i_ptr->mask) == i_ptr->pattern) {
314 di->di_printf("und%s\t%08x\n", insn_condition(insn), insn);
322 di->di_printf("%s%s", i_ptr->name, insn_condition(insn));
337 if (insn & 0x02000000) {
338 int rotate= ((insn >> 7) & 0x1e);
341 (insn & 0xff) << (32 - rotate) |
342 (insn & 0xff) >> rotate);
344 disasm_register_shift(di, insn);
349 di->di_printf("r%d", ((insn >> 12) & 0x0f));
353 if (((insn >> 12) & 0x0f) == 15)
358 di->di_printf("r%d", ((insn >> 16) & 0x0f));
362 di->di_printf("r%d", ((insn >> 8) & 0x0f));
366 di->di_printf("[r%d]", ((insn >> 16) & 0x0f));
370 di->di_printf("r%d", ((insn >> 0) & 0x0f));
374 disasm_insn_ldrstr(di, insn, loc);
378 disasm_insn_ldrhstrh(di, insn, loc);
382 disasm_print_reglist(di, insn);
386 di->di_printf("f%d", (insn >> 12) & 7);
390 di->di_printf("f%d", (insn >> 16) & 7);
394 if (insn & (1 << 3))
395 di->di_printf("#%s", insn_fpaimm(insn));
397 di->di_printf("f%d", insn & 7);
401 branch = ((insn << 2) & 0x03ffffff);
408 branch = ((insn << 2) & 0x03ffffff) |
409 (insn >> 23 & 0x00000002);
416 di->di_printf("%s", insn_blktrans(insn));
420 di->di_printf("%s", insn_stkblktrans(insn));
424 di->di_printf("0x%08x", (insn & 0x00ffffff));
429 (insn & 0x000fff00) >> 4 | (insn & 0x0000000f));
433 if (insn & 0x00400000)
441 if (insn & (1 << 16))
443 if (insn & (1 << 17))
445 if (insn & (1 << 18))
447 if (insn & (1 << 19))
452 if (insn & 0x00400000)
457 if (insn & (1 << 22))
462 if (insn & 0x00100000)
467 di->di_printf("%s", insn_fpaprec(insn));
474 di->di_printf("%s", insn_fparnd(insn));
478 if (insn & (1 << 21))
483 di->di_printf("p%d", (insn >> 8) & 0x0f);
487 disasm_insn_ldcstc(di, insn, loc);
491 di->di_printf("0x%08x", insn);
495 di->di_printf("%d, ", (insn >> 20) & 0x0f);
497 di->di_printf("c%d, c%d, c%d", (insn >> 12) & 0x0f,
498 (insn >> 16) & 0x0f, insn & 0x0f);
500 di->di_printf(", %d", (insn >> 5) & 0x07);
504 di->di_printf("%d, ", (insn >> 21) & 0x07);
506 (insn >> 12) & 0x0f, (insn >> 16) & 0x0f,
507 insn & 0x0f, (insn >> 5) & 0x07);
509 /* if (((insn >> 5) & 0x07) != 0)
510 di->di_printf(", %d", (insn >> 5) & 0x07);*/
534 disasm_register_shift(const disasm_interface_t *di, u_int insn)
536 di->di_printf("r%d", (insn & 0x0f));
537 if ((insn & 0x00000ff0) == 0)
539 else if ((insn & 0x00000ff0) == 0x00000060)
542 if (insn & 0x10)
543 di->di_printf(", %s r%d", op2_shift(insn),
544 (insn >> 8) & 0x0f);
546 di->di_printf(", %s #%d", op2_shift(insn),
547 (insn >> 7) & 0x1f);
553 disasm_print_reglist(const disasm_interface_t *di, u_int insn)
565 if (loop == 16 || !(insn & (1 << loop))) {
577 if (insn & (1 << loop))
583 if (insn & (1 << 22))
588 disasm_insn_ldrstr(const disasm_interface_t *di, u_int insn, u_int loc)
592 offset = insn & 0xfff;
593 if ((insn & 0x032f0000) == 0x010f0000) {
595 if (insn & 0x00800000)
601 di->di_printf("[r%d", (insn >> 16) & 0x0f);
602 if ((insn & 0x03000fff) != 0x01000000) {
603 di->di_printf("%s, ", (insn & (1 << 24)) ? "" : "]");
604 if (!(insn & 0x00800000))
606 if (insn & (1 << 25))
607 disasm_register_shift(di, insn);
611 if (insn & (1 << 24))
617 disasm_insn_ldrhstrh(const disasm_interface_t *di, u_int insn, u_int loc)
621 offset = ((insn & 0xf00) >> 4) | (insn & 0xf);
622 if ((insn & 0x004f0000) == 0x004f0000) {
624 if (insn & 0x00800000)
630 di->di_printf("[r%d", (insn >> 16) & 0x0f);
631 if ((insn & 0x01400f0f) != 0x01400000) {
632 di->di_printf("%s, ", (insn & (1 << 24)) ? "" : "]");
633 if (!(insn & 0x00800000))
635 if (insn & (1 << 22))
638 di->di_printf("r%d", (insn & 0x0f));
640 if (insn & (1 << 24))
646 disasm_insn_ldcstc(const disasm_interface_t *di, u_int insn, u_int loc)
648 if (((insn >> 8) & 0xf) == 1)
649 di->di_printf("f%d, ", (insn >> 12) & 0x07);
651 di->di_printf("c%d, ", (insn >> 12) & 0x0f);
653 di->di_printf("[r%d", (insn >> 16) & 0x0f);
655 di->di_printf("%s, ", (insn & (1 << 24)) ? "" : "]");
657 if (!(insn & (1 << 23)))
660 di->di_printf("#0x%03x", (insn & 0xff) << 2);
662 if (insn & (1 << 24))
665 if (insn & (1 << 21))