791 break;
792 default:
793 len = snprintf(buf, buflen,
794 "%s%s%s %s, %s", arm_dpi_opnames[dpi_inst.dpii_op],
795 arm_cond_names[dpi_inst.dpii_cond],
796 dpi_inst.dpii_sbit != 0 ? "S" : "",
797 arm_reg_names[dpi_inst.dpii_rd],
798 arm_reg_names[dpi_inst.dpii_rn]);
799 break;
800 }
801
802 if (len >= buflen)
803 return (-1);
804 buflen -= len;
805 buf += len;
806
807 /*
808 * Print the shifter as appropriate
809 */
810 switch (dpi_inst.dpii_stype) {
811 case ARM_DPI_SHIFTER_IMM32:
812 len = snprintf(buf, buflen, ", #%d, %d",
813 dpi_inst.dpii_un.dpii_im.dpisi_imm,
814 dpi_inst.dpii_un.dpii_im.dpisi_rot);
815 break;
816 case ARM_DPI_SHIFTER_SIMM:
817 if (dpi_inst.dpii_un.dpii_si.dpiss_code == DPI_S_NONE) {
818 len = snprintf(buf, buflen, ", %s",
819 arm_reg_names[dpi_inst.dpii_un.dpii_si.dpiss_targ]);
820 break;
821 }
822 if (dpi_inst.dpii_un.dpii_si.dpiss_code == DPI_S_RRX) {
823 len = snprintf(buf, buflen, ", %s RRX",
824 arm_reg_names[dpi_inst.dpii_un.dpii_si.dpiss_targ]);
825 break;
826 }
827 len = snprintf(buf, buflen, ", %s, %s #%d",
828 arm_reg_names[dpi_inst.dpii_un.dpii_si.dpiss_targ],
829 arm_dpi_shifts[dpi_inst.dpii_un.dpii_si.dpiss_code],
830 dpi_inst.dpii_un.dpii_si.dpiss_imm);
831 break;
832 case ARM_DPI_SHIFTER_SREG:
833 len = snprintf(buf, buflen, ", %s, %s %s",
834 arm_reg_names[dpi_inst.dpii_un.dpii_ri.dpisr_targ],
835 arm_dpi_shifts[dpi_inst.dpii_un.dpii_ri.dpisr_code],
|
791 break;
792 default:
793 len = snprintf(buf, buflen,
794 "%s%s%s %s, %s", arm_dpi_opnames[dpi_inst.dpii_op],
795 arm_cond_names[dpi_inst.dpii_cond],
796 dpi_inst.dpii_sbit != 0 ? "S" : "",
797 arm_reg_names[dpi_inst.dpii_rd],
798 arm_reg_names[dpi_inst.dpii_rn]);
799 break;
800 }
801
802 if (len >= buflen)
803 return (-1);
804 buflen -= len;
805 buf += len;
806
807 /*
808 * Print the shifter as appropriate
809 */
810 switch (dpi_inst.dpii_stype) {
811 case ARM_DPI_SHIFTER_IMM32: {
812 uint32_t imm = dpi_inst.dpii_un.dpii_im.dpisi_imm;
813 int rot = dpi_inst.dpii_un.dpii_im.dpisi_rot * 2;
814 if (rot != 0)
815 imm = (imm << (32 - rot)) | (imm >> rot);
816 if (imm < 10)
817 len = snprintf(buf, buflen, ", #%d", imm);
818 else
819 len = snprintf(buf, buflen, ", #%d ; %#x", imm, imm);
820 break;
821 }
822 case ARM_DPI_SHIFTER_SIMM:
823 if (dpi_inst.dpii_un.dpii_si.dpiss_code == DPI_S_NONE) {
824 len = snprintf(buf, buflen, ", %s",
825 arm_reg_names[dpi_inst.dpii_un.dpii_si.dpiss_targ]);
826 break;
827 }
828 if (dpi_inst.dpii_un.dpii_si.dpiss_code == DPI_S_RRX) {
829 len = snprintf(buf, buflen, ", %s RRX",
830 arm_reg_names[dpi_inst.dpii_un.dpii_si.dpiss_targ]);
831 break;
832 }
833 len = snprintf(buf, buflen, ", %s, %s #%d",
834 arm_reg_names[dpi_inst.dpii_un.dpii_si.dpiss_targ],
835 arm_dpi_shifts[dpi_inst.dpii_un.dpii_si.dpiss_code],
836 dpi_inst.dpii_un.dpii_si.dpiss_imm);
837 break;
838 case ARM_DPI_SHIFTER_SREG:
839 len = snprintf(buf, buflen, ", %s, %s %s",
840 arm_reg_names[dpi_inst.dpii_un.dpii_ri.dpisr_targ],
841 arm_dpi_shifts[dpi_inst.dpii_un.dpii_ri.dpisr_code],
|