| 548 | } |
| 549 | |
| 550 | static void |
| 551 | disasm_print_reglist(const disasm_interface_t *di, u_int insn) |
| 552 | { |
| 553 | int loop; |
| 554 | int start; |
| 555 | int comma; |
| 556 | |
| 557 | di->di_printf("{"); |
| 558 | start = -1; |
| 559 | comma = 0; |
| 560 | |
| 561 | for (loop = 0; loop < 17; ++loop) { |
| 562 | if (start != -1) { |
| 563 | if (loop == 16 || !(insn & (1 << loop))) { |
| 564 | if (comma) |
| 565 | di->di_printf(", "); |
| 566 | else |
| 567 | comma = 1; |
| 568 | if (start == loop - 1) |
| 569 | di->di_printf("r%d", start); |
| 570 | else |
| 571 | di->di_printf("r%d-r%d", start, loop - 1); |
| 572 | start = -1; |
| 573 | } |
| 574 | } else { |
| 575 | if (insn & (1 << loop)) |
| 576 | start = loop; |
| 577 | } |
| 578 | } |
| 579 | di->di_printf("}"); |
| 580 | |
| 581 | if (insn & (1 << 22)) |
| 582 | di->di_printf("^"); |
| 583 | } |
| 584 | |
| 585 | static void |
| 586 | disasm_insn_ldrstr(const disasm_interface_t *di, u_int insn, u_int loc) |