LCOV - code coverage report
Current view: top level - build-llvm/lib/Target/Hexagon - HexagonGenRegisterInfo.inc (source / functions) Hit Total Coverage
Test: llvm-toolchain.info Lines: 71 87 81.6 %
Date: 2017-09-14 15:23:50 Functions: 12 15 80.0 %
Legend: Lines: hit not hit

          Line data    Source code
       1             : /*===- TableGen'erated file -------------------------------------*- C++ -*-===*\
       2             : |*                                                                            *|
       3             : |* Target Register Enum Values                                                *|
       4             : |*                                                                            *|
       5             : |* Automatically generated file, do not edit!                                 *|
       6             : |*                                                                            *|
       7             : \*===----------------------------------------------------------------------===*/
       8             : 
       9             : 
      10             : #ifdef GET_REGINFO_ENUM
      11             : #undef GET_REGINFO_ENUM
      12             : 
      13             : namespace llvm {
      14             : 
      15             : class MCRegisterClass;
      16             : extern const MCRegisterClass HexagonMCRegisterClasses[];
      17             : 
      18             : namespace Hexagon {
      19             : enum {
      20             :   NoRegister,
      21             :   CS = 1,
      22             :   FRAMEKEY = 2,
      23             :   FRAMELIMIT = 3,
      24             :   GP = 4,
      25             :   PC = 5,
      26             :   PKTCOUNT = 6,
      27             :   PKTCOUNTHI = 7,
      28             :   PKTCOUNTLO = 8,
      29             :   UGP = 9,
      30             :   UPCYCLE = 10,
      31             :   UPCYCLEHI = 11,
      32             :   UPCYCLELO = 12,
      33             :   USR = 13,
      34             :   USR_OVF = 14,
      35             :   UTIMER = 15,
      36             :   UTIMERHI = 16,
      37             :   UTIMERLO = 17,
      38             :   C5 = 18,
      39             :   C8 = 19,
      40             :   CS0 = 20,
      41             :   CS1 = 21,
      42             :   D0 = 22,
      43             :   D1 = 23,
      44             :   D2 = 24,
      45             :   D3 = 25,
      46             :   D4 = 26,
      47             :   D5 = 27,
      48             :   D6 = 28,
      49             :   D7 = 29,
      50             :   D8 = 30,
      51             :   D9 = 31,
      52             :   D10 = 32,
      53             :   D11 = 33,
      54             :   D12 = 34,
      55             :   D13 = 35,
      56             :   D14 = 36,
      57             :   D15 = 37,
      58             :   LC0 = 38,
      59             :   LC1 = 39,
      60             :   M0 = 40,
      61             :   M1 = 41,
      62             :   P0 = 42,
      63             :   P1 = 43,
      64             :   P2 = 44,
      65             :   P3 = 45,
      66             :   Q0 = 46,
      67             :   Q1 = 47,
      68             :   Q2 = 48,
      69             :   Q3 = 49,
      70             :   R0 = 50,
      71             :   R1 = 51,
      72             :   R2 = 52,
      73             :   R3 = 53,
      74             :   R4 = 54,
      75             :   R5 = 55,
      76             :   R6 = 56,
      77             :   R7 = 57,
      78             :   R8 = 58,
      79             :   R9 = 59,
      80             :   R10 = 60,
      81             :   R11 = 61,
      82             :   R12 = 62,
      83             :   R13 = 63,
      84             :   R14 = 64,
      85             :   R15 = 65,
      86             :   R16 = 66,
      87             :   R17 = 67,
      88             :   R18 = 68,
      89             :   R19 = 69,
      90             :   R20 = 70,
      91             :   R21 = 71,
      92             :   R22 = 72,
      93             :   R23 = 73,
      94             :   R24 = 74,
      95             :   R25 = 75,
      96             :   R26 = 76,
      97             :   R27 = 77,
      98             :   R28 = 78,
      99             :   R29 = 79,
     100             :   R30 = 80,
     101             :   R31 = 81,
     102             :   SA0 = 82,
     103             :   SA1 = 83,
     104             :   V0 = 84,
     105             :   V1 = 85,
     106             :   V2 = 86,
     107             :   V3 = 87,
     108             :   V4 = 88,
     109             :   V5 = 89,
     110             :   V6 = 90,
     111             :   V7 = 91,
     112             :   V8 = 92,
     113             :   V9 = 93,
     114             :   V10 = 94,
     115             :   V11 = 95,
     116             :   V12 = 96,
     117             :   V13 = 97,
     118             :   V14 = 98,
     119             :   V15 = 99,
     120             :   V16 = 100,
     121             :   V17 = 101,
     122             :   V18 = 102,
     123             :   V19 = 103,
     124             :   V20 = 104,
     125             :   V21 = 105,
     126             :   V22 = 106,
     127             :   V23 = 107,
     128             :   V24 = 108,
     129             :   V25 = 109,
     130             :   V26 = 110,
     131             :   V27 = 111,
     132             :   V28 = 112,
     133             :   V29 = 113,
     134             :   V30 = 114,
     135             :   V31 = 115,
     136             :   W0 = 116,
     137             :   W1 = 117,
     138             :   W2 = 118,
     139             :   W3 = 119,
     140             :   W4 = 120,
     141             :   W5 = 121,
     142             :   W6 = 122,
     143             :   W7 = 123,
     144             :   W8 = 124,
     145             :   W9 = 125,
     146             :   W10 = 126,
     147             :   W11 = 127,
     148             :   W12 = 128,
     149             :   W13 = 129,
     150             :   W14 = 130,
     151             :   W15 = 131,
     152             :   C1_0 = 132,
     153             :   C3_2 = 133,
     154             :   C5_4 = 134,
     155             :   C7_6 = 135,
     156             :   C9_8 = 136,
     157             :   C11_10 = 137,
     158             :   C17_16 = 138,
     159             :   P3_0 = 139,
     160             :   NUM_TARGET_REGS       // 140
     161             : };
     162             : } // end namespace Hexagon
     163             : 
     164             : // Register classes
     165             : 
     166             : namespace Hexagon {
     167             : enum {
     168             :   UsrBitsRegClassID = 0,
     169             :   IntRegsRegClassID = 1,
     170             :   CtrRegsRegClassID = 2,
     171             :   GeneralSubRegsRegClassID = 3,
     172             :   V62RegsRegClassID = 4,
     173             :   IntRegsLow8RegClassID = 5,
     174             :   CtrRegs_and_V62RegsRegClassID = 6,
     175             :   PredRegsRegClassID = 7,
     176             :   V62Regs_with_isub_hiRegClassID = 8,
     177             :   ModRegsRegClassID = 9,
     178             :   CtrRegs_with_subreg_overflowRegClassID = 10,
     179             :   DoubleRegsRegClassID = 11,
     180             :   CtrRegs64RegClassID = 12,
     181             :   GeneralDoubleLow8RegsRegClassID = 13,
     182             :   DoubleRegs_with_isub_hi_in_IntRegsLow8RegClassID = 14,
     183             :   CtrRegs64_and_V62RegsRegClassID = 15,
     184             :   CtrRegs64_with_isub_hi_in_ModRegsRegClassID = 16,
     185             :   VectorRegsRegClassID = 17,
     186             :   VecPredRegsRegClassID = 18,
     187             :   VectorRegs128BRegClassID = 19,
     188             :   VecDblRegsRegClassID = 20,
     189             :   VecPredRegs128BRegClassID = 21,
     190             :   VecDblRegs128BRegClassID = 22,
     191             : 
     192             :   };
     193             : } // end namespace Hexagon
     194             : 
     195             : 
     196             : // Subregister indices
     197             : 
     198             : namespace Hexagon {
     199             : enum {
     200             :   NoSubRegister,
     201             :   isub_hi,      // 1
     202             :   isub_lo,      // 2
     203             :   subreg_overflow,      // 3
     204             :   vsub_hi,      // 4
     205             :   vsub_lo,      // 5
     206             :   NUM_TARGET_SUBREGS
     207             : };
     208             : } // end namespace Hexagon
     209             : 
     210             : } // end namespace llvm
     211             : 
     212             : #endif // GET_REGINFO_ENUM
     213             : 
     214             : /*===- TableGen'erated file -------------------------------------*- C++ -*-===*\
     215             : |*                                                                            *|
     216             : |* MC Register Information                                                    *|
     217             : |*                                                                            *|
     218             : |* Automatically generated file, do not edit!                                 *|
     219             : |*                                                                            *|
     220             : \*===----------------------------------------------------------------------===*/
     221             : 
     222             : 
     223             : #ifdef GET_REGINFO_MC_DESC
     224             : #undef GET_REGINFO_MC_DESC
     225             : 
     226             : namespace llvm {
     227             : 
     228             : extern const MCPhysReg HexagonRegDiffLists[] = {
     229             :   /* 0 */ 0, 0,
     230             :   /* 2 */ 0, 1, 0,
     231             :   /* 5 */ 15, 37, 1, 1, 1, 0,
     232             :   /* 11 */ 52, 1, 1, 1, 0,
     233             :   /* 16 */ 2, 1, 0,
     234             :   /* 19 */ 6, 1, 0,
     235             :   /* 22 */ 9, 1, 0,
     236             :   /* 25 */ 11, 1, 0,
     237             :   /* 28 */ 13, 1, 0,
     238             :   /* 31 */ 19, 1, 0,
     239             :   /* 34 */ 28, 1, 0,
     240             :   /* 37 */ 29, 1, 0,
     241             :   /* 40 */ 30, 1, 0,
     242             :   /* 43 */ 31, 1, 0,
     243             :   /* 46 */ 32, 1, 0,
     244             :   /* 49 */ 33, 1, 0,
     245             :   /* 52 */ 34, 1, 0,
     246             :   /* 55 */ 35, 1, 0,
     247             :   /* 58 */ 36, 1, 0,
     248             :   /* 61 */ 37, 1, 0,
     249             :   /* 64 */ 38, 1, 0,
     250             :   /* 67 */ 39, 1, 0,
     251             :   /* 70 */ 40, 1, 0,
     252             :   /* 73 */ 41, 1, 0,
     253             :   /* 76 */ 42, 1, 0,
     254             :   /* 79 */ 43, 1, 0,
     255             :   /* 82 */ 50, 1, 0,
     256             :   /* 85 */ 65366, 1, 0,
     257             :   /* 88 */ 65441, 1, 0,
     258             :   /* 91 */ 65504, 1, 0,
     259             :   /* 94 */ 65505, 1, 0,
     260             :   /* 97 */ 65506, 1, 0,
     261             :   /* 100 */ 65507, 1, 0,
     262             :   /* 103 */ 65508, 1, 0,
     263             :   /* 106 */ 65509, 1, 0,
     264             :   /* 109 */ 65510, 1, 0,
     265             :   /* 112 */ 65511, 1, 0,
     266             :   /* 115 */ 65512, 1, 0,
     267             :   /* 118 */ 65513, 1, 0,
     268             :   /* 121 */ 65514, 1, 0,
     269             :   /* 124 */ 65515, 1, 0,
     270             :   /* 127 */ 65516, 1, 0,
     271             :   /* 130 */ 65517, 1, 0,
     272             :   /* 133 */ 65518, 1, 0,
     273             :   /* 136 */ 65519, 1, 0,
     274             :   /* 139 */ 4, 4, 0,
     275             :   /* 142 */ 5, 7, 0,
     276             :   /* 145 */ 9, 0,
     277             :   /* 147 */ 10, 0,
     278             :   /* 149 */ 11, 0,
     279             :   /* 151 */ 65452, 12, 0,
     280             :   /* 154 */ 14, 0,
     281             :   /* 156 */ 16, 0,
     282             :   /* 158 */ 17, 0,
     283             :   /* 160 */ 18, 0,
     284             :   /* 162 */ 19, 0,
     285             :   /* 164 */ 20, 0,
     286             :   /* 166 */ 21, 0,
     287             :   /* 168 */ 22, 0,
     288             :   /* 170 */ 23, 0,
     289             :   /* 172 */ 24, 0,
     290             :   /* 174 */ 25, 0,
     291             :   /* 176 */ 26, 0,
     292             :   /* 178 */ 27, 0,
     293             :   /* 180 */ 28, 0,
     294             :   /* 182 */ 29, 0,
     295             :   /* 184 */ 30, 0,
     296             :   /* 186 */ 31, 0,
     297             :   /* 188 */ 32, 0,
     298             :   /* 190 */ 50, 0,
     299             :   /* 192 */ 94, 0,
     300             :   /* 194 */ 95, 0,
     301             :   /* 196 */ 116, 0,
     302             :   /* 198 */ 117, 0,
     303             :   /* 200 */ 128, 0,
     304             :   /* 202 */ 131, 0,
     305             :   /* 204 */ 133, 0,
     306             :   /* 206 */ 135, 0,
     307             :   /* 208 */ 136, 0,
     308             :   /* 210 */ 5, 65415, 0,
     309             :   /* 213 */ 65486, 65492, 0,
     310             :   /* 216 */ 65493, 0,
     311             :   /* 218 */ 65494, 0,
     312             :   /* 220 */ 65495, 0,
     313             :   /* 222 */ 65496, 0,
     314             :   /* 224 */ 65497, 0,
     315             :   /* 226 */ 65498, 0,
     316             :   /* 228 */ 65499, 0,
     317             :   /* 230 */ 65500, 0,
     318             :   /* 232 */ 65501, 0,
     319             :   /* 234 */ 65502, 0,
     320             :   /* 236 */ 65503, 0,
     321             :   /* 238 */ 65504, 0,
     322             :   /* 240 */ 65505, 0,
     323             :   /* 242 */ 65506, 0,
     324             :   /* 244 */ 65507, 0,
     325             :   /* 246 */ 65508, 0,
     326             :   /* 248 */ 65514, 0,
     327             :   /* 250 */ 65515, 0,
     328             :   /* 252 */ 65516, 0,
     329             :   /* 254 */ 65517, 0,
     330             :   /* 256 */ 65419, 65522, 0,
     331             :   /* 259 */ 65526, 0,
     332             :   /* 261 */ 65408, 65531, 0,
     333             :   /* 264 */ 65534, 0,
     334             :   /* 266 */ 2, 65535, 0,
     335             :   /* 269 */ 65401, 65535, 0,
     336             : };
     337             : 
     338       72306 : extern const LaneBitmask HexagonLaneMaskLists[] = {
     339             :   /* 0 */ LaneBitmask(0x00000000), LaneBitmask(0x00000000), LaneBitmask(0x00000000), LaneBitmask(0x00000000), LaneBitmask::getAll(),
     340             :   /* 5 */ LaneBitmask(0x00000004), LaneBitmask(0x00000000), LaneBitmask::getAll(),
     341             :   /* 8 */ LaneBitmask(0x00000002), LaneBitmask(0x00000001), LaneBitmask::getAll(),
     342             :   /* 11 */ LaneBitmask(0x00000001), LaneBitmask(0x00000002), LaneBitmask::getAll(),
     343             :   /* 14 */ LaneBitmask(0x00000001), LaneBitmask(0x00000002), LaneBitmask(0x00000002), LaneBitmask(0x00000002), LaneBitmask(0x00000002), LaneBitmask::getAll(),
     344             :   /* 20 */ LaneBitmask(0x00000010), LaneBitmask(0x00000008), LaneBitmask::getAll(),
     345       72306 : };
     346             : 
     347             : extern const uint16_t HexagonSubRegIdxLists[] = {
     348             :   /* 0 */ 2, 1, 0,
     349             :   /* 3 */ 3, 0,
     350             :   /* 5 */ 5, 4, 0,
     351             : };
     352             : 
     353             : extern const MCRegisterInfo::SubRegCoveredBits HexagonSubRegIdxRanges[] = {
     354             :   { 65535, 65535 },
     355             :   { 32, 32 },   // isub_hi
     356             :   { 0, 32 },    // isub_lo
     357             :   { 0, 1 },     // subreg_overflow
     358             :   { 512, 512 }, // vsub_hi
     359             :   { 0, 512 },   // vsub_lo
     360             : };
     361             : 
     362             : extern const char HexagonRegStrings[] = {
     363             :   /* 0 */ 'D', '1', '0', 0,
     364             :   /* 4 */ 'R', '1', '0', 0,
     365             :   /* 8 */ 'V', '1', '0', 0,
     366             :   /* 12 */ 'W', '1', '0', 0,
     367             :   /* 16 */ 'C', '1', '1', '_', '1', '0', 0,
     368             :   /* 23 */ 'R', '2', '0', 0,
     369             :   /* 27 */ 'V', '2', '0', 0,
     370             :   /* 31 */ 'R', '3', '0', 0,
     371             :   /* 35 */ 'V', '3', '0', 0,
     372             :   /* 39 */ 'S', 'A', '0', 0,
     373             :   /* 43 */ 'L', 'C', '0', 0,
     374             :   /* 47 */ 'D', '0', 0,
     375             :   /* 50 */ 'M', '0', 0,
     376             :   /* 53 */ 'P', '0', 0,
     377             :   /* 56 */ 'Q', '0', 0,
     378             :   /* 59 */ 'R', '0', 0,
     379             :   /* 62 */ 'C', 'S', '0', 0,
     380             :   /* 66 */ 'V', '0', 0,
     381             :   /* 69 */ 'W', '0', 0,
     382             :   /* 72 */ 'C', '1', '_', '0', 0,
     383             :   /* 77 */ 'P', '3', '_', '0', 0,
     384             :   /* 82 */ 'D', '1', '1', 0,
     385             :   /* 86 */ 'R', '1', '1', 0,
     386             :   /* 90 */ 'V', '1', '1', 0,
     387             :   /* 94 */ 'W', '1', '1', 0,
     388             :   /* 98 */ 'R', '2', '1', 0,
     389             :   /* 102 */ 'V', '2', '1', 0,
     390             :   /* 106 */ 'R', '3', '1', 0,
     391             :   /* 110 */ 'V', '3', '1', 0,
     392             :   /* 114 */ 'S', 'A', '1', 0,
     393             :   /* 118 */ 'L', 'C', '1', 0,
     394             :   /* 122 */ 'D', '1', 0,
     395             :   /* 125 */ 'M', '1', 0,
     396             :   /* 128 */ 'P', '1', 0,
     397             :   /* 131 */ 'Q', '1', 0,
     398             :   /* 134 */ 'R', '1', 0,
     399             :   /* 137 */ 'C', 'S', '1', 0,
     400             :   /* 141 */ 'V', '1', 0,
     401             :   /* 144 */ 'W', '1', 0,
     402             :   /* 147 */ 'D', '1', '2', 0,
     403             :   /* 151 */ 'R', '1', '2', 0,
     404             :   /* 155 */ 'V', '1', '2', 0,
     405             :   /* 159 */ 'W', '1', '2', 0,
     406             :   /* 163 */ 'R', '2', '2', 0,
     407             :   /* 167 */ 'V', '2', '2', 0,
     408             :   /* 171 */ 'D', '2', 0,
     409             :   /* 174 */ 'P', '2', 0,
     410             :   /* 177 */ 'Q', '2', 0,
     411             :   /* 180 */ 'R', '2', 0,
     412             :   /* 183 */ 'V', '2', 0,
     413             :   /* 186 */ 'W', '2', 0,
     414             :   /* 189 */ 'C', '3', '_', '2', 0,
     415             :   /* 194 */ 'D', '1', '3', 0,
     416             :   /* 198 */ 'R', '1', '3', 0,
     417             :   /* 202 */ 'V', '1', '3', 0,
     418             :   /* 206 */ 'W', '1', '3', 0,
     419             :   /* 210 */ 'R', '2', '3', 0,
     420             :   /* 214 */ 'V', '2', '3', 0,
     421             :   /* 218 */ 'D', '3', 0,
     422             :   /* 221 */ 'P', '3', 0,
     423             :   /* 224 */ 'Q', '3', 0,
     424             :   /* 227 */ 'R', '3', 0,
     425             :   /* 230 */ 'V', '3', 0,
     426             :   /* 233 */ 'W', '3', 0,
     427             :   /* 236 */ 'D', '1', '4', 0,
     428             :   /* 240 */ 'R', '1', '4', 0,
     429             :   /* 244 */ 'V', '1', '4', 0,
     430             :   /* 248 */ 'W', '1', '4', 0,
     431             :   /* 252 */ 'R', '2', '4', 0,
     432             :   /* 256 */ 'V', '2', '4', 0,
     433             :   /* 260 */ 'D', '4', 0,
     434             :   /* 263 */ 'R', '4', 0,
     435             :   /* 266 */ 'V', '4', 0,
     436             :   /* 269 */ 'W', '4', 0,
     437             :   /* 272 */ 'C', '5', '_', '4', 0,
     438             :   /* 277 */ 'D', '1', '5', 0,
     439             :   /* 281 */ 'R', '1', '5', 0,
     440             :   /* 285 */ 'V', '1', '5', 0,
     441             :   /* 289 */ 'W', '1', '5', 0,
     442             :   /* 293 */ 'R', '2', '5', 0,
     443             :   /* 297 */ 'V', '2', '5', 0,
     444             :   /* 301 */ 'C', '5', 0,
     445             :   /* 304 */ 'D', '5', 0,
     446             :   /* 307 */ 'R', '5', 0,
     447             :   /* 310 */ 'V', '5', 0,
     448             :   /* 313 */ 'W', '5', 0,
     449             :   /* 316 */ 'R', '1', '6', 0,
     450             :   /* 320 */ 'V', '1', '6', 0,
     451             :   /* 324 */ 'C', '1', '7', '_', '1', '6', 0,
     452             :   /* 331 */ 'R', '2', '6', 0,
     453             :   /* 335 */ 'V', '2', '6', 0,
     454             :   /* 339 */ 'D', '6', 0,
     455             :   /* 342 */ 'R', '6', 0,
     456             :   /* 345 */ 'V', '6', 0,
     457             :   /* 348 */ 'W', '6', 0,
     458             :   /* 351 */ 'C', '7', '_', '6', 0,
     459             :   /* 356 */ 'R', '1', '7', 0,
     460             :   /* 360 */ 'V', '1', '7', 0,
     461             :   /* 364 */ 'R', '2', '7', 0,
     462             :   /* 368 */ 'V', '2', '7', 0,
     463             :   /* 372 */ 'D', '7', 0,
     464             :   /* 375 */ 'R', '7', 0,
     465             :   /* 378 */ 'V', '7', 0,
     466             :   /* 381 */ 'W', '7', 0,
     467             :   /* 384 */ 'R', '1', '8', 0,
     468             :   /* 388 */ 'V', '1', '8', 0,
     469             :   /* 392 */ 'R', '2', '8', 0,
     470             :   /* 396 */ 'V', '2', '8', 0,
     471             :   /* 400 */ 'C', '8', 0,
     472             :   /* 403 */ 'D', '8', 0,
     473             :   /* 406 */ 'R', '8', 0,
     474             :   /* 409 */ 'V', '8', 0,
     475             :   /* 412 */ 'W', '8', 0,
     476             :   /* 415 */ 'C', '9', '_', '8', 0,
     477             :   /* 420 */ 'R', '1', '9', 0,
     478             :   /* 424 */ 'V', '1', '9', 0,
     479             :   /* 428 */ 'R', '2', '9', 0,
     480             :   /* 432 */ 'V', '2', '9', 0,
     481             :   /* 436 */ 'D', '9', 0,
     482             :   /* 439 */ 'R', '9', 0,
     483             :   /* 442 */ 'V', '9', 0,
     484             :   /* 445 */ 'W', '9', 0,
     485             :   /* 448 */ 'P', 'C', 0,
     486             :   /* 451 */ 'U', 'P', 'C', 'Y', 'C', 'L', 'E', 0,
     487             :   /* 459 */ 'U', 'S', 'R', '_', 'O', 'V', 'F', 0,
     488             :   /* 467 */ 'U', 'P', 'C', 'Y', 'C', 'L', 'E', 'H', 'I', 0,
     489             :   /* 477 */ 'U', 'T', 'I', 'M', 'E', 'R', 'H', 'I', 0,
     490             :   /* 486 */ 'P', 'K', 'T', 'C', 'O', 'U', 'N', 'T', 'H', 'I', 0,
     491             :   /* 497 */ 'U', 'P', 'C', 'Y', 'C', 'L', 'E', 'L', 'O', 0,
     492             :   /* 507 */ 'U', 'T', 'I', 'M', 'E', 'R', 'L', 'O', 0,
     493             :   /* 516 */ 'P', 'K', 'T', 'C', 'O', 'U', 'N', 'T', 'L', 'O', 0,
     494             :   /* 527 */ 'U', 'G', 'P', 0,
     495             :   /* 531 */ 'U', 'T', 'I', 'M', 'E', 'R', 0,
     496             :   /* 538 */ 'U', 'S', 'R', 0,
     497             :   /* 542 */ 'C', 'S', 0,
     498             :   /* 545 */ 'F', 'R', 'A', 'M', 'E', 'L', 'I', 'M', 'I', 'T', 0,
     499             :   /* 556 */ 'P', 'K', 'T', 'C', 'O', 'U', 'N', 'T', 0,
     500             :   /* 565 */ 'F', 'R', 'A', 'M', 'E', 'K', 'E', 'Y', 0,
     501             : };
     502             : 
     503             : extern const MCRegisterDesc HexagonRegDesc[] = { // Descriptors
     504             :   { 3, 0, 0, 0, 0, 0 },
     505             :   { 542, 31, 1, 0, 32, 8 },
     506             :   { 565, 1, 208, 2, 1, 3 },
     507             :   { 545, 1, 206, 2, 1, 3 },
     508             :   { 528, 1, 204, 2, 1, 3 },
     509             :   { 448, 1, 202, 2, 1, 3 },
     510             :   { 556, 266, 1, 0, 304, 8 },
     511             :   { 486, 1, 267, 2, 2288, 3 },
     512             :   { 516, 1, 264, 2, 4146, 3 },
     513             :   { 527, 1, 200, 2, 4146, 3 },
     514             :   { 451, 266, 1, 0, 352, 8 },
     515             :   { 467, 1, 267, 2, 2352, 3 },
     516             :   { 497, 1, 264, 2, 2320, 3 },
     517             :   { 538, 3, 1, 3, 400, 5 },
     518             :   { 459, 1, 267, 2, 2384, 3 },
     519             :   { 531, 266, 1, 0, 448, 8 },
     520             :   { 477, 1, 267, 2, 2464, 3 },
     521             :   { 507, 1, 264, 2, 4002, 3 },
     522             :   { 301, 1, 196, 2, 4002, 3 },
     523             :   { 400, 1, 198, 2, 2432, 3 },
     524             :   { 62, 1, 254, 2, 4033, 3 },
     525             :   { 137, 1, 252, 2, 4033, 3 },
     526             :   { 47, 34, 1, 0, 1650, 8 },
     527             :   { 122, 37, 1, 0, 1650, 8 },
     528             :   { 171, 40, 1, 0, 1650, 8 },
     529             :   { 218, 43, 1, 0, 1650, 8 },
     530             :   { 260, 46, 1, 0, 1650, 8 },
     531             :   { 304, 49, 1, 0, 1650, 8 },
     532             :   { 339, 52, 1, 0, 1650, 8 },
     533             :   { 372, 55, 1, 0, 1650, 8 },
     534             :   { 403, 58, 1, 0, 1650, 8 },
     535             :   { 436, 61, 1, 0, 1650, 8 },
     536             :   { 0, 64, 1, 0, 1650, 8 },
     537             :   { 82, 67, 1, 0, 1650, 8 },
     538             :   { 147, 70, 1, 0, 1650, 8 },
     539             :   { 194, 73, 1, 0, 1650, 8 },
     540             :   { 236, 76, 1, 0, 1650, 8 },
     541             :   { 277, 79, 1, 0, 1650, 8 },
     542             :   { 43, 1, 192, 2, 2353, 3 },
     543             :   { 118, 1, 192, 2, 2353, 3 },
     544             :   { 50, 1, 194, 2, 2353, 3 },
     545             :   { 125, 1, 192, 2, 2353, 3 },
     546             :   { 53, 1, 1, 2, 2353, 3 },
     547             :   { 128, 1, 1, 2, 2353, 3 },
     548             :   { 174, 1, 1, 2, 2353, 3 },
     549             :   { 221, 1, 1, 2, 2353, 3 },
     550             :   { 56, 1, 1, 2, 2353, 3 },
     551             :   { 131, 1, 1, 2, 2353, 3 },
     552             :   { 177, 1, 1, 2, 2353, 3 },
     553             :   { 224, 1, 1, 2, 2353, 3 },
     554             :   { 59, 1, 246, 2, 3745, 3 },
     555             :   { 134, 1, 244, 2, 3745, 3 },
     556             :   { 180, 1, 244, 2, 3745, 3 },
     557             :   { 227, 1, 242, 2, 3745, 3 },
     558             :   { 263, 1, 242, 2, 3745, 3 },
     559             :   { 307, 1, 240, 2, 3745, 3 },
     560             :   { 342, 1, 240, 2, 3745, 3 },
     561             :   { 375, 1, 238, 2, 3745, 3 },
     562             :   { 406, 1, 238, 2, 3745, 3 },
     563             :   { 439, 1, 236, 2, 3745, 3 },
     564             :   { 4, 1, 236, 2, 3745, 3 },
     565             :   { 86, 1, 234, 2, 3745, 3 },
     566             :   { 151, 1, 234, 2, 3745, 3 },
     567             :   { 198, 1, 232, 2, 3745, 3 },
     568             :   { 240, 1, 232, 2, 3745, 3 },
     569             :   { 281, 1, 230, 2, 3745, 3 },
     570             :   { 316, 1, 230, 2, 3745, 3 },
     571             :   { 356, 1, 228, 2, 3745, 3 },
     572             :   { 384, 1, 228, 2, 3745, 3 },
     573             :   { 420, 1, 226, 2, 3745, 3 },
     574             :   { 23, 1, 226, 2, 3745, 3 },
     575             :   { 98, 1, 224, 2, 3745, 3 },
     576             :   { 163, 1, 224, 2, 3745, 3 },
     577             :   { 210, 1, 222, 2, 3745, 3 },
     578             :   { 252, 1, 222, 2, 3745, 3 },
     579             :   { 293, 1, 220, 2, 3745, 3 },
     580             :   { 331, 1, 220, 2, 3745, 3 },
     581             :   { 364, 1, 218, 2, 3745, 3 },
     582             :   { 392, 1, 218, 2, 3745, 3 },
     583             :   { 428, 1, 216, 2, 3745, 3 },
     584             :   { 31, 1, 216, 2, 3745, 3 },
     585             :   { 106, 1, 214, 2, 3745, 3 },
     586             :   { 39, 1, 190, 2, 3969, 3 },
     587             :   { 114, 1, 190, 2, 3969, 3 },
     588             :   { 66, 1, 188, 2, 3969, 3 },
     589             :   { 141, 1, 186, 2, 3969, 3 },
     590             :   { 183, 1, 186, 2, 3969, 3 },
     591             :   { 230, 1, 184, 2, 3969, 3 },
     592             :   { 266, 1, 184, 2, 3969, 3 },
     593             :   { 310, 1, 182, 2, 3969, 3 },
     594             :   { 345, 1, 182, 2, 3969, 3 },
     595             :   { 378, 1, 180, 2, 3969, 3 },
     596             :   { 409, 1, 180, 2, 3969, 3 },
     597             :   { 442, 1, 178, 2, 3969, 3 },
     598             :   { 8, 1, 178, 2, 3969, 3 },
     599             :   { 90, 1, 176, 2, 3969, 3 },
     600             :   { 155, 1, 176, 2, 3969, 3 },
     601             :   { 202, 1, 174, 2, 3969, 3 },
     602             :   { 244, 1, 174, 2, 3969, 3 },
     603             :   { 285, 1, 172, 2, 3969, 3 },
     604             :   { 320, 1, 172, 2, 3969, 3 },
     605             :   { 360, 1, 170, 2, 3969, 3 },
     606             :   { 388, 1, 170, 2, 3969, 3 },
     607             :   { 424, 1, 168, 2, 3969, 3 },
     608             :   { 27, 1, 168, 2, 3969, 3 },
     609             :   { 102, 1, 166, 2, 3969, 3 },
     610             :   { 167, 1, 166, 2, 3969, 3 },
     611             :   { 214, 1, 164, 2, 3969, 3 },
     612             :   { 256, 1, 164, 2, 3969, 3 },
     613             :   { 297, 1, 162, 2, 3969, 3 },
     614             :   { 335, 1, 162, 2, 3969, 3 },
     615             :   { 368, 1, 160, 2, 3969, 3 },
     616             :   { 396, 1, 160, 2, 3969, 3 },
     617             :   { 432, 1, 158, 2, 3969, 3 },
     618             :   { 35, 1, 158, 2, 3969, 3 },
     619             :   { 110, 1, 156, 2, 3969, 3 },
     620             :   { 69, 91, 1, 5, 1362, 20 },
     621             :   { 144, 94, 1, 5, 1362, 20 },
     622             :   { 186, 97, 1, 5, 1362, 20 },
     623             :   { 233, 100, 1, 5, 1362, 20 },
     624             :   { 269, 103, 1, 5, 1362, 20 },
     625             :   { 313, 106, 1, 5, 1362, 20 },
     626             :   { 348, 109, 1, 5, 1362, 20 },
     627             :   { 381, 112, 1, 5, 1362, 20 },
     628             :   { 412, 115, 1, 5, 1362, 20 },
     629             :   { 445, 118, 1, 5, 1362, 20 },
     630             :   { 12, 121, 1, 5, 1362, 20 },
     631             :   { 94, 124, 1, 5, 1362, 20 },
     632             :   { 159, 127, 1, 5, 1362, 20 },
     633             :   { 206, 130, 1, 5, 1362, 20 },
     634             :   { 248, 133, 1, 5, 1362, 20 },
     635             :   { 289, 136, 1, 5, 1362, 20 },
     636             :   { 72, 213, 1, 0, 2417, 11 },
     637             :   { 189, 213, 1, 0, 2417, 11 },
     638             :   { 272, 210, 1, 0, 80, 14 },
     639             :   { 351, 88, 1, 0, 1312, 8 },
     640             :   { 415, 256, 1, 0, 2272, 11 },
     641             :   { 16, 261, 1, 0, 2224, 11 },
     642             :   { 324, 269, 1, 0, 256, 11 },
     643             :   { 77, 1, 262, 2, 176, 0 },
     644             : };
     645             : 
     646             : extern const MCPhysReg HexagonRegUnitRoots[][2] = {
     647             :   { Hexagon::CS0 },
     648             :   { Hexagon::CS1 },
     649             :   { Hexagon::FRAMEKEY },
     650             :   { Hexagon::FRAMELIMIT },
     651             :   { Hexagon::GP },
     652             :   { Hexagon::PC },
     653             :   { Hexagon::PKTCOUNTLO },
     654             :   { Hexagon::PKTCOUNTHI },
     655             :   { Hexagon::UGP },
     656             :   { Hexagon::UPCYCLELO },
     657             :   { Hexagon::UPCYCLEHI },
     658             :   { Hexagon::USR_OVF },
     659             :   { Hexagon::USR, Hexagon::C8 },
     660             :   { Hexagon::UTIMERLO },
     661             :   { Hexagon::UTIMERHI },
     662             :   { Hexagon::C5 },
     663             :   { Hexagon::R0 },
     664             :   { Hexagon::R1 },
     665             :   { Hexagon::R2 },
     666             :   { Hexagon::R3 },
     667             :   { Hexagon::R4 },
     668             :   { Hexagon::R5 },
     669             :   { Hexagon::R6 },
     670             :   { Hexagon::R7 },
     671             :   { Hexagon::R8 },
     672             :   { Hexagon::R9 },
     673             :   { Hexagon::R10 },
     674             :   { Hexagon::R11 },
     675             :   { Hexagon::R12 },
     676             :   { Hexagon::R13 },
     677             :   { Hexagon::R14 },
     678             :   { Hexagon::R15 },
     679             :   { Hexagon::R16 },
     680             :   { Hexagon::R17 },
     681             :   { Hexagon::R18 },
     682             :   { Hexagon::R19 },
     683             :   { Hexagon::R20 },
     684             :   { Hexagon::R21 },
     685             :   { Hexagon::R22 },
     686             :   { Hexagon::R23 },
     687             :   { Hexagon::R24 },
     688             :   { Hexagon::R25 },
     689             :   { Hexagon::R26 },
     690             :   { Hexagon::R27 },
     691             :   { Hexagon::R28 },
     692             :   { Hexagon::R29 },
     693             :   { Hexagon::R30 },
     694             :   { Hexagon::R31 },
     695             :   { Hexagon::LC0 },
     696             :   { Hexagon::LC1 },
     697             :   { Hexagon::M0 },
     698             :   { Hexagon::M1 },
     699             :   { Hexagon::P0, Hexagon::P3_0 },
     700             :   { Hexagon::P1, Hexagon::P3_0 },
     701             :   { Hexagon::P2, Hexagon::P3_0 },
     702             :   { Hexagon::P3, Hexagon::P3_0 },
     703             :   { Hexagon::Q0 },
     704             :   { Hexagon::Q1 },
     705             :   { Hexagon::Q2 },
     706             :   { Hexagon::Q3 },
     707             :   { Hexagon::SA0 },
     708             :   { Hexagon::SA1 },
     709             :   { Hexagon::V0 },
     710             :   { Hexagon::V1 },
     711             :   { Hexagon::V2 },
     712             :   { Hexagon::V3 },
     713             :   { Hexagon::V4 },
     714             :   { Hexagon::V5 },
     715             :   { Hexagon::V6 },
     716             :   { Hexagon::V7 },
     717             :   { Hexagon::V8 },
     718             :   { Hexagon::V9 },
     719             :   { Hexagon::V10 },
     720             :   { Hexagon::V11 },
     721             :   { Hexagon::V12 },
     722             :   { Hexagon::V13 },
     723             :   { Hexagon::V14 },
     724             :   { Hexagon::V15 },
     725             :   { Hexagon::V16 },
     726             :   { Hexagon::V17 },
     727             :   { Hexagon::V18 },
     728             :   { Hexagon::V19 },
     729             :   { Hexagon::V20 },
     730             :   { Hexagon::V21 },
     731             :   { Hexagon::V22 },
     732             :   { Hexagon::V23 },
     733             :   { Hexagon::V24 },
     734             :   { Hexagon::V25 },
     735             :   { Hexagon::V26 },
     736             :   { Hexagon::V27 },
     737             :   { Hexagon::V28 },
     738             :   { Hexagon::V29 },
     739             :   { Hexagon::V30 },
     740             :   { Hexagon::V31 },
     741             : };
     742             : 
     743             : namespace {     // Register classes...
     744             :   // UsrBits Register Class...
     745             :   const MCPhysReg UsrBits[] = {
     746             :     Hexagon::USR_OVF, 
     747             :   };
     748             : 
     749             :   // UsrBits Bit set.
     750             :   const uint8_t UsrBitsBits[] = {
     751             :     0x00, 0x40, 
     752             :   };
     753             : 
     754             :   // IntRegs Register Class...
     755             :   const MCPhysReg IntRegs[] = {
     756             :     Hexagon::R0, Hexagon::R1, Hexagon::R2, Hexagon::R3, Hexagon::R4, Hexagon::R5, Hexagon::R6, Hexagon::R7, Hexagon::R8, Hexagon::R9, Hexagon::R12, Hexagon::R13, Hexagon::R14, Hexagon::R15, Hexagon::R16, Hexagon::R17, Hexagon::R18, Hexagon::R19, Hexagon::R20, Hexagon::R21, Hexagon::R22, Hexagon::R23, Hexagon::R24, Hexagon::R25, Hexagon::R26, Hexagon::R27, Hexagon::R28, Hexagon::R10, Hexagon::R11, Hexagon::R29, Hexagon::R30, Hexagon::R31, 
     757             :   };
     758             : 
     759             :   // IntRegs Bit set.
     760             :   const uint8_t IntRegsBits[] = {
     761             :     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, 0xff, 0xff, 0xff, 0x03, 
     762             :   };
     763             : 
     764             :   // CtrRegs Register Class...
     765             :   const MCPhysReg CtrRegs[] = {
     766             :     Hexagon::LC0, Hexagon::SA0, Hexagon::LC1, Hexagon::SA1, Hexagon::P3_0, Hexagon::C5, Hexagon::C8, Hexagon::PC, Hexagon::UGP, Hexagon::GP, Hexagon::CS0, Hexagon::CS1, Hexagon::UPCYCLELO, Hexagon::UPCYCLEHI, Hexagon::FRAMELIMIT, Hexagon::FRAMEKEY, Hexagon::PKTCOUNTLO, Hexagon::PKTCOUNTHI, Hexagon::UTIMERLO, Hexagon::UTIMERHI, Hexagon::M0, Hexagon::M1, Hexagon::USR, 
     767             :   };
     768             : 
     769             :   // CtrRegs Bit set.
     770             :   const uint8_t CtrRegsBits[] = {
     771             :     0xbc, 0x3b, 0x3f, 0x00, 0xc0, 0x03, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 
     772             :   };
     773             : 
     774             :   // GeneralSubRegs Register Class...
     775             :   const MCPhysReg GeneralSubRegs[] = {
     776             :     Hexagon::R23, Hexagon::R22, Hexagon::R21, Hexagon::R20, Hexagon::R19, Hexagon::R18, Hexagon::R17, Hexagon::R16, Hexagon::R7, Hexagon::R6, Hexagon::R5, Hexagon::R4, Hexagon::R3, Hexagon::R2, Hexagon::R1, Hexagon::R0, 
     777             :   };
     778             : 
     779             :   // GeneralSubRegs Bit set.
     780             :   const uint8_t GeneralSubRegsBits[] = {
     781             :     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, 0x03, 0xfc, 0x03, 
     782             :   };
     783             : 
     784             :   // V62Regs Register Class...
     785             :   const MCPhysReg V62Regs[] = {
     786             :     Hexagon::FRAMELIMIT, Hexagon::FRAMEKEY, Hexagon::C17_16, Hexagon::PKTCOUNTLO, Hexagon::PKTCOUNTHI, Hexagon::PKTCOUNT, Hexagon::UTIMERLO, Hexagon::UTIMERHI, Hexagon::UTIMER, 
     787             :   };
     788             : 
     789             :   // V62Regs Bit set.
     790             :   const uint8_t V62RegsBits[] = {
     791             :     0xcc, 0x81, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 
     792             :   };
     793             : 
     794             :   // IntRegsLow8 Register Class...
     795             :   const MCPhysReg IntRegsLow8[] = {
     796             :     Hexagon::R7, Hexagon::R6, Hexagon::R5, Hexagon::R4, Hexagon::R3, Hexagon::R2, Hexagon::R1, Hexagon::R0, 
     797             :   };
     798             : 
     799             :   // IntRegsLow8 Bit set.
     800             :   const uint8_t IntRegsLow8Bits[] = {
     801             :     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, 0x03, 
     802             :   };
     803             : 
     804             :   // CtrRegs_and_V62Regs Register Class...
     805             :   const MCPhysReg CtrRegs_and_V62Regs[] = {
     806             :     Hexagon::FRAMELIMIT, Hexagon::FRAMEKEY, Hexagon::PKTCOUNTLO, Hexagon::PKTCOUNTHI, Hexagon::UTIMERLO, Hexagon::UTIMERHI, 
     807             :   };
     808             : 
     809             :   // CtrRegs_and_V62Regs Bit set.
     810             :   const uint8_t CtrRegs_and_V62RegsBits[] = {
     811             :     0x8c, 0x01, 0x03, 
     812             :   };
     813             : 
     814             :   // PredRegs Register Class...
     815             :   const MCPhysReg PredRegs[] = {
     816             :     Hexagon::P0, Hexagon::P1, Hexagon::P2, Hexagon::P3, 
     817             :   };
     818             : 
     819             :   // PredRegs Bit set.
     820             :   const uint8_t PredRegsBits[] = {
     821             :     0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 
     822             :   };
     823             : 
     824             :   // V62Regs_with_isub_hi Register Class...
     825             :   const MCPhysReg V62Regs_with_isub_hi[] = {
     826             :     Hexagon::C17_16, Hexagon::PKTCOUNT, Hexagon::UTIMER, 
     827             :   };
     828             : 
     829             :   // V62Regs_with_isub_hi Bit set.
     830             :   const uint8_t V62Regs_with_isub_hiBits[] = {
     831             :     0x40, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 
     832             :   };
     833             : 
     834             :   // ModRegs Register Class...
     835             :   const MCPhysReg ModRegs[] = {
     836             :     Hexagon::M0, Hexagon::M1, 
     837             :   };
     838             : 
     839             :   // ModRegs Bit set.
     840             :   const uint8_t ModRegsBits[] = {
     841             :     0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 
     842             :   };
     843             : 
     844             :   // CtrRegs_with_subreg_overflow Register Class...
     845             :   const MCPhysReg CtrRegs_with_subreg_overflow[] = {
     846             :     Hexagon::USR, 
     847             :   };
     848             : 
     849             :   // CtrRegs_with_subreg_overflow Bit set.
     850             :   const uint8_t CtrRegs_with_subreg_overflowBits[] = {
     851             :     0x00, 0x20, 
     852             :   };
     853             : 
     854             :   // DoubleRegs Register Class...
     855             :   const MCPhysReg DoubleRegs[] = {
     856             :     Hexagon::D0, Hexagon::D1, Hexagon::D2, Hexagon::D3, Hexagon::D4, Hexagon::D6, Hexagon::D7, Hexagon::D8, Hexagon::D9, Hexagon::D10, Hexagon::D11, Hexagon::D12, Hexagon::D13, Hexagon::D5, Hexagon::D14, Hexagon::D15, 
     857             :   };
     858             : 
     859             :   // DoubleRegs Bit set.
     860             :   const uint8_t DoubleRegsBits[] = {
     861             :     0x00, 0x00, 0xc0, 0xff, 0x3f, 
     862             :   };
     863             : 
     864             :   // CtrRegs64 Register Class...
     865             :   const MCPhysReg CtrRegs64[] = {
     866             :     Hexagon::C1_0, Hexagon::C3_2, Hexagon::C5_4, Hexagon::C7_6, Hexagon::C9_8, Hexagon::C11_10, Hexagon::CS, Hexagon::UPCYCLE, Hexagon::C17_16, Hexagon::PKTCOUNT, Hexagon::UTIMER, 
     867             :   };
     868             : 
     869             :   // CtrRegs64 Bit set.
     870             :   const uint8_t CtrRegs64Bits[] = {
     871             :     0x42, 0x84, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0x07, 
     872             :   };
     873             : 
     874             :   // GeneralDoubleLow8Regs Register Class...
     875             :   const MCPhysReg GeneralDoubleLow8Regs[] = {
     876             :     Hexagon::D11, Hexagon::D10, Hexagon::D9, Hexagon::D8, Hexagon::D3, Hexagon::D2, Hexagon::D1, Hexagon::D0, 
     877             :   };
     878             : 
     879             :   // GeneralDoubleLow8Regs Bit set.
     880             :   const uint8_t GeneralDoubleLow8RegsBits[] = {
     881             :     0x00, 0x00, 0xc0, 0xc3, 0x03, 
     882             :   };
     883             : 
     884             :   // DoubleRegs_with_isub_hi_in_IntRegsLow8 Register Class...
     885             :   const MCPhysReg DoubleRegs_with_isub_hi_in_IntRegsLow8[] = {
     886             :     Hexagon::D3, Hexagon::D2, Hexagon::D1, Hexagon::D0, 
     887             :   };
     888             : 
     889             :   // DoubleRegs_with_isub_hi_in_IntRegsLow8 Bit set.
     890             :   const uint8_t DoubleRegs_with_isub_hi_in_IntRegsLow8Bits[] = {
     891             :     0x00, 0x00, 0xc0, 0x03, 
     892             :   };
     893             : 
     894             :   // CtrRegs64_and_V62Regs Register Class...
     895             :   const MCPhysReg CtrRegs64_and_V62Regs[] = {
     896             :     Hexagon::C17_16, Hexagon::PKTCOUNT, Hexagon::UTIMER, 
     897             :   };
     898             : 
     899             :   // CtrRegs64_and_V62Regs Bit set.
     900             :   const uint8_t CtrRegs64_and_V62RegsBits[] = {
     901             :     0x40, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 
     902             :   };
     903             : 
     904             :   // CtrRegs64_with_isub_hi_in_ModRegs Register Class...
     905             :   const MCPhysReg CtrRegs64_with_isub_hi_in_ModRegs[] = {
     906             :     Hexagon::C7_6, 
     907             :   };
     908             : 
     909             :   // CtrRegs64_with_isub_hi_in_ModRegs Bit set.
     910             :   const uint8_t CtrRegs64_with_isub_hi_in_ModRegsBits[] = {
     911             :     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 
     912             :   };
     913             : 
     914             :   // VectorRegs Register Class...
     915             :   const MCPhysReg VectorRegs[] = {
     916             :     Hexagon::V0, Hexagon::V1, Hexagon::V2, Hexagon::V3, Hexagon::V4, Hexagon::V5, Hexagon::V6, Hexagon::V7, Hexagon::V8, Hexagon::V9, Hexagon::V10, Hexagon::V11, Hexagon::V12, Hexagon::V13, Hexagon::V14, Hexagon::V15, Hexagon::V16, Hexagon::V17, Hexagon::V18, Hexagon::V19, Hexagon::V20, Hexagon::V21, Hexagon::V22, Hexagon::V23, Hexagon::V24, Hexagon::V25, Hexagon::V26, Hexagon::V27, Hexagon::V28, Hexagon::V29, Hexagon::V30, Hexagon::V31, 
     917             :   };
     918             : 
     919             :   // VectorRegs Bit set.
     920             :   const uint8_t VectorRegsBits[] = {
     921             :     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0xff, 0xff, 0xff, 0x0f, 
     922             :   };
     923             : 
     924             :   // VecPredRegs Register Class...
     925             :   const MCPhysReg VecPredRegs[] = {
     926             :     Hexagon::Q0, Hexagon::Q1, Hexagon::Q2, Hexagon::Q3, 
     927             :   };
     928             : 
     929             :   // VecPredRegs Bit set.
     930             :   const uint8_t VecPredRegsBits[] = {
     931             :     0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x03, 
     932             :   };
     933             : 
     934             :   // VectorRegs128B Register Class...
     935             :   const MCPhysReg VectorRegs128B[] = {
     936             :     Hexagon::V0, Hexagon::V1, Hexagon::V2, Hexagon::V3, Hexagon::V4, Hexagon::V5, Hexagon::V6, Hexagon::V7, Hexagon::V8, Hexagon::V9, Hexagon::V10, Hexagon::V11, Hexagon::V12, Hexagon::V13, Hexagon::V14, Hexagon::V15, Hexagon::V16, Hexagon::V17, Hexagon::V18, Hexagon::V19, Hexagon::V20, Hexagon::V21, Hexagon::V22, Hexagon::V23, Hexagon::V24, Hexagon::V25, Hexagon::V26, Hexagon::V27, Hexagon::V28, Hexagon::V29, Hexagon::V30, Hexagon::V31, 
     937             :   };
     938             : 
     939             :   // VectorRegs128B Bit set.
     940             :   const uint8_t VectorRegs128BBits[] = {
     941             :     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0xff, 0xff, 0xff, 0x0f, 
     942             :   };
     943             : 
     944             :   // VecDblRegs Register Class...
     945             :   const MCPhysReg VecDblRegs[] = {
     946             :     Hexagon::W0, Hexagon::W1, Hexagon::W2, Hexagon::W3, Hexagon::W4, Hexagon::W5, Hexagon::W6, Hexagon::W7, Hexagon::W8, Hexagon::W9, Hexagon::W10, Hexagon::W11, Hexagon::W12, Hexagon::W13, Hexagon::W14, Hexagon::W15, 
     947             :   };
     948             : 
     949             :   // VecDblRegs Bit set.
     950             :   const uint8_t VecDblRegsBits[] = {
     951             :     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0xff, 0x0f, 
     952             :   };
     953             : 
     954             :   // VecPredRegs128B Register Class...
     955             :   const MCPhysReg VecPredRegs128B[] = {
     956             :     Hexagon::Q0, Hexagon::Q1, Hexagon::Q2, Hexagon::Q3, 
     957             :   };
     958             : 
     959             :   // VecPredRegs128B Bit set.
     960             :   const uint8_t VecPredRegs128BBits[] = {
     961             :     0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x03, 
     962             :   };
     963             : 
     964             :   // VecDblRegs128B Register Class...
     965             :   const MCPhysReg VecDblRegs128B[] = {
     966             :     Hexagon::W0, Hexagon::W1, Hexagon::W2, Hexagon::W3, Hexagon::W4, Hexagon::W5, Hexagon::W6, Hexagon::W7, Hexagon::W8, Hexagon::W9, Hexagon::W10, Hexagon::W11, Hexagon::W12, Hexagon::W13, Hexagon::W14, Hexagon::W15, 
     967             :   };
     968             : 
     969             :   // VecDblRegs128B Bit set.
     970             :   const uint8_t VecDblRegs128BBits[] = {
     971             :     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0xff, 0x0f, 
     972             :   };
     973             : 
     974             : } // end anonymous namespace
     975             : 
     976             : extern const char HexagonRegClassStrings[] = {
     977             :   /* 0 */ 'C', 't', 'r', 'R', 'e', 'g', 's', '6', '4', 0,
     978             :   /* 10 */ 'D', 'o', 'u', 'b', 'l', 'e', 'R', 'e', 'g', 's', '_', 'w', 'i', 't', 'h', '_', 'i', 's', 'u', 'b', '_', 'h', 'i', '_', 'i', 'n', '_', 'I', 'n', 't', 'R', 'e', 'g', 's', 'L', 'o', 'w', '8', 0,
     979             :   /* 49 */ 'V', 'e', 'c', 'P', 'r', 'e', 'd', 'R', 'e', 'g', 's', '1', '2', '8', 'B', 0,
     980             :   /* 65 */ 'V', 'e', 'c', 'D', 'b', 'l', 'R', 'e', 'g', 's', '1', '2', '8', 'B', 0,
     981             :   /* 80 */ 'V', 'e', 'c', 't', 'o', 'r', 'R', 'e', 'g', 's', '1', '2', '8', 'B', 0,
     982             :   /* 95 */ 'V', '6', '2', 'R', 'e', 'g', 's', '_', 'w', 'i', 't', 'h', '_', 'i', 's', 'u', 'b', '_', 'h', 'i', 0,
     983             :   /* 116 */ 'C', 't', 'r', 'R', 'e', 'g', 's', '6', '4', '_', 'a', 'n', 'd', '_', 'V', '6', '2', 'R', 'e', 'g', 's', 0,
     984             :   /* 138 */ 'C', 't', 'r', 'R', 'e', 'g', 's', '_', 'a', 'n', 'd', '_', 'V', '6', '2', 'R', 'e', 'g', 's', 0,
     985             :   /* 158 */ 'G', 'e', 'n', 'e', 'r', 'a', 'l', 'D', 'o', 'u', 'b', 'l', 'e', 'L', 'o', 'w', '8', 'R', 'e', 'g', 's', 0,
     986             :   /* 180 */ 'G', 'e', 'n', 'e', 'r', 'a', 'l', 'S', 'u', 'b', 'R', 'e', 'g', 's', 0,
     987             :   /* 195 */ 'V', 'e', 'c', 'P', 'r', 'e', 'd', 'R', 'e', 'g', 's', 0,
     988             :   /* 207 */ 'C', 't', 'r', 'R', 'e', 'g', 's', '6', '4', '_', 'w', 'i', 't', 'h', '_', 'i', 's', 'u', 'b', '_', 'h', 'i', '_', 'i', 'n', '_', 'M', 'o', 'd', 'R', 'e', 'g', 's', 0,
     989             :   /* 241 */ 'D', 'o', 'u', 'b', 'l', 'e', 'R', 'e', 'g', 's', 0,
     990             :   /* 252 */ 'V', 'e', 'c', 'D', 'b', 'l', 'R', 'e', 'g', 's', 0,
     991             :   /* 263 */ 'V', 'e', 'c', 't', 'o', 'r', 'R', 'e', 'g', 's', 0,
     992             :   /* 274 */ 'C', 't', 'r', 'R', 'e', 'g', 's', 0,
     993             :   /* 282 */ 'I', 'n', 't', 'R', 'e', 'g', 's', 0,
     994             :   /* 290 */ 'U', 's', 'r', 'B', 'i', 't', 's', 0,
     995             :   /* 298 */ 'C', 't', 'r', 'R', 'e', 'g', 's', '_', 'w', 'i', 't', 'h', '_', 's', 'u', 'b', 'r', 'e', 'g', '_', 'o', 'v', 'e', 'r', 'f', 'l', 'o', 'w', 0,
     996             : };
     997             : 
     998             : extern const MCRegisterClass HexagonMCRegisterClasses[] = {
     999             :   { UsrBits, UsrBitsBits, 290, 1, sizeof(UsrBitsBits), Hexagon::UsrBitsRegClassID, 0, 1, false },
    1000             :   { IntRegs, IntRegsBits, 282, 32, sizeof(IntRegsBits), Hexagon::IntRegsRegClassID, 4, 1, true },
    1001             :   { CtrRegs, CtrRegsBits, 274, 23, sizeof(CtrRegsBits), Hexagon::CtrRegsRegClassID, 4, 1, false },
    1002             :   { GeneralSubRegs, GeneralSubRegsBits, 180, 16, sizeof(GeneralSubRegsBits), Hexagon::GeneralSubRegsRegClassID, 4, 1, true },
    1003             :   { V62Regs, V62RegsBits, 130, 9, sizeof(V62RegsBits), Hexagon::V62RegsRegClassID, 4, 1, false },
    1004             :   { IntRegsLow8, IntRegsLow8Bits, 37, 8, sizeof(IntRegsLow8Bits), Hexagon::IntRegsLow8RegClassID, 4, 1, true },
    1005             :   { CtrRegs_and_V62Regs, CtrRegs_and_V62RegsBits, 138, 6, sizeof(CtrRegs_and_V62RegsBits), Hexagon::CtrRegs_and_V62RegsRegClassID, 4, 1, false },
    1006             :   { PredRegs, PredRegsBits, 198, 4, sizeof(PredRegsBits), Hexagon::PredRegsRegClassID, 4, 1, true },
    1007             :   { V62Regs_with_isub_hi, V62Regs_with_isub_hiBits, 95, 3, sizeof(V62Regs_with_isub_hiBits), Hexagon::V62Regs_with_isub_hiRegClassID, 4, 1, false },
    1008             :   { ModRegs, ModRegsBits, 233, 2, sizeof(ModRegsBits), Hexagon::ModRegsRegClassID, 4, 1, true },
    1009             :   { CtrRegs_with_subreg_overflow, CtrRegs_with_subreg_overflowBits, 298, 1, sizeof(CtrRegs_with_subreg_overflowBits), Hexagon::CtrRegs_with_subreg_overflowRegClassID, 4, 1, false },
    1010             :   { DoubleRegs, DoubleRegsBits, 241, 16, sizeof(DoubleRegsBits), Hexagon::DoubleRegsRegClassID, 8, 1, true },
    1011             :   { CtrRegs64, CtrRegs64Bits, 0, 11, sizeof(CtrRegs64Bits), Hexagon::CtrRegs64RegClassID, 8, 1, false },
    1012             :   { GeneralDoubleLow8Regs, GeneralDoubleLow8RegsBits, 158, 8, sizeof(GeneralDoubleLow8RegsBits), Hexagon::GeneralDoubleLow8RegsRegClassID, 8, 1, true },
    1013             :   { DoubleRegs_with_isub_hi_in_IntRegsLow8, DoubleRegs_with_isub_hi_in_IntRegsLow8Bits, 10, 4, sizeof(DoubleRegs_with_isub_hi_in_IntRegsLow8Bits), Hexagon::DoubleRegs_with_isub_hi_in_IntRegsLow8RegClassID, 8, 1, true },
    1014             :   { CtrRegs64_and_V62Regs, CtrRegs64_and_V62RegsBits, 116, 3, sizeof(CtrRegs64_and_V62RegsBits), Hexagon::CtrRegs64_and_V62RegsRegClassID, 8, 1, false },
    1015             :   { CtrRegs64_with_isub_hi_in_ModRegs, CtrRegs64_with_isub_hi_in_ModRegsBits, 207, 1, sizeof(CtrRegs64_with_isub_hi_in_ModRegsBits), Hexagon::CtrRegs64_with_isub_hi_in_ModRegsRegClassID, 8, 1, false },
    1016             :   { VectorRegs, VectorRegsBits, 263, 32, sizeof(VectorRegsBits), Hexagon::VectorRegsRegClassID, 64, 1, true },
    1017             :   { VecPredRegs, VecPredRegsBits, 195, 4, sizeof(VecPredRegsBits), Hexagon::VecPredRegsRegClassID, 64, 1, true },
    1018             :   { VectorRegs128B, VectorRegs128BBits, 80, 32, sizeof(VectorRegs128BBits), Hexagon::VectorRegs128BRegClassID, 128, 1, true },
    1019             :   { VecDblRegs, VecDblRegsBits, 252, 16, sizeof(VecDblRegsBits), Hexagon::VecDblRegsRegClassID, 128, 1, true },
    1020             :   { VecPredRegs128B, VecPredRegs128BBits, 49, 4, sizeof(VecPredRegs128BBits), Hexagon::VecPredRegs128BRegClassID, 128, 1, true },
    1021             :   { VecDblRegs128B, VecDblRegs128BBits, 65, 16, sizeof(VecDblRegs128BBits), Hexagon::VecDblRegs128BRegClassID, 256, 1, true },
    1022             : };
    1023             : 
    1024             : // Hexagon Dwarf<->LLVM register mappings.
    1025             : extern const MCRegisterInfo::DwarfLLVMRegPair HexagonDwarfFlavour0Dwarf2L[] = {
    1026             :   { 0U, Hexagon::R0 },
    1027             :   { 1U, Hexagon::R1 },
    1028             :   { 2U, Hexagon::R2 },
    1029             :   { 3U, Hexagon::R3 },
    1030             :   { 4U, Hexagon::R4 },
    1031             :   { 5U, Hexagon::R5 },
    1032             :   { 6U, Hexagon::R6 },
    1033             :   { 7U, Hexagon::R7 },
    1034             :   { 8U, Hexagon::R8 },
    1035             :   { 9U, Hexagon::R9 },
    1036             :   { 10U, Hexagon::R10 },
    1037             :   { 11U, Hexagon::R11 },
    1038             :   { 12U, Hexagon::R12 },
    1039             :   { 13U, Hexagon::R13 },
    1040             :   { 14U, Hexagon::R14 },
    1041             :   { 15U, Hexagon::R15 },
    1042             :   { 16U, Hexagon::R16 },
    1043             :   { 17U, Hexagon::R17 },
    1044             :   { 18U, Hexagon::R18 },
    1045             :   { 19U, Hexagon::R19 },
    1046             :   { 20U, Hexagon::R20 },
    1047             :   { 21U, Hexagon::R21 },
    1048             :   { 22U, Hexagon::R22 },
    1049             :   { 23U, Hexagon::R23 },
    1050             :   { 24U, Hexagon::R24 },
    1051             :   { 25U, Hexagon::R25 },
    1052             :   { 26U, Hexagon::R26 },
    1053             :   { 27U, Hexagon::R27 },
    1054             :   { 28U, Hexagon::R28 },
    1055             :   { 29U, Hexagon::R29 },
    1056             :   { 30U, Hexagon::R30 },
    1057             :   { 31U, Hexagon::R31 },
    1058             :   { 32U, Hexagon::D0 },
    1059             :   { 34U, Hexagon::D1 },
    1060             :   { 36U, Hexagon::D2 },
    1061             :   { 38U, Hexagon::D3 },
    1062             :   { 40U, Hexagon::D4 },
    1063             :   { 42U, Hexagon::D5 },
    1064             :   { 44U, Hexagon::D6 },
    1065             :   { 46U, Hexagon::D7 },
    1066             :   { 48U, Hexagon::D8 },
    1067             :   { 50U, Hexagon::D9 },
    1068             :   { 52U, Hexagon::D10 },
    1069             :   { 54U, Hexagon::D11 },
    1070             :   { 56U, Hexagon::D12 },
    1071             :   { 58U, Hexagon::D13 },
    1072             :   { 60U, Hexagon::D14 },
    1073             :   { 62U, Hexagon::D15 },
    1074             :   { 63U, Hexagon::P0 },
    1075             :   { 64U, Hexagon::P1 },
    1076             :   { 65U, Hexagon::P2 },
    1077             :   { 66U, Hexagon::P3 },
    1078             :   { 67U, Hexagon::C1_0 },
    1079             :   { 68U, Hexagon::LC0 },
    1080             :   { 69U, Hexagon::C3_2 },
    1081             :   { 70U, Hexagon::LC1 },
    1082             :   { 71U, Hexagon::P3_0 },
    1083             :   { 72U, Hexagon::C7_6 },
    1084             :   { 73U, Hexagon::M0 },
    1085             :   { 74U, Hexagon::C9_8 },
    1086             :   { 75U, Hexagon::C8 },
    1087             :   { 76U, Hexagon::C11_10 },
    1088             :   { 77U, Hexagon::UGP },
    1089             :   { 78U, Hexagon::GP },
    1090             :   { 79U, Hexagon::CS0 },
    1091             :   { 80U, Hexagon::CS1 },
    1092             :   { 81U, Hexagon::UPCYCLELO },
    1093             :   { 82U, Hexagon::UPCYCLEHI },
    1094             :   { 83U, Hexagon::C17_16 },
    1095             :   { 84U, Hexagon::FRAMEKEY },
    1096             :   { 85U, Hexagon::PKTCOUNTLO },
    1097             :   { 86U, Hexagon::PKTCOUNTHI },
    1098             :   { 97U, Hexagon::UTIMERLO },
    1099             :   { 98U, Hexagon::UTIMERHI },
    1100             :   { 99U, Hexagon::W0 },
    1101             :   { 100U, Hexagon::V1 },
    1102             :   { 101U, Hexagon::W1 },
    1103             :   { 102U, Hexagon::V3 },
    1104             :   { 103U, Hexagon::W2 },
    1105             :   { 104U, Hexagon::V5 },
    1106             :   { 105U, Hexagon::W3 },
    1107             :   { 106U, Hexagon::V7 },
    1108             :   { 107U, Hexagon::W4 },
    1109             :   { 108U, Hexagon::V9 },
    1110             :   { 109U, Hexagon::W5 },
    1111             :   { 110U, Hexagon::V11 },
    1112             :   { 111U, Hexagon::W6 },
    1113             :   { 112U, Hexagon::V13 },
    1114             :   { 113U, Hexagon::W7 },
    1115             :   { 114U, Hexagon::V15 },
    1116             :   { 115U, Hexagon::W8 },
    1117             :   { 116U, Hexagon::V17 },
    1118             :   { 117U, Hexagon::W9 },
    1119             :   { 118U, Hexagon::V19 },
    1120             :   { 119U, Hexagon::W10 },
    1121             :   { 120U, Hexagon::V21 },
    1122             :   { 121U, Hexagon::W11 },
    1123             :   { 122U, Hexagon::V23 },
    1124             :   { 123U, Hexagon::W12 },
    1125             :   { 124U, Hexagon::V25 },
    1126             :   { 125U, Hexagon::W13 },
    1127             :   { 126U, Hexagon::V27 },
    1128             :   { 127U, Hexagon::W14 },
    1129             :   { 128U, Hexagon::V29 },
    1130             :   { 129U, Hexagon::W15 },
    1131             :   { 130U, Hexagon::V31 },
    1132             :   { 131U, Hexagon::Q0 },
    1133             :   { 132U, Hexagon::Q1 },
    1134             :   { 133U, Hexagon::Q2 },
    1135             :   { 134U, Hexagon::Q3 },
    1136             : };
    1137             : extern const unsigned HexagonDwarfFlavour0Dwarf2LSize = array_lengthof(HexagonDwarfFlavour0Dwarf2L);
    1138             : 
    1139             : extern const MCRegisterInfo::DwarfLLVMRegPair HexagonEHFlavour0Dwarf2L[] = {
    1140             :   { 0U, Hexagon::R0 },
    1141             :   { 1U, Hexagon::R1 },
    1142             :   { 2U, Hexagon::R2 },
    1143             :   { 3U, Hexagon::R3 },
    1144             :   { 4U, Hexagon::R4 },
    1145             :   { 5U, Hexagon::R5 },
    1146             :   { 6U, Hexagon::R6 },
    1147             :   { 7U, Hexagon::R7 },
    1148             :   { 8U, Hexagon::R8 },
    1149             :   { 9U, Hexagon::R9 },
    1150             :   { 10U, Hexagon::R10 },
    1151             :   { 11U, Hexagon::R11 },
    1152             :   { 12U, Hexagon::R12 },
    1153             :   { 13U, Hexagon::R13 },
    1154             :   { 14U, Hexagon::R14 },
    1155             :   { 15U, Hexagon::R15 },
    1156             :   { 16U, Hexagon::R16 },
    1157             :   { 17U, Hexagon::R17 },
    1158             :   { 18U, Hexagon::R18 },
    1159             :   { 19U, Hexagon::R19 },
    1160             :   { 20U, Hexagon::R20 },
    1161             :   { 21U, Hexagon::R21 },
    1162             :   { 22U, Hexagon::R22 },
    1163             :   { 23U, Hexagon::R23 },
    1164             :   { 24U, Hexagon::R24 },
    1165             :   { 25U, Hexagon::R25 },
    1166             :   { 26U, Hexagon::R26 },
    1167             :   { 27U, Hexagon::R27 },
    1168             :   { 28U, Hexagon::R28 },
    1169             :   { 29U, Hexagon::R29 },
    1170             :   { 30U, Hexagon::R30 },
    1171             :   { 31U, Hexagon::R31 },
    1172             :   { 32U, Hexagon::D0 },
    1173             :   { 34U, Hexagon::D1 },
    1174             :   { 36U, Hexagon::D2 },
    1175             :   { 38U, Hexagon::D3 },
    1176             :   { 40U, Hexagon::D4 },
    1177             :   { 42U, Hexagon::D5 },
    1178             :   { 44U, Hexagon::D6 },
    1179             :   { 46U, Hexagon::D7 },
    1180             :   { 48U, Hexagon::D8 },
    1181             :   { 50U, Hexagon::D9 },
    1182             :   { 52U, Hexagon::D10 },
    1183             :   { 54U, Hexagon::D11 },
    1184             :   { 56U, Hexagon::D12 },
    1185             :   { 58U, Hexagon::D13 },
    1186             :   { 60U, Hexagon::D14 },
    1187             :   { 62U, Hexagon::D15 },
    1188             :   { 63U, Hexagon::P0 },
    1189             :   { 64U, Hexagon::P1 },
    1190             :   { 65U, Hexagon::P2 },
    1191             :   { 66U, Hexagon::P3 },
    1192             :   { 67U, Hexagon::C1_0 },
    1193             :   { 68U, Hexagon::LC0 },
    1194             :   { 69U, Hexagon::C3_2 },
    1195             :   { 70U, Hexagon::LC1 },
    1196             :   { 71U, Hexagon::P3_0 },
    1197             :   { 72U, Hexagon::C7_6 },
    1198             :   { 73U, Hexagon::M0 },
    1199             :   { 74U, Hexagon::C9_8 },
    1200             :   { 75U, Hexagon::C8 },
    1201             :   { 76U, Hexagon::C11_10 },
    1202             :   { 77U, Hexagon::UGP },
    1203             :   { 78U, Hexagon::GP },
    1204             :   { 79U, Hexagon::CS0 },
    1205             :   { 80U, Hexagon::CS1 },
    1206             :   { 81U, Hexagon::UPCYCLELO },
    1207             :   { 82U, Hexagon::UPCYCLEHI },
    1208             :   { 83U, Hexagon::C17_16 },
    1209             :   { 84U, Hexagon::FRAMEKEY },
    1210             :   { 85U, Hexagon::PKTCOUNTLO },
    1211             :   { 86U, Hexagon::PKTCOUNTHI },
    1212             :   { 97U, Hexagon::UTIMERLO },
    1213             :   { 98U, Hexagon::UTIMERHI },
    1214             :   { 99U, Hexagon::W0 },
    1215             :   { 100U, Hexagon::V1 },
    1216             :   { 101U, Hexagon::W1 },
    1217             :   { 102U, Hexagon::V3 },
    1218             :   { 103U, Hexagon::W2 },
    1219             :   { 104U, Hexagon::V5 },
    1220             :   { 105U, Hexagon::W3 },
    1221             :   { 106U, Hexagon::V7 },
    1222             :   { 107U, Hexagon::W4 },
    1223             :   { 108U, Hexagon::V9 },
    1224             :   { 109U, Hexagon::W5 },
    1225             :   { 110U, Hexagon::V11 },
    1226             :   { 111U, Hexagon::W6 },
    1227             :   { 112U, Hexagon::V13 },
    1228             :   { 113U, Hexagon::W7 },
    1229             :   { 114U, Hexagon::V15 },
    1230             :   { 115U, Hexagon::W8 },
    1231             :   { 116U, Hexagon::V17 },
    1232             :   { 117U, Hexagon::W9 },
    1233             :   { 118U, Hexagon::V19 },
    1234             :   { 119U, Hexagon::W10 },
    1235             :   { 120U, Hexagon::V21 },
    1236             :   { 121U, Hexagon::W11 },
    1237             :   { 122U, Hexagon::V23 },
    1238             :   { 123U, Hexagon::W12 },
    1239             :   { 124U, Hexagon::V25 },
    1240             :   { 125U, Hexagon::W13 },
    1241             :   { 126U, Hexagon::V27 },
    1242             :   { 127U, Hexagon::W14 },
    1243             :   { 128U, Hexagon::V29 },
    1244             :   { 129U, Hexagon::W15 },
    1245             :   { 130U, Hexagon::V31 },
    1246             :   { 131U, Hexagon::Q0 },
    1247             :   { 132U, Hexagon::Q1 },
    1248             :   { 133U, Hexagon::Q2 },
    1249             :   { 134U, Hexagon::Q3 },
    1250             : };
    1251             : extern const unsigned HexagonEHFlavour0Dwarf2LSize = array_lengthof(HexagonEHFlavour0Dwarf2L);
    1252             : 
    1253             : extern const MCRegisterInfo::DwarfLLVMRegPair HexagonDwarfFlavour0L2Dwarf[] = {
    1254             :   { Hexagon::CS, 78U },
    1255             :   { Hexagon::FRAMEKEY, 84U },
    1256             :   { Hexagon::FRAMELIMIT, 83U },
    1257             :   { Hexagon::GP, 78U },
    1258             :   { Hexagon::PC, 76U },
    1259             :   { Hexagon::PKTCOUNT, 85U },
    1260             :   { Hexagon::PKTCOUNTHI, 86U },
    1261             :   { Hexagon::PKTCOUNTLO, 85U },
    1262             :   { Hexagon::UGP, 77U },
    1263             :   { Hexagon::UPCYCLE, 80U },
    1264             :   { Hexagon::UPCYCLEHI, 82U },
    1265             :   { Hexagon::UPCYCLELO, 81U },
    1266             :   { Hexagon::USR, 75U },
    1267             :   { Hexagon::UTIMER, 97U },
    1268             :   { Hexagon::UTIMERHI, 98U },
    1269             :   { Hexagon::UTIMERLO, 97U },
    1270             :   { Hexagon::C5, 72U },
    1271             :   { Hexagon::C8, 75U },
    1272             :   { Hexagon::CS0, 79U },
    1273             :   { Hexagon::CS1, 80U },
    1274             :   { Hexagon::D0, 32U },
    1275             :   { Hexagon::D1, 34U },
    1276             :   { Hexagon::D2, 36U },
    1277             :   { Hexagon::D3, 38U },
    1278             :   { Hexagon::D4, 40U },
    1279             :   { Hexagon::D5, 42U },
    1280             :   { Hexagon::D6, 44U },
    1281             :   { Hexagon::D7, 46U },
    1282             :   { Hexagon::D8, 48U },
    1283             :   { Hexagon::D9, 50U },
    1284             :   { Hexagon::D10, 52U },
    1285             :   { Hexagon::D11, 54U },
    1286             :   { Hexagon::D12, 56U },
    1287             :   { Hexagon::D13, 58U },
    1288             :   { Hexagon::D14, 60U },
    1289             :   { Hexagon::D15, 62U },
    1290             :   { Hexagon::LC0, 68U },
    1291             :   { Hexagon::LC1, 70U },
    1292             :   { Hexagon::M0, 73U },
    1293             :   { Hexagon::M1, 74U },
    1294             :   { Hexagon::P0, 63U },
    1295             :   { Hexagon::P1, 64U },
    1296             :   { Hexagon::P2, 65U },
    1297             :   { Hexagon::P3, 66U },
    1298             :   { Hexagon::Q0, 131U },
    1299             :   { Hexagon::Q1, 132U },
    1300             :   { Hexagon::Q2, 133U },
    1301             :   { Hexagon::Q3, 134U },
    1302             :   { Hexagon::R0, 0U },
    1303             :   { Hexagon::R1, 1U },
    1304             :   { Hexagon::R2, 2U },
    1305             :   { Hexagon::R3, 3U },
    1306             :   { Hexagon::R4, 4U },
    1307             :   { Hexagon::R5, 5U },
    1308             :   { Hexagon::R6, 6U },
    1309             :   { Hexagon::R7, 7U },
    1310             :   { Hexagon::R8, 8U },
    1311             :   { Hexagon::R9, 9U },
    1312             :   { Hexagon::R10, 10U },
    1313             :   { Hexagon::R11, 11U },
    1314             :   { Hexagon::R12, 12U },
    1315             :   { Hexagon::R13, 13U },
    1316             :   { Hexagon::R14, 14U },
    1317             :   { Hexagon::R15, 15U },
    1318             :   { Hexagon::R16, 16U },
    1319             :   { Hexagon::R17, 17U },
    1320             :   { Hexagon::R18, 18U },
    1321             :   { Hexagon::R19, 19U },
    1322             :   { Hexagon::R20, 20U },
    1323             :   { Hexagon::R21, 21U },
    1324             :   { Hexagon::R22, 22U },
    1325             :   { Hexagon::R23, 23U },
    1326             :   { Hexagon::R24, 24U },
    1327             :   { Hexagon::R25, 25U },
    1328             :   { Hexagon::R26, 26U },
    1329             :   { Hexagon::R27, 27U },
    1330             :   { Hexagon::R28, 28U },
    1331             :   { Hexagon::R29, 29U },
    1332             :   { Hexagon::R30, 30U },
    1333             :   { Hexagon::R31, 31U },
    1334             :   { Hexagon::SA0, 67U },
    1335             :   { Hexagon::SA1, 69U },
    1336             :   { Hexagon::V0, 99U },
    1337             :   { Hexagon::V1, 100U },
    1338             :   { Hexagon::V2, 101U },
    1339             :   { Hexagon::V3, 102U },
    1340             :   { Hexagon::V4, 103U },
    1341             :   { Hexagon::V5, 104U },
    1342             :   { Hexagon::V6, 105U },
    1343             :   { Hexagon::V7, 106U },
    1344             :   { Hexagon::V8, 107U },
    1345             :   { Hexagon::V9, 108U },
    1346             :   { Hexagon::V10, 109U },
    1347             :   { Hexagon::V11, 110U },
    1348             :   { Hexagon::V12, 111U },
    1349             :   { Hexagon::V13, 112U },
    1350             :   { Hexagon::V14, 113U },
    1351             :   { Hexagon::V15, 114U },
    1352             :   { Hexagon::V16, 115U },
    1353             :   { Hexagon::V17, 116U },
    1354             :   { Hexagon::V18, 117U },
    1355             :   { Hexagon::V19, 118U },
    1356             :   { Hexagon::V20, 119U },
    1357             :   { Hexagon::V21, 120U },
    1358             :   { Hexagon::V22, 121U },
    1359             :   { Hexagon::V23, 122U },
    1360             :   { Hexagon::V24, 123U },
    1361             :   { Hexagon::V25, 124U },
    1362             :   { Hexagon::V26, 125U },
    1363             :   { Hexagon::V27, 126U },
    1364             :   { Hexagon::V28, 127U },
    1365             :   { Hexagon::V29, 128U },
    1366             :   { Hexagon::V30, 129U },
    1367             :   { Hexagon::V31, 130U },
    1368             :   { Hexagon::W0, 99U },
    1369             :   { Hexagon::W1, 101U },
    1370             :   { Hexagon::W2, 103U },
    1371             :   { Hexagon::W3, 105U },
    1372             :   { Hexagon::W4, 107U },
    1373             :   { Hexagon::W5, 109U },
    1374             :   { Hexagon::W6, 111U },
    1375             :   { Hexagon::W7, 113U },
    1376             :   { Hexagon::W8, 115U },
    1377             :   { Hexagon::W9, 117U },
    1378             :   { Hexagon::W10, 119U },
    1379             :   { Hexagon::W11, 121U },
    1380             :   { Hexagon::W12, 123U },
    1381             :   { Hexagon::W13, 125U },
    1382             :   { Hexagon::W14, 127U },
    1383             :   { Hexagon::W15, 129U },
    1384             :   { Hexagon::C1_0, 67U },
    1385             :   { Hexagon::C3_2, 69U },
    1386             :   { Hexagon::C5_4, 71U },
    1387             :   { Hexagon::C7_6, 72U },
    1388             :   { Hexagon::C9_8, 74U },
    1389             :   { Hexagon::C11_10, 76U },
    1390             :   { Hexagon::C17_16, 83U },
    1391             :   { Hexagon::P3_0, 71U },
    1392             : };
    1393             : extern const unsigned HexagonDwarfFlavour0L2DwarfSize = array_lengthof(HexagonDwarfFlavour0L2Dwarf);
    1394             : 
    1395             : extern const MCRegisterInfo::DwarfLLVMRegPair HexagonEHFlavour0L2Dwarf[] = {
    1396             :   { Hexagon::CS, 78U },
    1397             :   { Hexagon::FRAMEKEY, 84U },
    1398             :   { Hexagon::FRAMELIMIT, 83U },
    1399             :   { Hexagon::GP, 78U },
    1400             :   { Hexagon::PC, 76U },
    1401             :   { Hexagon::PKTCOUNT, 85U },
    1402             :   { Hexagon::PKTCOUNTHI, 86U },
    1403             :   { Hexagon::PKTCOUNTLO, 85U },
    1404             :   { Hexagon::UGP, 77U },
    1405             :   { Hexagon::UPCYCLE, 80U },
    1406             :   { Hexagon::UPCYCLEHI, 82U },
    1407             :   { Hexagon::UPCYCLELO, 81U },
    1408             :   { Hexagon::USR, 75U },
    1409             :   { Hexagon::UTIMER, 97U },
    1410             :   { Hexagon::UTIMERHI, 98U },
    1411             :   { Hexagon::UTIMERLO, 97U },
    1412             :   { Hexagon::C5, 72U },
    1413             :   { Hexagon::C8, 75U },
    1414             :   { Hexagon::CS0, 79U },
    1415             :   { Hexagon::CS1, 80U },
    1416             :   { Hexagon::D0, 32U },
    1417             :   { Hexagon::D1, 34U },
    1418             :   { Hexagon::D2, 36U },
    1419             :   { Hexagon::D3, 38U },
    1420             :   { Hexagon::D4, 40U },
    1421             :   { Hexagon::D5, 42U },
    1422             :   { Hexagon::D6, 44U },
    1423             :   { Hexagon::D7, 46U },
    1424             :   { Hexagon::D8, 48U },
    1425             :   { Hexagon::D9, 50U },
    1426             :   { Hexagon::D10, 52U },
    1427             :   { Hexagon::D11, 54U },
    1428             :   { Hexagon::D12, 56U },
    1429             :   { Hexagon::D13, 58U },
    1430             :   { Hexagon::D14, 60U },
    1431             :   { Hexagon::D15, 62U },
    1432             :   { Hexagon::LC0, 68U },
    1433             :   { Hexagon::LC1, 70U },
    1434             :   { Hexagon::M0, 73U },
    1435             :   { Hexagon::M1, 74U },
    1436             :   { Hexagon::P0, 63U },
    1437             :   { Hexagon::P1, 64U },
    1438             :   { Hexagon::P2, 65U },
    1439             :   { Hexagon::P3, 66U },
    1440             :   { Hexagon::Q0, 131U },
    1441             :   { Hexagon::Q1, 132U },
    1442             :   { Hexagon::Q2, 133U },
    1443             :   { Hexagon::Q3, 134U },
    1444             :   { Hexagon::R0, 0U },
    1445             :   { Hexagon::R1, 1U },
    1446             :   { Hexagon::R2, 2U },
    1447             :   { Hexagon::R3, 3U },
    1448             :   { Hexagon::R4, 4U },
    1449             :   { Hexagon::R5, 5U },
    1450             :   { Hexagon::R6, 6U },
    1451             :   { Hexagon::R7, 7U },
    1452             :   { Hexagon::R8, 8U },
    1453             :   { Hexagon::R9, 9U },
    1454             :   { Hexagon::R10, 10U },
    1455             :   { Hexagon::R11, 11U },
    1456             :   { Hexagon::R12, 12U },
    1457             :   { Hexagon::R13, 13U },
    1458             :   { Hexagon::R14, 14U },
    1459             :   { Hexagon::R15, 15U },
    1460             :   { Hexagon::R16, 16U },
    1461             :   { Hexagon::R17, 17U },
    1462             :   { Hexagon::R18, 18U },
    1463             :   { Hexagon::R19, 19U },
    1464             :   { Hexagon::R20, 20U },
    1465             :   { Hexagon::R21, 21U },
    1466             :   { Hexagon::R22, 22U },
    1467             :   { Hexagon::R23, 23U },
    1468             :   { Hexagon::R24, 24U },
    1469             :   { Hexagon::R25, 25U },
    1470             :   { Hexagon::R26, 26U },
    1471             :   { Hexagon::R27, 27U },
    1472             :   { Hexagon::R28, 28U },
    1473             :   { Hexagon::R29, 29U },
    1474             :   { Hexagon::R30, 30U },
    1475             :   { Hexagon::R31, 31U },
    1476             :   { Hexagon::SA0, 67U },
    1477             :   { Hexagon::SA1, 69U },
    1478             :   { Hexagon::V0, 99U },
    1479             :   { Hexagon::V1, 100U },
    1480             :   { Hexagon::V2, 101U },
    1481             :   { Hexagon::V3, 102U },
    1482             :   { Hexagon::V4, 103U },
    1483             :   { Hexagon::V5, 104U },
    1484             :   { Hexagon::V6, 105U },
    1485             :   { Hexagon::V7, 106U },
    1486             :   { Hexagon::V8, 107U },
    1487             :   { Hexagon::V9, 108U },
    1488             :   { Hexagon::V10, 109U },
    1489             :   { Hexagon::V11, 110U },
    1490             :   { Hexagon::V12, 111U },
    1491             :   { Hexagon::V13, 112U },
    1492             :   { Hexagon::V14, 113U },
    1493             :   { Hexagon::V15, 114U },
    1494             :   { Hexagon::V16, 115U },
    1495             :   { Hexagon::V17, 116U },
    1496             :   { Hexagon::V18, 117U },
    1497             :   { Hexagon::V19, 118U },
    1498             :   { Hexagon::V20, 119U },
    1499             :   { Hexagon::V21, 120U },
    1500             :   { Hexagon::V22, 121U },
    1501             :   { Hexagon::V23, 122U },
    1502             :   { Hexagon::V24, 123U },
    1503             :   { Hexagon::V25, 124U },
    1504             :   { Hexagon::V26, 125U },
    1505             :   { Hexagon::V27, 126U },
    1506             :   { Hexagon::V28, 127U },
    1507             :   { Hexagon::V29, 128U },
    1508             :   { Hexagon::V30, 129U },
    1509             :   { Hexagon::V31, 130U },
    1510             :   { Hexagon::W0, 99U },
    1511             :   { Hexagon::W1, 101U },
    1512             :   { Hexagon::W2, 103U },
    1513             :   { Hexagon::W3, 105U },
    1514             :   { Hexagon::W4, 107U },
    1515             :   { Hexagon::W5, 109U },
    1516             :   { Hexagon::W6, 111U },
    1517             :   { Hexagon::W7, 113U },
    1518             :   { Hexagon::W8, 115U },
    1519             :   { Hexagon::W9, 117U },
    1520             :   { Hexagon::W10, 119U },
    1521             :   { Hexagon::W11, 121U },
    1522             :   { Hexagon::W12, 123U },
    1523             :   { Hexagon::W13, 125U },
    1524             :   { Hexagon::W14, 127U },
    1525             :   { Hexagon::W15, 129U },
    1526             :   { Hexagon::C1_0, 67U },
    1527             :   { Hexagon::C3_2, 69U },
    1528             :   { Hexagon::C5_4, 71U },
    1529             :   { Hexagon::C7_6, 72U },
    1530             :   { Hexagon::C9_8, 74U },
    1531             :   { Hexagon::C11_10, 76U },
    1532             :   { Hexagon::C17_16, 83U },
    1533             :   { Hexagon::P3_0, 71U },
    1534             : };
    1535             : extern const unsigned HexagonEHFlavour0L2DwarfSize = array_lengthof(HexagonEHFlavour0L2Dwarf);
    1536             : 
    1537             : extern const uint16_t HexagonRegEncodingTable[] = {
    1538             :   0,
    1539             :   12,
    1540             :   17,
    1541             :   16,
    1542             :   11,
    1543             :   9,
    1544             :   18,
    1545             :   19,
    1546             :   18,
    1547             :   10,
    1548             :   14,
    1549             :   15,
    1550             :   14,
    1551             :   8,
    1552             :   0,
    1553             :   30,
    1554             :   31,
    1555             :   30,
    1556             :   5,
    1557             :   8,
    1558             :   12,
    1559             :   13,
    1560             :   0,
    1561             :   2,
    1562             :   4,
    1563             :   6,
    1564             :   8,
    1565             :   10,
    1566             :   12,
    1567             :   14,
    1568             :   16,
    1569             :   18,
    1570             :   20,
    1571             :   22,
    1572             :   24,
    1573             :   26,
    1574             :   28,
    1575             :   30,
    1576             :   1,
    1577             :   3,
    1578             :   6,
    1579             :   7,
    1580             :   0,
    1581             :   1,
    1582             :   2,
    1583             :   3,
    1584             :   0,
    1585             :   1,
    1586             :   2,
    1587             :   3,
    1588             :   0,
    1589             :   1,
    1590             :   2,
    1591             :   3,
    1592             :   4,
    1593             :   5,
    1594             :   6,
    1595             :   7,
    1596             :   8,
    1597             :   9,
    1598             :   10,
    1599             :   11,
    1600             :   12,
    1601             :   13,
    1602             :   14,
    1603             :   15,
    1604             :   16,
    1605             :   17,
    1606             :   18,
    1607             :   19,
    1608             :   20,
    1609             :   21,
    1610             :   22,
    1611             :   23,
    1612             :   24,
    1613             :   25,
    1614             :   26,
    1615             :   27,
    1616             :   28,
    1617             :   29,
    1618             :   30,
    1619             :   31,
    1620             :   0,
    1621             :   2,
    1622             :   0,
    1623             :   1,
    1624             :   2,
    1625             :   3,
    1626             :   4,
    1627             :   5,
    1628             :   6,
    1629             :   7,
    1630             :   8,
    1631             :   9,
    1632             :   10,
    1633             :   11,
    1634             :   12,
    1635             :   13,
    1636             :   14,
    1637             :   15,
    1638             :   16,
    1639             :   17,
    1640             :   18,
    1641             :   19,
    1642             :   20,
    1643             :   21,
    1644             :   22,
    1645             :   23,
    1646             :   24,
    1647             :   25,
    1648             :   26,
    1649             :   27,
    1650             :   28,
    1651             :   29,
    1652             :   30,
    1653             :   31,
    1654             :   0,
    1655             :   2,
    1656             :   4,
    1657             :   6,
    1658             :   8,
    1659             :   10,
    1660             :   12,
    1661             :   14,
    1662             :   16,
    1663             :   18,
    1664             :   20,
    1665             :   22,
    1666             :   24,
    1667             :   26,
    1668             :   28,
    1669             :   30,
    1670             :   0,
    1671             :   2,
    1672             :   4,
    1673             :   6,
    1674             :   8,
    1675             :   10,
    1676             :   16,
    1677             :   4,
    1678             : };
    1679             : static inline void InitHexagonMCRegisterInfo(MCRegisterInfo *RI, unsigned RA, unsigned DwarfFlavour = 0, unsigned EHFlavour = 0, unsigned PC = 0) {
    1680         704 :   RI->InitMCRegisterInfo(HexagonRegDesc, 140, RA, PC, HexagonMCRegisterClasses, 23, HexagonRegUnitRoots, 94, HexagonRegDiffLists, HexagonLaneMaskLists, HexagonRegStrings, HexagonRegClassStrings, HexagonSubRegIdxLists, 6,
    1681             : HexagonSubRegIdxRanges, HexagonRegEncodingTable);
    1682             : 
    1683             :   switch (DwarfFlavour) {
    1684             :   default:
    1685             :     llvm_unreachable("Unknown DWARF flavour");
    1686         704 :   case 0:
    1687         704 :     RI->mapDwarfRegsToLLVMRegs(HexagonDwarfFlavour0Dwarf2L, HexagonDwarfFlavour0Dwarf2LSize, false);
    1688             :     break;
    1689             :   }
    1690             :   switch (EHFlavour) {
    1691             :   default:
    1692             :     llvm_unreachable("Unknown DWARF flavour");
    1693         704 :   case 0:
    1694         704 :     RI->mapDwarfRegsToLLVMRegs(HexagonEHFlavour0Dwarf2L, HexagonEHFlavour0Dwarf2LSize, true);
    1695             :     break;
    1696             :   }
    1697             :   switch (DwarfFlavour) {
    1698             :   default:
    1699             :     llvm_unreachable("Unknown DWARF flavour");
    1700         704 :   case 0:
    1701         704 :     RI->mapLLVMRegsToDwarfRegs(HexagonDwarfFlavour0L2Dwarf, HexagonDwarfFlavour0L2DwarfSize, false);
    1702             :     break;
    1703             :   }
    1704             :   switch (EHFlavour) {
    1705             :   default:
    1706             :     llvm_unreachable("Unknown DWARF flavour");
    1707         704 :   case 0:
    1708         704 :     RI->mapLLVMRegsToDwarfRegs(HexagonEHFlavour0L2Dwarf, HexagonEHFlavour0L2DwarfSize, true);
    1709             :     break;
    1710             :   }
    1711             : }
    1712             : 
    1713             : } // end namespace llvm
    1714             : 
    1715             : #endif // GET_REGINFO_MC_DESC
    1716             : 
    1717             : /*===- TableGen'erated file -------------------------------------*- C++ -*-===*\
    1718             : |*                                                                            *|
    1719             : |* Register Information Header Fragment                                       *|
    1720             : |*                                                                            *|
    1721             : |* Automatically generated file, do not edit!                                 *|
    1722             : |*                                                                            *|
    1723             : \*===----------------------------------------------------------------------===*/
    1724             : 
    1725             : 
    1726             : #ifdef GET_REGINFO_HEADER
    1727             : #undef GET_REGINFO_HEADER
    1728             : 
    1729             : #include "llvm/Target/TargetRegisterInfo.h"
    1730             : 
    1731             : namespace llvm {
    1732             : 
    1733             : class HexagonFrameLowering;
    1734             : 
    1735         478 : struct HexagonGenRegisterInfo : public TargetRegisterInfo {
    1736             :   explicit HexagonGenRegisterInfo(unsigned RA, unsigned D = 0, unsigned E = 0, unsigned PC = 0);
    1737             :   unsigned composeSubRegIndicesImpl(unsigned, unsigned) const override;
    1738             :   LaneBitmask composeSubRegIndexLaneMaskImpl(unsigned, LaneBitmask) const override;
    1739             :   LaneBitmask reverseComposeSubRegIndexLaneMaskImpl(unsigned, LaneBitmask) const override;
    1740             :   const TargetRegisterClass *getSubClassWithSubReg(const TargetRegisterClass*, unsigned) const override;
    1741             :   const RegClassWeight &getRegClassWeight(const TargetRegisterClass *RC) const override;
    1742             :   unsigned getRegUnitWeight(unsigned RegUnit) const override;
    1743             :   unsigned getNumRegPressureSets() const override;
    1744             :   const char *getRegPressureSetName(unsigned Idx) const override;
    1745             :   unsigned getRegPressureSetLimit(const MachineFunction &MF, unsigned Idx) const override;
    1746             :   const int *getRegClassPressureSets(const TargetRegisterClass *RC) const override;
    1747             :   const int *getRegUnitPressureSets(unsigned RegUnit) const override;
    1748             :   ArrayRef<const char *> getRegMaskNames() const override;
    1749             :   ArrayRef<const uint32_t *> getRegMasks() const override;
    1750             :   /// Devirtualized TargetFrameLowering.
    1751             :   static const HexagonFrameLowering *getFrameLowering(
    1752             :       const MachineFunction &MF);
    1753             : };
    1754             : 
    1755             : namespace Hexagon { // Register classes
    1756             :   extern const TargetRegisterClass UsrBitsRegClass;
    1757             :   extern const TargetRegisterClass IntRegsRegClass;
    1758             :   extern const TargetRegisterClass CtrRegsRegClass;
    1759             :   extern const TargetRegisterClass GeneralSubRegsRegClass;
    1760             :   extern const TargetRegisterClass V62RegsRegClass;
    1761             :   extern const TargetRegisterClass IntRegsLow8RegClass;
    1762             :   extern const TargetRegisterClass CtrRegs_and_V62RegsRegClass;
    1763             :   extern const TargetRegisterClass PredRegsRegClass;
    1764             :   extern const TargetRegisterClass V62Regs_with_isub_hiRegClass;
    1765             :   extern const TargetRegisterClass ModRegsRegClass;
    1766             :   extern const TargetRegisterClass CtrRegs_with_subreg_overflowRegClass;
    1767             :   extern const TargetRegisterClass DoubleRegsRegClass;
    1768             :   extern const TargetRegisterClass CtrRegs64RegClass;
    1769             :   extern const TargetRegisterClass GeneralDoubleLow8RegsRegClass;
    1770             :   extern const TargetRegisterClass DoubleRegs_with_isub_hi_in_IntRegsLow8RegClass;
    1771             :   extern const TargetRegisterClass CtrRegs64_and_V62RegsRegClass;
    1772             :   extern const TargetRegisterClass CtrRegs64_with_isub_hi_in_ModRegsRegClass;
    1773             :   extern const TargetRegisterClass VectorRegsRegClass;
    1774             :   extern const TargetRegisterClass VecPredRegsRegClass;
    1775             :   extern const TargetRegisterClass VectorRegs128BRegClass;
    1776             :   extern const TargetRegisterClass VecDblRegsRegClass;
    1777             :   extern const TargetRegisterClass VecPredRegs128BRegClass;
    1778             :   extern const TargetRegisterClass VecDblRegs128BRegClass;
    1779             : } // end namespace Hexagon
    1780             : 
    1781             : } // end namespace llvm
    1782             : 
    1783             : #endif // GET_REGINFO_HEADER
    1784             : 
    1785             : /*===- TableGen'erated file -------------------------------------*- C++ -*-===*\
    1786             : |*                                                                            *|
    1787             : |* Target Register and Register Classes Information                           *|
    1788             : |*                                                                            *|
    1789             : |* Automatically generated file, do not edit!                                 *|
    1790             : |*                                                                            *|
    1791             : \*===----------------------------------------------------------------------===*/
    1792             : 
    1793             : 
    1794             : #ifdef GET_REGINFO_TARGET_DESC
    1795             : #undef GET_REGINFO_TARGET_DESC
    1796             : 
    1797             : namespace llvm {
    1798             : 
    1799             : extern const MCRegisterClass HexagonMCRegisterClasses[];
    1800             : 
    1801             : static const MVT::SimpleValueType VTLists[] = {
    1802             :   /* 0 */ MVT::i1, MVT::Other,
    1803             :   /* 2 */ MVT::i1, MVT::v2i1, MVT::v4i1, MVT::v8i1, MVT::v4i8, MVT::v2i16, MVT::i32, MVT::Other,
    1804             :   /* 10 */ MVT::i64, MVT::Other,
    1805             :   /* 12 */ MVT::v512i1, MVT::Other,
    1806             :   /* 14 */ MVT::v1024i1, MVT::Other,
    1807             :   /* 16 */ MVT::i32, MVT::f32, MVT::v4i8, MVT::v2i16, MVT::Other,
    1808             :   /* 21 */ MVT::i64, MVT::f64, MVT::v8i8, MVT::v4i16, MVT::v2i32, MVT::Other,
    1809             :   /* 27 */ MVT::v64i8, MVT::v32i16, MVT::v16i32, MVT::v8i64, MVT::Other,
    1810             :   /* 32 */ MVT::v128i8, MVT::v64i16, MVT::v32i32, MVT::v16i64, MVT::Other,
    1811             :   /* 37 */ MVT::v256i8, MVT::v128i16, MVT::v64i32, MVT::v32i64, MVT::Other,
    1812             : };
    1813             : 
    1814             : static const char *const SubRegIndexNameTable[] = { "isub_hi", "isub_lo", "subreg_overflow", "vsub_hi", "vsub_lo", "" };
    1815             : 
    1816             : 
    1817             : static const LaneBitmask SubRegIndexLaneMaskTable[] = {
    1818             :   LaneBitmask::getAll(),
    1819             :   LaneBitmask(0x00000001), // isub_hi
    1820             :   LaneBitmask(0x00000002), // isub_lo
    1821             :   LaneBitmask(0x00000004), // subreg_overflow
    1822             :   LaneBitmask(0x00000008), // vsub_hi
    1823             :   LaneBitmask(0x00000010), // vsub_lo
    1824       72306 :  };
    1825             : 
    1826             : 
    1827             : 
    1828             : static const TargetRegisterClass *const NullRegClasses[] = { nullptr };
    1829             : 
    1830             : static const uint32_t UsrBitsSubClassMask[] = {
    1831             :   0x00000001, 
    1832             :   0x00000400, // subreg_overflow
    1833             : };
    1834             : 
    1835             : static const uint32_t IntRegsSubClassMask[] = {
    1836             :   0x0000002a, 
    1837             :   0x00006800, // isub_hi
    1838             :   0x00006800, // isub_lo
    1839             : };
    1840             : 
    1841             : static const uint32_t CtrRegsSubClassMask[] = {
    1842             :   0x00000644, 
    1843             :   0x00019100, // isub_hi
    1844             :   0x00019100, // isub_lo
    1845             : };
    1846             : 
    1847             : static const uint32_t GeneralSubRegsSubClassMask[] = {
    1848             :   0x00000028, 
    1849             :   0x00006000, // isub_hi
    1850             :   0x00006000, // isub_lo
    1851             : };
    1852             : 
    1853             : static const uint32_t V62RegsSubClassMask[] = {
    1854             :   0x00008150, 
    1855             :   0x00008100, // isub_hi
    1856             :   0x00008100, // isub_lo
    1857             : };
    1858             : 
    1859             : static const uint32_t IntRegsLow8SubClassMask[] = {
    1860             :   0x00000020, 
    1861             :   0x00004000, // isub_hi
    1862             :   0x00004000, // isub_lo
    1863             : };
    1864             : 
    1865             : static const uint32_t CtrRegs_and_V62RegsSubClassMask[] = {
    1866             :   0x00000040, 
    1867             :   0x00008100, // isub_hi
    1868             :   0x00008100, // isub_lo
    1869             : };
    1870             : 
    1871             : static const uint32_t PredRegsSubClassMask[] = {
    1872             :   0x00000080, 
    1873             : };
    1874             : 
    1875             : static const uint32_t V62Regs_with_isub_hiSubClassMask[] = {
    1876             :   0x00008100, 
    1877             : };
    1878             : 
    1879             : static const uint32_t ModRegsSubClassMask[] = {
    1880             :   0x00000200, 
    1881             :   0x00010000, // isub_hi
    1882             :   0x00010000, // isub_lo
    1883             : };
    1884             : 
    1885             : static const uint32_t CtrRegs_with_subreg_overflowSubClassMask[] = {
    1886             :   0x00000400, 
    1887             : };
    1888             : 
    1889             : static const uint32_t DoubleRegsSubClassMask[] = {
    1890             :   0x00006800, 
    1891             : };
    1892             : 
    1893             : static const uint32_t CtrRegs64SubClassMask[] = {
    1894             :   0x00019000, 
    1895             : };
    1896             : 
    1897             : static const uint32_t GeneralDoubleLow8RegsSubClassMask[] = {
    1898             :   0x00006000, 
    1899             : };
    1900             : 
    1901             : static const uint32_t DoubleRegs_with_isub_hi_in_IntRegsLow8SubClassMask[] = {
    1902             :   0x00004000, 
    1903             : };
    1904             : 
    1905             : static const uint32_t CtrRegs64_and_V62RegsSubClassMask[] = {
    1906             :   0x00008000, 
    1907             : };
    1908             : 
    1909             : static const uint32_t CtrRegs64_with_isub_hi_in_ModRegsSubClassMask[] = {
    1910             :   0x00010000, 
    1911             : };
    1912             : 
    1913             : static const uint32_t VectorRegsSubClassMask[] = {
    1914             :   0x000a0000, 
    1915             :   0x00500000, // vsub_hi
    1916             :   0x00500000, // vsub_lo
    1917             : };
    1918             : 
    1919             : static const uint32_t VecPredRegsSubClassMask[] = {
    1920             :   0x00240000, 
    1921             : };
    1922             : 
    1923             : static const uint32_t VectorRegs128BSubClassMask[] = {
    1924             :   0x00080000, 
    1925             :   0x00500000, // vsub_hi
    1926             :   0x00500000, // vsub_lo
    1927             : };
    1928             : 
    1929             : static const uint32_t VecDblRegsSubClassMask[] = {
    1930             :   0x00500000, 
    1931             : };
    1932             : 
    1933             : static const uint32_t VecPredRegs128BSubClassMask[] = {
    1934             :   0x00200000, 
    1935             : };
    1936             : 
    1937             : static const uint32_t VecDblRegs128BSubClassMask[] = {
    1938             :   0x00400000, 
    1939             : };
    1940             : 
    1941             : static const uint16_t SuperRegIdxSeqs[] = {
    1942             :   /* 0 */ 1, 2, 0,
    1943             :   /* 3 */ 3, 0,
    1944             :   /* 5 */ 4, 5, 0,
    1945             : };
    1946             : 
    1947             : static const TargetRegisterClass *const GeneralSubRegsSuperclasses[] = {
    1948             :   &Hexagon::IntRegsRegClass,
    1949             :   nullptr
    1950             : };
    1951             : 
    1952             : static const TargetRegisterClass *const IntRegsLow8Superclasses[] = {
    1953             :   &Hexagon::IntRegsRegClass,
    1954             :   &Hexagon::GeneralSubRegsRegClass,
    1955             :   nullptr
    1956             : };
    1957             : 
    1958             : static const TargetRegisterClass *const CtrRegs_and_V62RegsSuperclasses[] = {
    1959             :   &Hexagon::CtrRegsRegClass,
    1960             :   &Hexagon::V62RegsRegClass,
    1961             :   nullptr
    1962             : };
    1963             : 
    1964             : static const TargetRegisterClass *const V62Regs_with_isub_hiSuperclasses[] = {
    1965             :   &Hexagon::V62RegsRegClass,
    1966             :   nullptr
    1967             : };
    1968             : 
    1969             : static const TargetRegisterClass *const ModRegsSuperclasses[] = {
    1970             :   &Hexagon::CtrRegsRegClass,
    1971             :   nullptr
    1972             : };
    1973             : 
    1974             : static const TargetRegisterClass *const CtrRegs_with_subreg_overflowSuperclasses[] = {
    1975             :   &Hexagon::CtrRegsRegClass,
    1976             :   nullptr
    1977             : };
    1978             : 
    1979             : static const TargetRegisterClass *const GeneralDoubleLow8RegsSuperclasses[] = {
    1980             :   &Hexagon::DoubleRegsRegClass,
    1981             :   nullptr
    1982             : };
    1983             : 
    1984             : static const TargetRegisterClass *const DoubleRegs_with_isub_hi_in_IntRegsLow8Superclasses[] = {
    1985             :   &Hexagon::DoubleRegsRegClass,
    1986             :   &Hexagon::GeneralDoubleLow8RegsRegClass,
    1987             :   nullptr
    1988             : };
    1989             : 
    1990             : static const TargetRegisterClass *const CtrRegs64_and_V62RegsSuperclasses[] = {
    1991             :   &Hexagon::V62RegsRegClass,
    1992             :   &Hexagon::V62Regs_with_isub_hiRegClass,
    1993             :   &Hexagon::CtrRegs64RegClass,
    1994             :   nullptr
    1995             : };
    1996             : 
    1997             : static const TargetRegisterClass *const CtrRegs64_with_isub_hi_in_ModRegsSuperclasses[] = {
    1998             :   &Hexagon::CtrRegs64RegClass,
    1999             :   nullptr
    2000             : };
    2001             : 
    2002             : static const TargetRegisterClass *const VectorRegs128BSuperclasses[] = {
    2003             :   &Hexagon::VectorRegsRegClass,
    2004             :   nullptr
    2005             : };
    2006             : 
    2007             : static const TargetRegisterClass *const VecPredRegs128BSuperclasses[] = {
    2008             :   &Hexagon::VecPredRegsRegClass,
    2009             :   nullptr
    2010             : };
    2011             : 
    2012             : static const TargetRegisterClass *const VecDblRegs128BSuperclasses[] = {
    2013             :   &Hexagon::VecDblRegsRegClass,
    2014             :   nullptr
    2015             : };
    2016             : 
    2017             : 
    2018             : namespace Hexagon {   // Register class instances
    2019             :   extern const TargetRegisterClass UsrBitsRegClass = {
    2020             :     &HexagonMCRegisterClasses[UsrBitsRegClassID],
    2021             :     0, /* SpillSize */
    2022             :     0, /* SpillAlignment */
    2023             :     VTLists + 0,
    2024             :     UsrBitsSubClassMask,
    2025             :     SuperRegIdxSeqs + 3,
    2026             :     LaneBitmask(0x00000001),
    2027             :     0,
    2028             :     false, /* HasDisjunctSubRegs */
    2029             :     false, /* CoveredBySubRegs */
    2030             :     NullRegClasses,
    2031             :     nullptr
    2032             :   };
    2033             : 
    2034             :   extern const TargetRegisterClass IntRegsRegClass = {
    2035             :     &HexagonMCRegisterClasses[IntRegsRegClassID],
    2036             :     4, /* SpillSize */
    2037             :     4, /* SpillAlignment */
    2038             :     VTLists + 16,
    2039             :     IntRegsSubClassMask,
    2040             :     SuperRegIdxSeqs + 0,
    2041             :     LaneBitmask(0x00000001),
    2042             :     0,
    2043             :     false, /* HasDisjunctSubRegs */
    2044             :     false, /* CoveredBySubRegs */
    2045             :     NullRegClasses,
    2046             :     nullptr
    2047             :   };
    2048             : 
    2049             :   extern const TargetRegisterClass CtrRegsRegClass = {
    2050             :     &HexagonMCRegisterClasses[CtrRegsRegClassID],
    2051             :     4, /* SpillSize */
    2052             :     4, /* SpillAlignment */
    2053             :     VTLists + 8,
    2054             :     CtrRegsSubClassMask,
    2055             :     SuperRegIdxSeqs + 0,
    2056             :     LaneBitmask(0x00000004),
    2057             :     0,
    2058             :     false, /* HasDisjunctSubRegs */
    2059             :     false, /* CoveredBySubRegs */
    2060             :     NullRegClasses,
    2061             :     nullptr
    2062             :   };
    2063             : 
    2064             :   extern const TargetRegisterClass GeneralSubRegsRegClass = {
    2065             :     &HexagonMCRegisterClasses[GeneralSubRegsRegClassID],
    2066             :     4, /* SpillSize */
    2067             :     4, /* SpillAlignment */
    2068             :     VTLists + 8,
    2069             :     GeneralSubRegsSubClassMask,
    2070             :     SuperRegIdxSeqs + 0,
    2071             :     LaneBitmask(0x00000001),
    2072             :     0,
    2073             :     false, /* HasDisjunctSubRegs */
    2074             :     false, /* CoveredBySubRegs */
    2075             :     GeneralSubRegsSuperclasses,
    2076             :     nullptr
    2077             :   };
    2078             : 
    2079             :   extern const TargetRegisterClass V62RegsRegClass = {
    2080             :     &HexagonMCRegisterClasses[V62RegsRegClassID],
    2081             :     4, /* SpillSize */
    2082             :     4, /* SpillAlignment */
    2083             :     VTLists + 8,
    2084             :     V62RegsSubClassMask,
    2085             :     SuperRegIdxSeqs + 0,
    2086             :     LaneBitmask(0x00000003),
    2087             :     0,
    2088             :     true, /* HasDisjunctSubRegs */
    2089             :     false, /* CoveredBySubRegs */
    2090             :     NullRegClasses,
    2091             :     nullptr
    2092             :   };
    2093             : 
    2094             :   extern const TargetRegisterClass IntRegsLow8RegClass = {
    2095             :     &HexagonMCRegisterClasses[IntRegsLow8RegClassID],
    2096             :     4, /* SpillSize */
    2097             :     4, /* SpillAlignment */
    2098             :     VTLists + 8,
    2099             :     IntRegsLow8SubClassMask,
    2100             :     SuperRegIdxSeqs + 0,
    2101             :     LaneBitmask(0x00000001),
    2102             :     0,
    2103             :     false, /* HasDisjunctSubRegs */
    2104             :     false, /* CoveredBySubRegs */
    2105             :     IntRegsLow8Superclasses,
    2106             :     nullptr
    2107             :   };
    2108             : 
    2109             :   extern const TargetRegisterClass CtrRegs_and_V62RegsRegClass = {
    2110             :     &HexagonMCRegisterClasses[CtrRegs_and_V62RegsRegClassID],
    2111             :     4, /* SpillSize */
    2112             :     4, /* SpillAlignment */
    2113             :     VTLists + 8,
    2114             :     CtrRegs_and_V62RegsSubClassMask,
    2115             :     SuperRegIdxSeqs + 0,
    2116             :     LaneBitmask(0x00000001),
    2117             :     0,
    2118             :     false, /* HasDisjunctSubRegs */
    2119             :     false, /* CoveredBySubRegs */
    2120             :     CtrRegs_and_V62RegsSuperclasses,
    2121             :     nullptr
    2122             :   };
    2123             : 
    2124             :   extern const TargetRegisterClass PredRegsRegClass = {
    2125             :     &HexagonMCRegisterClasses[PredRegsRegClassID],
    2126             :     4, /* SpillSize */
    2127             :     4, /* SpillAlignment */
    2128             :     VTLists + 2,
    2129             :     PredRegsSubClassMask,
    2130             :     SuperRegIdxSeqs + 2,
    2131             :     LaneBitmask(0x00000001),
    2132             :     0,
    2133             :     false, /* HasDisjunctSubRegs */
    2134             :     false, /* CoveredBySubRegs */
    2135             :     NullRegClasses,
    2136             :     nullptr
    2137             :   };
    2138             : 
    2139             :   extern const TargetRegisterClass V62Regs_with_isub_hiRegClass = {
    2140             :     &HexagonMCRegisterClasses[V62Regs_with_isub_hiRegClassID],
    2141             :     4, /* SpillSize */
    2142             :     4, /* SpillAlignment */
    2143             :     VTLists + 8,
    2144             :     V62Regs_with_isub_hiSubClassMask,
    2145             :     SuperRegIdxSeqs + 2,
    2146             :     LaneBitmask(0x00000003),
    2147             :     0,
    2148             :     true, /* HasDisjunctSubRegs */
    2149             :     true, /* CoveredBySubRegs */
    2150             :     V62Regs_with_isub_hiSuperclasses,
    2151             :     nullptr
    2152             :   };
    2153             : 
    2154             :   extern const TargetRegisterClass ModRegsRegClass = {
    2155             :     &HexagonMCRegisterClasses[ModRegsRegClassID],
    2156             :     4, /* SpillSize */
    2157             :     4, /* SpillAlignment */
    2158             :     VTLists + 8,
    2159             :     ModRegsSubClassMask,
    2160             :     SuperRegIdxSeqs + 0,
    2161             :     LaneBitmask(0x00000001),
    2162             :     0,
    2163             :     false, /* HasDisjunctSubRegs */
    2164             :     false, /* CoveredBySubRegs */
    2165             :     ModRegsSuperclasses,
    2166             :     nullptr
    2167             :   };
    2168             : 
    2169             :   extern const TargetRegisterClass CtrRegs_with_subreg_overflowRegClass = {
    2170             :     &HexagonMCRegisterClasses[CtrRegs_with_subreg_overflowRegClassID],
    2171             :     4, /* SpillSize */
    2172             :     4, /* SpillAlignment */
    2173             :     VTLists + 8,
    2174             :     CtrRegs_with_subreg_overflowSubClassMask,
    2175             :     SuperRegIdxSeqs + 2,
    2176             :     LaneBitmask(0x00000004),
    2177             :     0,
    2178             :     false, /* HasDisjunctSubRegs */
    2179             :     false, /* CoveredBySubRegs */
    2180             :     CtrRegs_with_subreg_overflowSuperclasses,
    2181             :     nullptr
    2182             :   };
    2183             : 
    2184             :   extern const TargetRegisterClass DoubleRegsRegClass = {
    2185             :     &HexagonMCRegisterClasses[DoubleRegsRegClassID],
    2186             :     8, /* SpillSize */
    2187             :     8, /* SpillAlignment */
    2188             :     VTLists + 21,
    2189             :     DoubleRegsSubClassMask,
    2190             :     SuperRegIdxSeqs + 2,
    2191             :     LaneBitmask(0x00000003),
    2192             :     0,
    2193             :     true, /* HasDisjunctSubRegs */
    2194             :     true, /* CoveredBySubRegs */
    2195             :     NullRegClasses,
    2196             :     nullptr
    2197             :   };
    2198             : 
    2199             :   extern const TargetRegisterClass CtrRegs64RegClass = {
    2200             :     &HexagonMCRegisterClasses[CtrRegs64RegClassID],
    2201             :     8, /* SpillSize */
    2202             :     8, /* SpillAlignment */
    2203             :     VTLists + 10,
    2204             :     CtrRegs64SubClassMask,
    2205             :     SuperRegIdxSeqs + 2,
    2206             :     LaneBitmask(0x00000003),
    2207             :     0,
    2208             :     true, /* HasDisjunctSubRegs */
    2209             :     true, /* CoveredBySubRegs */
    2210             :     NullRegClasses,
    2211             :     nullptr
    2212             :   };
    2213             : 
    2214             :   extern const TargetRegisterClass GeneralDoubleLow8RegsRegClass = {
    2215             :     &HexagonMCRegisterClasses[GeneralDoubleLow8RegsRegClassID],
    2216             :     8, /* SpillSize */
    2217             :     8, /* SpillAlignment */
    2218             :     VTLists + 10,
    2219             :     GeneralDoubleLow8RegsSubClassMask,
    2220             :     SuperRegIdxSeqs + 2,
    2221             :     LaneBitmask(0x00000003),
    2222             :     0,
    2223             :     true, /* HasDisjunctSubRegs */
    2224             :     true, /* CoveredBySubRegs */
    2225             :     GeneralDoubleLow8RegsSuperclasses,
    2226             :     nullptr
    2227             :   };
    2228             : 
    2229             :   extern const TargetRegisterClass DoubleRegs_with_isub_hi_in_IntRegsLow8RegClass = {
    2230             :     &HexagonMCRegisterClasses[DoubleRegs_with_isub_hi_in_IntRegsLow8RegClassID],
    2231             :     8, /* SpillSize */
    2232             :     8, /* SpillAlignment */
    2233             :     VTLists + 10,
    2234             :     DoubleRegs_with_isub_hi_in_IntRegsLow8SubClassMask,
    2235             :     SuperRegIdxSeqs + 2,
    2236             :     LaneBitmask(0x00000003),
    2237             :     0,
    2238             :     true, /* HasDisjunctSubRegs */
    2239             :     true, /* CoveredBySubRegs */
    2240             :     DoubleRegs_with_isub_hi_in_IntRegsLow8Superclasses,
    2241             :     nullptr
    2242             :   };
    2243             : 
    2244             :   extern const TargetRegisterClass CtrRegs64_and_V62RegsRegClass = {
    2245             :     &HexagonMCRegisterClasses[CtrRegs64_and_V62RegsRegClassID],
    2246             :     8, /* SpillSize */
    2247             :     8, /* SpillAlignment */
    2248             :     VTLists + 10,
    2249             :     CtrRegs64_and_V62RegsSubClassMask,
    2250             :     SuperRegIdxSeqs + 2,
    2251             :     LaneBitmask(0x00000003),
    2252             :     0,
    2253             :     true, /* HasDisjunctSubRegs */
    2254             :     true, /* CoveredBySubRegs */
    2255             :     CtrRegs64_and_V62RegsSuperclasses,
    2256             :     nullptr
    2257             :   };
    2258             : 
    2259             :   extern const TargetRegisterClass CtrRegs64_with_isub_hi_in_ModRegsRegClass = {
    2260             :     &HexagonMCRegisterClasses[CtrRegs64_with_isub_hi_in_ModRegsRegClassID],
    2261             :     8, /* SpillSize */
    2262             :     8, /* SpillAlignment */
    2263             :     VTLists + 10,
    2264             :     CtrRegs64_with_isub_hi_in_ModRegsSubClassMask,
    2265             :     SuperRegIdxSeqs + 2,
    2266             :     LaneBitmask(0x00000003),
    2267             :     0,
    2268             :     true, /* HasDisjunctSubRegs */
    2269             :     true, /* CoveredBySubRegs */
    2270             :     CtrRegs64_with_isub_hi_in_ModRegsSuperclasses,
    2271             :     nullptr
    2272             :   };
    2273             : 
    2274             :   extern const TargetRegisterClass VectorRegsRegClass = {
    2275             :     &HexagonMCRegisterClasses[VectorRegsRegClassID],
    2276             :     64, /* SpillSize */
    2277             :     64, /* SpillAlignment */
    2278             :     VTLists + 27,
    2279             :     VectorRegsSubClassMask,
    2280             :     SuperRegIdxSeqs + 5,
    2281             :     LaneBitmask(0x00000001),
    2282             :     0,
    2283             :     false, /* HasDisjunctSubRegs */
    2284             :     false, /* CoveredBySubRegs */
    2285             :     NullRegClasses,
    2286             :     nullptr
    2287             :   };
    2288             : 
    2289             :   extern const TargetRegisterClass VecPredRegsRegClass = {
    2290             :     &HexagonMCRegisterClasses[VecPredRegsRegClassID],
    2291             :     64, /* SpillSize */
    2292             :     64, /* SpillAlignment */
    2293             :     VTLists + 12,
    2294             :     VecPredRegsSubClassMask,
    2295             :     SuperRegIdxSeqs + 2,
    2296             :     LaneBitmask(0x00000001),
    2297             :     0,
    2298             :     false, /* HasDisjunctSubRegs */
    2299             :     false, /* CoveredBySubRegs */
    2300             :     NullRegClasses,
    2301             :     nullptr
    2302             :   };
    2303             : 
    2304             :   extern const TargetRegisterClass VectorRegs128BRegClass = {
    2305             :     &HexagonMCRegisterClasses[VectorRegs128BRegClassID],
    2306             :     128, /* SpillSize */
    2307             :     128, /* SpillAlignment */
    2308             :     VTLists + 32,
    2309             :     VectorRegs128BSubClassMask,
    2310             :     SuperRegIdxSeqs + 5,
    2311             :     LaneBitmask(0x00000001),
    2312             :     0,
    2313             :     false, /* HasDisjunctSubRegs */
    2314             :     false, /* CoveredBySubRegs */
    2315             :     VectorRegs128BSuperclasses,
    2316             :     nullptr
    2317             :   };
    2318             : 
    2319             :   extern const TargetRegisterClass VecDblRegsRegClass = {
    2320             :     &HexagonMCRegisterClasses[VecDblRegsRegClassID],
    2321             :     128, /* SpillSize */
    2322             :     128, /* SpillAlignment */
    2323             :     VTLists + 32,
    2324             :     VecDblRegsSubClassMask,
    2325             :     SuperRegIdxSeqs + 2,
    2326             :     LaneBitmask(0x00000018),
    2327             :     0,
    2328             :     true, /* HasDisjunctSubRegs */
    2329             :     true, /* CoveredBySubRegs */
    2330             :     NullRegClasses,
    2331             :     nullptr
    2332             :   };
    2333             : 
    2334             :   extern const TargetRegisterClass VecPredRegs128BRegClass = {
    2335             :     &HexagonMCRegisterClasses[VecPredRegs128BRegClassID],
    2336             :     128, /* SpillSize */
    2337             :     128, /* SpillAlignment */
    2338             :     VTLists + 14,
    2339             :     VecPredRegs128BSubClassMask,
    2340             :     SuperRegIdxSeqs + 2,
    2341             :     LaneBitmask(0x00000001),
    2342             :     0,
    2343             :     false, /* HasDisjunctSubRegs */
    2344             :     false, /* CoveredBySubRegs */
    2345             :     VecPredRegs128BSuperclasses,
    2346             :     nullptr
    2347             :   };
    2348             : 
    2349             :   extern const TargetRegisterClass VecDblRegs128BRegClass = {
    2350             :     &HexagonMCRegisterClasses[VecDblRegs128BRegClassID],
    2351             :     256, /* SpillSize */
    2352             :     256, /* SpillAlignment */
    2353             :     VTLists + 37,
    2354             :     VecDblRegs128BSubClassMask,
    2355             :     SuperRegIdxSeqs + 2,
    2356             :     LaneBitmask(0x00000018),
    2357             :     0,
    2358             :     true, /* HasDisjunctSubRegs */
    2359             :     true, /* CoveredBySubRegs */
    2360             :     VecDblRegs128BSuperclasses,
    2361             :     nullptr
    2362             :   };
    2363             : 
    2364             : } // end namespace Hexagon
    2365             : 
    2366             : namespace {
    2367             :   const TargetRegisterClass* const RegisterClasses[] = {
    2368             :     &Hexagon::UsrBitsRegClass,
    2369             :     &Hexagon::IntRegsRegClass,
    2370             :     &Hexagon::CtrRegsRegClass,
    2371             :     &Hexagon::GeneralSubRegsRegClass,
    2372             :     &Hexagon::V62RegsRegClass,
    2373             :     &Hexagon::IntRegsLow8RegClass,
    2374             :     &Hexagon::CtrRegs_and_V62RegsRegClass,
    2375             :     &Hexagon::PredRegsRegClass,
    2376             :     &Hexagon::V62Regs_with_isub_hiRegClass,
    2377             :     &Hexagon::ModRegsRegClass,
    2378             :     &Hexagon::CtrRegs_with_subreg_overflowRegClass,
    2379             :     &Hexagon::DoubleRegsRegClass,
    2380             :     &Hexagon::CtrRegs64RegClass,
    2381             :     &Hexagon::GeneralDoubleLow8RegsRegClass,
    2382             :     &Hexagon::DoubleRegs_with_isub_hi_in_IntRegsLow8RegClass,
    2383             :     &Hexagon::CtrRegs64_and_V62RegsRegClass,
    2384             :     &Hexagon::CtrRegs64_with_isub_hi_in_ModRegsRegClass,
    2385             :     &Hexagon::VectorRegsRegClass,
    2386             :     &Hexagon::VecPredRegsRegClass,
    2387             :     &Hexagon::VectorRegs128BRegClass,
    2388             :     &Hexagon::VecDblRegsRegClass,
    2389             :     &Hexagon::VecPredRegs128BRegClass,
    2390             :     &Hexagon::VecDblRegs128BRegClass,
    2391             :   };
    2392             : } // end anonymous namespace
    2393             : 
    2394             : static const TargetRegisterInfoDesc HexagonRegInfoDesc[] = { // Extra Descriptors
    2395             :   { 0, false },
    2396             :   { 0, false },
    2397             :   { 0, false },
    2398             :   { 0, false },
    2399             :   { 0, false },
    2400             :   { 0, false },
    2401             :   { 0, false },
    2402             :   { 0, false },
    2403             :   { 0, false },
    2404             :   { 0, false },
    2405             :   { 0, false },
    2406             :   { 0, false },
    2407             :   { 0, false },
    2408             :   { 0, false },
    2409             :   { 0, false },
    2410             :   { 0, false },
    2411             :   { 0, false },
    2412             :   { 0, false },
    2413             :   { 0, false },
    2414             :   { 0, false },
    2415             :   { 0, false },
    2416             :   { 0, false },
    2417             :   { 0, true },
    2418             :   { 0, true },
    2419             :   { 0, true },
    2420             :   { 0, true },
    2421             :   { 0, true },
    2422             :   { 0, true },
    2423             :   { 0, true },
    2424             :   { 0, true },
    2425             :   { 0, true },
    2426             :   { 0, true },
    2427             :   { 0, true },
    2428             :   { 0, true },
    2429             :   { 0, true },
    2430             :   { 0, true },
    2431             :   { 0, true },
    2432             :   { 0, true },
    2433             :   { 0, false },
    2434             :   { 0, false },
    2435             :   { 0, true },
    2436             :   { 0, true },
    2437             :   { 0, true },
    2438             :   { 0, true },
    2439             :   { 0, true },
    2440             :   { 0, true },
    2441             :   { 0, true },
    2442             :   { 0, true },
    2443             :   { 0, true },
    2444             :   { 0, true },
    2445             :   { 0, true },
    2446             :   { 0, true },
    2447             :   { 0, true },
    2448             :   { 0, true },
    2449             :   { 0, true },
    2450             :   { 0, true },
    2451             :   { 0, true },
    2452             :   { 0, true },
    2453             :   { 0, true },
    2454             :   { 0, true },
    2455             :   { 0, true },
    2456             :   { 0, true },
    2457             :   { 0, true },
    2458             :   { 0, true },
    2459             :   { 0, true },
    2460             :   { 0, true },
    2461             :   { 0, true },
    2462             :   { 0, true },
    2463             :   { 0, true },
    2464             :   { 0, true },
    2465             :   { 0, true },
    2466             :   { 0, true },
    2467             :   { 0, true },
    2468             :   { 0, true },
    2469             :   { 0, true },
    2470             :   { 0, true },
    2471             :   { 0, true },
    2472             :   { 0, true },
    2473             :   { 0, true },
    2474             :   { 0, true },
    2475             :   { 0, true },
    2476             :   { 0, true },
    2477             :   { 0, false },
    2478             :   { 0, false },
    2479             :   { 0, true },
    2480             :   { 0, true },
    2481             :   { 0, true },
    2482             :   { 0, true },
    2483             :   { 0, true },
    2484             :   { 0, true },
    2485             :   { 0, true },
    2486             :   { 0, true },
    2487             :   { 0, true },
    2488             :   { 0, true },
    2489             :   { 0, true },
    2490             :   { 0, true },
    2491             :   { 0, true },
    2492             :   { 0, true },
    2493             :   { 0, true },
    2494             :   { 0, true },
    2495             :   { 0, true },
    2496             :   { 0, true },
    2497             :   { 0, true },
    2498             :   { 0, true },
    2499             :   { 0, true },
    2500             :   { 0, true },
    2501             :   { 0, true },
    2502             :   { 0, true },
    2503             :   { 0, true },
    2504             :   { 0, true },
    2505             :   { 0, true },
    2506             :   { 0, true },
    2507             :   { 0, true },
    2508             :   { 0, true },
    2509             :   { 0, true },
    2510             :   { 0, true },
    2511             :   { 0, true },
    2512             :   { 0, true },
    2513             :   { 0, true },
    2514             :   { 0, true },
    2515             :   { 0, true },
    2516             :   { 0, true },
    2517             :   { 0, true },
    2518             :   { 0, true },
    2519             :   { 0, true },
    2520             :   { 0, true },
    2521             :   { 0, true },
    2522             :   { 0, true },
    2523             :   { 0, true },
    2524             :   { 0, true },
    2525             :   { 0, true },
    2526             :   { 0, true },
    2527             :   { 0, false },
    2528             :   { 0, false },
    2529             :   { 0, false },
    2530             :   { 0, false },
    2531             :   { 0, false },
    2532             :   { 0, false },
    2533             :   { 0, false },
    2534             :   { 0, false },
    2535             : };
    2536           0 : unsigned HexagonGenRegisterInfo::composeSubRegIndicesImpl(unsigned IdxA, unsigned IdxB) const {
    2537             :   static const uint8_t Rows[1][5] = {
    2538             :     { 0, 0, 0, 0, 0, },
    2539             :   };
    2540             : 
    2541           0 :   --IdxA; assert(IdxA < 5);
    2542           0 :   --IdxB; assert(IdxB < 5);
    2543           0 :   return Rows[0][IdxB];
    2544             : }
    2545             : 
    2546             :   struct MaskRolOp {
    2547             :     LaneBitmask Mask;
    2548             :     uint8_t  RotateLeft;
    2549             :   };
    2550             :   static const MaskRolOp LaneMaskComposeSequences[] = {
    2551             :     { LaneBitmask(0xFFFFFFFF),  0 }, { LaneBitmask::getNone(), 0 },   // Sequence 0
    2552             :     { LaneBitmask(0xFFFFFFFF),  1 }, { LaneBitmask::getNone(), 0 },   // Sequence 2
    2553             :     { LaneBitmask(0xFFFFFFFF),  2 }, { LaneBitmask::getNone(), 0 },   // Sequence 4
    2554             :     { LaneBitmask(0xFFFFFFFF),  3 }, { LaneBitmask::getNone(), 0 },   // Sequence 6
    2555             :     { LaneBitmask(0xFFFFFFFF),  4 }, { LaneBitmask::getNone(), 0 }  // Sequence 8
    2556      361530 :   };
    2557             :   static const MaskRolOp *const CompositeSequences[] = {
    2558             :     &LaneMaskComposeSequences[0], // to isub_hi
    2559             :     &LaneMaskComposeSequences[2], // to isub_lo
    2560             :     &LaneMaskComposeSequences[4], // to subreg_overflow
    2561             :     &LaneMaskComposeSequences[6], // to vsub_hi
    2562             :     &LaneMaskComposeSequences[8] // to vsub_lo
    2563             :   };
    2564             : 
    2565         387 : LaneBitmask HexagonGenRegisterInfo::composeSubRegIndexLaneMaskImpl(unsigned IdxA, LaneBitmask LaneMask) const {
    2566         387 :   --IdxA; assert(IdxA < 5 && "Subregister index out of bounds");
    2567         387 :   LaneBitmask Result;
    2568        1548 :   for (const MaskRolOp *Ops = CompositeSequences[IdxA]; Ops->Mask.any(); ++Ops) {
    2569         387 :     LaneBitmask::Type M = LaneMask.getAsInteger() & Ops->Mask.getAsInteger();
    2570         387 :     if (unsigned S = Ops->RotateLeft)
    2571         386 :       Result |= LaneBitmask((M << S) | (M >> (LaneBitmask::BitWidth - S)));
    2572             :     else
    2573         388 :       Result |= LaneBitmask(M);
    2574             :   }
    2575         387 :   return Result;
    2576             : }
    2577             : 
    2578        5538 : LaneBitmask HexagonGenRegisterInfo::reverseComposeSubRegIndexLaneMaskImpl(unsigned IdxA,  LaneBitmask LaneMask) const {
    2579       16614 :   LaneMask &= getSubRegIndexLaneMask(IdxA);
    2580        5538 :   --IdxA; assert(IdxA < 5 && "Subregister index out of bounds");
    2581        5538 :   LaneBitmask Result;
    2582       22152 :   for (const MaskRolOp *Ops = CompositeSequences[IdxA]; Ops->Mask.any(); ++Ops) {
    2583        5538 :     LaneBitmask::Type M = LaneMask.getAsInteger();
    2584        5538 :     if (unsigned S = Ops->RotateLeft)
    2585        6194 :       Result |= LaneBitmask((M >> S) | (M << (LaneBitmask::BitWidth - S)));
    2586             :     else
    2587        4882 :       Result |= LaneBitmask(M);
    2588             :   }
    2589        5538 :   return Result;
    2590             : }
    2591             : 
    2592         483 : const TargetRegisterClass *HexagonGenRegisterInfo::getSubClassWithSubReg(const TargetRegisterClass *RC, unsigned Idx) const {
    2593             :   static const uint8_t Table[23][5] = {
    2594             :     {   // UsrBits
    2595             :       0,        // isub_hi
    2596             :       0,        // isub_lo
    2597             :       0,        // subreg_overflow
    2598             :       0,        // vsub_hi
    2599             :       0,        // vsub_lo
    2600             :     },
    2601             :     {   // IntRegs
    2602             :       0,        // isub_hi
    2603             :       0,        // isub_lo
    2604             :       0,        // subreg_overflow
    2605             :       0,        // vsub_hi
    2606             :       0,        // vsub_lo
    2607             :     },
    2608             :     {   // CtrRegs
    2609             :       0,        // isub_hi
    2610             :       0,        // isub_lo
    2611             :       11,       // subreg_overflow -> CtrRegs_with_subreg_overflow
    2612             :       0,        // vsub_hi
    2613             :       0,        // vsub_lo
    2614             :     },
    2615             :     {   // GeneralSubRegs
    2616             :       0,        // isub_hi
    2617             :       0,        // isub_lo
    2618             :       0,        // subreg_overflow
    2619             :       0,        // vsub_hi
    2620             :       0,        // vsub_lo
    2621             :     },
    2622             :     {   // V62Regs
    2623             :       9,        // isub_hi -> V62Regs_with_isub_hi
    2624             :       9,        // isub_lo -> V62Regs_with_isub_hi
    2625             :       0,        // subreg_overflow
    2626             :       0,        // vsub_hi
    2627             :       0,        // vsub_lo
    2628             :     },
    2629             :     {   // IntRegsLow8
    2630             :       0,        // isub_hi
    2631             :       0,        // isub_lo
    2632             :       0,        // subreg_overflow
    2633             :       0,        // vsub_hi
    2634             :       0,        // vsub_lo
    2635             :     },
    2636             :     {   // CtrRegs_and_V62Regs
    2637             :       0,        // isub_hi
    2638             :       0,        // isub_lo
    2639             :       0,        // subreg_overflow
    2640             :       0,        // vsub_hi
    2641             :       0,        // vsub_lo
    2642             :     },
    2643             :     {   // PredRegs
    2644             :       0,        // isub_hi
    2645             :       0,        // isub_lo
    2646             :       0,        // subreg_overflow
    2647             :       0,        // vsub_hi
    2648             :       0,        // vsub_lo
    2649             :     },
    2650             :     {   // V62Regs_with_isub_hi
    2651             :       9,        // isub_hi -> V62Regs_with_isub_hi
    2652             :       9,        // isub_lo -> V62Regs_with_isub_hi
    2653             :       0,        // subreg_overflow
    2654             :       0,        // vsub_hi
    2655             :       0,        // vsub_lo
    2656             :     },
    2657             :     {   // ModRegs
    2658             :       0,        // isub_hi
    2659             :       0,        // isub_lo
    2660             :       0,        // subreg_overflow
    2661             :       0,        // vsub_hi
    2662             :       0,        // vsub_lo
    2663             :     },
    2664             :     {   // CtrRegs_with_subreg_overflow
    2665             :       0,        // isub_hi
    2666             :       0,        // isub_lo
    2667             :       11,       // subreg_overflow -> CtrRegs_with_subreg_overflow
    2668             :       0,        // vsub_hi
    2669             :       0,        // vsub_lo
    2670             :     },
    2671             :     {   // DoubleRegs
    2672             :       12,       // isub_hi -> DoubleRegs
    2673             :       12,       // isub_lo -> DoubleRegs
    2674             :       0,        // subreg_overflow
    2675             :       0,        // vsub_hi
    2676             :       0,        // vsub_lo
    2677             :     },
    2678             :     {   // CtrRegs64
    2679             :       13,       // isub_hi -> CtrRegs64
    2680             :       13,       // isub_lo -> CtrRegs64
    2681             :       0,        // subreg_overflow
    2682             :       0,        // vsub_hi
    2683             :       0,        // vsub_lo
    2684             :     },
    2685             :     {   // GeneralDoubleLow8Regs
    2686             :       14,       // isub_hi -> GeneralDoubleLow8Regs
    2687             :       14,       // isub_lo -> GeneralDoubleLow8Regs
    2688             :       0,        // subreg_overflow
    2689             :       0,        // vsub_hi
    2690             :       0,        // vsub_lo
    2691             :     },
    2692             :     {   // DoubleRegs_with_isub_hi_in_IntRegsLow8
    2693             :       15,       // isub_hi -> DoubleRegs_with_isub_hi_in_IntRegsLow8
    2694             :       15,       // isub_lo -> DoubleRegs_with_isub_hi_in_IntRegsLow8
    2695             :       0,        // subreg_overflow
    2696             :       0,        // vsub_hi
    2697             :       0,        // vsub_lo
    2698             :     },
    2699             :     {   // CtrRegs64_and_V62Regs
    2700             :       16,       // isub_hi -> CtrRegs64_and_V62Regs
    2701             :       16,       // isub_lo -> CtrRegs64_and_V62Regs
    2702             :       0,        // subreg_overflow
    2703             :       0,        // vsub_hi
    2704             :       0,        // vsub_lo
    2705             :     },
    2706             :     {   // CtrRegs64_with_isub_hi_in_ModRegs
    2707             :       17,       // isub_hi -> CtrRegs64_with_isub_hi_in_ModRegs
    2708             :       17,       // isub_lo -> CtrRegs64_with_isub_hi_in_ModRegs
    2709             :       0,        // subreg_overflow
    2710             :       0,        // vsub_hi
    2711             :       0,        // vsub_lo
    2712             :     },
    2713             :     {   // VectorRegs
    2714             :       0,        // isub_hi
    2715             :       0,        // isub_lo
    2716             :       0,        // subreg_overflow
    2717             :       0,        // vsub_hi
    2718             :       0,        // vsub_lo
    2719             :     },
    2720             :     {   // VecPredRegs
    2721             :       0,        // isub_hi
    2722             :       0,        // isub_lo
    2723             :       0,        // subreg_overflow
    2724             :       0,        // vsub_hi
    2725             :       0,        // vsub_lo
    2726             :     },
    2727             :     {   // VectorRegs128B
    2728             :       0,        // isub_hi
    2729             :       0,        // isub_lo
    2730             :       0,        // subreg_overflow
    2731             :       0,        // vsub_hi
    2732             :       0,        // vsub_lo
    2733             :     },
    2734             :     {   // VecDblRegs
    2735             :       0,        // isub_hi
    2736             :       0,        // isub_lo
    2737             :       0,        // subreg_overflow
    2738             :       21,       // vsub_hi -> VecDblRegs
    2739             :       21,       // vsub_lo -> VecDblRegs
    2740             :     },
    2741             :     {   // VecPredRegs128B
    2742             :       0,        // isub_hi
    2743             :       0,        // isub_lo
    2744             :       0,        // subreg_overflow
    2745             :       0,        // vsub_hi
    2746             :       0,        // vsub_lo
    2747             :     },
    2748             :     {   // VecDblRegs128B
    2749             :       0,        // isub_hi
    2750             :       0,        // isub_lo
    2751             :       0,        // subreg_overflow
    2752             :       23,       // vsub_hi -> VecDblRegs128B
    2753             :       23,       // vsub_lo -> VecDblRegs128B
    2754             :     },
    2755             :   };
    2756             :   assert(RC && "Missing regclass");
    2757         483 :   if (!Idx) return RC;
    2758         483 :   --Idx;
    2759             :   assert(Idx < 5 && "Bad subreg");
    2760         966 :   unsigned TV = Table[RC->getID()][Idx];
    2761         966 :   return TV ? getRegClass(TV - 1) : nullptr;
    2762             : }
    2763             : 
    2764             : /// Get the weight in units of pressure for this register class.
    2765      143226 : const RegClassWeight &HexagonGenRegisterInfo::
    2766             : getRegClassWeight(const TargetRegisterClass *RC) const {
    2767             :   static const RegClassWeight RCWeightTable[] = {
    2768             :     {0, 0},     // UsrBits
    2769             :     {1, 32},    // IntRegs
    2770             :     {0, 6},     // CtrRegs
    2771             :     {1, 16},    // GeneralSubRegs
    2772             :     {0, 0},     // V62Regs
    2773             :     {1, 8},     // IntRegsLow8
    2774             :     {0, 0},     // CtrRegs_and_V62Regs
    2775             :     {1, 4},     // PredRegs
    2776             :     {0, 0},     // V62Regs_with_isub_hi
    2777             :     {1, 2},     // ModRegs
    2778             :     {0, 0},     // CtrRegs_with_subreg_overflow
    2779             :     {2, 32},    // DoubleRegs
    2780             :     {0, 6},     // CtrRegs64
    2781             :     {2, 16},    // GeneralDoubleLow8Regs
    2782             :     {2, 8},     // DoubleRegs_with_isub_hi_in_IntRegsLow8
    2783             :     {0, 0},     // CtrRegs64_and_V62Regs
    2784             :     {2, 2},     // CtrRegs64_with_isub_hi_in_ModRegs
    2785             :     {1, 32},    // VectorRegs
    2786             :     {1, 4},     // VecPredRegs
    2787             :     {1, 32},    // VectorRegs128B
    2788             :     {2, 32},    // VecDblRegs
    2789             :     {1, 4},     // VecPredRegs128B
    2790             :     {2, 32},    // VecDblRegs128B
    2791             :   };
    2792      286452 :   return RCWeightTable[RC->getID()];
    2793             : }
    2794             : 
    2795             : /// Get the weight in units of pressure for this register unit.
    2796       15649 : unsigned HexagonGenRegisterInfo::
    2797             : getRegUnitWeight(unsigned RegUnit) const {
    2798             :   assert(RegUnit < 94 && "invalid register unit");
    2799             :   // All register units have unit weight.
    2800       15649 :   return 1;
    2801             : }
    2802             : 
    2803             : 
    2804             : // Get the number of dimensions of register pressure.
    2805        9661 : unsigned HexagonGenRegisterInfo::getNumRegPressureSets() const {
    2806        9661 :   return 7;
    2807             : }
    2808             : 
    2809             : // Get the name of this register unit pressure set.
    2810           0 : const char *HexagonGenRegisterInfo::
    2811             : getRegPressureSetName(unsigned Idx) const {
    2812             :   static const char *const PressureNameTable[] = {
    2813             :     "ModRegs",
    2814             :     "PredRegs",
    2815             :     "VecPredRegs",
    2816             :     "IntRegsLow8",
    2817             :     "GeneralSubRegs",
    2818             :     "IntRegs",
    2819             :     "VectorRegs",
    2820             :   };
    2821           0 :   return PressureNameTable[Idx];
    2822             : }
    2823             : 
    2824             : // Get the register unit pressure limit for this dimension.
    2825             : // This limit must be adjusted dynamically for reserved registers.
    2826        8780 : unsigned HexagonGenRegisterInfo::
    2827             : getRegPressureSetLimit(const MachineFunction &MF, unsigned Idx) const {
    2828             :   static const uint8_t PressureLimitTable[] = {
    2829             :     2,          // 0: ModRegs
    2830             :     4,          // 1: PredRegs
    2831             :     4,          // 2: VecPredRegs
    2832             :     8,          // 3: IntRegsLow8
    2833             :     16,         // 4: GeneralSubRegs
    2834             :     32,         // 5: IntRegs
    2835             :     32,         // 6: VectorRegs
    2836             :   };
    2837        8780 :   return PressureLimitTable[Idx];
    2838             : }
    2839             : 
    2840             : /// Table of pressure sets per register class or unit.
    2841             : static const int RCSetsTable[] = {
    2842             :   /* 0 */ 0, -1,
    2843             :   /* 2 */ 1, -1,
    2844             :   /* 4 */ 2, -1,
    2845             :   /* 6 */ 3, 4, 5, -1,
    2846             :   /* 10 */ 6, -1,
    2847             : };
    2848             : 
    2849             : /// Get the dimensions of register pressure impacted by this register class.
    2850             : /// Returns a -1 terminated array of pressure set IDs
    2851      194325 : const int* HexagonGenRegisterInfo::
    2852             : getRegClassPressureSets(const TargetRegisterClass *RC) const {
    2853             :   static const uint8_t RCSetStartTable[] = {
    2854             :     1,8,1,7,1,6,1,2,1,0,1,8,1,7,6,1,1,10,4,10,10,4,10,};
    2855      388650 :   return &RCSetsTable[RCSetStartTable[RC->getID()]];
    2856             : }
    2857             : 
    2858             : /// Get the dimensions of register pressure impacted by this register unit.
    2859             : /// Returns a -1 terminated array of pressure set IDs
    2860       15649 : const int* HexagonGenRegisterInfo::
    2861             : getRegUnitPressureSets(unsigned RegUnit) const {
    2862             :   assert(RegUnit < 94 && "invalid register unit");
    2863             :   static const uint8_t RUSetStartTable[] = {
    2864             :     1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,6,6,6,6,6,6,6,6,8,8,8,8,8,8,8,8,7,7,7,7,7,7,7,7,8,8,8,8,8,8,8,8,1,1,0,0,2,2,2,2,4,4,4,4,1,1,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,};
    2865       15649 :   return &RCSetsTable[RUSetStartTable[RegUnit]];
    2866             : }
    2867             : 
    2868             : extern const MCRegisterDesc HexagonRegDesc[];
    2869             : extern const MCPhysReg HexagonRegDiffLists[];
    2870             : extern const LaneBitmask HexagonLaneMaskLists[];
    2871             : extern const char HexagonRegStrings[];
    2872             : extern const char HexagonRegClassStrings[];
    2873             : extern const MCPhysReg HexagonRegUnitRoots[][2];
    2874             : extern const uint16_t HexagonSubRegIdxLists[];
    2875             : extern const MCRegisterInfo::SubRegCoveredBits HexagonSubRegIdxRanges[];
    2876             : extern const uint16_t HexagonRegEncodingTable[];
    2877             : // Hexagon Dwarf<->LLVM register mappings.
    2878             : extern const MCRegisterInfo::DwarfLLVMRegPair HexagonDwarfFlavour0Dwarf2L[];
    2879             : extern const unsigned HexagonDwarfFlavour0Dwarf2LSize;
    2880             : 
    2881             : extern const MCRegisterInfo::DwarfLLVMRegPair HexagonEHFlavour0Dwarf2L[];
    2882             : extern const unsigned HexagonEHFlavour0Dwarf2LSize;
    2883             : 
    2884             : extern const MCRegisterInfo::DwarfLLVMRegPair HexagonDwarfFlavour0L2Dwarf[];
    2885             : extern const unsigned HexagonDwarfFlavour0L2DwarfSize;
    2886             : 
    2887             : extern const MCRegisterInfo::DwarfLLVMRegPair HexagonEHFlavour0L2Dwarf[];
    2888             : extern const unsigned HexagonEHFlavour0L2DwarfSize;
    2889             : 
    2890         478 : HexagonGenRegisterInfo::
    2891         478 : HexagonGenRegisterInfo(unsigned RA, unsigned DwarfFlavour, unsigned EHFlavour, unsigned PC)
    2892             :   : TargetRegisterInfo(HexagonRegInfoDesc, RegisterClasses, RegisterClasses+23,
    2893         956 :              SubRegIndexNameTable, SubRegIndexLaneMaskTable, LaneBitmask(0xFFFFFFFB)) {
    2894         956 :   InitMCRegisterInfo(HexagonRegDesc, 140, RA, PC,
    2895             :                      HexagonMCRegisterClasses, 23,
    2896             :                      HexagonRegUnitRoots,
    2897             :                      94,
    2898             :                      HexagonRegDiffLists,
    2899             :                      HexagonLaneMaskLists,
    2900             :                      HexagonRegStrings,
    2901             :                      HexagonRegClassStrings,
    2902             :                      HexagonSubRegIdxLists,
    2903             :                      6,
    2904             :                      HexagonSubRegIdxRanges,
    2905             :                      HexagonRegEncodingTable);
    2906             : 
    2907         478 :   switch (DwarfFlavour) {
    2908           0 :   default:
    2909           0 :     llvm_unreachable("Unknown DWARF flavour");
    2910         478 :   case 0:
    2911         956 :     mapDwarfRegsToLLVMRegs(HexagonDwarfFlavour0Dwarf2L, HexagonDwarfFlavour0Dwarf2LSize, false);
    2912             :     break;
    2913             :   }
    2914         478 :   switch (EHFlavour) {
    2915           0 :   default:
    2916           0 :     llvm_unreachable("Unknown DWARF flavour");
    2917         478 :   case 0:
    2918         956 :     mapDwarfRegsToLLVMRegs(HexagonEHFlavour0Dwarf2L, HexagonEHFlavour0Dwarf2LSize, true);
    2919             :     break;
    2920             :   }
    2921         478 :   switch (DwarfFlavour) {
    2922           0 :   default:
    2923           0 :     llvm_unreachable("Unknown DWARF flavour");
    2924         478 :   case 0:
    2925         956 :     mapLLVMRegsToDwarfRegs(HexagonDwarfFlavour0L2Dwarf, HexagonDwarfFlavour0L2DwarfSize, false);
    2926             :     break;
    2927             :   }
    2928         478 :   switch (EHFlavour) {
    2929           0 :   default:
    2930           0 :     llvm_unreachable("Unknown DWARF flavour");
    2931         478 :   case 0:
    2932         956 :     mapLLVMRegsToDwarfRegs(HexagonEHFlavour0L2Dwarf, HexagonEHFlavour0L2DwarfSize, true);
    2933             :     break;
    2934             :   }
    2935         478 : }
    2936             : 
    2937             : static const MCPhysReg HexagonCSR_SaveList[] = { Hexagon::R16, Hexagon::R17, Hexagon::R18, Hexagon::R19, Hexagon::R20, Hexagon::R21, Hexagon::R22, Hexagon::R23, Hexagon::R24, Hexagon::R25, Hexagon::R26, Hexagon::R27, 0 };
    2938             : static const uint32_t HexagonCSR_RegMask[] = { 0xc0000000, 0x0000000f, 0x00003ffc, 0x00000000, 0x00000000, };
    2939             : 
    2940             : 
    2941        1748 : ArrayRef<const uint32_t *> HexagonGenRegisterInfo::getRegMasks() const {
    2942             :   static const uint32_t *const Masks[] = {
    2943             :     HexagonCSR_RegMask,
    2944             :   };
    2945        1748 :   return makeArrayRef(Masks);
    2946             : }
    2947             : 
    2948           0 : ArrayRef<const char *> HexagonGenRegisterInfo::getRegMaskNames() const {
    2949             :   static const char *const Names[] = {
    2950             :     "HexagonCSR",
    2951             :   };
    2952           0 :   return makeArrayRef(Names);
    2953             : }
    2954             : 
    2955             : const HexagonFrameLowering *
    2956          10 : HexagonGenRegisterInfo::getFrameLowering(const MachineFunction &MF) {
    2957             :   return static_cast<const HexagonFrameLowering *>(
    2958          10 :       MF.getSubtarget().getFrameLowering());
    2959             : }
    2960             : 
    2961             : } // end namespace llvm
    2962             : 
    2963             : #endif // GET_REGINFO_TARGET_DESC
    2964             : 

Generated by: LCOV version 1.13