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