1/*===- TableGen'erated file -------------------------------------*- C++ -*-===*\ 2|* *| 3|*Assembly Writer Source Fragment *| 4|* *| 5|* Automatically generated file, do not edit! *| 6|* *| 7\*===----------------------------------------------------------------------===*/ 8 9/* Capstone Disassembly Engine */ 10/* By Nguyen Anh Quynh <aquynh@gmail.com>, 2013-2014 */ 11 12#include <stdio.h> // debug 13#include <platform.h> 14 15 16/// printInstruction - This method is automatically generated by tablegen 17/// from the instruction set description. 18static void printInstruction(MCInst *MI, SStream *O, MCRegisterInfo *MRI) 19{ 20 static const uint32_t OpInfo[] = { 21 0U, // PHI 22 0U, // INLINEASM 23 0U, // CFI_INSTRUCTION 24 0U, // EH_LABEL 25 0U, // GC_LABEL 26 0U, // KILL 27 0U, // EXTRACT_SUBREG 28 0U, // INSERT_SUBREG 29 0U, // IMPLICIT_DEF 30 0U, // SUBREG_TO_REG 31 0U, // COPY_TO_REGCLASS 32 665U, // DBG_VALUE 33 0U, // REG_SEQUENCE 34 0U, // COPY 35 658U, // BUNDLE 36 687U, // LIFETIME_START 37 645U, // LIFETIME_END 38 0U, // STACKMAP 39 0U, // PATCHPOINT 40 0U, // LOAD_STACK_GUARD 41 2250U, // ADD_2rus 42 2250U, // ADD_3r 43 10363U, // ADJCALLSTACKDOWN 44 10383U, // ADJCALLSTACKUP 45 2361840U, // ANDNOT_2r 46 2255U, // AND_3r 47 2404U, // ASHR_l2rus 48 2404U, // ASHR_l3r 49 10769U, // BAU_1r 50 2099777U, // BITREV_l2r 51 19161U, // BLACP_lu10 52 19161U, // BLACP_u10 53 10672U, // BLAT_lu6 54 10672U, // BLAT_u6 55 10425U, // BLA_1r 56 10510U, // BLRB_lu10 57 10510U, // BLRB_u10 58 10510U, // BLRF_lu10 59 10510U, // BLRF_u10 60 2099418U, // BRBF_lru6 61 2099418U, // BRBF_ru6 62 2099638U, // BRBT_lru6 63 2099638U, // BRBT_ru6 64 10774U, // BRBU_lu6 65 10774U, // BRBU_u6 66 2099418U, // BRFF_lru6 67 2099418U, // BRFF_ru6 68 2099638U, // BRFT_lru6 69 2099638U, // BRFT_ru6 70 10774U, // BRFU_lu6 71 10774U, // BRFU_u6 72 10791U, // BRU_1r 73 553511U, // BR_JT 74 815655U, // BR_JT32 75 2099768U, // BYTEREV_l2r 76 2132815U, // CHKCT_2r 77 2132815U, // CHKCT_rus 78 1163U, // CLRE_0R 79 19301U, // CLRPT_1R 80 10614U, // CLRSR_branch_lu6 81 10614U, // CLRSR_branch_u6 82 10614U, // CLRSR_lu6 83 10614U, // CLRSR_u6 84 2099807U, // CLZ_l2r 85 5247047U, // CRC8_l4r 86 17041459U, // CRC_l3r 87 1168U, // DCALL_0R 88 1200U, // DENTSP_0R 89 10488U, // DGETREG_1r 90 2474U, // DIVS_l3r 91 2610U, // DIVU_l3r 92 1207U, // DRESTSP_0R 93 1242U, // DRET_0R 94 10475U, // ECALLF_1r 95 10723U, // ECALLT_1r 96 19342U, // EDU_1r 97 6334686U, // EEF_2r 98 6334929U, // EET_2r 99 19351U, // EEU_1r 100 2099310U, // EH_RETURN 101 6334765U, // ENDIN_2r 102 10569U, // ENTSP_lu6 103 10569U, // ENTSP_u6 104 2400U, // EQ_2rus 105 2400U, // EQ_3r 106 10554U, // EXTDP_lu6 107 10554U, // EXTDP_u6 108 10585U, // EXTSP_lu6 109 10585U, // EXTSP_u6 110 10401U, // FRAME_TO_ARGS_OFFSET 111 19256U, // FREER_1r 112 1236U, // FREET_0R 113 6334676U, // GETD_l2r 114 1139U, // GETED_0R 115 1224U, // GETET_0R 116 1151U, // GETID_0R 117 1174U, // GETKEP_0R 118 1187U, // GETKSP_0R 119 6334772U, // GETN_l2r 120 51670U, // GETPS_l2r 121 2099588U, // GETR_rus 122 10252U, // GETSR_lu6 123 10252U, // GETSR_u6 124 6334968U, // GETST_2r 125 6334883U, // GETTS_2r 126 6334906U, // INCT_2r 127 62438U, // INITCP_2r 128 70630U, // INITDP_2r 129 78822U, // INITLR_l2r 130 87014U, // INITPC_2r 131 95206U, // INITSP_2r 132 8432212U, // INPW_l2rus 133 6596970U, // INSHR_2r 134 6334955U, // INT_2r 135 6334768U, // IN_2r 136 675U, // Int_MemBarrier 137 10528U, // KCALL_1r 138 10528U, // KCALL_lu6 139 10528U, // KCALL_u6 140 10568U, // KENTSP_lu6 141 10568U, // KENTSP_u6 142 10576U, // KRESTSP_lu6 143 10576U, // KRESTSP_u6 144 1247U, // KRET_0R 145 45093065U, // LADD_l5r 146 12585354U, // LD16S_3r 147 12585483U, // LD8U_3r 148 14682170U, // LDA16B_l3r 149 12585018U, // LDA16F_l3r 150 10241U, // LDAPB_lu10 151 10241U, // LDAPB_u10 152 10241U, // LDAPF_lu10 153 10241U, // LDAPF_lu10_ba 154 10241U, // LDAPF_u10 155 14682697U, // LDAWB_l2rus 156 14682697U, // LDAWB_l3r 157 19134U, // LDAWCP_lu6 158 19134U, // LDAWCP_u6 159 100937U, // LDAWDP_lru6 160 100937U, // LDAWDP_ru6 161 2099282U, // LDAWFI 162 12585545U, // LDAWF_l2rus 163 12585545U, // LDAWF_l3r 164 109129U, // LDAWSP_lru6 165 109129U, // LDAWSP_ru6 166 2099396U, // LDC_lru6 167 2099396U, // LDC_ru6 168 1105U, // LDET_0R 169 184551985U, // LDIVU_l5r 170 1075U, // LDSED_0R 171 1015U, // LDSPC_0R 172 1045U, // LDSSR_0R 173 117327U, // LDWCP_lru6 174 19148U, // LDWCP_lu10 175 117327U, // LDWCP_ru6 176 19148U, // LDWCP_u10 177 100943U, // LDWDP_lru6 178 100943U, // LDWDP_ru6 179 2099292U, // LDWFI 180 109135U, // LDWSP_lru6 181 109135U, // LDWSP_ru6 182 12585551U, // LDW_2rus 183 12585551U, // LDW_3r 184 268437799U, // LMUL_l6r 185 2462U, // LSS_3r 186 45093054U, // LSUB_l5r 187 2604U, // LSU_3r 188 452987281U, // MACCS_l4r 189 452987418U, // MACCU_l4r 190 19224U, // MJOIN_1r 191 2099463U, // MKMSK_2r 192 2099463U, // MKMSK_rus 193 19169U, // MSYNC_1r 194 2344U, // MUL_l3r 195 2099443U, // NEG 196 2099699U, // NOT 197 2418U, // OR_3r 198 2132826U, // OUTCT_2r 199 2132826U, // OUTCT_rus 200 78681013U, // OUTPW_l2rus 201 2136899U, // OUTSHR_2r 202 2132859U, // OUTT_2r 203 2132869U, // OUT_2r 204 6334721U, // PEEK_2r 205 2456U, // REMS_l3r 206 2593U, // REMU_l3r 207 10561U, // RETSP_lu6 208 10561U, // RETSP_u6 209 612U, // SELECT_CC 210 2132748U, // SETCLK_l2r 211 10264U, // SETCP_1r 212 2132728U, // SETC_l2r 213 2132728U, // SETC_lru6 214 2132728U, // SETC_ru6 215 10273U, // SETDP_1r 216 2132738U, // SETD_2r 217 125856U, // SETEV_1r 218 632U, // SETKEP_0R 219 2132771U, // SETN_l2r 220 2132716U, // SETPSC_2r 221 2132951U, // SETPS_l2r 222 2132848U, // SETPT_2r 223 2132939U, // SETRDY_l2r 224 10282U, // SETSP_1r 225 10621U, // SETSR_branch_lu6 226 10621U, // SETSR_branch_u6 227 10621U, // SETSR_lu6 228 10621U, // SETSR_u6 229 2132928U, // SETTW_l2r 230 125867U, // SETV_1r 231 2361855U, // SEXT_2r 232 2361855U, // SEXT_rus 233 2331U, // SHL_2rus 234 2331U, // SHL_3r 235 2405U, // SHR_2rus 236 2405U, // SHR_3r 237 1133U, // SSYNC_0r 238 12585025U, // ST16_l3r 239 12585037U, // ST8_l3r 240 1119U, // STET_0R 241 1090U, // STSED_0R 242 1030U, // STSPC_0R 243 1060U, // STSSR_0R 244 100954U, // STWDP_lru6 245 100954U, // STWDP_ru6 246 2099301U, // STWFI 247 109146U, // STWSP_lru6 248 109146U, // STWSP_ru6 249 12585562U, // STW_2rus 250 12585562U, // STW_l3r 251 2239U, // SUB_2rus 252 2239U, // SUB_3r 253 19245U, // SYNCR_1r 254 6334912U, // TESTCT_2r 255 6334738U, // TESTLCL_l2r 256 6334920U, // TESTWCT_2r 257 2100415U, // TSETMR_2r 258 138207U, // TSETR_3r 259 19438U, // TSTART_1R 260 10467U, // WAITEF_1R 261 10715U, // WAITET_1R 262 1252U, // WAITEU_0R 263 2417U, // XOR_l3r 264 2361861U, // ZEXT_2r 265 2361861U, // ZEXT_rus 266 0U 267 }; 268 269 static char AsmStrs[] = { 270 /* 0 */ 'l', 'd', 'a', 'p', 32, 'r', '1', '1', ',', 32, 0, 271 /* 11 */ 'g', 'e', 't', 's', 'r', 32, 'r', '1', '1', ',', 32, 0, 272 /* 23 */ 's', 'e', 't', 32, 'c', 'p', ',', 32, 0, 273 /* 32 */ 's', 'e', 't', 32, 'd', 'p', ',', 32, 0, 274 /* 41 */ 's', 'e', 't', 32, 's', 'p', ',', 32, 0, 275 /* 50 */ 'c', 'r', 'c', '3', '2', 32, 0, 276 /* 57 */ 'l', 'd', 'a', '1', '6', 32, 0, 277 /* 64 */ 's', 't', '1', '6', 32, 0, 278 /* 70 */ 'c', 'r', 'c', '8', 32, 0, 279 /* 76 */ 's', 't', '8', 32, 0, 280 /* 81 */ '#', 32, 'L', 'D', 'A', 'W', 'F', 'I', 32, 0, 281 /* 91 */ '#', 32, 'L', 'D', 'W', 'F', 'I', 32, 0, 282 /* 100 */ '#', 32, 'S', 'T', 'W', 'F', 'I', 32, 0, 283 /* 109 */ '#', 32, 'E', 'H', '_', 'R', 'E', 'T', 'U', 'R', 'N', 32, 0, 284 /* 122 */ '#', 32, 'A', 'D', 'J', 'C', 'A', 'L', 'L', 'S', 'T', 'A', 'C', 'K', 'D', 'O', 'W', 'N', 32, 0, 285 /* 142 */ '#', 32, 'A', 'D', 'J', 'C', 'A', 'L', 'L', 'S', 'T', 'A', 'C', 'K', 'U', 'P', 32, 0, 286 /* 160 */ '#', 32, 'F', 'R', 'A', 'M', 'E', '_', 'T', 'O', '_', 'A', 'R', 'G', 'S', '_', 'O', 'F', 'F', 'S', 'E', 'T', 32, 0, 287 /* 184 */ 'b', 'l', 'a', 32, 0, 288 /* 189 */ 'l', 's', 'u', 'b', 32, 0, 289 /* 195 */ 'l', 'd', 'c', 32, 0, 290 /* 200 */ 'l', 'a', 'd', 'd', 32, 0, 291 /* 206 */ 'a', 'n', 'd', 32, 0, 292 /* 211 */ 'g', 'e', 't', 'd', 32, 0, 293 /* 217 */ 'b', 'f', 32, 0, 294 /* 221 */ 'e', 'e', 'f', 32, 0, 295 /* 226 */ 'w', 'a', 'i', 't', 'e', 'f', 32, 0, 296 /* 234 */ 'e', 'c', 'a', 'l', 'l', 'f', 32, 0, 297 /* 242 */ 'n', 'e', 'g', 32, 0, 298 /* 247 */ 'd', 'g', 'e', 't', 'r', 'e', 'g', 32, 0, 299 /* 256 */ 'p', 'e', 'e', 'k', 32, 0, 300 /* 262 */ 'm', 'k', 'm', 's', 'k', 32, 0, 301 /* 269 */ 'b', 'l', 32, 0, 302 /* 273 */ 't', 'e', 's', 't', 'l', 'c', 'l', 32, 0, 303 /* 282 */ 's', 'h', 'l', 32, 0, 304 /* 287 */ 'k', 'c', 'a', 'l', 'l', 32, 0, 305 /* 294 */ 'l', 'm', 'u', 'l', 32, 0, 306 /* 300 */ 'e', 'n', 'd', 'i', 'n', 32, 0, 307 /* 307 */ 'g', 'e', 't', 'n', 32, 0, 308 /* 313 */ 'e', 'x', 't', 'd', 'p', 32, 0, 309 /* 320 */ 'r', 'e', 't', 's', 'p', 32, 0, 310 /* 327 */ 'k', 'e', 'n', 't', 's', 'p', 32, 0, 311 /* 335 */ 'k', 'r', 'e', 's', 't', 's', 'p', 32, 0, 312 /* 344 */ 'e', 'x', 't', 's', 'p', 32, 0, 313 /* 351 */ 'e', 'q', 32, 0, 314 /* 355 */ 'a', 's', 'h', 'r', 32, 0, 315 /* 361 */ 'i', 'n', 's', 'h', 'r', 32, 0, 316 /* 368 */ 'x', 'o', 'r', 32, 0, 317 /* 373 */ 'c', 'l', 'r', 's', 'r', 32, 0, 318 /* 380 */ 's', 'e', 't', 's', 'r', 32, 0, 319 /* 387 */ 'g', 'e', 't', 'r', 32, 0, 320 /* 393 */ 'l', 'd', '1', '6', 's', 32, 0, 321 /* 400 */ 'm', 'a', 'c', 'c', 's', 32, 0, 322 /* 407 */ 'r', 'e', 'm', 's', 32, 0, 323 /* 413 */ 'l', 's', 's', 32, 0, 324 /* 418 */ 'g', 'e', 't', 't', 's', 32, 0, 325 /* 425 */ 'd', 'i', 'v', 's', 32, 0, 326 /* 431 */ 'b', 'l', 'a', 't', 32, 0, 327 /* 437 */ 'b', 't', 32, 0, 328 /* 441 */ 'i', 'n', 'c', 't', 32, 0, 329 /* 447 */ 't', 'e', 's', 't', 'c', 't', 32, 0, 330 /* 455 */ 't', 'e', 's', 't', 'w', 'c', 't', 32, 0, 331 /* 464 */ 'e', 'e', 't', 32, 0, 332 /* 469 */ 'g', 'e', 't', 32, 0, 333 /* 474 */ 'w', 'a', 'i', 't', 'e', 't', 32, 0, 334 /* 482 */ 'e', 'c', 'a', 'l', 'l', 't', 32, 0, 335 /* 490 */ 'i', 'n', 't', 32, 0, 336 /* 495 */ 'a', 'n', 'd', 'n', 'o', 't', 32, 0, 337 /* 503 */ 'g', 'e', 't', 's', 't', 32, 0, 338 /* 510 */ 's', 'e', 'x', 't', 32, 0, 339 /* 516 */ 'z', 'e', 'x', 't', 32, 0, 340 /* 522 */ 'l', 'd', '8', 'u', 32, 0, 341 /* 528 */ 'b', 'a', 'u', 32, 0, 342 /* 533 */ 'b', 'u', 32, 0, 343 /* 537 */ 'm', 'a', 'c', 'c', 'u', 32, 0, 344 /* 544 */ 'r', 'e', 'm', 'u', 32, 0, 345 /* 550 */ 'b', 'r', 'u', 32, 0, 346 /* 555 */ 'l', 's', 'u', 32, 0, 347 /* 560 */ 'l', 'd', 'i', 'v', 'u', 32, 0, 348 /* 567 */ 'b', 'y', 't', 'e', 'r', 'e', 'v', 32, 0, 349 /* 576 */ 'b', 'i', 't', 'r', 'e', 'v', 32, 0, 350 /* 584 */ 'l', 'd', 'a', 'w', 32, 0, 351 /* 590 */ 'l', 'd', 'w', 32, 0, 352 /* 595 */ 'i', 'n', 'p', 'w', 32, 0, 353 /* 601 */ 's', 't', 'w', 32, 0, 354 /* 606 */ 'c', 'l', 'z', 32, 0, 355 /* 611 */ '#', 32, 'S', 'E', 'L', 'E', 'C', 'T', '_', 'C', 'C', 32, 'P', 'S', 'E', 'U', 'D', 'O', '!', 0, 356 /* 631 */ 's', 'e', 't', 32, 'k', 'e', 'p', ',', 32, 'r', '1', '1', 0, 357 /* 644 */ 'L', 'I', 'F', 'E', 'T', 'I', 'M', 'E', '_', 'E', 'N', 'D', 0, 358 /* 657 */ 'B', 'U', 'N', 'D', 'L', 'E', 0, 359 /* 664 */ 'D', 'B', 'G', '_', 'V', 'A', 'L', 'U', 'E', 0, 360 /* 674 */ '#', 'M', 'E', 'M', 'B', 'A', 'R', 'R', 'I', 'E', 'R', 0, 361 /* 686 */ 'L', 'I', 'F', 'E', 'T', 'I', 'M', 'E', '_', 'S', 'T', 'A', 'R', 'T', 0, 362 /* 701 */ 'l', 'd', 'a', 'w', 32, 'r', '1', '1', ',', 32, 'c', 'p', '[', 0, 363 /* 715 */ 'l', 'd', 'w', 32, 'r', '1', '1', ',', 32, 'c', 'p', '[', 0, 364 /* 728 */ 'b', 'l', 'a', 32, 'c', 'p', '[', 0, 365 /* 736 */ 'm', 's', 'y', 'n', 'c', 32, 'r', 'e', 's', '[', 0, 366 /* 747 */ 's', 'e', 't', 'p', 's', 'c', 32, 'r', 'e', 's', '[', 0, 367 /* 759 */ 's', 'e', 't', 'c', 32, 'r', 'e', 's', '[', 0, 368 /* 769 */ 's', 'e', 't', 'd', 32, 'r', 'e', 's', '[', 0, 369 /* 779 */ 's', 'e', 't', 'c', 'l', 'k', 32, 'r', 'e', 's', '[', 0, 370 /* 791 */ 'm', 'j', 'o', 'i', 'n', 32, 'r', 'e', 's', '[', 0, 371 /* 802 */ 's', 'e', 't', 'n', 32, 'r', 'e', 's', '[', 0, 372 /* 812 */ 's', 'y', 'n', 'c', 'r', 32, 'r', 'e', 's', '[', 0, 373 /* 823 */ 'f', 'r', 'e', 'e', 'r', 32, 'r', 'e', 's', '[', 0, 374 /* 834 */ 'o', 'u', 't', 's', 'h', 'r', 32, 'r', 'e', 's', '[', 0, 375 /* 846 */ 'c', 'h', 'k', 'c', 't', 32, 'r', 'e', 's', '[', 0, 376 /* 857 */ 'o', 'u', 't', 'c', 't', 32, 'r', 'e', 's', '[', 0, 377 /* 868 */ 'c', 'l', 'r', 'p', 't', 32, 'r', 'e', 's', '[', 0, 378 /* 879 */ 's', 'e', 't', 'p', 't', 32, 'r', 'e', 's', '[', 0, 379 /* 890 */ 'o', 'u', 't', 't', 32, 'r', 'e', 's', '[', 0, 380 /* 900 */ 'o', 'u', 't', 32, 'r', 'e', 's', '[', 0, 381 /* 909 */ 'e', 'd', 'u', 32, 'r', 'e', 's', '[', 0, 382 /* 918 */ 'e', 'e', 'u', 32, 'r', 'e', 's', '[', 0, 383 /* 927 */ 's', 'e', 't', 'e', 'v', 32, 'r', 'e', 's', '[', 0, 384 /* 938 */ 's', 'e', 't', 'v', 32, 'r', 'e', 's', '[', 0, 385 /* 948 */ 'o', 'u', 't', 'p', 'w', 32, 'r', 'e', 's', '[', 0, 386 /* 959 */ 's', 'e', 't', 't', 'w', 32, 'r', 'e', 's', '[', 0, 387 /* 970 */ 's', 'e', 't', 'r', 'd', 'y', 32, 'r', 'e', 's', '[', 0, 388 /* 982 */ 's', 'e', 't', 32, 'p', 's', '[', 0, 389 /* 990 */ 's', 'e', 't', 32, 't', '[', 0, 390 /* 997 */ 'i', 'n', 'i', 't', 32, 't', '[', 0, 391 /* 1005 */ 's', 't', 'a', 'r', 't', 32, 't', '[', 0, 392 /* 1014 */ 'l', 'd', 'w', 32, 's', 'p', 'c', ',', 32, 's', 'p', '[', '1', ']', 0, 393 /* 1029 */ 's', 't', 'w', 32, 's', 'p', 'c', ',', 32, 's', 'p', '[', '1', ']', 0, 394 /* 1044 */ 'l', 'd', 'w', 32, 's', 's', 'r', ',', 32, 's', 'p', '[', '2', ']', 0, 395 /* 1059 */ 's', 't', 'w', 32, 's', 's', 'r', ',', 32, 's', 'p', '[', '2', ']', 0, 396 /* 1074 */ 'l', 'd', 'w', 32, 's', 'e', 'd', ',', 32, 's', 'p', '[', '3', ']', 0, 397 /* 1089 */ 's', 't', 'w', 32, 's', 'e', 'd', ',', 32, 's', 'p', '[', '3', ']', 0, 398 /* 1104 */ 'l', 'd', 'w', 32, 'e', 't', ',', 32, 's', 'p', '[', '4', ']', 0, 399 /* 1118 */ 's', 't', 'w', 32, 'e', 't', ',', 32, 's', 'p', '[', '4', ']', 0, 400 /* 1132 */ 's', 's', 'y', 'n', 'c', 0, 401 /* 1138 */ 'g', 'e', 't', 32, 'r', '1', '1', ',', 32, 'e', 'd', 0, 402 /* 1150 */ 'g', 'e', 't', 32, 'r', '1', '1', ',', 32, 'i', 'd', 0, 403 /* 1162 */ 'c', 'l', 'r', 'e', 0, 404 /* 1167 */ 'd', 'c', 'a', 'l', 'l', 0, 405 /* 1173 */ 'g', 'e', 't', 32, 'r', '1', '1', ',', 32, 'k', 'e', 'p', 0, 406 /* 1186 */ 'g', 'e', 't', 32, 'r', '1', '1', ',', 32, 'k', 's', 'p', 0, 407 /* 1199 */ 'd', 'e', 'n', 't', 's', 'p', 0, 408 /* 1206 */ 'd', 'r', 'e', 's', 't', 's', 'p', 0, 409 /* 1214 */ 't', 's', 'e', 't', 'm', 'r', 32, 'r', 0, 410 /* 1223 */ 'g', 'e', 't', 32, 'r', '1', '1', ',', 32, 'e', 't', 0, 411 /* 1235 */ 'f', 'r', 'e', 'e', 't', 0, 412 /* 1241 */ 'd', 'r', 'e', 't', 0, 413 /* 1246 */ 'k', 'r', 'e', 't', 0, 414 /* 1251 */ 'w', 'a', 'i', 't', 'e', 'u', 0, 415 }; 416 417 // Emit the opcode for the instruction. 418 uint32_t Bits = OpInfo[MCInst_getOpcode(MI)]; 419 // assert(Bits != 0 && "Cannot print this instruction."); 420#ifndef CAPSTONE_DIET 421 SStream_concat0(O, AsmStrs+(Bits & 2047)-1); 422#endif 423 424 425 if (strchr((const char *)AsmStrs+(Bits & 2047)-1, '[')) { 426 set_mem_access(MI, true, 0); 427 } 428 429 // Fragment 0 encoded into 2 bits for 4 unique commands. 430 //printf(">>%s\n", AsmStrs+(Bits & 2047)-1); 431 //printf("Frag-0: %u\n", (Bits >> 11) & 3); 432 switch ((Bits >> 11) & 3) { 433 default: // unreachable. 434 case 0: 435 // DBG_VALUE, BUNDLE, LIFETIME_START, LIFETIME_END, CLRE_0R, DCALL_0R, DE... 436 // already done. this means we have to extract details out ourself. 437 XCore_insn_extract(MI, (const char *)AsmStrs+(Bits & 2047)-1); 438 return; 439 break; 440 case 1: 441 // ADD_2rus, ADD_3r, ADJCALLSTACKDOWN, ADJCALLSTACKUP, ANDNOT_2r, AND_3r,... 442 printOperand(MI, 0, O); 443 break; 444 case 2: 445 // BR_JT, BR_JT32, CRC8_l4r, INITCP_2r, INITDP_2r, INITLR_l2r, INITPC_2r,... 446 printOperand(MI, 1, O); 447 break; 448 case 3: 449 // OUTSHR_2r, TSETR_3r 450 printOperand(MI, 2, O); 451 break; 452 } 453 454 455 // Fragment 1 encoded into 5 bits for 17 unique commands. 456 //printf("Frag-1: %u\n", (Bits >> 13) & 31); 457 switch ((Bits >> 13) & 31) { 458 default: // unreachable. 459 case 0: 460 // ADD_2rus, ADD_3r, ANDNOT_2r, AND_3r, ASHR_l2rus, ASHR_l3r, BITREV_l2r,... 461 SStream_concat0(O, ", "); 462 break; 463 case 1: 464 // ADJCALLSTACKDOWN, ADJCALLSTACKUP, BAU_1r, BLAT_lu6, BLAT_u6, BLA_1r, B... 465 return; 466 break; 467 case 2: 468 // BLACP_lu10, BLACP_u10, CLRPT_1R, EDU_1r, EEU_1r, FREER_1r, LDAWCP_lu6,... 469 SStream_concat0(O, "]"); 470 set_mem_access(MI, false, 0); 471 return; 472 break; 473 case 3: 474 // BR_JT, BR_JT32 475 SStream_concat0(O, "\n"); 476 break; 477 case 4: 478 // CHKCT_2r, CHKCT_rus, OUTCT_2r, OUTCT_rus, OUTPW_l2rus, OUTSHR_2r, OUTT... 479 SStream_concat0(O, "], "); 480 set_mem_access(MI, false, 0); 481 break; 482 case 5: 483 // EEF_2r, EET_2r, ENDIN_2r, GETD_l2r, GETN_l2r, GETST_2r, GETTS_2r, INCT... 484 SStream_concat0(O, ", res["); 485 set_mem_access(MI, true, 0); 486 break; 487 case 6: 488 // GETPS_l2r 489 SStream_concat0(O, ", ps["); 490 set_mem_access(MI, true, 0); 491 printOperand(MI, 1, O); 492 SStream_concat0(O, "]"); 493 set_mem_access(MI, false, 0); 494 return; 495 break; 496 case 7: 497 // INITCP_2r 498 SStream_concat0(O, "]:cp, "); 499 set_mem_access(MI, false, XCORE_REG_CP); 500 printOperand(MI, 0, O); 501 return; 502 break; 503 case 8: 504 // INITDP_2r 505 SStream_concat0(O, "]:dp, "); 506 set_mem_access(MI, false, XCORE_REG_DP); 507 printOperand(MI, 0, O); 508 return; 509 break; 510 case 9: 511 // INITLR_l2r 512 SStream_concat0(O, "]:lr, "); 513 set_mem_access(MI, false, XCORE_REG_LR); 514 printOperand(MI, 0, O); 515 return; 516 break; 517 case 10: 518 // INITPC_2r 519 SStream_concat0(O, "]:pc, "); 520 set_mem_access(MI, false, XCORE_REG_PC); 521 printOperand(MI, 0, O); 522 return; 523 break; 524 case 11: 525 // INITSP_2r 526 SStream_concat0(O, "]:sp, "); 527 set_mem_access(MI, false, XCORE_REG_SP); 528 printOperand(MI, 0, O); 529 return; 530 break; 531 case 12: 532 // LDAWDP_lru6, LDAWDP_ru6, LDWDP_lru6, LDWDP_ru6, STWDP_lru6, STWDP_ru6 533 SStream_concat0(O, ", dp["); 534 set_mem_access(MI, true, XCORE_REG_DP); 535 printOperand(MI, 1, O); 536 SStream_concat0(O, "]"); 537 set_mem_access(MI, false, 0); 538 return; 539 break; 540 case 13: 541 // LDAWSP_lru6, LDAWSP_ru6, LDWSP_lru6, LDWSP_ru6, STWSP_lru6, STWSP_ru6 542 SStream_concat0(O, ", sp["); 543 set_mem_access(MI, true, XCORE_REG_SP); 544 printOperand(MI, 1, O); 545 SStream_concat0(O, "]"); 546 set_mem_access(MI, false, 0); 547 return; 548 break; 549 case 14: 550 // LDWCP_lru6, LDWCP_ru6 551 SStream_concat0(O, ", cp["); 552 set_mem_access(MI, true, XCORE_REG_CP); 553 printOperand(MI, 1, O); 554 SStream_concat0(O, "]"); 555 set_mem_access(MI, false, 0); 556 return; 557 break; 558 case 15: 559 // SETEV_1r, SETV_1r 560 SStream_concat0(O, "], r11"); 561 set_mem_access(MI, false, 0); 562 return; 563 break; 564 case 16: 565 // TSETR_3r 566 SStream_concat0(O, "]:r"); 567 set_mem_access(MI, false, 0); 568 printOperand(MI, 0, O); 569 SStream_concat0(O, ", "); 570 printOperand(MI, 1, O); 571 return; 572 break; 573 } 574 575 576 // Fragment 2 encoded into 3 bits for 5 unique commands. 577 //printf("Frag-2: %u\n", (Bits >> 18) & 7); 578 switch ((Bits >> 18) & 7) { 579 default: // unreachable. 580 case 0: 581 // ADD_2rus, ADD_3r, AND_3r, ASHR_l2rus, ASHR_l3r, BITREV_l2r, BRBF_lru6,... 582 printOperand(MI, 1, O); 583 break; 584 case 1: 585 // ANDNOT_2r, CRC_l3r, INSHR_2r, SEXT_2r, SEXT_rus, ZEXT_2r, ZEXT_rus 586 printOperand(MI, 2, O); 587 break; 588 case 2: 589 // BR_JT 590 printInlineJT(MI, 0, O); 591 return; 592 break; 593 case 3: 594 // BR_JT32 595 printInlineJT32(MI, 0, O); 596 return; 597 break; 598 case 4: 599 // CRC8_l4r, LADD_l5r, LSUB_l5r, OUTPW_l2rus 600 printOperand(MI, 0, O); 601 SStream_concat0(O, ", "); 602 break; 603 } 604 605 606 // Fragment 3 encoded into 3 bits for 8 unique commands. 607 //printf("Frag-3: %u\n", (Bits >> 21) & 7); 608 switch ((Bits >> 21) & 7) { 609 default: // unreachable. 610 case 0: 611 // ADD_2rus, ADD_3r, AND_3r, ASHR_l2rus, ASHR_l3r, CRC_l3r, DIVS_l3r, DIV... 612 SStream_concat0(O, ", "); 613 break; 614 case 1: 615 // ANDNOT_2r, BITREV_l2r, BRBF_lru6, BRBF_ru6, BRBT_lru6, BRBT_ru6, BRFF_... 616 return; 617 break; 618 case 2: 619 // CRC8_l4r 620 printOperand(MI, 3, O); 621 SStream_concat0(O, ", "); 622 printOperand(MI, 4, O); 623 return; 624 break; 625 case 3: 626 // EEF_2r, EET_2r, ENDIN_2r, GETD_l2r, GETN_l2r, GETST_2r, GETTS_2r, INCT... 627 SStream_concat0(O, "]"); 628 set_mem_access(MI, false, 0); 629 return; 630 break; 631 case 4: 632 // INPW_l2rus 633 SStream_concat0(O, "], "); 634 set_mem_access(MI, false, 0); 635 printOperand(MI, 2, O); 636 return; 637 break; 638 case 5: 639 // LADD_l5r, LSUB_l5r, OUTPW_l2rus 640 printOperand(MI, 2, O); 641 break; 642 case 6: 643 // LD16S_3r, LD8U_3r, LDA16F_l3r, LDAWF_l2rus, LDAWF_l3r, LDW_2rus, LDW_3... 644 SStream_concat0(O, "["); 645 set_mem_access(MI, true, 0xffff); 646 printOperand(MI, 2, O); 647 SStream_concat0(O, "]"); 648 set_mem_access(MI, false, 0); 649 return; 650 break; 651 case 7: 652 // LDA16B_l3r, LDAWB_l2rus, LDAWB_l3r 653 SStream_concat0(O, "[-"); 654 set_mem_access(MI, true, -0xffff); 655 printOperand(MI, 2, O); 656 SStream_concat0(O, "]"); 657 set_mem_access(MI, false, 0); 658 return; 659 break; 660 } 661 662 663 // Fragment 4 encoded into 3 bits for 5 unique commands. 664 //printf("Frag-4: %u\n", (Bits >> 24) & 7); 665 switch ((Bits >> 24) & 7) { 666 default: // unreachable. 667 case 0: 668 // ADD_2rus, ADD_3r, AND_3r, ASHR_l2rus, ASHR_l3r, DIVS_l3r, DIVU_l3r, EQ... 669 printOperand(MI, 2, O); 670 break; 671 case 1: 672 // CRC_l3r 673 printOperand(MI, 3, O); 674 return; 675 break; 676 case 2: 677 // LADD_l5r, LSUB_l5r 678 SStream_concat0(O, ", "); 679 printOperand(MI, 3, O); 680 SStream_concat0(O, ", "); 681 printOperand(MI, 4, O); 682 return; 683 break; 684 case 3: 685 // LDIVU_l5r, MACCS_l4r, MACCU_l4r 686 printOperand(MI, 4, O); 687 SStream_concat0(O, ", "); 688 break; 689 case 4: 690 // OUTPW_l2rus 691 return; 692 break; 693 } 694 695 696 // Fragment 5 encoded into 2 bits for 4 unique commands. 697 //printf("Frag-5: %u\n", (Bits >> 27) & 3); 698 switch ((Bits >> 27) & 3) { 699 default: // unreachable. 700 case 0: 701 // ADD_2rus, ADD_3r, AND_3r, ASHR_l2rus, ASHR_l3r, DIVS_l3r, DIVU_l3r, EQ... 702 return; 703 break; 704 case 1: 705 // LDIVU_l5r 706 printOperand(MI, 2, O); 707 SStream_concat0(O, ", "); 708 printOperand(MI, 3, O); 709 return; 710 break; 711 case 2: 712 // LMUL_l6r 713 SStream_concat0(O, ", "); 714 printOperand(MI, 3, O); 715 SStream_concat0(O, ", "); 716 printOperand(MI, 4, O); 717 SStream_concat0(O, ", "); 718 printOperand(MI, 5, O); 719 return; 720 break; 721 case 3: 722 // MACCS_l4r, MACCU_l4r 723 printOperand(MI, 5, O); 724 return; 725 break; 726 } 727} 728 729 730/// getRegisterName - This method is automatically generated by tblgen 731/// from the register set description. This returns the assembler name 732/// for the specified register. 733static char *getRegisterName(unsigned RegNo) 734{ 735 // assert(RegNo && RegNo < 17 && "Invalid register number!"); 736 737#ifndef CAPSTONE_DIET 738 static char AsmStrs[] = { 739 /* 0 */ 'r', '1', '0', 0, 740 /* 4 */ 'r', '0', 0, 741 /* 7 */ 'r', '1', '1', 0, 742 /* 11 */ 'r', '1', 0, 743 /* 14 */ 'r', '2', 0, 744 /* 17 */ 'r', '3', 0, 745 /* 20 */ 'r', '4', 0, 746 /* 23 */ 'r', '5', 0, 747 /* 26 */ 'r', '6', 0, 748 /* 29 */ 'r', '7', 0, 749 /* 32 */ 'r', '8', 0, 750 /* 35 */ 'r', '9', 0, 751 /* 38 */ 'c', 'p', 0, 752 /* 41 */ 'd', 'p', 0, 753 /* 44 */ 's', 'p', 0, 754 /* 47 */ 'l', 'r', 0, 755 }; 756 757 static const uint32_t RegAsmOffset[] = { 758 38, 41, 47, 44, 4, 11, 14, 17, 20, 23, 26, 29, 32, 35, 759 0, 7, 760 }; 761 762 //int i; 763 //for (i = 0; i < sizeof(RegAsmOffset)/4; i++) 764 // printf("%s = %u\n", AsmStrs+RegAsmOffset[i], i + 1); 765 //printf("*************************\n"); 766 return AsmStrs+RegAsmOffset[RegNo-1]; 767#else 768 return NULL; 769#endif 770} 771