LCOV - code coverage report
Current view: top level - build-llvm/lib/Target/Lanai - LanaiGenMCCodeEmitter.inc (source / functions) Hit Total Coverage
Test: llvm-toolchain.info Lines: 0 168 0.0 %
Date: 2018-10-20 13:21:21 Functions: 0 1 0.0 %
Legend: Lines: hit not hit

          Line data    Source code
       1             : /*===- TableGen'erated file -------------------------------------*- C++ -*-===*\
       2             : |*                                                                            *|
       3             : |* Machine Code Emitter                                                       *|
       4             : |*                                                                            *|
       5             : |* Automatically generated file, do not edit!                                 *|
       6             : |*                                                                            *|
       7             : \*===----------------------------------------------------------------------===*/
       8             : 
       9             : // Undef for HURD
      10             : #ifdef EIEIO
      11             : #undef EIEIO
      12             : #endif
      13           0 : uint64_t LanaiMCCodeEmitter::getBinaryCodeForInstr(const MCInst &MI,
      14             :     SmallVectorImpl<MCFixup> &Fixups,
      15             :     const MCSubtargetInfo &STI) const {
      16             :   static const uint64_t InstBits[] = {
      17             :     UINT64_C(0),
      18             :     UINT64_C(0),
      19             :     UINT64_C(0),
      20             :     UINT64_C(0),
      21             :     UINT64_C(0),
      22             :     UINT64_C(0),
      23             :     UINT64_C(0),
      24             :     UINT64_C(0),
      25             :     UINT64_C(0),
      26             :     UINT64_C(0),
      27             :     UINT64_C(0),
      28             :     UINT64_C(0),
      29             :     UINT64_C(0),
      30             :     UINT64_C(0),
      31             :     UINT64_C(0),
      32             :     UINT64_C(0),
      33             :     UINT64_C(0),
      34             :     UINT64_C(0),
      35             :     UINT64_C(0),
      36             :     UINT64_C(0),
      37             :     UINT64_C(0),
      38             :     UINT64_C(0),
      39             :     UINT64_C(0),
      40             :     UINT64_C(0),
      41             :     UINT64_C(0),
      42             :     UINT64_C(0),
      43             :     UINT64_C(0),
      44             :     UINT64_C(0),
      45             :     UINT64_C(0),
      46             :     UINT64_C(0),
      47             :     UINT64_C(0),
      48             :     UINT64_C(0),
      49             :     UINT64_C(0),
      50             :     UINT64_C(0),
      51             :     UINT64_C(0),
      52             :     UINT64_C(0),
      53             :     UINT64_C(0),
      54             :     UINT64_C(0),
      55             :     UINT64_C(0),
      56             :     UINT64_C(0),
      57             :     UINT64_C(0),
      58             :     UINT64_C(0),
      59             :     UINT64_C(0),
      60             :     UINT64_C(0),
      61             :     UINT64_C(0),
      62             :     UINT64_C(0),
      63             :     UINT64_C(0),
      64             :     UINT64_C(0),
      65             :     UINT64_C(0),
      66             :     UINT64_C(0),
      67             :     UINT64_C(0),
      68             :     UINT64_C(0),
      69             :     UINT64_C(0),
      70             :     UINT64_C(0),
      71             :     UINT64_C(0),
      72             :     UINT64_C(0),
      73             :     UINT64_C(0),
      74             :     UINT64_C(0),
      75             :     UINT64_C(0),
      76             :     UINT64_C(0),
      77             :     UINT64_C(0),
      78             :     UINT64_C(0),
      79             :     UINT64_C(0),
      80             :     UINT64_C(0),
      81             :     UINT64_C(0),
      82             :     UINT64_C(0),
      83             :     UINT64_C(0),
      84             :     UINT64_C(0),
      85             :     UINT64_C(0),
      86             :     UINT64_C(0),
      87             :     UINT64_C(0),
      88             :     UINT64_C(0),
      89             :     UINT64_C(0),
      90             :     UINT64_C(0),
      91             :     UINT64_C(0),
      92             :     UINT64_C(0),
      93             :     UINT64_C(0),
      94             :     UINT64_C(0),
      95             :     UINT64_C(0),
      96             :     UINT64_C(0),
      97             :     UINT64_C(0),
      98             :     UINT64_C(0),
      99             :     UINT64_C(0),
     100             :     UINT64_C(0),
     101             :     UINT64_C(0),
     102             :     UINT64_C(0),
     103             :     UINT64_C(0),
     104             :     UINT64_C(0),
     105             :     UINT64_C(0),
     106             :     UINT64_C(0),
     107             :     UINT64_C(0),
     108             :     UINT64_C(0),
     109             :     UINT64_C(0),
     110             :     UINT64_C(0),
     111             :     UINT64_C(0),
     112             :     UINT64_C(0),
     113             :     UINT64_C(0),
     114             :     UINT64_C(0),
     115             :     UINT64_C(0),
     116             :     UINT64_C(0),
     117             :     UINT64_C(0),
     118             :     UINT64_C(0),
     119             :     UINT64_C(0),
     120             :     UINT64_C(0),
     121             :     UINT64_C(0),
     122             :     UINT64_C(0),
     123             :     UINT64_C(0),
     124             :     UINT64_C(0),
     125             :     UINT64_C(0),
     126             :     UINT64_C(0),
     127             :     UINT64_C(0),
     128             :     UINT64_C(0),
     129             :     UINT64_C(0),
     130             :     UINT64_C(0),
     131             :     UINT64_C(0),
     132             :     UINT64_C(0),
     133             :     UINT64_C(0),
     134             :     UINT64_C(0),
     135             :     UINT64_C(0),
     136             :     UINT64_C(0),
     137             :     UINT64_C(0),
     138             :     UINT64_C(0),
     139             :     UINT64_C(0),
     140             :     UINT64_C(0),
     141             :     UINT64_C(0),
     142             :     UINT64_C(0),
     143             :     UINT64_C(0),
     144             :     UINT64_C(0),
     145             :     UINT64_C(0),
     146             :     UINT64_C(0),
     147             :     UINT64_C(0),
     148             :     UINT64_C(0),
     149             :     UINT64_C(0),
     150             :     UINT64_C(0),
     151             :     UINT64_C(0),
     152             :     UINT64_C(0),
     153             :     UINT64_C(0),
     154             :     UINT64_C(0),
     155             :     UINT64_C(0),
     156             :     UINT64_C(0),
     157             :     UINT64_C(0),
     158             :     UINT64_C(0),
     159             :     UINT64_C(268632064),        // ADDC_F_I_HI
     160             :     UINT64_C(268566528),        // ADDC_F_I_LO
     161             :     UINT64_C(3221356800),       // ADDC_F_R
     162             :     UINT64_C(268500992),        // ADDC_I_HI
     163             :     UINT64_C(268435456),        // ADDC_I_LO
     164             :     UINT64_C(3221225728),       // ADDC_R
     165             :     UINT64_C(196608),   // ADD_F_I_HI
     166             :     UINT64_C(131072),   // ADD_F_I_LO
     167             :     UINT64_C(3221356544),       // ADD_F_R
     168             :     UINT64_C(65536),    // ADD_I_HI
     169             :     UINT64_C(0),        // ADD_I_LO
     170             :     UINT64_C(3221225472),       // ADD_R
     171             :     UINT64_C(1073938432),       // AND_F_I_HI
     172             :     UINT64_C(1073872896),       // AND_F_I_LO
     173             :     UINT64_C(3221357568),       // AND_F_R
     174             :     UINT64_C(1073807360),       // AND_I_HI
     175             :     UINT64_C(1073741824),       // AND_I_LO
     176             :     UINT64_C(3221226496),       // AND_R
     177             :     UINT64_C(3758096384),       // BRCC
     178             :     UINT64_C(3238003968),       // BRIND_CC
     179             :     UINT64_C(3238003968),       // BRIND_CCA
     180             :     UINT64_C(3774873602),       // BRR
     181             :     UINT64_C(3758096384),       // BT
     182             :     UINT64_C(3238003968),       // JR
     183             :     UINT64_C(4026531840),       // LDADDR
     184             :     UINT64_C(4026744832),       // LDBs_RI
     185             :     UINT64_C(2684354564),       // LDBs_RR
     186             :     UINT64_C(4026748928),       // LDBz_RI
     187             :     UINT64_C(2684354565),       // LDBz_RR
     188             :     UINT64_C(4026728448),       // LDHs_RI
     189             :     UINT64_C(2684354560),       // LDHs_RR
     190             :     UINT64_C(4026732544),       // LDHz_RI
     191             :     UINT64_C(2684354561),       // LDHz_RR
     192             :     UINT64_C(2147483648),       // LDW_RI
     193             :     UINT64_C(2684354562),       // LDW_RR
     194             :     UINT64_C(2684354563),       // LDWz_RR
     195             :     UINT64_C(3489660930),       // LEADZ
     196             :     UINT64_C(2),        // LOG0
     197             :     UINT64_C(3),        // LOG1
     198             :     UINT64_C(4),        // LOG2
     199             :     UINT64_C(5),        // LOG3
     200             :     UINT64_C(6),        // LOG4
     201             :     UINT64_C(65536),    // MOVHI
     202             :     UINT64_C(1),        // NOP
     203             :     UINT64_C(1342373888),       // OR_F_I_HI
     204             :     UINT64_C(1342308352),       // OR_F_I_LO
     205             :     UINT64_C(3221357824),       // OR_F_R
     206             :     UINT64_C(1342242816),       // OR_I_HI
     207             :     UINT64_C(1342177280),       // OR_I_LO
     208             :     UINT64_C(3221226752),       // OR_R
     209             :     UINT64_C(3489660929),       // POPC
     210             :     UINT64_C(2165768188),       // RET
     211             :     UINT64_C(1879244800),       // SA_F_I
     212             :     UINT64_C(1879113728),       // SA_I
     213             :     UINT64_C(3758096386),       // SCC
     214             :     UINT64_C(3221227264),       // SELECT
     215             :     UINT64_C(537067520),        // SFSUB_F_RI_HI
     216             :     UINT64_C(537001984),        // SFSUB_F_RI_LO
     217             :     UINT64_C(3221357056),       // SFSUB_F_RR
     218             :     UINT64_C(3221358464),       // SHL_F_R
     219             :     UINT64_C(3221227392),       // SHL_R
     220             :     UINT64_C(4026662912),       // SLI
     221             :     UINT64_C(1879179264),       // SL_F_I
     222             :     UINT64_C(1879048192),       // SL_I
     223             :     UINT64_C(3221358528),       // SRA_F_R
     224             :     UINT64_C(3221227456),       // SRA_R
     225             :     UINT64_C(3221358464),       // SRL_F_R
     226             :     UINT64_C(3221227392),       // SRL_R
     227             :     UINT64_C(4026597376),       // STADDR
     228             :     UINT64_C(4026753024),       // STB_RI
     229             :     UINT64_C(2952790020),       // STB_RR
     230             :     UINT64_C(4026736640),       // STH_RI
     231             :     UINT64_C(2952790016),       // STH_RR
     232             :     UINT64_C(805502976),        // SUBB_F_I_HI
     233             :     UINT64_C(805437440),        // SUBB_F_I_LO
     234             :     UINT64_C(3221357312),       // SUBB_F_R
     235             :     UINT64_C(805371904),        // SUBB_I_HI
     236             :     UINT64_C(805306368),        // SUBB_I_LO
     237             :     UINT64_C(3221226240),       // SUBB_R
     238             :     UINT64_C(537067520),        // SUB_F_I_HI
     239             :     UINT64_C(537001984),        // SUB_F_I_LO
     240             :     UINT64_C(3221357056),       // SUB_F_R
     241             :     UINT64_C(536936448),        // SUB_I_HI
     242             :     UINT64_C(536870912),        // SUB_I_LO
     243             :     UINT64_C(3221225984),       // SUB_R
     244             :     UINT64_C(2415919104),       // SW_RI
     245             :     UINT64_C(2952790018),       // SW_RR
     246             :     UINT64_C(3489660931),       // TRAILZ
     247             :     UINT64_C(1610809344),       // XOR_F_I_HI
     248             :     UINT64_C(1610743808),       // XOR_F_I_LO
     249             :     UINT64_C(3221358080),       // XOR_F_R
     250             :     UINT64_C(1610678272),       // XOR_I_HI
     251             :     UINT64_C(1610612736),       // XOR_I_LO
     252             :     UINT64_C(3221227008),       // XOR_R
     253             :     UINT64_C(0)
     254             :   };
     255           0 :   const unsigned opcode = MI.getOpcode();
     256           0 :   uint64_t Value = InstBits[opcode];
     257             :   uint64_t op = 0;
     258             :   (void)op;  // suppress warning
     259           0 :   switch (opcode) {
     260             :     case Lanai::LOG0:
     261             :     case Lanai::LOG1:
     262             :     case Lanai::LOG2:
     263             :     case Lanai::LOG3:
     264             :     case Lanai::LOG4:
     265             :     case Lanai::NOP:
     266             :     case Lanai::RET: {
     267             :       break;
     268             :     }
     269             :     case Lanai::BRR: {
     270             :       // op: DDDI
     271           0 :       op = getMachineOpValue(MI, MI.getOperand(1), Fixups, STI);
     272           0 :       Value |= (op & UINT64_C(14)) << 24;
     273           0 :       Value |= op & UINT64_C(1);
     274             :       // op: imm16
     275           0 :       op = getMachineOpValue(MI, MI.getOperand(0), Fixups, STI);
     276           0 :       Value |= op & UINT64_C(65532);
     277           0 :       break;
     278             :     }
     279             :     case Lanai::STB_RI:
     280             :     case Lanai::STH_RI: {
     281             :       // op: Rd
     282           0 :       op = getMachineOpValue(MI, MI.getOperand(0), Fixups, STI);
     283           0 :       Value |= (op & UINT64_C(31)) << 23;
     284             :       // op: P
     285           0 :       op = getMachineOpValue(MI, MI.getOperand(0), Fixups, STI);
     286           0 :       Value |= (op & UINT64_C(1)) << 11;
     287             :       // op: Q
     288           0 :       op = getSplsOpValue(MI, 1, Fixups, STI);
     289           0 :       Value |= (op & UINT64_C(1)) << 10;
     290             :       // op: dst
     291           0 :       op = getSplsOpValue(MI, 1, Fixups, STI);
     292           0 :       Value |= (op & UINT64_C(126976)) << 6;
     293           0 :       Value |= op & UINT64_C(1023);
     294           0 :       Value = adjustPqBitsSpls(MI, Value, STI);
     295           0 :       break;
     296             :     }
     297             :     case Lanai::LDBs_RI:
     298             :     case Lanai::LDBz_RI:
     299             :     case Lanai::LDHs_RI:
     300             :     case Lanai::LDHz_RI: {
     301             :       // op: Rd
     302           0 :       op = getMachineOpValue(MI, MI.getOperand(0), Fixups, STI);
     303           0 :       Value |= (op & UINT64_C(31)) << 23;
     304             :       // op: P
     305           0 :       op = getMachineOpValue(MI, MI.getOperand(0), Fixups, STI);
     306           0 :       Value |= (op & UINT64_C(1)) << 11;
     307             :       // op: Q
     308           0 :       op = getSplsOpValue(MI, 1, Fixups, STI);
     309           0 :       Value |= (op & UINT64_C(1)) << 10;
     310             :       // op: src
     311           0 :       op = getSplsOpValue(MI, 1, Fixups, STI);
     312           0 :       Value |= (op & UINT64_C(126976)) << 6;
     313           0 :       Value |= op & UINT64_C(1023);
     314           0 :       Value = adjustPqBitsSpls(MI, Value, STI);
     315           0 :       break;
     316             :     }
     317             :     case Lanai::SW_RI: {
     318             :       // op: Rd
     319           0 :       op = getMachineOpValue(MI, MI.getOperand(0), Fixups, STI);
     320           0 :       Value |= (op & UINT64_C(31)) << 23;
     321             :       // op: P
     322           0 :       op = getMachineOpValue(MI, MI.getOperand(0), Fixups, STI);
     323           0 :       Value |= (op & UINT64_C(1)) << 17;
     324             :       // op: Q
     325           0 :       op = getRiMemoryOpValue(MI, 1, Fixups, STI);
     326           0 :       Value |= (op & UINT64_C(1)) << 16;
     327             :       // op: dst
     328           0 :       op = getRiMemoryOpValue(MI, 1, Fixups, STI);
     329           0 :       Value |= op & UINT64_C(8126464);
     330           0 :       Value |= op & UINT64_C(65535);
     331           0 :       Value = adjustPqBitsRmAndRrm(MI, Value, STI);
     332           0 :       break;
     333             :     }
     334             :     case Lanai::LDW_RI: {
     335             :       // op: Rd
     336           0 :       op = getMachineOpValue(MI, MI.getOperand(0), Fixups, STI);
     337           0 :       Value |= (op & UINT64_C(31)) << 23;
     338             :       // op: P
     339           0 :       op = getMachineOpValue(MI, MI.getOperand(0), Fixups, STI);
     340           0 :       Value |= (op & UINT64_C(1)) << 17;
     341             :       // op: Q
     342           0 :       op = getRiMemoryOpValue(MI, 1, Fixups, STI);
     343           0 :       Value |= (op & UINT64_C(1)) << 16;
     344             :       // op: src
     345           0 :       op = getRiMemoryOpValue(MI, 1, Fixups, STI);
     346           0 :       Value |= op & UINT64_C(8126464);
     347           0 :       Value |= op & UINT64_C(65535);
     348           0 :       Value = adjustPqBitsRmAndRrm(MI, Value, STI);
     349           0 :       break;
     350             :     }
     351             :     case Lanai::STB_RR:
     352             :     case Lanai::STH_RR:
     353             :     case Lanai::SW_RR: {
     354             :       // op: Rd
     355           0 :       op = getMachineOpValue(MI, MI.getOperand(0), Fixups, STI);
     356           0 :       Value |= (op & UINT64_C(31)) << 23;
     357             :       // op: P
     358           0 :       op = getMachineOpValue(MI, MI.getOperand(0), Fixups, STI);
     359           0 :       Value |= (op & UINT64_C(1)) << 17;
     360             :       // op: Q
     361           0 :       op = getRrMemoryOpValue(MI, 1, Fixups, STI);
     362           0 :       Value |= (op & UINT64_C(1)) << 16;
     363             :       // op: dst
     364             :       op = getRrMemoryOpValue(MI, 1, Fixups, STI);
     365           0 :       Value |= (op & UINT64_C(1015808)) << 3;
     366           0 :       Value |= (op & UINT64_C(31744)) << 1;
     367           0 :       Value |= (op & UINT64_C(255)) << 3;
     368           0 :       Value = adjustPqBitsRmAndRrm(MI, Value, STI);
     369           0 :       break;
     370             :     }
     371             :     case Lanai::LDBs_RR:
     372             :     case Lanai::LDBz_RR:
     373             :     case Lanai::LDHs_RR:
     374             :     case Lanai::LDHz_RR:
     375             :     case Lanai::LDW_RR:
     376             :     case Lanai::LDWz_RR: {
     377             :       // op: Rd
     378           0 :       op = getMachineOpValue(MI, MI.getOperand(0), Fixups, STI);
     379           0 :       Value |= (op & UINT64_C(31)) << 23;
     380             :       // op: P
     381           0 :       op = getMachineOpValue(MI, MI.getOperand(0), Fixups, STI);
     382           0 :       Value |= (op & UINT64_C(1)) << 17;
     383             :       // op: Q
     384           0 :       op = getRrMemoryOpValue(MI, 1, Fixups, STI);
     385           0 :       Value |= (op & UINT64_C(1)) << 16;
     386             :       // op: src
     387             :       op = getRrMemoryOpValue(MI, 1, Fixups, STI);
     388           0 :       Value |= (op & UINT64_C(1015808)) << 3;
     389           0 :       Value |= (op & UINT64_C(31744)) << 1;
     390           0 :       Value |= (op & UINT64_C(255)) << 3;
     391           0 :       Value = adjustPqBitsRmAndRrm(MI, Value, STI);
     392           0 :       break;
     393             :     }
     394             :     case Lanai::LEADZ:
     395             :     case Lanai::POPC:
     396             :     case Lanai::TRAILZ: {
     397             :       // op: Rd
     398           0 :       op = getMachineOpValue(MI, MI.getOperand(0), Fixups, STI);
     399           0 :       Value |= (op & UINT64_C(31)) << 23;
     400             :       // op: Rs1
     401           0 :       op = getMachineOpValue(MI, MI.getOperand(1), Fixups, STI);
     402           0 :       Value |= (op & UINT64_C(31)) << 18;
     403           0 :       break;
     404             :     }
     405             :     case Lanai::ADDC_F_R:
     406             :     case Lanai::ADDC_R:
     407             :     case Lanai::ADD_F_R:
     408             :     case Lanai::ADD_R:
     409             :     case Lanai::AND_F_R:
     410             :     case Lanai::AND_R:
     411             :     case Lanai::OR_F_R:
     412             :     case Lanai::OR_R:
     413             :     case Lanai::SELECT:
     414             :     case Lanai::SHL_F_R:
     415             :     case Lanai::SHL_R:
     416             :     case Lanai::SRA_F_R:
     417             :     case Lanai::SRA_R:
     418             :     case Lanai::SRL_F_R:
     419             :     case Lanai::SRL_R:
     420             :     case Lanai::SUBB_F_R:
     421             :     case Lanai::SUBB_R:
     422             :     case Lanai::SUB_F_R:
     423             :     case Lanai::SUB_R:
     424             :     case Lanai::XOR_F_R:
     425             :     case Lanai::XOR_R: {
     426             :       // op: Rd
     427           0 :       op = getMachineOpValue(MI, MI.getOperand(0), Fixups, STI);
     428           0 :       Value |= (op & UINT64_C(31)) << 23;
     429             :       // op: Rs1
     430           0 :       op = getMachineOpValue(MI, MI.getOperand(1), Fixups, STI);
     431           0 :       Value |= (op & UINT64_C(31)) << 18;
     432             :       // op: Rs2
     433           0 :       op = getMachineOpValue(MI, MI.getOperand(2), Fixups, STI);
     434           0 :       Value |= (op & UINT64_C(31)) << 11;
     435             :       // op: DDDI
     436           0 :       op = getMachineOpValue(MI, MI.getOperand(3), Fixups, STI);
     437           0 :       Value |= (op & UINT64_C(1)) << 16;
     438           0 :       Value |= (op & UINT64_C(14)) >> 1;
     439           0 :       break;
     440             :     }
     441             :     case Lanai::ADDC_F_I_HI:
     442             :     case Lanai::ADDC_F_I_LO:
     443             :     case Lanai::ADDC_I_HI:
     444             :     case Lanai::ADDC_I_LO:
     445             :     case Lanai::ADD_F_I_HI:
     446             :     case Lanai::ADD_F_I_LO:
     447             :     case Lanai::ADD_I_HI:
     448             :     case Lanai::ADD_I_LO:
     449             :     case Lanai::AND_F_I_HI:
     450             :     case Lanai::AND_F_I_LO:
     451             :     case Lanai::AND_I_HI:
     452             :     case Lanai::AND_I_LO:
     453             :     case Lanai::OR_F_I_HI:
     454             :     case Lanai::OR_F_I_LO:
     455             :     case Lanai::OR_I_HI:
     456             :     case Lanai::OR_I_LO:
     457             :     case Lanai::SA_F_I:
     458             :     case Lanai::SA_I:
     459             :     case Lanai::SL_F_I:
     460             :     case Lanai::SL_I:
     461             :     case Lanai::SUBB_F_I_HI:
     462             :     case Lanai::SUBB_F_I_LO:
     463             :     case Lanai::SUBB_I_HI:
     464             :     case Lanai::SUBB_I_LO:
     465             :     case Lanai::SUB_F_I_HI:
     466             :     case Lanai::SUB_F_I_LO:
     467             :     case Lanai::SUB_I_HI:
     468             :     case Lanai::SUB_I_LO:
     469             :     case Lanai::XOR_F_I_HI:
     470             :     case Lanai::XOR_F_I_LO:
     471             :     case Lanai::XOR_I_HI:
     472             :     case Lanai::XOR_I_LO: {
     473             :       // op: Rd
     474           0 :       op = getMachineOpValue(MI, MI.getOperand(0), Fixups, STI);
     475           0 :       Value |= (op & UINT64_C(31)) << 23;
     476             :       // op: Rs1
     477           0 :       op = getMachineOpValue(MI, MI.getOperand(1), Fixups, STI);
     478           0 :       Value |= (op & UINT64_C(31)) << 18;
     479             :       // op: imm16
     480           0 :       op = getMachineOpValue(MI, MI.getOperand(2), Fixups, STI);
     481           0 :       Value |= op & UINT64_C(65535);
     482           0 :       break;
     483             :     }
     484             :     case Lanai::STADDR: {
     485             :       // op: Rd
     486           0 :       op = getMachineOpValue(MI, MI.getOperand(0), Fixups, STI);
     487           0 :       Value |= (op & UINT64_C(31)) << 23;
     488             :       // op: dst
     489           0 :       op = getMachineOpValue(MI, MI.getOperand(1), Fixups, STI);
     490           0 :       Value |= (op & UINT64_C(2031616)) << 2;
     491           0 :       Value |= op & UINT64_C(65535);
     492           0 :       break;
     493             :     }
     494             :     case Lanai::SLI: {
     495             :       // op: Rd
     496           0 :       op = getMachineOpValue(MI, MI.getOperand(0), Fixups, STI);
     497           0 :       Value |= (op & UINT64_C(31)) << 23;
     498             :       // op: imm
     499           0 :       op = getMachineOpValue(MI, MI.getOperand(1), Fixups, STI);
     500           0 :       Value |= (op & UINT64_C(2031616)) << 2;
     501           0 :       Value |= op & UINT64_C(65535);
     502           0 :       break;
     503             :     }
     504             :     case Lanai::MOVHI: {
     505             :       // op: Rd
     506           0 :       op = getMachineOpValue(MI, MI.getOperand(0), Fixups, STI);
     507           0 :       Value |= (op & UINT64_C(31)) << 23;
     508             :       // op: imm16
     509           0 :       op = getMachineOpValue(MI, MI.getOperand(1), Fixups, STI);
     510           0 :       Value |= op & UINT64_C(65535);
     511           0 :       break;
     512             :     }
     513             :     case Lanai::LDADDR: {
     514             :       // op: Rd
     515           0 :       op = getMachineOpValue(MI, MI.getOperand(0), Fixups, STI);
     516           0 :       Value |= (op & UINT64_C(31)) << 23;
     517             :       // op: src
     518           0 :       op = getMachineOpValue(MI, MI.getOperand(1), Fixups, STI);
     519           0 :       Value |= (op & UINT64_C(2031616)) << 2;
     520           0 :       Value |= op & UINT64_C(65535);
     521           0 :       break;
     522             :     }
     523             :     case Lanai::BRIND_CC: {
     524             :       // op: Rs1
     525           0 :       op = getMachineOpValue(MI, MI.getOperand(0), Fixups, STI);
     526           0 :       Value |= (op & UINT64_C(31)) << 18;
     527             :       // op: DDDI
     528           0 :       op = getMachineOpValue(MI, MI.getOperand(1), Fixups, STI);
     529           0 :       Value |= (op & UINT64_C(1)) << 16;
     530           0 :       Value |= (op & UINT64_C(14)) >> 1;
     531           0 :       break;
     532             :     }
     533             :     case Lanai::SCC: {
     534             :       // op: Rs1
     535           0 :       op = getMachineOpValue(MI, MI.getOperand(0), Fixups, STI);
     536           0 :       Value |= (op & UINT64_C(31)) << 18;
     537             :       // op: DDDI
     538           0 :       op = getMachineOpValue(MI, MI.getOperand(1), Fixups, STI);
     539           0 :       Value |= (op & UINT64_C(14)) << 24;
     540           0 :       Value |= op & UINT64_C(1);
     541           0 :       break;
     542             :     }
     543             :     case Lanai::SFSUB_F_RR: {
     544             :       // op: Rs1
     545           0 :       op = getMachineOpValue(MI, MI.getOperand(0), Fixups, STI);
     546           0 :       Value |= (op & UINT64_C(31)) << 18;
     547             :       // op: Rs2
     548           0 :       op = getMachineOpValue(MI, MI.getOperand(1), Fixups, STI);
     549           0 :       Value |= (op & UINT64_C(31)) << 11;
     550           0 :       break;
     551             :     }
     552             :     case Lanai::BRIND_CCA: {
     553             :       // op: Rs1
     554           0 :       op = getMachineOpValue(MI, MI.getOperand(0), Fixups, STI);
     555           0 :       Value |= (op & UINT64_C(31)) << 18;
     556             :       // op: Rs2
     557           0 :       op = getMachineOpValue(MI, MI.getOperand(1), Fixups, STI);
     558           0 :       Value |= (op & UINT64_C(31)) << 11;
     559             :       // op: DDDI
     560           0 :       op = getMachineOpValue(MI, MI.getOperand(2), Fixups, STI);
     561           0 :       Value |= (op & UINT64_C(1)) << 16;
     562           0 :       Value |= (op & UINT64_C(14)) >> 1;
     563           0 :       break;
     564             :     }
     565             :     case Lanai::SFSUB_F_RI_HI:
     566             :     case Lanai::SFSUB_F_RI_LO: {
     567             :       // op: Rs1
     568           0 :       op = getMachineOpValue(MI, MI.getOperand(0), Fixups, STI);
     569           0 :       Value |= (op & UINT64_C(31)) << 18;
     570             :       // op: imm16
     571           0 :       op = getMachineOpValue(MI, MI.getOperand(1), Fixups, STI);
     572           0 :       Value |= op & UINT64_C(65535);
     573           0 :       break;
     574             :     }
     575             :     case Lanai::JR: {
     576             :       // op: Rs2
     577           0 :       op = getMachineOpValue(MI, MI.getOperand(0), Fixups, STI);
     578           0 :       Value |= (op & UINT64_C(31)) << 11;
     579           0 :       break;
     580             :     }
     581           0 :     case Lanai::BT: {
     582             :       // op: addr
     583           0 :       op = getBranchTargetOpValue(MI, 0, Fixups, STI);
     584           0 :       Value |= op & UINT64_C(33554428);
     585           0 :       break;
     586             :     }
     587           0 :     case Lanai::BRCC: {
     588             :       // op: addr
     589           0 :       op = getBranchTargetOpValue(MI, 0, Fixups, STI);
     590           0 :       Value |= op & UINT64_C(33554428);
     591             :       // op: DDDI
     592           0 :       op = getMachineOpValue(MI, MI.getOperand(1), Fixups, STI);
     593           0 :       Value |= (op & UINT64_C(14)) << 24;
     594           0 :       Value |= op & UINT64_C(1);
     595           0 :       break;
     596             :     }
     597             :   default:
     598             :     std::string msg;
     599             :     raw_string_ostream Msg(msg);
     600           0 :     Msg << "Not supported instr: " << MI;
     601           0 :     report_fatal_error(Msg.str());
     602             :   }
     603           0 :   return Value;
     604             : }
     605             : 
     606             : #ifdef ENABLE_INSTR_PREDICATE_VERIFIER
     607             : #undef ENABLE_INSTR_PREDICATE_VERIFIER
     608             : #include <sstream>
     609             : 
     610             : // Flags for subtarget features that participate in instruction matching.
     611             : enum SubtargetFeatureFlag : uint8_t {
     612             :   Feature_None = 0
     613             : };
     614             : 
     615             : #ifndef NDEBUG
     616             : static const char *SubtargetFeatureNames[] = {
     617             :   nullptr
     618             : };
     619             : 
     620             : #endif // NDEBUG
     621             : uint64_t LanaiMCCodeEmitter::
     622             : computeAvailableFeatures(const FeatureBitset& FB) const {
     623             :   uint64_t Features = 0;
     624             :   return Features;
     625             : }
     626             : 
     627             : void LanaiMCCodeEmitter::verifyInstructionPredicates(
     628             :     const MCInst &Inst, uint64_t AvailableFeatures) const {
     629             : #ifndef NDEBUG
     630             :   static uint64_t RequiredFeatures[] = {
     631             :     0, // PHI = 0
     632             :     0, // INLINEASM = 1
     633             :     0, // CFI_INSTRUCTION = 2
     634             :     0, // EH_LABEL = 3
     635             :     0, // GC_LABEL = 4
     636             :     0, // ANNOTATION_LABEL = 5
     637             :     0, // KILL = 6
     638             :     0, // EXTRACT_SUBREG = 7
     639             :     0, // INSERT_SUBREG = 8
     640             :     0, // IMPLICIT_DEF = 9
     641             :     0, // SUBREG_TO_REG = 10
     642             :     0, // COPY_TO_REGCLASS = 11
     643             :     0, // DBG_VALUE = 12
     644             :     0, // DBG_LABEL = 13
     645             :     0, // REG_SEQUENCE = 14
     646             :     0, // COPY = 15
     647             :     0, // BUNDLE = 16
     648             :     0, // LIFETIME_START = 17
     649             :     0, // LIFETIME_END = 18
     650             :     0, // STACKMAP = 19
     651             :     0, // FENTRY_CALL = 20
     652             :     0, // PATCHPOINT = 21
     653             :     0, // LOAD_STACK_GUARD = 22
     654             :     0, // STATEPOINT = 23
     655             :     0, // LOCAL_ESCAPE = 24
     656             :     0, // FAULTING_OP = 25
     657             :     0, // PATCHABLE_OP = 26
     658             :     0, // PATCHABLE_FUNCTION_ENTER = 27
     659             :     0, // PATCHABLE_RET = 28
     660             :     0, // PATCHABLE_FUNCTION_EXIT = 29
     661             :     0, // PATCHABLE_TAIL_CALL = 30
     662             :     0, // PATCHABLE_EVENT_CALL = 31
     663             :     0, // PATCHABLE_TYPED_EVENT_CALL = 32
     664             :     0, // ICALL_BRANCH_FUNNEL = 33
     665             :     0, // G_ADD = 34
     666             :     0, // G_SUB = 35
     667             :     0, // G_MUL = 36
     668             :     0, // G_SDIV = 37
     669             :     0, // G_UDIV = 38
     670             :     0, // G_SREM = 39
     671             :     0, // G_UREM = 40
     672             :     0, // G_AND = 41
     673             :     0, // G_OR = 42
     674             :     0, // G_XOR = 43
     675             :     0, // G_IMPLICIT_DEF = 44
     676             :     0, // G_PHI = 45
     677             :     0, // G_FRAME_INDEX = 46
     678             :     0, // G_GLOBAL_VALUE = 47
     679             :     0, // G_EXTRACT = 48
     680             :     0, // G_UNMERGE_VALUES = 49
     681             :     0, // G_INSERT = 50
     682             :     0, // G_MERGE_VALUES = 51
     683             :     0, // G_PTRTOINT = 52
     684             :     0, // G_INTTOPTR = 53
     685             :     0, // G_BITCAST = 54
     686             :     0, // G_INTRINSIC_TRUNC = 55
     687             :     0, // G_INTRINSIC_ROUND = 56
     688             :     0, // G_LOAD = 57
     689             :     0, // G_SEXTLOAD = 58
     690             :     0, // G_ZEXTLOAD = 59
     691             :     0, // G_STORE = 60
     692             :     0, // G_ATOMIC_CMPXCHG_WITH_SUCCESS = 61
     693             :     0, // G_ATOMIC_CMPXCHG = 62
     694             :     0, // G_ATOMICRMW_XCHG = 63
     695             :     0, // G_ATOMICRMW_ADD = 64
     696             :     0, // G_ATOMICRMW_SUB = 65
     697             :     0, // G_ATOMICRMW_AND = 66
     698             :     0, // G_ATOMICRMW_NAND = 67
     699             :     0, // G_ATOMICRMW_OR = 68
     700             :     0, // G_ATOMICRMW_XOR = 69
     701             :     0, // G_ATOMICRMW_MAX = 70
     702             :     0, // G_ATOMICRMW_MIN = 71
     703             :     0, // G_ATOMICRMW_UMAX = 72
     704             :     0, // G_ATOMICRMW_UMIN = 73
     705             :     0, // G_BRCOND = 74
     706             :     0, // G_BRINDIRECT = 75
     707             :     0, // G_INTRINSIC = 76
     708             :     0, // G_INTRINSIC_W_SIDE_EFFECTS = 77
     709             :     0, // G_ANYEXT = 78
     710             :     0, // G_TRUNC = 79
     711             :     0, // G_CONSTANT = 80
     712             :     0, // G_FCONSTANT = 81
     713             :     0, // G_VASTART = 82
     714             :     0, // G_VAARG = 83
     715             :     0, // G_SEXT = 84
     716             :     0, // G_ZEXT = 85
     717             :     0, // G_SHL = 86
     718             :     0, // G_LSHR = 87
     719             :     0, // G_ASHR = 88
     720             :     0, // G_ICMP = 89
     721             :     0, // G_FCMP = 90
     722             :     0, // G_SELECT = 91
     723             :     0, // G_UADDO = 92
     724             :     0, // G_UADDE = 93
     725             :     0, // G_USUBO = 94
     726             :     0, // G_USUBE = 95
     727             :     0, // G_SADDO = 96
     728             :     0, // G_SADDE = 97
     729             :     0, // G_SSUBO = 98
     730             :     0, // G_SSUBE = 99
     731             :     0, // G_UMULO = 100
     732             :     0, // G_SMULO = 101
     733             :     0, // G_UMULH = 102
     734             :     0, // G_SMULH = 103
     735             :     0, // G_FADD = 104
     736             :     0, // G_FSUB = 105
     737             :     0, // G_FMUL = 106
     738             :     0, // G_FMA = 107
     739             :     0, // G_FDIV = 108
     740             :     0, // G_FREM = 109
     741             :     0, // G_FPOW = 110
     742             :     0, // G_FEXP = 111
     743             :     0, // G_FEXP2 = 112
     744             :     0, // G_FLOG = 113
     745             :     0, // G_FLOG2 = 114
     746             :     0, // G_FNEG = 115
     747             :     0, // G_FPEXT = 116
     748             :     0, // G_FPTRUNC = 117
     749             :     0, // G_FPTOSI = 118
     750             :     0, // G_FPTOUI = 119
     751             :     0, // G_SITOFP = 120
     752             :     0, // G_UITOFP = 121
     753             :     0, // G_FABS = 122
     754             :     0, // G_GEP = 123
     755             :     0, // G_PTR_MASK = 124
     756             :     0, // G_BR = 125
     757             :     0, // G_INSERT_VECTOR_ELT = 126
     758             :     0, // G_EXTRACT_VECTOR_ELT = 127
     759             :     0, // G_SHUFFLE_VECTOR = 128
     760             :     0, // G_CTTZ = 129
     761             :     0, // G_CTTZ_ZERO_UNDEF = 130
     762             :     0, // G_CTLZ = 131
     763             :     0, // G_CTLZ_ZERO_UNDEF = 132
     764             :     0, // G_CTPOP = 133
     765             :     0, // G_BSWAP = 134
     766             :     0, // G_ADDRSPACE_CAST = 135
     767             :     0, // G_BLOCK_ADDR = 136
     768             :     0, // ADJCALLSTACKDOWN = 137
     769             :     0, // ADJCALLSTACKUP = 138
     770             :     0, // ADJDYNALLOC = 139
     771             :     0, // CALL = 140
     772             :     0, // CALLR = 141
     773             :     0, // ADDC_F_I_HI = 142
     774             :     0, // ADDC_F_I_LO = 143
     775             :     0, // ADDC_F_R = 144
     776             :     0, // ADDC_I_HI = 145
     777             :     0, // ADDC_I_LO = 146
     778             :     0, // ADDC_R = 147
     779             :     0, // ADD_F_I_HI = 148
     780             :     0, // ADD_F_I_LO = 149
     781             :     0, // ADD_F_R = 150
     782             :     0, // ADD_I_HI = 151
     783             :     0, // ADD_I_LO = 152
     784             :     0, // ADD_R = 153
     785             :     0, // AND_F_I_HI = 154
     786             :     0, // AND_F_I_LO = 155
     787             :     0, // AND_F_R = 156
     788             :     0, // AND_I_HI = 157
     789             :     0, // AND_I_LO = 158
     790             :     0, // AND_R = 159
     791             :     0, // BRCC = 160
     792             :     0, // BRIND_CC = 161
     793             :     0, // BRIND_CCA = 162
     794             :     0, // BRR = 163
     795             :     0, // BT = 164
     796             :     0, // JR = 165
     797             :     0, // LDADDR = 166
     798             :     0, // LDBs_RI = 167
     799             :     0, // LDBs_RR = 168
     800             :     0, // LDBz_RI = 169
     801             :     0, // LDBz_RR = 170
     802             :     0, // LDHs_RI = 171
     803             :     0, // LDHs_RR = 172
     804             :     0, // LDHz_RI = 173
     805             :     0, // LDHz_RR = 174
     806             :     0, // LDW_RI = 175
     807             :     0, // LDW_RR = 176
     808             :     0, // LDWz_RR = 177
     809             :     0, // LEADZ = 178
     810             :     0, // LOG0 = 179
     811             :     0, // LOG1 = 180
     812             :     0, // LOG2 = 181
     813             :     0, // LOG3 = 182
     814             :     0, // LOG4 = 183
     815             :     0, // MOVHI = 184
     816             :     0, // NOP = 185
     817             :     0, // OR_F_I_HI = 186
     818             :     0, // OR_F_I_LO = 187
     819             :     0, // OR_F_R = 188
     820             :     0, // OR_I_HI = 189
     821             :     0, // OR_I_LO = 190
     822             :     0, // OR_R = 191
     823             :     0, // POPC = 192
     824             :     0, // RET = 193
     825             :     0, // SA_F_I = 194
     826             :     0, // SA_I = 195
     827             :     0, // SCC = 196
     828             :     0, // SELECT = 197
     829             :     0, // SFSUB_F_RI_HI = 198
     830             :     0, // SFSUB_F_RI_LO = 199
     831             :     0, // SFSUB_F_RR = 200
     832             :     0, // SHL_F_R = 201
     833             :     0, // SHL_R = 202
     834             :     0, // SLI = 203
     835             :     0, // SL_F_I = 204
     836             :     0, // SL_I = 205
     837             :     0, // SRA_F_R = 206
     838             :     0, // SRA_R = 207
     839             :     0, // SRL_F_R = 208
     840             :     0, // SRL_R = 209
     841             :     0, // STADDR = 210
     842             :     0, // STB_RI = 211
     843             :     0, // STB_RR = 212
     844             :     0, // STH_RI = 213
     845             :     0, // STH_RR = 214
     846             :     0, // SUBB_F_I_HI = 215
     847             :     0, // SUBB_F_I_LO = 216
     848             :     0, // SUBB_F_R = 217
     849             :     0, // SUBB_I_HI = 218
     850             :     0, // SUBB_I_LO = 219
     851             :     0, // SUBB_R = 220
     852             :     0, // SUB_F_I_HI = 221
     853             :     0, // SUB_F_I_LO = 222
     854             :     0, // SUB_F_R = 223
     855             :     0, // SUB_I_HI = 224
     856             :     0, // SUB_I_LO = 225
     857             :     0, // SUB_R = 226
     858             :     0, // SW_RI = 227
     859             :     0, // SW_RR = 228
     860             :     0, // TRAILZ = 229
     861             :     0, // XOR_F_I_HI = 230
     862             :     0, // XOR_F_I_LO = 231
     863             :     0, // XOR_F_R = 232
     864             :     0, // XOR_I_HI = 233
     865             :     0, // XOR_I_LO = 234
     866             :     0, // XOR_R = 235
     867             :   };
     868             : 
     869             :   assert(Inst.getOpcode() < 236);
     870             :   uint64_t MissingFeatures =
     871             :       (AvailableFeatures & RequiredFeatures[Inst.getOpcode()]) ^
     872             :       RequiredFeatures[Inst.getOpcode()];
     873             :   if (MissingFeatures) {
     874             :     std::ostringstream Msg;
     875             :     Msg << "Attempting to emit " << MCII.getName(Inst.getOpcode()).str()
     876             :         << " instruction but the ";
     877             :     for (unsigned i = 0; i < 8 * sizeof(MissingFeatures); ++i)
     878             :       if (MissingFeatures & (1ULL << i))
     879             :         Msg << SubtargetFeatureNames[i] << " ";
     880             :     Msg << "predicate(s) are not met";
     881             :     report_fatal_error(Msg.str());
     882             :   }
     883             : #else
     884             : // Silence unused variable warning on targets that don't use MCII for other purposes (e.g. BPF).
     885             : (void)MCII;
     886             : #endif // NDEBUG
     887             : }
     888             : #endif

Generated by: LCOV version 1.13