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

Generated by: LCOV version 1.13