Coverage Report

Created: 2025-07-01 07:03

/src/capstonev5/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