/*===- TableGen'erated file -------------------------------------*- C++ -*-===*\ |* *| |* Assembly Writer Source Fragment *| |* *| |* Automatically generated file, do not edit! *| |* *| \*===----------------------------------------------------------------------===*/ /// getMnemonic - This method is automatically generated by tablegen /// from the instruction set description. std::pair LoongArchInstPrinter::getMnemonic(const MCInst *MI) { #ifdef __GNUC__ #pragma GCC diagnostic push #pragma GCC diagnostic ignored "-Woverlength-strings" #endif static const char AsmStrs[] = { /* 0 */ "ld.b\t\0" /* 6 */ "iocsrrd.b\t\0" /* 17 */ "ldle.b\t\0" /* 25 */ "stle.b\t\0" /* 33 */ "iocsrwr.b\t\0" /* 44 */ "ldgt.b\t\0" /* 52 */ "stgt.b\t\0" /* 60 */ "st.b\t\0" /* 66 */ "ext.w.b\t\0" /* 75 */ "ldx.b\t\0" /* 82 */ "stx.b\t\0" /* 89 */ "bitrev.4b\t\0" /* 100 */ "bitrev.8b\t\0" /* 111 */ "invtlb\t\0" /* 119 */ "fmina.d\t\0" /* 128 */ "sra.d\t\0" /* 135 */ "fmaxa.d\t\0" /* 144 */ "amadd_db.d\t\0" /* 156 */ "amand_db.d\t\0" /* 168 */ "ammin_db.d\t\0" /* 180 */ "amswap_db.d\t\0" /* 193 */ "amor_db.d\t\0" /* 204 */ "amxor_db.d\t\0" /* 216 */ "ammax_db.d\t\0" /* 228 */ "fscaleb.d\t\0" /* 239 */ "flogb.d\t\0" /* 248 */ "fsub.d\t\0" /* 256 */ "fmsub.d\t\0" /* 265 */ "fnmsub.d\t\0" /* 275 */ "revb.d\t\0" /* 283 */ "sc.d\t\0" /* 289 */ "fadd.d\t\0" /* 297 */ "amadd.d\t\0" /* 306 */ "fmadd.d\t\0" /* 315 */ "fnmadd.d\t\0" /* 325 */ "fld.d\t\0" /* 332 */ "amand.d\t\0" /* 341 */ "mod.d\t\0" /* 348 */ "iocsrrd.d\t\0" /* 359 */ "fcmp.cle.d\t\0" /* 371 */ "fldle.d\t\0" /* 380 */ "fcmp.sle.d\t\0" /* 392 */ "asrtle.d\t\0" /* 402 */ "fstle.d\t\0" /* 411 */ "fcmp.cule.d\t\0" /* 424 */ "fcmp.sule.d\t\0" /* 437 */ "rdtime.d\t\0" /* 447 */ "fcmp.cne.d\t\0" /* 459 */ "fcmp.sne.d\t\0" /* 471 */ "fcmp.cune.d\t\0" /* 484 */ "fcmp.sune.d\t\0" /* 497 */ "fcmp.caf.d\t\0" /* 509 */ "fcmp.saf.d\t\0" /* 521 */ "fneg.d\t\0" /* 529 */ "mulh.d\t\0" /* 537 */ "revh.d\t\0" /* 545 */ "lu32i.d\t\0" /* 554 */ "lu52i.d\t\0" /* 563 */ "addu16i.d\t\0" /* 574 */ "srai.d\t\0" /* 582 */ "addi.d\t\0" /* 590 */ "slli.d\t\0" /* 598 */ "srli.d\t\0" /* 606 */ "rotri.d\t\0" /* 615 */ "bytepick.d\t\0" /* 627 */ "bstrpick.d\t\0" /* 639 */ "ftintrne.l.d\t\0" /* 653 */ "ftintrm.l.d\t\0" /* 666 */ "ftintrp.l.d\t\0" /* 679 */ "ftint.l.d\t\0" /* 690 */ "ftintrz.l.d\t\0" /* 703 */ "sll.d\t\0" /* 710 */ "srl.d\t\0" /* 717 */ "alsl.d\t\0" /* 725 */ "fmul.d\t\0" /* 733 */ "fcopysign.d\t\0" /* 746 */ "fmin.d\t\0" /* 754 */ "ammin.d\t\0" /* 763 */ "fcmp.cun.d\t\0" /* 775 */ "fcmp.sun.d\t\0" /* 787 */ "clo.d\t\0" /* 794 */ "cto.d\t\0" /* 801 */ "amswap.d\t\0" /* 811 */ "frecip.d\t\0" /* 821 */ "fcmp.ceq.d\t\0" /* 833 */ "fcmp.seq.d\t\0" /* 845 */ "fcmp.cueq.d\t\0" /* 858 */ "fcmp.sueq.d\t\0" /* 871 */ "movgr2fr.d\t\0" /* 883 */ "movfr2gr.d\t\0" /* 895 */ "fcmp.cor.d\t\0" /* 907 */ "amor.d\t\0" /* 915 */ "fcmp.sor.d\t\0" /* 927 */ "amxor.d\t\0" /* 936 */ "rotr.d\t\0" /* 944 */ "ldptr.d\t\0" /* 953 */ "stptr.d\t\0" /* 962 */ "iocsrwr.d\t\0" /* 973 */ "fcvt.s.d\t\0" /* 983 */ "fabs.d\t\0" /* 991 */ "bstrins.d\t\0" /* 1002 */ "fclass.d\t\0" /* 1012 */ "fldgt.d\t\0" /* 1021 */ "asrtgt.d\t\0" /* 1031 */ "fstgt.d\t\0" /* 1040 */ "fcmp.clt.d\t\0" /* 1052 */ "fcmp.slt.d\t\0" /* 1064 */ "fcmp.cult.d\t\0" /* 1077 */ "fcmp.sult.d\t\0" /* 1090 */ "frint.d\t\0" /* 1099 */ "fsqrt.d\t\0" /* 1108 */ "frsqrt.d\t\0" /* 1118 */ "fst.d\t\0" /* 1125 */ "bitrev.d\t\0" /* 1135 */ "fdiv.d\t\0" /* 1143 */ "fmov.d\t\0" /* 1151 */ "ftintrne.w.d\t\0" /* 1165 */ "ftintrm.w.d\t\0" /* 1178 */ "ftintrp.w.d\t\0" /* 1191 */ "ftint.w.d\t\0" /* 1202 */ "ftintrz.w.d\t\0" /* 1215 */ "fmax.d\t\0" /* 1223 */ "ammax.d\t\0" /* 1232 */ "fldx.d\t\0" /* 1240 */ "fstx.d\t\0" /* 1248 */ "clz.d\t\0" /* 1255 */ "ctz.d\t\0" /* 1262 */ "la.tls.gd\t\0" /* 1273 */ "la.tls.ld\t\0" /* 1284 */ "preld\t\0" /* 1291 */ "and\t\0" /* 1296 */ "tlbrd\t\0" /* 1303 */ "csrrd\t\0" /* 1310 */ "bge\t\0" /* 1315 */ "la.tls.ie\t\0" /* 1326 */ "la.tls.le\t\0" /* 1337 */ "idle\t\0" /* 1343 */ "bne\t\0" /* 1348 */ "ldpte\t\0" /* 1355 */ "movfr2cf\t\0" /* 1365 */ "movgr2cf\t\0" /* 1375 */ "cpucfg\t\0" /* 1383 */ "csrxchg\t\0" /* 1392 */ "ld.h\t\0" /* 1398 */ "iocsrrd.h\t\0" /* 1409 */ "ldle.h\t\0" /* 1417 */ "stle.h\t\0" /* 1425 */ "iocsrwr.h\t\0" /* 1436 */ "ldgt.h\t\0" /* 1444 */ "stgt.h\t\0" /* 1452 */ "st.h\t\0" /* 1458 */ "ext.w.h\t\0" /* 1467 */ "ldx.h\t\0" /* 1474 */ "stx.h\t\0" /* 1481 */ "revb.2h\t\0" /* 1490 */ "revb.4h\t\0" /* 1499 */ "tlbsrch\t\0" /* 1508 */ "tlbflush\t\0" /* 1518 */ "pcalau12i\t\0" /* 1529 */ "pcaddu12i\t\0" /* 1540 */ "pcaddu18i\t\0" /* 1551 */ "pcaddi\t\0" /* 1559 */ "andi\t\0" /* 1565 */ "xori\t\0" /* 1571 */ "slti\t\0" /* 1577 */ "sltui\t\0" /* 1584 */ "break\t\0" /* 1591 */ "ffint.d.l\t\0" /* 1602 */ "ffint.s.l\t\0" /* 1613 */ "bl\t\0" /* 1617 */ "dbcl\t\0" /* 1623 */ "la.pcrel\t\0" /* 1633 */ "fsel\t\0" /* 1639 */ "syscall\t\0" /* 1648 */ "tlbfill\t\0" /* 1657 */ "jirl\t\0" /* 1663 */ "andn\t\0" /* 1669 */ "orn\t\0" /* 1674 */ "ertn\t\0" /* 1680 */ "cacop\t\0" /* 1687 */ "beq\t\0" /* 1692 */ "dbar\t\0" /* 1698 */ "ibar\t\0" /* 1704 */ "movcf2fr\t\0" /* 1714 */ "movcf2gr\t\0" /* 1724 */ "movfcsr2gr\t\0" /* 1736 */ "lddir\t\0" /* 1743 */ "tlbclr\t\0" /* 1751 */ "nor\t\0" /* 1756 */ "xor\t\0" /* 1761 */ "movgr2fcsr\t\0" /* 1773 */ "tlbwr\t\0" /* 1780 */ "csrwr\t\0" /* 1787 */ "fmina.s\t\0" /* 1796 */ "fmaxa.s\t\0" /* 1805 */ "fscaleb.s\t\0" /* 1816 */ "flogb.s\t\0" /* 1825 */ "fsub.s\t\0" /* 1833 */ "fmsub.s\t\0" /* 1842 */ "fnmsub.s\t\0" /* 1852 */ "fcvt.d.s\t\0" /* 1862 */ "fadd.s\t\0" /* 1870 */ "fmadd.s\t\0" /* 1879 */ "fnmadd.s\t\0" /* 1889 */ "fld.s\t\0" /* 1896 */ "fcmp.cle.s\t\0" /* 1908 */ "fldle.s\t\0" /* 1917 */ "fcmp.sle.s\t\0" /* 1929 */ "fstle.s\t\0" /* 1938 */ "fcmp.cule.s\t\0" /* 1951 */ "fcmp.sule.s\t\0" /* 1964 */ "fcmp.cne.s\t\0" /* 1976 */ "fcmp.sne.s\t\0" /* 1988 */ "fcmp.cune.s\t\0" /* 2001 */ "fcmp.sune.s\t\0" /* 2014 */ "fcmp.caf.s\t\0" /* 2026 */ "fcmp.saf.s\t\0" /* 2038 */ "fneg.s\t\0" /* 2046 */ "ftintrne.l.s\t\0" /* 2060 */ "ftintrm.l.s\t\0" /* 2073 */ "ftintrp.l.s\t\0" /* 2086 */ "ftint.l.s\t\0" /* 2097 */ "ftintrz.l.s\t\0" /* 2110 */ "fmul.s\t\0" /* 2118 */ "fcopysign.s\t\0" /* 2131 */ "fmin.s\t\0" /* 2139 */ "fcmp.cun.s\t\0" /* 2151 */ "fcmp.sun.s\t\0" /* 2163 */ "frecip.s\t\0" /* 2173 */ "fcmp.ceq.s\t\0" /* 2185 */ "fcmp.seq.s\t\0" /* 2197 */ "fcmp.cueq.s\t\0" /* 2210 */ "fcmp.sueq.s\t\0" /* 2223 */ "movfrh2gr.s\t\0" /* 2236 */ "movfr2gr.s\t\0" /* 2248 */ "fcmp.cor.s\t\0" /* 2260 */ "fcmp.sor.s\t\0" /* 2272 */ "fabs.s\t\0" /* 2280 */ "fclass.s\t\0" /* 2290 */ "fldgt.s\t\0" /* 2299 */ "fstgt.s\t\0" /* 2308 */ "fcmp.clt.s\t\0" /* 2320 */ "fcmp.slt.s\t\0" /* 2332 */ "fcmp.cult.s\t\0" /* 2345 */ "fcmp.sult.s\t\0" /* 2358 */ "frint.s\t\0" /* 2367 */ "fsqrt.s\t\0" /* 2376 */ "frsqrt.s\t\0" /* 2386 */ "fst.s\t\0" /* 2393 */ "fdiv.s\t\0" /* 2401 */ "fmov.s\t\0" /* 2409 */ "ftintrne.w.s\t\0" /* 2423 */ "ftintrm.w.s\t\0" /* 2436 */ "ftintrp.w.s\t\0" /* 2449 */ "ftint.w.s\t\0" /* 2460 */ "ftintrz.w.s\t\0" /* 2473 */ "fmax.s\t\0" /* 2481 */ "fldx.s\t\0" /* 2489 */ "fstx.s\t\0" /* 2497 */ "la.abs\t\0" /* 2505 */ "blt\t\0" /* 2510 */ "slt\t\0" /* 2515 */ "la.got\t\0" /* 2523 */ "ld.bu\t\0" /* 2530 */ "ldx.bu\t\0" /* 2538 */ "ammin_db.du\t\0" /* 2551 */ "ammax_db.du\t\0" /* 2564 */ "mod.du\t\0" /* 2572 */ "mulh.du\t\0" /* 2581 */ "ammin.du\t\0" /* 2591 */ "div.du\t\0" /* 2599 */ "ammax.du\t\0" /* 2609 */ "bgeu\t\0" /* 2615 */ "ld.hu\t\0" /* 2622 */ "ldx.hu\t\0" /* 2630 */ "bltu\t\0" /* 2636 */ "sltu\t\0" /* 2642 */ "ammin_db.wu\t\0" /* 2655 */ "ammax_db.wu\t\0" /* 2668 */ "mulw.d.wu\t\0" /* 2679 */ "ld.wu\t\0" /* 2686 */ "mod.wu\t\0" /* 2694 */ "mulh.wu\t\0" /* 2703 */ "alsl.wu\t\0" /* 2712 */ "ammin.wu\t\0" /* 2722 */ "div.wu\t\0" /* 2730 */ "ammax.wu\t\0" /* 2740 */ "ldx.wu\t\0" /* 2748 */ "sra.w\t\0" /* 2755 */ "crcc.w.b.w\t\0" /* 2767 */ "crc.w.b.w\t\0" /* 2778 */ "amadd_db.w\t\0" /* 2790 */ "amand_db.w\t\0" /* 2802 */ "ammin_db.w\t\0" /* 2814 */ "amswap_db.w\t\0" /* 2827 */ "amor_db.w\t\0" /* 2838 */ "amxor_db.w\t\0" /* 2850 */ "ammax_db.w\t\0" /* 2862 */ "sub.w\t\0" /* 2869 */ "sc.w\t\0" /* 2875 */ "ffint.d.w\t\0" /* 2886 */ "crcc.w.d.w\t\0" /* 2898 */ "crc.w.d.w\t\0" /* 2909 */ "mulw.d.w\t\0" /* 2919 */ "amadd.w\t\0" /* 2928 */ "ld.w\t\0" /* 2934 */ "amand.w\t\0" /* 2943 */ "mod.w\t\0" /* 2950 */ "iocsrrd.w\t\0" /* 2961 */ "ldle.w\t\0" /* 2969 */ "stle.w\t\0" /* 2977 */ "crcc.w.h.w\t\0" /* 2989 */ "crc.w.h.w\t\0" /* 3000 */ "rdtimeh.w\t\0" /* 3011 */ "mulh.w\t\0" /* 3019 */ "movgr2frh.w\t\0" /* 3032 */ "lu12i.w\t\0" /* 3041 */ "srai.w\t\0" /* 3049 */ "addi.w\t\0" /* 3057 */ "slli.w\t\0" /* 3065 */ "srli.w\t\0" /* 3073 */ "rotri.w\t\0" /* 3082 */ "bytepick.w\t\0" /* 3094 */ "bstrpick.w\t\0" /* 3106 */ "rdtimel.w\t\0" /* 3117 */ "sll.w\t\0" /* 3124 */ "srl.w\t\0" /* 3131 */ "alsl.w\t\0" /* 3139 */ "mul.w\t\0" /* 3146 */ "ammin.w\t\0" /* 3155 */ "clo.w\t\0" /* 3162 */ "cto.w\t\0" /* 3169 */ "amswap.w\t\0" /* 3179 */ "movgr2fr.w\t\0" /* 3191 */ "amor.w\t\0" /* 3199 */ "amxor.w\t\0" /* 3208 */ "rotr.w\t\0" /* 3216 */ "ldptr.w\t\0" /* 3225 */ "stptr.w\t\0" /* 3234 */ "iocsrwr.w\t\0" /* 3245 */ "ffint.s.w\t\0" /* 3256 */ "bstrins.w\t\0" /* 3267 */ "ldgt.w\t\0" /* 3275 */ "stgt.w\t\0" /* 3283 */ "st.w\t\0" /* 3289 */ "bitrev.w\t\0" /* 3299 */ "div.w\t\0" /* 3306 */ "crcc.w.w.w\t\0" /* 3318 */ "crc.w.w.w\t\0" /* 3329 */ "ammax.w\t\0" /* 3338 */ "ldx.w\t\0" /* 3345 */ "stx.w\t\0" /* 3352 */ "clz.w\t\0" /* 3359 */ "ctz.w\t\0" /* 3366 */ "revb.2w\t\0" /* 3375 */ "revh.2w\t\0" /* 3384 */ "preldx\t\0" /* 3392 */ "bnez\t\0" /* 3398 */ "bcnez\t\0" /* 3405 */ "masknez\t\0" /* 3414 */ "beqz\t\0" /* 3420 */ "bceqz\t\0" /* 3427 */ "maskeqz\t\0" /* 3436 */ "# XRay Function Patchable RET.\0" /* 3467 */ "# XRay Typed Event Log.\0" /* 3491 */ "# XRay Custom Event Log.\0" /* 3516 */ "# XRay Function Enter.\0" /* 3539 */ "# XRay Tail Call Exit.\0" /* 3562 */ "# XRay Function Exit.\0" /* 3584 */ "LIFETIME_END\0" /* 3597 */ "PSEUDO_PROBE\0" /* 3610 */ "BUNDLE\0" /* 3617 */ "DBG_VALUE\0" /* 3627 */ "DBG_INSTR_REF\0" /* 3641 */ "DBG_PHI\0" /* 3649 */ "DBG_LABEL\0" /* 3659 */ "LIFETIME_START\0" /* 3674 */ "DBG_VALUE_LIST\0" /* 3689 */ "# FEntry call\0" }; #ifdef __GNUC__ #pragma GCC diagnostic pop #endif static const uint16_t OpInfo0[] = { 0U, // PHI 0U, // INLINEASM 0U, // INLINEASM_BR 0U, // CFI_INSTRUCTION 0U, // EH_LABEL 0U, // GC_LABEL 0U, // ANNOTATION_LABEL 0U, // KILL 0U, // EXTRACT_SUBREG 0U, // INSERT_SUBREG 0U, // IMPLICIT_DEF 0U, // SUBREG_TO_REG 0U, // COPY_TO_REGCLASS 3618U, // DBG_VALUE 3675U, // DBG_VALUE_LIST 3628U, // DBG_INSTR_REF 3642U, // DBG_PHI 3650U, // DBG_LABEL 0U, // REG_SEQUENCE 0U, // COPY 3611U, // BUNDLE 3660U, // LIFETIME_START 3585U, // LIFETIME_END 3598U, // PSEUDO_PROBE 0U, // ARITH_FENCE 0U, // STACKMAP 3690U, // FENTRY_CALL 0U, // PATCHPOINT 0U, // LOAD_STACK_GUARD 0U, // PREALLOCATED_SETUP 0U, // PREALLOCATED_ARG 0U, // STATEPOINT 0U, // LOCAL_ESCAPE 0U, // FAULTING_OP 0U, // PATCHABLE_OP 3517U, // PATCHABLE_FUNCTION_ENTER 3437U, // PATCHABLE_RET 3563U, // PATCHABLE_FUNCTION_EXIT 3540U, // PATCHABLE_TAIL_CALL 3492U, // PATCHABLE_EVENT_CALL 3468U, // PATCHABLE_TYPED_EVENT_CALL 0U, // ICALL_BRANCH_FUNNEL 0U, // MEMBARRIER 0U, // G_ASSERT_SEXT 0U, // G_ASSERT_ZEXT 0U, // G_ASSERT_ALIGN 0U, // G_ADD 0U, // G_SUB 0U, // G_MUL 0U, // G_SDIV 0U, // G_UDIV 0U, // G_SREM 0U, // G_UREM 0U, // G_SDIVREM 0U, // G_UDIVREM 0U, // G_AND 0U, // G_OR 0U, // G_XOR 0U, // G_IMPLICIT_DEF 0U, // G_PHI 0U, // G_FRAME_INDEX 0U, // G_GLOBAL_VALUE 0U, // G_EXTRACT 0U, // G_UNMERGE_VALUES 0U, // G_INSERT 0U, // G_MERGE_VALUES 0U, // G_BUILD_VECTOR 0U, // G_BUILD_VECTOR_TRUNC 0U, // G_CONCAT_VECTORS 0U, // G_PTRTOINT 0U, // G_INTTOPTR 0U, // G_BITCAST 0U, // G_FREEZE 0U, // G_INTRINSIC_FPTRUNC_ROUND 0U, // G_INTRINSIC_TRUNC 0U, // G_INTRINSIC_ROUND 0U, // G_INTRINSIC_LRINT 0U, // G_INTRINSIC_ROUNDEVEN 0U, // G_READCYCLECOUNTER 0U, // G_LOAD 0U, // G_SEXTLOAD 0U, // G_ZEXTLOAD 0U, // G_INDEXED_LOAD 0U, // G_INDEXED_SEXTLOAD 0U, // G_INDEXED_ZEXTLOAD 0U, // G_STORE 0U, // G_INDEXED_STORE 0U, // G_ATOMIC_CMPXCHG_WITH_SUCCESS 0U, // G_ATOMIC_CMPXCHG 0U, // G_ATOMICRMW_XCHG 0U, // G_ATOMICRMW_ADD 0U, // G_ATOMICRMW_SUB 0U, // G_ATOMICRMW_AND 0U, // G_ATOMICRMW_NAND 0U, // G_ATOMICRMW_OR 0U, // G_ATOMICRMW_XOR 0U, // G_ATOMICRMW_MAX 0U, // G_ATOMICRMW_MIN 0U, // G_ATOMICRMW_UMAX 0U, // G_ATOMICRMW_UMIN 0U, // G_ATOMICRMW_FADD 0U, // G_ATOMICRMW_FSUB 0U, // G_ATOMICRMW_FMAX 0U, // G_ATOMICRMW_FMIN 0U, // G_ATOMICRMW_UINC_WRAP 0U, // G_ATOMICRMW_UDEC_WRAP 0U, // G_FENCE 0U, // G_BRCOND 0U, // G_BRINDIRECT 0U, // G_INVOKE_REGION_START 0U, // G_INTRINSIC 0U, // G_INTRINSIC_W_SIDE_EFFECTS 0U, // G_ANYEXT 0U, // G_TRUNC 0U, // G_CONSTANT 0U, // G_FCONSTANT 0U, // G_VASTART 0U, // G_VAARG 0U, // G_SEXT 0U, // G_SEXT_INREG 0U, // G_ZEXT 0U, // G_SHL 0U, // G_LSHR 0U, // G_ASHR 0U, // G_FSHL 0U, // G_FSHR 0U, // G_ROTR 0U, // G_ROTL 0U, // G_ICMP 0U, // G_FCMP 0U, // G_SELECT 0U, // G_UADDO 0U, // G_UADDE 0U, // G_USUBO 0U, // G_USUBE 0U, // G_SADDO 0U, // G_SADDE 0U, // G_SSUBO 0U, // G_SSUBE 0U, // G_UMULO 0U, // G_SMULO 0U, // G_UMULH 0U, // G_SMULH 0U, // G_UADDSAT 0U, // G_SADDSAT 0U, // G_USUBSAT 0U, // G_SSUBSAT 0U, // G_USHLSAT 0U, // G_SSHLSAT 0U, // G_SMULFIX 0U, // G_UMULFIX 0U, // G_SMULFIXSAT 0U, // G_UMULFIXSAT 0U, // G_SDIVFIX 0U, // G_UDIVFIX 0U, // G_SDIVFIXSAT 0U, // G_UDIVFIXSAT 0U, // G_FADD 0U, // G_FSUB 0U, // G_FMUL 0U, // G_FMA 0U, // G_FMAD 0U, // G_FDIV 0U, // G_FREM 0U, // G_FPOW 0U, // G_FPOWI 0U, // G_FEXP 0U, // G_FEXP2 0U, // G_FLOG 0U, // G_FLOG2 0U, // G_FLOG10 0U, // G_FNEG 0U, // G_FPEXT 0U, // G_FPTRUNC 0U, // G_FPTOSI 0U, // G_FPTOUI 0U, // G_SITOFP 0U, // G_UITOFP 0U, // G_FABS 0U, // G_FCOPYSIGN 0U, // G_IS_FPCLASS 0U, // G_FCANONICALIZE 0U, // G_FMINNUM 0U, // G_FMAXNUM 0U, // G_FMINNUM_IEEE 0U, // G_FMAXNUM_IEEE 0U, // G_FMINIMUM 0U, // G_FMAXIMUM 0U, // G_PTR_ADD 0U, // G_PTRMASK 0U, // G_SMIN 0U, // G_SMAX 0U, // G_UMIN 0U, // G_UMAX 0U, // G_ABS 0U, // G_LROUND 0U, // G_LLROUND 0U, // G_BR 0U, // G_BRJT 0U, // G_INSERT_VECTOR_ELT 0U, // G_EXTRACT_VECTOR_ELT 0U, // G_SHUFFLE_VECTOR 0U, // G_CTTZ 0U, // G_CTTZ_ZERO_UNDEF 0U, // G_CTLZ 0U, // G_CTLZ_ZERO_UNDEF 0U, // G_CTPOP 0U, // G_BSWAP 0U, // G_BITREVERSE 0U, // G_FCEIL 0U, // G_FCOS 0U, // G_FSIN 0U, // G_FSQRT 0U, // G_FFLOOR 0U, // G_FRINT 0U, // G_FNEARBYINT 0U, // G_ADDRSPACE_CAST 0U, // G_BLOCK_ADDR 0U, // G_JUMP_TABLE 0U, // G_DYN_STACKALLOC 0U, // G_STRICT_FADD 0U, // G_STRICT_FSUB 0U, // G_STRICT_FMUL 0U, // G_STRICT_FDIV 0U, // G_STRICT_FREM 0U, // G_STRICT_FMA 0U, // G_STRICT_FSQRT 0U, // G_READ_REGISTER 0U, // G_WRITE_REGISTER 0U, // G_MEMCPY 0U, // G_MEMCPY_INLINE 0U, // G_MEMMOVE 0U, // G_MEMSET 0U, // G_BZERO 0U, // G_VECREDUCE_SEQ_FADD 0U, // G_VECREDUCE_SEQ_FMUL 0U, // G_VECREDUCE_FADD 0U, // G_VECREDUCE_FMUL 0U, // G_VECREDUCE_FMAX 0U, // G_VECREDUCE_FMIN 0U, // G_VECREDUCE_ADD 0U, // G_VECREDUCE_MUL 0U, // G_VECREDUCE_AND 0U, // G_VECREDUCE_OR 0U, // G_VECREDUCE_XOR 0U, // G_VECREDUCE_SMAX 0U, // G_VECREDUCE_SMIN 0U, // G_VECREDUCE_UMAX 0U, // G_VECREDUCE_UMIN 0U, // G_SBFX 0U, // G_UBFX 5U, // ADJCALLSTACKDOWN 5U, // ADJCALLSTACKUP 5U, // PseudoAtomicLoadAdd32 5U, // PseudoAtomicLoadAnd32 5U, // PseudoAtomicLoadNand32 5U, // PseudoAtomicLoadNand64 5U, // PseudoAtomicLoadOr32 5U, // PseudoAtomicLoadSub32 5U, // PseudoAtomicLoadXor32 5U, // PseudoAtomicStoreD 5U, // PseudoAtomicStoreW 5U, // PseudoAtomicSwap32 5U, // PseudoBR 5U, // PseudoBRIND 5U, // PseudoB_TAIL 5U, // PseudoCALL 5U, // PseudoCALLIndirect 5U, // PseudoCmpXchg32 5U, // PseudoCmpXchg64 5U, // PseudoJIRL_CALL 5U, // PseudoJIRL_TAIL 6594U, // PseudoLA_ABS 39362U, // PseudoLA_ABS_LARGE 6612U, // PseudoLA_GOT 6612U, // PseudoLA_GOT_LARGE 5720U, // PseudoLA_PCREL 5720U, // PseudoLA_PCREL_LARGE 5359U, // PseudoLA_TLS_GD 5359U, // PseudoLA_TLS_GD_LARGE 5412U, // PseudoLA_TLS_IE 5412U, // PseudoLA_TLS_IE_LARGE 5370U, // PseudoLA_TLS_LD 5370U, // PseudoLA_TLS_LD_LARGE 5423U, // PseudoLA_TLS_LE 5U, // PseudoLD_CFR 4689U, // PseudoLI_D 7156U, // PseudoLI_W 5U, // PseudoMaskedAtomicLoadAdd32 5U, // PseudoMaskedAtomicLoadMax32 5U, // PseudoMaskedAtomicLoadMin32 5U, // PseudoMaskedAtomicLoadNand32 5U, // PseudoMaskedAtomicLoadSub32 5U, // PseudoMaskedAtomicLoadUMax32 5U, // PseudoMaskedAtomicLoadUMin32 5U, // PseudoMaskedAtomicSwap32 5U, // PseudoMaskedCmpXchg32 5U, // PseudoRET 5U, // PseudoST_CFR 5U, // PseudoTAIL 5U, // PseudoTAILIndirect 5U, // PseudoUNIMP 5U, // RDFCSR 5U, // WRFCSR 4679U, // ADDI_D 7146U, // ADDI_W 4660U, // ADDU16I_D 4387U, // ADD_D 7018U, // ADD_W 4814U, // ALSL_D 7228U, // ALSL_W 6800U, // ALSL_WU 4394U, // AMADD_D 4241U, // AMADD_DB_D 6875U, // AMADD_DB_W 7016U, // AMADD_W 4429U, // AMAND_D 4253U, // AMAND_DB_D 6887U, // AMAND_DB_W 7031U, // AMAND_W 5320U, // AMMAX_D 4313U, // AMMAX_DB_D 6648U, // AMMAX_DB_DU 6947U, // AMMAX_DB_W 6752U, // AMMAX_DB_WU 6696U, // AMMAX_DU 7426U, // AMMAX_W 6827U, // AMMAX_WU 4851U, // AMMIN_D 4265U, // AMMIN_DB_D 6635U, // AMMIN_DB_DU 6899U, // AMMIN_DB_W 6739U, // AMMIN_DB_WU 6678U, // AMMIN_DU 7243U, // AMMIN_W 6809U, // AMMIN_WU 5004U, // AMOR_D 4290U, // AMOR_DB_D 6924U, // AMOR_DB_W 7288U, // AMOR_W 4898U, // AMSWAP_D 4277U, // AMSWAP_DB_D 6911U, // AMSWAP_DB_W 7266U, // AMSWAP_W 5024U, // AMXOR_D 4301U, // AMXOR_DB_D 6935U, // AMXOR_DB_W 7296U, // AMXOR_W 5388U, // AND 5656U, // ANDI 5760U, // ANDN 5118U, // ASRTGT_D 4489U, // ASRTLE_D 20484U, // B 7517U, // BCEQZ 7495U, // BCNEZ 5784U, // BEQ 7511U, // BEQZ 5407U, // BGE 6706U, // BGEU 4186U, // BITREV_4B 4197U, // BITREV_8B 5222U, // BITREV_D 7386U, // BITREV_W 22094U, // BL 6602U, // BLT 6727U, // BLTU 5440U, // BNE 7489U, // BNEZ 22065U, // BREAK 9184U, // BSTRINS_D 11449U, // BSTRINS_W 4724U, // BSTRPICK_D 7191U, // BSTRPICK_W 4712U, // BYTEPICK_D 7179U, // BYTEPICK_W 5777U, // CACOP 4884U, // CLO_D 7252U, // CLO_W 5345U, // CLZ_D 7449U, // CLZ_W 5472U, // CPUCFG 6852U, // CRCC_W_B_W 6983U, // CRCC_W_D_W 7074U, // CRCC_W_H_W 7403U, // CRCC_W_W_W 6864U, // CRC_W_B_W 6995U, // CRC_W_D_W 7086U, // CRC_W_H_W 7415U, // CRC_W_W_W 5400U, // CSRRD 26357U, // CSRWR 9576U, // CSRXCHG 4891U, // CTO_D 7259U, // CTO_W 5352U, // CTZ_D 7456U, // CTZ_W 22173U, // DBAR 22098U, // DBCL 5233U, // DIV_D 6688U, // DIV_DU 7396U, // DIV_W 6819U, // DIV_WU 1675U, // ERTN 4163U, // EXT_W_B 5555U, // EXT_W_H 5080U, // FABS_D 6369U, // FABS_S 4386U, // FADD_D 5959U, // FADD_S 5099U, // FCLASS_D 6377U, // FCLASS_S 4594U, // FCMP_CAF_D 6111U, // FCMP_CAF_S 4918U, // FCMP_CEQ_D 6270U, // FCMP_CEQ_S 4456U, // FCMP_CLE_D 5993U, // FCMP_CLE_S 5137U, // FCMP_CLT_D 6405U, // FCMP_CLT_S 4544U, // FCMP_CNE_D 6061U, // FCMP_CNE_S 4992U, // FCMP_COR_D 6345U, // FCMP_COR_S 4942U, // FCMP_CUEQ_D 6294U, // FCMP_CUEQ_S 4508U, // FCMP_CULE_D 6035U, // FCMP_CULE_S 5161U, // FCMP_CULT_D 6429U, // FCMP_CULT_S 4568U, // FCMP_CUNE_D 6085U, // FCMP_CUNE_S 4860U, // FCMP_CUN_D 6236U, // FCMP_CUN_S 4606U, // FCMP_SAF_D 6123U, // FCMP_SAF_S 4930U, // FCMP_SEQ_D 6282U, // FCMP_SEQ_S 4477U, // FCMP_SLE_D 6014U, // FCMP_SLE_S 5149U, // FCMP_SLT_D 6417U, // FCMP_SLT_S 4556U, // FCMP_SNE_D 6073U, // FCMP_SNE_S 5012U, // FCMP_SOR_D 6357U, // FCMP_SOR_S 4955U, // FCMP_SUEQ_D 6307U, // FCMP_SUEQ_S 4521U, // FCMP_SULE_D 6048U, // FCMP_SULE_S 5174U, // FCMP_SULT_D 6442U, // FCMP_SULT_S 4581U, // FCMP_SUNE_D 6098U, // FCMP_SUNE_S 4872U, // FCMP_SUN_D 6248U, // FCMP_SUN_S 4830U, // FCOPYSIGN_D 6215U, // FCOPYSIGN_S 5949U, // FCVT_D_S 5070U, // FCVT_S_D 5232U, // FDIV_D 6490U, // FDIV_S 5688U, // FFINT_D_L 6972U, // FFINT_D_W 5699U, // FFINT_S_L 7342U, // FFINT_S_W 5109U, // FLDGT_D 6387U, // FLDGT_S 4468U, // FLDLE_D 6005U, // FLDLE_S 5329U, // FLDX_D 6578U, // FLDX_S 4422U, // FLD_D 5986U, // FLD_S 4336U, // FLOGB_D 5913U, // FLOGB_S 4403U, // FMADD_D 5967U, // FMADD_S 4232U, // FMAXA_D 5893U, // FMAXA_S 5312U, // FMAX_D 6570U, // FMAX_S 4216U, // FMINA_D 5884U, // FMINA_S 4843U, // FMIN_D 6228U, // FMIN_S 5240U, // FMOV_D 6498U, // FMOV_S 4353U, // FMSUB_D 5930U, // FMSUB_S 4822U, // FMUL_D 6207U, // FMUL_S 4618U, // FNEG_D 6135U, // FNEG_S 4412U, // FNMADD_D 5976U, // FNMADD_S 4362U, // FNMSUB_D 5939U, // FNMSUB_S 4908U, // FRECIP_D 6260U, // FRECIP_S 5187U, // FRINT_D 6455U, // FRINT_S 5205U, // FRSQRT_D 6473U, // FRSQRT_S 4325U, // FSCALEB_D 5902U, // FSCALEB_S 5730U, // FSEL_D 5730U, // FSEL_S 5196U, // FSQRT_D 6464U, // FSQRT_S 5128U, // FSTGT_D 6396U, // FSTGT_S 4499U, // FSTLE_D 6026U, // FSTLE_S 5337U, // FSTX_D 6586U, // FSTX_S 5215U, // FST_D 6483U, // FST_S 4345U, // FSUB_D 5922U, // FSUB_S 4750U, // FTINTRM_L_D 6157U, // FTINTRM_L_S 5262U, // FTINTRM_W_D 6520U, // FTINTRM_W_S 4736U, // FTINTRNE_L_D 6143U, // FTINTRNE_L_S 5248U, // FTINTRNE_W_D 6506U, // FTINTRNE_W_S 4763U, // FTINTRP_L_D 6170U, // FTINTRP_L_S 5275U, // FTINTRP_W_D 6533U, // FTINTRP_W_S 4787U, // FTINTRZ_L_D 6194U, // FTINTRZ_L_S 5299U, // FTINTRZ_W_D 6557U, // FTINTRZ_W_S 4776U, // FTINT_L_D 6183U, // FTINT_L_S 5288U, // FTINT_W_D 6546U, // FTINT_W_S 22179U, // IBAR 21818U, // IDLE 12400U, // INVTLB 4103U, // IOCSRRD_B 4445U, // IOCSRRD_D 5495U, // IOCSRRD_H 7047U, // IOCSRRD_W 4130U, // IOCSRWR_B 5059U, // IOCSRWR_D 5522U, // IOCSRWR_H 7331U, // IOCSRWR_W 5754U, // JIRL 5833U, // LDDIR 4141U, // LDGT_B 5110U, // LDGT_D 5533U, // LDGT_H 7364U, // LDGT_W 4114U, // LDLE_B 4469U, // LDLE_D 5506U, // LDLE_H 7058U, // LDLE_W 5445U, // LDPTE 5041U, // LDPTR_D 7313U, // LDPTR_W 4172U, // LDX_B 6627U, // LDX_BU 5330U, // LDX_D 5564U, // LDX_H 6719U, // LDX_HU 7435U, // LDX_W 6837U, // LDX_WU 4097U, // LD_B 6620U, // LD_BU 4423U, // LD_D 5489U, // LD_H 6712U, // LD_HU 7025U, // LD_W 6776U, // LD_WU 4801U, // LL_D 7215U, // LL_W 7129U, // LU12I_W 25122U, // LU32I_D 4651U, // LU52I_D 7524U, // MASKEQZ 7502U, // MASKNEZ 4438U, // MOD_D 6661U, // MOD_DU 7040U, // MOD_W 6783U, // MOD_WU 5801U, // MOVCF2FR_S 5811U, // MOVCF2GR 5821U, // MOVFCSR2GR 5452U, // MOVFR2CF_S 4980U, // MOVFR2GR_D 6333U, // MOVFR2GR_S 6333U, // MOVFR2GR_S_64 6320U, // MOVFRH2GR_S 5462U, // MOVGR2CF 5858U, // MOVGR2FCSR 27596U, // MOVGR2FRH_W 4968U, // MOVGR2FR_D 7276U, // MOVGR2FR_W 7276U, // MOVGR2FR_W_64 4626U, // MULH_D 6669U, // MULH_DU 7108U, // MULH_W 6791U, // MULH_WU 7006U, // MULW_D_W 6765U, // MULW_D_WU 4823U, // MUL_D 7236U, // MUL_W 5848U, // NOR 5849U, // OR 5663U, // ORI 5766U, // ORN 5648U, // PCADDI 5626U, // PCADDU12I 5637U, // PCADDU18I 5615U, // PCALAU12I 5381U, // PRELD 7481U, // PRELDX 7097U, // RDTIMEH_W 7203U, // RDTIMEL_W 4534U, // RDTIME_D 5578U, // REVB_2H 7463U, // REVB_2W 5587U, // REVB_4H 4372U, // REVB_D 7472U, // REVH_2W 4634U, // REVH_D 4703U, // ROTRI_D 7170U, // ROTRI_W 5033U, // ROTR_D 7305U, // ROTR_W 8476U, // SC_D 11062U, // SC_W 4687U, // SLLI_D 7154U, // SLLI_W 4800U, // SLL_D 7214U, // SLL_W 6607U, // SLT 5668U, // SLTI 6733U, // SLTU 5674U, // SLTUI 4671U, // SRAI_D 7138U, // SRAI_W 4225U, // SRA_D 6845U, // SRA_W 4695U, // SRLI_D 7162U, // SRLI_W 4807U, // SRL_D 7221U, // SRL_W 4149U, // STGT_B 5129U, // STGT_D 5541U, // STGT_H 7372U, // STGT_W 4122U, // STLE_B 4500U, // STLE_D 5514U, // STLE_H 7066U, // STLE_W 5050U, // STPTR_D 7322U, // STPTR_W 4179U, // STX_B 5338U, // STX_D 5571U, // STX_H 7442U, // STX_W 4157U, // ST_B 5216U, // ST_D 5549U, // ST_H 7380U, // ST_W 4346U, // SUB_D 6959U, // SUB_W 22120U, // SYSCALL 1744U, // TLBCLR 1649U, // TLBFILL 1509U, // TLBFLUSH 1297U, // TLBRD 1500U, // TLBSRCH 1774U, // TLBWR 5853U, // XOR 5662U, // XORI }; static const uint8_t OpInfo1[] = { 0U, // PHI 0U, // INLINEASM 0U, // INLINEASM_BR 0U, // CFI_INSTRUCTION 0U, // EH_LABEL 0U, // GC_LABEL 0U, // ANNOTATION_LABEL 0U, // KILL 0U, // EXTRACT_SUBREG 0U, // INSERT_SUBREG 0U, // IMPLICIT_DEF 0U, // SUBREG_TO_REG 0U, // COPY_TO_REGCLASS 0U, // DBG_VALUE 0U, // DBG_VALUE_LIST 0U, // DBG_INSTR_REF 0U, // DBG_PHI 0U, // DBG_LABEL 0U, // REG_SEQUENCE 0U, // COPY 0U, // BUNDLE 0U, // LIFETIME_START 0U, // LIFETIME_END 0U, // PSEUDO_PROBE 0U, // ARITH_FENCE 0U, // STACKMAP 0U, // FENTRY_CALL 0U, // PATCHPOINT 0U, // LOAD_STACK_GUARD 0U, // PREALLOCATED_SETUP 0U, // PREALLOCATED_ARG 0U, // STATEPOINT 0U, // LOCAL_ESCAPE 0U, // FAULTING_OP 0U, // PATCHABLE_OP 0U, // PATCHABLE_FUNCTION_ENTER 0U, // PATCHABLE_RET 0U, // PATCHABLE_FUNCTION_EXIT 0U, // PATCHABLE_TAIL_CALL 0U, // PATCHABLE_EVENT_CALL 0U, // PATCHABLE_TYPED_EVENT_CALL 0U, // ICALL_BRANCH_FUNNEL 0U, // MEMBARRIER 0U, // G_ASSERT_SEXT 0U, // G_ASSERT_ZEXT 0U, // G_ASSERT_ALIGN 0U, // G_ADD 0U, // G_SUB 0U, // G_MUL 0U, // G_SDIV 0U, // G_UDIV 0U, // G_SREM 0U, // G_UREM 0U, // G_SDIVREM 0U, // G_UDIVREM 0U, // G_AND 0U, // G_OR 0U, // G_XOR 0U, // G_IMPLICIT_DEF 0U, // G_PHI 0U, // G_FRAME_INDEX 0U, // G_GLOBAL_VALUE 0U, // G_EXTRACT 0U, // G_UNMERGE_VALUES 0U, // G_INSERT 0U, // G_MERGE_VALUES 0U, // G_BUILD_VECTOR 0U, // G_BUILD_VECTOR_TRUNC 0U, // G_CONCAT_VECTORS 0U, // G_PTRTOINT 0U, // G_INTTOPTR 0U, // G_BITCAST 0U, // G_FREEZE 0U, // G_INTRINSIC_FPTRUNC_ROUND 0U, // G_INTRINSIC_TRUNC 0U, // G_INTRINSIC_ROUND 0U, // G_INTRINSIC_LRINT 0U, // G_INTRINSIC_ROUNDEVEN 0U, // G_READCYCLECOUNTER 0U, // G_LOAD 0U, // G_SEXTLOAD 0U, // G_ZEXTLOAD 0U, // G_INDEXED_LOAD 0U, // G_INDEXED_SEXTLOAD 0U, // G_INDEXED_ZEXTLOAD 0U, // G_STORE 0U, // G_INDEXED_STORE 0U, // G_ATOMIC_CMPXCHG_WITH_SUCCESS 0U, // G_ATOMIC_CMPXCHG 0U, // G_ATOMICRMW_XCHG 0U, // G_ATOMICRMW_ADD 0U, // G_ATOMICRMW_SUB 0U, // G_ATOMICRMW_AND 0U, // G_ATOMICRMW_NAND 0U, // G_ATOMICRMW_OR 0U, // G_ATOMICRMW_XOR 0U, // G_ATOMICRMW_MAX 0U, // G_ATOMICRMW_MIN 0U, // G_ATOMICRMW_UMAX 0U, // G_ATOMICRMW_UMIN 0U, // G_ATOMICRMW_FADD 0U, // G_ATOMICRMW_FSUB 0U, // G_ATOMICRMW_FMAX 0U, // G_ATOMICRMW_FMIN 0U, // G_ATOMICRMW_UINC_WRAP 0U, // G_ATOMICRMW_UDEC_WRAP 0U, // G_FENCE 0U, // G_BRCOND 0U, // G_BRINDIRECT 0U, // G_INVOKE_REGION_START 0U, // G_INTRINSIC 0U, // G_INTRINSIC_W_SIDE_EFFECTS 0U, // G_ANYEXT 0U, // G_TRUNC 0U, // G_CONSTANT 0U, // G_FCONSTANT 0U, // G_VASTART 0U, // G_VAARG 0U, // G_SEXT 0U, // G_SEXT_INREG 0U, // G_ZEXT 0U, // G_SHL 0U, // G_LSHR 0U, // G_ASHR 0U, // G_FSHL 0U, // G_FSHR 0U, // G_ROTR 0U, // G_ROTL 0U, // G_ICMP 0U, // G_FCMP 0U, // G_SELECT 0U, // G_UADDO 0U, // G_UADDE 0U, // G_USUBO 0U, // G_USUBE 0U, // G_SADDO 0U, // G_SADDE 0U, // G_SSUBO 0U, // G_SSUBE 0U, // G_UMULO 0U, // G_SMULO 0U, // G_UMULH 0U, // G_SMULH 0U, // G_UADDSAT 0U, // G_SADDSAT 0U, // G_USUBSAT 0U, // G_SSUBSAT 0U, // G_USHLSAT 0U, // G_SSHLSAT 0U, // G_SMULFIX 0U, // G_UMULFIX 0U, // G_SMULFIXSAT 0U, // G_UMULFIXSAT 0U, // G_SDIVFIX 0U, // G_UDIVFIX 0U, // G_SDIVFIXSAT 0U, // G_UDIVFIXSAT 0U, // G_FADD 0U, // G_FSUB 0U, // G_FMUL 0U, // G_FMA 0U, // G_FMAD 0U, // G_FDIV 0U, // G_FREM 0U, // G_FPOW 0U, // G_FPOWI 0U, // G_FEXP 0U, // G_FEXP2 0U, // G_FLOG 0U, // G_FLOG2 0U, // G_FLOG10 0U, // G_FNEG 0U, // G_FPEXT 0U, // G_FPTRUNC 0U, // G_FPTOSI 0U, // G_FPTOUI 0U, // G_SITOFP 0U, // G_UITOFP 0U, // G_FABS 0U, // G_FCOPYSIGN 0U, // G_IS_FPCLASS 0U, // G_FCANONICALIZE 0U, // G_FMINNUM 0U, // G_FMAXNUM 0U, // G_FMINNUM_IEEE 0U, // G_FMAXNUM_IEEE 0U, // G_FMINIMUM 0U, // G_FMAXIMUM 0U, // G_PTR_ADD 0U, // G_PTRMASK 0U, // G_SMIN 0U, // G_SMAX 0U, // G_UMIN 0U, // G_UMAX 0U, // G_ABS 0U, // G_LROUND 0U, // G_LLROUND 0U, // G_BR 0U, // G_BRJT 0U, // G_INSERT_VECTOR_ELT 0U, // G_EXTRACT_VECTOR_ELT 0U, // G_SHUFFLE_VECTOR 0U, // G_CTTZ 0U, // G_CTTZ_ZERO_UNDEF 0U, // G_CTLZ 0U, // G_CTLZ_ZERO_UNDEF 0U, // G_CTPOP 0U, // G_BSWAP 0U, // G_BITREVERSE 0U, // G_FCEIL 0U, // G_FCOS 0U, // G_FSIN 0U, // G_FSQRT 0U, // G_FFLOOR 0U, // G_FRINT 0U, // G_FNEARBYINT 0U, // G_ADDRSPACE_CAST 0U, // G_BLOCK_ADDR 0U, // G_JUMP_TABLE 0U, // G_DYN_STACKALLOC 0U, // G_STRICT_FADD 0U, // G_STRICT_FSUB 0U, // G_STRICT_FMUL 0U, // G_STRICT_FDIV 0U, // G_STRICT_FREM 0U, // G_STRICT_FMA 0U, // G_STRICT_FSQRT 0U, // G_READ_REGISTER 0U, // G_WRITE_REGISTER 0U, // G_MEMCPY 0U, // G_MEMCPY_INLINE 0U, // G_MEMMOVE 0U, // G_MEMSET 0U, // G_BZERO 0U, // G_VECREDUCE_SEQ_FADD 0U, // G_VECREDUCE_SEQ_FMUL 0U, // G_VECREDUCE_FADD 0U, // G_VECREDUCE_FMUL 0U, // G_VECREDUCE_FMAX 0U, // G_VECREDUCE_FMIN 0U, // G_VECREDUCE_ADD 0U, // G_VECREDUCE_MUL 0U, // G_VECREDUCE_AND 0U, // G_VECREDUCE_OR 0U, // G_VECREDUCE_XOR 0U, // G_VECREDUCE_SMAX 0U, // G_VECREDUCE_SMIN 0U, // G_VECREDUCE_UMAX 0U, // G_VECREDUCE_UMIN 0U, // G_SBFX 0U, // G_UBFX 0U, // ADJCALLSTACKDOWN 0U, // ADJCALLSTACKUP 0U, // PseudoAtomicLoadAdd32 0U, // PseudoAtomicLoadAnd32 0U, // PseudoAtomicLoadNand32 0U, // PseudoAtomicLoadNand64 0U, // PseudoAtomicLoadOr32 0U, // PseudoAtomicLoadSub32 0U, // PseudoAtomicLoadXor32 0U, // PseudoAtomicStoreD 0U, // PseudoAtomicStoreW 0U, // PseudoAtomicSwap32 0U, // PseudoBR 0U, // PseudoBRIND 0U, // PseudoB_TAIL 0U, // PseudoCALL 0U, // PseudoCALLIndirect 0U, // PseudoCmpXchg32 0U, // PseudoCmpXchg64 0U, // PseudoJIRL_CALL 0U, // PseudoJIRL_TAIL 0U, // PseudoLA_ABS 0U, // PseudoLA_ABS_LARGE 0U, // PseudoLA_GOT 2U, // PseudoLA_GOT_LARGE 0U, // PseudoLA_PCREL 2U, // PseudoLA_PCREL_LARGE 0U, // PseudoLA_TLS_GD 2U, // PseudoLA_TLS_GD_LARGE 0U, // PseudoLA_TLS_IE 2U, // PseudoLA_TLS_IE_LARGE 0U, // PseudoLA_TLS_LD 2U, // PseudoLA_TLS_LD_LARGE 0U, // PseudoLA_TLS_LE 0U, // PseudoLD_CFR 0U, // PseudoLI_D 0U, // PseudoLI_W 0U, // PseudoMaskedAtomicLoadAdd32 0U, // PseudoMaskedAtomicLoadMax32 0U, // PseudoMaskedAtomicLoadMin32 0U, // PseudoMaskedAtomicLoadNand32 0U, // PseudoMaskedAtomicLoadSub32 0U, // PseudoMaskedAtomicLoadUMax32 0U, // PseudoMaskedAtomicLoadUMin32 0U, // PseudoMaskedAtomicSwap32 0U, // PseudoMaskedCmpXchg32 0U, // PseudoRET 0U, // PseudoST_CFR 0U, // PseudoTAIL 0U, // PseudoTAILIndirect 0U, // PseudoUNIMP 0U, // RDFCSR 0U, // WRFCSR 2U, // ADDI_D 2U, // ADDI_W 2U, // ADDU16I_D 2U, // ADD_D 2U, // ADD_W 18U, // ALSL_D 18U, // ALSL_W 18U, // ALSL_WU 6U, // AMADD_D 6U, // AMADD_DB_D 6U, // AMADD_DB_W 6U, // AMADD_W 6U, // AMAND_D 6U, // AMAND_DB_D 6U, // AMAND_DB_W 6U, // AMAND_W 6U, // AMMAX_D 6U, // AMMAX_DB_D 6U, // AMMAX_DB_DU 6U, // AMMAX_DB_W 6U, // AMMAX_DB_WU 6U, // AMMAX_DU 6U, // AMMAX_W 6U, // AMMAX_WU 6U, // AMMIN_D 6U, // AMMIN_DB_D 6U, // AMMIN_DB_DU 6U, // AMMIN_DB_W 6U, // AMMIN_DB_WU 6U, // AMMIN_DU 6U, // AMMIN_W 6U, // AMMIN_WU 6U, // AMOR_D 6U, // AMOR_DB_D 6U, // AMOR_DB_W 6U, // AMOR_W 6U, // AMSWAP_D 6U, // AMSWAP_DB_D 6U, // AMSWAP_DB_W 6U, // AMSWAP_W 6U, // AMXOR_D 6U, // AMXOR_DB_D 6U, // AMXOR_DB_W 6U, // AMXOR_W 2U, // AND 2U, // ANDI 2U, // ANDN 0U, // ASRTGT_D 0U, // ASRTLE_D 0U, // B 0U, // BCEQZ 0U, // BCNEZ 2U, // BEQ 0U, // BEQZ 2U, // BGE 2U, // BGEU 0U, // BITREV_4B 0U, // BITREV_8B 0U, // BITREV_D 0U, // BITREV_W 0U, // BL 2U, // BLT 2U, // BLTU 2U, // BNE 0U, // BNEZ 0U, // BREAK 11U, // BSTRINS_D 11U, // BSTRINS_W 18U, // BSTRPICK_D 18U, // BSTRPICK_W 18U, // BYTEPICK_D 18U, // BYTEPICK_W 2U, // CACOP 0U, // CLO_D 0U, // CLO_W 0U, // CLZ_D 0U, // CLZ_W 0U, // CPUCFG 2U, // CRCC_W_B_W 2U, // CRCC_W_D_W 2U, // CRCC_W_H_W 2U, // CRCC_W_W_W 2U, // CRC_W_B_W 2U, // CRC_W_D_W 2U, // CRC_W_H_W 2U, // CRC_W_W_W 0U, // CSRRD 0U, // CSRWR 1U, // CSRXCHG 0U, // CTO_D 0U, // CTO_W 0U, // CTZ_D 0U, // CTZ_W 0U, // DBAR 0U, // DBCL 2U, // DIV_D 2U, // DIV_DU 2U, // DIV_W 2U, // DIV_WU 0U, // ERTN 0U, // EXT_W_B 0U, // EXT_W_H 0U, // FABS_D 0U, // FABS_S 2U, // FADD_D 2U, // FADD_S 0U, // FCLASS_D 0U, // FCLASS_S 2U, // FCMP_CAF_D 2U, // FCMP_CAF_S 2U, // FCMP_CEQ_D 2U, // FCMP_CEQ_S 2U, // FCMP_CLE_D 2U, // FCMP_CLE_S 2U, // FCMP_CLT_D 2U, // FCMP_CLT_S 2U, // FCMP_CNE_D 2U, // FCMP_CNE_S 2U, // FCMP_COR_D 2U, // FCMP_COR_S 2U, // FCMP_CUEQ_D 2U, // FCMP_CUEQ_S 2U, // FCMP_CULE_D 2U, // FCMP_CULE_S 2U, // FCMP_CULT_D 2U, // FCMP_CULT_S 2U, // FCMP_CUNE_D 2U, // FCMP_CUNE_S 2U, // FCMP_CUN_D 2U, // FCMP_CUN_S 2U, // FCMP_SAF_D 2U, // FCMP_SAF_S 2U, // FCMP_SEQ_D 2U, // FCMP_SEQ_S 2U, // FCMP_SLE_D 2U, // FCMP_SLE_S 2U, // FCMP_SLT_D 2U, // FCMP_SLT_S 2U, // FCMP_SNE_D 2U, // FCMP_SNE_S 2U, // FCMP_SOR_D 2U, // FCMP_SOR_S 2U, // FCMP_SUEQ_D 2U, // FCMP_SUEQ_S 2U, // FCMP_SULE_D 2U, // FCMP_SULE_S 2U, // FCMP_SULT_D 2U, // FCMP_SULT_S 2U, // FCMP_SUNE_D 2U, // FCMP_SUNE_S 2U, // FCMP_SUN_D 2U, // FCMP_SUN_S 2U, // FCOPYSIGN_D 2U, // FCOPYSIGN_S 0U, // FCVT_D_S 0U, // FCVT_S_D 2U, // FDIV_D 2U, // FDIV_S 0U, // FFINT_D_L 0U, // FFINT_D_W 0U, // FFINT_S_L 0U, // FFINT_S_W 2U, // FLDGT_D 2U, // FLDGT_S 2U, // FLDLE_D 2U, // FLDLE_S 2U, // FLDX_D 2U, // FLDX_S 2U, // FLD_D 2U, // FLD_S 0U, // FLOGB_D 0U, // FLOGB_S 18U, // FMADD_D 18U, // FMADD_S 2U, // FMAXA_D 2U, // FMAXA_S 2U, // FMAX_D 2U, // FMAX_S 2U, // FMINA_D 2U, // FMINA_S 2U, // FMIN_D 2U, // FMIN_S 0U, // FMOV_D 0U, // FMOV_S 18U, // FMSUB_D 18U, // FMSUB_S 2U, // FMUL_D 2U, // FMUL_S 0U, // FNEG_D 0U, // FNEG_S 18U, // FNMADD_D 18U, // FNMADD_S 18U, // FNMSUB_D 18U, // FNMSUB_S 0U, // FRECIP_D 0U, // FRECIP_S 0U, // FRINT_D 0U, // FRINT_S 0U, // FRSQRT_D 0U, // FRSQRT_S 2U, // FSCALEB_D 2U, // FSCALEB_S 18U, // FSEL_D 18U, // FSEL_S 0U, // FSQRT_D 0U, // FSQRT_S 2U, // FSTGT_D 2U, // FSTGT_S 2U, // FSTLE_D 2U, // FSTLE_S 2U, // FSTX_D 2U, // FSTX_S 2U, // FST_D 2U, // FST_S 2U, // FSUB_D 2U, // FSUB_S 0U, // FTINTRM_L_D 0U, // FTINTRM_L_S 0U, // FTINTRM_W_D 0U, // FTINTRM_W_S 0U, // FTINTRNE_L_D 0U, // FTINTRNE_L_S 0U, // FTINTRNE_W_D 0U, // FTINTRNE_W_S 0U, // FTINTRP_L_D 0U, // FTINTRP_L_S 0U, // FTINTRP_W_D 0U, // FTINTRP_W_S 0U, // FTINTRZ_L_D 0U, // FTINTRZ_L_S 0U, // FTINTRZ_W_D 0U, // FTINTRZ_W_S 0U, // FTINT_L_D 0U, // FTINT_L_S 0U, // FTINT_W_D 0U, // FTINT_W_S 0U, // IBAR 0U, // IDLE 0U, // INVTLB 0U, // IOCSRRD_B 0U, // IOCSRRD_D 0U, // IOCSRRD_H 0U, // IOCSRRD_W 0U, // IOCSRWR_B 0U, // IOCSRWR_D 0U, // IOCSRWR_H 0U, // IOCSRWR_W 2U, // JIRL 2U, // LDDIR 2U, // LDGT_B 2U, // LDGT_D 2U, // LDGT_H 2U, // LDGT_W 2U, // LDLE_B 2U, // LDLE_D 2U, // LDLE_H 2U, // LDLE_W 0U, // LDPTE 2U, // LDPTR_D 2U, // LDPTR_W 2U, // LDX_B 2U, // LDX_BU 2U, // LDX_D 2U, // LDX_H 2U, // LDX_HU 2U, // LDX_W 2U, // LDX_WU 2U, // LD_B 2U, // LD_BU 2U, // LD_D 2U, // LD_H 2U, // LD_HU 2U, // LD_W 2U, // LD_WU 2U, // LL_D 2U, // LL_W 0U, // LU12I_W 0U, // LU32I_D 2U, // LU52I_D 2U, // MASKEQZ 2U, // MASKNEZ 2U, // MOD_D 2U, // MOD_DU 2U, // MOD_W 2U, // MOD_WU 0U, // MOVCF2FR_S 0U, // MOVCF2GR 0U, // MOVFCSR2GR 0U, // MOVFR2CF_S 0U, // MOVFR2GR_D 0U, // MOVFR2GR_S 0U, // MOVFR2GR_S_64 0U, // MOVFRH2GR_S 0U, // MOVGR2CF 0U, // MOVGR2FCSR 0U, // MOVGR2FRH_W 0U, // MOVGR2FR_D 0U, // MOVGR2FR_W 0U, // MOVGR2FR_W_64 2U, // MULH_D 2U, // MULH_DU 2U, // MULH_W 2U, // MULH_WU 2U, // MULW_D_W 2U, // MULW_D_WU 2U, // MUL_D 2U, // MUL_W 2U, // NOR 2U, // OR 2U, // ORI 2U, // ORN 0U, // PCADDI 0U, // PCADDU12I 0U, // PCADDU18I 0U, // PCALAU12I 2U, // PRELD 2U, // PRELDX 0U, // RDTIMEH_W 0U, // RDTIMEL_W 0U, // RDTIME_D 0U, // REVB_2H 0U, // REVB_2W 0U, // REVB_4H 0U, // REVB_D 0U, // REVH_2W 0U, // REVH_D 2U, // ROTRI_D 2U, // ROTRI_W 2U, // ROTR_D 2U, // ROTR_W 1U, // SC_D 1U, // SC_W 2U, // SLLI_D 2U, // SLLI_W 2U, // SLL_D 2U, // SLL_W 2U, // SLT 2U, // SLTI 2U, // SLTU 2U, // SLTUI 2U, // SRAI_D 2U, // SRAI_W 2U, // SRA_D 2U, // SRA_W 2U, // SRLI_D 2U, // SRLI_W 2U, // SRL_D 2U, // SRL_W 2U, // STGT_B 2U, // STGT_D 2U, // STGT_H 2U, // STGT_W 2U, // STLE_B 2U, // STLE_D 2U, // STLE_H 2U, // STLE_W 2U, // STPTR_D 2U, // STPTR_W 2U, // STX_B 2U, // STX_D 2U, // STX_H 2U, // STX_W 2U, // ST_B 2U, // ST_D 2U, // ST_H 2U, // ST_W 2U, // SUB_D 2U, // SUB_W 0U, // SYSCALL 0U, // TLBCLR 0U, // TLBFILL 0U, // TLBFLUSH 0U, // TLBRD 0U, // TLBSRCH 0U, // TLBWR 2U, // XOR 2U, // XORI }; // Emit the opcode for the instruction. uint32_t Bits = 0; Bits |= OpInfo0[MI->getOpcode()] << 0; Bits |= OpInfo1[MI->getOpcode()] << 16; return {AsmStrs+(Bits & 4095)-1, Bits}; } /// printInstruction - This method is automatically generated by tablegen /// from the instruction set description. LLVM_NO_PROFILE_INSTRUMENT_FUNCTION void LoongArchInstPrinter::printInstruction(const MCInst *MI, uint64_t Address, const MCSubtargetInfo &STI, raw_ostream &O) { O << "\t"; auto MnemonicInfo = getMnemonic(MI); O << MnemonicInfo.first; uint32_t Bits = MnemonicInfo.second; assert(Bits != 0 && "Cannot print this instruction."); // Fragment 0 encoded into 2 bits for 4 unique commands. switch ((Bits >> 12) & 3) { default: llvm_unreachable("Invalid command number."); case 0: // DBG_VALUE, DBG_VALUE_LIST, DBG_INSTR_REF, DBG_PHI, DBG_LABEL, BUNDLE, ... return; break; case 1: // PseudoLA_ABS, PseudoLA_ABS_LARGE, PseudoLA_GOT, PseudoLA_GOT_LARGE, Ps... printOperand(MI, 0, STI, O); break; case 2: // BSTRINS_D, BSTRINS_W, CSRWR, CSRXCHG, LU32I_D, MOVGR2FRH_W, SC_D, SC_W printOperand(MI, 1, STI, O); O << ", "; printOperand(MI, 2, STI, O); break; case 3: // INVTLB printOperand(MI, 2, STI, O); O << ", "; printOperand(MI, 1, STI, O); O << ", "; printOperand(MI, 0, STI, O); return; break; } // Fragment 1 encoded into 1 bits for 2 unique commands. if ((Bits >> 14) & 1) { // B, BL, BREAK, CSRWR, DBAR, DBCL, IBAR, IDLE, LU32I_D, MOVGR2FRH_W, SYS... return; } else { // PseudoLA_ABS, PseudoLA_ABS_LARGE, PseudoLA_GOT, PseudoLA_GOT_LARGE, Ps... O << ", "; } // Fragment 2 encoded into 2 bits for 3 unique commands. switch ((Bits >> 15) & 3) { default: llvm_unreachable("Invalid command number."); case 0: // PseudoLA_ABS, PseudoLA_GOT, PseudoLA_GOT_LARGE, PseudoLA_PCREL, Pseudo... printOperand(MI, 1, STI, O); break; case 1: // PseudoLA_ABS_LARGE printOperand(MI, 2, STI, O); return; break; case 2: // BSTRINS_D, BSTRINS_W, CSRXCHG, SC_D, SC_W printOperand(MI, 3, STI, O); break; } // Fragment 3 encoded into 1 bits for 2 unique commands. if ((Bits >> 17) & 1) { // PseudoLA_GOT_LARGE, PseudoLA_PCREL_LARGE, PseudoLA_TLS_GD_LARGE, Pseud... O << ", "; } else { // PseudoLA_ABS, PseudoLA_GOT, PseudoLA_PCREL, PseudoLA_TLS_GD, PseudoLA_... return; } // Fragment 4 encoded into 2 bits for 3 unique commands. switch ((Bits >> 18) & 3) { default: llvm_unreachable("Invalid command number."); case 0: // PseudoLA_GOT_LARGE, PseudoLA_PCREL_LARGE, PseudoLA_TLS_GD_LARGE, Pseud... printOperand(MI, 2, STI, O); break; case 1: // AMADD_D, AMADD_DB_D, AMADD_DB_W, AMADD_W, AMAND_D, AMAND_DB_D, AMAND_D... printAtomicMemOp(MI, 2, STI, O); return; break; case 2: // BSTRINS_D, BSTRINS_W printOperand(MI, 4, STI, O); return; break; } // Fragment 5 encoded into 1 bits for 2 unique commands. if ((Bits >> 20) & 1) { // ALSL_D, ALSL_W, ALSL_WU, BSTRPICK_D, BSTRPICK_W, BYTEPICK_D, BYTEPICK_... O << ", "; printOperand(MI, 3, STI, O); return; } else { // PseudoLA_GOT_LARGE, PseudoLA_PCREL_LARGE, PseudoLA_TLS_GD_LARGE, Pseud... return; } } /// getRegisterName - This method is automatically generated by tblgen /// from the register set description. This returns the assembler name /// for the specified register. const char *LoongArchInstPrinter:: getRegisterName(MCRegister Reg, unsigned AltIdx) { unsigned RegNo = Reg.id(); assert(RegNo && RegNo < 109 && "Invalid register number!"); #ifdef __GNUC__ #pragma GCC diagnostic push #pragma GCC diagnostic ignored "-Woverlength-strings" #endif static const char AsmStrsNoRegAltName[] = { /* 0 */ "f10\0" /* 4 */ "r10\0" /* 8 */ "f20\0" /* 12 */ "r20\0" /* 16 */ "f30\0" /* 20 */ "r30\0" /* 24 */ "fcc0\0" /* 29 */ "f0\0" /* 32 */ "fcsr0\0" /* 38 */ "f11\0" /* 42 */ "r11\0" /* 46 */ "f21\0" /* 50 */ "r21\0" /* 54 */ "f31\0" /* 58 */ "r31\0" /* 62 */ "fcc1\0" /* 67 */ "f1\0" /* 70 */ "fcsr1\0" /* 76 */ "f12\0" /* 80 */ "r12\0" /* 84 */ "f22\0" /* 88 */ "r22\0" /* 92 */ "fcc2\0" /* 97 */ "f2\0" /* 100 */ "fcsr2\0" /* 106 */ "f13\0" /* 110 */ "r13\0" /* 114 */ "f23\0" /* 118 */ "r23\0" /* 122 */ "fcc3\0" /* 127 */ "f3\0" /* 130 */ "fcsr3\0" /* 136 */ "f14\0" /* 140 */ "r14\0" /* 144 */ "f24\0" /* 148 */ "r24\0" /* 152 */ "fcc4\0" /* 157 */ "f4\0" /* 160 */ "r4\0" /* 163 */ "f15\0" /* 167 */ "r15\0" /* 171 */ "f25\0" /* 175 */ "r25\0" /* 179 */ "fcc5\0" /* 184 */ "f5\0" /* 187 */ "r5\0" /* 190 */ "f16\0" /* 194 */ "r16\0" /* 198 */ "f26\0" /* 202 */ "r26\0" /* 206 */ "fcc6\0" /* 211 */ "f6\0" /* 214 */ "r6\0" /* 217 */ "f17\0" /* 221 */ "r17\0" /* 225 */ "f27\0" /* 229 */ "r27\0" /* 233 */ "fcc7\0" /* 238 */ "f7\0" /* 241 */ "r7\0" /* 244 */ "f18\0" /* 248 */ "r18\0" /* 252 */ "f28\0" /* 256 */ "r28\0" /* 260 */ "f8\0" /* 263 */ "r8\0" /* 266 */ "f19\0" /* 270 */ "r19\0" /* 274 */ "f29\0" /* 278 */ "r29\0" /* 282 */ "f9\0" /* 285 */ "r9\0" }; #ifdef __GNUC__ #pragma GCC diagnostic pop #endif static const uint16_t RegAsmOffsetNoRegAltName[] = { 29, 67, 97, 127, 157, 184, 211, 238, 260, 282, 0, 38, 76, 106, 136, 163, 190, 217, 244, 266, 8, 46, 84, 114, 144, 171, 198, 225, 252, 274, 16, 54, 24, 62, 92, 122, 152, 179, 206, 233, 32, 70, 100, 130, 35, 73, 103, 133, 160, 187, 214, 241, 263, 285, 4, 42, 80, 110, 140, 167, 194, 221, 248, 270, 12, 50, 88, 118, 148, 175, 202, 229, 256, 278, 20, 58, 29, 67, 97, 127, 157, 184, 211, 238, 260, 282, 0, 38, 76, 106, 136, 163, 190, 217, 244, 266, 8, 46, 84, 114, 144, 171, 198, 225, 252, 274, 16, 54, }; #ifdef __GNUC__ #pragma GCC diagnostic push #pragma GCC diagnostic ignored "-Woverlength-strings" #endif static const char AsmStrsRegAliasName[] = { /* 0 */ "ft10\0" /* 5 */ "fa0\0" /* 9 */ "fs0\0" /* 13 */ "ft0\0" /* 17 */ "ft11\0" /* 22 */ "fa1\0" /* 26 */ "fs1\0" /* 30 */ "ft1\0" /* 34 */ "ft12\0" /* 39 */ "fa2\0" /* 43 */ "fs2\0" /* 47 */ "ft2\0" /* 51 */ "ft13\0" /* 56 */ "fa3\0" /* 60 */ "fs3\0" /* 64 */ "ft3\0" /* 68 */ "ft14\0" /* 73 */ "fa4\0" /* 77 */ "fs4\0" /* 81 */ "ft4\0" /* 85 */ "ft15\0" /* 90 */ "fa5\0" /* 94 */ "fs5\0" /* 98 */ "ft5\0" /* 102 */ "fa6\0" /* 106 */ "fs6\0" /* 110 */ "ft6\0" /* 114 */ "fa7\0" /* 118 */ "fs7\0" /* 122 */ "ft7\0" /* 126 */ "s8\0" /* 129 */ "ft8\0" /* 133 */ "ft9\0" /* 137 */ "ra\0" /* 140 */ "zero\0" /* 145 */ "fp\0" /* 148 */ "sp\0" /* 151 */ "tp\0" }; #ifdef __GNUC__ #pragma GCC diagnostic pop #endif static const uint8_t RegAsmOffsetRegAliasName[] = { 5, 22, 39, 56, 73, 90, 102, 114, 13, 30, 47, 64, 81, 98, 110, 122, 129, 133, 0, 17, 34, 51, 68, 85, 9, 26, 43, 60, 77, 94, 106, 118, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 140, 137, 151, 148, 6, 23, 40, 57, 74, 91, 103, 115, 14, 31, 48, 65, 82, 99, 111, 123, 130, 4, 145, 10, 27, 44, 61, 78, 95, 107, 119, 126, 5, 22, 39, 56, 73, 90, 102, 114, 13, 30, 47, 64, 81, 98, 110, 122, 129, 133, 0, 17, 34, 51, 68, 85, 9, 26, 43, 60, 77, 94, 106, 118, }; switch(AltIdx) { default: llvm_unreachable("Invalid register alt name index!"); case LoongArch::NoRegAltName: assert(*(AsmStrsNoRegAltName+RegAsmOffsetNoRegAltName[RegNo-1]) && "Invalid alt name index for register!"); return AsmStrsNoRegAltName+RegAsmOffsetNoRegAltName[RegNo-1]; case LoongArch::RegAliasName: if (!*(AsmStrsRegAliasName+RegAsmOffsetRegAliasName[RegNo-1])) return getRegisterName(RegNo, LoongArch::NoRegAltName); return AsmStrsRegAliasName+RegAsmOffsetRegAliasName[RegNo-1]; } } #ifdef PRINT_ALIAS_INSTR #undef PRINT_ALIAS_INSTR bool LoongArchInstPrinter::printAliasInstr(const MCInst *MI, uint64_t Address, const MCSubtargetInfo &STI, raw_ostream &OS) { static const PatternsForOpcode OpToPatterns[] = { {LoongArch::PseudoLA_ABS, 0, 1 }, {LoongArch::PseudoLA_GOT_LARGE, 1, 1 }, {LoongArch::PseudoLA_PCREL, 2, 1 }, {LoongArch::PseudoLA_PCREL_LARGE, 3, 2 }, {LoongArch::ANDI, 5, 1 }, {LoongArch::JIRL, 6, 2 }, {LoongArch::OR, 8, 1 }, }; static const AliasPattern Patterns[] = { // LoongArch::PseudoLA_ABS - 0 {0, 0, 2, 2 }, // LoongArch::PseudoLA_GOT_LARGE - 1 {16, 2, 3, 2 }, // LoongArch::PseudoLA_PCREL - 2 {0, 4, 2, 1 }, // LoongArch::PseudoLA_PCREL_LARGE - 3 {37, 5, 3, 2 }, {16, 7, 3, 3 }, // LoongArch::ANDI - 5 {57, 10, 3, 3 }, // LoongArch::JIRL - 6 {61, 13, 3, 3 }, {65, 16, 3, 3 }, // LoongArch::OR - 8 {71, 19, 3, 3 }, }; static const AliasPatternCond Conds[] = { // (PseudoLA_ABS GPR:$dst, bare_symbol:$src) - 0 {AliasPatternCond::K_RegClass, LoongArch::GPRRegClassID}, {AliasPatternCond::K_Feature, LoongArch::LaLocalWithAbs}, // (PseudoLA_GOT_LARGE GPR:$dst, GPR:$tmp, bare_symbol:$src) - 2 {AliasPatternCond::K_RegClass, LoongArch::GPRRegClassID}, {AliasPatternCond::K_RegClass, LoongArch::GPRRegClassID}, // (PseudoLA_PCREL GPR:$dst, bare_symbol:$src) - 4 {AliasPatternCond::K_RegClass, LoongArch::GPRRegClassID}, // (PseudoLA_PCREL_LARGE GPR:$dst, GPR:$tmp, bare_symbol:$src) - 5 {AliasPatternCond::K_RegClass, LoongArch::GPRRegClassID}, {AliasPatternCond::K_RegClass, LoongArch::GPRRegClassID}, // (PseudoLA_PCREL_LARGE GPR:$dst, GPR:$tmp, bare_symbol:$src) - 7 {AliasPatternCond::K_RegClass, LoongArch::GPRRegClassID}, {AliasPatternCond::K_RegClass, LoongArch::GPRRegClassID}, {AliasPatternCond::K_Feature, LoongArch::LaGlobalWithPcrel}, // (ANDI R0, R0, 0) - 10 {AliasPatternCond::K_Reg, LoongArch::R0}, {AliasPatternCond::K_Reg, LoongArch::R0}, {AliasPatternCond::K_Imm, uint32_t(0)}, // (JIRL R0, R1, 0) - 13 {AliasPatternCond::K_Reg, LoongArch::R0}, {AliasPatternCond::K_Reg, LoongArch::R1}, {AliasPatternCond::K_Imm, uint32_t(0)}, // (JIRL R0, GPR:$rj, 0) - 16 {AliasPatternCond::K_Reg, LoongArch::R0}, {AliasPatternCond::K_RegClass, LoongArch::GPRRegClassID}, {AliasPatternCond::K_Imm, uint32_t(0)}, // (OR GPR:$dst, GPR:$src, R0) - 19 {AliasPatternCond::K_RegClass, LoongArch::GPRRegClassID}, {AliasPatternCond::K_RegClass, LoongArch::GPRRegClassID}, {AliasPatternCond::K_Reg, LoongArch::R0}, }; static const char AsmStrings[] = /* 0 */ "la.local $\x01, $\x02\0" /* 16 */ "la.global $\x01, $\x02, $\x03\0" /* 37 */ "la.local $\x01, $\x02, $\x03\0" /* 57 */ "nop\0" /* 61 */ "ret\0" /* 65 */ "jr $\x02\0" /* 71 */ "move $\x01, $\x02\0" ; #ifndef NDEBUG static struct SortCheck { SortCheck(ArrayRef OpToPatterns) { assert(std::is_sorted( OpToPatterns.begin(), OpToPatterns.end(), [](const PatternsForOpcode &L, const PatternsForOpcode &R) { return L.Opcode < R.Opcode; }) && "tablegen failed to sort opcode patterns"); } } sortCheckVar(OpToPatterns); #endif AliasMatchingData M { ArrayRef(OpToPatterns), ArrayRef(Patterns), ArrayRef(Conds), StringRef(AsmStrings, std::size(AsmStrings)), nullptr, }; const char *AsmString = matchAliasPatterns(MI, &STI, M); if (!AsmString) return false; unsigned I = 0; while (AsmString[I] != ' ' && AsmString[I] != '\t' && AsmString[I] != '$' && AsmString[I] != '\0') ++I; OS << '\t' << StringRef(AsmString, I); if (AsmString[I] != '\0') { if (AsmString[I] == ' ' || AsmString[I] == '\t') { OS << '\t'; ++I; } do { if (AsmString[I] == '$') { ++I; if (AsmString[I] == (char)0xff) { ++I; int OpIdx = AsmString[I++] - 1; int PrintMethodIdx = AsmString[I++] - 1; printCustomAliasOperand(MI, Address, OpIdx, PrintMethodIdx, STI, OS); } else printOperand(MI, unsigned(AsmString[I++]) - 1, STI, OS); } else { OS << AsmString[I++]; } } while (AsmString[I] != '\0'); } return true; } void LoongArchInstPrinter::printCustomAliasOperand( const MCInst *MI, uint64_t Address, unsigned OpIdx, unsigned PrintMethodIdx, const MCSubtargetInfo &STI, raw_ostream &OS) { llvm_unreachable("Unknown PrintMethod kind"); } #endif // PRINT_ALIAS_INSTR