1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
|
// Copyright 2015 the V8 project authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#if V8_TARGET_ARCH_S390
#include "src/s390/constants-s390.h"
namespace v8 {
namespace internal {
Instruction::OpcodeFormatType Instruction::OpcodeFormatTable[] = {
// Based on Figure B-3 in z/Architecture Principles of
// Operation.
TWO_BYTE_OPCODE, // 0x00
TWO_BYTE_OPCODE, // 0x01
TWO_BYTE_DISJOINT_OPCODE, // 0x02
TWO_BYTE_DISJOINT_OPCODE, // 0x03
ONE_BYTE_OPCODE, // 0x04
ONE_BYTE_OPCODE, // 0x05
ONE_BYTE_OPCODE, // 0x06
ONE_BYTE_OPCODE, // 0x07
ONE_BYTE_OPCODE, // 0x08
ONE_BYTE_OPCODE, // 0x09
ONE_BYTE_OPCODE, // 0x0A
ONE_BYTE_OPCODE, // 0x0B
ONE_BYTE_OPCODE, // 0x0C
ONE_BYTE_OPCODE, // 0x0D
ONE_BYTE_OPCODE, // 0x0E
ONE_BYTE_OPCODE, // 0x0F
ONE_BYTE_OPCODE, // 0x10
ONE_BYTE_OPCODE, // 0x11
ONE_BYTE_OPCODE, // 0x12
ONE_BYTE_OPCODE, // 0x13
ONE_BYTE_OPCODE, // 0x14
ONE_BYTE_OPCODE, // 0x15
ONE_BYTE_OPCODE, // 0x16
ONE_BYTE_OPCODE, // 0x17
ONE_BYTE_OPCODE, // 0x18
ONE_BYTE_OPCODE, // 0x19
ONE_BYTE_OPCODE, // 0x1A
ONE_BYTE_OPCODE, // 0x1B
ONE_BYTE_OPCODE, // 0x1C
ONE_BYTE_OPCODE, // 0x1D
ONE_BYTE_OPCODE, // 0x1E
ONE_BYTE_OPCODE, // 0x1F
ONE_BYTE_OPCODE, // 0x20
ONE_BYTE_OPCODE, // 0x21
ONE_BYTE_OPCODE, // 0x22
ONE_BYTE_OPCODE, // 0x23
ONE_BYTE_OPCODE, // 0x24
ONE_BYTE_OPCODE, // 0x25
ONE_BYTE_OPCODE, // 0x26
ONE_BYTE_OPCODE, // 0x27
ONE_BYTE_OPCODE, // 0x28
ONE_BYTE_OPCODE, // 0x29
ONE_BYTE_OPCODE, // 0x2A
ONE_BYTE_OPCODE, // 0x2B
ONE_BYTE_OPCODE, // 0x2C
ONE_BYTE_OPCODE, // 0x2D
ONE_BYTE_OPCODE, // 0x2E
ONE_BYTE_OPCODE, // 0x2F
ONE_BYTE_OPCODE, // 0x30
ONE_BYTE_OPCODE, // 0x31
ONE_BYTE_OPCODE, // 0x32
ONE_BYTE_OPCODE, // 0x33
ONE_BYTE_OPCODE, // 0x34
ONE_BYTE_OPCODE, // 0x35
ONE_BYTE_OPCODE, // 0x36
ONE_BYTE_OPCODE, // 0x37
ONE_BYTE_OPCODE, // 0x38
ONE_BYTE_OPCODE, // 0x39
ONE_BYTE_OPCODE, // 0x3A
ONE_BYTE_OPCODE, // 0x3B
ONE_BYTE_OPCODE, // 0x3C
ONE_BYTE_OPCODE, // 0x3D
ONE_BYTE_OPCODE, // 0x3E
ONE_BYTE_OPCODE, // 0x3F
ONE_BYTE_OPCODE, // 0x40
ONE_BYTE_OPCODE, // 0x41
ONE_BYTE_OPCODE, // 0x42
ONE_BYTE_OPCODE, // 0x43
ONE_BYTE_OPCODE, // 0x44
ONE_BYTE_OPCODE, // 0x45
ONE_BYTE_OPCODE, // 0x46
ONE_BYTE_OPCODE, // 0x47
ONE_BYTE_OPCODE, // 0x48
ONE_BYTE_OPCODE, // 0x49
ONE_BYTE_OPCODE, // 0x4A
ONE_BYTE_OPCODE, // 0x4B
ONE_BYTE_OPCODE, // 0x4C
ONE_BYTE_OPCODE, // 0x4D
ONE_BYTE_OPCODE, // 0x4E
ONE_BYTE_OPCODE, // 0x4F
ONE_BYTE_OPCODE, // 0x50
ONE_BYTE_OPCODE, // 0x51
ONE_BYTE_OPCODE, // 0x52
ONE_BYTE_OPCODE, // 0x53
ONE_BYTE_OPCODE, // 0x54
ONE_BYTE_OPCODE, // 0x55
ONE_BYTE_OPCODE, // 0x56
ONE_BYTE_OPCODE, // 0x57
ONE_BYTE_OPCODE, // 0x58
ONE_BYTE_OPCODE, // 0x59
ONE_BYTE_OPCODE, // 0x5A
ONE_BYTE_OPCODE, // 0x5B
ONE_BYTE_OPCODE, // 0x5C
ONE_BYTE_OPCODE, // 0x5D
ONE_BYTE_OPCODE, // 0x5E
ONE_BYTE_OPCODE, // 0x5F
ONE_BYTE_OPCODE, // 0x60
ONE_BYTE_OPCODE, // 0x61
ONE_BYTE_OPCODE, // 0x62
ONE_BYTE_OPCODE, // 0x63
ONE_BYTE_OPCODE, // 0x64
ONE_BYTE_OPCODE, // 0x65
ONE_BYTE_OPCODE, // 0x66
ONE_BYTE_OPCODE, // 0x67
ONE_BYTE_OPCODE, // 0x68
ONE_BYTE_OPCODE, // 0x69
ONE_BYTE_OPCODE, // 0x6A
ONE_BYTE_OPCODE, // 0x6B
ONE_BYTE_OPCODE, // 0x6C
ONE_BYTE_OPCODE, // 0x6D
ONE_BYTE_OPCODE, // 0x6E
ONE_BYTE_OPCODE, // 0x6F
ONE_BYTE_OPCODE, // 0x70
ONE_BYTE_OPCODE, // 0x71
ONE_BYTE_OPCODE, // 0x72
ONE_BYTE_OPCODE, // 0x73
ONE_BYTE_OPCODE, // 0x74
ONE_BYTE_OPCODE, // 0x75
ONE_BYTE_OPCODE, // 0x76
ONE_BYTE_OPCODE, // 0x77
ONE_BYTE_OPCODE, // 0x78
ONE_BYTE_OPCODE, // 0x79
ONE_BYTE_OPCODE, // 0x7A
ONE_BYTE_OPCODE, // 0x7B
ONE_BYTE_OPCODE, // 0x7C
ONE_BYTE_OPCODE, // 0x7D
ONE_BYTE_OPCODE, // 0x7E
ONE_BYTE_OPCODE, // 0x7F
ONE_BYTE_OPCODE, // 0x80
ONE_BYTE_OPCODE, // 0x81
ONE_BYTE_OPCODE, // 0x82
ONE_BYTE_OPCODE, // 0x83
ONE_BYTE_OPCODE, // 0x84
ONE_BYTE_OPCODE, // 0x85
ONE_BYTE_OPCODE, // 0x86
ONE_BYTE_OPCODE, // 0x87
ONE_BYTE_OPCODE, // 0x88
ONE_BYTE_OPCODE, // 0x89
ONE_BYTE_OPCODE, // 0x8A
ONE_BYTE_OPCODE, // 0x8B
ONE_BYTE_OPCODE, // 0x8C
ONE_BYTE_OPCODE, // 0x8D
ONE_BYTE_OPCODE, // 0x8E
ONE_BYTE_OPCODE, // 0x8F
ONE_BYTE_OPCODE, // 0x90
ONE_BYTE_OPCODE, // 0x91
ONE_BYTE_OPCODE, // 0x92
ONE_BYTE_OPCODE, // 0x93
ONE_BYTE_OPCODE, // 0x94
ONE_BYTE_OPCODE, // 0x95
ONE_BYTE_OPCODE, // 0x96
ONE_BYTE_OPCODE, // 0x97
ONE_BYTE_OPCODE, // 0x98
ONE_BYTE_OPCODE, // 0x99
ONE_BYTE_OPCODE, // 0x9A
ONE_BYTE_OPCODE, // 0x9B
TWO_BYTE_DISJOINT_OPCODE, // 0x9C
TWO_BYTE_DISJOINT_OPCODE, // 0x9D
TWO_BYTE_DISJOINT_OPCODE, // 0x9E
TWO_BYTE_DISJOINT_OPCODE, // 0x9F
TWO_BYTE_DISJOINT_OPCODE, // 0xA0
TWO_BYTE_DISJOINT_OPCODE, // 0xA1
TWO_BYTE_DISJOINT_OPCODE, // 0xA2
TWO_BYTE_DISJOINT_OPCODE, // 0xA3
TWO_BYTE_DISJOINT_OPCODE, // 0xA4
THREE_NIBBLE_OPCODE, // 0xA5
TWO_BYTE_DISJOINT_OPCODE, // 0xA6
THREE_NIBBLE_OPCODE, // 0xA7
ONE_BYTE_OPCODE, // 0xA8
ONE_BYTE_OPCODE, // 0xA9
ONE_BYTE_OPCODE, // 0xAA
ONE_BYTE_OPCODE, // 0xAB
ONE_BYTE_OPCODE, // 0xAC
ONE_BYTE_OPCODE, // 0xAD
ONE_BYTE_OPCODE, // 0xAE
ONE_BYTE_OPCODE, // 0xAF
ONE_BYTE_OPCODE, // 0xB0
ONE_BYTE_OPCODE, // 0xB1
TWO_BYTE_OPCODE, // 0xB2
TWO_BYTE_OPCODE, // 0xB3
TWO_BYTE_DISJOINT_OPCODE, // 0xB4
TWO_BYTE_DISJOINT_OPCODE, // 0xB5
TWO_BYTE_DISJOINT_OPCODE, // 0xB6
TWO_BYTE_DISJOINT_OPCODE, // 0xB7
TWO_BYTE_DISJOINT_OPCODE, // 0xB8
TWO_BYTE_OPCODE, // 0xB9
ONE_BYTE_OPCODE, // 0xBA
ONE_BYTE_OPCODE, // 0xBB
ONE_BYTE_OPCODE, // 0xBC
ONE_BYTE_OPCODE, // 0xBD
ONE_BYTE_OPCODE, // 0xBE
ONE_BYTE_OPCODE, // 0xBF
THREE_NIBBLE_OPCODE, // 0xC0
THREE_NIBBLE_OPCODE, // 0xC1
THREE_NIBBLE_OPCODE, // 0xC2
THREE_NIBBLE_OPCODE, // 0xC3
THREE_NIBBLE_OPCODE, // 0xC4
THREE_NIBBLE_OPCODE, // 0xC5
THREE_NIBBLE_OPCODE, // 0xC6
ONE_BYTE_OPCODE, // 0xC7
THREE_NIBBLE_OPCODE, // 0xC8
THREE_NIBBLE_OPCODE, // 0xC9
THREE_NIBBLE_OPCODE, // 0xCA
THREE_NIBBLE_OPCODE, // 0xCB
THREE_NIBBLE_OPCODE, // 0xCC
TWO_BYTE_DISJOINT_OPCODE, // 0xCD
TWO_BYTE_DISJOINT_OPCODE, // 0xCE
TWO_BYTE_DISJOINT_OPCODE, // 0xCF
ONE_BYTE_OPCODE, // 0xD0
ONE_BYTE_OPCODE, // 0xD1
ONE_BYTE_OPCODE, // 0xD2
ONE_BYTE_OPCODE, // 0xD3
ONE_BYTE_OPCODE, // 0xD4
ONE_BYTE_OPCODE, // 0xD5
ONE_BYTE_OPCODE, // 0xD6
ONE_BYTE_OPCODE, // 0xD7
ONE_BYTE_OPCODE, // 0xD8
ONE_BYTE_OPCODE, // 0xD9
ONE_BYTE_OPCODE, // 0xDA
ONE_BYTE_OPCODE, // 0xDB
ONE_BYTE_OPCODE, // 0xDC
ONE_BYTE_OPCODE, // 0xDD
ONE_BYTE_OPCODE, // 0xDE
ONE_BYTE_OPCODE, // 0xDF
ONE_BYTE_OPCODE, // 0xE0
ONE_BYTE_OPCODE, // 0xE1
ONE_BYTE_OPCODE, // 0xE2
TWO_BYTE_DISJOINT_OPCODE, // 0xE3
TWO_BYTE_DISJOINT_OPCODE, // 0xE4
TWO_BYTE_OPCODE, // 0xE5
TWO_BYTE_DISJOINT_OPCODE, // 0xE6
TWO_BYTE_DISJOINT_OPCODE, // 0xE7
ONE_BYTE_OPCODE, // 0xE8
ONE_BYTE_OPCODE, // 0xE9
ONE_BYTE_OPCODE, // 0xEA
TWO_BYTE_DISJOINT_OPCODE, // 0xEB
TWO_BYTE_DISJOINT_OPCODE, // 0xEC
TWO_BYTE_DISJOINT_OPCODE, // 0xED
ONE_BYTE_OPCODE, // 0xEE
ONE_BYTE_OPCODE, // 0xEF
ONE_BYTE_OPCODE, // 0xF0
ONE_BYTE_OPCODE, // 0xF1
ONE_BYTE_OPCODE, // 0xF2
ONE_BYTE_OPCODE, // 0xF3
ONE_BYTE_OPCODE, // 0xF4
ONE_BYTE_OPCODE, // 0xF5
ONE_BYTE_OPCODE, // 0xF6
ONE_BYTE_OPCODE, // 0xF7
ONE_BYTE_OPCODE, // 0xF8
ONE_BYTE_OPCODE, // 0xF9
ONE_BYTE_OPCODE, // 0xFA
ONE_BYTE_OPCODE, // 0xFB
ONE_BYTE_OPCODE, // 0xFC
ONE_BYTE_OPCODE, // 0xFD
TWO_BYTE_DISJOINT_OPCODE, // 0xFE
TWO_BYTE_DISJOINT_OPCODE, // 0xFF
};
// These register names are defined in a way to match the native disassembler
// formatting. See for example the command "objdump -d <binary file>".
const char* Registers::names_[kNumRegisters] = {
"r0", "r1", "r2", "r3", "r4", "r5", "r6", "r7",
"r8", "r9", "r10", "fp", "ip", "r13", "r14", "sp"};
const char* DoubleRegisters::names_[kNumDoubleRegisters] = {
"f0", "f1", "f2", "f3", "f4", "f5", "f6", "f7",
"f8", "f9", "f10", "f11", "f12", "f13", "f14", "f15"};
int DoubleRegisters::Number(const char* name) {
for (int i = 0; i < kNumDoubleRegisters; i++) {
if (strcmp(names_[i], name) == 0) {
return i;
}
}
// No register with the requested name found.
return kNoRegister;
}
int Registers::Number(const char* name) {
// Look through the canonical names.
for (int i = 0; i < kNumRegisters; i++) {
if (strcmp(names_[i], name) == 0) {
return i;
}
}
// No register with the requested name found.
return kNoRegister;
}
} // namespace internal
} // namespace v8
#endif // V8_TARGET_ARCH_S390
|