/src/capstonenext/arch/SystemZ/SystemZMCTargetDesc.c
| Line | Count | Source (jump to first uncovered line) | 
| 1 |  | //===-- SystemZMCTargetDesc.cpp - SystemZ target descriptions -------------===// | 
| 2 |  | // | 
| 3 |  | //                     The LLVM Compiler Infrastructure | 
| 4 |  | // | 
| 5 |  | // This file is distributed under the University of Illinois Open Source | 
| 6 |  | // License. See LICENSE.TXT for details. | 
| 7 |  | // | 
| 8 |  | //===----------------------------------------------------------------------===// | 
| 9 |  |  | 
| 10 |  | /* Capstone Disassembly Engine */ | 
| 11 |  | /* By Nguyen Anh Quynh <aquynh@gmail.com>, 2013-2015 */ | 
| 12 |  |  | 
| 13 |  | #ifdef CAPSTONE_HAS_SYSZ | 
| 14 |  |  | 
| 15 |  | #include <capstone/platform.h> | 
| 16 |  | #include "SystemZMCTargetDesc.h" | 
| 17 |  |  | 
| 18 |  | #define GET_REGINFO_ENUM | 
| 19 |  | #include "SystemZGenRegisterInfo.inc" | 
| 20 |  |  | 
| 21 |  | const unsigned SystemZMC_GR32Regs[16] = { | 
| 22 |  |   SystemZ_R0L, SystemZ_R1L, SystemZ_R2L, SystemZ_R3L, | 
| 23 |  |   SystemZ_R4L, SystemZ_R5L, SystemZ_R6L, SystemZ_R7L, | 
| 24 |  |   SystemZ_R8L, SystemZ_R9L, SystemZ_R10L, SystemZ_R11L, | 
| 25 |  |   SystemZ_R12L, SystemZ_R13L, SystemZ_R14L, SystemZ_R15L | 
| 26 |  | }; | 
| 27 |  |  | 
| 28 |  | const unsigned SystemZMC_GRH32Regs[16] = { | 
| 29 |  |   SystemZ_R0H, SystemZ_R1H, SystemZ_R2H, SystemZ_R3H, | 
| 30 |  |   SystemZ_R4H, SystemZ_R5H, SystemZ_R6H, SystemZ_R7H, | 
| 31 |  |   SystemZ_R8H, SystemZ_R9H, SystemZ_R10H, SystemZ_R11H, | 
| 32 |  |   SystemZ_R12H, SystemZ_R13H, SystemZ_R14H, SystemZ_R15H | 
| 33 |  | }; | 
| 34 |  |  | 
| 35 |  | const unsigned SystemZMC_GR64Regs[16] = { | 
| 36 |  |   SystemZ_R0D, SystemZ_R1D, SystemZ_R2D, SystemZ_R3D, | 
| 37 |  |   SystemZ_R4D, SystemZ_R5D, SystemZ_R6D, SystemZ_R7D, | 
| 38 |  |   SystemZ_R8D, SystemZ_R9D, SystemZ_R10D, SystemZ_R11D, | 
| 39 |  |   SystemZ_R12D, SystemZ_R13D, SystemZ_R14D, SystemZ_R15D | 
| 40 |  | }; | 
| 41 |  |  | 
| 42 |  | const unsigned SystemZMC_GR128Regs[16] = { | 
| 43 |  |   SystemZ_R0Q, 0, SystemZ_R2Q, 0, | 
| 44 |  |   SystemZ_R4Q, 0, SystemZ_R6Q, 0, | 
| 45 |  |   SystemZ_R8Q, 0, SystemZ_R10Q, 0, | 
| 46 |  |   SystemZ_R12Q, 0, SystemZ_R14Q, 0 | 
| 47 |  | }; | 
| 48 |  |  | 
| 49 |  | const unsigned SystemZMC_FP32Regs[16] = { | 
| 50 |  |   SystemZ_F0S, SystemZ_F1S, SystemZ_F2S, SystemZ_F3S, | 
| 51 |  |   SystemZ_F4S, SystemZ_F5S, SystemZ_F6S, SystemZ_F7S, | 
| 52 |  |   SystemZ_F8S, SystemZ_F9S, SystemZ_F10S, SystemZ_F11S, | 
| 53 |  |   SystemZ_F12S, SystemZ_F13S, SystemZ_F14S, SystemZ_F15S | 
| 54 |  | }; | 
| 55 |  |  | 
| 56 |  | const unsigned SystemZMC_FP64Regs[16] = { | 
| 57 |  |   SystemZ_F0D, SystemZ_F1D, SystemZ_F2D, SystemZ_F3D, | 
| 58 |  |   SystemZ_F4D, SystemZ_F5D, SystemZ_F6D, SystemZ_F7D, | 
| 59 |  |   SystemZ_F8D, SystemZ_F9D, SystemZ_F10D, SystemZ_F11D, | 
| 60 |  |   SystemZ_F12D, SystemZ_F13D, SystemZ_F14D, SystemZ_F15D | 
| 61 |  | }; | 
| 62 |  |  | 
| 63 |  | const unsigned SystemZMC_FP128Regs[16] = { | 
| 64 |  |   SystemZ_F0Q, SystemZ_F1Q, 0, 0, | 
| 65 |  |   SystemZ_F4Q, SystemZ_F5Q, 0, 0, | 
| 66 |  |   SystemZ_F8Q, SystemZ_F9Q, 0, 0, | 
| 67 |  |   SystemZ_F12Q, SystemZ_F13Q, 0, 0 | 
| 68 |  | }; | 
| 69 |  |  | 
| 70 |  | const unsigned SystemZMC_VR32Regs[32] = { | 
| 71 |  |   SystemZ_F0S, SystemZ_F1S, SystemZ_F2S, SystemZ_F3S, | 
| 72 |  |   SystemZ_F4S, SystemZ_F5S, SystemZ_F6S, SystemZ_F7S, | 
| 73 |  |   SystemZ_F8S, SystemZ_F9S, SystemZ_F10S, SystemZ_F11S, | 
| 74 |  |   SystemZ_F12S, SystemZ_F13S, SystemZ_F14S, SystemZ_F15S, | 
| 75 |  |   SystemZ_F16S, SystemZ_F17S, SystemZ_F18S, SystemZ_F19S, | 
| 76 |  |   SystemZ_F20S, SystemZ_F21S, SystemZ_F22S, SystemZ_F23S, | 
| 77 |  |   SystemZ_F24S, SystemZ_F25S, SystemZ_F26S, SystemZ_F27S, | 
| 78 |  |   SystemZ_F28S, SystemZ_F29S, SystemZ_F30S, SystemZ_F31S | 
| 79 |  | }; | 
| 80 |  |  | 
| 81 |  | const unsigned SystemZMC_VR64Regs[32] = { | 
| 82 |  |   SystemZ_F0D, SystemZ_F1D, SystemZ_F2D, SystemZ_F3D, | 
| 83 |  |   SystemZ_F4D, SystemZ_F5D, SystemZ_F6D, SystemZ_F7D, | 
| 84 |  |   SystemZ_F8D, SystemZ_F9D, SystemZ_F10D, SystemZ_F11D, | 
| 85 |  |   SystemZ_F12D, SystemZ_F13D, SystemZ_F14D, SystemZ_F15D, | 
| 86 |  |   SystemZ_F16D, SystemZ_F17D, SystemZ_F18D, SystemZ_F19D, | 
| 87 |  |   SystemZ_F20D, SystemZ_F21D, SystemZ_F22D, SystemZ_F23D, | 
| 88 |  |   SystemZ_F24D, SystemZ_F25D, SystemZ_F26D, SystemZ_F27D, | 
| 89 |  |   SystemZ_F28D, SystemZ_F29D, SystemZ_F30D, SystemZ_F31D | 
| 90 |  | }; | 
| 91 |  |  | 
| 92 |  | const unsigned SystemZMC_VR128Regs[32] = { | 
| 93 |  |   SystemZ_V0, SystemZ_V1, SystemZ_V2, SystemZ_V3, | 
| 94 |  |   SystemZ_V4, SystemZ_V5, SystemZ_V6, SystemZ_V7, | 
| 95 |  |   SystemZ_V8, SystemZ_V9, SystemZ_V10, SystemZ_V11, | 
| 96 |  |   SystemZ_V12, SystemZ_V13, SystemZ_V14, SystemZ_V15, | 
| 97 |  |   SystemZ_V16, SystemZ_V17, SystemZ_V18, SystemZ_V19, | 
| 98 |  |   SystemZ_V20, SystemZ_V21, SystemZ_V22, SystemZ_V23, | 
| 99 |  |   SystemZ_V24, SystemZ_V25, SystemZ_V26, SystemZ_V27, | 
| 100 |  |   SystemZ_V28, SystemZ_V29, SystemZ_V30, SystemZ_V31 | 
| 101 |  | }; | 
| 102 |  |  | 
| 103 |  | const unsigned SystemZMC_AR32Regs[16] = { | 
| 104 |  |   SystemZ_A0, SystemZ_A1, SystemZ_A2, SystemZ_A3, | 
| 105 |  |   SystemZ_A4, SystemZ_A5, SystemZ_A6, SystemZ_A7, | 
| 106 |  |   SystemZ_A8, SystemZ_A9, SystemZ_A10, SystemZ_A11, | 
| 107 |  |   SystemZ_A12, SystemZ_A13, SystemZ_A14, SystemZ_A15 | 
| 108 |  | }; | 
| 109 |  |  | 
| 110 |  | const unsigned SystemZMC_CR64Regs[16] = { | 
| 111 |  |   SystemZ_C0, SystemZ_C1, SystemZ_C2, SystemZ_C3, | 
| 112 |  |   SystemZ_C4, SystemZ_C5, SystemZ_C6, SystemZ_C7, | 
| 113 |  |   SystemZ_C8, SystemZ_C9, SystemZ_C10, SystemZ_C11, | 
| 114 |  |   SystemZ_C12, SystemZ_C13, SystemZ_C14, SystemZ_C15 | 
| 115 |  | }; | 
| 116 |  |  | 
| 117 |  | /* All register classes that have 0-15.  */ | 
| 118 |  | #define DEF_REG16(N) \ | 
| 119 |  |     [SystemZ_R ## N ## L] = N, \ | 
| 120 |  |     [SystemZ_R ## N ## H] = N, \ | 
| 121 |  |     [SystemZ_R ## N ## D] = N, \ | 
| 122 |  |     [SystemZ_F ## N ## S] = N, \ | 
| 123 |  |     [SystemZ_F ## N ## D] = N, \ | 
| 124 |  |     [SystemZ_V ## N] = N, \ | 
| 125 |  |     [SystemZ_A ## N] = N, \ | 
| 126 |  |     [SystemZ_C ## N] = N | 
| 127 |  |  | 
| 128 |  | /* All register classes that (also) have 16-31.  */ | 
| 129 |  | #define DEF_REG32(N) \ | 
| 130 |  |     [SystemZ_F ## N ## S] = N, \ | 
| 131 |  |     [SystemZ_F ## N ## D] = N, \ | 
| 132 |  |     [SystemZ_V ## N] = N | 
| 133 |  |  | 
| 134 |  | static const uint8_t Map[SystemZ_NUM_TARGET_REGS] = { | 
| 135 |  |     DEF_REG16(0), | 
| 136 |  |     DEF_REG16(1), | 
| 137 |  |     DEF_REG16(2), | 
| 138 |  |     DEF_REG16(3), | 
| 139 |  |     DEF_REG16(4), | 
| 140 |  |     DEF_REG16(5), | 
| 141 |  |     DEF_REG16(6), | 
| 142 |  |     DEF_REG16(8), | 
| 143 |  |     DEF_REG16(9), | 
| 144 |  |     DEF_REG16(10), | 
| 145 |  |     DEF_REG16(11), | 
| 146 |  |     DEF_REG16(12), | 
| 147 |  |     DEF_REG16(13), | 
| 148 |  |     DEF_REG16(14), | 
| 149 |  |     DEF_REG16(15), | 
| 150 |  |  | 
| 151 |  |     DEF_REG32(16), | 
| 152 |  |     DEF_REG32(17), | 
| 153 |  |     DEF_REG32(18), | 
| 154 |  |     DEF_REG32(19), | 
| 155 |  |     DEF_REG32(20), | 
| 156 |  |     DEF_REG32(21), | 
| 157 |  |     DEF_REG32(22), | 
| 158 |  |     DEF_REG32(23), | 
| 159 |  |     DEF_REG32(24), | 
| 160 |  |     DEF_REG32(25), | 
| 161 |  |     DEF_REG32(26), | 
| 162 |  |     DEF_REG32(27), | 
| 163 |  |     DEF_REG32(28), | 
| 164 |  |     DEF_REG32(29), | 
| 165 |  |     DEF_REG32(30), | 
| 166 |  |     DEF_REG32(31), | 
| 167 |  |  | 
| 168 |  |     /* The float Q registers are non-sequential.  */ | 
| 169 |  |     [SystemZ_F0Q] = 0, | 
| 170 |  |     [SystemZ_F1Q] = 1, | 
| 171 |  |     [SystemZ_F4Q] = 4, | 
| 172 |  |     [SystemZ_F5Q] = 5, | 
| 173 |  |     [SystemZ_F8Q] = 8, | 
| 174 |  |     [SystemZ_F9Q] = 9, | 
| 175 |  |     [SystemZ_F12Q] = 12, | 
| 176 |  |     [SystemZ_F13Q] = 13, | 
| 177 |  |  | 
| 178 |  |     /* The integer Q registers are all even.  */ | 
| 179 |  |     [SystemZ_R0Q] = 0, | 
| 180 |  |     [SystemZ_R2Q] = 2, | 
| 181 |  |     [SystemZ_R4Q] = 4, | 
| 182 |  |     [SystemZ_R6Q] = 6, | 
| 183 |  |     [SystemZ_R8Q] = 8, | 
| 184 |  |     [SystemZ_R10Q] = 10, | 
| 185 |  |     [SystemZ_R12Q] = 12, | 
| 186 |  |     [SystemZ_R14Q] = 14, | 
| 187 |  | }; | 
| 188 |  |  | 
| 189 |  | unsigned SystemZMC_getFirstReg(unsigned Reg) | 
| 190 | 0 | { | 
| 191 |  |   // assert(Reg < SystemZ_NUM_TARGET_REGS); | 
| 192 | 0 |   return Map[Reg]; | 
| 193 | 0 | } | 
| 194 |  |  | 
| 195 |  | #endif |