LCOV - code coverage report
Current view: top level - build-llvm/lib/Target/AVR - AVRGenMCCodeEmitter.inc (source / functions) Hit Total Coverage
Test: llvm-toolchain.info Lines: 170 172 98.8 %
Date: 2018-10-20 13:21:21 Functions: 1 1 100.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         559 : uint64_t AVRMCCodeEmitter::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(0),
     160             :     UINT64_C(0),
     161             :     UINT64_C(0),
     162             :     UINT64_C(0),
     163             :     UINT64_C(0),
     164             :     UINT64_C(0),
     165             :     UINT64_C(0),
     166             :     UINT64_C(0),
     167             :     UINT64_C(0),
     168             :     UINT64_C(0),
     169             :     UINT64_C(0),
     170             :     UINT64_C(0),
     171             :     UINT64_C(0),
     172             :     UINT64_C(0),
     173             :     UINT64_C(0),
     174             :     UINT64_C(0),
     175             :     UINT64_C(0),
     176             :     UINT64_C(0),
     177             :     UINT64_C(0),
     178             :     UINT64_C(0),
     179             :     UINT64_C(0),
     180             :     UINT64_C(0),
     181             :     UINT64_C(0),
     182             :     UINT64_C(0),
     183             :     UINT64_C(0),
     184             :     UINT64_C(0),
     185             :     UINT64_C(0),
     186             :     UINT64_C(0),
     187             :     UINT64_C(0),
     188             :     UINT64_C(0),
     189             :     UINT64_C(0),
     190             :     UINT64_C(0),
     191             :     UINT64_C(0),
     192             :     UINT64_C(0),
     193             :     UINT64_C(0),
     194             :     UINT64_C(0),
     195             :     UINT64_C(0),
     196             :     UINT64_C(0),
     197             :     UINT64_C(0),
     198             :     UINT64_C(0),
     199             :     UINT64_C(0),
     200             :     UINT64_C(0),
     201             :     UINT64_C(0),
     202             :     UINT64_C(0),
     203             :     UINT64_C(0),
     204             :     UINT64_C(0),
     205             :     UINT64_C(0),
     206             :     UINT64_C(0),
     207             :     UINT64_C(0),
     208             :     UINT64_C(0),
     209             :     UINT64_C(0),
     210             :     UINT64_C(0),
     211             :     UINT64_C(0),
     212             :     UINT64_C(0),
     213             :     UINT64_C(0),
     214             :     UINT64_C(0),
     215             :     UINT64_C(0),
     216             :     UINT64_C(0),
     217             :     UINT64_C(0),
     218             :     UINT64_C(0),
     219             :     UINT64_C(0),
     220             :     UINT64_C(0),
     221             :     UINT64_C(0),
     222             :     UINT64_C(0),
     223             :     UINT64_C(0),
     224             :     UINT64_C(0),
     225             :     UINT64_C(0),
     226             :     UINT64_C(0),
     227             :     UINT64_C(7168),     // ADCRdRr
     228             :     UINT64_C(3072),     // ADDRdRr
     229             :     UINT64_C(38400),    // ADIWRdK
     230             :     UINT64_C(28672),    // ANDIRdK
     231             :     UINT64_C(8192),     // ANDRdRr
     232             :     UINT64_C(37893),    // ASRRd
     233             :     UINT64_C(38024),    // BCLRs
     234             :     UINT64_C(63488),    // BLD
     235             :     UINT64_C(62464),    // BRBCsk
     236             :     UINT64_C(61440),    // BRBSsk
     237             :     UINT64_C(38296),    // BREAK
     238             :     UINT64_C(61441),    // BREQk
     239             :     UINT64_C(62468),    // BRGEk
     240             :     UINT64_C(61440),    // BRLOk
     241             :     UINT64_C(61444),    // BRLTk
     242             :     UINT64_C(61442),    // BRMIk
     243             :     UINT64_C(62465),    // BRNEk
     244             :     UINT64_C(62466),    // BRPLk
     245             :     UINT64_C(62464),    // BRSHk
     246             :     UINT64_C(37896),    // BSETs
     247             :     UINT64_C(64000),    // BST
     248             :     UINT64_C(2483945472),       // CALLk
     249             :     UINT64_C(38912),    // CBIAb
     250             :     UINT64_C(28672),    // CBRRdK
     251             :     UINT64_C(37888),    // COMRd
     252             :     UINT64_C(1024),     // CPCRdRr
     253             :     UINT64_C(12288),    // CPIRdK
     254             :     UINT64_C(5120),     // CPRdRr
     255             :     UINT64_C(4096),     // CPSE
     256             :     UINT64_C(37898),    // DECRd
     257             :     UINT64_C(37899),    // DESK
     258             :     UINT64_C(38169),    // EICALL
     259             :     UINT64_C(37913),    // EIJMP
     260             :     UINT64_C(38360),    // ELPM
     261             :     UINT64_C(36870),    // ELPMRdZ
     262             :     UINT64_C(36871),    // ELPMRdZPi
     263             :     UINT64_C(9216),     // EORRdRr
     264             :     UINT64_C(776),      // FMUL
     265             :     UINT64_C(896),      // FMULS
     266             :     UINT64_C(904),      // FMULSU
     267             :     UINT64_C(38153),    // ICALL
     268             :     UINT64_C(37897),    // IJMP
     269             :     UINT64_C(37891),    // INCRd
     270             :     UINT64_C(45056),    // INRdA
     271             :     UINT64_C(2483814400),       // JMPk
     272             :     UINT64_C(37382),    // LACZRd
     273             :     UINT64_C(37381),    // LASZRd
     274             :     UINT64_C(37383),    // LATZRd
     275             :     UINT64_C(32768),    // LDDRdPtrQ
     276             :     UINT64_C(57344),    // LDIRdK
     277             :     UINT64_C(32768),    // LDRdPtr
     278             :     UINT64_C(32770),    // LDRdPtrPd
     279             :     UINT64_C(32769),    // LDRdPtrPi
     280             :     UINT64_C(2415919104),       // LDSRdK
     281             :     UINT64_C(38344),    // LPM
     282             :     UINT64_C(36868),    // LPMRdZ
     283             :     UINT64_C(36869),    // LPMRdZPi
     284             :     UINT64_C(37894),    // LSRRd
     285             :     UINT64_C(11264),    // MOVRdRr
     286             :     UINT64_C(256),      // MOVWRdRr
     287             :     UINT64_C(39936),    // MULRdRr
     288             :     UINT64_C(512),      // MULSRdRr
     289             :     UINT64_C(768),      // MULSURdRr
     290             :     UINT64_C(37889),    // NEGRd
     291             :     UINT64_C(0),        // NOP
     292             :     UINT64_C(24576),    // ORIRdK
     293             :     UINT64_C(10240),    // ORRdRr
     294             :     UINT64_C(47104),    // OUTARr
     295             :     UINT64_C(36879),    // POPRd
     296             :     UINT64_C(37391),    // PUSHRr
     297             :     UINT64_C(53248),    // RCALLk
     298             :     UINT64_C(38152),    // RET
     299             :     UINT64_C(38168),    // RETI
     300             :     UINT64_C(49152),    // RJMPk
     301             :     UINT64_C(37895),    // RORRd
     302             :     UINT64_C(16384),    // SBCIRdK
     303             :     UINT64_C(2048),     // SBCRdRr
     304             :     UINT64_C(39424),    // SBIAb
     305             :     UINT64_C(39168),    // SBICAb
     306             :     UINT64_C(39680),    // SBISAb
     307             :     UINT64_C(38656),    // SBIWRdK
     308             :     UINT64_C(64512),    // SBRCRrB
     309             :     UINT64_C(65024),    // SBRSRrB
     310             :     UINT64_C(38280),    // SLEEP
     311             :     UINT64_C(38376),    // SPM
     312             :     UINT64_C(38392),    // SPMZPi
     313             :     UINT64_C(33280),    // STDPtrQRr
     314             :     UINT64_C(33282),    // STPtrPdRr
     315             :     UINT64_C(33281),    // STPtrPiRr
     316             :     UINT64_C(33280),    // STPtrRr
     317             :     UINT64_C(2449473536),       // STSKRr
     318             :     UINT64_C(20480),    // SUBIRdK
     319             :     UINT64_C(6144),     // SUBRdRr
     320             :     UINT64_C(37890),    // SWAPRd
     321             :     UINT64_C(38312),    // WDR
     322             :     UINT64_C(37380),    // XCHZRd
     323             :     UINT64_C(0)
     324             :   };
     325         559 :   const unsigned opcode = MI.getOpcode();
     326         559 :   uint64_t Value = InstBits[opcode];
     327             :   uint64_t op = 0;
     328             :   (void)op;  // suppress warning
     329         559 :   switch (opcode) {
     330             :     case AVR::BREAK:
     331             :     case AVR::EICALL:
     332             :     case AVR::EIJMP:
     333             :     case AVR::ELPM:
     334             :     case AVR::ICALL:
     335             :     case AVR::IJMP:
     336             :     case AVR::LPM:
     337             :     case AVR::NOP:
     338             :     case AVR::RET:
     339             :     case AVR::RETI:
     340             :     case AVR::SLEEP:
     341             :     case AVR::SPM:
     342             :     case AVR::SPMZPi:
     343             :     case AVR::WDR: {
     344             :       break;
     345             :     }
     346          22 :     case AVR::CBIAb:
     347             :     case AVR::SBIAb:
     348             :     case AVR::SBICAb:
     349             :     case AVR::SBISAb: {
     350             :       // op: A
     351          22 :       op = encodeImm<AVR::fixup_port5, 0>(MI, 0, Fixups, STI);
     352          22 :       Value |= (op & UINT64_C(31)) << 3;
     353             :       // op: b
     354          22 :       op = getMachineOpValue(MI, MI.getOperand(1), Fixups, STI);
     355          22 :       Value |= op & UINT64_C(7);
     356          22 :       break;
     357             :     }
     358           5 :     case AVR::OUTARr: {
     359             :       // op: A
     360           5 :       op = encodeImm<AVR::fixup_port6, 0>(MI, 0, Fixups, STI);
     361           5 :       Value |= (op & UINT64_C(48)) << 5;
     362           5 :       Value |= op & UINT64_C(15);
     363             :       // op: r
     364           5 :       op = getMachineOpValue(MI, MI.getOperand(1), Fixups, STI);
     365           5 :       Value |= (op & UINT64_C(31)) << 4;
     366           5 :       break;
     367             :     }
     368             :     case AVR::MOVWRdRr: {
     369             :       // op: d
     370           4 :       op = getMachineOpValue(MI, MI.getOperand(0), Fixups, STI);
     371           4 :       Value |= (op & UINT64_C(30)) << 3;
     372             :       // op: r
     373           4 :       op = getMachineOpValue(MI, MI.getOperand(1), Fixups, STI);
     374           4 :       Value |= (op & UINT64_C(30)) >> 1;
     375           4 :       break;
     376             :     }
     377             :     case AVR::ASRRd:
     378             :     case AVR::COMRd:
     379             :     case AVR::DECRd:
     380             :     case AVR::INCRd:
     381             :     case AVR::LSRRd:
     382             :     case AVR::NEGRd:
     383             :     case AVR::POPRd:
     384             :     case AVR::PUSHRr:
     385             :     case AVR::RORRd:
     386             :     case AVR::SWAPRd: {
     387             :       // op: d
     388          40 :       op = getMachineOpValue(MI, MI.getOperand(0), Fixups, STI);
     389          40 :       Value |= (op & UINT64_C(31)) << 4;
     390          40 :       break;
     391             :     }
     392             :     case AVR::INRdA: {
     393             :       // op: d
     394           7 :       op = getMachineOpValue(MI, MI.getOperand(0), Fixups, STI);
     395           7 :       Value |= (op & UINT64_C(31)) << 4;
     396             :       // op: A
     397           7 :       op = encodeImm<AVR::fixup_port6, 0>(MI, 1, Fixups, STI);
     398           7 :       Value |= (op & UINT64_C(48)) << 5;
     399           7 :       Value |= op & UINT64_C(15);
     400           7 :       break;
     401             :     }
     402             :     case AVR::ADIWRdK:
     403             :     case AVR::SBIWRdK: {
     404             :       // op: dst
     405          22 :       op = getMachineOpValue(MI, MI.getOperand(0), Fixups, STI);
     406          22 :       Value |= (op & UINT64_C(6)) << 3;
     407             :       // op: k
     408          22 :       op = encodeImm<AVR::fixup_6_adiw, 0>(MI, 2, Fixups, STI);
     409          22 :       Value |= (op & UINT64_C(48)) << 2;
     410          22 :       Value |= op & UINT64_C(15);
     411          22 :       break;
     412             :     }
     413          14 :     case AVR::CALLk:
     414             :     case AVR::JMPk: {
     415             :       // op: k
     416          14 :       op = encodeCallTarget(MI, 0, Fixups, STI);
     417          14 :       Value |= (op & UINT64_C(4063232)) << 3;
     418          14 :       Value |= op & UINT64_C(131071);
     419          14 :       break;
     420             :     }
     421          14 :     case AVR::RCALLk:
     422             :     case AVR::RJMPk: {
     423             :       // op: k
     424          14 :       op = encodeRelCondBrTarget<AVR::fixup_13_pcrel>(MI, 0, Fixups, STI);
     425          14 :       Value |= op & UINT64_C(4095);
     426          14 :       break;
     427             :     }
     428          22 :     case AVR::BREQk:
     429             :     case AVR::BRGEk:
     430             :     case AVR::BRLOk:
     431             :     case AVR::BRLTk:
     432             :     case AVR::BRMIk:
     433             :     case AVR::BRNEk:
     434             :     case AVR::BRPLk:
     435             :     case AVR::BRSHk: {
     436             :       // op: k
     437          22 :       op = encodeRelCondBrTarget<AVR::fixup_7_pcrel>(MI, 0, Fixups, STI);
     438          22 :       Value |= (op & UINT64_C(127)) << 3;
     439          22 :       break;
     440             :     }
     441          42 :     case AVR::BRBCsk:
     442             :     case AVR::BRBSsk: {
     443             :       // op: k
     444          42 :       op = encodeRelCondBrTarget<AVR::fixup_7_pcrel>(MI, 1, Fixups, STI);
     445          42 :       Value |= (op & UINT64_C(127)) << 3;
     446             :       // op: s
     447          42 :       op = getMachineOpValue(MI, MI.getOperand(0), Fixups, STI);
     448          42 :       Value |= op & UINT64_C(7);
     449          42 :       break;
     450             :     }
     451             :     case AVR::DESK: {
     452             :       // op: k
     453           4 :       op = getMachineOpValue(MI, MI.getOperand(0), Fixups, STI);
     454           4 :       Value |= (op & UINT64_C(15)) << 4;
     455           4 :       break;
     456             :     }
     457           5 :     case AVR::STDPtrQRr: {
     458             :       // op: memri
     459           5 :       op = encodeMemri(MI, 0, Fixups, STI);
     460           5 :       Value |= (op & UINT64_C(32)) << 8;
     461           5 :       Value |= (op & UINT64_C(24)) << 7;
     462           5 :       Value |= (op & UINT64_C(64)) >> 3;
     463           5 :       Value |= op & UINT64_C(7);
     464             :       // op: reg
     465           5 :       op = getMachineOpValue(MI, MI.getOperand(2), Fixups, STI);
     466           5 :       Value |= (op & UINT64_C(31)) << 4;
     467           5 :       break;
     468             :     }
     469           5 :     case AVR::LDDRdPtrQ: {
     470             :       // op: memri
     471           5 :       op = encodeMemri(MI, 1, Fixups, STI);
     472           5 :       Value |= (op & UINT64_C(32)) << 8;
     473           5 :       Value |= (op & UINT64_C(24)) << 7;
     474           5 :       Value |= (op & UINT64_C(64)) >> 3;
     475           5 :       Value |= op & UINT64_C(7);
     476             :       // op: reg
     477           5 :       op = getMachineOpValue(MI, MI.getOperand(0), Fixups, STI);
     478           5 :       Value |= (op & UINT64_C(31)) << 4;
     479           5 :       break;
     480             :     }
     481           6 :     case AVR::STPtrRr: {
     482             :       // op: ptrreg
     483           6 :       op = encodeLDSTPtrReg(MI, 0, Fixups, STI);
     484           6 :       Value |= (op & UINT64_C(3)) << 2;
     485             :       // op: reg
     486           6 :       op = getMachineOpValue(MI, MI.getOperand(1), Fixups, STI);
     487           6 :       Value |= (op & UINT64_C(31)) << 4;
     488           6 :       Value = loadStorePostEncoder(MI, Value, STI);
     489           6 :       break;
     490             :     }
     491           6 :     case AVR::LDRdPtr: {
     492             :       // op: ptrreg
     493           6 :       op = encodeLDSTPtrReg(MI, 1, Fixups, STI);
     494           6 :       Value |= (op & UINT64_C(3)) << 2;
     495             :       // op: reg
     496           6 :       op = getMachineOpValue(MI, MI.getOperand(0), Fixups, STI);
     497           6 :       Value |= (op & UINT64_C(31)) << 4;
     498           6 :       Value = loadStorePostEncoder(MI, Value, STI);
     499           6 :       break;
     500             :     }
     501          12 :     case AVR::STPtrPdRr:
     502             :     case AVR::STPtrPiRr: {
     503             :       // op: ptrreg
     504          12 :       op = encodeLDSTPtrReg(MI, 1, Fixups, STI);
     505          12 :       Value |= (op & UINT64_C(3)) << 2;
     506             :       // op: reg
     507          12 :       op = getMachineOpValue(MI, MI.getOperand(2), Fixups, STI);
     508          12 :       Value |= (op & UINT64_C(31)) << 4;
     509          12 :       Value = loadStorePostEncoder(MI, Value, STI);
     510          12 :       break;
     511             :     }
     512          12 :     case AVR::LDRdPtrPd:
     513             :     case AVR::LDRdPtrPi: {
     514             :       // op: ptrreg
     515          12 :       op = encodeLDSTPtrReg(MI, 2, Fixups, STI);
     516          12 :       Value |= (op & UINT64_C(3)) << 2;
     517             :       // op: reg
     518          12 :       op = getMachineOpValue(MI, MI.getOperand(0), Fixups, STI);
     519          12 :       Value |= (op & UINT64_C(31)) << 4;
     520          12 :       Value = loadStorePostEncoder(MI, Value, STI);
     521          12 :       break;
     522             :     }
     523             :     case AVR::CBRRdK: {
     524             :       // op: rd
     525           4 :       op = getMachineOpValue(MI, MI.getOperand(0), Fixups, STI);
     526           4 :       Value |= (op & UINT64_C(15)) << 4;
     527             :       // op: k
     528           4 :       op = encodeComplement(MI, 2, Fixups, STI);
     529           4 :       Value |= (op & UINT64_C(240)) << 4;
     530           4 :       Value |= op & UINT64_C(15);
     531           4 :       break;
     532             :     }
     533             :     case AVR::CPIRdK:
     534             :     case AVR::LDIRdK: {
     535             :       // op: rd
     536         106 :       op = getMachineOpValue(MI, MI.getOperand(0), Fixups, STI);
     537         106 :       Value |= (op & UINT64_C(15)) << 4;
     538             :       // op: k
     539         106 :       op = encodeImm<AVR::fixup_ldi, 0>(MI, 1, Fixups, STI);
     540         106 :       Value |= (op & UINT64_C(240)) << 4;
     541         106 :       Value |= op & UINT64_C(15);
     542         106 :       break;
     543             :     }
     544             :     case AVR::ANDIRdK:
     545             :     case AVR::ORIRdK:
     546             :     case AVR::SBCIRdK:
     547             :     case AVR::SUBIRdK: {
     548             :       // op: rd
     549          25 :       op = getMachineOpValue(MI, MI.getOperand(0), Fixups, STI);
     550          25 :       Value |= (op & UINT64_C(15)) << 4;
     551             :       // op: k
     552          25 :       op = encodeImm<AVR::fixup_ldi, 0>(MI, 2, Fixups, STI);
     553          25 :       Value |= (op & UINT64_C(240)) << 4;
     554          25 :       Value |= op & UINT64_C(15);
     555          25 :       break;
     556             :     }
     557             :     case AVR::MULSRdRr:
     558             :     case AVR::MULSURdRr: {
     559             :       // op: rd
     560           8 :       op = getMachineOpValue(MI, MI.getOperand(0), Fixups, STI);
     561           8 :       Value |= (op & UINT64_C(15)) << 4;
     562             :       // op: rr
     563           8 :       op = getMachineOpValue(MI, MI.getOperand(1), Fixups, STI);
     564           8 :       Value |= op & UINT64_C(15);
     565           8 :       break;
     566             :     }
     567             :     case AVR::LDSRdK: {
     568             :       // op: rd
     569           7 :       op = getMachineOpValue(MI, MI.getOperand(0), Fixups, STI);
     570           7 :       Value |= (op & UINT64_C(31)) << 20;
     571             :       // op: k
     572           7 :       op = encodeImm<AVR::fixup_16, 2>(MI, 1, Fixups, STI);
     573           7 :       Value |= op & UINT64_C(65535);
     574           7 :       break;
     575             :     }
     576             :     case AVR::LACZRd:
     577             :     case AVR::LASZRd:
     578             :     case AVR::LATZRd:
     579             :     case AVR::XCHZRd: {
     580             :       // op: rd
     581          16 :       op = getMachineOpValue(MI, MI.getOperand(0), Fixups, STI);
     582          16 :       Value |= (op & UINT64_C(31)) << 4;
     583          16 :       break;
     584             :     }
     585             :     case AVR::BLD:
     586             :     case AVR::BST:
     587             :     case AVR::SBRCRrB:
     588             :     case AVR::SBRSRrB: {
     589             :       // op: rd
     590          12 :       op = getMachineOpValue(MI, MI.getOperand(0), Fixups, STI);
     591          12 :       Value |= (op & UINT64_C(31)) << 4;
     592             :       // op: b
     593          12 :       op = getMachineOpValue(MI, MI.getOperand(1), Fixups, STI);
     594          12 :       Value |= op & UINT64_C(7);
     595          12 :       break;
     596             :     }
     597             :     case AVR::CPCRdRr:
     598             :     case AVR::CPRdRr:
     599             :     case AVR::CPSE:
     600             :     case AVR::MOVRdRr:
     601             :     case AVR::MULRdRr: {
     602             :       // op: rd
     603          20 :       op = getMachineOpValue(MI, MI.getOperand(0), Fixups, STI);
     604          20 :       Value |= (op & UINT64_C(31)) << 4;
     605             :       // op: rr
     606          20 :       op = getMachineOpValue(MI, MI.getOperand(1), Fixups, STI);
     607          20 :       Value |= (op & UINT64_C(16)) << 5;
     608          20 :       Value |= op & UINT64_C(15);
     609          20 :       break;
     610             :     }
     611             :     case AVR::ADCRdRr:
     612             :     case AVR::ADDRdRr:
     613             :     case AVR::ANDRdRr:
     614             :     case AVR::EORRdRr:
     615             :     case AVR::ORRdRr:
     616             :     case AVR::SBCRdRr:
     617             :     case AVR::SUBRdRr: {
     618             :       // op: rd
     619          49 :       op = getMachineOpValue(MI, MI.getOperand(0), Fixups, STI);
     620          49 :       Value |= (op & UINT64_C(31)) << 4;
     621             :       // op: rr
     622          49 :       op = getMachineOpValue(MI, MI.getOperand(2), Fixups, STI);
     623          49 :       Value |= (op & UINT64_C(16)) << 5;
     624          49 :       Value |= op & UINT64_C(15);
     625          49 :       break;
     626             :     }
     627             :     case AVR::FMUL:
     628             :     case AVR::FMULS:
     629             :     case AVR::FMULSU: {
     630             :       // op: rd
     631          12 :       op = getMachineOpValue(MI, MI.getOperand(0), Fixups, STI);
     632          12 :       Value |= (op & UINT64_C(7)) << 4;
     633             :       // op: rr
     634          12 :       op = getMachineOpValue(MI, MI.getOperand(1), Fixups, STI);
     635          12 :       Value |= op & UINT64_C(7);
     636          12 :       break;
     637             :     }
     638             :     case AVR::STSKRr: {
     639             :       // op: rd
     640           3 :       op = getMachineOpValue(MI, MI.getOperand(1), Fixups, STI);
     641           3 :       Value |= (op & UINT64_C(31)) << 20;
     642             :       // op: k
     643           3 :       op = encodeImm<AVR::fixup_16, 2>(MI, 0, Fixups, STI);
     644           3 :       Value |= op & UINT64_C(65535);
     645           3 :       break;
     646             :     }
     647             :     case AVR::ELPMRdZ:
     648             :     case AVR::ELPMRdZPi:
     649             :     case AVR::LPMRdZ:
     650             :     case AVR::LPMRdZPi: {
     651             :       // op: reg
     652           8 :       op = getMachineOpValue(MI, MI.getOperand(0), Fixups, STI);
     653           8 :       Value |= (op & UINT64_C(31)) << 4;
     654           8 :       break;
     655             :     }
     656             :     case AVR::BCLRs:
     657             :     case AVR::BSETs: {
     658             :       // op: s
     659          32 :       op = getMachineOpValue(MI, MI.getOperand(0), Fixups, STI);
     660          32 :       Value |= (op & UINT64_C(7)) << 4;
     661          32 :       break;
     662             :     }
     663             :   default:
     664             :     std::string msg;
     665             :     raw_string_ostream Msg(msg);
     666           0 :     Msg << "Not supported instr: " << MI;
     667           0 :     report_fatal_error(Msg.str());
     668             :   }
     669         559 :   return Value;
     670             : }
     671             : 
     672             : #ifdef ENABLE_INSTR_PREDICATE_VERIFIER
     673             : #undef ENABLE_INSTR_PREDICATE_VERIFIER
     674             : #include <sstream>
     675             : 
     676             : // Flags for subtarget features that participate in instruction matching.
     677             : enum SubtargetFeatureFlag : uint32_t {
     678             :   Feature_HasSRAM = (1ULL << 13),
     679             :   Feature_HasJMPCALL = (1ULL << 7),
     680             :   Feature_HasIJMPCALL = (1ULL << 6),
     681             :   Feature_HasEIJMPCALL = (1ULL << 3),
     682             :   Feature_HasADDSUBIW = (1ULL << 0),
     683             :   Feature_HasSmallStack = (1ULL << 14),
     684             :   Feature_HasMOVW = (1ULL << 10),
     685             :   Feature_HasLPM = (1ULL << 8),
     686             :   Feature_HasLPMX = (1ULL << 9),
     687             :   Feature_HasELPM = (1ULL << 4),
     688             :   Feature_HasELPMX = (1ULL << 5),
     689             :   Feature_HasSPM = (1ULL << 11),
     690             :   Feature_HasSPMX = (1ULL << 12),
     691             :   Feature_HasDES = (1ULL << 2),
     692             :   Feature_SupportsRMW = (1ULL << 17),
     693             :   Feature_SupportsMultiplication = (1ULL << 16),
     694             :   Feature_HasBREAK = (1ULL << 1),
     695             :   Feature_HasTinyEncoding = (1ULL << 15),
     696             :   Feature_None = 0
     697             : };
     698             : 
     699             : #ifndef NDEBUG
     700             : static const char *SubtargetFeatureNames[] = {
     701             :   "Feature_HasADDSUBIW",
     702             :   "Feature_HasBREAK",
     703             :   "Feature_HasDES",
     704             :   "Feature_HasEIJMPCALL",
     705             :   "Feature_HasELPM",
     706             :   "Feature_HasELPMX",
     707             :   "Feature_HasIJMPCALL",
     708             :   "Feature_HasJMPCALL",
     709             :   "Feature_HasLPM",
     710             :   "Feature_HasLPMX",
     711             :   "Feature_HasMOVW",
     712             :   "Feature_HasSPM",
     713             :   "Feature_HasSPMX",
     714             :   "Feature_HasSRAM",
     715             :   "Feature_HasSmallStack",
     716             :   "Feature_HasTinyEncoding",
     717             :   "Feature_SupportsMultiplication",
     718             :   "Feature_SupportsRMW",
     719             :   nullptr
     720             : };
     721             : 
     722             : #endif // NDEBUG
     723             : uint64_t AVRMCCodeEmitter::
     724             : computeAvailableFeatures(const FeatureBitset& FB) const {
     725             :   uint64_t Features = 0;
     726             :   if ((FB[AVR::FeatureSRAM]))
     727             :     Features |= Feature_HasSRAM;
     728             :   if ((FB[AVR::FeatureJMPCALL]))
     729             :     Features |= Feature_HasJMPCALL;
     730             :   if ((FB[AVR::FeatureIJMPCALL]))
     731             :     Features |= Feature_HasIJMPCALL;
     732             :   if ((FB[AVR::FeatureEIJMPCALL]))
     733             :     Features |= Feature_HasEIJMPCALL;
     734             :   if ((FB[AVR::FeatureADDSUBIW]))
     735             :     Features |= Feature_HasADDSUBIW;
     736             :   if ((FB[AVR::FeatureSmallStack]))
     737             :     Features |= Feature_HasSmallStack;
     738             :   if ((FB[AVR::FeatureMOVW]))
     739             :     Features |= Feature_HasMOVW;
     740             :   if ((FB[AVR::FeatureLPM]))
     741             :     Features |= Feature_HasLPM;
     742             :   if ((FB[AVR::FeatureLPMX]))
     743             :     Features |= Feature_HasLPMX;
     744             :   if ((FB[AVR::FeatureELPM]))
     745             :     Features |= Feature_HasELPM;
     746             :   if ((FB[AVR::FeatureELPMX]))
     747             :     Features |= Feature_HasELPMX;
     748             :   if ((FB[AVR::FeatureSPM]))
     749             :     Features |= Feature_HasSPM;
     750             :   if ((FB[AVR::FeatureSPMX]))
     751             :     Features |= Feature_HasSPMX;
     752             :   if ((FB[AVR::FeatureDES]))
     753             :     Features |= Feature_HasDES;
     754             :   if ((FB[AVR::FeatureRMW]))
     755             :     Features |= Feature_SupportsRMW;
     756             :   if ((FB[AVR::FeatureMultiplication]))
     757             :     Features |= Feature_SupportsMultiplication;
     758             :   if ((FB[AVR::FeatureBREAK]))
     759             :     Features |= Feature_HasBREAK;
     760             :   if ((FB[AVR::FeatureTinyEncoding]))
     761             :     Features |= Feature_HasTinyEncoding;
     762             :   return Features;
     763             : }
     764             : 
     765             : void AVRMCCodeEmitter::verifyInstructionPredicates(
     766             :     const MCInst &Inst, uint64_t AvailableFeatures) const {
     767             : #ifndef NDEBUG
     768             :   static uint64_t RequiredFeatures[] = {
     769             :     0, // PHI = 0
     770             :     0, // INLINEASM = 1
     771             :     0, // CFI_INSTRUCTION = 2
     772             :     0, // EH_LABEL = 3
     773             :     0, // GC_LABEL = 4
     774             :     0, // ANNOTATION_LABEL = 5
     775             :     0, // KILL = 6
     776             :     0, // EXTRACT_SUBREG = 7
     777             :     0, // INSERT_SUBREG = 8
     778             :     0, // IMPLICIT_DEF = 9
     779             :     0, // SUBREG_TO_REG = 10
     780             :     0, // COPY_TO_REGCLASS = 11
     781             :     0, // DBG_VALUE = 12
     782             :     0, // DBG_LABEL = 13
     783             :     0, // REG_SEQUENCE = 14
     784             :     0, // COPY = 15
     785             :     0, // BUNDLE = 16
     786             :     0, // LIFETIME_START = 17
     787             :     0, // LIFETIME_END = 18
     788             :     0, // STACKMAP = 19
     789             :     0, // FENTRY_CALL = 20
     790             :     0, // PATCHPOINT = 21
     791             :     0, // LOAD_STACK_GUARD = 22
     792             :     0, // STATEPOINT = 23
     793             :     0, // LOCAL_ESCAPE = 24
     794             :     0, // FAULTING_OP = 25
     795             :     0, // PATCHABLE_OP = 26
     796             :     0, // PATCHABLE_FUNCTION_ENTER = 27
     797             :     0, // PATCHABLE_RET = 28
     798             :     0, // PATCHABLE_FUNCTION_EXIT = 29
     799             :     0, // PATCHABLE_TAIL_CALL = 30
     800             :     0, // PATCHABLE_EVENT_CALL = 31
     801             :     0, // PATCHABLE_TYPED_EVENT_CALL = 32
     802             :     0, // ICALL_BRANCH_FUNNEL = 33
     803             :     0, // G_ADD = 34
     804             :     0, // G_SUB = 35
     805             :     0, // G_MUL = 36
     806             :     0, // G_SDIV = 37
     807             :     0, // G_UDIV = 38
     808             :     0, // G_SREM = 39
     809             :     0, // G_UREM = 40
     810             :     0, // G_AND = 41
     811             :     0, // G_OR = 42
     812             :     0, // G_XOR = 43
     813             :     0, // G_IMPLICIT_DEF = 44
     814             :     0, // G_PHI = 45
     815             :     0, // G_FRAME_INDEX = 46
     816             :     0, // G_GLOBAL_VALUE = 47
     817             :     0, // G_EXTRACT = 48
     818             :     0, // G_UNMERGE_VALUES = 49
     819             :     0, // G_INSERT = 50
     820             :     0, // G_MERGE_VALUES = 51
     821             :     0, // G_PTRTOINT = 52
     822             :     0, // G_INTTOPTR = 53
     823             :     0, // G_BITCAST = 54
     824             :     0, // G_INTRINSIC_TRUNC = 55
     825             :     0, // G_INTRINSIC_ROUND = 56
     826             :     0, // G_LOAD = 57
     827             :     0, // G_SEXTLOAD = 58
     828             :     0, // G_ZEXTLOAD = 59
     829             :     0, // G_STORE = 60
     830             :     0, // G_ATOMIC_CMPXCHG_WITH_SUCCESS = 61
     831             :     0, // G_ATOMIC_CMPXCHG = 62
     832             :     0, // G_ATOMICRMW_XCHG = 63
     833             :     0, // G_ATOMICRMW_ADD = 64
     834             :     0, // G_ATOMICRMW_SUB = 65
     835             :     0, // G_ATOMICRMW_AND = 66
     836             :     0, // G_ATOMICRMW_NAND = 67
     837             :     0, // G_ATOMICRMW_OR = 68
     838             :     0, // G_ATOMICRMW_XOR = 69
     839             :     0, // G_ATOMICRMW_MAX = 70
     840             :     0, // G_ATOMICRMW_MIN = 71
     841             :     0, // G_ATOMICRMW_UMAX = 72
     842             :     0, // G_ATOMICRMW_UMIN = 73
     843             :     0, // G_BRCOND = 74
     844             :     0, // G_BRINDIRECT = 75
     845             :     0, // G_INTRINSIC = 76
     846             :     0, // G_INTRINSIC_W_SIDE_EFFECTS = 77
     847             :     0, // G_ANYEXT = 78
     848             :     0, // G_TRUNC = 79
     849             :     0, // G_CONSTANT = 80
     850             :     0, // G_FCONSTANT = 81
     851             :     0, // G_VASTART = 82
     852             :     0, // G_VAARG = 83
     853             :     0, // G_SEXT = 84
     854             :     0, // G_ZEXT = 85
     855             :     0, // G_SHL = 86
     856             :     0, // G_LSHR = 87
     857             :     0, // G_ASHR = 88
     858             :     0, // G_ICMP = 89
     859             :     0, // G_FCMP = 90
     860             :     0, // G_SELECT = 91
     861             :     0, // G_UADDO = 92
     862             :     0, // G_UADDE = 93
     863             :     0, // G_USUBO = 94
     864             :     0, // G_USUBE = 95
     865             :     0, // G_SADDO = 96
     866             :     0, // G_SADDE = 97
     867             :     0, // G_SSUBO = 98
     868             :     0, // G_SSUBE = 99
     869             :     0, // G_UMULO = 100
     870             :     0, // G_SMULO = 101
     871             :     0, // G_UMULH = 102
     872             :     0, // G_SMULH = 103
     873             :     0, // G_FADD = 104
     874             :     0, // G_FSUB = 105
     875             :     0, // G_FMUL = 106
     876             :     0, // G_FMA = 107
     877             :     0, // G_FDIV = 108
     878             :     0, // G_FREM = 109
     879             :     0, // G_FPOW = 110
     880             :     0, // G_FEXP = 111
     881             :     0, // G_FEXP2 = 112
     882             :     0, // G_FLOG = 113
     883             :     0, // G_FLOG2 = 114
     884             :     0, // G_FNEG = 115
     885             :     0, // G_FPEXT = 116
     886             :     0, // G_FPTRUNC = 117
     887             :     0, // G_FPTOSI = 118
     888             :     0, // G_FPTOUI = 119
     889             :     0, // G_SITOFP = 120
     890             :     0, // G_UITOFP = 121
     891             :     0, // G_FABS = 122
     892             :     0, // G_GEP = 123
     893             :     0, // G_PTR_MASK = 124
     894             :     0, // G_BR = 125
     895             :     0, // G_INSERT_VECTOR_ELT = 126
     896             :     0, // G_EXTRACT_VECTOR_ELT = 127
     897             :     0, // G_SHUFFLE_VECTOR = 128
     898             :     0, // G_CTTZ = 129
     899             :     0, // G_CTTZ_ZERO_UNDEF = 130
     900             :     0, // G_CTLZ = 131
     901             :     0, // G_CTLZ_ZERO_UNDEF = 132
     902             :     0, // G_CTPOP = 133
     903             :     0, // G_BSWAP = 134
     904             :     0, // G_ADDRSPACE_CAST = 135
     905             :     0, // G_BLOCK_ADDR = 136
     906             :     0, // ADCWRdRr = 137
     907             :     0, // ADDWRdRr = 138
     908             :     0, // ADJCALLSTACKDOWN = 139
     909             :     0, // ADJCALLSTACKUP = 140
     910             :     0, // ANDIWRdK = 141
     911             :     0, // ANDWRdRr = 142
     912             :     0, // ASRWRd = 143
     913             :     0, // Asr16 = 144
     914             :     0, // Asr8 = 145
     915             :     0, // AtomicFence = 146
     916             :     0, // AtomicLoad16 = 147
     917             :     0, // AtomicLoad8 = 148
     918             :     0, // AtomicLoadAdd16 = 149
     919             :     0, // AtomicLoadAdd8 = 150
     920             :     0, // AtomicLoadAnd16 = 151
     921             :     0, // AtomicLoadAnd8 = 152
     922             :     0, // AtomicLoadOr16 = 153
     923             :     0, // AtomicLoadOr8 = 154
     924             :     0, // AtomicLoadSub16 = 155
     925             :     0, // AtomicLoadSub8 = 156
     926             :     0, // AtomicLoadXor16 = 157
     927             :     0, // AtomicLoadXor8 = 158
     928             :     0, // AtomicStore16 = 159
     929             :     0, // AtomicStore8 = 160
     930             :     0, // COMWRd = 161
     931             :     0, // CPCWRdRr = 162
     932             :     0, // CPWRdRr = 163
     933             :     0, // EORWRdRr = 164
     934             :     0, // FRMIDX = 165
     935             :     0, // INWRdA = 166
     936             :     Feature_HasSRAM | 0, // LDDWRdPtrQ = 167
     937             :     Feature_HasSRAM | 0, // LDDWRdYQ = 168
     938             :     0, // LDIWRdK = 169
     939             :     Feature_HasSRAM | 0, // LDSWRdK = 170
     940             :     Feature_HasSRAM | 0, // LDWRdPtr = 171
     941             :     Feature_HasSRAM | 0, // LDWRdPtrPd = 172
     942             :     Feature_HasSRAM | 0, // LDWRdPtrPi = 173
     943             :     Feature_HasLPMX | 0, // LPMWRdZ = 174
     944             :     Feature_HasLPMX | 0, // LPMWRdZPi = 175
     945             :     0, // LSLWRd = 176
     946             :     0, // LSRWRd = 177
     947             :     0, // Lsl16 = 178
     948             :     0, // Lsl8 = 179
     949             :     0, // Lsr16 = 180
     950             :     0, // Lsr8 = 181
     951             :     0, // ORIWRdK = 182
     952             :     0, // ORWRdRr = 183
     953             :     0, // OUTWARr = 184
     954             :     Feature_HasSRAM | 0, // POPWRd = 185
     955             :     Feature_HasSRAM | 0, // PUSHWRr = 186
     956             :     0, // ROLWRd = 187
     957             :     0, // RORWRd = 188
     958             :     0, // Rol16 = 189
     959             :     0, // Rol8 = 190
     960             :     0, // Ror16 = 191
     961             :     0, // Ror8 = 192
     962             :     0, // SBCIWRdK = 193
     963             :     0, // SBCWRdRr = 194
     964             :     0, // SEXT = 195
     965             :     0, // SPREAD = 196
     966             :     0, // SPWRITE = 197
     967             :     0, // STDSPQRr = 198
     968             :     Feature_HasSRAM | 0, // STDWPtrQRr = 199
     969             :     0, // STDWSPQRr = 200
     970             :     Feature_HasSRAM | 0, // STSWKRr = 201
     971             :     Feature_HasSRAM | 0, // STWPtrPdRr = 202
     972             :     Feature_HasSRAM | 0, // STWPtrPiRr = 203
     973             :     Feature_HasSRAM | 0, // STWPtrRr = 204
     974             :     0, // SUBIWRdK = 205
     975             :     0, // SUBWRdRr = 206
     976             :     0, // Select16 = 207
     977             :     0, // Select8 = 208
     978             :     0, // ZEXT = 209
     979             :     0, // ADCRdRr = 210
     980             :     0, // ADDRdRr = 211
     981             :     Feature_HasADDSUBIW | 0, // ADIWRdK = 212
     982             :     0, // ANDIRdK = 213
     983             :     0, // ANDRdRr = 214
     984             :     0, // ASRRd = 215
     985             :     0, // BCLRs = 216
     986             :     0, // BLD = 217
     987             :     0, // BRBCsk = 218
     988             :     0, // BRBSsk = 219
     989             :     Feature_HasBREAK | 0, // BREAK = 220
     990             :     0, // BREQk = 221
     991             :     0, // BRGEk = 222
     992             :     0, // BRLOk = 223
     993             :     0, // BRLTk = 224
     994             :     0, // BRMIk = 225
     995             :     0, // BRNEk = 226
     996             :     0, // BRPLk = 227
     997             :     0, // BRSHk = 228
     998             :     0, // BSETs = 229
     999             :     0, // BST = 230
    1000             :     Feature_HasJMPCALL | 0, // CALLk = 231
    1001             :     0, // CBIAb = 232
    1002             :     0, // CBRRdK = 233
    1003             :     0, // COMRd = 234
    1004             :     0, // CPCRdRr = 235
    1005             :     0, // CPIRdK = 236
    1006             :     0, // CPRdRr = 237
    1007             :     0, // CPSE = 238
    1008             :     0, // DECRd = 239
    1009             :     Feature_HasDES | 0, // DESK = 240
    1010             :     Feature_HasEIJMPCALL | 0, // EICALL = 241
    1011             :     Feature_HasEIJMPCALL | 0, // EIJMP = 242
    1012             :     Feature_HasELPM | 0, // ELPM = 243
    1013             :     Feature_HasELPMX | 0, // ELPMRdZ = 244
    1014             :     Feature_HasELPMX | 0, // ELPMRdZPi = 245
    1015             :     0, // EORRdRr = 246
    1016             :     Feature_SupportsMultiplication | 0, // FMUL = 247
    1017             :     Feature_SupportsMultiplication | 0, // FMULS = 248
    1018             :     Feature_SupportsMultiplication | 0, // FMULSU = 249
    1019             :     Feature_HasIJMPCALL | 0, // ICALL = 250
    1020             :     Feature_HasIJMPCALL | 0, // IJMP = 251
    1021             :     0, // INCRd = 252
    1022             :     0, // INRdA = 253
    1023             :     Feature_HasJMPCALL | 0, // JMPk = 254
    1024             :     Feature_SupportsRMW | 0, // LACZRd = 255
    1025             :     Feature_SupportsRMW | 0, // LASZRd = 256
    1026             :     Feature_SupportsRMW | 0, // LATZRd = 257
    1027             :     Feature_HasSRAM | 0, // LDDRdPtrQ = 258
    1028             :     0, // LDIRdK = 259
    1029             :     Feature_HasSRAM | 0, // LDRdPtr = 260
    1030             :     Feature_HasSRAM | 0, // LDRdPtrPd = 261
    1031             :     Feature_HasSRAM | 0, // LDRdPtrPi = 262
    1032             :     Feature_HasSRAM | 0, // LDSRdK = 263
    1033             :     Feature_HasLPM | 0, // LPM = 264
    1034             :     Feature_HasLPMX | 0, // LPMRdZ = 265
    1035             :     Feature_HasLPMX | 0, // LPMRdZPi = 266
    1036             :     0, // LSRRd = 267
    1037             :     0, // MOVRdRr = 268
    1038             :     Feature_HasMOVW | 0, // MOVWRdRr = 269
    1039             :     Feature_SupportsMultiplication | 0, // MULRdRr = 270
    1040             :     Feature_SupportsMultiplication | 0, // MULSRdRr = 271
    1041             :     Feature_SupportsMultiplication | 0, // MULSURdRr = 272
    1042             :     0, // NEGRd = 273
    1043             :     0, // NOP = 274
    1044             :     0, // ORIRdK = 275
    1045             :     0, // ORRdRr = 276
    1046             :     0, // OUTARr = 277
    1047             :     Feature_HasSRAM | 0, // POPRd = 278
    1048             :     Feature_HasSRAM | 0, // PUSHRr = 279
    1049             :     0, // RCALLk = 280
    1050             :     0, // RET = 281
    1051             :     0, // RETI = 282
    1052             :     0, // RJMPk = 283
    1053             :     0, // RORRd = 284
    1054             :     0, // SBCIRdK = 285
    1055             :     0, // SBCRdRr = 286
    1056             :     0, // SBIAb = 287
    1057             :     0, // SBICAb = 288
    1058             :     0, // SBISAb = 289
    1059             :     Feature_HasADDSUBIW | 0, // SBIWRdK = 290
    1060             :     0, // SBRCRrB = 291
    1061             :     0, // SBRSRrB = 292
    1062             :     0, // SLEEP = 293
    1063             :     Feature_HasSPM | 0, // SPM = 294
    1064             :     Feature_HasSPMX | 0, // SPMZPi = 295
    1065             :     Feature_HasSRAM | 0, // STDPtrQRr = 296
    1066             :     Feature_HasSRAM | 0, // STPtrPdRr = 297
    1067             :     Feature_HasSRAM | 0, // STPtrPiRr = 298
    1068             :     Feature_HasSRAM | 0, // STPtrRr = 299
    1069             :     Feature_HasSRAM | 0, // STSKRr = 300
    1070             :     0, // SUBIRdK = 301
    1071             :     0, // SUBRdRr = 302
    1072             :     0, // SWAPRd = 303
    1073             :     0, // WDR = 304
    1074             :     Feature_SupportsRMW | 0, // XCHZRd = 305
    1075             :   };
    1076             : 
    1077             :   assert(Inst.getOpcode() < 306);
    1078             :   uint64_t MissingFeatures =
    1079             :       (AvailableFeatures & RequiredFeatures[Inst.getOpcode()]) ^
    1080             :       RequiredFeatures[Inst.getOpcode()];
    1081             :   if (MissingFeatures) {
    1082             :     std::ostringstream Msg;
    1083             :     Msg << "Attempting to emit " << MCII.getName(Inst.getOpcode()).str()
    1084             :         << " instruction but the ";
    1085             :     for (unsigned i = 0; i < 8 * sizeof(MissingFeatures); ++i)
    1086             :       if (MissingFeatures & (1ULL << i))
    1087             :         Msg << SubtargetFeatureNames[i] << " ";
    1088             :     Msg << "predicate(s) are not met";
    1089             :     report_fatal_error(Msg.str());
    1090             :   }
    1091             : #else
    1092             : // Silence unused variable warning on targets that don't use MCII for other purposes (e.g. BPF).
    1093             : (void)MCII;
    1094             : #endif // NDEBUG
    1095             : }
    1096             : #endif

Generated by: LCOV version 1.13