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

Generated by: LCOV version 1.13