/*===- TableGen'erated file -------------------------------------*- C++ -*-===*\ |* *| |*Assembly Writer Source Fragment *| |* *| |* Automatically generated file, do not edit! *| |* *| \*===----------------------------------------------------------------------===*/ /* Capstone Disassembly Engine */ /* By Nguyen Anh Quynh , 2013-2014 */ #include // debug #include /// printInstruction - This method is automatically generated by tablegen /// from the instruction set description. static void printInstruction(MCInst *MI, SStream *O, MCRegisterInfo *MRI) { static const uint32_t OpInfo[] = { 0U, // PHI 0U, // INLINEASM 0U, // CFI_INSTRUCTION 0U, // EH_LABEL 0U, // GC_LABEL 0U, // KILL 0U, // EXTRACT_SUBREG 0U, // INSERT_SUBREG 0U, // IMPLICIT_DEF 0U, // SUBREG_TO_REG 0U, // COPY_TO_REGCLASS 665U, // DBG_VALUE 0U, // REG_SEQUENCE 0U, // COPY 658U, // BUNDLE 687U, // LIFETIME_START 645U, // LIFETIME_END 0U, // STACKMAP 0U, // PATCHPOINT 2250U, // ADD_2rus 2250U, // ADD_3r 10363U, // ADJCALLSTACKDOWN 10383U, // ADJCALLSTACKUP 2361840U, // ANDNOT_2r 2255U, // AND_3r 2404U, // ASHR_l2rus 2404U, // ASHR_l3r 10769U, // BAU_1r 2099777U, // BITREV_l2r 19161U, // BLACP_lu10 19161U, // BLACP_u10 10672U, // BLAT_lu6 10672U, // BLAT_u6 10425U, // BLA_1r 10510U, // BLRB_lu10 10510U, // BLRB_u10 10510U, // BLRF_lu10 10510U, // BLRF_u10 2099418U, // BRBF_lru6 2099418U, // BRBF_ru6 2099638U, // BRBT_lru6 2099638U, // BRBT_ru6 10774U, // BRBU_lu6 10774U, // BRBU_u6 2099418U, // BRFF_lru6 2099418U, // BRFF_ru6 2099638U, // BRFT_lru6 2099638U, // BRFT_ru6 10774U, // BRFU_lu6 10774U, // BRFU_u6 10791U, // BRU_1r 553511U, // BR_JT 815655U, // BR_JT32 2099768U, // BYTEREV_l2r 2132815U, // CHKCT_2r 2132815U, // CHKCT_rus 1163U, // CLRE_0R 19301U, // CLRPT_1R 10614U, // CLRSR_branch_lu6 10614U, // CLRSR_branch_u6 10614U, // CLRSR_lu6 10614U, // CLRSR_u6 2099807U, // CLZ_l2r 5247047U, // CRC8_l4r 17041459U, // CRC_l3r 1168U, // DCALL_0R 1200U, // DENTSP_0R 10488U, // DGETREG_1r 2474U, // DIVS_l3r 2610U, // DIVU_l3r 1207U, // DRESTSP_0R 1242U, // DRET_0R 10475U, // ECALLF_1r 10723U, // ECALLT_1r 19342U, // EDU_1r 6334686U, // EEF_2r 6334929U, // EET_2r 19351U, // EEU_1r 2099310U, // EH_RETURN 6334765U, // ENDIN_2r 10569U, // ENTSP_lu6 10569U, // ENTSP_u6 2400U, // EQ_2rus 2400U, // EQ_3r 10554U, // EXTDP_lu6 10554U, // EXTDP_u6 10585U, // EXTSP_lu6 10585U, // EXTSP_u6 10401U, // FRAME_TO_ARGS_OFFSET 19256U, // FREER_1r 1236U, // FREET_0R 6334676U, // GETD_l2r 1139U, // GETED_0R 1224U, // GETET_0R 1151U, // GETID_0R 1174U, // GETKEP_0R 1187U, // GETKSP_0R 6334772U, // GETN_l2r 51670U, // GETPS_l2r 2099588U, // GETR_rus 10252U, // GETSR_lu6 10252U, // GETSR_u6 6334968U, // GETST_2r 6334883U, // GETTS_2r 6334906U, // INCT_2r 62438U, // INITCP_2r 70630U, // INITDP_2r 78822U, // INITLR_l2r 87014U, // INITPC_2r 95206U, // INITSP_2r 8432212U, // INPW_l2rus 6596970U, // INSHR_2r 6334955U, // INT_2r 6334768U, // IN_2r 675U, // Int_MemBarrier 10528U, // KCALL_1r 10528U, // KCALL_lu6 10528U, // KCALL_u6 10568U, // KENTSP_lu6 10568U, // KENTSP_u6 10576U, // KRESTSP_lu6 10576U, // KRESTSP_u6 1247U, // KRET_0R 45093065U, // LADD_l5r 12585354U, // LD16S_3r 12585483U, // LD8U_3r 14682170U, // LDA16B_l3r 12585018U, // LDA16F_l3r 10241U, // LDAPB_lu10 10241U, // LDAPB_u10 10241U, // LDAPF_lu10 10241U, // LDAPF_lu10_ba 10241U, // LDAPF_u10 14682697U, // LDAWB_l2rus 14682697U, // LDAWB_l3r 19134U, // LDAWCP_lu6 19134U, // LDAWCP_u6 100937U, // LDAWDP_lru6 100937U, // LDAWDP_ru6 2099282U, // LDAWFI 12585545U, // LDAWF_l2rus 12585545U, // LDAWF_l3r 109129U, // LDAWSP_lru6 109129U, // LDAWSP_ru6 2099396U, // LDC_lru6 2099396U, // LDC_ru6 1105U, // LDET_0R 184551985U, // LDIVU_l5r 1075U, // LDSED_0R 1015U, // LDSPC_0R 1045U, // LDSSR_0R 117327U, // LDWCP_lru6 19148U, // LDWCP_lu10 117327U, // LDWCP_ru6 19148U, // LDWCP_u10 100943U, // LDWDP_lru6 100943U, // LDWDP_ru6 2099292U, // LDWFI 109135U, // LDWSP_lru6 109135U, // LDWSP_ru6 12585551U, // LDW_2rus 12585551U, // LDW_3r 268437799U, // LMUL_l6r 2462U, // LSS_3r 45093054U, // LSUB_l5r 2604U, // LSU_3r 452987281U, // MACCS_l4r 452987418U, // MACCU_l4r 19224U, // MJOIN_1r 2099463U, // MKMSK_2r 2099463U, // MKMSK_rus 19169U, // MSYNC_1r 2344U, // MUL_l3r 2099443U, // NEG 2099699U, // NOT 2418U, // OR_3r 2132826U, // OUTCT_2r 2132826U, // OUTCT_rus 78681013U, // OUTPW_l2rus 2136899U, // OUTSHR_2r 2132859U, // OUTT_2r 2132869U, // OUT_2r 6334721U, // PEEK_2r 2456U, // REMS_l3r 2593U, // REMU_l3r 10561U, // RETSP_lu6 10561U, // RETSP_u6 612U, // SELECT_CC 2132748U, // SETCLK_l2r 10264U, // SETCP_1r 2132728U, // SETC_l2r 2132728U, // SETC_lru6 2132728U, // SETC_ru6 10273U, // SETDP_1r 2132738U, // SETD_2r 125856U, // SETEV_1r 632U, // SETKEP_0R 2132771U, // SETN_l2r 2132716U, // SETPSC_2r 2132951U, // SETPS_l2r 2132848U, // SETPT_2r 2132939U, // SETRDY_l2r 10282U, // SETSP_1r 10621U, // SETSR_branch_lu6 10621U, // SETSR_branch_u6 10621U, // SETSR_lu6 10621U, // SETSR_u6 2132928U, // SETTW_l2r 125867U, // SETV_1r 2361855U, // SEXT_2r 2361855U, // SEXT_rus 2331U, // SHL_2rus 2331U, // SHL_3r 2405U, // SHR_2rus 2405U, // SHR_3r 1133U, // SSYNC_0r 12585025U, // ST16_l3r 12585037U, // ST8_l3r 1119U, // STET_0R 1090U, // STSED_0R 1030U, // STSPC_0R 1060U, // STSSR_0R 100954U, // STWDP_lru6 100954U, // STWDP_ru6 2099301U, // STWFI 109146U, // STWSP_lru6 109146U, // STWSP_ru6 12585562U, // STW_2rus 12585562U, // STW_l3r 2239U, // SUB_2rus 2239U, // SUB_3r 19245U, // SYNCR_1r 6334912U, // TESTCT_2r 6334738U, // TESTLCL_l2r 6334920U, // TESTWCT_2r 2100415U, // TSETMR_2r 138207U, // TSETR_3r 19438U, // TSTART_1R 10467U, // WAITEF_1R 10715U, // WAITET_1R 1252U, // WAITEU_0R 2417U, // XOR_l3r 2361861U, // ZEXT_2r 2361861U, // ZEXT_rus 0U }; static const char AsmStrs[] = { /* 0 */ 'l', 'd', 'a', 'p', 32, 'r', '1', '1', ',', 32, 0, /* 11 */ 'g', 'e', 't', 's', 'r', 32, 'r', '1', '1', ',', 32, 0, /* 23 */ 's', 'e', 't', 32, 'c', 'p', ',', 32, 0, /* 32 */ 's', 'e', 't', 32, 'd', 'p', ',', 32, 0, /* 41 */ 's', 'e', 't', 32, 's', 'p', ',', 32, 0, /* 50 */ 'c', 'r', 'c', '3', '2', 32, 0, /* 57 */ 'l', 'd', 'a', '1', '6', 32, 0, /* 64 */ 's', 't', '1', '6', 32, 0, /* 70 */ 'c', 'r', 'c', '8', 32, 0, /* 76 */ 's', 't', '8', 32, 0, /* 81 */ '#', 32, 'L', 'D', 'A', 'W', 'F', 'I', 32, 0, /* 91 */ '#', 32, 'L', 'D', 'W', 'F', 'I', 32, 0, /* 100 */ '#', 32, 'S', 'T', 'W', 'F', 'I', 32, 0, /* 109 */ '#', 32, 'E', 'H', '_', 'R', 'E', 'T', 'U', 'R', 'N', 32, 0, /* 122 */ '#', 32, 'A', 'D', 'J', 'C', 'A', 'L', 'L', 'S', 'T', 'A', 'C', 'K', 'D', 'O', 'W', 'N', 32, 0, /* 142 */ '#', 32, 'A', 'D', 'J', 'C', 'A', 'L', 'L', 'S', 'T', 'A', 'C', 'K', 'U', 'P', 32, 0, /* 160 */ '#', 32, 'F', 'R', 'A', 'M', 'E', '_', 'T', 'O', '_', 'A', 'R', 'G', 'S', '_', 'O', 'F', 'F', 'S', 'E', 'T', 32, 0, /* 184 */ 'b', 'l', 'a', 32, 0, /* 189 */ 'l', 's', 'u', 'b', 32, 0, /* 195 */ 'l', 'd', 'c', 32, 0, /* 200 */ 'l', 'a', 'd', 'd', 32, 0, /* 206 */ 'a', 'n', 'd', 32, 0, /* 211 */ 'g', 'e', 't', 'd', 32, 0, /* 217 */ 'b', 'f', 32, 0, /* 221 */ 'e', 'e', 'f', 32, 0, /* 226 */ 'w', 'a', 'i', 't', 'e', 'f', 32, 0, /* 234 */ 'e', 'c', 'a', 'l', 'l', 'f', 32, 0, /* 242 */ 'n', 'e', 'g', 32, 0, /* 247 */ 'd', 'g', 'e', 't', 'r', 'e', 'g', 32, 0, /* 256 */ 'p', 'e', 'e', 'k', 32, 0, /* 262 */ 'm', 'k', 'm', 's', 'k', 32, 0, /* 269 */ 'b', 'l', 32, 0, /* 273 */ 't', 'e', 's', 't', 'l', 'c', 'l', 32, 0, /* 282 */ 's', 'h', 'l', 32, 0, /* 287 */ 'k', 'c', 'a', 'l', 'l', 32, 0, /* 294 */ 'l', 'm', 'u', 'l', 32, 0, /* 300 */ 'e', 'n', 'd', 'i', 'n', 32, 0, /* 307 */ 'g', 'e', 't', 'n', 32, 0, /* 313 */ 'e', 'x', 't', 'd', 'p', 32, 0, /* 320 */ 'r', 'e', 't', 's', 'p', 32, 0, /* 327 */ 'k', 'e', 'n', 't', 's', 'p', 32, 0, /* 335 */ 'k', 'r', 'e', 's', 't', 's', 'p', 32, 0, /* 344 */ 'e', 'x', 't', 's', 'p', 32, 0, /* 351 */ 'e', 'q', 32, 0, /* 355 */ 'a', 's', 'h', 'r', 32, 0, /* 361 */ 'i', 'n', 's', 'h', 'r', 32, 0, /* 368 */ 'x', 'o', 'r', 32, 0, /* 373 */ 'c', 'l', 'r', 's', 'r', 32, 0, /* 380 */ 's', 'e', 't', 's', 'r', 32, 0, /* 387 */ 'g', 'e', 't', 'r', 32, 0, /* 393 */ 'l', 'd', '1', '6', 's', 32, 0, /* 400 */ 'm', 'a', 'c', 'c', 's', 32, 0, /* 407 */ 'r', 'e', 'm', 's', 32, 0, /* 413 */ 'l', 's', 's', 32, 0, /* 418 */ 'g', 'e', 't', 't', 's', 32, 0, /* 425 */ 'd', 'i', 'v', 's', 32, 0, /* 431 */ 'b', 'l', 'a', 't', 32, 0, /* 437 */ 'b', 't', 32, 0, /* 441 */ 'i', 'n', 'c', 't', 32, 0, /* 447 */ 't', 'e', 's', 't', 'c', 't', 32, 0, /* 455 */ 't', 'e', 's', 't', 'w', 'c', 't', 32, 0, /* 464 */ 'e', 'e', 't', 32, 0, /* 469 */ 'g', 'e', 't', 32, 0, /* 474 */ 'w', 'a', 'i', 't', 'e', 't', 32, 0, /* 482 */ 'e', 'c', 'a', 'l', 'l', 't', 32, 0, /* 490 */ 'i', 'n', 't', 32, 0, /* 495 */ 'a', 'n', 'd', 'n', 'o', 't', 32, 0, /* 503 */ 'g', 'e', 't', 's', 't', 32, 0, /* 510 */ 's', 'e', 'x', 't', 32, 0, /* 516 */ 'z', 'e', 'x', 't', 32, 0, /* 522 */ 'l', 'd', '8', 'u', 32, 0, /* 528 */ 'b', 'a', 'u', 32, 0, /* 533 */ 'b', 'u', 32, 0, /* 537 */ 'm', 'a', 'c', 'c', 'u', 32, 0, /* 544 */ 'r', 'e', 'm', 'u', 32, 0, /* 550 */ 'b', 'r', 'u', 32, 0, /* 555 */ 'l', 's', 'u', 32, 0, /* 560 */ 'l', 'd', 'i', 'v', 'u', 32, 0, /* 567 */ 'b', 'y', 't', 'e', 'r', 'e', 'v', 32, 0, /* 576 */ 'b', 'i', 't', 'r', 'e', 'v', 32, 0, /* 584 */ 'l', 'd', 'a', 'w', 32, 0, /* 590 */ 'l', 'd', 'w', 32, 0, /* 595 */ 'i', 'n', 'p', 'w', 32, 0, /* 601 */ 's', 't', 'w', 32, 0, /* 606 */ 'c', 'l', 'z', 32, 0, /* 611 */ '#', 32, 'S', 'E', 'L', 'E', 'C', 'T', '_', 'C', 'C', 32, 'P', 'S', 'E', 'U', 'D', 'O', '!', 0, /* 631 */ 's', 'e', 't', 32, 'k', 'e', 'p', ',', 32, 'r', '1', '1', 0, /* 644 */ 'L', 'I', 'F', 'E', 'T', 'I', 'M', 'E', '_', 'E', 'N', 'D', 0, /* 657 */ 'B', 'U', 'N', 'D', 'L', 'E', 0, /* 664 */ 'D', 'B', 'G', '_', 'V', 'A', 'L', 'U', 'E', 0, /* 674 */ '#', 'M', 'E', 'M', 'B', 'A', 'R', 'R', 'I', 'E', 'R', 0, /* 686 */ 'L', 'I', 'F', 'E', 'T', 'I', 'M', 'E', '_', 'S', 'T', 'A', 'R', 'T', 0, /* 701 */ 'l', 'd', 'a', 'w', 32, 'r', '1', '1', ',', 32, 'c', 'p', '[', 0, /* 715 */ 'l', 'd', 'w', 32, 'r', '1', '1', ',', 32, 'c', 'p', '[', 0, /* 728 */ 'b', 'l', 'a', 32, 'c', 'p', '[', 0, /* 736 */ 'm', 's', 'y', 'n', 'c', 32, 'r', 'e', 's', '[', 0, /* 747 */ 's', 'e', 't', 'p', 's', 'c', 32, 'r', 'e', 's', '[', 0, /* 759 */ 's', 'e', 't', 'c', 32, 'r', 'e', 's', '[', 0, /* 769 */ 's', 'e', 't', 'd', 32, 'r', 'e', 's', '[', 0, /* 779 */ 's', 'e', 't', 'c', 'l', 'k', 32, 'r', 'e', 's', '[', 0, /* 791 */ 'm', 'j', 'o', 'i', 'n', 32, 'r', 'e', 's', '[', 0, /* 802 */ 's', 'e', 't', 'n', 32, 'r', 'e', 's', '[', 0, /* 812 */ 's', 'y', 'n', 'c', 'r', 32, 'r', 'e', 's', '[', 0, /* 823 */ 'f', 'r', 'e', 'e', 'r', 32, 'r', 'e', 's', '[', 0, /* 834 */ 'o', 'u', 't', 's', 'h', 'r', 32, 'r', 'e', 's', '[', 0, /* 846 */ 'c', 'h', 'k', 'c', 't', 32, 'r', 'e', 's', '[', 0, /* 857 */ 'o', 'u', 't', 'c', 't', 32, 'r', 'e', 's', '[', 0, /* 868 */ 'c', 'l', 'r', 'p', 't', 32, 'r', 'e', 's', '[', 0, /* 879 */ 's', 'e', 't', 'p', 't', 32, 'r', 'e', 's', '[', 0, /* 890 */ 'o', 'u', 't', 't', 32, 'r', 'e', 's', '[', 0, /* 900 */ 'o', 'u', 't', 32, 'r', 'e', 's', '[', 0, /* 909 */ 'e', 'd', 'u', 32, 'r', 'e', 's', '[', 0, /* 918 */ 'e', 'e', 'u', 32, 'r', 'e', 's', '[', 0, /* 927 */ 's', 'e', 't', 'e', 'v', 32, 'r', 'e', 's', '[', 0, /* 938 */ 's', 'e', 't', 'v', 32, 'r', 'e', 's', '[', 0, /* 948 */ 'o', 'u', 't', 'p', 'w', 32, 'r', 'e', 's', '[', 0, /* 959 */ 's', 'e', 't', 't', 'w', 32, 'r', 'e', 's', '[', 0, /* 970 */ 's', 'e', 't', 'r', 'd', 'y', 32, 'r', 'e', 's', '[', 0, /* 982 */ 's', 'e', 't', 32, 'p', 's', '[', 0, /* 990 */ 's', 'e', 't', 32, 't', '[', 0, /* 997 */ 'i', 'n', 'i', 't', 32, 't', '[', 0, /* 1005 */ 's', 't', 'a', 'r', 't', 32, 't', '[', 0, /* 1014 */ 'l', 'd', 'w', 32, 's', 'p', 'c', ',', 32, 's', 'p', '[', '1', ']', 0, /* 1029 */ 's', 't', 'w', 32, 's', 'p', 'c', ',', 32, 's', 'p', '[', '1', ']', 0, /* 1044 */ 'l', 'd', 'w', 32, 's', 's', 'r', ',', 32, 's', 'p', '[', '2', ']', 0, /* 1059 */ 's', 't', 'w', 32, 's', 's', 'r', ',', 32, 's', 'p', '[', '2', ']', 0, /* 1074 */ 'l', 'd', 'w', 32, 's', 'e', 'd', ',', 32, 's', 'p', '[', '3', ']', 0, /* 1089 */ 's', 't', 'w', 32, 's', 'e', 'd', ',', 32, 's', 'p', '[', '3', ']', 0, /* 1104 */ 'l', 'd', 'w', 32, 'e', 't', ',', 32, 's', 'p', '[', '4', ']', 0, /* 1118 */ 's', 't', 'w', 32, 'e', 't', ',', 32, 's', 'p', '[', '4', ']', 0, /* 1132 */ 's', 's', 'y', 'n', 'c', 0, /* 1138 */ 'g', 'e', 't', 32, 'r', '1', '1', ',', 32, 'e', 'd', 0, /* 1150 */ 'g', 'e', 't', 32, 'r', '1', '1', ',', 32, 'i', 'd', 0, /* 1162 */ 'c', 'l', 'r', 'e', 0, /* 1167 */ 'd', 'c', 'a', 'l', 'l', 0, /* 1173 */ 'g', 'e', 't', 32, 'r', '1', '1', ',', 32, 'k', 'e', 'p', 0, /* 1186 */ 'g', 'e', 't', 32, 'r', '1', '1', ',', 32, 'k', 's', 'p', 0, /* 1199 */ 'd', 'e', 'n', 't', 's', 'p', 0, /* 1206 */ 'd', 'r', 'e', 's', 't', 's', 'p', 0, /* 1214 */ 't', 's', 'e', 't', 'm', 'r', 32, 'r', 0, /* 1223 */ 'g', 'e', 't', 32, 'r', '1', '1', ',', 32, 'e', 't', 0, /* 1235 */ 'f', 'r', 'e', 'e', 't', 0, /* 1241 */ 'd', 'r', 'e', 't', 0, /* 1246 */ 'k', 'r', 'e', 't', 0, /* 1251 */ 'w', 'a', 'i', 't', 'e', 'u', 0, }; // Emit the opcode for the instruction. uint32_t Bits = OpInfo[MCInst_getOpcode(MI)]; // assert(Bits != 0 && "Cannot print this instruction."); #ifndef CAPSTONE_DIET SStream_concat(O, "%s", AsmStrs+(Bits & 2047)-1); #endif if (strchr((const char *)AsmStrs+(Bits & 2047)-1, '[')) { set_mem_access(MI, true, 0); } // Fragment 0 encoded into 2 bits for 4 unique commands. //printf(">>%s\n", AsmStrs+(Bits & 2047)-1); //printf("Frag-0: %u\n", (Bits >> 11) & 3); switch ((Bits >> 11) & 3) { default: // unreachable. case 0: // DBG_VALUE, BUNDLE, LIFETIME_START, LIFETIME_END, CLRE_0R, DCALL_0R, DE... // already done. this means we have to extract details out ourself. XCore_insn_extract(MI, (const char *)AsmStrs+(Bits & 2047)-1); return; break; case 1: // ADD_2rus, ADD_3r, ADJCALLSTACKDOWN, ADJCALLSTACKUP, ANDNOT_2r, AND_3r,... printOperand(MI, 0, O); break; case 2: // BR_JT, BR_JT32, CRC8_l4r, INITCP_2r, INITDP_2r, INITLR_l2r, INITPC_2r,... printOperand(MI, 1, O); break; case 3: // OUTSHR_2r, TSETR_3r printOperand(MI, 2, O); break; } // Fragment 1 encoded into 5 bits for 17 unique commands. //printf("Frag-1: %u\n", (Bits >> 13) & 31); switch ((Bits >> 13) & 31) { default: // unreachable. case 0: // ADD_2rus, ADD_3r, ANDNOT_2r, AND_3r, ASHR_l2rus, ASHR_l3r, BITREV_l2r,... SStream_concat(O, "%s", ", "); break; case 1: // ADJCALLSTACKDOWN, ADJCALLSTACKUP, BAU_1r, BLAT_lu6, BLAT_u6, BLA_1r, B... return; break; case 2: // BLACP_lu10, BLACP_u10, CLRPT_1R, EDU_1r, EEU_1r, FREER_1r, LDAWCP_lu6,... SStream_concat(O, "%s", "]"); set_mem_access(MI, false, 0); return; break; case 3: // BR_JT, BR_JT32 SStream_concat(O, "%s", "\n"); break; case 4: // CHKCT_2r, CHKCT_rus, OUTCT_2r, OUTCT_rus, OUTPW_l2rus, OUTSHR_2r, OUTT... SStream_concat(O, "%s", "], "); set_mem_access(MI, false, 0); break; case 5: // EEF_2r, EET_2r, ENDIN_2r, GETD_l2r, GETN_l2r, GETST_2r, GETTS_2r, INCT... SStream_concat(O, "%s", ", res["); set_mem_access(MI, true, 0); break; case 6: // GETPS_l2r SStream_concat(O, "%s", ", ps["); set_mem_access(MI, true, 0); printOperand(MI, 1, O); SStream_concat(O, "%s", "]"); set_mem_access(MI, false, 0); return; break; case 7: // INITCP_2r SStream_concat(O, "%s", "]:cp, "); set_mem_access(MI, false, XCORE_REG_CP); printOperand(MI, 0, O); return; break; case 8: // INITDP_2r SStream_concat(O, "%s", "]:dp, "); set_mem_access(MI, false, XCORE_REG_DP); printOperand(MI, 0, O); return; break; case 9: // INITLR_l2r SStream_concat(O, "%s", "]:lr, "); set_mem_access(MI, false, XCORE_REG_LR); printOperand(MI, 0, O); return; break; case 10: // INITPC_2r SStream_concat(O, "%s", "]:pc, "); set_mem_access(MI, false, XCORE_REG_PC); printOperand(MI, 0, O); return; break; case 11: // INITSP_2r SStream_concat(O, "%s", "]:sp, "); set_mem_access(MI, false, XCORE_REG_SP); printOperand(MI, 0, O); return; break; case 12: // LDAWDP_lru6, LDAWDP_ru6, LDWDP_lru6, LDWDP_ru6, STWDP_lru6, STWDP_ru6 SStream_concat(O, "%s", ", dp["); set_mem_access(MI, true, XCORE_REG_DP); printOperand(MI, 1, O); SStream_concat(O, "%s", "]"); set_mem_access(MI, false, 0); return; break; case 13: // LDAWSP_lru6, LDAWSP_ru6, LDWSP_lru6, LDWSP_ru6, STWSP_lru6, STWSP_ru6 SStream_concat(O, "%s", ", sp["); set_mem_access(MI, true, XCORE_REG_SP); printOperand(MI, 1, O); SStream_concat(O, "%s", "]"); set_mem_access(MI, false, 0); return; break; case 14: // LDWCP_lru6, LDWCP_ru6 SStream_concat(O, "%s", ", cp["); set_mem_access(MI, true, XCORE_REG_CP); printOperand(MI, 1, O); SStream_concat(O, "%s", "]"); set_mem_access(MI, false, 0); return; break; case 15: // SETEV_1r, SETV_1r SStream_concat(O, "%s", "], r11"); set_mem_access(MI, false, 0); return; break; case 16: // TSETR_3r SStream_concat(O, "%s", "]:r"); set_mem_access(MI, false, 0); printOperand(MI, 0, O); SStream_concat(O, "%s", ", "); printOperand(MI, 1, O); return; break; } // Fragment 2 encoded into 3 bits for 5 unique commands. //printf("Frag-2: %u\n", (Bits >> 18) & 7); switch ((Bits >> 18) & 7) { default: // unreachable. case 0: // ADD_2rus, ADD_3r, AND_3r, ASHR_l2rus, ASHR_l3r, BITREV_l2r, BRBF_lru6,... printOperand(MI, 1, O); break; case 1: // ANDNOT_2r, CRC_l3r, INSHR_2r, SEXT_2r, SEXT_rus, ZEXT_2r, ZEXT_rus printOperand(MI, 2, O); break; case 2: // BR_JT printInlineJT(MI, 0, O); return; break; case 3: // BR_JT32 printInlineJT32(MI, 0, O); return; break; case 4: // CRC8_l4r, LADD_l5r, LSUB_l5r, OUTPW_l2rus printOperand(MI, 0, O); SStream_concat(O, "%s", ", "); break; } // Fragment 3 encoded into 3 bits for 8 unique commands. //printf("Frag-3: %u\n", (Bits >> 21) & 7); switch ((Bits >> 21) & 7) { default: // unreachable. case 0: // ADD_2rus, ADD_3r, AND_3r, ASHR_l2rus, ASHR_l3r, CRC_l3r, DIVS_l3r, DIV... SStream_concat(O, "%s", ", "); break; case 1: // ANDNOT_2r, BITREV_l2r, BRBF_lru6, BRBF_ru6, BRBT_lru6, BRBT_ru6, BRFF_... return; break; case 2: // CRC8_l4r printOperand(MI, 3, O); SStream_concat(O, "%s", ", "); printOperand(MI, 4, O); return; break; case 3: // EEF_2r, EET_2r, ENDIN_2r, GETD_l2r, GETN_l2r, GETST_2r, GETTS_2r, INCT... SStream_concat(O, "%s", "]"); set_mem_access(MI, false, 0); return; break; case 4: // INPW_l2rus SStream_concat(O, "%s", "], "); set_mem_access(MI, false, 0); printOperand(MI, 2, O); return; break; case 5: // LADD_l5r, LSUB_l5r, OUTPW_l2rus printOperand(MI, 2, O); break; case 6: // LD16S_3r, LD8U_3r, LDA16F_l3r, LDAWF_l2rus, LDAWF_l3r, LDW_2rus, LDW_3... SStream_concat(O, "%s", "["); set_mem_access(MI, true, 0xffff); printOperand(MI, 2, O); SStream_concat(O, "%s", "]"); set_mem_access(MI, false, 0); return; break; case 7: // LDA16B_l3r, LDAWB_l2rus, LDAWB_l3r SStream_concat(O, "%s", "[-"); set_mem_access(MI, true, -0xffff); printOperand(MI, 2, O); SStream_concat(O, "%s", "]"); set_mem_access(MI, false, 0); return; break; } // Fragment 4 encoded into 3 bits for 5 unique commands. //printf("Frag-4: %u\n", (Bits >> 24) & 7); switch ((Bits >> 24) & 7) { default: // unreachable. case 0: // ADD_2rus, ADD_3r, AND_3r, ASHR_l2rus, ASHR_l3r, DIVS_l3r, DIVU_l3r, EQ... printOperand(MI, 2, O); break; case 1: // CRC_l3r printOperand(MI, 3, O); return; break; case 2: // LADD_l5r, LSUB_l5r SStream_concat(O, "%s", ", "); printOperand(MI, 3, O); SStream_concat(O, "%s", ", "); printOperand(MI, 4, O); return; break; case 3: // LDIVU_l5r, MACCS_l4r, MACCU_l4r printOperand(MI, 4, O); SStream_concat(O, "%s", ", "); break; case 4: // OUTPW_l2rus return; break; } // Fragment 5 encoded into 2 bits for 4 unique commands. //printf("Frag-5: %u\n", (Bits >> 27) & 3); switch ((Bits >> 27) & 3) { default: // unreachable. case 0: // ADD_2rus, ADD_3r, AND_3r, ASHR_l2rus, ASHR_l3r, DIVS_l3r, DIVU_l3r, EQ... return; break; case 1: // LDIVU_l5r printOperand(MI, 2, O); SStream_concat(O, "%s", ", "); printOperand(MI, 3, O); return; break; case 2: // LMUL_l6r SStream_concat(O, "%s", ", "); printOperand(MI, 3, O); SStream_concat(O, "%s", ", "); printOperand(MI, 4, O); SStream_concat(O, "%s", ", "); printOperand(MI, 5, O); return; break; case 3: // MACCS_l4r, MACCU_l4r printOperand(MI, 5, O); return; break; } } /// getRegisterName - This method is automatically generated by tblgen /// from the register set description. This returns the assembler name /// for the specified register. static const char *getRegisterName(unsigned RegNo) { // assert(RegNo && RegNo < 17 && "Invalid register number!"); #ifndef CAPSTONE_DIET static const char AsmStrs[] = { /* 0 */ 'r', '1', '0', 0, /* 4 */ 'r', '0', 0, /* 7 */ 'r', '1', '1', 0, /* 11 */ 'r', '1', 0, /* 14 */ 'r', '2', 0, /* 17 */ 'r', '3', 0, /* 20 */ 'r', '4', 0, /* 23 */ 'r', '5', 0, /* 26 */ 'r', '6', 0, /* 29 */ 'r', '7', 0, /* 32 */ 'r', '8', 0, /* 35 */ 'r', '9', 0, /* 38 */ 'c', 'p', 0, /* 41 */ 'd', 'p', 0, /* 44 */ 's', 'p', 0, /* 47 */ 'l', 'r', 0, }; static const uint32_t RegAsmOffset[] = { 38, 41, 47, 44, 4, 11, 14, 17, 20, 23, 26, 29, 32, 35, 0, 7, }; //int i; //for (i = 0; i < sizeof(RegAsmOffset)/4; i++) // printf("%s = %u\n", AsmStrs+RegAsmOffset[i], i + 1); //printf("*************************\n"); return AsmStrs+RegAsmOffset[RegNo-1]; #else return NULL; #endif }