LCOV - code coverage report
Current view: top level - build-llvm/lib/Target/SystemZ - SystemZGenRegisterInfo.inc (source / functions) Hit Total Coverage
Test: llvm-toolchain.info Lines: 53 59 89.8 %
Date: 2018-10-20 13:21:21 Functions: 14 15 93.3 %
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 SystemZMCRegisterClasses[];
      17             : 
      18             : namespace SystemZ {
      19             : enum {
      20             :   NoRegister,
      21             :   CC = 1,
      22             :   A0 = 2,
      23             :   A1 = 3,
      24             :   A2 = 4,
      25             :   A3 = 5,
      26             :   A4 = 6,
      27             :   A5 = 7,
      28             :   A6 = 8,
      29             :   A7 = 9,
      30             :   A8 = 10,
      31             :   A9 = 11,
      32             :   A10 = 12,
      33             :   A11 = 13,
      34             :   A12 = 14,
      35             :   A13 = 15,
      36             :   A14 = 16,
      37             :   A15 = 17,
      38             :   C0 = 18,
      39             :   C1 = 19,
      40             :   C2 = 20,
      41             :   C3 = 21,
      42             :   C4 = 22,
      43             :   C5 = 23,
      44             :   C6 = 24,
      45             :   C7 = 25,
      46             :   C8 = 26,
      47             :   C9 = 27,
      48             :   C10 = 28,
      49             :   C11 = 29,
      50             :   C12 = 30,
      51             :   C13 = 31,
      52             :   C14 = 32,
      53             :   C15 = 33,
      54             :   V0 = 34,
      55             :   V1 = 35,
      56             :   V2 = 36,
      57             :   V3 = 37,
      58             :   V4 = 38,
      59             :   V5 = 39,
      60             :   V6 = 40,
      61             :   V7 = 41,
      62             :   V8 = 42,
      63             :   V9 = 43,
      64             :   V10 = 44,
      65             :   V11 = 45,
      66             :   V12 = 46,
      67             :   V13 = 47,
      68             :   V14 = 48,
      69             :   V15 = 49,
      70             :   V16 = 50,
      71             :   V17 = 51,
      72             :   V18 = 52,
      73             :   V19 = 53,
      74             :   V20 = 54,
      75             :   V21 = 55,
      76             :   V22 = 56,
      77             :   V23 = 57,
      78             :   V24 = 58,
      79             :   V25 = 59,
      80             :   V26 = 60,
      81             :   V27 = 61,
      82             :   V28 = 62,
      83             :   V29 = 63,
      84             :   V30 = 64,
      85             :   V31 = 65,
      86             :   F0D = 66,
      87             :   F1D = 67,
      88             :   F2D = 68,
      89             :   F3D = 69,
      90             :   F4D = 70,
      91             :   F5D = 71,
      92             :   F6D = 72,
      93             :   F7D = 73,
      94             :   F8D = 74,
      95             :   F9D = 75,
      96             :   F10D = 76,
      97             :   F11D = 77,
      98             :   F12D = 78,
      99             :   F13D = 79,
     100             :   F14D = 80,
     101             :   F15D = 81,
     102             :   F16D = 82,
     103             :   F17D = 83,
     104             :   F18D = 84,
     105             :   F19D = 85,
     106             :   F20D = 86,
     107             :   F21D = 87,
     108             :   F22D = 88,
     109             :   F23D = 89,
     110             :   F24D = 90,
     111             :   F25D = 91,
     112             :   F26D = 92,
     113             :   F27D = 93,
     114             :   F28D = 94,
     115             :   F29D = 95,
     116             :   F30D = 96,
     117             :   F31D = 97,
     118             :   F0Q = 98,
     119             :   F1Q = 99,
     120             :   F4Q = 100,
     121             :   F5Q = 101,
     122             :   F8Q = 102,
     123             :   F9Q = 103,
     124             :   F12Q = 104,
     125             :   F13Q = 105,
     126             :   F0S = 106,
     127             :   F1S = 107,
     128             :   F2S = 108,
     129             :   F3S = 109,
     130             :   F4S = 110,
     131             :   F5S = 111,
     132             :   F6S = 112,
     133             :   F7S = 113,
     134             :   F8S = 114,
     135             :   F9S = 115,
     136             :   F10S = 116,
     137             :   F11S = 117,
     138             :   F12S = 118,
     139             :   F13S = 119,
     140             :   F14S = 120,
     141             :   F15S = 121,
     142             :   F16S = 122,
     143             :   F17S = 123,
     144             :   F18S = 124,
     145             :   F19S = 125,
     146             :   F20S = 126,
     147             :   F21S = 127,
     148             :   F22S = 128,
     149             :   F23S = 129,
     150             :   F24S = 130,
     151             :   F25S = 131,
     152             :   F26S = 132,
     153             :   F27S = 133,
     154             :   F28S = 134,
     155             :   F29S = 135,
     156             :   F30S = 136,
     157             :   F31S = 137,
     158             :   R0D = 138,
     159             :   R1D = 139,
     160             :   R2D = 140,
     161             :   R3D = 141,
     162             :   R4D = 142,
     163             :   R5D = 143,
     164             :   R6D = 144,
     165             :   R7D = 145,
     166             :   R8D = 146,
     167             :   R9D = 147,
     168             :   R10D = 148,
     169             :   R11D = 149,
     170             :   R12D = 150,
     171             :   R13D = 151,
     172             :   R14D = 152,
     173             :   R15D = 153,
     174             :   R0H = 154,
     175             :   R1H = 155,
     176             :   R2H = 156,
     177             :   R3H = 157,
     178             :   R4H = 158,
     179             :   R5H = 159,
     180             :   R6H = 160,
     181             :   R7H = 161,
     182             :   R8H = 162,
     183             :   R9H = 163,
     184             :   R10H = 164,
     185             :   R11H = 165,
     186             :   R12H = 166,
     187             :   R13H = 167,
     188             :   R14H = 168,
     189             :   R15H = 169,
     190             :   R0L = 170,
     191             :   R1L = 171,
     192             :   R2L = 172,
     193             :   R3L = 173,
     194             :   R4L = 174,
     195             :   R5L = 175,
     196             :   R6L = 176,
     197             :   R7L = 177,
     198             :   R8L = 178,
     199             :   R9L = 179,
     200             :   R10L = 180,
     201             :   R11L = 181,
     202             :   R12L = 182,
     203             :   R13L = 183,
     204             :   R14L = 184,
     205             :   R15L = 185,
     206             :   R0Q = 186,
     207             :   R2Q = 187,
     208             :   R4Q = 188,
     209             :   R6Q = 189,
     210             :   R8Q = 190,
     211             :   R10Q = 191,
     212             :   R12Q = 192,
     213             :   R14Q = 193,
     214             :   NUM_TARGET_REGS       // 194
     215             : };
     216             : } // end namespace SystemZ
     217             : 
     218             : // Register classes
     219             : 
     220             : namespace SystemZ {
     221             : enum {
     222             :   GRX32BitRegClassID = 0,
     223             :   VR32BitRegClassID = 1,
     224             :   AR32BitRegClassID = 2,
     225             :   FP32BitRegClassID = 3,
     226             :   GR32BitRegClassID = 4,
     227             :   GRH32BitRegClassID = 5,
     228             :   ADDR32BitRegClassID = 6,
     229             :   CCRRegClassID = 7,
     230             :   AnyRegBitRegClassID = 8,
     231             :   AnyRegBit_with_subreg_h32_in_FP32BitRegClassID = 9,
     232             :   VR64BitRegClassID = 10,
     233             :   AnyRegBit_with_subreg_h64RegClassID = 11,
     234             :   CR64BitRegClassID = 12,
     235             :   FP64BitRegClassID = 13,
     236             :   GR64BitRegClassID = 14,
     237             :   ADDR64BitRegClassID = 15,
     238             :   VR128BitRegClassID = 16,
     239             :   VF128BitRegClassID = 17,
     240             :   FP128BitRegClassID = 18,
     241             :   GR128BitRegClassID = 19,
     242             :   ADDR128BitRegClassID = 20,
     243             : 
     244             :   };
     245             : } // end namespace SystemZ
     246             : 
     247             : 
     248             : // Subregister indices
     249             : 
     250             : namespace SystemZ {
     251             : enum {
     252             :   NoSubRegister,
     253             :   subreg_h32,   // 1
     254             :   subreg_h64,   // 2
     255             :   subreg_hh32,  // 3
     256             :   subreg_hl32,  // 4
     257             :   subreg_l32,   // 5
     258             :   subreg_l64,   // 6
     259             :   NUM_TARGET_SUBREGS
     260             : };
     261             : } // end namespace SystemZ
     262             : 
     263             : } // end namespace llvm
     264             : 
     265             : #endif // GET_REGINFO_ENUM
     266             : 
     267             : /*===- TableGen'erated file -------------------------------------*- C++ -*-===*\
     268             : |*                                                                            *|
     269             : |* MC Register Information                                                    *|
     270             : |*                                                                            *|
     271             : |* Automatically generated file, do not edit!                                 *|
     272             : |*                                                                            *|
     273             : \*===----------------------------------------------------------------------===*/
     274             : 
     275             : 
     276             : #ifdef GET_REGINFO_MC_DESC
     277             : #undef GET_REGINFO_MC_DESC
     278             : 
     279             : namespace llvm {
     280             : 
     281             : extern const MCPhysReg SystemZRegDiffLists[] = {
     282             :   /* 0 */ 64857, 1, 1, 1, 0,
     283             :   /* 5 */ 65325, 1, 0,
     284             :   /* 8 */ 65471, 2, 0,
     285             :   /* 11 */ 65473, 2, 0,
     286             :   /* 14 */ 65475, 2, 0,
     287             :   /* 17 */ 65477, 2, 0,
     288             :   /* 20 */ 32, 40, 0,
     289             :   /* 23 */ 65506, 40, 65494, 40, 0,
     290             :   /* 28 */ 65508, 40, 65494, 40, 0,
     291             :   /* 33 */ 65510, 40, 65494, 40, 0,
     292             :   /* 38 */ 65512, 40, 65494, 40, 0,
     293             :   /* 43 */ 65504, 40, 0,
     294             :   /* 46 */ 65520, 40, 0,
     295             :   /* 49 */ 65504, 41, 0,
     296             :   /* 52 */ 65520, 41, 0,
     297             :   /* 55 */ 65504, 42, 0,
     298             :   /* 58 */ 65520, 42, 0,
     299             :   /* 61 */ 65504, 43, 0,
     300             :   /* 64 */ 65520, 43, 0,
     301             :   /* 67 */ 65504, 44, 0,
     302             :   /* 70 */ 65520, 44, 0,
     303             :   /* 73 */ 65504, 45, 0,
     304             :   /* 76 */ 65520, 45, 0,
     305             :   /* 79 */ 65504, 46, 0,
     306             :   /* 82 */ 65520, 46, 0,
     307             :   /* 85 */ 65504, 47, 0,
     308             :   /* 88 */ 65520, 47, 0,
     309             :   /* 91 */ 65504, 48, 0,
     310             :   /* 94 */ 65520, 48, 0,
     311             :   /* 97 */ 65496, 65504, 56, 0,
     312             :   /* 101 */ 65496, 65504, 58, 0,
     313             :   /* 105 */ 65496, 65504, 60, 0,
     314             :   /* 109 */ 65496, 65504, 62, 0,
     315             :   /* 113 */ 65496, 65504, 64, 0,
     316             :   /* 117 */ 65261, 0,
     317             :   /* 119 */ 65294, 0,
     318             :   /* 121 */ 65463, 0,
     319             :   /* 123 */ 65503, 0,
     320             :   /* 125 */ 65496, 65504, 0,
     321             :   /* 128 */ 65489, 32, 65520, 65519, 32, 65520, 0,
     322             :   /* 135 */ 65490, 32, 65520, 65519, 32, 65520, 0,
     323             :   /* 142 */ 65491, 32, 65520, 65519, 32, 65520, 0,
     324             :   /* 149 */ 65492, 32, 65520, 65519, 32, 65520, 0,
     325             :   /* 156 */ 65493, 32, 65520, 65519, 32, 65520, 0,
     326             :   /* 163 */ 65494, 32, 65520, 65519, 32, 65520, 0,
     327             :   /* 170 */ 65495, 32, 65520, 65519, 32, 65520, 0,
     328             :   /* 177 */ 65496, 32, 65520, 65519, 32, 65520, 0,
     329             :   /* 184 */ 65535, 0,
     330             : };
     331             : 
     332             : extern const LaneBitmask SystemZLaneMaskLists[] = {
     333             :   /* 0 */ LaneBitmask(0x00000000), LaneBitmask::getAll(),
     334             :   /* 2 */ LaneBitmask(0x00000002), LaneBitmask(0x00000001), LaneBitmask::getAll(),
     335             :   /* 5 */ LaneBitmask(0x00000004), LaneBitmask(0x00000002), LaneBitmask(0x00000008), LaneBitmask(0x00000001), LaneBitmask::getAll(),
     336             : };
     337             : 
     338             : extern const uint16_t SystemZSubRegIdxLists[] = {
     339             :   /* 0 */ 2, 1, 0,
     340             :   /* 3 */ 5, 1, 0,
     341             :   /* 6 */ 6, 1, 2, 3, 0,
     342             :   /* 11 */ 6, 5, 1, 2, 4, 3, 0,
     343             : };
     344             : 
     345             : extern const MCRegisterInfo::SubRegCoveredBits SystemZSubRegIdxRanges[] = {
     346             :   { 65535, 65535 },
     347             :   { 32, 32 },   // subreg_h32
     348             :   { 64, 64 },   // subreg_h64
     349             :   { 96, 32 },   // subreg_hh32
     350             :   { 64, 32 },   // subreg_hl32
     351             :   { 0, 32 },    // subreg_l32
     352             :   { 0, 64 },    // subreg_l64
     353             : };
     354             : 
     355             : extern const char SystemZRegStrings[] = {
     356             :   /* 0 */ 'A', '1', '0', 0,
     357             :   /* 4 */ 'C', '1', '0', 0,
     358             :   /* 8 */ 'V', '1', '0', 0,
     359             :   /* 12 */ 'V', '2', '0', 0,
     360             :   /* 16 */ 'V', '3', '0', 0,
     361             :   /* 20 */ 'A', '0', 0,
     362             :   /* 23 */ 'C', '0', 0,
     363             :   /* 26 */ 'V', '0', 0,
     364             :   /* 29 */ 'A', '1', '1', 0,
     365             :   /* 33 */ 'C', '1', '1', 0,
     366             :   /* 37 */ 'V', '1', '1', 0,
     367             :   /* 41 */ 'V', '2', '1', 0,
     368             :   /* 45 */ 'V', '3', '1', 0,
     369             :   /* 49 */ 'A', '1', 0,
     370             :   /* 52 */ 'C', '1', 0,
     371             :   /* 55 */ 'V', '1', 0,
     372             :   /* 58 */ 'A', '1', '2', 0,
     373             :   /* 62 */ 'C', '1', '2', 0,
     374             :   /* 66 */ 'V', '1', '2', 0,
     375             :   /* 70 */ 'V', '2', '2', 0,
     376             :   /* 74 */ 'A', '2', 0,
     377             :   /* 77 */ 'C', '2', 0,
     378             :   /* 80 */ 'V', '2', 0,
     379             :   /* 83 */ 'A', '1', '3', 0,
     380             :   /* 87 */ 'C', '1', '3', 0,
     381             :   /* 91 */ 'V', '1', '3', 0,
     382             :   /* 95 */ 'V', '2', '3', 0,
     383             :   /* 99 */ 'A', '3', 0,
     384             :   /* 102 */ 'C', '3', 0,
     385             :   /* 105 */ 'V', '3', 0,
     386             :   /* 108 */ 'A', '1', '4', 0,
     387             :   /* 112 */ 'C', '1', '4', 0,
     388             :   /* 116 */ 'V', '1', '4', 0,
     389             :   /* 120 */ 'V', '2', '4', 0,
     390             :   /* 124 */ 'A', '4', 0,
     391             :   /* 127 */ 'C', '4', 0,
     392             :   /* 130 */ 'V', '4', 0,
     393             :   /* 133 */ 'A', '1', '5', 0,
     394             :   /* 137 */ 'C', '1', '5', 0,
     395             :   /* 141 */ 'V', '1', '5', 0,
     396             :   /* 145 */ 'V', '2', '5', 0,
     397             :   /* 149 */ 'A', '5', 0,
     398             :   /* 152 */ 'C', '5', 0,
     399             :   /* 155 */ 'V', '5', 0,
     400             :   /* 158 */ 'V', '1', '6', 0,
     401             :   /* 162 */ 'V', '2', '6', 0,
     402             :   /* 166 */ 'A', '6', 0,
     403             :   /* 169 */ 'C', '6', 0,
     404             :   /* 172 */ 'V', '6', 0,
     405             :   /* 175 */ 'V', '1', '7', 0,
     406             :   /* 179 */ 'V', '2', '7', 0,
     407             :   /* 183 */ 'A', '7', 0,
     408             :   /* 186 */ 'C', '7', 0,
     409             :   /* 189 */ 'V', '7', 0,
     410             :   /* 192 */ 'V', '1', '8', 0,
     411             :   /* 196 */ 'V', '2', '8', 0,
     412             :   /* 200 */ 'A', '8', 0,
     413             :   /* 203 */ 'C', '8', 0,
     414             :   /* 206 */ 'V', '8', 0,
     415             :   /* 209 */ 'V', '1', '9', 0,
     416             :   /* 213 */ 'V', '2', '9', 0,
     417             :   /* 217 */ 'A', '9', 0,
     418             :   /* 220 */ 'C', '9', 0,
     419             :   /* 223 */ 'V', '9', 0,
     420             :   /* 226 */ 'C', 'C', 0,
     421             :   /* 229 */ 'F', '1', '0', 'D', 0,
     422             :   /* 234 */ 'R', '1', '0', 'D', 0,
     423             :   /* 239 */ 'F', '2', '0', 'D', 0,
     424             :   /* 244 */ 'F', '3', '0', 'D', 0,
     425             :   /* 249 */ 'F', '0', 'D', 0,
     426             :   /* 253 */ 'R', '0', 'D', 0,
     427             :   /* 257 */ 'F', '1', '1', 'D', 0,
     428             :   /* 262 */ 'R', '1', '1', 'D', 0,
     429             :   /* 267 */ 'F', '2', '1', 'D', 0,
     430             :   /* 272 */ 'F', '3', '1', 'D', 0,
     431             :   /* 277 */ 'F', '1', 'D', 0,
     432             :   /* 281 */ 'R', '1', 'D', 0,
     433             :   /* 285 */ 'F', '1', '2', 'D', 0,
     434             :   /* 290 */ 'R', '1', '2', 'D', 0,
     435             :   /* 295 */ 'F', '2', '2', 'D', 0,
     436             :   /* 300 */ 'F', '2', 'D', 0,
     437             :   /* 304 */ 'R', '2', 'D', 0,
     438             :   /* 308 */ 'F', '1', '3', 'D', 0,
     439             :   /* 313 */ 'R', '1', '3', 'D', 0,
     440             :   /* 318 */ 'F', '2', '3', 'D', 0,
     441             :   /* 323 */ 'F', '3', 'D', 0,
     442             :   /* 327 */ 'R', '3', 'D', 0,
     443             :   /* 331 */ 'F', '1', '4', 'D', 0,
     444             :   /* 336 */ 'R', '1', '4', 'D', 0,
     445             :   /* 341 */ 'F', '2', '4', 'D', 0,
     446             :   /* 346 */ 'F', '4', 'D', 0,
     447             :   /* 350 */ 'R', '4', 'D', 0,
     448             :   /* 354 */ 'F', '1', '5', 'D', 0,
     449             :   /* 359 */ 'R', '1', '5', 'D', 0,
     450             :   /* 364 */ 'F', '2', '5', 'D', 0,
     451             :   /* 369 */ 'F', '5', 'D', 0,
     452             :   /* 373 */ 'R', '5', 'D', 0,
     453             :   /* 377 */ 'F', '1', '6', 'D', 0,
     454             :   /* 382 */ 'F', '2', '6', 'D', 0,
     455             :   /* 387 */ 'F', '6', 'D', 0,
     456             :   /* 391 */ 'R', '6', 'D', 0,
     457             :   /* 395 */ 'F', '1', '7', 'D', 0,
     458             :   /* 400 */ 'F', '2', '7', 'D', 0,
     459             :   /* 405 */ 'F', '7', 'D', 0,
     460             :   /* 409 */ 'R', '7', 'D', 0,
     461             :   /* 413 */ 'F', '1', '8', 'D', 0,
     462             :   /* 418 */ 'F', '2', '8', 'D', 0,
     463             :   /* 423 */ 'F', '8', 'D', 0,
     464             :   /* 427 */ 'R', '8', 'D', 0,
     465             :   /* 431 */ 'F', '1', '9', 'D', 0,
     466             :   /* 436 */ 'F', '2', '9', 'D', 0,
     467             :   /* 441 */ 'F', '9', 'D', 0,
     468             :   /* 445 */ 'R', '9', 'D', 0,
     469             :   /* 449 */ 'R', '1', '0', 'H', 0,
     470             :   /* 454 */ 'R', '0', 'H', 0,
     471             :   /* 458 */ 'R', '1', '1', 'H', 0,
     472             :   /* 463 */ 'R', '1', 'H', 0,
     473             :   /* 467 */ 'R', '1', '2', 'H', 0,
     474             :   /* 472 */ 'R', '2', 'H', 0,
     475             :   /* 476 */ 'R', '1', '3', 'H', 0,
     476             :   /* 481 */ 'R', '3', 'H', 0,
     477             :   /* 485 */ 'R', '1', '4', 'H', 0,
     478             :   /* 490 */ 'R', '4', 'H', 0,
     479             :   /* 494 */ 'R', '1', '5', 'H', 0,
     480             :   /* 499 */ 'R', '5', 'H', 0,
     481             :   /* 503 */ 'R', '6', 'H', 0,
     482             :   /* 507 */ 'R', '7', 'H', 0,
     483             :   /* 511 */ 'R', '8', 'H', 0,
     484             :   /* 515 */ 'R', '9', 'H', 0,
     485             :   /* 519 */ 'R', '1', '0', 'L', 0,
     486             :   /* 524 */ 'R', '0', 'L', 0,
     487             :   /* 528 */ 'R', '1', '1', 'L', 0,
     488             :   /* 533 */ 'R', '1', 'L', 0,
     489             :   /* 537 */ 'R', '1', '2', 'L', 0,
     490             :   /* 542 */ 'R', '2', 'L', 0,
     491             :   /* 546 */ 'R', '1', '3', 'L', 0,
     492             :   /* 551 */ 'R', '3', 'L', 0,
     493             :   /* 555 */ 'R', '1', '4', 'L', 0,
     494             :   /* 560 */ 'R', '4', 'L', 0,
     495             :   /* 564 */ 'R', '1', '5', 'L', 0,
     496             :   /* 569 */ 'R', '5', 'L', 0,
     497             :   /* 573 */ 'R', '6', 'L', 0,
     498             :   /* 577 */ 'R', '7', 'L', 0,
     499             :   /* 581 */ 'R', '8', 'L', 0,
     500             :   /* 585 */ 'R', '9', 'L', 0,
     501             :   /* 589 */ 'R', '1', '0', 'Q', 0,
     502             :   /* 594 */ 'F', '0', 'Q', 0,
     503             :   /* 598 */ 'R', '0', 'Q', 0,
     504             :   /* 602 */ 'F', '1', 'Q', 0,
     505             :   /* 606 */ 'F', '1', '2', 'Q', 0,
     506             :   /* 611 */ 'R', '1', '2', 'Q', 0,
     507             :   /* 616 */ 'R', '2', 'Q', 0,
     508             :   /* 620 */ 'F', '1', '3', 'Q', 0,
     509             :   /* 625 */ 'R', '1', '4', 'Q', 0,
     510             :   /* 630 */ 'F', '4', 'Q', 0,
     511             :   /* 634 */ 'R', '4', 'Q', 0,
     512             :   /* 638 */ 'F', '5', 'Q', 0,
     513             :   /* 642 */ 'R', '6', 'Q', 0,
     514             :   /* 646 */ 'F', '8', 'Q', 0,
     515             :   /* 650 */ 'R', '8', 'Q', 0,
     516             :   /* 654 */ 'F', '9', 'Q', 0,
     517             :   /* 658 */ 'F', '1', '0', 'S', 0,
     518             :   /* 663 */ 'F', '2', '0', 'S', 0,
     519             :   /* 668 */ 'F', '3', '0', 'S', 0,
     520             :   /* 673 */ 'F', '0', 'S', 0,
     521             :   /* 677 */ 'F', '1', '1', 'S', 0,
     522             :   /* 682 */ 'F', '2', '1', 'S', 0,
     523             :   /* 687 */ 'F', '3', '1', 'S', 0,
     524             :   /* 692 */ 'F', '1', 'S', 0,
     525             :   /* 696 */ 'F', '1', '2', 'S', 0,
     526             :   /* 701 */ 'F', '2', '2', 'S', 0,
     527             :   /* 706 */ 'F', '2', 'S', 0,
     528             :   /* 710 */ 'F', '1', '3', 'S', 0,
     529             :   /* 715 */ 'F', '2', '3', 'S', 0,
     530             :   /* 720 */ 'F', '3', 'S', 0,
     531             :   /* 724 */ 'F', '1', '4', 'S', 0,
     532             :   /* 729 */ 'F', '2', '4', 'S', 0,
     533             :   /* 734 */ 'F', '4', 'S', 0,
     534             :   /* 738 */ 'F', '1', '5', 'S', 0,
     535             :   /* 743 */ 'F', '2', '5', 'S', 0,
     536             :   /* 748 */ 'F', '5', 'S', 0,
     537             :   /* 752 */ 'F', '1', '6', 'S', 0,
     538             :   /* 757 */ 'F', '2', '6', 'S', 0,
     539             :   /* 762 */ 'F', '6', 'S', 0,
     540             :   /* 766 */ 'F', '1', '7', 'S', 0,
     541             :   /* 771 */ 'F', '2', '7', 'S', 0,
     542             :   /* 776 */ 'F', '7', 'S', 0,
     543             :   /* 780 */ 'F', '1', '8', 'S', 0,
     544             :   /* 785 */ 'F', '2', '8', 'S', 0,
     545             :   /* 790 */ 'F', '8', 'S', 0,
     546             :   /* 794 */ 'F', '1', '9', 'S', 0,
     547             :   /* 799 */ 'F', '2', '9', 'S', 0,
     548             :   /* 804 */ 'F', '9', 'S', 0,
     549             : };
     550             : 
     551             : extern const MCRegisterDesc SystemZRegDesc[] = { // Descriptors
     552             :   { 3, 0, 0, 0, 0, 0 },
     553             :   { 226, 4, 4, 2, 2945, 0 },
     554             :   { 20, 4, 4, 2, 2945, 0 },
     555             :   { 49, 4, 4, 2, 2945, 0 },
     556             :   { 74, 4, 4, 2, 2945, 0 },
     557             :   { 99, 4, 4, 2, 2945, 0 },
     558             :   { 124, 4, 4, 2, 2945, 0 },
     559             :   { 149, 4, 4, 2, 2945, 0 },
     560             :   { 166, 4, 4, 2, 2945, 0 },
     561             :   { 183, 4, 4, 2, 2945, 0 },
     562             :   { 200, 4, 4, 2, 2945, 0 },
     563             :   { 217, 4, 4, 2, 2945, 0 },
     564             :   { 0, 4, 4, 2, 2945, 0 },
     565             :   { 29, 4, 4, 2, 2945, 0 },
     566             :   { 58, 4, 4, 2, 2945, 0 },
     567             :   { 83, 4, 4, 2, 2945, 0 },
     568             :   { 108, 4, 4, 2, 2945, 0 },
     569             :   { 133, 4, 4, 2, 2945, 0 },
     570             :   { 23, 4, 4, 2, 2945, 0 },
     571             :   { 52, 4, 4, 2, 2945, 0 },
     572             :   { 77, 4, 4, 2, 2945, 0 },
     573             :   { 102, 4, 4, 2, 2945, 0 },
     574             :   { 127, 4, 4, 2, 2945, 0 },
     575             :   { 152, 4, 4, 2, 2945, 0 },
     576             :   { 169, 4, 4, 2, 2945, 0 },
     577             :   { 186, 4, 4, 2, 2945, 0 },
     578             :   { 203, 4, 4, 2, 2945, 0 },
     579             :   { 220, 4, 4, 2, 2945, 0 },
     580             :   { 4, 4, 4, 2, 2945, 0 },
     581             :   { 33, 4, 4, 2, 2945, 0 },
     582             :   { 62, 4, 4, 2, 2945, 0 },
     583             :   { 87, 4, 4, 2, 2945, 0 },
     584             :   { 112, 4, 4, 2, 2945, 0 },
     585             :   { 137, 4, 4, 2, 2945, 0 },
     586             :   { 26, 20, 4, 0, 2945, 3 },
     587             :   { 55, 20, 4, 0, 2945, 3 },
     588             :   { 80, 20, 4, 0, 2945, 3 },
     589             :   { 105, 20, 4, 0, 2945, 3 },
     590             :   { 130, 20, 4, 0, 2945, 3 },
     591             :   { 155, 20, 4, 0, 2945, 3 },
     592             :   { 172, 20, 4, 0, 2945, 3 },
     593             :   { 189, 20, 4, 0, 2945, 3 },
     594             :   { 206, 20, 4, 0, 2945, 3 },
     595             :   { 223, 20, 4, 0, 2945, 3 },
     596             :   { 8, 20, 4, 0, 2945, 3 },
     597             :   { 37, 20, 4, 0, 2945, 3 },
     598             :   { 66, 20, 4, 0, 2945, 3 },
     599             :   { 91, 20, 4, 0, 2945, 3 },
     600             :   { 116, 20, 4, 0, 2945, 3 },
     601             :   { 141, 20, 4, 0, 2945, 3 },
     602             :   { 158, 20, 4, 0, 2945, 3 },
     603             :   { 175, 20, 4, 0, 2945, 3 },
     604             :   { 192, 20, 4, 0, 2945, 3 },
     605             :   { 209, 20, 4, 0, 2945, 3 },
     606             :   { 12, 20, 4, 0, 2945, 3 },
     607             :   { 41, 20, 4, 0, 2945, 3 },
     608             :   { 70, 20, 4, 0, 2945, 3 },
     609             :   { 95, 20, 4, 0, 2945, 3 },
     610             :   { 120, 20, 4, 0, 2945, 3 },
     611             :   { 145, 20, 4, 0, 2945, 3 },
     612             :   { 162, 20, 4, 0, 2945, 3 },
     613             :   { 179, 20, 4, 0, 2945, 3 },
     614             :   { 196, 20, 4, 0, 2945, 3 },
     615             :   { 213, 20, 4, 0, 2945, 3 },
     616             :   { 16, 20, 4, 0, 2945, 3 },
     617             :   { 45, 20, 4, 0, 2945, 3 },
     618             :   { 249, 21, 114, 1, 1969, 3 },
     619             :   { 277, 21, 114, 1, 1969, 3 },
     620             :   { 300, 21, 110, 1, 1969, 3 },
     621             :   { 323, 21, 110, 1, 1969, 3 },
     622             :   { 346, 21, 110, 1, 1969, 3 },
     623             :   { 369, 21, 110, 1, 1969, 3 },
     624             :   { 387, 21, 106, 1, 1969, 3 },
     625             :   { 405, 21, 106, 1, 1969, 3 },
     626             :   { 423, 21, 106, 1, 1969, 3 },
     627             :   { 441, 21, 106, 1, 1969, 3 },
     628             :   { 229, 21, 102, 1, 1969, 3 },
     629             :   { 257, 21, 102, 1, 1969, 3 },
     630             :   { 285, 21, 102, 1, 1969, 3 },
     631             :   { 308, 21, 102, 1, 1969, 3 },
     632             :   { 331, 21, 98, 1, 1969, 3 },
     633             :   { 354, 21, 98, 1, 1969, 3 },
     634             :   { 377, 21, 126, 1, 1969, 3 },
     635             :   { 395, 21, 126, 1, 1969, 3 },
     636             :   { 413, 21, 126, 1, 1969, 3 },
     637             :   { 431, 21, 126, 1, 1969, 3 },
     638             :   { 239, 21, 126, 1, 1969, 3 },
     639             :   { 267, 21, 126, 1, 1969, 3 },
     640             :   { 295, 21, 126, 1, 1969, 3 },
     641             :   { 318, 21, 126, 1, 1969, 3 },
     642             :   { 341, 21, 126, 1, 1969, 3 },
     643             :   { 364, 21, 126, 1, 1969, 3 },
     644             :   { 382, 21, 126, 1, 1969, 3 },
     645             :   { 400, 21, 126, 1, 1969, 3 },
     646             :   { 418, 21, 126, 1, 1969, 3 },
     647             :   { 436, 21, 126, 1, 1969, 3 },
     648             :   { 244, 21, 126, 1, 1969, 3 },
     649             :   { 272, 21, 126, 1, 1969, 3 },
     650             :   { 594, 23, 4, 6, 129, 2 },
     651             :   { 602, 23, 4, 6, 129, 2 },
     652             :   { 630, 28, 4, 6, 177, 2 },
     653             :   { 638, 28, 4, 6, 177, 2 },
     654             :   { 646, 33, 4, 6, 225, 2 },
     655             :   { 654, 33, 4, 6, 225, 2 },
     656             :   { 606, 38, 4, 6, 273, 2 },
     657             :   { 620, 38, 4, 6, 273, 2 },
     658             :   { 673, 4, 113, 2, 1937, 0 },
     659             :   { 692, 4, 113, 2, 1937, 0 },
     660             :   { 706, 4, 109, 2, 1937, 0 },
     661             :   { 720, 4, 109, 2, 1937, 0 },
     662             :   { 734, 4, 109, 2, 1937, 0 },
     663             :   { 748, 4, 109, 2, 1937, 0 },
     664             :   { 762, 4, 105, 2, 1937, 0 },
     665             :   { 776, 4, 105, 2, 1937, 0 },
     666             :   { 790, 4, 105, 2, 1937, 0 },
     667             :   { 804, 4, 105, 2, 1937, 0 },
     668             :   { 658, 4, 101, 2, 1937, 0 },
     669             :   { 677, 4, 101, 2, 1937, 0 },
     670             :   { 696, 4, 101, 2, 1937, 0 },
     671             :   { 710, 4, 101, 2, 1937, 0 },
     672             :   { 724, 4, 97, 2, 1937, 0 },
     673             :   { 738, 4, 97, 2, 1937, 0 },
     674             :   { 752, 4, 125, 2, 1937, 0 },
     675             :   { 766, 4, 125, 2, 1937, 0 },
     676             :   { 780, 4, 125, 2, 1937, 0 },
     677             :   { 794, 4, 125, 2, 1937, 0 },
     678             :   { 663, 4, 125, 2, 1937, 0 },
     679             :   { 682, 4, 125, 2, 1937, 0 },
     680             :   { 701, 4, 125, 2, 1937, 0 },
     681             :   { 715, 4, 125, 2, 1937, 0 },
     682             :   { 729, 4, 125, 2, 1937, 0 },
     683             :   { 743, 4, 125, 2, 1937, 0 },
     684             :   { 757, 4, 125, 2, 1937, 0 },
     685             :   { 771, 4, 125, 2, 1937, 0 },
     686             :   { 785, 4, 125, 2, 1937, 0 },
     687             :   { 799, 4, 125, 2, 1937, 0 },
     688             :   { 668, 4, 125, 2, 1937, 0 },
     689             :   { 687, 4, 125, 2, 1937, 0 },
     690             :   { 253, 132, 92, 3, 82, 7 },
     691             :   { 281, 132, 86, 3, 82, 7 },
     692             :   { 304, 132, 86, 3, 82, 7 },
     693             :   { 327, 132, 80, 3, 82, 7 },
     694             :   { 350, 132, 80, 3, 82, 7 },
     695             :   { 373, 132, 74, 3, 82, 7 },
     696             :   { 391, 132, 74, 3, 82, 7 },
     697             :   { 409, 132, 68, 3, 82, 7 },
     698             :   { 427, 132, 68, 3, 82, 7 },
     699             :   { 445, 132, 62, 3, 82, 7 },
     700             :   { 234, 132, 62, 3, 82, 7 },
     701             :   { 262, 132, 56, 3, 82, 7 },
     702             :   { 290, 132, 56, 3, 82, 7 },
     703             :   { 313, 132, 50, 3, 82, 7 },
     704             :   { 336, 132, 50, 3, 82, 7 },
     705             :   { 359, 132, 21, 3, 82, 7 },
     706             :   { 454, 4, 94, 2, 1906, 0 },
     707             :   { 463, 4, 88, 2, 1906, 0 },
     708             :   { 472, 4, 88, 2, 1906, 0 },
     709             :   { 481, 4, 82, 2, 1906, 0 },
     710             :   { 490, 4, 82, 2, 1906, 0 },
     711             :   { 499, 4, 76, 2, 1906, 0 },
     712             :   { 503, 4, 76, 2, 1906, 0 },
     713             :   { 507, 4, 70, 2, 1906, 0 },
     714             :   { 511, 4, 70, 2, 1906, 0 },
     715             :   { 515, 4, 64, 2, 1906, 0 },
     716             :   { 449, 4, 64, 2, 1906, 0 },
     717             :   { 458, 4, 58, 2, 1906, 0 },
     718             :   { 467, 4, 58, 2, 1906, 0 },
     719             :   { 476, 4, 52, 2, 1906, 0 },
     720             :   { 485, 4, 52, 2, 1906, 0 },
     721             :   { 494, 4, 46, 2, 1906, 0 },
     722             :   { 524, 4, 91, 2, 1874, 0 },
     723             :   { 533, 4, 85, 2, 1874, 0 },
     724             :   { 542, 4, 85, 2, 1874, 0 },
     725             :   { 551, 4, 79, 2, 1874, 0 },
     726             :   { 560, 4, 79, 2, 1874, 0 },
     727             :   { 569, 4, 73, 2, 1874, 0 },
     728             :   { 573, 4, 73, 2, 1874, 0 },
     729             :   { 577, 4, 67, 2, 1874, 0 },
     730             :   { 581, 4, 67, 2, 1874, 0 },
     731             :   { 585, 4, 61, 2, 1874, 0 },
     732             :   { 519, 4, 61, 2, 1874, 0 },
     733             :   { 528, 4, 55, 2, 1874, 0 },
     734             :   { 537, 4, 55, 2, 1874, 0 },
     735             :   { 546, 4, 49, 2, 1874, 0 },
     736             :   { 555, 4, 49, 2, 1874, 0 },
     737             :   { 564, 4, 43, 2, 1874, 0 },
     738             :   { 598, 128, 4, 11, 4, 5 },
     739             :   { 616, 135, 4, 11, 4, 5 },
     740             :   { 634, 142, 4, 11, 4, 5 },
     741             :   { 642, 149, 4, 11, 4, 5 },
     742             :   { 650, 156, 4, 11, 4, 5 },
     743             :   { 589, 163, 4, 11, 4, 5 },
     744             :   { 611, 170, 4, 11, 4, 5 },
     745             :   { 625, 177, 4, 11, 4, 5 },
     746             : };
     747             : 
     748             : extern const MCPhysReg SystemZRegUnitRoots[][2] = {
     749             :   { SystemZ::CC },
     750             :   { SystemZ::A0 },
     751             :   { SystemZ::A1 },
     752             :   { SystemZ::A2 },
     753             :   { SystemZ::A3 },
     754             :   { SystemZ::A4 },
     755             :   { SystemZ::A5 },
     756             :   { SystemZ::A6 },
     757             :   { SystemZ::A7 },
     758             :   { SystemZ::A8 },
     759             :   { SystemZ::A9 },
     760             :   { SystemZ::A10 },
     761             :   { SystemZ::A11 },
     762             :   { SystemZ::A12 },
     763             :   { SystemZ::A13 },
     764             :   { SystemZ::A14 },
     765             :   { SystemZ::A15 },
     766             :   { SystemZ::C0 },
     767             :   { SystemZ::C1 },
     768             :   { SystemZ::C2 },
     769             :   { SystemZ::C3 },
     770             :   { SystemZ::C4 },
     771             :   { SystemZ::C5 },
     772             :   { SystemZ::C6 },
     773             :   { SystemZ::C7 },
     774             :   { SystemZ::C8 },
     775             :   { SystemZ::C9 },
     776             :   { SystemZ::C10 },
     777             :   { SystemZ::C11 },
     778             :   { SystemZ::C12 },
     779             :   { SystemZ::C13 },
     780             :   { SystemZ::C14 },
     781             :   { SystemZ::C15 },
     782             :   { SystemZ::F0S },
     783             :   { SystemZ::F1S },
     784             :   { SystemZ::F2S },
     785             :   { SystemZ::F3S },
     786             :   { SystemZ::F4S },
     787             :   { SystemZ::F5S },
     788             :   { SystemZ::F6S },
     789             :   { SystemZ::F7S },
     790             :   { SystemZ::F8S },
     791             :   { SystemZ::F9S },
     792             :   { SystemZ::F10S },
     793             :   { SystemZ::F11S },
     794             :   { SystemZ::F12S },
     795             :   { SystemZ::F13S },
     796             :   { SystemZ::F14S },
     797             :   { SystemZ::F15S },
     798             :   { SystemZ::F16S },
     799             :   { SystemZ::F17S },
     800             :   { SystemZ::F18S },
     801             :   { SystemZ::F19S },
     802             :   { SystemZ::F20S },
     803             :   { SystemZ::F21S },
     804             :   { SystemZ::F22S },
     805             :   { SystemZ::F23S },
     806             :   { SystemZ::F24S },
     807             :   { SystemZ::F25S },
     808             :   { SystemZ::F26S },
     809             :   { SystemZ::F27S },
     810             :   { SystemZ::F28S },
     811             :   { SystemZ::F29S },
     812             :   { SystemZ::F30S },
     813             :   { SystemZ::F31S },
     814             :   { SystemZ::R0L },
     815             :   { SystemZ::R0H },
     816             :   { SystemZ::R1L },
     817             :   { SystemZ::R1H },
     818             :   { SystemZ::R2L },
     819             :   { SystemZ::R2H },
     820             :   { SystemZ::R3L },
     821             :   { SystemZ::R3H },
     822             :   { SystemZ::R4L },
     823             :   { SystemZ::R4H },
     824             :   { SystemZ::R5L },
     825             :   { SystemZ::R5H },
     826             :   { SystemZ::R6L },
     827             :   { SystemZ::R6H },
     828             :   { SystemZ::R7L },
     829             :   { SystemZ::R7H },
     830             :   { SystemZ::R8L },
     831             :   { SystemZ::R8H },
     832             :   { SystemZ::R9L },
     833             :   { SystemZ::R9H },
     834             :   { SystemZ::R10L },
     835             :   { SystemZ::R10H },
     836             :   { SystemZ::R11L },
     837             :   { SystemZ::R11H },
     838             :   { SystemZ::R12L },
     839             :   { SystemZ::R12H },
     840             :   { SystemZ::R13L },
     841             :   { SystemZ::R13H },
     842             :   { SystemZ::R14L },
     843             :   { SystemZ::R14H },
     844             :   { SystemZ::R15L },
     845             :   { SystemZ::R15H },
     846             : };
     847             : 
     848             : namespace {     // Register classes...
     849             :   // GRX32Bit Register Class...
     850             :   const MCPhysReg GRX32Bit[] = {
     851             :     SystemZ::R0L, SystemZ::R1L, SystemZ::R2L, SystemZ::R3L, SystemZ::R4L, SystemZ::R5L, SystemZ::R0H, SystemZ::R1H, SystemZ::R2H, SystemZ::R3H, SystemZ::R4H, SystemZ::R5H, SystemZ::R15L, SystemZ::R15H, SystemZ::R14L, SystemZ::R14H, SystemZ::R13L, SystemZ::R13H, SystemZ::R12L, SystemZ::R12H, SystemZ::R11L, SystemZ::R11H, SystemZ::R10L, SystemZ::R10H, SystemZ::R9L, SystemZ::R9H, SystemZ::R8L, SystemZ::R8H, SystemZ::R7L, SystemZ::R7H, SystemZ::R6L, SystemZ::R6H, 
     852             :   };
     853             : 
     854             :   // GRX32Bit Bit set.
     855             :   const uint8_t GRX32BitBits[] = {
     856             :     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, 0xff, 0xff, 0xff, 0x03, 
     857             :   };
     858             : 
     859             :   // VR32Bit Register Class...
     860             :   const MCPhysReg VR32Bit[] = {
     861             :     SystemZ::F0S, SystemZ::F1S, SystemZ::F2S, SystemZ::F3S, SystemZ::F4S, SystemZ::F5S, SystemZ::F6S, SystemZ::F7S, SystemZ::F16S, SystemZ::F17S, SystemZ::F18S, SystemZ::F19S, SystemZ::F20S, SystemZ::F21S, SystemZ::F22S, SystemZ::F23S, SystemZ::F24S, SystemZ::F25S, SystemZ::F26S, SystemZ::F27S, SystemZ::F28S, SystemZ::F29S, SystemZ::F30S, SystemZ::F31S, SystemZ::F8S, SystemZ::F9S, SystemZ::F10S, SystemZ::F11S, SystemZ::F12S, SystemZ::F13S, SystemZ::F14S, SystemZ::F15S, 
     862             :   };
     863             : 
     864             :   // VR32Bit Bit set.
     865             :   const uint8_t VR32BitBits[] = {
     866             :     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, 0xff, 0xff, 0xff, 0x03, 
     867             :   };
     868             : 
     869             :   // AR32Bit Register Class...
     870             :   const MCPhysReg AR32Bit[] = {
     871             :     SystemZ::A0, SystemZ::A1, SystemZ::A2, SystemZ::A3, SystemZ::A4, SystemZ::A5, SystemZ::A6, SystemZ::A7, SystemZ::A8, SystemZ::A9, SystemZ::A10, SystemZ::A11, SystemZ::A12, SystemZ::A13, SystemZ::A14, SystemZ::A15, 
     872             :   };
     873             : 
     874             :   // AR32Bit Bit set.
     875             :   const uint8_t AR32BitBits[] = {
     876             :     0xfc, 0xff, 0x03, 
     877             :   };
     878             : 
     879             :   // FP32Bit Register Class...
     880             :   const MCPhysReg FP32Bit[] = {
     881             :     SystemZ::F0S, SystemZ::F1S, SystemZ::F2S, SystemZ::F3S, SystemZ::F4S, SystemZ::F5S, SystemZ::F6S, SystemZ::F7S, SystemZ::F8S, SystemZ::F9S, SystemZ::F10S, SystemZ::F11S, SystemZ::F12S, SystemZ::F13S, SystemZ::F14S, SystemZ::F15S, 
     882             :   };
     883             : 
     884             :   // FP32Bit Bit set.
     885             :   const uint8_t FP32BitBits[] = {
     886             :     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, 0xff, 0x03, 
     887             :   };
     888             : 
     889             :   // GR32Bit Register Class...
     890             :   const MCPhysReg GR32Bit[] = {
     891             :     SystemZ::R0L, SystemZ::R1L, SystemZ::R2L, SystemZ::R3L, SystemZ::R4L, SystemZ::R5L, SystemZ::R15L, SystemZ::R14L, SystemZ::R13L, SystemZ::R12L, SystemZ::R11L, SystemZ::R10L, SystemZ::R9L, SystemZ::R8L, SystemZ::R7L, SystemZ::R6L, 
     892             :   };
     893             : 
     894             :   // GR32Bit Bit set.
     895             :   const uint8_t GR32BitBits[] = {
     896             :     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, 0xff, 0x03, 
     897             :   };
     898             : 
     899             :   // GRH32Bit Register Class...
     900             :   const MCPhysReg GRH32Bit[] = {
     901             :     SystemZ::R0H, SystemZ::R1H, SystemZ::R2H, SystemZ::R3H, SystemZ::R4H, SystemZ::R5H, SystemZ::R15H, SystemZ::R14H, SystemZ::R13H, SystemZ::R12H, SystemZ::R11H, SystemZ::R10H, SystemZ::R9H, SystemZ::R8H, SystemZ::R7H, SystemZ::R6H, 
     902             :   };
     903             : 
     904             :   // GRH32Bit Bit set.
     905             :   const uint8_t GRH32BitBits[] = {
     906             :     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, 0xff, 0x03, 
     907             :   };
     908             : 
     909             :   // ADDR32Bit Register Class...
     910             :   const MCPhysReg ADDR32Bit[] = {
     911             :     SystemZ::R1L, SystemZ::R2L, SystemZ::R3L, SystemZ::R4L, SystemZ::R5L, SystemZ::R15L, SystemZ::R14L, SystemZ::R13L, SystemZ::R12L, SystemZ::R11L, SystemZ::R10L, SystemZ::R9L, SystemZ::R8L, SystemZ::R7L, SystemZ::R6L, 
     912             :   };
     913             : 
     914             :   // ADDR32Bit Bit set.
     915             :   const uint8_t ADDR32BitBits[] = {
     916             :     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0xff, 0x03, 
     917             :   };
     918             : 
     919             :   // CCR Register Class...
     920             :   const MCPhysReg CCR[] = {
     921             :     SystemZ::CC, 
     922             :   };
     923             : 
     924             :   // CCR Bit set.
     925             :   const uint8_t CCRBits[] = {
     926             :     0x02, 
     927             :   };
     928             : 
     929             :   // AnyRegBit Register Class...
     930             :   const MCPhysReg AnyRegBit[] = {
     931             :     SystemZ::R0D, SystemZ::R1D, SystemZ::R2D, SystemZ::R3D, SystemZ::R4D, SystemZ::R5D, SystemZ::R6D, SystemZ::R7D, SystemZ::R8D, SystemZ::R9D, SystemZ::R10D, SystemZ::R11D, SystemZ::R12D, SystemZ::R13D, SystemZ::R14D, SystemZ::R15D, SystemZ::F0D, SystemZ::F1D, SystemZ::F2D, SystemZ::F3D, SystemZ::F4D, SystemZ::F5D, SystemZ::F6D, SystemZ::F7D, SystemZ::F8D, SystemZ::F9D, SystemZ::F10D, SystemZ::F11D, SystemZ::F12D, SystemZ::F13D, SystemZ::F14D, SystemZ::F15D, SystemZ::V0, SystemZ::V1, SystemZ::V2, SystemZ::V3, SystemZ::V4, SystemZ::V5, SystemZ::V6, SystemZ::V7, SystemZ::V8, SystemZ::V9, SystemZ::V10, SystemZ::V11, SystemZ::V12, SystemZ::V13, SystemZ::V14, SystemZ::V15, 
     932             :   };
     933             : 
     934             :   // AnyRegBit Bit set.
     935             :   const uint8_t AnyRegBitBits[] = {
     936             :     0x00, 0x00, 0x00, 0x00, 0xfc, 0xff, 0x03, 0x00, 0xfc, 0xff, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, 0xff, 0x03, 
     937             :   };
     938             : 
     939             :   // AnyRegBit_with_subreg_h32_in_FP32Bit Register Class...
     940             :   const MCPhysReg AnyRegBit_with_subreg_h32_in_FP32Bit[] = {
     941             :     SystemZ::F0D, SystemZ::F1D, SystemZ::F2D, SystemZ::F3D, SystemZ::F4D, SystemZ::F5D, SystemZ::F6D, SystemZ::F7D, SystemZ::F8D, SystemZ::F9D, SystemZ::F10D, SystemZ::F11D, SystemZ::F12D, SystemZ::F13D, SystemZ::F14D, SystemZ::F15D, SystemZ::V0, SystemZ::V1, SystemZ::V2, SystemZ::V3, SystemZ::V4, SystemZ::V5, SystemZ::V6, SystemZ::V7, SystemZ::V8, SystemZ::V9, SystemZ::V10, SystemZ::V11, SystemZ::V12, SystemZ::V13, SystemZ::V14, SystemZ::V15, 
     942             :   };
     943             : 
     944             :   // AnyRegBit_with_subreg_h32_in_FP32Bit Bit set.
     945             :   const uint8_t AnyRegBit_with_subreg_h32_in_FP32BitBits[] = {
     946             :     0x00, 0x00, 0x00, 0x00, 0xfc, 0xff, 0x03, 0x00, 0xfc, 0xff, 0x03, 
     947             :   };
     948             : 
     949             :   // VR64Bit Register Class...
     950             :   const MCPhysReg VR64Bit[] = {
     951             :     SystemZ::F0D, SystemZ::F1D, SystemZ::F2D, SystemZ::F3D, SystemZ::F4D, SystemZ::F5D, SystemZ::F6D, SystemZ::F7D, SystemZ::F16D, SystemZ::F17D, SystemZ::F18D, SystemZ::F19D, SystemZ::F20D, SystemZ::F21D, SystemZ::F22D, SystemZ::F23D, SystemZ::F24D, SystemZ::F25D, SystemZ::F26D, SystemZ::F27D, SystemZ::F28D, SystemZ::F29D, SystemZ::F30D, SystemZ::F31D, SystemZ::F8D, SystemZ::F9D, SystemZ::F10D, SystemZ::F11D, SystemZ::F12D, SystemZ::F13D, SystemZ::F14D, SystemZ::F15D, 
     952             :   };
     953             : 
     954             :   // VR64Bit Bit set.
     955             :   const uint8_t VR64BitBits[] = {
     956             :     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, 0xff, 0xff, 0xff, 0x03, 
     957             :   };
     958             : 
     959             :   // AnyRegBit_with_subreg_h64 Register Class...
     960             :   const MCPhysReg AnyRegBit_with_subreg_h64[] = {
     961             :     SystemZ::V0, SystemZ::V1, SystemZ::V2, SystemZ::V3, SystemZ::V4, SystemZ::V5, SystemZ::V6, SystemZ::V7, SystemZ::V8, SystemZ::V9, SystemZ::V10, SystemZ::V11, SystemZ::V12, SystemZ::V13, SystemZ::V14, SystemZ::V15, 
     962             :   };
     963             : 
     964             :   // AnyRegBit_with_subreg_h64 Bit set.
     965             :   const uint8_t AnyRegBit_with_subreg_h64Bits[] = {
     966             :     0x00, 0x00, 0x00, 0x00, 0xfc, 0xff, 0x03, 
     967             :   };
     968             : 
     969             :   // CR64Bit Register Class...
     970             :   const MCPhysReg CR64Bit[] = {
     971             :     SystemZ::C0, SystemZ::C1, SystemZ::C2, SystemZ::C3, SystemZ::C4, SystemZ::C5, SystemZ::C6, SystemZ::C7, SystemZ::C8, SystemZ::C9, SystemZ::C10, SystemZ::C11, SystemZ::C12, SystemZ::C13, SystemZ::C14, SystemZ::C15, 
     972             :   };
     973             : 
     974             :   // CR64Bit Bit set.
     975             :   const uint8_t CR64BitBits[] = {
     976             :     0x00, 0x00, 0xfc, 0xff, 0x03, 
     977             :   };
     978             : 
     979             :   // FP64Bit Register Class...
     980             :   const MCPhysReg FP64Bit[] = {
     981             :     SystemZ::F0D, SystemZ::F1D, SystemZ::F2D, SystemZ::F3D, SystemZ::F4D, SystemZ::F5D, SystemZ::F6D, SystemZ::F7D, SystemZ::F8D, SystemZ::F9D, SystemZ::F10D, SystemZ::F11D, SystemZ::F12D, SystemZ::F13D, SystemZ::F14D, SystemZ::F15D, 
     982             :   };
     983             : 
     984             :   // FP64Bit Bit set.
     985             :   const uint8_t FP64BitBits[] = {
     986             :     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, 0xff, 0x03, 
     987             :   };
     988             : 
     989             :   // GR64Bit Register Class...
     990             :   const MCPhysReg GR64Bit[] = {
     991             :     SystemZ::R0D, SystemZ::R1D, SystemZ::R2D, SystemZ::R3D, SystemZ::R4D, SystemZ::R5D, SystemZ::R15D, SystemZ::R14D, SystemZ::R13D, SystemZ::R12D, SystemZ::R11D, SystemZ::R10D, SystemZ::R9D, SystemZ::R8D, SystemZ::R7D, SystemZ::R6D, 
     992             :   };
     993             : 
     994             :   // GR64Bit Bit set.
     995             :   const uint8_t GR64BitBits[] = {
     996             :     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, 0xff, 0x03, 
     997             :   };
     998             : 
     999             :   // ADDR64Bit Register Class...
    1000             :   const MCPhysReg ADDR64Bit[] = {
    1001             :     SystemZ::R1D, SystemZ::R2D, SystemZ::R3D, SystemZ::R4D, SystemZ::R5D, SystemZ::R15D, SystemZ::R14D, SystemZ::R13D, SystemZ::R12D, SystemZ::R11D, SystemZ::R10D, SystemZ::R9D, SystemZ::R8D, SystemZ::R7D, SystemZ::R6D, 
    1002             :   };
    1003             : 
    1004             :   // ADDR64Bit Bit set.
    1005             :   const uint8_t ADDR64BitBits[] = {
    1006             :     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0xff, 0x03, 
    1007             :   };
    1008             : 
    1009             :   // VR128Bit Register Class...
    1010             :   const MCPhysReg VR128Bit[] = {
    1011             :     SystemZ::V0, SystemZ::V1, SystemZ::V2, SystemZ::V3, SystemZ::V4, SystemZ::V5, SystemZ::V6, SystemZ::V7, SystemZ::V16, SystemZ::V17, SystemZ::V18, SystemZ::V19, SystemZ::V20, SystemZ::V21, SystemZ::V22, SystemZ::V23, SystemZ::V24, SystemZ::V25, SystemZ::V26, SystemZ::V27, SystemZ::V28, SystemZ::V29, SystemZ::V30, SystemZ::V31, SystemZ::V8, SystemZ::V9, SystemZ::V10, SystemZ::V11, SystemZ::V12, SystemZ::V13, SystemZ::V14, SystemZ::V15, 
    1012             :   };
    1013             : 
    1014             :   // VR128Bit Bit set.
    1015             :   const uint8_t VR128BitBits[] = {
    1016             :     0x00, 0x00, 0x00, 0x00, 0xfc, 0xff, 0xff, 0xff, 0x03, 
    1017             :   };
    1018             : 
    1019             :   // VF128Bit Register Class...
    1020             :   const MCPhysReg VF128Bit[] = {
    1021             :     SystemZ::V0, SystemZ::V1, SystemZ::V2, SystemZ::V3, SystemZ::V4, SystemZ::V5, SystemZ::V6, SystemZ::V7, SystemZ::V8, SystemZ::V9, SystemZ::V10, SystemZ::V11, SystemZ::V12, SystemZ::V13, SystemZ::V14, SystemZ::V15, 
    1022             :   };
    1023             : 
    1024             :   // VF128Bit Bit set.
    1025             :   const uint8_t VF128BitBits[] = {
    1026             :     0x00, 0x00, 0x00, 0x00, 0xfc, 0xff, 0x03, 
    1027             :   };
    1028             : 
    1029             :   // FP128Bit Register Class...
    1030             :   const MCPhysReg FP128Bit[] = {
    1031             :     SystemZ::F0Q, SystemZ::F1Q, SystemZ::F4Q, SystemZ::F5Q, SystemZ::F8Q, SystemZ::F9Q, SystemZ::F12Q, SystemZ::F13Q, 
    1032             :   };
    1033             : 
    1034             :   // FP128Bit Bit set.
    1035             :   const uint8_t FP128BitBits[] = {
    1036             :     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, 0x03, 
    1037             :   };
    1038             : 
    1039             :   // GR128Bit Register Class...
    1040             :   const MCPhysReg GR128Bit[] = {
    1041             :     SystemZ::R0Q, SystemZ::R2Q, SystemZ::R4Q, SystemZ::R12Q, SystemZ::R10Q, SystemZ::R8Q, SystemZ::R6Q, SystemZ::R14Q, 
    1042             :   };
    1043             : 
    1044             :   // GR128Bit Bit set.
    1045             :   const uint8_t GR128BitBits[] = {
    1046             :     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, 0x03, 
    1047             :   };
    1048             : 
    1049             :   // ADDR128Bit Register Class...
    1050             :   const MCPhysReg ADDR128Bit[] = {
    1051             :     SystemZ::R2Q, SystemZ::R4Q, SystemZ::R12Q, SystemZ::R10Q, SystemZ::R8Q, SystemZ::R6Q, SystemZ::R14Q, 
    1052             :   };
    1053             : 
    1054             :   // ADDR128Bit Bit set.
    1055             :   const uint8_t ADDR128BitBits[] = {
    1056             :     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0x03, 
    1057             :   };
    1058             : 
    1059             : } // end anonymous namespace
    1060             : 
    1061             : extern const char SystemZRegClassStrings[] = {
    1062             :   /* 0 */ 'A', 'n', 'y', 'R', 'e', 'g', 'B', 'i', 't', '_', 'w', 'i', 't', 'h', '_', 's', 'u', 'b', 'r', 'e', 'g', '_', 'h', '6', '4', 0,
    1063             :   /* 26 */ 'C', 'C', 'R', 0,
    1064             :   /* 30 */ 'G', 'R', 'H', '3', '2', 'B', 'i', 't', 0,
    1065             :   /* 39 */ 'A', 'n', 'y', 'R', 'e', 'g', 'B', 'i', 't', '_', 'w', 'i', 't', 'h', '_', 's', 'u', 'b', 'r', 'e', 'g', '_', 'h', '3', '2', '_', 'i', 'n', '_', 'F', 'P', '3', '2', 'B', 'i', 't', 0,
    1066             :   /* 76 */ 'A', 'R', '3', '2', 'B', 'i', 't', 0,
    1067             :   /* 84 */ 'A', 'D', 'D', 'R', '3', '2', 'B', 'i', 't', 0,
    1068             :   /* 94 */ 'G', 'R', '3', '2', 'B', 'i', 't', 0,
    1069             :   /* 102 */ 'V', 'R', '3', '2', 'B', 'i', 't', 0,
    1070             :   /* 110 */ 'G', 'R', 'X', '3', '2', 'B', 'i', 't', 0,
    1071             :   /* 119 */ 'F', 'P', '6', '4', 'B', 'i', 't', 0,
    1072             :   /* 127 */ 'C', 'R', '6', '4', 'B', 'i', 't', 0,
    1073             :   /* 135 */ 'A', 'D', 'D', 'R', '6', '4', 'B', 'i', 't', 0,
    1074             :   /* 145 */ 'G', 'R', '6', '4', 'B', 'i', 't', 0,
    1075             :   /* 153 */ 'V', 'R', '6', '4', 'B', 'i', 't', 0,
    1076             :   /* 161 */ 'V', 'F', '1', '2', '8', 'B', 'i', 't', 0,
    1077             :   /* 170 */ 'F', 'P', '1', '2', '8', 'B', 'i', 't', 0,
    1078             :   /* 179 */ 'A', 'D', 'D', 'R', '1', '2', '8', 'B', 'i', 't', 0,
    1079             :   /* 190 */ 'G', 'R', '1', '2', '8', 'B', 'i', 't', 0,
    1080             :   /* 199 */ 'V', 'R', '1', '2', '8', 'B', 'i', 't', 0,
    1081             :   /* 208 */ 'A', 'n', 'y', 'R', 'e', 'g', 'B', 'i', 't', 0,
    1082             : };
    1083             : 
    1084             : extern const MCRegisterClass SystemZMCRegisterClasses[] = {
    1085             :   { GRX32Bit, GRX32BitBits, 110, 32, sizeof(GRX32BitBits), SystemZ::GRX32BitRegClassID, 1, true },
    1086             :   { VR32Bit, VR32BitBits, 102, 32, sizeof(VR32BitBits), SystemZ::VR32BitRegClassID, 1, true },
    1087             :   { AR32Bit, AR32BitBits, 76, 16, sizeof(AR32BitBits), SystemZ::AR32BitRegClassID, 1, false },
    1088             :   { FP32Bit, FP32BitBits, 68, 16, sizeof(FP32BitBits), SystemZ::FP32BitRegClassID, 1, true },
    1089             :   { GR32Bit, GR32BitBits, 94, 16, sizeof(GR32BitBits), SystemZ::GR32BitRegClassID, 1, true },
    1090             :   { GRH32Bit, GRH32BitBits, 30, 16, sizeof(GRH32BitBits), SystemZ::GRH32BitRegClassID, 1, true },
    1091             :   { ADDR32Bit, ADDR32BitBits, 84, 15, sizeof(ADDR32BitBits), SystemZ::ADDR32BitRegClassID, 1, true },
    1092             :   { CCR, CCRBits, 26, 1, sizeof(CCRBits), SystemZ::CCRRegClassID, -1, false },
    1093             :   { AnyRegBit, AnyRegBitBits, 208, 48, sizeof(AnyRegBitBits), SystemZ::AnyRegBitRegClassID, 1, false },
    1094             :   { AnyRegBit_with_subreg_h32_in_FP32Bit, AnyRegBit_with_subreg_h32_in_FP32BitBits, 39, 32, sizeof(AnyRegBit_with_subreg_h32_in_FP32BitBits), SystemZ::AnyRegBit_with_subreg_h32_in_FP32BitRegClassID, 1, false },
    1095             :   { VR64Bit, VR64BitBits, 153, 32, sizeof(VR64BitBits), SystemZ::VR64BitRegClassID, 1, true },
    1096             :   { AnyRegBit_with_subreg_h64, AnyRegBit_with_subreg_h64Bits, 0, 16, sizeof(AnyRegBit_with_subreg_h64Bits), SystemZ::AnyRegBit_with_subreg_h64RegClassID, 1, false },
    1097             :   { CR64Bit, CR64BitBits, 127, 16, sizeof(CR64BitBits), SystemZ::CR64BitRegClassID, 1, false },
    1098             :   { FP64Bit, FP64BitBits, 119, 16, sizeof(FP64BitBits), SystemZ::FP64BitRegClassID, 1, true },
    1099             :   { GR64Bit, GR64BitBits, 145, 16, sizeof(GR64BitBits), SystemZ::GR64BitRegClassID, 1, true },
    1100             :   { ADDR64Bit, ADDR64BitBits, 135, 15, sizeof(ADDR64BitBits), SystemZ::ADDR64BitRegClassID, 1, true },
    1101             :   { VR128Bit, VR128BitBits, 199, 32, sizeof(VR128BitBits), SystemZ::VR128BitRegClassID, 1, true },
    1102             :   { VF128Bit, VF128BitBits, 161, 16, sizeof(VF128BitBits), SystemZ::VF128BitRegClassID, 1, true },
    1103             :   { FP128Bit, FP128BitBits, 170, 8, sizeof(FP128BitBits), SystemZ::FP128BitRegClassID, 1, true },
    1104             :   { GR128Bit, GR128BitBits, 190, 8, sizeof(GR128BitBits), SystemZ::GR128BitRegClassID, 1, true },
    1105             :   { ADDR128Bit, ADDR128BitBits, 179, 7, sizeof(ADDR128BitBits), SystemZ::ADDR128BitRegClassID, 1, true },
    1106             : };
    1107             : 
    1108             : // SystemZ Dwarf<->LLVM register mappings.
    1109             : extern const MCRegisterInfo::DwarfLLVMRegPair SystemZDwarfFlavour0Dwarf2L[] = {
    1110             :   { 0U, SystemZ::R0D },
    1111             :   { 1U, SystemZ::R1D },
    1112             :   { 2U, SystemZ::R2D },
    1113             :   { 3U, SystemZ::R3D },
    1114             :   { 4U, SystemZ::R4D },
    1115             :   { 5U, SystemZ::R5D },
    1116             :   { 6U, SystemZ::R6D },
    1117             :   { 7U, SystemZ::R7D },
    1118             :   { 8U, SystemZ::R8D },
    1119             :   { 9U, SystemZ::R9D },
    1120             :   { 10U, SystemZ::R10D },
    1121             :   { 11U, SystemZ::R11D },
    1122             :   { 12U, SystemZ::R12D },
    1123             :   { 13U, SystemZ::R13D },
    1124             :   { 14U, SystemZ::R14D },
    1125             :   { 15U, SystemZ::R15D },
    1126             :   { 16U, SystemZ::F0D },
    1127             :   { 17U, SystemZ::F2D },
    1128             :   { 18U, SystemZ::F4D },
    1129             :   { 19U, SystemZ::F6D },
    1130             :   { 20U, SystemZ::F1D },
    1131             :   { 21U, SystemZ::F3D },
    1132             :   { 22U, SystemZ::F5D },
    1133             :   { 23U, SystemZ::F7D },
    1134             :   { 24U, SystemZ::F8D },
    1135             :   { 25U, SystemZ::F10D },
    1136             :   { 26U, SystemZ::F12D },
    1137             :   { 27U, SystemZ::F14D },
    1138             :   { 28U, SystemZ::F9D },
    1139             :   { 29U, SystemZ::F11D },
    1140             :   { 30U, SystemZ::F13D },
    1141             :   { 31U, SystemZ::F15D },
    1142             :   { 32U, SystemZ::C0 },
    1143             :   { 33U, SystemZ::C1 },
    1144             :   { 34U, SystemZ::C2 },
    1145             :   { 35U, SystemZ::C3 },
    1146             :   { 36U, SystemZ::C4 },
    1147             :   { 37U, SystemZ::C5 },
    1148             :   { 38U, SystemZ::C6 },
    1149             :   { 39U, SystemZ::C7 },
    1150             :   { 40U, SystemZ::C8 },
    1151             :   { 41U, SystemZ::C9 },
    1152             :   { 42U, SystemZ::C10 },
    1153             :   { 43U, SystemZ::C11 },
    1154             :   { 44U, SystemZ::C12 },
    1155             :   { 45U, SystemZ::C13 },
    1156             :   { 46U, SystemZ::C14 },
    1157             :   { 47U, SystemZ::C15 },
    1158             :   { 48U, SystemZ::A0 },
    1159             :   { 49U, SystemZ::A1 },
    1160             :   { 50U, SystemZ::A2 },
    1161             :   { 51U, SystemZ::A3 },
    1162             :   { 52U, SystemZ::A4 },
    1163             :   { 53U, SystemZ::A5 },
    1164             :   { 54U, SystemZ::A6 },
    1165             :   { 55U, SystemZ::A7 },
    1166             :   { 56U, SystemZ::A8 },
    1167             :   { 57U, SystemZ::A9 },
    1168             :   { 58U, SystemZ::A10 },
    1169             :   { 59U, SystemZ::A11 },
    1170             :   { 60U, SystemZ::A12 },
    1171             :   { 61U, SystemZ::A13 },
    1172             :   { 62U, SystemZ::A14 },
    1173             :   { 63U, SystemZ::A15 },
    1174             :   { 68U, SystemZ::F16D },
    1175             :   { 69U, SystemZ::F18D },
    1176             :   { 70U, SystemZ::F20D },
    1177             :   { 71U, SystemZ::F22D },
    1178             :   { 72U, SystemZ::F17D },
    1179             :   { 73U, SystemZ::F19D },
    1180             :   { 74U, SystemZ::F21D },
    1181             :   { 75U, SystemZ::F23D },
    1182             :   { 76U, SystemZ::F24D },
    1183             :   { 77U, SystemZ::F26D },
    1184             :   { 78U, SystemZ::F28D },
    1185             :   { 79U, SystemZ::F30D },
    1186             :   { 80U, SystemZ::F25D },
    1187             :   { 81U, SystemZ::F27D },
    1188             :   { 82U, SystemZ::F29D },
    1189             :   { 83U, SystemZ::F31D },
    1190             : };
    1191             : extern const unsigned SystemZDwarfFlavour0Dwarf2LSize = array_lengthof(SystemZDwarfFlavour0Dwarf2L);
    1192             : 
    1193             : extern const MCRegisterInfo::DwarfLLVMRegPair SystemZEHFlavour0Dwarf2L[] = {
    1194             :   { 0U, SystemZ::R0D },
    1195             :   { 1U, SystemZ::R1D },
    1196             :   { 2U, SystemZ::R2D },
    1197             :   { 3U, SystemZ::R3D },
    1198             :   { 4U, SystemZ::R4D },
    1199             :   { 5U, SystemZ::R5D },
    1200             :   { 6U, SystemZ::R6D },
    1201             :   { 7U, SystemZ::R7D },
    1202             :   { 8U, SystemZ::R8D },
    1203             :   { 9U, SystemZ::R9D },
    1204             :   { 10U, SystemZ::R10D },
    1205             :   { 11U, SystemZ::R11D },
    1206             :   { 12U, SystemZ::R12D },
    1207             :   { 13U, SystemZ::R13D },
    1208             :   { 14U, SystemZ::R14D },
    1209             :   { 15U, SystemZ::R15D },
    1210             :   { 16U, SystemZ::F0D },
    1211             :   { 17U, SystemZ::F2D },
    1212             :   { 18U, SystemZ::F4D },
    1213             :   { 19U, SystemZ::F6D },
    1214             :   { 20U, SystemZ::F1D },
    1215             :   { 21U, SystemZ::F3D },
    1216             :   { 22U, SystemZ::F5D },
    1217             :   { 23U, SystemZ::F7D },
    1218             :   { 24U, SystemZ::F8D },
    1219             :   { 25U, SystemZ::F10D },
    1220             :   { 26U, SystemZ::F12D },
    1221             :   { 27U, SystemZ::F14D },
    1222             :   { 28U, SystemZ::F9D },
    1223             :   { 29U, SystemZ::F11D },
    1224             :   { 30U, SystemZ::F13D },
    1225             :   { 31U, SystemZ::F15D },
    1226             :   { 32U, SystemZ::C0 },
    1227             :   { 33U, SystemZ::C1 },
    1228             :   { 34U, SystemZ::C2 },
    1229             :   { 35U, SystemZ::C3 },
    1230             :   { 36U, SystemZ::C4 },
    1231             :   { 37U, SystemZ::C5 },
    1232             :   { 38U, SystemZ::C6 },
    1233             :   { 39U, SystemZ::C7 },
    1234             :   { 40U, SystemZ::C8 },
    1235             :   { 41U, SystemZ::C9 },
    1236             :   { 42U, SystemZ::C10 },
    1237             :   { 43U, SystemZ::C11 },
    1238             :   { 44U, SystemZ::C12 },
    1239             :   { 45U, SystemZ::C13 },
    1240             :   { 46U, SystemZ::C14 },
    1241             :   { 47U, SystemZ::C15 },
    1242             :   { 48U, SystemZ::A0 },
    1243             :   { 49U, SystemZ::A1 },
    1244             :   { 50U, SystemZ::A2 },
    1245             :   { 51U, SystemZ::A3 },
    1246             :   { 52U, SystemZ::A4 },
    1247             :   { 53U, SystemZ::A5 },
    1248             :   { 54U, SystemZ::A6 },
    1249             :   { 55U, SystemZ::A7 },
    1250             :   { 56U, SystemZ::A8 },
    1251             :   { 57U, SystemZ::A9 },
    1252             :   { 58U, SystemZ::A10 },
    1253             :   { 59U, SystemZ::A11 },
    1254             :   { 60U, SystemZ::A12 },
    1255             :   { 61U, SystemZ::A13 },
    1256             :   { 62U, SystemZ::A14 },
    1257             :   { 63U, SystemZ::A15 },
    1258             :   { 68U, SystemZ::F16D },
    1259             :   { 69U, SystemZ::F18D },
    1260             :   { 70U, SystemZ::F20D },
    1261             :   { 71U, SystemZ::F22D },
    1262             :   { 72U, SystemZ::F17D },
    1263             :   { 73U, SystemZ::F19D },
    1264             :   { 74U, SystemZ::F21D },
    1265             :   { 75U, SystemZ::F23D },
    1266             :   { 76U, SystemZ::F24D },
    1267             :   { 77U, SystemZ::F26D },
    1268             :   { 78U, SystemZ::F28D },
    1269             :   { 79U, SystemZ::F30D },
    1270             :   { 80U, SystemZ::F25D },
    1271             :   { 81U, SystemZ::F27D },
    1272             :   { 82U, SystemZ::F29D },
    1273             :   { 83U, SystemZ::F31D },
    1274             : };
    1275             : extern const unsigned SystemZEHFlavour0Dwarf2LSize = array_lengthof(SystemZEHFlavour0Dwarf2L);
    1276             : 
    1277             : extern const MCRegisterInfo::DwarfLLVMRegPair SystemZDwarfFlavour0L2Dwarf[] = {
    1278             :   { SystemZ::A0, 48U },
    1279             :   { SystemZ::A1, 49U },
    1280             :   { SystemZ::A2, 50U },
    1281             :   { SystemZ::A3, 51U },
    1282             :   { SystemZ::A4, 52U },
    1283             :   { SystemZ::A5, 53U },
    1284             :   { SystemZ::A6, 54U },
    1285             :   { SystemZ::A7, 55U },
    1286             :   { SystemZ::A8, 56U },
    1287             :   { SystemZ::A9, 57U },
    1288             :   { SystemZ::A10, 58U },
    1289             :   { SystemZ::A11, 59U },
    1290             :   { SystemZ::A12, 60U },
    1291             :   { SystemZ::A13, 61U },
    1292             :   { SystemZ::A14, 62U },
    1293             :   { SystemZ::A15, 63U },
    1294             :   { SystemZ::C0, 32U },
    1295             :   { SystemZ::C1, 33U },
    1296             :   { SystemZ::C2, 34U },
    1297             :   { SystemZ::C3, 35U },
    1298             :   { SystemZ::C4, 36U },
    1299             :   { SystemZ::C5, 37U },
    1300             :   { SystemZ::C6, 38U },
    1301             :   { SystemZ::C7, 39U },
    1302             :   { SystemZ::C8, 40U },
    1303             :   { SystemZ::C9, 41U },
    1304             :   { SystemZ::C10, 42U },
    1305             :   { SystemZ::C11, 43U },
    1306             :   { SystemZ::C12, 44U },
    1307             :   { SystemZ::C13, 45U },
    1308             :   { SystemZ::C14, 46U },
    1309             :   { SystemZ::C15, 47U },
    1310             :   { SystemZ::V0, 16U },
    1311             :   { SystemZ::V1, 20U },
    1312             :   { SystemZ::V2, 17U },
    1313             :   { SystemZ::V3, 21U },
    1314             :   { SystemZ::V4, 18U },
    1315             :   { SystemZ::V5, 22U },
    1316             :   { SystemZ::V6, 19U },
    1317             :   { SystemZ::V7, 23U },
    1318             :   { SystemZ::V8, 24U },
    1319             :   { SystemZ::V9, 28U },
    1320             :   { SystemZ::V10, 25U },
    1321             :   { SystemZ::V11, 29U },
    1322             :   { SystemZ::V12, 26U },
    1323             :   { SystemZ::V13, 30U },
    1324             :   { SystemZ::V14, 27U },
    1325             :   { SystemZ::V15, 31U },
    1326             :   { SystemZ::V16, 68U },
    1327             :   { SystemZ::V17, 72U },
    1328             :   { SystemZ::V18, 69U },
    1329             :   { SystemZ::V19, 73U },
    1330             :   { SystemZ::V20, 70U },
    1331             :   { SystemZ::V21, 74U },
    1332             :   { SystemZ::V22, 71U },
    1333             :   { SystemZ::V23, 75U },
    1334             :   { SystemZ::V24, 76U },
    1335             :   { SystemZ::V25, 80U },
    1336             :   { SystemZ::V26, 77U },
    1337             :   { SystemZ::V27, 81U },
    1338             :   { SystemZ::V28, 78U },
    1339             :   { SystemZ::V29, 82U },
    1340             :   { SystemZ::V30, 79U },
    1341             :   { SystemZ::V31, 83U },
    1342             :   { SystemZ::F0D, 16U },
    1343             :   { SystemZ::F1D, 20U },
    1344             :   { SystemZ::F2D, 17U },
    1345             :   { SystemZ::F3D, 21U },
    1346             :   { SystemZ::F4D, 18U },
    1347             :   { SystemZ::F5D, 22U },
    1348             :   { SystemZ::F6D, 19U },
    1349             :   { SystemZ::F7D, 23U },
    1350             :   { SystemZ::F8D, 24U },
    1351             :   { SystemZ::F9D, 28U },
    1352             :   { SystemZ::F10D, 25U },
    1353             :   { SystemZ::F11D, 29U },
    1354             :   { SystemZ::F12D, 26U },
    1355             :   { SystemZ::F13D, 30U },
    1356             :   { SystemZ::F14D, 27U },
    1357             :   { SystemZ::F15D, 31U },
    1358             :   { SystemZ::F16D, 68U },
    1359             :   { SystemZ::F17D, 72U },
    1360             :   { SystemZ::F18D, 69U },
    1361             :   { SystemZ::F19D, 73U },
    1362             :   { SystemZ::F20D, 70U },
    1363             :   { SystemZ::F21D, 74U },
    1364             :   { SystemZ::F22D, 71U },
    1365             :   { SystemZ::F23D, 75U },
    1366             :   { SystemZ::F24D, 76U },
    1367             :   { SystemZ::F25D, 80U },
    1368             :   { SystemZ::F26D, 77U },
    1369             :   { SystemZ::F27D, 81U },
    1370             :   { SystemZ::F28D, 78U },
    1371             :   { SystemZ::F29D, 82U },
    1372             :   { SystemZ::F30D, 79U },
    1373             :   { SystemZ::F31D, 83U },
    1374             :   { SystemZ::R0D, 0U },
    1375             :   { SystemZ::R1D, 1U },
    1376             :   { SystemZ::R2D, 2U },
    1377             :   { SystemZ::R3D, 3U },
    1378             :   { SystemZ::R4D, 4U },
    1379             :   { SystemZ::R5D, 5U },
    1380             :   { SystemZ::R6D, 6U },
    1381             :   { SystemZ::R7D, 7U },
    1382             :   { SystemZ::R8D, 8U },
    1383             :   { SystemZ::R9D, 9U },
    1384             :   { SystemZ::R10D, 10U },
    1385             :   { SystemZ::R11D, 11U },
    1386             :   { SystemZ::R12D, 12U },
    1387             :   { SystemZ::R13D, 13U },
    1388             :   { SystemZ::R14D, 14U },
    1389             :   { SystemZ::R15D, 15U },
    1390             : };
    1391             : extern const unsigned SystemZDwarfFlavour0L2DwarfSize = array_lengthof(SystemZDwarfFlavour0L2Dwarf);
    1392             : 
    1393             : extern const MCRegisterInfo::DwarfLLVMRegPair SystemZEHFlavour0L2Dwarf[] = {
    1394             :   { SystemZ::A0, 48U },
    1395             :   { SystemZ::A1, 49U },
    1396             :   { SystemZ::A2, 50U },
    1397             :   { SystemZ::A3, 51U },
    1398             :   { SystemZ::A4, 52U },
    1399             :   { SystemZ::A5, 53U },
    1400             :   { SystemZ::A6, 54U },
    1401             :   { SystemZ::A7, 55U },
    1402             :   { SystemZ::A8, 56U },
    1403             :   { SystemZ::A9, 57U },
    1404             :   { SystemZ::A10, 58U },
    1405             :   { SystemZ::A11, 59U },
    1406             :   { SystemZ::A12, 60U },
    1407             :   { SystemZ::A13, 61U },
    1408             :   { SystemZ::A14, 62U },
    1409             :   { SystemZ::A15, 63U },
    1410             :   { SystemZ::C0, 32U },
    1411             :   { SystemZ::C1, 33U },
    1412             :   { SystemZ::C2, 34U },
    1413             :   { SystemZ::C3, 35U },
    1414             :   { SystemZ::C4, 36U },
    1415             :   { SystemZ::C5, 37U },
    1416             :   { SystemZ::C6, 38U },
    1417             :   { SystemZ::C7, 39U },
    1418             :   { SystemZ::C8, 40U },
    1419             :   { SystemZ::C9, 41U },
    1420             :   { SystemZ::C10, 42U },
    1421             :   { SystemZ::C11, 43U },
    1422             :   { SystemZ::C12, 44U },
    1423             :   { SystemZ::C13, 45U },
    1424             :   { SystemZ::C14, 46U },
    1425             :   { SystemZ::C15, 47U },
    1426             :   { SystemZ::V0, 16U },
    1427             :   { SystemZ::V1, 20U },
    1428             :   { SystemZ::V2, 17U },
    1429             :   { SystemZ::V3, 21U },
    1430             :   { SystemZ::V4, 18U },
    1431             :   { SystemZ::V5, 22U },
    1432             :   { SystemZ::V6, 19U },
    1433             :   { SystemZ::V7, 23U },
    1434             :   { SystemZ::V8, 24U },
    1435             :   { SystemZ::V9, 28U },
    1436             :   { SystemZ::V10, 25U },
    1437             :   { SystemZ::V11, 29U },
    1438             :   { SystemZ::V12, 26U },
    1439             :   { SystemZ::V13, 30U },
    1440             :   { SystemZ::V14, 27U },
    1441             :   { SystemZ::V15, 31U },
    1442             :   { SystemZ::V16, 68U },
    1443             :   { SystemZ::V17, 72U },
    1444             :   { SystemZ::V18, 69U },
    1445             :   { SystemZ::V19, 73U },
    1446             :   { SystemZ::V20, 70U },
    1447             :   { SystemZ::V21, 74U },
    1448             :   { SystemZ::V22, 71U },
    1449             :   { SystemZ::V23, 75U },
    1450             :   { SystemZ::V24, 76U },
    1451             :   { SystemZ::V25, 80U },
    1452             :   { SystemZ::V26, 77U },
    1453             :   { SystemZ::V27, 81U },
    1454             :   { SystemZ::V28, 78U },
    1455             :   { SystemZ::V29, 82U },
    1456             :   { SystemZ::V30, 79U },
    1457             :   { SystemZ::V31, 83U },
    1458             :   { SystemZ::F0D, 16U },
    1459             :   { SystemZ::F1D, 20U },
    1460             :   { SystemZ::F2D, 17U },
    1461             :   { SystemZ::F3D, 21U },
    1462             :   { SystemZ::F4D, 18U },
    1463             :   { SystemZ::F5D, 22U },
    1464             :   { SystemZ::F6D, 19U },
    1465             :   { SystemZ::F7D, 23U },
    1466             :   { SystemZ::F8D, 24U },
    1467             :   { SystemZ::F9D, 28U },
    1468             :   { SystemZ::F10D, 25U },
    1469             :   { SystemZ::F11D, 29U },
    1470             :   { SystemZ::F12D, 26U },
    1471             :   { SystemZ::F13D, 30U },
    1472             :   { SystemZ::F14D, 27U },
    1473             :   { SystemZ::F15D, 31U },
    1474             :   { SystemZ::F16D, 68U },
    1475             :   { SystemZ::F17D, 72U },
    1476             :   { SystemZ::F18D, 69U },
    1477             :   { SystemZ::F19D, 73U },
    1478             :   { SystemZ::F20D, 70U },
    1479             :   { SystemZ::F21D, 74U },
    1480             :   { SystemZ::F22D, 71U },
    1481             :   { SystemZ::F23D, 75U },
    1482             :   { SystemZ::F24D, 76U },
    1483             :   { SystemZ::F25D, 80U },
    1484             :   { SystemZ::F26D, 77U },
    1485             :   { SystemZ::F27D, 81U },
    1486             :   { SystemZ::F28D, 78U },
    1487             :   { SystemZ::F29D, 82U },
    1488             :   { SystemZ::F30D, 79U },
    1489             :   { SystemZ::F31D, 83U },
    1490             :   { SystemZ::R0D, 0U },
    1491             :   { SystemZ::R1D, 1U },
    1492             :   { SystemZ::R2D, 2U },
    1493             :   { SystemZ::R3D, 3U },
    1494             :   { SystemZ::R4D, 4U },
    1495             :   { SystemZ::R5D, 5U },
    1496             :   { SystemZ::R6D, 6U },
    1497             :   { SystemZ::R7D, 7U },
    1498             :   { SystemZ::R8D, 8U },
    1499             :   { SystemZ::R9D, 9U },
    1500             :   { SystemZ::R10D, 10U },
    1501             :   { SystemZ::R11D, 11U },
    1502             :   { SystemZ::R12D, 12U },
    1503             :   { SystemZ::R13D, 13U },
    1504             :   { SystemZ::R14D, 14U },
    1505             :   { SystemZ::R15D, 15U },
    1506             : };
    1507             : extern const unsigned SystemZEHFlavour0L2DwarfSize = array_lengthof(SystemZEHFlavour0L2Dwarf);
    1508             : 
    1509             : extern const uint16_t SystemZRegEncodingTable[] = {
    1510             :   0,
    1511             :   0,
    1512             :   0,
    1513             :   1,
    1514             :   2,
    1515             :   3,
    1516             :   4,
    1517             :   5,
    1518             :   6,
    1519             :   7,
    1520             :   8,
    1521             :   9,
    1522             :   10,
    1523             :   11,
    1524             :   12,
    1525             :   13,
    1526             :   14,
    1527             :   15,
    1528             :   0,
    1529             :   1,
    1530             :   2,
    1531             :   3,
    1532             :   4,
    1533             :   5,
    1534             :   6,
    1535             :   7,
    1536             :   8,
    1537             :   9,
    1538             :   10,
    1539             :   11,
    1540             :   12,
    1541             :   13,
    1542             :   14,
    1543             :   15,
    1544             :   0,
    1545             :   1,
    1546             :   2,
    1547             :   3,
    1548             :   4,
    1549             :   5,
    1550             :   6,
    1551             :   7,
    1552             :   8,
    1553             :   9,
    1554             :   10,
    1555             :   11,
    1556             :   12,
    1557             :   13,
    1558             :   14,
    1559             :   15,
    1560             :   16,
    1561             :   17,
    1562             :   18,
    1563             :   19,
    1564             :   20,
    1565             :   21,
    1566             :   22,
    1567             :   23,
    1568             :   24,
    1569             :   25,
    1570             :   26,
    1571             :   27,
    1572             :   28,
    1573             :   29,
    1574             :   30,
    1575             :   31,
    1576             :   0,
    1577             :   1,
    1578             :   2,
    1579             :   3,
    1580             :   4,
    1581             :   5,
    1582             :   6,
    1583             :   7,
    1584             :   8,
    1585             :   9,
    1586             :   10,
    1587             :   11,
    1588             :   12,
    1589             :   13,
    1590             :   14,
    1591             :   15,
    1592             :   16,
    1593             :   17,
    1594             :   18,
    1595             :   19,
    1596             :   20,
    1597             :   21,
    1598             :   22,
    1599             :   23,
    1600             :   24,
    1601             :   25,
    1602             :   26,
    1603             :   27,
    1604             :   28,
    1605             :   29,
    1606             :   30,
    1607             :   31,
    1608             :   0,
    1609             :   1,
    1610             :   4,
    1611             :   5,
    1612             :   8,
    1613             :   9,
    1614             :   12,
    1615             :   13,
    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             :   1,
    1650             :   2,
    1651             :   3,
    1652             :   4,
    1653             :   5,
    1654             :   6,
    1655             :   7,
    1656             :   8,
    1657             :   9,
    1658             :   10,
    1659             :   11,
    1660             :   12,
    1661             :   13,
    1662             :   14,
    1663             :   15,
    1664             :   0,
    1665             :   1,
    1666             :   2,
    1667             :   3,
    1668             :   4,
    1669             :   5,
    1670             :   6,
    1671             :   7,
    1672             :   8,
    1673             :   9,
    1674             :   10,
    1675             :   11,
    1676             :   12,
    1677             :   13,
    1678             :   14,
    1679             :   15,
    1680             :   0,
    1681             :   1,
    1682             :   2,
    1683             :   3,
    1684             :   4,
    1685             :   5,
    1686             :   6,
    1687             :   7,
    1688             :   8,
    1689             :   9,
    1690             :   10,
    1691             :   11,
    1692             :   12,
    1693             :   13,
    1694             :   14,
    1695             :   15,
    1696             :   0,
    1697             :   2,
    1698             :   4,
    1699             :   6,
    1700             :   8,
    1701             :   10,
    1702             :   12,
    1703             :   14,
    1704             : };
    1705             : static inline void InitSystemZMCRegisterInfo(MCRegisterInfo *RI, unsigned RA, unsigned DwarfFlavour = 0, unsigned EHFlavour = 0, unsigned PC = 0) {
    1706             :   RI->InitMCRegisterInfo(SystemZRegDesc, 194, RA, PC, SystemZMCRegisterClasses, 21, SystemZRegUnitRoots, 97, SystemZRegDiffLists, SystemZLaneMaskLists, SystemZRegStrings, SystemZRegClassStrings, SystemZSubRegIdxLists, 7,
    1707             : SystemZSubRegIdxRanges, SystemZRegEncodingTable);
    1708             : 
    1709             :   switch (DwarfFlavour) {
    1710             :   default:
    1711             :     llvm_unreachable("Unknown DWARF flavour");
    1712             :   case 0:
    1713             :     RI->mapDwarfRegsToLLVMRegs(SystemZDwarfFlavour0Dwarf2L, SystemZDwarfFlavour0Dwarf2LSize, false);
    1714             :     break;
    1715             :   }
    1716             :   switch (EHFlavour) {
    1717             :   default:
    1718             :     llvm_unreachable("Unknown DWARF flavour");
    1719             :   case 0:
    1720             :     RI->mapDwarfRegsToLLVMRegs(SystemZEHFlavour0Dwarf2L, SystemZEHFlavour0Dwarf2LSize, true);
    1721             :     break;
    1722             :   }
    1723             :   switch (DwarfFlavour) {
    1724             :   default:
    1725             :     llvm_unreachable("Unknown DWARF flavour");
    1726             :   case 0:
    1727             :     RI->mapLLVMRegsToDwarfRegs(SystemZDwarfFlavour0L2Dwarf, SystemZDwarfFlavour0L2DwarfSize, false);
    1728             :     break;
    1729             :   }
    1730             :   switch (EHFlavour) {
    1731             :   default:
    1732             :     llvm_unreachable("Unknown DWARF flavour");
    1733             :   case 0:
    1734             :     RI->mapLLVMRegsToDwarfRegs(SystemZEHFlavour0L2Dwarf, SystemZEHFlavour0L2DwarfSize, true);
    1735             :     break;
    1736             :   }
    1737             : }
    1738             : 
    1739             : } // end namespace llvm
    1740             : 
    1741             : #endif // GET_REGINFO_MC_DESC
    1742             : 
    1743             : /*===- TableGen'erated file -------------------------------------*- C++ -*-===*\
    1744             : |*                                                                            *|
    1745             : |* Register Information Header Fragment                                       *|
    1746             : |*                                                                            *|
    1747             : |* Automatically generated file, do not edit!                                 *|
    1748             : |*                                                                            *|
    1749             : \*===----------------------------------------------------------------------===*/
    1750             : 
    1751             : 
    1752             : #ifdef GET_REGINFO_HEADER
    1753             : #undef GET_REGINFO_HEADER
    1754             : 
    1755             : #include "llvm/CodeGen/TargetRegisterInfo.h"
    1756             : 
    1757             : namespace llvm {
    1758             : 
    1759             : class SystemZFrameLowering;
    1760             : 
    1761             : struct SystemZGenRegisterInfo : public TargetRegisterInfo {
    1762             :   explicit SystemZGenRegisterInfo(unsigned RA, unsigned D = 0, unsigned E = 0,
    1763             :       unsigned PC = 0, unsigned HwMode = 0);
    1764             :   unsigned composeSubRegIndicesImpl(unsigned, unsigned) const override;
    1765             :   LaneBitmask composeSubRegIndexLaneMaskImpl(unsigned, LaneBitmask) const override;
    1766             :   LaneBitmask reverseComposeSubRegIndexLaneMaskImpl(unsigned, LaneBitmask) const override;
    1767             :   const TargetRegisterClass *getSubClassWithSubReg(const TargetRegisterClass*, unsigned) const override;
    1768             :   const RegClassWeight &getRegClassWeight(const TargetRegisterClass *RC) const override;
    1769             :   unsigned getRegUnitWeight(unsigned RegUnit) const override;
    1770             :   unsigned getNumRegPressureSets() const override;
    1771             :   const char *getRegPressureSetName(unsigned Idx) const override;
    1772             :   unsigned getRegPressureSetLimit(const MachineFunction &MF, unsigned Idx) const override;
    1773             :   const int *getRegClassPressureSets(const TargetRegisterClass *RC) const override;
    1774             :   const int *getRegUnitPressureSets(unsigned RegUnit) const override;
    1775             :   ArrayRef<const char *> getRegMaskNames() const override;
    1776             :   ArrayRef<const uint32_t *> getRegMasks() const override;
    1777             :   /// Devirtualized TargetFrameLowering.
    1778             :   static const SystemZFrameLowering *getFrameLowering(
    1779             :       const MachineFunction &MF);
    1780             : };
    1781             : 
    1782             : namespace SystemZ { // Register classes
    1783             :   extern const TargetRegisterClass GRX32BitRegClass;
    1784             :   extern const TargetRegisterClass VR32BitRegClass;
    1785             :   extern const TargetRegisterClass AR32BitRegClass;
    1786             :   extern const TargetRegisterClass FP32BitRegClass;
    1787             :   extern const TargetRegisterClass GR32BitRegClass;
    1788             :   extern const TargetRegisterClass GRH32BitRegClass;
    1789             :   extern const TargetRegisterClass ADDR32BitRegClass;
    1790             :   extern const TargetRegisterClass CCRRegClass;
    1791             :   extern const TargetRegisterClass AnyRegBitRegClass;
    1792             :   extern const TargetRegisterClass AnyRegBit_with_subreg_h32_in_FP32BitRegClass;
    1793             :   extern const TargetRegisterClass VR64BitRegClass;
    1794             :   extern const TargetRegisterClass AnyRegBit_with_subreg_h64RegClass;
    1795             :   extern const TargetRegisterClass CR64BitRegClass;
    1796             :   extern const TargetRegisterClass FP64BitRegClass;
    1797             :   extern const TargetRegisterClass GR64BitRegClass;
    1798             :   extern const TargetRegisterClass ADDR64BitRegClass;
    1799             :   extern const TargetRegisterClass VR128BitRegClass;
    1800             :   extern const TargetRegisterClass VF128BitRegClass;
    1801             :   extern const TargetRegisterClass FP128BitRegClass;
    1802             :   extern const TargetRegisterClass GR128BitRegClass;
    1803             :   extern const TargetRegisterClass ADDR128BitRegClass;
    1804             : } // end namespace SystemZ
    1805             : 
    1806             : } // end namespace llvm
    1807             : 
    1808             : #endif // GET_REGINFO_HEADER
    1809             : 
    1810             : /*===- TableGen'erated file -------------------------------------*- C++ -*-===*\
    1811             : |*                                                                            *|
    1812             : |* Target Register and Register Classes Information                           *|
    1813             : |*                                                                            *|
    1814             : |* Automatically generated file, do not edit!                                 *|
    1815             : |*                                                                            *|
    1816             : \*===----------------------------------------------------------------------===*/
    1817             : 
    1818             : 
    1819             : #ifdef GET_REGINFO_TARGET_DESC
    1820             : #undef GET_REGINFO_TARGET_DESC
    1821             : 
    1822             : namespace llvm {
    1823             : 
    1824             : extern const MCRegisterClass SystemZMCRegisterClasses[];
    1825             : 
    1826             : static const MVT::SimpleValueType VTLists[] = {
    1827             :   /* 0 */ MVT::i32, MVT::Other,
    1828             :   /* 2 */ MVT::i64, MVT::Other,
    1829             :   /* 4 */ MVT::f32, MVT::Other,
    1830             :   /* 6 */ MVT::f64, MVT::Other,
    1831             :   /* 8 */ MVT::v16i8, MVT::v8i16, MVT::v4i32, MVT::v2i64, MVT::v4f32, MVT::v2f64, MVT::f128, MVT::Other,
    1832             :   /* 16 */ MVT::f32, MVT::v4i8, MVT::v2i16, MVT::Other,
    1833             :   /* 20 */ MVT::i64, MVT::f64, MVT::v8i8, MVT::v4i16, MVT::v2i32, MVT::v2f32, MVT::Other,
    1834             :   /* 27 */ MVT::v16i8, MVT::v8i16, MVT::v4i32, MVT::v2i64, MVT::v4f32, MVT::v2f64, MVT::Other,
    1835             :   /* 34 */ MVT::Untyped, MVT::Other,
    1836             : };
    1837             : 
    1838             : static const char *const SubRegIndexNameTable[] = { "subreg_h32", "subreg_h64", "subreg_hh32", "subreg_hl32", "subreg_l32", "subreg_l64", "" };
    1839             : 
    1840             : 
    1841             : static const LaneBitmask SubRegIndexLaneMaskTable[] = {
    1842             :   LaneBitmask::getAll(),
    1843             :   LaneBitmask(0x00000001), // subreg_h32
    1844             :   LaneBitmask(0x00000006), // subreg_h64
    1845             :   LaneBitmask(0x00000002), // subreg_hh32
    1846             :   LaneBitmask(0x00000004), // subreg_hl32
    1847             :   LaneBitmask(0x00000008), // subreg_l32
    1848             :   LaneBitmask(0x00000009), // subreg_l64
    1849             :  };
    1850             : 
    1851             : 
    1852             : 
    1853             : static const TargetRegisterInfo::RegClassInfo RegClassInfos[] = {
    1854             :   // Mode = 0 (Default)
    1855             :   { 32, 32, 32, VTLists+0 },    // GRX32Bit
    1856             :   { 32, 32, 32, VTLists+16 },    // VR32Bit
    1857             :   { 32, 32, 32, VTLists+0 },    // AR32Bit
    1858             :   { 32, 32, 32, VTLists+4 },    // FP32Bit
    1859             :   { 32, 32, 32, VTLists+0 },    // GR32Bit
    1860             :   { 32, 32, 32, VTLists+0 },    // GRH32Bit
    1861             :   { 32, 32, 32, VTLists+0 },    // ADDR32Bit
    1862             :   { 32, 32, 32, VTLists+0 },    // CCR
    1863             :   { 64, 64, 64, VTLists+20 },    // AnyRegBit
    1864             :   { 64, 64, 64, VTLists+20 },    // AnyRegBit_with_subreg_h32_in_FP32Bit
    1865             :   { 64, 64, 64, VTLists+21 },    // VR64Bit
    1866             :   { 64, 64, 64, VTLists+20 },    // AnyRegBit_with_subreg_h64
    1867             :   { 64, 64, 64, VTLists+2 },    // CR64Bit
    1868             :   { 64, 64, 64, VTLists+6 },    // FP64Bit
    1869             :   { 64, 64, 64, VTLists+2 },    // GR64Bit
    1870             :   { 64, 64, 64, VTLists+2 },    // ADDR64Bit
    1871             :   { 128, 128, 128, VTLists+8 },    // VR128Bit
    1872             :   { 128, 128, 128, VTLists+27 },    // VF128Bit
    1873             :   { 128, 128, 128, VTLists+14 },    // FP128Bit
    1874             :   { 128, 128, 128, VTLists+34 },    // GR128Bit
    1875             :   { 128, 128, 128, VTLists+34 },    // ADDR128Bit
    1876             : };
    1877             : 
    1878             : static const TargetRegisterClass *const NullRegClasses[] = { nullptr };
    1879             : 
    1880             : static const uint32_t GRX32BitSubClassMask[] = {
    1881             :   0x00000071, 
    1882             :   0x0018c000, // subreg_h32
    1883             :   0x00180000, // subreg_hh32
    1884             :   0x00180000, // subreg_hl32
    1885             :   0x0018c000, // subreg_l32
    1886             : };
    1887             : 
    1888             : static const uint32_t VR32BitSubClassMask[] = {
    1889             :   0x0000000a, 
    1890             :   0x00072e00, // subreg_h32
    1891             :   0x00040000, // subreg_hh32
    1892             : };
    1893             : 
    1894             : static const uint32_t AR32BitSubClassMask[] = {
    1895             :   0x00000004, 
    1896             : };
    1897             : 
    1898             : static const uint32_t FP32BitSubClassMask[] = {
    1899             :   0x00000008, 
    1900             :   0x00062a00, // subreg_h32
    1901             :   0x00040000, // subreg_hh32
    1902             : };
    1903             : 
    1904             : static const uint32_t GR32BitSubClassMask[] = {
    1905             :   0x00000050, 
    1906             :   0x00180000, // subreg_hl32
    1907             :   0x0018c000, // subreg_l32
    1908             : };
    1909             : 
    1910             : static const uint32_t GRH32BitSubClassMask[] = {
    1911             :   0x00000020, 
    1912             :   0x0018c000, // subreg_h32
    1913             :   0x00180000, // subreg_hh32
    1914             : };
    1915             : 
    1916             : static const uint32_t ADDR32BitSubClassMask[] = {
    1917             :   0x00000040, 
    1918             :   0x00100000, // subreg_hl32
    1919             :   0x00188000, // subreg_l32
    1920             : };
    1921             : 
    1922             : static const uint32_t CCRSubClassMask[] = {
    1923             :   0x00000080, 
    1924             : };
    1925             : 
    1926             : static const uint32_t AnyRegBitSubClassMask[] = {
    1927             :   0x0002eb00, 
    1928             :   0x001e0800, // subreg_h64
    1929             :   0x001c0000, // subreg_l64
    1930             : };
    1931             : 
    1932             : static const uint32_t AnyRegBit_with_subreg_h32_in_FP32BitSubClassMask[] = {
    1933             :   0x00022a00, 
    1934             :   0x00060800, // subreg_h64
    1935             :   0x00040000, // subreg_l64
    1936             : };
    1937             : 
    1938             : static const uint32_t VR64BitSubClassMask[] = {
    1939             :   0x00002400, 
    1940             :   0x00070800, // subreg_h64
    1941             :   0x00040000, // subreg_l64
    1942             : };
    1943             : 
    1944             : static const uint32_t AnyRegBit_with_subreg_h64SubClassMask[] = {
    1945             :   0x00020800, 
    1946             : };
    1947             : 
    1948             : static const uint32_t CR64BitSubClassMask[] = {
    1949             :   0x00001000, 
    1950             : };
    1951             : 
    1952             : static const uint32_t FP64BitSubClassMask[] = {
    1953             :   0x00002000, 
    1954             :   0x00060800, // subreg_h64
    1955             :   0x00040000, // subreg_l64
    1956             : };
    1957             : 
    1958             : static const uint32_t GR64BitSubClassMask[] = {
    1959             :   0x0000c000, 
    1960             :   0x00180000, // subreg_h64
    1961             :   0x00180000, // subreg_l64
    1962             : };
    1963             : 
    1964             : static const uint32_t ADDR64BitSubClassMask[] = {
    1965             :   0x00008000, 
    1966             :   0x00100000, // subreg_h64
    1967             :   0x00180000, // subreg_l64
    1968             : };
    1969             : 
    1970             : static const uint32_t VR128BitSubClassMask[] = {
    1971             :   0x00030000, 
    1972             : };
    1973             : 
    1974             : static const uint32_t VF128BitSubClassMask[] = {
    1975             :   0x00020000, 
    1976             : };
    1977             : 
    1978             : static const uint32_t FP128BitSubClassMask[] = {
    1979             :   0x00040000, 
    1980             : };
    1981             : 
    1982             : static const uint32_t GR128BitSubClassMask[] = {
    1983             :   0x00180000, 
    1984             : };
    1985             : 
    1986             : static const uint32_t ADDR128BitSubClassMask[] = {
    1987             :   0x00100000, 
    1988             : };
    1989             : 
    1990             : static const uint16_t SuperRegIdxSeqs[] = {
    1991             :   /* 0 */ 1, 3, 0,
    1992             :   /* 3 */ 1, 3, 4, 5, 0,
    1993             :   /* 8 */ 2, 6, 0,
    1994             : };
    1995             : 
    1996             : static const TargetRegisterClass *const FP32BitSuperclasses[] = {
    1997             :   &SystemZ::VR32BitRegClass,
    1998             :   nullptr
    1999             : };
    2000             : 
    2001             : static const TargetRegisterClass *const GR32BitSuperclasses[] = {
    2002             :   &SystemZ::GRX32BitRegClass,
    2003             :   nullptr
    2004             : };
    2005             : 
    2006             : static const TargetRegisterClass *const GRH32BitSuperclasses[] = {
    2007             :   &SystemZ::GRX32BitRegClass,
    2008             :   nullptr
    2009             : };
    2010             : 
    2011             : static const TargetRegisterClass *const ADDR32BitSuperclasses[] = {
    2012             :   &SystemZ::GRX32BitRegClass,
    2013             :   &SystemZ::GR32BitRegClass,
    2014             :   nullptr
    2015             : };
    2016             : 
    2017             : static const TargetRegisterClass *const AnyRegBit_with_subreg_h32_in_FP32BitSuperclasses[] = {
    2018             :   &SystemZ::AnyRegBitRegClass,
    2019             :   nullptr
    2020             : };
    2021             : 
    2022             : static const TargetRegisterClass *const AnyRegBit_with_subreg_h64Superclasses[] = {
    2023             :   &SystemZ::AnyRegBitRegClass,
    2024             :   &SystemZ::AnyRegBit_with_subreg_h32_in_FP32BitRegClass,
    2025             :   nullptr
    2026             : };
    2027             : 
    2028             : static const TargetRegisterClass *const FP64BitSuperclasses[] = {
    2029             :   &SystemZ::AnyRegBitRegClass,
    2030             :   &SystemZ::AnyRegBit_with_subreg_h32_in_FP32BitRegClass,
    2031             :   &SystemZ::VR64BitRegClass,
    2032             :   nullptr
    2033             : };
    2034             : 
    2035             : static const TargetRegisterClass *const GR64BitSuperclasses[] = {
    2036             :   &SystemZ::AnyRegBitRegClass,
    2037             :   nullptr
    2038             : };
    2039             : 
    2040             : static const TargetRegisterClass *const ADDR64BitSuperclasses[] = {
    2041             :   &SystemZ::AnyRegBitRegClass,
    2042             :   &SystemZ::GR64BitRegClass,
    2043             :   nullptr
    2044             : };
    2045             : 
    2046             : static const TargetRegisterClass *const VF128BitSuperclasses[] = {
    2047             :   &SystemZ::AnyRegBitRegClass,
    2048             :   &SystemZ::AnyRegBit_with_subreg_h32_in_FP32BitRegClass,
    2049             :   &SystemZ::AnyRegBit_with_subreg_h64RegClass,
    2050             :   &SystemZ::VR128BitRegClass,
    2051             :   nullptr
    2052             : };
    2053             : 
    2054             : static const TargetRegisterClass *const ADDR128BitSuperclasses[] = {
    2055             :   &SystemZ::GR128BitRegClass,
    2056             :   nullptr
    2057             : };
    2058             : 
    2059             : 
    2060             : namespace SystemZ {   // Register class instances
    2061             :   extern const TargetRegisterClass GRX32BitRegClass = {
    2062             :     &SystemZMCRegisterClasses[GRX32BitRegClassID],
    2063             :     GRX32BitSubClassMask,
    2064             :     SuperRegIdxSeqs + 3,
    2065             :     LaneBitmask(0x00000001),
    2066             :     0,
    2067             :     false, /* HasDisjunctSubRegs */
    2068             :     false, /* CoveredBySubRegs */
    2069             :     NullRegClasses,
    2070             :     nullptr
    2071             :   };
    2072             : 
    2073             :   extern const TargetRegisterClass VR32BitRegClass = {
    2074             :     &SystemZMCRegisterClasses[VR32BitRegClassID],
    2075             :     VR32BitSubClassMask,
    2076             :     SuperRegIdxSeqs + 0,
    2077             :     LaneBitmask(0x00000001),
    2078             :     0,
    2079             :     false, /* HasDisjunctSubRegs */
    2080             :     false, /* CoveredBySubRegs */
    2081             :     NullRegClasses,
    2082             :     nullptr
    2083             :   };
    2084             : 
    2085             :   extern const TargetRegisterClass AR32BitRegClass = {
    2086             :     &SystemZMCRegisterClasses[AR32BitRegClassID],
    2087             :     AR32BitSubClassMask,
    2088             :     SuperRegIdxSeqs + 2,
    2089             :     LaneBitmask(0x00000001),
    2090             :     0,
    2091             :     false, /* HasDisjunctSubRegs */
    2092             :     false, /* CoveredBySubRegs */
    2093             :     NullRegClasses,
    2094             :     nullptr
    2095             :   };
    2096             : 
    2097             :   extern const TargetRegisterClass FP32BitRegClass = {
    2098             :     &SystemZMCRegisterClasses[FP32BitRegClassID],
    2099             :     FP32BitSubClassMask,
    2100             :     SuperRegIdxSeqs + 0,
    2101             :     LaneBitmask(0x00000001),
    2102             :     0,
    2103             :     false, /* HasDisjunctSubRegs */
    2104             :     false, /* CoveredBySubRegs */
    2105             :     FP32BitSuperclasses,
    2106             :     nullptr
    2107             :   };
    2108             : 
    2109             :   extern const TargetRegisterClass GR32BitRegClass = {
    2110             :     &SystemZMCRegisterClasses[GR32BitRegClassID],
    2111             :     GR32BitSubClassMask,
    2112             :     SuperRegIdxSeqs + 5,
    2113             :     LaneBitmask(0x00000001),
    2114             :     0,
    2115             :     false, /* HasDisjunctSubRegs */
    2116             :     false, /* CoveredBySubRegs */
    2117             :     GR32BitSuperclasses,
    2118             :     nullptr
    2119             :   };
    2120             : 
    2121             :   extern const TargetRegisterClass GRH32BitRegClass = {
    2122             :     &SystemZMCRegisterClasses[GRH32BitRegClassID],
    2123             :     GRH32BitSubClassMask,
    2124             :     SuperRegIdxSeqs + 0,
    2125             :     LaneBitmask(0x00000001),
    2126             :     0,
    2127             :     false, /* HasDisjunctSubRegs */
    2128             :     false, /* CoveredBySubRegs */
    2129             :     GRH32BitSuperclasses,
    2130             :     nullptr
    2131             :   };
    2132             : 
    2133             :   extern const TargetRegisterClass ADDR32BitRegClass = {
    2134             :     &SystemZMCRegisterClasses[ADDR32BitRegClassID],
    2135             :     ADDR32BitSubClassMask,
    2136             :     SuperRegIdxSeqs + 5,
    2137             :     LaneBitmask(0x00000001),
    2138             :     0,
    2139             :     false, /* HasDisjunctSubRegs */
    2140             :     false, /* CoveredBySubRegs */
    2141             :     ADDR32BitSuperclasses,
    2142             :     nullptr
    2143             :   };
    2144             : 
    2145             :   extern const TargetRegisterClass CCRRegClass = {
    2146             :     &SystemZMCRegisterClasses[CCRRegClassID],
    2147             :     CCRSubClassMask,
    2148             :     SuperRegIdxSeqs + 2,
    2149             :     LaneBitmask(0x00000001),
    2150             :     0,
    2151             :     false, /* HasDisjunctSubRegs */
    2152             :     false, /* CoveredBySubRegs */
    2153             :     NullRegClasses,
    2154             :     nullptr
    2155             :   };
    2156             : 
    2157             :   extern const TargetRegisterClass AnyRegBitRegClass = {
    2158             :     &SystemZMCRegisterClasses[AnyRegBitRegClassID],
    2159             :     AnyRegBitSubClassMask,
    2160             :     SuperRegIdxSeqs + 8,
    2161             :     LaneBitmask(0x0000000F),
    2162             :     0,
    2163             :     true, /* HasDisjunctSubRegs */
    2164             :     false, /* CoveredBySubRegs */
    2165             :     NullRegClasses,
    2166             :     nullptr
    2167             :   };
    2168             : 
    2169             :   extern const TargetRegisterClass AnyRegBit_with_subreg_h32_in_FP32BitRegClass = {
    2170             :     &SystemZMCRegisterClasses[AnyRegBit_with_subreg_h32_in_FP32BitRegClassID],
    2171             :     AnyRegBit_with_subreg_h32_in_FP32BitSubClassMask,
    2172             :     SuperRegIdxSeqs + 8,
    2173             :     LaneBitmask(0x00000007),
    2174             :     0,
    2175             :     false, /* HasDisjunctSubRegs */
    2176             :     false, /* CoveredBySubRegs */
    2177             :     AnyRegBit_with_subreg_h32_in_FP32BitSuperclasses,
    2178             :     nullptr
    2179             :   };
    2180             : 
    2181             :   extern const TargetRegisterClass VR64BitRegClass = {
    2182             :     &SystemZMCRegisterClasses[VR64BitRegClassID],
    2183             :     VR64BitSubClassMask,
    2184             :     SuperRegIdxSeqs + 8,
    2185             :     LaneBitmask(0x00000001),
    2186             :     0,
    2187             :     false, /* HasDisjunctSubRegs */
    2188             :     false, /* CoveredBySubRegs */
    2189             :     NullRegClasses,
    2190             :     nullptr
    2191             :   };
    2192             : 
    2193             :   extern const TargetRegisterClass AnyRegBit_with_subreg_h64RegClass = {
    2194             :     &SystemZMCRegisterClasses[AnyRegBit_with_subreg_h64RegClassID],
    2195             :     AnyRegBit_with_subreg_h64SubClassMask,
    2196             :     SuperRegIdxSeqs + 2,
    2197             :     LaneBitmask(0x00000007),
    2198             :     0,
    2199             :     false, /* HasDisjunctSubRegs */
    2200             :     false, /* CoveredBySubRegs */
    2201             :     AnyRegBit_with_subreg_h64Superclasses,
    2202             :     nullptr
    2203             :   };
    2204             : 
    2205             :   extern const TargetRegisterClass CR64BitRegClass = {
    2206             :     &SystemZMCRegisterClasses[CR64BitRegClassID],
    2207             :     CR64BitSubClassMask,
    2208             :     SuperRegIdxSeqs + 2,
    2209             :     LaneBitmask(0x00000001),
    2210             :     0,
    2211             :     false, /* HasDisjunctSubRegs */
    2212             :     false, /* CoveredBySubRegs */
    2213             :     NullRegClasses,
    2214             :     nullptr
    2215             :   };
    2216             : 
    2217             :   extern const TargetRegisterClass FP64BitRegClass = {
    2218             :     &SystemZMCRegisterClasses[FP64BitRegClassID],
    2219             :     FP64BitSubClassMask,
    2220             :     SuperRegIdxSeqs + 8,
    2221             :     LaneBitmask(0x00000001),
    2222             :     0,
    2223             :     false, /* HasDisjunctSubRegs */
    2224             :     false, /* CoveredBySubRegs */
    2225             :     FP64BitSuperclasses,
    2226             :     nullptr
    2227             :   };
    2228             : 
    2229             :   extern const TargetRegisterClass GR64BitRegClass = {
    2230             :     &SystemZMCRegisterClasses[GR64BitRegClassID],
    2231             :     GR64BitSubClassMask,
    2232             :     SuperRegIdxSeqs + 8,
    2233             :     LaneBitmask(0x00000009),
    2234             :     0,
    2235             :     true, /* HasDisjunctSubRegs */
    2236             :     true, /* CoveredBySubRegs */
    2237             :     GR64BitSuperclasses,
    2238             :     nullptr
    2239             :   };
    2240             : 
    2241             :   extern const TargetRegisterClass ADDR64BitRegClass = {
    2242             :     &SystemZMCRegisterClasses[ADDR64BitRegClassID],
    2243             :     ADDR64BitSubClassMask,
    2244             :     SuperRegIdxSeqs + 8,
    2245             :     LaneBitmask(0x00000009),
    2246             :     0,
    2247             :     true, /* HasDisjunctSubRegs */
    2248             :     true, /* CoveredBySubRegs */
    2249             :     ADDR64BitSuperclasses,
    2250             :     nullptr
    2251             :   };
    2252             : 
    2253             :   extern const TargetRegisterClass VR128BitRegClass = {
    2254             :     &SystemZMCRegisterClasses[VR128BitRegClassID],
    2255             :     VR128BitSubClassMask,
    2256             :     SuperRegIdxSeqs + 2,
    2257             :     LaneBitmask(0x00000007),
    2258             :     0,
    2259             :     false, /* HasDisjunctSubRegs */
    2260             :     false, /* CoveredBySubRegs */
    2261             :     NullRegClasses,
    2262             :     nullptr
    2263             :   };
    2264             : 
    2265             :   extern const TargetRegisterClass VF128BitRegClass = {
    2266             :     &SystemZMCRegisterClasses[VF128BitRegClassID],
    2267             :     VF128BitSubClassMask,
    2268             :     SuperRegIdxSeqs + 2,
    2269             :     LaneBitmask(0x00000007),
    2270             :     0,
    2271             :     false, /* HasDisjunctSubRegs */
    2272             :     false, /* CoveredBySubRegs */
    2273             :     VF128BitSuperclasses,
    2274             :     nullptr
    2275             :   };
    2276             : 
    2277             :   extern const TargetRegisterClass FP128BitRegClass = {
    2278             :     &SystemZMCRegisterClasses[FP128BitRegClassID],
    2279             :     FP128BitSubClassMask,
    2280             :     SuperRegIdxSeqs + 2,
    2281             :     LaneBitmask(0x0000000F),
    2282             :     0,
    2283             :     true, /* HasDisjunctSubRegs */
    2284             :     true, /* CoveredBySubRegs */
    2285             :     NullRegClasses,
    2286             :     nullptr
    2287             :   };
    2288             : 
    2289             :   extern const TargetRegisterClass GR128BitRegClass = {
    2290             :     &SystemZMCRegisterClasses[GR128BitRegClassID],
    2291             :     GR128BitSubClassMask,
    2292             :     SuperRegIdxSeqs + 2,
    2293             :     LaneBitmask(0x0000000F),
    2294             :     0,
    2295             :     true, /* HasDisjunctSubRegs */
    2296             :     true, /* CoveredBySubRegs */
    2297             :     NullRegClasses,
    2298             :     nullptr
    2299             :   };
    2300             : 
    2301             :   extern const TargetRegisterClass ADDR128BitRegClass = {
    2302             :     &SystemZMCRegisterClasses[ADDR128BitRegClassID],
    2303             :     ADDR128BitSubClassMask,
    2304             :     SuperRegIdxSeqs + 2,
    2305             :     LaneBitmask(0x0000000F),
    2306             :     0,
    2307             :     true, /* HasDisjunctSubRegs */
    2308             :     true, /* CoveredBySubRegs */
    2309             :     ADDR128BitSuperclasses,
    2310             :     nullptr
    2311             :   };
    2312             : 
    2313             : } // end namespace SystemZ
    2314             : 
    2315             : namespace {
    2316             :   const TargetRegisterClass* const RegisterClasses[] = {
    2317             :     &SystemZ::GRX32BitRegClass,
    2318             :     &SystemZ::VR32BitRegClass,
    2319             :     &SystemZ::AR32BitRegClass,
    2320             :     &SystemZ::FP32BitRegClass,
    2321             :     &SystemZ::GR32BitRegClass,
    2322             :     &SystemZ::GRH32BitRegClass,
    2323             :     &SystemZ::ADDR32BitRegClass,
    2324             :     &SystemZ::CCRRegClass,
    2325             :     &SystemZ::AnyRegBitRegClass,
    2326             :     &SystemZ::AnyRegBit_with_subreg_h32_in_FP32BitRegClass,
    2327             :     &SystemZ::VR64BitRegClass,
    2328             :     &SystemZ::AnyRegBit_with_subreg_h64RegClass,
    2329             :     &SystemZ::CR64BitRegClass,
    2330             :     &SystemZ::FP64BitRegClass,
    2331             :     &SystemZ::GR64BitRegClass,
    2332             :     &SystemZ::ADDR64BitRegClass,
    2333             :     &SystemZ::VR128BitRegClass,
    2334             :     &SystemZ::VF128BitRegClass,
    2335             :     &SystemZ::FP128BitRegClass,
    2336             :     &SystemZ::GR128BitRegClass,
    2337             :     &SystemZ::ADDR128BitRegClass,
    2338             :   };
    2339             : } // end anonymous namespace
    2340             : 
    2341             : static const TargetRegisterInfoDesc SystemZRegInfoDesc[] = { // Extra Descriptors
    2342             :   { 0, false },
    2343             :   { 0, false },
    2344             :   { 0, false },
    2345             :   { 0, false },
    2346             :   { 0, false },
    2347             :   { 0, false },
    2348             :   { 0, false },
    2349             :   { 0, false },
    2350             :   { 0, false },
    2351             :   { 0, false },
    2352             :   { 0, false },
    2353             :   { 0, false },
    2354             :   { 0, false },
    2355             :   { 0, false },
    2356             :   { 0, false },
    2357             :   { 0, false },
    2358             :   { 0, false },
    2359             :   { 0, false },
    2360             :   { 0, false },
    2361             :   { 0, false },
    2362             :   { 0, false },
    2363             :   { 0, false },
    2364             :   { 0, false },
    2365             :   { 0, false },
    2366             :   { 0, false },
    2367             :   { 0, false },
    2368             :   { 0, false },
    2369             :   { 0, false },
    2370             :   { 0, false },
    2371             :   { 0, false },
    2372             :   { 0, false },
    2373             :   { 0, false },
    2374             :   { 0, false },
    2375             :   { 0, false },
    2376             :   { 0, true },
    2377             :   { 0, true },
    2378             :   { 0, true },
    2379             :   { 0, true },
    2380             :   { 0, true },
    2381             :   { 0, true },
    2382             :   { 0, true },
    2383             :   { 0, true },
    2384             :   { 0, true },
    2385             :   { 0, true },
    2386             :   { 0, true },
    2387             :   { 0, true },
    2388             :   { 0, true },
    2389             :   { 0, true },
    2390             :   { 0, true },
    2391             :   { 0, true },
    2392             :   { 0, true },
    2393             :   { 0, true },
    2394             :   { 0, true },
    2395             :   { 0, true },
    2396             :   { 0, true },
    2397             :   { 0, true },
    2398             :   { 0, true },
    2399             :   { 0, true },
    2400             :   { 0, true },
    2401             :   { 0, true },
    2402             :   { 0, true },
    2403             :   { 0, true },
    2404             :   { 0, true },
    2405             :   { 0, true },
    2406             :   { 0, true },
    2407             :   { 0, true },
    2408             :   { 0, true },
    2409             :   { 0, true },
    2410             :   { 0, true },
    2411             :   { 0, true },
    2412             :   { 0, true },
    2413             :   { 0, true },
    2414             :   { 0, true },
    2415             :   { 0, true },
    2416             :   { 0, true },
    2417             :   { 0, true },
    2418             :   { 0, true },
    2419             :   { 0, true },
    2420             :   { 0, true },
    2421             :   { 0, true },
    2422             :   { 0, true },
    2423             :   { 0, true },
    2424             :   { 0, true },
    2425             :   { 0, true },
    2426             :   { 0, true },
    2427             :   { 0, true },
    2428             :   { 0, true },
    2429             :   { 0, true },
    2430             :   { 0, true },
    2431             :   { 0, true },
    2432             :   { 0, true },
    2433             :   { 0, 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, true },
    2450             :   { 0, true },
    2451             :   { 0, true },
    2452             :   { 0, true },
    2453             :   { 0, true },
    2454             :   { 0, true },
    2455             :   { 0, true },
    2456             :   { 0, true },
    2457             :   { 0, true },
    2458             :   { 0, true },
    2459             :   { 0, true },
    2460             :   { 0, true },
    2461             :   { 0, true },
    2462             :   { 0, true },
    2463             :   { 0, true },
    2464             :   { 0, true },
    2465             :   { 0, true },
    2466             :   { 0, true },
    2467             :   { 0, true },
    2468             :   { 0, true },
    2469             :   { 0, true },
    2470             :   { 0, true },
    2471             :   { 0, true },
    2472             :   { 0, true },
    2473             :   { 0, true },
    2474             :   { 0, true },
    2475             :   { 0, true },
    2476             :   { 0, true },
    2477             :   { 0, 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, true },
    2494             :   { 0, true },
    2495             :   { 0, true },
    2496             :   { 0, true },
    2497             :   { 0, true },
    2498             :   { 0, true },
    2499             :   { 0, true },
    2500             :   { 0, true },
    2501             :   { 0, true },
    2502             :   { 0, true },
    2503             :   { 0, true },
    2504             :   { 0, true },
    2505             :   { 0, true },
    2506             :   { 0, true },
    2507             :   { 0, true },
    2508             :   { 0, true },
    2509             :   { 0, true },
    2510             :   { 0, true },
    2511             :   { 0, true },
    2512             :   { 0, true },
    2513             :   { 0, true },
    2514             :   { 0, true },
    2515             :   { 0, true },
    2516             :   { 0, true },
    2517             :   { 0, true },
    2518             :   { 0, true },
    2519             :   { 0, true },
    2520             :   { 0, true },
    2521             :   { 0, true },
    2522             :   { 0, true },
    2523             :   { 0, true },
    2524             :   { 0, true },
    2525             :   { 0, true },
    2526             :   { 0, true },
    2527             :   { 0, 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             : };
    2537          87 : unsigned SystemZGenRegisterInfo::composeSubRegIndicesImpl(unsigned IdxA, unsigned IdxB) const {
    2538             :   static const uint8_t RowMap[6] = {
    2539             :     0, 0, 0, 0, 0, 1, 
    2540             :   };
    2541             :   static const uint8_t Rows[2][6] = {
    2542             :     { 3, 0, 0, 0, 4, 0, },
    2543             :     { 1, 0, 0, 0, 5, 0, },
    2544             :   };
    2545             : 
    2546          87 :   --IdxA; assert(IdxA < 6);
    2547          87 :   --IdxB; assert(IdxB < 6);
    2548          87 :   return Rows[RowMap[IdxA]][IdxB];
    2549             : }
    2550             : 
    2551             :   struct MaskRolOp {
    2552             :     LaneBitmask Mask;
    2553             :     uint8_t  RotateLeft;
    2554             :   };
    2555             :   static const MaskRolOp LaneMaskComposeSequences[] = {
    2556             :     { LaneBitmask(0xFFFFFFFF),  0 }, { LaneBitmask::getNone(), 0 },   // Sequence 0
    2557             :     { LaneBitmask(0x00000001),  1 }, { LaneBitmask(0x00000008), 31 }, { LaneBitmask::getNone(), 0 },   // Sequence 2
    2558             :     { LaneBitmask(0xFFFFFFFF),  1 }, { LaneBitmask::getNone(), 0 },   // Sequence 5
    2559             :     { LaneBitmask(0xFFFFFFFF),  2 }, { LaneBitmask::getNone(), 0 },   // Sequence 7
    2560             :     { LaneBitmask(0xFFFFFFFF),  3 }, { LaneBitmask::getNone(), 0 }  // Sequence 9
    2561             :   };
    2562             :   static const MaskRolOp *const CompositeSequences[] = {
    2563             :     &LaneMaskComposeSequences[0], // to subreg_h32
    2564             :     &LaneMaskComposeSequences[2], // to subreg_h64
    2565             :     &LaneMaskComposeSequences[5], // to subreg_hh32
    2566             :     &LaneMaskComposeSequences[7], // to subreg_hl32
    2567             :     &LaneMaskComposeSequences[9], // to subreg_l32
    2568             :     &LaneMaskComposeSequences[0] // to subreg_l64
    2569             :   };
    2570             : 
    2571          11 : LaneBitmask SystemZGenRegisterInfo::composeSubRegIndexLaneMaskImpl(unsigned IdxA, LaneBitmask LaneMask) const {
    2572          11 :   --IdxA; assert(IdxA < 6 && "Subregister index out of bounds");
    2573             :   LaneBitmask Result;
    2574          26 :   for (const MaskRolOp *Ops = CompositeSequences[IdxA]; Ops->Mask.any(); ++Ops) {
    2575          15 :     LaneBitmask::Type M = LaneMask.getAsInteger() & Ops->Mask.getAsInteger();
    2576          15 :     if (unsigned S = Ops->RotateLeft)
    2577          13 :       Result |= LaneBitmask((M << S) | (M >> (LaneBitmask::BitWidth - S)));
    2578             :     else
    2579             :       Result |= LaneBitmask(M);
    2580             :   }
    2581          11 :   return Result;
    2582             : }
    2583             : 
    2584          21 : LaneBitmask SystemZGenRegisterInfo::reverseComposeSubRegIndexLaneMaskImpl(unsigned IdxA,  LaneBitmask LaneMask) const {
    2585          21 :   LaneMask &= getSubRegIndexLaneMask(IdxA);
    2586          21 :   --IdxA; assert(IdxA < 6 && "Subregister index out of bounds");
    2587             :   LaneBitmask Result;
    2588          46 :   for (const MaskRolOp *Ops = CompositeSequences[IdxA]; Ops->Mask.any(); ++Ops) {
    2589             :     LaneBitmask::Type M = LaneMask.getAsInteger();
    2590          25 :     if (unsigned S = Ops->RotateLeft)
    2591          16 :       Result |= LaneBitmask((M >> S) | (M << (LaneBitmask::BitWidth - S)));
    2592             :     else
    2593             :       Result |= LaneBitmask(M);
    2594             :   }
    2595          21 :   return Result;
    2596             : }
    2597             : 
    2598        4292 : const TargetRegisterClass *SystemZGenRegisterInfo::getSubClassWithSubReg(const TargetRegisterClass *RC, unsigned Idx) const {
    2599             :   static const uint8_t Table[21][6] = {
    2600             :     {   // GRX32Bit
    2601             :       0,        // subreg_h32
    2602             :       0,        // subreg_h64
    2603             :       0,        // subreg_hh32
    2604             :       0,        // subreg_hl32
    2605             :       0,        // subreg_l32
    2606             :       0,        // subreg_l64
    2607             :     },
    2608             :     {   // VR32Bit
    2609             :       0,        // subreg_h32
    2610             :       0,        // subreg_h64
    2611             :       0,        // subreg_hh32
    2612             :       0,        // subreg_hl32
    2613             :       0,        // subreg_l32
    2614             :       0,        // subreg_l64
    2615             :     },
    2616             :     {   // AR32Bit
    2617             :       0,        // subreg_h32
    2618             :       0,        // subreg_h64
    2619             :       0,        // subreg_hh32
    2620             :       0,        // subreg_hl32
    2621             :       0,        // subreg_l32
    2622             :       0,        // subreg_l64
    2623             :     },
    2624             :     {   // FP32Bit
    2625             :       0,        // subreg_h32
    2626             :       0,        // subreg_h64
    2627             :       0,        // subreg_hh32
    2628             :       0,        // subreg_hl32
    2629             :       0,        // subreg_l32
    2630             :       0,        // subreg_l64
    2631             :     },
    2632             :     {   // GR32Bit
    2633             :       0,        // subreg_h32
    2634             :       0,        // subreg_h64
    2635             :       0,        // subreg_hh32
    2636             :       0,        // subreg_hl32
    2637             :       0,        // subreg_l32
    2638             :       0,        // subreg_l64
    2639             :     },
    2640             :     {   // GRH32Bit
    2641             :       0,        // subreg_h32
    2642             :       0,        // subreg_h64
    2643             :       0,        // subreg_hh32
    2644             :       0,        // subreg_hl32
    2645             :       0,        // subreg_l32
    2646             :       0,        // subreg_l64
    2647             :     },
    2648             :     {   // ADDR32Bit
    2649             :       0,        // subreg_h32
    2650             :       0,        // subreg_h64
    2651             :       0,        // subreg_hh32
    2652             :       0,        // subreg_hl32
    2653             :       0,        // subreg_l32
    2654             :       0,        // subreg_l64
    2655             :     },
    2656             :     {   // CCR
    2657             :       0,        // subreg_h32
    2658             :       0,        // subreg_h64
    2659             :       0,        // subreg_hh32
    2660             :       0,        // subreg_hl32
    2661             :       0,        // subreg_l32
    2662             :       0,        // subreg_l64
    2663             :     },
    2664             :     {   // AnyRegBit
    2665             :       9,        // subreg_h32 -> AnyRegBit
    2666             :       12,       // subreg_h64 -> AnyRegBit_with_subreg_h64
    2667             :       0,        // subreg_hh32
    2668             :       0,        // subreg_hl32
    2669             :       15,       // subreg_l32 -> GR64Bit
    2670             :       0,        // subreg_l64
    2671             :     },
    2672             :     {   // AnyRegBit_with_subreg_h32_in_FP32Bit
    2673             :       10,       // subreg_h32 -> AnyRegBit_with_subreg_h32_in_FP32Bit
    2674             :       12,       // subreg_h64 -> AnyRegBit_with_subreg_h64
    2675             :       0,        // subreg_hh32
    2676             :       0,        // subreg_hl32
    2677             :       0,        // subreg_l32
    2678             :       0,        // subreg_l64
    2679             :     },
    2680             :     {   // VR64Bit
    2681             :       11,       // subreg_h32 -> VR64Bit
    2682             :       0,        // subreg_h64
    2683             :       0,        // subreg_hh32
    2684             :       0,        // subreg_hl32
    2685             :       0,        // subreg_l32
    2686             :       0,        // subreg_l64
    2687             :     },
    2688             :     {   // AnyRegBit_with_subreg_h64
    2689             :       12,       // subreg_h32 -> AnyRegBit_with_subreg_h64
    2690             :       12,       // subreg_h64 -> AnyRegBit_with_subreg_h64
    2691             :       0,        // subreg_hh32
    2692             :       0,        // subreg_hl32
    2693             :       0,        // subreg_l32
    2694             :       0,        // subreg_l64
    2695             :     },
    2696             :     {   // CR64Bit
    2697             :       0,        // subreg_h32
    2698             :       0,        // subreg_h64
    2699             :       0,        // subreg_hh32
    2700             :       0,        // subreg_hl32
    2701             :       0,        // subreg_l32
    2702             :       0,        // subreg_l64
    2703             :     },
    2704             :     {   // FP64Bit
    2705             :       14,       // subreg_h32 -> FP64Bit
    2706             :       0,        // subreg_h64
    2707             :       0,        // subreg_hh32
    2708             :       0,        // subreg_hl32
    2709             :       0,        // subreg_l32
    2710             :       0,        // subreg_l64
    2711             :     },
    2712             :     {   // GR64Bit
    2713             :       15,       // subreg_h32 -> GR64Bit
    2714             :       0,        // subreg_h64
    2715             :       0,        // subreg_hh32
    2716             :       0,        // subreg_hl32
    2717             :       15,       // subreg_l32 -> GR64Bit
    2718             :       0,        // subreg_l64
    2719             :     },
    2720             :     {   // ADDR64Bit
    2721             :       16,       // subreg_h32 -> ADDR64Bit
    2722             :       0,        // subreg_h64
    2723             :       0,        // subreg_hh32
    2724             :       0,        // subreg_hl32
    2725             :       16,       // subreg_l32 -> ADDR64Bit
    2726             :       0,        // subreg_l64
    2727             :     },
    2728             :     {   // VR128Bit
    2729             :       17,       // subreg_h32 -> VR128Bit
    2730             :       17,       // subreg_h64 -> VR128Bit
    2731             :       0,        // subreg_hh32
    2732             :       0,        // subreg_hl32
    2733             :       0,        // subreg_l32
    2734             :       0,        // subreg_l64
    2735             :     },
    2736             :     {   // VF128Bit
    2737             :       18,       // subreg_h32 -> VF128Bit
    2738             :       18,       // subreg_h64 -> VF128Bit
    2739             :       0,        // subreg_hh32
    2740             :       0,        // subreg_hl32
    2741             :       0,        // subreg_l32
    2742             :       0,        // subreg_l64
    2743             :     },
    2744             :     {   // FP128Bit
    2745             :       19,       // subreg_h32 -> FP128Bit
    2746             :       19,       // subreg_h64 -> FP128Bit
    2747             :       19,       // subreg_hh32 -> FP128Bit
    2748             :       0,        // subreg_hl32
    2749             :       0,        // subreg_l32
    2750             :       19,       // subreg_l64 -> FP128Bit
    2751             :     },
    2752             :     {   // GR128Bit
    2753             :       20,       // subreg_h32 -> GR128Bit
    2754             :       20,       // subreg_h64 -> GR128Bit
    2755             :       20,       // subreg_hh32 -> GR128Bit
    2756             :       20,       // subreg_hl32 -> GR128Bit
    2757             :       20,       // subreg_l32 -> GR128Bit
    2758             :       20,       // subreg_l64 -> GR128Bit
    2759             :     },
    2760             :     {   // ADDR128Bit
    2761             :       21,       // subreg_h32 -> ADDR128Bit
    2762             :       21,       // subreg_h64 -> ADDR128Bit
    2763             :       21,       // subreg_hh32 -> ADDR128Bit
    2764             :       21,       // subreg_hl32 -> ADDR128Bit
    2765             :       21,       // subreg_l32 -> ADDR128Bit
    2766             :       21,       // subreg_l64 -> ADDR128Bit
    2767             :     },
    2768             :   };
    2769             :   assert(RC && "Missing regclass");
    2770        4292 :   if (!Idx) return RC;
    2771        4292 :   --Idx;
    2772             :   assert(Idx < 6 && "Bad subreg");
    2773        4292 :   unsigned TV = Table[RC->getID()][Idx];
    2774        4292 :   return TV ? getRegClass(TV - 1) : nullptr;
    2775             : }
    2776             : 
    2777             : /// Get the weight in units of pressure for this register class.
    2778      107638 : const RegClassWeight &SystemZGenRegisterInfo::
    2779             : getRegClassWeight(const TargetRegisterClass *RC) const {
    2780             :   static const RegClassWeight RCWeightTable[] = {
    2781             :     {1, 32},    // GRX32Bit
    2782             :     {1, 32},    // VR32Bit
    2783             :     {0, 0},     // AR32Bit
    2784             :     {1, 16},    // FP32Bit
    2785             :     {1, 16},    // GR32Bit
    2786             :     {1, 16},    // GRH32Bit
    2787             :     {1, 15},    // ADDR32Bit
    2788             :     {0, 0},     // CCR
    2789             :     {1, 48},    // AnyRegBit
    2790             :     {1, 16},    // AnyRegBit_with_subreg_h32_in_FP32Bit
    2791             :     {1, 32},    // VR64Bit
    2792             :     {1, 16},    // AnyRegBit_with_subreg_h64
    2793             :     {0, 0},     // CR64Bit
    2794             :     {1, 16},    // FP64Bit
    2795             :     {2, 32},    // GR64Bit
    2796             :     {2, 30},    // ADDR64Bit
    2797             :     {1, 32},    // VR128Bit
    2798             :     {1, 16},    // VF128Bit
    2799             :     {2, 16},    // FP128Bit
    2800             :     {4, 32},    // GR128Bit
    2801             :     {4, 28},    // ADDR128Bit
    2802             :   };
    2803      215276 :   return RCWeightTable[RC->getID()];
    2804             : }
    2805             : 
    2806             : /// Get the weight in units of pressure for this register unit.
    2807       17756 : unsigned SystemZGenRegisterInfo::
    2808             : getRegUnitWeight(unsigned RegUnit) const {
    2809             :   assert(RegUnit < 97 && "invalid register unit");
    2810             :   // All register units have unit weight.
    2811       17756 :   return 1;
    2812             : }
    2813             : 
    2814             : 
    2815             : // Get the number of dimensions of register pressure.
    2816       13624 : unsigned SystemZGenRegisterInfo::getNumRegPressureSets() const {
    2817       13624 :   return 5;
    2818             : }
    2819             : 
    2820             : // Get the name of this register unit pressure set.
    2821           0 : const char *SystemZGenRegisterInfo::
    2822             : getRegPressureSetName(unsigned Idx) const {
    2823             :   static const char *const PressureNameTable[] = {
    2824             :     "FP32Bit",
    2825             :     "GR32Bit",
    2826             :     "GRH32Bit",
    2827             :     "GRX32Bit",
    2828             :     "VR32Bit",
    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       36585 : unsigned SystemZGenRegisterInfo::
    2836             : getRegPressureSetLimit(const MachineFunction &MF, unsigned Idx) const {
    2837             :   static const uint8_t PressureLimitTable[] = {
    2838             :     16,         // 0: FP32Bit
    2839             :     16,         // 1: GR32Bit
    2840             :     16,         // 2: GRH32Bit
    2841             :     32,         // 3: GRX32Bit
    2842             :     32,         // 4: VR32Bit
    2843             :   };
    2844       36585 :   return PressureLimitTable[Idx];
    2845             : }
    2846             : 
    2847             : /// Table of pressure sets per register class or unit.
    2848             : static const int RCSetsTable[] = {
    2849             :   /* 0 */ 1, 3, -1,
    2850             :   /* 3 */ 2, 3, -1,
    2851             :   /* 6 */ 0, 4, -1,
    2852             : };
    2853             : 
    2854             : /// Get the dimensions of register pressure impacted by this register class.
    2855             : /// Returns a -1 terminated array of pressure set IDs
    2856      121265 : const int* SystemZGenRegisterInfo::
    2857             : getRegClassPressureSets(const TargetRegisterClass *RC) const {
    2858             :   static const uint8_t RCSetStartTable[] = {
    2859             :     1,7,2,6,0,3,0,2,2,2,7,2,2,6,1,1,7,6,6,1,1,};
    2860      242530 :   return &RCSetsTable[RCSetStartTable[RC->getID()]];
    2861             : }
    2862             : 
    2863             : /// Get the dimensions of register pressure impacted by this register unit.
    2864             : /// Returns a -1 terminated array of pressure set IDs
    2865       17756 : const int* SystemZGenRegisterInfo::
    2866             : getRegUnitPressureSets(unsigned RegUnit) const {
    2867             :   assert(RegUnit < 97 && "invalid register unit");
    2868             :   static const uint8_t RUSetStartTable[] = {
    2869             :     2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,0,3,0,3,0,3,0,3,0,3,0,3,0,3,0,3,0,3,0,3,0,3,0,3,0,3,0,3,0,3,0,3,};
    2870       17756 :   return &RCSetsTable[RUSetStartTable[RegUnit]];
    2871             : }
    2872             : 
    2873             : extern const MCRegisterDesc SystemZRegDesc[];
    2874             : extern const MCPhysReg SystemZRegDiffLists[];
    2875             : extern const LaneBitmask SystemZLaneMaskLists[];
    2876             : extern const char SystemZRegStrings[];
    2877             : extern const char SystemZRegClassStrings[];
    2878             : extern const MCPhysReg SystemZRegUnitRoots[][2];
    2879             : extern const uint16_t SystemZSubRegIdxLists[];
    2880             : extern const MCRegisterInfo::SubRegCoveredBits SystemZSubRegIdxRanges[];
    2881             : extern const uint16_t SystemZRegEncodingTable[];
    2882             : // SystemZ Dwarf<->LLVM register mappings.
    2883             : extern const MCRegisterInfo::DwarfLLVMRegPair SystemZDwarfFlavour0Dwarf2L[];
    2884             : extern const unsigned SystemZDwarfFlavour0Dwarf2LSize;
    2885             : 
    2886             : extern const MCRegisterInfo::DwarfLLVMRegPair SystemZEHFlavour0Dwarf2L[];
    2887             : extern const unsigned SystemZEHFlavour0Dwarf2LSize;
    2888             : 
    2889             : extern const MCRegisterInfo::DwarfLLVMRegPair SystemZDwarfFlavour0L2Dwarf[];
    2890             : extern const unsigned SystemZDwarfFlavour0L2DwarfSize;
    2891             : 
    2892             : extern const MCRegisterInfo::DwarfLLVMRegPair SystemZEHFlavour0L2Dwarf[];
    2893             : extern const unsigned SystemZEHFlavour0L2DwarfSize;
    2894             : 
    2895         958 : SystemZGenRegisterInfo::
    2896             : SystemZGenRegisterInfo(unsigned RA, unsigned DwarfFlavour, unsigned EHFlavour,
    2897         958 :       unsigned PC, unsigned HwMode)
    2898             :   : TargetRegisterInfo(SystemZRegInfoDesc, RegisterClasses, RegisterClasses+21,
    2899             :              SubRegIndexNameTable, SubRegIndexLaneMaskTable,
    2900        1916 :              LaneBitmask(0xFFFFFFF8), RegClassInfos, HwMode) {
    2901             :   InitMCRegisterInfo(SystemZRegDesc, 194, RA, PC,
    2902             :                      SystemZMCRegisterClasses, 21,
    2903             :                      SystemZRegUnitRoots,
    2904             :                      97,
    2905             :                      SystemZRegDiffLists,
    2906             :                      SystemZLaneMaskLists,
    2907             :                      SystemZRegStrings,
    2908             :                      SystemZRegClassStrings,
    2909             :                      SystemZSubRegIdxLists,
    2910             :                      7,
    2911             :                      SystemZSubRegIdxRanges,
    2912             :                      SystemZRegEncodingTable);
    2913             : 
    2914         958 :   switch (DwarfFlavour) {
    2915           0 :   default:
    2916           0 :     llvm_unreachable("Unknown DWARF flavour");
    2917         958 :   case 0:
    2918         958 :     mapDwarfRegsToLLVMRegs(SystemZDwarfFlavour0Dwarf2L, SystemZDwarfFlavour0Dwarf2LSize, false);
    2919             :     break;
    2920             :   }
    2921         958 :   switch (EHFlavour) {
    2922           0 :   default:
    2923           0 :     llvm_unreachable("Unknown DWARF flavour");
    2924         958 :   case 0:
    2925         958 :     mapDwarfRegsToLLVMRegs(SystemZEHFlavour0Dwarf2L, SystemZEHFlavour0Dwarf2LSize, true);
    2926             :     break;
    2927             :   }
    2928             :   switch (DwarfFlavour) {
    2929             :   default:
    2930             :     llvm_unreachable("Unknown DWARF flavour");
    2931             :   case 0:
    2932         958 :     mapLLVMRegsToDwarfRegs(SystemZDwarfFlavour0L2Dwarf, SystemZDwarfFlavour0L2DwarfSize, false);
    2933             :     break;
    2934             :   }
    2935             :   switch (EHFlavour) {
    2936             :   default:
    2937             :     llvm_unreachable("Unknown DWARF flavour");
    2938             :   case 0:
    2939         958 :     mapLLVMRegsToDwarfRegs(SystemZEHFlavour0L2Dwarf, SystemZEHFlavour0L2DwarfSize, true);
    2940             :     break;
    2941             :   }
    2942         958 : }
    2943             : 
    2944             : static const MCPhysReg CSR_SystemZ_SaveList[] = { SystemZ::R6D, SystemZ::R7D, SystemZ::R8D, SystemZ::R9D, SystemZ::R10D, SystemZ::R11D, SystemZ::R12D, SystemZ::R13D, SystemZ::R14D, SystemZ::R15D, SystemZ::F8D, SystemZ::F9D, SystemZ::F10D, SystemZ::F11D, SystemZ::F12D, SystemZ::F13D, SystemZ::F14D, SystemZ::F15D, 0 };
    2945             : static const uint32_t CSR_SystemZ_RegMask[] = { 0x00000000, 0x00000000, 0x0003fc00, 0x03fc03c0, 0x03ff0000, 0xe3ff03ff, 0x00000003, };
    2946             : static const MCPhysReg CSR_SystemZ_AllRegs_SaveList[] = { SystemZ::R2D, SystemZ::R3D, SystemZ::R4D, SystemZ::R5D, SystemZ::R6D, SystemZ::R7D, SystemZ::R8D, SystemZ::R9D, SystemZ::R10D, SystemZ::R11D, SystemZ::R12D, SystemZ::R13D, SystemZ::R14D, SystemZ::R15D, SystemZ::F0D, SystemZ::F1D, SystemZ::F2D, SystemZ::F3D, SystemZ::F4D, SystemZ::F5D, SystemZ::F6D, SystemZ::F7D, SystemZ::F8D, SystemZ::F9D, SystemZ::F10D, SystemZ::F11D, SystemZ::F12D, SystemZ::F13D, SystemZ::F14D, SystemZ::F15D, 0 };
    2947             : static const uint32_t CSR_SystemZ_AllRegs_RegMask[] = { 0x00000000, 0x00000000, 0x0003fffc, 0x03fffffc, 0xf3fff000, 0xfbfff3ff, 0x00000003, };
    2948             : static const MCPhysReg CSR_SystemZ_AllRegs_Vector_SaveList[] = { SystemZ::R2D, SystemZ::R3D, SystemZ::R4D, SystemZ::R5D, SystemZ::R6D, SystemZ::R7D, SystemZ::R8D, SystemZ::R9D, SystemZ::R10D, SystemZ::R11D, SystemZ::R12D, SystemZ::R13D, SystemZ::R14D, SystemZ::R15D, SystemZ::V0, SystemZ::V1, SystemZ::V2, SystemZ::V3, SystemZ::V4, SystemZ::V5, SystemZ::V6, SystemZ::V7, SystemZ::V8, SystemZ::V9, SystemZ::V10, SystemZ::V11, SystemZ::V12, SystemZ::V13, SystemZ::V14, SystemZ::V15, SystemZ::V16, SystemZ::V17, SystemZ::V18, SystemZ::V19, SystemZ::V20, SystemZ::V21, SystemZ::V22, SystemZ::V23, SystemZ::V24, SystemZ::V25, SystemZ::V26, SystemZ::V27, SystemZ::V28, SystemZ::V29, SystemZ::V30, SystemZ::V31, 0 };
    2949             : static const uint32_t CSR_SystemZ_AllRegs_Vector_RegMask[] = { 0x00000000, 0xfffffffc, 0xffffffff, 0xffffffff, 0xf3fff3ff, 0xfbfff3ff, 0x00000003, };
    2950             : static const MCPhysReg CSR_SystemZ_SwiftError_SaveList[] = { SystemZ::R6D, SystemZ::R7D, SystemZ::R8D, SystemZ::R10D, SystemZ::R11D, SystemZ::R12D, SystemZ::R13D, SystemZ::R14D, SystemZ::R15D, SystemZ::F8D, SystemZ::F9D, SystemZ::F10D, SystemZ::F11D, SystemZ::F12D, SystemZ::F13D, SystemZ::F14D, SystemZ::F15D, 0 };
    2951             : static const uint32_t CSR_SystemZ_SwiftError_RegMask[] = { 0x00000000, 0x00000000, 0x0003fc00, 0x03fc03c0, 0x03f70000, 0xa3f703f7, 0x00000003, };
    2952             : 
    2953             : 
    2954          10 : ArrayRef<const uint32_t *> SystemZGenRegisterInfo::getRegMasks() const {
    2955             :   static const uint32_t *const Masks[] = {
    2956             :     CSR_SystemZ_RegMask,
    2957             :     CSR_SystemZ_AllRegs_RegMask,
    2958             :     CSR_SystemZ_AllRegs_Vector_RegMask,
    2959             :     CSR_SystemZ_SwiftError_RegMask,
    2960             :   };
    2961          10 :   return makeArrayRef(Masks);
    2962             : }
    2963             : 
    2964          10 : ArrayRef<const char *> SystemZGenRegisterInfo::getRegMaskNames() const {
    2965             :   static const char *const Names[] = {
    2966             :     "CSR_SystemZ",
    2967             :     "CSR_SystemZ_AllRegs",
    2968             :     "CSR_SystemZ_AllRegs_Vector",
    2969             :     "CSR_SystemZ_SwiftError",
    2970             :   };
    2971          10 :   return makeArrayRef(Names);
    2972             : }
    2973             : 
    2974             : const SystemZFrameLowering *
    2975       20574 : SystemZGenRegisterInfo::getFrameLowering(const MachineFunction &MF) {
    2976             :   return static_cast<const SystemZFrameLowering *>(
    2977       20574 :       MF.getSubtarget().getFrameLowering());
    2978             : }
    2979             : 
    2980             : } // end namespace llvm
    2981             : 
    2982             : #endif // GET_REGINFO_TARGET_DESC
    2983             : 

Generated by: LCOV version 1.13